Doxygen update:
Added info to DebyeHuckel. It's getting to be near a documented state. test suite fix: fixed Makefile.in's. The .depends were not being included in the Makefiles. It should now be more stable.
This commit is contained in:
parent
af38f45d1d
commit
51a5f82474
36 changed files with 1022 additions and 254 deletions
|
|
@ -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.
|
||||
/**
|
||||
*
|
||||
*
|
||||
* <b> Specification of Species Standard State Properties </b>
|
||||
*
|
||||
*
|
||||
* <b> Specification of Solution Thermodynamic Properties </b>
|
||||
*
|
||||
* The density is assumed to be constant, no matter what the concentration of the solution.
|
||||
*
|
||||
*
|
||||
* <b> Application within %Kinetics Managers </b>
|
||||
*
|
||||
*
|
||||
* <b> XML Example </b>
|
||||
*
|
||||
* 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 <I>T</I> and <I>P</I> 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 <I>T</I> and <I>P</I> 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 <I>T</I> and <I>P</I> 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 <I>T</I> and <I>P</I> 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 <I>T</I> and <I>P</I> 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 <I>T</I> and <I>P</I> 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
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
||||
//@}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -110,8 +110,9 @@ namespace Cantera {
|
|||
* spinodal curve.
|
||||
*
|
||||
* <HR>
|
||||
* <H1> Specification of Solution Thermodynamic Properties </H1>
|
||||
* <H2> Specification of Solution Thermodynamic Properties </H2>
|
||||
* <HR>
|
||||
*
|
||||
* 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.
|
||||
|
||||
*
|
||||
* <H3> Ionic Strength </H3>
|
||||
*
|
||||
* 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
|
||||
* <TT> stoichIsMods </TT> XML block, where the charge for k1 is also specified. An example is given below:
|
||||
*
|
||||
* @code
|
||||
* <stoichIsMods>
|
||||
* NaCl(aq):-1.0
|
||||
* </stoichIsMods>
|
||||
* @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:
|
||||
*
|
||||
* - <B>cEST_solvent</B> : Solvent species (neutral)
|
||||
* - <B>cEST_chargedSpecies</B> Charged species (charged)
|
||||
* - <B>cEST_weakAcidAssociated</B> 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.
|
||||
* - <B>cEST_strongAcidAssociated</B> Species which always breaksapart into charged species.
|
||||
* It may or may not be charged. Normally, these aren't included
|
||||
* in the speciation vector.
|
||||
* - <B>cEST_polarNeutral </B> Polar neutral species
|
||||
* - <B>cEST_nonpolarNeutral</B> 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 <TT>electrolyteSpeciesType</TT> 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 <TT>activityCoefficient</TT> XML block. An example is given below
|
||||
*
|
||||
* @code
|
||||
* <electrolyteSpeciesType>
|
||||
* H2L(L):solvent
|
||||
* H+:chargedSpecies
|
||||
* NaOH(aq):weakAcidAssociated
|
||||
* NaCl(aq):strongAcidAssociated
|
||||
* NH3(aq):polarNeutral
|
||||
* O2(aq):nonpolarNeutral
|
||||
* </electrolyteSpeciesType>
|
||||
* @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.
|
||||
*
|
||||
*
|
||||
* <H3> Debye-Huckel Dilute Limit </H3>
|
||||
*
|
||||
|
|
@ -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 <DFN> ionicRadius </DFN> XML block.
|
||||
*
|
||||
* The \f$ \beta_{j,k} \f$ parameters are binary interaction parameters. They are supplied to
|
||||
* the object in an <TT> DHBetaMatrix </TT> 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 <TT> activityCoefficients </TT> XML block for this formulation is supplied below
|
||||
*
|
||||
* @code
|
||||
* <activityCoefficients model="Beta_ij">
|
||||
* <!-- A_Debye units = sqrt(kg/gmol) -->
|
||||
* <A_Debye> 1.172576 </A_Debye>
|
||||
* <!-- B_Debye units = sqrt(kg/gmol)/m -->
|
||||
* <B_Debye> 3.28640E9 </B_Debye>
|
||||
* <ionicRadius default="3.042843" units="Angstroms">
|
||||
* </ionicRadius>
|
||||
* <DHBetaMatrix>
|
||||
* H+:Cl-:0.27
|
||||
* Na+:Cl-:0.15
|
||||
* Na+:OH-:0.06
|
||||
* </DHBetaMatrix>
|
||||
* <stoichIsMods>
|
||||
* NaCl(aq):-1.0
|
||||
* </stoichIsMods>
|
||||
* <electrolyteSpeciesType>
|
||||
* H+:chargedSpecies
|
||||
* NaCl(aq):weakAcidAssociated
|
||||
* </electrolyteSpeciesType>
|
||||
* </activityCoefficients>
|
||||
* @endcode
|
||||
*
|
||||
* <H3> Pitzer Beta_IJ formulation </H3>
|
||||
*
|
||||
|
|
@ -255,9 +384,79 @@ namespace Cantera {
|
|||
* - \tilde{M}_o \sum_j \sum_k \beta_{j,k} m_j m_k
|
||||
* \f]
|
||||
*
|
||||
* <H3> Specification of the Debye Huckel Constants </H3>
|
||||
*
|
||||
* 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 <I>T</I> and <I>P</I>.
|
||||
*
|
||||
* \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)<SUP>1/2</SUP>
|
||||
* based on:
|
||||
* - \f$ \epsilon / \epsilon_0 \f$ = 78.54
|
||||
* (water at 25C)
|
||||
* - \f$ \epsilon_0 \f$= 8.854187817E-12 C<SUP>2</SUP> N<SUP>-1</SUP> m<SUP>-2</SUP>
|
||||
* - e = 1.60217653E-19 C
|
||||
* - F = 9.6485309E7 C kmol<SUP>-1</SUP>
|
||||
* - R = 8.314472E3 kg m<SUP>2</SUP> s<SUP>-2</SUP> kmol<SUP>-1</SUP> K<SUP>-1</SUP>
|
||||
* - T = 298.15 K
|
||||
* - B_Debye = 3.28640E9 (kg/gmol)<SUP>1/2</SUP> m<SUP>-1</SUP>
|
||||
* - \f$N_a\f$ = 6.0221415E26 kmol<SUP>-1</SUP>
|
||||
*
|
||||
* An example of a fixed value implementation is given below.
|
||||
* @code
|
||||
* <activityCoefficients model="Beta_ij">
|
||||
* <!-- A_Debye units = sqrt(kg/gmol) -->
|
||||
* <A_Debye> 1.172576 </A_Debye>
|
||||
* <!-- B_Debye units = sqrt(kg/gmol)/m -->
|
||||
* <B_Debye> 3.28640E9 </B_Debye>
|
||||
* </activityCoefficients>
|
||||
* @endcode
|
||||
*
|
||||
* An example of a variable value implementation is given below.
|
||||
*
|
||||
* @code
|
||||
* <activityCoefficients model="Beta_ij">
|
||||
* <A_Debye model="water" />
|
||||
* <!-- B_Debye units = sqrt(kg/gmol)/m -->
|
||||
* <B_Debye> 3.28640E9 </B_Debye>
|
||||
* </activityCoefficients>
|
||||
* @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.
|
||||
*
|
||||
*
|
||||
* <HR>
|
||||
* <b> %Application within %Kinetics Managers </b>
|
||||
* <H2> %Application within %Kinetics Managers </H2>
|
||||
* <HR>
|
||||
* 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 {
|
|||
* <HR>
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* <HR>
|
||||
* <b> XML Example </b>
|
||||
* <HR>
|
||||
*
|
||||
* 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
|
||||
<!-- phase NaCl(S) -->
|
||||
<phase dim="3" id="NaCl(S)">
|
||||
<elementArray datasrc="elements.xml">
|
||||
Na Cl
|
||||
</elementArray>
|
||||
<speciesArray datasrc="#species_NaCl(S)"> NaCl(S) </speciesArray>
|
||||
<thermo model="StoichSubstanceSSTP">
|
||||
<density units="g/cm3">2.165</density>
|
||||
</thermo>
|
||||
<transport model="None"/>
|
||||
<kinetics model="none"/>
|
||||
</phase>
|
||||
|
||||
<!-- species definitions -->
|
||||
<speciesData id="species_NaCl(S)">
|
||||
<!-- species NaCl(S) -->
|
||||
<species name="NaCl(S)">
|
||||
<atomArray> Na:1 Cl:1 </atomArray>
|
||||
<thermo>
|
||||
<Shomate Pref="1 bar" Tmax="1075.0" Tmin="250.0">
|
||||
<floatArray size="7">
|
||||
50.72389, 6.672267, -2.517167,
|
||||
10.15934, -0.200675, -427.2115,
|
||||
130.3973
|
||||
</floatArray>
|
||||
</Shomate>
|
||||
</thermo>
|
||||
<density units="g/cm3">2.165</density>
|
||||
</species>
|
||||
</speciesData> @endverbatim
|
||||
<phase id="NaCl_electrolyte" dim="3">
|
||||
<speciesArray datasrc="#species_waterSolution">
|
||||
H2O(L) Na+ Cl- H+ OH- NaCl(aq) NaOH(aq)
|
||||
</speciesArray>
|
||||
<state>
|
||||
<temperature units="K"> 300 </temperature>
|
||||
<pressure units="Pa">101325.0</pressure>
|
||||
<soluteMolalities>
|
||||
Na+:3.0
|
||||
Cl-:3.0
|
||||
H+:1.0499E-8
|
||||
OH-:1.3765E-6
|
||||
NaCl(aq):0.98492
|
||||
NaOH(aq):3.8836E-6
|
||||
</soluteMolalities>
|
||||
</state>
|
||||
<!-- thermo model identifies the inherited class
|
||||
from ThermoPhase that will handle the thermodynamics.
|
||||
-->
|
||||
<thermo model="DebyeHuckel">
|
||||
<standardConc model="solvent_volume" />
|
||||
<activityCoefficients model="Beta_ij">
|
||||
<!-- A_Debye units = sqrt(kg/gmol) -->
|
||||
<A_Debye> 1.172576 </A_Debye>
|
||||
<!-- B_Debye units = sqrt(kg/gmol)/m -->
|
||||
<B_Debye> 3.28640E9 </B_Debye>
|
||||
<ionicRadius default="3.042843" units="Angstroms">
|
||||
</ionicRadius>
|
||||
<DHBetaMatrix>
|
||||
H+:Cl-:0.27
|
||||
Na+:Cl-:0.15
|
||||
Na+:OH-:0.06
|
||||
</DHBetaMatrix>
|
||||
<stoichIsMods>
|
||||
NaCl(aq):-1.0
|
||||
</stoichIsMods>
|
||||
<electrolyteSpeciesType>
|
||||
H+:chargedSpecies
|
||||
NaCl(aq):weakAcidAssociated
|
||||
</electrolyteSpeciesType>
|
||||
</activityCoefficients>
|
||||
<solvent> H2O(L) </solvent>
|
||||
</thermo>
|
||||
<elementArray datasrc="elements.xml"> O H Na Cl </elementArray>
|
||||
</phase>
|
||||
@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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue