OpenFOAM

【3次元ダムブレイク流体解析(OpenFOAM)】圧力データと水面高さの実機比較

解くべき方程式(2相流)

OpenFOAMの2相流のソルバ”interFoam”を用いて3次元ダムブレイクの解析を行います。
interFoamは気体と液体の気液混相流をVOF法で解くソルバーです。

ツール

  • OpenFOAM:v2006
  • ソルバ:inerFoam

解くべき方程式

  • 運動方程式(2次元)
  • 体積分率の保存
  • 表面張力
    ※VOFによる界面の表現

今回使っている「interFoam」のソルバはVolume Of Fluid(VOF)法による、二相流ソルバーです。

相の区別を各相の体積分率(0~1)で行い、密度や粘性を体積分率をかけて、ナビエストークス方程式を解いています。

ナビエストークス方程式

\begin{align*}\frac{\partial \rho_{b}\boldsymbol{u}}{\partial t}+\nabla\cdot\big(\rho_{b}\boldsymbol{u}\boldsymbol{u}\big)=-\nabla p+\nabla\cdot\mu_{b}\big(\nabla \boldsymbol{u}+\nabla \boldsymbol{u}^{T}\big)+\rho_{b}\boldsymbol{f}+\boldsymbol{F}_{s}\end{align*}

密度

\begin{align*}\rho_{b}=\alpha_{1}\rho_{1}+\alpha_{2}\rho_{2}\end{align*}

粘性

\begin{align*}\mu_{b}=\alpha_{1}\mu_{1}+\alpha_{2}\mu_{2}\end{align*}

表面張力

\begin{align*}\boldsymbol{F}_{s}=\gamma \kappa\big(\nabla \alpha\big)\end{align*}

\begin{align*}\kappa=\nabla\cdot\big(\frac{\nabla\alpha}{|\nabla\alpha|}\big)\end{align*}

非圧縮の条件

\begin{align*}\nabla\cdot \boldsymbol{u}=0\end{align*}

体積分率の移流方程式

\begin{align*}\frac{\partial \alpha}{\partial t}+\nabla\cdot \big(\alpha \boldsymbol{u}\big)=0\end{align*}

※\(\alpha_{2}=1-\alpha_{2}\)
※\(\kappa\):界面の曲率
※\(\gamma\):界面張力

解析設定

水の領域設定

空気と水の領域をVOF法で設定する場合はsetFieldsDictによって設定を行います。

system/setFieldsDict

setFieldsのオプションは以下があります。

  • -case dir
    Specify case directory to use (instead of cwd)
  • -decomposeParDict file
    Use specified file for decomposePar dictionary
  • -dict file
    Alternative setFieldsDict
  • -parallel
    Run in parallel [Parallel option]
  • -region name
    Specify alternative mesh region
  • -doc
    Display documentation in browser
  • -help
    Display short help and exit
  • -help-full
    Display full help and exit

defaultFieldValuesでデフォルトの各相の体積分率と速度を設定することができます。

  1. volScalarFieldValue alpha.water 0
  2. volVectorFieldValue U (0 0 0)

boxToCellでどの領域にどのような設定を行うかを指定します。

  1. box (1.992 -1 0) (3.22 1 0.55)
  2. volScalarFieldValue alpha.water 1

boxはメッシュからはみ出た部分でもエラーは出ないので、境界ギリギリの寸法にせず大きめに設定しても良いです。

ではsetFieldsコマンドを実行して空気と水の体積分率を作成しましょう。

paraviewで結果を確認しましょう。

これで空気と水の初期状態ができました。

物性値の設定

system/transportProperties

ここでは水(water)と空気(air)の物性値を設定しています。

  • transportModel:粘性項をニュートンの粘性法則(流れのせん断応力と流れの速度勾配が比例した粘性の性質を持つ流体と仮定)
  • nu:動粘性係数[m2/s]
  • rho:密度[kg/m3]

「sigma 0.07;」で表面張力$\kappa$の値を設定しています。

表面張力

  • $\boldsymbol{F}_{s}=\gamma \kappa\big(\nabla \alpha\big)$
  • $\kappa=\nabla\cdot\big(\frac{\nabla\alpha}{|\nabla\alpha|}\big)$

乱流モデル

今回は乱流モデル無しで行います。

constant/turbulenceProperties

今回こちら「$FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreakWithObstacle/」のチュートリアルを利用していますが、乱流モデルなしのケースファイルでも「k,nut,omega」ファイルがありますが、こちらは乱流モデルの際に使うので今回は特に設定をしなくも良いです(使っていないので)。

0.org/U

重力の設定

constant/g

重力加速度はz方向の下向きに設定します。

境界条件の設定

境界条件は、

  • 速度$U$
  • 圧力$p$
  • 体積分率$\alpha$

の3つです。

0.org/U

0.org/p_rgh

0.org/alpha.water

境界条件についての考え方は自分もよくわからなくなるので、下記の記事で簡単にまとめておきました。特にマッハ数がいくつかによって境界条件の考え方が違ってくるので、整理しておく必要があります。

スキームの設定

system/fvSchemes

system/fvSolution

計算制御の設定(圧力計測点、水面高さ)

圧力計側点の設定

system/probes

今回はこちらの実験データの圧力計測点と同じ位置の圧力データを取得する設定を行います。

  • 「fields (p p_rgh);」で出力する物理量を指定します。
  • probeLocationsで出力したい座標位置を指定します。
  • 「interpolationScheme cellPoint」はセル値による線形重み付け補間スキーム

probesをsystem/controlDictで読み込みます。

水面高さの計測の設定

水面高さを計測するためinterfaceHeight1を設定します。

system/controlDict

「direction (0 0 -1);」は重力の方向を正しく指定する必要があります。
今回はz方向下向きに重力がはたらいているためこのような設定としました。

また、「postProcessing/interfaceHeight1/0/height.dat」には一つの座標に対して以下の出力結果が出されます。

  • # hB : Interface height above the boundary:水面の高さ
  • # hL : Interface height above the location:波の高さ

いずれも重力の方向を正しく指定することが重要です。

その他の設定

チュートリアルは空気と水の界面でのメッシュを時刻歴で再分割するようにdynamicMeshが採用されています。

今回このような設定では解析時間がとてもかかるのと、結果処理がものすごく重いためノートPCで耐えられる計算ではないため、「dynamicFvMesh staticFvMesh;」を使って無効にしておきます。

constant/dynamicFvMeshDict

decomposePar 並列計算の設定

計算時間もかかるため4並列にして計算を実行します。

system/decomposeParDict

scotchを使えば適当に最適化して分割してくれます。

以上で解析の設定が終わりました。

1 2 3 4 5
関連記事もどうぞ

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です