diff --git a/Cantera/src/thermo/PhaseCombo_Interaction.h b/Cantera/src/thermo/PhaseCombo_Interaction.h index c5dacb318..56603aeae 100644 --- a/Cantera/src/thermo/PhaseCombo_Interaction.h +++ b/Cantera/src/thermo/PhaseCombo_Interaction.h @@ -1,19 +1,26 @@ /** - * @file + * @file PhaseCombo_Interaction.h + * Header for intermediate ThermoPhase object for phases which + * employ the Margules gibbs free energy formulation and eliminates the ideal mixing term. + * (see \ref thermoprops + * and class \link Cantera::PhaseCombo_Interaction PhaseCombo_Interaction\endlink). */ /* - * Copywrite (2006) Sandia Corporation. Under the terms of + * Copywrite (2011) Sandia Corporation. Under the terms of * Contract DE-AC04-94AL85000 with Sandia Corporation, the * U.S. Government retains certain rights in this software. */ + /* - * $Id: MargulesVPSSTP.h 641 2010-11-12 21:37:41Z hkmoffa $ + * $Author: hkmoffa $ + * $Date: 2009-11-09 16:36:49 -0700 (Mon, 09 Nov 2009) $ + * $Revision: 255 $ */ #ifndef CT_LIFES_X_ONEPHASE_VPSSTP_H #define CT_LIFES_X_ONEPHASE_VPSSTP_H -#include "PseudoBinaryVPSSTP.h" + #include "GibbsExcessVPSSTP.h" namespace Cantera { @@ -23,9 +30,321 @@ namespace Cantera { */ - //! MargulesVPSSTP is a derived class of GibbsExcessVPSSTP that employs - //! the Margules approximation for the excess gibbs free energy + //! PhaseCombo_Interaction is a derived class of GibbsExcessVPSSTP that employs + //! the Margules approximation for the excess gibbs free energy while eliminating + //! the entropy of mixing term. + /*! + * + * %PhaseCombo_Interaction derives from class GibbsExcessVPSSTP which is derived from VPStandardStateTP, + * and overloads the virtual methods defined there with ones that + * use expressions appropriate for the Margules Excess gibbs free energy approximation. + * The reader should refer to the MargulesVPSSTP class for information on that class. + * This class in addition adds a term to the activity coefficient that eliminates the + * ideal solution mixing term within the chemical potential. This is a very radical thing + * to do, but it is supported by experimental evidence under some conditions. + * + * The independent unknowns are pressure, temperature, and mass fraction. + * + * Several concepts are introduced. The first concept is that there are temporary + * variables for holding the species standard state values of Cp, H, S, G, and V at the + * last temperature and pressure called. These functions are not recalculated + * if a new call is made using the previous temperature and pressure. Currently, + * these variables and the calculation method are handled by the VPSSMgr class, + * for which VPStandardStateTP owns a pointer to. + * + * To support the above functionality, pressure and temperature variables, + * m_plast_ss and m_tlast_ss, are kept which store the last pressure and temperature + * used in the evaluation of standard state properties. + * + * This class is introduced to represent specific conditions observed in thermal batteries. + * HOwever, it may be physically motivated to represent conditions where there may + * be a mixture of componds that are not "mixed" at the molecular level. Therefore, there + * is no mixing term. + * + * The lack of a mixing term has profound effects. First, the mole fraction of a species + * can now be identically zero due to thermodynamic considerations. The phase behaves more + * like a series of phases. That's why we named it PhaseCombo. + * + * + * + *
+ *

Specification of Species Standard %State Properties

+ *
+ * + * All species are defined to have standard states that depend upon both + * the temperature and the pressure. The Margules approximation assumes + * symmetric standard states, where all of the standard state assume + * that the species are in pure component states at the temperatue + * and pressure of the solution. I don't think it prevents, however, + * some species from being dilute in the solution. + * + * + *
+ *

Specification of Solution Thermodynamic Properties

