Cantera/CTI Files: Difference between revisions
From charlesreid1
| Line 13: | Line 13: | ||
** Gas reactions | ** Gas reactions | ||
** Surface reactions | ** Surface reactions | ||
=Units Specification= | |||
The units are the first thing defined in the file: | |||
<pre> | |||
units(length = "cm", time = "s", quantity = "mol", act_energy = "J/mol") | |||
</pre> | |||
=Phase Specification= | =Phase Specification= | ||
==Gas== | |||
<pre> | |||
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') | |||
) | |||
</pre> | |||
==Interface== | |||
<pre> | |||
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') | |||
) | |||
</pre> | |||
=Species Specification= | =Species Specification= | ||
Revision as of 01:07, 22 January 2014
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
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
Reaction Specification
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.
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])
Coverage-Dependent Surface 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
Sticking Equations
No idea how this works.
surface_reaction( "OH + PT(S) => OH(S)", stick(1.00000E+00, 0, 0))
Duplicate Reactions
surface_reaction( "O2 + 2 PT(S) => 2 O(S)", Arrhenius(1.80000E+21, -0.5, 0),
options = 'duplicate')