サポート

技術情報

-インテルコンパイラ・レシピ-

インテルコンパイラとインテルMPIを使ったOpenFOAMのインストール

株式会社HPCソリューションズ
2017年2月28日

OpenFOAMはオープンソースによるCFDソフトウェアパッケージです。 GPL(GNU General Public License)に基づいたオープンソースであり、既に多くのユーザに利用されています。

OpenFOAMはほとんどのソースコードがC++で書かれており、コンパイラとしてgcc-4.8以上が推奨されています。 RHEL-6/CentOS-6系ではgcc-4.4がバンドルされていますが、このgccではOpenFOAMをインストールすることが出来ません。 このため、gccからインストールし、そのgccでOpenFOAMをインストールするという手間がかかります。 インテルコンパイラはOpenFOAMの要求するC++規格に対応しているようで、RHEL-6/CentOS-6系でもインテルコンパイラを使えばOpenFOAMのインストールが出来ます。
また、最近ではライセンスフリーであるため、OpenFOAMを大規模並列で利用されるケースも増えています。 その場合、インフィニバンドEDRなどを利用して並列化効率を高める必要があります。 インテルMPIライブラリーでOpenFOAMがインストールできればインフィニバンドの広帯域幅が利用できます。

このページではRHEL(RedHat Enterprise Linux)とCentOSでのインテルコンパイラとインテルMPIライブラリーを使ったOpenFOAMをインストールする手順をご紹介します。

ダウンロードと準備
OpenFOAMの環境設定
CGALのインストール
ParaViewのインストール
boostに関する変更
OpenFOAMのインストール


ダウンロードと準備

OpenFOAMは2017年2月時点でOpenCFD社(ESIグループ)とOpenFOAM Foundationが公開する2つのバージョンがあります。 OpenCFD社が公開するものはOpenFOAM+と名前を変えています。 今のところ、OpenFOAM+もオープンソースの様ですが、ESIグループの有償サポートが提供されているようです。

まずはOpenFOAMのソースコードをダウンロードして下さい。

OpenFOAM Foundation https://openfoam.org/
OpenCFD社 (OpenFOAM+) http://www.openfoam.com/

ここではOpenFOAM Foundation のOpenFOAM-4.1とします。 OpenFOAM Foundationのダウンロードページから以下の2つのtarボールをダウンロードして下さい。 (OpenFOAM-v1606+でも導入手順はほぼ同様です。)

OpenFOAM-4.x-version-4.1.tar.gz
ThirdParty-4.x-version-4.1.tar.gz

導入先OSはCentOS 6.x または 7.x とします。 (RHELの場合も手順は同様です。)
前提条件として、既にインテルコンパイラ、インテルMPIが導入済みであるとします。
以下のパッケージが必要になるので追加してください。

zlib-devel gmp-devel mpfr-devel
boost-thread
qt-devel
cmake


OpenFOAMの環境設定

まずOpenFOAMのインストール先を決めます。 ここではホームディレクトリにOpenFOAMというディレクトリを作ります。

[korito@poaro01 ~]$ mkdir OpenFOAM
[korito@poaro01 ~]$ cd OpenFOAM

※複数バージョンを使い分ける場合は、「OpenFOAM/4.1」など、更にディレクトリを深くすると便利です。

ここに先ほどダウンロードした2つのtarボールを展開します。

[korito@poaro01 OpenFOAM]$ tar zxf OpenFOAM-4.x-version-4.1.tar.gz
[korito@poaro01 OpenFOAM]$ tar zxf ThirdParty-4.x-version-4.1.tar.gz

OpenFOAM 4.xでは展開してできるディレクトリ名が「OpenFOAM-4.x-version-4.1」と非常に長くなります。 また、後述する設定ファイルでも修正が必要になるため、ディレクトリ名を変更します。

[korito@poaro01 OpenFOAM]$ mv OpenFOAM-4.x-version-4.1 OpenFOAM-4.1
[korito@poaro01 OpenFOAM]$ mv ThirdParty-4.x-version-4.1 ThirdParty-4.1

次にインストール先とコンパイラ、MPIライブラリに合わせてOpenFOAMの環境設定ファイルを変更します。 展開したOpenFOAMディレクトリの下のetcディレクトリに移動し、bashrcファイルを修正します。 cshユーザの場合は、cshrcを修正してください。

[korito@poaro01 OpenFOAM]$ cd OpenFOAM-4.1/etc
[korito@poaro01 etc]$ vi bashrc  (bashrcを修正)

OpenFOAM-4.1/etc/bashrcの変更箇所
[korito@poaro01 etc]$ diff bashrc-orig bashrc
45,47c45,48
< [ $BASH_SOURCE ] && \
< export FOAM_INST_DIR=$(cd ${BASH_SOURCE%/*/*/*} && pwd -P) || \
< export FOAM_INST_DIR=$HOME/$WM_PROJECT
---
> export FOAM_INST_DIR=$HOME/OpenFOAM/4.1
> #[ $BASH_SOURCE ] && \
> #export FOAM_INST_DIR=$(cd ${BASH_SOURCE%/*/*/*} && pwd -P) || \
> #export FOAM_INST_DIR=$HOME/$WM_PROJECT
68c69
< export WM_COMPILER=Gcc
---
> export WM_COMPILER=Icc
92c93,94
< export WM_MPLIB=SYSTEMOPENMPI
---
> export MPI_ROOT=/opt/intel/impi/2017.1.132
> export WM_MPLIB=INTELMPI

特に、インテルMPIライブラリーのインストールディレクトリ「MPI_ROOT」で指定します。

※インテルコンパイラとインテルMPIライブラリーを指定した場合のコンパイル&リンク時オプションは以下で指定されています。 特に変更する必要はありませんが、必要に応じて確認してください。

OpenFOAM-4.1/wmake/rules/linux64Icc


CGALのインストール

OpenFOAM-4.1はCGAL(The Computaional Geometry Algorithms Library)を必要とします。 RHEL/CentOSでは標準パッケージとしてCGALがないので、ThirdPartyでインストールします。

https://www.cgal.org/

CGALの4.8系最新版はバージョン4.8.2です。 上述のURLからダウンロードして下さい。
※2017年2月現在は以下にあります。
https://github.com/CGAL/cgal/archive/releases/CGAL-4.8.2.tar.gz

ダウンロードしたらThirdPartyのディレクトリに展開します。 また、ディレクトリ名が適当でないので変更します。

[korito@poaro01 OpenFOAM]$ cd ThirdParty-4.1
[korito@poaro01 ThirdParty-4.1]$ tar /tmp/CGAL-4.8.2.tar.gz
[korito@poaro01 ThirdParty-4.1]$ mv cgal-releases-CGAL-4.8.2 CGAL-4.8.2

ThirdPartyに付属のmakeCGALを修正します。

ThirdParty-4.1/makeCGALの修正
[korito@poaro01 ThirdParty-4.1]$ diff makeCGAL-orig makeCGAL
47c47
< cgalPACKAGE=${cgal_version:-CGAL-4.8}
---
> cgalPACKAGE=${cgal_version:-CGAL-4.8.2}

先ほど修正したbashrcと同様にCGALの環境設定も変更する必要があります。 OpenFOAMのetc/config.sh/CGALを修正します。

[korito@poaro01 OpenFOAM]$ cd OpenFOAM-4.1/etc/config.sh
[korito@poaro01 config.sh]$ vi CGAL

OpenFOAM-4.1/etc/config.sh/CGALの修正
[korito@poaro01 config.sh]$ diff CGAL-orig CGAL
40,41c40,41
< cgal_version=cgal-system
< #cgal_version=CGAL-4.8
---
> #cgal_version=cgal-system
> cgal_version=CGAL-4.8.2

準備が出来たらCGALをインストールします。 インストールする前にOpenFOAMのbashrcを読み込んで環境設定をします。 この時、OpenFOAM-4.1/etc/config.sh/CGALも読み込まれます。

[korito@poaro01 OpenFOAM]$ source OpenFOAM-4.1/etc/bashrc
[korito@poaro01 OpenFOAM]$ cd ThirdParty-4.1
[korito@poaro01 ThirdParty-4.1]$ ./makeCGAL


ParaViewのインストール

ThirdPartyにはParaViewのソースコードが含まれています。 ParaViewはThirdPartyのものを使わず、別途インストールすることもできますが、ThirdPartyのものを使えばOpenFOAMとの連携機能が利用です。

ParaViewのインストールにはcmakeとQt4が必要です。 どちらもRHEL/CentOSのパッケージを追加してください。
※OpenFOAM-2.xなど古いバージョンではcmakeの新しいバージョンを利用するとインストールできないことがあります。 OpenFOAM-2.3ではThirdPartyにcmake-2.8.12.1のソースコードが含まれているので、事前にcmakeをインストールしておいてください。

