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 my_real,
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) ::
73 INTEGER I,II,IGURSON,ITER,NITER,NINDX,INDEX(NEL)
76 . young,bulk,lam,g,g2,nu,cdr,kdr,hard,yld0,qvoce,bvoce,jcc,
77 . epsp0,mtemp,tini,tref,eta,cp,dpis,dpad,asrate,afiltr,hkhi,
78 . q1,q2,ed,an,epn,kw,fr,fc,f0,a11,a12,nnu
80 . dti,h,ldav,sigvm,omega,
81 . dtemp,fcosh,fsinh,dpdt,dlam,ddep
84 . dj3dsxx,dj3dsyy,dj3dsxy,dj3dszz,
85 . dj2dsxx,dj2dsyy,dj2dsxy,normsig,
86 . dfdsxx,dfdsyy,dfdsxy,
87 . sdpla,dphi_dtrsig,dfdsig2,sdv_dfdsig,
88 . dphi_dsig,dphi_dyld,dphi_dfdr,df_dfs,dfs_dft,dphi_dft,
89 . dphi_dfs,dfn_dlam,dfsh_dlam,dfg_dlam,dft_dlam,
90 . dfn,dfsh,dfg,dft,dyld_dpla,dyld_dtemp,dtemp_dlam
92 my_real,
DIMENSION(NEL) ::
93 . dsigxx,dsigyy,dsigxy,trsig,trdep,trdfds,
94 . sxx,syy,sxy,szz,sigm,j2,j3,sigdr,yld,weitemp,
95 . hardp,fhard,frate,ftherm,dtherm,fdr,phi0,triax,
96 . fdam,phi,ft,fs,fg,fn,fsh,dpla_dlam,dphi_dlam,dezz,etat,
97 . normxx,normyy,normxy,normzz,sig_dfdsig,
98 . dpxx,dpyy,dpxy,dpzz,sigdr2,yld2i,dlam_nl
141 afiltr = asrate*timestep/(asrate*timestep + one)
142 dti = one /
max(timestep, em20)
145 igurson = nint(uparam(30))
163 IF (off(i) < em03) off(i) = zero
164 IF (off(i) < one) off(i) = off(i)*four_over_5
168 fg(i) = dmg(i,2) ! growth damage
186 IF (time == zero)
THEN
195 dmg(1:nel,6) = fc + (one/q1-fc)*(f0-fc)/(fr-fc)
197 fs(1:nel) = dmg(1:nel,6)
204 IF (plap_nl(i) < dpis)
THEN
206 ELSEIF (plap_nl(i) > dpad)
THEN
209 weitemp(i) = ((plap_nl(i)-dpis)**2 )
210 . * (three*dpad - two*plap_nl(i) - dpis)
215 temp(1:nel) = tempel(1:nel)
225 trsig(i) = sigoxx(i) + sigoyy(i)
226 sigm(i) = -trsig(i) * third
227 sxx(i) = sigoxx(i) + sigm(i)
228 syy(i) = sigoyy(i) + sigm(i)
231 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) + sxy(i)**2
232 j3(i) = sxx(i) * syy(i) * szz(i) - szz(i) * sxy(i)**2
233 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
234 IF (fdr(i) > zero)
THEN
235 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
241 IF (sigdr(i)>zero)
THEN
242 triax(i) = (trsig(i)*third)/sigdr(i)
246 IF (trsig(i)<zero)
THEN
253 IF (yld(i)>zero)
THEN
254 yld2i(i) = one / yld(i)**2
255 dphi_dsig = two * sigdr(i) * yld2i(i)
256 fsinh = sinh(q2*etat(i)*trsig(i)/(yld(i)*two))
257 dphi_dtrsig = q1*q2*etat(i)*fs(i)*fsinh/yld(i)
266 normsig = sqrt(sigoxx(i)*sigoxx(i)
267 . + sigoyy(i)*sigoyy(i)
268 . + two*sigoxy(i)*sigoxy(i))
269 normsig =
max(normsig,one)
272 fdr(i) = (j2(i)/(normsig**2))**3 - cdr*((j3(i)/(normsig**3))**2)
273 IF (fdr(i) > zero)
THEN
274 dphi_dfdr = dphi_dsig*kdr*(one/six)*exp(-(five/six)*log(fdr(i)))
278 dsdrdj2 = dphi_dfdr*three*(j2(i)/(normsig**2))**2
279 dsdrdj3 = -dphi_dfdr*two*cdr*(j3(i)/(normsig**3))
281 dj3dsxx = two_third*(syy(i)*szz(i))/(normsig**2)
282 . - third*(sxx(i)*szz(i))/(normsig**2)
283 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
284 dj3dsyy = - third*(syy(i)*szz(i))/(normsig**2)
285 . + two_third*(sxx(i)*szz(i))/(normsig**2)
286 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
287 dj3dszz = - third*(syy(i)*szz(i))/(normsig**2)
288 . - third*(sxx(i)*szz(i))/(normsig**2)
289 . + two_third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
290 dj3dsxy = two*(sxx(i)*sxy(i) + sxy(i)*syy(i))/(normsig**2)
293 normxx(i) = dsdrdj2*sxx(i)/normsig
294 normyy(i) = dsdrdj2*syy(i)/normsig + dsdrdj3*dj3dsyy + dphi_dtrsig
295 normzz(i) = dsdrdj2*szz(i)/normsig + dsdrdj3*dj3dszz + dphi_dtrsig
296 normxy(i) = two*dsdrdj2*sxy(i)/normsig + dsdrdj3*dj3dsxy
297 trdfds(i) = normxx(i) + normyy(i) + normzz(i)
298 sig_dfdsig(i) = sigoxx(i)*normxx(i) + sigoyy(i)*normyy(i)
299 . + sigoxy(i)*normxy(i)
302 IF (sig_dfdsig(i)>zero)
THEN
303 dlam_nl(i) = ((one - ft(i))*yld(i)*dpla_nl(i))/
max(sig_dfdsig(i),em20)
309 IF ((trdfds(i)>zero).AND.(ft(i)>zero).AND.(ft(i)<fr))
THEN
310 fg(i) = fg(i) + (one-ft(i))*dlam_nl(i)*trdfds(i)
312 fg(i) =
max(fg(i),zero)
315 IF ((pla_nl(i) >= ed).AND.(ft(i)<fr))
THEN
317 IF (triax(i)>=zero)
THEN
320 ELSEIF ((triax(i)<zero).AND.(triax(i)>=-third))
THEN
321 fn(i) = fn(i) + an*
max(one + three*triax(i),zero)*dpla_nl(i)
324 fn(i) =
max(fn(i),zero)
327 IF ((sigdr(i) > zero).AND.(ft(i)>zero).AND.(ft(i)<fr))
THEN
328 sigvm = sqrt(
max(em20,three*(j2(i)/(normsig**2))))
329 omega = one - ((twenty7 *(j3(i)/(normsig**3)))/(two*(sigvm**3)))**2
330 omega =
max(omega,zero)
331 omega =
min(omega,one)
332 sdpla = (sxx(i)*normxx(i)+syy(i)*normyy(i)+ szz(i)*normzz(i)
333 . + sxy(i)*normxy(i))
335 fsh(i) = fsh(i) + kw*omega*ft(i)*(sdpla/sigdr(i))
337 fsh(i) =
max(fsh(i),zero)
340 ft(i) = f0 + fg(i) + fn(i) + fsh(i)
341 ft(i) =
min(ft(i), fr)
342 IF (ft(i) >= fr)
THEN
343 IF (off(i)==one) off(i) = four_over_5
350 fs(i) = fc + (one/q1 - fc) * (ft(i)-fc)/(fr-fc)
352 fs(i) =
min(fs(i),one/q1)
357 dtemp = weitemp(i)*(one-ft(i))*yld(i)*dpla_nl(i)*eta/(rho(i)*cp)
358 temp(i) = temp(i) + dtemp
366 fhard(i) = yld0 + hard*pla(i) + qvoce*(one-exp(-bvoce*pla(i)))
369 IF (epsd(i) > epsp0) frate(i) = frate(i) + jcc*log(epsd(i)/epsp0)
372 IF (cp > zero) ftherm(i) = one - mtemp*(temp(i) - tref)
374 yld(i) = fhard(i)*frate(i)*ftherm(i)
376 yld(i) =
max(em10, yld(i))
385 signxx(i) = sigoxx(i) + (a11*depsxx(i) + a12
386 signyy(i) = sigoyy(i) + (a11*depsyy(i) + a12*depsxx(i))
387 signxy(i) = sigoxy(i) + (depsxy(i)*g)
388 signyz(i) = sigoyz(i) + (depsyz(i)*gs(i))
389 signzx(i) = sigozx(i) + (depszx(i)*gs(i))
391 trsig(i) = signxx(i) + signyy(i)
392 sigm(i) = -trsig(i) * third
394 sxx(i) = signxx(i) + sigm(i)
395 syy(i) = signyy(i) + sigm(i)
398 !
second deviatoric invariant
399 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) + sxy(i)**2
401 j3(i) = sxx(i)*syy(i)*szz(i) - szz(i)*sxy(i)**2
403 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
405 IF (fdr(i) > zero)
THEN
406 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
411 IF (sigdr(i)>zero)
THEN
412 triax(i) = (trsig(i)*third)/sigdr(i)
416 IF (trsig(i)<zero)
THEN
423 IF (off(i) == one)
THEN
424 dezz(i) = -nnu*depsxx(i)-nnu*depsyy(i)
425 IF (sig_dfdsig(i) > em01)
THEN
426 dezz(i) = dezz(i) + nnu*(dlam_nl(i)*normxx(i))
427 . + nnu*(dlam_nl(i)*normyy(i))
428 . + dlam_nl(i)*normzz(i)
437 fdam(i) = two*q1*fs(i)*cosh(q2*etat(i)*trsig(i)/yld(i)/two) - (q1*fs(i))**2
438 phi(i) = (sigdr(i) / yld(i))**2 - one + fdam(i)
444 IF ((phi(i) >= zero).AND.(off(i) == one).AND.(ft(i)<fr))
THEN
458#include "vectorize.inc"
465 sigdr2(i) = sigdr(i)**2
466 yld2i(i) = one / yld(i)**2
475#include "vectorize.inc"
490 !-------------------------------------------------------------
493 yld2i(i) = one/(yld(i)**2)
494 dphi_dsig = two*sigdr(i)*yld2i(i)
495 fsinh = sinh(q2*etat(i)*trsig(i)/(yld(i)*two))
496 dphi_dtrsig = q1*q2*etat(i)*fs(i)*fsinh/yld(i)
499 normsig = sqrt(signxx(i)*signxx(i)
500 . + signyy(i)*signyy(i)
501 . + two*signxy(i)*signxy(i))
502 normsig =
max(normsig,one)
505 fdr(i) = (j2(i)/(normsig**2))**3 - cdr*((j3(i)/(normsig**3))**2)
506 dphi_dfdr = dphi_dsig*kdr*(one/six)*exp(-(five/six)*log(fdr(i)))
507 dsdrdj2 = dphi_dfdr*three*(j2(i)/(normsig**2))**2
508 dsdrdj3 = -dphi_dfdr*two*cdr*(j3(i)/(normsig**3))
510 dj3dsxx = two_third*(syy(i)*szz(i))/(normsig**2)
511 . - third*(sxx(i)*szz(i))/(normsig**2)
512 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
513 dj3dsyy = - third*(syy(i)*szz(i))/(normsig**2)
514 . + two_third*(sxx(i)*szz(i))/(normsig**2)
515 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
516 dj3dszz = - third*(syy(i)*szz(i))/(normsig**2)
517 . - third*(sxx(i)*szz(i))/(normsig**2)
518 . + two_third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
519 dj3dsxy = two*(sxx(i)*sxy(i) + sxy(i)*syy(i))/(normsig**2)
521 normxx(i) = dsdrdj2*sxx(i)/normsig + dsdrdj3*dj3dsxx + dphi_dtrsig
522 normyy(i) = dsdrdj2*syy(i)/normsig + dsdrdj3*dj3dsyy + dphi_dtrsig
524 normxy(i) = two*dsdrdj2*sxy(i)/normsig + dsdrdj3*dj3dsxy
531 trdfds(i) = normxx(i) + normyy(i) + normzz(i)
532 dfdsig2 = normxx(i) * (a11*normxx(i) + a12*normyy(i))
533 . + normyy(i) * (a11*normyy(i) + a12*normxx(i))
534 . + normxy(i) * normxy(i) * g
540 ! ----------------------------------------------------------------------------
541 hardp(i) = hard + qvoce*bvoce*exp(-bvoce*pla(i))
542 dyld_dpla = hardp(i)*frate(i)*ftherm(i)
546 sig_dfdsig(i) = signxx(i) * normxx(i)
547 . + signyy(i) * normyy(i)
548 . + signxy(i) * normxy(i)
549 dpla_dlam(i) = sig_dfdsig(i) / ((one - ft(i))*yld(i))
553 sigdr2(i) = sigdr(i)**2
554 dphi_dyld = -two*sigdr2(i)/yld(i)**3-dphi_dtrsig*trsig(i)/yld(i)
557 dphi_dlam(i) = - dfdsig2 + (dphi_dyld*dyld_dpla*dpla_dlam(i))
558 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20) ,dphi_dlam(i))
561 dlam = -phi(i)/dphi_dlam(i)
564 dpxx(i) = dlam * normxx(i)
565 dpyy(i) = dlam * normyy(i)
566 dpzz(i) = dlam * normzz(i)
567 dpxy(i) = dlam * normxy(i)
568 trdep(i) = dpxx(i) + dpyy(i) + dpzz(i)
571 signxx(i) = signxx(i) - (a11*dpxx(i) + a12*dpyy(i))
572 signyy(i) = signyy(i) - (a11*dpyy(i) + a12*dpxx(i))
573 signxy(i) = signxy(i) - dpxy(i)*g
574 trsig(i) = signxx(i) + signyy(i)
575 sigm(i) = -trsig(i) * third
576 sxx(i) = signxx(i) + sigm(i)
577 syy(i) = signyy(i) + sigm(i)
582 ddep = (dlam/((one - ft(i))*yld(i)))*sig_dfdsig(i)
583 dpla(i) =
max(zero, dpla(i) + ddep)
584 pla(i) = pla(i) + ddep
587 j2(i) = half*(sxx(i)**2 + syy(i)**2 +
588 j3(i) = sxx(i) * syy(i) * szz(i) - szz(i) * sxy(i)**2
589 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
590 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
592 triax(i) = (trsig(i)*third)/sigdr(i)
593 IF (trsig(i)<zero)
THEN
600 fhard(i) = yld0 + hard * pla(i) + qvoce*(one-exp(-bvoce*pla(i)))
603 yld(i) = fhard(i) * frate(i) * ftherm(i)
604 yld(i) =
max(yld(i), em10)
607 sigdr2(i) = sigdr(i)**2
608 yld2i(i) = one / yld(i)**2
609 fcosh = cosh(q2*etat(i)*trsig(i)/(yld(i)*two))
610 fdam(i) = two*q1*fs(i)*fcosh - (q1*fs(i))**2
611 phi(i) = sigdr2(i) * yld2i(i) - one + fdam(i)
629 dmg(i,5) =
min(ft(i),fr)
630 dmg(i,6) =
min(fs(i),one/q1)
633 IF (ft(i) >= fr)
THEN
644 epsd(i) = afiltr * dpdt + (one - afiltr) * epsd(i)
646 IF (dpla(i) > zero)
THEN
647 et(i) = hardp(i)*frate(i) / (hardp(i)*frate(i) + young)
652 soundsp(i) = sqrt((a11)/rho(i))
656 thk(i) = thk(i) + dezz(i)*thkly(i)*off(i)