42 1 ELBUF_TAB ,IPARG ,IPM ,IGEO ,IXC ,
43 2 IXTG ,WA ,WAP0 ,IPARTC,IPARTTG,
44 3 DYNAIN_DATA,DYNAIN_INDXC,DYNAIN_INDXTG,SIZP0 ,
45 4 GEO ,STACK ,DRAPE_SH4N ,DRAPE_SH3N,X ,
57#include "implicit_f.inc"
70 INTEGER (NIXC,*),IXTG(NIXTG,*),
71 . IPARG(NPARG,*),(NPROPMI,*),IGEO(NPROPGI,*),
72 . IPARTC(*), IPARTTG(*),DYNAIN_INDXC(*), DYNAIN_INDXTG(*)
74 . geo(npropg,*) , x(*) , thke(*)
75 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
76 TYPE (STACK_PLY) :: STACK
77 TYPE (DRAPE_) :: DRAPE_SH4N(NUMELC_DRAPE),DRAPE_SH3N(NUMELTG_DRAPE)
78 TYPE (DRAPEG_) :: DRAPEG
79 double precision WA(*),WAP0(*)
80 TYPE (DYNAIN_DATABASE),
INTENT(INOUT) :: DYNAIN_DATA
84 INTEGER I,J,K,N,II,JJ,LEN,IOFF,IE,NG,NEL,NFT,LFT,NPT,
85 . llt,ity,mlw,ih,ihbe,
id, iprt0, iprt,ir,is,it,
86 . npg,ipg,mpt,ipt,nptr,npts,nptt,nlay,l_pla,ithk,
87 . igtyp,npt_all,il,kk(8),large,irep,ipid,ivisc,
88 . ipmat,ixfem,ixlay,isubstack,iptt,is_written,
89 , laynpt_max,nlay_max,ierr,
90 . jdir,ilay,j1,j2,irel,g_stra,ipt_all,sedrape,numel_drape
91 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: MATLY
92 my_real,
DIMENSION(:) ,
ALLOCATABLE :: THKLY !
93 my_real,
DIMENSION(:,:) ,
ALLOCATABLE :: POSLY,THK_LY
94 INTEGER ,
DIMENSION(:),
ALLOCATABLE :: PTWA, PTWA_P0
95 INTEGER MAT(MVSIZ),PID(MVSIZ)
101 .
DIMENSION(:),
POINTER :: strain
103 . qt(9,mvsiz),straing(6),zh,thkp ,thk0(mvsiz)
104 TYPE(g_bufel_) ,
POINTER :: GBUF
105 TYPE(l_bufel_) ,
POINTER :: LBUF
106 TYPE(BUF_LAY_) ,
POINTER :: BUFLY
110 ./
'$--1---|---2---|---3---|---4---|---5---|---6---|'/
112 ./
'---7---|---8---|---9---|---10--|'/
118 ALLOCATE(ptwa(
max(dynain_data%DYNAIN_NUMELC ,
119 . dynain_data%DYNAIN_NUMELTG)),stat=ierr)
120 ALLOCATE(ptwa_p0(0:
max(1,dynain_data%DYNAIN_NUMELC_G,
121 . dynain_data%DYNAIN_NUMELTG_G)),stat=ierr)
128 IF (dynain_data%DYNAIN_NUMELC/=0)
THEN
132 gbuf => elbuf_tab(ng)%GBUF
141 isubstack=iparg(71,ng)
145 nptr = elbuf_tab(ng)%NPTR
146 npts = elbuf_tab(ng)%NPTS
147 nptt = elbuf_tab(ng)%NPTT
148 nlay = elbuf_tab(ng)%NLAY
151 IF (ihbe == 23 .AND. gbuf%G_STRPG>gbuf%G_STRA) npg=4
152 IF (ihbe == 23 .AND. npg/=4) cycle
168 IF (igtyp == 51 .OR. igtyp == 52 )
THEN
171 npt_all = npt_all + elbuf_tab(ng)%BUFLY(il)%NPTT
172 laynpt_max =
max(laynpt_max , elbuf_tab(ng)%BUFLY(il)%NPTT)
177 nlay_max =
max(nlay,npt, elbuf_tab(ng)%NLAY)
178 ALLOCATE(matly(mvsiz*nlay_max), thkly(mvsiz*nlay_max*laynpt_max),
179 . posly(mvsiz,nlay_max*laynpt_max),thk_ly(nel,nlay_max*laynpt_max))
184 IF (mlw == 1 .OR. mlw == 3 .OR. mlw == 23) mpt=0
196 thk0(lft:llt) = gbuf%THK(lft:llt)
198 thk0(lft:llt) = thke(lft:llt)
200 numel_drape = numelc_drape
203 . elbuf_tab(ng),lft ,llt ,geo ,igeo ,
204 . mat ,pid ,thkly ,matly ,posly ,
205 . igtyp ,ixfem ,ixlay ,nlay ,npt ,
206 . isubstack ,stack ,drape_sh4n ,nft ,thke ,
212 IF (ihbe>10.OR.igtyp==16.OR.ishfram ==0)
THEN
214 ELSEIF (ishfram ==1)
THEN
219 CALL get_q4l(lft ,llt ,ixc(1,nft+1),x ,gbuf%OFF,irel ,qt )
227 IF (dynain_data%IPART_DYNAIN(iprt)==0) cycle
229 IF (mlw /= 0 .AND. mlw /= 13)
THEN
237 IF (mpt == 0)
THEN ! global integration
250 IF (mlw == 0 .or. mlw == 13)
THEN
259 ELSEIF (mpt==0 .AND. g_stra /= 0)
THEN
269 k = (ipg-1)*nel*g_stra
272 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
273 straing(3)=half*straing(3)
274 straing(4:5)=half*strain(kk(4:5)+i+k)
288 k = (ipg-1)*nel*g_stra
290 straing(1:2)=strain(kk(1:2)+i+k)
291 straing(3:5)=half*strain(kk(3:5)+i+k)
305 k = (ipg-1)*nel*g_stra
308 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
309 straing(3)=half*straing(3)
310 straing(4:5)=half*strain(kk(4:5)+i+k)
323 ELSEIF (g_stra /= 0)
THEN
334 nptt = elbuf_tab(ng)%BUFLY(ilay)%NPTT
339 k = (ipg-1)*nel*g_stra
340 zh = posly(i,ipt)*thkp
341 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
342 straing(3)=half*straing(3)
343 straing(4:5)=half*strain(kk(4:5)+i+k)
352 wa(jj) = posly(i,ipt)*two
355 ipt_all = ipt_all + nptt
366 DEALLOCATE(matly, thkly, posly, thk_ly)
377 DO n=1,dynain_data%DYNAIN_NUMELC
386 CALL spmd_stat_pgather(ptwa,dynain_data%DYNAIN_NUMELC,ptwa_p0,dynain_data%DYNAIN_NUMELC_G)
392 IF (ispmd == 0.AND.len > 0)
THEN
393 IF(dynain_data%ZIPDYNAIN==0)
THEN
394 WRITE(iudynain,
'(A)') delimit
395 WRITE(iudynain,
'(A)')
'*INITIAL_STRAIN_SHELL'
396 WRITE(iudynain,
'(A)')
397 .
'$ SHELLID NPG NBINT LARGE '
398 WRITE(iudynain,
'(A)')
399 .
'$ IF(NPT == 0), REPEAT I=1,NPG :'
400 WRITE(iudynain,
'(A)')
401 .
'$ IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
402 WRITE(iudynain,
'(A)')
403 .
'$ EPSXX EPSYY EPSZZ EPSXY EPSYZ EPSZX T'
404 WRITE(iudynain,
'(A)') delimit
406 WRITE(line,
'(A)') delimit
408 WRITE(line,
'(A)')
'*INITIAL_STRAIN_SHELL'
411 .
'$ SHELLID NPG NBINT LARGE '
414 .
'$ IF(NPT == 0), REPEAT I=1,NPG :'
417 .
'$ IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
420 .
'$ EPSXX EPSYY EPSZZ EPSXY EPSYZ EPSZX T'
422 WRITE(line,
'(A)') delimit
426 DO n=1,dynain_data%DYNAIN_NUMELC_G
432 ioff = nint(wap0(j + 1))
435 id = nint(wap0(j + 2))
436 npt = nint(wap0(j + 3))
437 npg = nint(wap0(j + 4))
438 large = nint(wap0(j + 5))
441 IF(dynain_data%ZIPDYNAIN==0)
THEN
442 WRITE(iudynain,
'(4I8)')
id,npg,npt,large
444 WRITE(line,
'(4I8)')
id,npg,npt,large
449 IF(dynain_data%ZIPDYNAIN==0)
THEN
450 WRITE(iudynain,
'(1P5G16.9)')(wap0(jj + k),k=1,3)
451 WRITE(iudynain,
'(1P3G16.9)')(wap0(jj + k),k=6,7)
453 WRITE(line,
'(1P5G16.9)')(wap0(jj + k),k=
455 WRITE(line,
'(1P3G16.9)')(wap0(jj + k),k=6,7)
463 IF(dynain_data%ZIPDYNAIN==0)
THEN
464 WRITE(iudynain,
'(1P5G16.9)')(wap0(j + k),k=1,5)
465 WRITE(iudynain,
'(1P3G16.9)')(wap0(j + k),k=6,7)
467 WRITE(line,
'(1P5G16.9)')(wap0(j + k),k=1,5)
469 WRITE(line,
'(1P3G16.9)')(wap0(j + k),k=6,7)
488 IF(dynain_data%DYNAIN_NUMELTG/=0)
THEN
492 gbuf => elbuf_tab(ng)%GBUF
502 nptr = elbuf_tab(ng)%NPTR
503 npts = elbuf_tab(ng)%NPTS
504 nptt = elbuf_tab(ng)%NPTT
505 nlay = elbuf_tab(ng)%NLAY
522 IF (igtyp == 51 .OR. igtyp == 52 )
THEN
525 npt_all = npt_all + elbuf_tab(ng)%BUFLY(k)%NPTT
526 laynpt_max =
max(laynpt_max , elbuf_tab(ng)%BUFLY(k)%NPTT)
531 nlay_max =
max(nlay,npt, elbuf_tab(ng)%NLAY)
532 ALLOCATE(matly(mvsiz*nlay_max), thkly(mvsiz*nlay_max*laynpt_max),
533 . posly(mvsiz,nlay_max*laynpt_max),thk_ly(nel,nlay_max*laynpt_max))
538 IF (mlw == 1 .OR. mlw == 3 .OR. mlw == 23) mpt=0
549 thk0(lft:llt) = gbuf%THK(lft:llt)
551 thk0(lft:llt) = thke(lft:llt)
553 numel_drape = numeltg_drape
556 . elbuf_tab(ng),lft ,llt ,geo ,igeo ,
557 . mat ,pid ,thkly ,matly ,posly ,
558 . igtyp ,ixfem ,ixlay ,nlay ,npt ,
559 . isubstack ,stack ,drape_sh3n ,nft
560 . nel ,thk_ly ,drapeg%INDX_SH3N ,sedrape,numel_drape)
570 CALL get_t3l(lft ,llt ,ixtg(1,nft+1),x ,gbuf%OFF,
579 IF (dynain_data%IPART_DYNAIN(iprt) == 0) cycle
581 IF (mlw /= 0 .AND. mlw /= 13)
THEN
587 wa(jj) = ixtg(nixtg,n)
592 wa(jj) = mpt ! integration points
606 IF (mlw == 0 .or. mlw == 13)
THEN
615 ELSEIF (mpt==0 .AND. g_stra /= 0)
THEN
626 k = (ipg-1)*nel*g_stra
629 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6
630 straing(3)=half*straing(3)
631 straing(4:5)=half*strain(kk(4:5)+i+k)
645 k = (ipg-1)*nel*g_stra
647 straing(1:2)=strain(kk(1:2)+i+k)
648 straing(3:5)=half*strain(kk(3:5)+i+k)
662 k = (ipg-1)*nel*g_stra
665 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
666 straing(3)=half*straing(3)
667 straing(4:5)=half*strain(kk(4:5)+i+k)
680 ELSEIF (g_stra /= 0)
THEN
690 nptt = elbuf_tab(ng)%BUFLY(ilay)%NPTT
702 zh = posly(i,ipt)*thkp
703 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
704 straing(3)=half*straing(3)
705 straing(4:5)=half*strain(kk(4:5)+i+k)
714 wa(jj) = posly(i,ipt)*two
717 ipt_all = ipt_all + nptt
726 DEALLOCATE(matly, thkly, posly
739 DO n=1,dynain_data%DYNAIN_NUMELTG
744 CALL spmd_stat_pgather(ptwa,dynain_data%DYNAIN_NUMELTG,ptwa_p0,dynain_data%DYNAIN_NUMELTG_G)
749 IF (ispmd == 0.AND.len > 0)
THEN
750 IF(is_written == 0 )
THEN
751 IF(dynain_data%ZIPDYNAIN==0)
THEN
752 WRITE(iudynain,
'(A)') delimit
753 WRITE(iudynain,
'(A)')
'*INITIAL_STRAIN_SHELL'
754 WRITE(iudynain,
'(A)')
755 .
'$ SHELLID NPG NBINT LARGE '
756 WRITE(iudynain,
'(A)')
757 .
'$ IF(NPT == 0), REPEAT I=1,NPG :'
758 WRITE(iudynain,
'(A)')
759 .
'$ IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
760 WRITE(iudynain,
'(A)')
761 .
'$ T EPSXX EPSYY EPSZZ EPSXY EPSYZ EPSZX'
762 WRITE(iudynain,
'(A)') delimit
764 WRITE(line,
'(A)') delimit
766 WRITE(line,
'(A)')
'*INITIAL_STRAIN_SHELL'
769 .
'$ SHELLID NPG NBINT LARGE '
772 .
'$ IF(NPT == 0), REPEAT I=1,NPG :'
775 .
'$ IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
778 .
'$ T EPSXX EPSYY EPSZZ EPSXY EPSYZ EPSZX'
780 WRITE(line,
'(A)') delimit
788 DO n=1,dynain_data%DYNAIN_NUMELTG_G
794 ioff = nint(wap0(j + 1))
796 id = nint(wap0(j + 2))
797 npt = nint(wap0(j + 3))
798 npg = nint(wap0(j + 4))
799 large = nint(wap0(j + 5))
802 IF(dynain_data%ZIPDYNAIN==0)
THEN
803 WRITE(iudynain,
'(4I8)')
id,npg,npt,large
805 WRITE(line,
'(4I8)')
id,npg,npt,large
811 IF(dynain_data%ZIPDYNAIN==0)
THEN
812 WRITE(iudynain,
'(1P5G16.9)')(wap0(jj + k),k=1,5)
813 WRITE(iudynain,
'(1P3G16.9)')(wap0(jj + k),k=6,7)
815 WRITE(line,
'(1P5G16.9)')(wap0(jj + k),k=1,5)
817 WRITE(line,
'(1P3G16.9)')(wap0(jj + k),k=6,7)
825 IF(dynain_data%ZIPDYNAIN==0)
THEN
826 WRITE(iudynain,
'(1P5G16.9)')(wap0
827 WRITE(iudynain,
'(1P3G16.9)')(wap0(j + k),k=6,7)
829 WRITE(line,
'(1P5G16.9)')(wap0(j + k),k=1,5)
831 WRITE(line,
'(1P3G16.9)')(wap0(j + k),k=6,7)
842 DEALLOCATE(ptwa,ptwa_p0)