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 ,DPLA_NL ,DMG ,TEMP ,SEQ ,
36 8 PLA_NL ,PLAP_NL ,JLAG )
40#include "implicit_f.inc"
48 INTEGER NEL,NUPARAM,NUVAR,JTHE
49 INTEGER ,
INTENT(IN) :: JLAG
50 INTEGER ,
DIMENSION(NEL),
INTENT(IN) :: NGL
53 my_real,
DIMENSION(NUPARAM),
INTENT(IN) ::
55 my_real,
DIMENSION(NEL),
INTENT(IN) :: VOLUME
56 my_real ,
DIMENSION(NEL),
INTENT(INOUT) :: fheat
57 my_real,
DIMENSION(NEL),
INTENT(IN) ::
59 . depsxx,depsyy,depszz,depsxy,depsyz,depszx,
60 . sigoxx,sigoyy,sigozz,sigoxy,sigoyz,sigozx,
61 . pla_nl,plap_nl,dpla_nl
63 my_real ,
DIMENSION(NEL),
INTENT(OUT) ::
65 . signxx,signyy,signzz,signxy,signyz,signzx
67 my_real ,
DIMENSION(NEL),
INTENT(INOUT) ::
68 . pla,dpla,epsd,off,temp,seq
69 my_real ,
DIMENSION(NEL,6),
INTENT(INOUT) ::
71 my_real ,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) ::
75 !=======================================================================
76 INTEGER I,II,IGURSON,ITER,NITER,NINDX,INDEX(NEL)
79 . young,bulk,lam,g,g2,nu,cdr,kdr,hard,yld0,qvoce,bvoce,jcc,
80 . epsp0,mtemp,tini,tref,eta,cp,dpis,dpad,asrate,afiltr,hkhi,
81 . q1,q2,ed,an,epn,kw,fr,fc,f0
83 . dti,h,ldav,trdep,sigvm,omega,
84 . dtemp,fcosh,fsinh,dpdt,dlam,ddep
87 . dj3dsxx,dj3dsyy,dj3dszz,dj3dsxy,dj3dsyz,dj3dszx,
88 . dj2dsxx,dj2dsyy,dj2dszz,dj2dsxy,dj2dsyz,dj2dszx,
89 . dfdsxx,dfdsyy,dfdszz,dfdsxy,dfdsyz,dfdszx,
90 . normsig,sdpla,dphi_dtrsig,dfdsig2,sdv_dfdsig,
91 . dphi_dsig,dphi_dyld,dphi_dfdr,df_dfs,dfs_dft,dphi_dft,
92 . dphi_dfs,dfn_dlam,dfsh_dlam,dfg_dlam,dft_dlam,
93 . dfn,dfsh,dfg,dft,dyld_dpla,dyld_dtemp,dtemp_dlam
95 my_real,
DIMENSION(NEL) ::
96 . dsigxx,dsigyy,dsigzz,dsigxy,dsigyz,dsigzx,trsig,
97 . sxx,syy,szz,sxy,syz,szx,sigm,j2,j3,sigdr,yld,weitemp,
98 . hardp,fhard,frate,ftherm,dtherm,fdr,phi0,trdfds,triax,
99 . fdam,phi,ft,fs,fg,fn,fsh,dpla_dlam,dphi_dlam,etat,
100 . normxx,normyy,normxy,normzz,normyz,normzx,sig_dfdsig,
101 . dpxx,dpyy,dpxy,dpyz,dpzx,dpzz,sigdr2,yld2i,dlam_nl
141 afiltr = asrate*timestep/(asrate*timestep + one)
142 dti = one /
max(timestep, em20)
144 igurson = nint(uparam(30))
162 IF (off(i) < em03) off(i) = zero
163 IF (off(i) < one) off(i) = off(i)*four_over_5
179 ! initialization of damage, temperature and self-heating weight factor
180 IF (time == zero)
THEN
181 IF (jthe == 0) temp(1:nel) = tini
189 dmg(1:nel,6) = fc + (one/q1-fc)*(f0-fc)/(fr-fc)
191 fs(1:nel) = dmg(1:nel,6)
194 IF ((jthe == 0 .AND. cp > zero) .OR. jthe /= 0)
THEN
197 IF (plap_nl(i) < dpis)
THEN
199 ELSEIF (plap_nl(i) > dpad)
THEN
202 weitemp(i) = ((plap_nl(i)-dpis)**2 )
203 . * (three*dpad - two*plap_nl(i) - dpis)
211 !========================================================================
215 trsig(i) = sigoxx(i) + sigoyy(i) + sigozz(i)
216 sigm(i) =-trsig(i) * third
217 sxx(i) = sigoxx(i) + sigm(i)
218 syy(i) = sigoyy(i) + sigm(i)
219 szz(i) = sigozz(i) + sigm(i)
223 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
224 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
225 j3(i) = sxx(i) * syy(i) * szz(i)
226 . + sxy(i) * syz(i) * szx(i) * two
227 . - sxx(i) * syz(i)**2
228 . - syy(i) * szx(i)**2
229 . - szz(i) * sxy(i)**2
230 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
231 IF (fdr(i) > zero)
THEN
232 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
238 IF (sigdr(i)>zero)
THEN
239 triax(i) = (trsig(i)*third)/sigdr(i)
250 IF (yld(i)>zero)
THEN
251 yld2i(i) = one / yld(i)**2
252 dphi_dsig = two * sigdr(i) * yld2i(i)
253 fsinh = sinh(q2*etat(i)*trsig(i)/(yld
254 dphi_dtrsig = q1*q2*etat(i)*fs(i)*fsinh/yld(i)
263 normsig = sqrt(sigoxx(i)*sigoxx(i)
264 . + sigoyy(i)*sigoyy(i)
265 . + sigozz(i)*sigozz(i)
266 . + two*sigoxy(i)*sigoxy(i)
267 . + two*sigoyz(i)*sigoyz(i)
268 . + two*sigozx(i)*sigozx(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)-syz(i)**2)/(normsig**2)
282 . - third*(sxx(i)*szz(i)-szx(i)**2)/(normsig**2)
283 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
284 dj3dsyy = - third*(syy(i)*szz(i)-syz(i)**2)/(normsig**2)
285 . + two_third*(sxx(i)*szz(i)-szx(i)**2)/(normsig**2)
286 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
287 dj3dszz = - third*(syy(i)*szz(i)-syz(i)**2)/(normsig**2)
288 . - third*(sxx(i)*szz(i)-szx(i)**2)/(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) + szx(i)*syz(i))/(normsig**2)
291 dj3dsyz = two*(sxy(i)*szx(i) + syy(i)*syz(i
292 dj3dszx = two*(sxx(i)*szx(i) + sxy(i)*syz(i) + szx(i)*szz
294 normxx(i) = dsdrdj2*sxx(i)/normsig + dsdrdj3*dj3dsxx + dphi_dtrsig
295 normyy(i) = dsdrdj2*syy(i)/normsig + dsdrdj3*dj3dsyy + dphi_dtrsig
296 normzz(i) = dsdrdj2*szz(i)/normsig + dsdrdj3*dj3dszz + dphi_dtrsig
297 normxy(i) = two*dsdrdj2*sxy(i)/normsig + dsdrdj3
298 normyz(i) = two*dsdrdj2*syz(i)/normsig + dsdrdj3*dj3dsyz
299 normzx(i) = two*dsdrdj2*szx(i)/normsig + dsdrdj3*dj3dszx
300 trdfds(i) = normxx(i) + normyy(i) + normzz(i)
301 sig_dfdsig(i) = sigoxx(i)*normxx(i) + sigoyy(i)*normyy
302 . + sigoxy(i)*normxy(i) + sigoyz(i)*normyz(i) + sigozx(i)*normzx(i)
305 IF (sig_dfdsig(i)>zero)
THEN
306 dlam_nl(i) = ((one - ft(i))*yld(i)*dpla_nl(i))/sig_dfdsig
312 IF ((ft(i)>zero).AND.(ft(i)<fr).AND.(trdfds(i)>zero))
THEN
313 fg(i) = fg(i) + (one-ft(i))*dlam_nl(i)*trdfds(i)
315 fg(i) =
max(fg(i),zero)
318 IF ((pla_nl(i) >= ed).AND.(ft(i)<fr))
THEN
320 IF (triax(i)>=zero)
THEN
321 fn(i) = fn(i) + an*dpla_nl(i)
323 ELSEIF ((triax(i)<zero).AND.(triax(i)>=-third))
THEN
324 fn(i) = fn(i) + an*
max(one + three*triax(i),zero)*dpla_nl(i)
327 fn(i) =
max(fn(i),zero)
330 IF ((sigdr(i) > zero).AND.(ft(i)>zero).AND.(ft(i)<fr))
THEN
331 sigvm = sqrt(
max(em20,three*(j2(i)/(normsig**2))))
332 omega = one - ((twenty7 *(j3(i)/(normsig**3)))/(two*(sigvm**3)))**2
333 omega =
max(omega,zero)
334 omega =
min(omega,one)
335 sdpla = (sxx(i)*normxx(i)+ syy(i)*normyy(i)+ szz(i)*normzz(i)
336 . + sxy(i)*normxy(i)+ syz(i)*normyz(i)+ szx(i)*normzx(i))
338 fsh(i) = fsh(i) + kw*omega*ft(i)*(sdpla/sigdr(i))
340 fsh(i) =
max(fsh(i),zero)
343 ft(i) = f0 + fg(i) + fn(i) + fsh(i)
344 ft(i) =
min(ft(i), fr)
345 IF (ft(i) >= fr)
THEN
346 IF (off(i)==one) off(i) = four_over_5
353 fs(i) = fc + (one/q1 - fc) * (ft(i)-fc)/(fr-fc)
355 fs(i) =
min(fs(i),one/q1)
358 IF (jthe == 0 .AND. cp > zero )
THEN
359 dtemp = weitemp(i)*(one-ft(i))*yld(i)*dpla_nl(i)*eta/(rho0(i)*cp)
360 temp(i) = temp(i) + dtemp
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)
372 ftherm(i) = one - mtemp*(temp(i) - tref)
374 yld(i) = fhard(i)*frate(i)*ftherm(i)
376 yld(i) =
max(em10, yld(i))
385 ldav = (depsxx(i) + depsyy(i) + depszz(i)) * lam
386 signxx(i) = sigoxx(i) + (depsxx(i)*g2 + ldav)
387 signyy(i) = sigoyy(i) + (depsyy(i)*g2 + ldav)
388 signzz(i) = sigozz(i) + (depszz(i)*g2 + ldav)
389 signxy(i) = sigoxy(i) + depsxy(i)*g
390 signyz(i) = sigoyz(i) + depsyz(i)*g
391 signzx(i) = sigozx(i) + depszx(i)*g
393 trsig(i) = signxx(i) + signyy(i) + signzz(i)
394 sigm(i) = -trsig(i) * third
396 sxx(i) = signxx(i) + sigm(i)
397 syy(i) = signyy(i) + sigm(i)
403 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
406 j3(i) = sxx(i) * syy(i) * szz(i)
407 . + sxy(i) * syz(i) * szx(i) * two
408 . - sxx(i) * syz(i)**2
409 . - syy(i) * szx(i)**2
410 . - szz(i) * sxy(i)**2
412 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
414 IF (fdr(i) > zero)
THEN
415 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
420 IF (sigdr(i)>zero)
THEN
421 triax(i) = (trsig(i)*third)/sigdr(i)
425 IF (trsig(i)<zero)
THEN
436 fdam(i) = two*q1*fs(i)*cosh(q2*etat(i)*trsig(i)/yld(i)/two) - (q1*fs(i))**2
437 phi(i) = (sigdr(i) / yld(i))**2 - one + fdam(i)
443 IF ((phi(i) >= zero).AND.(off(i) == one).AND.(ft(i) < fr))
THEN
457#include "vectorize.inc"
464 sigdr2(i) = sigdr(i)**2
465 yld2i(i) = one / yld(i)**2
476#include "vectorize.inc"
494 yld2i(i) = one/(yld(i)**2)
495 dphi_dsig = two*sigdr(i)*yld2i(i)
496 fsinh = sinh(q2*etat(i)*trsig(i)/(yld(i)*two))
497 dphi_dtrsig = q1*q2*etat(i)*fs(i)*fsinh/yld(i)
500 normsig = sqrt(signxx(i)*signxx(i)
501 . + signyy(i)*signyy(i)
502 . + signzz(i)*signzz(i)
503 . + two*signxy(i)*signxy(i)
504 . + two*signyz(i)*signyz(i)
505 . + two*signzx(i)*signzx(i))
506 normsig =
max(normsig,one)
509 fdr(i) = (j2(i)/(normsig**2))**3 - cdr*((j3(i)/(normsig**3))**2)
510 dphi_dfdr = dphi_dsig*kdr*(one/six)*exp(-(five/six)*log(fdr(i)))
511 dsdrdj2 = dphi_dfdr*three*(j2(i)/(normsig**2))**2
512 dsdrdj3 = -dphi_dfdr*two*cdr*(j3(i)/(normsig
514 dj3dsxx = two_third*(syy(i)*szz(i)-syz(i)**2)/(normsig**2)
516 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
517 dj3dsyy = - third*(syy(i)*szz(i)-syz(i)**2)/(normsig**2)
518 . + two_third*(sxx(i)*szz(i)-szx(i)**2)/(normsig**2)
519 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
520 dj3dszz = - third*(syy(i)*szz(i)-syz(i)**2)/(normsig**2)
521 . - third*(sxx(i)*szz(i)-szx(i)**2)/(normsig**2)
522 . + two_third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
523 dj3dsxy = two*(sxx(i)*sxy
524 dj3dsyz = two*(sxy(i)*szx(i) + syy(i)*syz(i) + syz(i)*szz(i))/(normsig**2)
525 dj3dszx = two*(sxx(i)*szx(i) + sxy(i)*syz(i) + szx(i)*szz(i))/(normsig**2)
527 normxx(i) = dsdrdj2*sxx(i)/normsig + dsdrdj3*dj3dsxx + dphi_dtrsig
528 normyy(i) = dsdrdj2*syy(i)/normsig + dsdrdj3*dj3dsyy + dphi_dtrsig
529 normzz(i) = dsdrdj2*szz(i)/normsig + dsdrdj3*dj3dszz + dphi_dtrsig
530 normxy(i) = two*dsdrdj2*sxy(i)/normsig + dsdrdj3*dj3dsxy
531 normyz(i) = two*dsdrdj2*syz(i)/normsig + dsdrdj3
532 normzx(i) = two*dsdrdj2*szx(i)/normsig
539 trdfds(i) = normxx(i) + normyy(i) + normzz(i)
540 dfdsig2 = normxx(i) * (normxx(i)*g2 + lam*trdfds(i))
541 . + normyy(i) * (normyy(i)*g2 + lam*trdfds(i))
542 . + normzz(i) * (normzz(i)*g2 + lam*trdfds(i))
543 . + normxy(i) * normxy(i) * g
544 . + normyz(i) * normyz(i) * g
545 . + normzx(i) * normzx(i) * g
552 hardp(i) = hard + qvoce*bvoce*exp(-bvoce*pla(i))
553 dyld_dpla = hardp(i)*frate(i)*ftherm(i)
557 sig_dfdsig(i) = signxx(i) * normxx(i)
558 . + signyy(i) * normyy(i)
559 . + signzz(i) * normzz(i)
560 . + signxy(i) * normxy(i)
561 . + signyz(i) * normyz(i)
562 . + signzx(i) * normzx(i)
567 sigdr2(i) = sigdr(i)**2
568 dphi_dyld = -two*sigdr2(i)/yld(i)**3-dphi_dtrsig*trsig(i)/yld(i)
571 dphi_dlam(i) = - dfdsig2 + dphi_dyld*dyld_dpla*dpla_dlam(i)
572 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20) ,dphi_dlam(i))
574 ! 3 - computation of plastic multiplier and variables update
578 dlam = -phi(i)/dphi_dlam(i)
581 dpxx(i) = dlam * normxx(i)
582 dpyy(i) = dlam * normyy(i)
583 dpzz(i) = dlam * normzz(i)
584 dpxy(i) = dlam * normxy(i)
585 dpyz(i) = dlam * normyz(i)
586 dpzx(i) = dlam * normzx(i)
587 trdep = dpxx(i) + dpyy(i) + dpzz(i)
591 signxx(i) = signxx(i) - (dpxx(i)*g2 + ldav)
592 signyy(i) = signyy(i) - (dpyy(i)*g2 + ldav)
593 signzz(i) = signzz(i) - (dpzz(i)*g2 + ldav)
594 signxy(i) = signxy(i) - dpxy(i)*g
595 signyz(i) = signyz(i) - dpyz(i)*g
596 signzx(i) = signzx(i) - dpzx(i)*g
597 trsig(i) = signxx(i) + signyy(i) + signzz(i)
598 sigm(i) = -trsig(i) * third
599 sxx(i) = signxx(i) + sigm(i)
600 syy(i) = signyy(i) + sigm(i)
601 szz(i) = signzz(i) + sigm(i)
607 ddep = (dlam/((one - ft(i))*yld(i)))*sig_dfdsig(i)
608 dpla(i) = dpla(i) + ddep
609 pla(i) = pla(i) + ddep
612 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
613 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
614 j3(i) = sxx(i) * syy(i) * szz(i) + two * sxy(i) * syz(i) * szx(i)
615 . - sxx(i) * syz(i)**2 - syy(i) * szx(i)**2 - szz(i) * sxy(i)**2
616 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
617 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
619 triax(i) = (trsig(i)*third)/sigdr(i)
620 IF (trsig(i)<zero)
THEN
627 fhard(i) = yld0 + hard * pla(i) + qvoce*(one-exp(-bvoce*pla(i)))
630 yld(i) = fhard(i) * frate(i) * ftherm(i)
631 yld(i) =
max(yld(i), em10)
634 sigdr2(i) = sigdr(i)**2
635 yld2i(i) = one / yld(i)**2
636 fcosh = cosh(q2*etat(i)*trsig(i)/(yld(i)*two))
637 fdam(i) = two*q1*fs(i)*fcosh - (q1*fs(i))**2
638 phi(i) = sigdr2(i) * yld2i(i) - one + fdam(i)
656 dmg(i,5) =
min(ft(i),fr)
657 dmg(i,6) =
min(fs(i),one/q1)
660 IF (ft(i) >= fr)
THEN
671 dpdt = dpla(i) /
max(em20,timestep)
672 epsd(i) = afiltr * dpdt + (one - afiltr) * epsd(i)
674 IF (dpla(i) > zero)
THEN
675 et(i) = hardp(i)*frate(i) / (hardp(i)*frate(i) + young)
680 soundsp(i) = sqrt((bulk + four_over_3*g)/rho0(i))
687 IF (jthe < 0 .AND. jlag /= 0)
THEN
689 fheat(i) = fheat(i) + eta*(one-ft(i))*weitemp(i)*yld(i)*dpla(i)*volume(i)