43
44
45
46 USE elbufdef_mod
49
50
51
52#include "implicit_f.inc"
53#include "comlock.inc"
54
55
56
57#include "param_c.inc"
58#include "com01_c.inc"
59#include "com08_c.inc"
60#include "mvsiz_p.inc"
61
62
63
64 INTEGER
65
66
67 . rho(nel) ,rho0(nel) ,
68 . eint(nel) ,qnew(nel) ,
69 . qold(nel) ,
70 . epspxx(nel) ,epspyy(nel),epspzz(nel),
71 . geo(npropg,*),ssp ,
72 . voln(*)
73 TYPE (), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
74
75
76
78 . signxx(nel),signyy(nel),signzz(nel),
79 . signxy(nel),signyz(nel),signzx(nel),
80 . sigvxx(nel),sigvyy(nel),sigvzz(nel),
81 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
82 . soundsp(nel),viscmax(nel)
83 my_real,
INTENT(INOUT) :: dpde(nel)
84
85
86
87 my_real uvar(nel,nuvar), off(nel), tburn(nel), bfrac(nel), deltax(nel)
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
106 . d, pcj, e0, p0, vcj,c,psh,
107 . a(5),r(5),al(5),bl(5),rl(5),
108 . pnew,espe,dvol,
109 . qa,qb,qal,qbl,dd,bhe,
110 . lambda1,lambda2,lambda3,lambda4,lambda5,
111 . lambda,
112 . dldv1,dldv2,dldv3,dldv4,dldv5,
113 . dldv,
114 . erlv1,erlv2,erlv3,erlv4,erlv5,
115 . p1,p2,p3,p4,p5,
116 . rhoc2,
117 . rv1,rv2,rv3,rv4,rv5,
118 . rhoc2_1,rhoc2_2,rhoc2_3,rhoc2_4,rhoc2_5,
119 . dv
120 . ww, denom, p, v0
121
122 INTEGER :: IBFRAC,
124
125 TYPE(G_BUFEL_) ,POINTER :: GBUF
126 TYPE(L_BUFEL_) ,POINTER :: LBUF
127 TYPE(BUF_LAY_) ,POINTER :: BUFLY
128
129
130
131 gbuf => elbuf_tab(ng)%GBUF
132 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(1,1,1)
133 bufly => elbuf_tab(ng)%BUFLY(ilay)
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256 p0 = uparam(01)
257 psh = uparam(02)
258 ibfrac = nint(uparam(03))
259 d = uparam(04)
260 pcj = uparam(05)
261 e0 = uparam(06)
262 ww = uparam(07)
263 c = uparam(08)
264 a(1:5) = uparam(09:13)
265 r(1:5) = uparam(14:18)
266 al(1:5)= uparam(19:23)
267 bl(1:5)= uparam(24:28)
268 rl(1:5)= uparam(29:33)
269 bhe = uparam(34)
270 vcj = uparam(35)
271
272
273 IF(dt1==zero)THEN
274 DO i=1,nel
275 eint(i) = e0*voln(i)
276 ENDDO
277 uvar(1:nel,4) = voln(1:nel)
278 uvar(1:nel,5) = p0
279 ENDIF
280
281 DO i=1,nel
282
283
284
285 xl = deltax(i)
286 IF(bfrac(i) < one) THEN
287 tb = - tburn(i)
288 bfrac(i) = zero
289 IF(ibfrac/=1 .AND. time > tb) bfrac(i) = d*(time-tb)*two_third/xl
290 IF(ibfrac/=2) bfrac(i) =
max( bfrac(i) , bhe * (one - rho0(i)/rho(i)) )
291 IF(bfrac(i) < em04) THEN
292 bfrac(i) = zero
293 ELSEIF(bfrac(i) > one) THEN
294 bfrac(i) = one
295 ENDIF
296 ENDIF
297
298
299
300 df = rho0(i)/rho(i)
301 v0 = rho(i)*voln(i) / rho0(i)
302 espe = eint(i)/
max(em20,v0)
303
304
305
306
307
308
309 vv = voln(i) / v0
310 vv_ = uvar(i,4) / v0
311 dv = vv-vv_
312
313 erlv1 = exp(-rl(1)*vv)
314 erlv2 = exp(-rl(2)*vv)
315 erlv3 = exp(-rl(3)*vv)
316 erlv4 = exp(-rl(4)*vv)
317 erlv5 = exp(-rl(5)*vv)
318
319 lambda1 = (al(1)*vv+bl(1))*erlv1
320 lambda2 = (al(2)*vv+bl
321 lambda3 = (al(3)*vv+bl(3))*erlv3
322 lambda4 = (al(4)*vv+bl(4))*erlv4
323 lambda5 = (al(5)*vv+bl(5))*erlv5
324
325 lambda = lambda1 + lambda2 + lambda3 + lambda4 + lambda5 + ww
326
327 dpde(i) = lambda/df
328
329 dldv1 = al(1)*erlv1-(al(1)*vv+bl(1))*rl(1)*erlv1
330 dldv2 = al(2)*erlv2-(al(2)*vv+bl(2))*rl(2)*erlv2
331 dldv3 = al(3)*erlv3-(al(3)*vv+bl(3))*rl(3)*erlv3
332 dldv4 = al(4)*erlv4-(al(4)*vv+bl(4))*rl(4)*erlv4
333 dldv5 = al(5)*erlv5-(al(5)*vv+bl(5))*rl(5)*erlv5
334
335 dldv = dldv1 + dldv2 + dldv3 + dldv4 + dldv5
336
337 rv1 = r(1)*vv
338 rv2 = r(2)*vv
339 rv3 = r(3)*vv
340 rv4 = r(4)*vv
341 rv5 = r(5)*vv
342
343 p1 = a(1)*(one-lambda/rv1)*exp(-rv1)
344 p2 = a(2)*(one-lambda/rv2)*exp(-rv2)
345 p3 = a(3)*(one-lambda/rv3)*exp(-rv3)
346 p4 = a(4)*(one-lambda/rv4)*exp(-rv4)
347 p5 = a(5)*(one-lambda/rv5)*exp(-rv5)
348
349 p = p1+p2+p3+p4+p5 + lambda*espe/vv + c*(one-lambda/ww)*exp((-ww-one)*log(vv))
350
351 rhoc2_1 = a(1)*( (vv*dldv-lambda)/r(1) + r(1)*vv*vv - lambda*vv )*exp(-rv1)
352 rhoc2_2 = a(2)*( (vv*dldv-lambda)/r(2) + r(2)*vv*vv - lambda*vv )*exp(-rv2)
353 rhoc2_3 = a(3)*( (vv*dldv-lambda)/r(3) + r(3)*vv*vv - lambda*vv )*exp(-rv3)
354 rhoc2_4 = a(4)*( (vv*dldv-lambda)/r(4) + r(4)*vv*vv - lambda*vv )*exp(-rv4)
355 rhoc2_5 = a(5)*( (vv*dldv-lambda)/r(5) + r(5)*vv*vv - lambda*vv )*exp(-rv5)
356
357
358
359 rhoc2 = rhoc2_1 + rhoc2_2 + rhoc2_3 + rhoc2_4 + rhoc2_5
360 rhoc2 = rhoc2 + c*((ww+one)*(one-lambda/ww)+vv*dldv/ww)*exp(-ww*log(vv))
361 rhoc2 = rhoc2 + (espe)*lambda + lambda*vv*(p+psh) - (espe)*vv*dldv
362
363 ssp = sqrt(
max(rhoc2/rho0(i),em20))
364 qa = geo(14,pid(i))
365 qb = geo(15,pid(i))
366 dd = -epspxx(i)-epspyy(i)-epspzz(i)
367 qal = qa*xl
368 qal = qal*qal
369 qbl = qb*xl
370 viscmax(i) = rho(i)*(qal
371 qnew(i) = viscmax(i)*
max(zero,dd)
372
373
374 denom = (one+half*dv*lambda/vv)
375 denom = one/denom
376
377
378 pnew = p - lambda/vv*half*(uvar(i,5)+psh)*dv
379 pnew = denom * pnew
380 pnew = (one-bfrac(i))*p0 + bfrac(i)*pnew
381 pnew =
max(-psh, pnew-psh)*off(i)
382
383
384 !pold = uvar(i,5)
385 dvol = half*(voln(i)-uvar(i,4))
386
387 eint(i) = eint(i) - (psh+psh)*dvol
388
389
390 qold(i) = qnew(i)
391 uvar(i,4) = voln(i)
392 uvar(i,5) = pnew
393
394
395
396
397
398 signxx(i) = -pnew
399 signyy(i) = -pnew
400 signzz(i) = -pnew
401 signxy(i) = zero
402 signyz(i) = zero
403 signzx(i) = zero
404
405 sigvxx(i) = zero
406 sigvyy(i) = zero
407 sigvzz(i) = zero
408 sigvxy(i) = zero
409 sigvyz(i) = zero
410 sigvzx(i) = zero
411
412 soundsp(i) = ssp
413
414 enddo
415
416
417
418 RETURN
419