FMU4FOAMのexamples

 マルチフィジックスでは複雑な境界条件になる場合があります。CFD専用ソフトウエアが他のソフトウエアのFunctional Mockup Unit(FMU)を使って迅速に計算構築が可能な場合があります。
 FMU4FOAMはFunctional Mockup Interface (FMI)規格を使ってOpenFOAMと他のソフトウエアのFMUとの連成やOpenFOAMのFMUをエクスポートするライブラリです。
 FMU4FOAMにはOpenModelicaのFMUとの例題としてexamplesの中にTempControlFlang、heatedRoom、fuelTruckの3つの例題が含まれています。それらの内容についてレポートします。
 OpenCAEシンポジウム2022のFMU4FOAMに関する講演では、「FMU4FOAMは並列計算ができない」と発表しましたが、その後の調査でOpenFOAMのバージョンによっては並列計算可能であることがわかりました。その詳細についても説明します。

図1 FMU4FOAMの概要

 図1にFMU4FOAMの概要を示します。FMU4FOAMはドイツの航空宇宙研究所(DLR)のHenning Scheuferによって製作されました。
OpenFOAMはv2012、v2106、v2112に対応しています。最新のv2206についてはまだ試していません。図1はOpenModelicaのfmuファイルとの連成をする場合を示しました。主要なクラスはexternalCommとpyFMUSimであります。
 externalCommは入出力クラスです。
 入力クラスは、境界条件用としてflowRateInlet、 flowRateOutlet、 unformValue、 wallHeatFlux、fvOptions用としてaccelarationSource、移動メッシュ用としてcoupledTranslationMotion、externalCoupledForceの合計7つが標準で用意されています。竹とんぼ飛行シミュレーションをするため新たにcoupledRotatingMotionを開発しました。ご興味ある方は本ホームページの(コンサルティング紹介/最近の講演発表)をご参照ください。
 出力クラスはextValue、extForces、extSensorの3つが標準で用意されています。
 pyFMUSimはFMI規格に準拠したツールのインタプリタ―クラスです。FMI規格のツールは多数ありますが、examplesではOMSimulatorとpyfmをOpenModelicaの連成シミュレーション用として用いており、これらのツールの解釈とOpenFOAMとのデータ交換をpyFMUSimで行っています。

図2 TempControlFlange

 

 初めのexamplesはTempControlFlangeです。フランジ部品を内部温度をモニターしながら、ON-OFF制御してリニア―に10秒間で25℃昇温する制御シミュレーションです。ソルバーはlaplacianFoamを用いています。OpenModelicaのモデルは標準ライブラリのcontrolledTemperatureを改造して使っています。
 OpenFOAMから内部温度TinとdTinをOpenModelicaに入力して、温度上昇スケジュールと比べて2℃差があれば加熱源のスイッチONにします。OpenModelicaから加熱量Qoutを出力し、フランジのpatch4を加熱します。On-Off制御なので蛇行しながらフランジ温度が上昇していきます。

図3 heatedRoom

次のexamplesは部屋の空調制御シミュレーションのheatedRoomです。OpenFOAMのbouyantPimpleFoamで求めた部屋の内部温度TempSensと排出口の温度ToutletをOpenModelicaに入力し、温度スケジュールに基づいてポンプと加熱装置をPID制御して部屋の空気入口の温度Toutと流量moutを決定してOpenFOAMに出力します。初め50秒間は温度変化なしですが、その後、150秒間で298Kから348Kに昇温します。

図4 fuelTruck
図4-a 連成ありの場合のトラック軌道
図4-b 連成なしの場合のトラック軌道

 最後は、液化水素を運ぶトラックが曲がるときのシミュレーションです。タンク内の液化水素がトラックの移動によってスロッシングしますが、剛体運動とスロッシングを連成した場合としない場合の2とおりについてトラック軌道がどのように変わるかシミュレーションして比較しています。
 OpenModelicaのモデルは標準ライブラリのRollingWheelSetPullingを改造しています。OpenFOAMのソルバーはinterFoamを使っています。
 スロッシングによって生じるタンクに作用する力f_outとトルクm_outをOpenModelicaに入力し、予めカーブを5秒間で90°曲がるために設定された力と合成して、物体と台車に作用させる剛体シミュレーションを行います。移動位置pos_inと物体の回転角RPY_inをOpenFOAMに入力して連成します。
 連成なしの場合は、物体がより搖動してスロッシングも大きくなります。連成する場合は搖動が低減して軌道が安定化します。 
 

図5 並列計算について

 オープンCAEシンポジウム2022では、FMU4FOAMで並列計算ができなかったと発表しました。利用していたOpenFOAMのバージョンは最も古いv2012でした。その後、他のバージョンを調べたら図5のようになりました。v2112では一部修正が必要ですが並列計算ができることが分かりました。公開されているソースコードはv2112用であるものと考えられます。v2012、v2106についても図6のようにコード修正すれば正しく機能するようです。

図6 coupledTranslationMotionの誤り


 ただ、不具合はまだ解消されていません。境界条件クラスでdecomposeParをすると一部の境界条件がdecomposeファイルにコピーされません。マニュアルで0ディクショナリのものをコピーすれば並列計算ができます。FMU4FOAMについてはまだ、わからない部分も多いので、使用環境が適切でない可能性もあります。
 今後も調査を継続していきますので、新たな事実が判明したらまたリポートします。

Follow me!

FMU4FOAMのexamples” に対して1件のコメントがあります。

コメントは受け付けていません。