技術情報

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

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


株式会社HPCソリューションズ

2017年02月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でインストールします。



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