102
103
104
105
106
107
108
109
110
111
112
125 USE compaction_mod , ONLY : compaction
131 USE eosexponential_mod , ONLY : eosexponential
132 USE compaction2_mod , ONLY : compaction2
133 USE compaction_tab_mod , ONLY : compaction_tab
134
135
136
137
138
139
140
141
142
143
144 USE eos_param_mod ,ONLY : analy_temp
145 USE matparam_def_mod , ONLY : matparam_struct_
146 USE compaction_mod , ONLY : compaction
147 USE compaction2_mod , ONLY : compaction2
148 USE compaction_tab_mod , ONLY : compaction_tab
149 USE eosexponential_mod , ONLY : eosexponential
150
151
152
153#include "implicit_f.inc"
154
155
156
157#include "param_c.inc"
158
159
160
161#include "com04_c.inc"
162#include "com08_c.inc"
163#include "tabsiz_c.inc"
164
165
166
167 INTEGER, INTENT(IN) :: IFLAG
168 INTEGER, INTENT(IN) :: NEL
169 INTEGER, INTENT(IN) :: EOSTYP
170 my_real,
INTENT(IN) :: pm(npropm,nummat)
171 my_real,
INTENT(IN) :: off(nel)
172 my_real,
INTENT(INOUT) :: eint(nel)
173 my_real,
INTENT(IN) :: rho(nel)
174 my_real,
INTENT(IN) :: rho0(nel)
176 my_real,
INTENT(INOUT) :: mu2(nel)
177 my_real,
INTENT(INOUT) :: espe(nel)
178 my_real,
INTENT(IN) :: dvol(nel)
180 my_real,
INTENT(IN) :: vnew(nel)
181 INTEGER, INTENT(IN) :: MAT(NEL)
182 my_real,
INTENT(INOUT) :: psh(nel)
183 my_real,
INTENT(INOUT) :: pnew(nel)
184 my_real,
INTENT(INOUT) :: dpdm(nel)
185 my_real,
INTENT(INOUT) :: dpde(nel)
186 my_real,
INTENT(INOUT) :: theta(nel)
187 my_real,
INTENT(IN) :: bufmat(sbufmat)
188 my_real,
INTENT(IN) :: sig(nel,6)
189 my_real,
INTENT(INOUT) :: mu_bak(nel)
190 INTEGER, INTENT(IN) :: MLW
191 INTEGER, INTENT(IN) :: NPF(SNPC)
193 my_real,
INTENT(INOUT) :: bfrac(nel)
194 INTEGER, INTENT(IN) :: NVAREOS
195 my_real,
INTENT(INOUT) :: vareos(nvareos*nel)
196 TYPE(MATPARAM_STRUCT_), INTENT(IN) :: MAT_PARAM
197 INTEGER ,INTENT(IN) :: NVARTMP
198 INTEGER ,DIMENSION(NEL,NVARTMP) ,INTENT(INOUT) :: VARTMP
199
200
201
202 INTEGER I,ISFLUID
209
210
211
212 IF(iflag == 0) THEN
213 DO i=1,nel
214 mu2(i)=
max(zero,mu(i))**2
215 espe(i)=df(i)*eint(i)/
max(em15,vnew(i))
216 ENDDO
217
218 ELSEIF (iflag == 2) THEN
219
220 DO i = 1, nel
221 IF (vnew(i) > zero) THEN
222 mu2(i)=
max(zero,mu(i))**2
223 ENDIF
224 espe(i) = df(i) * eint(i)
225 ENDDO
226
227 ENDIF
228
229 pmin = pm(37,mat(1))
230
231 SELECT CASE (eostyp)
232
233 CASE (1)
234
235
236
238 1 iflag ,nel ,pmin ,off ,eint ,mu ,mu2,
239 2 espe ,dvol ,df ,vnew ,psh ,
240 3 pnew ,dpdm ,dpde ,mat_param%EOS)
241
242 CASE (2)
243
244
245
247 1 iflag ,nel ,pmin ,off ,eint ,mu ,mu2,
248 2 espe ,dvol ,df ,vnew ,rho0,
249 3 pnew ,dpdm ,dpde ,psh ,
250 4 mat_param%EOS)
251
252 CASE (3)
253
254
255
257 1 iflag ,nel ,pmin ,off ,eint ,mu ,mu2,
258 2 espe ,dvol ,df ,vnew ,psh ,
259 3 pnew ,dpdm ,dpde ,vareos ,nvareos,mat_param%EOS)
260
261 CASE (4)
262
263
264
266 1 iflag ,nel ,pmin ,off ,eint ,mu ,mu2,
267 2 espe ,dvol ,df ,vnew ,
268 3 pnew ,dpdm ,dpde ,mat_param%EOS)
269
270 CASE (5)
271
272
273
274 tab_temp(1:nel) = theta(1:nel)
276 1 iflag ,nel ,pmin ,off ,eint ,rho ,rho0 ,
277 2 espe ,dvol ,pnew ,dpdm ,dpde,
278 3 tab_temp ,bufmat ,mat_param%EOS)
279
280 CASE(6)
281
282
283
285 1 iflag , nel ,off ,eint ,mu ,
286 2 espe , dvol ,df ,vnew ,psh ,
287 3 pnew , dpdm ,dpde ,mat_param%EOS)
288
289 CASE(7)
290
291
292
294 1 iflag ,nel ,off ,eint ,mu ,
295 2 espe ,dvol ,df ,vnew ,psh ,
296 3 pnew ,dpdm ,dpde ,mat_param%EOS )
297
298 CASE(8)
299
300
301
303 1 iflag ,nel ,pmin,off ,eint ,mu ,
304 2 dvol ,vnew ,psh ,
305 3 pnew ,dpdm ,dpde ,mat_param%EOS)
306
307 CASE(9)
308
309
310
312 1 iflag ,nel ,pmin ,off ,eint ,mu ,
313 2 espe ,dvol ,df ,vnew ,rho0 ,psh ,
314 3 pnew ,dpdm ,dpde ,mat_param%EOS)
315
316 CASE(10)
317
318
319
321 1 iflag , nel ,pmin ,off ,eint ,mu ,mu2,
322 2 espe , dvol ,df ,vnew ,psh ,
323 3 pnew , dpdm ,dpde ,mat_param%EOS)
324
325 CASE(11)
326
327
328
330 1 iflag , nel ,pmin ,off ,eint ,mu ,
331 2 espe , dvol ,df ,vnew ,psh ,
332 3 pnew , dpdm ,dpde ,mat_param%EOS)
333
334 CASE(12)
335
336
337
339 1 iflag ,nel ,pm ,off ,eint ,mu ,mu2,
340 2 espe ,dvol ,df ,vnew ,mat ,psh ,
341 3 pnew ,dpdm ,dpde ,mat_param,
342 4 vareos ,nvareos ,dt1 ,rho0 ,bfrac)
343
344 CASE(13)
345
346
347
348 CALL compaction(
349 1 iflag ,nel ,pmin ,off ,eint ,mu ,mu2,
350 2 dvol ,psh ,
351 3 pnew ,dpdm ,dpde ,mu_bak,
352 4 mat_param%EOS)
353
354 CASE(14)
355
356
357
359 1 iflag , nel ,pmin ,off ,eint ,mu ,
360 2 espe , dvol ,vnew ,psh ,
361 3 pnew , dpdm ,dpde ,mat_param%EOS)
362 CASE(15)
363
364
365
367 1 iflag ,nel ,pm ,off , eint ,mu ,mu2,
368 2 espe ,dvol ,df ,vnew , mat ,psh ,
369 3 pnew ,dpdm ,dpde )
370
371 CASE(16)
372
373
374
375 DO i=1,nel
376 pold(i) = -third*(sig(i,1)+sig(i,2)+sig(i,3))
377 ENDDO
379 1 iflag ,nel ,pmin ,off ,eint ,mu ,mu2,
380 2 espe ,dvol ,df ,vnew ,psh ,rho0,rho,
381 3 pnew ,dpdm ,dpde ,tab_temp,pold ,mat_param%EOS)
382
383 CASE(17)
384
385
386
388 1 iflag , nel ,pmin ,off ,eint ,mu ,
389 2 espe , dvol ,df ,vnew ,psh ,
390 3 pnew , dpdm ,dpde ,
391 4 npf , tf ,snpc ,stf ,mat_param%EOS)
392
393 CASE (18)
394
395
396
398 1 iflag ,nel ,pmin ,off ,eint ,mu ,
399 2 dvol ,vnew ,psh ,pnew ,dpdm,
400 3 dpde ,mat_param%EOS, pm(104,mat(1)), pm(32,mat(1)))
401
402 CASE (19)
403
404
405
406 CALL eosexponential(
407 1 iflag ,nel ,off ,eint ,
408 2 dvol ,vnew ,psh ,
409 3 pnew ,dpdm ,dpde ,tt ,
410 4 mat_param%EOS)
411
412 CASE(20)
413
414
415
416 CALL compaction2(
417 1 iflag ,nel ,pmin ,off ,eint ,mu ,
418 2 dvol ,psh ,
419 3 pnew ,dpdm ,dpde ,nvareos, vareos ,
420 4 npf ,tf ,snpc ,stf ,
421 5 mat_param%EOS)
422
423 CASE(21)
424
425
426
427 CALL compaction_tab(
428 1 iflag ,nel ,pmin ,off ,eint ,
429 2 dvol ,psh ,dt1 ,rho ,rho0 ,
430 3 pnew ,dpdm ,dpde ,
431 4 nvareos,vareos,nvartmp,vartmp,
432 5 mat_param%EOS)
433
434 END SELECT
435
436
437
438
439 IF(iflag == 0) RETURN
440
441 dtemp(1:nel) = zero
442
443 SELECT CASE (eostyp)
444
445 CASE (5,16)
446
447
448 DO i=1,nel
449 IF(off(i) == one .AND. vnew(i) > zero) THEN
450 theta(i) = tab_temp(i)
451 dtemp(i) = zero
452 ENDIF
453 ENDDO
454
455 CASE(8,13,18,20)
456
457 cp = pm(69,mat(1)) / rho0(1)
458 cv = cp
459 IF(cv > zero)THEN
460 DO i=1,nel
461 IF(off(i) == one .AND. vnew(i) > zero) THEN
462 dtemp(i) = (pnew(i)+psh(i))*dvol(i)/cv
463 ENDIF
464 ENDDO
465 ENDIF
466
467 CASE DEFAULT
468
469 DO i=1,nel
470 IF(pnew(i) > pmin .AND. vnew(i) > zero) THEN
471 dtemp(i) = -off(i)*(theta(i)*dpde(i)*df(i))*dvol(i)/vnew(i)
472 ENDIF
473 ENDDO
474
475 END SELECT
476
477
478 isfluid = mat_param%eos%isfluid
479 if(isfluid == 0 .AND. analy_temp == 0)then
480
481 do i=1,nel
482 IF(mu(i) > zero)THEN
483 theta(i) = theta(i) + dtemp(i)
484 endif
485 theta(i) =
max(zero,theta(i))
486 end do
487 else
488
489 do i=1,nel
490 theta(i) = theta(i) + dtemp(i)
491 theta(i) =
max(zero,theta(i))
492 end do
493 end if
494
495
496 RETURN
subroutine eoslinear(iflag, nel, pmin, off, eint, mu, dvol, vnew, psh, pnew, dpdm, dpde, eos_struct, c0, bulk)
subroutine eospolyno(iflag, nel, pmin, off, eint, mu, mu2, espe, dvol, df, vnew, psh, pnew, dpdm, dpde, eos_struct)
subroutine gruneisen(iflag, nel, pmin, off, eint, mu, mu2, espe, dvol, df, vnew, rho0, pnew, dpdm, dpde, psh, eos_struct)
subroutine idealgas(iflag, nel, off, eint, mu, espe, dvol, df, vnew, psh, pnew, dpdm, dpde, eos_struct)
subroutine idealgas_vt(iflag, nel, pmin, off, eint, mu, mu2, espe, dvol, df, vnew, psh, rho0, rho, pnew, dpdm, dpde, theta, pold, eos_struct)
subroutine jwl(iflag, nel, pm, off, eint, mu, mu2, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde)
subroutine lszk(iflag, nel, pmin, off, eint, mu, espe, dvol, df, vnew, psh, pnew, dpdm, dpde, eos_struct)
subroutine murnaghan(iflag, nel, pmin, off, eint, mu, dvol, vnew, psh, pnew, dpdm, dpde, eos_struct)
subroutine nasg(iflag, nel, pmin, off, eint, mu, espe, dvol, vnew, psh, pnew, dpdm, dpde, eos_struct)
subroutine noble_abel(iflag, nel, off, eint, mu, espe, dvol, df, vnew, psh, pnew, dpdm, dpde, eos_struct)
subroutine osborne(iflag, nel, pmin, off, eint, mu, espe, dvol, df, vnew, rho0, psh, pnew, dpdm, dpde, eos_struct)
subroutine powder_burn(npropm, nummat, iflag, nel, pm, off, eint, mu, mu2, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde, mat_param, vareos, nvareos, dt1, rho0, bfrac)
subroutine puff(iflag, nel, pmin, off, eint, mu, mu2, espe, dvol, df, vnew, pnew, dpdm, dpde, eos_struct)
subroutine sesame(iflag, nel, pmin, off, eint, rho, rho0, espe, dvol, pnew, dpdm, dpde, theta, bufmat, eos_struct)
subroutine stiffgas(iflag, nel, pmin, off, eint, mu, mu2, espe, dvol, df, vnew, psh, pnew, dpdm, dpde, eos_struct)
subroutine tabulated(iflag, nel, pmin, off, eint, mu, espe, dvol, df, vnew, psh, pnew, dpdm, dpde, npf, tf, snpc, stf, eos_struct)
subroutine tillotson(iflag, nel, pmin, off, eint, mu, mu2, espe, dvol, df, vnew, psh, pnew, dpdm, dpde, vareos, nvareos, eos_struct)