この記事は流体解析のオープンソースソフトウェアであるOpenFOAMのバージョンv1906を,CentOS 6.xにインストールした際の手順を備忘録としてまとめたものです.ParaViewは5.6.0のインストールを試みましたが失敗しました.
OpenFOAMのダウンロード
OpenFOAMのバイナリパッケージ及びソースコードは以下のサイトから入手できます.
1つめのサイトはESIグループによるものでLinux版以外にもWindows版・Mac版のバイナリも入手できます.一方,2つめのサイトはOpenFOAM Foundationによるものです.リリースされた年月でバージョンがついてるもの,すなわち今回のv1906は前者のESIのサイトから入手できます.
インストールの種類
ESIのサイトでは,Windows,Mac,Linuxのバイナリがダウンロードできます.Windowsでは,Windows Subsystem for Linux (WSL)によるインストールもできます.ソースからビルドする方法については,Ubuntu 16.04LTS, CentOS 7.4, OpenSUSE Tumbleweed に対してインストールが可能であることが公式に確認されています.この記事ではOpenFOAMを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種類から構成されています.ここでは異なるバージョンも管理できるように/opt/OpenFOAM
というディレクトリを作成し,その下にwget
でダウンロードして展開します.
$ mkdir /opt/OpenFOAM
$ cd /opt/OpenFOAM
$ wget https://sourceforge.net/projects/openfoamplus/files/v1906/OpenFOAM-v1906.tgz
$ tar zxvf OpenFOAM-v1906.tgz
$ wget https://sourceforge.net/projects/openfoamplus/files/v1906/ThirdParty-v1906.tgz
$ tar zxvf ThirdParty-v1906.tgz
認証の関係でHTTPSのダウンロードができない場合は,--no-check-certificate
をオプションを付けるか,.wgetrcの設定などによって回避してください.
各パッケージを展開したのちのディレクトリ・ファイルの構成は以下のようになります.
OpenFOAM-v1906/
Allwmake applications COPYING etc modules src wmake
Allwmake-scan bin doc META-INFO README.md tutorials
ThirdParty-v1906/
Allclean makeADIOS2 makeMesa.example makeSCOTCH
Allwmake makeCCMIO makeMETIS makeVTK
boost_1_64_0 makeCGAL makeMGridGen makeVTK.example
BUILD.md makeCmake makeMPICH minCmake
CGAL-4.9.1 makeFFTW makeMVAPICH openmpi-1.10.7
COPYING makeGcc makeOPENMPI ParaView-v5.6.0
etc makeGperftools makeOPENMPI.example README.md
fftw-3.3.7 makeHYPRE makeParaView Requirements.md
kahip-2.00 makeKAHIP makeParaView.example scotch_6.0.6
KaHIP_v2.00d makeLLVM makePETSC SOURCES.txt
makeADIOS makeMesa makeQt
OpenFOAMのビルド方法はOpenFOAM® Installation From Source,OpenFOAM® Build Guideに詳しく掲載されていますが,展開したOpenFOAM-v1906
及びThirdParty-v1906
にあるREADME.md
,BuildIssues.txt,
及びBUILD.md
も熟読し,SOURCES.TXT
もチェックします.
最小限のシステム要件
公式サイトで指定されている要件は以下のとおりです.
- gcc: 4.8.5
- cmake: 3.3 (ParaViewとCGALのビルドに必要)
- boost: 1.48 (CGALのビルドに必要)
- Qt: 4.8 (ParaViewのビルドに必要),ParaView 5.4以上を使うためには Qt 5.xが必要.
QtのバージョンはCentOSに元々入っているものはバージョンが古く,4.8以上が必要とされます.
サードパーティパッケージに必要なソースのダウンロード・展開
上記のThirdPart-v1906
以下で必要となるコンパイラ・ライブラリは以下のとおりです
(BUILD.md
にダウンロード先の記載があります).
- gcc-4.8.5, gmp-6.1.2, mpfr-4.0.1, mpc-1.1.0, openmpi-1.10.7, scotch_6.0.6, boost_1_64_0, CGAL-4.9.1, cmake-3.6.0, qt-5.6.3, fftw-3.3.7, libccmio-2.6.1
コンパイラはGCC以外のintelコンパイラなどでも可能です.GCCのバージョンは4.8.5より新しいものでも大丈夫ですが,後で出てくる設定を合わせて変更する必要があります.
GCC
$ cd ThirdParty-v1806
$ 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.2.tar.bz2
$ tar jxvf gmp-6.1.2.tar.bz2
$ wget ftp://ftp.gnu.org/gnu/mpfr/mpfr-4.0.1.tar.bz2
$ tar jxvf mpfr-4.0.1.tar.bz2
$ wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz
$ tar zxvf mpc-1.1.0.tar.gz
OpenMPI
すでにサードパーティディクトリにあります.
Scotch
すでにサードパーティディクトリにあります.
Boost
すでにサードパーティディクトリにあります.
CGAL
すでにサードパーティディクトリにあります.
Cmake
$ wget http://www.cmake.org/files/v3.6/cmake-3.6.0.tar.gz
$ tar zxvf cmake-3.6.0.tar.gz
Qt (qmake)
BUILD.md
に記載のダウンロード先は利用できないので注意が必要です.
$ wget https://download.qt.io/archive/qt/5.6/5.6.3/single/qt-everywhere-opensource-src-5.6.3.tar.xz
$ tar xvf qt-everywhere-opensource-src-5.6.3.tar.xz
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本体の環境設定を,vi
やemacs
などの適当なエディタで編集します.シェルはbash
利用で説明します.
$ vi ../OpenFOAM-v1906/etc/bashrc
修正箇所
# [projectDir] - directory containing this OpenFOAM version.
# \- When this file is located as $WM_PROJECT_DIR/etc/bashrc, the next lines
# should work when sourced by BASH or ZSH shells. If this however fails,
# set one of the fallback values to an appropriate path.
#
# This can be removed if an absolute path is provided for WM_PROJECT_DIR
# later on in this file
# --
projectDir="${BASH_SOURCE:-${ZSH_NAME:+$0}}";
[ -n "$projectDir" ] && projectDir="$(\cd $(dirname $projectDir)/.. && \pwd -L)" ||\
#projectDir="$HOME/OpenFOAM/OpenFOAM-$WM_PROJECT_VERSION"
projectDir="/opt/OpenFOAM/OpenFOAM-$WM_PROJECT_VERSION"
# projectDir="/usr/local/OpenFOAM/OpenFOAM-$WM_PROJECT_VERSION"
# END OF (NORMAL) USER EDITABLE PART
# [WM_COMPILER_TYPE] - Compiler location:
# = system | ThirdParty
export WM_COMPILER_TYPE=ThirdParty
# [WM_MPLIB] - MPI implementation:
# = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPI | MPICH | MPICH-GM |
# HPMPI | CRAY-MPICH | FJMPI | QSMPI | SGIMPI | INTELMPI | USERMPI
# Also possible to use INTELMPI-xyz etc and define your own wmake rule
export WM_MPLIB=OPENMPI
メッシュのラベルサイズを32ビットから64ビットにしたい場合は以下のように変更してください.
# [WM_LABEL_SIZE] - Label size in bits:
# = 32 | 64
export WM_LABEL_SIZE=64
コンパイラ・GNUライブラリの指定に関して,GNUライブラリの指定を変更します.
$ vi ../OpenFOAM-v1906/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.2
mpfr_version=mpfr-4.0.1
mpc_version=mpc-1.1.0
GCCビルドの設定
$ vi makeGcc
確認箇所
先ほど編集したconfig.sh/compiler
からコンパイラ・GNUライブラリのバージョンを参照するので,以下は確認するだけです.
[ "${WM_COMPILER#Gcc}" = "$WM_COMPILER" ] && WM_COMPILER=Gcc # Force gcc
WM_COMPILER_TYPE=ThirdParty # Ensure we get the correct settings
# Default GCC, mpfr, gmp and mpc versions from OpenFOAM etc/config.sh file:
_foamConfig compiler
gmpPACKAGE=${gmp_version:-gmp-system}
mpfrPACKAGE=${mpfr_version:-mpfr-system}
mpcPACKAGE=${mpc_version:-mpc-system}
gccPACKAGE=$gcc_version
CGALビルドの設定
CGALのビルドスクリプトを上と同様に確認します.
$ vi makeCGAL
確認箇所
# CGAL, boost and gmp/mpfr versions from OpenFOAM etc/config.sh files.
# Get compiler first and let CGAL config override GMP and MPFR
_foamConfig compiler
_foamConfig CGAL
boostPACKAGE=${boost_version:-boost-system}
gmpPACKAGE=${gmp_version:-gmp-system}
mpfrPACKAGE=${mpfr_version:-mpfr-system}
cgalPACKAGE=$cgal_version
OpenFOAM本体でのCGALの設定を確認します.
$ vi ../OpenFOAM-v1906/etc/config.sh/CGAL
確認箇所
boost_version=boost_1_64_0
cgal_version=CGAL-4.9.1
FFTWビルドの設定
FFTWのビルドスクリプトを確認します.
$ vi makeFFTW
確認箇所
# FFTW version from OpenFOAM etc/config.sh file:
_foamConfig FFTW
fftwPACKAGE=${fftw_version:-fftw-system}
OpenFOAM本体でのFFTWの設定を確認します.
$ vi ../OpenFOAM-v1906/etc/config.sh/FFTW
確認箇所
fftw_version=fftw-3.3.7
export FFTW_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$fftw_version
サードパーティのビルド
GCCのビルド
はじめにOpenFOAMの環境設定を読み込みます.
$ . /opt/OpenFOAM/OpenFOAM-v1906/etc/bashrc
このとき,下記のようなメッセージが出力されますが,GCCがビルドがまだなので当たり前のエラーであり,GCCのビルドを進めます.
===============================================================================
Warning in /opt/OpenFOAM/OpenFOAM-v1906/etc/config.sh/settings:
Cannot find 'Gcc' compiler installation
/opt/OpenFOAM/ThirdParty-v1906/platforms/linux64/gcc-4.8.5
Either install this compiler version, or use the system compiler by setting
WM_COMPILER_TYPE to 'system' in $WM_PROJECT_DIR/etc/bashrc.
===============================================================================
$ ./makeGcc
このとき,下記のようなメッセージが出てGccのコンパイルが始まりません.
GCC configuration
------------------
GCC = gcc-4.8.5
GMP = gmp-6.1.2
MPFR = mpfr-4.0.1
MPC = mpc-1.1.0
------------------
Using CC =
Using CXX =
Error: see 'makeGcc -help' for usage
The WM_ARCH_OPTION () must be 32 or 64
$WM_ARCH_OPTION
に32か64が入るはずですが,確認してみると何も設定されていないようです.
$ echo $WM_ARCH_OPTION
$WM_ARCH_OPTION
は$WM_PROJECT_DIR/etc/bashrc
で設定しても$WM_PROJECT_DIR/etc/config.sh/settings
でunset
され,64ビットの場合はうまく設定できていないようなので,$WM_PROJECT_DIR/etc/config.sh/settings
に以下のように1行追加します.
$ vi ../OpenFOAM-v1906/etc/config.sh/settings
修正箇所
# Adjust according to system and architecture
case "$WM_ARCH" in
Linux)
WM_ARCH=linux
case "$(uname -m)" in
i686)
;;
x86_64)
case "$archOption" in
32)
export WM_ARCH_OPTION=32 # Need to propagate the value
export WM_COMPILER_ARCH=64 # 64-bit compiler, 32-bit target
;;
64)
WM_ARCH=linux64
export WM_COMPILER_LIB_ARCH=64 # Target with lib64
export WM_ARCH_OPTION=64 # New
;;
*)
echo "Unknown WM_ARCH_OPTION '$archOption', should be 32|64" 1>&2
;;
esac
;;
もう一度OpenFOAMの環境設定を読み込んでGccをビルドします.
$ . /opt/OpenFOAM/OpenFOAM-v1906/etc/bashrc
$ ./makeGcc
Cmakeのビルド
もう一度OpenFOAMの環境設定を読み込んでからCmakeをビルドします.バージョンをオプションで指定する必要があります.
$ . /opt/OpenFOAM/OpenFOAM-v1906/etc/bashrc
$ ./makeCmake cmake-3.6.0
サードパーティパッケージのビルド
Gccのビルドが完了したら,残りのパッケージのビルドをAllwmake
で行います.実行する前にもう一度OpenFOAMの環境設定を読み込みます.
$ . /opt/OpenFOAM/OpenFOAM-v1906/etc/bashrc
$ ./Allwmake
以上のサードパーティのビルドが終わったら,OpenFOAM本体ビルドのための条件を満たしているかどうかを以下のコマンドでチェックします.
$ foamSystemCheck
OpenFOAM本体のビルド
再度OpenFOAMの環境設定を読み込んでからビルドします.Allwmake
スクリプトを利用しますが,-j
オプションで並列コンパイルのcpu数を指定できるので,環境に合わせて設定します.また,エイリアスコマンドfoam
を用いると,OpenFOAMのプロジェクトディレクトリ(インストールディレクトリ)$WM_PROJECT_DIR
に移動できます.
$ . /opt/OpenFOAM/OpenFOAM-v1906/etc/bashrc
$ foam
$ ./Allwmake –j4
もしエラーが出て正常終了しないときは,エラーメッセージから足りないライブラリがないかどうかなどを確認します.
OpenFOAM本体のビルド検証
OpenFOAM本体のビルドが正常終了したら,環境設定読み込みを再度行い,テストのためのプログラムを実行します.
$ . /opt/OpenFOAM/OpenFOAM-v1806/etc/bashrc
$ foamInstallationTest
ライブラリパスなどの確認結果が出力され,最後に以下のような要約が出力されればOKです.
Summary
-------------------------------------------------------------------------------
Base configuration ok.
Critical systems ok.
Done
ParaViewのビルド
Qtのビルド
makeQt
の中でバージョン・パッケージの指定の仕方を確認します.
$ cd ../ThirdParty-v1906
$ more makeQt
確認箇所
# Description
# Build script for QT (the qt-everywhere-opensource-src package)
#
# ----------------------------------------------
# NO USER-CONFIGURABLE SETTINGS WITHIN THIS FILE
#------------------------------------------------------------------------------
# Run from third-party directory only
cd ${0%/*} && wmakeCheckPwd "$WM_THIRD_PARTY_DIR" 2>/dev/null || {
echo "Error (${0##*/}) : not located in \$WM_THIRD_PARTY_DIR"
echo " Check your OpenFOAM environment and installation"
exit 1
}
. etc/tools/ThirdPartyFunctions
. etc/tools/QtFunctions
以前のOpenFOAMバージョンではmakeQt
の中でユーザーが指定することができましたが,設定をここで変えることはできません.とりあえず,makeQt
のヘルプを出してみます.
$ ./makeQt -h
usage: makeQt [OPTION] [qt-VERSION] [-- configure-options]
options:
-gcc Force use of gcc/g++
-help
* build qt-everywhere-opensource-src, version undefined
バージョンを指定して実行すればよいようなので,5.6.3をコンパイルしてみます.
$ ./makeQt 5.6.3
コンパイルに少々時間がかかり,何やら以下のようなエラーが出て失敗します.
/opt/OpenFOAM/ThirdParty-v1906/qt-everywhere-opensource-src-5.6.3/qtconnectivity/src/tools/sdpscanner/main.cpp:321:30: error: ‘htonl’ was not declared in this scope
エラーメッセージをGoogleで検索すると,stack overflow に対処法が載っているので,以下のようにソースに修正を加えます.
$ vi qt-everwhere-opensource-src-5.6.3/qtconnectivity/src/tools/sdpscanner/main.cpp
追記部分
#include <arpa/inet.h>
もう一度コンパイルしてエラーが出なければ成功です.
$ ./makeQt 5.6.3
##ParaViewのビルド
次にParaViewをビルドします.
qmake(Qt)及びCmakeのパスが設されていないのでスクリプトのオプションで指定します.また,OpenGLライブラリ2.x以上の機能を利用しない(-no-gl2
)のオプションを付けて実行します(CentOS 6のドライバーが対応していないため).
$ ./makeParaView -no-gl2 -qmake platforms/linux64Gcc/qt-5.6.3/bin -cmake platforms/linux64Gcc/cmake-3.5.2/bin
モジュールparaview
ができるのですが,以下のようにParaView単体で起動するとエラーを吐いて終了してしまいます.
$ paraview
ERROR: In /opt/OpenFOAM/ThirdParty-v1906/ParaView-v5.6.0/VTK/Rendering/OpenGL2/vtkOpenGLRenderWindow.cxx, line 749
vtkXOpenGLRenderWindow (0x386e7a0): Unable to find a valid OpenGL 3.2 or later implementation. Please update your video card driver to the latest version. If you are using Mesa please make sure you have version 11.2 or later and make sure your driver in Mesa supports OpenGL 3.2 such as llvmpipe or openswr. If you are on windows and using Microsoft remote desktop note that it only supports OpenGL 3.2 with nvidia quadro cards. You can use other remoting software such as nomachine to avoid this issue.
ERROR: In /opt/OpenFOAM/ThirdParty-v1906/ParaView-v5.6.0/VTK/Rendering/OpenGL2/vtkXOpenGLRenderWindow.cxx, line 796
vtkXOpenGLRenderWindow (0x386e7a0): failed to create offscreen window
ERROR: In /opt/OpenFOAM/ThirdParty-v1906/ParaView-v5.6.0/VTK/Rendering/OpenGL2/vtkOpenGLRenderWindow.cxx, line 736
vtkXOpenGLRenderWindow (0x386e7a0): GLEW could not be initialized.
Segmentation fault
確かに-no-gl2
のオプションを付けてビルドしたつもりなのですが,うまくいきません.BUILD.md
に,新しいParaViewでうまくいかなったら,ThirdParty-v1712に入っているParaView-5.4も試してみてね,とあったのでこちらも試してみたのですが,今のところ解決できていないので,ParaViewインストールについては深追いしないことにします.過去の経験ではParaView-5.0.1までは成功しているのですが。
ParaViewが正常にインストールできている場合は,引き続いてParaView Readerをビルドします.一度クリーンしてからビルドします.
$ cd $FOAM_UTILITIES/postProcessing/graphics/PVReaders
$ ./Allwclean
$ ./Allwmake
ここで$FOAM_UTILITIES
はOpenFOAMのユーティリティがインストールされたパスを表すOpenFOAMの環境変数です.
OpenFOAMでの前処理,計算実行,後処理の動作確認
上記のインストール作業がすべて終了したら,OpenFOAMによって流体解析の一連の流れである,前処理(メッシュ作成),計算実行,後処理(可視化)が正常にできるかどうかを,チュートリアルケースであるpitzDaily
を利用して確かめます.
$ . /opt/OpenFOAM/OpenFOAM-v1906/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を起動して可視化する(今回はParaViewがビルドできていないのでもちろんエラーになる).
ここで行った動作確認では並列計算の確認ができていません.並列計算を行うチュートリアルケースはどれも計算時間がかかるので気軽に動作確認ができませんが,比較的軽い計算としてpipeCyclic
を実行してみます(並列数はデフォルでは5).
$ run
$ cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pipeCyclic ./
$ cd pipeCyclic
$ ./Allrun
Allrun
はメッシュ生成から解析条件設定・計算実行を自動的に行うスクリプトです.pitzDaily
及びpipeCyclic
がエラーなしで計算実行できれば無事にインストール完了です.