OCI - HPC Cluster: OpenFOAM v2106 のインストール

:::note info
本ページは [OCI: HPC Cluster](https://qiita.com/itokazu/items/63d2e3cebdcdda5afce0) のサブページになります。
:::

# 本手順の前提
- HPC Clusterで構成された環境でのインストールを想定しています
- OpenFOAMのコンパイルはヘッドノードで実施します
- コンパイルには時間が掛かるので必要に応じてコア数を増やしてください(8core前後を推奨)


# 環境
- HPC Cluster ver: v2.10.6
- OS Image: HPC_OL8 (OracleLinux-8-OCA-RHCK-OFED-23.10-2.1.3.1-2024.05.08-0)
- kernel: 4.18.0-513.24.1.el8_9.x86_64
- shape: VM.Optimized4.Flex (8core, 16GB Memory) 
- インストール先: ログインノードのNFSサーバー

# ドキュメント

[doc/Build.md·master·Development/openfoam·GitLab](https://develop.openfoam.com/Development/openfoam/-/blob/master/doc/Build.md)

# インストール

## Requirement

https://develop.openfoam.com/Development/openfoam/blob/develop/doc/Requirements.md

### **Minimum recommended versions**

- gcc : 7.5.0 (minimum, not necessarily recommended)
- cmake: 3.8 (required for ParaView and CGAL build)
- boost: 1.48 (required for CGAL build and some functionality)
- fftw: 3.3.7 (recommended - required for FFT-related functionality)
- paraview: 5.6.3 (for visualization)

### Additional utilities

- flex : not 2.6.2, 2.6.3 (fails for building scotch)
- m4 : no known minimum level
- QT : 5.9 (optional - for ParaView build)

### 追加が必要なパッケージをインストール

```jsx
sudo yum --enablerepo=ol8_appstream,ol8_developer_EPEL install -y cmake boost boost-devel fftw qt5-qtbase qt5-qtbase-devel
```

## コンパイルの準備
ここからの作業はrootユーザーでの実行になるので、以下でrootなります。
```
sudo su -
```
### ソースのダウンロード
本環境では /nfs/cluster配下がNFS領域であるためそこにインストールします。
```jsx
mkdir -p /nfs/cluster/app/OpenFOAM
cd /nfs/cluster/app/OpenFOAM
wget https://dl.openfoam.com/source/v2106/OpenFOAM-v2106.tgz
wget https://dl.openfoam.com/source/v2106/ThirdParty-v2106.tgz

tar xf OpenFOAM-v2106.tgz
tar xf ThirdParty-v2106.tgz
```

### MPI を読み込む
OSイメージのverによっては4.1.5a1の部分が変わりますのでご注意ください。
```jsx
source /usr/mpi/gcc/openmpi-4.1.7a1/bin/mpivars.sh
```

### OpenMPI の環境変数を読み込む

```jsx
source OpenFOAM-v2106/etc/bashrc
```

### チェック

```jsx
foamSystemCheck
```

- 実行結果
    
    ```jsx
    # foamSystemCheck
    
    Checking basic system...
    -------------------------------------------------------------------------------
    Shell:       bash
    Host:        v2-10-6-controller
    OS:          Linux version 4.18.0-513.24.1.el8_9.x86_64
    User:        root
    
    System check: PASS
    ==================
    Can continue to OpenFOAM installation.
    ```
    

## コンパイル

```jsx
foam
export LC_ALL=C
./Allwmake -j -s -q -l
```
CPUとコア数によりますが、大体8コアで1時間ぐらいを目安かと思います。

- 結果
    
    ```jsx
    2024-02-01 07:52:56 +0000
    ========================================
    Finished compile of visualization with OpenFOAM-v2312
      Gcc system compiler
      linux64GccDPInt32Opt, with SYSTEMOPENMPI sys-openmpi
    
    2024-02-01 07:52:56 +0000
    ========================================
      OpenFOAM-v2312
      Gcc system compiler
      linux64GccDPInt32Opt, with SYSTEMOPENMPI sys-openmpi
    
      api = 2312
      patch = 0
      bin = 314 entries
      lib = 151 entries
    
    ========================================
    Done logging to 'log.linux64GccDPInt32Opt'
    ```
    

## コンパイル結果の確認

```jsx
foamInstallationTest
```

- 結果
    
    ```jsx
    # foamInstallationTest
    Executing foamInstallationTest

    Basic setup :
    -------------------------------------------------------------------------------
    OpenFOAM:            OpenFOAM-v2106
    ThirdParty:          ThirdParty-v2106
    Shell:               bash
    Host:                v2-10-6-controller
    OS:                  Linux version 4.18.0-513.24.1.el8_9.x86_64
    -------------------------------------------------------------------------------
    
    Main OpenFOAM env variables :
    -------------------------------------------------------------------------------
    Environment           FileOrDirectory                          Valid      Crit
    -------------------------------------------------------------------------------
    $WM_PROJECT_USER_DIR  /root/OpenFOAM/root-v2106                 no        no
    $WM_THIRD_PARTY_DIR   ...cluster/app/OpenFOAM/ThirdParty-v2106  yes       maybe
    $WM_PROJECT_SITE      [env variable unset]                                no
    -------------------------------------------------------------------------------
    
    OpenFOAM env variables in PATH :
    -------------------------------------------------------------------------------
    Environment           FileOrDirectory                          Valid Path Crit
    -------------------------------------------------------------------------------
    $WM_PROJECT_DIR       /nfs/cluster/app/OpenFOAM/OpenFOAM-v2106  yes  yes  yes
    
    $FOAM_APPBIN          ...06/platforms/linux64GccDPInt32Opt/bin  yes  yes  yes
    $FOAM_SITE_APPBIN     ...06/platforms/linux64GccDPInt32Opt/bin  no        no
    $FOAM_USER_APPBIN     ...06/platforms/linux64GccDPInt32Opt/bin  no        no
    $WM_DIR               ...ter/app/OpenFOAM/OpenFOAM-v2106/wmake  yes  yes  often
    -------------------------------------------------------------------------------
    
    OpenFOAM env variables in LD_LIBRARY_PATH :
    -------------------------------------------------------------------------------
    Environment           FileOrDirectory                          Valid Path Crit
    -------------------------------------------------------------------------------
    $FOAM_LIBBIN          ...06/platforms/linux64GccDPInt32Opt/lib  yes  yes  yes
    $FOAM_SITE_LIBBIN     ...06/platforms/linux64GccDPInt32Opt/lib  no        no
    $FOAM_USER_LIBBIN     ...06/platforms/linux64GccDPInt32Opt/lib  no        no
    $FOAM_EXT_LIBBIN      ...v2106/platforms/linux64GccDPInt32/lib  yes  yes  maybe
    $MPI_ARCH_PATH        /usr/mpi/gcc/openmpi-4.1.7a1              yes   no  yes
    -------------------------------------------------------------------------------
    
    Software Components
    -------------------------------------------------------------------------------
    Software     Version    Location
    -------------------------------------------------------------------------------
    flex         2.6.1      /usr/bin/flex
    make         4.2.1      /usr/bin/make
    wmake        2106       /nfs/cluster/app/OpenFOAM/OpenFOAM-v2106/wmake/wmake
    gcc          8.5.0      /usr/bin/gcc
    g++          8.5.0      /usr/bin/g++
    -------------------------------------------------------------------------------
    icoFoam      exists     ...OAM-v2106/platforms/linux64GccDPInt32Opt/bin/icoFoam
    
    Summary
    -------------------------------------------------------------------------------
    Base configuration ok.
    Critical systems ok.
    
    Done
    ```
    

## 動作確認
動作確認として1ノードで計算が流れることを確認します。
ここではジョブスクリプトではなく、srunでインタラクティブに操作をしていきます。
※--constraintや実行するpartitionについては適宜変更してください
```jsx
srun --nodes=1 -n 36  --constraint=hpc-default --pty /usr/bin/bash -i
```


```jsx
source /usr/mpi/gcc/openmpi-4.1.7a1/bin/mpivars.sh
source /nfs/cluster/app/OpenFOAM/OpenFOAM-v2106/etc/bashrc
cp -a /nfs/cluster/app/OpenFOAM/OpenFOAM-v2106/tutorials/incompressible/simpleFoam/motorBike ~
```

BM.Optimized3.36で動作させる上で以下の必須オプションを設定します。
```jsx
export UCX_NET_DEVICES=mlx5_2:1
export UCX_IB_TRAFFIC_CLASS=105
export UCX_IB_GID_INDEX=3
export HCOLL_ENABLE_MCAST_ALL=0
export OMPI_MCA_pml=ucx
export OMPI_MCA_coll_hcoll_enable=0
export OMPI_MCA_hwloc_base_report_bindings=1
```

VM.Standard.E5.FlexなどのVMで実行する場合は以下の環境変数を設定してください。
```jsx
export OMPI_MCA_coll_hcoll_enable=0
export OMPI_MCA_btl="self,tcp"
export OMPI_MCA_btl_tcp_if_include="x.x.x.0/22"
export OMPI_MCA_pml="^ucx"
```

OpenFOAMを実行します。
```jsx
./Allrun
```

出力された各種ログファイルを確認して正常に計算が行われたことを確認してください。

以上