48
49
50
57
58
59
60#include "implicit_f.inc"
61
62
63
64#include "com04_c.inc"
65#include "scr03_c.inc"
66#include "units_c.inc"
67
68
69
70 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
71 INTEGER ITAB(*),ITABM1(*)
73 . x(3,*)
74 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
76 . rtrans(ntransf,*)
77
78 TYPE (GROUP_) ,TARGET, DIMENSION(NGRNOD) :: IGRNOD
79
80
81
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,
86 . IBID,CPT
88 . lx,ly,lz,tx,ty,tz,r,s,rx,ry,rz,sx,sy,sz,angle,at,fac_l,
89 . xp,yp,zp
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
93 . scal2, scal3, eps
94 CHARACTER KEY*10
95 CHARACTER(LEN=NCHARFIELD) :: MOT1
96 CHARACTER(LEN=NCHARTITLE) :: TITR
97 CHARACTER(LEN=NCHARLINE) ::SOLVERKEYWORD
98
99 INTEGER, DIMENSION(:), POINTER :: INGR2USR
100 LOGICAL IS_AVAILABLE
101
102
103
104 INTEGER NGR2USR,USRTOS
106
107
108
110 fac_l = one
111 is_available = .false.
112 IF (ntrans > 0) WRITE (iout,100)
113
114
115
117
118
119
120 DO i=1,ntrans
121
122
123
126 . unit_id = uid,
127 . submodel_id = sub_id,
128 . option_titr = titr,
129 . keyword2 = key)
131
132 IF (key(1:3) == 'TRA') THEN
133
134
135
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)
140
141
142
144 CALL hm_get_floatv(
'translation_y',ty,is_available,lsubmodel,unitab)
145 CALL hm_get_floatv(
'translation_z',tz,is_available,lsubmodel,unitab)
146
147
148
149 IF(sub_id /= 0)
150 .
CALL subrotvect(tx,ty,tz,rtrans,sub_id,lsubmodel)
151
152 IF (itranssub /= 0) cycle
153
154 rtrans(i,2) = 1
155
156 ingr2usr => igrnod(1:ngrnod)%ID
157 igs =
ngr2usr(igu,ingr2usr,ngrnod)
158 IF (igs == 0) THEN
160 . msgtype=msgerror,
161 . anmode=aninfo,
163 . c1= titr,
164 . i2= igu)
165 ENDIF
166 rtrans(i,18)=igs
167 IF (n0 > 0 .OR. n1 > 0) THEN
170 IF (i0 == 0) THEN
172 . msgtype=msgerror,
173 . anmode=aninfo,
175 . c1=titr,
176 . i2=n0)
177 END IF
178 IF (i1 == 0) THEN
180 . msgtype=msgerror,
181 . anmode=aninfo,
183 . c1=titr,
184 . i2=n1)
185 END IF
186 tx = x(1,i1) - x(1,i0)
187 ty = x(2,i1) - x(2,i0)
188 tz = x(3,i1) - x(3,i0)
189 ELSE
190 tx = tx * fac_l
191 ty = ty * fac_l
192 tz = tz * fac_l
193 ENDIF
194 DO j=1,igrnod(igs)%NENTITY
195 is=igrnod(igs)%ENTITY(j)
196 x(1,is)=x(1,is)+tx
197 x(2,is)=x(2,is)+ty
198 x(3,is)=x(3,is)+tz
199 ENDDO
200 s = sqrt(tx*tx + ty*ty + tz*tz)
201
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
205 IF (ipri > 3) THEN
206 WRITE (iout,3000)
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)
210 ENDDO
211 ENDIF
212
213 ELSEIF (key(1:3) == 'ROT') THEN
214
215
216
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)
221
222
223
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)
231
232
233
234 IF(sub_id /= 0)
235 .
CALL subrotpoint(x0(1),x0(2),x0(3),rtrans,sub_id,lsubmodel)
236
237 IF(sub_id /= 0)
238 .
CALL subrotpoint(x1(1),x1(2),x1(3),rtrans,sub_id,lsubmodel)
239
240 IF (itranssub /= 0) cycle
241
242 rtrans(i,2) = 2
243
244 IF (n0 > 0 .OR. n1 > 0) THEN
247 IF (i0 == 0) THEN
249 . msgtype=msgerror,
250 . anmode=aninfo,
252 . c1=titr,
253 . i2=n0)
254 END IF
255 IF (i1 == 0) THEN
257 . msgtype=msgerror,
258 . anmode=aninfo,
260 . c1=titr,
261 . i2=n1)
262 END IF
263 x0(1) = x(1,i0)
264 x0(2) = x(2,i0)
265 x0(3) = x(3,i0)
266 x1(1) = x(1,i1)
267 x1(2) = x(2,i1)
268 x1(3) = x(3,i1)
269 ELSE
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
276 ENDIF
277 tx = x1(1) - x0(1)
278 ty = x1(2) - x0(2)
279 tz = x1(3) - x0(3)
280 s = sqrt(tx*tx + ty*ty + tz*tz)
281 at = angle * pi/hundred80 /
max(em20,s)
282 tx = tx * at
283 ty = ty * at
284 tz = tz * at
285 ingr2usr => igrnod(1:ngrnod)%ID
286 igs =
ngr2usr(igu,ingr2usr,ngrnod)
287 IF (igs == 0) THEN
289 . msgtype=msgerror,
290 . anmode=aninfo,
292 . c1= titr,
293 . i2= igu)
294 ENDIF
295 rtrans(i,18)=igs
296 IF (angle /= zero) THEN
298 DO j=1,igrnod(igs)%NENTITY
299 is=igrnod(igs)%ENTITY(j)
301 ENDDO
302 ENDIF
303
304 WRITE(iout,600)
id,igu
305 IF (n0 > 0 .AND. n1 > 0) WRITE(iout,200) n0,n1
306 WRITE(iout,610) x0(1),x0(2),x0(3),tx,ty,tz,angle
307 IF (ipri > 3) THEN
308 WRITE (iout,3000)
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)
312 ENDDO
313 ENDIF
314
315 ELSEIF (key(1:3) == 'SYM') THEN
316
317
318
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)
323
324
325
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)
332
333 IF (itranssub /= 0) cycle
334
335 rtrans(i,2) = 5
336
337 IF(sub_id /= 0)
338 .
CALL subrotpoint(x0(1),x0(2),x0(3),rtrans,sub_id,lsubmodel)
339 IF(sub_id /= 0)
340 .
CALL subrotpoint(x1(1),x1(2),x1(3),rtrans,sub_id,lsubmodel)
341
342 ingr2usr => igrnod(1:ngrnod)%ID
343 igs =
ngr2usr(igu,ingr2usr,ngrnod)
344 IF (igs == 0) THEN
346 . msgtype=msgerror,
347 . anmode=aninfo,
349 . c1= titr,
350 . i2= igu)
351 ENDIF
352 rtrans(i,18)=igs
353 IF (n0 > 0 .OR. n1 > 0) THEN
356 IF (i0 == 0) THEN
358 . msgtype=msgerror,
359 . anmode=aninfo,
361 . c1=titr,
362 . i2=n0)
363 END IF
364 IF (i1 == 0) THEN
366 . msgtype=msgerror,
367 . anmode=aninfo,
369 . c1=titr,
370 . i2=n1)
371 END IF
372 x0(1) = x(1,i0)
373 x0(2) = x(2,i0)
374 x0(3) = x(3,i0)
375 x1(1) = x(1,i1)
376 x1(2) = x(2,i1)
377 x1(3) = x(3,i1)
378 ELSE
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
385 ENDIF
386 tx = x1(1) - x0(1)
387 ty = x1(2) - x0(2)
388 tz = x1(3) - x0(3)
389 s = one/
max(sqrt(tx*tx + ty*ty + tz*tz),em20)
390 tx = tx*s
391 ty = ty*s
392 tz = tz*s
393 DO j=1,igrnod(igs)%NENTITY
394 is=igrnod(igs)%ENTITY(j)
395 sx = x(1,is) - x0(1)
396 sy = x(2,is) - x0(2)
397 sz = x(3,is) - x0(3)
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
402 ENDDO
403
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
407 IF (ipri > 3) THEN
408 WRITE (iout,3000)
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)
412 ENDDO
413 ENDIF
414
415 ELSEIF (key(1:3) == 'SCA') THEN
416
417
418
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)
422
423
424
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)
428
429 IF (itranssub /= 0) cycle
430
431 rtrans(i,2) = 6
432
433 IF (tx == zero) tx = one
434 IF (ty == zero) ty = one
435 IF (tz == zero) tz = one
436 IF(sub_id /= 0)
437 .
CALL subrotvect(tx,ty,tz,rtrans,sub_id,lsubmodel)
438
439 ingr2usr => igrnod(1:ngrnod)%ID
440 igs =
ngr2usr(igu,ingr2usr,ngrnod)
441 IF (igs == 0) THEN
443 . msgtype=msgerror,
444 . anmode=aninfo,
446 . c1= titr,
447 . i2= igu)
448 ENDIF
449 rtrans(i,18)=igs
450 IF (n0 > 0) THEN
452 IF (i0 == 0) THEN
454 . msgtype=msgerror,
455 . anmode=aninfo,
457 . c1=titr,
458 . i2=n1)
459 END IF
460 x0(1) = x(1,i0)
461 x0(2) = x(2,i0)
462 x0(3) = x(3,i0)
463 ELSE
464 x0(1) = zero
465 x0(2) = zero
466 x0(3) = zero
467 ENDIF
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
473 ENDDO
474
475 WRITE(iout,800)
id,igu
476 IF (n0 > 0) WRITE(iout,300) n0
477 WRITE(iout,810) tx,ty,tz
478 IF (ipri > 3) THEN
479 WRITE (iout,3000)
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)
483 ENDDO
484 ENDIF
485
486 ELSEIF (key(1:6) == 'MATRIX') THEN
487
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,unitab)
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)
502
503 IF (itranssub /= 0) cycle
504
505 rtrans(i,2) = 3
506
507 ingr2usr => igrnod(1:ngrnod)%ID
508 igs =
ngr2usr(igu,ingr2usr,ngrnod)
509 IF (igs == 0) THEN
511 . msgtype=msgerror,
512 . anmode=aninfo,
514 . c1= titr,
515 . i2= igu)
516 ENDIF
517 rtrans(i,18)=igs
518
519 eps = em3
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
534 . msgtype=msgerror,
535 . anmode=aninfo)
536 ENDIF
537
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)
541 . + rtrans(i,15)
542 yp = rtrans(i,4)*x(1,is) + rtrans(i,7)*x(2,is) + rtrans(i,10)*x(3,is)
543 . + rtrans(i,16)
544 zp = rtrans(i,5)*x(1,is) + rtrans(i,8)*x(2,is) + rtrans(i,11)*x(3,is)
545 . + rtrans(i,17)
546 x(1,is) = xp
547 x(2,is) = yp
548 x(3,is) = zp
549 ENDDO
550
551 WRITE(iout,900)
id,igu
552
553 WRITE(iout,910)
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)
557
558 ELSEIF (key(1:8) == 'POSITION') THEN
559
560 CALL hm_get_intv(
'GR_NODE',igu,is_available,lsubmodel)
561 CALL hm_get_intv(
'SUBMODEL',itranssub,is_available,lsubmodel)
562
563
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)
570
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)
589
590 IF (itranssub /= 0) cycle
591
592 rtrans(i,2) = 4
593
594
595
596 IF(sub_id /= 0)THEN
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)
603 END IF
604
605 ingr2usr => igrnod(1:ngrnod)%ID
606 igs =
ngr2usr(igu,ingr2usr,ngrnod)
607 IF (igs == 0) THEN
609 . msgtype=msgerror,
610 . anmode=aninfo,
612 . c1= titr,
613 . i2= igu)
614 ENDIF
615 rtrans(i,18)=igs
616
617
618 IF (n1 > 0 .OR. n2 > 0 .OR. n3 > 0 .OR.
619 . n4 > 0 .OR. n5 > 0 .OR. n6 > 0) THEN
626 IF (i1 == 0) THEN
628 . msgtype=msgerror,
629 . anmode=anstop,
631 . c1=titr,
632 . i2=n1)
633 END IF
634 x1(1) = x(1,i1)
635 x1(2) = x(2,i1)
636 x1(3) = x(3,i1)
637 IF (i2 == 0) THEN
639 . msgtype=msgerror,
640 . anmode=anstop,
642 . c1=titr,
643 . i2=n2)
644 END IF
645 x2(1) = x(1,i2)
646 x2(2) = x(2,i2)
647 x2(3) = x(3,i2)
648 IF (i3 == 0) THEN
650 . msgtype=msgerror,
651 . anmode=anstop,
653 . c1=titr,
654 . i2=n3)
655 END IF
656 x3(1) = x(1,i3)
657 x3(2) = x(2,i3)
658 x3(3) = x(3,i3)
659 IF (i4 == 0) THEN
661 . msgtype=msgerror,
662 . anmode=anstop,
664 . c1=titr,
665 . i2=n4)
666 END IF
667 x4(1) = x(1,i4)
668 x4(2) = x(2,i4)
669 x4(3) = x(3,i4)
670 IF (i5 == 0) THEN
672 . msgtype=msgerror,
673 . anmode=anstop,
675 . c1=titr,
676 . i2=n5)
677 END IF
678 x5(1) = x(1,i5)
679 x5(2) = x(2,i5)
680 x5(3) = x(3,i5)
681 IF (i6 == 0) THEN
683 . msgtype=msgerror,
684 . anmode=anstop,
686 . c1=titr,
687 . i2=n6)
688 END IF
689 x6(1) = x(1,i6)
690 x6(2) = x(2,i6)
691 x6(3) = x(3,i6)
692 ELSE
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
711 END IF
712
714 IF(ierror==1.OR.ierror==3)THEN
716 . msgtype=msgerror,
717 . anmode=aninfo_blind_1,
719 END IF
720 IF(ierror >= 2)THEN
722 . msgtype=msgwarning,
723 . anmode=aninfo_blind_1,
725 END IF
727 IF(ierror == 1)THEN
729 . msgtype=msgerror,
730 . anmode=aninfo_blind_1,
732
733 rot(1:9)=zero
734 rot(1) = one
735 rot(5) = one
736 rot(9) = one
737 DO j=1,9
738 rtrans(i,j+2) = rot(j)
739 ENDDO
740 rtrans(i,12:14) = zero
741 rtrans(i,15:17) = zero
742
743 ELSE
744
745 IF(ierror == 2)THEN
747 . msgtype=msgwarning,
748 . anmode=aninfo_blind_1,
750 END IF
751
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)
761
762 DO j=1,9
763 rtrans(i,j+2) = rot(j)
764 ENDDO
765 DO j=1,3
766 rtrans(i,j+11) = x1(j)
767 ENDDO
768 DO j=1,3
769 rtrans(i,j+14) = x4(j)
770 ENDDO
771
772 END IF
773
774 DO j=1,igrnod(igs)%NENTITY
775 k = igrnod(igs)%ENTITY(j)
776 xp = x(1,k) - x1(1)
777 yp = x(2,k) - x1(2)
778 zp = x(3,k) - x1(3)
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
782 END DO
783
784 WRITE(iout,1000)
id,igu
785 WRITE(iout,1010)
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)
791
792 IF (ipri > 3) THEN
793 WRITE (iout,3000)
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)
797 ENDDO
798 ENDIF
799 ENDIF
800 ENDDO
801
802 RETURN
804
805 100 FORMAT(//
806 .' NODAL TRANSFORMATIONS '/,
807 .' ---------------------- ')
808 200 FORMAT(10x,' NODES N0 . . . . .= ',i10/,
809 . 10x,' N1 . . . . .= ',i10)
810 300 FORMAT(10x,' CENTER NODE N0 . . . . .= ',i10)
811 500 FORMAT(/
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)
819 600 FORMAT(/
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)
830 700 FORMAT(/
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)
840 800 FORMAT(/
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)
846 900 FORMAT(/
847 . ' MATRIX TRANSFORMATION, TRANSFORMATION ID.= ',i10/,
848 . ' NODE GROUP ID. . . . . . . . . . . .= ',i10/)
849 910 FORMAT(4x,'MATRIX '/,
850 .' '/,
851 . 17x,'M11',17x,'M12',17x,'M13',18x,'TX' /,
852 . 4e20.13/,
853 . 17x,'M21',17x,'M22',17x,'M23',18x,'TY' /,
854 . 4e20.13/,
855 . 17x,'M31',17x,'M32',17x,'M33',18x,'TZ' /,
856 . 4e20.13/)
857 1000 FORMAT(/
858 . ' SUBMODEL TRANSFORMATION WRT 6 POSITIONS',/,
859 . ' TRANSFORMATION ID. . . . . . . . . . . = ',i10/,
860 . ' NODE GROUP ID. . . . . . . . . . . . . = ',i10)
861 1010 FORMAT(
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',/,
870 . 3e20.13/,
871 . ' . . . . . . . . M21 . . . . . . . . M22 . . . . . . . . M23',/,
872 . 3e20.13/,
873 . ' . . . . . . . . M31 . . . . . . . . M32 . . . . . . . . M33',/,
874 . 3e20.13/)
875 3000 FORMAT(/10x,'NEW NODE COORDINATES',14x,'X',24x,'Y',24x,'Z')
876 3500 FORMAT( 17x,i10,3(5x,e20.13))
877
878 RETURN
subroutine points_to_frame(x1, x2, x3, pp, ierror)
subroutine euler_mrot(rx, ry, rz, rot)
subroutine euler_vrot(x0, x, rot)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_count(entity_type, hm_option_number)
subroutine hm_option_start(entity_type)
integer, parameter nchartitle
integer, parameter ncharfield
integer, parameter ncharline
integer function ngr2usr(iu, igr, ngr)
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)
integer function usrtos(iu, itabm1)
subroutine subrotvect(x, y, z, rtrans, sub_id, lsubmodel)
subroutine subrotpoint(x, y, z, rtrans, sub_id, lsubmodel)