41
42
43
44
45#include "implicit_f.inc"
46
47
48
49#include "mvsiz_p.inc"
50
51
52
53
54
55
56 INTEGER NEL, NUPARAM, NUVAR
57
59 . time , timestep , uparam(nuparam),
60 . rho(nel), rho0(nel), volume(nel), eint(nel),
61 . epspxx(nel), epspyy(nel), epspzz(nel),
62 . epspxy(nel), epspyz(nel), epspzx(nel),
63 . depsxx(nel), depsyy(nel), depszz(nel),
64 . depsxy(nel), depsyz(nel), depszx(nel),
65 . epsxx(nel), epsyy(nel), epszz(nel),
66 . epsxy(nel), epsyz(nel), epszx(nel),
67 . sigoxx(nel), sigoyy(nel), sigozz(nel),
68 . sigoxy(nel), sigoyz(nel), sigozx(nel)
69
70
71
73 . signxx(nel), signyy(nel), signzz(nel),
74 . signxy(nel), signyz(nel), signzx(nel),
75 . sigvxx(nel), sigvyy(nel), sigvzz(nel),
76 . sigvxy(nel), sigvyz(nel), sigvzx(nel),
77 . soundsp(nel), viscmax(nel)
78
79
80
81 my_real uvar(nel,nuvar), off(nel)
82
83
84
85 INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
87 . finter,tf(*)
88 EXTERNAL finter
89
90
91
92 INTEGER I,J,KF,IFLAG,ICORRECT
93
95 . e,poisson,a,b,et,poissont,fac
97 . gt2,bulkt3,relvexp
99 . vmu,vlamda,vmu2,vlamda3
101 . c1,c2,c3,pmin,dpdmu
103 . p0,phi,gama0
105 . enew(mvsiz),edot(mvsiz),dedot(mvsiz)
107 . dpdgama(mvsiz),gama(mvsiz),amu(mvsiz)
109 . sm(mvsiz),em(mvsiz),dedm(mvsiz)
111 . g2(mvsiz),bulk(mvsiz),bulk3(mvsiz)
113 . dsxx(mvsiz),dsyy(mvsiz),dszz(mvsiz)
115 . dsxy(mvsiz),dsyz(mvsiz),dszx(mvsiz)
117 . dexx(mvsiz),deyy(mvsiz),dezz(mvsiz)
119 . dexy(mvsiz),deyz(mvsiz),dezx(mvsiz)
121 . dedxx(mvsiz),dedyy(mvsiz),dedzz(mvsiz)
123 . dedxy(mvsiz),dedyz(mvsiz),dedzx(mvsiz)
125 . dsdxx(mvsiz),dsdyy(mvsiz),dsdzz(mvsiz)
127 . dsdxy(mvsiz),dsdyz(mvsiz),dsdzx(mvsiz)
129 . dpdro(mvsiz),p(mvsiz),pdelt(mvsiz),relvol(mvsiz)
131 . sigair(mvsiz)
132
134 . small,tiny , aux1, aux2,
135 . midstep
136 LOGICAL TEST
137
138 time =zero
139 timestep=one
140
141 small = em3
142 tiny = em30
143 test=.false.
144
145
146
147
148 e = uparam(1)
149 poisson = uparam(2)
150 a = uparam(3)
151 b = uparam(4)
152
153 et = uparam(5)
154 poissont= uparam(6)
155 vmu2 = uparam(7)*two
156 vlamda3 = uparam(8)*three
157
158 p0 = uparam(9)
159 phi = uparam(10)
160 gama0 = uparam(11)
161
162 c1 = uparam(12)
163 c2 = uparam(13)
164 c3 = uparam(14)
165
166 iflag = uparam(15)
167 pmin = uparam(16)
168 relvexp = uparam(17)
169
170 fac = uparam(18)
171
172 kf = ifunc(1)
173
174 gt2 = et/(one+poissont)
175 bulkt3 = et/(one-two*poissont)
176
177
178 DO i=1,nel
179 epsxx(i)=epsxx(i)-half*depsxx(i)
180 epsyy(i)=epsyy(i)-half*depsyy(i)
181 epszz(i)=epszz(i)-half*depszz(i)
182 epsxy(i)=epsxy(i)-half*depsxy(i)
183 epsyz(i)=epsyz(i)-half*depsyz(i)
184 epszx(i)=epszx(i)-half*depszx(i)
185 END DO
186
187 DO 200 i=1,nel
188 gama(i) = (rho0(i)/rho(i)-one+gama0)
189 IF(one+gama(i)-phi<=small) gama(i)=-(one-phi-small)
190 sm(i)=third*(sigoxx(i)+sigoyy(i)+sigozz(i))+uvar(i,1)
191 em(i)=third*(epsxx(i)+epsyy(i)+epszz(i))
192 dedm(i)=third*(depsxx(i)+depsyy(i)+depszz(i))
193 sigair(i)=
max(zero,-(p0*gama(i))/(one+gama(i)-phi))
194 200 CONTINUE
195
196 DO 210 i=1,nel
197
198 dsxx(i)=sigoxx(i)-sm(i)+uvar(i,1)
199 dsyy(i)=sigoyy(i)-sm(i)+uvar(i,1)
200 dszz(i)=sigozz(i)-sm(i)+uvar(i,1)
201 dsxy(i)=sigoxy(i)
202 dsyz(i)=sigoyz(i)
203 dszx(i)=sigozx(i)
204
205
206 dexx(i)=epsxx(i)-em(i)
207 deyy(i)=epsyy(i)-em(i)
208 dezz(i)=epszz(i)-em(i)
209 dexy(i)=epsxy(i)* half
210 deyz(i)=epsyz(i)* half
211 dezx(i)=epszx(i)* half
212
213
214
215
216
217
218
219
220
221
222 dedxx(i)=depsxx(i)-dedm(i)
223 dedyy(i)=depsyy(i)-dedm(i)
224 dedzz(i)=depszz(i)-dedm(i)
225 dedxy(i)=depsxy(i)*half
226 dedyz(i)=depsyz(i)*half
227 dedzx(i)=depszx(i)*half
228 210 CONTINUE
229
230 DO i=1,nel
231 relvol(i)=rho0(i)/rho(i)
232 edot(i) =zero
233 ENDDO
234
235
236 DO i=1,nel
237 enew(i)=(
max(e,a*edot(i)+b))/relvol(i)**relvexp
238 ENDDO
239
240 aux1 = one / (one+poisson)
241 aux2 = one / (one-two*poisson)
242 DO i=1,nel
243 g2(i)=enew(i)*aux1
244 bulk3(i)=enew(i)*aux2
245 ENDDO
246
247 DO i=1,nel
248
249
250 dsdxx(i)=vmu2*g2(i)*dedxx(i)
251 & -(g2(i)+gt2)*dsxx(i)+g2(i)*gt2*dexx(i)
252 dsdyy(i)=vmu2*g2(i)*dedyy(i)
253 & -(g2(i)+gt2)*dsyy(i)+g2(i)*gt2*deyy(i)
254 dsdzz(i)=vmu2*g2(i)*dedzz(i)
255 & -(g2(i)+gt2)*dszz(i)+g2(i)*gt2*dezz(i)
256 dsdxy(i)=vmu2*g2(i)*dedxy(i)
257 & -(g2(i)+gt2)*dsxy(i)+g2(i)*gt2*dexy(i)
258 dsdyz(i)=vmu2*g2(i)*dedyz(i)
259 & -(g2(i)+gt2)*dsyz(i)+g2(i)*gt2*deyz(i)
260 dsdzx(i)=vmu2*g2(i)*dedzx(i)
261 & -(g2(i)+gt2)*dszx(i)+g2(i)*gt2*dezx(i)
262
263
264 midstep =one/(vmu2+half*(g2(i)+gt2))
265 dsdxx(i)=dsdxx(i)*midstep
266 dsdyy(i)=dsdyy(i)*midstep
267 dsdzz(i)=dsdzz(i)*midstep
268 dsdxy(i)=dsdxy(i)*midstep
269 dsdyz(i)=dsdyz(i)*midstep
270 dsdzx(i)=dsdzx(i)*midstep
271 ENDDO
272
273
274
275 DO i=1,nel
276 IF(kf/=0) THEN
277 amu(i)=rho(i)/rho0(i)-one
278 IF(iflag==0) THEN
279 p(i)=-fac*finter(kf,amu(i),npf,tf,dpdmu)
280 ELSE
281 pdelt(i)=( c1*(bulk3(i)*dedm(i))*(vlamda3+vmu2)+
282 & (-c2*((bulk3(i)+bulkt3)*sm(i))
283 & +c3*((bulk3(i)*bulkt3)*em(i))))
284 & / ((vlamda3+vmu2)+c2*(bulk3(i)+bulkt3)*half)
285 p(i)=sm(i)+pdelt(i)
286 & -fac*finter(kf,amu(i),npf,tf,dpdmu)
287 ENDIF
288 ELSE
289 pdelt(i)=( c1*(bulk3(i)*dedm(i))*(vlamda3+vmu2)+
290 & (-c2*((bulk3(i)+bulkt3)*sm(i))
291 & +c3*((bulk3(i)*bulkt3)*em(i)
292 & / ((vlamda3+vmu2)+c2*(bulk3(i)+bulkt3)*half)
293 p(i)=sm(i)+pdelt(i)
294 ENDIF
295 IF(p(i)<=pmin) p(i)=pmin
296 ENDDO
297
298
299 DO i=1,nel
300 dpdro(i)=two_third*g2(i)+third*(bulk3(i)
301 & +p0*(one-phi)/(one+gama(i)-phi)**two)
302 ENDDO
303
304 DO i=1,nel
305 soundsp(i)=sqrt(dpdro(i)/rho0(i))
306 ENDDO
307
308
309 DO i=1,nel
310 signxx(i)=dsxx(i)+dsdxx(i)+p(i)-sigair(i)
311 signyy(i)=dsyy(i)+dsdyy(i)+p(i)-sigair(i)
312 signzz(i)=dszz(i)+dsdzz(i)+p(i)-sigair(i)
313 signxy(i)=dsxy(i)+dsdxy(i)
314 signyz(i)=dsyz(i)+dsdyz(i)
315 signzx(i)=dszx(i)+dsdzx(i)
316 viscmax(i)= zero
317 uvar(i,1)=sigair(i)
318 ENDDO
319
320 RETURN
321