37 1 NEL ,NUPARAM ,NUVAR ,NFUNC ,IFUNC ,
38 2 NPF ,TABLE ,TF ,TIME ,UPARAM ,
39 3 NGL ,ALDT ,DPLA ,EPSP ,UVAR ,
40 4 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
41 5 TEMP ,FOFF ,DFMAX ,TDELE ,IPT ,
42 6 IPG ,DMG_FLAG ,DMG_SCALE,NTABLF ,ITABLF )
49#include "implicit_f.inc"
56#include "tabsiz_c.inc"
60 INTEGER,
INTENT(IN) ::
61 . NEL,NUPARAM,NUVAR,NTABLF,NGL(NEL),IPT,IPG
62 INTEGER,
DIMENSION(NTABLF) ,
INTENT(IN) :: ITABLF
63 INTEGER,
INTENT(INOUT) ::
65 my_real,
INTENT(IN) ::
66 . time,uparam(nuparam),aldt(nel),
67 . dpla(nel),epsp(nel),temp(nel),
68 . signxx(nel),signyy(nel),signxy(nel),
69 . signyz(nel),signzx(nel)
70 my_real,
INTENT(INOUT) ::
71 . uvar(nel,nuvar),dfmax(nel),tdele(nel),
73 TYPE (TTABLE),
INTENT(IN),
DIMENSION(NTABLE) :: TABLE
77 INTEGER,
INTENT(IN) :: NPF(SNPC),NFUNC,IFUNC(NFUNC)
78 my_real,
INTENT(IN) :: TF(STF)
85 INTEGER I,J,INDX(NEL),NINDX,,
86 . ITAB_INST,ITAB_SIZE,IREG,
87 . ipos(nel,3),ndim,ipos2(nel),
88 . iad(nel),ilen(nel),log_scale1,
91 . fcrit ,dn,dcrit,
ecrit,exp_ref,expo,el_ref,
92 . sr_ref1,fscale_el,shrf,biaxf ,sr_ref2,
93 . fscale_sr,cjc,fscale_dlim,temp_ref, fscale_temp
95 . lambda,fac,df,inst(nel) ,dc(nel) ,l0(nel) ,
96 . triax(nel) ,xi(nel) ,epsf(nel) ,epsl(nel) ,
97 . depsf(nel) ,depsl(nel) ,xvec(nel,3) ,dpl_def ,
98 . cos3theta ,p ,svm ,sizefac(nel),
99 . ratefac(nel),dsize(nel) ,softexp(nel),dlim(nel) ,
100 . tempfac(nel),tempfac2(nel),dft(nel) ,var(nel)
112 ireg = nint(uparam(9))
119 fscale_sr = uparam(16)
121 fscale_dlim = uparam(18)
122 temp_ref = uparam(19)
123 fscale_temp = uparam(20)
124 log_scale1 = nint(uparam(21))
125 log_scale2 = nint(uparam(22))
127 itab_epsf = itablf(1)
128 itab_inst = itablf(2)
129 itab_size = itablf(3)
137 IF ((itab_inst > 0).OR.(
ecrit > zero))
THEN
141 IF (uvar(i,2) == zero) uvar(i,2) = one
152 p = third*(signxx(i) + signyy(i))
154 svm = signxx(i)**2 + signyy(i)**2 - signxx(i)*signyy(i) +
156 svm = sqrt(
max(svm,zero))
157 triax(i) = p/
max(em20,svm)
158 IF (triax(i) < -two_third) triax(i) = -two_third
159 IF (triax(i) > two_third) triax(i) = two_third
162 cos3theta = -half*twenty7*triax(i)*(triax(i)**2 - third)
163 IF (cos3theta < -one ) cos3theta = -one
164 IF (cos3theta > one ) cos3theta = one
165 xi(i) = one - two*acos(cos3theta)/pi
173 IF (uvar(1,3) == zero) uvar(1:nel,3) = aldt(1:nel)
174 l0(1:nel) = uvar(1:nel,3)
177 IF (ifunc(1) > 0)
THEN
179 lambda = l0(i)/exp_ref
180 softexp(i) = finter(ifunc(1),lambda,npf,tf,df)
181 softexp(i) = expo*softexp(i)
184 softexp(1:nel) = expo
188 IF (ifunc(4) > 0)
THEN
189 var(1:nel) = temp(1:nel)/temp_ref
191 iad(1:nel) = npf(ifunc(4)) / 2 + 1
192 ilen(1:nel) = npf(ifunc(4)+1) / 2 - iad(1:nel) - ipos2(1:nel)
193 CALL vinter2(tf,iad,ipos2,ilen,nel,var,dft,tempfac)
194 tempfac(1:nel) = fscale_temp*tempfac(1:nel)
195 tempfac2(1:nel) = tempfac(1:nel)
198 tempfac2(1:nel) = one
202 IF (itab_size > 0)
THEN
204 ndim = table(itab_size)%NDIM
209 xvec(1:nel,1) = l0(1:nel)/el_ref
210 xvec(1:nel,2:3) = zero
214 xvec(1:nel,1) = l0(1:nel)/el_ref
215 IF (log_scale1 > 0)
THEN
217 xvec(i,2) = log(
max(epsp(i),em20)/sr_ref1)
220 xvec(1:nel,2) = epsp(1:nel)/sr_ref1
225 ELSEIF (ireg == 2)
THEN
229 xvec(1:nel,1) = l0(1:nel)/el_ref
230 xvec(1:nel,2:3) = zero
234 xvec(1:nel,1) = l0(1:nel)/el_ref
235 xvec(1:nel,2) = triax(1:nel)
240 xvec(1:nel,1) = l0(1:nel)/el_ref
241 xvec(1:nel,2) = triax(1:nel)
242 xvec(1:nel,3) = xi(1:nel)
246 CALL table_vinterp(table(itab_size),nel,nel,ipos,xvec,sizefac,dsize)
247 sizefac(1:nel) = sizefac(1:nel)*fscale_el
250 IF (triax(i) < shrf)
THEN
252 ELSEIF (triax(i) > biaxf)
THEN
262 IF (ifunc(2) > 0)
THEN
263 IF (log_scale2 > 0)
THEN
265 var(i) = log(
max(epsp(i),em20)/sr_ref2)
268 var(1:nel) = epsp(1:nel)/sr_ref2
271 iad(1:nel) = npf(ifunc(2)) / 2 + 1
272 ilen(1:nel) = npf(ifunc(2)+1) / 2 - iad(1:nel) - ipos2(1:nel)
273 CALL vinter2(tf,iad,ipos2,ilen,nel,var,dft,ratefac)
274 ratefac(1:nel) = fscale_sr*ratefac(1:nel)
275 ELSEIF (cjc > zero)
THEN
277 IF (epsp(i) > sr_ref2)
THEN
278 ratefac(i) = one + cjc*log(epsp(i)/sr_ref2)
288 IF (ifunc(3) > 0)
THEN
291 dlim(i) = finter(ifunc(3),lambda,npf,tf,df)
292 dlim(i) = fscale_dlim*dlim(i)
293 dlim(i) =
min(dlim(i),one)
294 dlim(i) =
max(dlim(i),zero)
303 IF (itab_epsf > 0)
THEN
305 ndim = table(itab_epsf)%NDIM
309 xvec(1:nel,1) = triax(1:nel)
310 xvec(1:nel,2:3) = zero
314 xvec(1:nel,1) = triax
315 xvec(1:nel,2) = xi(1:nel)
320 xvec(1:nel,1) = triax(1:nel)
321 xvec(1:nel,2) = xi(1:nel)
322 xvec(1:nel,3) = temp(1:nel)/temp_ref
326 CALL table_vinterp(table(itab_epsf),nel,nel,ipos,xvec,epsf,depsf)
327 epsf(1:nel) = epsf(1:nel)*fcrit
335 IF (itab_inst > 0)
THEN
337 ndim = table(itab_inst)%NDIM
341 xvec(1:nel,1) = triax(1:nel)
342 xvec(1:nel,2:3) = zero
346 xvec(1:nel,1) = triax(1:nel)
347 xvec(1:nel,2) = xi(1:nel)
352 xvec(1:nel,1) = triax(1:nel)
353 xvec(1:nel,2) = xi(1:nel)
354 xvec(1:nel,3) = temp(1:nel)/temp_ref
356 tempfac2(1:nel) = one
359 epsl(1:nel) = epsl(1:nel)*
ecrit
360 ELSEIF (
ecrit > zero)
THEN
375 IF (foff(i) /= 0 .AND. dpla
THEN
378 IF (dfmax(i) == zero) dfmax(i) = em20
379 IF (inst(i) == zero) inst(i) = em20
382 dpl_def = dpla(i)/
max(epsf(i)*ratefac(i)*sizefac(i)*tempfac(i),em20)
383 dfmax(i) = dfmax(i) + dpl_def*dn*(dfmax(i)**(one-(one/dn)))
384 dfmax(i) =
min(dfmax(i),dlim(i))
385 IF (dfmax(i) >= one)
THEN
393 IF ((itab_inst > 0).OR.(
ecrit > zero))
THEN
394 dpl_def = dpla(i)/
max(epsl(i)*ratefac(i)*sizefac(i)*tempfac2(i),em20)
395 inst(i) = inst(i) + dpl_def*dn*(inst(i)**(one-(one/dn)))
396 inst(i) =
min(inst(i),one)
397 IF ((inst(i) >= one).AND.(dc(i) == one))
THEN
409 IF ((itab_inst > 0).OR.(
ecrit > zero))
THEN
412 IF (dfmax(i) >= dc(i))
THEN
413 IF (dc(i) < one)
THEN
414 dmg_scale(i) = one - ((dfmax(i)-dc(i))/
max(one-dc(i),em20))**softexp(i)
422 IF (dfmax(i) >= dcrit)
THEN
423 IF (dcrit < one)
THEN
424 dmg_scale(i) = one - ((dfmax(i)-dcrit
441 WRITE(iout, 1000) ngl(i),ipg,ipt,time
442 WRITE(istdo,1000) ngl(i),ipg,ipt,time
443#include "lockoff.inc"
447 1000
FORMAT(1x,
'FOR SHELL ELEMENT NUMBER el#',i10,
448 .
' FAILURE (TAB2) AT GAUSS POINT ',i3,
' LAYER ',i3,
449 .
' AT TIME :',1pe12.4)
subroutine usermat_shell(timers, elbuf_str, mat_elem, jft, jlt, nel, pm, for, mom, gstr, thk, eint, off, dir_a, dir_b, mat, area, exx, eyy, exy, exz, eyz, kxx, kyy, kxy, geo, thk_ly, pid, tf, npf, mtn, dt1c, dm, bufmat, ssp, rho, viscmx, ipla, iofc, indx, ngl, thkly, matly, zcfac, ng, shf, gs, sigy, thk0, epsd_pg, posly, igeo, ipm, failwave, fwave_el, ifailure, aldt, tempel, die, r11, r12, r13, r21, r22, r23, r31, r32, r33, table, ixfem, elcrkini, dir1_crk, dir2_crk, iparg, jhbe, ismstr, jthe, tensx, ir, is, nlay, npt, ixlay, ixel, ithk, f_def, ishplyxfem, itask, pm_stack, isubstack, stack, alpe, ply_exx, ply_eyy, ply_exy, ply_exz, ply_eyz, ply_f, varnl, nloc_dmg, nlay_max, laynpt_max, dt)