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 ,L_PLANL ,PLAP_NL ,L_EPSDNL)
40#include
"implicit_f.inc"
48 INTEGER NEL,NUPARAM,NUVAR,JTHE
49 INTEGER ,
DIMENSION(NEL),
INTENT(IN) :: NGL
50 INTEGER,
INTENT(IN) :: L_PLANL,L_EPSDNL
53 my_real,
DIMENSION(NUPARAM),
INTENT(IN) ::
55 my_real,
DIMENSION(NEL),
INTENT(IN) ::
57 . depsxx,depsyy,depsxy,depsyz,depszx,
58 . sigoxx,sigoyy,sigoxy,sigoyz,sigozx,
60 my_real,
DIMENSION(NEL*L_PLANL),
INTENT(IN) ::
62 my_real,
DIMENSION(NEL*L_EPSDNL),
INTENT(IN) ::
65 my_real ,
DIMENSION(NEL),
INTENT(OUT) ::
67 . signxx,signyy,signxy,signyz,signzx
69 my_real ,
DIMENSION(NEL),
INTENT(INOUT) ::
70 . pla,dpla,epsd,off,thk,temp,seq
71 my_real ,
DIMENSION(NEL,6),
INTENT(INOUT) ::
73 my_real ,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) ::
79 INTEGER I,K,II,IGURSON,NINDX,INDEX(NEL),NICE
82 . young,bulk,lam,g,g2,nu,cdr,kdr,hard,yld0,qvoce,bvoce,jcc,
83 . epsp0,mtemp,tini,tref,eta,cp,dpis,dpad,asrate,afiltr,hkhi,
84 . q1,q2,ed,an,epn,kw,fr,fc,f0,a11,a12,nnu,dti
86 . h,ldav,trdfds,sigvm,sigdr2,yld2i,omega,
87 . dtemp,fcosh,fsinh,dpdt,dlam,ddep
89 . dpxx,dpyy,dpxy,dpzz,dsdrdj2,dsdrdj3,
90 . dj3dsxx,dj3dsyy,dj3dsxy,dj3dszz,
91 . dj2dsxx,dj2dsyy,dj2dsxy,
92 . dfdsxx,dfdsyy,dfdsxy,dyld_dpla_nl,
93 . normxx,normyy,normxy,normzz,
94 . denom,dphi,sdpla,dphi_dtrsig,sdv_dfdsig,sig_dfdsig,dfdsig2,
95 . dphi_dsig,dphi_dyld,dphi_dfdr,dphi_dfs,dfs_dft,
96 . dfn_dlam,dfsh_dlam,dfg_dlam,dft_dlam,dfdpla,normsig,
97 . dfn,dfsh,dfg,dft,dyld_dpla,dyld_dtemp,dtemp_dlam
99 my_real,
DIMENSION(NEL) ::
100 . dsigxx,dsigyy,dsigxy,trsig,trdep,
101 . sxx,syy,sxy,szz,sigm,j2,j3,sigdr,yld,weitemp,
102 . hardp,fhard,frate,ftherm,fdr,triax,etat,
103 . fdam,phi0,phi,ft,fs,fg,fn,fsh,dpla_dlam,dezz,dlam_nl
108 !=======================================================================
127 nice = nint(uparam(11))
147 afiltr = asrate*timestep/(asrate*timestep + one)
148 dti = one /
max(timestep, em20)
151 igurson = nint(uparam(30))
169 IF (off(i) < em03) off(i) = zero
170 IF (off(i) < one) off(i) = off(i)*four_over_5
187 IF (time == zero)
THEN
196 dmg(1:nel,6) = fc + (one/q1-fc)*(f0-fc)/(fr-fc)
198 fs(1:nel) = dmg(1:nel,6)
205 IF (epsd(i) < dpis)
THEN
207 ELSEIF (epsd(i) > dpad)
THEN
210 weitemp(i) = ((epsd(i)-dpis)**2 )
211 . * (three*dpad - two*epsd(i) - dpis)
216 temp(1:nel) = tempel(1:nel)
223 fhard(i) = yld0 + hard*pla(i) + qvoce*(one-exp(-bvoce*pla(i)))
224 IF (igurson == 2)
THEN
225 IF (pla_nl(i) - pla(i) < zero)
THEN
226 fhard(i) = fhard(i) - hkhi*(pla_nl(i) - pla(i))
231 IF (epsd(i) > epsp0) frate(i) = frate(i) + jcc*log(epsd(i)/epsp0)
234 IF (cp > zero) ftherm(i) = one
236 yld(i) = fhard(i)*frate(i)*ftherm(i)
238 yld(i) =
max(em10, yld(i))
247 signxx(i) = sigoxx(i) + (a11*depsxx(i) + a12*depsyy(i))
248 signyy(i) = sigoyy(i) + (a11*depsyy(i) + a12*depsxx(i))
249 signxy(i) = sigoxy(i) + (depsxy(i)*g)
250 signyz(i) = sigoyz(i) + (depsyz(i)*gs(i))
251 signzx(i) = sigozx(i) + (depszx(i)*gs(i))
253 trsig(i) = signxx(i) + signyy(i)
254 sigm(i) = -trsig(i) * third
256 sxx(i) = signxx(i) + sigm(i)
257 syy(i) = signyy(i) + sigm(i)
260 dezz(i) = -nnu*depsxx(i) - nnu*depsyy(i)
262 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) + sxy(i)**2
264 j3(i) = sxx(i)*syy(i)*szz(i) - szz(i)*sxy(i)**2
266 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
268 IF (fdr(i) > zero)
THEN
269 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
274 IF (sigdr(i)>zero)
THEN
275 triax(i) = (trsig(i)*third)/sigdr(i)
279 IF (trsig(i)<zero)
THEN
290 fdam(i) = two*q1*fs(i)*cosh(q2*etat(i)*trsig(i)/yld(i)/two) - (q1*fs(i))**2
291 phi(i) = (sigdr(i) / yld(i))**2 - one + fdam(i)
297 IF ((phi(i) > zero).AND.(off(i) == one).AND.(ft(i)<fr))
THEN
304 ! - plastic correction with nice - explicit method
306#include "vectorize.inc"
313 dsigxx(i) = a11*depsxx(i) + a12*depsyy(i)
314 dsigyy(i) = a11*depsyy(i) + a12*depsxx(i)
315 dsigxy(i) = depsxy(i)*g
319 trsig(i) = sigoxx(i) + sigoyy(i)
320 sigm(i) = -trsig(i) * third
321 sxx(i) = sigoxx(i) + sigm(i)
322 syy(i) = sigoyy(i) + sigm(i)
325 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2) + sxy(i)**2
326 j3(i) = sxx(i)*syy(i)*szz(i) - szz(i)*sxy(i)**2
327 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
328 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
330 triax(i) = (trsig(i)*third)/sigdr(i)
331 IF (trsig(i)<zero)
THEN
351 yld2i = one/(yld(i)**2)
352 dphi_dsig = two*sigdr(i)*yld2i
353 fsinh = sinh(q2*etat(i)*trsig(i)/(yld(i)*two))
354 dphi_dtrsig = q1*q2*etat(i)*fs(i)*fsinh/yld(i)
357 normsig = sqrt(sigoxx(i)*sigoxx(i)
358 . + sigoyy(i)*sigoyy(i)
359 . + two*sigoxy(i)*sigoxy(i))
360 normsig =
max(normsig,one)
363 fdr(i) = (j2(i)/(normsig**2))**3 - cdr*((j3(i)/(normsig**3))**2)
364 dphi_dfdr = dphi_dsig*kdr*(one/six)*exp(-(five/six)*log(fdr(i)))
365 dsdrdj2 = dphi_dfdr*three*(j2(i)/(normsig**2))**2
366 dsdrdj3 = -dphi_dfdr*two*cdr*(j3(i)/(normsig**3))
368 dj3dsxx = two_third*(syy(i)*szz(i))/(normsig**2)
369 . - third*(sxx(i)*szz(i))/(normsig**2)
370 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
371 dj3dsyy = - third*(syy(i)*szz(i))/(normsig**2)
372 . + two_third*(sxx(i)*szz(i))/(normsig**2)
373 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
374 dj3dszz = - third*(syy(i)*szz(i))/(normsig**2)
375 . - third*(sxx(i)*szz(i))/(normsig**2)
376 . + two_third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
377 dj3dsxy = two*(sxx(i)*sxy(i) + sxy(i)*syy(i))/(normsig**2)
380 normxx = dsdrdj2*sxx(i)/normsig + dsdrdj3*dj3dsxx + dphi_dtrsig
382 normzz = dsdrdj2*szz(i)/normsig + dsdrdj3*dj3dszz + dphi_dtrsig
383 normxy = two*dsdrdj2*sxy(i)/normsig + dsdrdj3*dj3dsxy
389 dphi = normxx * dsigxx(i)
390 . + normyy * dsigyy(i)
391 . + normxy * dsigxy(i)
398 trdfds = normxx + normyy + normzz
399 dfdsig2 = normxx * (a11*normxx + a12*normyy)
400 . + normyy * (a11*normyy + a12*normxx)
401 . + normxy * normxy * g
408 hardp(i) = hard + qvoce*bvoce*exp(-bvoce*pla(i))
409 IF (igurson == 2)
THEN
410 IF (pla_nl(i) - pla(i) < zero)
THEN
411 hardp(i) = hardp(i) + hkhi
414 dyld_dpla = hardp(i)*frate(i)*ftherm(i)
416 IF (igurson == 2)
THEN
417 IF (pla_nl(i) - pla(i) < zero)
THEN
418 dyld_dpla_nl = -hkhi*frate(i)*ftherm(i)
426 sdv_dfdsig = sxx(i) * normxx
431 . + sigoyy(i) * normyy
432 . + sigoxy(i) * normxy
433 dpla_dlam(i) = sig_dfdsig / ((one - ft(i))*yld(i))
437 IF (jthe == 0 .and. cp > zero)
THEN
440 dyld_dtemp = -fhard(i)*frate(i)*mtemp
443 dtemp_dlam = weitemp(i)*(eta/(rho(i)*cp))*sig_dfdsig
452 dphi_dyld = -two*sigdr2/yld(i)**3-dphi_dtrsig*trsig(i)/yld(i)
458 fcosh = cosh(q2*etat(i)*trsig(i)/(yld(i)*two))
459 dphi_dfs = two*q1*fcosh - two*q1*q1
463 IF (ft(i) >= fc)
THEN
464 dfs_dft = ((one/q1)-fc)*(fr-fc)
471 IF ((pla(i)>=ed).AND.(ft(i)<fr))
THEN
473 IF (triax(i)>=zero)
THEN
474 dfn_dlam = an*dpla_dlam(i)
476 ELSEIF ((triax(i)<zero).AND.(triax(i)>=-third))
THEN
477 dfn_dlam = an*
max(one + three*triax(i),zero)*dpla_dlam(i)
488 IF ((sigdr(i) > zero).AND.(ft(i)>zero).AND.(ft(i)<fr)
THEN
489 sigvm = sqrt(
max(em20, three*(j2(i)/(normsig**2))))
490 omega = one - ((twenty7 *(j3(i)/(normsig**3)))/(two*sigvm**3))**2
491 omega =
max(omega,zero)
492 omega =
min(omega,one)
493 dfsh_dlam = kw*omega*ft(i)*sdv_dfdsig/sigdr(i)
500 IF ((ft(i)>zero).AND.(ft(i)<fr).AND.(trdfds>zero))
THEN
501 dfg_dlam = (one-ft(i))*trdfds
508 dft_dlam = dfn_dlam + dfg_dlam + dfsh_dlam
511 denom = dfdsig2 - (dphi_dyld * dyld_dpla * dpla_dlam(i))
512 . - dphi_dfs * dfs_dft * dft_dlam
513 IF (jthe == 0 .and. cp > zero)
THEN
514 denom = denom - dphi_dyld * dyld_dtemp * dtemp_dlam
516 denom = sign(
max(abs(denom),em20) ,denom)
522 IF (igurson == 2)
THEN
523 dphi = dphi + dphi_dyld*dyld_dpla_nl*dpla_nl(i)
525 dlam = (dphi + phi(i)) / denom
526 dlam =
max(dlam, zero)
533 trdep(i) = dpxx + dpyy + dpzz
536 ddep = (dlam/((one - ft(i))*yld(i)))*sig_dfdsig
537 dpla(i) = dpla(i) + ddep
538 pla(i) = pla(i) + ddep
542 IF ((ft(i)>zero).AND.(ft(i)<fr).AND.(trdep(i)>zero))
THEN
543 fg(i) = fg(i) + (one-ft(i))*trdep(i)
545 fg(i) =
max(fg(i),zero)
547 IF ((pla(i) >= ed).AND.(ft(i)<fr))
THEN
549 IF (triax(i)>=zero)
THEN
550 fn(i) = fn(i) + an*ddep
552 ELSEIF ((triax(i)<zero).AND.(triax(i)>=-third))
THEN
553 fn(i) = fn(i) + an*
max(one + three*triax(i),zero)*ddep
556 fn(i) =
max(fn(i),zero)
558 IF ((sigdr(i) > zero).AND.(ft(i)>zero).AND.(ft(i)<fr))
THEN
559 sigvm = sqrt(
max(em20, three*(j2(i)/(normsig**2))))
560 omega = one - ((twenty7 *(j3(i)/(normsig**3)))/(two*sigvm**3))**2
561 omega =
max(zero,omega)
562 omega =
min(one,omega)
563 sdpla = sxx(i)*dpxx + syy(i)*dpyy + szz(i)*dpzz
565 fsh(i) = fsh(i) + kw*omega*ft(i)*(sdpla/sigdr(i))
567 fsh(i) =
max(fsh(i),zero)
569 ft(i) = f0 + fg(i) + fn(i) + fsh(i)
570 ft(i) =
min(ft(i),fr)
575 fs(i) = fc + (one/q1 - fc) * (ft(i)-fc)/(fr-fc)
577 fs(i) =
min(fs(i),one/q1)
580 IF (jthe == 0 .AND. cp > zero)
THEN
581 dtemp = weitemp(i)*yld(i)*(one
582 temp(i) = temp(i) + dtemp
583 ftherm(i) = one - mtemp* (temp(i) - tref)
587 fhard(i) = yld0 + hard * pla(i) + qvoce*(one-exp(-bvoce*pla(i)))
588 IF (igurson == 2)
THEN
589 IF (pla_nl(i) - pla(i) < zero)
THEN
590 fhard(i) = fhard(i) - hkhi*(pla_nl(i) - pla(i))
595 yld(i) = fhard(i) * frate(i) * ftherm(i)
596 yld(i) =
max(yld(i), em10)
599 signxx(i) = sigoxx(i) + dsigxx(i) - (a11*dpxx + a12*dpyy)
600 signyy(i) = sigoyy(i) + dsigyy
601 signxy(i) = sigoxy(i) + dsigxy(i) - dpxy*g
602 trsig(i) = signxx(i) + signyy(i)
603 sigm(i) = -trsig(i) * third
604 sxx(i) = signxx(i) + sigm(i)
605 syy(i) = signyy(i) + sigm(i)
610 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) + sxy(i)**2
611 j3(i) = sxx(i) * syy(i) * szz(i) - szz(i) * sxy(i)**2
612 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
613 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
615 triax(i) = (trsig(i)*third)/sigdr(i)
616 IF (trsig(i)<zero)
THEN
624 yld2i = one / yld(i)**2
625 fcosh = cosh(q2*etat(i)*trsig(i)/(yld(i)*two
626 fdam(i) = two*q1*fs(i)*fcosh - (q1*fs
627 phi(i) = sigdr2 * yld2i - one + fdam(i)
630 dezz(i) = dezz(i) + nnu
639 IF (dpla(i) > zero)
THEN
641 et(i) = hardp(i)*frate(i) / (hardp(i)*frate(i) + young)
651 dmg(i,5) =
min(ft(i),fr)
652 dmg(i,6) =
min(fs(i),one/q1)
655 IF (ft(i) >= fr)
THEN
656 IF (off(i) == one) off(i) = four_over_5
666 dpdt = dpla(i) /
max(em20,timestep)
667 epsd(i) = afiltr * dpdt + (one - afiltr) * epsd(i)
669 soundsp(i) = sqrt((a11)/rho(i))
673 thk(i) = thk(i) + dezz(i)*thkly(i)*off(i)