※Canteraバージョン:2.5.1
CanteraとpyMARSで反応メカニズムのリダクション(縮約)を行う。
詳細な素反応を含む化学反応メカニズムを3次元の燃焼計算などで使用する場合、計算コストを削減するために化学種や反応式の数を減らす必要がある。Canteraのホームページにも反応メカニズムリダクションの例題があるが、単純に反応速度の大きなものを順番にとっているだけの簡易的なものだ。反応メカニズムのリダクションはいくつかの手法が提唱されているが、Canteraでは実装されていないようだ。そこで、pyMARSという別のソフトウェアでメカニズムリダクションを行ってみる。
目次
pyMARSとは
pyMARSは、Oregon State Universityの研究グループが開発したオープンソースのソフトウェアで、詳細化学反応メカニズムをリダクションするためのPythonライブラリである。Canteraとの親和性が高い。
pyMARSホームページ:
https://niemeyer-research-group.github.io/pyMARS/index.html
pyMARSでは、反応メカニズムリダクションの手法として、
- Directed relation graph (DRG)
- Directed relation graph with error propagation (DRGEP)
- Path flux analysis (PFA)
- Sensitivity analysis (SA)
を使用することができる。
pyMARSのインストール
pyMARSはCanteraを使用するので、まずpythonのAnaconda環境でCanteraが使える環境を用意する。普段Canteraを使っている環境だ。そこにpyMARSをインストールする。
conda install -c niemeyer-research-group pymars
pyMARSの起動は、pymarsコマンドを使う。
pymars --version
バージョンが出力されればインストールできている。
※Windows環境などでは、pymarsコマンドを直接打っても起動しないことがある。その場合は、インストールフォルダ にある以下のpythonスクリプトを作業フォルダにコピーしてくる。
C:\Users\ユーザー名\Anaconda3\pkgs\pymars-1.1.0-py_0\python-scripts内にあるpymars
そのうえで、pythonコマンドで起動する。
python pymars --version
※CanteraのCTIファイルに対応しているので、v3.0以降の新しいバージョンのCanteraでは使えないかもしれない。
pyMARSの使い方
入力ファイルの準備
まず、縮約したい詳細な反応メカニズムが定義されたCanteraのCTIファイルを用意する。次に、pyMARSの入力ファイルを準備する。ここでは、入力ファイル名を、reduction_input.yamlとする。
model: gri30.cti
targets:
- CH4
- O2
retained-species:
- N2
method: DRGEP
error: 10.0
sensitivity-analysis: False
autoignition-conditions:
- kind: constant volume
pressure: 1.0
temperature: 1000.0
fuel:
CH4: 1.0
oxidizer:
O2: 1.0
N2: 3.76
equivalence-ratio: 1.0
- kind: constant volume
pressure: 1.0
temperature: 1200.0
fuel:
CH4: 1.0
oxidizer:
O2: 1.0
N2: 3.76
equivalence-ratio: 0.5
これは、GRI-Mech3.0のメカニズムファイルgri30.ctiを縮約するための入力ファイルの例だ。縮約手法にDRGEP法を使い、ターゲットの化学種をCH4、O2とし、消去しない化学種をN2、許容誤差10%としている。着火遅れの計算を行うため、その初期条件も設定する。
- model: CanteraのCTIファイル
- targets: ターゲットの化学種
- retained-species: 消去しないで残しておきたい化学種
- method: リダクション手法( DRG、DRGEP、PFA)
- error: 許容誤差[%]
- sensitivity-analysis: 感度解析を行うかどうか(True、False)
- sensitivity-type: 感度解析のタイプ(initial、greedy)
- upper-threshold: 感度解析の閾値
- autoignition-conditions: 自着火計算の初期条件
詳細は以下のpyMARSのホームページ参照。
https://niemeyer-research-group.github.io/pyMARS/usage.html
リダクションの実行
リダクションの実行は、以下のコマンドで行う。
pymars --input reduction_input.yaml
または、pymarsファイルをコピーしてきた場合、
python pymars --input reduction_input.yaml
計算を実行すると画面に以下のようなログが表示される。
Running autoignition simulations for starting model.
Beginning DRGEP reduction loop
---------------------------------------------
Threshold | Number of species | Max error (%)
1.00e-02 | 40 | 0.15
2.00e-02 | 35 | 3.64
3.00e-02 | 33 | 3.64
4.00e-02 | 31 | 3.64
5.00e-02 | 31 | 3.64
6.00e-02 | 30 | 3.54
7.00e-02 | 28 | 3.48
8.00e-02 | 27 | 3.48
9.00e-02 | 26 | 3.48
1.00e-01 | 26 | 3.48
1.10e-01 | 26 | 3.48
1.20e-01 | 25 | 3.31
1.30e-01 | 25 | 3.31
1.40e-01 | 23 | 3.31
1.50e-01 | 22 | 3.22
1.60e-01 | 22 | 3.22
1.70e-01 | 22 | 3.22
1.80e-01 | 22 | 3.22
1.90e-01 | 22 | 3.22
2.00e-01 | 22 | 3.22
2.10e-01 | 21 | 22.21
---------------------------------------------
DRGEP reduction complete.
Skeletal model: 22 species and 99 reactions.
Maximum error: 3.22%
Final reduced model saved as reduced_22.cti
この例では、もともと化学種53、反応式325であったメカニズムが、化学種22、反応式99に縮約された。縮約されたメカニズムファイル(reduced_22.cti)が出力されているので、そのままCanteraの計算に使用できる。
n-Heptaneのリダクション
以下のページで使用したLLNLのn-Heptaneの詳細反応メカニズム(化学種 654、反応式4846)をリダクションしてみた。
DRGEP法で化学種247、反応式2392に縮約された。もとの詳細なメカニズムとの着火遅れ時間の比較を載せておく。3次元計算などでは、目的や条件に応じてもう少し減らした方がよいかもしれない。