42 1 IFLAG,NEL ,PMIN ,OFF ,EINT ,MU ,
43 2 ESPE ,DVOL ,DF ,VNEW ,PSH ,
45 4 NPF ,TF ,SNPC,STF, EOS_STRUCT)
50 USE eos_param_mod ,
ONLY : eos_param_
80 INTEGER,
INTENT(IN) :: SNPC,STF
81 INTEGER,
INTENT(IN) :: IFLAG, NEL,NPF(SNPC)
82 my_real,
INTENT(IN) :: OFF(NEL), MU(NEL), ESPE(NEL), DVOL(NEL), DF(NEL), VNEW(NEL), TF(STF)
83 my_real,
INTENT(INOUT) :: PSH(NEL), EINT(NEL), DPDM(NEL), DPDE(NEL), PNEW(NEL)
84 my_real,
INTENT(IN) :: pmin
85 TYPE(eos_param_ ),
INTENT(IN) :: EOS_STRUCT
90 my_real :: E0,AA,BB,DVV,PP
91 my_real :: XSCALE_A,XSCALE_B,FSCALE_A,FSCALE_B
92 INTEGER :: A_fun_id, B_fun_id
93 my_real :: res_a(nel),res_b(nel),deri_a(nel),deri_b(nel)
94 my_real,
EXTERNAL :: finter
99 psh(1:nel) = eos_struct%PSH
100 xscale_a = eos_struct%UPARAM(1)
101 xscale_b = eos_struct%UPARAM(2)
102 fscale_a = eos_struct%UPARAM(3)
103 fscale_b = eos_struct%UPARAM(4)
104 a_fun_id = eos_struct%IPARAM(1)
105 b_fun_id = eos_struct%IPARAM(2)
109 IF(a_fun_id == 0)
THEN
113 res_b(i) = fscale_b*finter(b_fun_id,mu(i),npf,tf,deri_b(i))
115 ELSEIF(b_fun_id == 0)
THEN
117 res_a(i) = fscale_a*finter(a_fun_id,mu(i),npf,tf,deri_a(i))
123 res_a(i) = fscale_a*finter(a_fun_id,mu(i),npf,tf,deri_a(i))
124 res_b(i) = fscale_b*finter(b_fun_id,mu(i),npf,tf,deri_b(i))
128 pp = res_a(i) + res_b(i) * espe(i) - psh(i)
129 dpdm(i) = deri_a(i)+deri_b(i)*espe(i) + res_b(i)*
131 pnew(i) =
max(pp,pmin)*off(i)
135 ELSEIF(iflag == 1)
THEN
142 ELSEIF(b_fun_id == 0)
THEN
144 res_a(i) = fscale_a*finter(a_fun_id,mu(i),npf,tf,deri_a(i))
149 res_a(i) = fscale_a*finter(a_fun_id,mu(i),npf,tf,deri_a(i))
150 res_b(i) = fscale_b*finter(b_fun_id,mu(i),npf,tf,deri_b(i))
157 dvv = half*dvol(i)*df(i) /
max(em15,vnew(i))
158 pp = aa + bb * espe(i)
159 pnew(i) = (aa+bb*(espe(i)-psh(i)*dvv)
160 pnew(i) =
max(pnew(i),pmin )*off(i)
161 eint(i) = eint(i) - half*dvol(i)*(pnew(i)+psh(i) )
165 ELSEIF (iflag == 2)
THEN
167 IF(a_fun_id == 0)
THEN
170 res_b(i) = fscale_b*finter(b_fun_id,mu(i),npf,tf,deri_b(i))
173 ELSEIF(b_fun_id == 0)
THEN
175 res_a(i) = fscale_a*finter(a_fun_id,mu(i),npf,tf,deri_a(i))
181 res_a(i) = fscale_a*finter(a_fun_id,mu(i),npf,tf,deri_a(i))
182 res_b(i) = fscale_b*finter(b_fun_id,mu(i),npf,tf,deri_b(i))
186 IF (vnew(i) > zero)
THEN
187 pp = res_a(i) + res_b(i)*espe(i) - psh(i)
188 dpdm(i) = deri_a(i)+deri_b(i)*espe(i) + res_b(i)*(pp+psh(i))/( (one+mu(i))*(one+mu(i)) )
subroutine tabulated(iflag, nel, pmin, off, eint, mu, espe, dvol, df, vnew, psh, pnew, dpdm, dpde, npf, tf, snpc, stf, eos_struct)