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