18 #define INTE_EXACT (TV_ENERGY_TABLE == 1 ? 0:1)
31 double FDeriv, cs, Gam1, Gam2, Gam3;
32 double prs, rho, e, dT, drho, rho2, rho3, rho4;
33 double dPdr, d2Pdr2, dPdt, d2Pdt2, d2Pdrdt, dEdt, d2Edt2;
35 double prs_rmm, prs_rpp, prs_rm, prs_rp;
36 double prs_tmm, prs_tpp, prs_tm, prs_tp;
37 double prs_rm_tm, prs_rp_tm, prs_rm_tp, prs_rp_tp;
38 double prs_rmm_tmm, prs_rpp_tpp, prs_rmm_tpp, prs_rpp_tmm;
39 double prs_rp_tmm, prs_rpp_tm, prs_rmm_tp, prs_rm_tpp;
40 double prs_rm_tmm, prs_rmm_tm, prs_rp_tpp, prs_rpp_tp;
42 double epp, emm, ep, em;
45 VAR_LOOP(nv) vm[nv] = vp[nv] = vpp[nv] = vmm[nv] = v[nv];
68 vmm[
RHO] = rho*(1.0 - 2.0*drho);
69 vm[
RHO] = rho*(1.0 - 1.0*drho);
70 vp[
RHO] = rho*(1.0 + 1.0*drho);
71 vpp[
RHO] = rho*(1.0 + 2.0*drho);
79 dPdr = prs_rp - prs_rm;
82 d2Pdr2 = prs_rp - 2.0*prs + prs_rm;
83 d2Pdr2 /= rho2*drho*drho;
85 dPdr = prs_rmm - 8.0*prs_rm + 8.0*prs_rp - prs_rpp ;
86 dPdr /= 12.0*rho*drho;
88 d2Pdr2 = -prs_rmm + 16.0*prs_rm - 30.0*prs + 16.0*prs_rp - prs_rpp;
89 d2Pdr2 /= 12.0*rho2*drho*drho;
94 prs_tmm =
Pressure(v, T*(1.0 - 2.0*dT));
95 prs_tm =
Pressure(v, T*(1.0 - 1.0*dT));
96 prs_tp =
Pressure(v, T*(1.0 + 1.0*dT));
97 prs_tpp =
Pressure(v, T*(1.0 + 2.0*dT));
100 dPdt = prs_tp - prs_tm;
103 d2Pdt2 = prs_tp - 2.0*prs + prs_tm;
106 dPdt = prs_tmm - 8.0*prs_tm + 8.0*prs_tp - prs_tpp;
109 d2Pdt2 = -prs_tmm + 16.0*prs_tm - 30.0*prs + 16.0*prs_tp - prs_tpp;
110 d2Pdt2 /= 12.0*T*T*dT*dT;
132 d2Edt2 = ep - 2.0*e + em;
135 dEdt = emm - 8.0*em + 8.0*ep - epp;
138 d2Edt2 = -emm + 16.0*em -30.0*e + 16.0*ep - epp;
139 d2Edt2 /= 12.0*T*T*dT*dT;
144 prs_rm_tm =
Pressure(vm, T*(1.0 - 1.0*dT));
145 prs_rp_tm =
Pressure(vp, T*(1.0 - 1.0*dT));
146 prs_rm_tp =
Pressure(vm, T*(1.0 + 1.0*dT));
147 prs_rp_tp =
Pressure(vp, T*(1.0 + 1.0*dT));
149 prs_rmm_tmm =
Pressure(vmm, T*(1.0 - 2.0*dT));
150 prs_rpp_tmm =
Pressure(vpp, T*(1.0 - 2.0*dT));
151 prs_rmm_tpp =
Pressure(vmm, T*(1.0 + 2.0*dT));
152 prs_rpp_tpp =
Pressure(vpp, T*(1.0 + 2.0*dT));
154 prs_rp_tmm =
Pressure(vp, T*(1.0 - 2.0*dT));
155 prs_rpp_tm =
Pressure(vpp, T*(1.0 - 1.0*dT));
156 prs_rmm_tp =
Pressure(vmm, T*(1.0 + 1.0*dT));
157 prs_rm_tpp =
Pressure(vm, T*(1.0 + 2.0*dT));
159 prs_rm_tmm =
Pressure(vm, T*(1.0 - 2.0*dT));
160 prs_rmm_tm =
Pressure(vmm, T*(1.0 - 1.0*dT));
161 prs_rp_tpp =
Pressure(vp, T*(1.0 + 2.0*dT));
162 prs_rpp_tp =
Pressure(vpp, T*(1.0 + 1.0*dT));
167 d2Pdrdt = (prs_rp_tp + prs_rm_tm - prs_rp_tm - prs_rm_tp);
168 d2Pdrdt /= 4.0*T*dT*rho*drho;
170 d2Pdrdt = 74.0*(prs_rp_tp + prs_rm_tm - prs_rp_tm - prs_rm_tp) \
171 + 44.0*(prs_rpp_tpp + prs_rmm_tmm - prs_rpp_tmm - prs_rmm_tpp) \
172 - 63.0*(prs_rp_tmm + prs_rpp_tm + prs_rmm_tp + prs_rm_tpp) \
173 + 63.0*(prs_rm_tmm + prs_rmm_tm + prs_rp_tpp + prs_rpp_tp);
175 d2Pdrdt /= 600.0*T*dT*rho*drho;
180 Gam1 = rho4*d2Pdr2 + 2.0*rho2*dPdr;
181 Gam2 = 3.0*T*(rho2/dEdt)*dPdt*d2Pdrdt;
182 Gam3 = (T/dEdt)*(T/dEdt)*dPdt*dPdt;
183 Gam3 *= 3.0*d2Pdt2 + (1./
T)*dPdt*(1.0 - (T/dEdt)*d2Edt2);
185 FDeriv = (Gam1 + Gam2 + Gam3)/(2.0*cs*cs*rho3);
double InternalEnergy(double *v, double T)
double FundamentalDerivative(double *v, double T)
double Pressure(double *v, double T)
double InternalEnergyFunc(double *v, double T)