Cantera  2.3.0
MaskellSolidSolnPhase.h
Go to the documentation of this file.
1 /**
2  * @file MaskellSolidSolnPhase.h Header file for a solid solution model
3  * following Maskell, Shaw, and Tye. Electrochimica Acta 1982
4  *
5  * This class inherits from the Cantera class ThermoPhase and implements a
6  * non-ideal solid solution model with incompressible thermodynamics.
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_MASKELLSOLIDSOLNPHASE_H
13 #define CT_MASKELLSOLIDSOLNPHASE_H
14 
15 #include "VPStandardStateTP.h"
16 
17 namespace Cantera
18 {
19 /**
20  * Class MaskellSolidSolnPhase represents a condensed phase non-ideal solution
21  * with 2 species following the thermodynamic model described in Maskell, Shaw,
22  * and Tye, Manganese Dioxide Electrode -- IX, Electrochimica Acta 28(2) pp
23  * 231-235, 1983.
24  *
25  * @ingroup thermoprops
26  */
28 {
29 public:
31 
34  virtual ThermoPhase* duplMyselfAsThermoPhase() const;
35 
36  virtual std::string type() const {
37  return "MaskellSolidsoln";
38  }
39 
40  virtual void getActivityConcentrations(doublereal* c) const;
41  virtual doublereal standardConcentration(size_t k=0) const { return 1.0; }
42  virtual doublereal logStandardConc(size_t k=0) const { return 0.0; }
43 
44  //! @name Molar Thermodynamic Properties of the Solution
45  //! @{
46 
47  virtual doublereal enthalpy_mole() const;
48  virtual doublereal entropy_mole() const;
49 
50  //@}
51  /** @name Mechanical Equation of State Properties
52  *
53  * In this equation of state implementation, the density is a function only
54  * of the mole fractions. Therefore, it can't be an independent variable.
55  * Instead, the pressure is used as the independent variable. Functions
56  * which try to set the thermodynamic state by calling setDensity() may
57  * cause an exception to be thrown.
58  */
59  //@{
60 
61  /**
62  * Pressure. Units: Pa.
63  * For this incompressible system, we return the internally stored
64  * independent value of the pressure.
65  */
66  virtual doublereal pressure() const {
67  return m_Pcurrent;
68  }
69 
70  /**
71  * Set the pressure at constant temperature. Units: Pa. This method sets a
72  * constant within the object. The mass density is not a function of
73  * pressure.
74  *
75  * @param p Input Pressure (Pa)
76  */
77  virtual void setPressure(doublereal p);
78 
79  /**
80  * Overridden setDensity() function is necessary because the density is not
81  * an independent variable.
82  *
83  * This function will now throw an error condition
84  *
85  * @param rho Input density
86  */
87  virtual void setDensity(const doublereal rho);
88 
89  virtual void calcDensity();
90 
91  /**
92  * Overridden setMolarDensity() function is necessary because the density
93  * is not an independent variable.
94  *
95  * This function will now throw an error condition.
96  *
97  * @param rho Input Density
98  */
99  virtual void setMolarDensity(const doublereal rho);
100 
101  //@}
102 
103  /**
104  * @name Chemical Potentials and Activities
105  * @{
106  */
107 
108  virtual void getActivityCoefficients(doublereal* ac) const;
109  virtual void getChemPotentials(doublereal* mu) const;
110  virtual void getChemPotentials_RT(doublereal* mu) const;
111 
112  //@}
113  /// @name Partial Molar Properties of the Solution
114  //@{
115 
116  virtual void getPartialMolarEnthalpies(doublereal* hbar) const;
117  virtual void getPartialMolarEntropies(doublereal* sbar) const;
118  virtual void getPartialMolarCp(doublereal* cpbar) const;
119  virtual void getPartialMolarVolumes(doublereal* vbar) const;
120  virtual void getPureGibbs(doublereal* gpure) const;
121  virtual void getStandardChemPotentials(doublereal* mu) const;
122 
123  //@}
124  /// @name Utility Functions
125  //@{
126 
127  virtual void initThermoXML(XML_Node& phaseNode, const std::string& id);
128 
129  void set_h_mix(const doublereal hmix) { h_mixing = hmix; }
130  //@}
131 
132 private:
133  /**
134  * m_Pcurrent = The current pressure. Since the density isn't a function of
135  * pressure, but only of the mole fractions, we need to independently
136  * specify the pressure.
137  */
138  doublereal m_Pcurrent;
139 
140  /**
141  * Function to call through to m_spthermo->update and fill m_h0_RT,
142  * m_cp0_R, m_g0_RT, m_s0_R.
143  */
144  void _updateThermo() const;
145 
146  //! Vector containing the species reference enthalpies at T = m_tlast
148 
149  //! Vector containing the species reference constant pressure heat
150  //! capacities at T = m_tlast
152 
153  //! Vector containing the species reference Gibbs functions at T = m_tlast
155 
156  //! Vector containing the species reference entropies at T = m_tlast
157  mutable vector_fp m_s0_R;
158 
159  //! Value of the enthalpy change on mixing due to protons changing from type
160  //! B to type A configurations.
161  doublereal h_mixing;
162 
163  //! Index of the species whose mole fraction defines the extent of reduction r
165  int reactant_species_index;
166 
167  // Functions to calculate some of the pieces of the mixing terms.
168  doublereal s() const;
169  doublereal fm(const doublereal r) const;
170  doublereal p(const doublereal r) const;
171 };
172 }
173 
174 #endif
virtual void getActivityCoefficients(doublereal *ac) const
Get the array of non-dimensional molar-based activity coefficients at the current solution temperatur...
vector_fp m_cp0_R
Vector containing the species reference constant pressure heat capacities at T = m_tlast.
virtual void getChemPotentials(doublereal *mu) const
Get the species chemical potentials. Units: J/kmol.
vector_fp m_h0_RT
Vector containing the species reference enthalpies at T = m_tlast.
virtual void setMolarDensity(const doublereal rho)
Overridden setMolarDensity() function is necessary because the density is not an independent variable...
virtual std::string type() const
String indicating the thermodynamic model implemented.
Class XML_Node is a tree-based representation of the contents of an XML file.
Definition: xml.h:97
virtual doublereal entropy_mole() const
Molar entropy. Units: J/kmol/K.
virtual doublereal standardConcentration(size_t k=0) const
Return the standard concentration for the kth species.
virtual void getPartialMolarEntropies(doublereal *sbar) const
Returns an array of partial molar entropies of the species in the solution.
doublereal h_mixing
Value of the enthalpy change on mixing due to protons changing from type B to type A configurations...
Base class for a phase with thermodynamic properties.
Definition: ThermoPhase.h:93
virtual void initThermoXML(XML_Node &phaseNode, const std::string &id)
Import and initialize a ThermoPhase object using an XML tree.
virtual void getPureGibbs(doublereal *gpure) const
Get the Gibbs functions for the standard state of the species at the current T and P of the solution...
int product_species_index
Index of the species whose mole fraction defines the extent of reduction r.
virtual void getPartialMolarEnthalpies(doublereal *hbar) const
Returns an array of partial molar enthalpies for the species in the mixture.
virtual void calcDensity()
Calculate the density of the mixture using the partial molar volumes and mole fractions as input...
virtual void getStandardChemPotentials(doublereal *mu) const
Get the array of chemical potentials at unit activity for the species at their standard states at the...
virtual void setDensity(const doublereal rho)
Overridden setDensity() function is necessary because the density is not an independent variable...
This is a filter class for ThermoPhase that implements some prepatory steps for efficiently handling ...
virtual void getPartialMolarCp(doublereal *cpbar) const
Return an array of partial molar heat capacities for the species in the mixture.
virtual doublereal pressure() const
Pressure.
vector_fp m_s0_R
Vector containing the species reference entropies at T = m_tlast.
virtual void getChemPotentials_RT(doublereal *mu) const
Get the array of non-dimensional species chemical potentials.
doublereal m_Pcurrent
m_Pcurrent = The current pressure.
Header file for a derived class of ThermoPhase that handles variable pressure standard state methods ...
virtual doublereal logStandardConc(size_t k=0) const
Natural logarithm of the standard concentration of the kth species.
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
void _updateThermo() const
Function to call through to m_spthermo->update and fill m_h0_RT, m_cp0_R, m_g0_RT, m_s0_R.
virtual doublereal enthalpy_mole() const
Molar enthalpy. Units: J/kmol.
virtual void getActivityConcentrations(doublereal *c) const
This method returns an array of generalized concentrations.
Class MaskellSolidSolnPhase represents a condensed phase non-ideal solution with 2 species following ...
virtual void getPartialMolarVolumes(doublereal *vbar) const
Return an array of partial molar volumes for the species in the mixture.
virtual void setPressure(doublereal p)
Set the pressure at constant temperature.
Namespace for the Cantera kernel.
Definition: application.cpp:29
virtual ThermoPhase * duplMyselfAsThermoPhase() const
Duplication routine for objects which inherit from ThermoPhase.
vector_fp m_g0_RT
Vector containing the species reference Gibbs functions at T = m_tlast.