OpenFOAM v2206 を RHEL 8.3 にインストールメモ2022年11月18日 | |
はじめにOpenFOAM v2206 をインストールする。 インストール対象マシンRed Hat Enterprise Linux 8.3 OpenFOAM のインストールソースコードの展開ソースからコンパイルする。ここ からソースコードをダウンロードする。
パッケージを展開。 $ mkdir ~/OpenFOAM $ tar xvzf OpenFOAM-v2206.tgz -C ~/OpenFOAM $ tar xvzf ThirdParty-v2206.tgz -C ~/OpenFOAM Open MPI をコンパイルすることにする。システムのものを用いたら、計算が途中で止まってしまうことがあったため。設定ファイルを修正する。 ~/OpenFOAM/OpenFOAM-v2206/etc/bashrc #export WM_MPLIB=SYSTEMOPENMPI export WM_MPLIB=OPENMPI 設定を読み込む。 $ . ~/OpenFOAM/OpenFOAM-v2206/etc/bashrc ThirdParty のコンパイルCMake の準備CMake は yum でインストールすればよい。 $ sudo yum install cmake Open MPI$ cd $WM_THIRD_PARTY_DIR $ ./makeOPENMPI HYPREPETSc で使うために、HYPRE をコンパイルする。以下のパッケージをダウンロードする。 各バージョンの情報は BUILD.md に書いてあるようで、これと設定ファイルのものが一致している必要がありそうである。BUILD.md の HYPRE のバージョンが 2.24.0 で、$WM_PROJECT_DIR/etc/config.sh/hypre のバージョンが 2.23.0 なので、修正する。 $WM_PROJECT_DIR/etc/config.sh/hypre #hypre_version=hypre-2.23.0 hypre_version=hypre-2.24.0 設定ファイルを読み直す。 $ . ~/OpenFOAM/OpenFOAM-v2206/etc/bashrc ソースコードは $WM_THIRD_PARTY_DIR/sources に展開する。 コンパイル。 $ ./makeHYPRE OpenBLASPETSc で使うために、OpenBLAS をコンパイルする。こちらは自力でやる。ここ からパッケージを入手する。
適当なところに展開してコンパイル、インストール。 $ make $ mkdir ~/OpenBLAS $ make install PREFIX=~/OpenBLAS 設定。 ~/.bashrc export OPENBLAS=~/OpenBLAS export LIBRARY_PATH=$OPENBLAS/lib:$LIBRARY_PATH export LD_LIBRARY_PATH=$OPENBLAS/lib:$LD_LIBRARY_PATH 読み直す。 PETScマトリックスソルバー PETSc を利用できるように、コンパイルする。 $ cd $WM_THIRD_PARTY_DIR $ tar xvzf petsc-lite-3.17.2.tar.gz -C sources $ ./makePETSC hypre-2.24.0 OpenFOAM のコンパイル$ foam $ ./Allwmake -j -s -l PETSc が有効になっているかどうかの確認は、次のようにする。 $ foamHasLibrary -verbose petscFoam Could not load "petscFoam" 有効にするには、次のようにする。 $ eval $(foamEtcFile -sh -config petsc -- -force) $ foamHasLibrary -verbose petscFoam Can load "petscFoam" ~/.bashrc などに次のように設定する。 ~/.bashrc alias of2206='. ~/OpenFOAM/OpenFOAM-v2206/etc/bashrc; eval $(foamEtcFile -sh -config petsc -- -force)' 次のようにすれば設定が有効になる。 $ of2206 PETSc の利用petscFoam を読み込む。 system/controlDict libs (petscFoam); ソルバーの設定は次のようにする。 system/fvSolution p { solver petsc; petsc { options { ksp_type cg; ksp_cg_single_reduction true; ksp_norm_type none; // pc_type bjacobi; // sub_pc_type ilu; pc_type hypre; pc_hypre_type boomeramg; pc_hypre_boomeramg_max_iter "1"; pc_hypre_boomeramg_strong_threshold "0.25"; pc_hypre_boomeramg_grid_sweeps_up "1"; pc_hypre_boomeramg_grid_sweeps_down "1"; pc_hypre_boomeramg_agg_nl "1"; pc_hypre_boomeramg_agg_num_paths "1"; pc_hypre_boomeramg_max_levels "25"; pc_hypre_boomeramg_coarsen_type HMIS; pc_hypre_boomeramg_interp_type ext+i; pc_hypre_boomeramg_P_max "1"; pc_hypre_boomeramg_truncfactor "0.3"; } caching { matrix { update always; } preconditioner { update always; } } } tolerance 1e-06; relTol 0.01; } U { solver petsc; petsc { options { ksp_type bicg; pc_type bjacobi; sub_pc_type ilu; } caching { matrix { update always; } preconditioner { update always; } } } tolerance 1e-05; relTol 0.1; } スレッドが効くので、スレッドの数を環境変数 OMP_NUM_THREADS で指定する。シリアルで計算すると、標準ソルバーよりも速く見えるが、CPU 使用率が 100% を超えたりしているので注意。 | |
PENGUINITIS |