44
45
46
47#include "implicit_f.inc"
48
49
50
51#include "scr17_c.inc"
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100 INTEGER NEL0, NUPARAM, NUVAR
102 . time,timestep,uparam(nuparam),
103 . rho(nel0),rho0(nel0),volume(nel0),eint(nel0),
104 . epspxx(nel0),epspyy(nel0),epspzz(nel0),
105 . epspxy(nel0),epspyz(nel0),epspzx(nel0),
106 . depsxx(nel0),depsyy(nel0),depszz(nel0),
107 . depsxy(nel0),depsyz(nel0),depszx(nel0),
108 . epsxx(nel0) ,epsyy(nel0) ,epszz(nel0) ,
109 . epsxy(nel0) ,epsyz(nel0) ,epszx(nel0) ,
110 . sigoxx(nel0),sigoyy(nel0),sigozz(nel0),
111 . sigoxy(nel0),sigoyz(nel0),sigozx(nel0),
112 . amu(nel0)
113
114
115
117 . signxx(nel0),signyy(nel0),signzz(nel0),
118 . signxy(nel0),signyz(nel0),signzx(nel0),
119 . sigvxx(nel0),sigvyy(nel0),sigvzz(nel0),
120 . sigvxy(nel0),sigvyz(nel0),sigvzx(nel0),
121 . soundsp(nel0),viscmax(nel0),sigy(nel0),defp(nel0)
122
123
124
125 my_real uvar(nel0,nuvar), off(nel0)
126
127
128
129 INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
131 EXTERNAL finter
132
133
134
135
136
137
138
139
140
141
142 INTEGER I
144 . g,ca,cb,cn,epsm,sigm,cc,cd,cm,eps0,
145 . ce,ck,c1,c14g3,g3,
146 . ch1,ch2,ch3,qh1,qh2,svm,
147 . dt,dtg2,press,df,
148 . eprnxx,eprnyy,eprnzz,eprnxy,eprnyz,eprnzx,
149 . evr,edrnxx,edrnyy,edrnzz,edrnxy,edrnyz,edrnzx,
150 . dpla_i,r,umr,
151
152 . cutfre,beta
153
154
155
156
157
158
159
160
161
162
163 g = uparam(3)
164 ca = uparam(4)
165 cb = uparam(5)
166 cn = uparam(6)
167 epsm = uparam(7)
168 sigm = uparam(8)
169 cc = uparam(9)
170 cd = uparam(10)
171 cm = uparam(11)
172 eps0 = uparam(12)
173 ce = uparam(13)
174 ck = uparam(14)
175 c1 = uparam(15)
176 c14g3 = uparam(16)
177
178 cutfre = uparam(19)
179
180
181
182 IF(time==zero)THEN
183 DO i=1,nel0
184 uvar(i,1)=zero
185 uvar(i,2)=zero
186 uvar(i,3)=zero
187 uvar(i,4)=zero
188
189 uvar(i,5)=zero
190 ENDDO
191 ENDIF
192
193 dt = timestep
194 dtg2 = two*dt*g
195
196 beta = timestep*two*pi*cutfre
198
199
200 g3 = three * g
201
202
203
204 DO i=1,nel0
205
206 press = - (sigoxx(i) + sigoyy(i) + sigozz(i)) * third
207
208 eprnxx = epspxx(i)
209 eprnyy = epspyy(i)
210 eprnzz = epspzz(i)
211 eprnxy = epspxy(i)
212 eprnyz = epspyz(i)
213 eprnzx = epspzx(i)
214
215 evr = - (eprnxx + eprnyy + eprnzz) * third
216 edrnxx = eprnxx + evr
217 edrnyy = eprnyy + evr
218 edrnzz = eprnzz + evr
219 edrnxy = eprnxy*half
220 edrnyz = eprnyz*half
221 edrnzx = eprnzx*half
222
223 signxx(i)=sigoxx(i) + press + dtg2*edrnxx
224 signyy(i)=sigoyy(i) + press + dtg2*edrnyy
225 signzz(i)=sigozz(i) + press + dtg2*edrnzz
226 signxy(i)=sigoxy(i) + dtg2*edrnxy
227 signyz(i)=sigoyz(i) + dtg2*edrnyz
228 signzx(i)=sigozx(i) + dtg2*edrnzx
229
230 soundsp(i) = sqrt(c14g3/rho0(i))
231 viscmax(i) = zero
232
233
234
235
236
237
238
239 uvar(i,2) = half*(edrnxx*edrnxx+edrnyy*edrnyy+edrnzz*edrnzz)
240 . +edrnxy*edrnxy+edrnyz*edrnyz+edrnzx*edrnzx
241 uvar(i,2) = off(i) * sqrt(three*uvar(i,2)) / three_half
242
243 uvar(i,2) = beta*uvar(i,2) + (one - beta)*uvar(i,5)
244 uvar(i,5) = uvar(i,2)
245
246 ENDDO
247
248
249
250 DO i=1,nel0
251 IF(uvar(i,1)<=zero) THEN
252 ch1=ca
253 ELSEIF(uvar(i,1)>epsm) THEN
254 ch1=ca+cb*epsm**cn
255 ELSE
256 ch1=ca+cb*uvar(i,1)**cn
257 ENDIF
258 IF(uvar(i,2)<=eps0) THEN
259 ch2=zero
260 ELSEIF(uvar(i,1)<=zero) THEN
261 ch2=cc*log(uvar(i,2)/eps0)
262 ELSE
263 ch2=(cc-cd*uvar(i,1)**cm)*log(uvar(i,2)/eps0)
264 ENDIF
265 IF(uvar(i,2)<=zero) THEN
266 ch3=zero
267 ELSE
268 ch3=ce*uvar(i,2)**ck
269 ENDIF
270
271 uvar(i,3)=
min(sigm+ch3,ch1+ch2+ch3)
272 sigy(i)=uvar(i,3)
273 IF(uvar(i,1)>epsm) uvar(i,3)=zero
274 ENDDO
275
276
277
278 DO i=1,nel0
279 IF(uvar(i,1)>zero. and .cn>=one) THEN
280 qh1= cb*cn*uvar(i,1)**(cn- one)
281 ELSEIF(uvar(i,1)>zero. and .cn<one)THEN
282 qh1= cb*cn*uvar(i,1)**(one - cn)
283 ELSE
284 qh1=zero
285 ENDIF
286 IF(uvar(i,1)<=zero. or .uvar(i,2)<=eps0) THEN
287 qh2=zero
288 ELSEIF(cm>=one) THEN
289 qh2=cd*cm*uvar(i,1)**(cm- one)*log(uvar(i,2)/eps0)
290 ELSE
291 qh2=cd*cm*uvar(i,1)**(one - cm)*log(uvar(i,2)/eps0)
292 ENDIF
293 uvar(i,4)=qh1+qh2
294 ENDDO
295
296
297
298 DO i=1,nel0
299 svm = half*(signxx(i)*signxx(i)
300 . +signyy(i)*signyy(i)
301 . +signzz(i)*signzz(i)
302 . +signxy(i)*signxy(i)
303 . +signyz(i)*signyz(i)
304 . +signzx(i)*signzx(i))
305 svm = sqrt(three * svm)
306 r =
min(one,uvar(i,3)/
max(em20,svm))
307 signxx(i)=signxx(i)*r
308 signyy(i)=signyy(i)*r
309 signzz(i)=signzz(i)*r
310 signxy(i)=signxy(i)*r
311 signyz(i)=signyz(i)*r
312 signzx(i)=signzx(i)*r
313 umr = one - r
314 dpla_i = off(i)*svm*umr/(g3+uvar(i,4))
315 uvar(i,1) = uvar(i,1) + dpla_i
316 ENDDO
317
318
319
320 DO i=1,nel0
321 df = rho0(i)/rho(i)
322
323 press = c1*amu(i)
324 signxx(i) = (signxx(i) - press) * off(i)
325 signyy(i) = (signyy(i) - press) * off(i)
326 signzz(i) = (signzz(i) - press) * off(i)
327 signxy(i) = signxy(i) * off(i)
328 signyz(i) = signyz(i) * off(i)
329 signzx(i) = signzx(i) * off(i)
330 ENDDO
331
332
333 DO i=1,nel0
334 defp(i)=uvar(i,1)
335 ENDDO
336
337 RETURN