SPHカーネル関数
密度推定(Poly6カーネル):
$$W_{poly6}(r,h) = \frac{315}{64\pi h^9}(h^2-r^2)^3$$圧力勾配(Spikyカーネル):
$$\nabla W_{spiky}(r,h) = -\frac{45}{\pi h^6}(h-r)^2 \hat{r}$$$h$: 平滑化長さ、$r$: 粒子間距離
キャンバスをクリック&ドラッグで粒子を追加 | 障害物の位置は自動で中央に配置
粒子法(SPH法)で液体の流れをリアルタイムシミュレーション。粘性・表面張力・乱流を直感的に体験。
密度推定(Poly6カーネル):
$$W_{poly6}(r,h) = \frac{315}{64\pi h^9}(h^2-r^2)^3$$圧力勾配(Spikyカーネル):
$$\nabla W_{spiky}(r,h) = -\frac{45}{\pi h^6}(h-r)^2 \hat{r}$$$h$: 平滑化長さ、$r$: 粒子間距離
キャンバスをクリック&ドラッグで粒子を追加 | 障害物の位置は自動で中央に配置
SPH法の核心は、連続体である流体の物理量(密度など)を、離散的な粒子の値から「滑らかに」推定することです。そのために使われるのがカーネル関数 $W$ です。ここでは密度の推定にPoly6カーネルがよく使われます。
$$W_{poly6}(r,h) = \frac{315}{64\pi h^9}(h^2-r^2)^3$$ここで、$r$ は粒子間距離、$h$ は影響半径(スムージング長)です。この関数は距離 $r$ が $h$ 以内の近傍粒子にのみ重みを与え、遠くの粒子の影響を滑らかにゼロにします。
圧力や粘性などの力を計算するためには、カーネル関数の勾配が必要です。圧力勾配の計算には、数値的に安定するSpikyカーネルの勾配が用いられます。
$$\nabla W_{spiky}(r,h) = -\frac{45}{\pi h^6}(h-r)^2 \hat{r}$$$\hat{r}$ は粒子間の単位方向ベクトルです。この式は、近傍粒子から受ける圧力の力の方向と大きさを決定します。これらをすべての近傍粒子について足し合わせることで、ある一つの粒子に働く正味の力が計算され、運動方程式($F=ma$)を解いて粒子の動きが更新されます。
防災・水工学:洪水時の氾濫流や土石流のシミュレーションに利用されます。複雑な地形を自由に流れ、建物などの障害物との相互作用を評価できるため、ハザードマップ作成や避難計画に役立ちます。
製造業(鋳造・充填):金属や樹脂を金型に流し込む充填プロセスの解析に使われます。溶湯が複雑な形状の型内部をどう流れ、どこで巻き込みが発生するかを予測し、製品品質の向上に貢献します。
海洋工学:船舶の航行時に発生する波や、海洋構造物(洋上風車の支柱など)への波浪の衝撃力を評価します。自由表面を伴う大きな変形を扱えるSPHの特性が活かされます。
CAEソフトウェアにおける実装:実務では、衝突・爆発解析のLS-DYNAや、オープンソースCFDソフトウェアのDualSPHysics(OpenFOAM連携可能)などでSPHソルバーが提供されており、上記のような専門的な解析に用いられています。
SPHを触り始めるときに、いくつかハマりがちなポイントがあるよ。まず「粒子数が多いほど常に精度が高い」という誤解。確かに粒子数を増やすと細かい現象は見えるけど、計算負荷は粒子数の2乗近くで跳ね上がる。例えば、粒子数を1000から2000に倍増させると、近傍探索の計算量で実質4倍近く重くなることも。学習目的なら、まずは少ない粒子数(例:2000〜5000)で大まかな挙動を掴んでから、徐々に増やすのがコツだね。
次にパラメータ設定の落とし穴。粘性係数や圧力係数は独立に変えられるけど、現実の流体を再現するにはこれらのバランスが命。例えば、水のような動粘度($ν$)を再現したい場合、粘性係数だけをいじるのではなく、密度や圧力係数も連動して調整する必要がある。実務では「無次元数」を意識するんだ。このツールで重力を強くしたら、粒子が飛び散ってしまう?そんな時は、圧力係数を少し上げて粒子のまとまりを強くしてみよう。
最後に「SPHは何でも計算できる魔法の手法」という過大評価。SPHは自由表面や大変形に強い反面、弱みもある。例えば、微小な乱流や境界層の詳細な挙動には向かない。また、このデモのように全ての粒子を可視化する方法は直感的だけど、実務では粒子の「統計的な挙動」や「領域平均値」を評価することが多い。ツールで現象を体感した後は、「ここを定量化するにはどうすれば?」と一歩引いて考える癖をつけよう。
このシミュレーターで扱っている計算の考え方は、実は流体以外の様々な連続体力学の問題に応用されているんだ。まず挙げるのは「固体力学における破壊解析」。金属の疲労やコンクリートの割れ進展を、粒子の結合が切れていく過程としてモデル化する「結合粒子法」なんかはSPHと親戚みたいなものだよ。
もう一つは「粉体工学」。小麦粉や砂粒のような粉体の流動は、粒子同士の衝突と摩擦が支配的。SPHの粒子に摩擦係数や回転を考慮したモデルを追加することで、サイロからの排出や混合プロセスのシミュレーションが可能になる。例えば、コーヒー豆の袋詰め機で詰まりが起きる場所を予測するのに使われたりするんだ。
さらに「生体力学」への応用も面白い。血液は明確な自由表面はないけど、血管内を流れる非ニュートン流体だよね。SPHの粒子に、せん断速度によって粘性が変わる性質を持たせれば、動脈瘤での複雑な血流や、赤血球のような柔軟な粒子の挙動をシミュレーションする研究が進んでいる。このツールで粘性係数を変える感覚が、その基礎理解に繋がるよ。
このツールに慣れて「もっと中身を知りたい」と思ったら、次の3ステップがおすすめだ。まずステップ1:支配方程式の理解。SPHの背後には「ナビエ-ストークス方程式」という流体の運動方程式がある。いきなり全部は難しくても、$$ \rho \frac{D\boldsymbol{v}}{Dt} = -\nabla p + \mu \nabla^2 \boldsymbol{v} + \rho \boldsymbol{g} $$ という式の右辺が、このツールの「圧力」「粘性」「重力」の各パラメータに対応している、とだけ押さえよう。ツールを動かしながら「今、私はこの項をいじっているんだ」と意識するだけで学びが深まる。
ステップ2:離散化のキモ「カーネル近似」と「粒子近似」を区別して学ぶ。既存テキストのカーネル関数$W$は「重み付け関数」だけど、これをどう使って物理量を粒子の値で表現するかが次の山だ。例えば、ある点での密度$\rho$を近傍粒子$j$の質量$m_j$から求める式 $\rho(\boldsymbol{r}) \approx \sum_j m_j W(|\boldsymbol{r}-\boldsymbol{r}_j|, h)$ を、このシミュレーターの粒子一つ一つで実行している、とイメージしてみてくれ。
最後のステップ3:実践的な課題に挑戦。学習目標を「このツールで、蜂蜜と水の挙動の違いを再現するパラメータセットを見つけよう」とか「障害物の角度を変えて、流れが剥離する条件を観察しよう」と具体的に設定するんだ。その過程で、パラメータが非線形に効くことや、初期条件の重要性に気付くはず。それが、いずれ実務でCAEソフトを使い、実験データとシミュレーションをすり合わせる「キャリブレーション」作業の、最初の第一歩になるよ。