46 SUBROUTINE lectrans(X ,IGRNOD ,ITAB ,ITABM1,UNITAB,
60#include "implicit_f.inc"
70 TYPE (),
INTENT(IN) ::UNITAB
71 INTEGER ITAB(*),ITABM1(*)
78 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRNOD) :: IGRNOD
82 INTEGER I,I0,I1,I2,I3,I4,I5,I6,
83 . n0,n1,n2,n3,n4,n5,n6,ierror,
84 . j,is,
id,uid,igu,igs,nn,ntrans,stat,
85 . iflagunit,itranssub,sub_id,k,
88 . lx,ly,lz,tx,ty,tz,r,s,rx,ry,rz,sx,sy,sz,angle,at,fac_l,
91 . vr(3),x0(3),x1(3),x2(3),x3(3),x4(3),x5(3),x6(3),
92 . rot(9),pp(3,3),qq(3,3),p(3),norm1, norm2, norm3, scal1,
95 CHARACTER(LEN=NCHARFIELD) :: MOT1
96 CHARACTER(LEN=NCHARTITLE) :: TITR
97 CHARACTER(LEN=NCHARLINE) ::SOLVERKEYWORD
99 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
104 INTEGER NGR2USR,USRTOS
105 EXTERNAL ngr2usr,usrtos
111 is_available = .false.
112 IF (ntrans > 0)
WRITE (iout,100)
127 . submodel_id = sub_id,
128 . option_titr = titr,
132 IF (key(1:3) ==
'TRA')
THEN
136 CALL hm_get_intv(
'GR_NODE',igu,is_available,lsubmodel)
137 CALL hm_get_intv(
'node1',n0,is_available,lsubmodel)
138 CALL hm_get_intv(
'node2',n1,is_available,lsubmodel)
139 CALL hm_get_intv(
'SUBMODEL',itranssub,is_available,lsubmodel)
143 CALL hm_get_floatv(
'translation_x',tx,is_available,lsubmodel,unitab)
144 CALL hm_get_floatv(
'translation_y',ty,is_available,lsubmodel,unitab)
145 CALL hm_get_floatv(
'translation_z',tz,is_available,lsubmodel,unitab)
150 .
CALL subrotvect(tx,ty,tz,rtrans,sub_id,lsubmodel)
152 IF (itranssub /= 0) cycle
156 ingr2usr => igrnod(1:ngrnod)%ID
157 igs = ngr2usr(igu,ingr2usr,ngrnod)
167 IF (n0 > 0 .OR. n1 > 0)
THEN
168 i0 = usrtos(n0,itabm1)
169 i1 = usrtos(n1,itabm1)
186 tx = x(1,i1) - x(1,i0)
187 ty = x(2,i1) - x(2,i0)
188 tz = x(3,i1) - x(3,i0)
194 DO j=1,igrnod(igs)%NENTITY
195 is=igrnod(igs)%ENTITY(j)
200 s = sqrt(tx*tx + ty*ty + tz*tz)
202 WRITE(iout,500)
id,igu
203 IF (n0 > 0 .AND. n1 > 0)
WRITE(iout,200) n0,n1
204 WRITE(iout,510) s,tx,ty,tz
207 DO j=1,igrnod(igs)%NENTITY
208 is=igrnod(igs)%ENTITY(j)
209 WRITE(iout,3500) itab(is),x(1,is),x(2,is),x(3,is)
213 ELSEIF (key(1:3) ==
'ROT')
THEN
217 CALL hm_get_intv(
'GR_NODE',igu,is_available,lsubmodel)
218 CALL hm_get_intv(
'node1',n0,is_available,lsubmodel)
219 CALL hm_get_intv(
'node2',n1,is_available,lsubmodel)
220 CALL hm_get_intv(
'SUBMODEL',itranssub,is_available,lsubmodel)
224 CALL hm_get_floatv(
'rotation_point1_x',x0(1),is_available,lsubmodel,unitab)
225 CALL hm_get_floatv(
'rotation_point1_y',x0(2),is_available,lsubmodel,unitab)
226 CALL hm_get_floatv(
'rotation_point1_z',x0(3),is_available,lsubmodel,unitab)
227 CALL hm_get_floatv(
'rotation_point2_x',x1(1),is_available,lsubmodel,unitab)
228 CALL hm_get_floatv(
'rotation_point2_y',x1(2),is_available,lsubmodel,unitab)
229 CALL hm_get_floatv(
'rotation_point2_z',x1(3),is_available,lsubmodel,unitab)
230 CALL hm_get_floatv(
'rotation_angle',angle,is_available,lsubmodel,unitab)
235 .
CALL subrotpoint(x0(1),x0(2),x0(3),rtrans,sub_id,lsubmodel)
238 .
CALL subrotpoint(x1(1),x1(2),x1(3),rtrans,sub_id,lsubmodel)
240 IF (itranssub /= 0) cycle
244 IF (n0 > 0 .OR. n1 > 0)
THEN
245 i0 = usrtos(n0,itabm1)
246 i1 = usrtos(n1,itabm1)
270 x0(1) = x0(1) * fac_l
271 x0(2) = x0(2) * fac_l
272 x0(3) = x0(3) * fac_l
273 x1(1) = x1(1) * fac_l
274 x1(2) = x1(2) * fac_l
275 x1(3) = x1(3) * fac_l
280 s = sqrt(tx*tx + ty*ty + tz*tz)
281 at = angle * pi/hundred80 /
max(em20,s)
285 ingr2usr => igrnod(1:ngrnod)%ID
286 igs = ngr2usr(igu,ingr2usr,ngrnod)
296 IF (angle /= zero)
THEN
298 DO j=1,igrnod(igs)%NENTITY
299 is=igrnod(igs)%ENTITY(j)
304 WRITE(iout,600)
id,igu
305 IF (n0
WRITE(iout,200) n0,n1
306 WRITE(iout,610) x0(1),x0(2),x0(3),tx,ty,tz,angle
309 DO j=1,igrnod(igs)%NENTITY
310 is=igrnod(igs)%ENTITY(j)
311 WRITE(iout,3500) itab(is),x(1,is),x(2,is),x(3,is)
315 ELSEIF (key(1:3) ==
'SYM')
THEN
319 CALL hm_get_intv(
'GR_NODE',igu,is_available,lsubmodel)
320 CALL hm_get_intv(
'node1',n0,is_available,lsubmodel)
321 CALL hm_get_intv(
'node2',n1,is_available,lsubmodel)
322 CALL hm_get_intv(
'SUBMODEL',itranssub,is_available,lsubmodel)
326 CALL hm_get_floatv(
'reflect_point1_x',x0(1),is_available,lsubmodel,unitab)
327 CALL hm_get_floatv(
'reflect_point1_y',x0(2),is_available,lsubmodel,unitab)
328 CALL hm_get_floatv(
'reflect_point1_z',x0(3),is_available,lsubmodel,unitab)
329 CALL hm_get_floatv(
'reflect_point2_x',x1(1),is_available,lsubmodel,unitab)
330 CALL hm_get_floatv(
'reflect_point2_y',x1(2),is_available,lsubmodel,unitab)
331 CALL hm_get_floatv(
'reflect_point2_z',x1(3),is_available,lsubmodel,unitab)
333 IF (itranssub /= 0) cycle
338 .
CALL subrotpoint(x0(1),x0(2),x0(3),rtrans,sub_id,lsubmodel)
340 .
CALL subrotpoint(x1(1),x1(2),x1(3),rtrans,sub_id,lsubmodel)
342 ingr2usr => igrnod(1:ngrnod)%ID
353 IF (n0 > 0 .OR. n1 > 0)
THEN
354 i0 = usrtos(n0,itabm1)
355 i1 = usrtos(n1,itabm1)
379 x0(1) = x0(1) * fac_l
380 x0(2) = x0(2) * fac_l
381 x0(3) = x0(3) * fac_l
382 x1(1) = x1(1) * fac_l
383 x1(2) = x1(2) * fac_l
384 x1(3) = x1(3) * fac_l
389 s = one/
max(sqrt(tx*tx + ty*ty + tz*tz),em20)
393 DO j=1,igrnod(igs)%NENTITY
394 is=igrnod(igs)%ENTITY(j)
398 s = sx*tx + sy*ty + sz*tz
399 x(1,is) = x(1,is) - two*tx*s
400 x(2,is) = x(2,is) - two*ty*s
401 x(3,is) = x(3,is) - two*tz*s
404 WRITE(iout,700)
id,igu
405 IF (n0 > 0 .AND. n1 > 0)
WRITE(iout,200) n0,n1
406 WRITE(iout,710) x0(1),x0(2),x0(3),tx,ty,tz
409 DO j=1,igrnod(igs)%NENTITY
410 is=igrnod(igs)%ENTITY(j)
411 WRITE(iout,3500) itab(is),x(1,is),x(2,is),x(3,is)
415 ELSEIF (key(1:3) ==
'SCA')
THEN
419 CALL hm_get_intv(
'GR_NODE',igu,is_available,lsubmodel)
420 CALL hm_get_intv(
'node1',n0,is_available,lsubmodel)
421 CALL hm_get_intv(
'SUBMODEL',itranssub,is_available,lsubmodel)
425 CALL hm_get_floatv(
'scalefactor_x',tx,is_available,lsubmodel,unitab)
426 CALL hm_get_floatv(
'scalefactor_y',ty,is_available,lsubmodel,unitab)
427 CALL hm_get_floatv(
'scalefactor_z',tz,is_available,lsubmodel,unitab)
429 IF (itranssub /= 0) cycle
433 IF (tx == zero) tx = one
434 IF (ty == zero) ty = one
435 IF (tz == zero) tz = one
437 .
CALL subrotvect(tx,ty,tz,rtrans,sub_id,lsubmodel
439 ingr2usr => igrnod(1:ngrnod)%ID
451 i0 = usrtos(n0,itabm1)
468 DO j=1,igrnod(igs)%NENTITY
469 is=igrnod(igs)%ENTITY(j)
470 x(1,is) = x0(1) + (x(1,is) - x0(1)) * tx
471 x(2,is) = x0(2) + (x(2,is) - x0(2)) * ty
472 x(3,is) = x0(3) + (x(3,is) - x0(3)) * tz
475 WRITE(iout,800)
id,igu
476 IF (n0 > 0)
WRITE(iout,300) n0
477 WRITE(iout,810) tx,ty,tz
480 DO j=1,igrnod(igs)%NENTITY
481 is=igrnod(igs)%ENTITY(j)
482 WRITE(iout,3500) itab(is),x(1,is),x(2,is),x(3,is)
486 ELSEIF (key(1:6) ==
'MATRIX')
THEN
488 CALL hm_get_intv(
'GR_NODE',igu,is_available,lsubmodel)
489 CALL hm_get_floatv(
'vector_1_x',rtrans(i,3),is_available,lsubmodel,unitab)
490 CALL hm_get_floatv(
'vector_1_y',rtrans(i,6),is_available,lsubmodel,unitab)
491 CALL hm_get_floatv(
'vector_1_z',rtrans(i,9),is_available,lsubmodel
492 CALL hm_get_floatv(
'vector_2_x',rtrans(i,4),is_available,lsubmodel,unitab)
493 CALL hm_get_floatv(
'vector_2_y',rtrans(i,7),is_available,lsubmodel,unitab)
494 CALL hm_get_floatv(
'vector_2_z',rtrans(i,10),is_available,lsubmodel,unitab)
495 CALL hm_get_floatv(
'vector_3_x',rtrans(i,5),is_available,lsubmodel,unitab)
496 CALL hm_get_floatv(
'vector_3_y',rtrans(i,8),is_available,lsubmodel,unitab)
497 CALL hm_get_floatv(
'vector_3_z',rtrans(i,11),is_available,lsubmodel,unitab)
498 CALL hm_get_floatv(
'position_x',rtrans(i,15),is_available,lsubmodel,unitab)
499 CALL hm_get_floatv(
'position_y',rtrans(i,16),is_available,lsubmodel,unitab)
500 CALL hm_get_floatv(
'position_z',rtrans(i,17),is_available,lsubmodel,unitab)
501 CALL hm_get_intv(
'SUBMODEL',itranssub,is_available,lsubmodel)
503 IF (itranssub /= 0) cycle
507 ingr2usr => igrnod(1:ngrnod)%ID
508 igs = ngr2usr(igu,ingr2usr,ngrnod)
520 norm1 = sqrt(rtrans(i,3)**2+rtrans(i,6)**2+rtrans(i,9)**2)
521 norm2 = sqrt(rtrans(i,4)**2+rtrans(i,7)**2+rtrans(i,10)**2)
522 norm3 = sqrt(rtrans(i,5)**2+rtrans(i,8)**2+rtrans(i,11)**2)
523 scal1 = rtrans(i,3)*rtrans(i,4)+rtrans(i,6)*rtrans(i,7)+
524 . rtrans(i,9)*rtrans(i,10)
525 scal2 = rtrans(i,3)*rtrans(i,5)+rtrans(i,6)*rtrans(i,8)+
526 . rtrans(i,9)*rtrans(i,11)
527 scal3 = rtrans(i,4)*rtrans(i,5)+rtrans(i,7)*rtrans(i,8)+
528 . rtrans(i,10)*rtrans(i,11)
529 IF(abs(one-norm1) > eps .OR. abs(one-norm2) > eps .OR.
530 . abs(one-norm3) > eps .OR.
531 . scal1 > (eps * norm1*norm2) .OR. scal2 > (eps * norm1*norm3)
532 . .OR. scal3 > (eps * norm2*norm3))
THEN
538 DO j=1,igrnod(igs)%NENTITY
539 is=igrnod(igs)%ENTITY(j)
540 xp = rtrans(i,3)*x(1,is) + rtrans(i,6)*x(2,is) + rtrans(i,9)*x(3,is)
542 yp = rtrans(i,4)*x(1,is) + rtrans(i,7)*x(2,is) + rtrans(i,10)*x(3,is)
544 zp = rtrans(i,5)*x(1,is) + rtrans(i,8)*x(2,is) + rtrans(i,11)*x(3,is)
551 WRITE(iout,900)
id,igu
554 . rtrans(i,3),rtrans(i,6),rtrans(i,9),rtrans(i,15),
555 . rtrans(i,4),rtrans(i,7),rtrans(i,10),rtrans(i,16),
556 . rtrans(i,5),rtrans(i,8),rtrans(i,11),rtrans(i,17)
558 ELSEIF (key(1:8) ==
'POSITION')
THEN
560 CALL hm_get_intv(
'GR_NODE',igu,is_available,lsubmodel)
561 CALL hm_get_intv(
'SUBMODEL',itranssub,is_available,lsubmodel)
564 CALL hm_get_intv(
'node1',n1,is_available,lsubmodel)
565 CALL hm_get_intv(
'node2',n2,is_available,lsubmodel)
566 CALL hm_get_intv(
'node3',n3,is_available,lsubmodel)
567 CALL hm_get_intv(
'node4',n4,is_available,lsubmodel)
568 CALL hm_get_intv(
'node5',n5,is_available,lsubmodel)
569 CALL hm_get_intv(
'node6',n6,is_available,lsubmodel)
571 CALL hm_get_floatv(
'X_Point_1',x1(1),is_available,lsubmodel,unitab)
572 CALL hm_get_floatv(
'Y_Point_1',x1(2),is_available,lsubmodel,unitab)
573 CALL hm_get_floatv(
'Z_Point_1',x1(3),is_available,lsubmodel,unitab)
574 CALL hm_get_floatv(
'X_Point_2',x2(1),is_available,lsubmodel,unitab)
575 CALL hm_get_floatv(
'Y_Point_2',x2(2),is_available,lsubmodel,unitab)
576 CALL hm_get_floatv(
'Z_Point_2',x2(3),is_available,lsubmodel,unitab)
577 CALL hm_get_floatv(
'X_Point_3',x3(1),is_available,lsubmodel,unitab)
578 CALL hm_get_floatv(
'Y_Point_3',x3(2),is_available,lsubmodel,unitab)
579 CALL hm_get_floatv(
'Z_Point_3',x3(3),is_available,lsubmodel,unitab)
580 CALL hm_get_floatv(
'X_Point_4',x4(1),is_available,lsubmodel,unitab)
581 CALL hm_get_floatv(
'Y_Point_4',x4(2),is_available,lsubmodel,unitab)
582 CALL hm_get_floatv(
'Z_Point_4',x4(3),is_available,lsubmodel,unitab)
583 CALL hm_get_floatv(
'X_Point_5',x5(1),is_available,lsubmodel,unitab)
584 CALL hm_get_floatv(
'Y_Point_5',x5(2),is_available,lsubmodel,unitab)
585 CALL hm_get_floatv(
'Z_Point_5',x5(3),is_available,lsubmodel,unitab)
586 CALL hm_get_floatv(
'X_Point_6',x6(1),is_available,lsubmodel,unitab)
587 CALL hm_get_floatv(
'Y_Point_6',x6(2),is_available,lsubmodel,unitab)
588 CALL hm_get_floatv(
'Z_Point_6',x6(3),is_available,lsubmodel,unitab)
590 IF (itranssub /= 0) cycle
597 CALL subrotpoint(x1(1),x1(2),x1(3),rtrans,sub_id,lsubmodel)
598 CALL subrotpoint(x2(1),x2(2),x2(3),rtrans,sub_id,lsubmodel)
599 CALL subrotpoint(x3(1),x3(2),x3(3),rtrans,sub_id,lsubmodel)
600 CALL subrotpoint(x4(1),x4(2),x4(3),rtrans,sub_id,lsubmodel)
601 CALL subrotpoint(x5(1),x5(2),x5(3),rtrans,sub_id,lsubmodel)
602 CALL subrotpoint(x6(1),x6(2),x6(3),rtrans,sub_id,lsubmodel)
605 ingr2usr => igrnod(1:ngrnod)%ID
606 igs = ngr2usr(igu,ingr2usr,ngrnod)
618 IF (n1 > 0 .OR. n2 > 0 .OR. n3 > 0 .OR.
619 . n4 > 0 .OR. n5 > 0 .OR. n6 > 0)
THEN
620 i1 = usrtos(n1,itabm1)
621 i2 = usrtos(n2,itabm1)
622 i3 = usrtos(n3,itabm1)
623 i4 = usrtos(n4,itabm1)
624 i5 = usrtos(n5,itabm1)
625 i6 = usrtos(n6,itabm1)
693 x1(1) = x1(1) * fac_l
694 x1(2) = x1(2) * fac_l
695 x1(3) = x1(3) * fac_l
696 x2(1) = x2(1) * fac_l
697 x2(2) = x2(2) * fac_l
698 x2(3) = x2(3) * fac_l
699 x3(1) = x3(1) * fac_l
700 x3(2) = x3(2) * fac_l
701 x3(3) = x3(3) * fac_l
702 x4(1) = x4(1) * fac_l
703 x4(2) = x4(2) * fac_l
704 x4(3) = x4(3) * fac_l
705 x5(1) = x5(1) * fac_l
706 x5(2) = x5(2) * fac_l
707 x5(3) = x5(3) * fac_l
708 x6(1) = x6(1) * fac_l
709 x6(2) = x6(2) * fac_l
710 x6(3) = x6(3) * fac_l
714 IF(ierror==1.OR.ierror==3)
THEN
717 . anmode=aninfo_blind_1,
722 . msgtype=msgwarning,
723 . anmode=aninfo_blind_1,
730 . anmode=aninfo_blind_1,
738 rtrans(i,j+2) = rot(j)
740 rtrans(i,12:14) = zero
741 rtrans(i,15:17) = zero
747 . msgtype=msgwarning,
748 . anmode=aninfo_blind_1,
752 rot(1)=qq(1,1)*pp(1,1)+qq(1,2)*pp(1,2)+qq(1,3)*pp(1,3)
753 rot(4)=qq(1,1)*pp(2,1)+qq(1,2)*pp(2,2)+qq(1,3)*pp(2,3)
754 rot(7)=qq(1,1)*pp(3,1)+qq(1,2)*pp(3,2)+qq(1,3)*pp(3,3)
755 rot(2)=qq(2,1)*pp(1,1)+qq(2,2)*pp(1,2)+qq(2,3)*pp(1,3)
756 rot(5)=qq(2,1)*pp(2,1)+qq(2,2)*pp(2,2)+qq(2,3)*pp(2,3)
757 rot(8)=qq(2,1)*pp(3,1)+qq(2,2)*pp(3,2)+qq(2,3)*pp(3,3)
758 rot(3)=qq(3,1)*pp(1,1)+qq(3,2)*pp(1,2)+qq(3,3)*pp(1,3)
759 rot(6)=qq(3,1)*pp(2,1)+qq(3,2)*pp(2,2)+qq(3,3)*pp(2,3)
760 rot(9)=qq(3,1)*pp(3,1)+qq(3,2)*pp(3,2)+qq(3,3)*pp(3,3)
763 rtrans(i,j+2) = rot(j)
766 rtrans(i,j+11) = x1(j)
769 rtrans(i,j+14) = x4(j)
774 DO j=1,igrnod(igs)%NENTITY
775 k = igrnod(igs)%ENTITY(j)
779 x(1,k) = x4(1) + rot(1)*xp + rot(4)*yp + rot(7)*zp
780 x(2,k) = x4(2) + rot(2)*xp + rot(5)*yp + rot(8)*zp
781 x(3,k) = x4(3) + rot(3)*xp + rot(6)*yp + rot(9)*zp
784 WRITE(iout,1000)
id,igu
786 . (rtrans(i,k+11) , k=1,3),
787 . (rtrans(i,k+14) , k=1,3),
788 . rtrans(i,3),rtrans(i,6), rtrans(i,9),
789 . rtrans(i,4),rtrans(i,7),rtrans(i,10),
790 . rtrans(i,5),rtrans(i,8),rtrans(i,11)
794 DO j=1,igrnod(igs)%NENTITY
795 is=igrnod(igs)%ENTITY(j)
796 WRITE(iout,3500) itab(is),x(1,is),x(2,is),x(3,is)
806 .
' NODAL TRANSFORMATIONS '/,
807 .
' ---------------------- ')
808 200
FORMAT(10x,
' NODES N0 . . . . .= ',i10/,
809 . 10x,
' N1 . . . . .= ',i10)
810 300
FORMAT(10x,
' CENTER NODE N0 . . . . .= ',i10)
812 .
' NODAL TRANSLATION, TRANSFORMATION ID = ',i10/,
813 .
' NODE GROUP ID. . . . . . . . . . . .= ',i10/,
814 .
' TRANSLATION VECTOR :')
815 510
FORMAT(10x,
' VALUE. . . . . . . . . . . . .= ',e20.13/,
816 .
' COORDINATES X. . . . . . .= ',e20.13/,
817 .
' Y. . . . . . .= ',e20.13/,
818 .
' Z. . . . . . .= ',e20.13)
820 .
' NODAL ROTATION, TRANSFORMATION ID. = ',i10/,
821 .
' NODE GROUP ID. . . . . . . . . . . .= ',i10/,
822 .
' ROTATION VECTOR: ')
823 610
FORMAT(10x,
' CENTER X. . . . . . .= ',e20.13/,
824 .
' Y. . . . . . .= ',e20.13/,
825 .
' Z. . . . . . .= ',e20.13/,
826 .
' DIRECTION X. . . . . . .= ',e20.13/,
827 .
' Y. . . . . . .= ',e20.13/,
828 .
' Z. . . . . . .= ',e20.13/,
829 .
' ANGLE . . . . . . .= ',e20.13)
831 .
' PLANE SYMMETRY, TRANSFORMATION ID = ',i10/,
832 .
' NODE GROUP ID. . . . . . . . . . . .= ',i10/,
833 .
' VECTOR ORTHOGONAL TO PLANE: ')
834 710
FORMAT(10x,
' CENTER X. . . . . . .= ',e20.13/,
835 .
' Y. . . . . . .= ',e20.13/,
836 .
' Z. . . . . . .= ',e20.13/,
837 .
' DIRECTION X. . . . . . .= ',e20.13/,
838 .
' Y. . . . . . .= ',e20.13/,
839 .
' Z. . . . . . .= ',e20.13)
841 .
' SCALING, TRANSFORMATION ID = ',i10/,
842 .
' NODE GROUP ID. . . . . . . . . . . .= ',i10)
843 810
FORMAT(10x,
' SCALE COEFF. X. . . . . . .= ',e20.13/,
844 .
' Y. . . . . . .= ',e20.13/,
845 .
' Z. . . . . . .= ',e20.13)
847 .
' MATRIX TRANSFORMATION, TRANSFORMATION ID.= ',i10/,
848 .
' NODE GROUP ID. . . . . . . . . . . .= ',i10/)
849 910
FORMAT(4x,
'MATRIX '/,
851 . 17x,
'M11',17x,
'M12',17x,
'M13',18x,
'TX' /,
853 . 17x,
'M21',17x,
'M22',17x,
'M23',18x,
'TY' /,
855 . 17x,
'M31',17x,
'M32',17x,
'M33',18x,
'TZ' /,
858 .
' SUBMODEL TRANSFORMATION WRT 6 POSITIONS',/,
859 .
' TRANSFORMATION ID. . . . . . . . . . . = ',i10/,
860 .
' NODE GROUP ID. . . . . . . . . . . . . = ',i10)
862 .
' CENTER N1 X1 . . . . . .= ',e20.13/,
863 .
' Y1 . . . . . .= ',e20.13/,
864 .
' Z1 . . . . . .= ',e20.13/,
865 .
' CENTER N4 X4 . . . . . .= ',e20.13/,
866 .
' Y4 . . . . . .= ',e20.13/,
867 .
' Z4 . . . . . .= ',e20.13/,
868 .
' ROTATION MATRIX . . . . . . . = ',/,
869 .
' . . . . . . . . M11 . . . . . . . . M12 . . . . . . . . M13',/,
871 .
' . . . . . . . . M21 . . . . . . . . M22 . . . . . . . . M23',/,
873 .
' . . . . . . . . M31 . . . . . . . . M32 . . . . . . . . M33',/,
875 3000
FORMAT(/10x,
'NEW NODE COORDINATES',14x,
'X',24x,
'Y',24x,
'Z')
876 3500
FORMAT( 17x,i10,3(5x,e20.13))