RMG/Cantera compatibility for Plog reactions

オープン
#2,428 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
python
領域
backend

調査の方向性

添付された最小限の例の Jupyter ノートブックと Chemkin/Cantera 入力ファイルから始め、コンテキストについて issue #2288 を読んでください。報告された圧力と温度において、重複反応を個別に記述する表現と、PLOG を組み合わせた表現を比較します。選択した表現が Cantera の検証に合格し、期待される反応速度を維持できれば完了です。

索引モデルが issue の本文から書いたものです。

説明

bug
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

主要言語
Python
スター
540
フォーク
266
PR マージ指標
30日以内にマージされた PR はありません

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

ReactionMechanismGenerator/RMG-Py のほかの issue

ReactionMechanismGenerator/RMG-Py の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。