37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "mvsiz_p.inc"
45
46
47
48#include "com01_c.inc"
49
50
51
52
53 INTEGER NEL,NUPARAM,NUVAR,INLOC
55 . time,timestep(nel),uparam(nuparam),
56 . rho0(nel),thkly(nel),pla(nel),
57 . depsxx(nel),depsyy(nel),
58 . depsxy(nel),depsyz(nel),depszx(nel),
59 . sigoxx(nel),sigoyy(nel),
60 . sigoxy(nel),sigoyz(nel),sigozx(nel),
61 . gs(*),hardm(nel),seq(nel),dmg(nel),
62 . dplanl(nel)
63 my_real,
DIMENSION(NEL),
INTENT(IN) :: loff
64
65
66
68 . signxx(nel),signyy(nel),
69 . signxy(nel),signyz(nel),signzx(nel),
70 . soundsp(nel),etse(nel),dpla(nel)
71
72
73
75 . uvar(nel,nuvar), off(nel),thk(nel),yld(nel)
76
77
78
79 INTEGER I,II,NINDX,INDEX(MVSIZ),NITER,ITER
81 . e,nu,g,a11,a12,
82 . sigy,eps0,nexp,
83 . ff,gg,hh,nn,
84 . c1,c2,c3,mexp,dc
86 . eta,cos3theta,theta,f1,f2,f3,cc(mvsiz),
87 . beta(mvsiz),dam(mvsiz),dezz(mvsiz),
88 . epsf,p,sighl(mvsiz),h(mvsiz),svm(mvsiz),
89 . normxx,normyy,normxy,dpxx(mvsiz),dpyy(mvsiz),
90 . dpzz(mvsiz),dpxy(mvsiz),deelzz(mvsiz),
91 . dpla_dlam(mvsiz),dlam,sig_dfdsig,dfdsig2,
92 . phi(mvsiz),dphi_dlam(mvsiz),ddep
93
94
95
96
97
98 e = uparam(1)
99 nu = uparam(2)
100 g = uparam(3)
101 a11 = uparam(5)
102 a12 = uparam(6)
103
104 sigy = uparam(11)
105 eps0 = uparam(12)
106 nexp = uparam(13)
107
108 ff = uparam(14)
109 gg = uparam(15)
110 hh = uparam(16)
111 nn = uparam(17)
112
113 c1 = uparam(20)
114 c2 = uparam(21)
115 c3 = uparam(22)
116 mexp = uparam(23)
117 dc = uparam(24)
118
119
120 IF (isigi == 0) THEN
121 IF (time == zero) THEN
122 DO i=1,nel
123 uvar(i,1) = zero
124 ENDDO
125 ENDIF
126 ENDIF
127
128
129 DO i=1,nel
130
131 IF (off(i) < one) off(i) = four_over_5*off(i)
132 IF (off(i) < em01) off(i) = zero
133
134 etse(i) = one
135 h(i) = zero
136
137 dpla(i) = zero
138 dpxx(i) = zero
139 dpyy(i) = zero
140 dpzz(i) = zero
141 dpxy(i) = zero
142
143 dam(i) = uvar(i,1)
144 ENDDO
145
146
147 DO i = 1,nel
148
149 beta(i) = one
150 IF (off(i) == one) THEN
151 IF ((dam(i) <= dc) .AND. (dam(i) >= one)) THEN
152 beta(i) = one/(
max(dc - one,em20))
153 beta(i) = (dc - dam(i))*beta(i)
154 beta(i) = beta(i)**mexp
155 ENDIF
156 ENDIF
157
158 cc(i) = pla(i) + eps0
159 yld(i) = beta(i)*sigy*exp(nexp*log(cc(i)))
160 yld(i) =
max(yld(i), em10)
161 ENDDO
162
163
164
165
166 DO i = 1,nel
167
168
169 signxx(i) = sigoxx(i) + a11*depsxx(i)+a12*depsyy(i)
170 signyy(i) = sigoyy(i) + a12*depsxx(i)+a11*depsyy(i)
171 signxy(i) = sigoxy(i) + g*depsxy(i)
172 signyz(i) = sigoyz(i) + gs(i)*depsyz(i)
173 signzx(i) = sigozx(i) + gs(i)*depszx(i)
174
175
176 sighl(i) = (ff+hh)*signyy(i)**2 + (gg+hh)*signxx(i)**2
177 . - two*hh*signxx(i)*signyy(i) + two*nn*signxy(i)**2
178 sighl(i) = sqrt(
max(zero,sighl(i)))
179
180 ENDDO
181
182 !========================================================================
183
184
185 phi(1:nel) = sighl(1:nel) - yld(1:nel)
186
187 nindx = 0
188 index = 0
189 DO i=1,nel
190 IF ((phi(i)>zero).AND.(off(i) == one)) THEN
191 nindx = nindx+1
192 index(nindx) = i
193 ENDIF
194 ENDDO
195
196
197
198
199
200
201 niter = 3
202
203
204 DO iter = 1, niter
205#include "vectorize.inc"
206
207 DO ii=1,nindx
208 i = index(ii)
209
210
211
212
213
214
215
216
217
218
219
220
221
222 normxx = (gg*signxx(i) + hh*(signxx(i)-signyy(i)))/(
max(sighl(i),em20))
223 normyy = (ff*signyy(i) + hh*(signyy(i)-signxx(i)))/(
max(sighl(i),em20))
224 normxy = two*nn*signxy(i)/(
max(sighl(i),em20))
225
226
227
228
229
230
231 dfdsig2 = normxx * (a11*normxx + a12*normyy)
232 . + normyy * (a11*normyy + a12*normxx)
233 . + normxy * normxy * g
234
235
236
237
238
239
240 h(i) = beta(i)*nexp*sigy*exp((nexp-1)*log(cc(i)))
241
242
243
244 sig_dfdsig = signxx(i) * normxx
245 . + signyy(i) * normyy
246 . + signxy(i) * normxy
247 dpla_dlam(i) = sig_dfdsig /
max(yld(i),em20)
248
249
250
251
252
253 dphi_dlam(i) = - dfdsig2 - h(i)*dpla_dlam(i)
254 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20) ,dphi_dlam(i))
255
256
257 dlam = -phi(i)/dphi_dlam(i)
258
259
260 dpxx(i) = dlam * normxx
261 dpyy(i) = dlam * normyy
262 dpxy(i) = dlam * normxy
263
264
265 signxx(i) = signxx(i) - (a11*dpxx(i) + a12*dpyy(i))
266 signyy(i) = signyy(i) - (a11*dpyy(i) + a12*dpxx(i))
267 signxy(i) = signxy(i) - dpxy(i)*g
268
269
270 ddep = dlam*dpla_dlam(i)
271 dpla(i) =
max(zero, dpla(i) + ddep)
272 pla(i) =
max(pla(i) + ddep,zero)
273
274
275 cc(i) = pla(i) + eps0
276 yld(i) = beta(i)*sigy*exp(nexp*log(cc(i)))
277 yld(i) =
max(yld(i),em10)
278
279
280 sighl(i) = (ff+hh)*signyy(i)**2 + (gg+hh)*signxx(i)**2
281 . - two*hh*signxx(i)*signyy(i) + two*nn*signxy(i)**2
282 sighl(i) = sqrt(
max(zero,sighl(i)))
283
284
285 phi(i) = sighl(i) - yld(i)
286
287
288 dpzz(i) = dpzz(i) - (dpxx(i)+dpyy(i))
289
290 ENDDO
291
292 ENDDO
293
294
295
296
297
298
299 DO i=1,nel
300
301 IF (off(i) == one) THEN
302
303 p = third*(signxx(i) + signyy(i))
304
305 svm(i) = signxx(i)**2 + signyy(i)**2 - signxx(i)*signyy(i) +
306 . three*signxy(i)**2
307 svm(i) = sqrt(svm(i))
308
309
310 eta = p/
max(svm(i),em20)
311 IF (eta < -two_third) eta = -two_third
312 IF (eta > two_third) eta = two_third
313
314 cos3theta = -half*twenty7*eta*(eta**2 - third)
315 IF (cos3theta < -one ) cos3theta = -one
316 IF (cos3theta > one ) cos3theta = one
317 theta = one - two*acos(cos3theta)/pi
318
319
320 f1 = cos(theta*pi/six)
321 f2 = sin(theta*pi/six)
322 f3 = c3 + (sqrt(three)/(two - sqrt(three)))*(one - c3)*(one/
max(f1,em20) - one)
323
324
325 epsf = (sigy/
max(c2,em20))*f3*(f1*sqrt(third*(one + c1**2)) + c1*(eta + f2*third))
326 epsf =
max(epsf,em20)**(-one/nexp)
327
328
329 IF (inloc > 0) THEN
330 dam(i) = dam(i) +
max(dplanl(i),zero)/
max(em20,epsf)
331 ELSE
332 dam(i) = dam(i) + dpla(i)/
max(em20,epsf)
333 ENDIF
334 IF (dam(i) >= dc) THEN
335 dam(i) = dc
336 off(i) = four_over_5
337 ENDIF
338
339
340 uvar(i,1) = dam(i)
341 ENDIF
342
343 seq(i) = sighl(i)
344
345 dmg(i) = dam(i)/dc
346
347 soundsp(i) = sqrt(a11/rho0(i))
348
349 IF (dpla(i) > zero) THEN
350 etse(i) = h(i) / (h(i) + e)
351 hardm(i) = h(i)
352 ELSE
353 etse(i) = one
354 hardm(i) = zero
355 ENDIF
356
357 deelzz(i) = -nu*(signxx(i)-sigoxx(i)+signyy(i)-sigoyy(i))/e
358 IF (inloc > 0) THEN
359 IF (loff(i) == one) THEN
360 normxx = (gg*signxx(i) + hh*(signxx(i)-signyy(i)))/(
max(sighl(i),em20))
361 normyy = (ff*signyy(i) + hh*(signyy(i)-signxx(i)))/(
max(sighl(i),em20))
362 dezz(i) = deelzz(i) -
max(dplanl(i),zero)*(normxx+normyy)
363 ENDIF
364 ELSE
365 dezz(i) = deelzz(i) + dpzz(i)
366 ENDIF
367 thk(i) = thk(i) + dezz(i)*thkly(i)*off(i)
368 ENDDO
369