mirror of
https://github.com/CoolProp/CoolProp.git
synced 2026-02-08 12:55:16 -05:00
PlanckEinstein and PlanckEinstein2 classes replaced with PlanckEinsteinGeneralized. Docs to follow.
Aly-Lee not yet removed. Next step. Signed-off-by: Ian Bell <ian.h.bell@gmail.com>
This commit is contained in:
@@ -143,20 +143,36 @@ protected:
|
||||
long double a = cpjson::get_double(contribution,"a");
|
||||
EOS.alpha0.LogTau = IdealHelmholtzLogTau(a);
|
||||
}
|
||||
else if (!type.compare("IdealGasHelmholtzPlanckEinsteinGeneralized"))
|
||||
{
|
||||
// Retrieve the values
|
||||
std::vector<long double> n = cpjson::get_long_double_array(contribution["n"]);
|
||||
std::vector<long double> t = cpjson::get_long_double_array(contribution["t"]);
|
||||
|
||||
std::vector<long double> c = cpjson::get_long_double_array(contribution["c"]);
|
||||
std::vector<long double> d = cpjson::get_long_double_array(contribution["d"]);
|
||||
if (EOS.alpha0.PlanckEinstein.is_enabled() == true){
|
||||
EOS.alpha0.PlanckEinstein.extend(n, t, c, d);
|
||||
}
|
||||
else{
|
||||
EOS.alpha0.PlanckEinstein = IdealHelmholtzPlanckEinsteinGeneralized(n, t, c, d);
|
||||
}
|
||||
}
|
||||
else if (!type.compare("IdealGasHelmholtzPlanckEinstein"))
|
||||
{
|
||||
if (EOS.alpha0.PlanckEinstein.is_enabled() == true){throw ValueError("Cannot add ");}
|
||||
// Retrieve the values
|
||||
std::vector<long double> n = cpjson::get_long_double_array(contribution["n"]);
|
||||
std::vector<long double> t = cpjson::get_long_double_array(contribution["t"]);
|
||||
EOS.alpha0.PlanckEinstein = IdealHelmholtzPlanckEinstein(n, t);
|
||||
}
|
||||
else if (!type.compare("IdealGasHelmholtzPlanckEinstein2"))
|
||||
{
|
||||
if (EOS.alpha0.PlanckEinstein2.is_enabled() == true){throw ValueError("Cannot add");}
|
||||
std::vector<long double> n = cpjson::get_long_double_array(contribution["n"]);
|
||||
std::vector<long double> t = cpjson::get_long_double_array(contribution["t"]);
|
||||
std::vector<long double> c = cpjson::get_long_double_array(contribution["c"]);
|
||||
EOS.alpha0.PlanckEinstein2 = IdealHelmholtzPlanckEinstein2(n, t, c);
|
||||
// Flip the sign of theta
|
||||
for (std::size_t i = 0; i < t.size(); ++i){ t[i] *= -1;}
|
||||
std::vector<long double> c(n.size(), 1);
|
||||
std::vector<long double> d(c.size(), -1);
|
||||
if (EOS.alpha0.PlanckEinstein.is_enabled() == true){
|
||||
EOS.alpha0.PlanckEinstein.extend(n, t, c, d);
|
||||
}
|
||||
else{
|
||||
EOS.alpha0.PlanckEinstein = IdealHelmholtzPlanckEinsteinGeneralized(n, t, c, d);
|
||||
}
|
||||
}
|
||||
else if (!type.compare("IdealGasHelmholtzCP0Constant"))
|
||||
{
|
||||
@@ -177,11 +193,45 @@ protected:
|
||||
}
|
||||
else if (!type.compare("IdealGasHelmholtzCP0AlyLee"))
|
||||
{
|
||||
if (EOS.alpha0.CP0AlyLee.is_enabled() == true){std::cout << "Cannot add IdealGasHelmholtzCP0AlyLee\n";}
|
||||
std::vector<long double> c = cpjson::get_long_double_array(contribution["c"]);
|
||||
|
||||
std::vector<long double> constants = cpjson::get_long_double_array(contribution["c"]);
|
||||
long double Tc = cpjson::get_double(contribution, "Tc");
|
||||
long double T0 = cpjson::get_double(contribution, "T0");
|
||||
EOS.alpha0.CP0AlyLee = IdealHelmholtzCP0AlyLee(c, Tc, T0);
|
||||
|
||||
// Take the constant term if nonzero and set it as a polyT term
|
||||
if (fabs(constants[0]) > 1e-14){
|
||||
std::vector<long double> c(1,constants[0]), t(1,0);
|
||||
if (EOS.alpha0.CP0PolyT.is_enabled() == true){
|
||||
EOS.alpha0.CP0PolyT.extend(c,t);
|
||||
}
|
||||
else{
|
||||
EOS.alpha0.CP0PolyT = IdealHelmholtzCP0PolyT(c, t, Tc, T0);
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<long double> n, c, d, t;
|
||||
if (fabs(constants[1]) > 1e-14){
|
||||
// sinh term can be converted by setting a_k = C, b_k = 2*D, c_k = -1, d_k = 1
|
||||
n.push_back(constants[1]);
|
||||
t.push_back(-2*constants[2]/Tc);
|
||||
c.push_back(1);
|
||||
d.push_back(-1);
|
||||
}
|
||||
|
||||
if (fabs(constants[3]) > 1e-14){
|
||||
// cosh term can be converted by setting a_k = C, b_k = 2*D, c_k = 1, d_k = 1
|
||||
n.push_back(-constants[3]);
|
||||
t.push_back(-2*constants[4]/Tc);
|
||||
c.push_back(1);
|
||||
d.push_back(1);
|
||||
}
|
||||
|
||||
if (EOS.alpha0.PlanckEinstein.is_enabled() == true){
|
||||
EOS.alpha0.PlanckEinstein.extend(n, t, c, d);
|
||||
}
|
||||
else{
|
||||
EOS.alpha0.PlanckEinstein = IdealHelmholtzPlanckEinsteinGeneralized(n, t, c, d);
|
||||
}
|
||||
}
|
||||
else if (!type.compare("IdealGasHelmholtzEnthalpyEntropyOffset"))
|
||||
{
|
||||
|
||||
@@ -1715,42 +1715,50 @@ long double HelmholtzEOSMixtureBackend::calc_alphar_deriv_nocache(const int nTau
|
||||
long double HelmholtzEOSMixtureBackend::calc_alpha0_deriv_nocache(const int nTau, const int nDelta, const std::vector<long double> &mole_fractions,
|
||||
const long double &tau, const long double &delta, const long double &Tr, const long double &rhor)
|
||||
{
|
||||
long double val;
|
||||
if (is_pure_or_pseudopure)
|
||||
{
|
||||
if (nTau == 0 && nDelta == 0){
|
||||
return components[0]->pEOS->base0(tau, delta);
|
||||
val = components[0]->pEOS->base0(tau, delta);
|
||||
}
|
||||
else if (nTau == 0 && nDelta == 1){
|
||||
return components[0]->pEOS->dalpha0_dDelta(tau, delta);
|
||||
val = components[0]->pEOS->dalpha0_dDelta(tau, delta);
|
||||
}
|
||||
else if (nTau == 1 && nDelta == 0){
|
||||
return components[0]->pEOS->dalpha0_dTau(tau, delta);
|
||||
val = components[0]->pEOS->dalpha0_dTau(tau, delta);
|
||||
}
|
||||
else if (nTau == 0 && nDelta == 2){
|
||||
return components[0]->pEOS->d2alpha0_dDelta2(tau, delta);
|
||||
val = components[0]->pEOS->d2alpha0_dDelta2(tau, delta);
|
||||
}
|
||||
else if (nTau == 1 && nDelta == 1){
|
||||
return components[0]->pEOS->d2alpha0_dDelta_dTau(tau, delta);
|
||||
val = components[0]->pEOS->d2alpha0_dDelta_dTau(tau, delta);
|
||||
}
|
||||
else if (nTau == 2 && nDelta == 0){
|
||||
return components[0]->pEOS->d2alpha0_dTau2(tau, delta);
|
||||
val = components[0]->pEOS->d2alpha0_dTau2(tau, delta);
|
||||
}
|
||||
else if (nTau == 0 && nDelta == 3){
|
||||
return components[0]->pEOS->d3alpha0_dDelta3(tau, delta);
|
||||
val = components[0]->pEOS->d3alpha0_dDelta3(tau, delta);
|
||||
}
|
||||
else if (nTau == 1 && nDelta == 2){
|
||||
return components[0]->pEOS->d3alpha0_dDelta2_dTau(tau, delta);
|
||||
val = components[0]->pEOS->d3alpha0_dDelta2_dTau(tau, delta);
|
||||
}
|
||||
else if (nTau == 2 && nDelta == 1){
|
||||
return components[0]->pEOS->d3alpha0_dDelta_dTau2(tau, delta);
|
||||
val = components[0]->pEOS->d3alpha0_dDelta_dTau2(tau, delta);
|
||||
}
|
||||
else if (nTau == 3 && nDelta == 0){
|
||||
return components[0]->pEOS->d3alpha0_dTau3(tau, delta);
|
||||
val = components[0]->pEOS->d3alpha0_dTau3(tau, delta);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw ValueError();
|
||||
}
|
||||
if (!ValidNumber(val)){
|
||||
calc_alpha0_deriv_nocache(nTau,nDelta,mole_fractions,tau,delta,Tr,rhor);
|
||||
throw ValueError(format("calc_alpha0_deriv_nocache returned invalid number with inputs nTau: %d, nDelta: %d", nTau, nDelta));
|
||||
}
|
||||
else{
|
||||
return val;
|
||||
}
|
||||
}
|
||||
else{
|
||||
// See Table B5, GERG 2008 from Kunz Wagner, JCED, 2012
|
||||
|
||||
@@ -1691,10 +1691,11 @@ long double IdealHelmholtzCP0AlyLee::dTau(const long double &tau, const long dou
|
||||
}
|
||||
long double IdealHelmholtzCP0AlyLee::anti_deriv_cp0_tau2(const long double &tau)
|
||||
{
|
||||
return -c[0]/tau + 2*c[1]*c[2]/(Tc*(exp(-(2*c[2]*tau)/Tc)-1)) + 2*c[3]*c[4]/(Tc*(exp(-(2*c[4]*tau)/Tc)+1));
|
||||
return -c[0]/tau + 2*c[1]*c[2]/Tc/(exp(-2*c[2]*tau/Tc)-1) - 2*c[3]*c[4]/Tc*(exp(2*c[4]*tau/Tc)+1);
|
||||
}
|
||||
long double IdealHelmholtzCP0AlyLee::anti_deriv_cp0_tau(const long double &tau)
|
||||
{
|
||||
long double lnarg =-1 + exp(-2*c[2]*tau/Tc);
|
||||
long double term1 = c[0]*log(tau);
|
||||
long double term2 = 2*c[1]*c[2]*tau/(-Tc + Tc*exp(-2*c[2]*tau/Tc)) + c[1]*log(-1 + exp(-2*c[2]*tau/Tc)) + 2*c[1]*c[2]*tau/Tc;
|
||||
long double term3 = -c[3]*(Tc*exp(2*c[4]*tau/Tc)*log(exp(2*c[4]*tau/Tc) + 1) + Tc*log(exp(2*c[4]*tau/Tc) + 1) - 2*c[4]*tau*exp(2*c[4]*tau/Tc))/(Tc*(exp(2*c[4]*tau/Tc) + 1));
|
||||
@@ -1716,7 +1717,6 @@ long double IdealHelmholtzCP0AlyLee::dTau3(const long double &tau, const long do
|
||||
|
||||
/*
|
||||
IdealHelmholtzEnthalpyEntropyOffset EnthalpyEntropyOffset;
|
||||
IdealHelmholtzCP0AlyLee CP0AlyLee;
|
||||
*/
|
||||
|
||||
#ifdef ENABLE_CATCH
|
||||
@@ -1728,8 +1728,8 @@ class HelmholtzConsistencyFixture
|
||||
public:
|
||||
long double numerical, analytic;
|
||||
|
||||
std::tr1::shared_ptr<CoolProp::BaseHelmholtzTerm> Lead, LogTau, IGPower, PlanckEinstein, PlanckEinstein2,
|
||||
CP0Constant, CP0PolyT, CP0AlyLee, Gaussian, Lemmon2005, Power, SAFT, NonAnalytic, Exponential, GERG2008;
|
||||
std::tr1::shared_ptr<CoolProp::BaseHelmholtzTerm> Lead, LogTau, IGPower, PlanckEinstein,
|
||||
CP0Constant, CP0PolyT, Gaussian, Lemmon2005, Power, SAFT, NonAnalytic, Exponential, GERG2008;
|
||||
|
||||
HelmholtzConsistencyFixture(){
|
||||
Lead.reset(new CoolProp::IdealHelmholtzLead(1,3));
|
||||
@@ -1739,12 +1739,8 @@ public:
|
||||
IGPower.reset(new CoolProp::IdealHelmholtzPower(n,t));
|
||||
}
|
||||
{
|
||||
std::vector<long double> n(4,0), t(4,1); n[0] = 0.1; n[2] = 0.5; t[1] = 1; t[2] = 2; t[3] = 2;
|
||||
PlanckEinstein.reset(new CoolProp::IdealHelmholtzPlanckEinstein(n, t));
|
||||
}
|
||||
{
|
||||
std::vector<long double> n(4,0), t(4,1), c(4,1); n[0] = -0.1; n[2] = 0.1; t[1] = -1; t[2] = -2; t[3] = 2;
|
||||
PlanckEinstein2.reset(new CoolProp::IdealHelmholtzPlanckEinstein2(n, t, c));
|
||||
std::vector<long double> n(4,0), t(4,1), c(4,1), d(4,1); n[0] = 0.1; n[2] = 0.5; t[1] = 1; t[2] = 2; t[3] = 2;
|
||||
PlanckEinstein.reset(new CoolProp::IdealHelmholtzPlanckEinsteinGeneralized(n, t, c, d));
|
||||
}
|
||||
{
|
||||
long double T0 = 273.15, Tc = 345.857, c = 1.0578, t = 0.33;
|
||||
@@ -1752,11 +1748,6 @@ public:
|
||||
std::vector<long double>(1,t),
|
||||
Tc, T0));
|
||||
}
|
||||
{
|
||||
long double T0 = 518.109977174843, Tc = 645.78, c[] = {56.37158920013201, 118.0111016069331, 1792.1, 82.5909330141469, 786.8};
|
||||
CP0AlyLee.reset(new CoolProp::IdealHelmholtzCP0AlyLee(std::vector<long double>(c, c+sizeof(c)/sizeof(c[0])),
|
||||
Tc, T0));
|
||||
}
|
||||
CP0Constant.reset(new CoolProp::IdealHelmholtzCP0Constant(4/8.314472,300,250));
|
||||
{
|
||||
long double beta[] = {1.24, 0.821, 15.45, 2.21, 437, 0.743},
|
||||
@@ -1871,10 +1862,8 @@ public:
|
||||
else if (!t.compare("LogTau")){return LogTau;}
|
||||
else if (!t.compare("IGPower")){return IGPower;}
|
||||
else if (!t.compare("PlanckEinstein")){return PlanckEinstein;}
|
||||
else if (!t.compare("PlanckEinstein2")){return PlanckEinstein2;}
|
||||
else if (!t.compare("CP0Constant")){return CP0Constant;}
|
||||
else if (!t.compare("CP0PolyT")){return CP0PolyT;}
|
||||
else if (!t.compare("CP0AlyLee")){return CP0AlyLee;}
|
||||
|
||||
else if (!t.compare("Gaussian")){return Gaussian;}
|
||||
else if (!t.compare("Lemmon2005")){return Lemmon2005;}
|
||||
|
||||
@@ -154,8 +154,8 @@ int main()
|
||||
}
|
||||
if (1)
|
||||
{
|
||||
double rrr0 = PropsSI("O","T",350,"Q",0,"REFPROP::Water");
|
||||
double rrr2 = PropsSI("O","T",350,"Q",0,"Water");
|
||||
double rrr0 = PropsSI("C","T",350,"D",1e-13,"REFPROP::MDM");
|
||||
double rrr2 = PropsSI("C","T",350,"D",1e-13,"MDM");
|
||||
double rrr =0 ;
|
||||
}
|
||||
if (1)
|
||||
@@ -171,7 +171,8 @@ int main()
|
||||
}
|
||||
if (1)
|
||||
{
|
||||
double h1 = PropsSI("H","T",273.15,"Q",0,"CO2");
|
||||
double h1 = PropsSI("S","P",101325,"Q",0,"n-Pentane");
|
||||
std::string er = get_global_param_string("errstring");
|
||||
set_reference_stateS("n-Propane","NBP");
|
||||
double h2 = PropsSI("H","P",101325,"Q",0,"n-Propane");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user