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
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,II,ITER,NITER,NINDX,INDEX(NEL),Istat
71c
73 . young,bulk,lamhook,g,g2,nu,
alpha,cfail,pfail,rhof0
74
76 . gamma,epsd,
alpha2,beta,sigp
77
78 real(kind=8) :: ldav
80 . h,trdep,dlam,ddep,dphi_dsigvm,dphi_dsigm,
81 . dpxx,dpyy,dpzz,dpxy,dpyz,dpzx,trdfds,
82 . normxx,normyy,normzz,normxy,normyz,normzx,
83 . dphi,sig_dfdsig,dfdsig2,dphi_dpla,
84 . i1,i2,i3,q,r,r_inter,psi,s11,s22,s33
85
87 . sigvm,sigeq,dsigxx,dsigyy,dsigzz,dsigxy,dsigyz,dsigzx,trsig,
88 . sxx,syy,szz,sxy,syz,szx,sigm,j2,yld,hardp,phi,dpla_dlam,dphi_dlam,
89 . defvp
90
91
92
93
94
95
96
97
98 !=======================================================================
99
100
101
102
103 young = uparam(1) ! young modulus
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 == 1) 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) =
122
123 defvp(i) = zero
124 dpla(i) = zero
125 et(i) = one
126 hardp(i) = zero
127 IF (istat == 0) THEN
128 gamma(i) = uparam(16)
129 epsd(i) = uparam(17)
131 beta(i) = uparam(19)
132 sigp(i) = uparam
133 ELSE
134 sigp(i) = uparam(17) + uparam(18)*((grho(i+nel)
135 alpha2(i) = uparam(20) + uparam(21)*((grho(i+nel)/rhof0)**uparam(22))
136 gamma(i) = uparam(23) + uparam(24)*((grho(i+nel)/rhof0)**uparam(25))
137 beta(i) = one/(uparam(26) + uparam(27)*((grho(i+nel)/rhof0)**uparam(28)))
138 epsd(i) = (-(nine + (
alpha**2))/(three*(
alpha**2)))*log(grho(i+nel)/rhof0)
139 ENDIF
140 ENDDO
141
142
143 DO i = 1,nel
144
145 yld(i) = sigp(i) + gamma(i)*(pla(i)
146 .
alpha2(i)*log(one/
max((one - (pla(i)/epsd(i))**beta(i)),em20))
147
148 yld(i) =
max(em10,yld(i))
149 ENDDO
150
151
152
153
154 DO i=1,nel
155
156 ldav = (depsxx(i) + depsyy(i) + depszz(i)) * lamhook
157 signxx(i) = sigoxx(i) + depsxx(i)*g2 + ldav
158 signyy(i) = sigoyy(i) + depsyy(i)*g2 + ldav
159 signzz(i) = sigozz(i) + depszz(i)*g2 + ldav
160 signxy(i) = sigoxy(i) + depsxy(i)*g
161 signyz(i) = sigoyz(i) + depsyz(i)*g
162 signzx(i) = sigozx(i) + depszx(i)*g
163
164 trsig(i) = signxx(i) + signyy(i) + signzz(i)
165 sigm(i) = trsig(i) * third
166
167 sxx(i) = signxx(i) - sigm(i)
168 syy(i) = signyy(i) - sigm(i)
169 szz(i) = signzz(i) - sigm(i)
170 sxy(i) = signxy(i)
171 syz(i) = signyz(i)
172 szx(i) = signzx(i)
173
174 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
175 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
176 sigvm(i) = sqrt(three*j2(i))
177
178 sigeq(i) = sqrt((sigvm(i)**2 + (
alpha*sigm(i))**2)/(one + (
alpha/three)**2))
179 ENDDO
180
181
182
183
184 phi(1:nel) = sigeq(1:nel) - yld(1:nel)
185
186
187 nindx = 0
188 DO i=1,nel
189 IF ((phi(i)>zero).AND.(off(i) == one)) THEN
190 nindx=nindx+1
191 index(nindx)=i
192 ENDIF
193 ENDDO
194
195
196
197
198
199
200 niter = 3
201
202
203 DO iter = 1, niter
204#include "vectorize.inc"
205
206 DO ii=1,nindx
207 i = index(ii)
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223 dphi_dsigvm = sigvm(i)/
max((sigeq(i)*(one + (
alpha/three)**2)),em20)
224
225
226 dphi_dsigm = (
alpha**2)*sigm(i)/
max((sigeq(i)*(one + (
alpha/three)**2)),em20)
227
228
229 normxx = dphi_dsigvm*three_half*sxx(i)/(
max(sigvm
230 normyy = dphi_dsigvm*three_half*syy(i)/(
max(sigvm(i),em20)) + dphi_dsigm*third
231 normzz = dphi_dsigvm*three_half*szz(i)/(
max(sigvm(i),em20)) + dphi_dsigm*third
232 normxy = two*dphi_dsigvm*three_half*sxy(i)/(
max(sigvm(i),em20))
233 normyz = two*dphi_dsigvm*three_half*syz(i)/(
max(sigvm(i),em20))
234 normzx = two*dphi_dsigvm*three_half*szx(i)/(
max(sigvm(i),em20))
235
236
237
238
239
240
241 trdfds = normxx + normyy + normzz
242 dfdsig2 = normxx * (normxx*g2 + lamhook
243 . + normyy * (normyy*g2 + lamhook*trdfds)
244 . + normzz * (normzz*g2 + lamhook*trdfds)
245 . + normxy * normxy * g
246 . + normyz * normyz * g
247 . + normzx * normzx * g
248
249
250
251
252
253
254 hardp(i) = (gamma(i)/epsd(i)) +
255 .
alpha2(i)*((one-(beta(i)/epsd(i))*(pla(i
256 .
max((one - (pla(i)/epsd(i))**beta(i)),em20))
257 dphi_dpla = hardp(i)
258
259
260
261 sig_dfdsig = signxx(i) * normxx
262 . + signyy(i) * normyy
263 . + signzz(i) * normzz
264 . + signxy(i) * normxy
265 . + signyz(i) * normyz
266 . + signzx(i) * normzx
267 dpla_dlam(i) = sig_dfdsig / yld(i)
268
269
270
271
272
273 dphi_dlam(i) = - dfdsig2 - dphi_dpla*dpla_dlam(i)
274 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20) ,dphi_dlam(i))
275
276
277 dlam = -phi(i)/dphi_dlam(i)
278
279
280 dpxx = dlam * normxx
281 dpyy = dlam * normyy
282 dpzz = dlam * normzz
283 dpxy = dlam * normxy
284 dpyz = dlam * normyz
285 dpzx = dlam * normzx
286 trdep = dpxx + dpyy + dpzz
287
288
289 ddep = (dlam/yld(i))*sig_dfdsig
290 dpla(i) =
max(zero, dpla(i) + ddep)
291 pla(i) = pla(i) + ddep
292 defvp(i) = defvp(i) + trdep
293
294
295 ldav = trdep * lamhook
296 signxx(i) = signxx(i) - (dpxx*g2 + ldav)
297 signyy(i) = signyy(i) - (dpyy*g2 + ldav)
298 signzz(i) = signzz(i) - (dpzz*g2 + ldav)
299 signxy(i) = signxy(i) - dpxy*g
300 signyz(i) = signyz(i) - dpyz*g
301 signzx(i) = signzx(i
302 trsig(i) = signxx(i) + signyy(i) + signzz(i)
303 sigm(i) = trsig(i) * third
304 sxx(i) = signxx(i) - sigm(i)
305 syy(i) = signyy(i) - sigm(i)
306 szz(i) = signzz(i) - sigm(i)
307 sxy(i) = signxy(i)
308 syz(i) = signyz(i)
309 szx(i) = signzx(i)
310 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 )
311 . + sxy(i)**2 + syz(i)**2 + szx(i)**2
312 sigvm(i) = sqrt(three*j2(i))
313
314 sigeq(i) = sqrt((sigvm(i)**2 + (
alpha*sigm(i))**2)/(one
315
316
317 yld(i) = sigp(i) + gamma(i)*(pla(i)/epsd(i)) +
318 .
alpha2(i)*log(one/
max((one - (pla(i)/epsd(i))**beta(i)),em20))
319 yld(i) =
max(yld(i),em10)
320
321
322 phi(i) = sigeq(i) - yld(i)
323
324 ENDDO
325
326 ENDDO
327
328
329
330
331
332
333 DO i=1,nel
334
335 IF (cfail > zero) THEN
336 uvar(i,1) = uvar(i,1) + defvp(i)
337 IF (uvar(i,1) >= cfail) THEN
338 IF (off(i) == one) off(i) = four_over_5
339 ENDIF
340 ENDIF
341 IF (pfail > zero) THEN
342
343 i1 = signxx(i)+signyy(i)+signzz(i)
344 i2 = signxx(i)*signyy(i)+signyy(i)*signzz(i)+signzz(i)*signxx(i)-
345 . signxy(i)*signxy(i)-signzx(i)*signzx(i)-signyz(i)*signyz(i)
346 i3 = signxx(i)*signyy(i)*signzz(i)-signxx(i)*signyz(i
347 . signyy(i)*signzx(i)*signzx(i)-signzz(i)*signxy(i
348 . two*signxy(i)*signzx(i)*signyz(i)
349
350 r = (two*i1*i1*i1-nine*i1*i2+twenty7*i3)/cinquante4
351 r_inter =
min(r/sqrt(
max(em20,(-q**3))),one)
352 psi = acos(
max(r_inter,-one))
353 s11 = two*sqrt(-q)*cos(psi/three)+third*i1
354 s22 = two*sqrt(-q)*cos((psi+two*pi)/three)+third*i1
355 s33 = two*sqrt(-q)*cos((psi+four*pi)/three)+third*i1
356 s11 =
max(s11,s22,s33)
357
358 IF (s11 >= pfail) THEN
359 IF (off(i) == one) off(i) = four_over_5
360 ENDIF
361 ENDIF
362 seq(i) = sigeq(i)
363
364 IF (dpla(i) > zero) THEN
365 et(i) = hardp(i) / (hardp(i) + young)
366 ELSE
367 et(i) = one
368 ENDIF
369
370 soundsp(i) = sqrt((bulk + four_over_3*g)/grho(nel+i))
371
372 sigy(i) = yld(i)
373 ENDDO
374