SPH流体シミュレーター 戻る
流体力学

SPH流体シミュレーター

粒子法(SPH法)で液体の流れをリアルタイムシミュレーション。粘性・表面張力・乱流を直感的に体験。

パラメータ
粒子数
粘性係数
重力強度
計算結果
--
FPS
--
粒子数
--
運動エネルギー
球面

キャンバスをクリック&ドラッグで粒子を追加 | 障害物の位置は自動で中央に配置

理論・主要公式

密度推定(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流体シミュレーターとは

🙋
SPH法って、普通の流体シミュレーションと何が違うんですか?メッシュを使わないって聞いたけど。
🎓
大まかに言うと、水を小さな水玉(粒子)の集まりとして計算する方法だね。メッシュ(格子)がないから、水が大きく飛び散ったり、複雑な形の容器に入ったりするシミュレーションが得意なんだ。このシミュレーターで「粒子数」スライダーを動かすと、その粒子の様子が直接見えるよ。
🙋
え、そうなんですか!じゃあ、パラメータの「粘性係数」を変えると、見た目はどう変わるんですか?
🎓
実務では動粘度νで扱うことが多いね。ここで粘性係数を大きくすると、粒子同士が引っ張り合う力が強くなる。例えば、水と蜂蜜を想像してごらん。値を大きくするとドロッとまとまり、小さくするとサラサラと広がる動きになるよ。実際に動かして確かめてみよう。
🙋
障害物にぶつかった時の波や跳ね返りも計算してるんですか?重力の強さも変えられるみたいだけど。
🎓
その通り!各粒子が圧力や速度を持っていて、近くの粒子と力をやり取りするから、障害物との衝突も自然に再現できるんだ。「重力強度」を強くすると、例えば滝のように勢いよく落下するし、弱くすると宇宙空間みたいにゆっくり広がる。パラメータをいじりながら、物理法則がどう効いているか体感できるのがSPHの面白さだね。

よくある質問

はい、粒子数を増やすと流体の挙動をより細かく再現でき、精度が向上します。ただし、計算負荷が増大してリアルタイム性能が低下するため、お使いのGPU性能に応じて調整してください。目安として数千~数万粒子がバランスの良い範囲です。
粘性を高くすると液体がとろりとした動きに、低くすると水のようにさらさらになります。表面張力は液滴のまとまりやすさに影響します。まずはデフォルト値から始め、スライダーで微調整しながら目的の挙動に近づけてください。
時間刻み(タイムステップ)が大きすぎるか、粒子の初期配置が密すぎることが原因です。タイムステップを小さくするか、粒子数を減らして初期間隔を広げてください。また、粘性が極端に低い場合も不安定になりやすいため注意が必要です。
本ツールは教育や直感的な理解を目的としたリアルタイム可視化向けであり、厳密な工学的検証には不十分です。実際の設計には、検証済みの専用CAEソフトウェア(例:OpenFOAM、ANSYS Fluent)をご利用ください。

実世界での応用

防災・水工学:洪水時の氾濫流や土石流のシミュレーションに利用されます。複雑な地形を自由に流れ、建物などの障害物との相互作用を評価できるため、ハザードマップ作成や避難計画に役立ちます。

製造業(鋳造・充填):金属や樹脂を金型に流し込む充填プロセスの解析に使われます。溶湯が複雑な形状の型内部をどう流れ、どこで巻き込みが発生するかを予測し、製品品質の向上に貢献します。

海洋工学:船舶の航行時に発生する波や、海洋構造物(洋上風車の支柱など)への波浪の衝撃力を評価します。自由表面を伴う大きな変形を扱えるSPHの特性が活かされます。

CAEソフトウェアにおける実装:実務では、衝突・爆発解析のLS-DYNAや、オープンソースCFDソフトウェアのDualSPHysics(OpenFOAM連携可能)などでSPHソルバーが提供されており、上記のような専門的な解析に用いられています。

よくある誤解と注意点

SPHを触り始めるときに、いくつか陥りがちなポイントがあるよ。まず「粒子数が多いほど常に精度が高い」という誤解。確かに粒子数を増やすと細かい現象は見えるけど、計算負荷は粒子数の2乗近くで跳ね上がる。例えば、粒子数を1000から2000に倍増させると、近傍探索の計算量で実質4倍近く重くなることも。学習目的なら、まずは少ない粒子数(例:2000〜5000)で大まかな挙動を掴んでから、徐々に増やすのがコツだね。

次にパラメータ設定の落とし穴。粘性係数や圧力係数は独立に変えられるけど、現実の流体を再現するにはこれらのバランスが命。例えば、水のような動粘度($ν$)を再現したい場合、粘性係数だけをいじるのではなく、密度や圧力係数も連動して調整する必要がある。実務では「無次元数」を意識するんだ。このツールで重力を強くしたら、粒子が飛び散ってしまう?そんな時は、圧力係数を少し上げて粒子のまとまりを強くしてみよう。

最後に「SPHは何でも計算できる魔法の手法」という過大評価。SPHは自由表面や大変形に強い反面、弱みもある。例えば、微小な乱流や境界層の詳細な挙動には向かない。また、このデモのように全ての粒子を可視化する方法は直感的だけど、実務では粒子の「統計的な挙動」や「領域平均値」を評価することが多い。ツールで現象を体感した後は、「ここを定量化するにはどうすれば?」と一歩引いて考える癖をつけよう。

使い方ガイド

  1. 粒子数スライダーで初期粒子数を設定(通常500~5000粒子)
  2. 粘性係数を入力:水0.001Pa·s、油0.1Pa·s、グリース1.0Pa·sの範囲で調整
  3. 重力加速度を9.8m/s²から0~20m/s²で変更して流動性を制御
  4. 障害物表示をONにしてダム決壊シミュレーションなどの流体衝突を観察
  5. FPS値が30以上を維持するよう粒子数を調整してリアルタイム計算を実行

具体的な計算例

水(密度1000kg/m³、粘性0.001Pa·s)2000粒子でダム決壊を再現した場合:初期ポテンシャルエネルギー約45J、流動開始時の運動エネルギー35J、障害物衝突後の散逸エネルギー10J。粒子間隔0.05mで設定すると、流速1.2m/sの水が0.3秒で障害物に到達し、SPH相互作用距離2h=0.1m内の粒子圧力が80kPaに達する。

実務での注意点

  1. 非ニュートン流体(スラリー、セメント)は粘性値を動的に調整;剪断速度依存性を考慮して段階的にシミュレーション
  2. 粒子数4000以上ではGPU処理推奨、CPUでは計算負荷が指数関数的に増加してFPS低下
  3. 表面張力効果は小規模液滴(~0.1m)でのみ有効;大規模貯水池では無視可能
  4. 乱流域(Re>4000)では粒子解像度を上げないと渦生成が過小評価される
  5. 重力を0に設定して浮遊液体シミュレーション実験も可能;微小重力環境のタンク設計検証に利用