Added some reporting to Python. Untested changes in C++

This commit is contained in:
jowr
2014-07-30 09:27:25 +02:00
parent 0f392c3309
commit 8ff8332e77
111 changed files with 990 additions and 15471 deletions

View File

@@ -46,12 +46,6 @@ double IncompressibleFluid::baseExponential(IncompressibleData data, double y, d
if (strict && (r!=3 || c!=1) ) throw ValueError(format("%s (%d): You have to provide a 3,1 matrix of coefficients, not (%d,%d).",__FILE__,__LINE__,r,c));
return exp( (double) (coeffs[0] / ( (y-ybase)+coeffs[1] ) - coeffs[2] ) );
}
double IncompressibleFluid::baseExponentialOffset(IncompressibleData data, double y){
Eigen::VectorXd coeffs = makeVector(data.coeffs);
size_t r=coeffs.rows(),c=coeffs.cols();
if (strict && (r!=4 || c!=1) ) throw ValueError(format("%s (%d): You have to provide a 4,1 matrix of coefficients, not (%d,%d).",__FILE__,__LINE__,r,c));
return exp( (double) (coeffs[1] / ( (y-coeffs[0])+coeffs[2] ) - coeffs[3] ) );
}
double IncompressibleFluid::basePolyOffset(IncompressibleData data, double y, double z){
size_t r=data.coeffs.rows(),c=data.coeffs.cols();
double offset = 0.0;
@@ -81,14 +75,11 @@ double IncompressibleFluid::rho (double T, double p, double x){
return poly.evaluate(density.coeffs, T, x, 0, 0, Tbase, xbase);
break;
case IncompressibleData::INCOMPRESSIBLE_EXPONENTIAL:
return baseExponential(density, T, Tbase);
return baseExponential(density, T, 0.0);
break;
case IncompressibleData::INCOMPRESSIBLE_EXPPOLYNOMIAL:
return exp(poly.evaluate(density.coeffs, T, x, 0, 0, Tbase, xbase));
break;
case IncompressibleData::INCOMPRESSIBLE_EXPOFFSET:
return baseExponentialOffset(density, T);
break;
case IncompressibleData::INCOMPRESSIBLE_POLYOFFSET:
return basePolyOffset(density, T, x);
break;
@@ -163,14 +154,11 @@ double IncompressibleFluid::visc(double T, double p, double x){
return poly.evaluate(viscosity.coeffs, T, x, 0, 0, Tbase, xbase);
break;
case IncompressibleData::INCOMPRESSIBLE_EXPONENTIAL:
return baseExponential(viscosity, T, Tbase);
return baseExponential(viscosity, T, 0.0);
break;
case IncompressibleData::INCOMPRESSIBLE_EXPPOLYNOMIAL:
return exp(poly.evaluate(viscosity.coeffs, T, x, 0, 0, Tbase, xbase));
break;
case IncompressibleData::INCOMPRESSIBLE_EXPOFFSET:
return baseExponentialOffset(viscosity, T);
break;
case IncompressibleData::INCOMPRESSIBLE_POLYOFFSET:
return basePolyOffset(viscosity, T, x);
break;
@@ -190,14 +178,11 @@ double IncompressibleFluid::cond(double T, double p, double x){
return poly.evaluate(conductivity.coeffs, T, x, 0, 0, Tbase, xbase);
break;
case IncompressibleData::INCOMPRESSIBLE_EXPONENTIAL:
return baseExponential(conductivity, T, Tbase);
return baseExponential(conductivity, T, 0.0);
break;
case IncompressibleData::INCOMPRESSIBLE_EXPPOLYNOMIAL:
return exp(poly.evaluate(conductivity.coeffs, T, x, 0, 0, Tbase, xbase));
break;
case IncompressibleData::INCOMPRESSIBLE_EXPOFFSET:
return baseExponentialOffset(conductivity, T);
break;
case IncompressibleData::INCOMPRESSIBLE_POLYOFFSET:
return basePolyOffset(conductivity, T, x);
break;
@@ -218,14 +203,11 @@ double IncompressibleFluid::psat(double T, double x){
return poly.evaluate(p_sat.coeffs, T, x, 0, 0, Tbase, xbase);
break;
case IncompressibleData::INCOMPRESSIBLE_EXPONENTIAL:
return baseExponential(p_sat, T, Tbase);
return baseExponential(p_sat, T, 0.0);
break;
case IncompressibleData::INCOMPRESSIBLE_EXPPOLYNOMIAL:
return exp(poly.evaluate(p_sat.coeffs, T, x, 0, 0, Tbase, xbase));
break;
case IncompressibleData::INCOMPRESSIBLE_EXPOFFSET:
return baseExponentialOffset(p_sat, T);
break;
case IncompressibleData::INCOMPRESSIBLE_POLYOFFSET:
return basePolyOffset(p_sat, T, x);
break;
@@ -242,19 +224,16 @@ double IncompressibleFluid::psat(double T, double x){
double IncompressibleFluid::Tfreeze( double p, double x){
switch (T_freeze.type) {
case IncompressibleData::INCOMPRESSIBLE_POLYNOMIAL:
return poly.evaluate(T_freeze.coeffs, x, p, 0, 0, xbase, 0.0);
return poly.evaluate(T_freeze.coeffs, p, x, 0, 0, 0.0, xbase);
break;
case IncompressibleData::INCOMPRESSIBLE_EXPONENTIAL:
return baseExponential(T_freeze, x, xbase);
return baseExponential(T_freeze, x, 0.0);
break;
case IncompressibleData::INCOMPRESSIBLE_EXPPOLYNOMIAL:
return exp(poly.evaluate(T_freeze.coeffs, x, p, 0, 0, xbase, 0.0));
break;
case IncompressibleData::INCOMPRESSIBLE_EXPOFFSET:
return baseExponentialOffset(T_freeze, x);
return exp(poly.evaluate(T_freeze.coeffs, p, x, 0, 0, 0.0, xbase));
break;
case IncompressibleData::INCOMPRESSIBLE_POLYOFFSET:
return basePolyOffset(T_freeze, x, p);
return basePolyOffset(T_freeze, p, x);
break;
case IncompressibleData::INCOMPRESSIBLE_NOT_SET:
throw ValueError(format("%s (%d): The function type is not specified (\"[%d]\"), are you sure the coefficients have been set?",__FILE__,__LINE__,T_freeze.type));
@@ -281,14 +260,11 @@ double IncompressibleFluid::inputFromMass (double T, double x){
return poly.evaluate(mass2input.coeffs, T, x, 0, 0, 0.0, 0.0); // TODO: make sure Tbase and xbase is defined in the correct way
break;
case IncompressibleData::INCOMPRESSIBLE_EXPONENTIAL:
return baseExponential(mass2input, T, Tbase);
return baseExponential(mass2input, T, 0.0);
break;
case IncompressibleData::INCOMPRESSIBLE_EXPPOLYNOMIAL:
return exp(poly.evaluate(mass2input.coeffs, T, x, 0, 0, 0.0, 0.0)); // TODO: make sure Tbase and xbase is defined in the correct way
break;
case IncompressibleData::INCOMPRESSIBLE_EXPOFFSET:
return baseExponentialOffset(mass2input, T);
break;
case IncompressibleData::INCOMPRESSIBLE_POLYOFFSET:
return basePolyOffset(mass2input, T, x);
break;
@@ -318,14 +294,11 @@ double IncompressibleFluid::inputFromVolume (double T, double x){
return poly.evaluate(volume2input.coeffs, T, x, 0, 0, 0.0, 0.0); // TODO: make sure Tbase and xbase is defined in the correct way
break;
case IncompressibleData::INCOMPRESSIBLE_EXPONENTIAL:
return baseExponential(volume2input, T, Tbase);
return baseExponential(volume2input, T, 0.0);
break;
case IncompressibleData::INCOMPRESSIBLE_EXPPOLYNOMIAL:
return exp(poly.evaluate(volume2input.coeffs, T, x, 0, 0, 0.0, 0.0)); // TODO: make sure Tbase and xbase is defined in the correct way
break;
case IncompressibleData::INCOMPRESSIBLE_EXPOFFSET:
return baseExponentialOffset(volume2input, T);
break;
case IncompressibleData::INCOMPRESSIBLE_POLYOFFSET:
return basePolyOffset(volume2input, T, x);
break;
@@ -355,14 +328,11 @@ double IncompressibleFluid::inputFromMole (double T, double x){
return poly.evaluate(mole2input.coeffs, T, x, 0, 0, 0.0, 0.0); // TODO: make sure Tbase and xbase is defined in the correct way
break;
case IncompressibleData::INCOMPRESSIBLE_EXPONENTIAL:
return baseExponential(mole2input, T, Tbase);
return baseExponential(mole2input, T, 0.0);
break;
case IncompressibleData::INCOMPRESSIBLE_EXPPOLYNOMIAL:
return exp(poly.evaluate(mole2input.coeffs, T, x, 0, 0, 0.0, 0.0)); // TODO: make sure Tbase and xbase is defined in the correct way
break;
case IncompressibleData::INCOMPRESSIBLE_EXPOFFSET:
return baseExponentialOffset(mole2input, T);
break;
case IncompressibleData::INCOMPRESSIBLE_POLYOFFSET:
return basePolyOffset(mole2input, T, x);
break;

View File

@@ -372,11 +372,6 @@ IncompressibleData JSONIncompressibleLibrary::parse_coefficients(rapidjson::Valu
fluidData.coeffs = vec_to_eigen(cpjson::get_double_array2D(obj[id.c_str()]["coeffs"]));
return fluidData;
}
else if (!type.compare("expoffset")){
fluidData.type = CoolProp::IncompressibleData::INCOMPRESSIBLE_EXPOFFSET;
fluidData.coeffs = vec_to_eigen(cpjson::get_double_array(obj[id.c_str()]["coeffs"]));
return fluidData;
}
else if (!type.compare("polyoffset")){
fluidData.type = CoolProp::IncompressibleData::INCOMPRESSIBLE_POLYOFFSET;
fluidData.coeffs = vec_to_eigen(cpjson::get_double_array(obj[id.c_str()]["coeffs"]));
@@ -420,6 +415,19 @@ double JSONIncompressibleLibrary::parse_value(rapidjson::Value &obj, std::string
}
}
/// Get an integer from the JSON storage to identify the composition
int JSONIncompressibleLibrary::parse_ifrac(rapidjson::Value &obj, std::string id){
std::string res = cpjson::get_string(obj, id);
if (!res.compare("mass")) return CoolProp::ifrac_undefined;
if (!res.compare("mole")) return CoolProp::ifrac_mole;
if (!res.compare("volume")) return CoolProp::ifrac_volume;
if (!res.compare("not defined")) return CoolProp::ifrac_undefined;
if (!res.compare("pure")) return CoolProp::ifrac_pure;
throw ValueError(format("Cannot recognise the entry for [%s], [%s] is unknown for incompressible fluids.", id.c_str(), res.c_str()));
return CoolProp::ifrac_undefined;
}
/// Add all the fluid entries in the rapidjson::Value instance passed in
void JSONIncompressibleLibrary::add_many(rapidjson::Value &listing) {
for (rapidjson::Value::ValueIterator itr = listing.Begin();
@@ -448,11 +456,11 @@ void JSONIncompressibleLibrary::add_one(rapidjson::Value &fluid_json) {
if (get_debug_level()>=20) std::cout << format("Incompressible library: Loading base values for %s ",fluid.getName().c_str()) << std::endl;
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.setxid((int) parse_value(fluid_json, "xid", true, 0.0));
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.setxid( parse_ifrac(fluid_json, "xid") );
fluid.setTminPsat(parse_value(fluid_json, "TminPsat", false, 0.0));
fluid.setTbase(parse_value(fluid_json, "Tbase", false, 0.0));

View File

@@ -154,6 +154,7 @@ protected:
/// A general function to parse the json files that hold the coefficient matrices
IncompressibleData parse_coefficients(rapidjson::Value &obj, std::string id, bool vital);
double parse_value(rapidjson::Value &obj, std::string id, bool vital, double def);
int parse_ifrac(rapidjson::Value &obj, std::string id);
public:
// Default constructor;

View File

@@ -171,6 +171,7 @@ CoolProp::IncompressibleFluid CoolPropTesting::incompressibleFluidObject(){
CoolProp::IncompressibleData T_freeze;
T_freeze.type = CoolProp::IncompressibleData::INCOMPRESSIBLE_POLYOFFSET;
T_freeze.coeffs = CoolProp::vec_to_eigen(tmpVector);
T_freeze.coeffs.transposeInPlace();
// After preparing the coefficients, we have to create the objects
CoolProp::IncompressibleFluid CH3OH;