From charlesreid1

CTI = CanTera Input file

CTI files use a custom markup language to specify information about the kinetics.

Division of CTI Files

The file can be divided into multiple parts:

  • Phase specification
  • Species
    • Gas species
    • Surface species
  • Reactions
    • Gas reactions
    • Surface reactions

Units Specification

The units are the first thing defined in the file:

units(length = "cm", time = "s", quantity = "mol", act_energy = "J/mol")

Phase Specification

Gas

ideal_gas(name = "gas",
         elements = "O H C N Ar",
         species = """gri30: H2      H       O       O2      OH      
                             H2O     HO2     H2O2 
         C       CH      CH2     CH2(S)  CH3     CH4     CO      CO2     
         HCO     CH2O    CH2OH   CH3O    CH3OH   C2H     C2H2    C2H3    
         C2H4    C2H5    C2H6    HCCO    CH2CO   HCCOH AR N2""",
          transport = 'Mix',
          reactions = 'gri30: all',
          options = ['skip_undeclared_elements',
                     'skip_undeclared_species'],
          initial_state = state(temperature = 300.0, pressure = OneAtm,
                                mole_fractions = 'CH4:0.095, O2:0.21, AR:0.79')
          )

Interface (Surface)

ideal_interface(name = "Pt_surf",
                elements = " Pt  H  O  C ",
                species = """ PT(S) H(S)
 H2O(S)  OH(S)  CO(S)  CO2(S)  CH3(S)
                CH2(S)s  CH(S)  C(S)  O(S) """,
                phases = "gas",
                site_density = 2.7063e-9,
                reactions = "all",
                initial_state = state(temperature = 900.0,
                                      coverages = 'O(S):0.0, PT(S):0.5, H(S):0.5')
                )

Species Specification

species(name = "CH3OCHO",
    atoms = " C:2  H:4  O:2 ",
    thermo = (
       NASA( [  300.00,  1452.00], [  2.435262000E+00,   1.819483250E-02, 
                1.912365900E-06,  -8.442489450E-09,   2.617589100E-12,
               -4.465147320E+04,   1.495222650E+01] ),
       NASA( [ 1452.00,  5000.00], [  1.065691850E+01,   9.381127230E-03, 
               -3.376772060E-06,   5.424555960E-10,  -3.222953300E-14,
               -4.846517580E+04,  -3.275794430E+01] )
             ),
    transport = gas_transport(
                     geom = "nonlinear",
                     diam = 4.037,
                     well_depth = 395,
                     dipole = 1.3,
                     rot_relax = 1),
    note = "4/15/ 8 THERM"
       )

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.

Gas Reactions with Arrhenius 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^n \exp \left( - \dfrac{ E_j }{ RT } \right) $

where the quantities $ A_j $, $ n $, and $ E_j $ are the Arrhenius coefficients. These can be specified in a CTI file as follows:

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

Three-Body Gas Reactions

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 ")

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 ")

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.

Surface Reactions with Arrhenius 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) $

So, for 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])

Surface Reactions with Coverage-Dependent Rates

The reaction rate may have some kind of... I dunno... coverage dependency, I guess?

I'm still working through this. 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( "OH + PT(S) => OH(S)",   stick(1.00000E+00, 0, 0))

Surface Reactions with Falloff

No idea.

Surface Reactions with Duplicate Reactions

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