From 71c8875df41fd8affde274391707a07b9157b763 Mon Sep 17 00:00:00 2001 From: Ian Bell Date: Tue, 3 Jun 2014 15:38:38 +0200 Subject: [PATCH] Added tests for the reference states for fluids in REFPROP Signed-off-by: Ian Bell --- .../REFPROP/REFPROPMixtureBackend.cpp | 116 ++++++++++++++---- 1 file changed, 90 insertions(+), 26 deletions(-) diff --git a/src/Backends/REFPROP/REFPROPMixtureBackend.cpp b/src/Backends/REFPROP/REFPROPMixtureBackend.cpp index c68b1d84..01e5d206 100644 --- a/src/Backends/REFPROP/REFPROPMixtureBackend.cpp +++ b/src/Backends/REFPROP/REFPROPMixtureBackend.cpp @@ -1214,37 +1214,101 @@ void REFPROPMixtureBackend::update(long input_pair, double value1, double value2 TEST_CASE("Check REFPROP H,S reference states equal to CoolProp","[REFPROP]") { - std::vector ss = strsplit(CoolProp::get_global_param_string("FluidsList"),','); - - for (std::vector::iterator it = ss.begin(); it != ss.end(); ++it) + SECTION("Saturation densities agree within 0.5% at T/Tc = 0.9") { - std::string Name = (*it); - std::string RPName = CoolProp::get_fluid_param_string((*it),"REFPROP_name"); + std::vector ss = strsplit(CoolProp::get_global_param_string("FluidsList"),','); + + for (std::vector::iterator it = ss.begin(); it != ss.end(); ++it) + { + std::string Name = (*it); + std::string RPName = CoolProp::get_fluid_param_string((*it),"REFPROP_name"); - // Skip fluids not in REFPROP - if (RPName.find("N/A") == 0){continue;} + // Skip fluids not in REFPROP + if (RPName.find("N/A") == 0){continue;} - std::tr1::shared_ptr S1(CoolProp::AbstractState::factory("HEOS", (*it))); - double Tr = S1->T_critical(); - S1->update(CoolProp::QT_INPUTS, 0, Tr*0.9); - double h_CP = S1->hmass(); - double s_CP = S1->smass(); + std::tr1::shared_ptr S1(CoolProp::AbstractState::factory("HEOS", (*it))); + double Tr = S1->T_critical(); + S1->update(CoolProp::QT_INPUTS, 0, Tr*0.9); + double rho_CP = S1->rhomolar(); - std::tr1::shared_ptr S2(CoolProp::AbstractState::factory("REFPROP", RPName)); - S2->update(CoolProp::QT_INPUTS, 0, Tr*0.9); - double h_RP = S2->hmass(); - double s_RP = S2->smass(); + std::tr1::shared_ptr S2(CoolProp::AbstractState::factory("REFPROP", RPName)); + S2->update(CoolProp::QT_INPUTS, 0, Tr*0.9); + double rho_RP = S2->rhomolar(); - CAPTURE(Name); - CAPTURE(RPName); - CAPTURE(h_CP); - CAPTURE(h_RP); - CAPTURE(s_CP); - CAPTURE(s_CP); - double DH = (S1->hmass()-S2->hmass())/S1->cpmass(); - double DS = (S1->smass()-S2->smass())/S1->cpmass(); - CHECK(fabs(DH) < 1e-3); - CHECK(fabs(DS) < 1e-3); + CAPTURE(Name); + CAPTURE(RPName); + CAPTURE(rho_CP); + CAPTURE(rho_RP); + + double DH = (rho_RP-rho_CP)/rho_RP; + CHECK(fabs(DH) < 0.005); + } + } + SECTION("Saturation specific heats agree within 0.5% at T/Tc = 0.9") + { + std::vector ss = strsplit(CoolProp::get_global_param_string("FluidsList"),','); + + for (std::vector::iterator it = ss.begin(); it != ss.end(); ++it) + { + std::string Name = (*it); + std::string RPName = CoolProp::get_fluid_param_string((*it),"REFPROP_name"); + + // Skip fluids not in REFPROP + if (RPName.find("N/A") == 0){continue;} + + std::tr1::shared_ptr S1(CoolProp::AbstractState::factory("HEOS", (*it))); + double Tr = S1->T_critical(); + S1->update(CoolProp::QT_INPUTS, 0, Tr*0.9); + double cp_CP = S1->cpmolar(); + + std::tr1::shared_ptr S2(CoolProp::AbstractState::factory("REFPROP", RPName)); + S2->update(CoolProp::QT_INPUTS, 0, Tr*0.9); + double cp_RP = S2->cpmolar(); + + CAPTURE(Name); + CAPTURE(RPName); + CAPTURE(cp_CP); + CAPTURE(cp_RP); + CAPTURE(0.9*Tr); + + double Dcp = (cp_RP-cp_CP)/cp_RP; + CHECK(fabs(Dcp) < 0.005); + } + } + SECTION("Enthalpy and entropy reference state") + { + std::vector ss = strsplit(CoolProp::get_global_param_string("FluidsList"),','); + + for (std::vector::iterator it = ss.begin(); it != ss.end(); ++it) + { + std::string Name = (*it); + std::string RPName = CoolProp::get_fluid_param_string((*it),"REFPROP_name"); + + // Skip fluids not in REFPROP + if (RPName.find("N/A") == 0){continue;} + + std::tr1::shared_ptr S1(CoolProp::AbstractState::factory("HEOS", (*it))); + double Tr = S1->T_critical(); + S1->update(CoolProp::QT_INPUTS, 0, 0.9*Tr); + double h_CP = S1->hmass(); + double s_CP = S1->smass(); + + std::tr1::shared_ptr S2(CoolProp::AbstractState::factory("REFPROP", RPName)); + S2->update(CoolProp::QT_INPUTS, 0, 0.9*Tr); + double h_RP = S2->hmass(); + double s_RP = S2->smass(); + + CAPTURE(Name); + CAPTURE(RPName); + CAPTURE(h_CP); + CAPTURE(h_RP); + CAPTURE(s_CP); + CAPTURE(s_RP); + double DH = (S1->hmass()-S2->hmass())/S1->cpmass(); + double DS = (S1->smass()-S2->smass())/S1->cpmass(); + CHECK(fabs(DH) < 1e-3); + CHECK(fabs(DS) < 1e-3); + } } }