37
38
39
40#include "implicit_f.inc"
41#include "comlock.inc"
42
43
44
45#include "mvsiz_p.inc"
46
47#include "scr17_c.inc"
48#include "com01_c.inc"
49#include "com08_c.inc"
50#include "units_c.inc"
51
52 INTEGER NEL,NUPARAM,NUVAR,IPT,NGL(NEL),INLOC
54 . time,timestep,uparam(nuparam),
55 . rho(nel),rho0(nel),
56 . depsxx(nel),depsyy(nel),depszz(nel),
57 . depsxy(nel),depsyz(nel),depszx(nel),
58 . sig0xx(nel),sig0yy(nel),sig0zz(nel),
59 . sig0xy(nel),sig0yz(nel),sig0zx(nel)
60
61
62
64 . signxx(nel),signyy(nel),signzz(nel),
65 . signxy(nel),signyz(nel),signzx(nel),
66 . soundsp(nel),yld(nel),etse(nel),dpla(nel)
67
68
69
71 . uvar(nel,nuvar),off(nel),pla(nel),seq(nel),
72 . dmg(nel),dplanl(nel)
73
74
75
76 INTEGER I,II,J,NINDX,INDX(MVSIZ),NITER,ITER
78 . e,nu,g,g2,a1,a2,bulk,lamhook,
79 . sigy,eps0,nexpo,
80 . ff,gg,hh,nn,ll,mm,
81 . c1,c2,c3,dc,mexp
83 . cc(mvsiz),dam(mvsiz),beta(mvsiz),
84 . p,sd11,sd22,sd33,
85 . f1,f2,f3,epsf,det,svm,theta,cos3theta,eta,
86 . sighl(mvsiz),h(mvsiz),dav,
87 . phi(mvsiz),normxx,normyy,normzz,
88 . normxy,normzx,normyz,dpxx(mvsiz),dpyy(mvsiz),
89 . dpzz(mvsiz),dpxy(mvsiz),dpzx(mvsiz),dpyz(mvsiz),
90 . sig_dfdsig,dfdsig2,dphi_dlam(mvsiz),dpla_dlam(mvsiz),
91 . dlam,ddep
92
93
94
95
96 e = uparam(1)
97 nu = uparam(2)
98 g = uparam(3)
99 g2 = uparam(4)
100 a1 = uparam(7)
101 a2 = uparam(8)
102 bulk = uparam(9)
103 lamhook = uparam(10)
104
105 sigy = uparam(11)
106 eps0 = uparam(12)
107 nexpo = uparam(13)
108
109 ff = uparam(14)
110 gg = uparam(15)
111 hh = uparam(16)
112 nn = uparam(17)
113 ll = uparam(18)
114 mm = uparam(19)
115
116 c1 = uparam(20)
117 c2 = uparam(21)
118 c3 = uparam(22)
119 mexp = uparam(23)
120 dc = uparam(24)
121
122
123 IF (isigi == 0) THEN
124 IF (time == zero) THEN
125 DO i=1,nel
126 uvar(i,1) = zero
127 ENDDO
128 ENDIF
129 ENDIF
130
131
132 DO i=1,nel
133
134 IF (off(i) < one) off(i) = four_over_5*off(i)
135 IF (off(i) < em01) off(i) = zero
136
137 etse(i) = one
138 h(i) = zero
139
140 dpla(i) = zero
141 dpxx(i) = zero
142 dpyy(i) = zero
143 dpzz(i) = zero
144 dpxy(i) = zero
145 dpyz(i) = zero
146 dpzx(i) = zero
147
148 dam(i) = uvar(i,1)
149 ENDDO
150
151
152 DO i = 1,nel
153
154 beta(i) = one
155 IF (off(i) == one) THEN
156 IF ((dam(i) <= dc) .AND. (dam(i) >= one)) THEN
157 beta(i) = one/(
max(dc - one,em20))
158 beta(i) = (dc - dam(i))*beta(i)
159 beta(i) = beta(i)**mexp
160 ENDIF
161 ENDIF
162
163 cc(i) = pla(i) + eps0
164 yld(i) = beta(i)*sigy*exp(nexpo*log(cc(i)))
165 yld(i) =
max(yld(i), em10)
166 ENDDO
167
168
169
170
171 DO i = 1,nel
172
173
174 dav = (depsxx(i) + depsyy(i) + depszz(i)) * lamhook
175 signxx(i) = sig0xx(i) + depsxx(i)*g2 + dav
176 signyy(i) = sig0yy(i) + depsyy(i)*g2 + dav
177 signzz(i) = sig0zz(i) + depszz(i)*g2 + dav
178 signxy(i) = sig0xy(i) + depsxy(i)*g
179 signyz(i) = sig0yz(i) + depsyz(i)*g
180 signzx(i) = sig0zx(i) + depszx(i)*g
181
182
183 sighl(i) = ff*(signyy(i) - signzz(i))**2 + gg*(signzz(i) - signxx(i))**2 +
184 . hh*(signxx(i) - signyy(i))**2 + two*ll*signyz(i)**2 +
185 . two*mm*signzx(i)**2 + two*nn*signxy(i)**2
186 sighl(i) = sqrt(
max(zero,sighl(i)))
187
188 ENDDO
189
190
191
192
193 phi(1:nel) = sighl(1:nel) - yld(1:nel)
194
195 nindx = 0
196 indx = 0
197 DO i=1,nel
198 IF ((phi(i)>zero).AND.(off(i) == one)) THEN
199 nindx = nindx+1
200 indx(nindx) = i
201 ENDIF
202 ENDDO
203
204
205
206
207
208
209 niter = 3
210
211
212 DO iter = 1, niter
213#include "vectorize.inc"
214
215 DO ii=1,nindx
216 i = indx(ii)
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231 normxx = (gg*(signxx(i)-signzz(i)) + hh*(signxx(i)-signyy(i)))/(
max(sighl(i),em20))
232 normyy = (ff*(signyy(i)-signzz(i)) + hh*(signyy(i)-signxx(i)))/(
max(sighl(i),em20))
233 normzz = (ff*(signzz(i)-signyy(i)) + gg*(signzz(i)-signxx(i)))/(
max(sighl(i),em20))
234 normxy = two*nn*signxy(i)/(
max(sighl(i),em20))
235 normyz = two*ll*signyz(i)/(
max(sighl(i),em20))
236 normzx = two*mm*signzx(i)/(
max(sighl(i),em20))
237
238
239
240
241
242
243 dfdsig2 = normxx * normxx * g2
244 . + normyy * normyy * g2
245 . + normzz * normzz * g2
246 . + normxy * normxy * g
247 . + normyz * normyz * g
248 . + normzx * normzx * g
249
250
251
252
253
254
255 h(i) = beta(i)*nexpo*sigy*exp((nexpo-1)*log(cc(i)))
256
257
258
259 sig_dfdsig = signxx(i) * normxx
260 . + signyy(i) * normyy
261 . + signzz(i) * normzz
262 . + signxy(i) * normxy
263 . + signyz(i) * normyz
264 . + signzx(i) * normzx
265 dpla_dlam(i) = sig_dfdsig /
max(yld(i),em20)
266
267
268
269
270
271 dphi_dlam(i) = - dfdsig2 - h(i)*dpla_dlam(i)
272 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20) ,dphi_dlam(i))
273
274
275 dlam = -phi(i)/dphi_dlam(i)
276
277
278 dpxx(i) = dlam * normxx
279 dpyy(i) = dlam * normyy
280 dpzz(i) = dlam * normzz
281 dpxy(i) = dlam * normxy
282 dpyz(i) = dlam * normyz
283 dpzx(i) = dlam * normzx
284
285
286 signxx(i) = signxx(i) - dpxx(i)*g2
287 signyy(i) = signyy(i) - dpyy(i)*g2
288 signzz(i) = signzz(i) - dpzz(i)*g2
289 signxy(i) = signxy(i) - dpxy(i)*g
290 signyz(i) = signyz(i) - dpyz(i)*g
291 signzx
292
293
294 ddep = dlam*dpla_dlam(i)
295 dpla(i) =
max(zero, dpla(i) + ddep)
296 pla(i) =
max(pla(i) + ddep,zero)
297
298
299 cc(i) = pla(i) + eps0
300 yld(i) = beta(i)*sigy*exp(nexpo*log(cc(i)))
301 yld(i) =
max(yld(i),em10)
302
303 ! update hill equivalent stress
304 sighl(i) = ff*(signyy(i) - signzz(i))**2 + gg*(signzz(i) - signxx(i))**2 +
305 . hh*(signxx(i) - signyy(i))**2 + two*ll*signyz(i)**2 +
306 . two*mm*signzx(i)**2 + two*nn*signxy(i)**2
307 sighl(i) = sqrt(
max(sighl(i),zero))
308
309
310 phi(i) = sighl(i) - yld(i)
311
312 ENDDO
313
314 ENDDO
315
316
317
318
319
320
321 nindx = 0
322 indx = 0
323 DO i=1,nel
324
325 IF (off(i) == one) THEN
326
327 p = third*(signxx(i) + signyy(i) + signzz(i))
328
329 sd11 = signxx(i) - p
330 sd22 = signyy(i) - p
331 sd33 = signzz(i) - p
332 svm = half*(sd11**2 + sd22**2 + sd33**2) +
333 + signxy(i)**2 + signzx(i)**2 + signyz(i)**2
334 svm = sqrt(
max(three*svm,zero))
335
336 det = sd11*sd22*sd33 + two*signxy(i)*signzx(i)*signyz(i)
337 . - sd11*signyz(i)**2-sd33*signxy(i)**2 - sd22*signzx(i)**2
338
339 eta = p/
max(svm,em20)
340 IF (eta < -one) eta = -one
341 IF (eta > one ) eta = one
342
343 cos3theta = half*twenty7*det/
max(em20,svm**3)
344 IF (cos3theta < -one) cos3theta = -one
345 IF (cos3theta > one) cos3theta = one
346 theta = one - two*acos(cos3theta)/pi
347
348
349 f1 = cos(theta*pi/six)
350 f2 = sin(theta*pi/six)
351 f3 = c3 + (sqrt(three)/(two - sqrt(three)))*(one - c3)*(one/
max(f1,em20) - one)
352
353
354 epsf = (sigy/
max(c2,em20))*f3*(f1*sqrt(third*(one + c1**2)) + c1*(eta + f2*third))
355 epsf =
max(epsf,em20)**(-one/nexpo)
356
357
358 IF (inloc > 0) THEN
359 dam(i) = dam(i) +
max(dplanl(i),zero)/
max(epsf,em20)
360 ELSE
361 dam(i) = dam(i) + dpla(i)/
max(epsf,em20)
362 ENDIF
363 IF (dam(i) >= dc) THEN
364 dam(i) = dc
365 off(i) = four_over_5
366 nindx = nindx+1
367 indx(nindx)=i
368 ENDIF
369
370
371 uvar(i,1) = dam(i)
372 ENDIF
373
374 seq(i) = sighl(i)
375
376 dmg(i) = dam(i)/dc
377
378 soundsp(i) = sqrt((bulk + four_over_3*g)/rho0(i))
379
380 IF (dpla(i) > zero) THEN
381 etse(i) = h(i) / (h(i) + e)
382 ELSE
383 etse(i) = one
384 ENDIF
385 ENDDO
386
387
388 IF(nindx>0)THEN
389 DO j=1,nindx
390#include "lockon.inc"
391 WRITE(iout, 1000) ngl(indx(j))
392 WRITE(istdo,1100) ngl(indx(j)),tt
393#include "lockoff.inc"
394 ENDDO
395 ENDIF
396
397 1000 FORMAT(1x,'RUPTURE OF SOLID ELEMENT NUMBER ',i10)
398 1100 FORMAT(1x,'RUPTURE OF SOLID ELEMENT NUMBER ',i10,
399 . ' AT TIME :',g11.4)
400