+ *
+ * + * The molar excess Gibbs free energy is given by the following formula which is a sum over interactions i. + * Each of the interactions are binary interactions involving two of the species in the phase, denoted, Ai + * and Bi. + * This is the generalization of the Margules formulation for a phase + * that has more than 2 species. The second term in the excess gibbs free energy is a negation of the + * ideal solution's mixing term. + * + * \f[ + * G^E = \sum_i \left( H_{Ei} - T S_{Ei} \right) - \sum_i \left( n_i R T \ln{X_i} \right) + * \f] + * \f[ + * H^E_i = n X_{Ai} X_{Bi} \left( h_{o,i} + h_{1,i} X_{Bi} \right) + * \f] + * \f[ + * S^E_i = n X_{Ai} X_{Bi} \left( s_{o,i} + s_{1,i} X_{Bi} \right) + * \f] + * + * where n is the total moles in the solution. + * + * The activity of a species defined in the phase is given by an excess Gibbs free energy formulation. + * + * \f[ + * a_k = \gamma_k X_k + * \f] + * + * where + * + * \f[ + * R T \ln( \gamma_k )= \frac{d(n G^E)}{d(n_k)}\Bigg|_{n_i} + * \f] + * + * Taking the derivatives results in the following expression + * + * \f[ + * R T \ln( \gamma_k )= \sum_i \left( \left( \delta_{Ai,k} X_{Bi} + \delta_{Bi,k} X_{Ai} - X_{Ai} X_{Bi} \right) + * \left( g^E_{o,i} + g^E_{1,i} X_{Bi} \right) + + * \left( \delta_{Bi,k} - X_{Bi} \right) X_{Ai} X_{Bi} g^E_{1,i} \right) - RT \ln{X_k} + * \f] + * + * where + * \f$ g^E_{o,i} = h_{o,i} - T s_{o,i} \f$ and \f$ g^E_{1,i} = h_{1,i} - T s_{1,i} \f$ + * and where \f$ X_k \f$ is the mole fraction of species k. + * + * This object inherits from the class VPStandardStateTP. Therefore, the specification and + * calculation of all standard state and reference state values are handled at that level. Various functional + * forms for the standard state are permissible. + * The chemical potential for species k is equal to + * + * \f[ + * \mu_k(T,P) = \mu^o_k(T, P) + R T \ln(\gamma_k X_k) + * \f] + * + * The partial molar entropy for species k is given by the following relation, + * + * \f[ + * \tilde{s}_k(T,P) = s^o_k(T,P) - R \ln( \gamma_k X_k ) + * - R T \frac{d \ln(\gamma_k) }{dT} + * \f] + * + * The partial molar enthalpy for species k is given by + * + * \f[ + * \tilde{h}_k(T,P) = h^o_k(T,P) - R T^2 \frac{d \ln(\gamma_k)}{dT} + * \f] + * + * The partial molar volume for species k is + * + * \f[ + * \tilde V_k(T,P) = V^o_k(T,P) + R T \frac{d \ln(\gamma_k) }{dP} + * \f] + * + * The partial molar Heat Capacity for species k is + * + * \f[ + * \tilde{C}_{p,k}(T,P) = C^o_{p,k}(T,P) - 2 R T \frac{d \ln( \gamma_k )}{dT} + * - R T^2 \frac{d^2 \ln(\gamma_k) }{{dT}^2} + * \f] + * + * + *
+ *

%Application within %Kinetics Managers

