動機
流体解析においてどの言語を使うと計算時間が短くなるか気になったので,馴染みのある言語(Fortran, MATLAB, C++, Python)を用いて簡単なプログラムを作成し,計算時間を測定することにしました.既に似たような記事が沢山存在してると思いますが,自分で実感してみたかったので許してください...
Pythonの場合は明らかに計算が遅いのでNumpyと並列処理を使って計算速度が速くなるように努めました.他の言語の場合は高速化を意識せずに書きましたが,無駄な処理が生じないように気をつけました.アルゴリズムは全て大体同じです.
ソースコードは一身上の都合により省略させていただきます.
計算手法の簡単な説明
低レイノルズ数における円柱周りの流れを計算し可視化するプログラムを作成しました.
円柱の軸に垂直に左側から一様流が当たるとします.
また,ここでは2次元非圧縮性,外力無しの流れを考えます.

解析手法は流れ関数-渦度法を使用し,メッシュは円柱の境界に沿うように極座標系で作成し,さらに円柱付近が細かくなるようにしました.
低レイノルズ数の場合は十分な時間が経過すると定常流れになると考えられるので,計算コストを削減するために$y>0$の領域のみ考慮します.
計算結果
生成したGIF画像の一部です.アップロード出来る容量が10MBまでなので,カット&圧縮しました.
計算時間
ここでは実行開始から数値の算出までの時間を計測しており,グラフ生成やデータ出力する処理などに要した時間は含まれていません.
C++やFortran等のコンパイラ言語の場合,コンパイラにオプションをつけることで更にコードを最適化できますが,ここではオプション無しで比較します.
言語 | コンパイラ | 計算時間 [s] |
---|---|---|
MATLAB | - | 1.12 |
Fortran | gfortran(default) | 2.04 |
C++ | g++(default) | 4.87 |
Python(並列処理) | - | 64.0 |
Python(逐次処理) | - | 213 |
実行環境:M1 Pro Macbook Pro,Mac OS 15.3,ローカル環境
まとめ
使用する言語によって所要時間が約2〜数百倍も変わっています.本格的に流体解析を行う場合,不適切な言語を用いると膨大な時間を損することになるので,言語の選択がとても重要であることが実感出来ました.
お金を払える方はMATLAB,お金を使いたくない人はFortranら辺がおすすめです.大学生であればMATLABを無料で使える可能性が高いので,調べてみてください.