RHEL/CentOSに付属のQt4はqmakeコマンドが変えてあるのでオプションで指定します。ParaViewは以下の様にインストールします。

[korito@poaro01 OpenFOAM]$ source OpenFOAM-4.1/etc/bashrc
[korito@poaro01 OpenFOAM]$ cd ThirdParty-4.1
[korito@poaro01 ThirdParty-4.1]$ ./makeParaView -qmake /usr/bin/qmake-qt4

※「-cmake」で特定のcmakeを指定することもできます。



boostに関する変更

OpenFOAMはboost C++ Libraryを利用します。 RHEL-6/CentOS-6系ではOSにバンドルされていますが、OpenFOAMが必要とするlibboost_thread.so が libboost_thread-mt.so という名前になっており、OpenFOAMのインストールを実施するとリンクできません。 そこで該当する箇所を探し、修正します。

※RHEL-7/CentOS-7系では libboost_thread.so のシンボリックリンクが作られているのでこの操作は不要です。

OpenFOAM-4.1ディレクトリへ移動してlibboost_threadを含むファイルを検索します。

[korito@poaro01 OpenFOAM]$ cd OpenFOAM-4.1
[korito@poaro01 OpenFOAM-4.1]$ OBJS=$(find .)
[korito@poaro01 OpenFOAM-4.1]$ for obj in ${OBJS};do grep -H boost_thread ${obj};done 2>&1 | 
 grep -v "Is a directory"
./applications/utilities/mesh/generation/foamyMesh/cellSizeAndAlignmentGrid/Make/options: 
    -lboost_thread \
./applications/utilities/mesh/generation/foamyMesh/foamyHexMeshBackgroundMesh/Make/options: 
    -lboost_thread \
./applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/Make/options: 
    -lboost_thread \

OpenFOAM-4.1ではこの3つのファイルの修正が必要になります。 OpenFOAMの他のバージョンでは異なる場合があるので、上述の様な方法で探すのが適当でしょう。 以下は変更箇所です。

$ diff applications/utilities/mesh/generation/foamyMesh/cellSizeAndAlignmentGrid/Make/options-orig 
 applications/utilities/mesh/generation/foamyMesh/cellSizeAndAlignmentGrid/Make/options
29c29
<     -lboost_thread \
---
>     -lboost_thread-mt \

$ diff applications/utilities/mesh/generation/foamyMesh/foamyHexMeshBackgroundMesh/Make/options-orig 
 applications/utilities/mesh/generation/foamyMesh/foamyHexMeshBackgroundMesh/Make/options
24c24
<     -lboost_thread \
---
>     -lboost_thread-mt \

$ diff applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/Make/options-orig
 applications/utilities/mesh/generation/foamyMesh/foamyHexMeshSurfaceSimplify/Make/options
19c19
<     -lboost_thread \
---
>     -lboost_thread-mt \



OpenFOAMのインストール

OpenFOAMのインストールは非常に時間がかかります。 そのため、通常は並列にコンパイルを実行します。 最近のマルチコアサーバでも8〜16並列で数十分〜1時間かかります。
インストールは「Allwmake」コマンドで実行します。コンパイルの並列数の指定は環境変数WM_NCOMPPROCSでできます。 OpenFOAM-4.1では「-j」オプションが利用できます。

[korito@poaro01 OpenFOAM]$ cd OpenFOAM-4.1
[korito@poaro01 OpenFOAM-4.1]$ source etc/bashrc

[korito@poaro01 OpenFOAM-4.1]$ export WM_NCOMPPROCS=16
[korito@poaro01 OpenFOAM-4.1]$ ./Allwmake >& Allwmake.log

または

[korito@poaro01 OpenFOAM-4.1]$ ./Allwmake -j >& Allwmake.log

※「-j」オプションは自動的に並列数を指定します。

AllwmakeのログでErrorやFailがないか確認してください。 問題なければOpenFOAMのインストールは終了です。

OpenFOAMを利用する場合、インストールの際にも行った環境設定を読み込んでください。

[korito@poaro01 ~]$ source OpenFOAM/OpenFOAM-4.1/etc/bashrc

OpenFOAMにはドキュメントと豊富なチュートリアルが準備されています。 ご活用ください。

OpenFOAM-4.1/doc/Guides/OpenFOAMUserGuide-A4.pdf ドキュメント
OpenFOAM-4.1/tutorials チュートリアル

go top