はじめに
一般的な流体シミュレーションでは空間をグリッドに分割して流体を表現します.これを「格子法」と呼びます.
一方,流体を粒子で表現しようとするのが「粒子法」です.粒子法にはいろんなメリットがあります(こちらのサイトで詳しく説明されています).何よりも,個人的には粒子法の方が物理的に自然なモデリングかなぁと思っています.
この記事は「MPS法解説シリーズ」の一部です.このシリーズでは粒子法の一種である「MPS法」を解説しています.初めましての方は,ぜひシリーズの全体像からご覧ください.
目次
やりたいこと
この記事では重み関数と粒子数密度についてご紹介します.これらは今後の記事でご紹介する「離散化モデル」の理解に必要不可欠な概念です.
重み関数
粒子法では微分方程式を離散化する際に粒子間の相互作用を考慮します.その際,近くにある粒子の影響をより大きく反映させるため,重み関数を用います.すなわち,粒子 $i$ に対する粒子 $j$ の影響を,その間の距離に応じて”重み付け”するわけです.重み関数のことをkernelと言ったりもします.
重み関数は様々なものが提案されていますが,基本的に必要な性質としては以下の2つが挙げられます.
性質1 距離が近づくにつれて重み関数の値が無限大に発散すること
性質2 ある距離以上離れると値がゼロになること(これをcompact supportといいます)
性質1には,粒子同士が近づきすぎることを防ぐ目的があります.性質2は計算時間を短縮するために重要です.仮に無限遠まで値を持つ重み関数を採用すると,1つの粒子に関する値を求めるのにシミュレーション空間の全粒子について計算しなくてはなりません.
このような性質を持つ重み関数として一番シンプルなのは次のようなものです.
w_{ij}= \left\{
\begin{array}{}
\frac{r_e}{|\boldsymbol{r}_{ij}|}-1 &(0\le|\boldsymbol{r}_{ij}|\le r_e)\\
0 &(r_e<|\boldsymbol{r}_{ij}|)\\
\end{array}
\right.
ここで, $r_e$ は特定のパラメータであり粒子の影響半径を表します.経験的に, $r_e$ は粒子間距離の2倍~4倍に取るのがいいとされています(Koshizuka and Oka, 1996).
重み関数の形としてはこれ以外にも多くが提案されており,それぞれで計算精度の向上が認められています.近いうちにこれらについてもまとめたいなぁと考えています.
粒子数密度
流体の密度を評価するために,粒子数密度 $n$ を用います.
math n_i=\sum_{j\ne i}w_{ij}
すなわち,粒子数密度は重み関数の和です.これを用いて,流体密度は近似的に次のように求まります.
math \frac{\rho_i}{\rho^0} \approx\frac{n_i}{n^0}
粒子数密度の基準値 $n^0$ としては,粒子が等間隔に並んでいる初期配置において十分内側に位置する粒子の粒子数密度を用います.
#まとめ
この記事では重み関数と粒子数密度についてまとめました.現時点では基本的なことしか述べられていませんが,重み関数の改良形はいくつか提案されていて,奥が深い内容です.今後どんどんアップデートしていきたいと考えています.