43 1 X ,IPARG ,IPM ,IGEO ,IXC ,
44 2 IXTG ,WA,WAP0 ,IPARTC, IPARTTG,
45 3 IPART_STATE,STAT_INDXC,STAT_INDXTG,THKE,SIZP0,
46 4 GEO ,STACK,DRAPE_SH4N,DRAPE_SH3N,DRAPEG)
57#include "implicit_f.inc"
73 INTEGER IXC(NIXC,*),IXTG(NIXTG,*),
74 . IPARG(NPARG,*),IPM(NPROPMI,*),IGEO(NPROPGI,*),
75 . IPARTC(*), IPARTTG(*), IPART_STATE(*),
76 . stat_indxc(*), stat_indxtg(*)
78 . thke(*),x(3,*),geo(*)
79 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
80 TYPE (STACK_PLY) :: STACK
82 TYPE (DRAPEG_) :: DRAPEG
83 double precision WA(*),WAP0(*)
87 INTEGER I,J,K,N,II,JJ,LEN, IOFF, NG, NEL, NFT, ITY, LFT, NPT,
88 . LLT, MLW, ISTRAIN,ID, IPRT0, IPRT,NPG,IPG,IE,NPTR,NPTS,G_STRA,
89 . ITHK,KK(8),NF1,IGTYP,IREL,IHBE,NLAY,IBID0,MAT_1,PID_1,ILAY,NF3,
91 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PTWA
92 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PTWA_P0
94 . THK, EM, EB, H1, H2, H3
95 CHARACTER*100 DELIMIT,LINE
96 TYPE(g_bufel_) ,
POINTER :: GBUF
97 TYPE(l_bufel_) ,
POINTER :: LBUF
98 TYPE(BUF_LAY_) ,
POINTER :: BUFLY
99 INTEGER LAYNPT_MAX,NLAY_MAX,ISUBSTACK,IPT_ALL,NPTT,IT,IPT,NPT_ALL,MPT
101 .
DIMENSION(:),
POINTER :: strain
103 . qt(9,mvsiz),straing(6),zh,thkp ,thk0(mvsiz)
104 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: MATLY
105 my_real,
DIMENSION(:) ,
ALLOCATABLE :: THKLY
106 my_real,
DIMENSION(:,:) ,
ALLOCATABLE :: posly,thk_ly
110 ./
'#---1----|----2----|----3----|----4----|----5----|----6----|'/
112 ./
'----7----|----8----|----9----|----10---|'/
116 CALL my_alloc(ptwa,
max(stat_numelc ,stat_numeltg))
117 ALLOCATE(ptwa_p0(0:
max(1,stat_numelc_g,stat_numeltg_g)))
120 IF(stat_numelc==0)
GOTO 200
126 gbuf => elbuf_tab(ng)%GBUF
132 nptr = elbuf_tab(ng)%NPTR
133 npts = elbuf_tab(ng)%NPTS
134 nlay = elbuf_tab(ng)%NLAY
137 isubstack=iparg(71,ng)
139 IF (ihbe == 23 .AND. gbuf%G_STRPG>gbuf%G_STRA) npg=4
140 IF (ihbe == 23 .AND. npg/=4) cycle
147 ELSEIF (ishfram ==1)
THEN
161 thk0(lft:llt) = gbuf%THK(lft:llt)
163 thk0(lft:llt) = thke(lft+nft:llt+nft)
167 IF(igtyp == 51 .OR. igtyp == 52)
THEN
169 laynpt_max =
max(laynpt_max , elbuf_tab(ng)%BUFLY(ilay)%NPTT)
172 nlay_max =
max(nlay,npt, elbuf_tab(ng)%NLAY)
173 ALLOCATE(matly(mvsiz*nlay_max), thkly(mvsiz*nlay_max*laynpt_max),
174 . posly(mvsiz,nlay_max*laynpt_max),thk_ly(nel,nlay_max*laynpt_max))
182 . mat_1 ,pid_1 ,thkly ,matly ,posly ,
183 . igtyp ,ibid0 ,ibid0 ,nlay ,npt ,
184 . isubstack,stack ,drape_sh4n ,nft ,thke ,
185 . nel ,thk_ly ,drapeg%INDX_SH4N ,sedrape,numel_drape)
186 CALL get_q4l(lft ,llt ,ixc(1,nf1),x ,gbuf%OFF,irel ,qt )
189 npt_all = npt_all + elbuf_tab(ng)%BUFLY(ilay)%NPTT
198 IF(ipart_state(iprt)==0)cycle
201 IF (mlw /= 0 .AND. mlw /= 13)
THEN
216 IF (mlw /= 0 .AND. mlw /= 13)
THEN
223 IF (mlw == 0 .or. mlw == 13)
THEN
230 ELSEIF (npt==0 .AND. g_stra /= 0)
THEN
238 k = (ipg-1)*nel*g_stra
239 straing(1:2)=strain(kk(1:2)+i+k)
240 straing(3:5)=half*strain(kk(3:5)+i+k)
252 k = (ipg-1)*nel*g_stra
254 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
255 straing(3)=half*straing(3)
256 straing(4:5)=half*strain(kk(4:5)+i+k)
266 ELSEIF (g_stra /= 0)
THEN
274 bufly => elbuf_tab(ng)%BUFLY(ilay)
280 k = (ipg-1)*nel*g_stra
281 zh = posly(i,ipt)*thkp
282 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
283 straing(3)=half*straing(3)
284 straing(4:5)=half*strain(kk(4:5)+i+k)
292 wa(jj) = posly(i,ipt)*two
295 ipt_all = ipt_all + nptt
304 DEALLOCATE(matly, thkly, posly, thk_ly)
326 IF(ispmd==0.AND.len>0)
THEN
336 ioff = nint(wap0(j + 1))
338 iprt = nint(wap0(j + 2))
339 IF(iprt /= iprt0)
THEN
340 IF (izipstrs == 0)
THEN
341 WRITE(iugeo,
'(A)') delimit
342 WRITE(iugeo,
'(A)')
'/INISHE/STRA_F/GLOB'
344 .
'#------------------------ REPEAT --------------------------'
346 .
'# SHELLID NPT NPG THK'
347 WRITE(iugeo,
'(A/A/A)')
348 .
'# REPEAT I=1,NPG :',
350 .
'# E12, E23, E31, T,'
352 .
'#---------------------- END REPEAT ------------------------'
353 WRITE(iugeo,
'(A)') delimit
355 WRITE(line,
'(A)') delimit
357 WRITE(line,
'(A)')
'/INISHE/STRA_F/GLOB'
360 .
'#------------------------ REPEAT --------------------------'
363 .
'# SHELLID NPT NPG THK'
365 WRITE(line,
'(A)')
'# REPEAT I=1,NPG :'
367 WRITE(line,
'(A)')
'# E11, E22, E33,'
369 WRITE(line,
'(A)')
'# E12, E23, E31, T '
372 .
'#---------------------- END REPEAT ------------------------'
374 WRITE(line,
'(A)') delimit
379 id = nint(wap0(j + 3))
380 npt = nint(wap0(j + 4))
381 npg = nint(wap0(j + 5))
384 IF (izipstrs == 0)
THEN
385 WRITE(iugeo,
'(3I10,1PE20.13)')id,npt,npg,thk
387 WRITE(line,
'(3I10,1PE20.13)')id,npt,npg,thk
392 IF (izipstrs == 0)
THEN
393 WRITE(iugeo,
'(1P3E20.13)')(wap0(j + k),k=1,3)
394 WRITE(iugeo,
'(1P4E20.13)')(wap0(j + k),k=4,7)
403 IF (izipstrs == 0)
THEN
404 WRITE(iugeo,'(1p3e20.13)
')(WAP0(J + K),K=1,3)
405 WRITE(IUGEO,'(1p4e20.13)
')(WAP0(J + K),K=4,7)
407 CALL TAB_STRS_TXT50(WAP0(1),3,J,SIZP0,3)
408 CALL TAB_STRS_TXT50(WAP0(4),4,J,SIZP0,4)
415 IF (IZIPSTRS == 0) THEN
416 WRITE(IUGEO,'(1p3e20.13)
')(WAP0(J + K),K=1,3)
417 WRITE(IUGEO,'(1p4e20.13)
')(WAP0(J + K),K=4,7)
419 CALL TAB_STRS_TXT50(WAP0(1),3,J,SIZP0,3)
420 CALL TAB_STRS_TXT50(WAP0(4),4,J,SIZP0,4)
434 IF (STAT_NUMELTG==0) GOTO 300
440 GBUF => ELBUF_TAB(NG)%GBUF
449 ISUBSTACK=IPARG(71,NG)
450 NPTR = ELBUF_TAB(NG)%NPTR
451 NPTS = ELBUF_TAB(NG)%NPTS
452 NLAY = ELBUF_TAB(NG)%NLAY
463 DO J=1,8 ! length max of GBUF%G_STRA = 8
469 PID_1 = IXTG(NIXTG-1,NF1)
471 THK0(LFT:LLT) = GBUF%THK(LFT:LLT)
474 THK0(LFT:LLT) = THKE(LFT+NF3:LLT+NF3)
478.OR.
IF(IGTYP == 51 IGTYP == 52) THEN
480 LAYNPT_MAX = MAX(LAYNPT_MAX , ELBUF_TAB(NG)%BUFLY(ILAY)%NPTT)
483 NLAY_MAX = MAX(NLAY,NPT, ELBUF_TAB(NG)%NLAY)
484 ALLOCATE(MATLY(MVSIZ*NLAY_MAX), THKLY(MVSIZ*NLAY_MAX*LAYNPT_MAX),
485 . POSLY(MVSIZ,NLAY_MAX*LAYNPT_MAX),THK_LY(NEL,NLAY_MAX*LAYNPT_MAX))
490 NUMEL_DRAPE = NUMELTG_DRAPE
492 CALL LAYINI(ELBUF_TAB(NG),LFT ,LLT ,GEO ,IGEO ,
493 . MAT_1 ,PID_1 ,THKLY ,MATLY ,POSLY ,
494 . IGTYP ,IBID0 ,IBID0 ,NLAY ,NPT ,
495 . ISUBSTACK,STACK ,DRAPE_SH3N ,NFT ,THKE ,
496 . NEL ,THK_LY ,DRAPEG%INDX_SH3N,SEDRAPE,NUMEL_DRAPE)
497 CALL GET_T3L(LFT ,LLT ,IXTG(1,NF1),X ,GBUF%OFF,
501 NPT_ALL = NPT_ALL + ELBUF_TAB(NG)%BUFLY(ILAY)%NPTT
510 IF(IPART_STATE(IPRT)==0)CYCLE
514.AND.
IF (MLW /= 0 MLW /= 13) THEN
522 WA(JJ) = IXTG(NIXTG,N)
528.AND.
IF (MLW /= 0 MLW /= 13) THEN
536.or.
IF (MLW == 0 MLW == 13) THEN
543.AND.
ELSEIF (NPT==0 G_STRA /= 0) THEN
551 K = (IPG-1)*NEL*G_STRA
552 STRAING(1:2)=STRAIN(KK(1:2)+I+K)
553 STRAING(3:5)=HALF*STRAIN(KK(3:5)+I+K)
554 CALL SHELL2G(STRAING,QT(1,I))
565 K = (IPG-1)*NEL*G_STRA
567 STRAING(1:3)=STRAIN(KK(1:3)+I+K)+ZH*STRAIN(KK(6:8)+I+K)
568 STRAING(3)=HALF*STRAING(3)
569 STRAING(4:5)=HALF*STRAIN(KK(4:5)+I+K)
570 CALL SHELL2G(STRAING,QT(1,I))
579 ELSEIF (G_STRA > 0) THEN
587 BUFLY => ELBUF_TAB(NG)%BUFLY(ILAY)
593 K = (IPG-1)*NEL*G_STRA
594 ZH = POSLY(I,IPT)*THKP
595 STRAING(1:3)=STRAIN(KK(1:3)+I+K)+ZH*STRAIN(KK(6:8)+I+K)
596 STRAING(3)=HALF*STRAING(3)
597 STRAING(4:5)=HALF*STRAIN(KK(4:5)+I+K)
598 CALL SHELL2G(STRAING,QT(1,I))
605 WA(JJ) = POSLY(I,IPT)*TWO
608 IPT_ALL = IPT_ALL + NPTT
610.or.
END IF ! IF (MLW == 0 MLW == 13)
617 DEALLOCATE(MATLY, THKLY, POSLY, THK_LY)
634 CALL SPMD_STAT_PGATHER(PTWA,STAT_NUMELTG,PTWA_P0,STAT_NUMELTG_G)
636 CALL SPMD_RGATHER9_DP(WA,JJ,WAP0,SIZP0,LEN)
639.AND.
IF(ISPMD==0LEN>0) THEN
642 DO N=1,STAT_NUMELTG_G
649 IOFF = NINT(WAP0(J + 1))
651 IPRT = NINT(WAP0(J + 2))
652 IF(IPRT /= IPRT0)THEN
653 IF (IZIPSTRS == 0) THEN
654 WRITE(IUGEO,'(a)
') DELIMIT
655 WRITE(IUGEO,'(a)
')'/inish3/stra_f/glob
'
657 .'#------------------------ REPEAT --------------------------'
659 .
'# SH3NID NPT NPG THK'
660 WRITE(iugeo,
'(A/A/A)')
661 .
'# REPEAT I=1,NPG :',
663 .
'# E12, E23, E31, T '
665 .'
#---------------------- END REPEAT ------------------------'
666 WRITE(iugeo,
'(A)') delimit
668 WRITE(line,
'(A)') delimit
670 WRITE(line,
'(A)')
'/INISH3/STRA_F/GLOB'
673 .
'#------------------------ REPEAT --------------------------'
676 .
'# SH3NID NPT NPG THK'
678 WRITE(line,
'(A)')
'# REPEAT I=1,NPG :'
680 WRITE(line,
'(A)')
'# E11, E22, E33,'
682 WRITE(line,
'(A)')
'# E12, E23, E31, T '
685 .
'#---------------------- END REPEAT ------------------------'
687 WRITE(line,
'(A)') delimit
692 id = nint(wap0(j + 3))
693 npt = nint(wap0(j + 4))
694 npg = nint(wap0(j + 5))
697 IF (izipstrs == 0)
THEN
698 WRITE(iugeo,
'(3I10,1PE20.13)')id,npt,npg,thk
700 WRITE(line,
'(3I10,1PE20.13)')id,npt,npg,thk
705 IF (izipstrs == 0)
THEN
706 WRITE(iugeo,
'(1P3E20.13)')(wap0(j + k),k=1,3)
707 WRITE(iugeo,
'(1P4E20.13)')(wap0(j + k),k=4,7)
716 IF (izipstrs == 0)
THEN
717 WRITE(iugeo,
'(1P3E20.13)')(wap0(j + k),k=1,3)
718 WRITE(iugeo,
'(1P4E20.13)')(wap0(j + k),k=4,7)
728 IF (izipstrs == 0)
THEN
729 WRITE(iugeo,
'(1P3E20.13)')(wap0(j + k),k=1,3)
730 WRITE(iugeo,
'(1P4E20.13)')(wap0(j + k),k=4,7)
761#include "implicit_f.inc"
765#include "mvsiz_p.inc"
769 INTEGER IXC(NIXC,*),JFT,JLT,IREL
771 . X(3,*), (*),VQ(3,3,MVSIZ)
776 INTEGER IXCTMP2,IXCTMP3,IXCTMP4,IXCTMP5
778 . RX(MVSIZ),RY(MVSIZ),RZ(MVSIZ),SX(MVSIZ),SY(MVSIZ),
779 . R11(MVSIZ),R12(MVSIZ),R13(MVSIZ),R21(MVSIZ),R22(MVSIZ),
780 . r23(mvsiz),r31(mvsiz),r32(mvsiz),r33(mvsiz),
781 . sz(mvsiz),deta1(mvsiz)
789 rx(i)=x(1,ixctmp3)+x(1,ixctmp4)-x(1,ixctmp2)-x(1,ixctmp5)
790 sx(i)=x(1,ixctmp4)+x(1,ixctmp5)-x(1,ixctmp2)-x(1,ixctmp3)
791 ry(i)=x(2,ixctmp3)+x(2,ixctmp4)-x(2,ixctmp2)-x(2,ixctmp5)
792 sy(i)=x(2,ixctmp4)+x(2,ixctmp5)-x(2,ixctmp2)-x(2,ixctmp3)
793 rz(i)=x(3,ixctmp3)+x(3,ixctmp4)-x(3,ixctmp2)-x(3,ixctmp5
794 sz(i)=x(3,ixctmp4)+x(3,ixctmp5)-x(3,ixctmp2)-x(3,ixctmp3)
802 . r11,r12,r13,r21,r22,r23,r31,r32,r33,deta1,offg )
828#include "implicit_f.inc"
832#include "mvsiz_p.inc"
836 INTEGER IXTG(NIXTG,*),JFT,JLT,IREL
838 . X(3,*), OFFG(*),VQ(3,3,MVSIZ)
845 . RX(MVSIZ),RY(MVSIZ),RZ(MVSIZ),SX(MVSIZ),SY(MVSIZ),
846 . R11(MVSIZ),R12(MVSIZ),R13(MVSIZ),R21(MVSIZ),R22(MVSIZ),
847 . R23(MVSIZ),R31(MVSIZ),R32(MVSIZ),(MVSIZ),
848 . sz(mvsiz),deta1(mvsiz)
855 rx(i)=x(1,i2)-x(1,i1)
856 ry(i)=x(2,i2)-x(2,i1)
857 rz(i)=x(3,i2)-x(3,i1)
858 sx(i)=x(1,i3)-x(1,i1)
859 sy(i)=x(2,i3)-x(2,i1)
860 sz(i)=x(3,i3)-x(3,i1)
868 . r11,r12,r13,r21,r22,r23,r31,r32,r33,deta1,offg )
892#include "implicit_f.inc"
904 . txx,tyy,tzz,txy,tyz,tzx,uxx,uyy,uzz,uxy,uyz,uzx,a,b,c
913 a = qt(1,1)*txx + qt(1,2)*txy + qt(1,3)*tzx
914 b = qt(1,1)*txy + qt(1,2)*tyy + qt(1,3)*tyz
915 c = qt(1,1)*tzx + qt(1,2)*tyz + qt(1,3)*tzz
916 uxx = a*qt(1,1) + b*qt(1,2) + c*qt(1,3)
917 uxy = a*qt(2,1) + b*qt(2,2) + c*qt(2,3)
918 uzx = a*qt(3,1) + b*qt(3,2) + c*qt(3,3)
919 a = qt(2,1)*txx + qt(2,2)*txy + qt(2,3)*tzx
920 b = qt(2,1)*txy + qt(2,2)*tyy + qt(2,3)*tyz
921 c = qt(2,1)*tzx + qt(2,2)*tyz + qt(2,3)*tzz
922 uyy = a*qt(2,1) + b*qt(2,2) + c*qt(2,3)
923 uyz = a*qt(3,1) + b*qt(3,2) + c*qt(3,3)
924 a = qt(3,1)*txx + qt(3,2)*txy + qt(3,3)*tzx
925 b = qt(3,1)*txy + qt(3,2)*tyy + qt(3,3)*tyz
926 c = qt(3,1)*tzx + qt(3,2)*tyz + qt(3,3)*tzz
927 uzz = a*qt(3,1) + b*qt(3,2) + c*qt(3,3)
subroutine layini(elbuf_str, jft, jlt, geo, igeo, mat, pid, thkly, matly, posly, igtyp, ixfem, ixlay, nlay, npt, isubstack, stack, drape, nft, thk, nel, ratio_thkly, indx_drape, sedrape, numel_drape)