ReactionMechanismGenerator / ReactionMechanismGenerator/RMG-Py

RMG/Cantera compatibility for Plog reactions

Open
#2,428 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Python
Stars
530
Forks
260
Avg merge
3d 1h
Merged PRs (30d)
8

Description

Bug Description

This isn't necessarily an RMG/cantera bug, it is just a difference of how reactions are interpreted in each.

For plog reactions, RMG represents multiple plog reactions in chemkin by marking them as "duplicates":

! Reaction index: Chemkin #8; RMG #5
HO2(5)+CH3(13)=O2(6)+CH4(15)                        1.000e+00 0.000     0.000    
    PLOG/ 0.001     9.300e+10 0.000     0.000    /
    PLOG/ 1.000     8.000e+10 0.000     0.000    /
    PLOG/ 3.000     7.000e+10 0.000     0.000    /
    PLOG/ 10.000    3.700e+12 0.000     12.518   /
    PLOG/ 20.000    2.900e+12 0.000     11.922   /
    PLOG/ 50.000    1.500e+12 0.000     13.909   /
    PLOG/ 80.000    1.500e+11 0.000     1.987    /
    PLOG/ 100.000   1.500e+11 0.000     1.987    /
    PLOG/ 650.000   2.300e+11 0.200     4.968    /
    PLOG/ 2000.000  3.700e+07 1.340     2.186    /
DUPLICATE

! Reaction index: Chemkin #9; RMG #5
HO2(5)+CH3(13)=O2(6)+CH4(15)                        1.000e+00 0.000     0.000    
    PLOG/ 0.001     7.100e+05 1.800     1.133    /
    PLOG/ 1.000     8.800e+05 1.770     0.954    /
    PLOG/ 3.000     2.900e+05 1.900     0.397    /
    PLOG/ 10.000    9.300e+07 1.100     0.000    /
    PLOG/ 20.000    4.500e+07 1.200     0.000    /
    PLOG/ 50.000    5.800e+06 1.500     0.000    /
    PLOG/ 80.000    2.500e+05 1.900     0.000    /
    PLOG/ 100.000   1.900e+05 1.940     0.000    /
    PLOG/ 650.000   7.000e+05 1.700     0.298    /
    PLOG/ 2000.000  0.000e+00 0.000     0.000    /   
DUPLICATE

the above mechanism can be converted to a cantera yaml file, but attempting to use it in a cantera reactor will give the following message:

CanteraError: 
*******************************************************************************
CanteraError thrown by addReactions:

*******************************************************************************
InputFileError thrown by PlogRate::validate:
Error on line 225 of ./chemkin_error.yaml:

Invalid rate coefficient for reaction 'CH3(13) + HO2(5) <=> CH4(15) + O2(6)'
at P = 2.0265e+08, T = 200.0
at P = 2.0265e+08, T = 500.0
at P = 2.0265e+08, T = 1000.0
at P = 2.0265e+08, T = 2000.0
at P = 2.0265e+08, T = 5000.0
at P = 2.0265e+08, T = 10000.0

|  Line |
|   220 |   - {P: 80.0 atm, A: 1.5e+11, b: 0.0, Ea: 1.987}
|   221 |   - {P: 100.0 atm, A: 1.5e+11, b: 0.0, Ea: 1.987}
|   222 |   - {P: 650.0 atm, A: 2.3e+11, b: 0.2, Ea: 4.968}
|   223 |   - {P: 2000.0 atm, A: 3.7e+07, b: 1.34, Ea: 2.186}
|   224 |   note: 'Reaction index: Chemkin #8; RMG #5'
>   225 > - equation: HO2(5) + CH3(13) <=> O2(6) + CH4(15)  # Reaction 9
            ^
|   226 |   duplicate: true
|   227 |   type: pressure-dependent-Arrhenius
|   228 |   rate-constants:
*******************************************************************************
*******************************************************************************

the PLOG/ 2000.000 0.000e+00 0.000 0.000 / line is what causes the error. Cantera evaluates the reactions separately at a number of temperatures and pressures as part of it's validation procedure. In order for this representation to be interpreted at all, the above line needs to be commented out.

This reaction can alternatively be represented as follows, which will yield no errors:

! Reaction index: Chemkin #8; RMG #5
HO2(5)+CH3(13)=O2(6)+CH4(15)                        1.000e+00 0.000     0.000    
    PLOG/ 0.001     9.300e+10 0.000     0.000    /
    PLOG/ 0.001     7.100e+05 1.800     1.133    /
    PLOG/ 1.000     8.000e+10 0.000     0.000    /
    PLOG/ 1.000     8.800e+05 1.770     0.954    /
    PLOG/ 3.000     7.000e+10 0.000     0.000    /
    PLOG/ 3.000     2.900e+05 1.900     0.397    /
    PLOG/ 10.000    3.700e+12 0.000     12.518   /
    PLOG/ 10.000    9.300e+07 1.100     0.000    /
    PLOG/ 20.000    2.900e+12 0.000     11.922   /
    PLOG/ 20.000    4.500e+07 1.200     0.000    /
    PLOG/ 50.000    1.500e+12 0.000     13.909   /
    PLOG/ 50.000    5.800e+06 1.500     0.000    /
    PLOG/ 80.000    1.500e+11 0.000     1.987    /
    PLOG/ 80.000    2.500e+05 1.900     0.000    /
    PLOG/ 100.000   1.500e+11 0.000     1.987    /
    PLOG/ 100.000   1.900e+05 1.940     0.000    /
    PLOG/ 650.000   2.300e+11 0.200     4.968    /
    PLOG/ 650.000   7.000e+05 1.700     0.298    /
    PLOG/ 2000.000  3.700e+07 1.340     2.186    /
    PLOG/ 2000.000  0.000e+00 0.000     0.000    /   

The two representations (2 reactions with the 2000 atm rate commented out vs 1 reaction) yield different results for rates in cantera at 2000 atm (see minimal example for code used to generate this:)

rate not equal at pressure: 2000.0 and temperature 500
combined rate expression: 1007315.6839752827 kmol/cm^3/s ;  separate rate expression : 2201080.556622974 kmol/cm^3/s
How To Reproduce

I have attached a minimal example with a jupyter notebook and chemkin/cantera input files.

Expected Behavior

I think it requires some thought, but I believe the "combined" method is how we want to represent reactions before we port them to Cantera.

Installation Information

Describe your installation method and system information.

  • macOS 10.15.7
  • Installed from source, with anaconda
  • RMG version: 3.0.0-1208-gf8b136e26
Additional Context

this came up in #2288, you can refer to that for additional context.
see below for minimal example:

chemkin_error.zip

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the attached minimal example's Jupyter notebook and Chemkin/Cantera input files, and read issue #2288 for context. Compare the separate duplicate-reaction and combined PLOG representations at the reported pressures and temperatures; done means the chosen representation passes Cantera validation and preserves the expected rates.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.