29 1 NEL ,NGL ,NUPARAM ,NUVAR ,TIME ,TIMESTEP,
30 2 UPARAM ,UVAR ,OFF ,PLA ,EPSD ,SOUNDSP ,
31 3 EPSPXX ,EPSPYY ,EPSPZZ ,EPSPXY ,EPSPYZ ,EPSPZX ,
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 INLOC ,DPLANL ,DMG , DMG_SCALE)
39#include "implicit_f.inc"
48 INTEGER :: NEL,NUPARAM,NUVAR,INLOC
49 my_real :: TIME,TIMESTEP
50 INTEGER ,
DIMENSION(NEL) ,
INTENT(IN) :: NGL
51 my_real ,
DIMENSION(NUPARAM),
INTENT(IN) :: UPARAM
52 my_real ,
DIMENSION(NEL) ,
INTENT(IN) ::
53 . EPSPXX,,EPSPZZ,EPSPXY,,EPSPZX,
54 . DEPSXX,DEPSYY,DEPSZZ,DEPSXY,DEPSYZ,DEPSZX,
55 . sigoxx,sigoyy,sigozz,sigoxy,sigoyz,sigozx
57 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: epsd,soundsp
58 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) ::
59 . signxx,signyy,signzz,signxy,signyz,signzx
60 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: off,pla,dplanl,dmg,dmg_scale
61 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: uvar
65 INTEGER :: I,II,ITER,NITER,NINDX,NINDF,ITRX,IDAM
66 INTEGER ,
DIMENSION(NEL) :: INDX,INDF
68 my_real :: young,nu,ssp,g,g2,bulk,yld0,qq,beta,hh,c11,c12,
69 . a1f,a2f,as,d1c,d2c,d1f
71 my_real cc,epsdref,epsdmax,frate,fcut,
alpha,alphai
73 my_real facr,triax,rvoce,fvm,i1p,ip,jp,tp,fact,facd,dfac,dtinv,
74 . dlam,ddep,dfdlam,dyld_dpla,dpla_dlam,dphi_dlam,
75 . gamc,gamf,np_xx,np_yy,np_zz,np_xy,np_yz,np_zx,
76 . nf_xx,nf_yy,nf_zz,nf_xy,nf_yz,nf_zx,dpxx,dpyy,dpzz,dpxy,dpyz,dpzx
77 my_real ,
DIMENSION(NEL) :: i1,j2,yld,phi,dam,jcrate,
78 . sxx,syy,szz,sxy,syz,szx,dpla,jcr_log,gamma,dgamm,pla_nl,dpdt_nl
153 itrx = nint(uparam(26))
154 idam = nint(uparam(27))
164 dtinv = one /
max(timestep, em20)
166 pla_nl(i) = uvar(i,5) +
max(dplanl(i),zero)
167 uvar(i,5) = pla_nl(i)
168 dpdt_nl(i) =
min(
max(dplanl(i),zero)*dtinv ,epsdmax)
174 dam(1:nel) = dmg(1:nel)
178 IF (off(i) < 0.001) off(i) = zero
179 IF (off(i) < one) off(i) = off(i)*four_over_5
180 IF (off(i) == one)
THEN
181 signxx(i) = sigoxx(i) + c11*depsxx(i) + c12*(depsyy(i) + depszz(i))
182 signyy(i) = sigoyy(i) + c11*depsyy(i) + c12*(depsxx(i) + depszz(i))
183 signzz(i) = sigozz(i) + c11*depszz(i) + c12*(depsxx(i) + depsyy(i))
184 signxy(i) = sigoxy(i) + depsxy(i)*g
185 signyz(i) = sigoyz(i) + depsyz(i)*g
186 signzx(i) = sigozx(i) + depszx(i)*g
187 i1(i) = signxx(i) + signyy(i) + signzz(i)
189 sxx(i) = signxx(i) - i1(i) * third
190 syy(i) = signyy(i) - i1(i) * third
191 szz(i) = signzz(i) - i1(i) * third
195 j2(i) = (sxx(i)**2 + syy(i)**2 + szz(i)**2)*half
196 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
200 jcr_log(1:nel) = zero
202 IF (epsdref > zero)
THEN
204 jcr_log(1:nel) = log(dpdt_nl(1:nel) / epsdref)
205 jcrate(1:nel) = one + cc * jcr_log(1:nel)
208 IF (off(i) == one)
THEN
209 epsd(i) = (epspxx(i)**2 + epspyy(i)**2 + epspzz(i)**2 )*two
210 . + epspxy(i)**2 + epspyz(i)**2 + epspzx(i)**2
211 epsd(i) =
min(sqrt(epsd(i)) ,epsdmax)
212 epsd(i) =
alpha*epsd(i) + alphai*uvar(i,3)
214 IF (epsd(i) > epsdref)
THEN
215 jcr_log(i) = log(epsd(i) / epsdref)
216 jcrate(i) = one + cc * jcr_log(i)
226 rvoce = qq*(one - exp(-beta*pla(i))) + hh*pla(i)
227 yld(i) = (yld0 + rvoce) * jcrate(i)
228 fvm =
max(zero, i1(i) + half*sqr3*a1f*yld0 / a2f )
229 phi(i) = j2(i) + third*a2f * fvm**2
230 . - (yld(i)**2 + fourth*(a1f*yld0)**2/a2f)
238 IF (phi(i) > zero .and. off(i) == one)
THEN
247 i1p =
max(zero, i1(i))
248 fvm =
max(zero, i1(i) + half*sqr3*a1f*yld0 / a2f)
254 jp = third * as * i1p
265 ip = two_third * a2f * fvm
274 dfdlam =-nf_xx * (c11*np_xx + c12 * (np_yy + np_zz))
275 . - nf_yy * (c11*np_yy + c12 * (np_xx + np_zz))
276 . - nf_zz * (c11*np_zz + c12 * (np_xx + np_yy))
277 . -(nf_xy*np_xy + nf_yz*np_yz + nf_zx*np_zx)*two*g2
279 dyld_dpla = (hh + beta*qq*exp(-beta*pla(i))) * jcrate(i)
280 dpla_dlam = two*sqrt((j2(i) + tp*as*i1(i)))
281 dphi_dlam = dfdlam - two*yld(i)*dyld_dpla*dpla_dlam
283 dlam = -phi(i) / dphi_dlam
293 signxx(i) = signxx(i) - (c11*dpxx + c12*(dpyy + dpzz))
294 signyy(i) = signyy(i) - (c11*dpyy + c12*(dpxx + dpzz))
295 signzz(i) = signzz(i) - (c11*dpzz + c12*(dpxx + dpyy))
296 signxy(i) = signxy(i) - g2*dpxy
297 signyz(i) = signyz(i) - g2*dpyz
298 signzx(i) = signzx(i) - g2*dpzx
301 ddep = dlam * dpla_dlam
302 dpla(i)=
max(zero, dpla(i) + ddep)
303 pla(i) = pla(i) + ddep
307 i1(i) = signxx(i) + signyy(i) + signzz(i
308 i1p =
max(zero, i1(i))
309 sxx(i) = signxx(i) - i1(i)*third
310 syy(i) = signyy(i) - i1(i)*third
311 szz(i) = signzz(i) - i1(i)*third
315 j2(i) =(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) * half
316 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
317 rvoce = qq*(one - exp(-beta*pla(i))) + hh*pla(i)
318 yld(i) = (yld0 + rvoce) * jcrate(i)
319 fvm =
max(zero, i1(i) + half*sqr3*a1f*yld0 / a2f)
320 phi(i) = j2(i) + third*a2f * fvm**2
321 . - (yld(i)**2 + fourth*(a1f*yld0)**2/a2f)
324 uvar(i,4) = phi(i) / yld0**2
332 dgamm(1:nel) = dplanl(1:nel)
333 gamma(1:nel) = pla_nl(1:nel)
335 dgamm(1:nel) = dpla(1:nel)
336 gamma(1:nel) = pla(1:nel)
340 dgamm(1:nel) = dplanl(1:nel) * dmg_scale(1:nel)
341 uvar(1:nel,1) = uvar(1:nel,1) + dgamm(1:nel)
342 gamma (1:nel) = uvar(1:nel,1)
344 dgamm(1:nel) = dpla(1:nel) * dmg_scale(1:nel)
345 uvar(1:nel,1) = uvar(1:nel,1) + dgamm(1:nel)
346 gamma(1:nel) = uvar(1:nel,1)
354 facr = one + d_jc * jcr_log(i)
355 IF ( j2(i)/= zero)triax = third * i1(i) / sqrt(three*j2(i))
357 fact = exp(-d_trx*triax)
359 IF (triax > zero )fact = exp(-d_trx*triax)
361 gamc = (d1c + d2c * fact) * facr
362 gamf = (d1f + d2f * fact) * facr
363 IF (gamma(i) > gamc)
THEN
364 IF (dam(i) == zero)
THEN
368 IF (expn == one)
THEN
369 dam(i) = dam(i) + dgamm(i) / (gamf - gamc)
371 dfac = (gamma(i) - gamc) / (gamf - gamc)
372 dam(i) = dam(i) + expn * dfac**(expn-one) * dgamm(i) / (gamf - gamc)
374 IF (dam(i) >= one)
THEN
383 dmg_scale(i) = one - dam(i)
392 WRITE(iout, 1000) ngl(indf(ii))
393 WRITE(istdo,1100) ngl(indf(ii)),time
394#include "lockoff.inc"
398 1000
FORMAT(1x,
'START DAMAGE IN SOLID ELEMENT NUMBER ',i10)
399 1100
FORMAT(1x,
'START DAMAGE IN SOLID ELEMENT NUMBER ',i10,1x,
' AT TIME :',g11
subroutine sigeps120_vm(nel, ngl, nuparam, nuvar, time, timestep, uparam, uvar, off, pla, epsd, soundsp, epspxx, epspyy, epspzz, epspxy, epspyz, epspzx, depsxx, depsyy, depszz, depsxy, depsyz, depszx, sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx, signxx, signyy, signzz, signxy, signyz, signzx, inloc, dplanl, dmg, dmg_scale)