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
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
LangmuirHinshelwoodReactionRateI.H
@ -58,29 +65,24 @@ class LangmuirHinshelwoodReactionRate
{
// 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 Ta_[n_];
label co_;
label c3h6_;
label no_;
//- Index of specie "A"
label a_;
//- Index of specie "B"
label b_;
public:
// Constructors
//- Construct from components
inline LangmuirHinshelwoodReactionRate
(
const scalar A[],
const scalar Ta[],
const label co,
const label c3h6,
const label no
);
//- Construct from dictionary
inline LangmuirHinshelwoodReactionRate
(

View File

@ -28,38 +28,17 @@ License
// * * * * * * * * * * * * * * * * 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
(
const speciesTable& st,
const dictionary& dict
)
:
co_(st["CO"]),
c3h6_(st["C3H6"]),
no_(st["NO"])
species_(st),
a_(st["A"]),
b_(st["B"])
{
// read (A, Ta) pairs
// Read (A, Ta) pairs
FixedList<Tuple2<scalar, scalar>, n_> coeffs(dict.lookup("coeffs"));
forAll(coeffs, i)
@ -81,10 +60,7 @@ inline Foam::scalar Foam::LangmuirHinshelwoodReactionRate::operator()
{
return A_[0]*exp(-Ta_[0]/T)/
(
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_]))
*(1 + A_[4]*exp(-Ta_[4]/T)*pow(c[no_], 0.7))
T*sqr(1 + A_[1]*exp(-Ta_[1]/T)*c[a_] + A_[2]*exp(-Ta_[2]/T)*c[b_])
);
}
@ -96,36 +72,20 @@ inline Foam::scalar Foam::LangmuirHinshelwoodReactionRate::ddT
const scalarField& c
) const
{
scalar den =
const scalar den =
(
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_]))
*(1 + A_[4]*exp(-Ta_[4]/T)*pow(c[no_], 0.7))
T*sqr(1 + A_[1]*exp(-Ta_[1]/T)*c[a_] + A_[2]*exp(-Ta_[2]/T)*c[b_])
);
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_])
*(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))
+ 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[co_]*Ta_[1]/sqr(T)
+ A_[2]*exp(-Ta_[2]/T)*c[c3h6_]*Ta_[2]/sqr(T)
sqr(1 + A_[1]*exp(-Ta_[1]/T)*c[a_] + A_[2]*exp(-Ta_[2]/T)*c[b_])
+ 2*T*(1 + A_[1]*exp(-Ta_[1]/T)*c[a_] + A_[2]*exp(-Ta_[2]/T)*c[b_])
*(
A_[1]*exp(-Ta_[1]/T)*c[a_]*Ta_[1]/sqr(T)
+ A_[2]*exp(-Ta_[2]/T)*c[b_]*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);
@ -162,6 +122,9 @@ inline Foam::scalar Foam::LangmuirHinshelwoodReactionRate::dcidT
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;
forAll(coeffs, i)

View File

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