45 1 X ,IPARG ,IPM ,IGEO ,IXC ,
46 2 IXTG ,WA,WAP0 ,IPARTC, IPARTTG,
47 3 IPART_STATE,STAT_INDXC,STAT_INDXTG,THKE,SIZP0,
48 4 GEO ,STACK,DRAPE_SH4N,DRAPE_SH3N,DRAPEG)
59#include "implicit_f.inc"
75 INTEGER IXC(NIXC,*),IXTG(NIXTG,*),
76 . IPARG(NPARG,*),IPM(NPROPMI,*),IGEO(NPROPGI,*),
77 . IPARTC(*), IPARTTG(*), IPART_STATE(*),
78 . stat_indxc(*), stat_indxtg(*)
80 . thke(*),x(3,*),geo(*)
81 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET ::
82 TYPE (STACK_PLY) :: STACK
83 TYPE (DRAPE_) :: DRAPE_SH4N(NUMELC_DRAPE), DRAPE_SH3N(NUMELTG_DRAPE)
84 TYPE (DRAPEG_) :: DRAPEG
85 double precision WA(*),WAP0(*)
89 INTEGER I,J,K,N,II,JJ,LEN,IOFF,IE,NG,NEL,NFT,LFT,NPT,
90 . LLT,ITY,MLW,IH,IHBE, ID, IPRT0, IPRT,IR,IS,IT,J1,J2,
91 . NPG,IPG,MPT,IPT,NPTR,NPTS,NPTT,NLAY,L_PLA,ITHK,NF3,
92 . IGTYP,NPT_ALL,IL,KK(12),NF1,IREL,IBID0,MAT_1,PID_1,ILAY,IDRAPE,
94 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PTWA
95 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PTWA_P0
97 . THK, EM, EB, H1, H2, H3
99 . pg,mpg,qpg(2,4),thkq,
100 . sk(2),st(2),mk(2),mt(2),shk(2),sht(2),zz
101 CHARACTER*100 DELIMIT,LINE
102 TYPE(g_bufel_) ,
POINTER :: GBUF
103 TYPE() ,
POINTER :: LBUF
104 TYPE(BUF_LAY_) ,
POINTER :: BUFLY
105 INTEGER LAYNPT_MAX,NLAY_MAX,ISUBSTACK,,JDIR,,L_DIRB,IREP,
108 .
DIMENSION(:),
POINTER :: dir_a,dir_b
110 . qt(9,mvsiz),tens(6),zh,thkp ,thk0(mvsiz)
112 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: MATLY
113 my_real,
DIMENSION(:) ,
ALLOCATABLE :: thkly
114 my_real,
DIMENSION(:,:) ,
ALLOCATABLE :: posly,thk_ly
115 my_real,
ALLOCATABLE,
DIMENSION(:) ,
TARGET :: dira,dirb
117 parameter(pg = .577350269189626)
118 parameter(mpg=-.577350269189626)
119 DATA qpg/mpg,mpg,pg,mpg,pg,pg,mpg,pg/
121 ./
'#---1----|----2----|----3----|----4----|----5----|----6----|'/
123 ./
'----7----|----8----|----9----|----10---|'/
125 CALL my_alloc(ptwa,
max(stat_numelc ,stat_numeltg))
126 ALLOCATE(ptwa_p0(0:
max(1,stat_numelc_g,stat_numeltg_g)))
131 IF (stat_numelc==0)
GOTO 200
137 gbuf => elbuf_tab(ng)%GBUF
146 isubstack=iparg(71,ng)
148 nptr = elbuf_tab(ng)%NPTR
149 npts = elbuf_tab(ng)%NPTS
150 nptt = elbuf_tab(ng)%NPTT
151 nlay = elbuf_tab(ng)%NLAY
154 IF (ihbe == 23) npg=4
158 IF (ihbe>10.OR.igtyp==16.OR.ishfram ==0)
THEN
160 ELSEIF (ishfram ==1)
THEN
174 thk0(lft:llt) = gbuf%THK(lft:llt)
176 thk0(lft:llt) = thke(lft+nft:llt+nft)
180 IF(igtyp == 51 .OR. igtyp == 52)
THEN
181 DO ilay=1, elbuf_tab(ng)%NLAY
182 laynpt_max =
max(laynpt_max , elbuf_tab(ng)%BUFLY(ilay)%NPTT)
185 nlay_max =
max(nlay,npt, elbuf_tab(ng)%NLAY)
186 ALLOCATE(matly(mvsiz*nlay_max), thkly(mvsiz*nlay_max*laynpt_max),
187 . posly(mvsiz,nlay_max*laynpt_max),thk_ly(nel,nlay_max*laynpt_max))
192 numel_drape = numelc_drape
194 CALL layini(elbuf_tab(ng),lft ,llt ,geo ,igeo ,
195 . mat_1 ,pid_1 ,thkly ,matly ,posly ,
196 . igtyp ,ibid0 ,ibid0 ,nlay ,mpt ,
197 . isubstack,stack ,drape_sh4n ,nft ,thke ,
198 . nel ,thk_ly ,drapeg%INDX_SH4N,sedrape,numel_drape
199 l_dira = elbuf_tab(ng)%BUFLY(1)%LY_DIRA
200 l_dirb = elbuf_tab(ng)%BUFLY(1)%LY_DIRB
201 ALLOCATE(dira(nlay*nel*l_dira))
202 ALLOCATE(dirb(nlay*nel*l_dirb))
205 IF (l_dira == 0)
THEN
207 ELSEIF (irep == 0)
THEN
208 IF(idrape > 0 .AND. (igtyp == 51 .OR. igtyp == 52))
THEN
210 j1 = 1+(j-1)*l_dira*nel
212 dira(j1:j2) = elbuf_tab(ng)%BUFLY(j)%LBUF_DIR(1)%DIRA(1:nel*l_dira)
216 j1 = 1+(j-1)*l_dira*nel
218 dira(j1:j2) = elbuf_tab(ng)%BUFLY(j)%DIRA(1:nel*l_dira)
222 dir_a => dira(1:nlay*nel*l_dira)
223 dir_b => dirb(1:nlay*nel*l_dirb)
224 CALL get_q4lsys(lft ,llt ,ixc(1,nf1),x ,gbuf%OFF,
225 . irel ,qt ,nlay ,irep ,nel ,
226 . dir_a ,dir_b,elbuf_tab(ng))
232 npt_all = npt_all + elbuf_tab(ng)%BUFLY(il)%NPTT
235 IF (iparg(6,ng) == 0) mpt=0
242 IF (ipart_state(iprt)==0) cycle
244 IF (mlw /= 0 .AND. mlw /= 13)
THEN
258 IF (mlw /= 0 .AND. mlw /= 13)
THEN
266 IF (mlw /= 0 .AND. mlw /= 13)
THEN
267 wa(jj) = gbuf%EINT(i)
272 IF (mlw /= 0 .AND. mlw /= 13)
THEN
273 wa(jj) = gbuf%EINT(i+llt)
278 IF (ihbe==11 .or. ihbe==23 .or. mlw == 0 .or. mlw == 13)
THEN
287 wa(jj) = gbuf%HOURG(kk(1)+i)
289 wa(jj) = gbuf%HOURG(kk(2)+i)
291 wa(jj) = gbuf%HOURG(kk(3)+i)
296 IF (mlw == 0 .or. mlw == 13)
THEN
303 ELSEIF (npg == 1)
THEN
304 tens(1:5) = gbuf%FOR(kk(1:5)+i)
311 tens(1:3) = gbuf%MOM(kk(1:3)+i)
319 IF (gbuf%G_PLA > 0)
THEN
327 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,1)
328 ipg = nptr*(is-1) + ir
331 tens(1:5) = gbuf%FORPG(k+kk(1:5)+i)
339 IF (gbuf%G_PLA > 0)
THEN
346 tens(1:3) = gbuf%MOMPG(k+kk(1:3)+i)
356 ELSEIF (mlw == 0 .or. mlw == 13)
THEN
368 bufly => elbuf_tab(ng)%BUFLY(il)
371 jdir = 1 + (il-1)*nel*2
377 lbuf => bufly%LBUF(ir,is,it)
378 tens(1:5) = lbuf%SIG(kk(1:5)+i)
379 CALL orth2loc(tens,dir_a,dir_b,ii,ilaw,igtyp,nel)
386 IF (bufly%L_PLA > 0)
THEN
392 wa(jj) = posly(i,ipt)*two
396 ipt_all = ipt_all + nptt
402 IF (mlw==0 .or. mlw==13)
THEN
431 st(1) = gbuf%HOURG(kk(1)+i)
432 st(2) =-gbuf%HOURG(kk(2)+i)
433 mt(1) = gbuf%HOURG(kk(3)+i)
434 mt(2) =-gbuf%HOURG(kk(4)+i)
435 sk(1) =-gbuf%HOURG(kk(7)+i)
436 sk(2) = gbuf%HOURG(kk(8)+i)
437 mk(1) =-gbuf%HOURG(kk(9)+i)
438 mk(2) = gbuf%HOURG(kk(10)+i)
439 sht(1)= gbuf%HOURG(kk(5)+i)
440 sht(2)=-gbuf%HOURG(kk(6)+i)
441 shk(1)=-gbuf%HOURG(kk(11)+i)
442 shk(2)= gbuf%HOURG(kk(12)+i)
445 IF (mpt == 0 .and. mlw /= 0 .and. mlw /= 13)
THEN
447 tens(1:2) = gbuf%FOR(kk(1:2)+i)
449 tens(3) = gbuf%FOR(kk(3)+i)
450 tens(4) = gbuf%FOR(kk(4)+i)
451 . + sht(2)*qpg(2,ipg)+shk(2)*qpg(1,ipg
452 tens(5) = gbuf%FOR(kk(5)+i)
453 . + sht(1)*qpg(2,ipg)+shk(1)*qpg(1,ipg)
459 tens(1:2) = gbuf%MOM(kk(1:2)+i)
460 . + mt(1:2)*qpg(2,ipg)+mk(1:2)*qpg(1,ipg)
461 tens(3) = gbuf%MOM(kk(3)+i)
469 IF (gbuf%G_PLA > 0)
THEN
475 ELSEIF (mlw /= 0 .and. mlw /= 13)
THEN
478 bufly => elbuf_tab(ng)%BUFLY(il)
481 jdir = 1 + (il-1)*nel*2
485 lbuf => bufly%LBUF(1,1,it)
487 zz = posly(i,ipt)*thkq
489 tens(1:2) = lbuf%SIG(kk(1:2)+i)
490 . + (st(1:2)+zz*mt(1:2))*qpg(2,ipg)
491 . + (sk(1:2)+zz*mk(1:2))*qpg(1,ipg)
492 tens(3) = lbuf%SIG(kk(3)+i)
493 tens(4) = lbuf%SIG(kk(4)+i)
494 . + sht(2)*qpg(2,ipg)+shk(2)*qpg(1,ipg)
495 tens(5) = lbuf%SIG(kk(5)+i)
496 . + sht(1)*qpg(2,ipg)+shk(1)*qpg(1,ipg)
497 CALL orth2loc(tens,dir_a,dir_b,ii,ilaw,igtyp,nel)
510 wa(jj) = posly(i,ipt)*two
513 ipt_all = ipt_all + nptt
523 IF(
ALLOCATED(dirb))
DEALLOCATE(dirb)
524 IF(
ALLOCATED(dira))
DEALLOCATE(dira)
525 DEALLOCATE(matly, thkly, posly, thk_ly)
549 IF (ispmd == 0.AND.len > 0)
THEN
557 ioff = nint(wap0(j + 1))
559 iprt = nint(wap0(j + 2))
560 IF (iprt /= iprt0)
THEN
561 IF (izipstrs == 0)
THEN
562 WRITE(iugeo,
'(A)') delimit
563 WRITE(iugeo,
'(A)')
'/INISHE/STRS_F/GLOB'
565 .
'#------------------------ REPEAT --------------------------'
567 .
'# SHELLID NPT NPG THK'
568 WRITE(iugeo,
'(A)')
'# EM, EB, H1, H2, H3'
569 WRITE(iugeo,
'(A/A/A/A/A)')
570 .
'# IF(NPT == 0), REPEAT I=1,NPG :',
574 .
'# M12,M23,M31,EPSP '
575 WRITE(iugeo,
'(A/A/A)')
576 .
'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :',
578 .
'# S12, S23, S31, EPSP, T '
580 .
'#---------------------- END REPEAT ------------------------'
581 WRITE(iugeo,
'(A)') delimit
583 WRITE(line,
'(A)') delimit
585 WRITE(line,
'(A)')
'/INISHE/STRS_F/GLOB'
588 .
'#------------------------ REPEAT --------------------------'
591 .
'# SHELLID NPT NPG THK'
593 WRITE(line,
'(A)')
'# EM, EB, H1, H2, H3'
595 WRITE(line,
'(A)')
'# IF(NPT == 0), REPEAT I=1,NPG :'
597 WRITE(line,
'(A)')
'# N1, N2, N3 '
599 WRITE(line,
'(A)')
'# N12, N23, N31'
601 WRITE(line,
'(A)')
'# M1, M2, M3 '
603 WRITE(line,
'(A)')
'# M12, M23, M31, EPSP'
606 .
'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
608 WRITE(line,
'(A)')
'# S1, S2, S3'
610 WRITE(line,
'(A)')
'# S12,S23,S31, EPSP, T '
613 .
'#---------------------- END REPEAT ------------------------'
615 WRITE(line,
'(A)') delimit
621 id = nint(wap0(j + 3))
622 npt = nint(wap0(j + 4))
623 npg = nint(wap0(j + 5))
631 IF (izipstrs == 0)
THEN
632 WRITE(iugeo,
'(3I10,1PE20.13)')id,npt,npg,thk
633 WRITE(iugeo,
'(1P5E20.13)')em,eb,h1,h2,h3
635 WRITE(line,
'(3I10,1PE20.13)')id,npt,npg,thk
637 WRITE(line,
'(1P5E20.13)')em,eb,h1,h2,h3
642 IF (izipstrs == 0)
THEN
643 WRITE(iugeo,
'(1P3E20.13)')(wap0(j + k),k=1,9)
644 WRITE(iugeo,
'(1P4E20.13)')(wap0(j + k),k=10,13)
653 IF (izipstrs == 0)
THEN
654 WRITE(iugeo,
'(1P3E20.13)'
655 WRITE(iugeo,
'(1P5E20.13)')(wap0(j + k),k=4,8)
671 IF (stat_numeltg==0)
GOTO 300
677 gbuf => elbuf_tab(ng)%GBUF
686 isubstack=iparg(71,ng)
687 nptr = elbuf_tab(ng)%NPTR
688 npts = elbuf_tab(ng)%NPTS
689 nptt = elbuf_tab(ng)%NPTT
690 nlay = elbuf_tab(ng)%NLAY
707 pid_1 = ixtg(nixtg-1,nf1)
709 thk0(lft:llt) = gbuf%THK(lft:llt)
712 thk0(lft:llt) = thke(lft+nf3:llt+nf3)
716 IF(igtyp == 51 .OR. igtyp == 52)
THEN
717 DO ilay=1, elbuf_tab(ng)%NLAY
718 laynpt_max =
max(laynpt_max , elbuf_tab(ng)%BUFLY(ilay)%NPTT)
721 nlay_max =
max(nlay,npt, elbuf_tab(ng)%NLAY)
722 ALLOCATE(matly(mvsiz*nlay_max), thkly(mvsiz*nlay_max*laynpt_max),
723 . posly(mvsiz,nlay_max*laynpt_max),thk_ly(nel,nlay_max*laynpt_max))
728 numel_drape = numeltg_drape
730 CALL layini(elbuf_tab(ng),lft ,llt ,geo ,igeo ,
731 . mat_1 ,pid_1 ,thkly ,matly ,posly ,
732 . igtyp ,ibid0 ,ibid0 ,nlay ,mpt ,
733 . isubstack,stack ,drape_sh3n ,nft ,thke ,
734 . nel ,thk_ly ,drapeg%INDX_SH3N, sedrape,numel_drape)
736 l_dira = elbuf_tab(ng)%BUFLY(1)%LY_DIRA
737 l_dirb = elbuf_tab(ng)%BUFLY(1)%LY_DIRB
738 ALLOCATE(dira(nlay*nel*l_dira))
739 ALLOCATE(dirb(nlay*nel*l_dirb))
742 IF (l_dira == 0)
THEN
744 ELSEIF (irep == 0)
THEN
746 j1 = 1+(j-1)*l_dira*nel
748 dira(j1:j2) = elbuf_tab(ng)%BUFLY(j)%DIRA(1:nel*l_dira)
751 dir_a => dira(1:nlay*nel*l_dira)
752 dir_b => dirb(1:nlay*nel*l_dirb)
753 CALL get_t3lsys(lft ,llt ,ixtg(1,nf1),x ,gbuf%OFF,
754 . irel ,qt ,nlay ,irep ,nel ,
755 . dir_a ,dir_b,elbuf_tab(ng))
761 npt_all = npt_all + elbuf_tab(ng)%BUFLY(il)%NPTT
764 IF (iparg(6,ng) == 0) mpt=0
771 IF (ipart_state(iprt) == 0) cycle
773 IF (mlw /= 0 .AND. mlw /= 13)
THEN
781 wa(jj) = ixtg(nixtg,n)
787 IF (mlw /= 0 .AND. mlw /= 13)
THEN
795 IF (mlw /= 0 .AND. mlw /= 13)
THEN
796 wa(jj) = gbuf%EINT(i)
801 IF (mlw /= 0 .AND. mlw /= 13)
THEN
802 wa(jj) = gbuf%EINT(i+llt)
814 IF (mlw == 0 .or. mlw == 13)
THEN
821 ELSEIF (npg == 1)
THEN
822 tens(1:5) = gbuf%FOR(kk(1:5)+i)
829 tens(1:3) = gbuf%MOM(kk(1:3)+i)
837 IF (gbuf%G_PLA > 0)
THEN
845 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,1)
846 ipg = nptr*(is-1) + ir
849 tens(1:5) = gbuf%FORPG(k+kk(1:5)+i)
857 IF (gbuf%G_PLA > 0)
THEN
864 tens(1:3) = gbuf%MOMPG(k+kk(1:3)+i)
874 IF (mlw == 0 .or. mlw == 13)
THEN
886 bufly => elbuf_tab(ng)%BUFLY(il)
889 jdir = 1 + (il-1)*nel*2
895 tens(1:5) = lbuf%SIG(kk(1:5)+i)
896 CALL orth2loc(tens,dir_a,dir_b,ii,ilaw,igtyp,nel)
903 IF (bufly%L_PLA > 0)
THEN
909 wa(jj) = posly(i,ipt)*two
912 ipt_all = ipt_all + nptt
922 IF(
ALLOCATED(dirb))
DEALLOCATE(dirb)
923 IF(
ALLOCATED(dira))
DEALLOCATE(dira)
924 DEALLOCATE(matly, thkly, posly, thk_ly)
946 IF (ispmd == 0.AND.len > 0)
THEN
948 DO n=1,stat_numeltg_g
954 ioff = nint(wap0(j + 1))
956 iprt = nint(wap0(j + 2))
957 IF (iprt /= iprt0)
THEN
958 IF (izipstrs == 0)
THEN
959 WRITE(iugeo,
'(A)') delimit
960 WRITE(iugeo
'(A)''/INISH3/STRS_F/GLOB'
962 .
'#------------------------ REPEAT --------------------------'
964 .
'# SH3NID NPT NPG THK'
966 .
'# EM, EB, H1, H2, H3'
967 WRITE(iugeo,
'(A/A/A/A/A)')
968 .
'# IF(NPT == 0), REPEAT I=1,NPG :',
972 .
'# M12,M23,M31,EPSP '
973 WRITE(iugeo,
'(A/A/A)')
974 .
'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :',
976 .
'# S12,S23,S31, EPSP, T '
978 .
'#---------------------- END REPEAT ------------------------'
979 WRITE(iugeo,
'(A)') delimit
981 WRITE(line,
'(A)') delimit
983 WRITE(line,
'(A)')
'/INISH3/STRS_F/GLOB'
986 .
'#------------------------ REPEAT --------------------------'
989 .
'# SH3NID NPT NPG THK'
992 .'# EM, EB, H1, H2, H3'
995 .
'# IF(NPT == 0), REPEAT I=1,NPG :'
997 WRITE(line,
'(A)')
'# N1, N2, N3'
999 WRITE(line,
'(A)')
'# N12, N23, N31'
1001 WRITE(line,
'(A)')
'# M1, M2, M3 '
1003 WRITE(line,
'(A)')
'# M12, M23, M31,EPSP '
1006 .
'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
1008 WRITE(line,
'(A)')
'# S1, S2, S3 '
1010 WRITE(line,
'(A)')
'# S12, S23, S31, EPSP, T '
1013 .
'#---------------------- END REPEAT ------------------------'
1015 WRITE(line,
'(A)') delimit
1020 id = nint(wap0(j + 3))
1021 npt = nint(wap0(j + 4))
1022 npg = nint(wap0(j + 5))
1030 IF (izipstrs == 0)
THEN
1031 WRITE(iugeo,
'(3I10,1PE20.13)')id,npt,npg,thk
1032 WRITE(iugeo,
'(1P5E20.13)')em,eb,h1,h2,h3
1034 WRITE(line,
'(3I10,1PE20.13)')id,npt,npg,thk
1036 WRITE(line,
'(1P5E20.13)')em,eb,h1,h2,h3
1041 IF (izipstrs == 0)
THEN
1042 WRITE(iugeo,
'(1P3E20.13)')(wap0(j + k),k=1,9)
1043 WRITE(iugeo,
'(1P4E20.13)')(wap0(j + k),k
1052 IF (izipstrs == 0)
THEN
1053 WRITE(iugeo,
'(1P3E20.13)')(wap0(j + k),k=1,3)
1054 WRITE(iugeo,
'(1P5E20.13)')(wap0(j + k),k=4,8)