粒子法による流体シミュレーションの実験


流体力学なるものにはこれまで全く無縁で生きてきたが、CFDとか有限要素法とか知らなくてもかっちょいい流体のシミュレーションができるということで話題を呼んでいる、「粒子法」について調べてみた。以下は自分が入門書を斜め読みして理解しかけた最低限の、粒子法に関する乱暴な理解である。(あくまで勉強中の人間の独り言くらいの位置づけで捉えて頂きたい)
粒子法シミュレーション―物理ベースCG入門
実在としての粒子(原子)に対し、ニュートン運動方程式を、決められたタイムステップで離散的に積分していく、分子動力学法なるものがある。これの計算原理は今述べた通りであり、非常にわかりやすい計算手法となっている。
一方、流体は、粒子ではなく、連続体なのであり、粒子の運動を扱うニュートン力学では扱えない対象ということがあった。それが故に流体力学なるものが考案された。
ところが、このたび粒子法というものの有効性が注目を集め、リアルな流体の振る舞いを、簡単にシミュレートすることが可能であることが気付かれ始めた。なんと粒子法では流体という連続体を、あくまで仮想的にだが、その部分流とでも言うべきものに見立てた無数の粒子の集合体として扱うというのである。
なので、粒子の運動方程式を、離散的に積分していくという点では、分子動力学法と同様に、ニュートン運動方程式に直接則った手法なのであるが、その仮想流体粒子にいかなる力を仮定すればよいのか、それらはどういう根拠に基づきどう導出されるべきなのか、という点において、また、時間積分をどう行うかなどなど、、つまり連続体をどう離散化するかということで、いくつかの流儀(SPH, MPS,..)が存在する。
流体力学によれば、流体は空間内に連続に定義された物理量の集まりであり、その複数からなる物理量の時間微分や空間微分の関係式というものが、抽出され、定式化されている。「ナビエ・ストークスの式」に代表されるこれら関係式をどう解釈し、仮想流体粒子の挙動へとどう翻訳するか、という点が、今も研究されているところだ。
なのであるが、非常に簡単に言ってしまうと、流体の動きを支配する主な力というものは、圧力粘性外力の3つなのである。もちろんこの他にも表面張力など、状況によって考えるべき種々の効果はあるが、以上の3つの力は流体の動きを説明する上で不可欠の根本的な要因となっている。したがって、上記仮想流体粒子に対して考えるべき力というものも、基本的には以上の3つの力がベースになる。それぞれの力の概要は以下の通りだ。

  • 圧力は単純には周囲の粒子から押される力であり、一定距離内にある粒子間に働く。互いに遠ざけようとする方向に働く。(周囲粒子からの寄与の総和が、その粒子に働く「圧力」ということになる)


  • 粘性は、互いに隣あう粒子の間におきる摩擦力であり、一定距離内にある粒子間に働く。互いの相対速度を減衰される方向に働く。(周囲粒子からの寄与の総和が、その粒子に働く「粘性」ということになる)


  • 外力は、例えば重力など、環境特異的に全ての該当粒子に対して適切に働く力のことだ。ちなみに重力なら、常に下向きに働く。



いかがだろうか。粒子に働く力の向きという点で分子動力学でとくになじみがないのは、2番目の粘性と、3番目の外力であると言えよう。(勿論、実際には分子動力学とは意味もスケールも異なる話だが。)
あとは上記力をシミュレートした粒子を無数に発生させ、適切に配置し、運動方程式の離散積分を果てしなく行えばよさそうだ。表面をマーチングキューブで構築し、適切にレンダリングしてやればとりあえずは流体のシミュレーション映像なんかが手軽に作成できるし、実際、たくさんの動画がユーチューブなどにアップされている。
筆者も以上の程度の理解をベースに作成したささやかなムービークリップを、ユーチューブにアップしてみた。箱の中で、流体のかたまりを落下させるだけのものだが、粒子どうしの圧力により左右に広がり大きな流れとなり、最終的には大海さながらのうねりや壁際に打ち付ける波しぶきのような現象が、自然と再現された様子がわかって頂けるものと思う。

さらに粘性係数を上げ、より液体らしくしたものが以下だ。圧力を感じている粒子は、その圧力の強さの対数強度の分だけ水色に光るようになっている。粘性を下げ、レイノルズ数を上げてやれば、ポールの後ろの部分でのカルマン渦や乱流現象を再現することも可能だ。

また粒子法の、ゲームへの応用も検討されている。たしかに粒子法の計算結果は視覚に訴える部分が非常に大きく、ただ見ているだけでも面白いので、ゲームとの融合は必然の感すらある。目が離せない技術の一つであることに間違いはなさそうだ。

粒子法 (計算力学レクチャーシリーズ)

粒子法 (計算力学レクチャーシリーズ)