OpenModelicaでBuildingsライブラリで換気回路網計算を学ぶ_その2

概要

OpenModelicaでLBNLのBuildingsライブラリを使う。初心者なのでいろいろ教えて頂けるとありがたい。
その1ではBuildings.Airflow.Multizoneパッケージを見てExamples.OneRoomにある温度差換気の計算を確認した。風力換気のモデルが見つからなかったので今回は自分で作って使ってみた(実は風力換気用のモデルがあったのでそれも使ってみた)。

使用バージョン
-OpenModelica1.12.0 →Modelica標準ライブラリ3.2.2
-Buildings 5.1.0

作成するモデルの概要

その1で扱ったOneRoomにおいて風が風速2.0[m/s]で吹くものとし、高いほうの窓の風圧係数が-0.2であるとする。低いほうの窓は特に変更しないので風圧係数0.0ということになる。さらに、手計算と比較して検算をしやすくするため、室温と外気温を同じ値にして浮力駆動の換気が起こらないようにする。その他の条件はOneRoomと同じである。

既存モデルの改変

Buildings.Airflow.Multizone.Examples.OneRoomのモデルをベースにするため、モデルを複製する。ファイル→Modelicaクラス新規作成からOneRoomTestというPackageを作り、そこにBuildings.Airflow.Multizone.Examples.OneRoomを複製する。
また、風圧力を考慮したモデルをつくるためにBuildings.Airflow.Multizone.MediumColumnをMediumColumnWithWindという名前で複製しておく。場所はOneRoomTestにする。 このあたりの操作はOpenModelicaでSpaceCoolingを使うときにしたものと同じである。

ファイルを複製したらMediumColumnWithWindに風圧係数と風速を受け取るコネクタを追加し、風圧力を計算する項を追加する。
まず、OMEditのアイコンビューかダイアグラムビューでModelica.Blocks.Interfaces.RealInputをドラッグ&ドロップして名前をvとCpにする。ライブラリブラウザでRealInputで検索をかけてやると見つけやすい。さらにアイコンビュー上でテキストを追加してvとCpとする。既存のテキストを右クリックして複製すると色やサイズなどの設定が楽である。
f:id:kinonotofu:20180908165137p:plain

そして、風圧力を考慮するように以下のように記述する。ここではport_a側(位置が高い方、Top側)に風圧力がかかるようにした。hの最小値は0のままにしているので、このモデルでは高さが低い側に風圧力をかけることはできないことに注意する。

model MediumColumnWithWind "Vertical shaft with no friction and no storage of heat and mass"
(略)
equation 
(略)
  dp = port_a.p - port_b.p;//ここはそのまま
//  dp = -h*rho*Modelica.Constants.g_n
  dp = -h*rho*Modelica.Constants.g_n+Cp*0.5*rho*v^2;//ここは書き換え
(省略)
end MediumColumnWithWind;

このモデルで風圧力を求めるために使っている風圧係数とは風の動圧(速度圧)が建物壁面で静圧に変わる割合のことである。風が吹いているときの壁面の圧力を屋根面平均高さとか軒の高さの動圧で割って算出している。そして風速が大きくなればその動圧に比例して壁面圧力も大きくなるということにしている。風速が変わっても流れ場の性状は風圧係数を求めたときとだいたい同じということを仮定しているのだと思うが、この仮定が有効な風速の条件とかは勉強不足でわからない。レイノルズ数が大きく違ってくるとよくないような気はするがどうなんだろう。

モデルのテスト

風圧力を考慮したモデルができたのでOneRoomで使用するように書き換える。colOutTopのBuildings.Airflow.Multizone.MediumColumnをMediumColumnWithWindに書き換えてやる。ダイヤグラムビューでみると風速と風圧係数をつなぎこむところが使いにくいので右クリックで横反転をしてやる。風圧係数と風速は固定値で与えるのでModelica.Blocks.Sources.Constantをドラッグ&ドロップしてそれぞれCp、とvという名前にする。kにそれぞれ-0.2、2.0を与え、コネクタをつないでやる。
f:id:kinonotofu:20180908183251p:plain

さらに、今は風圧力だけの換気を計算するようにしたいので、浮力が発生しないようにvolOutのInitializationタブのT_startを273.15+20にしてvolEasと同じ値にする。これでモデルを全角文字を含まないパスに保存して、実行する。
f:id:kinonotofu:20180908183316p:plain

手計算だと流量係数0.65、面積0.01m2の開口部を直列合成したときの有効開口面積は0.00459619[m]、密度を1.19684[kg/m3]として圧力差0.478736[Pa]で風量は0.00410554[m3/s]になる。計算結果が0.0041059[m3/s]でだいたい計算はできていそうである。

動圧込みの外気モデル

実はBuildings.Fluid.Sources.Outside_CpBuildings.Fluid.Sources.Outside_CpLowRiseでは気象データで得られる大気圧に風速と風圧係数から算出した動圧を加えた圧力を使っている。Outside_Cpは風圧係数を定数かコネクタから入力でき、Outside_CpLowRiseはwindPressureLowRiseで風圧係数を計算する。ただし、大気圧と風速の入力はweaBusからなのでReaderTMY3からデータを入力する必要がある。そういうことでこれを使って計算してみることにした。
上の開口部はOutside_CpでCpを-0.2にして下の開口部はOutsideを使うようにした。どちらもredeclare package Medium = Mediumをテキストビューで追加し、接続はnPortsを1にしてport[1]にcolOutTopやcolOutBotにつないだ。
気象データの方はReaderTMY3でpAtmを1.01325[bar]、TDryBulを20[degC]、winSpeを2.0[m/s]としてそれぞれParameterから入力とした。filNamは指定しないと計算できなかったので適当に"C:/OpenModelica1.12.0-64bit/lib/omlibrary/Buildings 5.1.0/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos"を指定した。それから接続するときダイアグラムビューで接続するとconnect(weaBus, weaBus)などとなってしまったのでconnect(weaDat.weaBus, out.weaBus)やconnect(weaDat.weaBus, outcp.weaBus) に修正する必要があった。モデルと計算結果は以下のとおり。
f:id:kinonotofu:20180908200730p:plain
f:id:kinonotofu:20180908201013p:plain
風量は0.00406035[m3/s]でだいたい同じ値である。こちらをはじめから使えばよかったのだけれど気づかなかった。サンプルファイルもBuildings.Fluid.Sources.Examples.Outside_Cpにありだいたい同じようなことをやっている。

おわりに

とりあえず風力換気の計算ができた。次はもう少しだけ実践的に気象データを使って時刻変動する換気量を計算したい。