OpenFOAM

【OpenFOAM】定常流れ+粒子追跡(カップリング無し)

こんにちは(@t_kun_kamakiri

本記事はOpenFOAMでの粒子追跡の備忘録です。
自分で理解したことや試したことをまとめていきます。

本記事の内容
  • icoUncoupledKinematicParcelFoamを使って粒子追跡の解析
  • 流体は一定の速度、粒子は球体形状とし流体の力を受けて運動する様子をシミュレーション

別の記事で球体にはたらく重力と抗力による質点の運動とOpenFOAMのicoUncoupledKinematicParcelFoamを使って得られた粒子の運動を比較を行う予定です。OpenFOAMの結果は厳密には壁との摩擦もありますし質点ではないので、質点と考えた場合の運動とずれが生じます。

OpenFOAMv2012(EDI版)
WSL2

まずは粒子追跡のソルバを確認します。

粒子追跡のソルバ

こちらを見ると公式サイトほどソルバの数はありません。

自分が使っているバージョンがOpenFOAMv2012ですが、このバージョンだと以下のソルバが用意されています。

icoUncoupledKinematicParcelFoamを使います。

モデル作成

icoUncoupledKinematicParcelFoamが使わているチュートリアルをコピーしてきます。

「/opt/OpenFOAM/OpenFOAM-v2012/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper」というチュートリアルには「hopperInitialState」「hopperEmptying」の2つがありますが、

  • hopperInitialState:初期状態
  • hopperEmptying:本解析

と別れています。

どちらも粒子の運動を解くチュートリアルなのでどちらを使っても良いですが、今回は「hopperEmptying」を使います。

フォルダ移動します。

blockMeshでメッシュ生成

流体領域のメッシュはblockMeshで生成します。
blockMeshで作るメッシュの頂点の番号は以下のようにして、

  • Xmin:inlet(流入条件)
  • Xmin:inlet(流出条件)
  • その他:滑り無し(壁条件)

とします。

system/blockMeshDict

以下のコマンドでblockMeshを実行します。

できたメッシュはParaViewで確認してみましょう。

問題なければ次に境界条件の設定を行います。

境界条件の設定

境界条件は後で元に戻せるように「0.orig」で設定します。

0.orig/U

次に流体の密度を設定します。

0.orig/rho

流体の粘性係数を設定します。

0.orig/mu

乱流モデル(laminar)

constant/turbulenceProperties

乱流モデルは使わない設定です。

物性値の設定

constant/transportProperties

「0/rho」や「0/mu」でも密度$rho=1.2$、粘性係数$mu=\rho \nu = 1.2\times 10^{-5}$としているのに「constant/transportProperties」でも設定していて注意しないと二重に設定してしまっていないか、両者で食い違った設定になっていないかが気になりますね。

ソースコードを少し確認してどうなっているのかを理解しておきましょう。

ソースコードを確認

こちらより確認します。
もしくはこちら( icoUncoupledKinematicParcelFoam.C)

icoUncoupledKinematicParcelFoam.C

メインのファイルはたったこれだけ?って感じです。

物理量の設定は「createFields.H」というファイル名で行っているので確認してみましょう。

createFields.H

少し詳しく見てみます。
以下で流速の「U」の定義を行っていますね。

「 runTime.timeName()」が時間に応じて読み込むファイルを指定している部分です。
「IOobject::MUST_READ」で毎回時間に応じて読み込むという意味で、「IOobject::AUTO_WRITE」が書き込みの指定です。
つまり、「U」は値をファイルに書き込んで出力するということです。

続いて以下で何やら定義しています。

これが良くわかりませんが、調べると「singlePhaseTransportModel.H」のコンストラクタのようです。
コンストラクタはクラスのインスタンス化した際に呼び出される関数で初期設定のようなものです。

.Hのようなヘッダーファイルは関数の定義しか書いていないので、「singlePhaseTransportModel.C」で内容を確認してみます。

これを見ると「U.time().constant()」は「constant」フォルダの意味で「”transportProperties”」が読み込むファイル名なので、結局「constant/transportProperties」の「nu」の値を使っているように思えます。

続いて「rhoInfValue」を次元付きで定義しています。

先ほど「laminarTransport」は「constant/transportProperties」から定義されたsinglePhaseTransportModelクラスなので、おそらくここでの「rhoInf」は「constant/transportProperties」で定義された「rhoInf」のことでしょう。
注意すべきは値は「constant/transportProperties」で定義された「rhoInf」ですが、変数名はrhoInfValueと定義している点です。

ここまででわかったことは、

  • nu
  • rhoInfValue

「constant/transportProperties」で定義された値を使っているということです。

続いて、

「rhoInf」も「mu」も「IOobject::NO_READ」となっていることから、「0」フォルダに「rho」「mu」があるのですがそれは読み込まないという意味になっています。
つまり「0」フォルダに「rho」と「mu」もあって、「constant/transportProperties」にもrhoIhfとnuを読み込む設定だと2重に定義していることになっていないかという疑問に対しては、結局「constant/transportProperties」でのrhoIhfとnuの値しか使っていないということです。

ですので「0」フォルダのrhoとmuの設定ファイルは消しても計算はできます。
なんでrhoとmuの設定ファイルを用意しているのかわかりませんが(解析結果には影響ないと思いますがどうでしょう…)

また、muについては「laminarTransport.nu()*rhoInfValue」で定義しています。
どちらも「constant/transportProperties」でのrhoIhfとnuの値を使って「mu」を定義しているということですね。

粒子の設定

粒子の設定は「constant/kinematicCloudProperties」で行います。

constant/kinematicCloudProperties

今回は粒子に働く力として以下を設定しています。

  • y方向に重力
  • 粒子を球体とみなした抗力

粒子の初期位置は「constant/kinematicCloudPositions」で行い「constant/kinematicCloudProperties」で読み込んでいます。

constant/kinematicCloudPositions

複数の粒子を設定したい場合は、リストとして座標を複数設定します。

球体に働く抗力

粒子には球体に働く抗力が設定されています。
その理論式は以下で確認することができます。

SphereDragForce< CloudType >

SphereDragForce.C

 

KinematicCloud< CloudType >

解析実行

解析実行とVTKファイルの出力を行います。

「;(セミコロン)」でつなぐとコマンドを続けて実行してくれます。

解析が終わったら以下の手順でParaViewで可視化してみましょう。

  • 「.foam」の空ファイルの読み込み
  • 「VTK/lagrangian/kinematicCloud/kinematicCloud_*」の読み込み
  • Glyph>Glyph TypeをSphere

あとはアニメーションなどで挙動を確認。

まとめ

本記事はicoUncoupledKinematicParcelFoamソルバを使った粒子追跡について解説しました。

別の記事で球体にはたらく重力と抗力による質点の運動とOpenFOAMのicoUncoupledKinematicParcelFoamを使って得られた粒子の運動を比較を行う予定です。OpenFOAMの結果は厳密には壁との摩擦もありますし質点ではないので、質点と考えた場合の運動とずれが生じます。シミュレーションも内部でどのような計算が行われているかユーザはわからないのですが、本記事のような基本的な理解からはじめるのが良いでしょう。

粒子追跡で使えるソルバ(おまけ)

ESI版の粒子追跡によるソルバの種類を確認します。

coalChemistryFoamTransient solver for compressible, turbulent flow, with coal and limestone particle clouds, an energy source, and combustionエネルギー源である石炭や石灰岩の粒子雲、燃焼を伴う圧縮性乱流のトランジェントソルバ
DPMFoamTransient solver for the coupled transport of a single kinematic particle cloud including the effect of the volume fraction of particles on the continuous phase連続相に対する粒子の体積分率の影響を含む単一の運動学的粒子雲の連成輸送のための過渡ソルバー
DPMDyMFoamTransient solver for the coupled transport of a single kinematic particle cloud including the effect of the volume fraction of particles on the continuous phase, with optional mesh motion and mesh topology changes連続相に対する粒子の体積分率の影響を含む単一の運動学的粒子雲の連成輸送のための過渡ソルバーで、オプションでメッシュの動きとメッシュのトポロジーを変更することができます。
MPPICDyMFoamTransient solver for the coupled transport of a single kinematic particle cloud including the effect of the volume fraction of particles on the continuous phase. Multi-Phase Particle In Cell (MPPIC) modeling is used to represent collisions without resolving particle-particle interactions, with optional mesh motion and mesh topology changes連続相に対する粒子の体積分率の影響を含む、単一の運動学的粒子雲の連成輸送のための過渡ソルバーです。粒子間相互作用を解決せずに衝突を表現するMPPIC(Multi-Phase Particle In Cell)モデリングは、オプションでメッシュの動きとメッシュのトポロジーを変更することができます。
MPPICFoamTransient solver for the coupled transport of a single kinematic particle cloud including the effect of the volume fraction of particles on the continuous phase. Multi-Phase Particle In Cell (MPPIC) modeling is used to represent collisions without resolving particle-particle interactions連続相に対する粒子の体積分率の影響を含む、単一の運動学的粒子雲の連成輸送のための過渡ソルバーです。粒子間相互作用を解決せずに衝突を表現するためにMPPIC(Multi-Phase Particle In Cell)モデリングが使用されています。
icoUncoupledKinematicParcelFoamTransient solver for the passive transport of a single kinematic particle cloud単一運動論的粒子雲の受動輸送のための過渡ソルバー
icoUncoupledKinematicParcelDyMFoamTransient solver for the passive transport of a single kinematic particle cloud, with optional mesh motion and mesh topology changes単一の運動学的粒子雲の受動的輸送のためのトランジェントソルバ、オプションでメッシュの動きとメッシュのトポロジーを変更可能
reactingParcelFoamTransient solver for compressible, turbulent flow with a reacting, multiphase particle cloud, and surface film modelling反応する多相粒子雲を伴う圧縮性乱流の過渡ソルバー、および表面膜モデリング
reactingHeterogenousParcelFoamTransient solver for the coupled transport of a single kinematic particle cloud including the effect of the volume fraction of particles on the continuous phase. Multi-Phase Particle In Cell (MPPIC) modeling is used to represent collisions without resolving particle-particle interactions連続相に対する粒子の体積分率の影響を含む、単一の運動学的粒子雲の連成輸送のための過渡ソルバーです。粒子間相互作用を解決せずに衝突を表現するためにMPPIC(Multi-Phase Particle In Cell)モデリングが使用されています。
simpleReactingParcelFoamSteady-state solver for compressible, turbulent flow with reacting, multiphase particle clouds and optional sources/constraints反応する多相の粒子雲とオプションのソース/制約を持つ圧縮性乱流の定常状態ソルバー
simpleCoalParcelFoamSteady-state solver for compressible, turbulent flow with coal particle clouds and optional sources/constraints石炭粒子雲とオプションのソース/制約を含む圧縮性乱流の定常状態ソルバー
sprayFoamTransient solver for compressible, turbulent flow with a spray particle cloud噴霧粒子雲を有する圧縮性乱流の過渡ソルバー
engineFoamTransient solver for compressible, turbulent engine flow with a spray particle cloud噴霧粒子雲を有する圧縮性乱流エンジン流れの過渡ソルバー
simpleSprayFoamSteady state solver for compressible, turbulent flow with a spray particle cloud and optional sources/constraintsスプレー粒子雲とオプションのソース/制約を持つ圧縮性乱流の定常ソルバー
sprayDyMFoamTransient solver for compressible, turbulent flow with a spray particle cloud, with optional mesh motion and mesh topology changesスプレー粒子雲を伴う圧縮性乱流のトランジェントソルバ、オプションでメッシュの動きやメッシュトポロジーの変更も可能
uncoupledKinematicParcelFoamTransient solver for the passive transport of a particle cloud粒子雲の受動輸送のためのトランジェントソルバ
uncoupledKinematicParcelDyMFoamTransient solver for the passive transport of a particle cloud粒子雲の受動輸送のためのトランジェントソルバ

日本語はDeepLで直訳したものなので少しおかしな日本語ですが、参考のために載せておきます。これだけを見ても正直どういった用途に使えるソルバなのか区別が付きませんね。

今はそんなに多くのソルバが用意されていません。この辺はよくわかりませんが、ソルバが多すぎるとよくユーザも区別できないですし統一されたのかな?というくらいに思っておきます。

おすすめ参考図書

☟こちらは、OpenFOAMの日本語書籍が無い中唯一わかりやすい参考書だと思います。

OpenFOAMによる熱移動と流れの数値解析(第2版)

OpenFOAMによる熱移動と流れの数値解析(第2版)

3,520円(04/25 10:12時点)
Amazonの情報を掲載しています

☟こちらもOpenFOMの古いバージョンでの和訳になります。さすがにこちらはバージョンに対する日本語でのケアはしていないので、OpenFOAMに慣れている方は購入しても良いかと思います。僕は「日本語でまとまっている内容」なので少し重宝しています。

OpenFOAMプログラミング

OpenFOAMプログラミング

Mari´c,Tomislav, H¨opken,Jens, Mooney,Kyle
8,250円(04/24 20:11時点)
Amazonの情報を掲載しています

☟以下に、もっと初心者向けの同人誌を紹介しておきます。
初心者は「ってか、まずどうやってOpenFOAMをインストールするの?」というところからつまずきがちです。
そんな時は、以下の書籍をおすすめします。

改訂新版 OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))

改訂新版 OpenFOAMの歩き方 (技術の泉シリーズ(NextPublishing))

川畑 真一
2,376円(04/24 17:49時点)
発売日: 2022/04/15
Amazonの情報を掲載しています

インストール方法とチュートリアルで流体解析を体験・・・ちょっと高度な解析まで解説があります。著者曰くOpenFOAMのバージョンの追跡を行いながら、書籍をアップデートするようなので安心ですね。

関連記事もどうぞ

COMMENT

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