見積依頼

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

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

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

  • OpenFOAM Foundation
  • OpenCFD社 (OpenFOAM+)
  • ここでは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 チュートリアル