2022年5月15日日曜日

SPlisHSPlasH その2

SplishSplash のモデルの作り方がわからないと書き残しています。https://phreeqc.blogspot.com/2020/10/splishsplash.html

これ、多様な解法が実装されています。弾性体の Zero-Energy Mode Control まで実装されており、ゴムのような物体でも安定して計算できています。しかもリアルタイムレンダリング。その結果はゲームの一場面を見せられているようです。

クールタイムを挟んでみると、モデルの作り方はすぐに理解できました(しっかり説明されていました)。json or Pythonで下記のブロックを組み合わせれば良いだけでした。https://splishsplash.readthedocs.io/en/latest/file_format.html

  • Configuration
  • FluidBlocks
  • FluidModels
  • Emitters
  • RigidBodies
  • Fluid parameter block
  • Animation fields

では、手詰まっているモデルを持ってきましょう、ということで作業開始。
DualSPHysics 用の stl があったので、それを FreeCAD で obj に変換。それを RigidBodies に wall として、FluidModels にparticle 生成範囲として与えます。簡単ですね。

用意ができたので、いざ計算!

はい、爆発します。
デフォの DFSPH が原因だと気づくまで数時間かかりましたが、圧縮を許容する手法だと安定して解けるようになりました。obj の境界上に粒子を発生させているのが一因のようにも見えましたが、他にも原因がありそうでした。

設定を試行錯誤する中でカーネルは選択できたのですが、smoothing length を設定する箇所が見当たりませんでした。代替えなのか、利用する粒子の最大数を設定する箇所がありました。この説明を見つけられなかったのですが、粒子数を少なくし精度を落とす代わりに計算を速くする工夫をしているのかもしれません(別の用途かもしれませんが)。

計算途中から粒子数が減っているようにも見えますし、流れも悪い。気になる箇所がまだまだ多く残っていますが、実装されている手法が多様で入替が簡単です。いずれ改善策はみつかるでしょう。
(一部の手法を除き)計算が速く扱いので、試行も簡単。仕事につかえるか、というと?ですが、どの手法が良いかの試算には使えます。

もう少し、触ってみましょう。


0 件のコメント:

コメントを投稿