mirror of
https://github.com/CoolProp/CoolProp.git
synced 2026-04-23 03:00:17 -04:00
Incompressibles load and run! ExamplePure works.
Signed-off-by: Ian Bell <ian.h.bell@gmail.com>
This commit is contained in:
@@ -43,7 +43,9 @@ AbstractState * AbstractState::factory(const std::string &backend, const std::st
|
||||
}
|
||||
else if (!backend.compare("INCOMP"))
|
||||
{
|
||||
return new IncompressibleBackend(fluid_string);
|
||||
AbstractState * AS = new IncompressibleBackend(fluid_string);
|
||||
AS->set_mass_fractions(std::vector<long double>(1, 1.0));
|
||||
return AS;
|
||||
}
|
||||
else if (!backend.compare("BRINE"))
|
||||
{
|
||||
|
||||
@@ -27,6 +27,9 @@ IncompressibleBackend::IncompressibleBackend(const std::vector<std::string> &com
|
||||
}
|
||||
|
||||
void IncompressibleBackend::update(long input_pair, double value1, double value2) {
|
||||
if (mass_fractions.empty()){
|
||||
throw ValueError("mass fractions have not been set");
|
||||
}
|
||||
switch (input_pair)
|
||||
{
|
||||
case PT_INPUTS: {
|
||||
@@ -57,10 +60,6 @@ void IncompressibleBackend::update(long input_pair, double value1, double value2
|
||||
if (!ValidNumber(_T)){ throw ValueError("T is not a valid number");}
|
||||
}
|
||||
|
||||
long double IncompressibleBackend::calc_viscosity(void){
|
||||
return fluid->visc(_T,_p);
|
||||
}
|
||||
|
||||
/// Set the mole fractions
|
||||
/**
|
||||
@param mole_fractions The vector of mole fractions of the components
|
||||
@@ -82,9 +81,4 @@ void IncompressibleBackend::check_status() {
|
||||
throw CoolProp::NotImplementedError("Cannot check status for incompressible fluid");
|
||||
}
|
||||
|
||||
/// Get the thermal conductivity [W/m/K] (based on the temperature and density in the state class)
|
||||
long double IncompressibleBackend::calc_conductivity(void){
|
||||
throw NotImplementedError();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -88,9 +88,16 @@ public:
|
||||
long double PUmass_flash(long double p, long double umass);
|
||||
|
||||
/// Get the viscosity [Pa-s]
|
||||
long double calc_viscosity(void);
|
||||
/// Get the thermal conductivity [W/m/K] (based on the temperature and density in the state class)
|
||||
long double calc_conductivity(void);
|
||||
long double calc_viscosity(void){return fluid->visc(_T, _p, mass_fractions[0]);};
|
||||
/// Get the thermal conductivity [W/m/K] (based on the temperature and pressure in the state class)
|
||||
long double calc_conductivity(void){return fluid->cond(_T, _p, mass_fractions[0]);};
|
||||
|
||||
long double calc_rhomass(void){return fluid->rho(_T, _p, mass_fractions[0]);};
|
||||
long double calc_hmass(void){return fluid->h(_T, _p, mass_fractions[0]);};
|
||||
long double calc_smass(void){return fluid->s(_T, _p, mass_fractions[0]);};
|
||||
long double calc_umass(void){return fluid->u(_T, _p, mass_fractions[0]);};
|
||||
long double calc_cpmass(void){return fluid->cp(_T, _p, mass_fractions[0]);};
|
||||
long double calc_cvmass(void){return fluid->cv(_T, _p, mass_fractions[0]);};
|
||||
};
|
||||
|
||||
} /* namespace CoolProp */
|
||||
|
||||
@@ -66,7 +66,7 @@ double IncompressibleFluid::baseFunction(IncompressibleData data, double T_in, d
|
||||
}
|
||||
|
||||
/// Entropy as a function of temperature, pressure and composition.
|
||||
double IncompressibleFluid::s (double T, double p, double x=0.0){
|
||||
double IncompressibleFluid::s (double T, double p, double x){
|
||||
IncompressibleData data = specific_heat;
|
||||
switch (data.type) {
|
||||
case IncompressibleData::INCOMPRESSIBLE_POLYNOMIAL:
|
||||
@@ -84,7 +84,7 @@ double IncompressibleFluid::s (double T, double p, double x=0.0){
|
||||
}
|
||||
|
||||
/// Internal energy as a function of temperature, pressure and composition.
|
||||
double IncompressibleFluid::u (double T, double p, double x=0.0){
|
||||
double IncompressibleFluid::u (double T, double p, double x){
|
||||
IncompressibleData data = specific_heat;
|
||||
switch (data.type) {
|
||||
case IncompressibleData::INCOMPRESSIBLE_POLYNOMIAL:
|
||||
|
||||
@@ -95,43 +95,51 @@ void JSONIncompressibleLibrary::add_one(rapidjson::Value &fluid_json) {
|
||||
|
||||
// Create an instance of the fluid
|
||||
IncompressibleFluid &fluid = fluid_map[index];
|
||||
try
|
||||
{
|
||||
|
||||
fluid.setName(cpjson::get_string(fluid_json, "name"));
|
||||
fluid.setDescription(cpjson::get_string(fluid_json, "description"));
|
||||
fluid.setReference(cpjson::get_string(fluid_json, "reference"));
|
||||
fluid.setTmax(parse_value(fluid_json, "Tmax", true, 0.0));
|
||||
fluid.setTmin(parse_value(fluid_json, "Tmin", true, 0.0));
|
||||
fluid.setxmax(parse_value(fluid_json, "xmax", false, 1.0));
|
||||
fluid.setxmin(parse_value(fluid_json, "xmin", false, 0.0));
|
||||
fluid.setTminPsat(parse_value(fluid_json, "TminPsat", false, 0.0));
|
||||
fluid.setName(cpjson::get_string(fluid_json, "name"));
|
||||
fluid.setDescription(cpjson::get_string(fluid_json, "description"));
|
||||
fluid.setReference(cpjson::get_string(fluid_json, "reference"));
|
||||
fluid.setTmax(parse_value(fluid_json, "Tmax", true, 0.0));
|
||||
fluid.setTmin(parse_value(fluid_json, "Tmin", true, 0.0));
|
||||
fluid.setxmax(parse_value(fluid_json, "xmax", false, 1.0));
|
||||
fluid.setxmin(parse_value(fluid_json, "xmin", false, 0.0));
|
||||
fluid.setTminPsat(parse_value(fluid_json, "TminPsat", false, 0.0));
|
||||
|
||||
fluid.setTbase(parse_value(fluid_json, "Tbase", false, 0.0));
|
||||
fluid.setxbase(parse_value(fluid_json, "xbase", false, 0.0));
|
||||
fluid.setTbase(parse_value(fluid_json, "Tbase", false, 0.0));
|
||||
fluid.setxbase(parse_value(fluid_json, "xbase", false, 0.0));
|
||||
|
||||
/// Setters for the coefficients
|
||||
fluid.setDensity(parse_coefficients(fluid_json, "density", true));
|
||||
fluid.setSpecificHeat(parse_coefficients(fluid_json, "specific_heat", true));
|
||||
fluid.setViscosity(parse_coefficients(fluid_json, "viscosity", false));
|
||||
fluid.setConductivity(parse_coefficients(fluid_json, "conductivity", false));
|
||||
fluid.setPsat(parse_coefficients(fluid_json, "saturation_pressure", false));
|
||||
fluid.setTfreeze(parse_coefficients(fluid_json, "T_freeze", false));
|
||||
fluid.setVolToMass(parse_coefficients(fluid_json, "volume2mass", false));
|
||||
fluid.setMassToMole(parse_coefficients(fluid_json, "mass2mole", false));
|
||||
/// Setters for the coefficients
|
||||
fluid.setDensity(parse_coefficients(fluid_json, "density", true));
|
||||
fluid.setSpecificHeat(parse_coefficients(fluid_json, "specific_heat", true));
|
||||
fluid.setViscosity(parse_coefficients(fluid_json, "viscosity", false));
|
||||
fluid.setConductivity(parse_coefficients(fluid_json, "conductivity", false));
|
||||
fluid.setPsat(parse_coefficients(fluid_json, "saturation_pressure", false));
|
||||
fluid.setTfreeze(parse_coefficients(fluid_json, "T_freeze", false));
|
||||
fluid.setVolToMass(parse_coefficients(fluid_json, "volume2mass", false));
|
||||
fluid.setMassToMole(parse_coefficients(fluid_json, "mass2mole", false));
|
||||
|
||||
fluid.set_reference_state(
|
||||
parse_value(fluid_json, "Tref", false, 25+273.15) ,
|
||||
parse_value(fluid_json, "pref", false, 1.01325e5) ,
|
||||
parse_value(fluid_json, "xref", false, 0.0) ,
|
||||
parse_value(fluid_json, "href", false, 0.0) ,
|
||||
parse_value(fluid_json, "sref", false, 0.0)
|
||||
);
|
||||
fluid.set_reference_state(
|
||||
parse_value(fluid_json, "Tref", false, 25+273.15) ,
|
||||
parse_value(fluid_json, "pref", false, 1.01325e5) ,
|
||||
parse_value(fluid_json, "xref", false, 0.0) ,
|
||||
parse_value(fluid_json, "href", false, 0.0) ,
|
||||
parse_value(fluid_json, "sref", false, 0.0)
|
||||
);
|
||||
|
||||
/// A function to check coefficients and equation types.
|
||||
/// \todo Implement the validation function
|
||||
//fluid.validate();
|
||||
/// A function to check coefficients and equation types.
|
||||
/// \todo Implement the validation function
|
||||
//fluid.validate();
|
||||
|
||||
// Add name->index mapping
|
||||
string_to_index_map[fluid.getName()] = index;
|
||||
// Add name->index mapping
|
||||
string_to_index_map[fluid.getName()] = index;
|
||||
}
|
||||
catch(std::exception &e)
|
||||
{
|
||||
std::cout << format("Unable to load fluid: %s\n", fluid.getName().c_str());
|
||||
throw;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user