48 . NSN ,LSUBMODEL,RTRANS ,NOM_OPT ,UNITAB)
57 USE format_mod ,
ONLY : lfield
61#include "implicit_f.inc"
65#include "analyse_name.inc"
80 TYPE (UNIT_TYPE_),
INTENT(IN) :: UNITAB
81 INTEGER ISKN(LISKN,*), ITAB(*), ITABM1(*), NSN(*)
82 my_real skew(lskew,*), x(3,*), rtrans(ntransf,*)
84 INTEGER NOM_OPT(LNOPT1,*)
88 INTEGER I, N, IMOV, J, N1, N2, N3, K, NSK,
90 . idsub,ity,l,readpt,j1,j2,numsph_tmp,sub_level,cur_submod,
91 . idir,iflagunit,
id,uid,cpt
92 my_real p(12), pnor1, pnor2, pnorm1, det1, det2, det3, det, pp,bid,
94 CHARACTER(LEN=NCHARTITLE)::NOMSG
95 CHARACTER(LEN=NCHARTITLE) :: TITR
97 CHARACTER(LEN=NCHARKEY) :: KEY
98 CHARACTER(LEN=NCHARFIELD) :: DIR
105 DATA mess/
'MOVING SKEW SYSTEM DEFINITION '/
106 DATA nomsg/
'global skew system '/
122 CALL fretitl(nomsg,nom_opt(lnopt1-ltitr+1,1),ltitr)
124 IF(numskw==0)
GOTO 201
141 . submodel_id = sub_id,
142 . option_titr = titr,
146 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,i+1),ltitr)
151 IF (unitab%UNIT_ID(j) == uid)
THEN
156 IF (uid/=0.AND.iflagunit==0)
THEN
157 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
158 . i2=uid,i1=
id,c1=
'SKEW SYSTEM',c2=
'SKEW SYSTEM',
162 IF(key(1:3)==
'FIX')
THEN
166 CALL hm_get_floatv(
'globaloriginx',p(10),is_available,lsubmodel,unitab)
167 CALL hm_get_floatv(
'globaloriginy',p(11),is_available,lsubmodel,unitab)
168 CALL hm_get_floatv(
'globaloriginz',p(12),is_available,lsubmodel,unitab)
170 CALL hm_get_floatv(
'globalyaxisx',p(4),is_available,lsubmodel,unitab)
171 CALL hm_get_floatv(
'globalyaxisy',p(5),is_available,lsubmodel,unitab)
172 CALL hm_get_floatv(
'globalyaxisz',p(6),is_available,lsubmodel,unitab)
174 CALL hm_get_floatv(
'globalzaxisx',p(7),is_available,lsubmodel,unitab)
175 CALL hm_get_floatv(
'globalzaxisy',p(8),is_available,lsubmodel
176 CALL hm_get_floatv(
'globalzaxisz',p(9),is_available,lsubmodel,unitab)
178 ELSEIF (key(1:4)==
'MOV2')
THEN
183 CALL hm_get_intv(
'originnodeid',n1,is_available,lsubmodel)
184 CALL hm_get_intv(
'axisnodeid',n2,is_available,lsubmodel)
185 CALL hm_get_intv(
'planenodeid',n3,is_available,lsubmodel)
193 CALL hm_get_intv(
'originnodeid',n1,is_available,lsubmodel)
194 CALL hm_get_intv(
'axisnodeid',n2,is_available,lsubmodel)
195 CALL hm_get_intv(
'planenodeid',n3,is_available,lsubmodel)
201 IF(dir(k:k) ==
'X'.OR.dir(k:k) == 'x
')IDIR = 1
202 IF(DIR(K:K) == 'y.OR.
'DIR(K:K) == 'y
')IDIR = 2
203 IF(DIR(K:K) == 'z.OR.
'DIR(K:K) == 'z
')IDIR = 3
213 N1=USR2SYS(N1,ITABM1,MESS,ID)
214 N2=USR2SYS(N2,ITABM1,MESS,ID)
215 N3=USR2SYS(N3,ITABM1,MESS,ID)
216 CALL ANODSET(N1, CHECK_USED)
217 CALL ANODSET(N2, CHECK_USED)
218 CALL ANODSET(N3, CHECK_USED)
232 P(4)=P(8)*P(3)-P(9)*P(2)
233 P(5)=P(9)*P(1)-P(7)*P(3)
234 P(6)=P(7)*P(2)-P(8)*P(1)
238 P(1)=P(5)*P(9)-P(6)*P(8)
239 P(2)=P(6)*P(7)-P(4)*P(9)
240 P(3)=P(4)*P(8)-P(5)*P(7)
250 PNOR1=SQRT(P(7)*P(7)+P(8)*P(8)+P(9)*P(9))
251 IF (PNOR1 < EM20) THEN
252 CALL ANCMSG(MSGID=162,
254 . ANMODE=ANINFO_BLIND_1,
260 PNOR2=SQRT(P(1)*P(1)+P(2)*P(2)+P(3)*P(3))
261 IF (PNOR2 > EM20) THEN
262 PNORM1=ONE/(PNOR1*PNOR2)
263 DET1=ABS((P(8)*P(3)-P(9)*P(2))*PNORM1)
264 DET2=ABS((P(9)*P(1)-P(7)*P(3))*PNORM1)
265 DET3=ABS((P(7)*P(2)-P(8)*P(1))*PNORM1)
266 DET= MAX(DET1,DET2,DET3)
271 CALL ANCMSG(MSGID=163,
272 . MSGTYPE=MSGWARNING,
273 . ANMODE=ANINFO_BLIND_1,
275 IF(ABS(P(2)) < EM5) THEN
284 ELSEIF (IMOV==1) THEN
285 N1=USR2SYS(N1,ITABM1,MESS,ID)
286 N2=USR2SYS(N2,ITABM1,MESS,ID)
287 CALL ANODSET(N1, CHECK_USED)
288 CALL ANODSET(N2, CHECK_USED)
301 ELSEIF (IDIR == 2) THEN
305 ELSEIF (IDIR == 3) THEN
311 N3=USR2SYS(N3,ITABM1,MESS,ID)
312 CALL ANODSET(N3, CHECK_USED)
319 ELSEIF (IDIR == 2) THEN
323 ELSEIF (IDIR == 3) THEN
346 IF (IDIR == 1) PNOR1=SQRT(P(1)*P(1)+P(2)*P(2)+P(3)*P(3))
347 IF (IDIR == 2) PNOR1=SQRT(P(4)*P(4)+P(5)*P(5)+P(6)*P(6))
348 IF (IDIR == 3) PNOR1=SQRT(P(7)*P(7)+P(8)*P(8)+P(9)*P(9))
349 IF(PNOR1<1.E-20) THEN
350 CALL ANCMSG(MSGID=162,
352 . ANMODE=ANINFO_BLIND_1,
358 IF (IDIR == 1) PNOR2=SQRT(P(4)*P(4)+P(5)*P(5)+P(6)*P(6))
359 IF (IDIR == 2) PNOR2=SQRT(P(7)*P(7)+P(8)*P(8)+P(9)*P(9))
360 IF (IDIR == 3) PNOR2=SQRT(P(1)*P(1)+P(2)*P(2)+P(3)*P(3))
361 IF(PNOR2>1.E-20) THEN
362 PNORM1=1./(PNOR1*PNOR2)
364 DET1=ABS((P(1)*P(5)-P(2)*P(4))*PNORM1)
365 DET2=ABS((P(1)*P(6)-P(3)*P(4))*PNORM1)
366 DET3=ABS((P(2)*P(6)-P(3)*P(5))*PNORM1)
367 ELSEIF (IDIR == 2) THEN
368 DET1=ABS((P(4)*P(8)-P(5)*P(7))*PNORM1)
369 DET2=ABS((P(4)*P(9)-P(6)*P(7))*PNORM1)
370 DET3=ABS((P(5)*P(9)-P(6)*P(8))*PNORM1)
371 ELSEIF (IDIR == 3) THEN
372 DET1=ABS((P(7)*P(2)-P(8)*P(1))*PNORM1)
373 DET2=ABS((P(7)*P(3)-P(9)*P(1))*PNORM1)
374 DET3=ABS((P(8)*P(3)-P(9)*P(2))*PNORM1)
376 DET= MAX(DET1,DET2,DET3)
381 CALL ANCMSG(MSGID=163,
382 . MSGTYPE=MSGWARNING,
383 . ANMODE=ANINFO_BLIND_1,
386 IF(ABS(P(2))>EM5) THEN
391 ELSEIF (IDIR == 2) THEN
392 IF(ABS(P(5))>EM5) THEN
397 ELSEIF (IDIR == 3) THEN
398 IF(ABS(P(8))>EM5) THEN
409 P(7)=P(2)*P(6)-P(3)*P(5)
410 P(8)=P(3)*P(4)-P(1)*P(6)
411 P(9)=P(1)*P(5)-P(2)*P(4)
412 ELSEIF (IDIR == 2) THEN
413 P(1)=P(5)*P(9)-P(6)*P(8)
414 P(2)=P(6)*P(7)-P(4)*P(9)
415 P(3)=P(4)*P(8)-P(5)*P(7)
416 ELSEIF (IDIR == 3) THEN
417 P(4)=P(8)*P(3)-P(9)*P(2)
418 P(5)=P(9)*P(1)-P(7)*P(3)
419 P(6)=P(7)*P(2)-P(8)*P(1)
425 P(4)=P(8)*P(3)-P(9)*P(2)
426 P(5)=P(9)*P(1)-P(7)*P(3)
427 P(6)=P(7)*P(2)-P(8)*P(1)
428 ELSEIF (IDIR == 2) THEN
429 P(7)=P(2)*P(6)-P(3)*P(5)
430 P(8)=P(3)*P(4)-P(1)*P(6)
431 P(9)=P(1)*P(5)-P(2)*P(4)
432 ELSEIF (IDIR == 3) THEN
433 P(1)=P(5)*P(9)-P(6)*P(8)
434 P(2)=P(6)*P(7)-P(4)*P(9)
435 P(3)=P(4)*P(8)-P(5)*P(7)
447.AND.
IF(P(4)==ZEROP(6)==ZERO) P(5)=SIGN(ONE,P(5))
448.AND.
IF(P(7)==ZEROP(8)==ZERO) P(9)=SIGN(ONE,P(9))
452 P(1)=P(5)*P(9)-P(6)*P(8)
453 P(2)=P(6)*P(7)-P(4)*P(9)
454 P(3)=P(4)*P(8)-P(5)*P(7)
458 P(4)=P(8)*P(3)-P(9)*P(2)
459 P(5)=P(9)*P(1)-P(7)*P(3)
460 P(6)=P(7)*P(2)-P(8)*P(1)
465 IF (LSUBMODEL(J)%NOSUBMOD == SUB_ID) IDSUB = J
468 SUB_LEVEL = LSUBMODEL(IDSUB)%LEVEL
469 DO WHILE (SUB_LEVEL /= 0)
470 DO J=1,LSUBMODEL(CUR_SUBMOD)%NBTRANS
471 ITY = RTRANS(LSUBMODEL(CUR_SUBMOD)%IDTRANS(J),2)
472.OR.
IF( ITY == 2 ITY == 3 ) THEN
474 ROT(K) = RTRANS(LSUBMODEL(CUR_SUBMOD)%IDTRANS(J),K+2)
476 CALL EULER_VROT(X0,P(1),ROT)
477 CALL EULER_VROT(X0,P(4),ROT)
478 CALL EULER_VROT(X0,P(7),ROT)
481 SUB_LEVEL = SUB_LEVEL - 1
482 CUR_SUBMOD = LSUBMODEL(CUR_SUBMOD)%IFATHER
484 IF(LSUBMODEL(IDSUB)%NBTRANS /=0)
485 . CALL SUBROTPOINT(P(10),P(11),P(12),RTRANS,SUB_ID,LSUBMODEL)
491 PP=SQRT(P(1)*P(1)+P(2)*P(2)+P(3)*P(3))
495 PP=SQRT(P(4)*P(4)+P(5)*P(5)+P(6)*P(6))
499 PP=SQRT(P(7)*P(7)+P(8)*P(8)+P(9)*P(9))
510 WRITE (IOUT,'(a)
')TITRE(85)
511 WRITE (IOUT,'(a)
')TITRE(81)
524 WRITE(IOUT,'(1x,4i10,1x,3f16.7,3f16.7)
')NSK,N1,N2,N3,
525 & (SKEW(K,J),K=1,3),(SKEW(K,J),K=10,12)
526 WRITE(IOUT,'(3(42x,3f16.7/))
') (SKEW(K,J),K=4,9)
530 NSN(K) = IABS(NSN(K))
538 DO J=(NUMSKW+1)+1,(NUMSKW+1)+NUMSPH
549 ISKN(4,J)=-(J-NUMSKW)
556 WRITE (IOUT,'(a)
')TITRE(118)
557 WRITE (IOUT,'(a)
')TITRE(119)
560 J1 = (NUMSKW+1)+NUMSPH+1
561 J2 = (NUMSKW+1)+NUMSPH+NSUBMOD
566 J2 = (NUMSKW+1)+NSUBMOD
579 IDSUB = J-(NUMSKW+NUMSPH_TMP+1)
581 SUB_LEVEL = LSUBMODEL(IDSUB)%LEVEL
584 DO WHILE (SUB_LEVEL /= 0)
585 DO K=1,LSUBMODEL(CUR_SUBMOD)%NBTRANS
586 ITY = RTRANS(LSUBMODEL(CUR_SUBMOD)%IDTRANS(K),2)
587.OR.
IF( ITY == 2 ITY == 3 )THEN
589 ROT(L) = RTRANS(LSUBMODEL(CUR_SUBMOD)%IDTRANS(K),L+2)
591 CALL EULER_VROT(X0,SKEW(1,J),ROT)
592 CALL EULER_VROT(X0,SKEW(4,J),ROT)
593 CALL EULER_VROT(X0,SKEW(7,J),ROT)
596 SUB_LEVEL = SUB_LEVEL - 1
597 CUR_SUBMOD = LSUBMODEL(CUR_SUBMOD)%IFATHER
599 IF(LSUBMODEL(IDSUB)%NBTRANS /=0)
600 . CALL SUBROTPOINT(SKEW(10,J),SKEW(11,J),SKEW(12,J),
601 . RTRANS,LSUBMODEL(IDSUB)%NOSUBMOD,LSUBMODEL)
603 ISKN(4,J)=1000000001 + (J-NUMSKW-NUMSPH_TMP-2)
604 WRITE(IOUT,'(1x,i10,1x,3f16.7,3f16.7)
')ISKN(4,J),
605 . (SKEW(K,J),K=1,3),(SKEW(K,J),K=10,12)
606 WRITE(IOUT,'(3(12x,3f16.7/))
') (SKEW(K,J),K=4,9)
614 . CALL UDOUBLE(ISKN(4,1),LISKN,
615 . NUMSKW+1+MIN(IUN,NSPCOND)*NUMSPH+NSUBMOD,
620 1000 FORMAT(5X,'number
',8X,'n1
',8X,'n2
',8X,'n3
',10X,'vectors
',42X,
622 1001 FORMAT(5X,'number
',10X,'vectors
',42X,'origin')
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)