RMG-database icon indicating copy to clipboard operation
RMG-database copied to clipboard

Adding surface training reactions

Open Tingchenlee opened this issue 3 years ago • 1 comments

  • 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.

Tingchenlee avatar Jul 23 '21 21:07 Tingchenlee

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.
image

Tingchenlee avatar Jul 24 '21 18:07 Tingchenlee