Flux Reconstruction(FR)形式は、高精度のコンパクトな流体数値形式です。PyFRは、非常に正確なFR形式を使用して、世界で最も困難な流体の流れの問題のいくつかに対処するオープンソースCFDパッケージです。特に不均一な乱気流に関しては。関連ブログは、Nvidiaブログにあります。PyFRの公式Webサイトでは、ダウンロードとマニュアルを提供しています。この記事は上記の内容に基づく入門ガイドであり、動作プラットフォームはUbuntu 19.10です。
インストール
- 基本的な依存関係をインストールします。コマンドは
sudo pip3 install xxx
これらにxxx
は以下が含まれます:
appdirs >= 1.4.0
gimmik >= 2.0
h5py >= 2.6
mako >= 1.0.0
mpi4py >= 2.0
numpy >= 1.8
pytools >= 2016.2.1
- gccのバージョンを確認してください:
gcc --version
4.9以上である必要があります。 - 残りの依存関係をインストールします。
sudo apt install python3 python3-pip libopenmpi-dev openmpi-bin
sudo apt install metis libmetis-dev libblas3
pip3 install virtualenv
- paraviewをインストールします。
sudo apt install paraview
- 仮想環境をセットアップします。
python3 -m virtualenv ENV3
source ENV3/bin/activate
そして仮想環境にPyFRをインストールします:pip install pyfr
コマンドを実行
PyFRは3つのファイル形式を使用します。
.ini
-パラメータファイル.pyfrm
-グリッドファイル.pyfrs
-ソリューションファイル
PyFRはいくつかのコマンドを提供します:
pyfr import
-グリッド情報を含む.mshまたは.pyfrm形式のファイルをインポートします。例えば:pyfr import mesh.msh mesh.pyfrm
pyfr partition
-既存のグリッドとその関連ソリューションファイルを分割します。例えば:pyfr partition 2 mesh.pyfrm solution.pyfrs .
pyfr run
-シミュレーションを実行します。例えば:pyfr run mesh.pyfrm configuration.ini
pyfr restart
-既存のソリューションファイルに基づいてシミュレーションを再開します。例えば:pyfr restart mesh.pyfrm solution.pyfrs
pyfr export
-.pyfrs
ファイル変換非構造VTK.vtu
またはpvtu
ファイル。
PyFRを並行して実行するpyfr
には、コマンドの前にプレフィックスを使用しますmpiexec -n <cores/devices>
。グリッドは事前に分割する必要があり、コアまたはデバイスの数はパーティションの数と同じでなければならないことに注意してください。次にpyfr run
、最後に並列パラメーターを追加します。-b cuda
-Cuda並列、-b openmp
-OpenMP並列、-b opencl
-OpenCL並列。以前の操作が正しければ、この時点でOpenMPを直接使用できるはずです。CudaとOpenCLは自分でインストールする必要があります。
例:2次元オイラー渦
例としてOpenMPを取り上げます。PyFR Webサイトからソースコードをダウンロードexamples
し、適切な作業ディレクトリにフォルダーをコピーします。euler_vortex_2d
フォルダ内のターミナルを開きます。
- まず、Python仮想環境を起動します。
source ~/ENV3/bin/activate
- メッシュファイルを変換します。
pyfr import euler_vortex_2d.msh euler_vortex_2d.pyfrm
- グリッドを2つのパーティションに分割します。
pyfr partition 2 euler_vortex_2d.pyfrm .
- 実行:(
mpiexec -n 2 pyfr run -b openmp -p euler_vortex_2d.pyfrm euler_vortex_2d.ini
注:ここでの並列パラメーター-b openmp
は、マニュアルの元のテキストです-b cuda
。これ-n 2
は、手順3の2つのパーティションに対応しています。) - データの最後のフレームを
.vtu
フォーマットファイルに変換します。コマンドは次のとおりです。このコマンドにはpyfr export euler_vortex_2d.pyfrm euler_vortex_2d-100.0.pyfrs euler_vortex_2d-100.0.vtu -d 4
2つのポイントがあります。1つは.pyfrmファイルを取り込むこと、もう1つは最後のパラメーターを使用することです-d 4
。これは、ユニットを4つの線形サブユニットに分割して、表示精度を向上させることを意味します。 - Paraviewで
.vtu
ファイルを開きます。速度フィールドは次のとおりです。
追記
特に、上記の計算例から、OpenMPを使用する並列スレッドn
の数がコンピューターの物理コアの数と完全に等しい場合、速度が最も速くなり、そうでない場合は速度が大幅に低下することに注意してください。たとえば、私のラップトップでは、-n 2
実行時間はわずか19秒、-n 4
または1つのスレッドで数時間かかります。正直なところ、なぜその違いがそれほど大きいのか理解できませんでした。