Edited at

CentOSにOpenFOAM v1612+をインストール

More than 1 year has passed since last update.

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


OpenFOAMのダウンロード

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

1つめのサイトはESIグループによるものでLinux版以外にもWindows版も入手できます.一方,2つめのサイトはOpenFOAM Foundationによるものです.過去の記事でバージョンv1606+のインストール方法を紹介しましたが,今回も前者のESIのサイトからのみ入手できます.


インストールの種類

ESIのサイトでは,Dockerでインストールする方法と,ソースからビルドする方法が掲載されています.Windowsに関してはインストーラーが提供されていますが,内部はDockerとなっています.ソースからビルドする方法については,Ubuntu 15.10, Ubuntu 14.04.3 LTS, CentOS, OpenSUSE Tumbleweed に対してインストールが可能であることが公式に確認されています.この記事ではOpenFOAMをCentOS上でソースからビルドすることを試みます.CentOSのバージョンは6.xを対象としています.


インストールの方針


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

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


インストール手順の概要


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

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

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

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

  5. 可視化に用いるParaViewをビルドする.

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

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

  8. 可視化用データリーダーをリビルドする.

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

手順5.のParaViewのビルドは失敗することが多々あり,どうしてもうまくいかないときはあきらめます(ParaView 5.2.0はOpenFOAMのデータリーダーがうまく機能しないそうなので、最新版はインストールしないほうが良さそうです).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種類から構成されています.ここでは異なるバージョンも管理できるように/opt/OpenFOAMというディレクトリを作成し,その下にwgetでダウンロードして展開します.

$ mkdir /opt/OpenFOAM

$ cd /opt/OpenFOAM
$ wget https://sourceforge.net/projects/openfoamplus/files/v1612+/OpenFOAM-v1612+.tgz
$ tar zxvf OpenFOAM-v1612+.tgz
$ wget https://sourceforge.net/projects/openfoamplus/files/v1612+/ThirdParty-v1612+.tgz
$ tar zxvf ThirdParty-v1612+.tgz

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


  • OpenFOAM-v1612+/

Allwmake        applications/       src/

BuildIssues.txt bin/ tutorials/
COPYING doc/ wmake/
README.md etc/


  • ThirdParty-v1612+/

Allclean        makeADIOS       makeParaView.example

Allwmake makeCCMIO makeQt
BUILD.md makeCGAL makeTecio
CGAL-4.9/ makeCmake makeVTK
COPYING makeFFTW makeVTK.example
ParaView-5.0.1/ makeGcc minCmake
README.md makeGperftools openmpi-1.10.4/
boost_1_62_0/ makeLLVM scotch_6.0.3/
etc/ makeMesa sources.txt
fftw-3.3.5/ makeParaView

OpenFOAMのビルド方法はOpenFOAM® Installation From SourceOpenFOAM® Build Guideに詳しく掲載されていますが,展開したOpenFOAM-v1612+及びThirdParty-v1612+にあるREADME.mdBuildIssues.txt,及びBUILD.mdも熟読します.


最小限のシステム要件

公式サイトで指定されている要件は以下のとおりです.


  • gcc: 4.8.0

  • cmake: 2.8.11 (ParaViewとCGALのビルドに必要)

  • boost: 1.48 (CGALのビルドに必要)

  • Qt: 4.7.2 (ParaViewのビルドに必要)

QtのバージョンはCentOSに元々入っているものはバージョンが古く,4.7以上が必要とされます.


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

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

(BUILD.mdにダウンロード先の記載があります).


  • gcc-4.8.5, gmp-6.1.0, mpfr-3.1.4, mpc-1.0.3, openmpi-1.10.4, scotch_6.0.3, boost_1_62_0, CGAL-4.9, cmake-3.5.2, qt-4.8.7, fftw-3.3.5, libccmio-2.6.1

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

GCC

$ cd ThirdParty-v1612+

$ 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 ftp://ftp.gnu.org/gnu/gmp/gmp-6.1.0.tar.bz2

