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,a1h,a2h,as,d1c,d2c,d1f,d2f,d_trx,d_jc,dm,expn
70
72
73 my_real facr,triax,rvoce,fdp,i1p,ip,jp,tp,fact,facd,dfac,dtinv,
74 . dlam,ddep,dfdlam,dfdpla
75 . gamc
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,a1,a2,yld,phi,dam,fdam,jcrate,
78 . sxx,syy,szz,sxy,syz,szx,dpla,jcr_log,gamma,gammav,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 a1h = uparam(11)
137 a2h = uparam(12)
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
178 DO i = 1,nel
179 IF (off(i) < 0.001) off(i) = zero
180 IF (off(i) < one) off(i) = off
181 IF (off(i) == one) THEN
182 signxx(i) = sigoxx(i) + c11*depsxx(i) + c12*(depsyy(i) + depszz(i))
183 signyy(i) = sigoyy(i) + c11*depsyy(i) + c12*(depsxx(i) + depszz(i))
184 signzz(i) = sigozz(i) + c11*depszz(i) + c12*(depsxx(i) + depsyy(i))
185 signxy(i) = sigoxy(i) + depsxy(i)*g
186 signyz(i) = sigoyz(i) + depsyz(i)*g
187 signzx(i) = sigozx(i) + depszx(i)*g
188 i1(i) = signxx(i) + signyy(i) + signzz(i)
189
190 sxx(i) = signxx(i) - i1(i) * third
191 syy(i) = signyy(i) - i1(i) * third
192 szz(i) = signzz(i) - i1(i) * third
193 sxy(i) = signxy(i)
194 syz(i) = signyz(i)
195 szx(i) = signzx(i)
196 j2(i) = (sxx(i)**2 + syy(i)**2 + szz(i)**2)*half
197 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
198 END IF
199 ENDDO
200
201 jcr_log(1:nel) = zero
202 jcrate(1:nel) = one
203 IF (epsdref > zero) THEN
204 IF (inloc == 1) THEN
205 jcr_log(1:nel) = log(dpdt_nl(1:nel) / epsdref)
206 jcrate(1:nel) = one + cc * jcr_log(1:nel)
207 ELSE
208 DO i = 1,nel
209 IF (off(i) == one) THEN
210 epsd(i) = (epspxx(i)**2 + epspyy(i)**2 + epspzz(i)**2 )*two
211 . + epspxy(i)**2 + epspyz(i)**2 + epspzx(i)**2
212 epsd(i) =
min(sqrt(epsd(i)) ,epsdmax)
213 epsd(i) =
alpha*epsd(i) + alphai*uvar(i,3)
214 uvar(i,3) = epsd(i)
215 IF (epsd(i) > epsdref) THEN
216 jcr_log(i) = log(epsd(i) / epsdref)
217 jcrate(i) = one + cc * jcr_log(i)
218 END IF
219 END IF
220 ENDDO
221 END IF
222 END IF
223
224
225
226 DO i = 1,nel
227 rvoce = qq*(one - exp(-beta*pla(i))) + hh*pla(i)
228 yld(i)= (yld0 + rvoce) * jcrate(i)
229 a1(i) = a1f + a1h * pla(i)
230 a2(i) =
max(zero, a2f + a2h * pla(i))
231 fdp = third*(sqr3*yld0*a1(i)*i1(i) + a2(i)*
max(zero,i1(i))**2)
232 phi(i)= j2(i) + fdp - yld(i)**2
233 ENDDO
234
235
236
237 nindx = 0
238 nindf = 0
239 DO i = 1,nel
240 IF (phi(i) > zero .and. off(i) == one) THEN
241 nindx = nindx + 1
242 indx(nindx) = i
243 END IF
244 ENDDO
245
246 DO ii = 1,nindx
247 i = indx(ii)
248 dpla(i) = zero
249 i1p =
max(zero,i1(i))
250 niter = 4
251
252 DO iter = 1,niter
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 = third*(sqr3*yld0*a1(i) + two*a2(i)*i1p)
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 dfdpla = third*(sqr3*a1h*yld0*i1(i) + a2h*i1p**2)
281
282 dpla_dlam = two*sqrt((j2(i) + tp*as*i1(i)))
283
284 dphi_dlam = dfdlam + (dfdpla - two*yld(i)*dyld_dpla)*dpla_dlam
285
286 dlam = -phi(i) / dphi_dlam
287
288
289 dpxx = dlam*np_xx
290 dpyy = dlam*np_yy
291 dpzz = dlam*np_zz
292 dpxy = dlam*np_xy
293 dpyz = dlam*np_yz
294 dpzx = dlam*np_zx
295
296 signxx(i) = signxx(i) - (c11*dpxx + c12*(dpyy + dpzz))
297 signyy(i) = signyy(i) - (c11*dpyy + c12*(dpxx + dpzz))
298 signzz(i) = signzz(i) - (c11*dpzz + c12*(dpxx + dpyy))
299 signxy(i) = signxy(i) - g2*dpxy
300 signyz(i) = signyz(i) - g2*dpyz
301 signzx(i) = signzx(i) - g2*dpzx
302
303
304 ddep = dlam * dpla_dlam
305 dpla(i)=
max(zero, dpla(i) + ddep)
306 pla(i) = pla(i) + ddep
307
308
309
310 i1(i) = signxx(i) + signyy(i) + signzz(i)
311 i1p =
max(zero, i1(i))
312 sxx(i) = signxx(i) - i1(i)*third
313 syy(i) = signyy(i) - i1(i)*third
314 szz(i) = signzz(i) - i1(i)*third
315 sxy(i) = signxy(i)
316 syz(i) = signyz(i)
317 szx(i) = signzx(i)
318 j2(i) =(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) * half
319 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
320 rvoce = qq*(one - exp(-beta*pla(i))) + hh*pla(i)
321 yld(i) = (yld0 + rvoce) * jcrate(i)
322 a1(i) = a1f + a1h * pla(i)
323 a2(i) =
max(zero, a2f + a2h * pla(i))
324 fdp = third*(sqr3*yld0*a1(i)*i1(i) + a2(i)*i1p**2)
325 phi(i) = j2(i) + fdp - yld(i)**2
326 END DO
327
328
329 uvar(i,4) = phi(i) / yld0**2
330 ENDDO
331
332
333
334 IF (idam > 0) THEN
335 IF (idam == 1) THEN
336 IF (inloc == 1) THEN
337 dgamm(1:nel) = dplanl(1:nel)
338 gamma(1:nel) = pla_nl(1:nel)
339 ELSE
340 dgamm(1:nel) = dpla(1:nel)
341 gamma(1:nel) = pla(1:nel)
342 END IF
343 ELSE
344 IF (inloc == 1) THEN
345 dgamm(1:nel) = dplanl(1:nel) * dmg_scale(1:nel)
346 uvar(1:nel,1) = uvar(1:nel,1) + dgamm(1:nel)
347 gamma(1:nel) = uvar(1:nel,1)
348 ELSE
349 dgamm(1:nel) = dpla(1:nel) * dmg_scale(1:nel)
350 uvar(1:nel,1) = uvar(1:nel,1) + dgamm(1:nel)
351 gamma(1:nel) = uvar(1:nel,1)
352 END IF
353 END IF
354
355 DO i = 1,nel
356
357 triax = zero
358 fact = one
359 facr = one + d_jc * jcr_log(i)
360 IF ( j2(i)/= zero)triax = third * i1(i) / sqrt(three*j2(i))
361 IF (itrx == 1 ) THEN
362 fact = exp(-d_trx*triax)
363 ELSE
364 IF (triax > zero )fact = exp(-d_trx*triax)
365 ENDIF
366 gamc = (d1c + d2c * fact) * facr
367 gamf = (d1f + d2f * fact) * facr
368 IF (gamma(i) > gamc) THEN
369 IF (dam(i) == zero) THEN
370 nindf = nindf + 1
371 indf(nindf) = i
372 END IF
373 IF (expn == one) THEN
374 dam(i) = dam(i) + dgamm(i) / (gamf - gamc)
375 ELSE
376 dfac = (gamma(i) - gamc) / (gamf - gamc)
377 dam(i) = dam(i) + expn * dfac**(expn-one) * dgamm(i) / (gamf - gamc)
378 END IF
379 IF (dam(i) >= one) THEN
380 dam(i) = one
381 off(i) = four_over_5
382 END IF
383 dmg(i) = dam(i)
384 END IF
385 ENDDO
386
387 DO i = 1, nel
388 dmg_scale(i) = one - dam(i)
389 END DO
390 END IF
391
392 soundsp(1:nel) = ssp
393
394 IF (nindf > 0) THEN
395 DO ii=1,nindf
396#include "lockon.inc"
397 WRITE(iout, 1000) ngl(indf(ii))
398 WRITE(istdo,1100) ngl(indf(ii)),time
399#include "lockoff.inc"
400 ENDDO
401 END IF
402
403 1000 FORMAT(1x,'START DAMAGE IN SOLID ELEMENT NUMBER ',i10)
404 1100 FORMAT(1x,'START DAMAGE IN SOLID ELEMENT NUMBER ',i10,1x,' AT TIME :',g11.4)
405
406 RETURN