34 1 NEL ,NGL ,TIME ,TIMESTEP,UPARAM ,OFF ,
35 2 EPSD ,STIFM ,THICK ,JTHE ,
36 3 AREA ,DEPSZZ ,DEPSYZ ,DEPSZX ,NUPARAM ,
37 4 SIGOZZ ,SIGOYZ ,SIGOZX ,SIGNZZ ,SIGNYZ ,SIGNZX ,
38 5 PLA ,JSMS ,DMELS ,UVAR ,NUVAR ,
39 6 NUMTABL ,ITABLE ,TABLE ,NVARTMP ,VARTMP ,TEMP ,DMG)
48#include "implicit_f.inc"
59 INTEGER :: NEL,NUPARAM,NUVAR,JSMS,NUMTABL,NVARTMP,JTHE
60 my_real :: TIME,TIMESTEP
61 INTEGER ,
DIMENSION(NEL) ,
INTENT(IN) :: NGL
62 INTEGER ,
DIMENSION(NUMTABL),
INTENT(IN) :: ITABLE
63 my_real ,
DIMENSION(NUPARAM),
INTENT(IN) :: UPARAM
64 my_real ,
DIMENSION(NEL) ,
INTENT(IN)
66 . sigozz,sigoyz,sigozx,
area
68 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: epsd
69 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) ::
70 . signzz,signyz,signzx
71 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: off,pla,stifm,dmels,dmg
72 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: uvar
73 INTEGER ,
DIMENSION(NEL,NVARTMP) ,
INTENT(INOUT) :: VARTMP
74 TYPE(
ttable) ,
DIMENSION(NTABLE) ,
INTENT(IN) ::
78 INTEGER :: I,II,ITER,NITER,NINDX,NINDF,ITRX,IDAM
79 my_real :: xscale,yscale
80 INTEGER :: (,1), IPOS2(NEL,2), IPOS3(NEL,3)
81 INTEGER :: NDIM_YLD,FUNC_YLD
82 my_real :: XVEC1(NEL,1), XVEC2(NEL,2), XVEC3(NEL,3)
83 INTEGER ,
DIMENSION(NEL) :: INDX,INDF
85 my_real :: young,nu,g,g2,bulk,yld0,qq,beta,hh,c11,c12,
86 . a1f,a2f,as,d1c,d2c,d1f
88 my_real cc,epsdref,epsdmax,frate,fcut,
alpha,alphai,epsdot
90 my_real facr,triax,rvoce,i1p,ip,jp,tp,fact,facd,dfac,dtinv,
91 . dlam,ddep,dfdlam,dyld_dpla,dpla_dlam,dphi_dlam,dtb,
92 . gamc,gamf,np_xx,np_yy,np_zz,np_xy,np_yz,np_zx,
93 . nf_xx,nf_yy,nf_zz,nf_xy,nf_yz,nf_zx,dpxx,dpyy,dpzz,dpxy,dpyz,dpzx
94 my_real ,
DIMENSION(NEL) :: i1,j2,yld,phi,dam,fdam,jcrate,stf,hardp,hardp_i,fvm,
95 . sxx,syy,szz,sxy,syz,szx,dpla,jcr_log,gamma,dgamm,pla_nl,dpdt_nl,yld_i
126 itrx = nint(uparam(26))
127 idam = nint(uparam(27))
133 ndim_yld = table(func_yld)%NDIM
141 dtinv = one / (
max(timestep, em20))
143 stf(1:nel) = young *
area(1:nel)
144 stifm(1:nel) = stifm(1:nel) + stf(1:nel)*off(1:nel)
146 dam(1:nel) = dmg(1:nel)
148 fdam(1:nel) = one - dam(1:nel)
150 IF (off(i) < 0.001) off(i) = zero
151 IF (off(i) < one) off(i) = off(i)*four_over_5
152 IF (off(i) == one)
THEN
153 signzz(i) = sigozz(i)/fdam(i) + (depszz(i) /thick(i) )*young
154 signyz(i) = sigoyz(i)/fdam(i) + (depsyz(i) /thick(i) )*g
155 signzx(i) = sigozx(i)/fdam(i) + (depszx(i) /thick(i) )*g
158 sxx(i) = - i1(i) * third
159 syy(i) = - i1(i) * third
160 szz(i) = signzz(i) - i1(i) * third
163 j2(i) = (sxx(i)**2 + syy(i)**2 + szz(i)**2)*half
164 . + syz(i)**2 + szx(i)**2
171 IF (off(i) == one)
THEN
172 epsdot = sqrt(depsyz(i)**2 + depszx(i)**2 + depszz(i)**2)
173 epsdot = epsdot * dtinv / thick(i)
174 epsd(i) =
min(epsdot ,epsdmax)
175 epsd(i) =
alpha *epsd(i) + alphai * uvar(i,3)
177 IF (epsd(i) > epsdref)
THEN
178 jcr_log(i) = log(epsd(i) / epsdref)
179 jcrate(i) = one + cc * jcr_log(i)
186 IF (ndim_yld == 1)
THEN
187 xvec1(1:nel,1) = pla(1:nel)
188 ipos1(1:nel,1) = vartmp(1:nel,1)
190 CALL table_vinterp(table(func_yld),nel,nel,ipos1,xvec1,yld,hardp)
192 yld(1:nel) = yld(1:nel) * yscale * jcrate(1:nel)
193 hardp(1:nel) = hardp(1:nel) * yscale * jcrate(1:nel)
194 vartmp(1:nel,1) = ipos1(1:nel,1)
196 ELSE IF (ndim_yld == 2)
THEN
197 xvec2(1:nel,1) = pla(1:nel)
198 xvec2(1:nel,2) = epsd(1:nel)
199 ipos2(1:nel,1) = vartmp(1:nel,1)
202 CALL table_vinterp(table(func_yld),nel,nel,ipos2,xvec2,yld,hardp)
204 yld(1:nel) = yld(1:nel) * yscale
205 hardp(1:nel) = hardp(1:nel) * yscale
206 vartmp(1:nel,1) = ipos2(1:nel,1)
209 xvec3(1:nel,1) = pla(1:nel)
210 xvec3(1:nel,2) = epsd(1:nel)
212 xvec3(1:nel,3) = temp(1:nel)
214 xvec3(1:nel,3) = zero
216 ipos3(1:nel,1) = vartmp(1:nel,1)
220 CALL table_vinterp(table(func_yld),nel,nel,ipos3,xvec3,yld,hardp)
222 yld(1:nel) = yld(1:nel) * yscale
223 hardp(1:nel) = hardp(1:nel) * yscale
224 vartmp(1:nel,1) = ipos3(1:nel,1)
229 fvm(i) =
max(zero, i1(i) + half*sqr3*a1f*yld0 / a2f )
230 phi(i) = j2(i) + third*a2f * fvm(i)**2
231 . - (yld(i)**2 + fourth*(a1f*yld0)**2/a2f)
239 IF (phi(i) > zero .and. off(i) == one)
THEN
257 jp = third * as * i1p
267 ip = two_third * a2f * fvm(i)
275 dfdlam = - nf_zz * (young * np_zz)
276 . -( nf_yz*np_yz + nf_zx*np_zx)*two*g2
279 dphi_dlam = dfdlam - two*yld(i)*hardp(i)*dpla_dlam
281 dlam = -phi(i) / dphi_dlam
290 signzz(i) = signzz(i) - young*dpzz
291 signyz(i) = signyz(i) - g2*dpyz
292 signzx(i) = signzx(i) - g2*dpzx
295 ddep = dlam * dpla_dlam
296 dpla(i)=
max(zero, dpla(i) + ddep)
297 pla(i) = pla(i) + ddep
303 IF (ndim_yld == 1)
THEN
307 ipos1(ii,1) = vartmp(i,1)
310 CALL table_vinterp(table(func_yld),nel,nel,ipos1,xvec1,yld_i,hardp_i)
314 yld(i) = yld_i(ii)*yscale
315 hardp(i) = hardp_i(ii)*yscale
316 vartmp(i,1) = ipos1(ii,1)
319 ELSE IF (ndim_yld == 2)
THEN
323 xvec2(ii,2) = epsd(i)
324 ipos2(ii,1) = vartmp(i,1)
327 CALL table_vinterp(table(func_yld),nel,nindx,ipos2,xvec2,yld_i,hardp_i)
331 yld(i) = yld_i(ii)*yscale
332 hardp(i) = hardp_i(ii)*yscale
333 vartmp(i,1) = ipos2(ii,1)
340 xvec3(ii,2) = epsd(i)
341 xvec3(ii,3) = temp(i)
342 ipos3(ii,1) = vartmp(i,1)
345 CALL table_vinterp(table(func_yld),nel,nel,ipos3,xvec3,yld_i,hardp_i)
349 yld(i) = yld_i(ii)*yscale
350 hardp(i) = hardp_i(ii)*yscale
351 vartmp(i,1) = ipos3(ii,1)
360 sxx(i) = - i1(i)*third
361 syy(i) = - i1(i)*third
362 szz(i) = signzz(i) - i1(i)*third
365 j2(i) =(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) * half
366 . + syz(i)**2 + szx(i)**2
368 phi(i) = j2(i) + third*a2f * fvm(i)**2
369 . - (yld(i)**2 + fourth*(a1f*yld0)**2/a2f)
370 uvar(i,4) = phi(i) / yld(i)**2
381 dgamm(1:nel) = dpla(1:nel)
382 gamma(1:nel) = pla(1:nel)
384 dgamm(1:nel) = dpla(1:nel) * fdam(1:nel)
385 uvar(1:nel,1) = uvar(1:nel,1) + dgamm(1:nel)
386 gamma(1:nel) = uvar(1:nel,1)
394 facr = one + d_jc * jcr_log(i)
395 IF ( j2(i)/= zero)triax = third * i1(i) / sqrt(three*j2(i))
397 fact = exp(-d_trx*triax)
399 IF (triax > zero )fact = exp(-d_trx*triax)
401 gamc = (d1c + d2c * fact) * facr
402 gamf = (d1f + d2f * fact) * facr
403 IF (gamma(i) > gamc)
THEN
404 IF (dam(i) == zero)
THEN
408 IF (expn == one)
THEN
409 dam(i) = dam(i) + dgamm(i) / (gamf - gamc)
411 dfac = (gamma(i) - gamc) / (gamf - gamc)
412 dam(i) = dam(i) + expn * dfac**(expn-one) * dgamm(i) / (gamf - gamc)
414 IF (dam(i) >= one)
THEN
424 signzz(i) = signzz(i) * facd
425 signyz(i) = signyz(i) * facd
426 signzx(i) = signzx(i) * facd
433 WRITE(iout, 1000) ngl(indf(ii))
434 WRITE(istdo,1100) ngl(indf(ii)),time
435#include "lockoff.inc"
439 1000
FORMAT(1x,
'START DAMAGE IN SOLID ELEMENT NUMBER ',i10)
440 1100
FORMAT(1x,
'START DAMAGE IN SOLID ELEMENT NUMBER ',i10,1x,
' AT TIME :',g11.4)
444 IF (idtmins==2 .AND. jsms/=0 )
THEN
445 dtb = (dtmins/dtfacs)**2
447 dmels(i)=
max(dmels(i),half*dtb*stf(i)*off(i))