LangmuirHinshelwoodReactionRate: corrected, rationalized and generalized

to an arbitrary pair of reacting species.

Description
    Langmuir-Hinshelwood reaction rate for gaseous reactions on surfaces.

    Reference:
    \verbatim
        Hinshelwood, C.N. (1940).
        The Kinetics of Chemical Change.
        Oxford Clarendon Press
    \endverbatim
This commit is contained in:
Henry Weller
2018-07-12 18:16:22 +01:00
parent bc1a536c1e
commit 669935efd6
3 changed files with 35 additions and 70 deletions

View File

@ -25,7 +25,14 @@ Class
Foam::LangmuirHinshelwoodReactionRate Foam::LangmuirHinshelwoodReactionRate
Description Description
Power series reaction rate. Langmuir-Hinshelwood reaction rate for gaseous reactions on surfaces.
Reference:
\verbatim
Hinshelwood, C.N. (1940).
The Kinetics of Chemical Change.
Oxford Clarendon Press
\endverbatim
SourceFiles SourceFiles
LangmuirHinshelwoodReactionRateI.H LangmuirHinshelwoodReactionRateI.H
@ -58,29 +65,24 @@ class LangmuirHinshelwoodReactionRate
{ {
// Private data // Private data
static const label n_ = 5; //- List of species present in reaction system
const speciesTable& species_;
static const label n_ = 3;
scalar A_[n_]; scalar A_[n_];
scalar Ta_[n_]; scalar Ta_[n_];
label co_; //- Index of specie "A"
label c3h6_; label a_;
label no_;
//- Index of specie "B"
label b_;
public: public:
// Constructors // Constructors
//- Construct from components
inline LangmuirHinshelwoodReactionRate
(
const scalar A[],
const scalar Ta[],
const label co,
const label c3h6,
const label no
);
//- Construct from dictionary //- Construct from dictionary
inline LangmuirHinshelwoodReactionRate inline LangmuirHinshelwoodReactionRate
( (

View File

@ -28,38 +28,17 @@ License
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
inline Foam::LangmuirHinshelwoodReactionRate::LangmuirHinshelwoodReactionRate
(
const scalar A[],
const scalar Ta[],
const label co,
const label c3h6,
const label no
)
:
co_(co),
c3h6_(c3h6),
no_(no)
{
for (int i=0; i<n_; i++)
{
A_[i] = A[i];
Ta_[i] = Ta[i];
}
}
inline Foam::LangmuirHinshelwoodReactionRate::LangmuirHinshelwoodReactionRate inline Foam::LangmuirHinshelwoodReactionRate::LangmuirHinshelwoodReactionRate
( (
const speciesTable& st, const speciesTable& st,
const dictionary& dict const dictionary& dict
) )
: :
co_(st["CO"]), species_(st),
c3h6_(st["C3H6"]), a_(st["A"]),
no_(st["NO"]) b_(st["B"])
{ {
// read (A, Ta) pairs // Read (A, Ta) pairs
FixedList<Tuple2<scalar, scalar>, n_> coeffs(dict.lookup("coeffs")); FixedList<Tuple2<scalar, scalar>, n_> coeffs(dict.lookup("coeffs"));
forAll(coeffs, i) forAll(coeffs, i)
@ -81,10 +60,7 @@ inline Foam::scalar Foam::LangmuirHinshelwoodReactionRate::operator()
{ {
return A_[0]*exp(-Ta_[0]/T)/ return A_[0]*exp(-Ta_[0]/T)/
( (
T T*sqr(1 + A_[1]*exp(-Ta_[1]/T)*c[a_] + A_[2]*exp(-Ta_[2]/T)*c[b_])
*sqr(1 + A_[1]*exp(-Ta_[1]/T)*c[co_] + A_[2]*exp(-Ta_[2]/T)*c[c3h6_])
*(1 + A_[3]*exp(-Ta_[3]/T)*sqr(c[co_])*sqr(c[c3h6_]))
*(1 + A_[4]*exp(-Ta_[4]/T)*pow(c[no_], 0.7))
); );
} }
@ -96,36 +72,20 @@ inline Foam::scalar Foam::LangmuirHinshelwoodReactionRate::ddT
const scalarField& c const scalarField& c
) const ) const
{ {
scalar den = const scalar den =
( (
T T*sqr(1 + A_[1]*exp(-Ta_[1]/T)*c[a_] + A_[2]*exp(-Ta_[2]/T)*c[b_])
*sqr(1 + A_[1]*exp(-Ta_[1]/T)*c[co_] + A_[2]*exp(-Ta_[2]/T)*c[c3h6_])
*(1 + A_[3]*exp(-Ta_[3]/T)*sqr(c[co_])*sqr(c[c3h6_]))
*(1 + A_[4]*exp(-Ta_[4]/T)*pow(c[no_], 0.7))
); );
scalar rate = A_[0]*exp(-Ta_[0]/T)/ den; const scalar rate = A_[0]*exp(-Ta_[0]/T)/den;
scalar derivDen = const scalar derivDen =
( (
sqr(1 + A_[1]*exp(-Ta_[1]/T)*c[co_] + A_[2]*exp(-Ta_[2]/T)*c[c3h6_]) sqr(1 + A_[1]*exp(-Ta_[1]/T)*c[a_] + A_[2]*exp(-Ta_[2]/T)*c[b_])
*(1 + A_[3]*exp(-Ta_[3]/T)*sqr(c[co_])*sqr(c[c3h6_])) + 2*T*(1 + A_[1]*exp(-Ta_[1]/T)*c[a_] + A_[2]*exp(-Ta_[2]/T)*c[b_])
*(1 + A_[4]*exp(-Ta_[4]/T)*pow(c[no_], 0.7)) *(
+ 2*T*(1 + A_[1]*exp(-Ta_[1]/T)*c[co_] + A_[2]*exp(-Ta_[2]/T)*c[c3h6_]) A_[1]*exp(-Ta_[1]/T)*c[a_]*Ta_[1]/sqr(T)
* + A_[2]*exp(-Ta_[2]/T)*c[b_]*Ta_[2]/sqr(T)
(
A_[1]*exp(-Ta_[1]/T)*c[co_]*Ta_[1]/sqr(T)
+ A_[2]*exp(-Ta_[2]/T)*c[c3h6_]*Ta_[2]/sqr(T)
) )
*(1 + A_[3]*exp(-Ta_[3]/T)*sqr(c[co_])*sqr(c[c3h6_]))
*(1 + A_[4]*exp(-Ta_[4]/T)*pow(c[no_], 0.7))
+ T
*sqr(1 + A_[1]*exp(-Ta_[1]/T)*c[co_] + A_[2]*exp(-Ta_[2]/T)*c[c3h6_])
*(A_[3]*exp(-Ta_[3]/T)*Ta_[3]*sqr(c[co_])*sqr(c[c3h6_])/sqr(T))
*(1 + A_[4]*exp(-Ta_[4]/T)*pow(c[no_], 0.7))
+ T
*sqr(1 + A_[1]*exp(-Ta_[1]/T)*c[co_] + A_[2]*exp(-Ta_[2]/T)*c[c3h6_])
*(1 + A_[3]*exp(-Ta_[3]/T)*sqr(c[co_])*sqr(c[c3h6_]))
*(A_[4]*exp(-Ta_[4]/T)*Ta_[4]*pow(c[no_], 0.7))/sqr(T)
); );
return rate*(Ta_[0]/sqr(T) - derivDen/den); return rate*(Ta_[0]/sqr(T) - derivDen/den);
@ -162,6 +122,9 @@ inline Foam::scalar Foam::LangmuirHinshelwoodReactionRate::dcidT
inline void Foam::LangmuirHinshelwoodReactionRate::write(Ostream& os) const inline void Foam::LangmuirHinshelwoodReactionRate::write(Ostream& os) const
{ {
os.writeKeyword("A") << species_[a_] << token::END_STATEMENT << nl;
os.writeKeyword("B") << species_[b_] << token::END_STATEMENT << nl;
FixedList<Tuple2<scalar, scalar>, n_> coeffs; FixedList<Tuple2<scalar, scalar>, n_> coeffs;
forAll(coeffs, i) forAll(coeffs, i)

View File

@ -64,7 +64,7 @@ class MichaelisMentenReactionRate
{ {
// Private data // Private data
//- List of specie names present in reaction system //- List of species present in reaction system
const speciesTable& species_; const speciesTable& species_;
//- The maximum reaction rate at saturating substrate concentration //- The maximum reaction rate at saturating substrate concentration