Edited at

CentOSにOpenFOAM 5.0をインストール

More than 1 year has passed since last update.

この記事は流体解析のオープンソースソフトウェアであるOpenFOAMのバージョン5.0を,CentOSにインストールした際の手順を備忘録としてまとめたものです.


OpenFOAMのダウンロード

OpenFOAMのバイナリパッケージ及びソースコードは以下のサイトから入手できます.

1つめのサイトはESIグループによるもので,通称plus版と呼ばれるバージョンが入手できます.一方,2つめのサイトはOpenFOAM Foundationによるものであり,今回インストールするバージョン5.0はこちらのサイトから入手できます.


インストールの種類

OpenFOAM Foundationのサイトでは,ubuntuにapt-getでインストールする方法,Dockerを使ってLinuxやMac OSにインストールする方法,ソースからビルドする方法が掲載されています.ソースからビルドする方法については,ubuntu及びSuSEに対してビルドできることが公式に確認されていますが,Red Hat/CentOSに関するインストール情報は載っていません.しかしながら,CentOSは数値計算用サーバのOSとして採用されることが多いため,この記事ではOpenFOAMをCentOS上でソースからビルドすることを試みます.CentOSのバージョンは6.xを対象としています.


インストールの方針


  • OpenFOAMはコンパイラやライブラリの要件があり,システムにインストール済みのものではバージョンが古いことがあります.システムにインストール済みのコンパイラ・ライブラリはアップデートせずに,OpenFOAMのサードパーティディレクトリで別途ビルドして環境構築を行うことにします(もとのシステム環境を汚さない).

  • 通常のデスクトップPCへのインストールでは$Homeにインストールすることがよくありますが、今回は他のユーザも利用する計算サーバへのインストールを想定し,/opt以下にインストールします.


インストール手順の概要


  1. 管理者権限で必要なrpmパッケージをダウンロード・インストールする.

  2. OpenFOAM本体,サードパーティのビルドに必要となるソースパッケージをダウンロードし,展開する.

  3. 環境設定ファイル・ビルドスクリプトを編集する.

  4. サードパーティ(ツール,ライブラリ)のビルドする.

  5. OpenFOAM本体をビルドする.

  6. ビルドしたOpenFOAM本体(ソルバー)の動作検証を行う.

  7. 可視化に用いるParaView及び可視化用データリーダーのビルドする.

  8. 流体解析の一連の流れである,前処理(メッシュ生成),計算実行, 後処理(可視化)ができることを確認する.

手順7.のParaViewのビルドは失敗することが多々あり,どうしてもうまくいかないときはあきらめます.ParaViewはCentOSサーバ以外にも別途インストールできるので,計算データを手元の環境にダウンロードして可視化を行うことができます.

注意

ParaViewは今回バージョン5.4.0までインストールできるようですが,何かと失敗&面倒であったため,今回の記事では5.0.1をインストールしています.


必要なrpmパッケージのインストール

必要なパッケージは以下のとおりです.


  • git, gcc-c++, bison, flex, m4, glibc-devel, glibc-devel.i686, zlib-devel

管理者権限でyumを使って上記のパッケージをインストールします.

$ yum install gcc gcc-c++ bison flex m4 glibc-devel glibc-devel.i686 zlib-devel


OpenFOAMソースパッケージのダウンロード・展開

OpenFOAMのパッケージは本体ソースコードとサードパーティパッケージの2種類から構成されています.ソースパッケージをOpenFOAM Foundationのサイトと同様にwgetでダウンロード,tarで展開します.バージョン名が'5.x-version-5.0'となっていますので,公式サイトと同様に'5.0'に変更します.

$ mkdir /opt/OpenFOAM

$ cd /opt/OpenFOAM
$ wget -O - http://dl.openfoam.org/source/5-0 | tar xvz
$ wget -O - http://dl.openfoam.org/third-party/5-0 | tar xvz
$ mv OpenFOAM-5.x-version-5.0 OpenFOAM-5.0
$ mv ThirdParty-5.x-version-5.0 ThirdParty-5.0

各パッケージを展開したのちのディレクトリ・ファイルの構成は以下のようになります.


  • OpenFOAM-5.0/

Allwmake      bin/     doc/ README.org  tutorials/

applications/ COPYING etc/ src/ wmake/


  • ThirdParty-5.0/

Allclean          COPYING   makeCmake       makeLLVM      README.org

