MPS法(Moving Particle Semi-implicit)による非圧縮性流体ソルバーの簡単な実装を組んでみたもの。数値流体力学への理解を深めるのが目的。
流体解析は,連続体としての流体を有限個の離散点で表現し,計算点上に定義される物理量を用いて代数方程式化(離散化)された支配方程式を解くことで行われる. その解析手法は大きく分けて粒子法と格子法の二種類が存在する. 格子法は計算対象空間を格子状に分割しそれぞれに物理量の変数を割り当てて計算する. 格子法では連続体はEuler法で記述される. 一方で,粒子法は計算空間に配置された粒子に物理量を表す変数を割り当てて計算する. 粒子法では連続体はLagrange法で記述され,計算点(粒子)が物理量を保持したまま移動することで流体挙動を表現する.
支配方程式は非圧縮流れの連続式及び運動方程式(Navier-Stokes方程式)である.
非圧縮流れの連続式を次式に示す
ここに,
本稿では流体解析に粒子法の一種であるMPS法を基礎とした高精度粒子法を用いる. 粒子法は物理量の定義点である粒子が流れに沿い移動するLagrange的な手法であり,移流項を排して取り扱うことができる.そのため格子法で問題となる移流項の離散化に伴う数値拡散や数値振動が生じない.また粒子法では相互作用計算時の近傍関係が時々刻々と更新されることから,界面の大変形や結合,分裂などの取り扱いに優れており砕波等の流体表面の大変形を伴う流れを容易に取り扱うことができる.
本節では標準MPS法の計算手順を説明する.MPS法は非圧縮性流れに対してSMAC(Simplified MAC)法と同様の,半陰的アルゴリズム(二段階法)で計算する.
流速ベクトル
なお,
全流体粒子の第一段階の修正速度ベクトル
ここに,
$$\lambda=\frac{\sum_{j\neq i}\left[|\boldsymbol{r}{ij}|^2 w(|\boldsymbol{r}{ij}|)\right]}{\sum_{j\neq i}w(|\boldsymbol{r}_{ij}|)}$$
重み関数
ここに,
第一段階の計算終了時点では粒子数密度は初期粒子数密度とは異なる.第二段階では第一段階で除外された圧力勾配項が質量保存則を満たすように,すなわち粒子数密度を一定値に保つように圧力勾配項が働くことで連続体の非圧縮条件が満たされる.
当該粒子
先に述べたように規則配列時の粒子数密度を初期粒子数密度
ここに,
第二段階での速度修正量
圧力勾配項の離散化は次式の勾配モデルが用いられる.
なお,標準MPS法の圧力勾配モデルは,数値安定性を保つために粒子間力が常に非負(排斥力)となることを保証する.
密度
連続式は以下のように表される.
第二段階での速度修正量、第一段階終了時の粒子数密度の定義、連続式より以下のPoisson方程式が得られる.
連続式から派生した式\ref{eq_mps_n2u}と合わせると,第一段階で生じる粒子数密度の
圧力のPoisson方程式の離散化では左辺の圧力のLaplacian項に対し次式のLaplacianモデルを用いる.
圧力のPoisson方程式を陰的に解いて圧力
ここで,上式の係数行列は対称行列となり,また粒子の組み合わせは互いに影響半径外に位置する場合が殆どであるので疎行列でもある.境界条件として自由表面(水面)については粒子の圧力を0とするディリクレ境界条件を与え,壁面については圧力勾配が0となるノイマン境界条件を設定する.本稿では連立方程式の反復解法としてICCG法(不完全コレスキー分解付き共役勾配法)を用いた.
以上の手順により,圧力のPoisson方程式(PPE)から圧力
- 誤魔化しのない完全な半陰解法を目指す
- 各種高精度化手法を組み込む
- CMPS法は実装済み
- Rust+GPGPUで100万個以上の流体粒子を用いた計算を回せるコードにする