Cantera  2.4.0
PDSS_SSVol.h
Go to the documentation of this file.
1 /**
2  * @file PDSS_SSVol.h
3  * Declarations for the class PDSS_SSVol (pressure dependent standard state)
4  * which handles calculations for a single species with an expression for the standard state molar volume in a phase
5  * given by an enumerated data type
6  * (see class \ref pdssthermo and \link Cantera::PDSS_SSVol PDSS_SSVol\endlink).
7  */
8 
9 // This file is part of Cantera. See License.txt in the top-level directory or
10 // at http://www.cantera.org/license.txt for license and copyright information.
11 
12 #ifndef CT_PDSS_SSVOL_H
13 #define CT_PDSS_SSVOL_H
14 
15 #include "PDSS.h"
16 
17 namespace Cantera
18 {
19 //! Class for pressure dependent standard states that uses a standard state
20 //! volume model of some sort.
21 /*!
22  * @attention This class currently does not have any test cases or examples. Its
23  * implementation may be incomplete, and future changes to Cantera may
24  * unexpectedly cause this class to stop working. If you use this class,
25  * please consider contributing examples or test cases. In the absence of
26  * new tests or examples, this class may be deprecated and removed in a
27  * future version of Cantera. See
28  * https://github.com/Cantera/cantera/issues/267 for additional information.
29  *
30  * Class PDSS_SSVol is an implementation class that compute the properties of a
31  * single species in a phase at its standard states, for a range of temperatures
32  * and pressures. This particular class assumes that the calculation of the
33  * thermodynamics functions can be separated into a temperature polynomial
34  * representation for thermo functions that can be handled bey a SimpleThermo
35  * object and a separate calculation for the standard state volume. The Models
36  * include a cubic polynomial in temperature for either the standard state
37  * volume or the standard state density. The manager uses a SimpleThermo object
38  * to handle the calculation of the reference state. This object then adds the
39  * pressure dependencies and the volume terms to these thermo functions to
40  * complete the representation.
41  *
42  * The class includes the following models for the representation of the
43  * standard state volume:
44  *
45  * - Temperature polynomial for the standard state volume
46  * - This standard state model is invoked with the keyword "temperature_polynomial".
47  * The standard state volume is considered a function of temperature only.
48  * \f[
49  * V^o_k(T,P) = a_0 + a_1 T + a_2 T^2 + a_3 T^3
50  * \f]
51  *
52  * - Temperature polynomial for the standard state density
53  * - This standard state model is invoked with the keyword "density_temperature_polynomial".
54  * The standard state density, which is the inverse of the volume,
55  * is considered a function of temperature only.
56  * \f[
57  * {\rho}^o_k(T,P) = \frac{M_k}{V^o_k(T,P)} = a_0 + a_1 T + a_2 T^2 + a_3 T^3
58  * \f]
59  *
60  * ## Specification of Species Standard State Properties
61  *
62  * The standard molar Gibbs free energy for species *k* is determined from
63  * the enthalpy and entropy expressions
64  *
65  * \f[
66  * G^o_k(T,P) = H^o_k(T,P) - S^o_k(T,P)
67  * \f]
68  *
69  * The enthalpy is calculated mostly from the MultiSpeciesThermo object's enthalpy
70  * evaluator. The dependence on pressure originates from the Maxwell relation
71  *
72  * \f[
73  * {\left(\frac{dH^o_k}{dP}\right)}_T = T {\left(\frac{dS^o_k}{dP}\right)}_T + V^o_k
74  * \f]
75  * which is equal to
76  *
77  * \f[
78  * {\left(\frac{dH^o_k}{dP}\right)}_T = V^o_k - T {\left(\frac{dV^o_k}{dT}\right)}_P
79  * \f]
80  *
81  * The entropy is calculated mostly from the MultiSpeciesThermo objects entropy
82  * evaluator. The dependence on pressure originates from the Maxwell relation:
83  *
84  * \f[
85  * {\left(\frac{dS^o_k}{dP}\right)}_T = - {\left(\frac{dV^o_k}{dT}\right)}_P
86  * \f]
87  *
88  * The standard state constant-pressure heat capacity expression is obtained
89  * from taking the temperature derivative of the Maxwell relation involving the
90  * enthalpy given above to yield an expression for the pressure dependence of
91  * the heat capacity.
92  *
93  * \f[
94  * {\left(\frac{d{C}^o_{p,k}}{dP}\right)}_T = - T {\left(\frac{{d}^2{V}^o_k}{{dT}^2}\right)}_T
95  * \f]
96  *
97  * The standard molar Internal Energy for species *k* is determined from the
98  * following relation.
99  *
100  * \f[
101  * U^o_k(T,P) = H^o_k(T,P) - p V^o_k
102  * \f]
103  *
104  * ## XML Example
105  *
106  * An example of the specification of a standard state for the LiCl molten salt
107  * which has a temperature dependent standard state volume.
108  *
109  * @code
110  * <speciesData id="species_MoltenSalt">
111  * <species name="LiCl(L)">
112  * <atomArray> Li:1 Cl:1 </atomArray>
113  * <standardState model="density_temperature_polynomial">
114  * <densityTemperaturePolynomial units="gm/cm3" >
115  * 1.98715, -5.890906E-4, 0.0, 0.0
116  * </densityTemperaturePolynomial>
117  * </standardState>
118  * <thermo>
119  * <Shomate Pref="1 bar" Tmax="2000.0" Tmin="700.0">
120  * <floatArray size="7">
121  * 73.18025, -9.047232, -0.316390,
122  * 0.079587, 0.013594, -417.1314,
123  * 157.6711
124  * </floatArray>
125  * </Shomate>
126  * </thermo>
127  * </species>
128  * </speciesData>
129  * @endcode
130  *
131  * @ingroup pdssthermo
132  */
134 {
135 public:
136  //! Default Constructor
137  PDSS_SSVol();
138 
139  //! @name Molar Thermodynamic Properties of the Species Standard State in the Solution
140  //! @{
141 
142  // See PDSS.h for documentation of functions overridden from Class PDSS
143 
144  virtual doublereal intEnergy_mole() const;
145  virtual doublereal cv_mole() const;
146 
147  //! @}
148 
149  //! @name Mechanical Equation of State Properties
150  //! @{
151 
152  virtual void setPressure(doublereal pres);
153  virtual void setTemperature(doublereal temp);
154  virtual void setState_TP(doublereal temp, doublereal pres);
155  virtual void setState_TR(doublereal temp, doublereal rho);
156 
157  //! @}
158  //! @name Miscellaneous properties of the standard state
159  //! @{
160 
161  virtual doublereal satPressure(doublereal t);
162 
163  //! @}
164  //! @name Initialization of the Object
165  //! @{
166 
167  virtual void initThermo();
168 
169  //! Set polynomial coefficients for the standard state molar volume as a
170  //! function of temperature. Cubic polynomial (4 coefficients). Leading
171  //! coefficient is the constant (temperature-independent) term [m^3/kmol].
172  void setVolumePolynomial(double* coeffs);
173 
174  //! Set polynomial coefficients for the standard state density as a function
175  //! of temperature. Cubic polynomial (4 coefficients). Leading coefficient
176  //! is the constant (temperature-independent) term [kg/m^3].
177  void setDensityPolynomial(double* coeffs);
178 
179  virtual void setParametersFromXML(const XML_Node& speciesNode);
180  //@}
181 
182 private:
183  //! Does the internal calculation of the volume
184  void calcMolarVolume();
185 
186  //! Types of general formulations for the specification of the standard
187  //! state volume
188  enum class SSVolume_Model {
189  //! This approximation is for a species with a cubic polynomial in
190  //! temperature
191  /*!
192  * V^ss = a_0 + a_1 T + a_2 T^2 + a_3 T^3
193  */
194  tpoly,
195  //! This approximation is for a species where the density is expressed
196  //! as a cubic polynomial in temperature
197  /*!
198  * V^ss = M / (a_0 + a_1 T + a_2 T^2 + a_3 T^3)
199  */
201  };
202 
203  //! Enumerated data type describing the type of volume model
204  //! used to calculate the standard state volume of the species
206 
207  //! coefficients for the temperature representation
209 
210  //! Derivative of the volume wrt temperature
211  mutable doublereal dVdT_;
212 
213  //! 2nd derivative of the volume wrt temperature
214  mutable doublereal d2VdT2_;
215 };
216 
217 }
218 
219 #endif
virtual void setParametersFromXML(const XML_Node &speciesNode)
Initialization routine for the PDSS object based on the speciesNode.
Definition: PDSS_SSVol.cpp:25
PDSS_SSVol()
Default Constructor.
Definition: PDSS_SSVol.cpp:19
SSVolume_Model volumeModel_
Enumerated data type describing the type of volume model used to calculate the standard state volume ...
Definition: PDSS_SSVol.h:205
virtual doublereal intEnergy_mole() const
Return the molar internal Energy in units of J kmol-1.
Definition: PDSS_SSVol.cpp:74
virtual doublereal satPressure(doublereal t)
saturation pressure
Definition: PDSS_SSVol.cpp:163
virtual void setTemperature(doublereal temp)
Set the internal temperature.
Definition: PDSS_SSVol.cpp:125
Class XML_Node is a tree-based representation of the contents of an XML file.
Definition: xml.h:97
void setVolumePolynomial(double *coeffs)
Set polynomial coefficients for the standard state molar volume as a function of temperature.
Definition: PDSS_SSVol.cpp:52
void calcMolarVolume()
Does the internal calculation of the volume.
Definition: PDSS_SSVol.cpp:85
void setDensityPolynomial(double *coeffs)
Set polynomial coefficients for the standard state density as a function of temperature.
Definition: PDSS_SSVol.cpp:59
This approximation is for a species with a cubic polynomial in temperature.
virtual void setPressure(doublereal pres)
Sets the pressure in the object.
Definition: PDSS_SSVol.cpp:106
This approximation is for a species where the density is expressed as a cubic polynomial in temperatu...
SSVolume_Model
Types of general formulations for the specification of the standard state volume. ...
Definition: PDSS_SSVol.h:188
Declarations for the virtual base class PDSS (pressure dependent standard state) which handles calcul...
Base class for PDSS classes which compute nondimensional properties directly.
Definition: PDSS.h:513
doublereal d2VdT2_
2nd derivative of the volume wrt temperature
Definition: PDSS_SSVol.h:214
virtual void setState_TP(doublereal temp, doublereal pres)
Set the internal temperature and pressure.
Definition: PDSS_SSVol.cpp:147
vector_fp TCoeff_
coefficients for the temperature representation
Definition: PDSS_SSVol.h:208
doublereal dVdT_
Derivative of the volume wrt temperature.
Definition: PDSS_SSVol.h:211
Class for pressure dependent standard states that uses a standard state volume model of some sort...
Definition: PDSS_SSVol.h:133
virtual void initThermo()
Initialization routine.
Definition: PDSS_SSVol.cpp:66
virtual doublereal cv_mole() const
Return the molar const volume heat capacity in units of J kmol-1 K-1.
Definition: PDSS_SSVol.cpp:80
std::vector< double > vector_fp
Turn on the use of stl vectors for the basic array type within cantera Vector of doubles.
Definition: ct_defs.h:157
virtual void setState_TR(doublereal temp, doublereal rho)
Set the internal temperature and density.
Definition: PDSS_SSVol.cpp:153
Namespace for the Cantera kernel.
Definition: AnyMap.cpp:8