Added methods to InterfaceKinetics to get effective rate parameters

Effective rate parameters are used in SurfaceArrhenius reactions.

Resolves #297.
This commit is contained in:
imitrichev 2015-10-14 15:15:42 +04:00 committed by Ray Speth
parent 02fc127c13
commit 40e09043bc
4 changed files with 93 additions and 2 deletions

View file

@ -161,6 +161,43 @@ public:
virtual void getRevRateConstants(doublereal* krev,
bool doIrreversible = false);
//! Return effective preexponent for the specified reaction
/*!
* Returns effective preexponent, accounting for surface coverage
* dependencies.
*
* @param irxn Reaction number in the kinetics mechanism
* @return Effective preexponent
*/
double effectivePreExponentialFactor(size_t irxn) {
return m_rates.effectivePreExponentialFactor(irxn);
}
//! Return effective activation energy for the specified reaction
/*!
* Returns effective activation energy, accounting for surface coverage
* dependencies.
*
* @param irxn Reaction number in the kinetics mechanism
* @return Effective activation energy divided by the gas constant
*/
double effectiveActivationEnergy_R(size_t irxn) {
return m_rates.effectiveActivationEnergy_R(irxn);
}
//! Return effective temperature exponent for the specified reaction
/*!
* Returns effective temperature exponenty, accounting for surface coverage
* dependencies. Current parameterization in SurfaceArrhenius does not
* change this parameter with the change in surface coverages.
*
* @param irxn Reaction number in the kinetics mechanism
* @return Effective temperature exponent
*/
double effectiveTemperatureExponent(size_t irxn) {
return m_rates.effectiveTemperatureExponent(irxn);
}
//! @}
//! @name Reaction Mechanism Construction
//! @{

View file

@ -75,6 +75,44 @@ public:
return m_rates.size();
}
//! Return effective preexponent for the specified reaction.
/*!
* Returns effective preexponent, accounting for surface coverage
* dependencies. Used in InterfaceKinetics.
*
* @param irxn Reaction number in the kinetics mechanism
* @return Effective preexponent
*/
double effectivePreExponentialFactor(size_t irxn) {
return m_rates[irxn].preExponentialFactor();
}
//! Return effective activation energy for the specified reaction.
/*!
* Returns effective activation energy, accounting for surface coverage
* dependencies. Used in InterfaceKinetics.
*
* @param irxn Reaction number in the kinetics mechanism
* @return Effective activation energy divided by the gas constant
*/
double effectiveActivationEnergy_R(size_t irxn) {
return m_rates[irxn].activationEnergy_R();
}
//! Return effective temperature exponent for the specified reaction.
/*!
* Returns effective temperature exponent, accounting for surface coverage
* dependencies. Used in InterfaceKinetics. Current parameterization in
* SurfaceArrhenius does not change this parameter with the change in
* surface coverages.
*
* @param irxn Reaction number in the kinetics mechanism
* @return Effective temperature exponent
*/
double effectiveTemperatureExponent(size_t irxn) {
return m_rates[irxn].temperatureExponent();
}
protected:
std::vector<R> m_rates;
std::vector<size_t> m_rxn;

View file

@ -118,7 +118,7 @@ public:
explicit SurfaceArrhenius(double A, double b, double Ta);
//! Add a coverage dependency for species *k*, with pre-exponential
//! dependence *a*, temperature exponent dependence *m* and activation
//! dependence *a*, rate constant exponential dependency *m*, and activation
//! energy dependence *e*, where *e* is in Kelvin, i.e. energy divided by
//! the molar gas constant.
void addCoverageDependence(size_t k, doublereal a,
@ -153,6 +153,22 @@ public:
(m_E + m_ecov)*recipT + m_mcov);
}
//! Return the pre-exponential factor *A* (in m, kmol, s to powers depending
//! on the reaction order) accounting coverage dependence.
/*!
* Returns reaction prexponent accounting for both *a* and *m*.
*/
doublereal preExponentialFactor() const {
return m_A * std::exp(std::log(10.0)*m_acov + m_mcov);
}
//! Return effective temperature exponent
doublereal temperatureExponent() const {
return m_b;
}
//! Return the activation energy divided by the gas constant (i.e. the
//! activation temperature) [K], accounting coverage dependence.
doublereal activationEnergy_R() const {
return m_E + m_ecov;
}

View file

@ -21,7 +21,7 @@ Arrhenius::Arrhenius(doublereal A, doublereal b, doublereal E)
if (m_A <= 0.0) {
m_logA = -1.0E300;
} else {
m_logA = log(m_A);
m_logA = std::log(m_A);
}
}