OpenModelicaのBuildingsライブラリを学ぶ_その6

概要

OpenModelicaでLBNLのBuildingsライブラリを使う。初心者なのでいろいろ教えて頂けるとありがたい。 SpaceCoolingのSystem2をやる。前回はvolとfan廻りをみたのでhexとoutとsenTemHXOutを見る。
使用バージョン
-OpenModelica1.12.0 →Modelica標準ライブラリ3.2.2
-Buildings 5.0.1

チュートリアル SpaceCoolingのSystem2

f:id:kinonotofu:20180606201749p:plain

熱交換器hexは外気outからの給気とvolからの排気の熱交換をしている。センサーsenTemHXOutはhexからでた給気温度をとってcooCoiにつないでいる。
hex、out、senTemHXOut廻りのコネクタは以下のとおり。

connect(vol.ports[2], hex.port_a2);
connect(out.ports[1], hex.port_a1);
connect(out.ports[2], hex.port_b2);
connect(weaDat.weaBus, out.weaBus);
connect(hex.port_b1, senTemHXOut.port_a);
connect(senTemHXOut.port_b, cooCoi.port_a2);

outのコネクタはweaDatから気象データ一式を受け取ってhexへ給気のデータを渡している。逆にhexからおそらく排気のデータを受け取っている。hexはさらにvolからの排気とsenTemHXOutへの給気がつながっている。そしてsenTemHXOutはhexから得たデータをコイルへ出力している。hexからセンサーとコイルの両方へデータを渡すという形にしてしまいそうだがこのように使うらしい。

out廻り

outの設定は以下のとおり。

Buildings.Fluid.Sources.Outside out(nPorts=2, redeclare package Medium = MediumA);

アイコンをぱっと見た感じでvolに近いだろうと思ったのだが中身を見てみると気象データを取り出すだけのモデルだと感じた。nPorts=2で指定された数だけ、Modelica.Fluid.Interfaces.FluidPorts_bが用意されている。気象データやバスからはこのコネクタは出てなかったように思うので、気象データをMediumの状態としてFluidPortsを通じて渡すときのための境界条件用モデルだろう。out.ports[1]は流出条件、out.ports[2]は流入条件のような接続がされているが、FluidPorts_bって流入にも使えるけれど一応流出用のコネクタだよなぁと思った。計算したときに確認してみたい。
outのOMEDit上の設定画面は以下のとおり。
f:id:kinonotofu:20180704222036p:plain
設定画面からコネクタの数を指定できる。物質の濃度を入力したり、固定値で与えたりもできるようだがつかいどころがイメージできない。

hex廻り

hexの設定は以下のとおり。

Buildings.Fluid.HeatExchangers.ConstantEffectiveness hex(redeclare package Medium1 =
      MediumA, redeclare package Medium2 = MediumA,
  m1_flow_nominal=mA_flow_nominal,
  m2_flow_nominal=mA_flow_nominal,
  dp1_nominal=200,
  dp2_nominal=200,
  eps=eps);

熱交換するそれぞれの流体と流量と差圧と、熱交換効率を指定している。このチュートリアルではダクト系の圧力降下を気にしていないが一応設定しているようだ。流量が正の値のとき熱交換器に対してhex.port_a1から流入してhex.portb1から流出、hex.port_a2から流入してhex.port_b2から流出しており、FluidPorts_aとFluidPorts_bがそれぞれ割り当てられている。これは顕熱のみ交換するモデルで全熱交換器はBuildings.Fluid.MassExchangers.ConstantEffectiveness を使うらしい。他にも詳細な熱交換器のモデルがライブラリにはあるけれど、これは入力した交換効率でそのまま顕熱だけ計算するシンプルなものである。 hexのOMEDit上の設定画面は以下のとおり。 f:id:kinonotofu:20180704222541p:plain
↑テキストで指定したのはGeneralの部分。
f:id:kinonotofu:20180704222610p:plain
↑Assumptionでは流れの逆流の有無を指定できる。デフォルトでtrueである。逆流しないと分かっているときはたぶんfalseの方が計算が安定したり速くなったりするのだと思う。
f:id:kinonotofu:20180704222627p:plain
↑Advancedでは流量0付近での計算安定性のパラメータと思われる流量と、ホモトピー法の使用のオンオフ設定がある。ホモトピー法というのをはじめて聞いたのだがたぶんHomotopy analysis method - Wikipediaのことだろう。よく理解できなかったのだがThe HAM is an analytic approximation method designed for the computer era with the goal of "computing with functions instead of numbers."とあるので数値的な解法というよりもなんらかの関数を使ってより解析的な近似で計算するらしい。わからん。
それからコネクタでの実際の温度を計算するかの設定があるがあまり計算に影響するものではなさそうである。
f:id:kinonotofu:20180704222731p:plain
↑Flow Resistanceでは圧力降下の計算に関する設定がある。

senTemHXOut廻り

コイルとファンの間にあるセンサーsenTemSupAirも同じモデルを使っている。実はパラメータの設定も同じである。両方の設定は以下のとおり。

Buildings.Fluid.Sensors.TemperatureTwoPort senTemHXOut(redeclare package Medium =
      MediumA, m_flow_nominal=mA_flow_nominal);
Buildings.Fluid.Sensors.TemperatureTwoPort senTemSupAir(redeclare package Medium =
      MediumA, m_flow_nominal=mA_flow_nominal);

流体と流量の指定をしているだけである。流体の状態をそのまま受け渡すだけで何をやっているのやらという感じではあるが、System3で制御が組み込まれるのだろう。Buildings.Fluid.Sensors.UsersGuideにセンサー類の説明がある。センサーにはコネクタが1つのものと2つのものがあるがMixingVolumesの値を計測する以外は2つのものを使用したほうがよいらしい。また、tau=0とすると定常モデル、tau>0とすると非定常モデルになるらしく、流量に依存しない量を計測する場合は流量0付近で数値的に不安定になるのでtau>0として非定常モデルにしたほうがよいようだ。他にもセンサーの動的挙動に関する説明があったが力不足であまりよく理解できなかった。 senTemHXOutのOMEDit上の設定画面は以下のとおり。 f:id:kinonotofu:20180704230013p:plain
↑非定常モデルとしたときの設定がいろいろできる。 f:id:kinonotofu:20180704230054p:plain
f:id:kinonotofu:20180704230103p:plain
↑この上ふたつはよくある流れの逆流の設定と流量0付近の扱いの設定である。

おわりに

なんとなくライブラリの特徴というかどういう設定があるのかが分かってきたような気はする。小難しい設定があるけれど数値計算上の設定でデフォルト値のままにしておけば大丈夫そうなことが多い。その理解でよいかは別だけれど。
前回更新時点でBuildingsライブラリは5.1.0がリリースされていた。Spacecoolingのチュートリアルが終わるまでは今のライブラリでやろうと思っているが、5.1.0ではBuildings.Fluid.Sourcesでの絶対湿度をXではなくXiを入力として使用できるようになった。Xiは絶対湿度でXは水蒸気密度(water vapor concentration)だと思われる。水蒸気濃度というのは湿り空気の質量で水蒸気の質量を割っているのだろうか。(絶対湿度は乾燥空気の質量で割っている。)とりあえず今は湿度を扱っていないのでとくに影響はなかったがあまり気にしていなければXのことを絶対湿度だと思いこむだろうと思った。やっぱちゃんと分かってないのはよくないな。