29 1 NEL ,NGL ,NUPARAM ,NUVAR ,VOLUME ,FHEAT ,
30 2 TIME ,TIMESTEP,UPARAM ,UVAR ,JTHE ,OFF ,
31 3 RHO0 ,RHO ,PLA ,DPLA ,EPSD ,SOUNDSP ,
32 4 DEPSXX ,DEPSYY ,DEPSZZ ,DEPSXY ,DEPSYZ ,DEPSZX ,
33 5 SIGOXX ,SIGOYY ,SIGOZZ ,SIGOXY ,SIGOYZ ,SIGOZX ,
34 6 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
35 7 SIGY ,ET ,TEMP ,SEQ ,INLOC ,DPLANL ,
40#include "implicit_f.inc"
48INTEGER ,
INTENT(IN) :: JLAG
49 INTEGER ,
DIMENSION(NEL),
INTENT(IN)
52 my_real,
DIMENSION(NUPARAM),
INTENT(IN) ::
54 ,
DIMENSION(NEL),
INTENT(IN)
55DIMENSION(NEL),
INTENT(INOUT) :: fheat
56 my_real ,
DIMENSION(NEL),
INTENT(IN) :: rho0,rho,dplanl,
57 . depsxx,depsyy,depszz,depsxy,depsyz,depszx,
58 . sigoxx,sigoyy,sigozz,sigoxy,sigoyz,sigozx
60 my_real ,
DIMENSION(NEL),
INTENT(OUT) ::
62 . signxx,signyy,signzz,signxy,signyz,signzx
64 my_real ,
DIMENSION(NEL),
INTENT(INOUT) ::
65 . pla,dpla,epsd,off,temp,seq
66 my_real ,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) ::
71 INTEGER I,II,ITER,NITER,NINDX,INDEX(NEL)
74 . young,bulk,lam,g,g2,nu,cdr,kdr,hard,yld0,qvoce,bvoce,jcc,
75 . epsp0,mtemp,tini,tref,eta,cp,dpis,dpad,asrate,afiltr
77 . h,ldav,trdep,sigvm,omega,
78 . dtemp,fcosh,fsinh,dpdt,dlam,ddep
81 . dj3dsxx,dj3dsyy,dj3dszz,dj3dsxy,dj3dsyz,dj3dszx,
82 . dj2dsxx,dj2dsyy,dj2dszz,dj2dsxy,dj2dsyz,dj2dszx,
84 . normxx,normyy,normzz,normxy,normyz,normzx,
85 . sdpla,dphi_dtrsig,sig_dfdsig,dfdsig2,
86 . dphi_dsig,dphi_dyld,dphi_dfdr,df_dfs,dfs_dft,dphi_dft,
87 . dphi_dfs,dfn_dlam,dfsh_dlam,dfg_dlam,dft_dlam,dpdt_nl,
88 . dfn,dfsh,dfg,dft,dyld_dpla,dyld_dtemp,dtemp_dlam,normsig
90 my_real,
DIMENSION(NEL) ::
91 . dsigxx,dsigyy,dsigzz,dsigxy,dsigyz,dsigzx,trsig,
92 . sxx,syy,szz,sxy,syz,szx,sigm,j2,j3,sigdr,yld,weitemp,
93 . hardp,fhard,frate,ftherm,dtherm
94 . phi,ft,fs,fg,fn,fsh,dpla_dlam,dphi_dlam,phi0,
95 . dpxx,dpyy,dpxy,dpyz,dpzx,dpzz,sigdr2,yld2i
131 afiltr = asrate*timestep/(asrate*timestep + one)
135 IF (off(i) < em01) off(i) = zero
136 IF (off(i) < one) off(i) = off(i)*four_over_5
144 IF (time == zero .and. jthe == 0)
THEN
147 IF (cp > zero .OR. jthe /= 0)
THEN
150 IF (epsd(i) < dpis)
THEN
152 ELSEIF (epsd(i) > dpad)
THEN
155 weitemp(i) = ((epsd(i)-dpis)**2 )
156 . * (three*dpad - two*epsd(i) - dpis)
166 fhard(i) = yld0 + hard*pla(i) + qvoce*(one-exp(-bvoce*pla(i)))
169 IF (epsd(i) > epsp0) frate(i) = frate(i) + jcc*log(epsd(i)/epsp0)
171 ftherm(i) = one - mtemp * (temp(i) - tref)
173 yld(i) = fhard(i)*frate(i)*ftherm(i)
175 yld(i) =
max(em10, yld(i
184 signxx(i) = sigoxx(i) + depsxx(i)*g2 + ldav
185 signyy(i) = sigoyy(i) + depsyy(i)*g2 + ldav
186 signzz(i) = sigozz(i) + depszz(i)*g2 + ldav
187 signxy(i) = sigoxy(i) + depsxy(i)*g
188 signyz(i) = sigoyz(i) + depsyz(i)*g
189 signzx(i) = sigozx(i) + depszx(i)*g
191 trsig(i) = signxx(i) + signyy(i) + signzz(i)
192 sigm(i) =-trsig(i) * third
194 sxx(i) = signxx(i) + sigm(i)
195 syy(i) = signyy(i) + sigm(i)
196 szz(i) = signzz(i) + sigm(i)
201 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
202 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
204 j3(i) = sxx(i) * syy(i) * szz(i)
205 . + sxy(i) * syz(i) * szx(i) * two
206 . - sxx(i) * syz(i)**2
207 . - syy(i) * szx(i)**2
208 . - szz(i) * sxy(i)**2
210 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
212 IF (fdr(i) > zero)
THEN
213 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
222 phi(1:nel) = (sigdr(1:nel) / yld(1:nel))**2 - one
226 IF ((phi(i) >= zero).AND.(off(i) == one))
THEN
240#include "vectorize.inc"
247 sigdr2(i) = sigdr(i)**2
248 yld2i(i) = one / yld(i)**2
259#include "vectorize.inc"
278 yld2i(i) = one/(yld(i)**2)
279 dphi_dsig = two*sigdr(i)*yld2i(i)
282 normsig = sqrt(signxx(i)*signxx(i)
283 . + signyy(i)*signyy(i)
284 . + signzz(i)*signzz(i)
285 . + two*signxy(i)*signxy(i)
286 . + two*signyz(i)*signyz(i)
287 . + two*signzx(i)*signzx(i))
288 normsig =
max(normsig,one)
291 fdr(i) = (j2(i)/(normsig**2))**3 - cdr*((j3(i)/(normsig**3))**2)
292 dphi_dfdr = dphi_dsig*kdr*(one/six)*exp(-(five/six)*log(fdr(i)))
293 dsdrdj2 = dphi_dfdr*three*(j2(i)/(normsig**2))**2
294 dsdrdj3 = -dphi_dfdr*two*cdr*(j3(i)/(normsig**3))
296 dj3dsxx = two_third*(syy(i)*szz(i)-syz(i)**2)/(normsig**2)
297 . - third*(sxx(i)*szz(i)-szx(i)**2)/(normsig**2)
298 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
299 dj3dsyy = - third*(syy(i)*szz(i)-syz(i)**2)/(normsig**2)
300 . + two_third*(sxx(i)*szz(i)-szx(i)**2)/(normsig**2)
301 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
302 dj3dszz = - third*(syy(i)*szz(i)-syz(i)**2)/(normsig**2)
303 . - third*(sxx(i)*szz(i)-szx(i)**2)/(normsig**2)
304 . + two_third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
305 dj3dsxy = two*(sxx(i)*sxy(i) + sxy(i)*syy(i) + szx(i)*syz(i))/(normsig**2)
306 dj3dsyz = two*(sxy(i)*szx(i) + syy(i)*syz(i) + syz(i)*szz(i))/(normsig**2)
307 dj3dszx = two*(sxx(i)*szx(i) + sxy(i)*syz(i) + szx(i)*szz(i))/(normsig**2)
309 normxx = dsdrdj2*sxx(i)/normsig + dsdrdj3*dj3dsxx
310 normyy = dsdrdj2*syy(i)/normsig + dsdrdj3*dj3dsyy
311 normzz = dsdrdj2*szz(i)/normsig + dsdrdj3*dj3dszz
312 normxy = two*dsdrdj2*sxy(i)/normsig + dsdrdj3*dj3dsxy
313 normyz = two*dsdrdj2*syz(i)/normsig + dsdrdj3*dj3dsyz
314 normzx = two*dsdrdj2*szx(i)/normsig + dsdrdj3*dj3dszx
321 dfdsig2 = normxx * normxx * g2
322 . + normyy * normyy * g2
323 . + normzz * normzz * g2
324 . + normxy * normxy * g
325 . + normyz * normyz * g
326 . + normzx * normzx * g
333 hardp(i) = hard + qvoce*bvoce*exp(-bvoce*pla(i))
338 sig_dfdsig = signxx(i) * normxx
339 . + signyy(i) * normyy
340 . + signzz(i) * normzz
341 . + signxy(i) * normxy
342 . + signyz(i) * normyz
343 . + signzx(i) * normzx
344 dpla_dlam(i) = sig_dfdsig / yld(i)
348 IF (jthe == 0 .AND. cp > zero .AND. inloc == 0)
THEN
351 dyld_dtemp = -fhard(i)*frate(i)*mtemp
354 dtemp_dlam = weitemp(i)*eta/(rho0(i)*cp)*sig_dfdsig
362 dphi_dyld = -two*sigdr2(i)/(yld(i)**3)
368 dphi_dlam(i) = - dfdsig2 + (dphi_dyld*dyld_dpla*dpla_dlam(i))
369 IF (jthe == 0 .AND. cp > zero .AND. inloc == 0)
THEN
370 dphi_dlam(i) = dphi_dlam(i) + dphi_dyld*dyld_dtemp*dtemp_dlam
372 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20) ,dphi_dlam(i))
375 dlam = -phi(i)/dphi_dlam(i)
378 dpxx(i) = dlam * normxx
379 dpyy(i) = dlam * normyy
380 dpzz(i) = dlam * normzz
381 dpxy(i) = dlam * normxy
382 dpyz(i) = dlam * normyz
383 dpzx(i) = dlam * normzx
386 signxx(i) = signxx(i) - dpxx(i)*g2
387 signyy(i) = signyy(i) - dpyy(i)*g2
388 signzz(i) = signzz(i) - dpzz(i)*g2
390 signyz(i) = signyz(i) - dpyz(i)*g
391 signzx(i) = signzx(i) - dpzx(i)*g
392 trsig(i) = signxx(i) + signyy(i) + signzz(i)
393 sigm(i) =-trsig(i) * third
394 sxx(i) = signxx(i) + sigm(i)
395 syy(i) = signyy(i) + sigm(i)
396 szz(i) = signzz(i) + sigm(i)
402 ddep = (dlam/yld(i))*sig_dfdsig
403 dpla(i) =
max(zero, dpla(i) + ddep)
404 pla(i) = pla(i) + ddep
407 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
408 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
409 j3(i) = sxx(i) * syy(i) * szz(i) + two * sxy(i) * syz(i) * szx(i)
410 . - sxx(i) * syz(i)**2 - syy(i) * szx(i)**2 - szz(i) * sxy
411 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
412 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
415 IF (jthe == 0 .AND. cp > zero .AND. inloc == 0)
THEN
416 dtemp = weitemp(i)*yld(i)*ddep*eta/(rho0(i)*cp)
417 temp(i) = temp(i) + dtemp
419 ftherm(i) = one - mtemp*(temp(i) - tref)
422 fhard(i) = yld0 + hard*pla(i) + qvoce*(one-exp(-bvoce*pla(i)))
425 yld(i) = fhard(i)*frate(i)*ftherm(i)
426 yld(i) =
max(yld(i), em10)
429 sigdr2(i) = sigdr(i)**2
430 yld2i(i) = one / yld(i)**2
431 phi(i) = sigdr2(i) * yld2i(i) - one
446 dpdt = dpla(i) /
max(em20,timestep)
447 epsd(i) = afiltr * dpdt + (one - afiltr) * epsd(i)
449 IF (dpla(i) > zero)
THEN
450 et(i) = hardp(i)*frate(i) / (hardp(i)*frate(i)
455 soundsp(i) = sqrt((bulk + four_over_3*g)/rho0(i))
459 IF (inloc > 0 .AND. off(i) == one)
THEN
462 dpdt_nl =
max(dplanl(i),zero)/
max(timestep,em20)
463 IF (dpdt_nl < dpis)
THEN
465 ELSEIF (dpdt_nl > dpad)
THEN
468 weitemp(i) = ((dpdt_nl-dpis)**2 )
469 . * (three*dpad - two*dpdt_nl - dpis)
472 dtemp = weitemp(i)*dplanl(i)*yld(i)*eta/(rho0(i)*cp)
473 temp(i) = temp(i) + dtemp
481 IF (jthe < 0 .AND. jlag /= 0)
THEN
483 fheat(i) = fheat(i) + eta*(one-ft(i))*weitemp(i)*yld(i)*dpla(i)*volume(i)
subroutine sigeps104(nel, ngl, nuparam, nuvar, npg, uelr, time, timestep, uparam, uvar, jthe, loff, rho0, rho, pla, dpla, epsd, soundsp, depsxx, depsyy, depszz, depsxy, depsyz, depszx, sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx, signxx, signyy, signzz, signxy, signyz, signzx, sigy, et, temp, varnl, off, ipg, dmg, l_dmg, pla_nl, l_planl, plap_nl, l_epsdnl, seq, inloc, jlag, fheat, volume)