8 #ifndef COOLPROPFLUID_H_ 9 #define COOLPROPFLUID_H_ 11 #include "DataStructures.h" 12 #include "Helmholtz.h" 23 #include "Ancillaries.h" 29 std::string EOS, CP0, VISCOSITY, CONDUCTIVITY, ECS_LENNARD_JONES, ECS_FITS, SURFACE_TENSION;
34 double GWP20, GWP100, GWP500, ODP, HH, PH, FH;
39 double T_min, T_max, rhomolar_min, rhomolar_max;
40 std::vector<double> cL, cV;
42 CriticalRegionSplines() : T_min(_HUGE), T_max(_HUGE), rhomolar_min(_HUGE), rhomolar_max(_HUGE), enabled(
false){};
44 const void get_densities(
double T,
double rho_min,
double rho_crit,
double rho_max,
double& rhoL,
double& rhoV)
const {
45 int Nsoln = -1, Ngood = 0;
46 double rho1 = 0, rho2 = 0, rho3 = 0;
52 solve_cubic(cL[0], cL[1], cL[2], cL[3] - T, Nsoln, rho1, rho2, rho3);
53 if (Nsoln == 1 && rho1 < rho_max && rho1 > rho_crit) {
56 if (rho1 < rho_max && rho1 > rho_crit) {
60 if (rho2 < rho_max && rho2 > rho_crit) {
64 if (Nsoln > 2 && rho3 < rho_max && rho3 > rho_crit) {
69 throw ValueError(format(
"More than one liquid solution found for critical spline for T=%0.12g", T));
72 throw ValueError(format(
"No liquid solution found for critical spline for T=%0.12g", T));
81 solve_cubic(cV[0], cV[1], cV[2], cV[3] - T, Nsoln, rho1, rho2, rho3);
82 if (Nsoln == 1 && rho1 > rho_min && rho1 < rho_crit) {
85 if (rho1 > rho_min && rho1 < rho_crit) {
89 if (rho2 > rho_min && rho2 < rho_crit) {
93 if (Nsoln > 2 && rho3 > rho_min && rho3 < rho_crit) {
98 throw ValueError(format(
"More than one vapor solution found for critical spline for T=%0.12g", T));
101 throw ValueError(format(
"No vapor solution found for critical spline for T=%0.12g", T));
110 double Tmin, Tmax, rhomax, pmax;
115 std::string reference_fluid;
116 CoolPropDbl psi_rhomolar_reducing, f_int_T_reducing;
117 std::vector<CoolPropDbl> psi_a, psi_t, f_int_a, f_int_t;
122 std::vector<CoolPropDbl> A, t;
127 CoolPropDbl T_reducing, p_reducing;
128 std::vector<CoolPropDbl> A, B, n, m;
132 enum ConductivityDiluteEnum
134 CONDUCTIVITY_DILUTE_RATIO_POLYNOMIALS,
135 CONDUCTIVITY_DILUTE_ETA0_AND_POLY,
136 CONDUCTIVITY_DILUTE_CO2,
137 CONDUCTIVITY_DILUTE_CO2_HUBER_JPCRD_2016,
138 CONDUCTIVITY_DILUTE_ETHANE,
139 CONDUCTIVITY_DILUTE_NONE,
140 CONDUCTIVITY_DILUTE_NOT_SET
147 type = CONDUCTIVITY_DILUTE_NOT_SET;
153 CoolPropDbl T_reducing, rhomass_reducing;
154 std::vector<CoolPropDbl> A, t, d, gamma, l;
159 CoolPropDbl T_reducing, rhomass_reducing;
160 std::vector<CoolPropDbl> B, t, d;
164 enum ConductivityResidualEnum
166 CONDUCTIVITY_RESIDUAL_POLYNOMIAL,
167 CONDUCTIVITY_RESIDUAL_POLYNOMIAL_AND_EXPONENTIAL,
168 CONDUCTIVITY_RESIDUAL_R123,
169 CONDUCTIVITY_RESIDUAL_CO2,
170 CONDUCTIVITY_RESIDUAL_NOT_SET
177 type = CONDUCTIVITY_RESIDUAL_NOT_SET;
183 CoolPropDbl k, R0, gamma, nu, GAMMA, zeta0, qD, T_reducing, p_reducing, T_ref;
202 enum ConductivityResidualEnum
204 CONDUCTIVITY_CRITICAL_SIMPLIFIED_OLCHOWY_SENGERS,
205 CONDUCTIVITY_CRITICAL_R123,
206 CONDUCTIVITY_CRITICAL_AMMONIA,
207 CONDUCTIVITY_CRITICAL_NONE,
208 CONDUCTIVITY_CRITICAL_CARBONDIOXIDE_SCALABRIN_JPCRD_2006,
209 CONDUCTIVITY_CRITICAL_NOT_SET
215 type = CONDUCTIVITY_CRITICAL_NOT_SET;
222 CoolPropDbl molar_mass, C;
223 std::vector<CoolPropDbl> a, t;
229 std::vector<CoolPropDbl> a, t;
233 std::vector<CoolPropDbl> a, t;
237 std::vector<CoolPropDbl> a, t;
238 CoolPropDbl T_reducing;
252 VISCOSITY_DILUTE_NOT_SET
261 type = VISCOSITY_DILUTE_NOT_SET;
267 std::vector<CoolPropDbl> b, t;
271 std::vector<CoolPropDbl> n, d, t;
272 CoolPropDbl T_reducing, rhomolar_reducing;
281 VISCOSITY_INITIAL_DENSITY_NOT_SET
287 type = VISCOSITY_INITIAL_DENSITY_NOT_SET;
293 std::vector<CoolPropDbl> a, d1, d2, t1, t2, f, g, h, p, q, gamma, l;
294 CoolPropDbl T_reduce, rhomolar_reduce;
298 std::vector<CoolPropDbl> Aa, Aaa, Aaaa, Ar, Arr, Adrdr, Arrr, Ai, Aii, AdrAdr;
299 int Na, Naa, Naaa, Nr, Nrr, Nrrr, Nii;
300 CoolPropDbl c1, c2, T_reduce, rhomolar_reduce;
315 VISCOSITY_HIGHER_ORDER_NOT_SET
322 type = VISCOSITY_HIGHER_ORDER_NOT_SET;
328 std::vector<double> c_liq, c_vap;
329 double C, x_crossover, rhosr_critical;
333 std::string reference_fluid;
334 CoolPropDbl psi_rhomolar_reducing;
335 std::vector<CoolPropDbl> psi_a, psi_t;
339 CoolPropDbl rhomolar_critical, acentric, T_critical, molar_mass, dipole_moment_D;
355 VISCOSITY_NOT_HARDCODED
364 CONDUCTIVITY_NOT_HARDCODED
391 : viscosity_using_ECS(false),
392 conductivity_using_ECS(false),
393 viscosity_using_Chung(false),
394 viscosity_using_rhosr(false),
395 viscosity_model_provided(false),
396 conductivity_model_provided(false),
398 epsilon_over_k(_HUGE),
399 hardcoded_viscosity(VISCOSITY_NOT_HARDCODED),
400 hardcoded_conductivity(CONDUCTIVITY_NOT_HARDCODED) {}
445 assert(R_u < 9 && R_u > 8);
446 assert(molar_mass > 0.001 && molar_mass < 1);
448 CoolPropDbl baser(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
449 return alphar.base(tau, delta);
452 CoolPropDbl dalphar_dDelta(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
453 return alphar.dDelta(tau, delta);
455 CoolPropDbl dalphar_dTau(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
456 return alphar.dTau(tau, delta);
459 CoolPropDbl d2alphar_dDelta2(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
460 return alphar.dDelta2(tau, delta);
462 CoolPropDbl d2alphar_dDelta_dTau(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
463 return alphar.dDelta_dTau(tau, delta);
465 CoolPropDbl d2alphar_dTau2(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
466 return alphar.dTau2(tau, delta);
469 CoolPropDbl d3alphar_dDelta3(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
470 return alphar.dDelta3(tau, delta);
472 CoolPropDbl d3alphar_dDelta2_dTau(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
473 return alphar.dDelta2_dTau(tau, delta);
475 CoolPropDbl d3alphar_dDelta_dTau2(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
476 return alphar.dDelta_dTau2(tau, delta);
478 CoolPropDbl d3alphar_dTau3(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
479 return alphar.dTau3(tau, delta);
482 CoolPropDbl base0(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
483 return alpha0.base(tau, delta);
486 CoolPropDbl dalpha0_dDelta(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
487 return alpha0.dDelta(tau, delta);
489 CoolPropDbl dalpha0_dTau(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
490 return alpha0.dTau(tau, delta);
493 CoolPropDbl d2alpha0_dDelta2(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
494 return alpha0.dDelta2(tau, delta);
496 CoolPropDbl d2alpha0_dDelta_dTau(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
497 return alpha0.dDelta_dTau(tau, delta);
499 CoolPropDbl d2alpha0_dTau2(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
500 return alpha0.dTau2(tau, delta);
503 CoolPropDbl d3alpha0_dDelta3(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
504 return alpha0.dDelta3(tau, delta);
506 CoolPropDbl d3alpha0_dDelta2_dTau(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
507 return alpha0.dDelta2_dTau(tau, delta);
509 CoolPropDbl d3alpha0_dDelta_dTau2(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
510 return alpha0.dDelta_dTau2(tau, delta);
512 CoolPropDbl d3alpha0_dTau3(
const CoolPropDbl& tau,
const CoolPropDbl& delta) {
513 return alpha0.dTau3(tau, delta);
529 this->ChemSpider_id = -1;
560 double gas_constant() {
563 double molar_mass() {
564 return EOS().molar_mass;
568 #if !defined(NO_FMTLIB) && FMT_VERSION >= 90000 570 return fmt::underlying(type);
574 return fmt::underlying(viscosity);
578 return fmt::underlying(conductivity);
Use TransportRoutines::viscosity_o_xylene_hardcoded.
Definition: CoolPropFluid.h:353
Use TransportRoutines::viscosity_CO2_higher_order_hardcoded_LaeseckeJPCRD2017.
Definition: CoolPropFluid.h:313
ViscosityDiluteType
Definition: CoolPropFluid.h:242
The core class for an equation of state.
Definition: CoolPropFluid.h:418
Definition: CoolPropFluid.h:225
Definition: CoolPropFluid.h:235
bool viscosity_using_rhosr
A flag for whether to use rho*sr CS model of Bell. False for no.
Definition: CoolPropFluid.h:383
ViscosityInitialDensityEmpiricalData empirical
Data for TransportRoutines::viscosity_initial_density_dependence_empirical.
Definition: CoolPropFluid.h:285
SimpleState sat_min_vapor
The saturated vapor state at the minimum saturation temperature.
Definition: CoolPropFluid.h:422
Definition: CoolPropFluid.h:151
Use TransportRoutines::viscosity_hexane_higher_order_hardcoded.
Definition: CoolPropFluid.h:308
Use TransportRoutines::viscosity_p_xylene_hardcoded.
Definition: CoolPropFluid.h:354
ConductivityHardcodedEnum hardcoded_conductivity
Hardcoded flags for the conductivity.
Definition: CoolPropFluid.h:389
Use TransportRoutines::viscosity_heptane_higher_order_hardcoded.
Definition: CoolPropFluid.h:309
Ancillaries ancillaries
The set of ancillary equations for dewpoint, bubblepoint, surface tension, etc.
Definition: CoolPropFluid.h:554
std::string REFPROPname
The REFPROP-compliant name if REFPROP-"name" is not a compatible fluid name. If not included...
Definition: CoolPropFluid.h:542
bool pseudo_pure
Is a pseudo-pure fluid (true) or pure fluid (false)
Definition: CoolPropFluid.h:435
Definition: CoolPropFluid.h:113
Variables for the dilute gas part.
Definition: CoolPropFluid.h:220
int ChemSpider_id
The ChemSpider identifier for the fluid.
Definition: CoolPropFluid.h:549
Use TransportRoutines::viscosity_m_xylene_hardcoded.
Definition: CoolPropFluid.h:352
Use TransportRoutines::viscosity_water_hardcoded.
Definition: CoolPropFluid.h:347
Use TransportRoutines::conductivity_hardcoded_heavywater.
Definition: CoolPropFluid.h:360
A set of limits for the eos parameters.
Definition: CoolPropFluid.h:108
std::string ECSReferenceFluid
A string that gives the name of the fluids that should be used for the ECS method for transport prope...
Definition: CoolPropFluid.h:525
Use TransportRoutines::viscosity_benzene_higher_order_hardcoded.
Definition: CoolPropFluid.h:311
Definition: CoolPropFluid.h:120
This is generalized class that can be used to manage an ancillary curve, here they are ancillary curv...
Definition: Ancillaries.h:84
ViscosityDiluteCollisionIntegralPowersOfTstarData collision_integral_powers_of_Tstar
Data for TransportRoutines::viscosity_dilute_collision_integral_powers_of_T.
Definition: CoolPropFluid.h:257
ViscosityModifiedBatschinskiHildebrandData modified_Batschinski_Hildebrand
Data for TransportRoutines::viscosity_higher_order_modified_Batschinski_Hildebrand.
Definition: CoolPropFluid.h:319
EOSLimits limits
Limits on the EOS.
Definition: CoolPropFluid.h:429
Definition: CoolPropFluid.h:269
ViscosityRainWaterFriendData rainwater_friend
Data for TransportRoutines::viscosity_initial_density_dependence_Rainwater_Friend.
Definition: CoolPropFluid.h:284
The surface tension correlation class uses correlations for the surface tension that are all of the f...
Definition: Ancillaries.h:24
Use TransportRoutines::viscosity_initial_density_dependence_empirical.
Definition: CoolPropFluid.h:280
std::vector< EquationOfState > EOSVector
The equations of state that could be used for this fluid.
Definition: CoolPropFluid.h:538
Definition: CoolPropFluid.h:37
ConductivityHardcodedEnum
Definition: CoolPropFluid.h:357
Use TransportRoutines::conductivity_hardcoded_methane.
Definition: CoolPropFluid.h:363
bool conductivity_model_provided
A flag for whether thermal conductivity model is provided. False for no.
Definition: CoolPropFluid.h:385
Use TransportRoutines::viscosity_dilute_powers_of_T.
Definition: CoolPropFluid.h:250
Definition: Ancillaries.h:219
std::string formula
The chemical formula, in LaTeX form.
Definition: CoolPropFluid.h:544
Use TransportRoutines::viscosity_dilute_CO2_LaeseckeJPCRD2017.
Definition: CoolPropFluid.h:249
A thermophysical property provider for critical and reducing values as well as derivatives of Helmhol...
Definition: CoolPropFluid.h:521
std::string BibTeX_EOS
The bibtex key for the equation of state.
Definition: CoolPropFluid.h:438
Term in the ideal-gas specific heat equation that is based on Aly-Lee formulation ** Specific heat is...
Definition: Helmholtz.h:1339
CriticalRegionSplines critical_region_splines
A cubic spline in the form T = f(rho) for saturated liquid and saturated vapor curves in the near-cri...
Definition: CoolPropFluid.h:441
double Ttriple
Triple point temperature (K)
Definition: CoolPropFluid.h:430
std::vector< std::string > aliases
A vector of aliases of names for the fluid.
Definition: CoolPropFluid.h:545
Definition: CoolPropFluid.h:231
Definition: CoolPropFluid.h:157
Definition: CoolPropFluid.h:326
ViscosityFrictionTheoryData friction_theory
Data for TransportRoutines::viscosity_higher_order_friction_theory.
Definition: CoolPropFluid.h:320
Use TransportRoutines::viscosity_hydrogen_higher_order_hardcoded.
Definition: CoolPropFluid.h:307
const EquationOfState & EOS() const
Get a reference to the equation of state.
Definition: CoolPropFluid.h:532
Use TransportRoutines::viscosity_dilute_kinetic_theory.
Definition: CoolPropFluid.h:246
Definition: Exceptions.h:45
Definition: CoolPropFluid.h:296
CoolPropDbl sigma_eta
The Lennard-Jones 12-6 parameter.
Definition: CoolPropFluid.h:386
Definition: CoolPropFluid.h:265
Definition: CoolPropFluid.h:337
Use TransportRoutines::viscosity_higher_order_friction_theory.
Definition: CoolPropFluid.h:314
Definition: CoolPropFluid.h:130
Definition: CoolPropFluid.h:200
Definition: CoolPropFluid.h:342
Use TransportRoutines::viscosity_dilute_powers_of_Tr.
Definition: CoolPropFluid.h:251
std::string CAS
The CAS number of the fluid.
Definition: CoolPropFluid.h:543
std::string name
The name of the fluid.
Definition: CoolPropFluid.h:540
std::string InChI
The InChI string for the fluid.
Definition: CoolPropFluid.h:546
BibTeXKeysStruct BibTeXKeys
The BibTeX keys associated.
Definition: CoolPropFluid.h:552
std::string smiles
The SMILES identifier for the fluid.
Definition: CoolPropFluid.h:548
SimpleState triple_vapor
The saturated vapor state at the triple point temperature.
Definition: CoolPropFluid.h:556
Use TransportRoutines::viscosity_ethane_higher_order_hardcoded.
Definition: CoolPropFluid.h:310
Definition: CoolPropFluid.h:331
std::string InChIKey
The InChI key for the fluid.
Definition: CoolPropFluid.h:547
Definition: Helmholtz.h:796
Use TransportRoutines::viscosity_higher_order_modified_Batschinski_Hildebrand.
Definition: CoolPropFluid.h:306
Use TransportRoutines::viscosity_dilute_ethane.
Definition: CoolPropFluid.h:247
Use TransportRoutines::conductivity_hardcoded_helium.
Definition: CoolPropFluid.h:362
Use TransportRoutines::viscosity_toluene_higher_order_hardcoded.
Definition: CoolPropFluid.h:312
Definition: CoolPropFluid.h:27
std::string BibTeX_viscosity
The BibTeX key for the viscosity model.
Definition: CoolPropFluid.h:378
ViscosityHardcodedEnum
Definition: CoolPropFluid.h:345
Use TransportRoutines::viscosity_dilute_collision_integral.
Definition: CoolPropFluid.h:244
bool viscosity_model_provided
A flag for whether viscosity model is provided. False for no.
Definition: CoolPropFluid.h:384
std::string TwoDPNG_URL
The URL to a 2D representation of the molecule (from ChemSpider)
Definition: CoolPropFluid.h:550
ViscosityDiluteGasPowersOfTr powers_of_Tr
Data for TransportRoutines::viscosity_dilute_powers_of_Tr.
Definition: CoolPropFluid.h:259
Use TransportRoutines::viscosity_R23_hardcoded.
Definition: CoolPropFluid.h:350
Definition: CoolPropFluid.h:181
bool viscosity_using_ECS
A flag for whether to use extended corresponding states for viscosity. False for no.
Definition: CoolPropFluid.h:380
EnvironmentalFactorsStruct environment
The environmental variables for global warming potential, ODP, etc.
Definition: CoolPropFluid.h:553
EquationOfState & EOS()
Get a reference to the equation of state.
Definition: CoolPropFluid.h:535
Definition: CoolPropFluid.h:240
ViscosityHigherOrderEnum
Definition: CoolPropFluid.h:304
Use TransportRoutines::viscosity_helium_hardcoded.
Definition: CoolPropFluid.h:349
Definition: CoolPropFluid.h:275
Definition: CoolPropFluid.h:125
CoolPropDbl T_reducing
Reducing temperature [K[.
Definition: CoolPropFluid.h:227
Definition: CoolPropFluid.h:302
Use TransportRoutines::viscosity_initial_density_dependence_Rainwater_Friend.
Definition: CoolPropFluid.h:279
ViscosityDiluteGasPowersOfT powers_of_T
Data for TransportRoutines::viscosity_dilute_powers_of_T.
Definition: CoolPropFluid.h:258
IdealHelmholtzContainer alpha0
The ideal Helmholtz energy.
Definition: CoolPropFluid.h:437
Definition: CoolPropFluid.h:291
Use TransportRoutines::conductivity_hardcoded_water.
Definition: CoolPropFluid.h:359
Use TransportRoutines::viscosity_heavywater_hardcoded.
Definition: CoolPropFluid.h:348
ViscosityInitialDensityEnum
Definition: CoolPropFluid.h:277
double ECS_qd
The critical qd parameter for the Olchowy-Sengers cross-over term.
Definition: CoolPropFluid.h:526
Use TransportRoutines::conductivity_hardcoded_R23.
Definition: CoolPropFluid.h:361
This file contains flash routines in which the state is unknown, and a solver of some kind must be us...
Definition: AbstractState.h:19
Definition: CoolPropFluid.h:162
Use TransportRoutines::viscosity_dilute_collision_integral_powers_of_T.
Definition: CoolPropFluid.h:245
bool conductivity_using_ECS
A flag for whether to use extended corresponding states for conductivity. False for no...
Definition: CoolPropFluid.h:381
bool viscosity_using_Chung
A flag for whether to use Chung model. False for no.
Definition: CoolPropFluid.h:382
ViscosityHardcodedEnum hardcoded_viscosity
Hardcoded flags for the viscosity.
Definition: CoolPropFluid.h:388
ResidualHelmholtzContainer alphar
The residual Helmholtz energy.
Definition: CoolPropFluid.h:436
Use TransportRoutines::viscosity_dilute_cyclohexane.
Definition: CoolPropFluid.h:248
void validate()
Validate the EOS that was just constructed.
Definition: CoolPropFluid.h:444
Definition: CoolPropFluid.h:403
Use TransportRoutines::viscosity_methanol_hardcoded.
Definition: CoolPropFluid.h:351
ViscosityDiluteGasCollisionIntegralData collision_integral
Data for TransportRoutines::viscosity_dilute_collision_integral.
Definition: CoolPropFluid.h:255
Definition: DataStructures.h:16