1. Simple system, no QM¶
This tutorial will guide you through setting up T3 to generate a detailed kinetic model for a relatively simple system, a H2/O2 flame. The model will consist of species and reactions for which thermodynamic properties and rate coefficients, respectively, are already known from the literature. It is an exercise in setting up T3 for a system for which no quantum mechanical (QM) calculations are executed.
When using the API, the first directive is to import the main T3 object (this is not needed when using an input file):
from t3 import T3
rmg_args = {'database': {'thermo_libraries': ['primaryThermoLibrary',
'BurkeH2O2'],
'kinetics_libraries': ['BurkeH2O2inN2']},
'species': [{'label': 'H2',
'smiles': '[H][H]',
'concentration': 0.67},
{'label': 'O2',
'smiles': '[O][O]',
'concentration': 0.33}],
'reactors': [{'type': 'gas batch constant T P',
'T': 1000,
'P': 1,
'termination_conversion': {'H2': 0.9},
'termination_time': [5, 's']}],
'model': {'core_tolerance': [0.01, 0.001]}}
t3_object = T3(project='T3_tutorial_1',
rmg=rmg_args)
t3_object.execute()
(This script is complete, it should run "as is")
Next we'll define arguments related to RMG. This argument is a Python dictionary which
will be passed to the rmg argument of the T3 object imported above.
You can name this argument with any legal Python name, here we use rmg_args.
This is the only required primary argument -- this simple example does not
make use of the additional primary arguments, t3 and qm.
from t3 import T3
rmg_args = {'database': {'thermo_libraries': ['primaryThermoLibrary',
'BurkeH2O2'],
'kinetics_libraries': ['BurkeH2O2inN2']},
'species': [{'label': 'H2',
'smiles': '[H][H]',
'concentration': 0.67},
{'label': 'O2',
'smiles': '[O][O]',
'concentration': 0.33}],
'reactors': [{'type': 'gas batch constant T P',
'T': 1000,
'P': 1,
'termination_conversion': {'H2': 0.9},
'termination_time': [5, 's']}],
'model': {'core_tolerance': [0.01, 0.001]}}
t3_object = T3(project='T3_tutorial_1',
rmg=rmg_args)
t3_object.execute()
Here, the rmg_args argument defines the database libraries to be used by RMG,
the chemical species with respective structure and concentration, the reactor
type, conditions and termination criteria, and the RMG core tolerances to be used
throughout the different T3 iterations.
Note
The RMG arguments in T3 generally correspond to arguments used by the legacy RMG input file. Users should refer to the RMG documentation for detailed explanations of all possible arguments. This tutorial, though, manages to capture all major syntax differences users should be aware of when defining the RMG arguments in T3:
- RMG arguments are currently in camelCase style (e.g.,
thermoLibraries), whereas the respective arguments in T3 are in lower_case_underscore style (e.g.,thermo_libraries). - Species definitions in T3 are more flexible, see the how-to guides for more details.
- Reactor types were re-named for clarity, see the how-to guides for more details.
core_toleranceis a list of the RMGtoleranceMoveToCoreargument to use per T3 iteration. If the number of iterations is larger than the length ofcore_tolerance, the last entry will be used. The `core_tolerance`` argument can also be given as flot, in which case it will be treated as a onc-entry list.- Minor: RMG uses the notation
reactionLibrarieswhile T3 useskinetics_libraries.
Next, we create the T3 object with all desired arguments.
Here, only the two required arguments, project and rmg are given.
from t3 import T3
rmg_args = {'database': {'thermo_libraries': ['primaryThermoLibrary',
'BurkeH2O2'],
'kinetics_libraries': ['BurkeH2O2inN2']},
'species': [{'label': 'H2',
'smiles': '[H][H]',
'concentration': 0.67},
{'label': 'O2',
'smiles': '[O][O]',
'concentration': 0.33}],
'reactors': [{'type': 'gas batch constant T P',
'T': 1000,
'P': 1,
'termination_conversion': {'H2': 0.9},
'termination_time': [5, 's']}],
'model': {'core_tolerance': [0.01, 0.001]}}
t3_object = T3(project='T3_tutorial_1',
rmg=rmg_args)
t3_object.execute()
Finally, we call the execute() method of T3.
from t3 import T3
rmg_args = {'database': {'thermo_libraries': ['primaryThermoLibrary',
'BurkeH2O2'],
'kinetics_libraries': ['BurkeH2O2inN2']},
'species': [{'label': 'H2',
'smiles': '[H][H]',
'concentration': 0.67},
{'label': 'O2',
'smiles': '[O][O]',
'concentration': 0.33}],
'reactors': [{'type': 'gas batch constant T P',
'T': 1000,
'P': 1,
'termination_conversion': {'H2': 0.9},
'termination_time': [5, 's']}],
'model': {'core_tolerance': [0.01, 0.001]}}
t3_object = T3(project='T3_tutorial_1',
rmg=rmg_args)
t3_object.execute()
Note that the corresponding YAML input file for this tutorial would be:
project: T3_tutorial_1
rmg:
database:
kinetics_libraries:
- BurkeH2O2inN2
thermo_libraries:
- primaryThermoLibrary
- BurkeH2O2
model:
core_tolerance:
- 0.01
- 0.001
reactors:
- P: 1.0
T: 1000.0
termination_conversion:
H2: 0.9
termination_time:
- 5
- 's'
type: gas batch constant T P
species:
- concentration: 0.67
label: H2
smiles: '[H][H]'
- concentration: 0.33
label: O2
smiles: '[O][O]'