38 1 ELBUF_TAB ,IPARG ,IPM ,IGEO ,IXC ,
39 2 IXTG ,WA ,WAP0 ,IPARTC,IPARTTG,
40 3 IPART_STATE,STAT_INDXC,STAT_INDXTG,THKE ,SIZP0)
46 use element_mod ,
only : nixc,nixtg
50#include "implicit_f.inc"
65 INTEGER IXC(NIXC,*),IXTG(NIXTG,*),
66 . IPARG(NPARG,*),IPM(NPROPMI,*),IGEO(NPROPGI,*),
67 . ipartc(*), iparttg(*), ipart_state(*),
68 . stat_indxc(*), stat_indxtg(*)
71 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
72 double precision WA(*),WAP0(*)
76 INTEGER I,J,K,N,II,JJ,LEN,IOFF,IE,NG,NEL,NFT,LFT,NPT,
77 . LLT,ITY,MLW,IHBE, ID, IPRT0, IPRT,IR,IS,IT,
78 . NPG,IPG,MPT,IPT,NPTR,NPTS,NPTT,NLAY,L_PLA,ITHK,
79 . igtyp,npt_all,il,kk(12)
80 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PTWA
81 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PTWA_P0
83 . thk, em, eb, h1, h2, h3
85 . pg,mpg,qpg(2,4),thkq,
86 . sk(2),st(2),mk(2),mt(2),shk(2),sht(2),z01(11,11),zz
87 CHARACTER*100 DELIMIT,LINE
88 TYPE(G_BUFEL_) ,
POINTER :: GBUF
89 TYPE(L_BUFEL_) ,
POINTER :: LBUF
90 TYPE(buf_lay_) ,
POINTER ::
92 parameter(pg = .577350269189626)
93 parameter(mpg=-.577350269189626)
94 DATA qpg/mpg,mpg,pg,mpg,pg,pg,mpg,pg/
96 1 0. ,0. ,0. ,0. ,0. ,
97 1 0. ,0. ,0. ,0. ,0. ,0. ,
98 2 -.5 ,0.5 ,0. ,0. ,0. ,
99 2 0. ,0. ,0. ,0. ,0. ,0. ,
100 3 -.5 ,0. ,0.5 ,0. ,0. ,
101 3 0. ,0. ,0. ,0. ,0. ,0. ,
102 4 -.5 ,-.1666667,0.1666667,0.5 ,0. ,
103 4 0. ,0. ,0. ,0. ,0. ,0. ,
104 5 -.5 ,-.25 ,0. ,0.25 ,0.5 ,
105 5 0. ,0. ,0. ,0. ,0. ,0. ,
106 6 -.5 ,-.3 ,-.1 ,0.1 ,0.3 ,
107 6 0.5 ,0. ,0. ,0. ,0. ,0. ,
108 7 -.5 ,-.3333333,-.1666667,0.0 ,0.1666667,
109 7 0.3333333,0.5 ,0. ,0. ,0. ,0. ,
110 8 -.5 ,-.3571429,-.2142857,-.0714286,0.0714286,
111 8 0.2142857,0.3571429,0.5 ,0. ,0. ,0. ,
112 9 -.5 ,-.375 ,-.25 ,-.125 ,0.0 ,
113 9 0.125 ,0.25 ,0.375 ,0.5 ,0. ,0. ,
114 a -.5 ,-.3888889,-.2777778,-.1666667,0.0555555,
115 a 0.0555555,0.1666667,0.2777778,0.3888889,0.5 ,0. ,
116 b -.5 ,-.4 ,-.3 ,-.2 ,-.1 ,
117 b 0. ,0.1 ,0.2 ,0.3 ,0.4 ,0.5 /
119 ./
'#---1----|----2----|----3----|----4----|----5----|----6----|'/
121 ./
'----7----|----8----|----9----|----10---|'/
123 CALL my_alloc(ptwa,
max(stat_numelc ,stat_numeltg))
124 ALLOCATE(ptwa_p0(0:
max(1,stat_numelc_g,stat_numeltg_g)))
129 IF (stat_numelc==0)
GOTO 200
135 gbuf => elbuf_tab(ng)%GBUF
143 nptr = elbuf_tab(ng)%NPTR
144 npts = elbuf_tab(ng)%NPTS
145 nptt = elbuf_tab(ng)%NPTT
146 nlay = elbuf_tab(ng)%NLAY
149 IF (ihbe == 23) npg=4
160 IF (igtyp == 51 .OR. igtyp == 52 )
THEN
163 npt_all = npt_all + elbuf_tab(ng)%BUFLY(il)%NPTT
174 IF (ipart_state(iprt)==0) cycle
176 IF (mlw /= 0 .AND. mlw /= 13)
THEN
190 IF (mlw /= 0 .AND. mlw /= 13)
THEN
202 IF (mlw /= 0 .AND. mlw /= 13)
THEN
203 wa(jj) = gbuf%EINT(i)
208 IF (mlw /= 0 .AND. mlw /= 13)
THEN
209 wa(jj) = gbuf%EINT(i+llt)
214 IF (ihbe==11 .or. ihbe==23 .or. mlw == 0 .or. mlw == 13)
THEN
223 wa(jj) = gbuf%HOURG(kk(1)+i)
225 wa(jj) = gbuf%HOURG(kk(2)+i)
227 wa(jj) = gbuf%HOURG(kk(3)+i)
232 IF (mlw == 0 .or. mlw == 13)
THEN
239 ELSEIF (npg == 1)
THEN
241 wa(jj) = gbuf%FOR(kk(1)+i)
243 wa(jj) = gbuf%FOR(kk(2)+i)
245 wa(jj) = gbuf%FOR(kk(3)+i)
247 wa(jj) = gbuf%FOR(kk(4)+i)
249 wa(jj) = gbuf%FOR(kk(5)+i)
252 IF (gbuf%G_PLA > 0)
THEN
259 wa(jj) = gbuf%MOM(kk(1)+i)
261 wa(jj) = gbuf%MOM(kk(2)+i)
263 wa(jj) = gbuf%MOM(kk(3)+i)
267 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,1)
268 ipg = nptr*(is-1) + ir
271 wa(jj) = gbuf%FORPG(k + kk(1) + i)
273 wa(jj) = gbuf%FORPG(k + kk(2) + i)
275 wa(jj) = gbuf%FORPG(k + kk(3) + i)
277 wa(jj) = gbuf%FORPG(k + kk(4) + i)
279 wa(jj) = gbuf%FORPG(k + kk(5) + i)
282 IF (gbuf%G_PLA > 0)
THEN
290 wa(jj) = gbuf%MOMPG(k + kk(1) + i)
292 wa(jj) = gbuf%MOMPG(k + kk(2) + i)
294 wa(jj) = gbuf%MOMPG(k + kk(3) + i)
299 ELSEIF (mlw == 0 .or. mlw == 13)
THEN
308 ELSEIF (nlay == 1)
THEN
309 bufly => elbuf_tab(ng)%BUFLY(1)
314 lbuf => bufly%LBUF(ir,is,it)
315 ipg = nptr*(is-1) + ir
317 wa(jj) = lbuf%SIG(kk(1)+i)
319 wa(jj) = lbuf%SIG(kk(2)+i)
321 wa(jj) = lbuf%SIG(kk(3)+i)
323 wa(jj) = lbuf%SIG(kk(4)+i)
325 wa(jj) = lbuf%SIG(kk(5)+i)
327 IF (bufly%L_PLA > 0)
THEN
338 bufly => elbuf_tab(ng)%BUFLY(il)
343 lbuf => bufly%LBUF(ir,is,it)
345 wa(jj) = lbuf%SIG(kk(1)+i)
347 wa(jj) = lbuf%SIG(kk(2)+i)
351 wa(jj) = lbuf%SIG(kk(4)+i)
353 wa(jj) = lbuf%SIG(kk(5)+i)
355 IF (bufly%L_PLA > 0)
THEN
368 IF (mlw==0 .or. mlw==13)
THEN
397 st(1) = gbuf%HOURG(kk(1)+i)
398 st(2) =-gbuf%HOURG(kk(2)+i)
399 mt(1) = gbuf%HOURG(kk(3)+i)
400 mt(2) =-gbuf%HOURG(kk(4)+i)
401 sk(1) =-gbuf%HOURG(kk(7)+i)
402 sk(2) = gbuf%HOURG(kk(8)+i)
403 mk(1) =-gbuf%HOURG(kk(9)+i)
404 mk(2) = gbuf%HOURG(kk(10)+i)
405 sht(1)= gbuf%HOURG(kk(5)+i)
406 sht(2)=-gbuf%HOURG(kk(6)+i)
407 shk(1)=-gbuf%HOURG(kk(11)+i)
408 shk(2)= gbuf%HOURG(kk(12)+i)
411 IF (mpt == 0 .and. mlw /= 0 .and. mlw /= 13)
THEN
414 wa(jj) = gbuf%FOR(kk(1)+i)
415 . + st(1)*qpg(2,ipg) + sk(1)*qpg(1,ipg)
417 wa(jj) = gbuf%FOR(kk(2)+i)
418 . + st(2)*qpg(2,ipg)+sk(2)*qpg(1,ipg)
420 wa(jj) = gbuf%FOR(kk(3)+i)
422 wa(jj) = gbuf%FOR(kk(4)+i)
423 . + sht(2)*qpg(2,ipg)+shk(2)*qpg(1,ipg)
425 wa(jj) = gbuf%FOR(kk(5)+i)
426 . + sht(1)*qpg(2,ipg)+shk(1)*qpg(1,ipg)
432 wa(jj) = gbuf%MOM(kk(1)+i)
433 . + mt(1)*qpg(2,ipg)+mk(1)*qpg(1,ipg)
435 wa(jj) = gbuf%MOM(kk(2)+i)
436 . + mt(2)*qpg(2,ipg)+mk(2)*qpg(1,ipg)
438 wa(jj) = gbuf%MOM(kk(3)+i)
440 ELSEIF (mlw /= 0 .and. mlw /= 13)
THEN
442 bufly =>elbuf_tab(ng)%BUFLY(il)
445 lbuf => bufly%LBUF(1,1,it)
448 ipt = nptt*(il-1) + it
449 zz = gbuf%THK(i)*z01(ipt,
max(nlay,npt))
453 wa(jj) = lbuf%SIG(kk(1)+i)
454 . + (st(1)+zz*mt(1))*qpg(2,ipg)
455 . + (sk(1)+zz*mk(1))*qpg(1,ipg)
458 wa(jj) = lbuf%SIG(kk(2)+i)
459 . + (st(2)+zz*mt(2))*qpg(2,ipg)
460 . + (sk(2)+zz*mk(2))*qpg(1,ipg)
463 wa(jj) = lbuf%SIG(kk(3)+i)
466 wa(jj) = lbuf%SIG(kk(4)+i)
467 . + sht(2)*qpg(2,ipg) + shk(2)*qpg(1,ipg)
470 wa(jj) = lbuf%SIG(kk(5)+i)
471 . + sht(1)*qpg(2,ipg) + shk(1)*qpg(1,ipg)
513 IF (ispmd == 0.AND.len > 0)
THEN
521 ioff = nint(wap0(j + 1))
523 iprt = nint(wap0(j + 2))
524 IF (iprt /= iprt0)
THEN
525 IF (izipstrs == 0)
THEN
526 WRITE(iugeo,
'(A)') delimit
527 WRITE(iugeo,
'(A)')
'/INISHE/STRS_F'
529 .
'#------------------------ REPEAT --------------------------'
531 .
'# SHELLID NPT NPG THK'
532 WRITE(iugeo,
'(A)')
'# EM, EB, H1, H2, H3'
533 WRITE(iugeo,
'(A/A/A)')
534 .
'# IF(NPT == 0), REPEAT I=1,NPG :',
535 .
'# N1, N2, N12, N23, N31',
536 .
'# EPSP, M1, M2, M12'
537 WRITE(iugeo,
'(A/A/A)')
538 .
'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :',
542 .
'#---------------------- END REPEAT ------------------------'
543 WRITE(iugeo,
'(A)') delimit
545 WRITE(line,
'(A)') delimit
547 WRITE(line,
'(A)')
'/INISHE/STRS_F'
550 .
'#------------------------ REPEAT --------------------------'
553 .
'# SHELLID NPT NPG THK'
555 WRITE(line,
'(A)')
'# EM, EB, H1, H2, H3'
557 WRITE(line,
'(A)')
'# IF(NPT == 0), REPEAT I=1,NPG :'
559 WRITE(line,
'(A)')
'# N1, N2, N12, N23, N31'
561 WRITE(line,
'(A)')
'# EPSP, M1, M2, M12'
564 .
'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
566 WRITE(line,
'(A)')
'# S1, S2, S12'
568 WRITE(line,
'(A)')
'# S23, S31, EPSP'
571 .
'#---------------------- END REPEAT ------------------------'
573 WRITE(line,
'(A)') delimit
579 id = nint(wap0(j + 3))
580 npt = nint(wap0(j + 4))
581 npg = nint(wap0(j + 5))
589 IF (izipstrs == 0)
THEN
590 WRITE(iugeo,
'(3I10,1PE20.13)')id,npt,npg,thk
591 WRITE(iugeo,
'(1P5E20.13)')em,eb,h1,h2,h3
593 WRITE(line,
'(3I10,1PE20.13)')id,npt,npg,thk
595 WRITE(line,
'(1P5E20.13)')em,eb,h1,h2,h3
600 IF (izipstrs == 0)
THEN
601 WRITE(iugeo,
'(1P5E20.13)')(wap0(j + k),k=1,5)
602 WRITE(iugeo,
'(1P4E20.13)')(wap0(j + k),k=6,9)
610 IF (izipstrs == 0)
THEN
611 WRITE(iugeo,
'(1P3E20.13)')(wap0(j + k),k=1,6*npt*npg)
623 IF (stat_numeltg==0)
GOTO 300
629 gbuf => elbuf_tab(ng)%GBUF
637 nptr = elbuf_tab(ng)%NPTR
638 npts = elbuf_tab(ng)%NPTS
639 nptt = elbuf_tab(ng)%NPTT
640 nlay = elbuf_tab(ng)%NLAY
653 IF (igtyp == 51 .OR. igtyp == 52)
THEN
656 npt_all = npt_all + elbuf_tab(ng)%BUFLY(k)%NPTT
667 IF (ipart_state(iprt) == 0) cycle
669 IF (mlw /= 0 .AND. mlw /= 13)
THEN
677 wa(jj) = ixtg(nixtg,n)
683 IF (mlw /= 0 .AND. mlw /= 13)
THEN
687 wa(jj) = thke(n+numelc)
693 IF (mlw /= 0 .AND. mlw /= 13)
THEN
694 wa(jj) = gbuf%EINT(i)
699 IF (mlw /= 0 .AND. mlw /= 13)
THEN
700 wa(jj) = gbuf%EINT(i+llt)
712 IF (mlw == 0 .or. mlw == 13)
THEN
719 ELSEIF (npg == 1)
THEN
721 wa(jj) = gbuf%FOR(kk(1) + i)
723 wa(jj) = gbuf%FOR(kk(2) + i)
725 wa(jj) = gbuf%FOR(kk(3) + i)
727 wa(jj) = gbuf%FOR(kk(4) + i)
729 wa(jj) = gbuf%FOR(kk(5) + i)
732 IF (gbuf%G_PLA > 0)
THEN
739 wa(jj) = gbuf%MOM(kk(1) + i)
741 wa(jj) = gbuf%MOM(kk(2) + i)
743 wa(jj) = gbuf%MOM(kk(3) + i)
746 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ipg,1,1)
749 wa(jj) = gbuf%FORPG(k + kk(1) + i)
751 wa(jj) = gbuf%FORPG(k + kk(2) + i)
753 wa(jj) = gbuf%FORPG(k + kk(3) + i)
755 wa(jj) = gbuf%FORPG(k + kk(4) + i)
757 wa(jj) = gbuf%FORPG(k + kk(5) + i)
760 IF (gbuf%G_PLA > 0)
THEN
768 wa(jj) = gbuf%MOMPG(k + kk(1) + i)
770 wa(jj) = gbuf%MOMPG(k + kk(2) + i)
772 wa(jj) = gbuf%MOMPG(k + kk(3) + i)
776 IF (mlw == 0 .or. mlw == 13)
THEN
785 bufly => elbuf_tab(ng)%BUFLY(il)
789 lbuf => bufly%LBUF(ipg,1,it)
793 wa(jj) = lbuf%SIG(kk(j)+i)
832 IF (ispmd == 0.AND.len > 0)
THEN
834 DO n=1,stat_numeltg_g
840 ioff = nint(wap0(j + 1))
842 iprt = nint(wap0(j + 2))
843 IF (iprt /= iprt0)
THEN
844 IF (izipstrs == 0)
THEN
845 WRITE(iugeo,
'(A)') delimit
846 WRITE(iugeo,
'(A)')
'/INISH3/STRS_F'
848 .
'#------------------------ REPEAT --------------------------'
850 .
'# SH3NID NPT NPG THK'
852 .
'# EM, EB, H1, H2, H3'
853 WRITE(iugeo,
'(A/A/A)')
854 .
'# IF(NPT == 0), REPEAT I=1,NPG :',
855 .
'# N1, N2, N12, N23, N31',
856 .
'# EPSP, M1, M2, M12'
857 WRITE(iugeo,
'(A/A/A)')
858 .
'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :',
862 .
'#---------------------- END REPEAT ------------------------'
863 WRITE(iugeo,
'(A)') delimit
865 WRITE(line,
'(A)') delimit
867 WRITE(line,
'(A)')
'/INISH3/STRS_F'
870 .
'#------------------------ REPEAT --------------------------'
873 .
'# SH3NID NPT NPG THK'
876 .
'# EM, EB, H1, H2, H3'
879 .
'# IF(NPT == 0), REPEAT I=1,NPG :'
881 WRITE(line,
'(A)')
'# N1, N2, N12, N23, N31'
883 WRITE(line,
'(A)')
'# EPSP, M1, M2, M12'
886 .
'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
888 WRITE(line,
'(A)')
'# S1, S2, S12'
890 WRITE(line,
'(A)')
'# S23, S31, EPSP'
893 .
'#---------------------- END REPEAT ------------------------'
895 WRITE(line,
'(A)') delimit
900 id = nint(wap0(j + 3))
901 npt = nint(wap0(j + 4))
902 npg = nint(wap0(j + 5))
910 IF (izipstrs == 0)
THEN
911 WRITE(iugeo,
'(3I10,1PE20.13)')id,npt,npg,thk
912 WRITE(iugeo,
'(1P5E20.13)')em,eb,h1,h2,h3
914 WRITE(line,
'(3I10,1PE20.13)')id,npt,npg,thk
916 WRITE(line,
'(1P5E20.13)')em,eb,h1,h2,h3
921 IF (izipstrs == 0)
THEN
922 WRITE(iugeo,
'(1P5E20.13)')(wap0(j + k),k=1,5)
923 WRITE(iugeo,
'(1P4E20.13)')(wap0(j + k),k=6,9)
931 IF (izipstrs == 0)
THEN
932 WRITE(iugeo,
'(1P3E20.13)')(wap0(j + k),k=1,6*npt*npg)