> For the complete documentation index, see [llms.txt](https://docs-ksc.gitbook.io/blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-ksc.gitbook.io/blog/install/nurion/openfoam/openfoam-7-install-knl.md).

# OpenFOAM-7 버전 설치 소개(KNL)

슈퍼컴퓨팅인프라센터 2019. 10. 25. 15:11

이 문서에서는 KNL 계산노드용 OpenFOAM-7 을 컴파일 하여 설치 하는 방법에 대해 예시로 소개합니다.

## **가. 설치 환경**

| 구분                      | 내용                     |
| ----------------------- | ---------------------- |
| 대상 시스템                  | 누리온                    |
| OS Version              | 리눅스 / CentOS 7.9       |
| CPU                     | <p>Intel Xeon Phi 7250 |
| <br>Intel Xeon 6148</p> |                        |
| 컴파일러                    | Intel 2018.3           |
| MPI                     | IntelMPI 2018.3        |
| 기타                      |                        |

## **나. 설치 전 환경 설정**

OpenFOAM-v7 버전 설치에 필요한 gmp, mpfr, mpc, boost, CGAL 는 누리온 시스템에 미리 설치된 /apps/common 라이브러리들을 사용합니다.\
만약 다른 버전의 gmp, mpfr, mpc, boost, CGAL 가 필요한 경우는 사용자의 홈 디렉터리(/home01/$USER)나 scratch 디렉터리(/scratch/$USER)에 설치 후 환경 설정을 해서 사용하시면 됩니다.

**\[ 환경 설정 ]**

<pre class="language-shell-session"><code class="lang-shell-session"><strong>$ module purge
</strong><strong>$ module load cmake/3.12.3
</strong>$ module load intel/18.0.3 impi/18.0.3
</code></pre>

## **다. OpenFOAM-v7 버전 설치 과정**

설치 과정 소개는 tar 를 이용한 압축 해제 방법과 설정 방법등 진행 절차를 위주로 설명하고, 소스 파일 다운로드 등은 생략합니다. 설치 소개 시 사용된 경로 <mark style="color:blue;">/Install\_Path/KNL</mark>는 설치 안내를 위한 경로이므로, 설치하시고자 하는 경로를 입력하여 설치 진행해주시기 바랍니다.

\[설치과정]

```shell-session
$ cd /Install_Path/KNL
$ tar xzvf OpenFOAM-7-20190902.tar.gz
$ tar xzvf ThirdParty-7-version-7.tar.gz
$ mv OpenFOAM-7-20190902/ OpenFOAM-7
$ mv ThirdParty-7-version-7/ ThirdParty-7
$ vi OpenFOAM-7/etc/config.sh/settings
- - - [settings 수정 사항] 참고 - - -
$ vi OpenFOAM-7/etc/bashrc
- - - [bashrc 수정 사항] 참고 - - -
$ vi ThirdParty-7/makeCGAL
- - - [makeCGAL 수정 사항] 참고 - - -
$ vi OpenFOAM-7/etc/config.sh/mpi
- - - [mpi 수정 사항] 참고 - - -
$ vi OpenFOAM-7/wmake/rules/linux64Icc/c++
- - - [c++ 수정 사항] 참고 - - -
$ vi ThirdParty-7/scotch_6.0.6/src/Makefile.inc
- - - [Makefile.inc 수정 사항] 참고 - - -
$ sed -i -e 's/\(boost_version=\)boost-system/\1boost_1_68_0/' OpenFOAM-7/etc/config.sh/CGAL
$ sed -i -e 's/\(cgal_version=\)cgal-system/\1CGAL-4.9.1/' OpenFOAM-7/etc/config.sh/CGAL
$ source OpenFOAM-7/etc/bashrc
$ mkdir -p $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER
$ ln -s /apps/common/gmp/6.1.2 $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/gmp-system
$ ln -s /apps/common/mpfr/4.0.1 $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/mpfr-system
$ ln -s /apps/common/mpc/1.1.0 $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/mpc-system
$ ln -s /apps/common/boost/1.68.0 $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/boost_1_68_0
$ ln -s /apps/common/CGAL/4.9.1 $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/CGAL-4.9.1
$ ln -s /apps/applications/cmake/3.12.3 $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/cmake-system

$ cd ThirdParty-7
$ ./Allwmake

$ cd $WM_PROJECT_DIR
$ ./Allwmake
```

**\[settings 수정 사항]**

| 수정 전 | <p>64)<br>WM\_ARCH=linux64<br>export WM\_COMPILER\_LIB\_ARCH=64<br>export WM\_CC='gcc'<br>export WM\_CXX='g++'<br>export WM\_CFLAGS='-m64 -fPIC'<br>export WM\_CXXFLAGS='-m64 -fPIC -std=c++0x'<br><br>export WM\_LDFLAGS='-m64'</p>                                                                                          |
| ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 수정 후 | <p>64)<br>WM\_ARCH=linux64<br>export WM\_COMPILER\_LIB\_ARCH=64<br>export WM\_CC='icc'<br>export WM\_CXX='icpc'<br>export WM\_CFLAGS='-m64 -fPIC <mark style="color:blue;">-xMIC-AVX512</mark>'<br>export WM\_CXXFLAGS='-m64 -fPIC <mark style="color:blue;">-xMIC-AVX512</mark> -std=c++0x'<br>export WM\_LDFLAGS='-m64'</p> |