Allwmake etc/ makeGcc makeParaView README_scotch
AllwmakeLibccmio makeCGAL makeGperftools README.html scotch_6.0.3/

OpenFOAMのインストール方法はOpenFOAM Foundationに詳しく掲載されていますが,展開したOpenFOAM-5.0及びThirdParty-5.0にあるReadme.orgも熟読します.


サードパーティパッケージに必要なソースのダウンロード・展開

上記のThirdPart-5.0以下で必要となるコンパイラ・ライブラリは以下のとおりです.


  • gcc-4.8.5, gmp-5.1.2, mpfr-3.1.2, mpc-1.0.1, openmpi-2.1.1, scotch_6.0.3, boost_1_55_0, CGAL-4.8.1, cmake-3.2.1, qt-4.8.7, ParaView-v5.0.1

コンパイラはGCC以外のintelコンパイラなどでも可能ですが,OpenFOAMの実行速度はそれほど変わらないようです.GCCのバージョンは4.8.5より新しいものでも大丈夫ですが,後で出てくる設定を合わせて変更する必要があります.QtのバージョンはCentOSに元々入っているものはバージョンが古く,4.7以上が必要とされます.

GCC

$ cd ThirdParty-5.0

$ wget https://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz
$ tar zxvf gcc-4.8.5.tar.gz

GNUライブラリ(gmp, mpfr, mpc)

$ wget http://ftp.gnu.org/gnu/gmp/gmp-5.1.2.tar.bz2 

$ tar jxvf gmp-5.1.2.tar.bz2
$ wget http://ftp.gnu.org/gnu/mpfr/mpfr-3.1.2.tar.gz
$ tar zxvf mpfr-3.1.2.tar.gz
$ wget http://ftp.gnu.org/gnu/mpc/mpc-1.0.1.tar.gz
$ tar zxvf mpc-1.0.1.tar.gz

OpenMPI

$ wget  https://www.open-mpi.org/software/ompi/v2.1/downloads/openmpi-2.1.1.tar.bz2

$ tar jxvf openmpi-2.1.1.tar.bz2

認証の関係でHTTPSのダウンロードができない場合は,--no-check-certificateをオプションを付けるか,.wgetrcの設定などによって回避してください.

Scotch

$ wget https://gforge.inria.fr/frs/download.php/file/34099/scotch_6.0.3.tar.gz

$ tar zxvf scotch_6.0.3.tar.gz

Boost

$ wget --no-check-certificate http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.bz2/download

$ tar jxvf boost_1_55_0.tar.bz2

CGAL

$ wget -O CGAL-4.8.1.tar.xz https://github.com/CGAL/cgal/releases/download/releases%2FCGAL-4.8.1/CGAL-4.8.1.tar.xz

$ tar Jxvf CGAL-4.8.1.tar.xz

ファイル名が長い,というエラーが出る場合があるので,上記のように-Oオプションをつけてダウンロードしています.

Cmake

$ wget https://cmake.org/files/v3.2/cmake-3.2.1.tar.gz

$ tar zxvf cmake-3.2.1.tar.gz

Qt (qmake)

$ wget https://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz

$ tar zxvf qt-everywhere-opensource-src-4.8.7.tar.gz

ParaView

$ wget --no-check-certificate http://www.paraview.org/files/v5.0/ParaView-v5.0.1-source.tar.gz

$ tar zxvf ParaView-v5.0.1-source.tar.gz
$ mv ParaView-v5.0.1-source ParaView-v5.0.1


環境設定ファイル・ビルドスクリプトを編集

OpenFOAM本体の環境設定を,viemacsなどの適当なエディタで編集します.シェルはbash利用で説明します.

$ vi ../OpenFOAM-5.0/etc/bashrc

修正箇所

export WM_PROJECT=OpenFOAM

export WM_PROJECT_VERSION=5.0

################################################################################
# USER EDITABLE PART: Changes made here may be lost with the next upgrade
#
# FOAM_INST_DIR is the location of the OpenFOAM installation which defaults to
# the directory containing this file if sourced by a bash shell.
#
# Please set to the appropriate path if the default is not correct.
#
[ ${BASH_SOURCE:-$0} ] && \
export FOAM_INST_DIR=$(cd $(dirname ${BASH_SOURCE:-$0})/../.. && pwd -P) || \
# export FOAM_INST_DIR=$HOME/$WM_PROJECT
# export FOAM_INST_DIR=~$WM_PROJECT
export FOAM_INST_DIR=/opt/$WM_PROJECT
# export FOAM_INST_DIR=/usr/local/$WM_PROJECT

