未分類

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

計算実行:Allrun.run

冒頭でも説明しましたが再度Allrun.runスクリプトを記載しておきます。

やっているのは以下です。

  1. output.dat の削除
    古い結果ファイル output.dat が存在する場合は削除する。
    存在しなければ「無い」とメッセージを表示する。
  2. preload.mos の再コンパイルの確認
    「preload.mos を再コンパイルしますか?」と質問する(y/Y → 実行)
    ./runMos.sh preload.mos によりModelica の初期コンパイルを行う
  3. boundarySyncFile のコピー
    constant/fluid/boundarySyncFile_baseをconstant/fluid/boundarySyncFile へ上書きコピーする。
  4. chtMultiRegionFoam をバックグラウンド起動
    chtMultiRegionFoam > log.chtMultiRegionFoam 2>&1 &
    標準出力とエラーを log.chtMultiRegionFoam に保存
  5. 実行しているプロセス ID を取得
    SOLVER_PID=$!
    PID とログファイル名を表示する

計算実行するとlog.chtMultiRegionFoamにOpenFOAMの実行とともにOpenModelicaも実行されているのを確認できます。

ターミナルでlogを見たい場合は、

とするとリアルタイムでログが確認できます。
「ctrl + c」で閉じることができます。

毎回OpenModelicaの計算を挟んでいるので、少し計算の遅さを感じます。

OpenModelicaのコンパイル用のmosファイルはこちらです。

preload.mos

グラフ化

output.datがOpenModelicaの結果なのでそれをグラフ化して、思っている挙動を示しているかを確認します。

graph.ipynb

以下のようになっていたらOK。

ただし、現状温度上限が激しくて途中で発散してしまいましたが、動作はしていることを確認できたので、今後修正していきます。

まとめ

OpenFOAMとOpenModelicaを、FMU4FOAMを使わずに連携させる仕組みを作りました。
OpenFOAMで取得した温度や流量をPython経由でOpenModelicaへ渡し、PID制御結果を再びOpenFOAMに反映する流れです。
毎ステップでMOSファイルを自動生成して計算を回すことで、モデル間のやりとりを完全に自動化できました。

今回は、FMU4FOAMが対応していないマルチリージョン環境でも動作するプログラムを作成できたことになります。

もし、OpenFOAMのマルチリージョンソルバでOpenModelicaと連成させたい場合に参考にしてください。

1 2 3 4 5

COMMENT