80
81 use eosexponential_mod
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119 USE matparam_def_mod , ONLY : matparam_struct_
120 USE compaction_mod , ONLY : compaction
121 USE compaction2_mod , ONLY : compaction2
122 USE compaction_tab_mod , ONLY : compaction_tab
123
124
125
126#include "implicit_f.inc"
127
128
129
130#include "param_c.inc"
131
132
133
134#include "com04_c.inc"
135#include "com08_c.inc"
136#include "tabsiz_c.inc"
137
138
139
140 INTEGER MAT(NEL),IFLAG, EOSTYP, NEL, MLW, NVAREOS
141 my_real pm(npropm,nummat),bufmat(sbufmat),off(nel),eint(nel),rho(nel),rho0(nel),mu(nel),mu2(nel),espe(nel),dvol(nel),
142 . df(nel),vnew(nel),psh(nel),pnew(nel),dpdm(nel),dpde(nel),theta(nel),mu_bak(nel),
143 . sig(nel,6),vareos(nvareos*nel)
144 my_real,
INTENT(INOUT) :: bfrac(nel)
145 INTEGER,INTENT(IN)::NPF(SNPC)
147 TYPE(MATPARAM_STRUCT_), INTENT(IN) :: MAT_PARAM
152 integer ,intent(in) :: nvartmp
153 integer ,dimension(nel,nvartmp) ,intent(inout) :: vartmp
154
155
156
157 INTEGER I, ISFLUID
158
159
160
161 IF(iflag == 0) THEN
162 DO i=1,nel
163 mu2(i)=
max(zero,mu(i))**2
164 espe(i)=df(i)*eint(i)/
max(em15,vnew(i))
165 ENDDO
166
167 ELSEIF (iflag == 2) THEN
168
169 DO i = 1, nel
170 IF (vnew(i) > zero) THEN
171 mu2(i)=
max(zero,mu(i))**2
172 ENDIF
173 espe(i) = df(i) * eint(i)
174 ENDDO
175
176 ENDIF
177
178 SELECT CASE (eostyp)
179
180 CASE (1)
181
182
183
185 1 iflag ,nel ,pm ,off ,eint ,mu ,mu2,
186 2 espe ,dvol ,df ,vnew ,mat ,psh ,
187 3 pnew ,dpdm ,dpde )
188
189 CASE (2)
190
191
192
194 1 iflag ,nel ,pm ,off ,eint ,mu ,mu2,
195 2 espe ,dvol ,df ,vnew ,mat ,rho0,
196 3 pnew ,dpdm ,dpde ,psh ,
197 4 nummat ,npropm)
198
199 CASE (3)
200
201
202
204 1 iflag ,nel ,pm ,off ,eint ,mu ,mu2,
205 2 espe ,dvol ,df ,vnew ,mat ,psh ,
206 3 pnew ,dpdm ,dpde ,vareos ,nvareos)
207
208 CASE (4)
209
210
211
213 1 iflag ,nel ,pm ,off ,eint ,mu ,mu2,
214 2 espe ,dvol ,df ,vnew ,mat ,
215 3 pnew ,dpdm ,dpde )
216
217 CASE (5)
218
219
220
221 tab_temp(1:nel) = theta(1:nel)
223 1 iflag ,nel ,pm ,off ,eint ,rho ,rho0 ,
224 2 espe ,dvol ,mat ,pnew ,dpdm ,dpde,
225 3 tab_temp ,bufmat )
226
227 CASE(6)
228
229
230
232 1 iflag ,nel ,pm ,off ,eint ,mu ,
233 2 espe ,dvol ,df ,vnew ,mat ,psh ,
234 3 pnew ,dpdm ,dpde )
235
236 CASE(7)
237
238
239
241 1 iflag ,nel ,pm ,off ,eint ,mu ,
242 2 espe ,dvol ,df ,vnew ,mat ,psh ,
243 3 pnew ,dpdm ,dpde )
244
245 CASE(8)
246
247
248
250 1 iflag ,nel ,pm ,off ,eint ,mu ,
251 2 dvol ,vnew ,mat ,psh ,
252 3 pnew ,dpdm ,dpde )
253
254 CASE(9)
255
256
257
259 1 iflag ,nel ,pm ,off ,eint ,mu ,
260 2 espe ,dvol ,df ,vnew ,mat ,psh ,
261 3 pnew ,dpdm ,dpde )
262
263 CASE(10)
264
265
266
268 1 iflag ,nel ,pm ,off ,eint ,mu ,mu2,
269 2 espe ,dvol ,df ,vnew ,mat ,psh ,
270 3 pnew ,dpdm ,dpde )
271
272 CASE(11)
273
274
275
277 1 iflag ,nel ,pm ,off ,eint ,mu ,
278 2 espe ,dvol ,df ,vnew ,mat ,psh ,
279 3 pnew ,dpdm ,dpde )
280
281 CASE(12)
282
283
284
286 1 iflag ,nel ,pm ,off ,eint ,mu ,mu2,
287 2 espe ,dvol ,df ,vnew ,mat ,psh ,
288 3 pnew ,dpdm ,dpde ,mat_param,
289 4 vareos ,nvareos ,nummat,npropm ,dt1 ,rho0 ,bfrac)
290
291 CASE(13)
292
293
294
295 CALL compaction(
296 1 iflag ,nel ,pm ,off ,eint ,mu ,mu2,
297 2 dvol ,mat ,psh ,
298 3 pnew ,dpdm ,dpde ,mu_bak,
299 4 npropm,nummat,mat_param%EOS)
300
301 CASE(14)
302
303
304
306 1 iflag ,nel ,pm ,off ,eint ,mu ,
307 2 espe ,dvol ,vnew ,mat ,psh ,
308 3 pnew ,dpdm ,dpde )
309 CASE(15)
310
311
312
314 1 iflag ,nel ,pm ,off , eint ,mu ,mu2,
315 2 espe ,dvol ,df ,vnew , mat ,psh ,
316 3 pnew ,dpdm ,dpde )
317
318 CASE(16)
319
320
321
323 1 iflag ,nel ,pm ,off ,eint ,mu ,mu2,
324 2 espe ,dvol ,df ,vnew ,mat ,psh ,
325 3 pnew ,dpdm ,dpde ,tab_temp,sig)
326
327 CASE(17)
328
329
330
332 1 iflag ,nel ,pm ,off ,eint ,mu ,
333 2 espe ,dvol ,df ,vnew ,mat ,psh ,
334 3 pnew ,dpdm ,dpde ,
335 4 npf ,tf)
336
337 CASE (18)
338
339
340
342 1 iflag ,nel ,pm ,off ,eint ,mu ,
343 2 dvol ,vnew ,mat ,psh ,pnew ,dpdm,
344 3 dpde )
345
346 CASE (19)
347
348
349
350 CALL eosexponential(
351 1 iflag ,nel ,pm ,off ,eint ,
352 2 dvol ,vnew ,mat ,psh ,
353 3 pnew ,dpdm ,dpde ,tt ,
354 4 npropm ,nummat )
355
356 CASE(20)
357
358
359
360 CALL compaction2(
361 1 iflag ,nel ,pm ,off ,eint ,mu ,
362 2 dvol ,mat ,psh ,
363 3 pnew ,dpdm ,dpde ,mu_bak,
364 4 npf ,tf ,snpc ,stf ,npropm,nummat,
365 5 mat_param%EOS)
366
367 CASE(21)
368
369
370
371 CALL compaction_tab(
372 1 iflag ,nel ,pm ,off ,eint ,
373 2 dvol ,mat ,psh ,dt1 ,rho ,rho0 ,
374 3 pnew ,dpdm ,dpde ,mu_bak,
375 4 npropm,nummat,nvareos,vareos,nvartmp,vartmp,
376 5 mat_param%EOS)
377
378 END SELECT
379
380
381
382
383 IF(iflag == 0) RETURN
384
385 dtemp(1:nel) = zero
386
387 SELECT CASE (eostyp)
388
389 CASE (5,16)
390
391
392 DO i=1,nel
393 IF(off(i) == one .AND. vnew(i) > zero) THEN
394 theta(i) = tab_temp(i)
395 dtemp(i) = zero
396 ENDIF
397 ENDDO
398
399 CASE(8,13,18,20)
400
401 cp = pm(69,mat(1)) / rho0(1)
402 cv = cp
403 IF(cv > zero)THEN
404 DO i=1,nel
405 IF(off(i) == one .AND. vnew(i) > zero) THEN
406 dtemp(i) = (pnew(i)+psh(i))*dvol(i)/cv
407 ENDIF
408 ENDDO
409 ENDIF
410
411 CASE DEFAULT
412
413 DO i=1,nel
414 IF(off(i) == one .AND. vnew(i) > zero) THEN
415 dtemp(i) = -(theta(i)*dpde(i)*df(i))*dvol(i)/vnew(i)
416 ENDIF
417 ENDDO
418
419 END SELECT
420
421
422 isfluid = mat_param%eos%isfluid
423 if(isfluid == 0)then
424
425 do i=1,nel
426 IF(dtemp(i) > zero)THEN
427 theta(i) = theta(i) + dtemp(i)
428 endif
429 theta(i) =
max(zero,theta(i))
430 end do
431 else
432
433 do i=1,nel
434 theta(i) = theta(i) + dtemp(i)
435 theta(i) =
max(zero,theta(i))
436 end do
437 end if
438
439
440 RETURN
subroutine eoslinear(iflag, nel, pm, off, eint, mu, dvol, vnew, mat, psh, pnew, dpdm, dpde)
subroutine eospolyno(iflag, nel, pm, off, eint, mu, mu2, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde)
subroutine gruneisen(iflag, nel, pm, off, eint, mu, mu2, espe, dvol, df, vnew, mat, rho0, pnew, dpdm, dpde, psh, nummat, npropm)
subroutine idealgas(iflag, nel, pm, off, eint, mu, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde)
subroutine idealgas_vt(iflag, nel, pm, off, eint, mu, mu2, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde, theta, sig)
subroutine jwl(iflag, nel, pm, off, eint, mu, mu2, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde)
subroutine lszk(iflag, nel, pm, off, eint, mu, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde)
subroutine murnaghan(iflag, nel, pm, off, eint, mu, dvol, vnew, mat, psh, pnew, dpdm, dpde)
subroutine nasg(iflag, nel, pm, off, eint, mu, espe, dvol, vnew, mat, psh, pnew, dpdm, dpde)
subroutine noble_abel(iflag, nel, pm, off, eint, mu, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde)
subroutine osborne(iflag, nel, pm, off, eint, mu, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde)
subroutine powder_burn(iflag, nel, pm, off, eint, mu, mu2, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde, mat_param, vareos, nvareos, npropm, nummat, dt1, rho0, bfrac)
subroutine puff(iflag, nel, pm, off, eint, mu, mu2, espe, dvol, df, vnew, mat, pnew, dpdm, dpde)
subroutine sesame(iflag, nel, pm, off, eint, rho, rho0, espe, dvol, mat, pnew, dpdm, dpde, theta, bufmat)
subroutine stiffgas(iflag, nel, pm, off, eint, mu, mu2, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde)
subroutine tabulated(iflag, nel, pm, off, eint, mu, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde, npf, tf)
subroutine tillotson(iflag, nel, pm, off, eint, mu, mu2, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde, vareos, nvareos)