RMG-database
RMG-database copied to clipboard
Adding surface training reactions
- Purpose: Adding more surface training data into kinetic families.
-
Method:
- Processing the new libraries by using the script in David's RMG-Py branch add_training_reactions (RMG-Py/ipython/kinetics_library_to_training.ipynb)
- Adding the reactions to the belonged families.
-
Notice:
- The
Mhadeshwar_Pt111
library is for diesel oxidation catalysts (DOC) system and has 52 training reactions (Ea vary depending on the reactions, most of the A factors are in the range of 10^11 to 10^13 (1/s)), not sure if we want to add these 52 reactions now (might affect carbon-related models?). - The
Vlachos_Pt111
library is for methane oxidation and has 43 training reactions (Ea vary depending on the reactions, most of the A factors are in the range of 10^10 to 10^13 (1/s), sticking coefficient from 0.01 to 1), not sure if we want to add these 43 reactions now (might affect carbon-related models?). - Will add other libraries into training data but hold these two libraries for further discussions.
- The
Run the example of methane oxidation with new training data and the models completed: (RMG-Py branch is master)
-
RMG-database branch: add_surface_training The final model core has 60 species and 707 reactions The final model edge has 185 species and 1322 reactions
-
RMG-database branch: master The final model core has 61 species and 689 reactions The final model edge has 189 species and 1375 reactions
database(
thermoLibraries=['surfaceThermoPt111', 'primaryThermoLibrary', 'thermo_DFT_CCSDTF12_BAC','DFT_QCI_thermo'],
reactionLibraries = [('Surface/CPOX_Pt/Deutschmann2006_adjusted', False)],
seedMechanisms = [],
kineticsDepositories = ['training'],
kineticsFamilies = ['surface','default'],
kineticsEstimator = 'rate rules',
)
generatedSpeciesConstraints(
allowed=['input species','seed mechanisms','reaction libraries'],
maximumCarbonAtoms=2,
maximumOxygenAtoms=2,
maximumNitrogenAtoms=2,
maximumSurfaceSites=2,
maximumRadicalElectrons=2,
)
catalystProperties(
metal = 'Pt111'
)
species(
label='CH4',
reactive=True,
structure=SMILES("[CH4]"),
)
species(
label='O2',
reactive=True,
structure=adjacencyList(
"""
1 O u1 p2 c0 {2,S}
2 O u1 p2 c0 {1,S}
"""),
)
species(
label='N2',
reactive=False,
structure=SMILES("N#N"),
)
species(
label='vacantX',
reactive=True,
structure=adjacencyList("1 X u0"),
)
#----------
# Reaction systems
surfaceReactor(
temperature=(800,'K'),
initialPressure=(1.0, 'bar'),
initialGasMoleFractions={
"CH4": 0.1,
"O2": 0.2,
"N2": 0.7,
},
initialSurfaceCoverages={
"vacantX": 1.0,
},
surfaceVolumeRatio=(1.e5, 'm^-1'),
terminationConversion = { "CH4":0.99,},
terminationTime=(0.1, 's'),
)
simulator(
atol=1e-18,
rtol=1e-12,
)
model(
toleranceKeepInEdge=0.0,
toleranceMoveToCore=1e-5,
toleranceInterruptSimulation=0.1,
maximumEdgeSpecies=100000,
)
options(
units='si',
generateOutputHTML=True,
generatePlots=True,
saveEdgeSpecies=True,
saveSimulationProfiles=True,
)
And run the ammonia oxidation examples (RMG-Py: master):
-
RMG-database branch: add_surface_training The final model core has 24 species and 88 reactions The final model edge has 71 species and 184 reactions
-
RMG-database branch: master The final model core has 20 species and 39 reactions The final model edge has 56 species and 114 reactions
database(
thermoLibraries=['surfaceThermoPt111', 'primaryThermoLibrary', 'thermo_DFT_CCSDTF12_BAC','DFT_QCI_thermo'],
reactionLibraries = [('Surface/Ammonia/Schneider_Pt111', False)],
seedMechanisms = [],
kineticsDepositories = ['training'],
kineticsFamilies = ['surface','default'],
kineticsEstimator = 'rate rules',
)
generatedSpeciesConstraints(
allowed=['input species','seed mechanisms','reaction libraries'],
maximumOxygenAtoms=2,
maximumNitrogenAtoms=2,
maximumSurfaceSites=2,
maximumRadicalElectrons=2,
)
catalystProperties(
metal = 'Pt111'
)
species(
label='NH3',
reactive=True,
structure=adjacencyList(
"""
1 N u0 p1 c0 {2,S} {3,S} {4,S}
2 H u0 p0 c0 {1,S}
3 H u0 p0 c0 {1,S}
4 H u0 p0 c0 {1,S}
"""),
)
species(
label='O2',
reactive=True,
structure=adjacencyList(
"""
1 O u1 p2 c0 {2,S}
2 O u1 p2 c0 {1,S}
"""),
)
species(
label='He',
reactive=False,
structure=adjacencyList(
"""
1 He u0 p1 c0
"""),
)
species(
label='X',
reactive=True,
structure=adjacencyList("1 X u0"),
)
species(
label='H2O',
reactive=True,
structure=SMILES("O"),
)
#----------
# Reaction systems
surfaceReactor(
temperature=(800,'K'),
initialPressure=(1.0, 'bar'),
initialGasMoleFractions={
"NH3": 0.002,
"O2": 0.01,
"He": 0.938,
"H2O":0.05,
},
initialSurfaceCoverages={
"X": 1.0,
},
surfaceVolumeRatio=(1.e5, 'm^-1'),
terminationConversion = { "NH3":0.95,},
terminationTime=(0.1, 's'),
)
simulator(
atol=1e-18,
rtol=1e-12,
)
model(
toleranceKeepInEdge=0.01,
toleranceMoveToCore=0.05,
toleranceInterruptSimulation=0.1,
maximumEdgeSpecies=100000,
)
options(
units='si',
generateOutputHTML=True,
generatePlots=True,
saveEdgeSpecies=True,
saveSimulationProfiles=True,
)
The selectivity of the ammonia oxidation has been improved by adding the training reactions. Without the new training data, the model misses the product of N2O. However, the surface coverage wasn’t improved.