# OpenFOAM-5.x 버전 설치 소개(KNL)

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

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

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

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

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

<pre class="language-shell-session" data-title="[ 환경 설정 ]"><code class="lang-shell-session">$ module purge
<strong>$ module load cmake/3.12.3
</strong>$ module load intel/18.0.3 impi/18.0.3
</code></pre>

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

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

{% code title="" %}

```shell-session
$ cd $HOME/OpenFOAM-5.0/KNL
$ mkdir OpenFOAM
$ cd OpenFOAM
$ tar -xzf OpenFOAM-5.x-version-5.0.tar.gz 
$ tar -xzf ThirdParty-5.x-version-5.0.tar.gz
$ mv OpenFOAM-5.x-version-5.0 OpenFOAM-5.0
$ mv ThirdParty-5.x-version-5.0 ThirdParty-5.0
$ vi OpenFOAM-5.0/etc/config.sh/settings 
 - - - [settings 수정 사항] 참고 - - -
$ vi OpenFOAM-5.0/etc/bashrc 
 - - - [bashrc 수정 사항] 참고 - - -
$ vi ThirdParty-5.0/makeCGAL
 - - - [makeCGAL 수정 사항] 참고 - - -
$ vi OpenFOAM-5.0/etc/config.sh/mpi
 - - - [mpi 수정 사항] 참고 - - -
$ vi OpenFOAM-5.0/wmake/rules/linux64Icc/c++ 
 - - - [c++ 수정 사항] 참고 - - -
$ vi ThirdParty-5.0/scotch_6.0.3/src/Make.inc/Makefile.inc.x86-64_pc_linux2.icc 
- - - [Makefile.inc.x86-64_pc_linux2.icc 수정 사항] 참고 - - -
$ vi ThirdParty-5.0/etc/wmakeFiles/scotch/Makefile.inc.i686_pc_linux2.shlib-OpenFOAM
 - - - [Makefile.inc.i686_pc_linux2.shlib-OpenFOAM 수정 사항] 참고 - - -
$ sed -i -e 's/\(boost_version=\)boost-system/\1boost_1_68_0/' OpenFOAM-5.0/etc/config.sh/CGAL
$ sed -i -e 's/\(cgal_version=\)cgal-system/\1CGAL-4.9.1/' OpenFOAM-5.0/etc/config.sh/CGAL
$ source OpenFOAM-5.0/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-5.0
$ ./Allwmake  

$ cd $WM_PROJECT_DIR 
$ ./Allwmake
```

{% endcode %}

{% code title="\[settings 수정 사항] " %}

```bash
38line :      WM_ARCH=linux64
61line :         64)
62line :             WM_ARCH=linux64
63line :             export WM_COMPILER_LIB_ARCH=64
64line :             export WM_CC='icc'
65line :             export WM_CXX='icpc'
66line :             export WM_CFLAGS='-m64 -fPIC -xMIC-AVX512'
67line :             export WM_CXXFLAGS='-m64 -fPIC -xMIC-AVX512 -std=c++0x'

68line :             export WM_LDFLAGS='-m64 -fPIC -xMIC-AVX512'
```

{% endcode %}

※ "-xMIC-AVX512" 옵션은 KNL CPU 타입 전용 옵션으로,\
\_\_ SKL 계산노드와 KNL 계산노드 모두 실행을 희망하는 경우는 "-xCOMMON-AVX512" 로 변경

<pre class="language-bash" data-title="[bashrc 수정 사항] "><code class="lang-bash"><strong>47line : #export FOAM_INST_DIR=$HOME/$WM_PROJECT
</strong>50line : export FOAM_INST_DIR=$/OpenFOAM-5.0/KNL/$WM_PROJECT
65line : export WM_COMPILER=Icc 

89line : export WM_MPLIB=INTELMPI
</code></pre>

※ 위 수정 예제에서 <mark style="color:blue;">$/OpenFOAM-5.0/KNL</mark> 경로는 설치 시 사용된 경로이므로 변경

{% code title="\[makeCGAL 수정 사항] " %}

```
 46line : cgalPACKAGE=${cgal_version:-CGAL-4.8.1}

 47line : boostPACKAGE=${boost_version:-boost_1_68_0}
```

{% endcode %}

{% code title="\[mpi 수정 사항] " %}

```
 46line :     libDir=`mpiicc --showme:link | sed -e 's/.*-L\([^ ]*\).*/\1/'`
```

{% endcode %}

{% code title="\[c++ 수정 사항] " %}

```
 9line : CC          = icpc -std=c++11 -xMIC-AVX512 -fp-trap=common -fp-model precise
```

{% endcode %}

{% code title="\[Makefile.inc.x86-64\_pc\_linux2.icc 수정 사항] " %}

```
 10line : CCP             = mpiicc
 12line : CFLAGS          = $(WM_CFLAGS) -O3 -DCOMMON_FILE_COMPRESS_GZ -DCOMMON_PTHREAD -DCOMMON_RANDOM_FIXED_SEED -DSCOTCH_RENAME -DSCOTCH_PTHREAD -restrict -DIDXSIZE64
```

{% endcode %}

{% code title="\[Makefile.inc.i686\_pc\_linux2.shlib-OpenFOAM 수정 사항] " %}

```
  6line : AR              = icc
  9line : CCS             = icc
 10line : CCP             = mpiicc
 11line : CCD             = mpiicc
```

{% endcode %}

## **라. 테스트**

```shell-session
$ module purge
$ module load intel/18.0.3 impi/18.0.3
$ source $/OpenFOAM-5.0/KNL/OpenFOAM/OpenFOAM-5.0/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(소문자 엘) 입니다.**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-ksc.gitbook.io/blog/install/nurion/openfoam/openfoam-5.x-install-knl.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
