OpenFOAM v2206 を RHEL 8.3 にインストールメモ

2022年11月18日

はじめに

OpenFOAM v2206 をインストールする。

インストール対象マシン

Red Hat Enterprise Linux 8.3

OpenFOAM のインストール

ソースコードの展開

ソースからコンパイルする。ここ からソースコードをダウンロードする。

  • OpenFOAM-v2206.tgz
  • ThirdParty-v2206.tgz

パッケージを展開。

$ 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

HYPRE

PETSc で使うために、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

OpenBLAS

PETSc で使うために、OpenBLAS をコンパイルする。こちらは自力でやる。ここ からパッケージを入手する。

  • OpenBLAS 0.3.21 version.tar.gz

適当なところに展開してコンパイル、インストール。

$ 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% を超えたりしているので注意。