※ <mark style="color:blue;">"-xMIC-AVX512"</mark> 옵션은 <mark style="color:blue;">KNL CPU 타입 전용 옵션</mark>으로, SKL 계산노드와 KNL 계산노드 모두 실행을 희망하는 경우는 "<mark style="color:blue;">-xCOMMON-AVX512</mark>" 로 변경

**\[bashrc 수정 사항]**

<table><thead><tr><th width="173"></th><th></th></tr></thead><tbody><tr><td>수정 전</td><td>[ "$BASH" -o "$ZSH_NAME" ] &#x26;&#x26; &#x3C;br> export FOAM_INST_DIR=$(cd $(dirname $)/../.. &#x26;&#x26; pwd -P) || &#x3C;br> export FOAM_INST_DIR=$HOME/$WM_PROJECT<br><br>export WM_COMPILER=Gcc<br>export WM_MPLIB=SYSTEMOPENMPI</td></tr><tr><td>수정 후</td><td>export FOAM_INST_DIR=<mark style="color:blue;">/Install_Path/KNL</mark><br><br>export WM_COMPILER=Icc <em>(I는 대문자 cc는 소문자)</em><br>export WM_MPLIB=INTELMPI</td></tr></tbody></table>

※ 위 수정 예제에서 <mark style="color:blue;">/Install\_Path/KNL</mark> 경로는 설치 시 사용된 경로이므로 변경&#x20;

**\[makeCGAL] 수정 사항]**

| 수정 전 | <p>cgalPACKAGE=${cgal\_version:-CGAL-4.10}<br>boostPACKAGE=${boost\_version:-boost-system}</p>     |
| ---- | -------------------------------------------------------------------------------------------------- |
| 수정 후 | <p>cgalPACKAGE=${cgal\_version:-CGAL-4.9.1}<br>boostPACKAGE=${boost\_version:-boost\_1\_68\_0}</p> |

**\[mpi 수정 사항]**

| 수정 전 | libDir=\`mpicc --showme:link \| sed -e 's/.\*-L\\(\[^ ]\*\\).\*/\1/'\`  |
| ---- | ----------------------------------------------------------------------- |
| 수정 후 | libDir=\`mpiicc --showme:link \| sed -e 's/.\*-L\\(\[^ ]\*\\).\*/\1/'\` |

**\[c++ 수정 사항]**

| 수정 전 | CC = icpc -std=c++11 -fp-trap=common -fp-model precise                                               |
| ---- | ---------------------------------------------------------------------------------------------------- |
| 수정 후 | CC = icpc -std=c++11 -<mark style="color:blue;">xMIC-AVX512</mark> -fp-trap=common -fp-model precise |

**\[Makefile.inc 수정 사항]**

| 수정 전 | <p>AR = gcc<br>ARFLAGS = $(WM\_CFLAGS) -shared -o<br>CCS = gcc<br>CCP = mpicc<br>CCD = mpicc<br>CFLAGS = $(WM\_CFLAGS) -O3 -DCOMMON\_FILE\_COMPRESS\_GZ -DCOMMON\_RANDOM\_FIXED\_SEED - DSCOTCH\_RENAME -Drestrict=\_\_restrict<br>CLIBFLAGS = -shared</p>                            |
| ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 수정 후 | <p>AR = icc<br>ARFLAGS = -m64 -fPIC -shared -o<br>CCS = icc<br>CCP = mpiicc<br>CCD = mpiicc<br>CFLAGS = -O3 -DCOMMON\_FILE\_COMPRESS\_GZ -DCOMMON\_RANDOM\_FIXED\_SEED - DSCOTCH\_RENAME -Drestrict=\_\_restrict -xCOMMON-AVX512<br><br>CLIBFLAGS = -shared -fPIC -xCOMMON-AVX512</p> |

## **라. 테스트**

```shell-session
$ module purge
$ module load intel/18.0.3 impi/18.0.3
$ source /Install_Path/KNL/OpenFOAM-7/etc/bashrc
$ mkdir -p $FOAM_RUN
$ run
$ cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily .
$ cd pitzDaily
$ blockMesh
$ simpleFoam
```

## **마. 기타**

Intel 컴파일러를 이용하여 OpenFOAM 설치 시,  KNL CPU 타입 전용 옵션인 "-xMIC-AVX512"를 사용하게 될 경우 KNL 계산노드에서 설치를 진행해야 오류가 발생하지 않습니다.\
"-xMIC-AVX512" 옵션을 사용할 경우 PBS 스케줄러의 Interactive 기능을 이용하여 KNL 계산노드로 접속하여 빌드를 진행해야 합니다.\
아래는 누리온 KNL 계산노드(debug 큐) 로 접속하는 예제입니다.

```shell-session
$ qsub -I -V -q debug -l select=1:ncpus=68:mpiprocs=68:ompthreads=1 -l walltime=12:00:00 -A openfoam
```

**※ qsub 명령 뒤 문자는 I(대문자 아이) 이고, select 와 walltime 앞에 문자는 l(소문자 엘) 입니다.**
