64 1 ELBUF_STR, JFT, JLT, PM,
66 3 V, R, FAILWAVE, NVC,
68 5 BUFMAT, PMSAV, DT2T, NELTST,
69 6 ITYPTST, STIFN, STIFR, FSKY,
70 7 IADTG, ITAB, EPSDOT, IPARTTG,
71 8 THKE, GROUP_PARAM, F11, F12,
76 D MAT_ELEM, NEL, ISTRAIN, IHBE,
77 E ITHK, IOFC, IPLA, NFT,
78 F ISMSTR, NPT, KFTS, IGEO,
79 G IPM, IFAILURE, GRESAV, GRTH,
80 H IGRTH, MSTG, DMELTG, JSMS,
81 I TABLE, IPARG, SENSORS, PTG,
82 J JTHE, CONDN, CONDNSKY, ISUBSTACK,
83 K STACK, ITASK, DRAPE_SH3N, IPRI,
84 L NLOC_DMG, INDX_DRAPE, IGRE, JTUR,
85 M DT, NCYCLE, SNPC, STF,
86 M GLOB_THERM, NXLAYMAX, IDEL7NOK, USERL_AVAIL,
87 N MAXFUNC, SBUFMAT,IPART ,LIPART1 )
103 use element_mod ,
only : nixtg
107#include "implicit_f.inc"
111#include "mvsiz_p.inc"
115#include "param_c.inc"
116#include "com04_c.inc"
117#include "com08_c.inc"
118#include "scr18_c.inc"
119#include "parit_c.inc"
123 TYPE(timer_) ,
INTENT(INOUT) :: TIMERS
124 INTEGER,
INTENT(IN) :: USERL_AVAIL
125 INTEGER,
INTENT(IN) :: MAXFUNC
126 INTEGER,
INTENT(INOUT) :: IDEL7NOK
127 INTEGER,
INTENT(IN) :: NXLAYMAX
128 INTEGER,
INTENT(IN) :: SBUFMAT
129 INTEGER,
INTENT(IN) :: STF
130 INTEGER,
INTENT(IN) :: SNPC
131 INTEGER,
INTENT(IN) :: JTUR, NCYCLE
132 INTEGER,
INTENT(IN) :: IGRE
133 INTEGER JFT, JLT, NVC, MTN,NELTST,ITYPTST,IUN,
134 . NEL,ISTRAIN,IHBE ,ITHK,IOFC,IPLA,NFT,ISMSTR ,
135 . NPT,KFTS,IFAILURE,JSMS,JTHE,ISUBSTACK,ITASK,IPRI
136 INTEGER NPF(*),IXTG(NIXTG,*),IADTG(3,*),IGEO(NPROPGI,*),ITAB(*),
137 . IPM(NPROPMI,*),IPARTTG(*),GRTH(*),IGRTH(*),IPARG(*),INDX_DRAPE(SCDRAPE)
140 . PM(NPROPM,*), X(*), F(*), M(*), (*), R(*),
141 . GEO(NPROPG,*), TF(*), BUFMAT(*), PMSAV(*),STIFN(*),
142 . STIFR(*),FSKY(*),EPSDOT(6,*),THKE(*),DT2T,
143 . F11(MVSIZ), F12(MVSIZ), (MVSIZ),
144 . F21(MVSIZ), F22(MVSIZ), F23(MVSIZ),
145 . F31(MVSIZ), F32(MVSIZ), F33(MVSIZ),
146 . M11(MVSIZ), M12(MVSIZ), M13(MVSIZ),
147 . m21(mvsiz), m22(mvsiz), m23(mvsiz),
148 . m31(mvsiz), m32(mvsiz), m33(mvsiz),
149 . gresav(*),mstg(*), dmeltg(*),ptg(3,*),condn(*),condnsky(*)
151 TYPE(elbuf_struct_),
TARGET :: ELBUF_STR
152 TYPE (STACK_PLY) :: STACK
153 TYPE (FAILWAVE_STR_) ,
TARGET :: FAILWAVE
154 TYPE (GROUP_PARAM_) :: GROUP_PARAM
155 TYPE (NLOCAL_STR_),
TARGET :: NLOC_DMG
156 TYPE (DRAPE_),
DIMENSION (NUMELTG_DRAPE):: DRAPE_SH3N
157 TYPE (MAT_ELEM_) ,
INTENT(INOUT) :: MAT_ELEM
158 TYPE (SENSORS_) ,
INTENT(INOUT) :: SENSORS
159 TYPE (DT_),
INTENT(IN) :: DT
160 type (glob_therm_) ,
intent(inout) :: glob_therm
161 INTEGER,
INTENT(IN) :: LIPART1
162 INTEGER,
DIMENSION(LIPART1, NPART ),
INTENT(IN) :: IPART
168 INTEGER MAT(MVSIZ),PID(MVSIZ),NGL(MVSIZ),INDX(MVSIZ),FWAVE_EL(NEL),
169 . LENF,LENM,LENS,IR,IS,IT,NPTT,IMAT,
170 . I,J,NG,NPG,NNOD,NLAY,L_DIRA,L_DIRB,IFAILWAVE,
171 . PT1,PT2,PT3,PTF,PTM,PTS,IGTYP,IBID,J1,J2,
172 . IGMAT,ILAY,NPTTOT,IREP,KK(5),K,IDRAPE,ACTIFXFEM,SEDRAPE,NUMEL_DRAPE
173 INTEGER,
DIMENSION(NEL) :: OFFLY
176 my_real,
dimension(mvsiz) :: epsd_pg,epsd_glob
177 my_real :: dtinv,asrate,eps_m2,eps_k2
179 . sti(mvsiz),stir(mvsiz),rho(mvsiz),
180 . ssp(mvsiz),viscmx(mvsiz),
area(mvsiz),area2(mvsiz),
181 . exx(mvsiz), eyy(mvsiz), exy(mvsiz), exz(mvsiz), eyz(mvsiz),
182 . kxx(mvsiz), kyy(mvsiz), kxy(mvsiz),
183 . px2(mvsiz),py2(mvsiz), px3(mvsiz), py3(mvsiz),
184 . off(mvsiz), sigy(mvsiz),thk0(mvsiz),
185 . nu(mvsiz) , shf(mvsiz), dt1c(mvsiz),
186 . g(mvsiz) , ym(mvsiz) , a11(mvsiz) , a12(mvsiz),
187 . vol0(mvsiz),thk02(mvsiz),zcfac(mvsiz,2), gs(mvsiz),
188 . vol00(mvsiz),alpe(mvsiz),a_hammer(3,2),
189 . r11(mvsiz),r12(mvsiz),r13(mvsiz),r21(mvsiz),r22(mvsiz),
190 . r23(mvsiz),r31(mvsiz),r32(mvsiz),r33(mvsiz),aldt(mvsiz),
191 . vlx(mvsiz,2),vly(mvsiz,2),vlz(mvsiz,2),rlx(mvsiz,3),rly(mvsiz,3),
192 . px(mvsiz,3),py(mvsiz,3),pxy(mvsiz,3), pyy(mvsiz,3),
193 . bz1(mvsiz,2),bz2(mvsiz,2),bz3(mvsiz,2), brx1(mvsiz,3),
194 . brx2(mvsiz,3),brx3(mvsiz,3),bry1(mvsiz,3),bry2(mvsiz,3),
195 . bry3(mvsiz,3),amu(mvsiz),cdet(mvsiz),vdef(mvsiz,8),die(mvsiz),
196 . tempel(mvsiz),krz(mvsiz),
197 . conde(mvsiz),a11r(mvsiz)
199 .
DIMENSION(1),
TARGET :: bid
204 . x2l(mvsiz),y2l(mvsiz),x3l(mvsiz),y3l(mvsiz)
205 my_real ,
DIMENSION(NEL) :: zoffset
207 :
ALLOCATABLE,
DIMENSION(:),
TARGET :: dira,dirb
209 .
DIMENSION(:) ,
POINTER :: dir_a,dir_b,crkdir,dadv
211 my_real,
dimension(mvsiz) :: fheat
212 my_real,
dimension(mvsiz) :: ssp_eq
215 INTEGER :: NDDL, INOD(3),NC1(MVSIZ), NC2(MVSIZ), NC3(MVSIZ), L_NLOC, IPOS(3),INLOC
216 my_real,
DIMENSION(:,:),
ALLOCATABLE :: VAR_REG
217 ,
DIMENSION(:),
POINTER :: DNL,UNL
224 TYPE(g_bufel_) ,
POINTER :: GBUF
226 TYPE(L_BUFEL_DIR_) ,
POINTER :: LBUF_DIR
229 1 0.166666666666667,0.666666666666667,0.166666666666667,
230 2 0.166666666666667,0.166666666666667,0.666666666666667/
232 gbuf => elbuf_str%GBUF
233 idrape = elbuf_str%IDRAPE
238 igtyp = igeo(11,ixtg(5,1))
240 actifxfem = iparg(70)
253 nlay = elbuf_str%NLAY
258 npttot = npttot + elbuf_str%BUFLY(ilay)%NPTT
260 IF (npt == 0) npttot = npt
262 ALLOCATE(var_reg(nel,nddl))
266 ifailwave = iparg(79)
267 IF (ifailwave > 0)
THEN
269 offly(:) = elbuf_str%BUFLY(1)%OFF(:)
272 offly(j) =
max(offly(j), elbuf_str%BUFLY(i)%OFF(j))
277 . nel ,ixtg ,itab ,ngl ,offly )
281 l_dira = elbuf_str%BUFLY(1)%LY_DIRA
282 l_dirb = elbuf_str%BUFLY(1)%LY_DIRB
283 IF(idrape > 0 .AND. (igtyp == 51 .OR. igtyp == 5
THEN
284 ALLOCATE(dira(npttot*nel*l_dira))
285 ALLOCATE(dirb(npttot*nel*l_dirb))
286 IF (l_dira == 0)
THEN
288 ELSEIF (irep == 0)
THEN
291 nptt = elbuf_str%BUFLY(ilay)%NPTT
294 lbuf_dir => elbuf_str%BUFLY(ilay)%LBUF_DIR(it)
295 j1 = 1+(j-1)*l_dira*nel
297 dira(j1:j2) = lbuf_dir%DIRA
299 npttot = npttot + nptt
302 sdir_a=npttot*nel*l_dira
303 sdir_b=npttot*nel*l_dirb
304 dir_a => dira(1:npttot
305 dir_b => dirb(1:npttot*nel*l_dirb)
307 sdir_a=nlay*nel*l_dira
308 sdir_b=nlay*nel*l_dirb
309 ALLOCATE(dira(nlay*nel*l_dira))
310 ALLOCATE(dirb(nlay*nel*l_dirb))
313 IF (l_dira == 0)
THEN
315 ELSEIF (irep == 0)
THEN
317 j1 = 1+(j-1)*l_dira*nel
319 dira(j1:j2) = elbuf_str%BUFLY(j)%DIRA(1:nel*l_dira)
322 sdir_a=nlay*nel*l_dira
323 sdir_b=nlay*nel*l_dirb
324 dir_a => dira(1:nlay*nel*l_dira)
325 dir_b => dirb(1:nlay*nel*l_dirb)
329 igtyp = igeo(11,ixtg(5,1))
330 igmat = igeo(98 ,ixtg(5,1))
340 . jft,jlt,mat,pid,ngl,x,v,r,ixtg,gbuf%OFF,
341 . off,r11,r12,r13,r21,r22,r23,r31,r32,r33,
342 . x2l,y2l,x3l,y3l,gbuf%SMSTR,
343 .
area,area2,cdet,vlx,vly,vlz,rlx,rly,
344 . ismstr,irep,nlay,dir_a,dir_b,
345 . f11,f12,f13,f21,f22,f23,f32,f33,
346 . m11,m12,m13,m21,m22,m23,nel)
347 CALL cncoef3(jft ,jlt ,pm ,mat ,geo ,
348 2 pid ,off ,
area ,shf ,thk0 ,
350 4 a11 ,a12 ,gbuf%THK,thke ,ssp ,
352 6 npttot ,dt1c ,dt1 ,ihbe ,amu ,
353 7 krz ,igeo ,a11r ,isubstack, stack%PM,
355 CALL cdkderic3(jft ,jlt, x2l,y2l,x3l,y3l,area2,alpe,aldt,
356 1 px2,py2,px3,py3,px,py,pxy,pyy,vol0,vol00,
359 CALL cdkdefo3(jft,jlt,vlx,vly,px2,py2,px3,py3,exx,eyy,exy,
360 1 exz, eyz,dt1,epsdot,nft,istrain,gbuf%STRA,vdef,nel)
364 lenf = nel*gbuf%G_FORPG/npg
365 lenm = nel*gbuf%G_MOMPG/npg
366 lens = nel*gbuf%G_STRPG/npg
368 epsd_glob(1:nel) = zero
377 CALL cdkderi3(jft ,jlt,px2,py2,px3,py3,px,py,pxy,pyy,
378 1 bz1,bz2,bz3,brx1,brx2,brx3,bry1,bry2,bry3,
379 2 a_hammer(ng,1),a_hammer(ng,2))
380 CALL cdkcurv3(jft,jlt,bz1,bz2,bz3,brx1,brx2,brx3,bry1,
381 1 bry2,bry3,vlz,rlx,rly,kxx, kyy, kxy)
382 CALL cdkstra3(jft,jlt,gbuf%STRA,exx,eyy,exy,kxx, kyy, kxy,
383 1 epsdot,nft,istrain,dt1,gbuf%STRPG(pts),nel)
388 l_nloc = nloc_dmg%L_NLOC
389 dnl => nloc_dmg%DNL(1:l_nloc)
390 unl => nloc_dmg%UNL(1:l_nloc)
393 var_reg(1:nel,1:nddl) = zero
400#include "vectorize.inc"
402 inod(1) = nloc_dmg%IDXI(nc1(i))
403 inod(2) = nloc_dmg%IDXI(nc2(i))
404 inod(3) = nloc_dmg%IDXI(nc3(i))
405 ipos(1) = nloc_dmg%POSI(inod(1))
406 ipos(2) = nloc_dmg%POSI(inod(2))
407 ipos(3) = nloc_dmg%POSI(inod(3))
408 var_reg(i,k) = (one-eta-ksi)*dnl(ipos(1)+k-1) +
409 . eta*dnl(ipos(2)+k-1) +
410 . ksi*dnl(ipos(3)+k-1)
415! global element strain rate(shell energy equivalent) - by gauss points
422 dtinv = dt1 /
max(dt1**2,em20)
423#include "vectorize.inc"
425 eps_k2 = (kxx(i)**2+kyy(i)**2+kxx(i)*kyy(i)+fourth*kxy(i)**2)
426 . * one_over_9*gbuf%thk(i)**2
427 eps_m2 = four_over_3*(exx(i)**2+eyy(i)**2+exx(i)*eyy(i) + fourth*exy(i)**2)
428 epsd_pg(i) = sqrt(eps_k2 + eps_m2)*dtinv
429 epsd_glob(i) = epsd_glob(i) + epsd_pg(i) / npg
433 1 elbuf_str ,jft ,jlt ,nft ,iparg ,
434 2 nel ,mtn ,ipla ,ithk ,group_param,
435 3 pm ,geo ,npf ,tf ,bufmat ,
436 4 ssp ,rho ,viscmx ,dt1c ,sigy ,
437 5 cdet ,exx ,eyy ,exy ,exz ,
438 6 eyz ,kxx ,kyy ,kxy ,nu ,
439 7 off ,thk0 ,mat ,pid ,mat_elem ,
440 8 gbuf%FORPG(ptf),gbuf%MOMPG(ptm) ,gbuf%STRPG(pts),failwave,fwave_el,
441 9 gbuf%THK ,gbuf%EINT ,iofc ,
442 a g ,a11 ,a12 ,vol0 ,indx ,
443 b ngl ,zcfac ,shf ,gs
445 d dir_a ,dir_b ,igeo ,
446 e ipm ,ifailure ,npg ,fheat ,
447 f tempel ,die ,ibid ,ibid ,bid ,
449 h bid ,bid ,bid ,bid ,bid ,
450 i bid ,bid ,bid ,r11 ,r12 ,
451 j r13 ,r21 ,r22 ,r23 ,r31 ,
452 k r32 ,r33 ,ng ,table ,ibid ,
453 l bid ,sensors ,ibid ,ibid ,
454 m bid ,bid ,aldt ,glob_therm%IDT_THERM ,glob_therm%THEACCFACT,
455 n ismstr ,ir ,is ,nlay ,npt ,
456 o ibid ,ibid ,isubstack ,stack ,
457 p bid ,itask ,drape_sh3n ,var_reg ,nloc_dmg,
458 r indx_drape ,thke ,sedrape ,numel_drape ,dt ,
459 q ncycle ,snpc , stf ,
460 s nxlaymax ,idel7nok ,userl_avail ,maxfunc ,npttot,
461 t sbufmat ,sdir_a ,sdir_b, gbuf%FORPG_G(ptf),ssp_eq,
462 x ipart ,lipart1 ,iparttg )
468 gbuf%THK(i) = gbuf%THK(i) - two_third*(gbuf%THK(i)-thk0(i))
469 thk0(i) = gbuf%THK(i)
476 CALL cbavisc(jft ,jlt ,vdef ,amu ,off ,
477 2 shf ,nu ,rho ,ssp ,cdet,
478 3 thk0 ,gbuf%FORPG(ptf),gbuf%MOMPG(ptm),iun ,mtn ,
479 4 iparttg ,pmsav ,dt1 ,nel )
486 3 brx1,brx2,brx3,bry1,bry2,bry3,
487 4 f11,f12,f13,f21,f22,f23,f32,f33,
488 5 m11,m12,m13,m21,m22,m23,
495 1 nloc_dmg, var_reg, thk0, nel,
496 2 gbuf%OFF,
area, nc1, nc2,
497 3 nc3, px2, py2, px3,
498 4 py3, ksi, eta, elbuf_str%NLOC(ir,is),
499 5 ixtg(1,jft), nddl, itask,
500 6 dt2t, gbuf%THK_I, gbuf%AREA, nft)
510 asrate = one ! to be changed
for default
value
511 gbuf%epsd(1:nel) = asrate * epsd_glob(1:nel) + (one - asrate) * gbuf%epsd(1:nel)
512!-------------------------------------------------------------------------------
523 gbuf%FOR(kk(j)+i) = third*(gbuf%FORPG(pt1+kk(j)+i)
524 . + gbuf%FORPG(pt2+kk(j)+i)
525 . + gbuf%FORPG(pt3+kk(j)+i))
532 gbuf%MOM(kk(j)+i) = third*(gbuf%MOMPG(pt1+kk(j)+i)
533 . + gbuf%MOMPG(pt2+kk(j)+i)
534 . + gbuf%MOMPG(pt3+kk(j)+i))
540 CALL cdkfcum3(jft,jlt,px2,py2,px3,py3,
541 1 r11,r12,r13,r21,r22,r23,r31,r32,r33,
542 2 f11,f12,f13,f21,f22,f23,f31,f32,f33,
543 3 m11,m12,m13,m21,m22,m23,m31,m32,m33)
549 1 jft ,jlt ,off ,dt2t ,amu ,
550 2 neltst ,ityptst,sti ,stir ,gbuf%OFF,
551 3 ssp ,viscmx ,rho ,vol00 ,thk0 ,thk02,
552 4 a11 ,aldt ,alpe ,ngl , ismstr,
553 5 iofc ,nnod ,
area ,g ,shf ,
554 6 mstg ,dmeltg ,jsms ,ptg ,igtyp ,
555 7 igmat ,a11r ,gbuf%G_DT, gbuf%DT,mtn ,
556 8 pm ,mat(jft),nel ,zoffset ,ssp_eq )
561 IF (jthe /= 0 .AND. glob_therm%IDT_THERM == 1)
THEN
562 call dttherm(nel ,pm(1,imat),npropm,glob_therm,mat_elem%mat_param(imat),
563 . jtur ,tempel ,vol0 ,rho ,
564 . aldt ,off ,conde ,gbuf%re ,gbuf%rk )
569 CALL dtcdk_reg(nloc_dmg,thk0 ,nel ,gbuf%OFF,
570 . aldt ,ixtg(1,jft),nddl ,dt2t )
580 2 gbuf%THK, gbuf%EINT, pmsav, iparttg,
581 3 rho, vol00, ixtg, x,
582 4 r, thk02,
area, gresav,
583 5 grth, igrth, off, ibid,
584 6 ibid, ibid, ibid, ibid,
585 7 ibid, gbuf%EINTTH,itask, mat,
586 8 gbuf%VOL, actifxfem, igre, sensors,
587 9 nel, gbuf%G_WPLA,gbuf%WPLA)
589 IF (iparit == 0)
THEN
590 CALL c3updt3(jft ,jlt ,f ,m ,nvc ,
591 2 gbuf%OFF ,off ,sti ,stir ,stifn ,
592 3 stifr ,ixtg ,glob_therm%NODADT_THERM,
593 4 f11 ,f12 ,f13 ,f21 ,f22 ,f23 ,
594 5 f31 ,f32 ,f33 ,m11 ,m12 ,
595 7 m13 ,m21 ,m22 ,m23 ,m31 ,
596 8 m32 ,m33 ,ibid ,bid ,bid ,
597 9 gbuf%EINT,pm ,
area ,gbuf%THK,
598 a pmsav ,mat ,iparttg ,condn ,conde )
600 CALL c3updt3p(jft ,jlt ,gbuf%OFF ,off ,sti ,
601 2 stir ,fsky ,fsky,iadtg ,f11,
602 4 f12 ,f13 ,f21 ,f22 ,f23 ,
603 5 f31 ,f32 ,f33 ,m11 ,m12 ,
604 7 m13 ,m21 ,m22 ,m23 ,m31 ,
605 8 m32 ,m33 ,ibid,bid ,bid,
606 8 gbuf%EINT,pm ,
area ,gbuf%THK,
607 b pmsav ,mat ,iparttg,condnsky,
608 c conde,glob_therm%NODADT_THERM)
613 IF (ifailwave > 0)
THEN
614 crkdir => elbuf_str%BUFLY(1)%CRKDIR
617 . nel ,ixtg ,itab ,crkdir ,dir_a ,
618 . l_dira ,x2l ,x3l ,y2l ,y3l )
621 IF (
ALLOCATED(dirb))
DEALLOCATE(dirb)
622 IF (
ALLOCATED(dira))
DEALLOCATE(dira)
623 IF (
ALLOCATED(var_reg))
DEALLOCATE(var_reg)
subroutine cmain3(timers, elbuf_str, jft, jlt, nft, iparg, nel, mtn, ipla, ithk, group_param, pm, geo, npf, tf, bufmat, ssp, rho, viscmx, dt1c, sigy, area, exx, eyy, exy, exz, eyz, kxx, kyy, kxy, nu, off, thk0, mat, pid, mat_elem, for, mom, gstr, failwave, fwave_el, thk, eint, iofc, g, a11, a12, vol0, indxdel, ngl, zcfac, shf, gs, epsd_pg, kfts, jhbe, alpe, dir_a, dir_b, igeo, ipm, ifailure, npg, fheat, tempel, die, jthe, iexpan, tempel0, ishplyxfem, ply_exx, ply_eyy, ply_exy, ply_exz, ply_eyz, ply_f, del_ply, th_iply, sig_iply, e1x, e1y, e1z, e2x, e2y, e2z, e3x, e3y, e3z, ng, table, ixfem, offi, sensors, a11_iply, elcrkini, dir1_crk, dir2_crk, aldt, idt_therm, theaccfact, ismstr, ir, is, nlay, npt, ixlay, ixel, isubstack, stack, f_def, itask, drape, varnl, nloc_dmg, indx_drape, thke, sedrape, numel_drape, dt, ncycle, snpc, stf, nxlaymax, idel7nok, userl_avail, maxfunc, varnl_npttot, sbufmat, sdir_a, sdir_b, for_g, ssp_eq, ipart, lipart1, ipartc)