34 1 NEL ,NGL ,NUPARAM ,NUVAR ,TIME ,TIMESTEP,
35 2 UPARAM ,UVAR ,OFF ,PLA ,EPSD ,SOUNDSP ,
36 3 EPSPXX ,EPSPYY ,EPSPZZ ,EPSPXY ,EPSPYZ ,EPSPZX ,
37 4 DEPSXX ,DEPSYY ,DEPSZZ ,DEPSXY ,DEPSYZ ,DEPSZX ,
38 5 SIGOXX ,SIGOYY ,SIGOZZ ,SIGOXY ,SIGOYZ ,SIGOZX ,
39 6 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
40 7 NUMTABL ,ITABLE ,TABLE ,NVARTMP ,VARTMP ,TEMP ,
41 8 INLOC ,DPLANL ,DMG ,DMG_SCALE)
50#include "implicit_f.inc"
60 INTEGER :: NEL,NUPARAM,NUVAR,NVARTMP,NUMTABL,INLOC
61 my_real :: TIME,TIMESTEP
62 INTEGER ,
DIMENSION(NEL) ,
INTENT(IN) :: NGL
63 INTEGER ,
DIMENSION(NTABLE) ,
INTENT(IN) :: ITABLE
64 my_real ,
DIMENSION(NUPARAM),
INTENT(IN) :: UPARAM
65 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: TEMP,
66 . EPSPXX,EPSPYY,EPSPZZ,EPSPXY,EPSPYZ,EPSPZX,
67 . DEPSXX,DEPSYY,DEPSZZ,DEPSXY,DEPSYZ,DEPSZX,
68 . sigoxx,sigoyy,sigozz,sigoxy,sigoyz,sigozx
70 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: epsd,soundsp
71 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) ::
72 . signxx,signyy,signzz,signxy,signyz,signzx
73 INTEGER,
DIMENSION(NEL,NVARTMP) ,
INTENT(INOUT) :: VARTMP
74 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: UVAR
75 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: OFF,PLA,DPLANL,DMG,DMG_SCALE
76 TYPE(TTABLE),
DIMENSION(NTABLE) :: TABLE
80 INTEGER :: I,II,ITER,NITER,NINDX,NINDF,ITRX,IDAM
81 my_real :: xscale,yscale
82 INTEGER :: IPOS1(NEL,1), IPOS2(NEL,2), IPOS3(NEL,3)
83 INTEGER :: NDIM_YLD,FUNC_YLD
84 my_real :: xvec1(nel,1), xvec2(nel,2), xvec3(nel,3)
85 INTEGER ,
DIMENSION(NEL) :: INDX,INDF
87 my_real :: YOUNG,NU,SSP,G,G2,BULK,YLD0,C11,C12,
88 . a1f,a2f,a1h,a2h,as,d1c,d2c,d1f,d2f,d_trx,d_jc,dm,expn
90 my_real cc,epsdref,epsdmax,frate,fcut,
alpha,alphai
92 my_real facr,triax,i1p,ip,jp,tp,fact,facd,dfac,dtinv,
93 . dlam,ddep,dfdlam,dfdpla,dpla_dlam,dphi_dlam,
94 . gamc,gamf,np_xx,np_yy,np_zz,np_xy,np_yz,np_zx,
95 . nf_xx,nf_yy,nf_zz,nf_xy,nf_yz,nf_zx,dpxx,dpyy,dpzz,dpxy,dpyz,dpzx
96 my_real ,
DIMENSION(NEL) :: i1,j2,a1,a2,yld,phi,dam,jcrate,
97 . sxx,syy,szz,sxy,syz,szx,dpla,jcr_log,gamma,dgamm,hardp,fdp,
98 . yld_i,hardp_i,pla_nl,dpdt_nl
170 itrx = nint(uparam(26))
171 idam = nint(uparam(27))
179 ndim_yld = table(func_yld)%NDIM
186 dtinv = one /
max(timestep, em20)
188 pla_nl(i) = uvar(i,5) +
max(dplanl(i),zero)
189 uvar(i,5) = pla_nl(i)
190 dpdt_nl(i) =
min(
max(dplanl(i),zero)*dtinv ,epsdmax)
196 dam(1:nel) = dmg(1:nel)
200 IF (off(i) < 0.001) off(i) = zero
201 IF (off(i) < one) off(i) = off(i)*four_over_5
202 IF (off(i) == one)
THEN
203 signxx(i) = sigoxx(i) + c11*depsxx(i) + c12*(depsyy(i) + depszz(i))
204 signyy(i) = sigoyy(i) + c11*depsyy(i) + c12*(depsxx(i) + depszz(i))
205 signzz(i) = sigozz(i) + c11*depszz(i) + c12*(depsxx(i) + depsyy(i))
206 signxy(i) = sigoxy(i) + depsxy(i)*g
207 signyz(i) = sigoyz(i) + depsyz(i)*g
208 signzx(i) = sigozx(i) + depszx(i)*g
209 i1(i) = signxx(i) + signyy(i) + signzz(i)
211 sxx(i) = signxx(i) - i1(i) * third
212 syy(i) = signyy(i) - i1(i) * third
213 szz(i) = signzz(i) - i1(i) * third
217 j2(i) = (sxx(i)**2 + syy(i)**2 + szz(i)**2)*half
218 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
222 jcr_log(1:nel) = zero
224 IF (epsdref > zero)
THEN
226 jcr_log(1:nel) = log(dpdt_nl(1:nel) / epsdref)
227 jcrate(1:nel) = one + cc * jcr_log(1:nel)
230 IF (off(i) == one)
THEN
231 epsd(i) = (epspxx(i)**2 + epspyy(i)**2 + epspzz(i)**2 )*two
232 . + epspxy(i)**2 + epspyz(i)**2 + epspzx(i)**2
233 epsd(i) =
min(sqrt(epsd(i)) ,epsdmax)
234 epsd(i) =
alpha*epsd(i) +
236 IF (epsd(i) > epsdref)
THEN
237 jcr_log(i) = log(epsd(i) / epsdref)
238 jcrate(i) = one + cc * jcr_log(i)
247 IF (ndim_yld == 1)
THEN
248 xvec1(1:nel,1) = pla(1:nel
249 ipos1(1:nel,1) = vartmp(1:nel,1)
253 yld(1:nel) = yld(1:nel) * yscale * jcrate(1:nel)
254 hardp(1:nel) = hardp(1:nel) * yscale * jcrate(1:nel)
255 vartmp(1:nel,1) = ipos1(1:nel,1)
257 ELSE IF (ndim_yld == 2)
THEN
258 xvec2(1:nel,1) = pla(1:nel)
259 xvec2(1:nel,2) = epsd(1:nel)
260 ipos2(1:nel,1) = vartmp(1:nel,1)
263 CALL table_vinterp(table(func_yld),nel,nel,ipos2,xvec2,yld,hardp)
265 yld(1:nel) = yld(1:nel) * yscale
266 hardp(1:nel) = hardp(1:nel) * yscale
267 vartmp(1:nel,1) = ipos2(1:nel,1)
270 xvec3(1:nel,1) = pla(1:nel)
271 xvec3(1:nel,2) = epsd(1:nel)
272 xvec3(1:nel,3) = temp(1:nel)
273 ipos3(1:nel,1) = vartmp(1:nel,1)
277 CALL table_vinterp(table(func_yld),nel,nel,ipos3,xvec3,yld,hardp)
279 yld(1:nel) = yld(1:nel) * yscale
280 hardp(1:nel) = hardp(1:nel) * yscale
281 vartmp(1:nel,1) = ipos3(1:nel,1)
286 a1(i) = a1f + a1h * pla(i)
287 a2(i) =
max(zero, a2f + a2h * pla(i))
288 fdp(i) = third*(sqr3*yld0*a1(i)*i1(i) + a2(i)*
max(zero,i1(i))**2)
289 phi(i) = j2(i) + fdp(i) - yld(i)**2
297 IF (phi(i) > zero .and. off(i) == one)
THEN
314 i1p =
max(zero, i1(i))
315 jp = third * as * i1p
326 ip = third*(sqr3*yld0*a1(i) + two*a2(i)*i1p)
335 dfdlam =-nf_xx * (c11*np_xx + c12 * (np_yy + np_zz))
336 . - nf_yy * (c11*np_yy + c12 * (np_xx + np_zz))
337 . - nf_zz * (c11*np_zz + c12 * (np_xx + np_yy))
338 . -(nf_xy*np_xy + nf_yz*np_yz + nf_zx*np_zx)*two*g2
340 dfdpla = third*(sqr3*a1h*yld0*i1(i) + a2h*i1p**2)
342 dpla_dlam = two*sqrt((j2(i) + tp*as*i1(i)))
344 dphi_dlam = dfdlam + (dfdpla - two*yld(i)*hardp(i))*dpla_dlam
346 dlam = -phi(i) / dphi_dlam
356 signxx(i) = signxx(i) - (c11*dpxx + c12*(dpyy + dpzz))
357 signyy(i) = signyy(i) - (c11*dpyy + c12*(dpxx + dpzz))
358 signzz(i) = signzz(i) - (c11*dpzz + c12*(dpxx + dpyy))
359 signxy(i) = signxy(i) - g2*dpxy
360 signyz(i) = signyz(i) - g2*dpyz
361 signzx(i) = signzx(i) - g2*dpzx
364 ddep = dlam * dpla_dlam
365 dpla(i)=
max(zero, dpla(i) + ddep)
366 pla(i) = pla(i) + ddep
372 IF (ndim_yld == 1)
THEN
376 ipos1(ii,1) = vartmp(i,1)
379 CALL table_vinterp(table(func_yld),nel,nel,ipos1,xvec1,yld_i,hardp_i)
383 yld(i) = yld_i(ii)*yscale
384 hardp(i) = hardp_i(ii)*yscale
385 vartmp(i,1) = ipos1(ii,1)
388 ELSE IF (ndim_yld == 2)
THEN
392 xvec2(ii,2) = epsd(i)
393 ipos2(ii,1) = vartmp(i,1)
396 CALL table_vinterp(table(func_yld),nel,nindx,ipos2,xvec2,yld_i,hardp_i)
400 yld(i) = yld_i(ii)*yscale
401 hardp(i) = hardp_i(ii)*yscale
402 vartmp(i,1) = ipos2(ii,1)
409 xvec3(ii,2) = epsd(i)
410 xvec3(ii,3) = temp(i)
411 ipos3(ii,1) = vartmp(i,1)
420 vartmp(i,1) = ipos3(ii,1)
428 i1(i) = signxx(i) + signyy(i) + signzz(i)
429 i1p =
max(zero, i1(i))
430 sxx(i) = signxx(i) - i1(i)*third
431 syy(i) = signyy(i) - i1(i)*third
432 szz(i) = signzz(i) - i1(i)*third
436 j2(i) =(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) * half
437 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
438 a1(i) = a1f + a1h * pla(i)
439 a2(i) =
max(zero, a2f + a2h * pla(i))
440 fdp(i) = third*(sqr3*yld0*a1(i)*i1(i) + a2(i)*i1p**2)
441 phi(i) = j2(i) + fdp(i) - yld(i)**2
442 uvar(i,4) = phi(i) / yld(i)**2
454 dgamm(1:nel) = dplanl(1:nel)
455 gamma(1:nel) = pla_nl(1:nel)
457 dgamm(1:nel) = dpla(1:nel)
458 gamma(1:nel) = pla(1:nel)
462 dgamm(1:nel) = dplanl(1:nel) * dmg_scale(1:nel)
463 uvar(1:nel,1) = uvar(1:nel,1) + dgamm(1:nel)
464 gamma(1:nel) = uvar(1:nel,1)
466 dgamm(1:nel) = dpla(1:nel) * dmg_scale(1:nel)
467 uvar(1:nel,1) = uvar(1:nel,1) + dgamm(1:nel)
468 gamma(1:nel) = uvar(1:nel,1)
476 facr = one + d_jc * jcr_log
477 IF ( j2(i)/= zero)triax = third * i1(i) / sqrt(three*j2(i))
479 fact = exp(-d_trx*triax)
481 IF (triax > zero )fact = exp(-d_trx*triax)
483 gamc = (d1c + d2c * fact) * facr
484 gamf = (d1f + d2f * fact) * facr
485 IF (gamma(i) > gamc)
THEN
486 IF (dam(i) == zero)
THEN
490 IF (expn == one)
THEN
491 dam(i) = dam(i) + dgamm(i) / (gamf - gamc)
493 dfac = (gamma(i) - gamc) / (gamf - gamc)
494 dam(i) = dam(i) + expn * dfac**(expn-one) * dgamm(i) / (gamf - gamc)
496 IF (dam(i) >= one)
THEN
505 dmg_scale(i) = one - dam(i)
514 WRITE(iout, 1000) ngl(indf(ii))
515 WRITE(istdo,1100) ngl(indf(ii)),time
516#include "lockoff.inc"
520 1000
FORMAT(1x,
'START DAMAGE IN SOLID ELEMENT NUMBER ',i10)
521 1100
FORMAT(1x,
'START DAMAGE IN SOLID ELEMENT NUMBER ',i10,1x,
' AT TIME :',g11.4)