40
41
42
43 USE elbufdef_mod
44 USE my_alloc_mod
45
46
47
48#include "implicit_f.inc"
49
50
51
52#include "com01_c.inc"
53#include "param_c.inc"
54#include "units_c.inc"
55#include "task_c.inc"
56#include "scr14_c.inc"
57#include "scr16_c.inc"
58
59
60
61 INTEGER SIZLOC,SIZP0
62 INTEGER IXC(NIXC,*),IXTG(NIXTG,*),
63 . IPARG(NPARG,*),IPM(NPROPMI,*),IGEO(NPROPGI,*),
64 . IPARTC(*), IPARTTG(*), IPART_STATE(*),
65 . STAT_INDXC(*), STAT_INDXTG(*)
67 . x(3,*)
68 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
69 double precision WA(*),WAP0(*)
70
71
72
73 INTEGER I,J,K,N,,JJ,LEN, IOFF, IREP,NG, NEL, NFT, ITY, LFT, NPT,
74 . LLT, MLW,NDIR,NLAY,IHBE,ISH3N,IDRAPE,NPTT, NPLY_MAX,IPT,
75 . IGTYP, ID, IPRT0, IPRT,NPG,IPG,IE, FLAGDEG,IDEL,ILAY,,IFRAM_OLD
76 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA
77 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA_P0
79 . thk, em, eb, h1, h2, h3, angle1,
80 . angle2,dir1_1,dir1_2,dir2_1,dir2_2,aa,bb,v1,v2,v3
81 . x41,y21,y32,y34,y41,z21,z32,z34,z41
82 . z31,e11,e12,e13,e21,e22,e23,sum,
area
84 . e1x, e1y, e1z, e2x,e2y, e2z, e3x, e3y, e3z, rx,ry,rz,sx,sy,sz,
85 . x2l
86 CHARACTER*100 DELIMIT,LINE
87 TYPE(G_BUFEL_) ,POINTER :: GBUF
88 TYPE(BUF_LAY_) ,POINTER :: BUFLY
89 TYPE(L_BUFEL_DIR_) ,POINTER
90
91 DATA delimit(1:60)
92 ./'#---1----|----2----|----3----|----4----|----5----|----6----|'/
93 DATA delimit(61:100)
94 ./'----7----|----8----|----9----|----10---|'/
95
96
97
98 CALL my_alloc(ptwa,
max(stat_numelc ,stat_numeltg))
99 ALLOCATE(ptwa_p0(0:
max(1,stat_numelc_g,stat_numeltg_g)))
100
101 jj = 0
102 flagdeg = 1
103 IF (stat_numelc==0) GOTO 200
104
105 ie=0
106 DO ng=1,ngroup
107 ity = iparg(5,ng)
108 IF (ity == 3) THEN
109 gbuf => elbuf_tab(ng)%GBUF
110 mlw = iparg(1,ng)
111 nel = iparg(2,ng)
112 nft = iparg(3,ng)
113 npt = iparg(6,ng)
114 igtyp= iparg(38,ng)
115 ihbe = iparg(23,ng)
116 npg = elbuf_tab(ng)%NPTR*elbuf_tab(ng)%NPTS
117 irep = iparg(35,ng)
118 nlay = elbuf_tab(ng)%NLAY
119 idrape = elbuf_tab(ng)%IDRAPE
120 nply_max = 0
121 IF(idrape > 0 . and. (igtyp == 51 .OR. igtyp == 52)) THEN
122 nply_max = 0
123 DO j = 1,nlay
124 nply_max = nply_max + elbuf_tab(ng)%BUFLY(j)%NPTT
125 ENDDO
126 ENDIF
127 npt =
max(nply_max, npt)
128 ndir = 1
129 IF (irep > 1) ndir = 2
130 lft=1
131 llt=nel
132
133 DO i=lft,llt
134 n = i + nft
135
136 x21 = x(1,ixc(3,n))-x(1,ixc(2,n))
137 x32 = x(1,ixc(4,n))-x(1,ixc(3,n))
138 x34 = x(1,ixc(4,n))-x(1,ixc(5,n))
139 x41 = x(1,ixc(5,n))-x(1,ixc(2,n))
140
141 y21 = x(2,ixc(3,n))-x(2,ixc(2,n))
142 y32 = x(2,ixc(4,n))-x(2,ixc(3,n))
143 y34 = x(2,ixc(4,n))-x(2,ixc(5,n))
144 y41 = x(2,ixc(5,n))-x(2,ixc(2,n))
145
146 z21 = x(3,ixc(3,n))-x(3,ixc(2,n))
147 z32 = x(3,ixc(4,n))-x(3,ixc(3,n))
148 z34 = x(3,ixc(4,n))-x(3,ixc(5,n))
149 z41 = x(3,ixc(5,n))-x(3,ixc(2,n))
150
151 e1x = (x21+x34)
152 e1y = (y21+y34)
153 e1z = (z21+z34)
154
155 e2x = (x32+x41)
156 e2y = (y32+y41)
157 e2z = (z32+z41)
158
159 e3x = e1y*e2z-e1z*e2y
160 e3y = e1z*e2x-e1x*e2z
161 e3z = e1x*e2y-e1y*e2x
162 IF (irep > 0) THEN
163 rx = e1x
164 ry = e1y
165 rz = e1z
166 sx = e2x
167 sy = e2y
168 sz = e2z
169 ENDIF
170 IF (ishfram == 0 .OR. igtyp == 16) THEN
171
172 suma = e3x*e3x+e3y*e3y+e3z*e3z
173 suma = one /
max(sqrt(suma),em20)
174 e3x = e3x * suma
175 e3y = e3y * suma
176 e3z = e3z * suma
177
178 s1 = e1x*e1x+e1y*e1y+e1z*e1z
179 s2 = e2x*e2x+e2y*e2y+e2z*e2z
180 suma = sqrt(s1/s2)
181 e1x = e1x + (e2y*e3z-e2z*e3y)*suma
182 e1y = e1y + (e2z*e3x-e2x*e3z)*suma
183 e1z = e1z + (e2x*e3y-e2y*e3x)*suma
184
185 suma = e1x*e1x+e1y*e1y+e1z*e1z
186 suma = one /
max(sqrt(suma),em20)
187 e1x = e1x * suma
188 e1y = e1y * suma
189 e1z = e1z * suma
190
191 e2x = e3y * e1z - e3z * e1y
192 e2y = e3z * e1x - e3x * e1z
193 e2z = e3x * e1y - e3y * e1x
194 ELSEIF (ishfram == 2) THEN
195
196 suma = e2x*e2x+e2y*e2y+e2z*e2z
197 e1x = e1x*suma + e2y*e3z-e2z*e3y
198 e1y = e1y*suma + e2z*e3x-e2x*e3z
199 e1z = e1z*suma + e2x*e3y-e2y*e3x
200 suma = e1x*e1x+e1y*e1y+e1z*e1z
201 suma = one/
max(sqrt(suma),em20)
202 e1x = e1x*suma
203 e1y = e1y*suma
204 e1z = e1z*suma
205
206 suma = e3x*e3x+e3y*e3y+e3z*e3z
207 suma = one /
max(sqrt(suma),em20)
208 e3x = e3x * suma
209 e3y = e3y * suma
210 e3z = e3z * suma
211
212 e2x = e3y*e1z-e3z*e1y
213 e2y = e3z*e1x-e3x*e1z
214 e2z = e3x*e1y-e3y*e1x
215 suma = e2x*e2x
216 suma = one/
max(sqrt(suma),em20)
217 e2x = e2x*suma
218 e2y = e2y*suma
219 e2z = e2z*suma
220 ENDIF
221
222 iprt=ipartc(n)
223 IF (ipart_state(iprt) == 0) cycle
224
225 jj = jj + 1
226 IF (mlw /= 0 .AND. mlw /= 13) THEN
227 wa(jj) = gbuf%OFF(i)
228 ELSE
229 wa(jj) = zero
230 ENDIF
231 jj = jj + 1
232 wa(jj) = iprt
233 jj = jj + 1
234 wa(jj) = ixc(nixc,n)
235 jj = jj + 1
236 wa(jj) = npt
237 jj = jj + 1
238 wa(jj) = npg
239 jj = jj + 1
240 wa(jj) = ihbe
241 jj = jj + 1
242 wa(jj) = igtyp
243 jj = jj + 1
244 wa(jj) = ndir
245 jj = jj + 1
246 wa(jj) = irep
247 IF(idrape > 0 .AND. (igtyp == 51 .OR. igtyp == 52)) THEN
248 DO j=1,nlay
249 nptt = elbuf_tab(ng)%BUFLY(j)%NPTT
250 DO ipt = 1, nptt
251 lbuf_dir => elbuf_tab(ng)%BUFLY(j)%LBUF_DIR(ipt)
252 dir1_1 = lbuf_dir%DIRA(i)
253 dir1_2 = lbuf_dir%DIRA(i+nel)
254 ilaw = elbuf_tab(ng)%BUFLY(j)%ILAW
255 IF (irep == 1) THEN
256 aa = dir1_1
257 bb = dir1_2
258 v1 = aa*rx + bb*sx
259 v2 = aa*ry + bb*sy
260 v3 = aa*rz + bb*sz
261 vr = v1*e1x+ v2*e1y + v3*e1z
262 vs = v1*e2x+ v2*e2y + v3*e2z
263 suma=
max(sqrt(vr*vr + vs*vs) , em20)
264 dir1_1 = vr/suma
265 dir1_2 = vs/suma
266 ELSEIF (irep == 2) THEN
267
268 aa = dir1_1
269 bb = dir1_2
270 v1 = aa*rx + bb*sx
271 v2 = aa*ry + bb*sy
272 v3 = aa*rz + bb*sz
273 vr = v1*e1x+ v2*e1y + v3*e1z
274 vs = v1*e2x+ v2*e2y + v3*e2z
275 suma=
max(sqrt(vr*vr + vs*vs) , em20)
276 dir1_1 = vr/suma
277 dir1_2 = vs/suma
278
279 aa = lbuf_dir%DIRB(i)
280 bb = lbuf_dir%DIRB(i + nel)
281 v1 = aa*rx + bb*sx
282 v2 = aa*ry + bb*sy
283 v3 = aa*rz + bb*sz
284 vr = v1*e1x+ v2*e1y + v3*e1z
285 vs = v1*e2x+ v2*e2y + v3*e2z
286 suma=
max(sqrt(vr*vr + vs*vs) , em20)
287 dir2_1 = vr/suma
288 dir2_2 = vs/suma
289 ELSEIF (irep == 3) THEN
290
291 IF (ilaw == 58) THEN
292
293 aa = dir1_1
294 bb = dir1_2
295 v1 = aa*rx + bb*sx
296 v2 = aa*ry + bb*sy
297 v3 = aa*rz + bb*sz
298 vr = v1*e1x+ v2*e1y + v3*e1z
299 vs = v1*e2x+ v2*e2y + v3*e2z
300 suma=
max(sqrt(vr*vr + vs*vs) , em20)
301 dir1_1 = vr/suma
302 dir1_2 = vs/suma
303
304 aa = lbuf_dir%DIRB(i)
305 bb = lbuf_dir%DIRB(i + nel)
306 v1 = aa*rx + bb*sx
307 v2 = aa*ry + bb*sy
308 v3 = aa*rz + bb*sz
309 vr = v1*e1x+ v2*e1y + v3*e1z
310 vs = v1*e2x+ v2*e2y + v3*e2z
311 suma=
max(sqrt(vr*vr + vs*vs) , em20)
312 dir2_1 = vr/suma
313 dir2_2 = vs/suma
314 ELSE
315
316 ENDIF
317 ELSEIF (irep == 4) THEN
318
319 IF (ilaw == 58) THEN
320
321 aa = dir1_1
322 bb = dir1_2
323 v1 = aa*rx + bb*sx
324 v2 = aa*ry + bb*sy
325 v3 = aa*rz + bb*sz
326 vr = v1*e1x+ v2*e1y + v3*e1z
327 vs = v1*e2x+ v2*e2y + v3*e2z
328 suma=
max(sqrt(vr*vr + vs*vs) , em20)
329 dir1_1 = vr/suma
330 dir1_2 = vs/suma
331
332 aa = lbuf_dir%DIRB(i)
333 bb = lbuf_dir%DIRB(i + nel)
334 v1 = aa*rx + bb*sx
335 v2 = aa*ry + bb*sy
336 v3 = aa*rz + bb*sz
337 vr = v1*e1x+ v2*e1y + v3*e1z
338 vs = v1*e2x+ v2*e2y + v3*e2z
339 suma=
max(sqrt(vr*vr + vs*vs) , em20)
340 dir2_1 = vr/suma
341 dir2_2 = vs/suma
342 ELSE
343 aa = dir1_1
344 bb = dir1_2
345 v1 = aa*rx + bb*sx
346 v2 = aa*ry + bb*sy
347 v3 = aa*rz + bb*sz
348 vr = v1*e1x+ v2*e1y + v3*e1z
349 vs = v1*e2x+ v2*e2y + v3*e2z
351 dir1_1 = vr/suma
352 dir1_2 = vs/suma
353 ENDIF
354 ENDIF
355
356 jj = jj + 1
357 wa(jj) = ilaw
358
359 jj = jj + 1
360 IF (mlw /= 0 .AND. mlw /= 13) THEN
361 wa(jj) = dir1_1
362 ELSE
363 wa(jj) = zero
364 ENDIF
365 jj = jj + 1
366 IF (mlw /= 0 .AND. mlw /= 13) THEN
367 wa(jj) = dir1_2
368 ELSE
369 wa(jj) = zero
370 ENDIF
371 IF (irep > 1 .AND. ilaw == 58) THEN
372 jj = jj + 1
373 IF (mlw /= 0 .AND. mlw /= 13) THEN
374 wa(jj) = dir2_1
375 ELSE
376 wa(jj) = zero
377 ENDIF
378 jj = jj + 1
379 IF (mlw /= 0 .AND. mlw /= 13) THEN
380 wa(jj) = dir2_2
381 ELSE
382 wa(jj) = zero
383 ENDIF
384 ENDIF
385 ENDDO
386 ENDDO
387 ELSEIF (igtyp == 9 .OR. igtyp == 10 .OR. igtyp == 11 .OR.
388 . igtyp == 16 .OR. igtyp == 17 .OR. igtyp == 51 .OR.
389 . igtyp == 52) THEN
390 DO j=1,nlay
391 dir1_1 = elbuf_tab(ng)%BUFLY(j)%DIRA(i)
392 dir1_2 = elbuf_tab(ng)%BUFLY(j)%DIRA(i + nel)
393 ilaw = elbuf_tab(ng)%BUFLY(j)%ILAW
394 IF (irep == 1) THEN
395 aa = dir1_1
396 bb = dir1_2
397 v1 = aa*rx + bb*sx
398 v2 = aa*ry + bb*sy
399 v3 = aa*rz + bb*sz
400 vr = v1*e1x+ v2*e1y + v3*e1z
401 vs = v1*e2x+ v2*e2y + v3*e2z
402 suma=
max(sqrt(vr*vr + vs*vs) , em20)
403 dir1_1 = vr/suma
404 dir1_2 = vs/suma
405 ELSEIF (irep == 2) THEN
406
407 aa = dir1_1
408 bb = dir1_2
409 v1 = aa*rx + bb*sx
410 v2 = aa*ry + bb*sy
411 v3 = aa*rz + bb*sz
412 vr = v1*e1x+ v2*e1y + v3*e1z
413 vs = v1*e2x+ v2*e2y + v3*e2z
414 suma=
max(sqrt(vr*vr + vs*vs) , em20)
415 dir1_1 = vr/suma
416 dir1_2 = vs/suma
417
418 aa = elbuf_tab(ng)%BUFLY(j)%DIRB(i)
419 bb = elbuf_tab(ng)%BUFLY(j)%DIRB(i + nel)
420 v1 = aa*rx + bb*sx
421 v2 = aa*ry + bb*sy
422 v3 = aa*rz + bb*sz
423 vr = v1*e1x+ v2*e1y + v3*e1z
424 vs = v1*e2x+ v2*e2y + v3*e2z
425 suma=
max(sqrt(vr*vr + vs*vs) , em20)
426 dir2_1 = vr/suma
427 dir2_2 = vs/suma
428 ELSEIF (irep == 3) THEN
429
430 IF (ilaw == 58) THEN
431
432 aa = dir1_1
433 bb = dir1_2
434 v1 = aa*rx + bb*sx
435 v2 = aa*ry + bb*sy
436 v3 = aa*rz + bb*sz
437 vr = v1*e1x+ v2*e1y + v3*e1z
438 vs = v1*e2x+ v2*e2y + v3*e2z
439 suma=
max(sqrt(vr*vr + vs*vs) , em20)
440 dir1_1 = vr/suma
441 dir1_2 = vs/suma
442
443 aa = elbuf_tab(ng)%BUFLY(j)%DIRB(i)
444 bb = elbuf_tab(ng)%BUFLY(j)%DIRB(i + nel)
445 v1 = aa*rx + bb*sx
446 v2 = aa*ry + bb*sy
447 v3 = aa*rz + bb*sz
448 vr = v1*e1x+ v2*e1y + v3*e1z
449 vs = v1*e2x+ v2*e2y + v3*e2z
450 suma=
max(sqrt(vr*vr + vs*vs) , em20)
451 dir2_1 = vr/suma
452 dir2_2 = vs/suma
453 ELSE
454
455 ENDIF
456 ELSEIF (irep == 4) THEN
457
458 IF (ilaw == 58) THEN
459
460 aa = dir1_1
461 bb = dir1_2
462 v1 = aa*rx + bb*sx
463 v2 = aa*ry + bb*sy
464 v3 = aa*rz + bb*sz
465 vr = v1*e1x+ v2*e1y + v3*e1z
466 vs = v1*e2x+ v2*e2y + v3*e2z
467 suma=
max(sqrt(vr*vr + vs*vs) , em20)
468 dir1_1 = vr/suma
469 dir1_2 = vs/suma
470
471 aa = elbuf_tab(ng)%BUFLY(j)%DIRB(i)
472 bb = elbuf_tab(ng)%BUFLY(j)%DIRB(i + nel)
473 v1 = aa*rx + bb*sx
474 v2 = aa*ry + bb*sy
475 v3 = aa*rz + bb*sz
476 vr = v1*e1x+ v2*e1y + v3*e1z
477 vs = v1*e2x+ v2*e2y + v3*e2z
478 suma=
max(sqrt(vr*vr + vs*vs) , em20)
479 dir2_1 = vr/suma
480 dir2_2 = vs/suma
481 ELSE
482 aa = dir1_1
483 bb = dir1_2
484 v1 = aa*rx + bb*sx
485 v2 = aa*ry + bb*sy
486 v3 = aa*rz + bb*sz
487 vr = v1*e1x+ v2*e1y + v3*e1z
488 vs = v1*e2x+ v2*e2y + v3*e2z
489 suma=
max(sqrt(vr*vr + vs*vs) , em20)
490 dir1_1 = vr/suma
491 dir1_2 = vs/suma
492 ENDIF
493 ENDIF
494
495 jj = jj + 1
496 wa(jj) = ilaw
497
498 jj = jj + 1
499 IF (mlw /= 0 .AND. mlw /= 13) THEN
500 wa(jj) = dir1_1
501 ELSE
502 wa(jj) = zero
503 ENDIF
504 jj = jj + 1
505 IF (mlw /= 0 .AND. mlw /= 13) THEN
506 wa(jj) = dir1_2
507 ELSE
508 wa(jj) = zero
509 ENDIF
510 IF (irep > 1 .AND. ilaw == 58) THEN
511 jj = jj + 1
512 IF (mlw /= 0 .AND. mlw /= 13) THEN
513 wa(jj) = dir2_1
514 ELSE
515 wa(jj) = zero
516 ENDIF
517 jj = jj + 1
518 IF (mlw /= 0 .AND. mlw /= 13) THEN
519 wa(jj) = dir2_2
520 ELSE
521 wa(jj) = zero
522 ENDIF
523 ENDIF
524 ENDDO
525 ENDIF
526
527 ie=ie+1
528
529 ptwa(ie)=jj
530
531 ENDDO
532 ENDIF
533 ENDDO
534
535 200 CONTINUE
536
537 IF (nspmd == 1) THEN
538 ptwa_p0(0)=0
539 DO n=1,stat_numelc
540 ptwa_p0(n)=ptwa(n)
541 ENDDO
542 len=jj
543 DO j=1,len
544 wap0(j)=wa(j)
545 ENDDO
546 ELSE
547
549 len = 0
551 ENDIF
552
553 IF (ispmd == 0.AND.len > 0) THEN
554 iprt0=0
555 DO n=1,stat_numelc_g
556
557
558 k=stat_indxc(n)
559
560 j=ptwa_p0(k-1)
561
562 ioff = nint(wap0(j + 1))
563 IF(idel==0.OR.(idel==1.AND.ioff >=1))THEN
564 iprt = nint(wap0(j + 2))
565 IF (iprt /= iprt0) THEN
566 IF (izipstrs == 0) THEN
567 WRITE(iugeo,'(A)') delimit
568 WRITE(iugeo,'(A)')'/INISHE/ORTH_LOC'
569 WRITE(iugeo,'(A)')
570 .'#------------------------ REPEAT --------------------------'
571 WRITE(iugeo,'(A)')
572 . '# SHELLID NIP NDIR'
573 WRITE(iugeo,'(A)')
574 .'#---------------------- END REPEAT ------------------------'
575 WRITE(iugeo,'(A)') delimit
576 ELSE
577 WRITE(line,'(A)') delimit
579 WRITE(line,'(A)')'/INISHE/ORTH_LOC'
581 WRITE(line,'(A)')
582 .'#------------------------ REPEAT --------------------------'
584 WRITE(line,'(A)')
585 . '# SHELLID NIP NDIR'
587 WRITE(line,'(A)')
588 .'#---------------------- END REPEAT ------------------------'
590 WRITE(line,'(A)') delimit
592 ENDIF
593 iprt0=iprt
594 ENDIF
595 id = nint(wap0(j + 3))
596 npt = nint(wap0(j + 4))
597 npg = nint(wap0(j + 5))
598 ihbe = nint(wap0(j + 6))
599 igtyp = nint(wap0(j + 7))
600 ndir = nint(wap0(j + 8))
601 irep = nint(wap0(j + 9))
602 j = j + 9
603 IF (igtyp == 9) THEN
604 npt = 1
605
606 j = j + 1
607 angle1 = atan2(wap0(j + 2), wap0(j + 1))
608 IF(flagdeg == 1) angle1=angle1*hundred80/pi
609 IF (izipstrs ==THEN
610 WRITE(iugeo,
'(5I10)')
id,npt,npg,ndir,flagdeg
611 WRITE(iugeo,'(1PE20.13)')angle1
612 ELSE
613 WRITE(line,
'(5I10)')
id,npt,npg,ndir,flagdeg
615 WRITE(line,'(1PE20.13)')angle1
617 ENDIF
618 j = j + 2
619 ELSEIF (igtyp == 10 .OR. igtyp == 11 .OR. igtyp == 16.OR.
620 . igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52) THEN
621 IF (izipstrs == 0) THEN
622 WRITE(iugeo,
'(5I10)')
id,npt,npg,ndir,flagdeg
623 ELSE
624 WRITE(line,
'(5I10)')
id,npt,npg,ndir,flagdeg
626 ENDIF
627 DO i=1,npt
628
629 ilaw = wap0(j + 1)
630 j = j + 1
631
632 IF (irep == 2 .OR. (irep > 2 .AND. ilaw == 58)) THEN
633
634 angle1 = atan2(wap0(j + 2)
635 angle2 = atan2
636 angle2 = mod(angle2
637 IF (flagdeg == 1) angle1=angle1*hundred80/pi
638 IF (flagdeg == 1) angle2=angle2*hundred80
639 IF (izipstrs == 0) THEN
640 WRITE(iugeo,'(1P2E20.13)')angle1,angle2
641 ELSE
642 WRITE(line,'(1P2E20.13)')angle1,angle2
644 ENDIF
645 j = j + 4
646 ELSE
647 angle1 = atan2(wap0(j + 2), wap0(j + 1))
648 IF (flagdeg == 1) angle1=angle1*hundred80/pi
649 IF (izipstrs == 0) THEN
650 WRITE(iugeo,'(1PE20.13)')angle1
651 ELSE
652 WRITE(line,'(1PE20.13)')angle1
654 ENDIF
655 j = j + 2
656 ENDIF
657
658 ENDDO
659 ENDIF
660 ENDIF
661 ENDDO
662 ENDIF
663
664
665
666 jj = 0
667 IF (stat_numeltg==0) GOTO 300
668
669 ie=0
670
671 DO ng=1,ngroup
672 ity = iparg(5,ng)
673 IF (ity == 7) THEN
674 gbuf => elbuf_tab(ng)%GBUF
675 mlw = iparg(1,ng)
676 nel = iparg(2,ng)
677 nft = iparg(3,ng)
678 npt = iparg(6,ng)
679 ish3n= iparg(23,ng)
680 igtyp= iparg(38,ng)
681 npg = elbuf_tab(ng)%NPTR*elbuf_tab(ng)%NPTS
682 irep = iparg(35,ng)
683 nlay = elbuf_tab(ng)%NLAY
684 idrape = elbuf_tab(ng)%IDRAPE
685 nply_max = 0
686 IF(idrape > 0 . and. (igtyp == 51 .OR. igtyp == 52)) THEN
687 nply_max = 0
688 DO j = 1,nlay
689 nply_max = nply_max + elbuf_tab(ng)%BUFLY(j)%NPTT
690 ENDDO
691 ENDIF
692 npt =
max(nply_max, npt)
693 ndir = 1
694 IF (ish3n==3.AND.ish3nfram==0) THEN
695 ifram_old =0
696 ELSE
697 ifram_old =1
698 END IF
699 IF (irep > 1) ndir = 2
700 lft=1
701 llt=nel
702
703
704 DO i=lft,llt
705 n = i + nft
706
707 x21 = x(1,ixtg(3,n))-x(1,ixtg(2,n))
708 x31 = x(1,ixtg(4,n))-x(1,ixtg(2,n))
709 x32 = x(1,ixtg(4,n))-x(1,ixtg(3,n))
710
711 y21 = x(2,ixtg(3,n))-x(2,ixtg(2,n))
712 y31 = x(2,ixtg(4,n))-x(2,ixtg(2,n))
713 y32 = x(2,ixtg(4,n))-x
714
715 z21 = x(3,ixtg(3,n))-x(3,ixtg(2,n))
716 z31 = x(3,ixtg(4,n))-x(3,ixtg(2,n))
717 z32 = x(3,ixtg(4,n))-x(3,ixtg(3,n))
718
719 IF (irep > 0) THEN
720
721
722
723
724
725
726 rx = x21
727 ry = y21
728 rz = z21
729 sx = x31
730 sy = y31
731 sz = z31
732 ENDIF
733 IF(ifram_old ==0 ) THEN
734 CALL clsconv3(x21,y21,z21,x31,y31,z31,
735 + e1x,e1y,e1z,e2x,e2y,e2z,e3x,e3y,e3z)
736 ELSE
737 e1x= x21
738 e1y= y21
739 e1z= z21
740 x2l = sqrt(e1x*e1x+e1y*e1y+e1z*e1z)
741 e1x=e1x/x2l
742 e1y=e1y/x2l
743 e1z=e1z/x2l
744
745 e3x=y31*z32-z31*y32
746 e3y=z31*x32-x31*z32
747 e3z=x31*y32-y31*x32
748 sum = sqrt(e3x*e3x+e3y*e3y+e3z*e3z)
749 e3x=e3x/sum
750 e3y=e3y/sum
751 e3z=e3z/sum
753 e2x=e3y*e1z-e3z*e1y
754 e2y=e3z*e1x-e3x*e1z
755 e2z=e3x*e1y-e3y*e1x
756 sum = sqrt(e2x*e2x+e2y*e2y+e2z*e2z)
757 e2x=e2x/sum
758 e2y=e2y/sum
759 e2z=e2z/sum
760 END IF
761
762 iprt=iparttg(n)
763 IF (ipart_state(iprt)==0) cycle
764
765 jj = jj + 1
766 IF (mlw /= 0 .AND. mlw /= 13) THEN
767 wa(jj) = gbuf%OFF(i)
768 ELSE
769 wa(jj) = zero
770 ENDIF
771 jj = jj + 1
772 wa(jj) = iprt
773 jj = jj + 1
774 wa(jj) = ixtg(nixtg,n)
775 jj = jj + 1
776 wa(jj) = npt
777 jj = jj + 1
778 wa(jj) = npg
779 jj = jj + 1
780 wa(jj) = ish3n
781 jj = jj + 1
782 wa(jj) = igtyp
783 jj = jj + 1
784 wa(jj) = ndir
785 jj = jj + 1
786 wa(jj) = irep
787 IF (igtyp == 9 .OR. igtyp == 10 .OR. igtyp == 11 .OR.
788 . igtyp == 16 .OR. igtyp == 17 .OR. igtyp == 51 .OR.
789 . igtyp == 52 ) THEN
790 IF(idrape > 0 .AND. (igtyp == 51 .OR. igtyp == 52)) THEN
791 DO j=1,nlay
792 nptt = elbuf_tab(ng)%BUFLY(j)%NPTT
793 DO ipt = 1, nptt
794 lbuf_dir => elbuf_tab(ng)%BUFLY(j)%LBUF_DIR(ipt)
795 dir1_1 = lbuf_dir%DIRA(i)
796 dir1_2 = lbuf_dir%DIRA(i + nel)
797 ilaw = elbuf_tab(ng)%BUFLY(j)%ILAW
798 IF (irep == 1) THEN
799 aa = dir1_1
800 bb = dir1_2
801 v1 = aa*rx + bb*sx
802 v2 = aa*ry + bb*sy
803 v3 = aa*rz + bb*sz
804 vr = v1*e1x+ v2*e1y +
805 vs = v1*e2x+ v2*e2y + v3*e2z
806 suma=
max(sqrt(vr*vr + vs*vs) , em20)
807 dir1_1 = vr/suma
808 dir1_2 = vs/suma
809 ELSEIF (irep == 2) THEN
810
811 aa = dir1_1
812 bb = dir1_2
813 v1 = aa*rx + bb*sx
814 v2 = aa*ry + bb*sy
815 v3 = aa*rz + bb*sz
816 vr = v1*e1x+ v2*e1y + v3*e1z
817 vs = v1*e2x+ v2*e2y + v3*e2z
818 suma=
max(sqrt(vr*vr + vs*vs) , em20)
819 dir1_1 = vr/suma
820 dir1_2 = vs/suma
821
822 aa = lbuf_dir%DIRB(i)
823 bb = lbuf_dir%DIRB(i + nel)
824 v1 = aa*rx + bb*sx
825 v2 = aa*ry + bb*sy
826 v3 = aa*rz + bb*sz
827 vr = v1*e1x+ v2*e1y + v3*e1z
828 vs = v1*e2x+ v2*e2y + v3*e2z
829 suma=
max(sqrt(vr*vr + vs*vs) , em20)
830 dir2_1 = vr/suma
831 dir2_2 = vs/suma
832 ELSEIF (irep == 3) THEN
833
834 IF (ilaw == 58) THEN
835
836 aa = dir1_1
837 bb = dir1_2
838 v1 = aa*rx + bb*sx
839 v2 = aa*ry + bb*sy
840 v3 = aa*rz + bb*sz
841 vr = v1*e1x+ v2*e1y + v3*e1z
842 vs = v1*e2x+ v2*e2y + v3*e2z
843 suma=
max(sqrt(vr*vr + vs*vs) , em20)
844 dir1_1 = vr/suma
845 dir1_2 = vs/suma
846
847 aa = lbuf_dir%DIRB(i)
848 bb = lbuf_dir%DIRB(i + nel)
849 v1 = aa*rx + bb*sx
850 v2 = aa*ry + bb*sy
851 v3 = aa*rz + bb*sz
852 vr = v1*e1x+ v2*e1y + v3*e1z
853 vs = v1*e2x+ v2*e2y + v3*e2z
854 suma=
max(sqrt(vr*vr + vs*vs) , em20)
855 dir2_1 = vr/suma
856 dir2_2 = vs/suma
857 ELSE
858
859 ENDIF
860 ELSEIF (irep == 4) THEN
861
862 IF (ilaw == 58) THEN
863
864 aa = dir1_1
865 bb = dir1_2
866 v1 = aa*rx + bb*sx
867 v2 = aa*ry + bb*sy
868 v3 = aa*rz + bb*sz
869 vr = v1*e1x+ v2*e1y + v3*e1z
870 vs = v1*e2x+ v2*e2y + v3*e2z
871 suma=
max(sqrt(vr*vr + vs*vs) , em20)
872 dir1_1 = vr/suma
873 dir1_2 = vs/suma
874
875 aa = lbuf_dir%DIRB(i)
876 bb = lbuf_dir%DIRB(i + nel)
877 v1 = aa*rx + bb*sx
878 v2 = aa*ry + bb*sy
879 v3 = aa*rz + bb*sz
880 vr = v1*e1x+ v2*e1y + v3*e1z
881 vs = v1*e2x+ v2*e2y + v3*e2z
882 suma=
max(sqrt(vr*vr + vs*vs) , em20)
883 dir2_1 = vr/suma
884 dir2_2 = vs/suma
885 ELSE
886 aa = dir1_1
887 bb = dir1_2
888 v1 = aa*rx + bb*sx
889 v2 = aa*ry + bb*sy
890 v3 = aa*rz + bb*sz
891 vr = v1*e1x+ v2*e1y + v3*e1z
892 vs = v1*e2x+ v2*e2y + v3*e2z
893 suma=
max(sqrt(vr*vr + vs*vs) , em20)
894 dir1_1 = vr/suma
895 dir1_2 = vs/suma
896 ENDIF
897 ENDIF
898
899 jj = jj + 1
900 wa(jj) = ilaw
901
902 jj = jj + 1
903 IF (mlw /= 0 .AND. mlw /= 13) THEN
904 wa(jj) = dir1_1
905 ELSE
906 wa(jj) = zero
907 ENDIF
908 jj = jj + 1
909 IF (mlw /= 0 .AND. mlw /= 13) THEN
910 wa(jj) = dir1_2
911 ELSE
912 wa(jj) = zero
913 ENDIF
914 IF (irep > 1 .AND. ilaw == 58) THEN
915 jj = jj + 1
916 IF (mlw /= 0 .AND. mlw /= 13) THEN
917 wa(jj) = dir2_1
918 ELSE
919 wa(jj) = zero
920 ENDIF
921 jj = jj + 1
922 IF (mlw /= 0 .AND. mlw /= 13) THEN
923 wa(jj) = dir2_2
924 ELSE
925 wa(jj) = zero
926 ENDIF
927 ENDIF
928 ENDDO
929 ENDDO
930 ELSE
931 DO j=1,nlay
932 dir1_1 = elbuf_tab(ng)%BUFLY(j)%DIRA(i)
933 dir1_2 = elbuf_tab(ng)%BUFLY(j)%DIRA(i + nel)
934 ilaw = elbuf_tab(ng)%BUFLY(j)%ILAW
935 IF (irep == 1) THEN
936 aa = dir1_1
937 bb = dir1_2
938 v1 = aa*rx + bb*sx
939 v2 = aa*ry + bb*sy
940 v3 = aa*rz + bb*sz
941 vr = v1*e1x+ v2*e1y + v3*e1z
942 vs = v1*e2x+ v2*e2y + v3*e2z
943 suma=
max(sqrt(vr*vr + vs*vs) , em20)
944 dir1_1 = vr/suma
945 dir1_2 = vs/suma
946 ELSEIF (irep == 2) THEN
947
948 aa = dir1_1
949 bb = dir1_2
950 v1 = aa*rx + bb*sx
951 v2 = aa*ry + bb*sy
952 v3 = aa*rz + bb*sz
953 vr = v1*e1x+ v2*e1y + v3*e1z
954 vs = v1*e2x+ v2*e2y + v3*e2z
955 suma=
max(sqrt(vr*vr + vs*vs) , em20)
956 dir1_1 = vr/suma
957 dir1_2 = vs/suma
958
959 aa = elbuf_tab(ng)%BUFLY(j)%DIRB(i)
960 bb = elbuf_tab(ng)%BUFLY(j)%DIRB(i + nel)
961 v1 = aa*rx + bb*sx
962 v2 = aa*ry + bb*sy
963 v3 = aa*rz + bb*sz
964 vr = v1*e1x+ v2*e1y + v3*e1z
965 vs = v1*e2x+ v2*e2y + v3*e2z
966 suma=
max(sqrt(vr*vr + vs*vs) , em20)
967 dir2_1 = vr/suma
968 dir2_2 = vs/suma
969 ELSEIF (irep == 3) THEN
970
971 IF (ilaw == 58) THEN
972
973 aa = dir1_1
974 bb = dir1_2
975 v1 = aa*rx + bb*sx
976 v2 = aa*ry + bb*sy
977 v3 = aa*rz + bb*sz
978 vr = v1*e1x+ v2*e1y + v3*e1z
979 vs = v1*e2x+ v2*e2y + v3*e2z
980 suma=
max(sqrt(vr*vr + vs*vs) , em20)
981 dir1_1 = vr/suma
982 dir1_2 = vs/suma
983
984 aa = elbuf_tab(ng)%BUFLY(j)%DIRB(i)
985 bb = elbuf_tab(ng)%BUFLY(j)%DIRB(i + nel)
986 v1 = aa*rx + bb*sx
987 v2 = aa*ry + bb*sy
988 v3 = aa*rz + bb*sz
989 vr = v1*e1x+ v2*e1y + v3*e1z
990 vs = v1*e2x+ v2*e2y + v3*e2z
991 suma=
max(sqrt(vr*vr + vs*vs) , em20)
992 dir2_1 = vr/suma
993 dir2_2 = vs/suma
994 ELSE
995
996 ENDIF
997 ELSEIF (irep == 4) THEN
998
999 IF (ilaw == 58) THEN
1000
1001 aa = dir1_1
1002 bb = dir1_2
1003 v1 = aa*rx + bb*sx
1004 v2 = aa*ry + bb*sy
1005 v3 = aa*rz + bb*sz
1006 vr = v1*e1x+ v2*e1y + v3*e1z
1007 vs = v1*e2x+ v2*e2y + v3*e2z
1008 suma=
max(sqrt(vr*vr + vs*vs) , em20)
1009 dir1_1 = vr/suma
1010 dir1_2 = vs/suma
1011
1012 aa = elbuf_tab(ng)%BUFLY(j)%DIRB(i)
1013 bb = elbuf_tab(ng)%BUFLY(j)%DIRB(i + nel)
1014 v1 = aa*rx + bb*sx
1015 v2 = aa*ry + bb*sy
1016 v3 = aa*rz + bb*sz
1017 vr = v1*e1x+ v2*e1y + v3*e1z
1018 vs = v1*e2x+ v2*e2y + v3*e2z
1019 suma=
max(sqrt(vr*vr + vs*vs) , em20)
1020 dir2_1 = vr/suma
1021 dir2_2 = vs/suma
1022 ELSE
1023 aa = dir1_1
1024 bb = dir1_2
1025 v1 = aa*rx + bb*sx
1026 v2 = aa*ry + bb*sy
1027 v3 = aa*rz + bb*sz
1028 vr = v1*e1x+ v2*e1y + v3*e1z
1029 vs = v1*e2x+ v2*e2y + v3*e2z
1030 suma=
max(sqrt(vr*vr + vs*vs) , em20)
1031 dir1_1 = vr/suma
1032 dir1_2 = vs/suma
1033 ENDIF
1034 ENDIF
1035
1036 jj = jj + 1
1037 wa(jj) = ilaw
1038
1039 jj = jj + 1
1040 IF (mlw /= 0 .AND. mlw /= 13) THEN
1041 wa(jj) = dir1_1
1042 ELSE
1043 wa(jj) = zero
1044 ENDIF
1045 jj = jj + 1
1046 IF (mlw /= 0 .AND. mlw /= 13) THEN
1047 wa(jj) = dir1_2
1048 ELSE
1049 wa(jj) = zero
1050 ENDIF
1051 IF (irep > 1 .AND. ilaw == 58) THEN
1052 jj = jj + 1
1053 IF (mlw /= 0 .AND. mlw /= 13) THEN
1054 wa(jj) = dir2_1
1055 ELSE
1056 wa(jj) = zero
1057 ENDIF
1058 jj = jj + 1
1059 IF (mlw /= 0 .AND. mlw /= 13) THEN
1060 wa(jj) = dir2_2
1061 ELSE
1062 wa(jj) = zero
1063 ENDIF
1064 ENDIF
1065 ENDDO
1066 ENDIF
1067 ENDIF
1068
1069 ie=ie+1
1070
1071 ptwa(ie)=jj
1072
1073 ENDDO
1074 ENDIF
1075 ENDDO
1076
1077 300 CONTINUE
1078
1079 IF (nspmd == 1) THEN
1080 len=jj
1081 DO j=1,len
1082 wap0(j)=wa(j)
1083 ENDDO
1084 ptwa_p0(0)=0
1085 DO n=1,stat_numeltg
1086 ptwa_p0(n)=ptwa(n)
1087 ENDDO
1088 ELSE
1089
1091 len = 0
1093 ENDIF
1094
1095 IF (ispmd == 0.AND.len > 0) THEN
1096
1097 iprt0=0
1098 DO n=1,stat_numeltg_g
1099
1100 k=stat_indxtg(n)
1101
1102 j=ptwa_p0(k-1)
1103
1104 ioff = nint(wap0(j + 1))
1105 IF(idel==0.OR.(idel==1.AND.ioff >=1))THEN
1106 iprt = nint(wap0(j + 2))
1107 IF (iprt /= iprt0) THEN
1108 IF (izipstrs == 0) THEN
1109 WRITE(iugeo,'(A)') delimit
1110 WRITE(iugeo,'(A)')'/INISH3/ORTH_LOC'
1111 WRITE(iugeo,'(A)')
1112 .'#------------------------ REPEAT --------------------------'
1113 WRITE(iugeo,'(A)')
1114 . '# SHELLID NIP NDIR'
1115 WRITE(iugeo,'(A)')
1116 .'#---------------------- END REPEAT ------------------------'
1117 WRITE(iugeo,'(A)') delimit
1118 ELSE
1119 WRITE(line,'(A)') delimit
1121 WRITE(line,'(A)')'/INISH3/ORTH_LOC'
1123 WRITE(line,'(A)')
1124 .'#------------------------ REPEAT --------------------------'
1126 WRITE(line,'(A)')
1127 . '# SHELLID NIP NDIR'
1129 WRITE(line,'(A)')
1130 .'#---------------------- END REPEAT ------------------------'
1132 WRITE(line,'(A)') delimit
1134 ENDIF
1135 iprt0=iprt
1136 ENDIF
1137 id = nint(wap0(j + 3))
1138 npt = nint(wap0(j + 4))
1139 npg = nint(wap0(j + 5))
1140 ish3n = nint(wap0(j + 6))
1141 igtyp = nint(wap0(j + 7))
1142 ndir = nint(wap0(j + 8))
1143 irep = nint(wap0(j + 9))
1144 j = j + 9
1145 IF (igtyp == 9) THEN
1146 npt = 1
1147
1148 j = j + 1
1149 angle1 = atan2(wap0(j + 2), wap0(j + 1))
1150 IF (flagdeg == 1) angle1
1151 IF (izipstrs == 0) THEN
1152 WRITE(iugeo,
'(5I10)')
id,npt,npg,ndir,flagdeg
1153 WRITE(iugeo,'(1PE20.13)')angle1
1154 ELSE
1155 WRITE(line,
'(5I10)')
id,npt,npg,ndir,flagdeg
1157 WRITE(line,'(1PE20.13)')angle1
1159 ENDIF
1160 j = j + 2
1161 ELSEIF (igtyp == 10 .OR. igtyp == 11 .OR. igtyp == 16 .OR.
1162 . igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52 ) THEN
1163 IF (izipstrs == 0) THEN
1164 WRITE(iugeo,
'(5I10)')
id,npt,npg,ndir,flagdeg
1165 ELSE
1166 WRITE(line,
'(5I10)')
id,npt,npg,ndir,flagdeg
1168 ENDIF
1169 DO i=1,npt
1170 ilaw = wap0(j + 1)
1171 j = j + 1
1172 IF (irep == 2 .OR. (irep > 2 .AND. ilaw == 58)) THEN
1173
1174 angle1 = atan2(wap0(j + 2), wap0(j + 1))
1175 angle2 = atan2(wap0(j + 4), wap0(j + 3))
1176 angle2 = mod(angle2 - angle1,two*pi)
1177 IF (flagdeg == 1) angle1=angle1*hundred80/pi
1178 IF (flagdeg == 1) angle2=angle2*hundred80/pi
1179 IF (izipstrs == 0) THEN
1180 WRITE(iugeo,'(1P2E20.13)')angle1,angle2
1181 ELSE
1182 WRITE(line,'(1P2E20.13)')angle1,angle2
1184 ENDIF
1185 j = j + 4
1186 ELSE
1187 angle1 = atan2(wap0(j + 2), wap0(j + 1))
1188 IF (flagdeg == 1) angle1=angle1*hundred80/pi
1189 IF (izipstrsTHEN
1190 WRITE(iugeo,'(1PE20.13)')angle1
1191 ELSE
1192 WRITE(line,'(1PE20.13)')angle1
1194 ENDIF
1195 j = j + 2
1196 ENDIF
1197 ENDDO
1198 ENDIF ! IF (igtyp == 9)
1199 ENDIF
1200 ENDDO
1201 ENDIF
1202
1203 DEALLOCATE(ptwa)
1204 DEALLOCATE(ptwa_p0)
1205
1206 RETURN
subroutine clsconv3(rx, ry, rz, sx, sy, sz, e1x, e1y, e1z, e2x, e2y, e2z, e3x, e3y, e3z)
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine spmd_rgather9_dp(v, len, vp0, lenp0, iad)
subroutine spmd_stat_pgather(ptv, ptlen, ptv_p0, ptlen_p0)
subroutine strs_txt50(text, length)