オープンCAE勉強会@関西(2023年1月22日)      oversetMeshとsixDoFRigidBodyMotionを用いた剛体運動を伴う流体解析

 FMU4FOAMライブラリはOpenFOAMとOpenModelicaを連成し、流体運動と剛体運動の相互作用を解析することができます。竹とんぼの飛行シミュレーションを紹介したところ、OpenFOAMでもsixDoFRigidBodyMotionライブラリの使用で同じことができるとの指摘を受けました。
 また、overset用にsixDoFRigidBodyMotionをカスタマイズしたライブラリを公開しているkrajitのサイトも教えてもらいました。
そこで、sixDoFRigidBodyMotionを使って竹とんぼの飛行シミュレーションができるか調べました。

floatingBody
floatingBodyWithSpring

 

 sixDoFRigidBodyMotion(以下6RBM)クラスの概要です。6自由度の剛体運動を計算するクラスです。質量、3成分の主慣性モーメント、質量中心を指定します。流体力と重力による6つの運動方程式を解くことで3次元の質量中心位置と3自由度の回転角度の時間履歴を計算し剛体運動を求めることができます。さらに、拘束条件と制約条件を設定することができます。拘束条件では軸上や面内に運動を限定し、制約条件ではバネやダンパー等と接続が可能です。

 6RBMはいくつかのソルバーで利用できますが、overSetMeshと組み合わせて利用したいと考えました。tutorialを調べるとoverSetMeshと6RBMを使ったものは、tutorial/multiphase/overInterDyMFoamのfloatingBodyとfloatingBodyWithBodyがありました。OpenFOAMはOpenFOAM-v2206を利用しました。

 floatingBodyでは、縦横高さ0.24×0.24×0.4mで密度700kg/m3の角柱が水に浮いています。oversetPatchの内部がoverSetMeshになっています。初期状態では図の奥に直方体の水柱があり、水柱が崩壊することで角柱が水面近くで振動する様子をシミュレーションしています。角柱はz軸方向に拘束されており、質量中心はz方向だけ移動します。回転は拘束していないので回転運動が伴います。
 floatingBodyWithSpringでは、密度は500kg/m3と軽くなりましたが、同じ形状の角柱が水に浮いています。バネに接続されてバネに引っ張られて角柱が回転します。質量中心はz面内に拘束されています。

floatingBodyのdynamicFvMeshDict

 floatingBodyのdynamicFvMeshDictをみてみましょう。overSetMeshではdynamicOversetFvMeshをdynamicFvMeshとして使いますが、通常は6RBMライブラリはリンクしていません。しかし、motionSolverlibs (sixDoFRigidBodyMotion);とdynamicFvMeshDictに追記することで6RBMライブラリが使用できるようになります。ここが、今回のポイントとなります。そして、6RBMのキーワードを設定すればよいのです。キーワードを詳しく見てみましょう。

必須キーワード

 6RBMクラスの必須キーワードはpatches、centreOfMass、 mass、 momentOfInertia、 solver、 innerDistance、 outerDistanceの7つです。patchesは剛体のpatchリストです。複数の剛体が指定できるようです。centerOfMassは剛体の質量中心の位置、massは質量、momentOfInertiaは剛体の3成分の主慣性モーメント、solverは剛体の運動方程式用のソルバーでsimplectic、 Crank-Nicolson、 Newmarkが選択可能です。innerDistanceは物体の移動領域の範囲、outerDistanceは物体周りのメッシュ変形領域の範囲となります。

オプションキーワード

 オプションキーワードを説明します。剛体の初期条件として速度velocity、加速度acceleration、角運動量angularMomentum、トルクtorqueを指定できます。流体密度rhoはrhoを指定できます。固定値としたい場合はrhoInfで指定します。
 constraintsはpoint、axis、line、plane、orientationの5つの拘束条件があります。
 restraintsはlinearAxialAngularSpring、linearDamper、 linearSpring、 linearDamperSping、softWall、sphericalAnglarDamper、sphericalAngularSpring、tabulatedAxialAngularSpringの8つの制約条件があります。
 accekerationRelaxationは加速度の緩和係数です。accelerationDampingは定常時の加速度の減数係数です。
 reportをtrueとすると時刻ごとに質量中心、回転角度、速度などを標準出力に出力します。
 gは重力加速度を指定します。gがあれば代用可能です。
 testをtrueとすると重力だけが作用して剛体運動を計算します。

constraintsのキーワードの詳細

 constraintsキーワードを詳しく説明します。axisは指定軸の方向ベクトルを指定してその軸のみの回転運動に制約されます。
 lineはdirectionで指定方向のベクトルを指定して並進運動は指定方向のみとなり、centreOfRotationで指定した点を中心として回転します。centreOfRotationを指定しない場合は質量中心が回転中心となります。
 planeはnormalで面の法線ベクトルで指定し、その指定面内で並進運動が制約され、centreOfRotationで指定した点を中心として回転します。
 pointはcentreOfRotationを中心とした回転運動を行います。centreOfRotaionがないと質量中心となります。この制約は初期条件が考慮されません。
 orientationは回転行列が単位行列に固定され回転運動がありません。

overSetMesh
body 0.1m×0.1m
Base: axis=z, plane=z, v0=(7 7 0) omega=31rad/s
omega=31 -> 314rad/s
orientation
line
point

 krajitの例題にならってconstrantsの例題を実施してみました。overPimpleDyMFoamをソルバーとして使っています。krajitの例では、剛体は円板ですが、回転運動が分かりにくいので剛体は0.1m角の正方形にしました。質量0.1kg、慣性モーメントの成分は6.7e-4kgm2としました。
 Baseケースでは剛体を鉛直45°方向に投射します。初期速度[m/s] (7 7 0)と初期角運動量は2.1e-2kgm2/s、回転速度としては31rad/s(約600RPM)としました。Baseケースは剛体はほぼ放物線に沿って運動します。回転の効果はほぼわかりません。
 初期の回転速度を10倍の314rad/sにすると回転運動の効果がでてきて放物線とは異なった軌道を描くようになります。
 orientationを指定すると回転運動がなくなります。剛体の起動は放物線となります。このケースではBackgroundMeshの外でも計算が実行されてます。
 lineを指定するとそのライン上の並進運動となります。
 pointを指定すると指定点周りで振り子の運動となります。初期条件が考慮されていないことがわかります。

restraintsキーワードの詳細

 restraintsキーワードの詳細について説明します。物体にバネかダンパー、あるいはそれらを組合わせた緩衝物を接続した場合のキーワードです。キーワードにspringがつくとバネ、damperがつくとダンパーが接続します。Angularがつくとモーメントモデルであり、回転運動のみについての制約条件になります。linearがつくと線形運動、sphericalは方向制限がありません。Axialは回転軸指定する場合にキーワードに含まれます。
 変わっているのはlinearSpringDamperで並進運動用柔軟ロープモデルがあります。船をロープで係留する場合の船の運動モデルでつかうようで、バネとダンパーでロープをモデル化しています。
 softwallは壁と剛体の相互作用をモデル化したもので、剛体と壁との衝突を回避するものと推測されます。
 バネは、属性としてバネ定数stiffnessとバネ減衰係数dampingを指定します。ダンバーは減数係数coeffを指定します。その他、キーワードによって必要な補助キーワードを指定します。

floatingBodyWithSpring/dynamicFvMeshDict

 floatingBodyWithSpringのdynamicFvMeshDictを見てみましょう。restraintsキーワードではlinearSpringが指定されています。補助キーワードとして物体座標anchor、接続座標refAttachmentPt、バネ定数stiffness、バネ減衰係数damping、初期バネ長さrestLengthが設定されています。

竹とんぼの飛行シミュレーション
dynamicFvMeshDict

 さて、竹とんぼの飛行シミュレーションですが、overPimpleDyMFoamと6RBMライブラリで実現できます。ここでは、並進運動をz軸のみに拘束して、初期条件として角速度500rad/sを与えています。

 流体運動と剛体運動の連成計算である竹とんぼ飛行シミュレーションがOpenFOAMのoverSetMeshとsixDoFRigidBodyMotionライブラリを使って可能か調べました。
 dynamicOversetFvMeshには本来sixDoFRigidBodyMotionライブラリは組み入れられていないがライブラリの読み込みが可能であることがわかりました。そして、sixDoFRigidBodyMotionライブラリとoverPimpleDyMFoamで竹とんぼ飛行シミュレーションは標準で可能(OpenFOAM-v2206)でありました。
 sixDoFRigidBodyMotionでは、overSetMesh以外のソルバーでは剛体の質量中心座標や速度の運動のデータの取得functionObjectのsixDoFRigidBodyStateが利用できるが、overSetMesh用のソルバーでは使えないことがわかりました。しかたがないので、私の場合はキーワードreportをtrueとして標準出力のlogを保存しlogからデータを抽出する方法でやっています。
 今後、FMU4FOAMとの比較を実施する予定です。

Follow me!