36
37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "param_c.inc"
45#include "comlock.inc"
46#include "units_c.inc"
47
48
49
50 INTEGER,INTENT(IN) ::
51 . NEL,NUPARAM,NUVAR,NGL(NEL)
53 . time,timestep,uparam(nuparam),rho0(nel),rho(nel),
54 . depsxx(nel),depsyy(nel),depszz(nel),
55 . depsxy(nel),depsyz(nel),depszx(nel),
56 . sigoxx(nel),sigoyy(nel),sigozz(nel),
57 . sigoxy(nel),sigoyz(nel),sigozx(nel),
58 . epsd(nel),amu(nel)
59
60
61
63 . sigy(nel),dpla(nel),soundsp(nel),
64 . signxx(nel),signyy(nel),signzz(nel),
65 . signxy(nel),signyz(nel),signzx(nel)
66
67
68
70 . uvar(nel,nuvar),off(nel),dmg(nel),
71 . defp(nel),et(nel)
72
73
74
75 INTEGER I,J,NINDX,INDX(NEL),IDEL
77 . g , g2 , aa , bb , mm ,
78 . nn , cc , eps0 , sigfmax,
79 . tstar , phel , shel , beta ,
80 . d1 , d2 , epsmax, k1 , k2 , k3
82 . mu(nel),mu2(nel),pold(nel),vm(nel),
83 . deltap(nel),pnew(nel),pstar(nel),scale(nel),
84 . sigyi(nel),sigyf(nel),sigyold(nel),dmg_old(nel)
86 . dav, ce, sigstar, epfail, p1, yield, deltau, dpdmu,
87 . pmin, ratio, j2
88
89
90
91
92
93 g = uparam(1)
94 g2 = uparam(2)
95 aa = uparam(3)
96 bb = uparam(4)
97 mm = uparam(5)
98 nn = uparam(6)
99 cc = uparam(7)
100 eps0 = uparam(8)
101 sigfmax = uparam(9)
102 tstar = uparam(10)
103 phel = uparam(11)
104 shel = uparam(12)
105 d1 = uparam(13)
106 d2 = uparam(14)
107 k1 = uparam(15)
108 k2 = uparam(16)
109 k3 = uparam(17)
110 beta = uparam(18)
111 idel = nint(uparam(19))
112 epsmax = uparam(20)
113
114
115 DO i=1,nel
116 IF (off(i) < em01) off(i) = zero
117 IF (off(i) < one) off(i) = off(i)*four_over_5
118 deltap(i) = uvar(i,1)
119 sigyold(i) = uvar(i,2)/shel
120 dmg_old(i) = dmg(i)
121 mu(i) = amu(i)
122 mu2(i) = mu(i)*mu(i)
123 ENDDO
124
125
126 ! - computation of elastic deviatoric stresses and equivalent stress
127
128 DO i=1,nel
129 dav = (depsxx(i)+depsyy(i)+depszz(i))*third
130 pold(i) = -(sigoxx(i)+sigoyy(i)+sigozz(i))*third
131 signxx(i) = sigoxx(i)+pold(i)+g2*(depsxx(i)-dav)
132 signyy(i) = sigoyy(i)+pold(i)+g2*(depsyy(i)-dav)
133 signzz(i) = sigozz(i)+pold(i)+g2*(depszz(i)-dav)
134 signxy(i) = sigoxy(i)+g*depsxy(i)
135 signyz(i) = sigoyz(i)+g*depsyz(i)
136 signzx(i) = sigozx(i)+g*depszx(i)
137 j2 = half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)
138 . +signxy(i)**2+signyz(i)**2+signzx(i)**2
139 vm(i) = sqrt(three*j2)
140 ENDDO
141
142
143
144
145 DO i=1,nel
146 pnew(i) = k1*mu(i) + deltap(i)
147 IF (mu(i) > zero) THEN
148 pnew(i) = pnew(i) + k2*mu2(i) + k3*mu2(i)*mu(i)
149 ELSEIF (idel /= 1) THEN
150 pmin=-tstar*phel*(one-dmg(i))
151 pnew(i)=
max(pnew(i),pmin)
152 ENDIF
153 pstar(i) = pnew(i)/phel
154 ENDDO
155
156
157
158
159 DO i=1,nel
160 IF (nn == zero) THEN
161 sigyi(i) = aa
162 ELSEIF ((pstar(i)+tstar) > zero) THEN
163 sigyi(i) = aa*(pstar(i)+tstar)**nn
164 ELSE
165 sigyi(i) = zero
166 ENDIF
167
168 IF (mm == zero) THEN
169 sigyf(i) = bb
170 ELSEIF (pstar(i) > zero) THEN
171 sigyf(i) = bb*(pstar(i))**mm
172 ELSE
173 sigyf(i) = zero
174 ENDIF
175
176 IF (epsd(i)<=eps0) THEN
177 ce = one
178 ELSE
179 ce = one + cc*log(epsd(i)/eps0)
180 ENDIF
181
182 sigyi(i) = ce*sigyi(i)
183 sigyf(i) = ce*sigyf(i)
184 sigyf(i) =
min(sigyf(i),sigfmax)
185 sigy(i) = (one-dmg(i))*sigyi(i)+dmg(i)*sigyf(i)
186 ENDDO
187
188
189
190
191 DO i=1,nel
192 IF (off(i) == one) THEN
193 sigstar = vm(i)/shel
194 IF (sigstar < sigy(i)) THEN
195 scale(i) = one
196 ELSEIF (vm(i) > zero) THEN
197 scale(i) = sigy(i)/sigstar
198 ELSE
199 scale(i) = zero
200 ENDIF
201 signxx(i) = scale(i)*signxx(i)
202 signyy(i) = scale(i)*signyy(i)
203 signzz(i) = scale(i)*signzz(i)
204 signxy(i) = scale(i)*signxy(i)
205 signyz(i) = scale(i)*signyz(i)
206 signzx(i) = scale(i)*signzx(i)
207 ENDIF
208 ENDDO
209
210
211
212
213 nindx = 0
214 indx(1:nel) = 0
215 DO i=1,nel
216 IF (off(i) == one) THEN
217
218
219 IF (d2 == zero) THEN
220 epfail = d1
221 ELSEIF ((pstar(i)+tstar) >= zero) THEN
222 epfail = d1*(pstar(i)+tstar)**d2
223 ELSE
224 epfail = zero
225 ENDIF
226
227
228
229 IF (epfail > zero) THEN
230 dpla(i) = (one - scale(i))*vm(i)/(three*sqrt(three)*g)
231 defp(i) = defp(i) + dpla(i)
232 dmg(i) = dmg(i) + dpla(i)/epfail
233 dmg(i) =
min(dmg(i),one)
234
235 ELSEIF (scale(i)<one) THEN
236 dmg(i) = one
237 ENDIF
238
239
240 IF (idel == 1) THEN
241 IF ((pstar(i)+tstar) < zero) THEN
242 off(i) = four_over_5
243 nindx = nindx + 1
244 indx(nindx) = i
245 ENDIF
246 ELSEIF (idel == 2) THEN
247 IF (defp(i) > epsmax) THEN
248 off(i) = four_over_5
249 nindx = nindx + 1
250 indx(nindx) = i
251 ENDIF
252 ELSEIF (idel == 3) THEN
253 IF (dmg(i) == one) THEN
254 off(i) = four_over_5
255 nindx = nindx + 1
256 indx(nindx) = i
257 ENDIF
258 ENDIF
259 ENDIF
260 ENDDO
261
262
263
264
265 DO i=1,nel
266 IF ((dmg(i) > dmg_old(i)).AND.(mu(i) > zero).AND.(off(i) == one)) THEN
267 p1 = k1*mu(i)
268 yield = (one-dmg(i))*sigyi(i)+dmg(i)*sigyf(i)
269 deltau = (sigyold(i)*sigyold(i)-yield*yield)/(six*g)
270 IF (deltau > zero) THEN
271 deltau = deltau*shel*shel
272 deltap(i) = -p1+
273 . sqrt((deltap(i)+p1)**2+two*beta*k1*deltau)
274 ENDIF
275 ENDIF
276 ENDDO
277
278
279
280
281 DO i=1,nel
282 uvar(i,1) = deltap(i)
283 uvar(i,2) = sigy(i)*shel
284 signxx(i) = signxx(i)-pnew(i)
285 signyy(i) = signyy(i)-pnew(i)
286 signzz(i) = signzz(i)-pnew(i)
287 IF (mu(i) > zero) THEN
288 dpdmu = k1+two*k2*mu(i)+three*k3*mu2(i)
289 ELSE
290 dpdmu = k1
291 ENDIF
292 soundsp(i) = sqrt((dpdmu+four_over_3*g)/rho0(i))
293 et(i) = one
294 ENDDO
295
296
297
298
299 IF (nindx>0)THEN
300 DO j=1,nindx
301#include "lockon.inc"
302 WRITE(iout, 1000) ngl(indx(j)),time
303 WRITE(istdo,1000) ngl(indx(j)),time
304#include "lockoff.inc"
305 ENDDO
306 ENDIF
307
308 1000 FORMAT(1x,'-- RUPTURE (J-HOLMQUIST) OF SOLID ELEMENT :',i10,' AT TIME :',1pe12.4)
309