249 lines
7.2 KiB
C++
249 lines
7.2 KiB
C++
#ifndef CT_FALLOFF_H
|
|
#define CT_FALLOFF_H
|
|
|
|
#include "cantera/kinetics/reaction_defs.h"
|
|
|
|
namespace Cantera
|
|
{
|
|
|
|
/**
|
|
* @defgroup falloffGroup Falloff Parameterizations This section describes the
|
|
* parameterizations used to describe the fall-off in reaction rate constants
|
|
* due to intermolecular energy transfer.
|
|
* @ingroup chemkinetics
|
|
*/
|
|
|
|
/**
|
|
* Base class for falloff function calculators. Each instance of a subclass of
|
|
* Falloff computes one falloff function. This base class implements the
|
|
* trivial falloff function F = 1.0.
|
|
*
|
|
* @ingroup falloffGroup
|
|
*/
|
|
class Falloff
|
|
{
|
|
public:
|
|
Falloff() {}
|
|
virtual ~Falloff() {}
|
|
|
|
/**
|
|
* Initialize. Must be called before any other method is invoked.
|
|
*
|
|
* @param c Vector of coefficients of the parameterization. The number and
|
|
* meaning of these coefficients is subclass-dependent.
|
|
*/
|
|
virtual void init(const vector_fp& c);
|
|
|
|
/**
|
|
* Update the temperature-dependent portions of the falloff function, if
|
|
* any, and store them in the 'work' array. If not overloaded, the default
|
|
* behavior is to do nothing.
|
|
* @param T Temperature [K].
|
|
* @param work storage space for intermediate results.
|
|
*/
|
|
virtual void updateTemp(doublereal T, doublereal* work) const {}
|
|
|
|
/**
|
|
* The falloff function. This is defined so that the rate coefficient is
|
|
*
|
|
* \f[ k = F(Pr)\frac{Pr}{1 + Pr}. \f]
|
|
*
|
|
* Here \f$ Pr \f$ is the reduced pressure, defined by
|
|
*
|
|
* \f[
|
|
* Pr = \frac{k_0 [M]}{k_\infty}.
|
|
* \f]
|
|
*
|
|
* @param pr reduced pressure (dimensionless).
|
|
* @param work array of size workSize() containing cached
|
|
* temperature-dependent intermediate results from a prior call
|
|
* to updateTemp.
|
|
*
|
|
* @return Returns the value of the falloff function \f$ F \f$ defined above
|
|
*/
|
|
virtual doublereal F(doublereal pr, const doublereal* work) const {
|
|
return 1.0;
|
|
}
|
|
|
|
//! The size of the work array required.
|
|
virtual size_t workSize() {
|
|
return 0;
|
|
}
|
|
|
|
//! Return an integer representing the type of the Falloff parameterization.
|
|
virtual int getType() const {
|
|
return SIMPLE_FALLOFF;
|
|
}
|
|
|
|
//! Returns the number of parameters used by this parameterization. The
|
|
//! values of these parameters can be obtained from getParameters().
|
|
virtual size_t nParameters() const {
|
|
return 0;
|
|
}
|
|
|
|
//! Get the values of the parameters for this object. *params* must be an
|
|
//! array of at least nParameters() elements.
|
|
virtual void getParameters(double* params) const {}
|
|
};
|
|
|
|
|
|
//! The 3- or 4-parameter Troe falloff parameterization.
|
|
/*!
|
|
* The falloff function defines the value of \f$ F \f$ in the following
|
|
* rate expression
|
|
*
|
|
* \f[ k = k_{\infty} \left( \frac{P_r}{1 + P_r} \right) F \f]
|
|
* where
|
|
* \f[ P_r = \frac{k_0 [M]}{k_{\infty}} \f]
|
|
*
|
|
* This parameterization is defined by
|
|
*
|
|
* \f[ F = F_{cent}^{1/(1 + f_1^2)} \f]
|
|
* where
|
|
* \f[ F_{cent} = (1 - A)\exp(-T/T_3) + A \exp(-T/T_1) + \exp(-T_2/T) \f]
|
|
*
|
|
* \f[ f_1 = (\log_{10} P_r + C) /
|
|
* \left(N - 0.14 (\log_{10} P_r + C)\right) \f]
|
|
*
|
|
* \f[ C = -0.4 - 0.67 \log_{10} F_{cent} \f]
|
|
*
|
|
* \f[ N = 0.75 - 1.27 \log_{10} F_{cent} \f]
|
|
*
|
|
* - If \f$ T_3 \f$ is zero, then the corresponding term is set to zero.
|
|
* - If \f$ T_1 \f$ is zero, then the corresponding term is set to zero.
|
|
* - If \f$ T_2 \f$ is zero, then the corresponding term is set to zero.
|
|
*
|
|
* @ingroup falloffGroup
|
|
*/
|
|
class Troe : public Falloff
|
|
{
|
|
public:
|
|
//! Constructor
|
|
Troe() : m_a(0.0), m_rt3(0.0), m_rt1(0.0), m_t2(0.0) {}
|
|
|
|
//! Initialization of the object
|
|
/*!
|
|
* @param c Vector of three or four doubles: The doubles are the parameters,
|
|
* a, T_3, T_1, and (optionally) T_2 of the Troe parameterization
|
|
*/
|
|
virtual void init(const vector_fp& c);
|
|
|
|
//! Update the temperature parameters in the representation
|
|
/*!
|
|
* @param T Temperature (Kelvin)
|
|
* @param work Vector of working space, length 1, representing the
|
|
* temperature-dependent part of the parameterization.
|
|
*/
|
|
virtual void updateTemp(doublereal T, doublereal* work) const;
|
|
|
|
virtual doublereal F(doublereal pr, const doublereal* work) const;
|
|
|
|
virtual size_t workSize() {
|
|
return 1;
|
|
}
|
|
|
|
virtual int getType() const {
|
|
return TROE_FALLOFF;
|
|
}
|
|
|
|
virtual size_t nParameters() const {
|
|
return 4;
|
|
}
|
|
|
|
//! Sets params to contain, in order, \f[ (A, T_3, T_1, T_2) \f]
|
|
virtual void getParameters(double* params) const;
|
|
|
|
protected:
|
|
//! parameter a in the 4-parameter Troe falloff function. Dimensionless
|
|
doublereal m_a;
|
|
|
|
//! parameter 1/T_3 in the 4-parameter Troe falloff function. [K^-1]
|
|
doublereal m_rt3;
|
|
|
|
//! parameter 1/T_1 in the 4-parameter Troe falloff function. [K^-1]
|
|
doublereal m_rt1;
|
|
|
|
//! parameter T_2 in the 4-parameter Troe falloff function. [K]
|
|
doublereal m_t2;
|
|
};
|
|
|
|
//! The SRI falloff function
|
|
/*!
|
|
* The falloff function defines the value of \f$ F \f$ in the following
|
|
* rate expression
|
|
*
|
|
* \f[ k = k_{\infty} \left( \frac{P_r}{1 + P_r} \right) F \f]
|
|
* where
|
|
* \f[ P_r = \frac{k_0 [M]}{k_{\infty}} \f]
|
|
*
|
|
* \f[ F = {\left( a \; exp(\frac{-b}{T}) + exp(\frac{-T}{c})\right)}^n
|
|
* \; d \; exp(\frac{-e}{T}) \f]
|
|
* where
|
|
* \f[ n = \frac{1.0}{1.0 + {\log_{10} P_r}^2} \f]
|
|
*
|
|
* \f$ c \f$ s required to greater than or equal to zero. If it is zero, then
|
|
* the corresponding term is set to zero.
|
|
*
|
|
* \f$ d \f$ is required to be greater than zero.
|
|
*
|
|
* @ingroup falloffGroup
|
|
*/
|
|
class SRI : public Falloff
|
|
{
|
|
public:
|
|
//! Constructor
|
|
SRI() : m_a(-1.0), m_b(-1.0), m_c(-1.0), m_d(-1.0), m_e(-1.0) {}
|
|
|
|
//! Initialization of the object
|
|
/*!
|
|
* @param c Vector of three or five doubles: The doubles are the parameters,
|
|
* a, b, c, d (optional; default 1.0), and e (optional; default
|
|
* 0.0) of the SRI parameterization
|
|
*/
|
|
virtual void init(const vector_fp& c);
|
|
|
|
//! Update the temperature parameters in the representation
|
|
/*!
|
|
* @param T Temperature (Kelvin)
|
|
* @param work Vector of working space, length 2, representing the
|
|
* temperature-dependent part of the parameterization.
|
|
*/
|
|
virtual void updateTemp(doublereal T, doublereal* work) const;
|
|
|
|
virtual doublereal F(doublereal pr, const doublereal* work) const;
|
|
|
|
virtual size_t workSize() {
|
|
return 2;
|
|
}
|
|
|
|
virtual int getType() const {
|
|
return SRI_FALLOFF;
|
|
}
|
|
|
|
virtual size_t nParameters() const {
|
|
return 5;
|
|
}
|
|
|
|
//! Sets params to contain, in order, \f[ (a, b, c, d, e) \f]
|
|
virtual void getParameters(double* params) const;
|
|
|
|
protected:
|
|
//! parameter a in the 5-parameter SRI falloff function. Dimensionless.
|
|
doublereal m_a;
|
|
|
|
//! parameter b in the 5-parameter SRI falloff function. [K]
|
|
doublereal m_b;
|
|
|
|
//! parameter c in the 5-parameter SRI falloff function. [K]
|
|
doublereal m_c;
|
|
|
|
//! parameter d in the 5-parameter SRI falloff function. Dimensionless.
|
|
doublereal m_d;
|
|
|
|
//! parameter d in the 5-parameter SRI falloff function. Dimensionless.
|
|
doublereal m_e;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|