diff --git a/Cantera/src/thermo/HMWSoln.cpp b/Cantera/src/thermo/HMWSoln.cpp
index 073eeaddf..8e30b0ac5 100644
--- a/Cantera/src/thermo/HMWSoln.cpp
+++ b/Cantera/src/thermo/HMWSoln.cpp
@@ -917,10 +917,14 @@ namespace Cantera {
* reaction rate expressions within the phase.
*/
void HMWSoln::getActivityConcentrations(doublereal* c) const {
- double c_solvent = standardConcentration();
+ double cs_solvent = standardConcentration();
getActivities(c);
- for (int k = 0; k < m_kk; k++) {
- c[k] *= c_solvent;
+ c[0] *= cs_solvent;
+ if (m_kk > 1) {
+ double cs_solute = standardConcentration(1);
+ for (int k = 1; k < m_kk; k++) {
+ c[k] *= cs_solute;
+ }
}
}
diff --git a/Cantera/src/thermo/HMWSoln.h b/Cantera/src/thermo/HMWSoln.h
index 40cce6f86..f174a9469 100644
--- a/Cantera/src/thermo/HMWSoln.h
+++ b/Cantera/src/thermo/HMWSoln.h
@@ -1027,10 +1027,12 @@ namespace Cantera {
* this phase equal to the default concentration of the solvent at the system temperature
* and pressure multiplied by Mnaught (kg solvent / gmol solvent). The solvent
* standard concentration is just equal to its standard state concentration.
+ *
+ *
* This means that the
- * kinetics operator essentially works on an generalized concentration basis (kg / m3),
+ * kinetics operator essentially works on an generalized concentration basis (kmol / m3),
* with units for the kinetic rate constant specified
- * as if all reactants (solvent or solute) are on a concentration basis (kg /m3).
+ * as if all reactants (solvent or solute) are on a concentration basis (kmol /m3).
* The concentration will be modified by the activity coefficients.
*
* For example, a bulk-phase binary reaction between liquid solute species
@@ -1039,39 +1041,50 @@ namespace Cantera {
* 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^o_o \tilde{M}_o a_j) (C^o_o \tilde{M}_o a_k)
+ * \f]
+ *
+ * where
*
* \f[
- * R^1 = k^1 C_j^a C_k^a = k^1 (C_o \tilde{M}_o a_j) (C_o \tilde{M}_o a_k)
- * \f]
- * where
- * \f[
- * C_j^a = C_o \tilde{M}_o a_j \quad and \quad C_k^a = C_o \tilde{M}_o a_k
+ * C_j^a = C^o_o \tilde{M}_o a_j \quad and \quad C_k^a = C^o_o \tilde{M}_o 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_o \f$
- * is the concentration of water at 298 K and 1 atm. \f$ \tilde{M}_o \f$ is
+ * \f$ C_k^a \f$ is the activity concentration of species k. \f$ C^o_o \f$
+ * is the concentration of water at 298 K and 1 atm. \f$ \tilde{M}_o \f$
* has units of kg solvent per gmol solvent and is equal to
*
* \f[
* \tilde{M}_o = \frac{M_o}{1000}
* \f]
*
- *
* \f$ a_j \f$ is
* the activity of species j at the current temperature and pressure
* and concentration of the liquid phase is given by the molality based
* activity coefficient multiplied by the molality of the jth species.
*
* \f[
- * a_j = \gamma_j^\triangle m_j
+ * a_j = \gamma_j^\triangle m_j = \gamma_j^\triangle \frac{n_j}{\tilde{M}_o n_o}
* \f]
*
* \f$k^1 \f$ has units of m3 kmol-1 s-1.
*
+ * Therefore the generalized activity concentration of a solute species has the following form
+ *
+ * \f[
+ * C_j^a = C^o_o \frac{\gamma_j^\triangle n_j}{n_o}
+ * \f]
+ *
+ * The generalized activity concentration of the solvent has the same units, but its a simpler form
+ *
+ * \f[
+ * C_o^a = C^o_o a_o
+ * \f]
*
* The reverse rate constant can then be obtained from the law of microscopic reversibility
- * and the equilibrium expression for the system.
+ * and the equilibrium expression for the system.
*
* \f[
* \frac{a_j a_k}{ a_l} = K^{o,1} = \exp(\frac{\mu^o_l - \mu^o_j - \mu^o_k}{R T} )
@@ -1587,18 +1600,31 @@ namespace Cantera {
* @{
*/
- /**
- * This method returns an array of generalized concentrations
- * \f$ C_k\f$ that are defined such that
- * \f$ a_k = C_k / C^0_k, \f$ where \f$ C^0_k \f$
+
+ //! This method returns an array of generalized activity concentrations
+ /*!
+ * The generalized activity concentrations, \f$ C_k^a\f$, are defined such that
+ * \f$ a_k = C^a_k / C^0_k, \f$ where \f$ C^0_k \f$
* is a standard concentration
* defined below. These generalized concentrations are used
* by kinetics manager classes to compute the forward and
* reverse rates of elementary reactions.
*
+ * The generalized activity concentration of a solute species has the following form
+ *
+ * \f[
+ * C_j^a = C^o_o \frac{\gamma_j^\triangle n_j}{n_o}
+ * \f]
+ *
+ * The generalized activity concentration of the solvent has the same units, but its a simpler form
+ *
+ * \f[
+ * C_o^a = C^o_o a_o
+ * \f]
+ *
+ *
* @param c Array of generalized concentrations. The
- * units depend upon the implementation of the
- * reaction rate expressions within the phase.
+ * units are kmol m-3 for both the solvent and the solute species
*/
virtual void getActivityConcentrations(doublereal* c) const;
@@ -1607,12 +1633,73 @@ namespace Cantera {
* The standard concentration \f$ C^0_k \f$ used to normalize
* the activity (i.e., generalized) concentration for use
*
- * For the time being, we will use the concentration of pure
- * solvent at the temperature and pressure of the solution
- * for the the standard concentration of all species.
- * This has the effect of making mass-action reaction rates
- * based on the molality of species proportional to the
- * molality of the species.
+ * We have set the standard concentration for all solute species in
+ * this phase equal to the default concentration of the solvent at the system temperature
+ * and pressure multiplied by Mnaught (kg solvent / gmol solvent). The solvent
+ * standard concentration is just equal to its standard state concentration.
+ *
+ * \f[
+ * C_j^0 = C^o_o \tilde{M}_o \quad and C_o^0 = C^o_o
+ * \f]
+ *
+ * The consequence of this is that the standard concentrations have unequal units
+ * between the solvent and the solute. However, both the solvent and the solute
+ * activity concentrations will have the same units of kmol kg-3.
+ *
+ * This means that the
+ * kinetics operator essentially works on an generalized concentration basis (kmol / m3),
+ * with units for the kinetic rate constant specified
+ * as if all reactants (solvent or solute) are on a concentration basis (kmol /m3).
+ * The concentration will be modified by the activity coefficients.
+ *
+ * For example, a bulk-phase binary reaction between liquid solute species
+ * j and k, producing
+ * a new liquid solute 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^o_o \tilde{M}_o a_j) (C^o_o \tilde{M}_o a_k)
+ * \f]
+ *
+ * where
+ *
+ * \f[
+ * C_j^a = C^o_o \tilde{M}_o a_j \quad and \quad C_k^a = C^o_o \tilde{M}_o 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^o_o \f$
+ * is the concentration of water at 298 K and 1 atm. \f$ \tilde{M}_o \f$
+ * has units of kg solvent per gmol solvent and is equal to
+ *
+ * \f[
+ * \tilde{M}_o = \frac{M_o}{1000}
+ * \f]
+ *
+ * \f$ a_j \f$ is
+ * the activity of species j at the current temperature and pressure
+ * and concentration of the liquid phase is given by the molality based
+ * activity coefficient multiplied by the molality of the jth species.
+ *
+ * \f[
+ * a_j = \gamma_j^\triangle m_j = \gamma_j^\triangle \frac{n_j}{\tilde{M}_o n_o}
+ * \f]
+ *
+ * \f$k^1 \f$ has units of m3 kmol-1 s-1.
+ *
+ * Therefore the generalized activity concentration of a solute species has the following form
+ *
+ * \f[
+ * C_j^a = C^o_o \frac{\gamma_j^\triangle n_j}{n_o}
+ * \f]
+ *
+ * The generalized activity concentration of the solvent has the same units, but its a simpler form
+ *
+ * \f[
+ * C_o^a = C^o_o a_o
+ * \f]
+ *
*
* @param k Optional parameter indicating the species. The default
* is to assume this refers to species 0.