+ *
+ * + * \f$ C^a_k\f$ are defined such that \f$ a_k = C^a_k / + * C^s_k, \f$ where \f$ C^s_k \f$ is a standard concentration + * defined below and \f$ a_k \f$ are activities used in the + * thermodynamic functions. These activity (or generalized) concentrations are used + * by kinetics manager classes to compute the forward and reverse rates of elementary reactions. + * The activity concentration,\f$ C^a_k \f$,is given by the following expression. + * + * \f[ + * C^a_k = C^s_k X_k = \frac{P}{R T} X_k + * \f] + * + * The standard concentration for species k is independent of k and equal to + * + * \f[ + * C^s_k = C^s = \frac{P}{R T} + * \f] + * + * For example, a bulk-phase binary gas reaction between species j and k, producing + * a new gas species l would have the + * following equation for its rate of progress variable, \f$ R^1 \f$, which has + * units of kmol m-3 s-1. + * + * \f[ + * R^1 = k^1 C_j^a C_k^a = k^1 (C^s a_j) (C^s a_k) + * \f] + * + * where + * + * \f[ + * C_j^a = C^s a_j \mbox{\quad and \quad} C_k^a = C^s a_k + * \f] + * + * \f$ C_j^a \f$ is the activity concentration of species j, and + * \f$ C_k^a \f$ is the activity concentration of species k. \f$ C^s \f$ + * is the standard concentration. \f$ a_j \f$ is + * the activity of species j which is equal to the mole fraction of j. + * + * The reverse rate constant can then be obtained from the law of microscopic reversibility + * and the equilibrium expression for the system. + * + * \f[ + * \frac{a_j a_k}{ a_l} = K_a^{o,1} = \exp(\frac{\mu^o_l - \mu^o_j - \mu^o_k}{R T} ) + * \f] + * + * \f$ K_a^{o,1} \f$ is the dimensionless form of the equilibrium constant, associated with + * the pressure dependent standard states \f$ \mu^o_l(T,P) \f$ and their associated activities, + * \f$ a_l \f$, repeated here: + * + * \f[ + * \mu_l(T,P) = \mu^o_l(T, P) + R T \log(a_l) + * \f] + * + * We can switch over to expressing the equilibrium constant in terms of the reference + * state chemical potentials + * + * \f[ + * K_a^{o,1} = \exp(\frac{\mu^{ref}_l - \mu^{ref}_j - \mu^{ref}_k}{R T} ) * \frac{P_{ref}}{P} + * \f] + * + * The concentration equilibrium constant, \f$ K_c \f$, may be obtained by changing over + * to activity concentrations. When this is done: + * + * \f[ + * \frac{C^a_j C^a_k}{ C^a_l} = C^o K_a^{o,1} = K_c^1 = + * \exp(\frac{\mu^{ref}_l - \mu^{ref}_j - \mu^{ref}_k}{R T} ) * \frac{P_{ref}}{RT} + * \f] + * + * %Kinetics managers will calculate the concentration equilibrium constant, \f$ K_c \f$, + * using the second and third part of the above expression as a definition for the concentration + * equilibrium constant. + * + * For completeness, the pressure equilibrium constant may be obtained as well + * + * \f[ + * \frac{P_j P_k}{ P_l P_{ref}} = K_p^1 = \exp(\frac{\mu^{ref}_l - \mu^{ref}_j - \mu^{ref}_k}{R T} ) + * \f] + * + * \f$ K_p \f$ is the simplest form of the equilibrium constant for ideal gases. However, it isn't + * necessarily the simplest form of the equilibrium constant for other types of phases; \f$ K_c \f$ is + * used instead because it is completely general. + * + * The reverse rate of progress may be written down as + * \f[ + * R^{-1} = k^{-1} C_l^a = k^{-1} (C^o a_l) + * \f] + * + * where we can use the concept of microscopic reversibility to + * write the reverse rate constant in terms of the + * forward reate constant and the concentration equilibrium + * constant, \f$ K_c \f$. + * + * \f[ + * k^{-1} = k^1 K^1_c + * \f] + * + * \f$k^{-1} \f$ has units of s-1. + * + * + *
+ *

Instantiation of the Class

+ *
+ * + * + * The constructor for this phase is located in the default ThermoFactory + * for %Cantera. A new %PhaseCombo_Interaction object may be created by the following code + * snippet: + * + * @code + * XML_Node *xc = get_XML_File("LiFeS_X_combo.xml"); + * XML_Node * const xs = xc->findNameID("phase", "LiFeS_X"); + * ThermoPhase *l_tp = newPhase(*xs); + * PhaseCombo_Interaction *LiFeS_X_solid = dynamic_cast (l_tp); + * @endcode + * + * or by the following code + * + * @code + * std::string id = "LiFeS_X"; + * Cantera::ThermoPhase *LiFeS_X_Phase = Cantera::newPhase("LiFeS_X_combo.xml", id); + * PhaseCombo_Interaction *LiFeS_X_solid = dynamic_cast (l_tp); + * @endcode + * + * + * or by the following constructor: + * + * @code + * XML_Node *xc = get_XML_File("LiFeS_X_combo.xml"); + * XML_Node * const xs = xc->findNameID("phase", "LiFeS_X"); + * PhaseCombo_Interaction *LiFeS_X_solid = new PhaseCombo_Interaction(*xs); + * @endcode + * + * + *
+ *

XML Example

+ *
+ * An example of an XML Element named phase setting up a PhaseCombo_Interaction + * object named LiFeS_X is given below. + * + * + * @verbatim + + + + Li Fe S + + + LiTFe1S2(S) Li2Fe1S2(S) + + + + + + 84.67069219, -269.1959421 + + + 100.7511565, -361.4222659 + + + 0, 0 + + + 0, 0 + + + + + + + + + @endverbatim + * + * The model attribute "PhaseCombo_Interaction" of the thermo XML element identifies the phase as + * being of the type handled by the PhaseCombo_Interaction object. + * + * @ingroup thermoprops + * + */ class PhaseCombo_Interaction : public GibbsExcessVPSSTP { public: