OpenModelica

【FMU4FOAM OpenFOAM v2412】温度差でスイッチを制御する回路モデル

こんにちは(@t_kun_kamakiri

本記事では、「OpenFOAMとOpenModelicaをFMUで連携する方法」 を初心者向けに詳しく解説します。インストールから設定、実際のシミュレーションの実行まで、エラー対策も含めて解説するので、この記事を読めばスムーズに統合解析ができるようになります!

といっても今回はOpenFOAM v2412でFMU4FOAMのビルドを行い、Temperature Control in a Flangeの例題を試みましたが、うまく動作していない様子でした。

この記事を読んで解決した方がいらしたらご連絡いただければ幸いです。

ただし、別の例題のHeated roomは正常に動作していることを確認しました。

この記事でわかること

OpenModelicaの温度差による発熱源のスイッチの切り替えを行うシステムをモデル化します。そして、その温度差をOpenFOAMで計算したフランジモデルとの温度差を取得するシステムを構築します。

解説するのはこちらの例題です。

OpenFOAMとOpenModelicaとの連携を行うことで、どのようなことができるのかは以下の記事を読むと良いでしょう。

それでは、さっそくOpenFOAMとOpenModelicaを連携する方法を見ていきましょう!

  • WSL2(OpenFOAM v2412が使用できる状態)
  • gitがインストールされている状態(gitコマンドが使用できる)
  • OpenModelica 1.25.0をLinux版をインストール

FMU4FOAMのビルド

こちらの記事にOpenFOAMv2412を元にビルドする方法を解説しました。
まだの方はこちらをお読みください。

OpenModelicaのLinux版のインストール

Linuxでのfmuを動かす必要があったためOpenModelicaはLinuxにインストールしました。

OpenModelicaでの温度スイッチのモデル作成

今回は使うOpenModelicaのひな型になるモデルの作り方は以下で解説をしています。

フォルダ構成

FMU4FOAMのビルドができたらフォルダ構成を確認しましょう。
以下がTemperature Control in a Flangeのフォルダのフォルダ構成です。

FMU4FOAMに関連するのは以下の部分になるでしょう。

  • ControlledTemperatureCoupled.fmu:Modelicaで作成した温度制御モデルをFMU形式で書き出した実行ファイル。
  • FMUGen.mos:ModelicaモデルからFMUを生成するためのOpenModelica用スクリプト。fmuエクスポートをOpenModelicaのGUIで行う場合は使用しない。
  • FMU.json:OpenFOAMとFMUの間で変数や実行設定を接続するための構成ファイル。
  • controlledTemperature.py:シミュレーション結果を読み込んで温度などを可視化するPythonスクリプト。
  • ControlledTemperatureCoupled.mo:OpenModelicaのモデルファイル

詳しくはこちらをご確認ください。

system/controlDict

system/controlDictには以下のようにfunction objectが設定されています。

  • pyFileNameでcontrolledTemperature.pyのファイル名を指定
  • pyClassはclass controlledTemperature(FMU4FOAM.FMUBase):の部分のクラス名

controlledTemperature.py

controlledTemperature.pyは以下となっています。

新たにOpenModelicaでfmuエクスポートした際には以下の部分を修正することになります。

OpenModelicaの確認

ではOpenModelicaで既に用意されているモデルを確認しましょう。

ControlledTemperatureCoupled.moをOpenModelicaで開きます。

OpenModelicaでモデルを開くと、OpenModelica 1.25.0では一部表示エラーになっていました。
おそらく用意されているOpenModelicaのバージョンが1.19.0とかだからでしょう。

OpenModelicaの表示エラーを解消

デフォルトで用意されているOpenModelicaのモデルでは、バージョンが古く電気抵抗がエラーでしたので、以下のように現在のOpenModelicaのバージョンで動かせるようにしました。

以下の単位を表すクラスのパスも変わっていたので変更。古いバージョンをコメントアウトし、新たに書き直しました。

作り直したモデルが正常に動作するか確認

いきなりOpenFOAMとOpenModelicaを連携させると失敗に気付かないことや、OpenModelicaのモデル設定が間違っていても気付かないことがあります。

ですので、まずはOpenModelica単体で正しく動作しているかを確認する必要があります。

※Tinに値を入れないといけないので、適当な固定値を入れました。

onOffControllerはrampと同じ動き(赤線)をしているので、正常に動作していそうです。

正常に動作していそうでしたら以下のモデルに戻して続きを進めます。

FMIオプションの設定

左のツリーのFMIから必要に応じて修正してください。
Move FMUはデフォルトでfmuをエクスポートする設定です。

FMUのエクスポート

Fileから手動でFMUを出力することができます。

正常にビルドされエクスポートされていることを確認してください。

出力した結果がこちらになります。

  • 1がエクスポートしたファイル(.fmuファイル)
  • 2が新たに作り直したOpenModelicaのモデル(.moファイル)

ControlledTemperatureCoupled.moとは区別してControlledTemperatureCoupled001.moという名前で作成しています。

controlledTemperature.pyを変更

controlledTemperature.pyは以下に変更します。

lalpacianFoamを実行

以上の設定を終えたらあとはOpenFOAMのソルバを実行するだけです。

以上で正常に動作するはず….だったがうまくいかず。

ターゲット温度が切り替わる2秒以降は以下のようなエラーがでます。

具体的にはOpenModelicaのrampの挙動がおかしいということです。

テスト1:rampのモデル

例えばrampを以下の設定します。

Pythonでグラフ作成します。

結果はこうなってしまいます(一番左のグラフを比較)
TinとTargetの動きがOpenModelicaで設定したrampの動きになっていません。

以下の挙動を示すのが正しいはずですが・・・・

OpenModelicaのテキストビューでプログラムを確認しても正しく設定されているようです。

テスト2:rampのheigthを2500

rampのモデルを以下に変更します。

height = 2500,にすると2.5℃上昇した。

duration = 10にすると10秒間でheight の値だけ値を増やす意味ですが、値を変更してもまったく動かない。

疑問

  • rampが思った挙動をしてくれない
  • Tinの値も初期からずっと変わっていないのもおかしい Qoutは思った挙動をしてくれているようにみえる

やったのは、

  • OpenModelicaのモデルを1.25.0のバージョンで作り替え
  • controlledTemperature.pyのControlledTemperatureCoupled001.fmuに変えた

ということです。
もしくするとOpenModelicaのバージョンが新しすぎる可能性があるので、1.19.0にバージョンダウンすると上手く行く可能性があります。

おまけ(Heated roomの例題はうまくいった)

ただし、別の例題のHeated roomは正常に動作していることを確認しました。

OpenModelica1.25.0に作り替え

FMU4FOAMに同封されているモデルをOpenModelicaで開くと電気抵抗のアイコンが表示されていない(エラー)ます。

ですのでOpenModelica1.25.0のバージョンで作り直します。

PIDでもエラーがでます。

PID制御のモデルも作り直し

単位のクラスのパスも変更します。

これでOpenModelica側のエラーは無くなりました。

HVACSystem.fmuをエクスポートします。

HVACSystem.pyの一部を変更

計算実行

特にエラーもなく計算が進みます。

Pythonでグラフ作成

結果はこちらです。
正常に動作しているようです。

公式ホームページで示しているグラフと同じものが出力されています。

まとめ

本記事では、OpenModelicaでの温度制御モデルをOpenFOAMと連携させる手順を解説しました。
しかし、OpenFOAM v2412でFMU4FOAMのビルドを行い、Temperature Control in a Flangeの例題を試みましたが、うまく動作していない様子でした。

しかし、別の例題のHeated roomは正常に動作していることを確認しました。

OpenFOAMに関する技術書を販売中!

OpenFOAMを自宅で学べるシリーズを販売中です。
OpenFOAM初学者から中級者向けの技術書となっていますので、ぜひよろしくお願いいたします。

【電子書籍】OpenFOAM(自宅で深める流体解析)流れと熱移動(1)はOpenFOAMを用いた熱流体解析の基本を、3つの代表的な解析課題(自然対流の解析、円管内の熱流体、円柱周りの熱流体)と通して丁寧に解説しています。
シミュレーションの結果と理論式・実験データとを比較しながら、計算結果の妥当性を自分で判断できる力を養うことを目指しています。

計算力学技術者のための問題アプリ

計算力学技術者熱流体2級、1級対策アプリをリリースしました。

  • 下記をクリックしてホームページでダウンロードできます。
  • LINE公式に登録すると無料で問題の一部を閲覧できます
    ※LINEの仕様で数式がずれていますが、アプリでは問題ありません。

おすすめ参考図書

☟こちらは、OpenFOAMの日本語書籍が無い中唯一わかりやすい参考書だと思います。

OpenFOAMによる熱移動と流れの数値解析(第2版)

OpenFOAMによる熱移動と流れの数値解析(第2版)

3,520円(06/18 15:20時点)
Amazonの情報を掲載しています

☟こちらもOpenFOMの古いバージョンでの和訳になります。さすがにこちらはバージョンに対する日本語でのケアはしていないので、OpenFOAMに慣れている方は購入しても良いかと思います。僕は「日本語でまとまっている内容」なので少し重宝しています。

OpenFOAMプログラミング

OpenFOAMプログラミング

Mari´c,Tomislav, H¨opken,Jens, Mooney,Kyle
8,250円(06/18 19:01時点)
Amazonの情報を掲載しています

☟以下に、もっと初心者向けの同人誌を紹介しておきます。
初心者は「ってか、まずどうやってOpenFOAMをインストールするの?」というところからつまずきがちです。
そんな時は、以下の書籍をおすすめします。

改訂新版 OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))

改訂新版 OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))

川畑 真一
1,320円(06/18 19:01時点)
発売日: 2022/04/15
Amazonの情報を掲載しています

インストール方法とチュートリアルで流体解析を体験・・・ちょっと高度な解析まで解説があります。著者曰くOpenFOAMのバージョンの追跡を行いながら、書籍をアップデートするようなので安心ですね。

 

COMMENT