diff --git a/Cantera/src/ConstDensityThermo.h b/Cantera/src/ConstDensityThermo.h index cad48c8c6..f1bcd4673 100755 --- a/Cantera/src/ConstDensityThermo.h +++ b/Cantera/src/ConstDensityThermo.h @@ -25,137 +25,429 @@ namespace Cantera { - /** - * Overloads the virtual methods of class ThermoPhase to implement the - * incompressible equation of state. + //! Overloads the virtual methods of class ThermoPhase to implement the + //! incompressible equation of state. + /** + * + * + * Specification of Species Standard State Properties + * + * + * Specification of Solution Thermodynamic Properties + * + * The density is assumed to be constant, no matter what the concentration of the solution. + * + * + * Application within %Kinetics Managers + * + * + * XML Example + * + * An example of an XML Element named phase setting up a SurfPhase object named diamond_100 + * is given below. + * + * @ingroup thermoprops + */ + class ConstDensityThermo : public ThermoPhase { + + public: + + //! Constructor. + /*! + * */ - class ConstDensityThermo : public ThermoPhase { + ConstDensityThermo() : m_tlast(0.0) {} - public: + //! Destructor + virtual ~ConstDensityThermo() {} - ConstDensityThermo() : m_tlast(0.0) {} - virtual ~ConstDensityThermo() {} + // overloaded methods of class ThermoPhase - // overloaded methods of class ThermoPhase + virtual int eosType() const; - virtual int eosType() const; - virtual doublereal enthalpy_mole() const; - virtual doublereal intEnergy_mole() const; - virtual doublereal entropy_mole() const; - virtual doublereal gibbs_mole() const; - virtual doublereal cp_mole() const; - virtual doublereal cv_mole() const; - virtual doublereal pressure() const; - virtual void setPressure(doublereal p); - virtual void getActivityConcentrations(doublereal* c) const; - virtual void getActivityCoefficients(doublereal* ac) const; - virtual void getChemPotentials(doublereal* mu) const; - virtual void getStandardChemPotentials(doublereal* mu0) const; - virtual doublereal standardConcentration(int k=0) const; - virtual doublereal logStandardConc(int k=0) const; + //! Return the Molar Enthalpy. Units: J/kmol. + /*! + * + */ - virtual void getPureGibbs(doublereal* gpure) const { - const array_fp& gibbsrt = gibbs_RT(); - scale(gibbsrt.begin(), gibbsrt.end(), gpure, _RT()); - } + /// Molar enthalpy. Units: J/kmol. + virtual doublereal enthalpy_mole() const; - void getEnthalpy_RT(doublereal* hrt) const { - const array_fp& _h = enthalpy_RT(); - std::copy(_h.begin(), _h.end(), hrt); - } - - void getEntropy_R(doublereal* sr) const { - const array_fp& _s = entropy_R(); - std::copy(_s.begin(), _s.end(), sr); - } - - virtual void getGibbs_RT(doublereal* grt) const { - const array_fp& gibbsrt = gibbs_RT(); - std::copy(gibbsrt.begin(), gibbsrt.end(), grt); - } - - void getCp_R(doublereal* cpr) const { - const array_fp& _cpr = cp_R(); - std::copy(_cpr.begin(), _cpr.end(), cpr); - } + /// Molar internal energy. Units: J/kmol. + virtual doublereal intEnergy_mole() const; - // new methods defined here + /// Molar entropy. Units: J/kmol/K. + virtual doublereal entropy_mole() const; - const array_fp& enthalpy_RT() const { - _updateThermo(); - return m_h0_RT; - } + /// Molar Gibbs function. Units: J/kmol. + virtual doublereal gibbs_mole() const; - const array_fp& gibbs_RT() const { - _updateThermo(); - return m_g0_RT; - } + /// Molar heat capacity at constant pressure. Units: J/kmol/K. + virtual doublereal cp_mole() const; - const array_fp& expGibbs_RT() const { - _updateThermo(); - int k; - for (k = 0; k != m_kk; k++) m_expg0_RT[k] = std::exp(m_g0_RT[k]); - return m_expg0_RT; - } + /// Molar heat capacity at constant volume. Units: J/kmol/K. + virtual doublereal cv_mole() const; + + //! Return the thermodynamic pressure (Pa). + /*! + * This method must be overloaded in derived classes. Since the + * mass density, temperature, and mass fractions are stored, + * this method should use these values to implement the + * mechanical equation of state \f$ P(T, \rho, Y_1, \dots, + * Y_K) \f$. + */ + virtual doublereal pressure() const; - const array_fp& entropy_R() const { - _updateThermo(); - return m_s0_R; - } + //! Set the internally storred pressure (Pa) at constant + //! temperature and composition + /*! + * This method must be reimplemented in derived classes, where it + * may involve the solution of a nonlinear equation. Within %Cantera, + * the independent variable is the density. Therefore, this function + * solves for the density that will yield the desired input pressure. + * The temperature and composition iare held constant during this process. + * + * This base class function will print an error, if not overwritten. + * + * @param p input Pressure (Pa) + */ + virtual void setPressure(doublereal p); - const array_fp& cp_R() const { - _updateThermo(); - return m_cp0_R; - } + //! This method returns an array of generalized concentrations + /*! + * \f$ C^a_k\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 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. Note that they may + * or may not have units of concentration --- they might be + * partial pressures, mole fractions, or surface coverages, + * for example. + * + * @param c Output array of generalized concentrations. The + * units depend upon the implementation of the + * reaction rate expressions within the phase. + */ + virtual void getActivityConcentrations(doublereal* c) const; - virtual void setPotentialEnergy(int k, doublereal pe) { - m_pe[k] = pe; - } + //! Get the array of non-dimensional molar-based activity coefficients at + //! the current solution temperature, pressure, and solution concentration. + /*! + * @param ac Output vector of activity coefficients. Length: m_kk. + */ + virtual void getActivityCoefficients(doublereal* ac) const; - virtual doublereal potentialEnergy(int k) const { - return m_pe[k]; - } + //! Get the species chemical potentials. Units: J/kmol. + /*! + * This function returns a vector of chemical potentials of the + * species in solution at the current temperature, pressure + * and mole fraction of the solution. + * + * @param mu Output vector of species chemical + * potentials. Length: m_kk. Units: J/kmol + */ + virtual void getChemPotentials(doublereal* mu) const; - virtual void initThermo(); + //! Get the array of chemical potentials at unit activity for the species + //! at their standard states at the current T and P of the solution. + /*! + * These are the standard state chemical potentials \f$ \mu^0_k(T,P) + * \f$. The values are evaluated at the current + * temperature and pressure of the solution + * + * @param mu0 Output vector of chemical potentials. + * Length: m_kk. + */ + virtual void getStandardChemPotentials(doublereal* mu0) const; + + //! Return the standard concentration for the kth species + /*! + * The standard concentration \f$ C^0_k \f$ used to normalize + * the activity (i.e., generalized) concentration. In many cases, this quantity + * will be the same for all species in a phase - for example, + * for an ideal gas \f$ C^0_k = P/\hat R T \f$. For this + * reason, this method returns a single value, instead of an + * array. However, for phases in which the standard + * concentration is species-specific (e.g. surface species of + * different sizes), this method may be called with an + * optional parameter indicating the species. + * + * @param k Optional parameter indicating the species. The default + * is to assume this refers to species 0. + * @return + * Returns the standard Concentration in units of m3 kmol-1. + */ + virtual doublereal standardConcentration(int k=0) const; + + //! Natural logarithm of the standard concentration of the kth species. + /*! + * @param k index of the species (defaults to zero) + */ + virtual doublereal logStandardConc(int k=0) 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 { + const array_fp& gibbsrt = gibbs_RT(); + scale(gibbsrt.begin(), gibbsrt.end(), gpure, _RT()); + } + + //! Get the nondimensional Enthalpy functions for the species + //! at their standard states at the current T and P of the solution. + /*! + * @param hrt Output vector of nondimensional standard state enthalpies. + * Length: m_kk. + */ + void getEnthalpy_RT(doublereal* hrt) const { + const array_fp& _h = enthalpy_RT(); + std::copy(_h.begin(), _h.end(), hrt); + } + + //! Get the array of nondimensional Entropy functions for the + //! standard state species at the current T and P of the solution. + /*! + * @param sr Output vector of nondimensional standard state entropies. + * Length: m_kk. + */ + void getEntropy_R(doublereal* sr) const { + const array_fp& _s = entropy_R(); + std::copy(_s.begin(), _s.end(), sr); + } + + //! Get the nondimensional Gibbs functions for the species + //! in their standard states at the current T and P of the solution. + /*! + * @param grt Output vector of nondimensional standard state gibbs free energies + * Length: m_kk. + */ + virtual void getGibbs_RT(doublereal* grt) const { + const array_fp& gibbsrt = gibbs_RT(); + std::copy(gibbsrt.begin(), gibbsrt.end(), grt); + } + + //! Get the nondimensional Heat Capacities at constant + //! pressure for the species standard states + //! at the current T and P of the solution + /*! + * @param cpr Output vector of nondimensional standard state heat capacities + * Length: m_kk. + */ + void getCp_R(doublereal* cpr) const { + const array_fp& _cpr = cp_R(); + std::copy(_cpr.begin(), _cpr.end(), cpr); + } - virtual void setToEquilState(const doublereal* lambda_RT); + // new methods defined here - // set the density - virtual void setParameters(int n, doublereal* c) { - setDensity(c[0]); - } + //! Returns a reference to the vector of nondimensional + //! enthalpies of the reference state at the current temperature + //! of the solution and the reference pressure for the species. + const array_fp& enthalpy_RT() const { + _updateThermo(); + return m_h0_RT; + } - virtual void getParameters(int &n, doublereal * const c) { - double d = density(); - c[0] = d; - n = 1; - } + //! Returns a reference to the vector of nondimensional + //! Gibbs Free Energies of the reference state at the current temperature + //! of the solution and the reference pressure for the species. + const array_fp& gibbs_RT() const { + _updateThermo(); + return m_g0_RT; + } - virtual void setParametersFromXML(const XML_Node& eosdata); + //! Returns a reference to the vector of exponentials of the nondimensional + //! Gibbs Free Energies of the reference state at the current temperature + //! of the solution and the reference pressure for the species. + const array_fp& expGibbs_RT() const { + _updateThermo(); + int k; + for (k = 0; k != m_kk; k++) m_expg0_RT[k] = std::exp(m_g0_RT[k]); + return m_expg0_RT; + } - protected: + //! Returns a reference to the vector of nondimensional + //! entropies of the reference state at the current temperature + //! of the solution and the reference pressure for each species. + const array_fp& entropy_R() const { + _updateThermo(); + return m_s0_R; + } - int m_mm; - doublereal m_tmin, m_tmax, m_p0; + //! Returns a reference to the vector of nondimensional + //! constant pressure heat capacities of the reference state + //! at the current temperature of the solution + //! and reference pressure for each species. + const array_fp& cp_R() const { + _updateThermo(); + return m_cp0_R; + } - mutable doublereal m_tlast; - mutable array_fp m_h0_RT; - mutable array_fp m_cp0_R; - mutable array_fp m_g0_RT; - mutable array_fp m_s0_R; - mutable array_fp m_expg0_RT; - mutable array_fp m_pe; - mutable array_fp m_pp; + //! Set the potential energy of species k + /*! + * @param k species index + * @param pe Potential energy (J kmol-1). + */ + virtual void setPotentialEnergy(int k, doublereal pe) { + m_pe[k] = pe; + } - doublereal m_press; + //! Returns the potential energy of species k + /*! + * @param k species index + */ + virtual doublereal potentialEnergy(int k) const { + return m_pe[k]; + } + + //! Initialize the ThermoPhase object after all species have been set up + /*! + * @internal Initialize. + * + * This method is provided to allow + * subclasses to perform any initialization required after all + * species have been added. For example, it might be used to + * resize internal work arrays that must have an entry for + * each species. The base class implementation does nothing, + * and subclasses that do not require initialization do not + * need to overload this method. When importing a CTML phase + * description, this method is called from ThermoPhase::initThermoXML(), + * which is called from importPhase(), + * just prior to returning from function importPhase(). + * + * @see importCTML.cpp + */ + virtual void initThermo(); + + //!This method is used by the ChemEquil equilibrium solver. + /*! + * It sets the state such that the chemical potentials satisfy + * \f[ \frac{\mu_k}{\hat R T} = \sum_m A_{k,m} + * \left(\frac{\lambda_m} {\hat R T}\right) \f] where + * \f$ \lambda_m \f$ is the element potential of element m. The + * temperature is unchanged. Any phase (ideal or not) that + * implements this method can be equilibrated by ChemEquil. + * + * @param lambda_RT Input vector of dimensionless element potentials + * The length is equal to nElements(). + */ + virtual void setToEquilState(const doublereal* lambda_RT); + + + //! Set the equation of state parameters + /*! + * @internal + * The number and meaning of these depends on the subclass. + * + * @param n number of parameters + * @param c array of \a n coefficients + */ + virtual void setParameters(int n, doublereal* c) { + setDensity(c[0]); + } + + //! Get the equation of state parameters in a vector + /*! + * @internal + * The number and meaning of these depends on the subclass. + * + * @param n number of parameters + * @param c array of \a n coefficients + */ + virtual void getParameters(int &n, doublereal * const c) { + double d = density(); + c[0] = d; + n = 1; + } + + //! Set equation of state parameter values from XML entries. + /*! + * + * This method is called by function importPhase() in + * file importCTML.cpp when processing a phase definition in + * an input file. It should be overloaded in subclasses to set + * any parameters that are specific to that particular phase + * model. Note, this method is called before the phase is + * initialzed with elements and/or species. + * + * @param eosdata An XML_Node object corresponding to + * the "thermo" entry for this phase in the input file. + */ + virtual void setParametersFromXML(const XML_Node& eosdata); + + protected: + + //! number of elements + int m_mm; - private: + //! Minimum temperature for valid species standard state thermo props + /*! + * This is the minimum temperature at which all species have valid standard + * state thermo props defined. + */ + doublereal m_tmin; - void _updateThermo() const; - }; + //! Maximum temperature for valid species standard state thermo props + /*! + * This is the maximum temperature at which all species have valid standard + * state thermo props defined. + */ + doublereal m_tmax; + + //! Reference state pressure + /*! + * Value of the reference state pressure in Pascals. + * All species must have the same reference state pressure. + */ + doublereal m_p0; + + //! last value of the temperature processed by reference state + mutable doublereal m_tlast; + + //! Temporary storage for dimensionless reference state enthalpies + mutable array_fp m_h0_RT; + + //! Temporary storage for dimensionless reference state heat capacities + mutable array_fp m_cp0_R; + + //! Temporary storage for dimensionless reference state gibbs energies + mutable array_fp m_g0_RT; + + //! Temporary storage for dimensionless reference state entropies + mutable array_fp m_s0_R; + + //! currently unsed + /*! + * @deprecated + */ + mutable array_fp m_expg0_RT; + + //! Currently unused + /* + * @deprecated + */ + mutable array_fp m_pe; + + //! Temporary array containing internally calculated partial pressures + mutable array_fp m_pp; + + //! Current pressure (Pa) + doublereal m_press; + + + private: + + void _updateThermo() const; + }; } #endif diff --git a/Cantera/src/ThermoPhase.h b/Cantera/src/ThermoPhase.h index 12691fdf0..ee4dff675 100755 --- a/Cantera/src/ThermoPhase.h +++ b/Cantera/src/ThermoPhase.h @@ -181,13 +181,13 @@ namespace Cantera { ThermoPhase(const ThermoPhase &); //! Assignment operator - /*! - * This is NOT a virtual function. - * - * @param right Reference to %ThermoPhase object to be copied into the - * current one. - */ - ThermoPhase& operator=(const ThermoPhase &right); + /*! + * This is NOT a virtual function. + * + * @param right Reference to %ThermoPhase object to be copied into the + * current one. + */ + ThermoPhase& operator=(const ThermoPhase &right); /** * Duplication routine for objects which inherit from @@ -217,29 +217,29 @@ namespace Cantera { */ virtual int eosType() const { return 0; } - /** - * Returns the reference pressure in Pa. This function is a wrapper - * that calls the species thermo refPressure function. - */ - doublereal refPressure() const { - return m_spthermo->refPressure(); - } + /** + * Returns the reference pressure in Pa. This function is a wrapper + * that calls the species thermo refPressure function. + */ + doublereal refPressure() const { + return m_spthermo->refPressure(); + } - //! Minimum temperature for which the thermodynamic data for the species or phase are valid. - /*! - * If no argument is supplied, the - * value returned will be the lowest temperature at which the - * data for \e all species are valid. Otherwise, the value - * will be only for species \a k. This function is a wrapper - * that calls the species thermo minTemp function. - * - * @param k index of the species. Default is -1, which will return the max of the min value - * over all species. - */ - doublereal minTemp(int k = -1) { - return m_spthermo->minTemp(k); - } + //! Minimum temperature for which the thermodynamic data for the species or phase are valid. + /*! + * If no argument is supplied, the + * value returned will be the lowest temperature at which the + * data for \e all species are valid. Otherwise, the value + * will be only for species \a k. This function is a wrapper + * that calls the species thermo minTemp function. + * + * @param k index of the species. Default is -1, which will return the max of the min value + * over all species. + */ + doublereal minTemp(int k = -1) { + return m_spthermo->minTemp(k); + } //! Maximum temperature for which the thermodynamic data for the species //! are valid. @@ -340,31 +340,31 @@ namespace Cantera { err("isothermalCompressibility"); return -1.0; } - //! Return the volumetric thermal expansion coefficient. Units: 1/K. - /*! - * The thermal expansion coefficient is defined as - * \f[ - * \beta = \frac{1}{v}\left(\frac{\partial v}{\partial T}\right)_P - * \f] - */ - virtual doublereal thermalExpansionCoeff() const { - err("thermalExpansionCoeff()"); return -1.0; - } + //! Return the volumetric thermal expansion coefficient. Units: 1/K. + /*! + * The thermal expansion coefficient is defined as + * \f[ + * \beta = \frac{1}{v}\left(\frac{\partial v}{\partial T}\right)_P + * \f] + */ + virtual doublereal thermalExpansionCoeff() const { + err("thermalExpansionCoeff()"); return -1.0; + } - /// @deprecated - virtual void updateDensity() { - deprecatedMethod("ThermoPhase","updateDensity",""); - } + /// @deprecated + virtual void updateDensity() { + deprecatedMethod("ThermoPhase","updateDensity",""); + } - /** - * @} - * @name Electric Potential - * - * The phase may be at some non-zero electrical - * potential. These methods set or get the value of the - * electric potential. - */ - //@{ + /** + * @} + * @name Electric Potential + * + * The phase may be at some non-zero electrical + * potential. These methods set or get the value of the + * electric potential. + */ + //@{ //! Set the electric potential of this phase (V). /*! @@ -868,13 +868,13 @@ namespace Cantera { } //@} - //! Return the Gas Constant multiplied by the current temperature - /*! - * The units are Joules kmol-1 - */ - doublereal _RT() const { - return temperature() * GasConstant; - } + //! Return the Gas Constant multiplied by the current temperature + /*! + * The units are Joules kmol-1 + */ + doublereal _RT() const { + return temperature() * GasConstant; + } /** * @name Setting the State @@ -1076,19 +1076,19 @@ namespace Cantera { void setElementPotentials(const vector_fp& lambda); - //! Returns the element potentials storred in the ThermoPhase object - /*! - * Returns the storred element potentials. - * The element potentials are retrieved from their storred - * dimensionless forms by multiplying by RT. - * @param lambda Output vector containing the element potentials. - * Length = nElements. Units are Joules/kmol. - * @return bool indicating whether thare are any valid storred element - * potentials. The calling routine should check this - * bool. In the case that there aren't any, lambda is not - * touched. - */ - bool getElementPotentials(doublereal* lambda) const; + //! Returns the element potentials storred in the ThermoPhase object + /*! + * Returns the storred element potentials. + * The element potentials are retrieved from their storred + * dimensionless forms by multiplying by RT. + * @param lambda Output vector containing the element potentials. + * Length = nElements. Units are Joules/kmol. + * @return bool indicating whether thare are any valid storred element + * potentials. The calling routine should check this + * bool. In the case that there aren't any, lambda is not + * touched. + */ + bool getElementPotentials(doublereal* lambda) const; //@} @@ -1100,47 +1100,47 @@ namespace Cantera { //@{ - /// Critical temperature (K). - virtual doublereal critTemperature() const { - err("critTemperature"); return -1.0; - } + /// Critical temperature (K). + virtual doublereal critTemperature() const { + err("critTemperature"); return -1.0; + } - /// Critical pressure (Pa). - virtual doublereal critPressure() const { - err("critPressure"); return -1.0; - } + /// Critical pressure (Pa). + virtual doublereal critPressure() const { + err("critPressure"); return -1.0; + } - /// Critical density (kg/m3). - virtual doublereal critDensity() const { - err("critDensity"); return -1.0; - } + /// Critical density (kg/m3). + virtual doublereal critDensity() const { + err("critDensity"); return -1.0; + } - //@} + //@} - /// @name Saturation properties. - /// These methods are only implemented by subclasses that - /// implement full liquid-vapor equations of state. They may be - /// moved out of ThermoPhase at a later date. - /// - virtual doublereal satTemperature(doublereal p) const { - err("satTemperature"); return -1.0; - } + /// @name Saturation properties. + /// These methods are only implemented by subclasses that + /// implement full liquid-vapor equations of state. They may be + /// moved out of ThermoPhase at a later date. + /// + virtual doublereal satTemperature(doublereal p) const { + err("satTemperature"); return -1.0; + } - virtual doublereal satPressure(doublereal t) const { - err("satPressure"); return -1.0; - } + virtual doublereal satPressure(doublereal t) const { + err("satPressure"); return -1.0; + } - virtual doublereal vaporFraction() const { - err("vaprFraction"); return -1.0; - } + virtual doublereal vaporFraction() const { + err("vaprFraction"); return -1.0; + } - virtual void setState_Tsat(doublereal t, doublereal x) { - err("setState_sat"); - } + virtual void setState_Tsat(doublereal t, doublereal x) { + err("setState_sat"); + } - virtual void setState_Psat(doublereal p, doublereal x) { - err("setState_sat"); - } + virtual void setState_Psat(doublereal p, doublereal x) { + err("setState_sat"); + } //@} diff --git a/Cantera/src/thermo/DebyeHuckel.cpp b/Cantera/src/thermo/DebyeHuckel.cpp index d2253ab03..fa85788cb 100644 --- a/Cantera/src/thermo/DebyeHuckel.cpp +++ b/Cantera/src/thermo/DebyeHuckel.cpp @@ -1809,7 +1809,6 @@ namespace Cantera { break; case A_DEBYE_WATER: dAdT = m_waterProps->ADebye(T, P, 1); - //dAdT = WaterProps::ADebye(T, P, 1); break; default: printf("shouldn't be here\n"); @@ -1901,7 +1900,7 @@ namespace Cantera { * ------------ Private and Restricted Functions ------------------ */ - /** + /* * Bail out of functions with an error exit if they are not * implemented. */ @@ -1944,7 +1943,7 @@ namespace Cantera { } } - /** + /* * nonpolarActCoeff() (private) * * Static function that implements the non-polar species @@ -2419,7 +2418,7 @@ namespace Cantera { } } - /** + /* * s_update_d2lnMolalityActCoeff_dT2() (private, const ) * * Using internally stored values, this function calculates diff --git a/Cantera/src/thermo/DebyeHuckel.h b/Cantera/src/thermo/DebyeHuckel.h index f611677cf..0440137bc 100644 --- a/Cantera/src/thermo/DebyeHuckel.h +++ b/Cantera/src/thermo/DebyeHuckel.h @@ -110,8 +110,9 @@ namespace Cantera { * spinodal curve. * *
- *

Specification of Solution Thermodynamic Properties

+ *

Specification of Solution Thermodynamic Properties

*
+ * * Chemical potentials * of the solutes, \f$ \mu_k \f$, and the solvent, \f$ \mu_o \f$, which are based * on the molality form, have the following general format: @@ -128,10 +129,105 @@ namespace Cantera { * * Individual activity coefficients of ions can not be independently measured. Instead, * only binary pairs forming electroneutral solutions can be measured. + + * + *

Ionic Strength

+ * + * Most of the parameterizations within the model use the ionic strength + * as a key variable. The ionic strength, \f$ I\f$ is defined as follows + * + * \f[ + * I = \frac{1}{2} \sum_k{m_k z_k^2} + * \f] + * + * \f$ m_k \f$ is the molality of the kth species. \f$ z_k \f$ is the charge + * of the kth species. Note, the ionic strength is a defined units quantity. + * The molality has defined units of gmol kg-1, and therefore the ionic + * strength has units of sqrt( gmol kg-1). + * + * In some instances, from some authors, a different + * formulation is used for the ionic strength in the equations below. The different + * formulation is due to the possibility of the existence of weak acids and how + * association wrt to the weak acid equilibrium relation affects the calculation + * of the activity coefficients via the assumed value of the ionic strength. + * + * If we are to assume that the association reaction doesn't have an effect + * on the ionic strength, then we will want to consider the associated weak + * acid as in effect being fully dissociated, when we calculate an effective + * value for the ionic strength. We will call this calculated value, the + * stoichiometric ionic strength, \f$ I_s \f$, putting a subscript s to denote + * it from the more straightforward calculation of \f$ I \f$. + * + * \f[ + * I_s = \frac{1}{2} \sum_k{m_k^s z_k^2} + * \f] + * + * Here, \f$ m_k^s \f$ is the value of the molalities calculated assuming that + * all weak acid-base pairs are in their fully dissociated states. This calculation may + * be simplified by considering that the weakly associated acid may be made up of two + * charged species, k1 and k2, each with their own charges, obeying the following relationship: + * + * \f[ + * z_k = z_{k1} + z_{k2} + * \f] + * Then, we may only need to specify one charge value, say, \f$ z_{k1}\f$, the cation charge number, + * in order to get both numbers, since we have already specified \f$ z_k \f$ in the definition of original species. + * Then, the stoichiometric ionic strength may be calculated via the following formula. + * + * \f[ + * I_s = \frac{1}{2} \left(\sum_{k,ions}{m_k z_k^2}+ \sum_{k,weak_assoc}(m_k z_{k1}^2 + m_k z_{k2}^2) \right) + * \f] + * + * The specification of which species are weakly associated acids is made in the input file via the + * stoichIsMods XML block, where the charge for k1 is also specified. An example is given below: + * + * @code + * + * NaCl(aq):-1.0 + * + * @endcode + * + * Because we need the concept of a weakly associated acid in order to calculated \f$ I_s \f$ we need to + * catalog all species in the phase. This is done using the following categories: + * + * - cEST_solvent : Solvent species (neutral) + * - cEST_chargedSpecies Charged species (charged) + * - cEST_weakAcidAssociated Species which can break apart into charged species. + * It may or may not be charged. These may or may not be be included in the + * species solution vector. + * - cEST_strongAcidAssociated Species which always breaksapart into charged species. + * It may or may not be charged. Normally, these aren't included + * in the speciation vector. + * - cEST_polarNeutral Polar neutral species + * - cEST_nonpolarNeutral Non poloar neutral species + * + * Polar and non-polar neutral species are differentiated, because some additions to the activity + * coefficient expressions distinguish between these two types of solutes. This is the so-called + * salt-out effect. + * + * The type of species is specified in the electrolyteSpeciesType XML block. Note, this is not + * considered a part of the specification of the standard state for the species, at this time. Therefore, + * this information is put under the activityCoefficient XML block. An example is given below + * + * @code + * + * H2L(L):solvent + * H+:chargedSpecies + * NaOH(aq):weakAcidAssociated + * NaCl(aq):strongAcidAssociated + * NH3(aq):polarNeutral + * O2(aq):nonpolarNeutral + * + * @endcode + * + * Much of the species electrolyte type information is infered from other information in the + * input file. For example, as species which is charged is given the "chargedSpecies" default + * category. A neutral solute species is put into the "nonpolarNeutral" category by default. * * The specification of solute activity coefficients depends on the model * assumed for the Debye-Huckel term. The model is set by the - * internal parameter #m_formDH. + * internal parameter #m_formDH. We will now describe each category in its own section. + * * *

Debye-Huckel Dilute Limit

* @@ -142,7 +238,7 @@ namespace Cantera { * \f[ * \ln(\gamma_k^\triangle) = - z_k^2 A_{Debye} \sqrt{I} * \f] - * where I is the ionic strength + * where \f$ I\f$ is the ionic strength * \f[ * I = \frac{1}{2} \sum_k{m_k z_k^2} * \f] @@ -215,7 +311,7 @@ namespace Cantera { * DHFORM_BETAIJ = 3 * * This form assumes a linear expansion in a virial coefficient form - * It is used extensively in the book by Newmann, Electrochemistry, and is the beginning of + * It is used extensively in the book by Newmann, "Electrochemistry Systems", and is the beginning of * more complex treatments for stronger electrolytes, fom Pitzer * and from Harvey, Moller, and Weire. * @@ -233,6 +329,39 @@ namespace Cantera { * - \tilde{M}_o \sum_j \sum_k \beta_{j,k} m_j m_k * \f] * + * In this formulation the ionic radius, \f$ a \f$, is a constant. This must be supplied to the + * model, in an ionicRadius XML block. + * + * The \f$ \beta_{j,k} \f$ parameters are binary interaction parameters. They are supplied to + * the object in an DHBetaMatrix XML block. There are in principle \f$ N (N-1) /2 \f$ + * different, symmetric interaction parameters, where \f$ N \f$ are the number of solute species in the + * mechanism. + * An example is given below. + * + * An example activityCoefficients XML block for this formulation is supplied below + * + * @code + * + * + * 1.172576 + * + * 3.28640E9 + * + * + * + * H+:Cl-:0.27 + * Na+:Cl-:0.15 + * Na+:OH-:0.06 + * + * + * NaCl(aq):-1.0 + * + * + * H+:chargedSpecies + * NaCl(aq):weakAcidAssociated + * + * + * @endcode * *

Pitzer Beta_IJ formulation

* @@ -255,9 +384,79 @@ namespace Cantera { * - \tilde{M}_o \sum_j \sum_k \beta_{j,k} m_j m_k * \f] * + *

Specification of the Debye Huckel Constants

+ * + * In the equations above, the formulas for \f$ A_{Debye} \f$ and \f$ B_{Debye} \f$ + * are needed. The %DebyeHuckel object uses two methods for specifying these quantities. + * The default method is to assume that \f$ A_{Debye} \f$ is a constant, given + * in the initialization process, and storred in the + * member double, m_A_Debye. Optionally, a full water treatment may be employed that makes + * \f$ A_{Debye} \f$ a full function of T and P. + * + * \f[ + * A_{Debye} = \frac{F e B_{Debye}}{8 \pi \epsilon R T} {\left( C_o \tilde{M}_o \right)}^{1/2} + * \f] + * where + * + * \f[ + * B_{Debye} = \frac{F} {{(\frac{\epsilon R T}{2})}^{1/2}} + * \f] + * Therefore: + * \f[ + * A_{Debye} = \frac{1}{8 \pi} + * {\left(\frac{2 N_a \rho_o}{1000}\right)}^{1/2} + * {\left(\frac{N_a e^2}{\epsilon R T }\right)}^{3/2} + * \f] + * + * Units = sqrt(kg/gmol) + * + * where + * - \f$ N_a \f$ is Avrogadro's number + * - \f$ \rho_w \f$ is the density of water + * - \f$ e \f$ is the electronic charge + * - \f$ \epsilon = K \epsilon_o \f$ is the permitivity of water + * where \f$ K \f$ is the dielectric condstant of water, + * and \f$ \epsilon_o \f$ is the permitivity of free space. + * - \f$ \rho_o \f$ is the density of the solvent in its standard state. + * + * Nominal value at 298 K and 1 atm = 1.172576 (kg/gmol)1/2 + * based on: + * - \f$ \epsilon / \epsilon_0 \f$ = 78.54 + * (water at 25C) + * - \f$ \epsilon_0 \f$= 8.854187817E-12 C2 N-1 m-2 + * - e = 1.60217653E-19 C + * - F = 9.6485309E7 C kmol-1 + * - R = 8.314472E3 kg m2 s-2 kmol-1 K-1 + * - T = 298.15 K + * - B_Debye = 3.28640E9 (kg/gmol)1/2 m-1 + * - \f$N_a\f$ = 6.0221415E26 kmol-1 + * + * An example of a fixed value implementation is given below. + * @code + * + * + * 1.172576 + * + * 3.28640E9 + * + * @endcode + * + * An example of a variable value implementation is given below. + * + * @code + * + * + * + * 3.28640E9 + * + * @endcode + * + * Currently, \f$ B_{Debye} \f$ is a constant in the model, specified either by a default + * water value, or through the input file. This may have to be looked at, in the future. + * * *
- * %Application within %Kinetics Managers + *

%Application within %Kinetics Managers

*
* For the time being, we have set the standard concentration for all species in * this phase equal to the default concentration of the solvent at 298 K and 1 atm. @@ -312,26 +511,38 @@ namespace Cantera { *
* * The constructor for this phase is NOT located in the default ThermoFactory - * for %Cantera. However, a new %StoichSubstanceSSTP may be created by + * for %Cantera. However, a new %DebyeHuckel object may be created by * the following code snippets: * * @code - * sprintf(file_ID,"%s#NaCl(S)", iFile); + * DebyeHuckel *DH = new DebyeHuckel("DH_NaCl.xml", "NaCl_electrolyte"); + * @endcode + * + * or + * + * @code + * char iFile[80]; + * strcpy(iFile, "DH_NaCl.xml"); + * sprintf(file_ID,"%s#NaCl_electrolyte", iFile); * XML_Node *xm = get_XML_NameID("phase", file_ID, 0); - * StoichSubstanceSSTP *solid = new StoichSubstanceSSTP(*xm); + * DebyeHuckel *dh = new DebyeHuckel(*xm); * @endcode * * or by the following call to importPhase(): * * @code - * sprintf(file_ID,"%s#NaCl(S)", iFile); + * char iFile[80]; + * strcpy(iFile, "DH_NaCl.xml"); + * sprintf(file_ID,"%s#NaCl_electrolyte", iFile); * XML_Node *xm = get_XML_NameID("phase", file_ID, 0); - * StoichSubstanceSSTP solid; - * importPhase(*xm, &solid); + * DebyeHuckel dhphase; + * importPhase(*xm, &dhphase); * @endcode + * *
* XML Example *
+ * * The phase model name for this is called StoichSubstance. It must be supplied * as the model attribute of the thermo XML element entry. * Within the phase XML block, @@ -339,36 +550,52 @@ namespace Cantera { * this phase is given below. * * @verbatim - - - - Na Cl - - NaCl(S) - - 2.165 - - - - - - - - - - Na:1 Cl:1 - - - - 50.72389, 6.672267, -2.517167, - 10.15934, -0.200675, -427.2115, - 130.3973 - - - - 2.165 - - @endverbatim + + + H2O(L) Na+ Cl- H+ OH- NaCl(aq) NaOH(aq) + + + 300 + 101325.0 + + Na+:3.0 + Cl-:3.0 + H+:1.0499E-8 + OH-:1.3765E-6 + NaCl(aq):0.98492 + NaOH(aq):3.8836E-6 + + + + + + + + 1.172576 + + 3.28640E9 + + + + H+:Cl-:0.27 + Na+:Cl-:0.15 + Na+:OH-:0.06 + + + NaCl(aq):-1.0 + + + H+:chargedSpecies + NaCl(aq):weakAcidAssociated + + + H2O(L) + + O H Na Cl + + @endverbatim * * The model attribute, "StoichSubstanceSSTP", on the thermo element identifies the phase as * being a StoichSubstanceSSTP object. @@ -984,6 +1211,9 @@ namespace Cantera { * class. It checks to see whether the temperature or pressure has changed and * thus the ss thermodynamics functions for all of the species * must be recalculated. + * + * @param pres Pressure at which to evaluate the standard states. + * The default, indicated by a -1.0, is to use the current pressure */ virtual void _updateStandardStateThermo(doublereal pres = -1.0) const; diff --git a/Cantera/src/thermo/IdealMolalSoln.h b/Cantera/src/thermo/IdealMolalSoln.h index 822266478..559a004c2 100644 --- a/Cantera/src/thermo/IdealMolalSoln.h +++ b/Cantera/src/thermo/IdealMolalSoln.h @@ -743,6 +743,9 @@ namespace Cantera { * * Note, this function doesn't really do anything. I just left it in as a template * for other situations which need a calculation at this level. + * + * @param pres Pressure at which to evaluate the standard states. + * The default, indicated by a -1.0, is to use the current pressure */ virtual void _updateStandardStateThermo(doublereal pres = -1.0) const; diff --git a/examples/cxx/Makefile.in b/examples/cxx/Makefile.in index 32e9e777f..ee49c15f8 100755 --- a/examples/cxx/Makefile.in +++ b/examples/cxx/Makefile.in @@ -83,7 +83,9 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libzeroD.a $(CXX) -o $(PROGRAM) $(OBJS) $(LCXX_FLAGS) $(CANTERA_LIBS) \ $(LINK_OPTIONS) $(EXT_LIBS) @LIBS@ \ $(LCXX_END_LIBS) -# $(FORT_LIBS) \ + +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libzeroD.a clean: $(RM) $(OBJS) $(PROGRAM) diff --git a/test_problems/ChemEquil_gri_matrix/Makefile.in b/test_problems/ChemEquil_gri_matrix/Makefile.in index 735e2b115..1a5ffb18b 100644 --- a/test_problems/ChemEquil_gri_matrix/Makefile.in +++ b/test_problems/ChemEquil_gri_matrix/Makefile.in @@ -83,6 +83,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + # depends target -> forces recalculation of dependencies depends: $(RM) *.d .depends @@ -108,3 +112,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + + diff --git a/test_problems/ChemEquil_gri_pairs/Makefile.in b/test_problems/ChemEquil_gri_pairs/Makefile.in index dd0332c16..02218ba47 100644 --- a/test_problems/ChemEquil_gri_pairs/Makefile.in +++ b/test_problems/ChemEquil_gri_pairs/Makefile.in @@ -83,6 +83,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + # depends target -> forces recalculation of dependencies depends: $(RM) *.d .depends @@ -108,3 +112,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + + diff --git a/test_problems/ChemEquil_ionizedGas/Makefile.in b/test_problems/ChemEquil_ionizedGas/Makefile.in index b8d77d8b9..a324d2e0c 100644 --- a/test_problems/ChemEquil_ionizedGas/Makefile.in +++ b/test_problems/ChemEquil_ionizedGas/Makefile.in @@ -83,6 +83,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + # depends target -> forces recalculation of dependencies depends: $(RM) *.d .depends @@ -108,3 +112,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/ChemEquil_red1/Makefile.in b/test_problems/ChemEquil_red1/Makefile.in index a6e0e229e..7796c3a59 100644 --- a/test_problems/ChemEquil_red1/Makefile.in +++ b/test_problems/ChemEquil_red1/Makefile.in @@ -83,6 +83,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) + +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + # depends target -> forces recalculation of dependencies depends: $(RM) *.d .depends @@ -108,3 +112,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/DH_graph_1/Makefile.in b/test_problems/cathermo/DH_graph_1/Makefile.in index 036a495fe..e362b2b88 100644 --- a/test_problems/cathermo/DH_graph_1/Makefile.in +++ b/test_problems/cathermo/DH_graph_1/Makefile.in @@ -72,6 +72,7 @@ LCXX_FLAGS = -L$(CANTERA_LIBDIR) @LOCAL_LIB_DIRS@ @CXXFLAGS@ .cpp.d: @CXX_DEPENDS@ $(INCLUDES) $(CXX_FLAGS) $*.cpp > $*.d + # List of dependency files to be created DEPENDS=$(OBJS:.o=.d) @@ -86,6 +87,9 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional dependency to enhance stability +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -110,3 +114,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/DH_graph_NM/Makefile.in b/test_problems/cathermo/DH_graph_NM/Makefile.in index 036a495fe..34e2aa57a 100644 --- a/test_problems/cathermo/DH_graph_NM/Makefile.in +++ b/test_problems/cathermo/DH_graph_NM/Makefile.in @@ -86,6 +86,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -110,3 +114,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/DH_graph_Pitzer/Makefile.in b/test_problems/cathermo/DH_graph_Pitzer/Makefile.in index 036a495fe..c528eb9d2 100644 --- a/test_problems/cathermo/DH_graph_Pitzer/Makefile.in +++ b/test_problems/cathermo/DH_graph_Pitzer/Makefile.in @@ -86,6 +86,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -110,3 +114,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + + diff --git a/test_problems/cathermo/DH_graph_acommon/Makefile.in b/test_problems/cathermo/DH_graph_acommon/Makefile.in index 036a495fe..f5461f9a3 100644 --- a/test_problems/cathermo/DH_graph_acommon/Makefile.in +++ b/test_problems/cathermo/DH_graph_acommon/Makefile.in @@ -86,6 +86,9 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -110,3 +113,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/DH_graph_bdotak/Makefile.in b/test_problems/cathermo/DH_graph_bdotak/Makefile.in index 036a495fe..11b863afd 100644 --- a/test_problems/cathermo/DH_graph_bdotak/Makefile.in +++ b/test_problems/cathermo/DH_graph_bdotak/Makefile.in @@ -86,6 +86,9 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -110,3 +113,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) + +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/HMW_graph_CpvT/Makefile.in b/test_problems/cathermo/HMW_graph_CpvT/Makefile.in index aad76411e..26099ca63 100644 --- a/test_problems/cathermo/HMW_graph_CpvT/Makefile.in +++ b/test_problems/cathermo/HMW_graph_CpvT/Makefile.in @@ -86,6 +86,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) + +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + Cp_standalone: Cp_standalone.o $(CXX) -o Cp_standalone Cp_standalone.o \ $(LCXX_FLAGS) $(LINK_OPTIONS) $(LCXX_END_LIBS) @@ -114,3 +118,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/HMW_graph_GvI/Makefile.in b/test_problems/cathermo/HMW_graph_GvI/Makefile.in index 32b506a29..3357041de 100644 --- a/test_problems/cathermo/HMW_graph_GvI/Makefile.in +++ b/test_problems/cathermo/HMW_graph_GvI/Makefile.in @@ -87,6 +87,9 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -111,3 +114,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/HMW_graph_GvT/Makefile.in b/test_problems/cathermo/HMW_graph_GvT/Makefile.in index 9185dbea3..3e4cfb26b 100644 --- a/test_problems/cathermo/HMW_graph_GvT/Makefile.in +++ b/test_problems/cathermo/HMW_graph_GvT/Makefile.in @@ -86,6 +86,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + Gex_standalone: Gex_standalone.o $(CXX) -o Gex_standalone Gex_standalone.o \ $(LCXX_FLAGS) $(LINK_OPTIONS) $(LCXX_END_LIBS) @@ -114,3 +118,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) + +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/HMW_graph_HvT/Makefile.in b/test_problems/cathermo/HMW_graph_HvT/Makefile.in index 1edc6d2bf..4eba8a2e1 100644 --- a/test_problems/cathermo/HMW_graph_HvT/Makefile.in +++ b/test_problems/cathermo/HMW_graph_HvT/Makefile.in @@ -86,6 +86,11 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) + +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + L_standalone: L_standalone.o $(CXX) -o L_standalone L_standalone.o \ $(LCXX_FLAGS) $(LINK_OPTIONS) $(LCXX_END_LIBS) @@ -114,3 +119,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/HMW_graph_VvT/Makefile.in b/test_problems/cathermo/HMW_graph_VvT/Makefile.in index 3b4b21156..23848ee58 100644 --- a/test_problems/cathermo/HMW_graph_VvT/Makefile.in +++ b/test_problems/cathermo/HMW_graph_VvT/Makefile.in @@ -86,6 +86,11 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) + +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + V_standalone: V_standalone.o $(CXX) -o V_standalone V_standalone.o \ $(LCXX_FLAGS) $(LINK_OPTIONS) $(LCXX_END_LIBS) @@ -114,3 +119,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) + +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/HMW_test_1/Makefile.in b/test_problems/cathermo/HMW_test_1/Makefile.in index 9ef9c8cc0..6608e3662 100644 --- a/test_problems/cathermo/HMW_test_1/Makefile.in +++ b/test_problems/cathermo/HMW_test_1/Makefile.in @@ -94,6 +94,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -118,3 +122,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/HMW_test_3/Makefile.in b/test_problems/cathermo/HMW_test_3/Makefile.in index 875070cba..837b86990 100644 --- a/test_problems/cathermo/HMW_test_3/Makefile.in +++ b/test_problems/cathermo/HMW_test_3/Makefile.in @@ -86,6 +86,9 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -110,3 +113,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/ims/Makefile.in b/test_problems/cathermo/ims/Makefile.in index ae3906b39..23cbecaea 100644 --- a/test_problems/cathermo/ims/Makefile.in +++ b/test_problems/cathermo/ims/Makefile.in @@ -86,6 +86,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -110,3 +114,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + + diff --git a/test_problems/cathermo/issp/Makefile.in b/test_problems/cathermo/issp/Makefile.in index 9c4cab9cd..3b7c59ae5 100644 --- a/test_problems/cathermo/issp/Makefile.in +++ b/test_problems/cathermo/issp/Makefile.in @@ -85,6 +85,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) + +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + # depends target -> forces recalculation of dependencies depends: $(RM) *.d .depends @@ -110,3 +114,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) + +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/stoichSubSSTP/Makefile.in b/test_problems/cathermo/stoichSubSSTP/Makefile.in index 3d9d463da..ccf2c6d75 100644 --- a/test_problems/cathermo/stoichSubSSTP/Makefile.in +++ b/test_problems/cathermo/stoichSubSSTP/Makefile.in @@ -86,6 +86,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -110,3 +114,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) + +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/testIAPWS/Makefile.in b/test_problems/cathermo/testIAPWS/Makefile.in index a7362abf9..1d7d67880 100755 --- a/test_problems/cathermo/testIAPWS/Makefile.in +++ b/test_problems/cathermo/testIAPWS/Makefile.in @@ -86,6 +86,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -110,3 +114,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + + diff --git a/test_problems/cathermo/testIAPWSPres/Makefile.in b/test_problems/cathermo/testIAPWSPres/Makefile.in index 50de6fae1..d51bf9b26 100755 --- a/test_problems/cathermo/testIAPWSPres/Makefile.in +++ b/test_problems/cathermo/testIAPWSPres/Makefile.in @@ -86,6 +86,9 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -110,3 +113,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/testIAPWSTripP/Makefile.in b/test_problems/cathermo/testIAPWSTripP/Makefile.in index ed593a84c..5d16fadc1 100755 --- a/test_problems/cathermo/testIAPWSTripP/Makefile.in +++ b/test_problems/cathermo/testIAPWSTripP/Makefile.in @@ -86,6 +86,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -110,3 +114,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/testWaterPDSS/Makefile.in b/test_problems/cathermo/testWaterPDSS/Makefile.in index 92a83eb14..f55ad44dc 100755 --- a/test_problems/cathermo/testWaterPDSS/Makefile.in +++ b/test_problems/cathermo/testWaterPDSS/Makefile.in @@ -86,6 +86,9 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -110,3 +113,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/cathermo/testWaterTP/Makefile.in b/test_problems/cathermo/testWaterTP/Makefile.in index c9a782ace..bb3ddb68a 100644 --- a/test_problems/cathermo/testWaterTP/Makefile.in +++ b/test_problems/cathermo/testWaterTP/Makefile.in @@ -86,6 +86,11 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a \ $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) + +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + # depends target -> forces recalculation of dependencies depends: @MAKE@ .depends @@ -110,3 +115,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) + +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/diamondSurf/Makefile.in b/test_problems/diamondSurf/Makefile.in index 2f58b3b1d..eff89f368 100644 --- a/test_problems/diamondSurf/Makefile.in +++ b/test_problems/diamondSurf/Makefile.in @@ -85,6 +85,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + # depends target depends: $(RM) *.d .depends @@ -111,3 +115,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + + diff --git a/test_problems/fracCoeff/Makefile.in b/test_problems/fracCoeff/Makefile.in index 815628cf2..9fddf9a10 100644 --- a/test_problems/fracCoeff/Makefile.in +++ b/test_problems/fracCoeff/Makefile.in @@ -85,6 +85,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) + +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + # depends target depends: $(RM) *.d .depends @@ -111,3 +115,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + + diff --git a/test_problems/negATest/Makefile.in b/test_problems/negATest/Makefile.in index 2e53ee1ec..2d7e26174 100644 --- a/test_problems/negATest/Makefile.in +++ b/test_problems/negATest/Makefile.in @@ -85,6 +85,9 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + # depends target depends: $(RM) *.d .depends @@ -111,3 +114,8 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) + +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/silane_equil/Makefile.in b/test_problems/silane_equil/Makefile.in index de4406ff5..e95ae1ada 100644 --- a/test_problems/silane_equil/Makefile.in +++ b/test_problems/silane_equil/Makefile.in @@ -83,6 +83,10 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + + # depends target -> forces recalculation of dependencies depends: $(RM) *.d .depends @@ -108,3 +112,7 @@ clean: $(RM) -rf SunWS_cache ; \ fi ) +ifeq ($(wildcard .depends), .depends) +include .depends +endif + diff --git a/test_problems/surfkin/Makefile.in b/test_problems/surfkin/Makefile.in index 6913e5ec9..40d6c87a4 100644 --- a/test_problems/surfkin/Makefile.in +++ b/test_problems/surfkin/Makefile.in @@ -82,7 +82,9 @@ $(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \ $(LCXX_END_LIBS) -$(OBJS): +# Add an additional target for stability: +$(OBJS): $(CANTERA_LIBDIR)/libcantera.a $(CANTERA_LIBDIR)/libcaThermo.a + depends: $(RM) *.d .depends @@ -109,3 +111,8 @@ clean: +ifeq ($(wildcard .depends), .depends) +include .depends +endif + + diff --git a/tools/doc/Cantera.cfg.in b/tools/doc/Cantera.cfg.in index b8e11c70b..5b11be233 100755 --- a/tools/doc/Cantera.cfg.in +++ b/tools/doc/Cantera.cfg.in @@ -116,7 +116,8 @@ FILE_PATTERNS = Kinetics.h Kinetics.cpp \ IdealMolalSoln.h IdealMolalSoln.cpp \ IdealSolidSolnPhase.h IdealSolidSolnPhase.cpp \ StoichSubstanceSSTP.h StoichSubstanceSSTP.cpp \ - DebyeHuckel.h DebyeHuckel.cpp + DebyeHuckel.h DebyeHuckel.cpp \ + ConstDensityThermo.h ConstDensityThermo.cpp RECURSIVE = NO EXCLUDE = CVS examples converters zeroD EXCLUDE_SYMLINKS = NO