Fix ideal-gas Helmholtz energy derivatives

Add ratio of gas constants, as in GERG approach
This commit is contained in:
ian
2020-11-17 18:51:25 -05:00
parent 5c5ee7df47
commit 54ddec6aa7

View File

@@ -3083,31 +3083,34 @@ CoolPropDbl HelmholtzEOSMixtureBackend::calc_alpha0_deriv_nocache(const int nTau
std::size_t N = mole_fractions.size();
CoolPropDbl summer = 0;
CoolPropDbl tau_i, delta_i, rho_ci, T_ci;
CoolPropDbl Rmix = gas_constant();
for (unsigned int i = 0; i < N; ++i){
rho_ci = get_fluid_constant(i, irhomolar_critical);
T_ci = get_fluid_constant(i, iT_critical);
CoolPropDbl Rcomponent = components[i].EOS().R_u;
tau_i = T_ci*tau/Tr;
delta_i = delta*rhor/rho_ci;
CoolPropDbl Rratio = Rcomponent/Rmix;
if (nTau == 0 && nDelta == 0){
double logxi = (std::abs(mole_fractions[i]) > DBL_EPSILON) ? log(mole_fractions[i]) : 0;
summer += mole_fractions[i]*(components[i].EOS().base0(tau_i, delta_i) + logxi);
summer += mole_fractions[i]*Rratio*(components[i].EOS().base0(tau_i, delta_i) + logxi);
}
else if (nTau == 0 && nDelta == 1){
summer += mole_fractions[i]*rhor/rho_ci*components[i].EOS().dalpha0_dDelta(tau_i, delta_i);
summer += mole_fractions[i]*Rratio*rhor/rho_ci*components[i].EOS().dalpha0_dDelta(tau_i, delta_i);
}
else if (nTau == 1 && nDelta == 0){
summer += mole_fractions[i]*T_ci/Tr*components[i].EOS().dalpha0_dTau(tau_i, delta_i);
summer += mole_fractions[i]*Rratio*T_ci/Tr*components[i].EOS().dalpha0_dTau(tau_i, delta_i);
}
else if (nTau == 0 && nDelta == 2){
summer += mole_fractions[i]*pow(rhor/rho_ci,2)*components[i].EOS().d2alpha0_dDelta2(tau_i, delta_i);
summer += mole_fractions[i]*Rratio*pow(rhor/rho_ci,2)*components[i].EOS().d2alpha0_dDelta2(tau_i, delta_i);
}
else if (nTau == 1 && nDelta == 1){
summer += mole_fractions[i]*rhor/rho_ci*T_ci/Tr*components[i].EOS().d2alpha0_dDelta_dTau(tau_i, delta_i);
summer += mole_fractions[i]*Rratio*rhor/rho_ci*T_ci/Tr*components[i].EOS().d2alpha0_dDelta_dTau(tau_i, delta_i);
}
else if (nTau == 2 && nDelta == 0){
summer += mole_fractions[i]*pow(T_ci/Tr,2)*components[i].EOS().d2alpha0_dTau2(tau_i, delta_i);
summer += mole_fractions[i]*Rratio*pow(T_ci/Tr,2)*components[i].EOS().d2alpha0_dTau2(tau_i, delta_i);
}
else
{