$ tar jxvf gmp-6.1.0.tar.bz2
$ wget ftp://ftp.gnu.org/gnu/mpfr/mpfr-3.1.4.tar.bz2
$ tar jxvf mpfr-3.1.4.tar.bz2
$ wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
$ tar zxvf mpc-1.0.3.tar.gz

OpenMPI

すでにサードパーティディクトリにあります.

Scotch

すでにサードパーティディクトリにあります.

Boost

すでにサードパーティディクトリにあります.

CGAL

すでにサードパーティディクトリにあります.

Cmake

$ wget http://www.cmake.org/files/v3.5/cmake-3.5.2.tar.gz

$ tar zxvf cmake-3.5.2.tar.gz

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

Qt (qmake)

$ wget http://download.qt.io/official_releases/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

FFTW

すでにサードパーティディクトリにあります.

libccmio

STAR-CCM+のメッシュコンバータが必要な場合のみビルドします.

$ wget http://portal.nersc.gov/svn/visit/trunk/third_party/libccmio-2.6.1.tar.gz

$ tar zxvf libccmio-2.6.1.tar.gz


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


OpenFOAM本体の環境設定

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

$ vi ../OpenFOAM-v1612+/etc/bashrc

修正箇所

# 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 ] && FOAM_INST_DIR=$(\cd ${BASH_SOURCE%/*/*/*} && \pwd -P) || \
# FOAM_INST_DIR=$HOME/$WM_PROJECT
# FOAM_INST_DIR=~$WM_PROJECT
FOAM_INST_DIR=/opt/$WM_PROJECT
# FOAM_INST_DIR=/usr/local/$WM_PROJECT

#- Compiler location:

# WM_COMPILER_TYPE= system | ThirdParty
export WM_COMPILER_TYPE=ThirdParty

#- MPI implementation:

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

注意!

バージョン3.0以降ではexport WM_LABEL_SIZE=でメッシュのラベルサイズを32ビットから64ビットに拡張できるようになりました.必要があれば以下のように変更してください.

#- Label size:

# WM_LABEL_SIZE = 32 | 64
export WM_LABEL_SIZE=64

コンパイラ・GNUライブラリの指定に関して,GNUライブラリの指定を変更します.

$ vi ../OpenFOAM-v1612+/etc/config.sh/compiler

変更箇所

case "$WM_COMPILER_TYPE" in

OpenFOAM | ThirdParty)
# Default versions of GMP, MPFR and MPC, override as necessary
gmp_version=gmp-6.1.0
mpfr_version=mpfr-3.1.4
mpc_version=mpc-1.0.3


GCCビルドの設定

$ vi makeGcc

確認箇所

先ほど編集したconfig.sh/compilerからコンパイラ・GNUライブラリのバージョンを参照するので,

以下は確認するだけです.

# get default GCC, mpfr, gmp and mpc versions

WM_COMPILER_TYPE=ThirdParty # ensure we get the correct compiler settings
: ${WM_COMPILER:=Gcc} # this will still fail if 'Clang' was set

. $WM_PROJECT_DIR/etc/config.sh/functions
_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/compiler)

gmpPACKAGE=${gmp_version:-gmp-system}
mpfrPACKAGE=${mpfr_version:-mpfr-system}
mpcPACKAGE=${mpc_version:-mpc-system}
gccPACKAGE=$gcc_version


CGALビルドの設定

CGALのビルドスクリプトを上と同様に確認します.

$ vi makeCGAL

確認箇所

# Get CGAL, boost and gmp/mpfr versions

. $WM_PROJECT_DIR/etc/config.sh/functions
unset -f _foamAddPath _foamAddLib _foamAddMan # get settings only
unset BOOST_ARCH_PATH CGAL_ARCH_PATH # purge current values

# compiler first, let CGAL config override GMP (eg, when there is no GMP)
_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/compiler)
_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/CGAL)

boostPACKAGE=${boost_version:-boost-system}
gmpPACKAGE=${gmp_version:-gmp-system}
mpfrPACKAGE=${mpfr_version:-mpfr-system}
cgalPACKAGE=$cgal_version

OpenFOAM本体でのCGALの設定を確認します.

vi ../OpenFOAM-v1612+/etc/config.sh/CGAL

確認箇所

boost_version=boost_1_62_0

cgal_version=CGAL-4.9


FFTWビルドの設定

FFTWのビルドスクリプトを確認します.

vi makeFFTW

確認箇所

# Get FFTW versions

. $WM_PROJECT_DIR/etc/config.sh/functions
unset -f _foamAddPath _foamAddLib _foamAddMan # get settings only
_foamSource $($WM_PROJECT_DIR/bin/foamEtcFile config.sh/FFTW)
fftwPACKAGE=${fftw_version:-fftw-system}

OpenFOAM本体でのFFTWの設定を確認します.

vi ../OpenFOAM-v1612+/etc/config.sh/FFTW

変更箇所

fftw_version=fftw-3.3.5

export FFTW_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$fftw_version


サードパーティのビルド


GCCのビルド

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

$ . /opt/OpenFOAM/OpenFOAM-v1612+/etc/bashrc

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

Warning in /opt/OpenFOAM/OpenFOAM-v1612+/etc/config.sh/settings:

Cannot find Gcc compiler installation /opt/OpenFOAM/ThirdParty-v1612+/platforms/linux64/gcc-4.8.5

Either install this compiler version, or use the system compiler by setting
WM_COMPILER_TYPE to 'system' in /opt/OpenFOAM/OpenFOAM-v1612+/etc/bashrc.

$ ./makeGcc


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

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

$ . /opt/OpenFOAM/OpenFOAM-v1612+/etc/bashrc 

$ ./Allwmake


Cmakeのビルド

Cmakeをビルドします.バージョンをオプションで指定する必要があります.

./makeCmake cmake-3.5.2


ParaViewのビルド


Qtのビルド

makeQtの中でバージョンを確認します.

$ 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-v1612+/platforms/linux64Gcc/qt-4.8.7/bin"

# Set the path to cmake
CMAKE_PATH="/opt/OpenFOAM/ThirdParty-v1612+/platforms/linux64Gcc/cmake-3.5.2/bin"

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

注意!

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

$ vi makeParaView

変更箇所

# New rendering backend (starting with paraview 5.0).

# Default to auto-config based on paraview version
withGL2=false

ParaViewをビルドします.

$ ./makeParaView

以上のサードパーティ,ParaViewのビルドが終わったら,OpenFOAM本体ビルドのための条件を満たしているかどうかを以下のコマンドでチェックします.

$ foamSystemCheck


OpenFOAM本体のビルド

再度OpenFOAMの環境設定を読み込んでからビルドします.Allwmakeスクリプトを利用しますが,-jオプションで並列コンパイルのcpu数を指定できるので,環境に合わせて設定します.また,エイリアスコマンドfoamを用いると,OpenFOAMのプロジェクトディレクトリ(インストールディレクトリ)$WM_PROJECT_DIRに移動できます.

$ . /opt/OpenFOAM/OpenFOAM-v1612+/etc/bashrc

$ foam
$ ./Allwmake –j4

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


OpenFOAM本体のビルド検証

OpenFOAM本体のビルドが正常終了したら,環境設定読み込みを再度行い,テストのためのプログラムを実行します.

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

$ foamInstallationTest

ライブラリパスなどの確認結果が出力され,最後に以下のような要約が出力されればOKです.

Summary

-------------------------------------------------------------------------------
Base configuration ok.
Critical systems ok.

Done


引き続いて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/simpleFoam/pitzDaily ./
$ cd pitzDaily
$ blockMesh
$ simpleFoam
$ paraFoam

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



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


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


  • simpleFoam: 非圧縮性流体計算用の定常解析ソルバーsimpleFoamの実行.


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


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

$ run

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

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