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: