33 1 NEL ,NUPARAM,NUVAR ,MFUNC ,KFUNC ,NPF ,
34 2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,RHO ,
35 3 VOLUME ,EINT ,IEOS ,DPDM ,
36 4 EPSPXX ,EPSPYY ,EPSPZZ ,EPSPXY ,EPSPYZ ,EPSPZX ,
37 5 DEPSXX ,DEPSYY ,DEPSZZ ,DEPSXY ,DEPSYZ ,DEPSZX ,
38 6 EPSXX ,EPSYY ,EPSZZ ,EPSXY ,EPSYZ ,EPSZX ,
39 7 SIGOXX ,SIGOYY ,SIGOZZ ,SIGOXY ,SIGOYZ ,SIGOZX ,
40 8 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
41 9 SIGVXX ,SIGVYY ,SIGVZZ ,SIGVXY ,SIGVYZ ,SIGVZX ,
42 A SOUNDSP,VISCMAX,UVAR ,OFF ,NGL ,IPT ,
43 B IPM ,MAT ,EPSP ,IPLA ,SIGY ,PLA ,
44 C DPLA1 ,AMU ,ISRATE ,ASRATE ,NVARTMP ,VARTMP ,
49#include "implicit_f.inc"
100 INTEGER ,
INTENT(IN) :: IEOS
101 INTEGER NEL, NUPARAM, NUVAR,IPT,NVARTMP,
102 . NGL(NEL),MAT(NEL),IPM(NPROPMI,*), IPLA,IEXPAN,
105 . TIME,TIMESTEP,UPARAM(NUPARAM),
106 . RHO(NEL),RHO0(NEL),VOLUME(NEL),EINT(NEL),
107 . EPSPXX(NEL),EPSPYY(NEL),EPSPZZ(NEL),
108 . EPSPXY(NEL),EPSPYZ(NEL),EPSPZX(NEL),
109 . DEPSXX(NEL),DEPSYY(NEL),DEPSZZ(NEL),
110 . DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
111 . EPSXX(NEL) ,EPSYY(NEL) ,EPSZZ(NEL) ,
112 . EPSXY(NEL) ,EPSYZ(NEL) ,EPSZX(NEL) ,
113 . sigoxx(nel),sigoyy(nel),sigozz(nel),
114 . sigoxy(nel),sigoyz(nel),sigozx(nel),
115 . epsp(nel),amu(nel), asrate
116 my_real,
DIMENSION(MVSIZ) ,
INTENT(IN) :: dpdm
121 . signxx(nel),signyy(nel),signzz(nel),
122 . signxy(nel),signyz(nel),signzx(nel),
123 . sigvxx(nel),sigvyy(nel),sigvzz(nel),
124 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
125 . soundsp(nel),viscmax(nel),sigy(nel),
126 . pla(nel),dpla1(mvsiz)
132 . uvar(nel,nuvar), off(nel)
133 my_real,
DIMENSION(NEL),
INTENT(INOUT) ::
138 INTEGER NPF(*),MFUNC,KFUNC(MFUNC)
144 INTEGER I,IADBUF,ICC,VFLAG,IPOS(MVSIZ),IAD(MVSIZ),ILEN(MVSIZ),IDEV
146 . e,nu,p,dav,vm,r,epst,e1,e2,e3,e4,e5,e6,c,cd,d,
147 . y,yp,e42,e52,e62,epst2,rq,bulk,
149 . epsr1,epsr2,yld(mvsiz),h(mvsiz),dfdpla(mvsiz),
150 . ca,cb,cn,cc,cp,dpla,yscale,dpdt
158 smax(1:nel) = uparam(4)
164 icc = nint(uparam(10))
172 vflag = nint(uparam(23))
178 IF ((vflag == 2) .OR. (vflag == 3))
THEN
180 . epspxx ,epspyy ,epspzz ,epspxy ,epspyz ,
187 p = -(sigoxx(i)+sigoyy(i)+sigozz(i))* third
188 dav = (depsxx(i)+depsyy(i)+depszz(i)) * third
189 signxx(i) = sigoxx(i)+p+g2*(depsxx(i)-dav)
190 signyy(i) = sigoyy(i)+p+g2*(depsyy(i)-dav)
191 signzz(i) = sigozz(i)+p+g2*(depszz(i)-dav)
192 signxy(i) = sigoxy(i)+g *depsxy(i)
193 signyz(i) = sigoyz(i)+g *depsyz(i)
194 signzx(i) = sigozx(i)+g *depszx(i)
204 dav = (epsxx(i)+epsyy(i)+epszz(i)) * third
220 c = - e1*e1 - e2*e2 - e3*e3 - e42 - e52 - e62
221 d = - e1*e2*e3 + e1*e52 + e2*e62 + e3*e42
226 y = (epst2 + c)* epst + d
230 y = (epst2 + c)* epst + d
232 IF(yp/=zero)epst = epst - y/yp
234 y = (epst2 + c)* epst + d
236 IF(yp/=zero)epst = epst - y/yp
238 y = (epst2 + c)* epst + d
240 IF(yp/=zero)epst = epst - y/yp
242 y = (epst2 + c)* epst + d
244 IF(yp/=zero)epst = epst - y/yp
250 fail(i) =
max(zero,
min(one,
251 . (epsr2-epst)/(epsr2-epsr1) ))
258 ipos(1:nel) = vartmp(1:nel,1)
259 iad(1:nel) = npf(kfunc(1)) / 2 + 1
260 ilen(1:nel) = npf(kfunc(1)+1) / 2 - iad(1:nel) - ipos(1:nel)
261 CALL vinter(tf,iad,ipos,ilen,nel,pla,dfdpla,yld)
262 vartmp(1:nel,1) = ipos(1:nel)
268 IF (cc /= zero) rq = one + (cc*epsp(i))**cp
269 IF (icc == 1) smax(i) = smax(i)*rq
270 IF (pla(i) > zero)
THEN
271 IF ((mfunc > 0) .AND. (ca == zero))
THEN
272 yld(i) = yscale * yld(i) * rq
273 h(i) = fail(i) * (yscale*dfdpla(i)*rq)
274 ELSEIF ((mfunc > 0) .AND. (ca > zero))
THEN
275 yld(i) = yscale * yld(i)
276 . + (ca + cb*pla(i)**cn) * (rq-one)
277 h(i) = fail(i) * (yscale*dfdpla(i) + cn*cb*(rq-one)/(pla(i)**(one-cn)))
279 yld(i) = (ca + cb*pla(i)**cn) * rq
280 h(i) = fail(i)*cn*cb*rq/(pla(i)**(one-cn))
282 yld(i) = fail(i) *
min(smax(i),yld(i))
284 IF ((mfunc > 0) .AND. (ca == zero))
THEN
285 yld(i) = fail(i) * yscale * yld(i) * rq
286 ELSEIF ((mfunc > 0) .AND. (ca > zero))
THEN
287 yld(i) = fail(i) * (yscale * yld(i) + ca * (rq-one))
289 yld(i) = fail(i) * ca * rq
293 IF (pla(i) >= epsgm)
THEN
294 yld(i) = fail(i) * smax(i)
298 IF (pla(i) >= epmax) yld(i) = zero
303 IF (cc /= zero) rq = one + (cc*epsp(i))**cp
304 IF (icc == 1) smax(i) = smax(i)*rq
305 IF (pla(i) > zero)
THEN
306 IF ((mfunc > 0) .AND. (ca == zero))
THEN
307 yld(i) = yscale * yld(i) * rq
308 h(i) = fail(i)*(yscale*dfdpla(i)*rq)
309 ELSEIF ((mfunc > 0) .AND. (ca > zero))
THEN
310 yld(i) = yscale * yld(i)
311 . + (ca + cb*pla(i)**cn) * (rq-one)
312 h(i) = fail(i)* (yscale*dfdpla(i) + cn*cb*(rq-one)/(pla(i)**(one-cn)))
314 yld(i) = (ca + cb*pla(i)**cn) * rq
315 h(i) = fail(i)*cn*cb*rq/(pla(i)**(one-cn))
317 yld(i) = fail(i) *
min(smax(i),yld(i))
319 IF ((mfunc > 0) .AND. (ca == zero))
THEN
320 yld(i) = fail(i) * yscale * yld(i) * rq
321 ELSEIF ((mfunc > 0) .AND. (ca > zero))
THEN
322 yld(i) = fail(i) * (yscale * yld(i) + ca * (rq-one))
324 yld(i) = fail(i) * ca * rq
328 IF (pla(i) >= epsgm)
THEN
329 yld(i) = fail(i) * smax(i)
333 IF (pla(i) >= epmax) yld(i)=zero
342 vm = half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)
343 1 +signxy(i)**2+signyz(i)**2+signzx(i)**2
345 r =
min(one,yld(i)/
max(vm,em20))
346 signxx(i) = signxx(i)*r
347 signyy(i) = signyy(i)*r
348 signzz(i) = signzz(i)*r
349 signxy(i) = signxy(i)*r
350 signyz(i) = signyz(i)*r
351 signzx(i) = signzx(i)*r
352 pla(i) = pla(i) + (one -r)*vm/
max(g3+h(i),em20)
353 dpla1(i) = (one -r)*vm/
max(g3+h(i),em20)
355 ELSEIF (ipla == 2)
THEN
357 vm = half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)
358 1 +signxy(i)**2+signyz(i)**2+signzx(i)**2
360 r =
min(one,yld(i)/
max(vm,em20))
361 signxx(i) = signxx(i)*r
362 signyy(i) = signyy(i)*r
363 signzz(i) = signzz(i)*r
364 signxy(i) = signxy(i)*r
365 signyz(i) = signyz(i)*r
366 signzx(i) = signzx(i)*r
367 pla(i) = pla(i) + (one -r)*vm/
max(g3,em20)
368 dpla1(i) = (one -r)*vm/
max(g3,em20)
370 ELSEIF (ipla == 1)
THEN
372 vm = half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)
373 1 +signxy(i)**2+signyz(i)**2+signzx(i)**2
377 dpla = (one - r)*vm/
max(g3+h(i),em20)
379 yld(i) = yld(i) + dpla*h(i)
380 IF (pla(i) >= epmax) yld(i)=zero
381 r =
min(one,yld(i)/
max(vm,em20))
382 signxx(i) = signxx(i)*r
383 signyy(i) = signyy(i)*r
384 signzz(i) = signzz(i)*r
385 signxy(i) = signxy(i)*r
386 signyz(i) = signyz(i)*r
387 signzx(i) = signzx(i)*r
388 pla(i) = pla(i) + dpla
398 signxx(i) = signxx(i) - p
399 signyy(i) = signyy(i) - p
400 signzz(i) = signzz(i) - p
401 signxy(i) = signxy(i)
403 signzx(i) = signzx(i)
404 soundsp(i) = sqrt((bulk + four*g/three)/rho0(i))
411 soundsp(i) = sqrt((dpdm(i) + four*g/three)/rho0(i))
417 dpdt = dpla1(i) /
max(em20,timestep)
418 epsp(i) = asrate * dpdt + (one - asrate) * epsp(i)
423 sigy(i) =
max(sigy(i),yld(i))
424 IF (dpla1(i) > zero)
THEN
subroutine sigeps44(nel, nuparam, nuvar, mfunc, kfunc, npf, tf, time, timestep, uparam, rho0, rho, volume, eint, ieos, dpdm, epspxx, epspyy, epspzz, epspxy, epspyz, epspzx, depsxx, depsyy, depszz, depsxy, depsyz, depszx, epsxx, epsyy, epszz, epsxy, epsyz, epszx, sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx, signxx, signyy, signzz, signxy, signyz, signzx, sigvxx, sigvyy, sigvzz, sigvxy, sigvyz, sigvzx, soundsp, viscmax, uvar, off, ngl, ipt, ipm, mat, epsp, ipla, sigy, pla, dpla1, amu, israte, asrate, nvartmp, vartmp, et)