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

이 문서에서는 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)에 설치 후 환경 설정을 해서 사용하시면 됩니다.

{% code title="\[ 환경 설정 ]" %}

```shell-session
$ module purge
$ module load cmake/3.12.3
$ module load intel/18.0.3 impi/18.0.3
```

{% endcode %}

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

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

{% code title=" 설치 과정" %}

```shell-session
$ cd ${HOME}/OpenFOAM-5.0/SKL/
$ 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 -xCORE-AVX512'
 67line :             export WM_CXXFLAGS='-m64 -fPIC -xCORE-AVX512 -std=c++0x'
 68line :             export WM_LDFLAGS='-m64 -fPIC -xCORE-AVX512'
```

{% endcode %}

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

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

```bash
 47line : #export FOAM_INST_DIR=$HOME/$WM_PROJECT
 50line : export FOAM_INST_DIR=${HOME}/OpenFOAM-5.0/SKL/$WM_PROJECT
 65line : export WM_COMPILER=Icc 
 89line : export WM_MPLIB=INTELMPI
```

{% endcode %}

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

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

```bash
 46line : cgalPACKAGE=${cgal_version:-CGAL-4.8.1}
 47line : boostPACKAGE=${boost_version:-boost_1_68_0}
```

{% endcode %}

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

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

{% endcode %}

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

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

```

{% endcode %}

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

```bash
 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 수정 사항] " %}

```bash
  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 ${HOME}/OpenFOAM-5.0/SKL/OpenFOAM/OpenFOAM-5.0/etc/bashrc 
$ mkdir -p $FOAM_RUN 
$ run 
$ cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily .
$ cd pitzDaily 
$ blockMesh 
$ simpleFoam 
```


---

# 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-skl.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.
