Cantera:プラグフロー反応器を計算する

Canteraでプラグフロー反応器を計算してみる。

プラグフロー反応器(PFR:Plug Flow Reactor)は、流体が管の中を流れる間に化学反応を起こす反応器である。計算モデルは、下図のように管を長手方向に有限個に分割したもので、一つの分割したセルごとに反応を計算する。

一つのセルは、上流の隣接セルから値を受け渡され、反応計算の結果を下流側の隣接セルに受け渡す。拡散を無視すると、一つのセルは上流からのみに影響を受けるため、上流側から順に計算することで系全体の結果を得ることができる。Canteraでは、一つのセルは反応器(IdealGasReactor)の上流(upstream)側と下流(downstream)側にオブジェクト(Reservoir)をつけて、入口出口としている。これを一単位として、上流側から順に計算する。

計算プログラム

ここでは、CH4、O2、Arの燃焼反応をプラグフローでモデル化する。

ソースコード(GitHub)

# Simulation parameters
p = ct.one_atm  # pressure [Pa]
Tin = 1500.0  # inlet temperature [K]
comp = 'CH4:1, O2:1, AR:0.5' 
vin = 0.005 # inlet velocity [m/s]
length = 5e-6 # reactor length [m]
area = 1e-4 # cross section area [m2]
n_reactor = 200 # number of divided reactor

圧力p、入口温度Tin、入口の組成comp、入口流速vin、反応器全体の長さlength、反応器の断面積area、長手方向の分割数n_reactorを設定する。

# define object
gas = ct.Solution('gri30.cti')
gas.TPX = Tin, p, comp
mdot = vin * area * gas.density
dx = length / n_reactor

気相オブジェクトgasを設定する。ここでは、GRI Mech3.0の反応メカニズムを使う。mdotは質量流量、dxは一つのセルの幅である。

r = ct.IdealGasReactor(gas)
r.volume = area * dx

upstream = ct.Reservoir(gas, name='upstream')
downstream = ct.Reservoir(gas, name='downstream')
m = ct.MassFlowController(upstream, r, mdot=mdot)
v = ct.PressureController(r, downstream, master=m, K=1.0e-5)

sim = ct.ReactorNet([r])

反応器を設定する。rはIdealGasReactorで理想気体定容積の反応器とし、upstreamとdownstreamはReservoirで接続する。

upstreamには、流量を設定するためのMassFlowControllerを設定する。downstreamには、出口とするためのPressureControllerを設定する。Kの値は関係ない。

最後に解析用にReactorNetを定義する。

# solve
outfile = open('pfr.csv','w', newline='')
writer = csv.writer(outfile)
writer.writerow(['Distance (m)', 'u(m/s)', 'rtime(s)', 'T(K)', 'P(Pa)'] + gas.species_names)

t_res = 0.0
for n in range(n_reactor):
    gas.TDY = r.thermo.TDY
    upstream.syncState()
    sim.reinitialize()
    sim.advance_to_steady_state()
    dist = n * dx
    u = mdot / area / r.thermo.density # velocity
    t_res += r.mass / mdot  # residence time 
    writer.writerow([dist, u, t_res, r.T, r.thermo.P] + list(gas.X))

outfile.close()

計算を実行する。結果ファイルをCSV出力するために、ファイルpfr.csvを定義している。結果ファイルには、距離、流速、滞留時間、温度、圧力、化学種のモル濃度が出力される。

for文は、上流側から順に計算するためのループである。まず、一つ前(上流側)の反応器の状態をupstreamにセットする。reinitializeで再初期化したあと、advance_to_steady_stateで定常状態になるまで計算する。

distは距離、uは流速、t_resは滞留時間を計算している。最後にCSVファイルに結果を出力する。

距離に対するモル分率の結果。0.003mm手前で燃焼反応が起こっている。

距離に対する、滞留時間と流速の結果。燃焼後流速が大きくなる。

滞留時間に対する温度の結果。

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

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

お問い合わせはこちら

フォローする

スポンサーリンク