54 1 IFLAG, MATLAW, LOCAL_MATID, NEL,
55 2 EINT, PRES, RHO, SSP,
57 4 NPROPM, NPROPMI, BUFMAT, OFF,
58 5 THETA, BURNFRAC, BURNTIME, DELTAX,
59 6 CURRENT_TIME,SIGOLD, SNPC, STF,
60 7 NPF, TF, VAREOS, NVAREOS,
61 8 MAT_PARAM, NVARTMP_EOS, VARTMP_EOS, NUMMAT,
66 USE matparam_def_mod ,
ONLY : matparam_struct_
72#include "implicit_f.inc"
80 INTEGER,
INTENT(IN) :: SNPC, STF,NUMMAT
81 INTEGER,
INTENT(IN) :: IFLAG
82 INTEGER,
INTENT(IN) :: MATLAW, LOCAL_MATID, NEL, NPROPM, NPROPMI
83 my_real,
INTENT(IN) :: PM(NPROPM, NUMMAT),SIGOLD(NEL,6)
84 INTEGER,
INTENT(IN) :: IPM(NPROPMI, NUMMAT)
85 my_real,
INTENT(IN) :: VOL(NEL), OFF(NEL)
86 my_real,
INTENT(OUT) :: GRUN(NEL)
87 my_real,
INTENT(INOUT) :: EINT(NEL), RHO(NEL), THETA(NEL)
88 my_real,
INTENT(OUT) :: PRES(NEL), SSP(NEL)
89 my_real,
INTENT(IN) :: burntime(nel), deltax(nel), current_time
90 my_real,
INTENT(INOUT) :: burnfrac(nel), bufmat(*)
91 INTEGER,
INTENT(IN) :: NPF(),NVAREOS
92 my_real,
INTENT(IN) :: tf(stf),vareos(nvareos*nel)
93 TYPE(matparam_struct_),
INTENT(IN) :: MAT_PARAM
94 INTEGER,
INTENT(IN) :: NVARTMP_EOS
95 INTEGER,
INTENT(INOUT) :: VARTMP_EOS(NEL,NVARTMP_EOS)
96 my_real,
INTENT(INOUT) :: aburn(nel)
100 INTEGER :: II, EOSTYPE
101 my_real :: c0, c1, rho0(nel)
102 my_real :: mu(nel), mu2(nel), espe(nel), dpde(nel), ecold(nel), dvol(nel),
103 . df(nel), psh(nel),muold(nel)
105 my_real :: gamma, pstar
106 my_real :: b1, b2, r1, r2, w1, vdet, bhe
107 my_real :: r1v, r2v, wdr1v, wdr2v, dr1v, er1v, er2v
108 my_real :: tb, bfrac1, bfrac2
111 my_real :: qopt,eadd,tbegin,tend,rr,a,m,n,rr2,alpha_unit,lambda
121 rho0(1:nel) = pm(1, local_matid)
122 mat(1:nel) = local_matid
136 IF (vol(ii) > zero)
THEN
137 mu(ii) = rho(ii) / rho0(ii) - one
138 df(ii) = rho0(ii) / rho(ii)
139 psh(ii) = pm(88, local_matid)
149 b1 = pm(33, local_matid)
150 b2 = pm(34, local_matid)
151 r1 = pm(35, local_matid)
152 r2 = pm(36, local_matid)
153 w1 = pm(45, local_matid)
154 vdet = pm(38, local_matid)
155 bhe = pm(40, local_matid)
156 c0 = pm(43, local_matid)
157 c1 = pm(44, local_matid)
158 qopt = pm(42, local_matid)
159 eadd = pm(160,local_matid)
160 tbegin = pm(161,local_matid)
161 tend = pm(162,local_matid)
162 rr = pm(163,local_matid)
163 a = pm(164,local_matid)
164 m = pm(165,local_matid)
165 n = pm(166,local_matid)
166 rr2 = pm(167,local_matid)
167 alpha_unit = pm(168,mat(1))
168 ibfrac = nint(pm(41, local_matid
171 IF (vol(ii) > zero)
THEN
174 IF (burnfrac(ii) < one)
THEN
178 IF (ibfrac /= 1 .AND. current_time
THEN
180 IF (deltax(ii) > zero)
THEN
181 bfrac1 = vdet * (current_time - tb) / three_half / deltax(ii)
184 IF (ibfrac /= 2)
THEN
185 bfrac2 = bhe * (one - df(ii))
188 burnfrac(ii) =
max(bfrac1, bfrac2)
189 IF (burnfrac(ii) < em04)
THEN
192 IF (burnfrac(ii) > one)
THEN
204 IF (vol(ii) > zero)
THEN
205 r1v = b1 * w1 / (r1 * df(ii))
206 r2v = b2 * w1 / (r2 * df(ii))
210 er1v = exp(-r1 * df(ii))
211 er2v = exp(-r2 * df(ii))
212 pold(ii) = - psh(ii) + wdr1v * er1v + wdr2v * er2v + dr1v
213 pold(ii) = burnfrac(ii) * pold(ii) + (one - burnfrac(ii)) * (-psh(ii)+(c0 + c1 * mu(ii)))
219 SELECT CASE (nint(qopt))
222 IF (vol(ii) > zero)
THEN
224 IF(current_time > tend .AND. aburn(ii)==one)
THEN
227 ELSEIF (current_time <= tbegin)
THEN
232 eint(ii) = eint(ii)+(lambda-aburn(ii))*eadd*
max(em20,vol(ii)/df(ii))
239 IF (vol(ii) > zero)
THEN
241 IF(current_time > tend .AND. aburn(ii)==one)
THEN
244 ELSEIF (current_time <= tbegin)
THEN
248 lambda = (current_time-tbegin)*rr
249 lambda =
min(one,lambda)
250 eint(ii) = eint(ii)+(lambda-aburn(ii))*eadd*
max(em20,vol(ii)/df(ii))
257 IF (vol(ii) > zero)
THEN
259 IF(current_time > tend .AND. aburn(ii)==one)
THEN
262 ELSEIF (current_time <= tbegin)
THEN
266 lambda = half*rr*current_time**2 - rr*tbegin*current_time + rr2
267 lambda =
max(zero,
min(one,lambda))
268 eint(ii) = eint(ii)+(lambda-aburn(ii))*eadd*
max(em20,vol(ii)/df(ii))
275 IF (vol(ii) > zero)
THEN
277 IF(pold(ii)+psh(ii) > zero )
THEN
278 lambda=aburn(ii)+ fac_pred*dt1*a*exp( m*log(one+aburn(ii)) )*exp(n*log(alpha_unit*(pold(ii)+psh(ii))))
279 lambda =
max(lambda,zero)
280 lambda =
min(lambda,one)
281 eint(ii) = eint(ii)+(lambda-aburn
291 IF (vol(ii) > zero)
THEN
292 r1v = b1 * w1 / (r1 * df(ii))
293 r2v = b2 * w1 / (r2 * df(ii))
297 er1v = exp(-r1 * df(ii))
298 er2v = exp(-r2 * df(ii))
299 pres(ii) = - psh(ii) + wdr1v * er1v + wdr2v * er2v + dr1v
300 ssp(ii) = b1 * er1v * (-w1 / df(ii) / r1 + r1 * df(ii) - w1)
301 . + b2 * er2v * (-w1 / df(ii) / r2 + r2 * df(ii
302 . + dr1v + (pres(ii) + psh
303 pres(ii) = burnfrac(ii) * pres(ii
304 . (one - burnfrac(ii)) * (-psh(ii)+(c0 + c1 * mu(ii)))
305 grun(ii) = burnfrac(ii) * w1
306 ssp(ii) = burnfrac(ii) * (ssp(ii) * df(ii) / rho0(ii)) +
307 . (one - burnfrac(ii)) * (c1 / rho0(ii))
313 eostype = ipm(4, local_matid)
314 muold(1:nel) = mu(1:nel)
316 CALL eosmain(2 , nel , eostype , pm , off , eint,
319 . pres , ssp , dpde , theta ,
320 . bufmat , sigold , muold , matlaw ,
321 . npf , tf , vareos , nvareos, mat_param,
322 . burnfrac, nvartmp_eos, vartmp_eos)
325 IF (vol(ii) > zero)
THEN
326 ssp(ii) = ssp(ii) / rho0(ii)
327 grun(ii) = dpde(ii) / (one + mu(ii))
334 print*,
"LAW", matlaw,
"NOT COMPATIBLE WITH LAW 151 (MULTIFLUID)"
subroutine eosmain(iflag, nel, eostyp, pm, off, eint, rho, rho0, mu, mu2, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde, theta, bufmat, sig, mu_bak, mlw, npf, tf, vareos, nvareos, mat_param, bfrac, nvartmp, vartmp)
subroutine multi_submatlaw(iflag, matlaw, local_matid, nel, eint, pres, rho, ssp, vol, grun, pm, ipm, npropm, npropmi, bufmat, off, theta, burnfrac, burntime, deltax, current_time, sigold, snpc, stf, npf, tf, vareos, nvareos, mat_param, nvartmp_eos, vartmp_eos, nummat, aburn)