2025/09/06公開
FluidX3dの使い方
格子ボルツマン法(Lattice Boltzmann Method: LBM)の無料ソフトを探していた所、FluidX3dというものを見つけました。
YouTubeにあるデモ動画が圧巻の映像です。
まず描画に驚かされました。流体解析の経験の無い私は、何を可視化しているのか分かりませんでした。
開発者のデモ動画の説明を見ると「velocity-magnitude colored Q-criterion isosurfaces」とあります。
Q基準の等値面を速度の大きさで色付けしているようです。Q-criterionについては検索をすればその意味と算出方法が分かりました。
大雑把な理解としては渦を可視化しているようです。
コンパイル
インストール作業はありませんが、GitHubでダウンロードしたソースコードをVisula Studioでコンパイルする必要があります。
この手のものは大抵コンパイルがエラーで止まって「使えませんでした」となるとことが多いので不安でしたが、チュートリアル動画通りにやったら一発でビルドできました。
素晴らしい。
main_setup()内の設定について
サンプル解析を流してみて、独自の解析を行う際に必要になるであろう設定箇所をいくつか挙げてみます。
基本的にはsetup.cpp内の関数main_setup()をカスタムする事になるようです。
const uint3 lbm_N = resolution(float3(3.0f, 3.0f, 1.0f), 181u);
// input: simulation box aspect ratio and VRAM occupation in MB, output: grid resolution
resolution関数で解析グリッドの大きさを設定できるようです。
便利だと感じたのが最後の引数である使用するVRAMのMBで、モデルの大きさを指定できる事です。
例えば私のPCのGPUのメモリの大きさが8GBなので、8000uと入力すれば限界ギリギリの解析ができるようです。
Mesh* mesh = read_stl(get_exe_path()+”../stl/FAN_Solid_Bottom.stl”, lbm.size(), center, 2.0f*radius);
// https://www.thingiverse.com/thing:6113/files
3D形状はread_stl関数で読み込めるようです。最後の引数でモデルの大きさを調整できるみたいです。
mesh->rotate(float3x3(float3(0.0f, 0.0f, 1.0f), lbm_domega));
// rotate mesh
3D形状を回転させる必要がある場合はrotateを使用すれば良いみたいです。
回転行列と回転速度を入力するみたいです。
解析結果アニメーション
Great software
— OpenSourceLab (@cae_labo) December 30, 2024
Easily build and run the example. #FluidX3D #CFD #GPGPU https://t.co/WA3ccK1WQb pic.twitter.com/hpUAjbsYSK
詳しいことは分かりませんが、渦がすごい。
この動画では
const uint3 lbm_N = resolution(float3(3.0f, 3.0f, 1.0f), 1024u);
としました。
GPUメモリを1G使うという設定になると思います。
例題のデフォルトの値は181uでした。
1024uにしたほうが渦の様子も細かくなり、より詳細な挙動が見られました。
ただし解析のFPSはグッと下がり30~40FPSくらいでした。
グリッド数は画面右下で確認できて、約5000万という膨大な数になっていました。
試しに限界を攻めてみました。
使用しているPCのGPU、NVIDIA GeForce RTX 2070 SUPERの搭載メモリ8Gでやってみます。
渦がさらに細かくなり大迫力の映像になりました。
グリッド数は1億を超えたようです。GPUの計算能力は凄い。
動画は20秒ほどですが解析には1時間ほどかかりました。
録画のファイルサイズも10G近くになるので注意が必要です。
以上を踏まえて何か面白い解析ができたら良いですね。