#- Compiler location:

# WM_COMPILER_TYPE= system | ThirdParty (OpenFOAM)
export WM_COMPILER_TYPE=ThirdParty

#- MPI implementation:

# WM_MPLIB = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPICH | MPICH-GM | HPMPI
# | MPI | QSMPI | SGIMPI
export WM_MPLIB=OPENMPI

コンパイラ・GNUライブラリの指定は上記のパッケージをダウンロードしていれば問題ありませんが,念のため確認します.

$ more ../OpenFOAM-5.0/etc/config.sh/compiler

確認箇所

case "$WM_COMPILER_TYPE" in

OpenFOAM | ThirdParty)

# Default versions of GMP, MPFR and MPC, override as necessary
gmp_version=gmp-5.1.2
mpfr_version=mpfr-3.1.2
mpc_version=mpc-1.0.1

case "$WM_COMPILER" in
Gcc | Gcc48)
gcc_version=gcc-4.8.5
;;

CGALのビルドスクリプトを編集します.

$ vi makeCGAL

変更箇所

cgalPACKAGE=${cgal_version:-CGAL-4.8.1}

boostPACKAGE=boost_1_55_0
gmpPACKAGE=gmp-5.1.2
mpfrPACKAGE=mpfr-3.1.2

OpenFOAM本体でのCGALの設定を変更します.

vi ../OpenFOAM-5.0/etc/config.sh/CGAL

変更箇所

boost_version=boost_1_55_0

cgal_version=CGAL-4.8.1


サードパーティのビルド


GCCのビルド

はじめにOpenFOAMの環境設定を読み込みます.

$ . /opt/OpenFOAM/OpenFOAM-5.0/etc/bashrc

このとき,下記のようなメッセージが出力されますが,GCCがビルドがまだなので当たり前のエラーであり,GCCのビルドを進めます.

Warning in /opt/OpenFOAM/OpenFOAM-5.0/etc/config.sh/

settings:
Cannot find /opt/OpenFOAM/ThirdParty-5.0/platforms/linux64/gcc-4.8.5 installation.
Please install this compiler version or if you wish to use the system compiler,
change the 'WM_COMPILER_TYPE' setting to 'system'

$ ./makeGcc


Cmakeのビルド

Cmakeをビルドします.

./makeCmake


残りのサードパーティパッケージのビルド

Gcc, Cmakeのビルドが完了したら,残りのパッケージのビルドをAllwmakeで行います.実行する前にもう一度OpenFOAMの環境設定を読み込みます.

$ . /opt/OpenFOAM/OpenFOAM-5.0/etc/bashrc 

$ ./Allwmake


OpenFOAM本体のビルド

再度OpenFOAMの環境設定を読み込んでからビルドします.Allwmakeスクリプトを利用しますが,-jオプションで並列コンパイルのcpu数を指定できるので,環境に合わせて設定します.

$ . /opt/OpenFOAM/OpenFOAM-5.0/etc/bashrc

$ cd /opt/OpenFOAM/OpenFOAM-5.0/
$ ./Allwmake –j4

もしエラーが出て正常終了しないときは,エラーメッセージから足りないライブラリがないかどうかなどを確認します.


OpenFOAM本体のビルド検証

OpenFOAM 4.xまでは,OpenFOAM本体のビルドが正常終了したら,環境設定読み込みを再度行い,テストのためのプログラムfoamInstallationTestを以下のように実行するのが慣例でした.しかし,OpenFOAM 5.0ではfoamInstallationTest無いので以下はスキップします.

$ . /opt/OpenFOAM/OpenFOAM-5.0/etc/bashrc 

$ foamInstallationTest


ParaView及びParaView Readerのビルド


Qtのビルド

OpenFOAM 3.0.xまではQtをビルドするためのスクリプトmakeQtが用意されていましたが,OpenFOAM 4.0以降ではなぜか見当たりません.3.0.xのものが利用できるので,QtFunctionsという設定ファイルと併せてコピーし,makeQtを編集します.

$ cd /opt/OpenFOAM

