OpenModelicaのBuildingsライブラリを学ぶ_その3
概要
OpenModelicaでLBNLのBuildingsライブラリを使う。初心者なのでいろいろ教えていただけるとありがたい。
チュートリアル SpaceCoolingの続きをやる。
使用バージョン
-OpenModelica1.12.0 →たぶんModelica標準ライブラリ3.2.2
-Buildings 5.0.1
チュートリアル SpaceCoolingのSystem1の続き
前回はチュートリアル SpaceCoolingのSystem1に配置されている4つのモデルのうち標準Modelicaライブラリを使っている3つ(theCon、TOut、preHea)のモデルについて見てみた。今回は残りのvolについて見てみる。BuildingsライブラリのMixingVolumeというモデルを使っている。
まずはSystem1.moの該当部分を抜粋で確認。
replaceable package MediumA = Buildings.Media.Air "Medium for air"; Buildings.Fluid.MixingVolumes.MixingVolume vol( redeclare package Medium = MediumA, m_flow_nominal=mA_flow_nominal, V=V, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, mSenFac=3) (省略) equation connect(theCon.port_b, vol.heatPort) connect(preHea.port, vol.heatPort)
packageはクラスのまとまりみたいなものらしく、replaceableとかredeclareとかはよく分からないけれど、モデル内のpackageに別のpackageを入れるときの一連の手続きだと思う。volを使うときには中身が空気なのか水なのかなどを指定してやるということだろう。Buildings.Media.Air自体は900行くらいあるのでコードを見ることはしばらく後回しにする。
他のモデルとコネクトしているのはvol.heatPortだけであり、値を設定しているのはMediumとm_flow_nominalとVとenergyDynamicsmとSenFacで5つなのだが、実はMixingVolumeは設定できる部分が多く全ての項目を設定しているわけではない。 OMEdit上の設定画面はこんな感じである。
タブが多い。
m_flow_nominalは流出はvol自体の計算には関係ないので空気の流入量のデフォルト値?だろう。流入空気の温度を設定しているわけでもなさそうなので、計算には使っていない気がするが、チュートリアルのドキュメントによると数値計算上の理由で適切なオーダーに設定する必要があるそうで、ここでは換気回数6回で設定している。
mSenFacは顕熱の熱容量のパラメータで3倍になっているらしい。体積Vの空気(MediumにBuildings.Media.Airを設定している)の3倍の熱容量ということだろうか。家具などを想定して空気よりも多い熱容量を見積もることは多い。
energyDynamicsは結局よくわからない。ここではFixedInitialだが他にDynamicFreeInitialとStedystateInitialとStedystateがある。熱収支式のタイプの選択かと思いきやチュートリアルのドキュメントによるとFixedInitialとした時はOMEdit上でInitializationタブで設定した初期値がvolの初期値になると書いてある。
Mediumはコードに直接書き込まないと設定できないようである。
ややこしいのでコードを読むよりLBNLのホームページへ行ってドキュメントを読んだほうが良い気がするが一応コードも見てみる。
↓Buildings.Fluid.MixingVolumes.MixingVolume
within Buildings.Fluid.MixingVolumes; model MixingVolume "Mixing volume with inlet and outlet ports (flow reversal is allowed)" extends Buildings.Fluid.MixingVolumes.BaseClasses.PartialMixingVolume( final initialize_p = not Medium.singleState, steBal(final use_C_flow = use_C_flow), dynBal(final use_C_flow = use_C_flow)); parameter Boolean use_C_flow = false "Set to true to enable input connector for trace substance" annotation(Evaluate=true, Dialog(tab="Advanced")); Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort( T(start=T_start)) "Heat port for heat exchange with the control volume" annotation (Placement(transformation(extent={{-110,-10},{-90,10}}))); Modelica.Blocks.Interfaces.RealInput[Medium.nC] C_flow if use_C_flow "Trace substance mass flow rate added to the medium" annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); equation connect(heaFloSen.port_a, heatPort) annotation (Line(points={{-90,0},{-96,0},{-100,0}}, color={191,0,0})); connect(C_flow, steBal.C_flow) annotation (Line(points={{-120,-60},{-80,-60}, {12,-60},{12,6},{18,6}}, color={0,0,127})); connect(C_flow, dynBal.C_flow) annotation (Line(points={{-120,-60},{-52,-60}, {52,-60},{52,6},{58,6}}, color={0,0,127})); annotation (省略); end MixingVolume;
↓Modelica.Blocks.Interfaces.RealInput
connector RealInput = input Real "'input Real' as connector" annotation ();
はじめに"Mixing volume with inlet and outlet ports (flow reversal is allowed)"とあり逆流できるというのは熱流の向きとかではなくコネクタでのデータの受け渡しが双方向という意味だろうか。とりあえず一方通行のコネクタもあるのだろう。
あと、論理型の変数を使ってif文で変数宣言部分の制御をしていると思われる部分がよくわからない。 というか全体的によく分からないなぁという部分が多い。
MixingVolumesはかなり複雑でモデルを追っていくのが大変なので継承元の
Buildings.Fluid.MixingVolumes.BaseClasses.PartialMixingVolume も Buildings.Fluid.Interfaces.LumpedVolumeDeclarations も全部見ることはしばらく後回しにする。
計算結果の確認
volの温度の初期値はデフォルトでは20℃らしい。温度-10℃と熱コンダクタンス10000/30W/Kでつながっており、発熱1000Wともつながっている。温度が徐々に下がってだいたい-7℃で定常状態になっている。温度差3℃、熱コンダクタンス10000/30の熱流が1000Wでつなぎこんだ発熱と釣り合っているのでm_flow_nominalを設定しているものの予想通り換気による温度変化はここでは計算されていないと考えられる。
とりあえずvolについて今のところ分かったことは、Mediaで満たされたボリュームで熱容量を設定できる、換気量も設定できる(今回は計算していない。粉塵などの計算もある。)、温度と熱流を持つ点をつなぐことで非定常の温度変化を確認することができるということだろうか。volを満たしたMediaの温度変化分の熱量とコネクタでつながれた点の熱流の収支がバランスされるようになっていると言う理解でいいと思う。
次からSystem2に取り組んでいくけれど、けっこう分からないことが多いのでOMNotebookも少しずつ読んで勉強したほうがいいと感じた。