36
37
38
39#include "implicit_f.inc"
40
41
42
43#include "units_c.inc"
44#include "comlock.inc"
45
46
47
48 INTEGER :: NEL,NUPARAM,NUVAR,INLOC
50 INTEGER ,DIMENSION(NEL) ,INTENT(IN) :: NGL
51 my_real ,
DIMENSION(NUPARAM),
INTENT(IN) :: uparam
52 my_real ,
DIMENSION(NEL) ,
INTENT(IN) ::
53 . epspxx,epspyy,epspzz,epspxy,epspyz,epspzx,
54 . depsxx,depsyy,depszz,depsxy,depsyz,depszx,
55 . sigoxx,sigoyy,sigozz,sigoxy,sigoyz,sigozx
56
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
62
63
64
65 INTEGER :: I,II,ITER,NITER,NINDX,NINDF,ITRX,IDAM
66 INTEGER ,DIMENSION(NEL) :: INDX,INDF
67
68 my_real :: young,nu,ssp,g,g2,bulk,yld0,qq,beta,hh,c11,c12,
69 . a1f,a2f,as,d1c,d2c,d1f,d2f,d_trx,d_jc,dm,expn
70
72
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125 young = uparam(1)
126 nu = uparam(2)
127 g = uparam(3)
128 bulk = uparam(4)
129
130 yld0 = uparam(5)
131 qq = uparam(6)
132 beta = uparam(7)
133 hh = uparam(8)
134 a1f = uparam(9)
135 a2f = uparam(10)
136
137
138 as = uparam(13)
139
140 d1c = uparam(14)
141 d2c = uparam(15)
142 d1f = uparam(16)
143 d2f = uparam(17)
144 d_trx = uparam(18)
145 d_jc = uparam(19)
146 expn = uparam(20)
147
148 cc = uparam(21)
149 epsdref = uparam(22)
150 epsdmax = uparam(23)
151 fcut = uparam(24)
152
153 itrx = nint(uparam(26))
154 idam = nint(uparam(27))
155 ssp = uparam(28)
156 c11 = uparam(32)
157 c12 = uparam(33)
158
159 g2 = g * two
162
163 IF (inloc > 0) THEN
164 dtinv = one /
max(timestep, em20)
165 DO i = 1,nel
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)
169 ENDDO
170 ENDIF
171
172
173
174 dam(1:nel) = dmg(1:nel)
175 dpla(1:nel) = zero
176
177 DO i = 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
188
189 sxx(i) = signxx(i) - i1(i) * third
190 syy(i) = signyy(i) - i1(i) * third
191 szz(i) = signzz(i) - i1(i) * third
192 sxy(i) = signxy(i)
193 syz(i) = signyz(i)
194 szx(i) = signzx(i)
195 j2(i) = (sxx(i)**2 + syy(i)**2 + szz(i)**2)*half
196 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
197 END IF
198 ENDDO
199
200 jcr_log(1:nel) = zero
201 jcrate(1:nel) = one
202 IF (epsdref > zero) THEN
203 IF (inloc == 1) THEN
204 jcr_log(1:nel) = log(dpdt_nl(1:nel) / epsdref)
205 jcrate(1:nel) = one + cc * jcr_log(1:nel)
206 ELSE
207 DO i = 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)
213 uvar(i,3) = epsd(i)
214 IF (epsd(i) > epsdref) THEN
215 jcr_log(i) = log(epsd(i) / epsdref)
216 jcrate(i) = one + cc * jcr_log(i)
217 END IF
218 END IF
219 ENDDO
220 END IF
221 END IF
222
223
224
225 DO i = 1,nel
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)
231 ENDDO
232
233
234
235 nindx = 0
236 nindf = 0
237 DO i = 1,nel
238 IF (phi(i) > zero .and. off(i) == one) THEN
239 nindx = nindx + 1
240 indx(nindx) = i
241 END IF
242 ENDDO
243
244 DO ii = 1,nindx
245 i = indx(ii)
246 dpla(i) = zero
247 i1p =
max(zero, i1(i))
248 fvm =
max(zero, i1(i) + half*sqr3*a1f*yld0 / a2f)
249 niter = 4
250
251 DO iter = 1,niter
252
253
254 jp = third * as * i1p
255 tp = two * jp
256
257 np_xx = sxx(i) + tp
258 np_yy = syy(i) + tp
259 np_zz = szz(i) + tp
260 np_xy = sxy(i)
261 np_yz = syz(i)
262 np_zx = szx(i)
263
264
265 ip = two_third * a2f * fvm
266 nf_xx = sxx(i) + ip
267 nf_yy = syy(i) + ip
268 nf_zz = szz(i) + ip
269 nf_xy = sxy(i)
270 nf_yz = syz(i)
271 nf_zx = szx(i)
272
273
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
278
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
282
283 dlam = -phi(i) / dphi_dlam
284
285
286 dpxx = dlam*np_xx
287 dpyy = dlam*np_yy
288 dpzz = dlam*np_zz
289 dpxy = dlam*np_xy
290 dpyz = dlam*np_yz
291 dpzx = dlam*np_zx
292
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
299
300
301 ddep = dlam * dpla_dlam
302 dpla(i)=
max(zero, dpla(i) + ddep)
303 pla(i) = pla(i) + ddep
304
305
306
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
312 sxy(i) = signxy(i)
313 syz(i) = signyz(i)
314 szx(i) = signzx(i)
315 j2(i) =(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) * half
316 . + sxy(i)**2 + syz(i)**2 + szx
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)
322 END DO
323
324 uvar(i,4) = phi(i) / yld0**2
325 ENDDO
326
327
328
329 IF (idam > 0) THEN
330 IF (idam == 1) THEN
331 IF (inloc == 1) THEN
332 dgamm(1:nel) = dplanl(1:nel)
333 gamma(1:nel) = pla_nl(1:nel)
334 ELSE
335 dgamm(1:nel) = dpla(1:nel)
336 gamma(1:nel) = pla(1:nel)
337 END IF
338 ELSE
339 IF (inloc == 1) THEN
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)
343 ELSE
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)
347 END IF
348 END IF
349
350 DO i = 1,nel
351
352 triax = zero
353 fact = one
354 facr = one + d_jc * jcr_log(i)
355 IF ( j2(i)/= zero)triax = third * i1(i) / sqrt(three*j2(i))
356 IF (itrx == 1 ) THEN
357 fact = exp(-d_trx*triax)
358 ELSE
359 IF (triax > zero )fact = exp(-d_trx*triax)
360 ENDIF
361 gamc = (d1c + d2c * fact) * facr
362 gamf = (d1f + d2f * fact) * facr
363 IF (gamma(i) > gamc) THEN
364 IF (dam(i) == zero) THEN
365 nindf = nindf + 1
366 indf(nindf) = i
367 END IF
368 IF (expn == one) THEN
369 dam(i) = dam(i) + dgamm(i) / (gamf - gamc)
370 ELSE
371 dfac = (gamma(i) - gamc) / (gamf - gamc)
372 dam(i) = dam(i) + expn * dfac**(expn-one) * dgamm(i) / (gamf - gamc)
373 END IF
374 IF (dam(i) >= one) THEN
375 dam(i) = one
376 off(i) = four_over_5
377 END IF
378 dmg(i) = dam(i)
379 END IF
380 ENDDO
381
382 DO i = 1, nel
383 dmg_scale(i) = one - dam(i)
384 END DO
385 END IF
386
387 soundsp(1:nel) = ssp
388
389 IF (nindf > 0) THEN
390 DO ii=1,nindf
391#include "lockon.inc"
392 WRITE(iout, 1000) ngl(indf(ii))
393 WRITE(istdo,1100) ngl(indf(ii)),time
394#include "lockoff.inc"
395 ENDDO
396 END IF
397
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.4)
400
401 RETURN