$ git clone git://github.com/OpenFOAM/ThirdParty-3.0.x.git
$ cd /opt/OpenFOAM/ThirdParty-5.0
$ cp /opt/OpenFOAM/ThirdParty-3.0.x/makeQt ./
$ cp /opt/OpenFOAM/ThirdParty-3.0.x/etc/tools/QtFunctions ./etc/tools/
$ vi makeQt

変更箇所

qtVERSION=4.8.7

qtTYPE=qt-everywhere-opensource-src

Qtをビルドします.

$ ./makeQt

次にParaViewをビルドしますが,ビルドスクリプトmakeParaViewの中ではqmake(Qt)及びCmakeのパスが設定されていないので追記します.

$ vi makeParaView

追記箇所

# Set the path to the Qt-4.5 (or later) qmake if the system Qt is older

QMAKE_PATH="/opt/OpenFOAM/ThirdParty-5.0/platforms/linux64Gcc/qt-4.8.7/bin/"

# Set the path to cmake
CMAKE_PATH="/opt/OpenFOAM/ThirdParty-5.0/platforms/linux64Gcc/cmake-3.2.1/bin"

また,ParaViewでPythonスクリプトを使いたい場合は,makeParaView中でwithPYTHON=trueとし,PYTHON_LIBRARY=""に適切なパスを設定します(今回は設定しない).

ビルドするバージョンを指定するために,`OpenFOAM-5.0/etc/config.sh/paraview'を編集します.

$ vi ../OpenFOAM-5.0/etc/config.sh/paraview

修正箇所

#- ParaView version, automatically determine major version

#export ParaView_VERSION=3.12.0
#export ParaView_VERSION=4.0.1
#export ParaView_VERSION=4.1.0
#export ParaView_VERSION=4.3.1
#export ParaView_VERSION=4.4.0
#export ParaView_VERSION=5.0.0
export ParaView_VERSION=5.0.1
#export ParaView_VERSION=5.4.0
export ParaView_MAJOR=detect

注意

ParaView 5.0.1以降のビルドでは,OpenGLに関する指定ができます.しかしながら,システムで利用できるOpenGLのバージョンが2.xより古い場合,ビルドできてもParaViewが起動しません.OpenGLのドライバをアップデートするか,もしくは以下のようにOpenGLライブラリ2.x以上の機能を利用しないようにします.

$ vi etc/tools/ParaViewFunctions

修正箇所(コメントアウト)

# Choose the new rendering engine

#addCMakeVariable "VTK_RENDERING_BACKEND=OpenGL2"

ParaViewをビルドします.今回はParaView 5.0.1がビルドされます.

$ ./makeParaView

引き続いてParaView Readerをビルドします.一度クリーンしてからビルドします.

$ cd $FOAM_UTILITIES/postProcessing/graphics/PVReaders 

$ ./Allwclean
$ ./Allwmake

ここで$FOAM_UTILITIESはOpenFOAMのユーティリティがインストールされたパスを表すOpenFOAMの環境変数です.


OpenFOAMでの前処理,計算実行,後処理の動作確認

上記のインストール作業がすべて終了したら,OpenFOAMによって流体解析の一連の流れである,前処理(メッシュ作成),計算実行,後処理(可視化)が正常にできるかどうかを,チュートリアルケースであるcavityを利用して確かめます.

$ . /opt/OpenFOAM/OpenFOAM-4.0/etc/bashrc

$ mkdir –p $FOAM_RUN
$ run
$ cp –r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity ./
$ cd cavity
$ blockMesh
$ icoFoam
$ paraFoam

ここで出てくるOpenFOAMのコマンドの意味は以下のとおりです.



  • run: ユーザの計算実行ディレクトリ$FOAM_RUNに移動する.


  • blockMesh: 基本的なメッシュを生成する.


  • icoFoam: 非圧縮性流体計算用の基本ソルバーicoFoamの実行.


  • paraFoam: OpenFOAMの計算出力をParaView Readerによって読み込み,ParaViewを起動して可視化する.

ここで行った動作確認では並列計算の確認ができていません.並列計算を行うチュートリアルケースはどれも計算時間がかかるので気軽に動作確認ができませんが,比較的軽い計算としてpipeCyclicを実行してみます(並列数はデフォルでは5).

$ run

$ cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pipeCyclic ./
$ cd pipeCyclic
$ ./Allrun

Allrunはメッシュ生成から解析条件設定・計算実行を自動的に行うスクリプトです.cavity及びpipeCyclicがエラーなしで計算実行できれば無事にインストール完了です.