フリーの流体解析ソフト"Flowsquare"の操作方法についてです。正式な操作方法等は本家サイトを見るのが一番ですが、使っているうちに理解が進んだ(と思っている)ので覚書を記載することにしました。
Flowsquareを使ってバイクや車のカスタムパーツを作ってやるぜという方、興味本位でシミュレータで遊んでみたいなぁという方の参考になればと思います。
はじめに
私はシミュレータを使わせてもらって遊んでいる一個人です。数式を理解しているわけでもなく、Flowsquareを使って結果がこうだったとか感じたことを記載しているだけになります。お約束ながら、内容に保証は無く誤りがある可能性があります。また、内容は常に更新中です。
(もし誤りを見つけられましたらコメント頂けますとありがたいです)
環境
フリーの実行速度制限版を使わせて頂いています。
- CPU:Intel Corei5
- OS:Windows10 64bit
- Flowsquare Ver4.0 (フリー版、実行速度制限あり)
シミュレーション設定について
まず、基本的な使い方については本家サイトを参照ください。
- Flowsquare - レッスン0 — 始めの始め
http://flowsquare.com/jp/2013/11/25/lesson-0-before-you-start/
モデル(bc.bmp)について
厳密にシミュレーションするなら、モデル前方にモデルx10倍、モデル後方にモデルx20倍、モデル上方にモデルx10倍の空間を確保する必要があるそうです。実際に豆粒のようなモデルならともかくとして、ある程度の大きさのモデルでそのような大きさのシミュレーションを走らせると膨大な時間が必要になります。
それよりはるかに小さい1920x1080サイズのbc.bmpで20000stepが完了するのに3日を要しました。計算方法に高精度を選べばさらに時間がかかるでしょう。
Flowsquareを使って自宅のPCでシミュレーションするには空間の大きさをある程度で妥協することになると思います。しかし、小さくしすぎるとシミュレーション結果がおかしなことになってしまいます。
例えば、以下に同じ形状のモデル(カブの車体)で空間の大きさを変えてシミュレーションを行ってみた結果を比較してみます。モデル周辺の流速を見ると明らかに結果が異なるのが分かります。
512x256の場合
1920x1080の場合
設定パラメータ(grid.txt)について
私が弄ったことのあるパラメータについて記載します。
bc.bmpのサイズ
そのままbc.bmpのサイズを指定します。以下の設定だと1920 x 1080のFullHDサイズの画像ということになります。
02:nx 1920 // No. grid points 03:ny 1080 // No. grid points
シミュレーション空間の大きさ
bc.bmpで定義したシミュレーション空間の大きさ(単位:メートル)です。空間に配置したモデルの大きさ(x,yのドット数)とbc.bmpのサイズから計算して求めています。
04:lx 19.7 // Domain x-size 05:ly 11.1 // Domain y-size
シミュレーションの開始/終了ステップ数
新規のシミュレーションでは"sts"に"0"を指定して実行します。途中で終わったシミュレーションを再開する場合には、再開したいステップ数を指定します。再開可能なステップ数は"dump"フォルダに保存されているファイルを見ると分かります("p-000015000.dat"といったファイルがある場合、15000stepから再開可能です)。
06:sts 7000 // Start time step (new simulation starts from sts=0) 07:latts 20000 // End time step
計算精度
"1:high order"が最も高精度とのことですが、べらぼうに時間がかかります。大きいサイズのシミュレーションに適用すると終わる気配がありません。
私はカブの形状を弄って遊ぶ場合は"3:4th+LW"を使用しています。
09:iorder 3 // 0: low order, 1: high order, 2:2nd+LW, 3:4th+LW
詳細は本家サイトの解説を参照ください。
- Flowsquare - レッスン1.3 — 数値安定性・シミュレーション精度(レッスン1.2からの続き)
http://flowsquare.com/jp/2013/12/03/lesson-1-3-accuracy-and-stability-channel-flow-cont-from-l1-1/
数値振動の抑制
数値振動?なんじゃそらと思っていましたが、理屈はともかくとして数値振動が発生したシミュレーションがどうなるか、いくつか試していると実例に遭遇しました。大抵100stepいかないうちにシミュレーション画面が一色に染まって進まなくなります。そのまま放っておくとアプリが応答しなくなっていたりします(バックグランドで走らせているときによくある)。
嫌な予感のする色合い、このままstepを進めるとFlowsquareがフリーズする
現象が発生した場合、"wfil"パラメータを少し大きくして再試行します。まだ発生するようなら大きくしながら発生しなくなるまで繰り返します。可能な限り小さい値が望ましいとのことですが、私の場合は0.1から試して0.3~0.4くらいに落ち着くことが多いです。
10:nfil 1 // Interval time steps for filtering 11:wfil 0.3 // Relaxation parameter for filtering
詳細は本家サイトの解説を参照ください。
- Flowsquare - レッスン1.3 — 数値安定性・シミュレーション精度(レッスン1.2からの続き)
http://flowsquare.com/jp/2013/12/03/lesson-1-3-accuracy-and-stability-channel-flow-cont-from-l1-1/
境界速度(青)
"bc.bmp"で青(RGB:0x0000FF)に塗った箇所から流れる条件の指定です。
以下の場合、20m/s(72km/h)で流体が流れることになります。カブのシミュレーションで使っている(サンプルそのまま)値で、走行風の再現、という理解であっているかな。
"uin1"が横方向の流れ、"vin1"が縦方向の流れ速度です。
------------------ BLUE Local BC and/or IC (optional) ----------------- 23:uin1 20.0 // U 24:vin1 0 // V 25:rho1 1.2 // Density (for cmode0,3) 26:temp1 0 // Temperature (for cmode1,2) 27:scalar1 0 // Mixture fraction (for cmode2)
詳細は本家サイトの解説を参照ください。
- Flowsquare - レッスン2.1 — bc.bmp
http://flowsquare.com/jp/2013/12/11/lesson-2-1-bc-bmp/
移動境界(緑)
"bc.bmp"で緑(RGB:0x00FF00)に塗った箇所の条件です。バイク走行時のシミュレーションでは地面として使っています。
-------------- GREEN Moving Boundary Condition (optional) ------------- 37:imb 1 // 0:one-time, 1:periodic 38:umb 20.0 // U of moving boundary 39:vmb 0 // V of moving boundary 40:tempmb 0 // Temperature (0: free, for cmode1,2)
例えば、無風状態でバイクを秒速20m(時速72km)で走らせる状況を再現すると以下のようになります。
- 前方から流れる風(移動境界:青):バイク速度=風速になるので設定値"uin1"=20.0[m/s]
- 地面(移動境界:緑):バイクを中心に考えると、地面はバイク速度で後ろに流れていくので設定値"umb"=20.0[m/s]
詳細は本家サイトの解説を参照ください。
- Flowsquare - レッスン2.1 — bc.bmp
http://flowsquare.com/jp/2013/12/11/lesson-2-1-bc-bmp/ - Flowsquare - 車周りの流れ
http://flowsquare.com/jp/2013/12/18/flow-around-a-car/#more-267
シミュレーション結果出力
プロジェクトフォルダの"dump","figs"フォルダに出力する間隔をステップ数で指定します。あまり細かい値を指定すると大量のファイルが生成されますので程ほどのサイズを指定します。
"figs"フォルダにはシミュレーション画面のスクリーンダンプがそのまま保存されます。後で画像をくっつけて映像にする際に便利です。画面表示内容がそのままダンプされるため、キーボード操作で表示内容を変更するとそのまま出力されるので注意です。
"dump"フォルダにはシミュレーションの途中経過が出力されます。シミュレーション終了後の解析モードではPageUp/PageDownキーを操作することで"dump"に出力されたステップ毎の状況を見ることが出来ます。また、シミュレーションは"dump"フォルダにあるステップから再開が可能です。
-------------------------- Display & Output --------------------------- 53:box 1 // Pixel size of one grid point 54:nfig 50 // Interval time steps for figure output (0:off) 55:nfile 500 // Interval time steps for dump file output (0:off)
詳細は本家サイトの解説を参照ください。
- Flowsquare - Lesson 2.3 — grid.txt
http://flowsquare.com/jp/2013/12/12/lesson-2-3-grid-txt/
小技
シミュレーションの同時実行
Flowsquareの実行速度制限は、1ステップ枚に処理の休止を挟むことで行っているようです。プロセスモニターでCPUの稼働状況を見てみると山・谷・山と実行状況がよく分かります。多分、制限解除するとこの休止状態が無くなるのだと思います。
シミュレーション中のCPU使用率
ところで、Flowsquareは複数のシミュレーションを同時に実行することが出来ます。この方法を使えば、ひとつひとつのシミュレーションが完了する時間は遅いものの、パターンを変更して何回も実行したい場合に手間を減らすことが出来ます。
方法はとてもシンプルで、
- 同時実行したい数だけ、Flowsquareの実行ファイルが入ったフォルダ丸ごとコピーして配置する(例えば、flowsquare_proc1,flowsquare_proc2といったフォルダを作ってそれぞれに実行ファイルと設定ファイルを配置)
だけです。
私の環境では3個並列にするとCPU使用率が最大で約80%まであがりました。4個並列だと100%になるので、いつもは3個まで同時に走らせています。ゲームなどの重たいプログラムを走らせるのでなければ、特に問題なく使えています。
ちなみに消費メモリは"bc.bmp"をFullHDサイズ(1980 x 1080)にした場合で約470MByteでした。
同時実行中のFlowsquare
シミュレーションの再開
いくつもシミュレーションを走らせていると、何か問題が起こって途中で終了してしまうことがあります。そうなった場合でも途中から再開が可能です。
手順としては、"grid.txt"を開いて"06:sts"のパラメータを再開したいステップ数に修正します。以下の場合だと7000ステップからになります。
06:sts 7000 // Start time step (new simulation starts from sts=0)
その後、Flowsquare起動してプロジェクト名に再開したい対象を指定するとシミュレーションが再開されます。
注意することとして、再開するにはプロジェクトの"dump"フォルダ内に途中経過が保存されている必要があります。これは"grid.txt"の"55:nfile"パラメータで指定したステップ間隔で出力されます。
以下の設定だと5000ステップ毎に出力されることになります。仮に13000ステップで中断した場合、"dump"フォルダには5000,10000ステップの途中経過が保存されているはずです。この場合には5000ステップ目、もしくは10000ステップ目から再開することが出来ます。
55:nfile 5000 // Interval time steps for dump file output (0:off)
あまり小まめに出力するようにするとファイルサイズが結構な大きさになります(FullHDサイズの"bc.bmp"で20000ステップまで100ステップ枚に出力すると16.4GByteになりました)。しかし、大きいサイズのシミュレーションの場合は1ステップに時間がかかるので、間隔を大きく取って途中で止まってしまうとロスが大きいです。この場合、時間のかかるシミュレーションの場合は細かめにして、後で不要なdumpを削除するといいかと思います。
figsの画像を結合して動画にする
プロジェクトフォルダ内のfigsにはシミュレーション画像がBMP形式で保存されています。これを結合すればかっこいい(?)シミュレーション動画に出来ます。画像を結合して動画にするツールはたくさんありますが、CUIアプリに忌避感が無いのであればFFmpegを使うのが一番早いです。
- FFmpeg
https://www.ffmpeg.org/
FFmpegの実行ファイルがあるフォルダを環境変数PATHに追加しておき、Windows10であればbashやMSYS2といったターミナルから以下のように実行すると動画ファイル"out.mp4"が出力されます。
Linuxシェルの場合
$ cat *.bmp | ffmpeg.exe -framerate 10 -i - -vcodec libx264 -pix_fmt rgb32 -r 10 out.mp4
Windowsコマンドプロンプトの場合(多分これでうごくはず)
dir /B | ffmpeg.exe -framerate 10 -i - -vcodec libx264 -pix_fmt rgb32 -r 10 out.mp4
他にもOpenShotといった編集ソフトを使って結合することが出来ます。こちらはGUIで直感的に操作することが出来ます。ただ、画像を大量に読み込ますとかなりの処理時間がかかりました。
- OpenShot Video Editor
http://www.openshotvideo.com/
OpenShotでの編集画面
参考
- Flowsquare
http://flowsquare.com/jp/ - Qiita - ffmpegで連番画像から動画生成 / 動画から連番画像を生成 ~コマ落ちを防ぐには~
http://qiita.com/livlea/items/a94df4667c0eb37d859f - FFmpeg - FAQ - 3.2 How do I encode single pictures into movies?
https://www.ffmpeg.org/faq.html#toc-How-do-I-encode-single-pictures-into-movies_003f