33 1 NEL ,NUPARAM ,NUVAR ,MFUNC ,KFUNC ,
34 2 NPF ,TF ,TIME ,TIMESTEP ,UPARAM ,
35 3 EPSPXX ,EPSPYY ,EPSPZZ ,EPSPXY ,EPSPYZ ,EPSPZX ,
36 4 DEPSXX ,DEPSYY ,DEPSZZ ,DEPSXY ,DEPSYZ ,DEPSZX ,
37 5 SIGOXX ,SIGOYY ,SIGOZZ ,SIGOXY ,SIGOYZ ,SIGOZX ,
38 6 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
39 7 SOUNDSP ,PLA ,UVAR ,RHO0 ,OFF ,
40 8 ET ,YLD ,SEQ ,EPSP ,ASRATE ,
41 9 NVARTMP ,VARTMP ,DPLA )
45#include "implicit_f.inc"
49 INTEGER ,NUPARAM,NUVAR,NVARTMP
51 . TIME,TIMESTEP,UPARAM(NUPARAM),
53 . EPSPXX(),EPSPYY(NEL),EPSPZZ(NEL),
54 . EPSPXY(NEL),EPSPYZ(NEL),EPSPZX(NEL),
55 . DEPSXX(NEL),DEPSYY(NEL),DEPSZZ(NEL),
56 . DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
57 . SIGOXX(NEL),SIGOYY(NEL),SIGOZZ(NEL),
58 . sigoxy(nel),sigoyz(nel),sigozx(nel),
59 . seq(nel),epsp(nel),asrate
61 INTEGER,
INTENT(INOUT) :: VARTMP(NEL,NVARTMP)
66 . SIGNXX(NEL),SIGNYY(NEL),SIGNZZ(NEL),
67 . SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL),
68 . SOUNDSP(NEL),ET(NEL),DPLA(NEL)
73 . uvar(nel,nuvar),off(nel),yld(nel)
77 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
83 INTEGER ,II,J,NITER,ITER,NINDX,INDEX(NEL),
84 . J1,J2,ITAB,JJ(NEL),VP,IDEV,ISRATE,
85 . IAD1(NEL),IPOS1(NEL),ILEN1(NEL),
86 . iad2(nel),ipos2(nel),ilen2(nel)
88 . d11,d12,d13,d22,d23,d33,g12,g23,g13,e11,e22,e33,
89 . ff,gg,hh,ll,mm,nn,sigy,qr1,qr2,cr1,cr2,fac,
90 . normxx,normyy,normxy,normzz,normzx,normyz,
91 . dlam,ddep,sig_dfdsig,dfdsig2,dpdt
93 . sighl(nel),h(nel),y1(nel),y2(nel),
94 . dpxx(nel),dpyy(nel),dpzz(nel),dpxy(nel),
95 . dpzx(nel),dpyz(nel),dpla_dlam(nel),phi(nel),
96 . dydx1(nel),dydx2(nel),dphi_dlam(nel)
98 .
DIMENSION(:),
ALLOCATABLE :: rate, yfac
131 vp = nint(uparam(30))
136 ALLOCATE(rate(mfunc),yfac(mfunc))
138 rate(i) = uparam(30+i)
139 yfac(i) = uparam(30+mfunc+i)
144 IF ((vp == 2) .OR. (vp == 3))
THEN
148 . epspxx ,epspyy ,epspzz ,epspxy ,epspyz ,
155 IF (off(i) < one) off(i) = four_over_5*off(i)
156 IF (off(i) < em01) off(i) = zero
169 IF ((itab == 1).AND.(mfunc > 1))
THEN
171 IF (vp == 1) epsp(i) = uvar(i,1)
172 ! looking
for corresponding rate in
the tables
175 IF (epsp(i) >= rate(j)) jj(i) = j
186 . + qr2*(one - exp(-cr2*pla(i)))
187 h(i) = qr1*cr1*exp(-cr1*pla(i)) + qr2*cr2*exp(-cr2*pla(i))
194 ipos1(1:nel) = vartmp(1:nel,1)
195 iad1(1:nel) = npf(kfunc(1)) / 2 + 1
196 ilen1(1:nel) = npf(kfunc(1)+1) / 2 - iad1(1:nel) - ipos1(1:nel)
198 CALL vinter(tf,iad1,ipos1,ilen1,nel,pla,dydx1,y1)
200 vartmp(1:nel,1) = ipos1(1:nel)
202 yld(1:nel) = yfac(1)*y1(1:nel)
203 h(1:nel) = yfac(1)*dydx1(1:nel)
210 ipos1(i) = vartmp(i,j1)
211 iad1(i) = npf(kfunc(j1)) / 2 + 1
212 ilen1(i) = npf(kfunc(j1)+1) / 2 - iad1(i) - ipos1(i)
214 ipos2(i) = vartmp(i,j2)
215 iad2(i) = npf(kfunc(j2)) / 2 + 1
216 ilen2(i) = npf(kfunc(j2)+1) / 2 - iad2(i) - ipos2(i)
219 CALL vinter(tf,iad1,ipos1,ilen1,nel,pla,dydx1,y1)
220 CALL vinter(tf,iad2,ipos2,ilen2,nel,pla,dydx2,y2)
226 y1(i) = y1(i)*yfac(j1)
227 y2(i) = y2(i)*yfac(j2)
228 fac = (epsp(i) - rate(j1))/(rate(j2) - rate(j1))
229 yld(i) = y1(i) + fac*(y2(i)-y1(i))
230 yld(i) =
max(yld(i),em20)
232 dydx1(i) = dydx1(i)*yfac(j1)
233 dydx2(i) = dydx2(i)*yfac(j2)
234 h(i) = dydx1(i)+fac*(dydx2(i)-dydx1(i))
236 vartmp(i,j1) = ipos1(i)
237 vartmp(i,j2) = ipos2(i)
248 signxx(i) = sigoxx(i) + d11*depsxx(i) + d12*depsyy(i) + d13*depszz(i)
249 signyy(i) = sigoyy(i) + d12*depsxx(i) + d22*depsyy(i) + d23*depszz(i)
250 signzz(i) = sigozz(i) + d13*depsxx(i) + d23*depsyy(i) + d33*depszz(i)
251 signxy(i) = sigoxy(i) + g12*depsxy(i)
252 signyz(i) = sigoyz(i) + g23*depsyz(i)
253 signzx(i) = sigozx(i) + g13*depszx(i)
256 sighl(i) = ff*(signyy(i) - signzz(i))**2 + gg*(signzz(i) - signxx(i))**2 +
257 . hh*(signxx(i) - signyy(i))**2 + two*ll*signyz(i)**2 +
258 . two*mm*signzx(i)**2 + two*nn*signxy(i)**2
259 sighl(i) = sqrt(
max(zero,sighl(i)))
265 phi(1:nel) = sighl(1:nel) - yld(1:nel)
270 IF ((phi(i)>zero).AND.(off(i) == one))
THEN
285#include "vectorize.inc"
302 normxx = (gg*(signxx(i)-signzz(i)) + hh*(signxx(i)-signyy(i)))/(
max(sighl(i),em20))
303 normyy = (ff*(signyy(i)-signzz(i)) + hh*(signyy(i)-signxx(i)))/(
max(sighl(i),em20))
304 normzz = (ff*(signzz(i)-signyy(i)) + gg*(signzz(i)-signxx(i)))/(
max(sighl(i),em20))
305 normxy = two*nn*signxy(i)/(
max(sighl(i),em20))
306 normyz = two*ll*signyz(i)/(
max(sighl(i),em20))
307 normzx = two*mm*signzx(i)/(
max(sighl(i),em20))
315 . + normyy * (d12 * normxx + d22 * normyy + d23 * normzz
316 . + normzz * (d13 * normxx + d23 * normyy + d33 * normzz )
317 . + normxy * normxy * g12
318 . + normyz * normyz * g23
319 . + normzx * normzx * g13
330 sig_dfdsig = signxx(i) * normxx
331 . + signyy(i) * normyy
333 . + signxy(i) * normxy
334 . + signyz(i) * normyz
335 . + signzx(i) * normzx
336 dpla_dlam(i) = sig_dfdsig /
max(yld(i),em20)
342 dphi_dlam(i) = - dfdsig2 - h(i)*dpla_dlam(i)
343 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20) ,dphi_dlam(i))
346 dlam = -phi(i)/dphi_dlam(i)
349 dpxx(i) = dlam * normxx
350 dpyy(i) = dlam * normyy
351 dpzz(i) = dlam * normzz
352 dpxy(i) = dlam * normxy
353 dpyz(i) = dlam * normyz
354 dpzx(i) = dlam * normzx
357 signxx(i) = signxx(i) - (d11*dpxx(i) + d12*dpyy(i) + d13*dpzz(i))
358 signyy(i) = signyy(i) - (d12*dpxx(i) + d22*dpyy(i) + d23*dpzz(i))
359 signzz(i) = signzz(i) - (d13*dpxx(i) + d23*dpyy(i) + d33*dpzz(i))
360 signxy(i) = signxy(i) - dpxy(i)*g12
361 signyz(i) = signyz(i) - dpyz(i)*g23
362 signzx(i) = signzx(i) - dpzx(i)*g13
365 ddep = dlam*dpla_dlam(i)
366 dpla(i) =
max(zero, dpla(i) + ddep)
367 pla(i) = pla(i) + ddep
370 sighl(i) = ff*(signyy(i) - signzz(i))**2 + gg*(signzz(i) - signxx(i))**2 +
371 . hh*(signxx(i) - signyy(i))**2 + two*ll*signyz(i)**2 +
372 . two*mm*signzx(i)**2 + two*nn*signxy(i)**2
373 sighl(i) = sqrt(
max(sighl(i),zero))
379 . + qr1*(one - exp(-cr1*pla(i)))
380 . + qr2*(one - exp(-cr2*pla(i)))
381 h(i) = qr1*cr1*exp(-cr1*pla(i)) + qr2*cr2*exp(-cr2*pla(i))
384 phi(i) = sighl(i) - yld(i)
395 ipos1(1:nel) = vartmp(1:nel,1)
396 iad1(1:nel) = npf(kfunc(1)) / 2 + 1
397 ilen1(1:nel) = npf(kfunc(1)+1) / 2 - iad1(1:nel) - ipos1(1:nel)
399 CALL vinter(tf,iad1,ipos1,ilen1,nel,pla,dydx1,y1)
401 vartmp(1:nel,1) = ipos1(1:nel)
403 yld(1:nel) = yfac(1)*y1(1:nel)
404 h(1:nel) = yfac(1)*dydx1(1:nel)
406 phi(1:nel) = sighl(1:nel) - yld(1:nel)
413 ipos1(i) = vartmp(i,j1)
414 iad1(i) = npf(kfunc(j1)) / 2 + 1
415 ilen1(i) = npf(kfunc(j1)+1) / 2 - iad1(i) - ipos1(i)
417 ipos2(i) = vartmp(i,j2)
418 iad2(i) = npf(kfunc(j2)) / 2 + 1
419 ilen2(i) = npf(kfunc(j2)+1) / 2 - iad2(i) - ipos2(i)
422 CALL vinter(tf,iad1,ipos1,ilen1,nel,pla,dydx1,y1)
423 CALL vinter(tf,iad2,ipos2,ilen2,nel,pla,dydx2,y2)
429 y1(i) = y1(i)*yfac(j1)
430 y2(i) = y2(i)*yfac(j2)
431 fac = (epsp(i) - rate(j1))/(rate(j2) - rate(j1))
432 yld(i) = y1(i) + fac*(y2(i)-y1(i))
433 yld(i) =
max(yld(i),em20)
435 dydx1(i) = dydx1(i)*yfac(j1)
436 dydx2(i) = dydx2(i)*yfac(j2)
439 vartmp(i,j1) = ipos1(i)
440 vartmp(i,j2) = ipos2(i)
442 phi(i) = sighl(i) - yld(i)
458 soundsp(i) = sqrt(
max(d11,d22,d33)/rho0(i))
460 IF (dpla(i)>zero)
THEN
461 et(i) = h(i) / (h(i) +
max(e11,e22,e33))
466 IF ((itab == 1).AND.(mfunc > 1).AND.(vp == 1))
THEN
467 dpdt = dpla(i)/
max(em20,timestep)
468 uvar(i,1) = asrate * dpdt + (one - asrate) * uvar(i,1)
472 IF (
ALLOCATED(rate))
DEALLOCATE(rate)
473 IF (
ALLOCATED(yfac))
DEALLOCATE(yfac)
subroutine sigeps93(nel, nuparam, nuvar, mfunc, kfunc, npf, tf, time, timestep, uparam, epspxx, epspyy, epspzz, epspxy, epspyz, epspzx, depsxx, depsyy, depszz, depsxy, depsyz, depszx, sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx, signxx, signyy, signzz, signxy, signyz, signzx, soundsp, pla, uvar, rho0, off, et, yld, seq, epsp, asrate, nvartmp, vartmp, dpla)