Skip to content

Conversation

@Tingchenlee
Copy link
Contributor

@Tingchenlee Tingchenlee commented Jul 3, 2021

@davidfarinajr
Copy link
Contributor

Thanks for these additions Ting-Chen! I didn't check very carefully but the tests pass and there is a lot here to check by hand. I think one thing we could do on this PR is come up with a new organization scheme for the kinetics libraries surface folder. Because we are adding a bunch of new ones in this PR, it's hard for someone to know which libraries they should use in the Surface folder. Perhaps we could organize it this way?

Surface -> chemistry -> metal -> author

which might looks like

- Surface
    - cpox
         - Pt
              - default (combo from papers we think are best)
              - model1_facet
              - model2_facet
    - nitrogen
          - Pt
               - default
               - model1_facet
               - model2_facet
           - Ni
           - Cu

Maybe we could add 1 commit here that reorganizes this folder

@Tingchenlee
Copy link
Contributor Author

image
I feel that the reaction rates really varied depending on the metallic facets. From the above picture, it seems like the data of ammonia decomposition on Pt111 from other research groups are close to each other. Maybe we can just organize the libraries with the metal? Some libraries include not only nitrogen reactions but also carbon related (e.g. the automotive exhaust gases system)

@Tingchenlee
Copy link
Contributor Author

image
And the original rate estimation is a kind of too fast

@Tingchenlee
Copy link
Contributor Author

The Vlachos_Ru0001 library includes the coverage_dependence feature.

@rwest
Copy link
Member

rwest commented Jul 8, 2021

The Vlachos_Ru0001 library includes the coverage_dependence feature.

Great! Please put in order a, m, E, and when there is more than one, merge into a single dictionary. Thanks

@Tingchenlee
Copy link
Contributor Author

I reorganized surface libraries to Methane, Ammonia, DOC, and Hydrazine folders.
Then added coverage_dependence into Mhadeshwar_Pt111, Nitrogen, Vlachos_Pt111 , Vlachos_Rh , and Vlachos_Ru0001 libraries.
Run the database test on RMG-Py cde branch and passed.
I think this PR is ready to be reviewed.

@Tingchenlee
Copy link
Contributor Author

Tingchenlee commented Jul 22, 2021

Run some tests for coverage dependence and the models completed:
RMG-Py:cde
RMG-database:add_surface_libraries

database(
    thermoLibraries=['surfaceThermoPt111', 'primaryThermoLibrary', 'thermo_DFT_CCSDTF12_BAC','CHON_G4','NOx2018', 'GRI-Mech3.0-N', 'NitrogenCurran','DFT_QCI_thermo'],
    reactionLibraries =['Surface/DOC/Nitrogen','Surface/DOC/Mhadeshwar_Pt111','Surface/Methane/Vlachos_Pt111'],
    seedMechanisms = [],
    kineticsDepositories = ['training'],
    kineticsFamilies = ['surface'],
    kineticsEstimator = 'rate rules',
)

catalystProperties(
    metal = 'Pt111'
)

generatedSpeciesConstraints(
    allowed=['input species','seed mechanisms','reaction libraries'],
    maximumCarbonAtoms=2,
    maximumOxygenAtoms=2,
    maximumNitrogenAtoms=2,
    maximumSurfaceSites=2,
    maximumRadicalElectrons=2,
)

# List of species
species(
    label='X',
    reactive=True,
    structure=adjacencyList("1 X u0"),
)

species(
    label='O2',
    reactive=True,
    structure=adjacencyList(
"""
multiplicity 3
1 O u1 p2 c0 {2,S}
2 O u1 p2 c0 {1,S}
"""),
)

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='CH4',
    reactive=True,
    structure=SMILES("[CH4]"),
)

#-------------

surfaceReactor(  
    temperature=[(500,'K'),(1500,'K')],
    initialPressure=(1.0, 'bar'),
    nSims=6,
    initialGasMoleFractions={
        "NH3": 0.15,
        "O2": 0.8,
        "CH4":0.05,
    },
    initialSurfaceCoverages={
        "X": 1.0,
    },
    surfaceVolumeRatio=(2.3832928e4, 'm^-1'),
    terminationConversion = {"NH3":0.9,},
    terminationTime=(10, 's'),
)

