55 2 XMAS ,IN ,NVC ,DTELEM,
56 3 XREFTG,OFFSET,NEL ,ITHK ,THK ,
57 4 ISIGSH,SIGSH ,STIFN ,STIFR,PARTSAV ,
58 5 V ,IPART ,MSTG ,INTG ,PTG,
59 8 SKEW ,ISH3N ,NSIGSH ,IGEO ,IPM ,
60 9 IUSER ,ETNOD,NSHNOD ,STTG ,PTSH3N,
61 A BUFMAT,SH3TREE ,MCP ,MCPS , TEMP ,
62 B IPARG,CPT_ELTENS,PART_AREA ,NPF, TF ,
63 C SH3TRIM,ISUBSTACK,STACK,RNOISE ,DRAPE,
64 D SH3ANG,GEO_STACK,IGEO_STACK,STRTG,
65 E PERTURB,IYLDINI,ELE_AREA,NLOC_DMG,
66 G IDRAPE ,DRAPEG,MAT_PARAM,GLOB_THERM)
78 use element_mod ,
only : nixtg
82#include "implicit_f.inc"
94#include "vect01_c.inc"
99 INTEGER IXTG(NIXTG,*),IPART(*), OFFSET, NEL, ITHK, ISIGSH,
100 . ISH3N,NSIGSH,NLAY,NPTR,NPTS,NPTT,IL,IR,IS,IT,IYLDINI,
101 . IGEO(NPROPGI,*),IPM(NPROPMI,*),IUSER, NSHNOD(*),NPF(*),
102 . PTSH3N(*), SH3TREE(*),IPARG(*),CPT_ELTENS,SH3TRIM(*),
103 . ISUBSTACK,IGEO_STACK(*),PERTURB(NPERTURB),IDRAPE
105 . PM(NPROPM,*),X(*),GEO(NPROPG,*),XMAS(*),
106 . IN(*),DTELEM(*), XREFTG(3,3,*),THK(*),SIGSH(NSIGSH,*),
107 . STIFN(*),STIFR(*),PARTSAV(20,*), V(*), SKEW(LSKEW,*),
108 . MSTG(*),INTG(*),PTG(3,*),ETNOD(*), STTG(*),BUFMAT(*),
109 . MCP(*),MCPS(*),TEMP(*),PART_AREA(*),TF(*),
110 . RNOISE(*),SH3ANG(*),GEO_STACK(*),STRTG(*),ELE_AREA(*)
111 TYPE (ELBUF_STRUCT_),
TARGET :: ELBUF_STR
112 TYPE (STACK_PLY) :: STACK
113 TYPE (GROUP_PARAM_) :: GROUP_PARAM
114 TYPE (NLOCAL_STR_) :: NLOC_DMG
115 TYPE (DRAPE_) :: DRAPE(NUMELC_DRAPE + NUMELTG_DRAPE)
116 TYPE (DRAPEG_) :: DRAPEG
117 TYPE (MATPARAM_STRUCT_) ,
DIMENSION(NUMMAT) ,
INTENT(INOUT) :: MAT_PARAM
118 TYPE (glob_therm_) ,
intent(in) :: glob_therm
122 INTEGER I,J,NDEPAR,IGTYP,IMAT,IPROP,IGMAT,NVC,IHBE,NPG,MPT,
123 . PTM,PTF,PTS,NUVAR,NUVARR,ID,LENF,LENM,LENS,IREP,IPG
124 INTEGER JJ(8),IX1(MVSIZ),IX2(MVSIZ),IX3(MVSIZ),
125 . mat(mvsiz),pid(mvsiz),ngl(mvsiz)
126 INTEGER LAYNPT_MAX,LAY_MAX,NPT_ALL
128 .
DIMENSION(MVSIZ) :: px2,py2,px3,py3,x2s,y2s,x3s,y3s,
129 .
area,aldt,iorthloc,dt
130 my_real x1(mvsiz), x2(mvsiz), x3(mvsiz) ,x4(mvsiz),
131 . y1(mvsiz), y2(mvsiz), y3(mvsiz),y4(mvsiz),
132 . z1(mvsiz), z2(mvsiz), z3(mvsiz),z4(mvsiz),
133 . e1x(mvsiz), e1y(mvsiz), e1z(mvsiz),
134 . e2x(mvsiz), e2y(mvsiz), e2z(mvsiz),
135 . e3x(mvsiz), e3y(mvsiz), e3z(mvsiz),
136 . x31(mvsiz), y31(mvsiz), z31(mvsiz),
137 . x2l(mvsiz), x3l(mvsiz), y3l(mvsiz)
138 my_real,
ALLOCATABLE,
DIMENSION(:) :: dir_a,dir_b
140 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: INDX
142 .
DIMENSION(:) ,
POINTER :: UVAR
143 parameter(laynpt_max = 10)
144 parameter(lay_max = 100)
145 INTEGER MATLY(MVSIZ*LAY_MAX)
147 . POSLY(MVSIZ,LAY_MAX*LAYNPT_MAX),NPGTH
149 TYPE(BUF_LAY_) ,
POINTER :: BUFLY
150 TYPE(L_BUFEL_) ,
POINTER :: LBUF
151 TYPE(g_bufel_) ,
POINTER :: GBUF
153 gbuf => elbuf_str%GBUF
156 iprop = ixtg(nixtg-1,1+nft)
158 igtyp = igeo(11,iprop)
159 igmat = igeo(98,iprop)
163 nlay = elbuf_str%NLAY
164 nptr = elbuf_str%NPTR
165 npts = elbuf_str%NPTS
166 nptt = elbuf_str%NPTT
168 IF (npt /= 0) npt = nptt*nlay
169 lenf = nel*gbuf%G_FORPG/npg
170 lenm = nel*gbuf%G_MOMPG/npg
171 lens = nel*gbuf%G_STRPG/npg
182 CALL c3coori(x,xreftg(1,1,nft+1),ixtg(1,nft+1),ngl,
183 . x1 ,x2 ,x3 ,y1 ,y2 ,y3 ,
184 . z1 ,z2 ,z3 ,ix1 ,ix2 ,ix3 )
185 CALL c3veok3(nvc ,ix1 ,ix2 ,ix3 )
187 . x1 ,x2 ,x3 ,y1 ,y2 ,y3 ,
188 . z1 ,z2 ,z3 ,e1x ,e2x ,e3x ,
189 . e1y ,e2y ,e3y ,e1z ,e2z ,e3z ,
190 . x31, y31, z31 ,x2l ,x3l ,y3l )
194 IF (jthe == 0 .and. glob_therm%NINTEMP > 0)
THEN
195 CALL initemp_shell(elbuf_str,temp,nel,numnod,numeltg,3,nixtg,ixtg)
199 ALLOCATE(indx(numeltg))
201 indx(1:numeltg) = drapeg%INDX(numelc + 1 : numelc + numeltg)
205 CALL c3inmas(x,xreftg(1,1,nft+1),ixtg,geo,pm,xmas,in,thk
206 . partsav,v,ipart(nft+1),mstg(nft+1),intg(nft+1),
207 . ptg(1,nft+1),igeo ,imat ,iprop ,
area ,
208 . etnod,nshnod,sttg(nft+1),sh3tree,mcp ,
209 . mcps(nft+1) , temp,sh3trim,isubstack,nlay,
210 . elbuf_str,stack,gbuf%THK_I,rnoise,drape ,
212 . x2l ,x3l ,y3l ,idrape , indx)
216 npt_all = npt_all + elbuf_str%BUFLY(il)%NPTT
219 IF(npt_all == 0 ) npt_all = nlay
220 IF (iparg(6) == 0.OR.npt==0) mpt=0
222 IF((igtyp == 51 .OR. igtyp == 52) .AND. idrape > 0)
THEN
223 ALLOCATE(dir_a(npt_all*nel*2))
224 ALLOCATE(dir_b(npt_all*nel*2))
228 ALLOCATE(dir_a(nlay*nel*2))
229 ALLOCATE(dir_b(nlay*nel*2))
239 nuvar =
max(nuvar,ipm(8,imat))
240 nuvarr =
max(nuvarr,ipm(221,imat))
245 . x1 ,x2 ,x3 ,y1 ,y2 ,y3 ,
246 . z1 ,z2 ,z3 ,e1x ,e2x ,e3x ,
247 . e1y ,e2y ,e3y ,e1z ,e2z ,e3z )
251 IF ((imasadd > 0).OR.(nloc_dmg%IMOD > 0))
THEN
255 ele_area(numelc+i+nft) =
area(i)
256 IF (gbuf%G_AREA > 0) gbuf%AREA(i) =
area(i)
260 CALL cdkderii(lft,llt,pm,geo,px2,py2,px3,py3,
261 . stifn ,stifr ,ixtg(1,nft+1),thk, sh3tree,
262 . aldt ,bufmat ,ipm ,igeo,stack%PM,
263 . isubstack,strtg(nft+1),group_param,
264 . imat ,iprop,
area, dt ,
265 . x1 ,x2 ,x3 ,y1 ,y2 ,y3 ,
266 . z1 ,z2 ,z3 ,e1x ,e2x ,e3x ,
267 . e1y ,e2y ,e3y ,e1z ,e2z ,e3z )
269 CALL c1buf3(geo,gbuf%THK,gbuf%OFF,thk,ksh3tree,sh3tree)
274 . nptr,npts,nptt,igtyp)
277 IF (( isigsh/=0 .OR. ithkshel == 2) .and. mpt>0)
THEN
279 . elbuf_str ,lft ,llt ,geo ,igeo ,
280 . mat ,pid ,matly ,posly ,igtyp ,
281 . nlay ,mpt ,isubstack ,stack ,drape ,
282 . nft ,gbuf%THK ,nel ,idrape ,
stdrape ,
293 CALL cmaini3(elbuf_str,pm ,geo ,nel ,nlay ,
294 . skew ,igeo ,ixtg(1,nft+1),nixtg ,numeltg ,
295 . nsigsh ,sigsh ,ptsh3n ,igtyp ,iorthloc ,
296 . ipm ,id ,aldt ,mat_param,
297 . ir ,is ,isubstack,stack ,irep ,
298 . drape ,sh3ang(nft+1),geo_stack,igeo_stack,
299 . igmat ,imat ,iprop ,nummat,
300 . x1 ,x2 ,x3 ,x4 ,y1 ,y2 ,
301 . y3 ,y4 ,z1 ,z2 ,z3 ,z4 ,
302 . e1x ,e2x ,e3x ,e1y ,e2y ,e3y ,e1z ,e2z ,e3z ,x ,
303 . npt_all ,idrape ,
stdrape ,indx)
307 IF ((isigsh /= 0 .OR. ithkshel == 2).AND. ish3n == 30 )
THEN
309 .
CALL corth3(elbuf_str,dir_a ,dir_b ,lft ,llt ,
311 . x1 ,x2 ,x3 ,x4 ,y1 ,y2 ,
312 . y3 ,y4 ,z1 ,z2 ,z3 ,z4 ,
313 . e1x ,e2x ,e3x ,e1y ,e2y ,e3y ,e1z ,e2z ,e3z ,
317 1 lft ,llt ,nft ,mpt ,istrain,
318 2 gbuf%THK ,gbuf%EINT,gbuf%STRPG(pts+1),gbuf%HOURG,
319 3 gbuf%FORPG(ptf+1),gbuf%MOMPG(ptm+1),sigsh ,nsigsh ,numeltg ,
320 4 ixtg ,nixtg ,numsh3n ,ptsh3n ,igeo ,
321 5 ir ,is ,ir ,npg ,gbuf%G_PLA,
322 6 gbuf%PLA,thk ,igtyp ,nel ,isigsh ,
323 7 e1x ,e2x ,e3x ,e1y ,e2y ,e3y,
324 8 e1z ,e2z ,e3z ,dir_a ,dir_b,posly )
327 gbuf%FORPG_G(ptf+i+jj(1:5))=gbuf%FORPG(ptf+i+jj(1:5))
330 IF (ithkshel == 2)
THEN
333 gbuf%STRA(i+jj(1:8))=gbuf%STRA(i+jj(1:8))+
334 . npgth*gbuf%STRPG(pts+i+jj(1:8))
337 ELSEIF ( ithkshel == 1 .AND. ish3n == 30 )
THEN
338 CALL thickini(lft ,llt ,nft ,ptsh3n,numeltg,
339 2 gbuf%THK,thk ,ixtg ,nixtg ,nsigsh ,
343 IF (iuser == 1.AND.mtn>=28)
THEN
345 1 lft ,llt ,nft ,nel ,istrain ,
346 2 sigsh ,nsigsh ,numelc ,ixtg ,nixtg ,
347 3 numsh3n ,ptsh3n ,ir ,is ,npt ,
348 4 igtyp ,igeo ,nlay ,npg ,ipg )
351 IF (iyldini == 1 .AND. (mtn== 36.OR. mtn==87))
THEN
353 1 lft ,llt ,nft ,nel ,istrain ,
354 2 sigsh ,nsigsh ,numelc ,ixtg ,nixtg ,
355 3 numsh3n ,ptsh3n ,ir ,is ,npt ,
356 4 igtyp ,igeo ,nlay ,npg ,ipg )
362 CALL cfailini4(elbuf_str,nptr ,npts ,nptt ,nlay ,
363 . sigsh ,nsigsh ,ptsh3n ,rnoise ,perturb ,
364 . mat_param,aldt ,thk )
368 IF (istrain == 1 .AND. nxref > 0)
THEN
369 uvar => elbuf_str%BUFLY(1)%MAT(1,1,1)%VAR
370 CALL cdkepsini(elbuf_str,mat_param(imat),
371 . lft ,llt ,ismstr ,mtn ,ithk ,
372 . pm ,geo ,ixtg(1,nft+1),x ,xreftg(1,1,nft+1),
373 . gbuf%FOR,gbuf%THK,gbuf%EINT,gbuf%STRA,
374 . px2 ,py2 ,px3 ,py3 ,x2s ,
375 . y2s ,x3s ,y3s ,gbuf%OFF ,imat ,
377 . nlay ,dir_a ,dir_b ,gbuf%SIGI ,npf ,
380 CALL c3epschk(lft, llt,nft, pm, geo,ixtg(1,nft+1),gbuf%STRA,thk,
383 IF (ismstr == 1) iparg(9)=11
385 IF (ismstr == 11 .OR.(ismstr==1 .AND. mtn==19))
THEN
387 elbuf_str%GBUF%SMSTR(jj(1)+i) = x2s(i)
388 elbuf_str%GBUF%SMSTR(jj(2)+i) = y2s(i)
389 elbuf_str%GBUF%SMSTR(jj(3)+i) = x3s(i)
390 elbuf_str%GBUF%SMSTR(jj(4)+i) = y3s(i)
399 gbuf%FORPG(ptf+jj(1)+i) = gbuf%FOR(jj(1)+i)
400 gbuf%FORPG(ptf+jj(2)+i) = gbuf%FOR(jj(2)+i)
401 gbuf%FORPG(ptf+jj(3)+i) = gbuf%FOR(jj(3)+i)
403 gbuf%MOMPG(ptm+jj(1)+i) = gbuf%MOM(jj(1)+i)
404 gbuf%MOMPG(ptm+jj(2)+i) = gbuf%MOM(jj(2)+i)
405 gbuf%MOMPG(ptm+jj(3)+i) = gbuf%MOM(jj(3)+i)
407 IF (mtn == 58 .and. ir > 1)
THEN
408 uvar => elbuf_str%BUFLY(1)%MAT(ir,is,1)%VAR
409 nuvar = elbuf_str%BUFLY(1)%NVAR_MAT
411 uvar(i) = elbuf_str%BUFLY(1)%MAT(1,1,1)%VAR(i)
420 IF (igtyp /= 0 .AND. igtyp /= 1 .AND.
421 . igtyp /= 9 .AND. igtyp /= 10 .AND.
422 . igtyp /= 11 .AND. igtyp /= 16 .AND.
423 . igtyp /= 17 .AND. igtyp /= 51 .AND.
430 ndepar=numels+numelc+numelt+numelp+numelr+nft
432 dtelem(ndepar+i) = dt(i)
437 IF (gbuf%G_VOL > 0) gbuf%VOL(i) =
area(i)*gbuf%THK(i)
442 IF(
ALLOCATED(indx))
DEALLOCATE(indx)