※Canteraバージョン:3.0.0
バルブの開閉や流量の制御などを行う機能について説明する。
目次
計算モデル
例えば、燃焼反応器(IdealGasReactor)に、吸気(Reservoir:Air)と、排気(Reservoir)がバルブで接続されているモデルを考える。また、燃焼器には燃料を供給するインジェクター(Reservoir:Fuel)から流量制御(MassFlowController:MFC)によって燃料が供給されるとする。
バルブのモデル
Canteraには、バルブをモデル化するオブジェクトが用意されている。バルブのモデルは、
$$\dot{m} = K g(t) f(P_1-P_2)$$
となっている。ここで、$\dot{m}$:流量、$K$:流量係数、$g(t)$:時間の関数、$f(P_1-P_2)$:圧力差の関数。
流量が圧力差と流量係数で決まるという一般的な式になっている。
例えば、吸気のReservoirと反応器をバルブで接続する例は以下のようなコードとなる。
gas.TPX = 700.0, ct.one_atm*5.0, comp_air
air_in = ct.Reservoir(gas)
def open_air(t):
if 0.0 <= t and t <= 2.0:
return 1.0
else:
return 0.0
valve_air = ct.Valve(upstream = air_in, downstream = combustor, K = 1.0e-5)
valve_air.set_time_function(open_air)
Valve関数でバルブを定義している。上流の空気(air_in)と反応器(combustor)を接続し、係数Kを与えている。
open_air(t)関数は、上式の$g(t)$を定義したもので、set_time_functionメソッドでバルブのオブジェクトに与える。この例では、時刻が0~2秒は全開、それ以外は全閉としている。
※常にバルブがオープンの状態であれば、set_time_functionで時間関数を与える必要はない。
流量制御のモデル
流量を制御するには、MassFlowControllerというオブジェクトを定義する。質量流量$\dot{m}_0$を直接与えることができる。
$$\dot{m} =g(t)\dot{m}_0$$
今回のモデルでは、燃料を注入するために使用している。
gas.TPX = 300.0, ct.one_atm, comp_fuel
fuel_in = ct.Reservoir(gas)
mdot_fuel = 0.2
def open_fuel(t):
if 3.0 <= t and t <= 4.0:
return 1.0
else:
return 0.0
mfc_fuel = ct.MassFlowController(upstream = fuel_in, downstream = combustor, mdot = mdot_fuel)
mfc_fuel.set_time_function(open_fuel)
MassFlowController関数で、fuel_in(燃料のReservoir)とcombustor(反応器)を接続し、mdotに質量流量[kg/s]を与える。これも時間の関数にできる。この例では、open_fuel関数で3~4秒の間、燃料を注入している。
計算結果
今回のモデルの計算結果を示す。
まず、2秒間吸気のバルブを開け空気を入れる。3~4秒の間、燃料(ドデカン)を注入し、燃焼させる。5~7秒の間、排気バルブを開け、排出させている。
圧力
温度
バルブ開閉や燃料噴射をエンジン筒内の計算に使えば、エンジンのサイクル計算もできる。
エンジン筒内計算の圧力、温度