Incompressibles load and run! ExamplePure works.

Signed-off-by: Ian Bell <ian.h.bell@gmail.com>
This commit is contained in:
Ian Bell
2014-07-09 18:06:21 +02:00
parent c678bdb11a
commit f4764eb929
11 changed files with 90 additions and 68 deletions

View File

@@ -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"))
{

View File

@@ -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();
}
}

View File

@@ -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 */

View File

@@ -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:

View File

@@ -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;
}
};