simulator( 
    atol=1e-22, 
    rtol=1e-12, 
)

model( 
    toleranceKeepInEdge=0.05,
    toleranceMoveToCore=0.5, 
    toleranceInterruptSimulation=1e6, 
    maximumEdgeSpecies=5000, 
    minCoreSizeForPrune=50,
    toleranceThermoKeepSpeciesInEdge=0.5, 
    minSpeciesExistIterationsForPrune=2, 
)

options(
    units='si',
    saveRestartPeriod=None,
    generateOutputHTML=True,
    generatePlots=True, 
    saveEdgeSpecies=True,
    saveSimulationProfiles=True,
)

MODEL GENERATION COMPLETED

The final model core has 51 species and 257 reactions
The final model edge has 419 species and 1216 reactions


database(
    thermoLibraries=['surfaceThermoPt111', 'primaryThermoLibrary', 'thermo_DFT_CCSDTF12_BAC','CHON_G4','NOx2018', 'GRI-Mech3.0-N', 'NitrogenCurran','DFT_QCI_thermo'],
    reactionLibraries =[],
    seedMechanisms = ['Surface/Ammonia/Vlachos_Ru0001'],
    kineticsDepositories = ['training'],
    kineticsFamilies = ['surface'],
    kineticsEstimator = 'rate rules',
)

catalystProperties(
    metal = 'Ru0001'
)

generatedSpeciesConstraints(
    allowed=['input species','seed mechanisms','reaction libraries'],
    maximumCarbonAtoms=0,
    maximumOxygenAtoms=2,
    maximumNitrogenAtoms=2,
    maximumSurfaceSites=2,
    maximumRadicalElectrons=2,
)

# List of species
species(
    label='X',
    reactive=True,
    structure=adjacencyList("1 X u0"),
)

species(
    label='O2',
    reactive=True,
    structure=adjacencyList(
"""
multiplicity 3
1 O u1 p2 c0 {2,S}
2 O u1 p2 c0 {1,S}
"""),
)

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

#-------------

surfaceReactor(  
    temperature=[(500,'K'),(1500,'K')],
    initialPressure=(1.0, 'bar'),
    nSims=6,
    initialGasMoleFractions={
        "NH3": 0.2,
        "O2": 0.8,
    },
    initialSurfaceCoverages={
        "X": 1.0,
    },
    surfaceVolumeRatio=(2.3832928e4, 'm^-1'),
    terminationConversion = {"NH3":0.9,},
    terminationTime=(10, 's'),
)

simulator( 
    atol=1e-22, 
    rtol=1e-12, 
)

model( 
    toleranceKeepInEdge=0.05,
    toleranceMoveToCore=0.5, 
    toleranceInterruptSimulation=1e6, 
    maximumEdgeSpecies=5000, 
    minCoreSizeForPrune=50,
    toleranceThermoKeepSpeciesInEdge=0.5, 
    minSpeciesExistIterationsForPrune=2, 
)

options(
    units='si',
    saveRestartPeriod=None,
    generateOutputHTML=True,
    generatePlots=True, 
    saveEdgeSpecies=True,
    saveSimulationProfiles=True,
)

MODEL GENERATION COMPLETED

The final model core has 16 species and 18 reactions
The final model edge has 11 species and 20 reactions


The coverage_dependence reactions in Vlachos_Rh library are all in the reverse reactions (and there are commented out)

Copy link
Contributor

@ChrisBNEU ChrisBNEU left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reorganizing of the libraries is straightforward and helpful, and the coverage dependent parameters that you added in are all fine. I only skimmed the other reactions, but they have all been used repeatedly so far so I am confident they work. I have also used the schneider pt111 and roldan ir111 libraries for HAN, and it has built the model.

I vote that this is ready to be merged, once we have merged coverage dependence.

@rwest rwest force-pushed the add_surface_libraries branch from 24cd544 to 0662f09 Compare July 23, 2021 02:32
@rwest rwest merged commit e335280 into master Jul 23, 2021
@rwest rwest deleted the add_surface_libraries branch July 23, 2021 16:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants