この記事は流体解析のオープンソースソフトウェアであるOpenFOAMのバージョン4.0を,CentOSにインストールした際の手順を備忘録としてまとめたものです.
OpenFOAMのダウンロード
OpenFOAMのバイナリパッケージ及びソースコードは以下のサイトから入手できます.
1つめのサイトはESIグループによるものでLinux版以外にもWindows版も入手できます.一方,2つめのサイトはOpenFOAM Foundationによるものであり,バージョン4.0は現在の時点(2016/6)でこちらのサイトからのみ入手できます.なぜ2つのグループがあるのかはいろいろ経緯があるそうで,私も良く知りません.
インストールの種類
OpenFOAM Foundationのサイトでは,ubuntuにapt-get
でインストールする方法と,ソースからビルドする方法が掲載されています.ソースからビルドする方法については,ubuntu及びSuSEに対する手順がまとめられていますが,Red Hat/CentOSに関するインストール情報は載っていません.しかしながら,CentOSは数値計算用サーバのOSとして採用されることが多いため,この記事ではOpenFOAMをCentOS上でソースからビルドすることを試みます.CentOSのバージョンは6.xを対象としています.
インストールの方針
- OpenFOAMはコンパイラやライブラリの要件があり,システムにインストール済みのものではバージョンが古いことがあります.システムにインストール済みのコンパイラ・ライブラリはアップデートせずに,OpenFOAMのサードパーティディレクトリで別途ビルドして環境構築を行うことにします(もとのシステム環境を汚さない).
- 通常のデスクトップPCへのインストールでは
$Home
にインストールすることがよくありますが、今回は他のユーザも利用する計算サーバへのインストールを想定し,/opt
以下にインストールします.
インストール手順の概要
- 管理者権限で必要なrpmパッケージをダウンロード・インストールする.
- OpenFOAM本体,サードパーティのビルドに必要となるソースパッケージをダウンロードし,展開する.
- 環境設定ファイル・ビルドスクリプトを編集する.
- サードパーティ(ツール,ライブラリ)のビルドする.
- OpenFOAM本体をビルドする.
- ビルドしたOpenFOAM本体(ソルバー)の動作検証を行う.
- 可視化に用いるParaView及び可視化用データリーダーのビルドする.
- 流体解析の一連の流れである,前処理(メッシュ生成),計算実行, 後処理(可視化)ができることを確認する.
手順7.のParaViewのビルドは失敗することが多々あり,どうしてもうまくいかないときはあきらめます.ParaViewはCentOSサーバ以外にも別途インストールできるので,計算データを手元の環境にダウンロードして可視化を行うことができます.
必要な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のサイトからダウンロードするとバージョンが'4.0'と付いているtar.gzファイルが入手できますが,gitを使うと'4.x'になっています.ここではgitを使ってパッケージをcloneし,バージョン名を'4.x'から'4.0'に変更します.
$ mkdir /opt/OpenFOAM
$ cd /opt/OpenFOAM
$ git clone git://github.com/OpenFOAM/OpenFOAM-4.x.git
$ mv OpenFOAM-4.x OpenFOAM-4.0
$ git clone git://github.com/OpenFOAM/ThirdParty-4.x.git
$ mv ThirdParty-4.x ThirdParty-4.0
各パッケージを展開したのちのディレクトリ・ファイルの構成は以下のようになります.
OpenFOAM-4.0/
Allwmake README.org bin/ etc/ tutorials/
COPYING applications/ doc/ src/ wmake/
ThirdParty-4.0/
Allclean README.org makeLLVM
Allwmake etc/ makeParaView
AllwmakeLibccmio makeCGAL makeParaView3
COPYING makeCmake scotch_6.0.3/
ParaView-5.0.1/ makeGcc
README.html makeGperftools
OpenFOAMのインストール方法はOpenFOAM Foundationに詳しく掲載されていますが,展開したOpenFOAM-4.0
及びThirdParty-4.0
にあるReadme.org
も熟読します.
サードパーティパッケージに必要なソースのダウンロード・展開
上記のThirdPart-4.0
以下で必要となるコンパイラ・ライブラリは以下のとおりです.
- gcc-4.8.5, gmp-5.1.2, mpfr-3.1.2, mpc-1.0.1, openmpi-1.10.2, scotch_6.0.3, boost_1_58_0, CGAL-4.8, cmake-3.2.1, qt-4.8.6
コンパイラはGCC以外のintelコンパイラなどでも可能ですが,OpenFOAMの実行速度はそれほど変わらないようです.GCCのバージョンは4.8.5より新しいものでも大丈夫ですが,後で出てくる設定を合わせて変更する必要があります.QtのバージョンはCentOSに元々入っているものはバージョンが古く,4.7以上が必要とされます.
GCC
$ cd ThirdParty-4.0.x
$ 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/v1.10/downloads/openmpi-1.10.2.tar.gz
$ tar zxvf openmpi-1.10.2.tar.gz
認証の関係で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 http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.gz
$ tar zxvf boost_1_58_0.tar.gz
CGAL
$ wget https://github.com/CGAL/cgal/releases/download/releases/CGAL-4.8/CGAL-4.8.tar.xz
$ tar Jxvf CGAL-4.8.tar.xz
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.6/qt-everywhere-opensource-src-4.8.6.tar.gz
$ tar zxvf qt-everywhere-opensource-src-4.8.6.tar.gz
環境設定ファイル・ビルドスクリプトを編集
OpenFOAM本体の環境設定を,vi
やemacs
などの適当なエディタで編集します.シェルはbash
利用で説明します.
$ vi ../OpenFOAM-4.0/etc/bashrc
修正箇所
export WM_PROJECT=OpenFOAM
export WM_PROJECT_VERSION=4.0
# Please set to the appropriate path if the default is not
correct.
#
[ $BASH_SOURCE ] && \
export FOAM_INST_DIR=${BASH_SOURCE%/*/*/*} || \
# 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-4.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}
boostPACKAGE=boost_1_58_0
gmpPACKAGE=gmp-5.1.2
mpfrPACKAGE=mpfr-3.1.2
OpenFOAM本体でのCGALの設定を変更します.
vi ../OpenFOAM-4.0/etc/config.sh/CGAL
変更箇所
boost_version=boost_1_58_0
cgal_version=CGAL-4.8
サードパーティのビルド
GCCのビルド
はじめにOpenFOAMの環境設定を読み込みます.
$ . /opt/OpenFOAM/OpenFOAM-4.0/etc/bashrc
このとき,下記のようなメッセージが出力されますが,GCCがビルドがまだなので当たり前のエラーであり,GCCのビルドを進めます.
Warning in /opt/OpenFOAM/OpenFOAM-4.0/etc/config.sh/
settings:
Cannot find /opt/OpenFOAM/ThirdParty-4.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-4.0/etc/bashrc
$ ./Allwmake
OpenFOAM本体のビルド
再度OpenFOAMの環境設定を読み込んでからビルドします.Allwmake
スクリプトを利用しますが,-j
オプションで並列コンパイルのcpu数を指定できるので,環境に合わせて設定します.
$ . /opt/OpenFOAM/OpenFOAM-4.0/etc/bashrc
$ cd /opt/OpenFOAM/OpenFOAM-4.0/
$ ./Allwmake –j4
もしエラーが出て正常終了しないときは,エラーメッセージから足りないライブラリがないかどうかなどを確認します.
OpenFOAM本体のビルド検証
OpenFOAM本体のビルドが正常終了したら,環境設定読み込みを再度行い,テストのためのプログラムを実行します.
$ . /opt/OpenFOAM/OpenFOAM-4.0/etc/bashrc
$ foamInstallationTest
ライブラリパスなどの確認結果が出力され,最後に以下のような要約が出力されればOKです.
Summary
-------------------------------------------------------------------------------
Base configuration ok.
Critical systems ok.
Done
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-4.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.6
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-4.0/platforms/linux64Gcc/qt-4.8.6/bin/"
# Set the path to cmake
CMAKE_PATH="/opt/OpenFOAM/ThirdParty-4.0/platforms/linux64Gcc/cmake-3.2.1/bin"
また,ParaViewでPythonスクリプトを使いたい場合は,makeParaView
中でwithPYTHON=true
とし,PYTHON_LIBRARY=""
に適切なパスを設定します(今回は設定しない).
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
がエラーなしで計算実行できれば無事にインストール完了です.