今月公開予定のFlowsquare+(2020R1.0)の開発においては、新機能の追加や新しいインターフェースの導入はなく、既存の機能に関する改良による使いやすさの向上が主な目的です。
今回の記事では、2020R1.0における改善された点について具体的に3点ご紹介します。全ての改良点の項目のみ、こちらに公開されています。
1.境界条件構築の正確性
従来のバージョンでは、ペイント画像で指定した境界形状と、実際に構築される境界条件に明らかな差異が確認されるケースが存在しました。これは、シミュレーション解像度に比べ高解像度な境界指定用ペイント画像を用いた場合に発生することがあり、2020R1.0ではその影響を軽減しました。
例えば、Flowsquare+をダウンロードすると同梱されているカルマン渦列のシミュレーション入力データの場合、下図に示すペイント画像(bcXY0.bmp、1200×600ピクセル)の紫色の四角形の形で定義されるz方向に延びる四角柱が構築されるはずです。

しかし、このペイント画像とデフォルトのパラメータ設定(nx=60, ny=nz=30)を用いた場合、2018R3.1ではシミュレーション領域の境界付近で四角柱の形状に少々不具合が確認されます(下図)。

改良された2020R1.0では、同じ入力ファイルを用いた場合でも、以下の図に示すようにより正確に四角柱から構成される境界条件が構築されていることが分かります。

2次元シミュレーションにおける結果描画の高速化
以前のバージョンでは、2次元シミュレーションにおける結果の描画速度が非常に遅く、シミュレーションに直接関係する数値計算そのものに比べて非常に大きな計算時間を占めていました。
このボトルネックを回避するために、以前のFlowsuqare+では、シミュレーション中における途中結果の描画をOFFにすることで、かなりの高速化を実現することもできましたが、流体場の遷移過程・準定常過程をシミュレーション中に観察できないことは、非常に不便でした。
2020R1.0では、2次元の描画演算そのものをより高速化することで、2次元シミュレーションにおいてもシミュレーション結果を確認しながらのシミュレーション実行が可能となります。
例えば、以下に示す「フロー・スプリッター」のシミュレーション例の場合、シミュレーションそのものに係る計算時間(青線部)は、1ステップ当たり2019R3.1で13(ms)、2020R1.0で9(ms)と少し向上していますが、描画に関する計算時間は304(ms)から22(ms)と約14倍の速度向上を実現しています。

3.並列計算性能の向上
Flowsquare+では、複数のスレッドによる並列計算により、シリアル演算によるシミュレーション以上の計算速度でのシミュレーション実行が可能でしたが、この並列性能(シリアル演算と比較した際の計算速度向上)が向上しました。また、シリアル演算を実施したときの純粋な計算速度も向上しています。
以下は比較のために、公開されている「F1」シミュレーション例を用いたベンチマークテスト結果を紹介します。利用したマシンは、こちらで紹介している12物理コア、24スレッド搭載で、計算量を厳密に同じにするために、収束計算回数(loopmax)を40回と設定しています。

このベンチマークテストを、2019R3.1及び2020R1.0を用いて1並列(シリアル演算)~24並列まで実施した結果が以下の図です。
赤線は左軸に示す1ステップ当たりの計算時間(秒)と並列数の関係を示しており、黒線は右軸に示す各並列数における、シリアル演算と比較した際の計算速度向上率を示しています。中実●は2020R1.0、中空〇は2019R3.1の結果です。点線矢印は2019R3.1から2020R1.0への変化の方向を示します。
純粋な計算速度は最大で2倍以上、並列性能も2倍近く向上していることが分かります。一方で、物理コア以上の並列数では演算性能が低下するという欠点は、少しはマシになっているものの、2020R1.0でも確認されています。

これ以外にも改善点はありますが、今後は小さな不具合などを一つずつ潰していく作業をし、今月の公開に向けて準備していく予定です。
コメント