Cantera  3.1.0a1
PDSS_Water.h
Go to the documentation of this file.
1 /**
2  * @file PDSS_Water.h
3  * Implementation of a pressure dependent standard state
4  * virtual function for a Pure Water Phase
5  * (see @ref pdssthermo and class @link Cantera::PDSS_Water PDSS_Water@endlink).
6  */
7 
8 // This file is part of Cantera. See License.txt in the top-level directory or
9 // at https://cantera.org/license.txt for license and copyright information.
10 
11 #ifndef CT_PDSS_WATER_H
12 #define CT_PDSS_WATER_H
13 
14 #include "PDSS.h"
15 #include "WaterPropsIAPWS.h"
16 #include "WaterProps.h"
17 
18 namespace Cantera
19 {
20 //! Class for the liquid water pressure dependent
21 //! standard state
22 /*!
23  * Notes:
24  *
25  * Base state for thermodynamic properties:
26  *
27  * The thermodynamic base state for water is set to the NIST basis here by
28  * specifying constants EW_Offset and SW_Offset. These offsets are specified so
29  * that the following properties hold:
30  *
31  * Delta_Hfo_gas(298.15) = -241.826 kJ/gmol
32  * So_gas(298.15, 1bar) = 188.835 J/gmolK
33  *
34  * (http://webbook.nist.gov)
35  *
36  * The "o" here refers to a hypothetical ideal gas state. The way we achieve
37  * this in practice is to evaluate at a very low pressure and then use the
38  * theoretical ideal gas results to scale up to higher pressures:
39  *
40  * Ho(1bar) = H(P0)
41  *
42  * So(1bar) = S(P0) + RT ln(1bar/P0)
43  *
44  * The offsets used in the steam tables are different than NIST's. They assume
45  * u_liq(TP) = 0.0, s_liq(TP) = 0.0, where TP is the triple point conditions.
46  *
47  * @ingroup pdssthermo
48  */
49 class PDSS_Water : public PDSS_Molar
50 {
51 public:
52  //! Default constructor
53  PDSS_Water();
54 
55  //! @name Molar Thermodynamic Properties of the Species Standard State
56  //! @{
57 
58  // See PDSS.h for documentation of functions overridden from Class PDSS
59 
60  double enthalpy_mole() const override;
61  double intEnergy_mole() const override;
62  double entropy_mole() const override;
63  double gibbs_mole() const override;
64  double cp_mole() const override;
65  double cv_mole() const override;
66  double molarVolume() const override;
67  double density() const override;
68 
69  //! @}
70  //! @name Properties of the Reference State of the Species in the Solution
71  //! @{
72 
73  //! Returns a reference pressure value that can be safely calculated by the
74  //! underlying real equation of state for water
75  /*!
76  * Note, this function is needed because trying to calculate a one atm value
77  * around the critical point will cause a crash
78  *
79  * @param temp Temperature (Kelvin)
80  */
81  double pref_safe(double temp) const;
82 
83  double gibbs_RT_ref() const override;
84  double enthalpy_RT_ref() const override;
85  double entropy_R_ref() const override;
86  double cp_R_ref() const override;
87  double molarVolume_ref() const override;
88 
89  //! @}
90  //! @name Mechanical Equation of State Properties
91  //! @{
92 
93  double pressure() const override;
94  void setPressure(double pres) override;
95  void setTemperature(double temp) override;
96  void setState_TP(double temp, double pres) override;
97 
98  //! Set the density of the water phase
99  /*!
100  * This is a non-virtual function because it specific to this object.
101  *
102  * @param dens Density of the water (kg/m3)
103  */
104  void setDensity(double dens);
105 
106  double thermalExpansionCoeff() const override;
107 
108  //! Return the derivative of the volumetric thermal expansion coefficient.
109  //! Units: 1/K2.
110  /*!
111  * The thermal expansion coefficient is defined as
112  * @f[
113  * \beta = \frac{1}{v}\left(\frac{\partial v}{\partial T}\right)_P
114  * @f]
115  */
116  double dthermalExpansionCoeffdT() const;
117 
118  //! Returns the isothermal compressibility. Units: 1/Pa.
119  /*!
120  * The isothermal compressibility is defined as
121  * @f[
122  * \kappa_T = -\frac{1}{v}\left(\frac{\partial v}{\partial P}\right)_T
123  * @f]
124  * or
125  * @f[
126  * \kappa_T = \frac{1}{\rho}\left(\frac{\partial \rho}{\partial P}\right)_T
127  * @f]
128  */
129  double isothermalCompressibility() const;
130 
131  //! @}
132  //! @name Miscellaneous properties of the standard state
133  //! @{
134 
135  double critTemperature() const override;
136  double critPressure() const override;
137  double critDensity() const override;
138  double satPressure(double t) override;
139 
140  //! Get a pointer to a changeable WaterPropsIAPWS object
142  return &m_sub;
143  }
144 
145  //! Get a pointer to a changeable WaterPropsIAPWS object
147  return &m_waterProps;
148  }
149 
150  void getParameters(AnyMap& eosNode) const override;
151 
152  //! @}
153 
154 private:
155  //! Pointer to the WaterPropsIAPWS object, which does the actual calculations
156  //! for the real equation of state
157  /*!
158  * This object owns m_sub
159  */
161 
162  //! Pointer to the WaterProps object
163  /*!
164  * This class is used to house several approximation
165  * routines for properties of water.
166  *
167  * This object owns m_waterProps, and the WaterPropsIAPWS object used by
168  * WaterProps is m_sub, which is defined above.
169  */
171 
172  //! State of the system - density
173  /*!
174  * Density is the independent variable here, but it's hidden behind the
175  * object's interface.
176  */
177  double m_dens;
178 
179  //! state of the fluid
180  /*!
181  * @code
182  * 0 WATER_GAS
183  * 1 WATER_LIQUID
184  * 2 WATER_SUPERCRIT
185  * 3 WATER_UNSTABLELIQUID
186  * 4 WATER_UNSTABLEGAS
187  * @endcode
188  */
189  int m_iState = WATER_LIQUID;
190 
191  /**
192  * Offset constants used to obtain consistency with the NIST database.
193  * This is added to all internal energy and enthalpy results.
194  * units = J kmol-1.
195  */
196  double EW_Offset = 0.0;
197 
198  /**
199  * Offset constant used to obtain consistency with NIST convention.
200  * This is added to all internal entropy results.
201  * units = J kmol-1 K-1.
202  */
203  double SW_Offset = 0.0;
204 
205 public:
206  /**
207  * Since this phase represents a liquid phase, it's an error to
208  * return a gas-phase answer. However, if the below is true, then
209  * a gas-phase answer is allowed. This is used to check the thermodynamic
210  * consistency with ideal-gas thermo functions for example.
211  */
212  bool m_allowGasPhase = false;
213 };
214 
215 }
216 
217 #endif
Declarations for the virtual base class PDSS (pressure dependent standard state) which handles calcul...
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.
A map of string keys to values whose type can vary at runtime.
Definition: AnyMap.h:427
Base class for PDSS classes which compute molar properties directly.
Definition: PDSS.h:426
Class for the liquid water pressure dependent standard state.
Definition: PDSS_Water.h:50
WaterProps m_waterProps
Pointer to the WaterProps object.
Definition: PDSS_Water.h:170
void setPressure(double pres) override
Sets the pressure in the object.
Definition: PDSS_Water.cpp:133
double molarVolume() const override
Return the molar volume at standard state.
Definition: PDSS_Water.cpp:82
void setTemperature(double temp) override
Set the internal temperature.
Definition: PDSS_Water.cpp:212
double enthalpy_mole() const override
Return the molar enthalpy in units of J kmol-1.
Definition: PDSS_Water.cpp:52
double thermalExpansionCoeff() const override
Return the volumetric thermal expansion coefficient. Units: 1/K.
Definition: PDSS_Water.cpp:160
WaterPropsIAPWS m_sub
Pointer to the WaterPropsIAPWS object, which does the actual calculations for the real equation of st...
Definition: PDSS_Water.h:160
double pressure() const override
Returns the pressure (Pa)
Definition: PDSS_Water.cpp:127
double critPressure() const override
critical pressure
Definition: PDSS_Water.cpp:191
double SW_Offset
Offset constant used to obtain consistency with NIST convention.
Definition: PDSS_Water.h:203
double critDensity() const override
critical density
Definition: PDSS_Water.cpp:196
WaterProps * getWaterProps()
Get a pointer to a changeable WaterPropsIAPWS object.
Definition: PDSS_Water.h:146
double gibbs_RT_ref() const override
Return the molar Gibbs free energy divided by RT at reference pressure.
Definition: PDSS_Water.cpp:87
double critTemperature() const override
critical temperature
Definition: PDSS_Water.cpp:186
double isothermalCompressibility() const
Returns the isothermal compressibility. Units: 1/Pa.
Definition: PDSS_Water.cpp:181
double entropy_R_ref() const override
Return the molar entropy divided by R at reference pressure.
Definition: PDSS_Water.cpp:103
double dthermalExpansionCoeffdT() const
Return the derivative of the volumetric thermal expansion coefficient.
Definition: PDSS_Water.cpp:165
double enthalpy_RT_ref() const override
Return the molar enthalpy divided by RT at reference pressure.
Definition: PDSS_Water.cpp:95
double cv_mole() const override
Return the molar const volume heat capacity in units of J kmol-1 K-1.
Definition: PDSS_Water.cpp:77
void getParameters(AnyMap &eosNode) const override
Store the parameters needed to reconstruct a copy of this PDSS object.
Definition: PDSS_Water.cpp:245
double EW_Offset
Offset constants used to obtain consistency with the NIST database.
Definition: PDSS_Water.h:196
double intEnergy_mole() const override
Return the molar internal Energy in units of J kmol-1.
Definition: PDSS_Water.cpp:57
double entropy_mole() const override
Return the molar entropy in units of J kmol-1 K-1.
Definition: PDSS_Water.cpp:62
void setState_TP(double temp, double pres) override
Set the internal temperature and pressure.
Definition: PDSS_Water.cpp:218
int m_iState
state of the fluid
Definition: PDSS_Water.h:189
double cp_mole() const override
Return the molar const pressure heat capacity in units of J kmol-1 K-1.
Definition: PDSS_Water.cpp:72
WaterPropsIAPWS * getWater()
Get a pointer to a changeable WaterPropsIAPWS object.
Definition: PDSS_Water.h:141
double m_dens
State of the system - density.
Definition: PDSS_Water.h:177
double pref_safe(double temp) const
Returns a reference pressure value that can be safely calculated by the underlying real equation of s...
Definition: PDSS_Water.cpp:224
double density() const override
Return the standard state density at standard state.
Definition: PDSS_Water.cpp:207
double gibbs_mole() const override
Return the molar Gibbs free energy in units of J kmol-1.
Definition: PDSS_Water.cpp:67
bool m_allowGasPhase
Since this phase represents a liquid phase, it's an error to return a gas-phase answer.
Definition: PDSS_Water.h:212
double molarVolume_ref() const override
Return the molar volume at reference pressure.
Definition: PDSS_Water.cpp:119
void setDensity(double dens)
Set the density of the water phase.
Definition: PDSS_Water.cpp:201
PDSS_Water()
Default constructor.
Definition: PDSS_Water.cpp:16
double satPressure(double t) override
saturation pressure
Definition: PDSS_Water.cpp:237
double cp_R_ref() const override
Return the molar heat capacity divided by R at reference pressure.
Definition: PDSS_Water.cpp:111
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
Namespace for the Cantera kernel.
Definition: AnyMap.cpp:564