54 SUBROUTINE lectrans(X ,IGRNOD ,ITAB ,ITABM1,UNITAB,
55 . LSUBMODEL,RTRANS ,IGRSURF,ISKWN ,SKEW ,
56 . LISKN ,LSKEW ,NSPCOND,NUMSPH,SISKWN,
67 USE format_mod ,
ONLY : lfield
68 USE min_dist_grnod_to_surface_mod,
ONLY : min_dist_grnod_to_surface
69 USE min_dist_grnod_to_xyzpos_mod,
ONLY : min_dist_grnod_to_xyzpos
70 USE transform_translate_in_local_skew_mod,
ONLY : transform_translate_in_local_skew
74#include "implicit_f.inc"
84 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
85 INTEGER ITAB(*),ITABM1(*)
86 INTEGER,
INTENT(IN) :: LISKN,LSKEW,NSPCOND,NUMSPH,SISKWN,SSKEW
87 INTEGER,
INTENT(IN) :: ISKWN(LISKN,SISKWN/LISKN)
88 my_real,
INTENT(IN) :: skew(lskew,sskew/lskew)
95 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRNOD) :: IGRNOD
96 TYPE (SURF_) ,
TARGET,
DIMENSION(NSURF) :: IGRSURF
100 INTEGER I,I0,I1,I2,I3,I4,I5,I6,
101 . N0,N1,N2,N3,N4,N5,N6,IERROR,
102 . J,IS,ID,UID,IGU,IGS,NN,NTRANS,STAT,
103 . iflagunit,itranssub,sub_id,k,
104 . ibid,cpt,igsurf,isurf,iskew,idir,pflag,pflag0,xyzflag(3),
105 . nseg,nno,surfnod,sub_index,isk,isk0,xyzflag0(3)
107 . lx,ly,lz,tx,ty,tz,r,s,rx,ry,rz,sx,sy,sz,angle,at,fac_l,
110 . vr(3),x0(3),x1(3),x2(3),x3(3),x4(3),x5(3),x6(3),
111 . rot(9),pp(3,3),qq(3,3),p(3),norm1, norm2, norm3, scal1,
112 . scal2, scal3, eps,xyzpos(3),xyzpos0(3)
113 CHARACTER(LEN=NCHARFIELD) :: KEY
114 CHARACTER(LEN=NCHARFIELD) :: MOT1
115 CHARACTER(LEN=NCHARTITLE) :: TITR
116 CHARACTER(LEN=NCHARLINE) ::SOLVERKEYWORD
117 CHARACTER(LEN=NCHARFIELD) :: DIR
119 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
120 LOGICAL IS_AVAILABLE,IS_FOUND
121 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INO, TAGNODE
125 INTEGER NGR2USR,USRTOS
126 EXTERNAL NGR2USR,USRTOS
132 is_available = .false.
133 IF (ntrans > 0)
WRITE (iout,100)
148 . submodel_id = sub_id,
149 . submodel_index = sub_index,
150 . option_titr = titr,
154 IF (key(1:3) ==
'TRA')
THEN
158 CALL hm_get_intv(
'GR_NODE',igu,is_available,lsubmodel)
159 CALL hm_get_intv(
'node1',n0,is_available,lsubmodel)
160 CALL hm_get_intv(
'node2',n1,is_available,lsubmodel)
161 CALL hm_get_intv(
'SUBMODEL',itranssub,is_available,lsubmodel)
162 CALL hm_get_intv(
'skew_ID',isk0,is_available,lsubmodel)
163 IF( isk0 == 0 .AND. sub_index /= 0 ) isk0 = lsubmodel(sub_index)%SKEW
167 CALL hm_get_floatv(
'translation_x',tx,is_available,lsubmodel,unitab)
168 CALL hm_get_floatv(
'translation_y',ty,is_available,lsubmodel,unitab)
169 CALL hm_get_floatv(
'translation_z',tz,is_available,lsubmodel,unitab)
171 IF (itranssub /= 0) cycle
175 ingr2usr => igrnod(1:ngrnod)%ID
176 igs = ngr2usr(igu,ingr2usr,ngrnod)
191 IF (isk0 == iskwn(4,j+1))
THEN
197 IF(.NOT. is_found)
THEN
206 IF (n0 > 0 .OR. n1 > 0)
THEN
208 i0 = usrtos(n0,itabm1)
209 i1 = usrtos(n1,itabm1)
226 tx = x(1,i1) - x(1,i0)
227 ty = x(2,i1) - x(2,i0)
228 tz = x(3,i1) - x(3,i0)
235 CALL transform_translate_in_local_skew(
236 . igrnod(igs)%ENTITY ,igrnod(igs)%NENTITY ,x ,numnod , isk ,
237 . tx ,ty ,tz ,skew , lskew,
240 s = sqrt(tx*tx + ty*ty + tz*tz)
242 WRITE(iout,500) id,igu
243 IF (n0 > 0 .AND. n1 > 0)
WRITE(iout,200) n0,n1
244 WRITE(iout,510) s,tx,ty,tz,isk0
247 DO j=1,igrnod(igs)%NENTITY
248 is=igrnod(igs)%ENTITY(j)
249 WRITE(iout,3500) itab(is),x(1,is),x(2,is),x(3,is)
253 ELSEIF (key(1:3) ==
'ROT')
THEN
257 CALL hm_get_intv(
'GR_NODE',igu,is_available,lsubmodel)
258 CALL hm_get_intv(
'node1',n0,is_available,lsubmodel)
259 CALL hm_get_intv(
'node2',n1,is_available,lsubmodel)
260 CALL hm_get_intv(
'SUBMODEL',itranssub,is_available,lsubmodel)
264 CALL hm_get_floatv(
'rotation_point1_x',x0(1),is_available,lsubmodel,unitab)
265 CALL hm_get_floatv(
'rotation_point1_y',x0(2),is_available,lsubmodel,unitab)
266 CALL hm_get_floatv(
'rotation_point1_z',x0(3),is_available,lsubmodel,unitab)
267 CALL hm_get_floatv('rotation_point2_x
',X1(1),IS_AVAILABLE,LSUBMODEL,UNITAB)
268 CALL HM_GET_FLOATV('rotation_point2_y
',X1(2),IS_AVAILABLE,LSUBMODEL,UNITAB)
269 CALL HM_GET_FLOATV('rotation_point2_z
',X1(3),IS_AVAILABLE,LSUBMODEL,UNITAB)
270 CALL HM_GET_FLOATV('rotation_angle
',ANGLE,IS_AVAILABLE,LSUBMODEL,UNITAB)
275 . CALL SUBROTPOINT(X0(1),X0(2),X0(3),RTRANS,SUB_ID,LSUBMODEL)
278 . CALL SUBROTPOINT(X1(1),X1(2),X1(3),RTRANS,SUB_ID,LSUBMODEL)
280 IF (ITRANSSUB /= 0) CYCLE
284.OR.
IF (N0 > 0 N1 > 0) THEN
285 I0 = USRTOS(N0,ITABM1)
286 I1 = USRTOS(N1,ITABM1)
288 CALL ANCMSG(MSGID=694,
296 CALL ANCMSG(MSGID=694,
310 X0(1) = X0(1) * FAC_L
311 X0(2) = X0(2) * FAC_L
312 X0(3) = X0(3) * FAC_L
313 X1(1) = X1(1) * FAC_L
314 X1(2) = X1(2) * FAC_L
315 X1(3) = X1(3) * FAC_L
320 S = SQRT(TX*TX + TY*TY + TZ*TZ)
321 AT = ANGLE * PI/HUNDRED80 /MAX(EM20,S)
325 INGR2USR => IGRNOD(1:NGRNOD)%ID
326 IGS = NGR2USR(IGU,INGR2USR,NGRNOD)
328 CALL ANCMSG(MSGID=1865,
336 IF (ANGLE /= ZERO) THEN
337 CALL EULER_MROT (TX,TY,TZ,ROT)
338 DO J=1,IGRNOD(IGS)%NENTITY
339 IS=IGRNOD(IGS)%ENTITY(J)
340 CALL EULER_VROT (X0,X(1,IS),ROT)
344 WRITE(IOUT,600) ID,IGU
345.AND.
IF (N0 > 0 N1 > 0) WRITE(IOUT,200) N0,N1
346 WRITE(IOUT,610) X0(1),X0(2),X0(3),TX,TY,TZ,ANGLE
349 DO J=1,IGRNOD(IGS)%NENTITY
350 IS=IGRNOD(IGS)%ENTITY(J)
351 WRITE(IOUT,3500) ITAB(IS),X(1,IS),X(2,IS),X(3,IS)
355 ELSEIF (KEY(1:3) == 'sym
') THEN
359 CALL HM_GET_INTV('gr_node
',IGU,IS_AVAILABLE,LSUBMODEL)
360 CALL HM_GET_INTV('node1
',N0,IS_AVAILABLE,LSUBMODEL)
361 CALL HM_GET_INTV('node2
',N1,IS_AVAILABLE,LSUBMODEL)
362 CALL HM_GET_INTV('submodel
',ITRANSSUB,IS_AVAILABLE,LSUBMODEL)
366 CALL HM_GET_FLOATV('reflect_point1_x
',X0(1),IS_AVAILABLE,LSUBMODEL,UNITAB)
367 CALL HM_GET_FLOATV('reflect_point1_y',x0(2),is_available,lsubmodel,unitab)
368 CALL hm_get_floatv(
'reflect_point1_z',x0(3),is_available,lsubmodel,unitab)
369 CALL hm_get_floatv(
'reflect_point2_x',x1(1),is_available,lsubmodel,unitab)
370 CALL hm_get_floatv(
'reflect_point2_y',x1(2),is_available,lsubmodel,unitab)
371 CALL hm_get_floatv(
'reflect_point2_z',x1(3),is_available,lsubmodel,unitab)
373 IF (itranssub /= 0) cycle
378 .
CALL subrotpoint(x0(1),x0(2),x0(3),rtrans,sub_id,lsubmodel)
380 .
CALL subrotpoint(x1(1),x1(2),x1(3),rtrans,sub_id,lsubmodel)
382 ingr2usr => igrnod(1:ngrnod)%ID
383 igs = ngr2usr(igu,ingr2usr,ngrnod)
393 IF (n0 > 0 .OR. n1 > 0)
THEN
394 i0 = usrtos(n0,itabm1)
395 i1 = usrtos(n1,itabm1)
419 x0(1) = x0(1) * fac_l
420 x0(2) = x0(2) * fac_l
421 x0(3) = x0(3) * fac_l
422 x1(1) = x1(1) * fac_l
423 x1(2) = x1(2) * fac_l
424 x1(3) = x1(3) * fac_l
429 s = one/
max(sqrt(tx*tx + ty*ty + tz*tz),em20)
433 DO j=1,igrnod(igs)%NENTITY
434 is=igrnod(igs)%ENTITY(j)
438 s = sx*tx + sy*ty + sz*tz
439 x(1,is) = x(1,is) - two*tx*s
440 x(2,is) = x(2,is) - two*ty*s
441 x(3,is) = x(3,is) - two*tz*s
444 WRITE(iout,700) id,igu
445 IF (n0 > 0 .AND. n1 > 0)
WRITE(iout,200) n0,n1
446 WRITE(iout,710) x0(1),x0(2),x0(3),tx,ty,tz
449 DO j=1,igrnod(igs)%NENTITY
450 is=igrnod(igs)%ENTITY(j)
451 WRITE(iout,3500) itab(is),x(1,is),x(2,is),x(3,is)
455 ELSEIF (key(1:3) ==
'SCA')
THEN
459 CALL hm_get_intv(
'GR_NODE',igu,is_available,lsubmodel)
460 CALL hm_get_intv(
'node1',n0,is_available,lsubmodel)
461 CALL hm_get_intv(
'SUBMODEL',itranssub,is_available,lsubmodel)
465 CALL hm_get_floatv(
'scalefactor_x',tx,is_available,lsubmodel,unitab)
466 CALL hm_get_floatv(
'scalefactor_y',ty,is_available,lsubmodel,unitab)
467 CALL hm_get_floatv(
'scalefactor_z',tz,is_available,lsubmodel,unitab)
469 IF (itranssub /= 0) cycle
473 IF (tx == zero) tx = one
474 IF (ty == zero) ty = one
475 IF (tz == zero) tz = one
477 .
CALL subrotvect(tx,ty,tz,rtrans,sub_id,lsubmodel)
479 ingr2usr => igrnod(1:ngrnod)%ID
480 igs = ngr2usr(igu,ingr2usr,ngrnod)
491 i0 = usrtos(n0,itabm1)
508 DO j=1,igrnod(igs)%NENTITY
509 is=igrnod(igs)%ENTITY(j)
510 x(1,is) = x0(1) + (x(1,is) - x0(1)) * tx
511 x(2,is) = x0(2) + (x(2,is) - x0(2)) * ty
512 x(3,is) = x0(3) + (x(3,is) - x0(3)) * tz
515 WRITE(iout,800) id,igu
516 IF (n0 > 0)
WRITE(iout,300) n0
517 WRITE(iout,810) tx,ty,tz
520 DO j=1,igrnod(igs)%NENTITY
521 is=igrnod(igs)%ENTITY(j)
522 WRITE(iout,3500) itab(is),x(1,is),x(2,is),x(3,is)
526 ELSEIF (key(1:6) ==
'MATRIX')
THEN
528 CALL hm_get_intv(
'GR_NODE',igu,is_available,lsubmodel)
529 CALL hm_get_floatv(
'vector_1_x',rtrans(i,3),is_available,lsubmodel,unitab)
530 CALL hm_get_floatv(
'vector_1_y',rtrans(i,6),is_available,lsubmodel,unitab)
531 CALL hm_get_floatv(
'vector_1_z',rtrans(i,9),is_available,lsubmodel,unitab)
532 CALL hm_get_floatv(
'vector_2_x',rtrans(i,4),is_available,lsubmodel,unitab)
533 CALL hm_get_floatv(
'vector_2_y',rtrans(i,7),is_available,lsubmodel,unitab)
534 CALL hm_get_floatv(
'vector_2_z',rtrans(i,10),is_available,lsubmodel,unitab)
535 CALL hm_get_floatv(
'vector_3_x',rtrans(i,5),is_available,lsubmodel,unitab)
536 CALL hm_get_floatv(
'vector_3_y',rtrans(i,8),is_available,lsubmodel,unitab)
537 CALL hm_get_floatv(
'vector_3_z',rtrans(i,11),is_available,lsubmodel,unitab)
538 CALL hm_get_floatv(
'position_x',rtrans(i,15),is_available,lsubmodel,unitab)
539 CALL hm_get_floatv(
'position_y',rtrans(i,16),is_available,lsubmodel,unitab)
540 CALL hm_get_floatv(
'position_z',rtrans(i,17),is_available,lsubmodel,unitab)
541 CALL hm_get_intv(
'SUBMODEL',itranssub,is_available,lsubmodel)
543 IF (itranssub /= 0) cycle
547 ingr2usr => igrnod(1:ngrnod)%ID
548 igs = ngr2usr(igu,ingr2usr,ngrnod)
560 norm1 = sqrt(rtrans(i,3)**2+rtrans(i,6)**2+rtrans(i,9)**2)
561 norm2 = sqrt(rtrans(i,4)**2+rtrans(i,7)**2+rtrans(i,10)**2)
562 norm3 = sqrt(rtrans(i,5)**2+rtrans(i,8)**2+rtrans(i,11)**2)
563 scal1 = rtrans(i,3)*rtrans(i,4)+rtrans(i,6)*rtrans(i,7)+
564 . rtrans(i,9)*rtrans(i,10)
565 scal2 = rtrans(i,3)*rtrans(i,5)+rtrans(i,6)*rtrans(i,8)+
566 . rtrans(i,9)*rtrans(i,11)
567 scal3 = rtrans(i,4)*rtrans(i,5)+rtrans(i,7)*rtrans(i,8)+
568 . rtrans(i,10)*rtrans(i,11)
569 IF(abs(one-norm1) > eps .OR. abs(one-norm2) > eps .OR.
570 . abs(one-norm3) > eps .OR.
571 . scal1 > (eps * norm1*norm2) .OR. scal2 > (eps * norm1*norm3)
572 . .OR. scal3 > (eps * norm2*norm3))
THEN
578 DO j=1,igrnod(igs)%NENTITY
579 is=igrnod(igs)%ENTITY(j)
580 xp = rtrans(i,3)*x(1,is) + rtrans(i,6)*x(2,is) + rtrans(i,9)*x(3,is)
582 yp = rtrans(i,4)*x(1,is) + rtrans(i,7)*x(2,is) + rtrans(i,10)*x(3,is)
591 WRITE(iout,900) id,igu
594 . rtrans(i,3),rtrans(i,6),rtrans(i,9),rtrans(i,15),
595 . rtrans(i,4),rtrans(i,7),rtrans(i,10),rtrans(i,16),
596 . rtrans(i,5),rtrans(i,8),rtrans(i,11),rtrans(i,17)
598 ELSEIF (key(1:8) ==
'POSITION')
THEN
600 CALL hm_get_intv(
'GR_NODE',igu,is_available,lsubmodel)
601 CALL hm_get_intv(
'SUBMODEL',itranssub,is_available,lsubmodel)
604 CALL hm_get_intv(
'node1',n1,is_available,lsubmodel)
605 CALL hm_get_intv(
'node2',n2,is_available,lsubmodel)
606 CALL hm_get_intv(
'node3',n3,is_available,lsubmodel)
607 CALL hm_get_intv(
'node4',n4,is_available,lsubmodel)
608 CALL hm_get_intv(
'node5',n5,is_available,lsubmodel)
609 CALL hm_get_intv(
'node6',n6,is_available,lsubmodel)
611 CALL hm_get_floatv(
'X_Point_1',x1(1),is_available,lsubmodel,unitab)
612 CALL hm_get_floatv(
'Y_Point_1',x1(2),is_available,lsubmodel,unitab)
613 CALL hm_get_floatv(
'Z_Point_1',x1(3),is_available,lsubmodel,unitab)
614 CALL hm_get_floatv(
'X_Point_2',x2(1),is_available,lsubmodel,unitab)
615 CALL hm_get_floatv(
'Y_Point_2',x2(2),is_available,lsubmodel,unitab)
616 CALL hm_get_floatv(
'Z_Point_2',x2(3),is_available,lsubmodel,unitab)
617 CALL hm_get_floatv(
'X_Point_3',x3(1),is_available,lsubmodel,unitab)
618 CALL hm_get_floatv(
'Y_Point_3',x3(2),is_available,lsubmodel,unitab)
619 CALL hm_get_floatv(
'Z_Point_3',x3(3),is_available,lsubmodel,unitab)
620 CALL hm_get_floatv(
'X_Point_4',x4(1),is_available,lsubmodel,unitab)
621 CALL hm_get_floatv(
'Y_Point_4',x4(2),is_available,lsubmodel,unitab)
622 CALL hm_get_floatv(
'Z_Point_4',x4(3),is_available,lsubmodel,unitab)
623 CALL hm_get_floatv(
'X_Point_5',x5(1),is_available,lsubmodel,unitab)
624 CALL hm_get_floatv(
'Y_Point_5',x5(2),is_available,lsubmodel,unitab)
625 CALL hm_get_floatv(
'Z_Point_5',x5(3),is_available,lsubmodel,unitab)
626 CALL hm_get_floatv(
'X_Point_6',x6(1),is_available,lsubmodel,unitab)
627 CALL hm_get_floatv(
'Y_Point_6',x6(2),is_available,lsubmodel,unitab)
628 CALL hm_get_floatv(
'Z_Point_6',x6(3),is_available,lsubmodel,unitab)
630 IF (itranssub /= 0) cycle
637 CALL subrotpoint(x1(1),x1(2),x1(3),rtrans,sub_id,lsubmodel)
638 CALL subrotpoint(x2(1),x2(2),x2(3),rtrans,sub_id,lsubmodel)
639 CALL subrotpoint(x3(1),x3(2),x3(3),rtrans,sub_id,lsubmodel)
640 CALL subrotpoint(x4(1),x4(2),x4(3),rtrans,sub_id,lsubmodel)
641 CALL subrotpoint(x5(1),x5(2),x5(3),rtrans,sub_id,lsubmodel)
642 CALL subrotpoint(x6(1),x6(2),x6(3),rtrans,sub_id,lsubmodel)
645 ingr2usr => igrnod(1:ngrnod)%ID
646 igs = ngr2usr(igu,ingr2usr,ngrnod)
658 IF (n1 > 0 .OR. n2 > 0 .OR. n3 > 0 .OR.
659 . n4 > 0 .OR. n5 > 0 .OR. n6 > 0)
THEN
660 i1 = usrtos(n1,itabm1)
661 i2 = usrtos(n2,itabm1)
662 i3 = usrtos(n3,itabm1)
663 i4 = usrtos(n4,itabm1)
664 i5 = usrtos(n5,itabm1)
665 i6 = usrtos(n6,itabm1)
733 x1(1) = x1(1) * fac_l
734 x1(2) = x1(2) * fac_l
735 x1(3) = x1(3) * fac_l
736 x2(1) = x2(1) * fac_l
737 x2(2) = x2(2) * fac_l
738 x2(3) = x2(3) * fac_l
739 x3(1) = x3(1) * fac_l
740 x3(2) = x3(2) * fac_l
741 x3(3) = x3(3) * fac_l
742 x4(1) = x4(1) * fac_l
743 x4(2) = x4(2) * fac_l
744 x4(3) = x4(3) * fac_l
745 x5(1) = x5(1) * fac_l
746 x5(2) = x5(2) * fac_l
747 x5(3) = x5(3) * fac_l
748 x6(1) = x6(1) * fac_l
749 x6(2) = x6(2) * fac_l
750 x6(3) = x6(3) * fac_l
754 IF(ierror==1.OR.ierror==3)
THEN
757 . anmode=aninfo_blind_1,
762 . msgtype=msgwarning,
763 . anmode=aninfo_blind_1,
770 . anmode=aninfo_blind_1,
778 rtrans(i,j+2) = rot(j)
780 rtrans(i,12:14) = zero
781 rtrans(i,15:17) = zero
787 . msgtype=msgwarning,
788 . anmode=aninfo_blind_1,
792 rot(1)=qq(1,1)*pp(1,1)+qq(1,2)*pp(1,2)+qq(1,3)*pp(1,3)
793 rot(4)=qq(1,1)*pp(2,1)+qq(1,2)*pp(2,2)+qq(1,3)*pp(2,3)
794 rot(7)=qq(1,1)*pp(3,1)+qq(1,2)*pp(3,2)+qq(1,3)*pp(3,3)
795 rot(2)=qq(2,1)*pp(1,1)+qq(2,2)*pp(1,2)+qq(2,3)*pp(1,3)
796 rot(5)=qq(2,1)*pp(2,1)+qq(2,2)*pp(2,2)+qq(2,3)*pp(2,3)
797 rot(8)=qq(2,1)*pp(3,1)+qq(2,2)*pp(3,2)+qq(2,3)*pp(3,3)
798 rot(3)=qq(3,1)*pp(1,1)+qq(3,2)*pp(1,2)+qq(3,3)*pp(1,
799 rot(6)=qq(3,1)*pp(2,1)+qq(3,2)*pp(2,2)+qq(3,3)*pp(2,3)
800 rot(9)=qq(3,1)*pp(3,1)+qq(3,2)*pp(3,2)+qq(3,3)*pp(3,3)
803 rtrans(i,j+2) = rot(j)
806 rtrans(i,j+11) = x1(j)
809 rtrans(i,j+14) = x4(j)
814 DO j=1,igrnod(igs)%NENTITY
815 k = igrnod(igs)%ENTITY(j)
819 x(1,k) = x4(1) + rot(1)*xp + rot(4)*yp + rot(7)*zp
820 x(2,k) = x4(2) + rot(2)*xp + rot(5)*yp + rot(8)*zp
821 x(3,k) = x4(3) + rot(3)*xp + rot(6)*yp + rot(9)*zp
824 WRITE(iout,1000) id,igu
826 . (rtrans(i,k+11) , k=1,3),
827 . (rtrans(i,k+14) , k=1,3),
828 . rtrans(i,3),rtrans(i,6), rtrans(i,9),
829 . rtrans(i,4),rtrans(i,7),rtrans(i,10),
830 . rtrans(i,5),rtrans(i,8),rtrans(i,11)
834 DO j=1,igrnod(igs)%NENTITY
835 is=igrnod(igs)%ENTITY(j)
836 WRITE(iout,3500) itab(is),x(1,is),x(2,is),x(3,is)
839 ELSEIF (key(1:12) ==
'AUTOPOSITION')
THEN
845 CALL hm_get_intv(
'GR_NODE',igu,is_available,lsubmodel)
846 CALL hm_get_intv(
'GR_SURF',igsurf,is_available,lsubmodel)
848 CALL hm_get_intv(
'skew_ID',isk0,is_available,lsubmodel)
850 IF( isk0 == 0 .AND. sub_index /= 0 ) isk0 = lsubmodel(sub_index)%SKEW
854 IF(dir(k:k) ==
'X'.OR.dir(k:k) ==
'x')idir = 1
855 IF(dir(k:k) ==
'Y'.OR.dir(k:k) ==
'y')idir = 2
856 IF(dir(k:k) ==
'Z'.OR.dir(k:k) ==
'z')idir = 3
859 CALL hm_get_intv(
'Pflag',pflag,is_available,lsubmodel)
865 CALL hm_get_floatv(
'Ypos',xyzpos(2),is_available,lsubmodel,unitab)
866 CALL hm_get_floatv(
'Zpos',xyzpos(3),is_available,lsubmodel,unitab)
868 CALL hm_get_intv(
'Xflag',xyzflag(1),is_available,lsubmodel)
869 CALL hm_get_intv(
'Yflag',xyzflag(2),is_available,lsubmodel)
870 CALL hm_get_intv(
'Zflag',xyzflag(3),is_available,lsubmodel)
876 xyzpos0(:) = xyzpos(:)
877 xyzflag0(:) = xyzflag(:)
879 if(pflag == 0) pflag = 1
880 if(xyzflag(1) == 0) xyzflag(1) = 1
881 if(xyzflag(2) == 0) xyzflag(2) = 1
882 if(xyzflag(3) == 0) xyzflag(3) = 1
888 IF (isk0 == iskwn(4,j+1))
THEN
894 IF(.NOT. is_found)
THEN
904 ingr2usr => igrnod(1:ngrnod)%ID
905 igs = ngr2usr(igu,ingr2usr,ngrnod)
923 IF(igrsurf(j)%ID == igsurf)
THEN
928 IF (isurf == 0 . and. igsurf > 0)
THEN
939 ALLOCATE(ino(1:4*igrsurf(isurf)%NSEG))
940 ino(1:4*igrsurf(isurf)%NSEG)=0
941 ALLOCATE(tagnode(1:numnod))
944 DO j=1,igrsurf(isurf)%NSEG
946 surfnod = igrsurf(isurf)%NODES(j,k)
947 IF(surfnod /= 0)
THEN
948 IF (tagnode(surfnod) == 0)
THEN
965 CALL min_dist_grnod_to_surface(
966 . igrnod(igs)%ENTITY, igrnod(igs)%NENTITY, ino , nno ,x ,
967 . numnod , pflag , idir , gap ,isk ,
968 . skew , lskew , sskew ,id ,titr,
973 CALL min_dist_grnod_to_xyzpos(
974 . igrnod(igs)%ENTITY, igrnod(igs)%NENTITY, xyzpos, xyzflag, x ,
975 . numnod , isk , skew , lskew , sskew
981 IF(
ALLOCATED(ino))
DEALLOCATE(ino)
982 IF(
ALLOCATED(tagnode))
DEALLOCATE(tagnode)
984 WRITE(iout,2000) id,igu
985 WRITE(iout,2100) igsurf,isk0,dir(1:1),gap,pflag0,
986 . xyzpos0(1),xyzpos0(2),xyzpos0(3),
987 . xyzflag0(1),xyzflag0(2),xyzflag0(3)
991 DO j=1,igrnod(igs)%NENTITY
992 is=igrnod(igs)%ENTITY(j)
993 WRITE(iout,3500) itab(is),x(1,is),x(2,is),x(3,is)
1002 .
' NODAL TRANSFORMATIONS '/,
1003 .
' ---------------------- ')
1004 200
FORMAT(10x,
' NODES N0 . . . . .= ',i10/,
1005 . 10x,
' N1 . . . . .= ',i10)
1006 300
FORMAT(10x,
' CENTER NODE N0 . . . . .= ',i10)
1008 .
' NODAL TRANSLATION, TRANSFORMATION ID = ',i10/,
1009 .
' NODE GROUP ID. . . . . . . . . . . .= ',i10/,
1010 .
' TRANSLATION VECTOR :')
1011 510
FORMAT(10x,
' VALUE. . . . . . . . . . . . .= ',e20.13/,
1012 .
' COORDINATES X. . . . . . .= ',e20.13/,
1013 .
' Y. . . . . . .= ',e20.13/,
1014 .
' Z. . . . . . .= ',e20.13/,
1015 .
' Skew_ID . . . . . . . . . . .= ',i10)
1017 .
' NODAL ROTATION, TRANSFORMATION ID. = ',i10/,
1018 .
' NODE GROUP ID. . . . . . . . . . . .= ',i10/,
1019 .
' ROTATION VECTOR: ')
1020 610
FORMAT(10x,
' CENTER X. . . . . . .= ',e20.13/,
1021 .
' Y. . . . . . .= ',e20.13/,
1022 .
' Z. . . . . . .= ',e20.13/,
1023 .
' DIRECTION X. . . . . . .= ',e20.13/,
1024 .
' Y. . . . . . .= ',e20.13/,
1025 .
' Z. . . . . . .= ',e20.13/,
1026 .
' ANGLE . . . . . . .= ',e20.13)
1028 .
' PLANE SYMMETRY, TRANSFORMATION ID = ',i10/,
1029 .
' NODE GROUP ID. . . . . . . . . . . .= ',i10/,
1030 .
' VECTOR ORTHOGONAL TO PLANE: ')
1031 710
FORMAT(10x,
' CENTER X. . . . . . .= ',e20.13/,
1032 .
' Y. . . . . . .= ',e20.13/,
1033 .
' Z. . . . . . .= ',e20.13/,
1034 .
' DIRECTION X. . . . . . .= ',e20.13/,
1035 .
' Y. . . . . . .= ',e20.13/,
1036 .
' Z. . . . . . .= ',e20.13)
1038 .
' SCALING, TRANSFORMATION ID = ',i10/,
1039 .
' NODE GROUP ID. . . . . . . . . . . .= ',i10)
1040 810
FORMAT(10x,
' SCALE COEFF. X. . . . . . .= ',e20.13/,
1041 .
' Y. . . . . . .= ',e20.13/,
1042 .
' Z. . . . . . .= ',e20.13)
1044 .
' MATRIX TRANSFORMATION, TRANSFORMATION ID.= ',i10/,
1045 .
' NODE GROUP ID. . . . . . . . . . . .= ',i10/)
1046 910
FORMAT(4x,
'MATRIX '/,
1048 . 17x,
'M11',17x,
'M12',17x,
'M13',18x,
'TX' /,
1050 . 17x,
'M21',17x,
'M22',17x,
'M23',18x,
'TY' /,
1052 . 17x,
'M31',17x,
'M32',17x,
'M33',18x,
'TZ' /,
1055 .
' SUBMODEL TRANSFORMATION WRT 6 POSITIONS',/,
1056 .
' TRANSFORMATION ID. . . . . . . . . . . = ',i10/,
1057 .
' NODE GROUP ID. . . . . . . . . . . . . = ',i10)
1059 .
' CENTER N1 X1 . . . . . .= ',e20.13/,
1060 .
' Y1 . . . . . .= ',e20.13/,
1061 .
' Z1 . . . . . .= ',e20.13/,
1062 .
' CENTER N4 X4 . . . . . .= ',e20.13/,
1063 .
' Y4 . . . . . .= ',e20.13/,
1064 .
' Z4 . . . . . .= ',e20.13/,
1065 .
' ROTATION MATRIX . . . . . . . = ',/,
1066 .
' . . . . . . . . M11 . . . . . . . . M12 . . . . . . . . M13',/,
1068 .
' . . . . . . . . M21 . . . . . . . . M22 . . . . . . . . M23',/,
1070 .
' . . . . . . . . M31 . . . . . . . . M32 . . . . . . . . M33',/,
1073 .
' NODAL AUTOPOSITION, TRANSFORMATION ID = ',i10/,
1074 .
' NODE GROUP ID. . . . . . . . . . . .= ',i10)
1075 2100
FORMAT(10x,
' Surf_ID . . . . . .= ',i10/,
1076 . 10x,
' Skew_ID . . . . . .= ',i10/,
1077 . 10x,
' Motion direction . . . . . .= ',a10/,
1078 . 10x,
' Minimum distance Gap . . . . .= ',e20.13/,
1079 . 10x,
' Positioning flag . . . . . .= ',i10/,
1080 . 10x,
' Xpos . . . . . .= ',e20.13/,
1081 . 10x,
' Ypos . . . . . .= ',e20.13/,
1082 . 10x,
' Zpos . . . . . .= ',e20.13/,
1083 . 10x,
' Xflag . . . . . .= ',i10/,
1084 . 10x,
' Yflag . . . . . .= ',i10/,
1085 . 10x,
' Zflag . . . . . .= ',i10)
1086 3000
FORMAT(/10x,
'NEW NODE COORDINATES',14x,
'X',24x,
'Y',24x,
'Z')
1087 3500
FORMAT( 17x,i10,3(5x,e20.13))