XMLファイルに関する説明書を読むと、以下の流れが記されていました(以前のVer.にも添付されていたのですが、見落としていました)。
1. STL、VTK ファイル等の閉じた形状を boundary、fluid として読み込む。
2. fluid の中の座標を1点指定。
3. 粒子を発生させる範囲(BOXの基点座標と、大きさ)を設定。
基本はこれだけ。3の範囲を fluidの範囲 よりも大きくしておくと、その中が粒子で満たされます。
これで3次元の計算準備が整うのですから、メッシュレスの威力、半端ないです。
今回の題材は、以前、土砂移動シミュで作成していた深層崩壊。
範囲は3km2。
地形とその上に分布する土砂の2つのソリッドを Civil3D から書き出し、2つのSTLファイルを作成します。それらを input ファイルで boundary、fluid として指定するだけで読み込むことができました。
少し引っかかったのが、マイナス座標を扱えなかった点。マイナスの付いた公共座標のまま書き出すと、fluid、boundary が自動で (X,Y) = (0,0) を原点として持つように移動されます(当たり前なのかもしれませんが、知りませんでした)。複数の構造物は、それぞれ原点に移動されますので相対位置がズレます。
これについては、モデル全体の基点をプラス領域に移動してから、各々をSTL 書き出しすれば、OKです。
で、計算実行!
粒子が1億個以上発生し、GPUのメモリーオーバー!
ま、予想されていたことです。
GeForce GTX480 だったのですが、GTX660 を SLI で2基連結したマシンではどうか?と思い試してみました。が、なぜかこちらもシングルでしか動かず、メモリーオーバー。
で、粒子間隔を変更しつつ、動作するレベルを探っていきました。
結果、数百万粒子までは計算できそうです。粒子間隔が2mだと、GTX480 で3日となりました(なぜか、GTX660では4日。クロックでしょうか?)。
テストケースとして粒子間隔 4mで実施。これだと 87万粒子(実際に動く粒子は17万個)、120秒間の計算で約5時間程度。
結果を確認すると、おかしな動きをしています。発散したようです。
今度は粘性を上げて計算してみました。
OK。うまくいきました。
と言っても、斜面の上から水を流すように流れるだけで、土砂の動きではありません(この点は、Multi-Phase で承知しています)。
粒子の動きが落ち着くと、天然ダムを形成せず、谷を長く埋める湖の様なフラットな形状ができあがりました。粘性をさらに上げると、それらしい形状になりましたが、おそらく時間の問題でしょう。流体ですね。ま、現段階では仕方ないと思います。
また、これだけ間隔をあけても良いのか?と疑問でしたが、問題ないようです。ま、見た目違和感ない粒子配置でした。
とりあえず、CADデータの取り込みや粒子配置は容易、ということが分かりました。
今度は砂防ダムを作って、それにかかる圧力を見てみましょう。
0 件のコメント:
コメントを投稿