Cantera  3.1.0a1
WaterSSTP.h
Go to the documentation of this file.
1 /**
2  * @file WaterSSTP.h
3  * Declares a ThermoPhase class consisting of pure water (see @ref thermoprops
4  * and class @link Cantera::WaterSSTP WaterSSTP@endlink).
5  */
6 
7 // This file is part of Cantera. See License.txt in the top-level directory or
8 // at https://cantera.org/license.txt for license and copyright information.
9 
10 #ifndef CT_WATERSSTP_H
11 #define CT_WATERSSTP_H
12 
13 #include "SingleSpeciesTP.h"
16 
17 namespace Cantera
18 {
19 
20 class WaterPropsIAPWS;
21 class WaterProps;
22 //! Class for single-component water. This is designed to cover just the liquid
23 //! and supercritical phases of water.
24 /*!
25  * The reference is W. Wagner, A. Pruss, "The IAPWS Formulation 1995 for the
26  * Thermodynamic Properties of Ordinary Water Substance for General and
27  * Scientific Use," J. Phys. Chem. Ref. Dat, 31, 387, 2002.
28  *
29  * ## Specification of Species Standard State Properties
30  *
31  * The offsets used in the steam tables are different than NIST's. They assume
32  * u_liq(TP) = 0.0, s_liq(TP) = 0.0, where TP is the triple point conditions:
33  *
34  * - u(273.16, rho) = 0.0
35  * - s(273.16, rho) = 0.0
36  * - psat(273.16) = 611.655 Pascal
37  * - rho(273.16, psat) = 999.793 kg m-3
38  *
39  * These "steam table" assumptions are used by the WaterPropsIAPWS class.
40  * Therefore, offsets must be calculated to make the thermodynamic properties
41  * calculated within this class to be consistent with thermo properties within
42  * Cantera.
43  *
44  * The thermodynamic base state for water is set to the NIST basis here by
45  * specifying constants, #EW_Offset and #SW_Offset, one for energy quantities
46  * and one for entropy quantities. The offsets are specified so that the
47  * following properties hold:
48  *
49  * - Delta_Hfo_idealgas(298.15) = -241.826 kJ/gmol
50  * - So_idealgas(298.15, 1bar) = 188.835 J/gmolK
51  *
52  * (From http://webbook.nist.gov)
53  *
54  * The "o" here refers to a hypothetical ideal gas state. The way we achieve
55  * this in practice is to evaluate at a very low pressure and then use the
56  * theoretical ideal gas results to scale up to higher pressures:
57  *
58  * Ho(1bar) = H(P0)
59  *
60  * So(1bar) = S(P0) + RT ln(1bar/P0)
61  *
62  * ## Application within Kinetics Managers
63  *
64  * This is unimplemented.
65  *
66  * @ingroup thermoprops
67  */
68 class WaterSSTP : public SingleSpeciesTP
69 {
70 public:
71  //! Full constructor for a water phase
72  /*!
73  * @param inputFile String name of the input file
74  * @param id string id of the phase name
75  */
76  explicit WaterSSTP(const string& inputFile="", const string& id="");
77 
78  string type() const override {
79  return "liquid-water-IAPWS95";
80  }
81 
82  string phaseOfMatter() const override;
83 
84  //! @name Molar Thermodynamic Properties of the Solution
85  //! @{
86 
87  double cv_mole() const override;
88 
89  //! @}
90  //! @name Mechanical Equation of State Properties
91  //! @{
92 
93  double pressure() const override;
94  void setPressure(double p) override;
95  double isothermalCompressibility() const override;
96  double thermalExpansionCoeff() const override;
97 
98  //! Return the derivative of the volumetric thermal expansion coefficient.
99  //! Units: 1/K2.
100  double dthermalExpansionCoeffdT() const;
101 
102  //! @}
103  //! @name Properties of the Standard State of the Species in the Solution
104  //! @{
105 
106  void getStandardChemPotentials(double* gss) const override;
107  void getGibbs_RT(double* grt) const override;
108  void getEnthalpy_RT(double* hrt) const override;
109  void getEntropy_R(double* sr) const override;
110  void getCp_R(double* cpr) const override;
111  void getIntEnergy_RT(double* urt) const override;
112 
113  //! @}
114  //! @name Thermodynamic Values for the Species Reference State
115  //!
116  //! All functions in this group need to be overridden, because the
117  //! m_spthermo MultiSpeciesThermo function is not adequate for the real
118  //! equation of state.
119  //! @{
120 
121  void getEnthalpy_RT_ref(double* hrt) const override;
122  void getGibbs_RT_ref(double* grt) const override;
123  void getGibbs_ref(double* g) const override;
124  void getEntropy_R_ref(double* er) const override;
125  void getCp_R_ref(double* cprt) const override;
126  void getStandardVolumes_ref(double* vol) const override;
127  //! @}
128 
129  double critTemperature() const override;
130  double critPressure() const override;
131  double critDensity() const override;
132 
133  double satPressure(double t) override;
134 
135  bool compatibleWithMultiPhase() const override{
136  return false;
137  }
138 
139  //! Return the fraction of vapor at the current conditions
140  /*!
141  * Below Tcrit, this routine will always return 0, by definition of the
142  * functionality of the routine. Above Tcrit, we query the density to toggle
143  * between 0 and 1.
144  */
145  double vaporFraction() const override;
146 
147  //! Set the temperature of the phase
148  /*!
149  * The density and composition of the phase is constant during this
150  * operator.
151  *
152  * @param temp Temperature (Kelvin)
153  */
154  void setTemperature(const double temp) override;
155 
156  //! Set the density of the phase
157  /*!
158  * The temperature and composition of the phase is constant during this
159  * operator.
160  *
161  * @param dens value of the density in kg m-3
162  */
163  void setDensity(const double dens) override;
164 
165  void initThermo() override;
166 
167  //! Get a pointer to a changeable WaterPropsIAPWS object
169  return &m_sub;
170  }
171 
172  //! Get a pointer to a changeable WaterPropsIAPWS object
174  return m_waterProps.get();
175  }
176 
177  //! Switch that enables calculations in the gas phase
178  /**
179  * Since this phase represents a liquid (or supercritical) phase, it is an
180  * error to return a gas-phase answer. The sole intended use for this
181  * member function is to check the thermodynamic consistency of the
182  * underlying WaterProps class with ideal-gas thermo functions.
183  */
184  void _allowGasPhase(bool flag) { m_allowGasPhase = flag; }
185 
186 protected:
187  //! This routine must be overridden because it is not applicable.
188  void _updateThermo() const;
189 
190 private:
191  //! WaterPropsIAPWS that calculates the real properties of water.
193 
194  //! Pointer to the WaterProps object
195  /*!
196  * This class is used to house several approximation routines for properties
197  * of water. This object owns m_waterProps, and the WaterPropsIAPWS object
198  * used by WaterProps is m_sub, which is defined above.
199  */
200  unique_ptr<WaterProps> m_waterProps;
201 
202  //! Molecular weight of Water -> %Cantera assumption
203  double m_mw = 0.0;
204 
205  //! Offset constants used to obtain consistency with the NIST database.
206  /*!
207  * This is added to all internal energy and enthalpy results.
208  * units = J kmol-1.
209  */
210  double EW_Offset = 0.0;
211 
212  //! Offset constant used to obtain consistency with NIST convention.
213  /*!
214  * This is added to all internal entropy results.
215  * units = J kmol-1 K-1.
216  */
217  double SW_Offset = 0.0;
218 
219  //! Boolean is true if object has been properly initialized for calculation
220  bool m_ready = false;
221 
222  /**
223  * Since this phase represents a liquid (or supercritical) phase, it is an
224  * error to return a gas-phase answer. However, if the below is true, then
225  * a gas-phase answer is allowed. This is used to check the thermodynamic
226  * consistency with ideal-gas thermo functions for example.
227  */
228  bool m_allowGasPhase = false;
229 };
230 
231 }
232 
233 #endif
Header for the SingleSpeciesTP class, which is a filter class for ThermoPhase, that eases the constru...
Headers for a class for calculating the equation of state of water from the IAPWS 1995 Formulation ba...
Header for a class used to house several approximation routines for properties of water.
The SingleSpeciesTP class is a filter class for ThermoPhase.
Class for calculating the equation of state of water.
The WaterProps class is used to house several approximation routines for properties of water.
Definition: WaterProps.h:38
Class for single-component water.
Definition: WaterSSTP.h:69
void setDensity(const double dens) override
Set the density of the phase.
Definition: WaterSSTP.cpp:320
unique_ptr< WaterProps > m_waterProps
Pointer to the WaterProps object.
Definition: WaterSSTP.h:200
double thermalExpansionCoeff() const override
Return the volumetric thermal expansion coefficient. Units: 1/K.
Definition: WaterSSTP.cpp:272
WaterPropsIAPWS m_sub
WaterPropsIAPWS that calculates the real properties of water.
Definition: WaterSSTP.h:192
bool m_ready
Boolean is true if object has been properly initialized for calculation.
Definition: WaterSSTP.h:220
double pressure() const override
Return the thermodynamic pressure (Pa).
Definition: WaterSSTP.cpp:238
double critPressure() const override
Critical pressure (Pa).
Definition: WaterSSTP.cpp:299
double SW_Offset
Offset constant used to obtain consistency with NIST convention.
Definition: WaterSSTP.h:217
double critDensity() const override
Critical density (kg/m3).
Definition: WaterSSTP.cpp:304
void getEntropy_R(double *sr) const override
Get the array of nondimensional Entropy functions for the standard state species at the current T and...
Definition: WaterSSTP.cpp:98
void getGibbs_ref(double *g) const override
Returns the vector of the Gibbs function of the reference state at the current temperature of the sol...
Definition: WaterSSTP.cpp:170
WaterProps * getWaterProps()
Get a pointer to a changeable WaterPropsIAPWS object.
Definition: WaterSSTP.h:173
double critTemperature() const override
Critical temperature (K).
Definition: WaterSSTP.cpp:294
WaterSSTP(const string &inputFile="", const string &id="")
Full constructor for a water phase.
Definition: WaterSSTP.cpp:16
void getCp_R(double *cpr) const override
Get the nondimensional Heat Capacities at constant pressure for the species standard states at the cu...
Definition: WaterSSTP.cpp:121
string type() const override
String indicating the thermodynamic model implemented.
Definition: WaterSSTP.h:78
void initThermo() override
Initialize the ThermoPhase object after all species have been set up.
Definition: WaterSSTP.cpp:28
void setPressure(double p) override
Set the internally stored pressure (Pa) at constant temperature and composition.
Definition: WaterSSTP.cpp:243
void getStandardVolumes_ref(double *vol) const override
Get the molar volumes of the species reference states at the current T and P_ref of the solution.
Definition: WaterSSTP.cpp:220
double vaporFraction() const override
Return the fraction of vapor at the current conditions.
Definition: WaterSSTP.cpp:334
double dthermalExpansionCoeffdT() const
Return the derivative of the volumetric thermal expansion coefficient.
Definition: WaterSSTP.cpp:277
double cv_mole() const override
Molar heat capacity at constant volume. Units: J/kmol/K.
Definition: WaterSSTP.cpp:126
double EW_Offset
Offset constants used to obtain consistency with the NIST database.
Definition: WaterSSTP.h:210
void getEnthalpy_RT(double *hrt) const override
Get the nondimensional Enthalpy functions for the species at their standard states at the current T a...
Definition: WaterSSTP.cpp:88
void getEntropy_R_ref(double *er) const override
Returns the vector of nondimensional entropies of the reference state at the current temperature of t...
Definition: WaterSSTP.cpp:178
void setTemperature(const double temp) override
Set the temperature of the phase.
Definition: WaterSSTP.cpp:309
double isothermalCompressibility() const override
Returns the isothermal compressibility. Units: 1/Pa.
Definition: WaterSSTP.cpp:267
void getGibbs_RT(double *grt) const override
Get the nondimensional Gibbs functions for the species in their standard states at the current T and ...
Definition: WaterSSTP.cpp:103
void getStandardChemPotentials(double *gss) const override
Get the array of chemical potentials at unit activity for the species at their standard states at the...
Definition: WaterSSTP.cpp:112
void getCp_R_ref(double *cprt) const override
Returns the vector of nondimensional constant pressure heat capacities of the reference state at the ...
Definition: WaterSSTP.cpp:200
WaterPropsIAPWS * getWater()
Get a pointer to a changeable WaterPropsIAPWS object.
Definition: WaterSSTP.h:168
void getIntEnergy_RT(double *urt) const override
Returns the vector of nondimensional Internal Energies of the standard state species at the current T...
Definition: WaterSSTP.cpp:93
void _allowGasPhase(bool flag)
Switch that enables calculations in the gas phase.
Definition: WaterSSTP.h:184
bool compatibleWithMultiPhase() const override
Indicates whether this phase type can be used with class MultiPhase for equilibrium calculations.
Definition: WaterSSTP.h:135
double m_mw
Molecular weight of Water -> Cantera assumption.
Definition: WaterSSTP.h:203
bool m_allowGasPhase
Since this phase represents a liquid (or supercritical) phase, it is an error to return a gas-phase a...
Definition: WaterSSTP.h:228
void _updateThermo() const
This routine must be overridden because it is not applicable.
void getGibbs_RT_ref(double *grt) const override
Returns the vector of nondimensional Gibbs Free Energies of the reference state at the current temper...
Definition: WaterSSTP.cpp:150
string phaseOfMatter() const override
String indicating the mechanical phase of the matter in this Phase.
Definition: WaterSSTP.cpp:21
void getEnthalpy_RT_ref(double *hrt) const override
Returns the vector of nondimensional enthalpies of the reference state at the current temperature of ...
Definition: WaterSSTP.cpp:131
double satPressure(double t) override
Return the saturation pressure given the temperature.
Definition: WaterSSTP.cpp:326
Namespace for the Cantera kernel.
Definition: AnyMap.cpp:564