Cantera 2.6.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 https://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
17namespace 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{
29public:
31
32 virtual std::string type() const {
33 return "MaskellSolidsoln";
34 }
35
36 virtual Units standardConcentrationUnits() const { return Units(1.0); }
37 virtual void getActivityConcentrations(doublereal* c) const;
38 virtual doublereal standardConcentration(size_t k=0) const { return 1.0; }
39 virtual doublereal logStandardConc(size_t k=0) const { return 0.0; }
40
41 //! @name Molar Thermodynamic Properties of the Solution
42 //! @{
43
44 virtual doublereal enthalpy_mole() const;
45 virtual doublereal entropy_mole() const;
46
47 //! @}
48 /** @name Mechanical Equation of State Properties
49 *
50 * In this equation of state implementation, the density is a function only
51 * of the mole fractions. Therefore, it can't be an independent variable.
52 * Instead, the pressure is used as the independent variable. Functions
53 * which try to set the thermodynamic state by calling setDensity() will
54 * cause an exception to be thrown.
55 */
56 //! @{
57
58 /**
59 * Pressure. Units: Pa.
60 * For this incompressible system, we return the internally stored
61 * independent value of the pressure.
62 */
63 virtual doublereal pressure() const {
64 return m_Pcurrent;
65 }
66
67 /**
68 * Set the pressure at constant temperature. Units: Pa. This method sets a
69 * constant within the object. The mass density is not a function of
70 * pressure.
71 *
72 * @param p Input Pressure (Pa)
73 */
74 virtual void setPressure(doublereal p);
75
76 virtual void calcDensity();
77
78 //! @}
79 //! @name Chemical Potentials and Activities
80 //! @{
81
82 virtual void getActivityCoefficients(doublereal* ac) const;
83 virtual void getChemPotentials(doublereal* mu) const;
84 virtual void getChemPotentials_RT(doublereal* mu) const;
85
86 //! @}
87 //! @name Partial Molar Properties of the Solution
88 //! @{
89
90 virtual void getPartialMolarEnthalpies(doublereal* hbar) const;
91 virtual void getPartialMolarEntropies(doublereal* sbar) const;
92 virtual void getPartialMolarCp(doublereal* cpbar) const;
93 virtual void getPartialMolarVolumes(doublereal* vbar) const;
94 virtual void getPureGibbs(doublereal* gpure) const;
95 virtual void getStandardChemPotentials(doublereal* mu) const;
96
97 //! @}
98 //! @name Utility Functions
99 //! @{
100
101 virtual void initThermo();
102 virtual void getParameters(AnyMap& phaseNode) const;
103 virtual void initThermoXML(XML_Node& phaseNode, const std::string& id);
104
105 void set_h_mix(const doublereal hmix) { h_mixing = hmix; }
106
107 //! Set the product Species. Must be called after species have been added.
108 void setProductSpecies(const std::string& name);
109 //! @}
110
111private:
112 /**
113 * m_Pcurrent = The current pressure. Since the density isn't a function of
114 * pressure, but only of the mole fractions, we need to independently
115 * specify the pressure.
116 */
117 doublereal m_Pcurrent;
118
119 //! Value of the enthalpy change on mixing due to protons changing from type
120 //! B to type A configurations.
121 doublereal h_mixing;
122
123 //! Index of the species whose mole fraction defines the extent of reduction r
125 int reactant_species_index;
126
127 // Functions to calculate some of the pieces of the mixing terms.
128 doublereal s() const;
129 doublereal fm(const doublereal r) const;
130 doublereal p(const doublereal r) const;
131};
132}
133
134#endif
Header file for a derived class of ThermoPhase that handles variable pressure standard state methods ...
A map of string keys to values whose type can vary at runtime.
Definition: AnyMap.h:399
Class MaskellSolidSolnPhase represents a condensed phase non-ideal solution with 2 species following ...
doublereal h_mixing
Value of the enthalpy change on mixing due to protons changing from type B to type A configurations.
virtual void getParameters(AnyMap &phaseNode) const
Store the parameters of a ThermoPhase object such that an identical one could be reconstructed using ...
virtual void getActivityCoefficients(doublereal *ac) const
Get the array of non-dimensional molar-based activity coefficients at the current solution temperatur...
void setProductSpecies(const std::string &name)
Set the product Species. Must be called after species have been added.
virtual void getPartialMolarEnthalpies(doublereal *hbar) const
Returns an array of partial molar enthalpies for the species in the mixture.
virtual void getPartialMolarEntropies(doublereal *sbar) const
Returns an array of partial molar entropies of the species in the solution.
virtual void initThermoXML(XML_Node &phaseNode, const std::string &id)
Import and initialize a ThermoPhase object using an XML tree.
virtual doublereal enthalpy_mole() const
Molar enthalpy. Units: J/kmol.
virtual void getPartialMolarVolumes(doublereal *vbar) const
Return an array of partial molar volumes for the species in the mixture.
virtual void getActivityConcentrations(doublereal *c) const
This method returns an array of generalized concentrations.
virtual Units standardConcentrationUnits() const
Returns the units of the "standard concentration" for this phase.
virtual doublereal logStandardConc(size_t k=0) const
Natural logarithm of the standard concentration of the kth species.
virtual void getPartialMolarCp(doublereal *cpbar) const
Return an array of partial molar heat capacities for the species in the mixture.
virtual void setPressure(doublereal p)
Set the pressure at constant temperature.
virtual doublereal entropy_mole() const
Molar entropy. Units: J/kmol/K.
int product_species_index
Index of the species whose mole fraction defines the extent of reduction r.
virtual doublereal standardConcentration(size_t k=0) const
Return the standard concentration for the kth species.
virtual std::string type() const
String indicating the thermodynamic model implemented.
doublereal m_Pcurrent
m_Pcurrent = The current pressure.
virtual doublereal pressure() const
Pressure.
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 getChemPotentials_RT(doublereal *mu) const
Get the array of non-dimensional species chemical potentials.
virtual void getChemPotentials(doublereal *mu) const
Get the species chemical potentials. Units: J/kmol.
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.
virtual void calcDensity()
Calculate the density of the mixture using the partial molar volumes and mole fractions as input.
std::string name() const
Return the name of the phase.
Definition: Phase.cpp:70
A representation of the units associated with a dimensional quantity.
Definition: Units.h:30
This is a filter class for ThermoPhase that implements some preparatory steps for efficiently handlin...
Class XML_Node is a tree-based representation of the contents of an XML file.
Definition: xml.h:103
Namespace for the Cantera kernel.
Definition: AnyMap.h:29