未分類

【OpenFOAMとOpenMoelica連携(3)】chtMultiRegionFoamによるマルチリージョンソルバ

updateMOS_and_Run.py

updateMOS_and_Run.pyの全文を載せときます。

updateMOS_and_Run.py

ここで行っているのは以下です。

  1. HVACSystem002.mosというOpenModelicaをスクリプト実行するためのファイルを作成
  2. 最後にrunMos.shによりHVACSystem002.mosを実行
  3. constant/updateMOS.lockが削除し、Python実行が終了したことをOpenFOAMに知らせる
  4. output.datにOpenModelicaで得られた結果を出力する

HVACSystem002.mos

mosファイルの全文を載せておきます。

  1. やっていることをまとめると以下です。
  2. Modelica標準ライブラリを読み込む
     loadModel(Modelica);
  3. 指定されたモデルファイルを読み込む
     /mnt/d/work/openfoam/20251017_OpenCAE2025/heatedRoom/HVACSystem001.mo
  4. モデルをビルド(コンパイル)
     モデル名:HVACSystem001
     解析条件:
     - 開始時刻:0
     - 終了時刻:300
     - ステップ数:1000
     - 許容誤差:1e-6
     - 数値積分法:dassl
     - 出力形式:.mat
     - 出力プレフィックス:HVACSystem
  5. システムコマンドでシミュレーションを実行(ここで値を更新している)
     パラメータ上書き
     - Tinlet=293.0
     - TSensor=310.0
     結果出力:
     /mnt/d/work/openfoam/20251017_OpenCAE2025/heatedRoom/HVACSystemResult.mat
  6. 指定時刻 t=300.0 における変数値を読み取る
     - Tout(出口温度)
     - mout(質量流量)
     - heatFlowSensor.Q_flow(熱流量)
     - TSensor(センサー温度)
     - ramp.y(ターゲット温度)
  7. OpenFOAM形式のヘッダを constant/boundarySyncFile に書き出す
     FoamFile ブロックとして、
     - バージョン、フォーマット、クラス、場所、オブジェクト名を定義。
  8. 取得したデータ行を追記モードで出力
     各行に以下の項目を書き出す
     - Time(時刻)
     - mout(質量流量)
     - Tout(出口温度)
     - heatFlowSensor.Q_flow(熱流量)
     - TSensor(センサー温度)
     - ramp.y(ターゲット温度)

OpenModelicaではOpenFOAMで計算したTSensorがOpenModelicaでしているターゲット温度波形(ramp.y:下図一番左オレンジ線)になるようにPID制御を行っています。

この記述をupdateMOS_and_Run.py内で行っているというのが重要なところで、TinletTSensorはOpenFOAMでの結果で得られた値になります。

つまり、OpenFOAMにとってのoutletの温度$\overline{T} = \frac{\sum_i \rho v_iA_i C_p T_i}{\sum_i \rho v_iA_i C_p }= \frac{\sum_i \rho Q_i C_p T_i}{\sum_i \rho Q_i C_p }$はOpenModelicaではTinletとしてインプットされているということです。

constant/fluid/boundarySyncFileに結果を出力します。

constant/fluid/boundarySyncFile

今度はOpenFOAMがこのファイルを読み込み境界名inletに与えれることになります。

OpenFOAMの境界条件の話に行く前に、先にOpenModelicaの設定の話をしておきます。

HVACSystem001.mo

OpenModelicaもUbuntuから起動させモデルを読み込みます。

以下のようにモデル読み込みの計画が出るかもしれません。
気にせず読み込みます(Unload all &なんとかをクリック)

このmosファイルを使ってOpenModelicaを動かしているわけですが、今回のOpenModelicaのモデルは以下のように変更しました。

  • 電気回路による発熱量に上限180000Wを設けています。
    こうすることでOpenFOAMの境界温度を大きくなりすぎないようにしています。
  • 質量流の上限も$1.2\times 0.06\times 2\times 10$にしました。
    空気の密度$1.2\, [\text{kg}/\text{m}^3]$、 流入面積$0.06\, [text{m}^2]$、 流速の上限$2.0\, [text{m}/\text{s}]$にしています。
    あとは適当に係数を10倍にして上限を調整。
1 2 3 4 5

COMMENT