From charlesreid1

No edit summary
No edit summary
Line 3: Line 3:
=Reaction Specification=
=Reaction Specification=


==Gas Reactions==
=Gas Reactions=


An example gas reaction CTI file is located at <code>cantera/data/inputs/h2o2.cti</code>.
An example gas reaction CTI file is located at <code>cantera/data/inputs/h2o2.cti</code>.
Line 15: Line 15:
where <math>\nu_{ij}</math> is the stoichiometric coefficient for species i in reaction j, <math>c_i</math> is the molar concentration of species i, and <math>n_{ij}</math> is the order of reaction j with respect to species i.
where <math>\nu_{ij}</math> is the stoichiometric coefficient for species i in reaction j, <math>c_i</math> is the molar concentration of species i, and <math>n_{ij}</math> is the order of reaction j with respect to species i.


===Arrhenius Gas Kinetics===
==Arrhenius Gas Kinetics==


The standard way to model reaction kinetics in the gas phase is to use Arrhenius kinetics. This models the reaction rate constant <math>k_j</math> as:
The standard way to model reaction kinetics in the gas phase is to use Arrhenius kinetics. This models the reaction rate constant <math>k_j</math> as:
Line 39: Line 39:
* <math>E_j</math> - specified in units of <math>\frac{ \text{cal} }{ \text{mol} }</math>
* <math>E_j</math> - specified in units of <math>\frac{ \text{cal} }{ \text{mol} }</math>


====Arrhenius Gas Kinetics Example====
===Arrhenius Gas Kinetics Example===


'''Example:'''
'''Example:'''
Line 69: Line 69:
</pre>
</pre>


====Arrhenius Gas Kinetics Code====
===Arrhenius Gas Kinetics Code===


More information on what blocks of code process this stuff from the CTI file.
More information on what blocks of code process this stuff from the CTI file.


===Three-Body Gas Reactions===
==Three-Body Gas Reactions==


A three body gas reaction is... I don't know.
A three body gas reaction is... I don't know.
Line 82: Line 82:
</pre>
</pre>


====Three Body Gas Reactions Example====
===Three Body Gas Reactions Example===


It would help if I could figure out what this reaction type is, before putting together an example.
It would help if I could figure out what this reaction type is, before putting together an example.


====Three Body Gas Reactions Code====
===Three Body Gas Reactions Code===


When Cantera processes a CTI file, it determines what kind of kinetics object to use. If the kinetics is for a gas phase, the object is a GasKinetics object. The GasKinetics object has a <code>GasKinetics::addReaction()</code> method, which is run for each reaction in the CTI file:
When Cantera processes a CTI file, it determines what kind of kinetics object to use. If the kinetics is for a gas phase, the object is a GasKinetics object. The GasKinetics object has a <code>GasKinetics::addReaction()</code> method, which is run for each reaction in the CTI file:
Line 136: Line 136:
</source>
</source>


===Falloff Gas Reactions===
==Falloff Gas Reactions==


<pre>
<pre>
Line 146: Line 146:
</pre>
</pre>


====Falloff Gas Reaction Example====
===Falloff Gas Reaction Example===


====Falloff Gas Reaction Code====
===Falloff Gas Reaction Code===


===Other Gas Reaction Options===
==Other Gas Reaction Options==


Duplicate is the only option I see:
Duplicate is the only option I see:
Line 167: Line 167:
An example surface reaction CTI file is located at <code>cantera/data/inputs/ptcombust.cti</code>.
An example surface reaction CTI file is located at <code>cantera/data/inputs/ptcombust.cti</code>.


===Arrhenius Surface Kinetics===
==Arrhenius Surface Kinetics==


The plain/default way, which uses Arrhenius kinetics:
The plain/default way, which uses Arrhenius kinetics:
Line 187: Line 187:
</math>
</math>


====Arrhenius Surface Kinetics Example====
===Arrhenius Surface Kinetics Example===


A catalytic reaction where H2O (adsorbed onto a platinum surface) desorbs would look like this:
A catalytic reaction where H2O (adsorbed onto a platinum surface) desorbs would look like this:
Line 195: Line 195:
</pre>
</pre>


====Arrhenius Surface Kinetics Code====
===Arrhenius Surface Kinetics Code===


Not sure where this is dealt with in the Cantera code.
Not sure where this is dealt with in the Cantera code.


===Surface Reactions with Coverage-Dependent Rates===
==Surface Reactions with Coverage-Dependent Rates==


Still working through this coverage dependency.
Still working through this coverage dependency.
Line 229: Line 229:
</pre>
</pre>


===Surface Reactions with Sticking Equations===
==Surface Reactions with Sticking Equations==


No idea how this works.
No idea how this works.
Line 237: Line 237:
</pre>
</pre>


====Sticking Surface Reactions Example====
===Sticking Surface Reactions Example===


<pre>
<pre>
Line 243: Line 243:
</pre>
</pre>


====Sticking Surface Reactions Code====
===Sticking Surface Reactions Code===


Dunno
Dunno


===Surface Reactions with Falloff===
==Surface Reactions with Falloff==


No idea.
No idea.


====Surface Reactions with Falloff Example====
===Surface Reactions with Falloff Example===


To do
To do


====Surface Reactions with Falloff Code====
===Surface Reactions with Falloff Code===


To do
To do


===Other Surface Reaction Options===
==Other Surface Reaction Options==


<pre>
<pre>

Revision as of 23:07, 29 January 2014

Main Cantera page on CTI files: Cantera/CTI Files

Reaction Specification

Gas Reactions

An example gas reaction CTI file is located at cantera/data/inputs/h2o2.cti.

In general, the gas phase reaction rate can be modeled as:

$ r_{j} = k_j \sum_{i} \nu_{ij} c_{i}^{n_{ij}} $

where $ \nu_{ij} $ is the stoichiometric coefficient for species i in reaction j, $ c_i $ is the molar concentration of species i, and $ n_{ij} $ is the order of reaction j with respect to species i.

Arrhenius Gas Kinetics

The standard way to model reaction kinetics in the gas phase is to use Arrhenius kinetics. This models the reaction rate constant $ k_j $ as:

$ k_j = A_j T^{b_j} \exp \left( - \dfrac{ E_j }{ RT } \right) $

where the Arrhenius reaction parameters are:

  • $ A_j $ - Arrhenius parameter pre-exponential factor
  • $ b_j $ - Arrhenius parameter, degree of temperature influence on kinetic rate constant
  • $ E_j $ - Arrhenius parameter, activation energy of reaction

These quantities can be specified in a CTI file as follows:

reaction(  "A + B => C + D",  [A, b, E] )

and the units of each are:

  • $ A_j $ - specified in units of $ \frac{ \text{cm}^3 }{ \text{mol} \cdot \text{s} } $
  • $ b_j $ - dimensionless
  • $ E_j $ - specified in units of $ \frac{ \text{cal} }{ \text{mol} } $

Arrhenius Gas Kinetics Example

Example:

Specify the reaction

$ \text{H} + \text{O}_2 \rightarrow \text{O} + \text{OH} $

which has the following parameter values:

$ A = 3.54700E+15 \quad \frac{ \text{cm}^3 }{ \text{mol} \cdot \text{s} } $

$ b = -0.406 $

$ E = 16599 \quad \frac{ \text{cal} }{ \text{mol} } $

Result:

reaction(  "H + O2 <=> O + OH",  [3.54700E+15, -0.406, 16599])

Arrhenius Gas Kinetics Code

More information on what blocks of code process this stuff from the CTI file.

Three-Body Gas Reactions

A three body gas reaction is... I don't know.

three_body_reaction( "H2 + M <=> H + H + M",  [4.57700E+19, -1.4, 104380],
         efficiencies = " AR:0  CO:1.9  CO2:3.8  H2:2.5  H2O:12  HE:0 ")

Three Body Gas Reactions Example

It would help if I could figure out what this reaction type is, before putting together an example.

Three Body Gas Reactions Code

When Cantera processes a CTI file, it determines what kind of kinetics object to use. If the kinetics is for a gas phase, the object is a GasKinetics object. The GasKinetics object has a GasKinetics::addReaction() method, which is run for each reaction in the CTI file:

