Cantera  3.1.0a1
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 https://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 by a SpeciesThermoInterpType
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 SpeciesThermoInterpType 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  * An example of the specification of a standard state using a temperature dependent
105  * standard state volume is given in the
106  * <a href="../../sphinx/html/yaml/species.html#density-temperature-polynomial">
107  * YAML API Reference</a>.
108  *
109  * @ingroup pdssthermo
110  */
112 {
113 public:
114  //! Default Constructor
115  PDSS_SSVol();
116 
117  //! @name Molar Thermodynamic Properties of the Species Standard State
118  //! @{
119 
120  // See PDSS.h for documentation of functions overridden from Class PDSS
121 
122  double intEnergy_mole() const override;
123  double cv_mole() const override;
124 
125  //! @}
126 
127  //! @name Mechanical Equation of State Properties
128  //! @{
129 
130  void setPressure(double pres) override;
131  void setTemperature(double temp) override;
132  void setState_TP(double temp, double pres) override;
133 
134  //! @}
135  //! @name Miscellaneous properties of the standard state
136  //! @{
137 
138  double satPressure(double t) override;
139 
140  //! @}
141  //! @name Initialization of the Object
142  //! @{
143 
144  void initThermo() override;
145 
146  //! Set polynomial coefficients for the standard state molar volume as a
147  //! function of temperature. Cubic polynomial (4 coefficients). Leading
148  //! coefficient is the constant (temperature-independent) term [m^3/kmol].
149  void setVolumePolynomial(double* coeffs);
150 
151  //! Set polynomial coefficients for the standard state density as a function
152  //! of temperature. Cubic polynomial (4 coefficients). Leading coefficient
153  //! is the constant (temperature-independent) term [kg/m^3].
154  void setDensityPolynomial(double* coeffs);
155 
156  void getParameters(AnyMap& eosNode) const override;
157 
158  //! @}
159 
160 private:
161  //! Does the internal calculation of the volume
162  void calcMolarVolume();
163 
164  //! Types of general formulations for the specification of the standard
165  //! state volume
166  enum class SSVolume_Model {
167  //! This approximation is for a species with a cubic polynomial in
168  //! temperature
169  /*!
170  * V^ss = a_0 + a_1 T + a_2 T^2 + a_3 T^3
171  */
172  tpoly,
173  //! This approximation is for a species where the density is expressed
174  //! as a cubic polynomial in temperature
175  /*!
176  * V^ss = M / (a_0 + a_1 T + a_2 T^2 + a_3 T^3)
177  */
179  };
180 
181  //! Enumerated data type describing the type of volume model
182  //! used to calculate the standard state volume of the species
184 
185  //! coefficients for the temperature representation
186  vector<double> TCoeff_;
187 
188  //! Derivative of the volume wrt temperature
189  mutable double dVdT_;
190 
191  //! 2nd derivative of the volume wrt temperature
192  mutable double d2VdT2_;
193 };
194 
195 }
196 
197 #endif
Declarations for the virtual base class PDSS (pressure dependent standard state) which handles calcul...
A map of string keys to values whose type can vary at runtime.
Definition: AnyMap.h:427
Base class for PDSS classes which compute nondimensional properties directly.
Definition: PDSS.h:436
Class for pressure dependent standard states that uses a standard state volume model of some sort.
Definition: PDSS_SSVol.h:112
void setPressure(double pres) override
Sets the pressure in the object.
Definition: PDSS_SSVol.cpp:116
void setTemperature(double temp) override
Set the internal temperature.
Definition: PDSS_SSVol.cpp:135
double dVdT_
Derivative of the volume wrt temperature.
Definition: PDSS_SSVol.h:189
void setDensityPolynomial(double *coeffs)
Set polynomial coefficients for the standard state density as a function of temperature.
Definition: PDSS_SSVol.cpp:28
void setVolumePolynomial(double *coeffs)
Set polynomial coefficients for the standard state molar volume as a function of temperature.
Definition: PDSS_SSVol.cpp:21
void initThermo() override
Initialization routine.
Definition: PDSS_SSVol.cpp:55
double cv_mole() const override
Return the molar const volume heat capacity in units of J kmol-1 K-1.
Definition: PDSS_SSVol.cpp:90
PDSS_SSVol()
Default Constructor.
Definition: PDSS_SSVol.cpp:16
void getParameters(AnyMap &eosNode) const override
Store the parameters needed to reconstruct a copy of this PDSS object.
Definition: PDSS_SSVol.cpp:35
vector< double > TCoeff_
coefficients for the temperature representation
Definition: PDSS_SSVol.h:186
double intEnergy_mole() const override
Return the molar internal Energy in units of J kmol-1.
Definition: PDSS_SSVol.cpp:84
void setState_TP(double temp, double pres) override
Set the internal temperature and pressure.
Definition: PDSS_SSVol.cpp:157
SSVolume_Model
Types of general formulations for the specification of the standard state volume.
Definition: PDSS_SSVol.h:166
@ tpoly
This approximation is for a species with a cubic polynomial in temperature.
@ density_tpoly
This approximation is for a species where the density is expressed as a cubic polynomial in temperatu...
void calcMolarVolume()
Does the internal calculation of the volume.
Definition: PDSS_SSVol.cpp:95
double d2VdT2_
2nd derivative of the volume wrt temperature
Definition: PDSS_SSVol.h:192
SSVolume_Model volumeModel_
Enumerated data type describing the type of volume model used to calculate the standard state volume ...
Definition: PDSS_SSVol.h:183
double satPressure(double t) override
saturation pressure
Definition: PDSS_SSVol.cpp:163
Namespace for the Cantera kernel.
Definition: AnyMap.cpp:564