37 1 ELBUF_TAB ,IPARG ,IPM ,IGEO ,IXC ,
38 2 IXTG ,WA ,WAP0 ,IPARTC,IPARTTG,
39 3 IPART_STATE,STAT_INDXC,STAT_INDXTG,THKE ,SIZP0)
48#include "implicit_f.inc"
63 INTEGER IXC(NIXC,*),(NIXTG,*),
64 . (NPARG,*),IPM(NPROPMI,*),IGEO(NPROPGI,*),
65 . ipartc(*), iparttg(*), ipart_state(*),
66 . stat_indxc(*), stat_indxtg(*)
69 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
70 double precision WA(*),WAP0(*)
74 INTEGER ,J,K,N,II,JJ,LEN,IOFF,IE,NG,NEL,NFT,LFT,NPT,
75 . LLT,ITY,MLW,IH,IHBE, ID, IPRT0, IPRT,IR,IS,IT,
76 . NPG,IPG,MPT,IPT,NPTR,NPTS,NPTT,NLAY,L_PLA,ITHK,
77 . igtyp,npt_all,il,kk(12)
78 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PTWA
79 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PTWA_P0
81 . thk, em, eb, h1, h2, h3
83 . pg,mpg,qpg(2,4),thkq,
84 . sk(2),st(2),mk(2),mt(2),shk(2),sht(2),z01(11,11),zz
85 CHARACTER*100 DELIMIT,LINE
86 TYPE(G_BUFEL_) ,
POINTER :: GBUF
87 TYPE(L_BUFEL_) ,
POINTER :: LBUF
88 TYPE(buf_lay_) ,
POINTER :: BUFLY
90 parameter(pg = .577350269189626)
91 parameter(mpg=-.577350269189626)
92 DATA qpg/mpg,mpg,pg,mpg,pg,pg,mpg,pg/
94 1 0. ,0. ,0. ,0. ,0. ,
95 1 0. ,0. ,0. ,0. ,0. ,0. ,
96 2 -.5 ,0.5 ,0. ,0. ,0. ,
97 2 0. ,0. ,0. ,0. ,0. ,0. ,
98 3 -.5 ,0. ,0.5 ,0. ,0. ,
99 3 0. ,0. ,0. ,0. ,0. ,0. ,
100 4 -.5 ,-.1666667,0.1666667,0.5 ,0. ,
101 4 0. ,0. ,0. ,0. ,0. ,0. ,
102 5 -.5 ,-.25 ,0. ,0.25 ,0.5 ,
103 5 0. ,0. ,0. ,0. ,0. ,0. ,
104 6 -.5 ,-.3 ,-.1 ,0.1 ,0.3 ,
105 6 0.5 ,0. ,0. ,0. ,0. ,0. ,
106 7 -.5 ,-.3333333,-.1666667,0.0 ,0.1666667,
107 7 0.3333333,0.5 ,0. ,0. ,0. ,0. ,
108 8 -.5 ,-.3571429,-.2142857,-.0714286,0.0714286,
109 8 0.2142857,0.3571429,0.5 ,0. ,0. ,0. ,
110 9 -.5 ,-.375 ,-.25 ,-.125 ,0.0 ,
111 9 0.125 ,0.25 ,0.375 ,0.5 ,0. ,0. ,
112 a -.5 ,-.3888889,-.2777778,-.1666667,0.0555555,
113 a 0.0555555,0.1666667,0.2777778,0.3888889,0.5 ,0. ,
114 b -.5 ,-.4 ,-.3 ,-.2 ,-.1 ,
115 b 0. ,0.1 ,0.2 ,0.3 ,0.4 ,0.5 /
117 ./
'#---1----|----2----|----3----|----4----|----5----|----6----|'/
119 ./
'----7----|----8----|----9----|----10---|'/
121 CALL my_alloc(ptwa,
max(stat_numelc ,stat_numeltg))
122 ALLOCATE(ptwa_p0(0:
max(1,stat_numelc_g,stat_numeltg_g)))
127 IF (stat_numelc==0)
GOTO 200
133 gbuf => elbuf_tab(ng)%GBUF
141 nptr = elbuf_tab(ng)%NPTR
142 npts = elbuf_tab(ng)%NPTS
143 nptt = elbuf_tab(ng)%NPTT
144 nlay = elbuf_tab(ng)%NLAY
147 IF (ihbe == 23) npg=4
158 IF (igtyp == 51 .OR. igtyp == 52 )
THEN
161 npt_all = npt_all + elbuf_tab(ng)%BUFLY(il)%NPTT
165 IF (mlw == 1 .OR. mlw == 3 .OR. mlw == 23) mpt=0
172 IF (ipart_state(iprt)==0) cycle
174 IF (mlw /= 0 .AND. mlw /= 13)
THEN
188 IF (mlw /= 0 .AND. mlw /= 13)
THEN
200 IF (mlw /= 0 .AND. mlw /= 13)
THEN
201 wa(jj) = gbuf%EINT(i)
206 IF (mlw /= 0 .AND. mlw /= 13)
THEN
207 wa(jj) = gbuf%EINT(i+llt)
212 IF (ihbe==11 .or. ihbe==23 .or. mlw == 0 .or. mlw == 13)
THEN
221 wa(jj) = gbuf%HOURG(kk(1)+i)
223 wa(jj) = gbuf%HOURG(kk(2)+i)
225 wa(jj) = gbuf%HOURG(kk(3)+i)
230 IF (mlw == 0 .or. mlw == 13)
THEN
237 ELSEIF (npg == 1)
THEN
239 wa(jj) = gbuf%FOR(kk(1)+i)
241 wa(jj) = gbuf%FOR(kk(2)+i)
243 wa(jj) = gbuf%FOR(kk(3)+i)
245 wa(jj) = gbuf%FOR(kk(4)+i)
247 wa(jj) = gbuf%FOR(kk(5)+i)
250 IF (gbuf%G_PLA > 0)
THEN
257 wa(jj) = gbuf%MOM(kk(1)+i)
259 wa(jj) = gbuf%MOM(kk(2)+i)
261 wa(jj) = gbuf%MOM(kk(3)+i)
265 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,1)
266 ipg = nptr*(is-1) + ir
269 wa(jj) = gbuf%FORPG(k + kk(1) + i)
271 wa(jj) = gbuf%FORPG(k + kk(2) + i)
273 wa(jj) = gbuf%FORPG(k + kk(3) + i)
275 wa(jj) = gbuf%FORPG(k + kk(4) + i)
277 wa(jj) = gbuf%FORPG(k + kk(5) + i)
280 IF (gbuf%G_PLA > 0)
THEN
288 wa(jj) = gbuf%MOMPG(k + kk(1) + i)
290 wa(jj) = gbuf%MOMPG(k + kk(2) + i)
292 wa(jj) = gbuf%MOMPG(k + kk(3) + i)
297 ELSEIF (mlw == 0 .or. mlw == 13)
THEN
306 ELSEIF (nlay == 1)
THEN
307 bufly => elbuf_tab(ng)%BUFLY(1)
312 lbuf => bufly%LBUF(ir,is,it)
313 ipg = nptr*(is-1) + ir
315 wa(jj) = lbuf%SIG(kk(1)+i)
317 wa(jj) = lbuf%SIG(kk(2)+i)
319 wa(jj) = lbuf%SIG(kk(3)+i)
321 wa(jj) = lbuf%SIG(kk(4)+i)
323 wa(jj) = lbuf%SIG(kk(5)+i)
325 IF (bufly%L_PLA > 0)
THEN
333 ELSE ! nlay > 1, pid10,pid11,pid16,pid17,pid51
336 bufly => elbuf_tab(ng)%BUFLY(il)
341 lbuf => bufly%LBUF(ir,is,it)
343 wa(jj) = lbuf%SIG(kk(1)+i)
345 wa(jj) = lbuf%SIG(kk(2)+i)
347 wa(jj) = lbuf%SIG(kk(3)+i)
349 wa(jj) = lbuf%SIG(kk(4)+i)
351 wa(jj) = lbuf%SIG(kk(5)+i)
353 IF (bufly%L_PLA > 0)
THEN
366 IF (mlw==0 .or. mlw==13)
THEN
395 st(1) = gbuf%HOURG(kk(1)+i)
396 st(2) =-gbuf%HOURG(kk(2)+i)
397 mt(1) = gbuf%HOURG(kk(3)+i)
398 mt(2) =-gbuf%HOURG(kk(4)+i)
399 sk(1) =-gbuf%HOURG(kk(7)+i)
400 sk(2) = gbuf%HOURG(kk(8)+i)
401 mk(1) =-gbuf%HOURG(kk(9)+i)
403 sht(1)= gbuf%HOURG(kk(5)+i)
404 sht(2)=-gbuf%HOURG(kk(6)+i)
405 shk(1)=-gbuf%HOURG(kk(11)+i)
406 shk(2)= gbuf%HOURG(kk(12)+i)
409 IF (mpt == 0 .and. mlw /= 0 .and. mlw /= 13)
THEN
412 wa(jj) = gbuf%FOR(kk(1)+i)
413 . + st(1)*qpg(2,ipg) + sk(1)*qpg(1,ipg)
415 wa(jj) = gbuf%FOR(kk(2)+i)
416 . + st(2)*qpg(2,ipg)+sk(2)*qpg(1,ipg)
418 wa(jj) = gbuf%FOR(kk(3)+i)
420 wa(jj) = gbuf%FOR(kk(4)+i)
421 . + sht(2)*qpg(2,ipg)+shk(2)*qpg(1,ipg)
423 wa(jj) = gbuf%FOR(kk(5)+i)
424 . + sht(1)*qpg(2,ipg)+shk(1)*qpg(1,ipg)
427 wa(jj) = gbuf%MOM(kk(1)+i)
428 . + mt(1)*qpg(2,ipg)+mk(1)*qpg(1,ipg
430 wa(jj) = gbuf%MOM(kk(2)+i)
431 . + mt(2)*qpg(2,ipg)+mk(2)*qpg(1,ipg)
433 wa(jj) = gbuf%MOM(kk(3)+i)
435 ELSEIF (mlw /= 0 .and. mlw /= 13)
THEN
437 bufly =>elbuf_tab(ng)%BUFLY(il)
440 lbuf => bufly%LBUF(1,1,it)
443 ipt = nptt*(il-1) + it
444 zz = gbuf%THK(i)*z01(ipt,
max(nlay,npt))
448 wa(jj) = lbuf%SIG(kk(1)+i)
449 . + (st(1)+zz*mt(1))*qpg(2,ipg)
450 . + (sk(1)+zz*mk(1))*qpg(1,ipg)
453 wa(jj) = lbuf%SIG(kk(2)+i)
454 . + (st(2)+zz*mt(2))*qpg(2,ipg)
455 . + (sk(2)+zz*mk(2))*qpg(1,ipg)
458 wa(jj) = lbuf%SIG(kk(3)+i)
461 wa(jj) = lbuf%SIG(kk(4)+i)
462 . + sht(2)*qpg(2,ipg) + shk(2)*qpg(1,ipg)
465 wa(jj) = lbuf%SIG(kk(5)+i)
466 . + sht(1)*qpg(2,ipg) + shk(1)*qpg(1,ipg)
508 IF (ispmd == 0.AND.len > 0)
THEN
518 iprt = nint(wap0(j + 2))
519 IF (iprt /= iprt0)
THEN
520 IF (izipstrs == 0)
THEN
521 WRITE(iugeo,
'(A)') delimit
522 WRITE(iugeo,
'(A)')
'/INISHE/STRS_F'
524 .
'#------------------------ REPEAT --------------------------'
526 .
'# SHELLID NPT NPG THK'
527 WRITE(iugeo,
'(A)')
'# EM, EB, H1, H2, H3'
528 WRITE(iugeo,
'(A/A/A)')
529 .
'# IF(NPT == 0), REPEAT I=1,NPG :',
530 .
'# N1, N2, N12, N23, N31',
531 .
'# EPSP, M1, M2, M12'
532 WRITE(iugeo,
'(A/A/A)')
533 .
'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :',
537 .
'#---------------------- END REPEAT ------------------------'
538 WRITE(iugeo,
'(A)') delimit
540 WRITE(line,
'(A)') delimit
542 WRITE(line,
'(A)')
'/INISHE/STRS_F'
545 .
'#------------------------ REPEAT --------------------------'
548 .
'# SHELLID NPT NPG THK'
550 WRITE(line,
'(A)')
'# EM, EB, H1, H2, H3'
552 WRITE(line,
'(A)')
'# IF(NPT == 0), REPEAT I=1,NPG :'
554 WRITE(line,
'(A)')
'# N1, N2, N12, N23, N31'
556 WRITE(line,
'(A)')
'# EPSP, M1, M2, M12'
559 .
'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
561 WRITE(line,
'(A)')
'# S1, S2, S12'
563 WRITE(line,
'(A)')
'# S23, S31, EPSP'
566 .
'#---------------------- END REPEAT ------------------------'
568 WRITE(line,'(a)
') DELIMIT
569 CALL STRS_TXT50(LINE,100)
574 ID = NINT(WAP0(J + 3))
575 NPT = NINT(WAP0(J + 4))
576 NPG = NINT(WAP0(J + 5))
584 IF (IZIPSTRS == 0) THEN
585 WRITE(IUGEO,'(3i10,1pe20.13)
')ID,NPT,NPG,THK
586 WRITE(IUGEO,'(1p5e20.13)
')EM,EB,H1,H2,H3
588 WRITE(LINE,'(3i10,1pe20.13)
')ID,NPT,NPG,THK
589 CALL STRS_TXT50(LINE,100)
590 WRITE(LINE,'(1p5e20.13)
')EM,EB,H1,H2,H3
591 CALL STRS_TXT50(LINE,100)
595 IF (IZIPSTRS == 0) THEN
596 WRITE(IUGEO,'(1p5e20.13)
')(WAP0(J + K),K=1,5)
597 WRITE(IUGEO,'(1p4e20.13)
')(WAP0(J + K),K=6,9)
599 CALL TAB_STRS_TXT50(WAP0(1),5,J,SIZP0,5)
600 CALL TAB_STRS_TXT50(WAP0(6),4,J,SIZP0,4)
604 IF (IZIPSTRS == 0) THEN
605 WRITE(IUGEO,'(1p3e20.13)
')(WAP0(J + K),K=1,6*NPT*NPG)
607 CALL TAB_STRS_TXT50(WAP0(1),6*NPT*NPG,J,SIZP0,3)
609 ENDIF ! IF (NPT == 0)
610 ENDIF ! IF (IOFF >= 1)
611 ENDDO ! DO N=1,STAT_NUMELC_G
612.AND.
ENDIF ! IF (ISPMD == 0LEN > 0)
617 IF (STAT_NUMELTG==0) GOTO 300
623 GBUF => ELBUF_TAB(NG)%GBUF
631 NPTR = ELBUF_TAB(NG)%NPTR
632 NPTS = ELBUF_TAB(NG)%NPTS
633 NPTT = ELBUF_TAB(NG)%NPTT
634 NLAY = ELBUF_TAB(NG)%NLAY
647.OR.
IF (IGTYP == 51 IGTYP == 52) THEN
650 NPT_ALL = NPT_ALL + ELBUF_TAB(NG)%BUFLY(K)%NPTT
654.OR..OR.
IF (MLW == 1 MLW == 3 MLW == 23) MPT=0
661 IF (IPART_STATE(IPRT) == 0) CYCLE
663.AND.
IF (MLW /= 0 MLW /= 13) THEN
671 WA(JJ) = IXTG(NIXTG,N)
677.AND.
IF (MLW /= 0 MLW /= 13) THEN
681 WA(JJ) = THKE(N+NUMELC)
687.AND.
IF (MLW /= 0 MLW /= 13) THEN
688 WA(JJ) = GBUF%EINT(I)
693.AND.
IF (MLW /= 0 MLW /= 13) THEN
694 WA(JJ) = GBUF%EINT(I+LLT)
705 IF (MPT == 0) THEN ! global integration
706.or.
IF (MLW == 0 MLW == 13) THEN
713 ELSEIF (NPG == 1) THEN
715 WA(JJ) = GBUF%FOR(KK(1) + I)
717 WA(JJ) = GBUF%FOR(KK(2) + I)
719 WA(JJ) = GBUF%FOR(KK(3) + I)
721 WA(JJ) = GBUF%FOR(KK(4) + I)
723 WA(JJ) = GBUF%FOR(KK(5) + I)
726 IF (GBUF%G_PLA > 0) THEN
733 WA(JJ) = GBUF%MOM(KK(1) + I)
735 WA(JJ) = GBUF%MOM(KK(2) + I)
737 WA(JJ) = GBUF%MOM(KK(3) + I)
740 LBUF => ELBUF_TAB(NG)%BUFLY(1)%LBUF(IPG,1,1)
743 WA(JJ) = GBUF%FORPG(K + KK(1) + I)
745 WA(JJ) = GBUF%FORPG(K + KK(2) + I)
747 WA(JJ) = GBUF%FORPG(K + KK(3) + I)
749 WA(JJ) = GBUF%FORPG(K + KK(4) + I)
751 WA(JJ) = GBUF%FORPG(K + KK(5) + I)
754 IF (GBUF%G_PLA > 0) THEN
762 WA(JJ) = GBUF%MOMPG(K + KK(1) + I)
764 WA(JJ) = GBUF%MOMPG(K + KK(2) + I)
766 WA(JJ) = GBUF%MOMPG(K + KK(3) + I)
768.or.
ENDIF ! IF (MLW == 0 MLW == 13)
770.or.
IF (MLW == 0 MLW == 13) THEN
779 BUFLY => ELBUF_TAB(NG)%BUFLY(IL)
783 LBUF => BUFLY%LBUF(IPG,1,IT)
787 WA(JJ) = LBUF%SIG(KK(J)+I)
798.or.
ENDIF ! IF (MLW == 0 MLW == 13)
799 ENDIF ! IF (MPT == 0)
805 ENDIF ! IF (ITY == 7)
806 ENDDO ! DO NG=1,NGROUP
821 CALL SPMD_STAT_PGATHER(PTWA,STAT_NUMELTG,PTWA_P0,STAT_NUMELTG_G)
823 CALL SPMD_RGATHER9_DP(WA,JJ,WAP0,SIZP0,LEN)
826.AND.
IF (ISPMD == 0LEN > 0) THEN
828 DO N=1,STAT_NUMELTG_G
834 IOFF = NINT(WAP0(J + 1))
836 IPRT = NINT(WAP0(J + 2))
837 IF (IPRT /= IPRT0) THEN
838 IF (IZIPSTRS == 0) THEN
839 WRITE(IUGEO,'(a)
') DELIMIT
840 WRITE(IUGEO,'(a)
')'/inish3/strs_f
'
842 .'#------------------------ REPEAT --------------------------'
844 .
'# SH3NID NPT NPG THK'
846 .
'# EM, EB, H1, H2, H3'
847 WRITE(iugeo,
'(A/A/A)')
848 .
'# IF(NPT == 0), REPEAT I=1,NPG :',
849 .
'# N1, N2, N12, N23, N31',
850 .
'# EPSP, M1, M2, M12'
851 WRITE(iugeo,
'(A/A/A)')
852 .
'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :',
856 .
'#---------------------- END REPEAT ------------------------'
857 WRITE(iugeo,
'(A)') delimit
859 WRITE(line,
'(A)') delimit
861 WRITE(line,
'(A)')
'/INISH3/STRS_F'
864 .
'#------------------------ REPEAT --------------------------'
867 .
'# SH3NID NPT NPG THK'
870 .
'# EM, EB, H1, H2, H3'
873 .
'# IF(NPT == 0), REPEAT I=1,NPG :'
875 WRITE(line,
'(A)')
'# N1, N2, N12, N23, N31'
877 WRITE(line,
'(A)')
'# EPSP, M1, M2, M12'
880 .
'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
882 WRITE(line,
'(A)')
'# S1, S2, S12'
884 WRITE(line,
'(A)')
'# S23, S31, EPSP'
887 .
'#---------------------- END REPEAT ------------------------'
889 WRITE(line,
'(A)') delimit
894 id = nint(wap0(j + 3))
895 npt = nint(wap0(j + 4))
896 npg = nint(wap0(j + 5))
904 IF (izipstrs == 0)
THEN
905 WRITE(iugeo,
'(3I10,1PE20.13)')id,npt,npg,thk
906 WRITE(iugeo,
'(1P5E20.13)')em,eb,h1,h2,h3
908 WRITE(line,
'(3I10,1PE20.13)')id,npt,npg,thk
910 WRITE(line,
'(1P5E20.13)')em,eb,h1,h2,h3
915 IF (izipstrs == 0)
THEN
916 WRITE(iugeo,
'(1P5E20.13)')(wap0(j + k),k=1,5)
917 WRITE(iugeo,
'(1P4E20.13)')(wap0(j + k),k=6,9)
924 IF (izipstrs == 0)
THEN
925 WRITE(iugeo,
'(1P3E20.13)')(wap0(j + k),k=1,6*npt*npg)