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 ,DPLA_NL ,DMG ,
36 8 TEMP ,SEQ ,PLA_NL ,PLAP_NL )
40#include "implicit_f.inc"
48 INTEGER NEL,NUPARAM,NUVAR,JTHE
49 INTEGER ,
DIMENSION(NEL),
INTENT(IN) :: NGL
52 my_real,
DIMENSION(NUPARAM),
INTENT(IN) ::
54 ,
DIMENSION(NEL),
INTENT(IN) ::
56 . depsxx,depsyy,depsxy,depsyz,depszx,
57 . sigoxx,sigoyy,sigoxy,sigoyz,sigozx,
58 . gs,thkly,pla_nl,plap_nl,dpla_nl
60 my_real ,
DIMENSION(NEL),
INTENT(OUT) ::
62 . signxx,signyy,signxy,signyz,signzx
64 my_real ,
DIMENSION(NEL),
INTENT(INOUT) ::
65 . pla,dpla,epsd,off,thk,temp,seq
66 my_real ,
DIMENSION(NEL,6),
INTENT(INOUT) ::
68 my_real ,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) ::
74 INTEGER I,K,II,IGURSON,NINDX,INDEX(NEL),NICE
77 . young,bulk,lam,g,g2,nu,cdr,kdr,hard,yld0,qvoce,bvoce,jcc,
78 . epsp0,mtemp,tini,tref,eta,cp,dpis,dpad,asrate,afiltr,hkhi,
79 . q1,q2,ed,an,epn,kw,fr,fc,f0,a11,a12,nnu
81 . dti,h,ldav,sigvm,sigdr2,yld2i,omega,
82 . dtemp,fcosh,fsinh,dpdt,dlam,ddep
84 . dpxx,dpyy,dpxy,dpzz,dsdrdj2,dsdrdj3,
85 . dj3dsxx,dj3dsyy,dj3dsxy,dj3dszz,
86 . dj2dsxx,dj2dsyy,dj2dsxy,
87 . dfdsxx,dfdsyy,dfdsxy,
88 . denom,dphi,sdpla,sdv_dfdsig,dfdsig2,
89 . dphi_dsig,dphi_dyld,dphi_dfdr,dphi_dfs,dfs_dft,
90 . dfn_dlam,dfsh_dlam,dfg_dlam,dft_dlam,dfdpla,normsig,
91 . dfn,dfsh,dfg,dft,dyld_dpla,dyld_dtemp,dtemp_dlam
93 my_real,
DIMENSION(NEL) ::
94 . dsigxx,dsigyy,dsigxy,trsig,trdep,
95 . sxx,syy,sxy,szz,sigm,j2,j3,sigdr,yld,weitemp,trdfds,
97 . fdam,phi0,phi,ft,fs,fg,fn,fsh,dpla_dlam,dezz,dphi_dtrsig,
98 . normxx,normyy,normxy,normzz,sig_dfdsig,dlam_nl
101 ! drucker - voce - johnson-cook material law with gurson damage
124 kdr = uparam(13) ! drucker 1/k coefficient
130 ! strain-rate dependence parameters
142 afiltr = asrate*timestep/(asrate*timestep + one)
143 dti = one /
max(timestep, em20)
146 igurson = nint(uparam(30))
164 IF (off(i) < em03) off(i) = zero
165 IF (off(i) < one) off(i) = off(i)*four_over_5
178 hardp(i) = zero ! initialization of
188 IF (time == zero)
THEN
197 dmg(1:nel,6) = fc + (one/q1-fc)*(f0-fc)/(fr-fc)
199 fs(1:nel) = dmg(1:nel,6)
206 IF (plap_nl(i) < dpis)
THEN
208 ELSEIF (plap_nl(i) > dpad)
THEN
211 weitemp(i) = ((plap_nl(i)-dpis)**2 )
212 . * (three*dpad - two*plap_nl(i) - dpis)
217 temp(1:nel) = tempel(1:nel)
227 trsig(i) = sigoxx(i) + sigoyy(i)
228 sigm(i) = -trsig(i) * third
230 syy(i) = sigoyy(i) + sigm(i)
233 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2) + sxy(i)**2
234 j3(i) = sxx(i) * syy(i) * szz(i) - szz(i) * sxy(i)**2
235 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
236 IF (fdr(i) > zero)
THEN
237 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
241 sigdr_old(i) = sigdr(i)
244 IF (sigdr(i)>zero)
THEN
245 triax(i) = (trsig(i)*third)/sigdr(i)
249 IF (trsig(i)<zero)
THEN
256 IF (yld(i)>zero)
THEN
257 yld2i = one / yld(i)**2
258 dphi_dsig = two * sigdr(i) * yld2i
259 fsinh = sinh(q2*etat(i)*trsig(i)/(yld(i)*two))
260 dphi_dtrsig(i) = q1*q2*etat(i)*fs(i)*fsinh/yld(i)
265 dphi_dtrsig(i) = zero
269 normsig = sqrt(sigoxx(i)*sigoxx(i)
270 . + sigoyy(i)*sigoyy(i)
271 . + two*sigoxy(i)*sigoxy(i))
272 normsig =
max(normsig,one)
275 fdr(i) = (j2(i)/(normsig**2))**3 - cdr*((j3(i)/(normsig**3))**2)
276 IF (fdr(i) > zero)
THEN
277 dphi_dfdr = dphi_dsig*kdr*(one/six)*exp(-(five/six)*log(fdr(i)))
281 dsdrdj2 = dphi_dfdr*three*(j2(i)/(normsig**2))**2
282 dsdrdj3 = -dphi_dfdr*two*cdr*(j3(i)/(normsig**3))
284 dj3dsxx = two_third*(syy(i)*szz(i))/(normsig**2)
285 . - third*(sxx(i)*szz(i))/(normsig**2)
286 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
287 dj3dsyy = - third*(syy(i)*szz(i))/(normsig**2)
288 . + two_third*(sxx(i)*szz(i))/(normsig**2)
289 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
290 dj3dszz = - third*(syy(i)*szz(i))/(normsig**2)
291 . - third*(sxx(i)*szz(i))/(normsig**2)
292 . + two_third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
293 dj3dsxy = two*(sxx(i)*sxy(i) + sxy(i)*syy(i))/(normsig**2)
295 normxx(i) = dsdrdj2*sxx(i)/normsig + dsdrdj3*dj3dsxx + dphi_dtrsig(i)
296 normyy(i) = dsdrdj2*syy(i)/normsig + dsdrdj3*dj3dsyy + dphi_dtrsig(i)
297 normzz(i) = dsdrdj2*szz(i)/normsig + dsdrdj3*dj3dszz + dphi_dtrsig(i)
298 normxy(i) = two*dsdrdj2*sxy(i)/normsig + dsdrdj3*dj3dsxy
299 trdfds(i) = normxx(i) + normyy(i) + normzz(i)
300 sig_dfdsig(i) = sigoxx(i)*normxx(i) + sigoyy(i)*normyy(i)
301 . + sigoxy(i)*normxy(i)
304 IF (sig_dfdsig(i) > zero)
THEN
305 dlam_nl(i) = ((one - ft(i))*yld(i)*dpla_nl(i))/
max(sig_dfdsig(i),em20)
311 IF ((trdfds(i)>zero).AND.(ft(i)>zero).AND.(ft(i)<fr))
THEN
312 fg(i) = fg(i) + (one-ft(i))*dlam_nl
314 fg(i) =
max(fg(i),zero)
317 IF ((pla_nl(i) >= ed).AND.(ft(i)<fr))
THEN
319 IF (triax(i)>=zero)
THEN
320 fn(i) = fn(i) + an*dpla_nl(i)
322 ELSEIF ((triax(i)<zero).AND.(triax(i)>=-third))
THEN
323 fn(i) = fn(i) + an*
max(one + three*triax(i),zero)*dpla_nl(i)
326 fn(i) =
max(fn(i),zero)
329 IF ((sigdr(i) > zero).AND.(ft(i)>zero).AND.(ft(i)<fr))
THEN
330 sigvm = sqrt(
max(em20,three*(j2(i)/(normsig**2))))
331 omega = one - ((twenty7 *(j3(i)/(normsig**3)))/(two*(sigvm**3)))
332 omega =
max(omega,zero)
333 omega =
min(omega,one)
334 sdpla = (sxx(i)*normxx(i)+syy(i)*normyy
335 . + sxy(i)*normxy(i))*dlam_nl(i)
336 fsh(i) = fsh(i) + kw*omega*ft(i)*(sdpla/sigdr(i))
338 fsh(i) =
max(fsh(i),zero)
341 ft(i) = f0 + fg(i) + fn(i) + fsh(i)
342 ft(i) =
min(ft(i), fr)
343 IF (ft(i) >= fr)
THEN
344 IF (off(i)==one) off(i) = four_over_5
351 fs(i) = fc + (one/q1 - fc) * (ft(i)-fc)/(fr-fc)
353 fs(i) =
min(fs(i),one/q1)
358 dtemp = weitemp(i)*(one-ft(i))*yld(i)*dpla_nl(i)*eta/(rho(i)*cp)
359 temp(i) = temp(i) + dtemp
364 ! computation of
the initial yield stress
367 fhard(i) = yld0 + hard*pla(i) + qvoce*(one-exp(-bvoce*pla(i)))
370 IF (epsd(i) > epsp0) frate(i) = frate(i) + jcc*log(epsd(i)/epsp0)
373 IF (cp > zero) ftherm(i) = one - mtemp*(temp(i) - tref)
375 yld(i) = fhard(i)*frate
377 yld(i) =
max(em10, yld(i))
380 !========================================================================
386 signxx(i) = sigoxx(i) + (a11*depsxx(i) + a12*depsyy(i))
387 signyy(i) = sigoyy(i) + (a11*depsyy(i) + a12*depsxx(i))
388 signxy(i) = sigoxy(i) + (depsxy(i)*g)
389 signyz(i) = sigoyz(i) + (depsyz(i)*gs(i))
390 signzx(i) = sigozx(i) + (depszx(i)*gs(i))
392 trsig(i) = signxx(i) + signyy(i)
393 sigm(i) = -trsig(i) * third
395 sxx(i) = signxx(i) + sigm(i)
396 syy(i) = signyy(i) + sigm(i)
400 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2) + sxy(i)**2
402 j3(i) = sxx(i)*syy(i)*szz(i) - szz(i)*sxy(i)**2
404 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
406 IF (fdr(i) > zero)
THEN
407 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
412 IF (sigdr(i)>zero)
THEN
413 triax(i) = (trsig(i)*third)/sigdr(i)
417 IF (trsig(i)<zero)
THEN
424 IF (off(i) == one)
THEN
425 dezz(i) = -nnu*depsxx(i)-nnu*depsyy(i)
426 IF (sig_dfdsig(i) > em01)
THEN
427 dezz(i) = dezz(i) + nnu*(dlam_nl(i)*normxx(i))
428 . + nnu*(dlam_nl(i)*normyy(i))
429 . + dlam_nl(i)*normzz
438 fdam(i) = two*q1*fs(i)*cosh(q2*etat(i)*trsig(i)/yld(i)/two) - (q1*fs(i))**2
439 phi(i) = (sigdr(i) / yld(i))**2 - one + fdam(i)
445 IF ((phi(i) >= zero).AND.(off(i) == one).AND.(ft(i)<fr))
THEN
454#include "vectorize.inc"
461 dsigxx(i) = a11*depsxx(i) + a12*depsyy(i)
462 dsigyy(i) = a11*depsyy(i) + a12*depsxx(i)
463 dsigxy(i) = depsxy(i)*g
485 dphi = normxx(i) * dsigxx(i)
486 . + normyy(i) * dsigyy(i)
487 . + normxy(i) * dsigxy(i)
494 dfdsig2 = normxx(i) * (a11*normxx(i) + a12*normyy(i))
495 . + normyy(i) * (a11*normyy(i) + a12*normxx(i))
496 . + normxy(i) * normxy(i) * g
503 hardp(i) = hard + qvoce*bvoce*exp(-bvoce*pla(i))
504 dyld_dpla = hardp(i)*frate(i)*ftherm(i)
508 dpla_dlam(i) = sig_dfdsig(i) / ((one - ft(i))*yld(i))
512 sigdr2 = sigdr_old(i)**2
513 trsig(i) = sigoxx(i) + sigoyy(i)
514 dphi_dyld = -two*sigdr2/yld(i)**3-dphi_dtrsig(i)*trsig(i)/yld(i)
517 denom = dfdsig2 - (dphi_dyld * dyld_dpla * dpla_dlam
518 denom = sign(
max(abs(denom),em20) ,denom)
524 dlam = (dphi + phi(i)) / denom
528 dpxx = dlam * normxx(i)
529 dpyy = dlam * normyy(i)
530 dpzz = dlam * normzz(i)
531 dpxy = dlam * normxy(i)
532 trdep(i) = dpxx + dpyy + dpzz
535 signxx(i) = sigoxx(i) + dsigxx(i) - (a11*dpxx + a12*dpyy)
536 signyy(i) = sigoyy(i) + dsigyy(i) - (a11*dpyy + a12*dpxx)
537 signxy(i) = sigoxy(i) + dsigxy(i) - dpxy*g
538 trsig(i) = signxx(i) + signyy(i)
539 sigm(i) = -trsig(i) * third
541 syy(i) = signyy(i) + sigm(i)
546 ddep = (dlam/((one - ft(i))*yld(i)))*sig_dfdsig(i)
547 dpla(i) = dpla(i) + ddep
548 pla(i) = pla(i) + ddep
551 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2) + sxy(i)**2
552 j3(i) = sxx(i) * syy(i) * szz(i) - szz(i) * sxy(i)**2
553 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
554 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
556 triax(i) = (trsig(i)*third)/sigdr(i)
557 IF (trsig(i)<zero)
THEN
567 yld(i) = fhard(i) * frate(i) * ftherm(i)
568 yld(i) =
max(yld(i), em10)
572 yld2i = one / yld(i)**2
573 fcosh = cosh(q2*etat(i)*trsig(i)/(yld(i)*two))
574 fdam(i) = two*q1*fs(i)*fcosh - (q1*fs(i))**2
575 phi(i) = sigdr2 * yld2i - one + fdam(i)
585 IF (dpla(i) > zero)
THEN
587 et(i) = hardp(i)*frate(i) / (hardp(i)*frate(i) + young)
598 dmg(i,5) =
min(ft(i),fr)
599 dmg(i,6) =
min(fs(i),one/q1)
602 IF (ft(i) >= fr)
THEN
612 dpdt = dpla(i) /
max(em20,timestep)
613 epsd(i) = afiltr * dpdt + (one - afiltr) * epsd(i)
615 soundsp(i) = sqrt((a11)/rho(i))
619 thk(i) = thk(i) + dezz(i)*thkly(i)*off(i)