こんにちは(@t_kun_kamakiri)
本記事では、「OpenFOAMとOpenModelicaをFMUで連携する方法」 を初心者向けに詳しく解説します。インストールから設定、実際のシミュレーションの実行まで、エラー対策も含めて解説するので、この記事を読めばスムーズに統合解析ができるようになります!
スイッチ制御や熱伝導を含むOpenModelicaモデルの構成と考え方
実際の熱システム(発熱・熱伝導・スイッチ切替)を例に、どのようにモデルを組み立てるかを図付きで解説します。
OpenModelicaの温度差による発熱源のスイッチの切り替えを行うシステムをモデル化します。そして、その温度差をOpenFOAMで計算したフランジモデルとの温度差を取得するシステムを構築します。
解説するのはこちらの例題です。
例題ではOpenModelicaとOpenFOAMを連携させていますが、本記事ではOpenModelicaのモデル構築をわかりやすく解説します。
OpenFOAMとOpenModelicaとの連携を行うことで、どのようなことができるのかは以下の記事を読むと良いでしょう。
- FMU4FOAMのexamples
- OpenCAE_Simpo2022_竹とんぼ飛行シミュレーション
- 第38回Modelicaライブラリ勉強会「FMU4FOAMによる竹とんぼシミュレーション(その2)」
- FMU4FOAM:OpenFOAMとOpenModelicaの連成シミュレーションの紹介
それでは、さっそくOpenFOAMとOpenModelicaを連携する方法を見ていきましょう!
- WSL2(OpenFOAM v2412が使用できる状態)
- gitがインストールされている状態(gitコマンドが使用できる)
FMU4FOAMのビルド
こちらの記事にOpenFOAMv2412を元にビルドする方法を解説しました。
まだの方はこちらをお読みください。
OpenModelicaの勉強の方針
OpenModelicaはオープンソースであるがゆえに、モデリカ言語で書かれたプログラムを閲覧することができます。
どのようなプログラムが実装されているか確認することができるため、理論的にしっかり理解したい場合はプログラムの深いところまで読み込む必要があります。
しかし、プログラムの深いところを理解すること、理論をしっかり学んでからでなと先に進めないということであれば本末転倒なので、まずは触ってみて「どのような設定をすればどのような答えが返ってくるのか」を肌で感じながら覚えていく方が良いでしょう。
触っていくうちにどのようなことができるのかを覚えてくるので、その後にしっかり理論を学んでも遅くありません。
まずは小さく目標を立てて少しずつステップアップしていくことを目指しましょう。
OpenModelicaのモデル作成
まずはOpenModelica側の理解をしましょう。
OpenModelicaを起動したら「Thermal>ControlledTemperature」を開きます。
こちらが今回構築するモデルです。
こちらのモデル構築とモデルの意味を理解してからOpenFOAMとの連携の話を行いますので、ここでしっかりとOpenModelicaの理解をしておきましょう。
モデルの新規作成
例題を参考にしながら新たにモデル作成を行います。
熱モデル作成
「ダイアログビュー」の白紙部分に熱に関するモデルをドラッグ&ドロップで移動させます。
視覚的でわかりやすいですね。
これは実はプログラム上ではクラスのインスタンス化を行っている操作になります。
テキストビューに切り替えるとプログラムを確認できます。
ポート同士を線でつなぎやすいようにモデルを回転しておくと便利です。
線で接続します。
とりあえずよくわからなくても良いので線でつないでモデル内の値を設定しましょう。
熱容量の値を設定します。
熱容量は$1\,\text{J/K}$とします。
温度の初期値は20℃になっています。
続いて熱コンダクタンスを設定します。
熱コンダクタンスは$0.1\,\text{W/K}$とします。
熱コンダクタンスはわかりにくいかもしれませんが、電気回路の電気抵抗と類似で考えるとわかりやすいです。
電気の流れであればオームの法則より、$\Delta V=RI$のように電位差$\Delta V$があれば電気抵抗$R$に応じた電流$I$が流れます。
熱の場合は$\Delta T=R_{th}\dot{Q}$のように温度差$\Delta T$があれば熱抵抗$R_{th}$に応じた熱量$\dot{Q}$が熱移動します。
フーリエの法則$\dot{Q}=-\lambda A\frac{\Delta T}{L}$から考えると、熱抵抗$R_{th}=\frac{L}{\lambda A}$となるわけです。
そして、OpenModelicaでは$\dot{Q}=G\Delta T$を計算しており、熱抵抗$R_{th}$の逆数が熱コンダクタンス$G=\frac{1}{R_{th}}$です。
つまり、$G=\frac{\lambda A}{L}$は熱伝導率$\lambda$、面積$A$、長さ$L$を考慮した値で設定する必要があります。
続いて外気側の温度を設定します。
ここまでの意味を整理しておきます。
- FixedTemperatureで固定温度を設定
- ThermalConductorで両端の温度差より$\dot{Q}=G\Delta T$($\Delta T$が両端のポートの温度差)
- HeatCapacitorでThermalConductorの左ポートの温度より$C\frac{dT}{dt}=\dot{Q}$を計算
計算実行
ここまででひとまず計算は実行できます。
計算を実行する前にモデルチェックを行います。
これを行うと計算前にエラーがないかをチェックすることができます。
シミュレーションを実行するとファイルの保存を促されるので適当なフォルダに保存しておきます。
計算が終わると設定された変数の値の結果を見ることができます。
今回はheatCapacityの温度を見てみましょう。
FixedTemperatureで固定温度30℃にしており、HeatCapacitorの温度の初期値が20℃なので時間が経つと熱をもらって温度上昇していくということです。
もう少し計算時間を延ばすと、最終30℃になると温度変化が収束することでしょう。
電気モデル作成
続いて電気のモデル作成に移ります。
その前に温度を検知できるセンサーを挟んでおきます。
電気のモデルをドラッグ&ドロップして線でつないでいきます。
※つなぐ向きなどは間違えないように。
電圧$V=10$、電気抵抗$R=10$などを設定していきます。
ResistorのモデルはuseHeatPortをチェック入れる必要があります。
このチェックを入れると発熱に関する熱の計算をしてくれます。
とりあえず熱の部分とresistorの電気抵抗をつなぎましょう。
少し何をやっているのか見てみると・・・・
1 2 3 4 5 6 7 |
equation assert((1 + alpha*(T_heatPort - T_ref)) >= Modelica.Constants.eps, "Temperature outside scope of model!"); R_actual = R*(1 + alpha*(T_heatPort - T_ref)); v = R_actual*i; LossPower = v*i; end Resistor; |
参照温度T_ref
や抵抗の温度係数alpha
とHeatCapacityから計算された温度T_heatPort
を使って実抵抗R_actual
を計算しています。
さらに電気的な部分の計算で電流i
と電圧v
より、LossPower
を計算しています。
これが消費電力$\text{W}$になります。
以上で熱分野と電気分野のモデル構築ができました。
1D CAEの良いところは、このように別分野のモデルをつなぎ合わせてシステムとして考えるところにあります。
制御モデル作成
続いては制御するモデルを追加します。
- Not:入力信号の論理値(true/false)を反転
- OnOffController:設定値と現在値を比較して、ON/OFF信号を出力します。
- Ramp:時間とともに値が変化する信号を出力するモデルです。
Rampの値の設定をします。
はじめの2秒間は25℃、6秒かけて50℃にするという設定です。
onOffControllerが少しわかりにくいですが、計算させた結果を見るとわかりやすいです。
計算実行
計算実行して結果を確認してみましょう。
onOffControllerの温度変化を見てみましょう。
赤色のuがRampで設定した温度グラフです。
青色がheatCapacityとつながっている温度です。
この温度差が2℃(offControllerで設定)であると、switchをオンにして電気回路の発熱を促しています。
温度差が2℃以上つくとswitchをオフに切り替えます。
緑色の線がスイッチON(値は1)、OFF(値は0)になっているのが確認できるでしょう。
まとめ
本記事では、OpenModelicaでの温度制御モデルの構築の手順を解説しました。
まずはシンプルな例題から手を動かし、実践を通じて理解を深めましょう。
次回は、OpenModelicaとOpenFOAMとの連携までの手順を解説します。
OpenFOAMに関する技術書を販売中!
OpenFOAMを自宅で学べるシリーズを販売中です。
OpenFOAM初学者から中級者向けの技術書となっていますので、ぜひよろしくお願いいたします。
【電子書籍】OpenFOAM(自宅で深める流体解析)流れと熱移動(1)はOpenFOAMを用いた熱流体解析の基本を、3つの代表的な解析課題(自然対流の解析、円管内の熱流体、円柱周りの熱流体)と通して丁寧に解説しています。
シミュレーションの結果と理論式・実験データとを比較しながら、計算結果の妥当性を自分で判断できる力を養うことを目指しています。
計算力学技術者のための問題アプリ
計算力学技術者熱流体2級、1級対策アプリをリリースしました。
- 下記をクリックしてホームページでダウンロードできます。
- LINE公式に登録すると無料で問題の一部を閲覧できます。
※LINEの仕様で数式がずれていますが、アプリでは問題ありません。
- 計算力学技術者の熱流体2級問題アプリ作成
リリース後も試行錯誤をしながら改善に努め日々アップデートしています。
備忘録として作成の過程を綴っています。
おすすめ参考図書
☟こちらは、OpenFOAMの日本語書籍が無い中唯一わかりやすい参考書だと思います。
☟こちらもOpenFOMの古いバージョンでの和訳になります。さすがにこちらはバージョンに対する日本語でのケアはしていないので、OpenFOAMに慣れている方は購入しても良いかと思います。僕は「日本語でまとまっている内容」なので少し重宝しています。
☟以下に、もっと初心者向けの同人誌を紹介しておきます。
初心者は「ってか、まずどうやってOpenFOAMをインストールするの?」というところからつまずきがちです。
そんな時は、以下の書籍をおすすめします。
改訂新版 OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))
インストール方法とチュートリアルで流体解析を体験・・・ちょっと高度な解析まで解説があります。著者曰くOpenFOAMのバージョンの追跡を行いながら、書籍をアップデートするようなので安心ですね。