いきなりOpenFOAM (55)

メッシュ移動機能

メッシュ移動機能とは

 今回からメッシュ移動機能について説明します。メッシュ移動機能とは、所定のルールに基づいてメッシュを移動しながら解析を行う手法で、今回説明するチュートリアルケースのような、揺動する容器内の液体の挙動の解析などに利用できます。
メッシュ移動のチュートリアルケースはいくつかありますが、簡単な例として、testTubeMixerを使います。testTubeMixerはTUTORIALSのmultiphase/interFoam/ras内にあります。なお、OpenFOAM4では、interDymFoam内にあり、ソルバーもメッシュの移動変形に対応したinterDymFoamを使う必要がありましたが、OpenFOAM7では、下記アドレスのMeshesの記載のようにinterFoamに統合され、メッシュ移動機能のTUTORIALSもinterFoamのカテゴリに移動しました。
「Solver applications include dynamic mesh capability by default, deprecating all “DyM” versions of solvers」
https://openfoam.org/release/7/

チュートリアルケースの実行

 始めに、チュートリアルケースを動作させてみます。TUTORIALSのtestTubeMixerをコピーペーストします。コピーペーストしたフォルダで端末を開き、blockMesh、setFields、interFoamの順にコマンドを入力すると、計算が始まります。paraFoamと入力し、例えば、液面を表示させ、経時変化を観察すると、図1の動画のように揺動しながら回転する容器内の液体の挙動が見られます。

図1 揺動・回転する角型容器内の液体の挙動
移動や回転の設定

 メッシュ移動の回転速度や揺動角度などを規定しているのが、図2に示すconstantフォルダ内のdynamicMeshDictです。dynamicMeshDictファイルを検知するとinterFoamは移動メッシュと判断し計算を行います。同時にUファイルなどが格納される番号フォルダ内に移動済みのメッシュがpolymeshフォルダとして出力されます。つまり、メッシュの移動方法を記載したdynamicMeshDictファイルをconsntantフォルダに追加すれば、通常の解析と同じ操作で移動メッシュの解析が行えます。

図2 dynamicMeshDictファイル

 

dynamicMeshDictファイルの書式はOpenFOAMWikiの下記解説に詳しく記載されています。
https://openfoamwiki.net/index.php/Parameter_Definitions_-_solidBodyMotionFvMesh

 dynamicMeshDictファイルは図2のdynamicFvMesh、motionSolver、solidBodyMotionFunctionから始まる共通した書式と、rotatingTable、rotatingBoxから始まる個別の動作を記述した書式からなります。したがって、チュートリアルケースtestTubeMixerのdynamicMeshDictファイルをコピーして、後半の個別の動作を記述した部分を書き換えることで、任意の問題についても対応できます。個別の動作の代表例として、回転と振動と揺動を表1にまとめました。

回転の場合、solidBodyMotionFunction axisRotationMotion; axisRotationMotionCoeffsとして、{}内に回転中心と回転速度を長さとするベクトルで回転を表します。表1で示す回転の場合、原点を中心として、z軸周りに反時計回りに毎秒1回転の割合で回転します。回転速度は度で表し、回転方向は右ねじの法則に従います。
振動の場合、solidBodyMotionFunction oscillatingLinearMotion; oscillatingLinearMotionCoeffsとして、{}内にベクトルで表した振動の大きさとラジアン単位の振動角速度で振動を表します。表1で示す振動の場合、1秒間に1回、X軸上を原点からスタートし原点から1m離れた点までを往復します。したがって、原点から0.5m離れた点を中心に周波数1Hzで振幅0.5mの往復運動を行うことになります。また、往復運動はサイン関数に従います。
揺動の場合、solidBodyMotionFunction oscillatingRotatingMotion; oscillatingRotatingMotionCoeffsとして、{}内に揺動の中心位置とベクトルで表した揺動の大きさとラジアン単位の揺動角速度で揺動を表します。揺動の角度は回転の場合と異なり、ラジアン単位となることに留意してください。表1で示す揺動の場合、y軸を中心に1秒間に1回、反時計回りに90度傾き、元に戻るという動作を繰り返します。したがって、水平に対して45度傾いた位置を中心に45度の振幅で揺動運動を行うことになります。また、揺動運動はサイン関数に従います。

 原点を中心とした振動や水平を基準とした揺動を行わせたい場合は、あらかじめ初期位置をずらしてモデルを作成する必要があります。また、振動の大きさや揺動の大きさは、振幅の2倍となることにも注意してください。

表1 dynamicMeshDictファイルの書式例

パラメータ設定:回転
solidBodyMotionFunction axisRotationMotion;
axisRotationMotionCoeffs
{ origin ( 0 0 0 );
radialVelocity  ( 0 0 360); //Vector rotation direction, in deg/s }
パラメータ設定:振動
solidBodyMotionFunction oscillatingLinearMotion;
oscillatingLinearMotionCoeffs
{ amplitude (1.0 0 0);
omega 6.28; //rad/s }
パラメータ設定:揺動
solidBodyMotionFunction oscillatingRotatingMotion;
oscillatingRotatingMotionCoeffs
{ origin (0 0 0);
amplitude (0 1.57 0); //units of rad
omega 6.28; //units of rad/s }

 任意の問題に応用するテンプレートとしては、1種類の動作に限定したものの方が使いやすいです。そこで、図2に示すdynamicMeshDictファイルのrotatingTable以下を削除して、y軸周りの揺動のみにした結果が図3です。先ほどの結果から計算結果を削除して、端末からinterFoamと入力すると、計算が始まります。同様にして液面の挙動を動画にすると、図4に示すように、y軸周りに容器が揺動する様子が得られます。

図3 dynamicMeshDictファイルを修正
図4 修正したdynamicMeshDictファイルでの動作

 次回は、具体例として、揺動するフラスコ内の液体の挙動を解析してみます。

 このページでは、各アプリケーションの操作説明は省略しています。FreeCADの具体的な操作については、いきなりOpenFOAM第5回および第7回、OpenFOAMでの計算実行は第8回、ParaViewの操作については第3回第4回および第8回を参考にしてみてください。

おことわり
 本コンテンツの動作や表示はお使いのバージョンにより異なる場合があります。
 本コンテンツの動作ならびに設定項目等に関する個別の情報提供およびサポートはできかねますので、あらかじめご了承ください。
 本コンテンツは動作および結果の保証をするものではありません。ご利用に際してはご自身の判断でお使いいただきますよう、お願いいたします。