Skip to content

RMG/Cantera compatibility for Plog reactions #2428

@ChrisBNEU

Description

@ChrisBNEU

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugbug which will never be closed by the actions bot

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions