29 1 NEL ,NGL ,NUPARAM ,NUVAR ,
30 2 TIME ,TIMESTEP,UPARAM ,UVAR ,JTHE ,OFF ,
31 3 GS ,RHO ,PLA ,DPLA ,EPSD ,SOUNDSP ,
32 4 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
33 5 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
34 6 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,THKLY ,
35 7 THK ,SIGY ,ET ,TEMPEL ,DPLANL ,TEMP ,
40#include "implicit_f.inc"
44 !=======================================================================
47 INTEGER NEL,NUPARAM,NUVAR,JTHE,INLOC
48 INTEGER ,
DIMENSION(NEL),
INTENT(IN) :: NGL
51 my_real,
DIMENSION(NUPARAM),
INTENT(IN) ::
53 my_real,
DIMENSION(NEL),
INTENT(IN) ::
55 . depsxx,depsyy,depsxy,depsyz,depszx,
56 . sigoxx,sigoyy,sigoxy,sigoyz,sigozx,
59 my_real ,
DIMENSION(NEL),
INTENT(OUT) ::
61 . signxx,signyy,signxy,signyz,signzx
63 my_real ,
DIMENSION(NEL),
INTENT(INOUT) ::
64 . pla,dpla,epsd,off,thk,temp,seq
65 my_real ,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) ::
71 INTEGER I,,II,NINDX,INDEX(NEL),NICE
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,a11,a12,
78 . h,ldav,trdfds,sigvm,sigdr2,yld2i,omega,
79 . dtemp,fcosh,fsinh,dpdt,dlam,ddep,depxx,depyy
81 . dpxx,dpyy,dpxy,dpzz,dsdrdj2,dsdrdj3,
82 . dj3dsxx,dj3dsyy,dj3dsxy,dj3dszz,
83 . dj2dsxx,dj2dsyy,dj2dsxy,
84 . dfdsxx,dfdsyy,dfdsxy,
85 . normxx,normyy,normxy,normzz,
86 . denom,dphi,dphi_dtrsig,sig_dfdsig
87 . dphi_dsig,dphi_dyld,dphi_dfdr,dpdt_nl,
88 . dyld_dpla,dyld_dtemp,dtemp_dlam,dlam_nl
90 my_real,
DIMENSION(NEL) ::
91 . dsigxx,dsigyy,dsigxy,trsig,trdep,
92 . sxx,syy,sxy,szz,sigm,j2,j3,sigdr,yld,weitemp,
93 . hardp,fhard,frate,ftherm,fdr,phi0,phi,dpla_dlam,
116 nice = nint(uparam(11))
136 afiltr = asrate*timestep/(asrate*timestep + one)
140 IF (off(i) < em01) off(i) = zero
141 IF (off(i) < one) off(i) = off(i)*four_over_5
151 IF (time == zero)
THEN
159 IF (epsd(i) < dpis)
THEN
161 ELSEIF (epsd(i) > dpad)
THEN
164 weitemp(i) = ((epsd(i)-dpis)**2 )
165 . * (three*dpad - two*epsd(i) - dpis)
171 temp(1:nel) = tempel(1:nel)
178 fhard(i) = yld0 + hard*pla(i) + qvoce*(one-exp(-bvoce*pla(i)))
181 IF (epsd(i) > epsp0) frate(i) = frate(i) + jcc*log(epsd(i)/epsp0)
184 IF (cp > zero) ftherm(i) = one - mtemp * (temp(i) - tref)
186 yld(i) = fhard(i)*frate(i)*ftherm(i)
188 yld(i) =
max(em10, yld(i))
197 signxx(i) = sigoxx(i) + a11*depsxx(i) + a12*depsyy(i)
198 signyy(i) = sigoyy(i) + a11*depsyy(i) + a12*depsxx(i)
199 signxy(i) = sigoxy(i) + depsxy(i)*g
200 signyz(i) = sigoyz(i) + depsyz(i)*gs(i)
201 signzx(i) = sigozx(i) + depszx(i)*gs(i)
203 trsig(i) = signxx(i) + signyy(i)
204 sigm(i) = -trsig(i) * third
206 sxx(i) = signxx(i) + sigm(i)
207 syy(i) = signyy(i) + sigm(i)
210 dezz(i) = -nnu*depsxx(i) - nnu*depsyy(i)
212 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) + sxy(i
214 j3(i) = sxx(i)*syy(i)*szz(i) - szz(i)*sxy(i)**2
216 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
218 IF (fdr(i) > zero)
THEN
219 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
228 phi(1:nel) = (sigdr(1:nel) / yld(1:nel))**2 - one
233 IF (phi(i) >= zero .AND. off(i) == one)
THEN
242#include "vectorize.inc"
249 dsigxx(i) = a11*depsxx(i) + a12*depsyy(i)
250 dsigyy(i) = a11*depsyy(i) + a12*depsxx(i)
251 dsigxy(i) = depsxy(i)*g
255 trsig(i) = sigoxx(i) + sigoyy(i)
256 sigm(i) = -trsig(i) * third
257 sxx(i) = sigoxx(i) + sigm(i)
258 syy(i) = sigoyy(i) + sigm(i)
261 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2) + sxy(i)**2
262 j3(i) = sxx(i)*syy(i)*szz(i) - szz(i)*sxy(i)**2
263 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
264 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
280 yld2i = one/(yld(i)**2)
281 dphi_dsig = two*sigdr(i)*yld2i
284 normsig = sqrt(sigoxx(i)*sigoxx(i)
285 . + sigoyy(i)*sigoyy(i)
286 . + two*sigoxy(i)*sigoxy(i))
287 normsig =
max(normsig,one)
290 fdr(i) = (j2(i)/(normsig**2))**3 - cdr*((j3(i)/(normsig**3))**2)
291 dphi_dfdr = dphi_dsig*kdr*(one/six)*exp(-(five/six)*log(fdr(i)))
292 dsdrdj2 = dphi_dfdr*three*(j2(i)/(normsig**2))**2
293 dsdrdj3 = -dphi_dfdr*two*cdr*(j3(i)/(normsig**3))
295 dj3dsxx = two_third*(syy(i)*szz(i))/(normsig**2)
296 . - third*(sxx(i)*szz(i))/(normsig**2)
297 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
298 dj3dsyy = - third*(syy(i)*szz(i))/(normsig**2)
299 . + two_third*(sxx(i)*szz(i))/(normsig**2)
300 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
301 dj3dszz = - third*(syy(i)*szz(i))/(normsig**2)
302 . - third*(sxx(i)*szz(i))/(normsig**2)
303 . + two_third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
304 dj3dsxy = two*(sxx(i)*sxy(i) + sxy(i)*syy(i))/(normsig**2)
306 normxx = dsdrdj2*sxx(i)/normsig + dsdrdj3*dj3dsxx
307 normyy = dsdrdj2*syy(i)/normsig + dsdrdj3*dj3dsyy
308 normzz = dsdrdj2*szz(i)/normsig + dsdrdj3*dj3dszz
309 normxy = two*dsdrdj2*sxy(i)/normsig + dsdrdj3*dj3dsxy
315 dphi = normxx * dsigxx(i)
316 . + normyy * dsigyy(i)
317 . + normxy * dsigxy(i)
324 dfdsig2 = normxx * (a11*normxx + a12*normyy)
325 . + normyy * (a11*normyy + a12*normxx)
326 . + normxy * normxy * g
333 hardp(i) = hard + qvoce*bvoce*exp(-bvoce*pla(i))
334 dyld_dpla = hardp(i)*frate(i
338 sig_dfdsig = sigoxx(i) * normxx
339 . + sigoyy(i) * normyy
340 . + sigoxy(i) * normxy
341 dpla_dlam(i) = sig_dfdsig / yld(i)
345 IF (jthe == 0 .AND. cp > zero .AND. inloc == 0)
THEN
348 dyld_dtemp = -fhard(i)*frate(i)*mtemp
351 dtemp_dlam = weitemp(i)*(eta/(rho(i)*cp))*sig_dfdsig
357 ! d) derivative with respect to
the yield stress
360 dphi_dyld = -two*sigdr2/(yld(i)**3)
363 denom = dfdsig2 - (dphi_dyld * dyld_dpla * dpla_dlam(i))
365 denom = denom - (dphi_dyld * dyld_dtemp * dtemp_dlam)
367 denom = sign(
max(abs(denom),em20) ,denom)
373 dlam = (dphi + phi(i)) / denom
374 dlam =
max(dlam, zero)
384 signyy(i) = sigoyy(i) + dsigyy(i) - (a11*dpyy + a12*dpxx)
385 signxy(i) = sigoxy(i) + dsigxy(i) - dpxy*g
386 trsig(i) = signxx(i) + signyy(i)
387 sigm(i) = -trsig(i) * third
388 sxx(i) = signxx(i) + sigm(i)
389 syy(i) = signyy(i) + sigm(i)
394 ddep = (dlam/yld(i))*sig_dfdsig
395 dpla(i) = dpla(i) + ddep
396 pla(i) = pla(i) + ddep
399 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) + sxy(i)**2
400 j3(i) = sxx(i) * syy(i) * szz(i) - szz(i) * sxy(i)**2
401 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
402 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
405 IF (jthe == 0 .AND. cp > zero .AND. inloc == 0)
THEN
406 dtemp = weitemp(i)*yld(i)*ddep*eta/(rho(i)*cp)
407 temp(i) = temp(i) + dtemp
408 ftherm(i) = one - mtemp* (temp(i) - tref)
412 fhard(i) = yld0 + hard * pla(i) + qvoce*(one-exp(-bvoce*pla(i)))
415 yld(i) = fhard(i) * frate(i) * ftherm(i)
416 yld(i) =
max(yld(i), em10)
420 yld2i = one / yld(i)**2
421 phi(i) = sigdr2 * yld2i - one
425 dezz(i) = dezz(i) + nnu*dpxx + nnu*dpyy + dpzz
435 IF (dpla(i) > zero)
THEN
437 et(i) = hardp(i)*frate(i) / (hardp(i)*frate(i) + young)
444 dpdt = dpla(i) /
max(em20,timestep)
445 epsd(i) = afiltr * dpdt + (one - afiltr) * epsd(i)
447 soundsp(i) = sqrt(a11/rho(i))
451 IF ((inloc > 0).AND.(off(i) == one).AND.(dplanl
THEN
452 yld2i = one/(yld(i)**2)
453 dphi_dsig = two*sigdr(i)*yld2i
454 normsig = sqrt(signxx(i)*signxx(i)
455 . + signyy(i)*signyy(i)
456 . + two*signxy(i)*signxy(i))
458 fdr(i) = (j2(i)/(normsig**2))**3 - cdr*((j3(i)/(normsig**3))**2)
459 IF (fdr(i) > zero)
THEN
460 dphi_dfdr = dphi_dsig*kdr*(one
464 dsdrdj2 = dphi_dfdr*three*(j2(i)/(normsig**2))**2
465 dsdrdj3 = -dphi_dfdr*two*cdr*(j3(i)/(normsig**3))
466 dj3dsxx = two_third*(syy(i)*szz(i))/(normsig**2)
467 . - third*(sxx(i)*szz(i))/(normsig**2)
468 . - third*(sxx(i)*syy
469 dj3dsyy = - third*(syy(i)*szz(i))/(normsig**2)
470 . + two_third*(sxx(i)*szz(i))/(normsig**2)
471 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
472 dj3dszz = - third*(syy(i)*szz(i))/(normsig
474 . + two_third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
476 normxx = dsdrdj2*sxx(i)/normsig + dsdrdj3*dj3dsxx
478 normzz = dsdrdj2*szz(i)/normsig + dsdrdj3*dj3dszz
479 normxy = two*dsdrdj2*sxy(i)/normsig + dsdrdj3*dj3dsxy
480 sig_dfdsig = signxx(i) * normxx
481 . + signyy(i) * normyy
482 . + signxy(i) * normxy
483 IF (sig_dfdsig > em01)
THEN
484 dlam_nl = (yld(i)*dplanl(i))/sig_dfdsig
485 dezz(i) = dezz(i) + nnu*(dlam_nl*normxx)
486 . + nnu*(dlam_nl*normyy)
489 IF (cp > zero .AND. jthe == 0)
THEN
491 dpdt_nl = dplanl(i)/
max(timestep,em20)
492 IF (dpdt_nl < dpis)
THEN
494 ELSEIF (dpdt_nl > dpad)
THEN
497 weitemp(i) = ((dpdt_nl-dpis)**2 )
498 . * (three*dpad - two*dpdt_nl - dpis)
501 dtemp = weitemp(i)*dplanl(i)*yld(i
502 temp(i) = temp(i) + dtemp
subroutine sigeps104c(nel, ngl, ipg, ilay, ipt, nuparam, nuvar, timestep, time, uparam, uvar, jthe, rho, tempel, pla, dpla, soundsp, offl, epsd, gs, depsxx, depsyy, depsxy, depsyz, depszx, thkly, off, sigoxx, sigoyy, sigoxy, sigoyz, sigozx, signxx, signyy, signxy, signyz, signzx, thk, sigy, et, varnl, dmg, l_dmg, temp, seq, inloc, nptr, npts, nptt, bufly, pla_nl, l_planl, plap_nl, l_epsdnl, ioff_duct)