35
36
37
38#include "implicit_f.inc"
39
40
41
42
43
44
45 INTEGER NEL,NUPARAM,NUVAR
46 INTEGER ,DIMENSION(NEL), INTENT(IN) :: NGL
48 . time,timestep
49 my_real,
DIMENSION(NUPARAM),
INTENT(IN) ::
50 . uparam
51 my_real,
DIMENSION(2*NEL),
INTENT(IN) ::
52 . grho
53 my_real,
DIMENSION(NEL),
INTENT(IN) ::
54 . rho0,
55 . depsxx,depsyy,depszz,depsxy,depsyz,depszx,
56 . sigoxx,sigoyy,sigozz,sigoxy,sigoyz,sigozx
57
58 my_real ,
DIMENSION(NEL),
INTENT(OUT) ::
59 . soundsp,sigy,et,
60 . signxx,signyy,signzz,signxy,signyz,signzx
61
62 my_real ,
DIMENSION(NEL),
INTENT(INOUT) ::
63 . pla,dpla,off,seq
64 my_real ,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) ::
65 . uvar
66
67
68
69
70 INTEGER I,K,II,NINDX,INDEX(NEL),Istat
71
73 . young,bulk,lamhook,g,g2,nu,
alpha,cfail,pfail,rhof0
74
76 . gamma,epsd,
alpha2,beta,sigp
77
78 real(kind=8) :: ldav
79 my_real :: trdep,dlam,ddep,dphi_dsigvm,dphi_dsigm,
80 . dpxx,dpyy,dpzz,dpxy,dpyz,dpzx,trdfds,
81 . normxx,normyy,normzz,normxy,normyz,normzx,
82 . dphi,sig_dfdsig,dfdsig2,dphi_dpla,
83 . i1,i2,i3,q,r,r_inter,psi,s11,s22,s33
84
86 . sigvm,sigeq,dsigxx,dsigyy,dsigzz,dsigxy,dsigyz,dsigzx,trsig,
87 . sxx,syy,szz,sxy,syz,szx,sigm,j2,yld,hardp,phi0,phi,dpla_dlam,
88 . defvp,dphi_dlam
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103 young = uparam(1)
104 bulk = uparam(2)
105 g = uparam(3)
106 g2 = uparam(4)
107 lamhook = uparam(5)
108 nu = uparam(6)
109
110 istat = uparam(12)
111
113 cfail = uparam(14)
114 pfail = uparam(15)
115
116 IF (istat .NE. 0) rhof0 = uparam(16)
117
118
119 DO i=1,nel
120 IF (off(i) < 0.1) off(i) = zero
121 IF (off(i) < one) off(i) = off(i)*four_over_5
122
123 phi0(i) = uvar(i,1)
124
125 defvp(i) = zero
126 dpla(i) = zero
127 et(i) = one
128 hardp(i) = zero
129 IF (istat == 0) THEN
130 gamma(i) = uparam(16)
131 epsd(i) = uparam(17)
133 beta(i) = uparam(19)
134 sigp(i) = uparam(20)
135 ELSE
136 sigp(i) = uparam(17) + uparam(18)*((grho(i+nel)/rhof0)**uparam(19))
137 alpha2(i) = uparam(20) + uparam(21)*((grho(i+nel)/rhof0)**uparam(22))
138 gamma(i) = uparam(23) + uparam(24)*((grho(i+nel)/rhof0)**uparam(25))
139 beta(i) = one/(uparam(26) + uparam(27)*((grho(i+nel)/rhof0)**uparam(28)))
140 epsd(i) = (-(nine + (
alpha**2))/(three*(
alpha**2)))*log(grho(i+nel)/rhof0)
141 ENDIF
142 ENDDO
143
144
145 DO i = 1,nel
146
147 yld(i) = sigp(i) + gamma(i)*(pla(i)/epsd(i)) +
148 .
alpha2(i)*log(one/
max((one - (pla(i)/epsd(i))**beta(i)),em20))
149
150 yld(i) =
max(em10,yld(i))
151 ENDDO
152
153
154
155
156 DO i=1,nel
157
158 ldav = (depsxx(i) + depsyy(i) + depszz(i)) * lamhook
159 signxx(i) = sigoxx(i) + depsxx(i)*g2 + ldav
160 signyy(i) = sigoyy(i) + depsyy(i)*g2 + ldav
161 signzz(i) = sigozz(i) + depszz(i)*g2 + ldav
162 signxy(i) = sigoxy(i) + depsxy(i)*g
163 signyz(i) = sigoyz(i) + depsyz(i)*g
164 signzx(i) = sigozx(i) + depszx(i)*g
165
166 trsig(i) = signxx(i) + signyy(i) + signzz(i)
167 sigm(i) = trsig(i) * third
168
169 sxx(i) = signxx(i) - sigm(i)
170 syy(i) = signyy(i) - sigm(i)
171 szz(i) = signzz(i) - sigm(i)
172 sxy(i) = signxy(i)
173 syz(i) = signyz(i)
174 szx(i) = signzx(i)
175
176 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
177 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
178 sigvm(i) = sqrt(three*j2(i))
179
180 sigeq(i) = sqrt((sigvm(i)**2 + (
alpha*sigm(i))**2)/(one + (
alpha/three)**2))
181 ENDDO
182
183
184
185
186 phi(1:nel) = sigeq(1:nel) - yld(1:nel)
187
188
189 nindx = 0
190 DO i=1,nel
191 IF ((phi(i)>zero).AND.(off(i) == one)) THEN
192 nindx=nindx+1
193 index(nindx)=i
194 ENDIF
195 ENDDO
196
197
198
199
200#include "vectorize.inc"
201 DO ii = 1, nindx
202
203
204 i = index(ii)
205
206
207 ldav = (depsxx(i) + depsyy(i) + depszz(i)) * lamhook
208 dsigxx(i) = depsxx(i)*g2 + ldav
209 dsigyy(i) = depsyy(i)*g2 + ldav
210 dsigzz(i) = depszz(i)*g2 + ldav
211 dsigxy(i) = depsxy(i)*g
212 dsigyz(i) = depsyz(i)*g
213 dsigzx(i) = depszx(i)*g
214 dlam = zero
215
216
217 trsig(i) = sigoxx(i) + sigoyy(i) + sigozz(i)
218 sigm(i) = trsig(i) * third
219 sxx(i) = sigoxx(i) - sigm(i)
220 syy(i) = sigoyy(i) - sigm(i)
221 szz(i) = sigozz(i) - sigm(i)
222 sxy(i) = sigoxy(i)
223 syz(i) = sigoyz(i)
224 szx(i) = sigozx(i)
225 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
226 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
227 sigvm(i) = sqrt(three*j2(i))
228
229 sigeq(i) = sqrt((sigvm(i)**2 + (
alpha*sigm(i))**2)/(one + (
alpha/three)**2))
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246 dphi_dsigvm = sigvm(i)/
max((sigeq(i)*(one + (
alpha/three)**2)),em20)
247
248
249 dphi_dsigm = (
alpha**2)*sigm(i)/
max((sigeq(i)*(one + (
alpha/three)**2)),em20)
250
251
252 normxx = dphi_dsigvm*three_half*sxx(i)/(
max(sigvm(i),em20)) + dphi_dsigm*third
253 normyy = dphi_dsigvm*three_half*syy(i)/(
max(sigvm(i),em20)) + dphi_dsigm*third
254 normzz = dphi_dsigvm*three_half*szz(i)/(
max(sigvm(i),em20)) + dphi_dsigm*third
255 normxy = two*dphi_dsigvm*three_half*sxy(i)/(
max(sigvm(i),em20))
256 normyz = two*dphi_dsigvm*three_half*syz(i)/(
max(sigvm(i),em20))
257 normzx = two*dphi_dsigvm*three_half*szx(i)/(
max(sigvm(i),em20))
258
259
260 phi(i) = phi0(i)
261
262
263 dphi = normxx * dsigxx(i)
264 . + normyy * dsigyy(i)
265 . + normzz * dsigzz(i)
266 . + normxy * dsigxy(i)
267 . + normyz * dsigyz(i)
268 . + normzx * dsigzx(i)
269
270
271
272
273
274
275
276 trdfds = normxx + normyy + normzz
277 dfdsig2 = normxx * (normxx*g2 + lamhook*trdfds)
278 . + normyy * (normyy*g2 + lamhook*trdfds)
279 . + normzz * (normzz*g2 + lamhook*trdfds)
280 . + normxy * normxy * g
281 . + normyz * normyz * g
282 . + normzx * normzx * g
283
284
285
286
287
288
289 hardp(i) = (gamma(i)/epsd(i)) +
290 .
alpha2(i)*((one-(beta(i)/epsd(i))*(pla(i)/epsd(i))**
291 .
max((one - (pla(i)/epsd(i))**beta(i)),em20))
292 dphi_dpla = hardp(i)
293
294
295
296 sig_dfdsig = signxx(i) * normxx
297 . + signyy(i) * normyy
298 . + signzz(i) * normzz
299 . + signxy(i) * normxy
300 . + signyz(i) * normyz
301 . + signzx(i) * normzx
302 dpla_dlam(i) = sig_dfdsig / yld(i)
303
304
305
306
307
308 dphi_dlam(i) = - dfdsig2 - dphi_dpla*dpla_dlam(i)
309 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20) ,dphi_dlam(i))
310
311
312
313
314
315 dlam = -(dphi + phi(i)) / dphi_dlam(i)
316 dlam =
max(dlam, zero)
317
318
319 dpxx = dlam * normxx
320 dpyy = dlam * normyy
321 dpzz = dlam * normzz
322 dpxy = dlam * normxy
323 dpyz = dlam * normyz
324 dpzx = dlam * normzx
325 trdep = dpxx + dpyy + dpzz
326
327
328 ddep = (dlam/yld(i))*sig_dfdsig
329 dpla(i) = dpla(i) + ddep
330 pla(i) = pla(i) + ddep
331 defvp(i) = defvp(i) + trdep
332
333
334 ldav = trdep * lamhook
335 signxx(i) = sigoxx(i) + dsigxx(i) - (dpxx*g2 + ldav)
336 signyy(i) = sigoyy(i) + dsigyy(i) - (dpyy*g2 + ldav)
337 signzz(i) = sigozz(i) + dsigzz(i) - (dpzz*g2 + ldav)
338 signxy(i) = sigoxy(i) + dsigxy(i) - dpxy*g
339 signyz(i) = sigoyz(i) + dsigyz(i) - dpyz*g
340 signzx(i) = sigozx(i) + dsigzx(i) - dpzx*g
341 trsig(i) = signxx(i) + signyy(i) + signzz(i)
342 sigm(i) = trsig(i) * third
343 sxx(i) = signxx(i) - sigm(i)
344 syy(i) = signyy(i) - sigm(i)
345 szz(i) = signzz(i) - sigm(i)
346 sxy(i) = signxy(i)
347 syz(i) = signyz(i)
348 szx(i) = signzx(i)
349 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
350 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
351 sigvm(i) = sqrt(three*j2(i))
352
353 sigeq(i) = sqrt((sigvm(i)**2 + (
alpha*sigm(i))**2)/(one + (
alpha/three)**2))
354
355
356 yld(i) = sigp(i) + gamma(i)*(pla(i)/epsd(i)) +
357 .
alpha2(i)*log(one/
max((one - (pla(i)/epsd(i))**beta(i)),em20))
358 yld(i) =
max(yld(i),em10)
359
360
361 phi(i) = sigeq(i) - yld(i)
362 ENDDO
363
364
365
366
367
368 DO i=1,nel
369
370 IF (dpla(i) > zero) THEN
371 uvar(i,1) = phi(i)
372 ELSE
373 uvar(i,1) = zero
374 ENDIF
375 IF (cfail > zero) THEN
376 uvar(i,2) = uvar(i,2) + defvp(i)
377 IF (uvar(i,2) >= cfail) THEN
378 IF (off(i) == one) off(i) = four_over_5
379 ENDIF
380 ENDIF
381 IF (pfail > zero) THEN
382
383 i1 = signxx(i)+signyy(i)+signzz(i)
384 i2 = signxx(i)*signyy(i)+signyy(i)*signzz(i)+signzz(i)*signxx(i)-
385 . signxy(i)*signxy(i)-signzx(i)*signzx(i)-signyz(i)*signyz(i)
386 i3 = signxx(i)*signyy(i)*signzz(i)-signxx(i)*signyz(i)*signyz(i)-
387 . signyy(i)*signzx(i)*signzx(i)-signzz(i)*signxy(i)*signxy(i)+
388 . two*signxy(i)*signzx(i)*signyz(i)
389 q = (three*i2 - i1*i1)/nine
390 r = (two*i1*i1*i1-nine*i1*i2+twenty7*i3)/cinquante4
391 r_inter =
min(r/sqrt(
max(em20,(-q**3))),one)
392 psi = acos(
max(r_inter,-one))
393
394 s11 = two*sqrt(-q)*cos(psi/three)+third*i1
395 s22 = two*sqrt(-q)*cos((psi+two*pi)/three)+third*i1
396 s33 = two*sqrt(-q)*cos((psi+four*pi)/three)+third*i1
397 s11 =
max(s11,s22,s33)
398
399 IF (s11 >= pfail) THEN
400 IF (off(i) == one) off(i) = four_over_5
401 ENDIF
402 ENDIF
403 seq(i) = sigeq(i)
404
405 IF (dpla(i) > zero) THEN
406 et(i) = hardp(i) / (hardp(i) + young)
407 ELSE
408 et(i) = one
409 ENDIF
410
411 soundsp(i) = sqrt((bulk + four_over_3*g)/grho(nel+i))
412
413 sigy(i) = yld(i)
414 ENDDO
415