From 2315c274c8bb2f11c129ebf01e6fc73fb66acfd9 Mon Sep 17 00:00:00 2001 From: JonWel Date: Wed, 22 Jun 2016 15:18:06 +0200 Subject: [PATCH] Cubic calc_molar_mass, closes #1124 (#1132) --- src/Backends/Cubics/CubicBackend.cpp | 10 ++++++++++ src/Backends/Cubics/CubicBackend.h | 21 +++++++++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/Backends/Cubics/CubicBackend.cpp b/src/Backends/Cubics/CubicBackend.cpp index 46e031d6..cbdc597f 100644 --- a/src/Backends/Cubics/CubicBackend.cpp +++ b/src/Backends/Cubics/CubicBackend.cpp @@ -404,6 +404,16 @@ CoolPropDbl CoolProp::AbstractCubicBackend::solver_rho_Tp(CoolPropDbl T, CoolPro return rho; } +CoolPropDbl CoolProp::AbstractCubicBackend::calc_molar_mass(void) +{ + double summer = 0; + for (unsigned int i = 0; i < N; ++i) + { + summer += mole_fractions[i] * components[i].molemass; + } + return summer; +} + void CoolProp::AbstractCubicBackend::set_binary_interaction_double(const std::size_t i, const std::size_t j, const std::string ¶meter, const double value){ if (parameter == "kij" || parameter == "k_ij"){ get_cubic()->set_kij(i,j,value); diff --git a/src/Backends/Cubics/CubicBackend.h b/src/Backends/Cubics/CubicBackend.h index cd255a77..12ee7ac6 100644 --- a/src/Backends/Cubics/CubicBackend.h +++ b/src/Backends/Cubics/CubicBackend.h @@ -31,6 +31,7 @@ class CubicResidualHelmholtz; class AbstractCubicBackend : public HelmholtzEOSMixtureBackend { protected: shared_ptr cubic; + std::vector components; ///< The components that are in use public: /// Set the pointer to the residual helmholtz class, etc. @@ -157,6 +158,8 @@ public: /// Cubic backend flashes for PQ, and QT void saturation(CoolProp::input_pairs inputs); + + CoolPropDbl calc_molar_mass(void); void set_binary_interaction_double(const std::size_t i1, const std::size_t i2, const std::string ¶meter, const double value); double get_binary_interaction_double(const std::size_t i1, const std::size_t i2, const std::string ¶meter); @@ -200,11 +203,12 @@ public: bool generate_SatL_and_SatV = true){ std::vector Tc, pc, acentric; N = fluid_identifiers.size(); + components.resize(N); for (std::size_t i = 0; i < fluid_identifiers.size(); ++i){ - CubicLibrary::CubicsValues val = CubicLibrary::get_cubic_values(fluid_identifiers[i]); - Tc.push_back(val.Tc); - pc.push_back(val.pc); - acentric.push_back(val.acentric); + components[i] = CubicLibrary::get_cubic_values(fluid_identifiers[i]); + Tc.push_back(components[i].Tc); + pc.push_back(components[i].pc); + acentric.push_back(components[i].acentric); } cubic.reset(new SRK(Tc, pc, acentric, R_u)); setup(generate_SatL_and_SatV); @@ -241,11 +245,12 @@ public: bool generate_SatL_and_SatV = true){ std::vector Tc, pc, acentric; N = fluid_identifiers.size(); + components.resize(N); for (std::size_t i = 0; i < fluid_identifiers.size(); ++i){ - CubicLibrary::CubicsValues val = CubicLibrary::get_cubic_values(fluid_identifiers[i]); - Tc.push_back(val.Tc); - pc.push_back(val.pc); - acentric.push_back(val.acentric); + components[i] = CubicLibrary::get_cubic_values(fluid_identifiers[i]); + Tc.push_back(components[i].Tc); + pc.push_back(components[i].pc); + acentric.push_back(components[i].acentric); } cubic.reset(new PengRobinson(Tc, pc, acentric, R_u)); setup(generate_SatL_and_SatV);