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, , 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,unitab)
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)
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
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)
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)
301 ELSEIF (idir == 2)
THEN
305 ELSEIF (idir == 3)
THEN
311 n3=usr2sys(n3,itabm1,mess,
id)
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
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
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)
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 IF(p(4)==zero.AND.p(6)==zero) p(5)=sign(one,p(5))
448 IF(p(7)==zero.AND.p(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 IF( ity == 2 .OR. ity == 3 )
THEN
474 rot(k) = rtrans(lsubmodel(cur_submod)%IDTRANS(j),k+2)
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
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)
589 rot(l) = rtrans(lsubmodel(cur_submod)%IDTRANS(k),l+2)
596 sub_level = sub_level - 1
597 cur_submod = lsubmodel(cur_submod)%IFATHER
599 IF(lsubmodel(idsub)%NBTRANS /=
603 iskn(4,j)=1000000001 + (j-numskw-numsph_tmp-2)
604 WRITE(iout,
'(1X,I10,1X,3F16.7,3F16.7)')iskn(4,j),
606 WRITE(iout,
'(3(12X,3F16.7/))') (skew(k,j),k=4,9)
614 .
CALL udouble(iskn(4,1),liskn,
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)