Canteraの使い方2:混合と化学平衡の計算

次にもう少し化学的な計算をしてみる。ここでは、Canteraのmixing.pyの例題を例にとる。

PythonのCanteraが使える環境で、以下のコマンドで計算できる。

python mixing.py

この例題では、空気とメタンを理論混合比で混合し、化学平衡を計算している。以下で、mixing.pyの中身を説明する。

import cantera as ct
gas = ct.Solution('gri30.xml')

Canteraをインポートし、gri30.xmlをgasオブジェクトに定義する。gri30.xmlは、gri30.ctiと同じ反応メカニズムがXML形式で定義されたファイルだ。

# Stream A (air)
A = ct.Quantity(gas, constant='HP')
A.TPX = 300.0, ct.one_atm, 'O2:0.21, N2:0.78, AR:0.01'

次に、AにエンタルピーH、圧力P一定の状態を定義する。Aは空気で条件は、温度T=300[K]、圧力P=1[atm]、組成X=(O2=0.21, N2=0.78, Ar=0.01)[モル分率]である。ちなみに、#で始まる行はコメント行。

次に、BにメタンCH4を定義する。

# Stream B (methane)
B = ct.Quantity(gas, constant='HP')
B.TPX = 300.0, ct.one_atm, 'CH4:1'

空気AとメタンBを理論混合比で設定する。

# Set the molar flow rates corresponding to stoichiometric reaction,
# CH4 + 2 O2 -> CO2 + 2 H2O
A.moles = 1
nO2 = A.X[A.species_index('O2')]
B.moles = nO2 * 0.5

A.moles で、空気Aを1[kmol]と設定する。次のnO2 = A.X[A.species_index('O2')]は、空気AのO2(酸素)の物質量XをnO2という変数に代入している。B.molesでは、nO2の半分の量をメタンの量として設定している。これで、空気AとメタンBを理論混合比で投入することになる。

# Compute the mixed state
M = A + B
print(M.report())

混合は、空気AとメタンBを実際にプラスしてやればよい。混合気をMとしている。printで混合気Mを出力してやると、

  gri30:

       temperature             300  K
          pressure          101325  Pa
           density         1.12691  kg/m^3
  mean mol. weight         27.7414  amu

                          1 kg            1 kmol
                       -----------      ------------
          enthalpy     -2.5351e+05       -7.033e+06     J
   internal energy     -3.4342e+05       -9.527e+06     J
           entropy            7222        2.003e+05     J/K
    Gibbs function     -2.4201e+06       -6.714e+07     J
 heat capacity c_p          1070.4         2.97e+04     J/K
 heat capacity c_v          770.71        2.138e+04     J/K

                           X                 Y          Chem. Pot. / RT
                     -------------     ------------     ------------
                O2       0.190045         0.219211         -26.3342
               CH4      0.0950226        0.0549513         -54.6765
                N2       0.705882         0.712806         -23.3814
                AR     0.00904977        0.0130318         -23.3151
     [  +49 minor]              0                0

となる。Xはモル分率、Yは質量分率を表す。

# Show that this state corresponds to stoichiometric combustion
M.equilibrate('TP')
print(M.report())

最後に、温度圧力一定で化学平衡を計算し、結果を出力する。

  gri30:

       temperature             300  K
          pressure          101325  Pa
           density         1.12691  kg/m^3
  mean mol. weight         27.7414  amu

                          1 kg            1 kmol
                       -----------      ------------
          enthalpy     -3.0024e+06       -8.329e+07     J
   internal energy     -3.0924e+06       -8.579e+07     J
           entropy          7204.3        1.999e+05     J/K
    Gibbs function     -5.1637e+06       -1.432e+08     J
 heat capacity c_p          1104.2        3.063e+04     J/K
 heat capacity c_v          804.53        2.232e+04     J/K

                           X                 Y          Chem. Pot. / RT
                     -------------     ------------     ------------
               H2O       0.190045         0.123416         -121.321
               CO2      0.0950226         0.150747         -185.827
                N2       0.705882         0.712806         -23.3814
                AR     0.00904977        0.0130318         -23.3151
     [  +49 minor]    1.77109e-19       2.0429e-19

完全燃焼して、H2O、CO2、N2、Arが残る。

組成や混合比、温度、圧力などの条件を変えて計算してみるとよい。

スポンサーリンク
科学技術計算のご相談は「キャットテックラボ」へ

科学技術計算やCAEに関するご相談、計算用プログラムの開発などお困りのことは「株式会社キャットテックラボ」へお問い合わせください。

お問い合わせはこちら

フォローする

スポンサーリンク