void GasKinetics::
addReaction(ReactionData& r)
{
    switch (r.reactionType) {
    case ELEMENTARY_RXN:
        addElementaryReaction(r);
        break;
    case THREE_BODY_RXN:
        addThreeBodyReaction(r);
        break;
    case FALLOFF_RXN:
        addFalloffReaction(r);
        break;
    case PLOG_RXN:
        addPlogReaction(r);
        break;
    case CHEBYSHEV_RXN:
        addChebyshevReaction(r);
        break;
    default:
        throw CanteraError("GasKinetics::addReaction", "Invalid reaction type specified");
    }

The three body reaction computation is set up in GasKinetics::addThreeBodyReaction:

void GasKinetics::
addThreeBodyReaction(ReactionData& r)
{
    // install rate coeff calculator
    size_t iloc = m_rates.install(reactionNumber(), r);

    // add constant term to rate coeff value vector
    m_rfn.push_back(r.rateCoeffParameters[0]);

    // forward rxn order equals number of reactants + 1
    m_fwdOrder.push_back(r.reactants.size() + 1);

    m_3b_concm.install(reactionNumber(), r.thirdBodyEfficiencies,
                       r.default_3b_eff);
    registerReaction(reactionNumber(), THREE_BODY_RXN, iloc);
}

Falloff Gas Reactions

falloff_reaction( "H + O2 (+ M) <=> HO2 (+ M)",
         kf = [1.47500E+12, 0.6, 0],
         kf0   = [6.36600E+20, -1.72, 524.8],
         falloff = Troe(A = 0.8, T3 = 1e-30, T1 = 1e+30),
         efficiencies = " CO:1.9  CO2:3.8  H2:2  H2O:11  O2:0.78 ")

Falloff Gas Reaction Example

Falloff Gas Reaction Code

Other Gas Reaction Options

Duplicate is the only option I see:

reaction(  "HO2 + HO2 <=> H2O2 + O2",  [1.30000E+11, 0, -1629.3],
         options = ["duplicate"])

Surface Reactions

Any surface reaction can be specified in the cti file using the surface_reaction function. The usage depends on the surface reaction form.

There are a variety of forms of surface reactions, each with a different specification method.

An example surface reaction CTI file is located at cantera/data/inputs/ptcombust.cti.

Arrhenius Surface Kinetics

The plain/default way, which uses Arrhenius kinetics:

surface_reaction( "A(s) => B(s) + C",   [A, b, E]) 

where:

  • A(s), B(s), C - species whose properties are defined in the species section (see above)
  • A - Arrhenius parameter, pre-exponential factor (specified in units of...)
  • b - Arrhenius parameter, degree of temperature influence on kinetic rate constant
  • E - Arrhenius parameter, activation energy of reaction

The Arrhenius expression is:

$ k = A T^b \exp \left( \frac{E}{RT} \right) $

Arrhenius Surface Kinetics Example

A catalytic reaction where H2O (adsorbed onto a platinum surface) desorbs would look like this:

surface_reaction( "H2O(S) => H2O + PT(S)",   [1.00000E+13, 0, 40300])

Arrhenius Surface Kinetics Code

Not sure where this is dealt with in the Cantera code.

Surface Reactions with Coverage-Dependent Rates

Still working through this coverage dependency.

This uses some kind of expression containing a, m, and e.

surface_reaction( "A(s) => B(s) + C", Arrhenius(A, b, E, coverage=['A(s)', surface_a, surface_m, surface_e])

Attempting to uncover how this is dealt with:

importKinetics::getCoverageDependence()
rdata.cov vector contains coverage-related parameters/information
rdata.cov.push_back(species_index)
rdata.cov.push_back(a)
rdata.cov.push_back(m)
rdata.cov.push_back(e)

and then

InterfaceKinetics::addElementaryReaction
if r.cov.size > 3:
    this rxn is dependent on coverage
register rxn

Surface Reactions with Sticking Equations

No idea how this works.

surface_reaction( "A + B(s) => C + D(s)",   stick(1.00000E+00, 0, 0))

Sticking Surface Reactions Example

surface_reaction( "OH + PT(S) => OH(S)",   stick(1.00000E+00, 0, 0))

Sticking Surface Reactions Code

Dunno

Surface Reactions with Falloff

No idea.

Surface Reactions with Falloff Example

To do

Surface Reactions with Falloff Code

To do

Other Surface Reaction Options

surface_reaction( "O2 + 2 PT(S) => 2 O(S)",   Arrhenius(1.80000E+21, -0.5, 0),
                  options = 'duplicate')