Cantera  3.1.0a1
PDSS_HKFT.h
Go to the documentation of this file.
1 /**
2  * @file PDSS_HKFT.h
3  * Declarations for the class PDSS_HKFT (pressure dependent standard state)
4  * which handles calculations for a single species in a phase using the
5  * HKFT standard state
6  * (see @ref pdssthermo and class @link Cantera::PDSS_HKFT PDSS_HKFT@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_HKFT_H
13 #define CT_PDSS_HKFT_H
14 
15 #include "PDSS.h"
16 #include "WaterProps.h"
17 
18 namespace Cantera
19 {
20 class PDSS_Water;
21 
22 //! Class for pressure dependent standard states corresponding to
23 //! ionic solutes in electrolyte water.
24 /*!
25  * @ingroup pdssthermo
26  */
27 class PDSS_HKFT : public PDSS_Molar
28 {
29 public:
30  //! Default Constructor
31  PDSS_HKFT();
32 
33  //! @name Molar Thermodynamic Properties of the Solution
34  //! @{
35 
36  // See PDSS.h for documentation of functions overridden from Class PDSS
37 
38  double enthalpy_mole() const override;
39 
40  double intEnergy_mole() const override;
41  double entropy_mole() const override;
42  double gibbs_mole() const override;
43  double cp_mole() const override;
44  double molarVolume() const override;
45  double density() const override;
46 
47  //! @}
48  //! @name Properties of the Reference State of the Species in the Solution
49  //! @{
50 
51  double refPressure() const {
52  return m_p0;
53  }
54 
55  double gibbs_RT_ref() const override;
56  double enthalpy_RT_ref() const override;
57  double entropy_R_ref() const override;
58  double cp_R_ref() const override;
59  double molarVolume_ref() const override;
60 
61  //! @}
62  //! @name Mechanical Equation of State Properties
63  //! @{
64 
65  void setState_TP(double temp, double pres) override;
66 
67  //! @}
68  //! @name Initialization of the Object
69  //! @{
70 
71  void setParent(VPStandardStateTP* phase, size_t k) override {
72  m_tp = phase;
73  m_spindex = k;
74  }
75 
76  void initThermo() override;
77 
78  //! Set enthalpy of formation at Pr, Tr [J/kmol]
79  void setDeltaH0(double dh0);
80 
81  //! Set Gibbs free energy of formation at Pr, Tr [J/kmol]
82  void setDeltaG0(double dg0);
83 
84  //! Set entropy of formation at Pr, Tr [J/kmol/K]
85  void setS0(double s0);
86 
87  //! Set "a" coefficients (array of 4 elements). Units of each coefficient
88  //! are [J/kmol/Pa, J/kmol, J*K/kmol/Pa, J*K/kmol]
89  void set_a(double* a);
90 
91  //! Set "c" coefficients (array of 2 elements). Units of each coefficient
92  //! are [J/kmol/K, J*K/kmol]
93  void set_c(double* c);
94  void setOmega(double omega); //!< Set omega [J/kmol]
95 
96  void getParameters(AnyMap& eosNode) const override;
97  //! @}
98 
99 private:
100  VPStandardStateTP* m_tp; //!< Parent VPStandardStateTP (ThermoPhase) object
101  size_t m_spindex; //!< Index of this species within the parent phase
102 
103  //! Main routine that actually calculates the Gibbs free energy difference
104  //! between the reference state at Tr, Pr and T,P
105  /*!
106  * This is Eqn. 59 in Johnson et al. @cite johnson1992.
107  */
108  double deltaG() const;
109 
110  //! Main routine that actually calculates the entropy difference
111  //! between the reference state at Tr, Pr and T,P
112  /*!
113  * This is Eqn. 61 in Johnson et al. @cite johnson1992. Actually, there appears to
114  * be an error in the latter. This is a correction.
115  */
116  double deltaS() const;
117 
118  //! Internal formula for the calculation of a_g()
119  /*!
120  * The output of this is in units of Angstroms
121  *
122  * @param temp Temperature (K)
123  * @param ifunc parameters specifying the desired information
124  * - 0 function value
125  * - 1 derivative wrt temperature
126  * - 2 2nd derivative wrt temperature
127  * - 3 derivative wrt pressure
128  */
129  double ag(const double temp, const int ifunc = 0) const;
130 
131  //! Internal formula for the calculation of b_g()
132  /*!
133  * the output of this is unitless
134  *
135  * @param temp Temperature (K)
136  * @param ifunc parameters specifying the desired information
137  * - 0 function value
138  * - 1 derivative wrt temperature
139  * - 2 2nd derivative wrt temperature
140  * - 3 derivative wrt pressure
141  */
142  double bg(const double temp, const int ifunc = 0) const;
143 
144  //! function g appearing in the formulation
145  /*!
146  * Function @f$ g @f$ (Eqn. 49) appearing in the Johnson et al. @cite johnson1992
147  * formulation.
148  *
149  * @param temp Temperature kelvin
150  * @param pres Pressure (pascal)
151  * @param ifunc parameters specifying the desired information
152  * - 0 function value
153  * - 1 derivative wrt temperature
154  * - 2 2nd derivative wrt temperature
155  * - 3 derivative wrt pressure
156  */
157  double g(const double temp, const double pres, const int ifunc = 0) const;
158 
159  //! Difference function f appearing in the formulation
160  /*!
161  * Function @f$ f @f$ (Eqn. 52) appearing in the Johnson et al. @cite johnson1992
162  * formulation of @f$ \omega_j @f$ (Eqn. 46).
163  *
164  * @param temp Temperature kelvin
165  * @param pres Pressure (pascal)
166  * @param ifunc parameters specifying the desired information
167  * - 0 function value
168  * - 1 derivative wrt temperature
169  * - 2 2nd derivative wrt temperature
170  * - 3 derivative wrt pressure
171  */
172  double f(const double temp, const double pres, const int ifunc = 0) const;
173 
174  //! Evaluate the Gstar value appearing in the HKFT formulation
175  /*!
176  * @param temp Temperature kelvin
177  * @param pres Pressure (pascal)
178  * @param ifunc parameters specifying the desired information
179  * - 0 function value
180  * - 1 derivative wrt temperature
181  * - 2 2nd derivative wrt temperature
182  * - 3 derivative wrt pressure
183  */
184  double gstar(const double temp, const double pres, const int ifunc = 0) const;
185 
186  //! Function to look up Element Free Energies
187  /*!
188  * This function looks up the argument string in the element database and
189  * returns the associated 298 K Gibbs Free energy of the element in its
190  * stable state.
191  *
192  * @param elemName String. Only the first 3 characters are significant
193  * @return value contains the Gibbs free energy for that element
194  *
195  * @exception CanteraError
196  * If a match is not found, a CanteraError is thrown as well
197  */
198  double LookupGe(const string& elemName);
199 
200  //! Translate a Gibbs free energy of formation value to a NIST-based Chemical potential
201  /*!
202  * Internally, this function is used to translate the input value,
203  * m_deltaG_formation_tr_pr, to the internally stored value, m_Mu0_tr_pr.
204  */
205  void convertDGFormation();
206 
207 private:
208  //! Water standard state calculator
209  /*!
210  * derived from the equation of state for water.
211  * This object doesn't own the object. Just a shallow pointer.
212  */
213  PDSS_Water* m_waterSS = nullptr;
214 
215  UnitSystem m_units;
216 
217  //! density of standard-state water. internal temporary variable
218  mutable double m_densWaterSS = -1.0;
219 
220  //! Pointer to the water property calculator
221  unique_ptr<WaterProps> m_waterProps;
222 
223  //! Input value of deltaG of Formation at Tr and Pr (cal gmol-1)
224  /*!
225  * Tr = 298.15 Pr = 1 atm
226  *
227  * This is the delta G for the formation reaction of the
228  * ion from elements in their stable state at Tr, Pr.
229  */
231 
232  //! Input value of deltaH of Formation at Tr and Pr (cal gmol-1)
233  /*!
234  * Tr = 298.15 Pr = 1 atm
235  *
236  * This is the delta H for the formation reaction of the
237  * ion from elements in their stable state at Tr, Pr.
238  */
240 
241  //! Value of the Absolute Gibbs Free Energy NIST scale at T_r and P_r
242  /*!
243  * This is the NIST scale value of Gibbs free energy at T_r = 298.15
244  * and P_r = 1 atm.
245  *
246  * J kmol-1
247  */
248  double m_Mu0_tr_pr = 0.0;
249 
250  //! Input value of S_j at Tr and Pr (cal gmol-1 K-1)
251  /*!
252  * Tr = 298.15 Pr = 1 atm
253  */
254  double m_Entrop_tr_pr = NAN;
255 
256  //! Input a1 coefficient (cal gmol-1 bar-1)
257  double m_a1 = 0.0;
258 
259  //! Input a2 coefficient (cal gmol-1)
260  double m_a2 = 0.0;
261 
262  //! Input a3 coefficient (cal K gmol-1 bar-1)
263  double m_a3 = 0.0;
264 
265  //! Input a4 coefficient (cal K gmol-1)
266  double m_a4 = 0.0;
267 
268  //! Input c1 coefficient (cal gmol-1 K-1)
269  double m_c1 = 0.0;
270 
271  //! Input c2 coefficient (cal K gmol-1)
272  double m_c2 = 0.0;
273 
274  //! Input omega_pr_tr coefficient(cal gmol-1)
275  double m_omega_pr_tr = 0.0;
276 
277  //! y = dZdT = 1/(esp*esp) desp/dT at 298.15 and 1 bar
278  double m_Y_pr_tr = 0.0;
279 
280  //! Z = -1 / relEpsilon at 298.15 and 1 bar
281  double m_Z_pr_tr = 0.0;
282 
283  //! Reference pressure is 1 atm in units of bar= 1.0132
284  double m_presR_bar = OneAtm * 1.0E-5;
285 
286  //! small value that is not quite zero
287  double m_domega_jdT_prtr = 0.0;
288 
289  //! Charge of the ion
290  double m_charge_j = 0.0;
291 
292  //! Static variable determining error exiting
293  /*!
294  * If true, then will error exit if there is an inconsistency in DG0, DH0, and DS0.
295  * If not, then will rewrite DH0 to be consistent with the other two.
296  */
298 };
299 
300 }
301 
302 #endif
Declarations for the virtual base class PDSS (pressure dependent standard state) which handles calcul...
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
Class for pressure dependent standard states corresponding to ionic solutes in electrolyte water.
Definition: PDSS_HKFT.h:28
void setOmega(double omega)
Set omega [J/kmol].
Definition: PDSS_HKFT.cpp:339
double molarVolume() const override
Return the molar volume at standard state.
Definition: PDSS_HKFT.cpp:107
static int s_InputInconsistencyErrorExit
Static variable determining error exiting.
Definition: PDSS_HKFT.h:297
double m_Y_pr_tr
y = dZdT = 1/(esp*esp) desp/dT at 298.15 and 1 bar
Definition: PDSS_HKFT.h:278
double m_a4
Input a4 coefficient (cal K gmol-1)
Definition: PDSS_HKFT.h:266
void setParent(VPStandardStateTP *phase, size_t k) override
Set the parent VPStandardStateTP object of this PDSS object.
Definition: PDSS_HKFT.h:71
double enthalpy_mole() const override
Return the molar enthalpy in units of J kmol-1.
Definition: PDSS_HKFT.cpp:29
unique_ptr< WaterProps > m_waterProps
Pointer to the water property calculator.
Definition: PDSS_HKFT.h:221
double deltaS() const
Main routine that actually calculates the entropy difference between the reference state at Tr,...
Definition: PDSS_HKFT.cpp:398
double f(const double temp, const double pres, const int ifunc=0) const
Difference function f appearing in the formulation.
Definition: PDSS_HKFT.cpp:466
size_t m_spindex
Index of this species within the parent phase.
Definition: PDSS_HKFT.h:101
double m_densWaterSS
density of standard-state water. internal temporary variable
Definition: PDSS_HKFT.h:218
double LookupGe(const string &elemName)
Function to look up Element Free Energies.
Definition: PDSS_HKFT.cpp:561
double gibbs_RT_ref() const override
Return the molar Gibbs free energy divided by RT at reference pressure.
Definition: PDSS_HKFT.cpp:155
VPStandardStateTP * m_tp
Parent VPStandardStateTP (ThermoPhase) object.
Definition: PDSS_HKFT.h:100
double m_Entrop_tr_pr
Input value of S_j at Tr and Pr (cal gmol-1 K-1)
Definition: PDSS_HKFT.h:254
double m_deltaG_formation_tr_pr
Input value of deltaG of Formation at Tr and Pr (cal gmol-1)
Definition: PDSS_HKFT.h:230
void setDeltaG0(double dg0)
Set Gibbs free energy of formation at Pr, Tr [J/kmol].
Definition: PDSS_HKFT.cpp:319
void initThermo() override
Initialization routine.
Definition: PDSS_HKFT.cpp:206
double m_a3
Input a3 coefficient (cal K gmol-1 bar-1)
Definition: PDSS_HKFT.h:263
double gstar(const double temp, const double pres, const int ifunc=0) const
Evaluate the Gstar value appearing in the HKFT formulation.
Definition: PDSS_HKFT.cpp:553
double m_charge_j
Charge of the ion.
Definition: PDSS_HKFT.h:290
PDSS_HKFT()
Default Constructor.
Definition: PDSS_HKFT.cpp:23
double entropy_R_ref() const override
Return the molar entropy divided by R at reference pressure.
Definition: PDSS_HKFT.cpp:173
double deltaG() const
Main routine that actually calculates the Gibbs free energy difference between the reference state at...
Definition: PDSS_HKFT.cpp:365
double enthalpy_RT_ref() const override
Return the molar enthalpy divided by RT at reference pressure.
Definition: PDSS_HKFT.cpp:164
void setS0(double s0)
Set entropy of formation at Pr, Tr [J/kmol/K].
Definition: PDSS_HKFT.cpp:323
double bg(const double temp, const int ifunc=0) const
Internal formula for the calculation of b_g()
Definition: PDSS_HKFT.cpp:452
void getParameters(AnyMap &eosNode) const override
Store the parameters needed to reconstruct a copy of this PDSS object.
Definition: PDSS_HKFT.cpp:343
double m_c2
Input c2 coefficient (cal K gmol-1)
Definition: PDSS_HKFT.h:272
double m_presR_bar
Reference pressure is 1 atm in units of bar= 1.0132.
Definition: PDSS_HKFT.h:284
void set_a(double *a)
Set "a" coefficients (array of 4 elements).
Definition: PDSS_HKFT.cpp:327
double intEnergy_mole() const override
Return the molar internal Energy in units of J kmol-1.
Definition: PDSS_HKFT.cpp:36
double m_domega_jdT_prtr
small value that is not quite zero
Definition: PDSS_HKFT.h:287
double entropy_mole() const override
Return the molar entropy in units of J kmol-1 K-1.
Definition: PDSS_HKFT.cpp:41
double m_omega_pr_tr
Input omega_pr_tr coefficient(cal gmol-1)
Definition: PDSS_HKFT.h:275
double g(const double temp, const double pres, const int ifunc=0) const
function g appearing in the formulation
Definition: PDSS_HKFT.cpp:500
void setState_TP(double temp, double pres) override
Set the internal temperature and pressure.
Definition: PDSS_HKFT.cpp:200
double m_Z_pr_tr
Z = -1 / relEpsilon at 298.15 and 1 bar.
Definition: PDSS_HKFT.h:281
void convertDGFormation()
Translate a Gibbs free energy of formation value to a NIST-based Chemical potential.
Definition: PDSS_HKFT.cpp:575
double cp_mole() const override
Return the molar const pressure heat capacity in units of J kmol-1 K-1.
Definition: PDSS_HKFT.cpp:51
double m_deltaH_formation_tr_pr
Input value of deltaH of Formation at Tr and Pr (cal gmol-1)
Definition: PDSS_HKFT.h:239
double m_a1
Input a1 coefficient (cal gmol-1 bar-1)
Definition: PDSS_HKFT.h:257
double ag(const double temp, const int ifunc=0) const
Internal formula for the calculation of a_g()
Definition: PDSS_HKFT.cpp:438
double density() const override
Return the standard state density at standard state.
Definition: PDSS_HKFT.cpp:150
double gibbs_mole() const override
Return the molar Gibbs free energy in units of J kmol-1.
Definition: PDSS_HKFT.cpp:46
double m_c1
Input c1 coefficient (cal gmol-1 K-1)
Definition: PDSS_HKFT.h:269
double molarVolume_ref() const override
Return the molar volume at reference pressure.
Definition: PDSS_HKFT.cpp:191
PDSS_Water * m_waterSS
Water standard state calculator.
Definition: PDSS_HKFT.h:213
double m_Mu0_tr_pr
Value of the Absolute Gibbs Free Energy NIST scale at T_r and P_r.
Definition: PDSS_HKFT.h:248
void set_c(double *c)
Set "c" coefficients (array of 2 elements).
Definition: PDSS_HKFT.cpp:334
double m_a2
Input a2 coefficient (cal gmol-1)
Definition: PDSS_HKFT.h:260
void setDeltaH0(double dh0)
Set enthalpy of formation at Pr, Tr [J/kmol].
Definition: PDSS_HKFT.cpp:315
double cp_R_ref() const override
Return the molar heat capacity divided by R at reference pressure.
Definition: PDSS_HKFT.cpp:182
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
double m_p0
Reference state pressure of the species.
Definition: PDSS.h:404
Unit conversion utility.
Definition: Units.h:169
This is a filter class for ThermoPhase that implements some preparatory steps for efficiently handlin...
const double OneAtm
One atmosphere [Pa].
Definition: ct_defs.h:96
Namespace for the Cantera kernel.
Definition: AnyMap.cpp:564