diff --git a/Cantera/src/thermo/StoichSubstance.cpp b/Cantera/src/thermo/StoichSubstance.cpp
index d745cf28d..41d69a420 100644
--- a/Cantera/src/thermo/StoichSubstance.cpp
+++ b/Cantera/src/thermo/StoichSubstance.cpp
@@ -1,6 +1,14 @@
/**
*
* @file StoichSubstance.cpp
+ * This file contains the class definitions for the StoichSubstance
+ * ThermoPhase class.
+ */
+/*
+ * $Date$
+ * $Revision$
+ *
+ * Copyright 2001 California Institute of Technology
*
*/
@@ -88,56 +96,161 @@ namespace Cantera {
StoichSubstance::~StoichSubstance() {
}
- void StoichSubstance::initThermo() {
- m_kk = nSpecies();
- if (m_kk > 1) {
- throw CanteraError("initThermo",
- "stoichiometric substances may only contain one species.");
- }
- doublereal tmin = m_spthermo->minTemp();
- doublereal tmax = m_spthermo->maxTemp();
- if (tmin > 0.0) m_tmin = tmin;
- if (tmax > 0.0) m_tmax = tmax;
- m_p0 = refPressure();
+ void StoichSubstance::initThermo() {
+ m_kk = nSpecies();
+ if (m_kk > 1) {
+ throw CanteraError("initThermo",
+ "stoichiometric substances may only contain one species.");
+ }
+ doublereal tmin = m_spthermo->minTemp();
+ doublereal tmax = m_spthermo->maxTemp();
+ if (tmin > 0.0) m_tmin = tmin;
+ if (tmax > 0.0) m_tmax = tmax;
+ m_p0 = refPressure();
- int leng = m_kk;
- m_h0_RT.resize(leng);
- m_cp0_R.resize(leng);
- m_s0_R.resize(leng);
+ int leng = m_kk;
+ m_h0_RT.resize(leng);
+ m_cp0_R.resize(leng);
+ m_s0_R.resize(leng);
+
+ // Put the object on a valid temperature point.
+ double tnow = 300.;
+ if (tnow > tmin && tnow < tmax) {
+
+ } else {
+ tnow = 0.1 * (9 * tmin + tmax);
}
+ setState_TP(tnow, m_p0);
+ }
- void StoichSubstance::_updateThermo() const {
- doublereal tnow = temperature();
- if (m_tlast != tnow) {
- m_spthermo->update(tnow, &m_cp0_R[0], &m_h0_RT[0],
- &m_s0_R[0]);
- m_tlast = tnow;
- }
+ void StoichSubstance::_updateThermo() const {
+ doublereal tnow = temperature();
+ if (m_tlast != tnow) {
+ m_spthermo->update(tnow, &m_cp0_R[0], &m_h0_RT[0],
+ &m_s0_R[0]);
+ m_tlast = tnow;
}
+ }
- void StoichSubstance::
- getUnitsStandardConc(double *uA, int k, int sizeUA) const {
- for (int i = 0; i < sizeUA; i++) {
- uA[i] = 0.0;
- }
- }
+ doublereal StoichSubstance::pressure() const {
+ return m_press;
+ }
- void StoichSubstance::setParameters(int n, double * c) {
- double rho = c[0];
- setDensity(rho);
- }
+ void StoichSubstance::setPressure(doublereal p) {
+ m_press = p;
+ }
- void StoichSubstance::getParameters(int &n, double * const c) const {
- double rho = density();
- c[0] = rho;
- }
+ void StoichSubstance::getActivityConcentrations(doublereal* c) const {
+ c[0] = 1.0;
+ }
- void StoichSubstance::setParametersFromXML(const XML_Node& eosdata) {
- eosdata._require("model","StoichSubstance");
- doublereal rho = getFloat(eosdata, "density", "toSI");
- setDensity(rho);
+ doublereal StoichSubstance::standardConcentration(int k) const {
+ return 1.0;
+ }
+
+ doublereal StoichSubstance::logStandardConc(int k) const {
+ return 0.0;
+ }
+
+ void StoichSubstance::
+ getUnitsStandardConc(double *uA, int k, int sizeUA) const {
+ for (int i = 0; i < sizeUA; i++) {
+ uA[i] = 0.0;
}
+ }
+
+ /*
+ *
+ */
+
+ void StoichSubstance::getElectrochemPotentials(doublereal* mu) const {
+ getChemPotentials(mu);
+ }
+
+ void StoichSubstance::getPartialMolarEnthalpies(doublereal* hbar) const {
+ hbar[0] = enthalpy_mole();
+ }
+
+ void StoichSubstance::getPartialMolarEntropies(doublereal* sbar) const {
+ sbar[0] = entropy_mole();
+ }
+
+ void StoichSubstance::getPartialMolarVolumes(doublereal* vbar) const {
+ vbar[0] = 1.0 / molarDensity();
+ }
+
+ /*
+ *
+ */
+
+ void StoichSubstance::getEnthalpy_RT(doublereal* hrt) const {
+ hrt[0] = enthalpy_mole() / (GasConstant * temperature());
+ }
+
+ void StoichSubstance::getEntropy_R(doublereal* sr) const {
+ sr[0] = entropy_mole() / GasConstant;
+ }
+
+ void StoichSubstance::getGibbs_RT(doublereal* grt) const {
+ grt[0] = gibbs_mole() / (GasConstant * temperature());
+ }
+
+ void StoichSubstance::getPureGibbs(doublereal* gpure) const {
+ gpure[0] = gibbs_mole();
+ }
+
+ void StoichSubstance::getCp_R(doublereal* cpr) const {
+ cpr[0] = cp_mole() / GasConstant;
+ }
+
+ void StoichSubstance::getStandardVolumes(doublereal*vol) const {
+ vol[0] = 1.0 / molarDensity();
+ }
+
+ /*
+ *
+ */
+
+ void StoichSubstance::getEnthalpy_RT_ref(doublereal *hrt) const {
+ _updateThermo();
+ hrt[0] = m_h0_RT[0];
+ }
+
+ void StoichSubstance::getGibbs_RT_ref(doublereal *grt) const {
+ _updateThermo();
+ grt[0] = m_h0_RT[0] - m_s0_R[0];
+ }
+
+ void StoichSubstance::getGibbs_ref(doublereal *g) const {
+ getGibbs_RT_ref(g);
+ g[0] *= GasConstant * temperature();
+ }
+
+ void StoichSubstance::getEntropy_R_ref(doublereal *er) const {
+ _updateThermo();
+ er[0] = m_s0_R[0];
+ }
+
+ /*
+ *
+ */
+
+ void StoichSubstance::setParameters(int n, double * c) {
+ double rho = c[0];
+ setDensity(rho);
+ }
+
+ void StoichSubstance::getParameters(int &n, double * const c) const {
+ double rho = density();
+ c[0] = rho;
+ }
+
+ void StoichSubstance::setParametersFromXML(const XML_Node& eosdata) {
+ eosdata._require("model","StoichSubstance");
+ doublereal rho = getFloat(eosdata, "density", "toSI");
+ setDensity(rho);
+ }
}
diff --git a/Cantera/src/thermo/StoichSubstance.h b/Cantera/src/thermo/StoichSubstance.h
index b72c138ae..a0181aeb6 100644
--- a/Cantera/src/thermo/StoichSubstance.h
+++ b/Cantera/src/thermo/StoichSubstance.h
@@ -6,7 +6,7 @@
* ThermoPhase class.
*/
-/* $Author$
+/*
* $Date$
* $Revision$
*
@@ -24,428 +24,396 @@
namespace Cantera {
- /**
- * @ingroup thermoprops
- *
- * Class StoichSubstance represents a stoichiometric (fixed composition)
- * incompressible substance.
- * \nosubgrouping
+ /**
+ * @ingroup thermoprops
+ *
+ * Class StoichSubstance represents a stoichiometric (fixed composition)
+ * incompressible substance.
+ * \nosubgrouping
+ *
+ */
+ class StoichSubstance : public ThermoPhase {
+
+ public:
+
+ //! Default empty constructor
+ StoichSubstance();
+
+ //! Copy Constructor
+ /*!
+ * Copy constructor for the object. Constructed
+ * object will be a clone of this object, but will
+ * also own all of its data.
+ * This is a wrapper around the assignment operator
*
+ * @param right Object to be copied.
*/
- class StoichSubstance : public ThermoPhase {
+ StoichSubstance(const StoichSubstance &right);
- public:
+ //! Asignment operator
+ /*!
+ * Assignment operator for the object. Constructed
+ * object will be a clone of this object, but will
+ * also own all of its data.
+ *
+ * @param right Object to be copied.
+ */
+ StoichSubstance& operator=(const StoichSubstance &right);
- //! Default empty constructor
- StoichSubstance();
+ //! Destructor
+ virtual ~StoichSubstance();
- //! Copy Constructor
- /*!
- * Copy constructor for the object. Constructed
- * object will be a clone of this object, but will
- * also own all of its data.
- * This is a wrapper around the assignment operator
- *
- * @param right Object to be copied.
- */
- StoichSubstance(const StoichSubstance &right);
+ //! Duplicator from the %ThermoPhase parent class
+ /*
+ * Given a pointer to a %ThermoPhase object, this function will
+ * duplicate the %ThermoPhase object and all underlying structures.
+ * This is basically a wrapper around the copy constructor.
+ *
+ * @return returns a pointer to a %ThermoPhase
+ */
+ ThermoPhase *duplMyselfAsThermoPhase() const;
- //! Asignment operator
- /*!
- * Assignment operator for the object. Constructed
- * object will be a clone of this object, but will
- * also own all of its data.
- *
- * @param right Object to be copied.
- */
- StoichSubstance& operator=(const StoichSubstance &right);
+ /**
+ *
+ * @name Utilities
+ * @{
+ */
- //! Destructor
- virtual ~StoichSubstance();
-
- //! Duplicator from the %ThermoPhase parent class
- /*
- * Given a pointer to a %ThermoPhase object, this function will
- * duplicate the %ThermoPhase object and all underlying structures.
- * This is basically a wrapper around the copy constructor.
- *
- * @return returns a pointer to a %ThermoPhase
- */
- ThermoPhase *duplMyselfAsThermoPhase() const;
-
- /**
- *
- * @name Utilities
- * @{
- */
-
- /**
- * Equation of state flag. Returns the value cStoichSubstance,
- * defined in mix_defs.h.
- */
- virtual int eosType() const { return cStoichSubstance; }
+ /**
+ * Equation of state flag. Returns the value cStoichSubstance,
+ * defined in mix_defs.h.
+ */
+ virtual int eosType() const { return cStoichSubstance; }
- /**
- * @}
- * @name Molar Thermodynamic Properties of the Solution ---------
- * @{
- */
+ /**
+ * @}
+ * @name Molar Thermodynamic Properties of the Solution ---------
+ * @{
+ */
- /**
- * Molar enthalpy. Units: J/kmol. For an incompressible,
- * stoichiometric substance, the internal energy is
- * independent of pressure, and therefore the molar enthalpy
- * is \f[ \hat h(T, P) = \hat u(T) + P \hat v \f], where the
- * molar specific volume is constant.
- */
- virtual doublereal enthalpy_mole() const {
- double hh = intEnergy_mole() + m_press / molarDensity();
- return hh;
- }
+ /**
+ * Molar enthalpy. Units: J/kmol. For an incompressible,
+ * stoichiometric substance, the internal energy is
+ * independent of pressure, and therefore the molar enthalpy
+ * is \f[ \hat h(T, P) = \hat u(T) + P \hat v \f], where the
+ * molar specific volume is constant.
+ */
+ virtual doublereal enthalpy_mole() const {
+ double hh = intEnergy_mole() + m_press / molarDensity();
+ return hh;
+ }
- /**
- * Molar internal energy. J/kmol. For an incompressible,
- * stoichiometric substance, the molar internal energy is
- * independent of pressure. Since the thermodynamic properties
- * are specified by giving the standard-state enthalpy, the
- * term \f$ P_0 \hat v\f$ is subtracted from the specified molar
- * enthalpy to compute the molar internal energy.
- */
- virtual doublereal intEnergy_mole() const {
- _updateThermo();
- return GasConstant * temperature() * m_h0_RT[0]
- - m_p0 / molarDensity();
- }
+ /**
+ * Molar internal energy. J/kmol. For an incompressible,
+ * stoichiometric substance, the molar internal energy is
+ * independent of pressure. Since the thermodynamic properties
+ * are specified by giving the standard-state enthalpy, the
+ * term \f$ P_0 \hat v\f$ is subtracted from the specified molar
+ * enthalpy to compute the molar internal energy.
+ */
+ virtual doublereal intEnergy_mole() const {
+ _updateThermo();
+ return GasConstant * temperature() * m_h0_RT[0]
+ - m_p0 / molarDensity();
+ }
- /**
- * Molar entropy. Units: J/kmol/K. For an incompressible,
- * stoichiometric substance, the molar entropy depends only on
- * the temperature.
- */
- virtual doublereal entropy_mole() const {
- _updateThermo();
- return GasConstant * m_s0_R[0];
- }
+ /**
+ * Molar entropy. Units: J/kmol/K. For an incompressible,
+ * stoichiometric substance, the molar entropy depends only on
+ * the temperature.
+ */
+ virtual doublereal entropy_mole() const {
+ _updateThermo();
+ return GasConstant * m_s0_R[0];
+ }
- /**
- * Molar gibbs Function. Units: J/kmol. This is determined
- * from the molar enthalpy and entropy functions.
- */
- virtual doublereal gibbs_mole() const {
- return enthalpy_mole() - temperature() * entropy_mole();
- }
+ /**
+ * Molar gibbs Function. Units: J/kmol. This is determined
+ * from the molar enthalpy and entropy functions.
+ */
+ virtual doublereal gibbs_mole() const {
+ return enthalpy_mole() - temperature() * entropy_mole();
+ }
- /**
- * Molar heat capacity at constant pressure. Units: J/kmol/K.
- * For an incompressible substance, \f$ \hat c_p = \hat c_v\f$.
- */
- virtual doublereal cp_mole() const {
- _updateThermo();
- return GasConstant * m_cp0_R[0];
- }
+ /**
+ * Molar heat capacity at constant pressure. Units: J/kmol/K.
+ * For an incompressible substance, \f$ \hat c_p = \hat c_v\f$.
+ */
+ virtual doublereal cp_mole() const {
+ _updateThermo();
+ return GasConstant * m_cp0_R[0];
+ }
- /**
- * Molar heat capacity at constant volume. Units: J/kmol/K.
- * For an incompressible substance, \f$ \hat c_p = \hat c_v\f$.
- */
- virtual doublereal cv_mole() const {
- return cp_mole();
- }
+ /**
+ * Molar heat capacity at constant volume. Units: J/kmol/K.
+ * For an incompressible substance, \f$ \hat c_p = \hat c_v\f$.
+ */
+ virtual doublereal cv_mole() const {
+ return cp_mole();
+ }
- //@}
+ //@}
- /**
- * @name Mechanical Equation of State
- * @{
- */
+ /**
+ * @name Mechanical Equation of State
+ * @{
+ */
- //! Report the Pressure. Units: Pa.
- /*!
- * For an incompressible substance, the density is independent
- * of pressure. This method simply returns the storred
- * pressure value.
- */
- virtual doublereal pressure() const {
- return m_press;
- }
+ //! Report the Pressure. Units: Pa.
+ /*!
+ * For an incompressible substance, the density is independent
+ * of pressure. This method simply returns the storred
+ * pressure value.
+ */
+ virtual doublereal pressure() const;
-
- //! Set the pressure at constant temperature. Units: Pa.
- /*!
- * For an incompressible substance, the density is
- * independent of pressure. Therefore, this method only
- * stores the specified pressure value. It does not
- * modify the density.
- *
- * @param p Pressure (units - Pa)
- */
- virtual void setPressure(doublereal p) {
- m_press = p;
- }
- //@}
+ //! Set the pressure at constant temperature. Units: Pa.
+ /*!
+ * For an incompressible substance, the density is
+ * independent of pressure. Therefore, this method only
+ * stores the specified pressure value. It does not
+ * modify the density.
+ *
+ * @param p Pressure (units - Pa)
+ */
+ virtual void setPressure(doublereal p);
- /**
- * @name Chemical Potentials and Activities
- *@{
- */
+ //@}
- /**
- * This method returns the array of generalized
- * concentrations. For a stoichiometric substance, there is
- * only one species, and the generalized concentration is 1.0.
- */
- virtual void getActivityConcentrations(doublereal* c) const {
- c[0] = 1.0;
- }
+ /**
+ * @name Chemical Potentials and Activities
+ *@{
+ */
- /**
- * The standard concentration. This is defined as the concentration
- * by which the generalized concentration is normalized to produce
- * the activity.
- */
- virtual doublereal standardConcentration(int k=0) const {
- return 1.0;
- }
+ /**
+ * This method returns the array of generalized
+ * concentrations. For a stoichiometric substance, there is
+ * only one species, and the generalized concentration is 1.0.
+ */
+ virtual void getActivityConcentrations(doublereal* c) const;
- /**
- * Returns the natural logarithm of the standard
- * concentration of the kth species
- */
- virtual doublereal logStandardConc(int k=0) const {
- return 0.0;
- }
+ /**
+ * The standard concentration. This is defined as the concentration
+ * by which the generalized concentration is normalized to produce
+ * the activity.
+ */
+ virtual doublereal standardConcentration(int k=0) const;
- /**
- * Get the array of chemical potentials at unit activity
- * \f$ \mu^0_k \f$.
- *
- * For a stoichiometric substance, there is no activity term in
- * the chemical potential expression, and therefore the
- * standard chemical potential and the chemical potential
- * are both equal to the molar Gibbs function.
- */
- virtual void getStandardChemPotentials(doublereal* mu0) const {
- mu0[0] = gibbs_mole();
- }
+ /**
+ * Returns the natural logarithm of the standard
+ * concentration of the kth species
+ */
+ virtual doublereal logStandardConc(int k=0) const;
- /**
- * Returns the units of the standard and generalized
- * concentrations Note they have the same units, as their
- * ratio is defined to be equal to the activity of the kth
- * species in the solution, which is unitless.
- *
- * This routine is used in print out applications where the
- * units are needed. Usually, MKS units are assumed throughout
- * the program and in the XML input files.
- *
- * uA[0] = kmol units - default = 0
- * uA[1] = m units - default = 0
- * uA[2] = kg units - default = 0;
- * uA[3] = Pa(pressure) units - default = 0;
- * uA[4] = Temperature units - default = 0;
- * uA[5] = time units - default = 0
- */
- virtual void getUnitsStandardConc(double *uA, int k = 0,
- int sizeUA = 6) const;
+ /**
+ * Get the array of chemical potentials at unit activity
+ * \f$ \mu^0_k \f$.
+ *
+ * For a stoichiometric substance, there is no activity term in
+ * the chemical potential expression, and therefore the
+ * standard chemical potential and the chemical potential
+ * are both equal to the molar Gibbs function.
+ */
+ virtual void getStandardChemPotentials(doublereal* mu0) const {
+ mu0[0] = gibbs_mole();
+ }
+
+ /**
+ * Returns the units of the standard and generalized
+ * concentrations Note they have the same units, as their
+ * ratio is defined to be equal to the activity of the kth
+ * species in the solution, which is unitless.
+ *
+ * This routine is used in print out applications where the
+ * units are needed. Usually, MKS units are assumed throughout
+ * the program and in the XML input files.
+ *
+ * uA[0] = kmol units - default = 0
+ * uA[1] = m units - default = 0
+ * uA[2] = kg units - default = 0;
+ * uA[3] = Pa(pressure) units - default = 0;
+ * uA[4] = Temperature units - default = 0;
+ * uA[5] = time units - default = 0
+ */
+ virtual void getUnitsStandardConc(double *uA, int k = 0,
+ int sizeUA = 6) const;
- //@}
- /// @name Partial Molar Properties of the Solution ----------------------------------
- //@{
+ //@}
+ /// @name Partial Molar Properties of the Solution ----------------------------------
+ //@{
- /**
- * Get the array of non-dimensional chemical potentials
- * \f$ \mu_k / \hat R T \f$.
- */
- virtual void getChemPotentials_RT(doublereal* mu) const {
- mu[0] = gibbs_mole() / (GasConstant * temperature());
- }
+ /**
+ * Get the array of non-dimensional chemical potentials
+ * \f$ \mu_k / \hat R T \f$.
+ */
+ virtual void getChemPotentials_RT(doublereal* mu) const {
+ mu[0] = gibbs_mole() / (GasConstant * temperature());
+ }
- /**
- * For a stoichiometric substance, there is only one species.
- * This method returns the molar gibbs function in the
- * first element of array \c mu.
- */
- virtual void getChemPotentials(doublereal* mu) const {
- mu[0] = gibbs_mole();
- }
+ /**
+ * For a stoichiometric substance, there is only one species.
+ * This method returns the molar gibbs function in the
+ * first element of array \c mu.
+ */
+ virtual void getChemPotentials(doublereal* mu) const {
+ mu[0] = gibbs_mole();
+ }
- /**
- * Get the species electrochemical potentials. Units: J/kmol.
- * This method adds a term \f$ Fz_k \phi_k \f$ to the
- * to each chemical potential.
- */
- void getElectrochemPotentials(doublereal* mu) const {
- getChemPotentials(mu);
- }
+ /**
+ * Get the species electrochemical potentials. Units: J/kmol.
+ * This method adds a term \f$ Fz_k \phi_k \f$ to the
+ * to each chemical potential.
+ */
+ void getElectrochemPotentials(doublereal* mu) const;
- /**
- * Returns an array of partial molar enthalpies for the species
- * in the mixture.
- * Units (J/kmol)
- */
- virtual void getPartialMolarEnthalpies(doublereal* hbar) const {
- hbar[0] = enthalpy_mole();
- }
+ /**
+ * Returns an array of partial molar enthalpies for the species
+ * in the mixture.
+ * Units (J/kmol)
+ */
+ virtual void getPartialMolarEnthalpies(doublereal* hbar) const;
- /**
- * Returns an array of partial molar entropies of the species in the
- * solution. Units: J/kmol/K.
- */
- virtual void getPartialMolarEntropies(doublereal* sbar) const {
- sbar[0] = entropy_mole();
- }
+ /**
+ * Returns an array of partial molar entropies of the species in the
+ * solution. Units: J/kmol/K.
+ */
+ virtual void getPartialMolarEntropies(doublereal* sbar) const;
- /**
- * returns an array of partial molar volumes of the species
- * in the solution. Units: m^3 kmol-1.
- */
- virtual void getPartialMolarVolumes(doublereal* vbar) const {
- vbar[0] = 1.0 / molarDensity();
- }
+ /**
+ * returns an array of partial molar volumes of the species
+ * in the solution. Units: m^3 kmol-1.
+ */
+ virtual void getPartialMolarVolumes(doublereal* vbar) const;
+
+
+ //@}
+ /// @name Properties of the Standard State of the Species in the Solution -------------------------------------
+ //@{
+ /**
+ * Get the nondimensional Enthalpy functions for the species
+ * at their standard states at the current
+ * T and P of the solution.
+ */
+ virtual void getEnthalpy_RT(doublereal* hrt) const;
+
+ /**
+ * Get the array of nondimensional Enthalpy functions for the
+ * standard state species
+ * at the current T and P of the solution.
+ */
+ virtual void getEntropy_R(doublereal* sr) const;
+
+ /**
+ * Get the nondimensional Gibbs functions for the species
+ * at their standard states of solution at the current T and P
+ * of the solution.
+ */
+ virtual void getGibbs_RT(doublereal* grt) const;
+
+ //! Get the Gibbs functions for the standard
+ //! state of the species at the current T and P of the solution
+ /*!
+ * Units are Joules/kmol
+ * @param gpure Output vector of standard state gibbs free energies
+ * Length: m_kk.
+ */
+ virtual void getPureGibbs(doublereal* gpure) const;
+
+ /**
+ * Get the nondimensional Heat Capacities at constant
+ * pressure for the standard state of the species
+ * at the current T and P.
+ */
+ virtual void getCp_R(doublereal* cpr) const;
+
+ /**
+ * Get the standard volumes for the standard state of the species
+ * at the current T and P
+ */
+ virtual void getStandardVolumes(doublereal*vol) const;
+
+ //@}
+ /// @name Thermodynamic Values for the Species Reference States --------------------
+ //@{
+
+ /**
+ * Returns the vector of nondimensional
+ * enthalpies of the reference state at the current temperature
+ * of the solution and the reference pressure for the species.
+ *
+ * This function fills in its one entry in hrt[] by calling
+ * the underlying species thermo function for the
+ * dimensionless enthalpy.
+ */
+ virtual void getEnthalpy_RT_ref(doublereal *hrt) const;
+
+ /**
+ * Returns the vector of nondimensional
+ * enthalpies of the reference state at the current temperature
+ * of the solution and the reference pressure for the species.
+ *
+ * This function fills in its one entry in hrt[] by calling
+ * the underlying species thermo function for the
+ * dimensionless gibbs free energy, calculated from the
+ * dimensionless enthalpy and entropy.
+ */
+ virtual void getGibbs_RT_ref(doublereal *grt) const;
+
+ /**
+ * Returns the vector of the
+ * gibbs function of the reference state at the current temperature
+ * of the solution and the reference pressure for the species.
+ * units = J/kmol
+ *
+ * This function fills in its one entry in g[] by calling
+ * the underlying species thermo functions for the
+ * gibbs free energy, calculated from enthalpy and the
+ * entropy, and the multiplying by RT.
+ */
+ virtual void getGibbs_ref(doublereal *g) const;
+
+ /**
+ * Returns the vector of nondimensional
+ * entropies of the reference state at the current temperature
+ * of the solution and the reference pressure for the species.
+ *
+ * This function fills in its one entry in hrt[] by calling
+ * the underlying species thermo function for the
+ * dimensionless entropy.
+ */
+ virtual void getEntropy_R_ref(doublereal *er) const;
- //@}
- /// @name Properties of the Standard State of the Species in the Solution -------------------------------------
- //@{
- /**
- * Get the nondimensional Enthalpy functions for the species
- * at their standard states at the current
- * T and P of the solution.
- */
- virtual void getEnthalpy_RT(doublereal* hrt) const {
- hrt[0] = enthalpy_mole() / (GasConstant * temperature());
- }
+ virtual void initThermo();
+ virtual void setParameters(int n, double *c);
- /**
- * Get the array of nondimensional Enthalpy functions for the
- * standard state species
- * at the current T and P of the solution.
- */
- virtual void getEntropy_R(doublereal* sr) const {
- sr[0] = entropy_mole() / GasConstant;
- }
+ virtual void getParameters(int &n, double * const c) const;
- /**
- * Get the nondimensional Gibbs functions for the species
- * at their standard states of solution at the current T and P
- * of the solution.
- */
- virtual void getGibbs_RT(doublereal* grt) const {
- grt[0] = gibbs_mole() / (GasConstant * temperature());
- }
+ virtual void setParametersFromXML(const XML_Node& eosdata);
- /**
- * Get the nondimensional Heat Capacities at constant
- * pressure for the standard state of the species
- * at the current T and P.
- */
- virtual void getCp_R(doublereal* cpr) const {
- cpr[0] = cp_mole() / GasConstant;
- }
+ protected:
- /**
- * Get the standard volumes for the standard state of the species
- * at the current T and P
- */
- virtual void getStandardVolumes(doublereal*vol) const {
- vol[0] = 1.0 / molarDensity();
- }
+ int m_kk;
+ doublereal m_tmin, m_tmax, m_press, m_p0;
- //@}
- /// @name Thermodynamic Values for the Species Reference States --------------------
- //@{
+ mutable doublereal m_tlast;
+ mutable array_fp m_h0_RT;
+ mutable array_fp m_cp0_R;
+ mutable array_fp m_s0_R;
- /**
- * Returns the vector of nondimensional
- * enthalpies of the reference state at the current temperature
- * of the solution and the reference pressure for the species.
- *
- * This function fills in its one entry in hrt[] by calling
- * the underlying species thermo function for the
- * dimensionless enthalpy.
- */
- virtual void getEnthalpy_RT_ref(doublereal *hrt) const {
- _updateThermo();
- hrt[0] = m_h0_RT[0];
- }
+ private:
- /**
- * Returns the vector of nondimensional
- * enthalpies of the reference state at the current temperature
- * of the solution and the reference pressure for the species.
- *
- * This function fills in its one entry in hrt[] by calling
- * the underlying species thermo function for the
- * dimensionless gibbs free energy, calculated from the
- * dimensionless enthalpy and entropy.
- */
- virtual void getGibbs_RT_ref(doublereal *grt) const {
- _updateThermo();
- grt[0] = m_h0_RT[0] - m_s0_R[0];
- }
-
- /**
- * Returns the vector of the
- * gibbs function of the reference state at the current temperature
- * of the solution and the reference pressure for the species.
- * units = J/kmol
- *
- * This function fills in its one entry in g[] by calling
- * the underlying species thermo functions for the
- * gibbs free energy, calculated from enthalpy and the
- * entropy, and the multiplying by RT.
- */
- virtual void getGibbs_ref(doublereal *g) const {
- getGibbs_RT_ref(g);
- g[0] *= GasConstant * temperature();
- }
-
- /**
- * Returns the vector of nondimensional
- * entropies of the reference state at the current temperature
- * of the solution and the reference pressure for the species.
- *
- * This function fills in its one entry in hrt[] by calling
- * the underlying species thermo function for the
- * dimensionless entropy.
- */
- virtual void getEntropy_R_ref(doublereal *er) const {
- _updateThermo();
- er[0] = m_s0_R[0];
- }
-
-
- virtual void initThermo();
-
- virtual void setParameters(int n, double *c);
-
- virtual void getParameters(int &n, double * const c) const;
-
- virtual void setParametersFromXML(const XML_Node& eosdata);
-
- protected:
-
- int m_kk;
- doublereal m_tmin, m_tmax, m_press, m_p0;
-
- mutable doublereal m_tlast;
- mutable array_fp m_h0_RT;
- mutable array_fp m_cp0_R;
- mutable array_fp m_s0_R;
-
- private:
-
- void _updateThermo() const;
- };
+ void _updateThermo() const;
+ };
}