43 1 ELBUF_TAB ,IPARG ,IPM ,IGEO ,IXC ,
44 2 IXTG ,WA ,WAP0 ,IPARTC,IPARTTG,
45 3 DYNAIN_DATA,DYNAIN_INDXC,DYNAIN_INDXTG,SIZP0 ,
46 4 GEO ,STACK ,DRAPE_SH4N ,DRAPE_SH3N,X ,
55 use element_mod ,
only : nixc,nixtg
59#include "implicit_f.inc"
72 INTEGER IXC(NIXC,*),IXTG(NIXTG,*),
73 . IPARG(NPARG,*),IPM(NPROPMI,*),IGEO(NPROPGI,*),
74 . IPARTC(*), IPARTTG(*),DYNAIN_INDXC(*), DYNAIN_INDXTG(*)
76 . geo(npropg,*) , x(*) , thke(*)
77 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
78 TYPE (STACK_PLY) :: STACK
79 TYPE (DRAPE_) :: DRAPE_SH4N(NUMELC_DRAPE),DRAPE_SH3N(NUMELTG_DRAPE)
80 TYPE (DRAPEG_) :: DRAPEG
81 double precision WA(*),WAP0(*)
82 TYPE (DYNAIN_DATABASE),
INTENT(INOUT) :: DYNAIN_DATA
86 INTEGER I, J, K, N, JJ, LEN, IOFF, IE, NG, NEL, NFT, LFT, NPT,
87 . llt,ity,mlw,ih,ihbe,
id, iprt0, iprt,ir,is,it,
88 . npg,ipg,mpt,ipt,nptr,npts,nptt,nlay,l_pla,ithk,
89 . igtyp,npt_all,il,kk(8),large,irep,ipid,ivisc,
90 . ipmat,ixfem,ixlay,isubstack,iptt,is_written,
91 , laynpt_max,nlay_max,ierr,
92 . jdir,ilay,j1,j2,irel,g_stra,ipt_all,sedrape,numel_drape
93 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: MATLY
94 my_real,
DIMENSION(:) ,
ALLOCATABLE :: THKLY
95 my_real,
DIMENSION(:,:) ,
ALLOCATABLE :: POSLY,THK_LY
96 INTEGER ,
DIMENSION(:),
ALLOCATABLE :: PTWA, PTWA_P0
97 INTEGER MAT(MVSIZ),PID(MVSIZ)
103 .
DIMENSION(:),
POINTER :: strain
105 . qt(9,mvsiz),straing(6),zh,thkp ,thk0(mvsiz)
106 TYPE(g_bufel_) ,
POINTER :: GBUF
112 ./
'$--1---|---2---|---3---|---4---|---5---|---6---|'/
114 ./
'---7---|---8---|---9---|---10--|'/
120 ALLOCATE(ptwa(
max(dynain_data%DYNAIN_NUMELC ,
121 . dynain_data%DYNAIN_NUMELTG)),stat=ierr)
122 ALLOCATE(ptwa_p0(0:
max(1,dynain_data%DYNAIN_NUMELC_G,
123 . dynain_data%DYNAIN_NUMELTG_G)),stat=ierr)
130 IF (dynain_data%DYNAIN_NUMELC/=0)
THEN
134 gbuf => elbuf_tab(ng)%GBUF
143 isubstack=iparg(71,ng)
147 nptr = elbuf_tab(ng)%NPTR
148 npts = elbuf_tab(ng)%NPTS
149 nptt = elbuf_tab(ng)%NPTT
150 nlay = elbuf_tab(ng)%NLAY
153 IF (ihbe == 23 .AND. gbuf%G_STRPG>gbuf%G_STRA) npg=4
154 IF (ihbe == 23 .AND. npg/=4) cycle
170 IF (igtyp == 51 .OR. igtyp == 52 )
THEN
173 npt_all = npt_all + elbuf_tab(ng)%BUFLY(il)%NPTT
174 laynpt_max =
max(laynpt_max , elbuf_tab(ng)%BUFLY(il)%NPTT)
179 nlay_max =
max(nlay,npt, elbuf_tab(ng)%NLAY)
180 ALLOCATE(matly(mvsiz*nlay_max), thkly(mvsiz*nlay_max*laynpt_max),
181 . posly(mvsiz,nlay_max*laynpt_max),thk_ly(nel,nlay_max*laynpt_max))
186 IF (mlw == 1 .OR. mlw == 3 .OR. mlw == 23) mpt=0
198 thk0(lft:llt) = gbuf%THK(lft:llt)
200 thk0(lft:llt) = thke(lft:llt)
202 numel_drape = numelc_drape
205 . elbuf_tab(ng),lft ,llt ,geo ,igeo ,
206 . mat ,pid ,thkly ,matly ,posly ,
207 . igtyp ,ixfem ,ixlay ,nlay ,npt ,
208 . isubstack ,stack ,drape_sh4n ,nft ,thke ,
209 . nel ,thk_ly ,drapeg%INDX_SH4N,sedrape,numel_drape)
214 IF (ihbe>10.OR.igtyp==16.OR.ishfram ==0)
THEN
216 ELSEIF (ishfram ==1)
THEN
221 CALL get_q4l(lft ,llt ,ixc(1,nft+1),x ,gbuf%OFF,irel ,qt )
229 IF (dynain_data%IPART_DYNAIN(iprt)==0) cycle
231 IF (mlw /= 0 .AND. mlw /= 13)
THEN
252 IF (mlw == 0 .or. mlw == 13)
THEN
261 ELSEIF (mpt==0 .AND. g_stra /= 0)
THEN
271 k = (ipg-1)*nel*g_stra
274 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
275 straing(3)=half*straing(3)
276 straing(4:5)=half*strain(kk(4:5)+i+k)
290 k = (ipg-1)*nel*g_stra
292 straing(1:2)=strain(kk(1:2)+i+k)
293 straing(3:5)=half*strain(kk(3:5)+i+k)
307 k = (ipg-1)*nel*g_stra
310 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
311 straing(3)=half*straing(3)
312 straing(4:5)=half*strain(kk(4:5)+i+k)
325 ELSEIF (g_stra /= 0)
THEN
336 nptt = elbuf_tab(ng)%BUFLY(ilay)%NPTT
341 k = (ipg-1)*nel*g_stra
342 zh = posly(i,ipt)*thkp
343 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
344 straing(3)=half*straing(3)
345 straing(4:5)=half*strain(kk(4:5)+i+k)
354 wa(jj) = posly(i,ipt)*two
357 ipt_all = ipt_all + nptt
368 DEALLOCATE(matly, thkly, posly, thk_ly)
379 DO n=1,dynain_data%DYNAIN_NUMELC
388 CALL spmd_stat_pgather(ptwa,dynain_data%DYNAIN_NUMELC,ptwa_p0,dynain_data%DYNAIN_NUMELC_G
394 IF (ispmd == 0.AND.len > 0)
THEN
395 IF(dynain_data%ZIPDYNAIN==0)
THEN
396 WRITE(iudynain,
'(A)') delimit
397 WRITE(iudynain,
'(A)')
'*INITIAL_STRAIN_SHELL'
398 WRITE(iudynain,
'(A)')
399 .
'$ SHELLID NPG NBINT LARGE '
400 WRITE(iudynain,
'(A)')
401 .
'$ IF(NPT == 0), REPEAT I=1,NPG :'
402 WRITE(iudynain,
'(A)')
403 .
'$ IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
404 WRITE(iudynain,
'(A)')
405 .
'$ EPSXX EPSYY EPSZZ EPSXY EPSYZ EPSZX T'
406 WRITE(iudynain,
'(A)') delimit
408 WRITE(line,
'(A)') delimit
410 WRITE(line,
'(A)')
'*INITIAL_STRAIN_SHELL'
413 .
'$ SHELLID NPG NBINT LARGE '
416 .
'$ IF(NPT == 0), REPEAT I=1,NPG :'
419 .
'$ IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
422 .
'$ EPSXX EPSYY EPSZZ EPSXY EPSYZ EPSZX T'
424 WRITE(line,
'(A)') delimit
428 DO n=1,dynain_data%DYNAIN_NUMELC_G
434 ioff = nint(wap0(j + 1))
437 id = nint(wap0(j + 2))
438 npt = nint(wap0(j + 3))
439 npg = nint(wap0(j + 4))
440 large = nint(wap0(j + 5))
443 IF(dynain_data%ZIPDYNAIN==0)
THEN
444 WRITE(iudynain,
'(4I8)')
id,npg,npt,large
446 WRITE(line,
'(4I8)')
id,npg,npt,large
451 IF(dynain_data%ZIPDYNAIN==0)
THEN
452 WRITE(iudynain,
'(1P5G16.9)')(wap0(jj + k),k=1,3)
453 WRITE(iudynain,
'(1P3G16.9)')(wap0(jj + k),k=6,7)
455 WRITE(line,
'(1P5G16.9)')(wap0(jj + k),k=1,3)
457 WRITE(line,
'(1P3G16.9)')(wap0(jj + k),k=6,7)
465 IF(dynain_data%ZIPDYNAIN==0)
THEN
466 WRITE(iudynain,
'(1P5G16.9)')(wap0(j + k),k=1,5)
467 WRITE(iudynain,
'(1P3G16.9)')(wap0(j + k),k=6,7)
469 WRITE(line,
'(1P5G16.9)')(wap0(j + k),k=1,5)
471 WRITE(line,
'(1P3G16.9)')(wap0(j + k),k=6,7)
490 IF(dynain_data%DYNAIN_NUMELTG/=0)
THEN
494 gbuf => elbuf_tab(ng)%GBUF
504 nptr = elbuf_tab(ng)%NPTR
505 npts = elbuf_tab(ng)%NPTS
506 nptt = elbuf_tab(ng)%NPTT
507 nlay = elbuf_tab(ng)%NLAY
524 IF (igtyp == 51 .OR. igtyp == 52 )
THEN
527 npt_all = npt_all + elbuf_tab(ng)%BUFLY(k)%NPTT
528 laynpt_max =
max(laynpt_max , elbuf_tab(ng)%BUFLY(k)%NPTT)
533 nlay_max =
max(nlay,npt, elbuf_tab(ng)%NLAY)
534 ALLOCATE(matly(mvsiz*nlay_max), thkly(mvsiz*nlay_max*laynpt_max),
535 . posly(mvsiz,nlay_max*laynpt_max),thk_ly(nel,nlay_max*laynpt_max))
540 IF (mlw == 1 .OR. mlw == 3 .OR. mlw == 23) mpt=0
551 thk0(lft:llt) = gbuf%THK(lft:llt)
553 thk0(lft:llt) = thke(lft:llt)
555 numel_drape = numeltg_drape
558 . elbuf_tab(ng),lft ,llt ,geo ,igeo ,
559 . mat ,pid ,thkly ,matly ,posly ,
560 . igtyp ,ixfem ,ixlay ,nlay ,npt ,
561 . isubstack ,stack ,drape_sh3n ,nft ,thke ,
562 . nel ,thk_ly ,drapeg%INDX_SH3N ,sedrape,numel_drape)
572 CALL get_t3l(lft ,llt ,ixtg(1,nft+1),x ,gbuf%OFF,
581 IF (dynain_data%IPART_DYNAIN(iprt) == 0) cycle
583 IF (mlw /= 0 .AND. mlw /= 13)
THEN
589 wa(jj) = ixtg(nixtg,n)
608 IF (mlw == 0 .or. mlw == 13)
THEN
617 ELSEIF (mpt==0 .AND. g_stra /= 0)
THEN
628 k = (ipg-1)*nel*g_stra
631 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
632 straing(3)=half*straing(3)
633 straing(4:5)=half*strain(kk(4:5)+i+k)
647 k = (ipg-1)*nel*g_stra
649 straing(1:2)=strain(kk(1:2)+i+k)
650 straing(3:5)=half*strain(kk(3:5)+i+k)
664 k = (ipg-1)*nel*g_stra
667 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
668 straing(3)=half*straing(3)
669 straing(4:5)=half*strain(kk(4:5)+i+k)
682 ELSEIF (g_stra /= 0)
THEN
692 nptt = elbuf_tab(ng)%BUFLY(ilay)%NPTT
703 k = (ipg-1)*nel*g_stra
704 zh = posly(i,ipt)*thkp
705 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8
706 straing(3)=half*straing(3)
707 straing(4:5)=half*strain(kk(4:5)+i+k)
716 wa(jj) = posly(i,ipt)*two
719 ipt_all = ipt_all + nptt
728 DEALLOCATE(matly, thkly, posly, thk_ly)
741 DO n=1,dynain_data%DYNAIN_NUMELTG
746 CALL spmd_stat_pgather(ptwa,dynain_data%DYNAIN_NUMELTG,ptwa_p0,dynain_data%DYNAIN_NUMELTG_G)
751 IF (ispmd == 0.AND.len > 0)
THEN
752 IF(is_written == 0 )
THEN
753 IF(dynain_data%ZIPDYNAIN==0)
THEN
754 WRITE(iudynain,
'(A)') delimit
755 WRITE(iudynain,
'(A)')
'*INITIAL_STRAIN_SHELL'
756 WRITE(iudynain,
'(A)')
757 .
'$ SHELLID NPG NBINT LARGE '
758 WRITE(iudynain,
'(A)')
759 .
'$ IF(NPT == 0), REPEAT I=1,NPG :'
760 WRITE(iudynain,
'(A)')
761 .
'$ IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
762 WRITE(iudynain,
'(A)')
763 .
'$ T EPSXX EPSYY EPSZZ EPSXY EPSYZ EPSZX'
764 WRITE(iudynain,
'(A)') delimit
766 WRITE(line,
'(A)') delimit
768 WRITE(line,'(a)
')'*initial_strain_shell
'
769 CALL STRS_TXT50(LINE,100)
771 . '$ shellid npg nbint large
'
772 CALL STRS_TXT50(LINE,100)
774 . '$
IF(npt == 0), repeat i=1,npg :
'
775 CALL STRS_TXT50(LINE,100)
777 . '$
IF(npt /= 0) repeat k=1,npt : repeat i=1,npg :
'
778 CALL STRS_TXT50(LINE,100)
780 . '$ t epsxx epsyy epszz epsxy epsyz epszx
'
781 CALL STRS_TXT50(LINE,100)
782 WRITE(LINE,'(a)
') DELIMIT
783 CALL STRS_TXT50(LINE,100)
790 DO N=1,DYNAIN_DATA%DYNAIN_NUMELTG_G
796 IOFF = NINT(WAP0(J + 1))
798 ID = NINT(WAP0(J + 2))
799 NPT = NINT(WAP0(J + 3))
800 NPG = NINT(WAP0(J + 4))
801 LARGE = NINT(WAP0(J + 5))
804 IF(DYNAIN_DATA%ZIPDYNAIN==0) THEN
805 WRITE(IUDYNAIN,'(4i8)
')ID,NPG,NPT,LARGE
807 WRITE(LINE,'(4i8)
')ID,NPG,NPT,LARGE
808 CALL STRS_TXT50(LINE,100)
813 IF(DYNAIN_DATA%ZIPDYNAIN==0) THEN
814 WRITE(IUDYNAIN,'(1p5g16.9)
')(WAP0(JJ + K),K=1,5)
815 WRITE(IUDYNAIN,'(1p3g16.9)
')(WAP0(JJ + K),K=6,7)
817 WRITE(LINE,'(1p5g16.9)
')(WAP0(JJ + K),K=1,5)
818 CALL STRS_TXT50(LINE,100)
819 WRITE(LINE,'(1p3g16.9)
')(WAP0(JJ + K),K=6,7)
820 CALL STRS_TXT50(LINE,100)
827 IF(DYNAIN_DATA%ZIPDYNAIN==0) THEN
828 WRITE(IUDYNAIN,'(1p5g16.9)
')(WAP0(J + K),K=1,5)
829 WRITE(IUDYNAIN,'(1p3g16.9)
')(WAP0(J + K),K=6,7)
831 WRITE(LINE,'(1p5g16.9)
')(WAP0(J + K),K=1,5)
832 CALL STRS_TXT50(LINE,100)
833 WRITE(LINE,'(1p3g16.9)
')(WAP0(J + K),K=6,7)
834 CALL STRS_TXT50(LINE,100)
839 ENDIF ! IF (NPT == 0)
840 ENDIF ! IF (IOFF >= 1)
841 ENDDO ! DO N=1,DYNAIN_NUMELTG_G
842.AND.
ENDIF ! IF (ISPMD == 0LEN > 0)
844 DEALLOCATE(PTWA,PTWA_P0)