この記事は流体解析のオープンソースソフトウェアであるOpenFOAMのバージョン10を,CentOS 7にインストールした際の手順を備忘録としてまとめたものです.
OpenFOAMのダウンロード
OpenFOAMのバイナリパッケージ及びソースコードは以下のサイトから入手できます.
1つめのサイトはESIグループによるもので,4桁のバージョン名(yymm)が付いたものが入手できます.一方,2つめのサイトはOpenFOAM Foundationによるものであり,今回インストールするバージョン10はこちらのサイトから入手できます.
インストールの種類
OpenFOAM Foundationのサイトによれば,以下の方法でインストールできます.
- Windows 10: WSLを使ってUbuntuパッケージ上でインストール
- Mac OS: Dockerを使ってインストール
- Ubuntu: Ubuntu 18.04,20.04,22.04でパッケージ管理システムでインストール
- その他Linux distribution: Dockerを使う,もしくはソースからビルドする
ソースからビルドする方法については,Ubuntu 18.04,20.04,22.04,OpenSuSE Tumbleweed, Centos 8に対してビルドできることが公式で確認されています.当方の計算機サーバはCentOS 7であるため,ソースからビルドすることを自己責任で試みます.
インストールの方針
- 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のサイトと同様にwgetでダウンロード,tarで展開します.本体ソースコードはパッチを当ててバグ修正されているものがあったので,そちらを利用します.バージョン名が'10-20220727'や'10-version-10'となっていますので,公式サイトと同様に'10'に変更します.
$ mkdir /opt/OpenFOAM
$ cd /opt/OpenFOAM
$ wget -O - http://dl.openfoam.org/source/10.20220727 | tar xvz
$ wget -O - http://dl.openfoam.org/third-party/10 | tar xvz
$ mv OpenFOAM-10-20220727 OpenFOAM-10
$ mv ThirdParty-10-version-10 ThirdParty-10
各パッケージを展開したのちのディレクトリ・ファイルの構成は以下のようになります.
OpenFOAM-10/
Allwmake README.org bin/ etc/ test/ wmake/
COPYING applications/ doc/ src/ tutorials/
ThirdParty-10/
Allclean ParaView-5.6.3.patch makeCmake makeMesa
Allwmake README.html makeGcc makeParaView
AllwmakeLibccmio README.org makeGperftools scotch_6.0.9/
COPYING etc/ makeLLVM
OpenFOAMのインストール方法はOpenFOAM Foundationに詳しく掲載されていますが,展開したOpenFOAM-10
及びThirdParty-10
にあるReadme.org
も熟読します.
サードパーティパッケージに必要なソースのダウンロード・展開
上記のThirdPart-10
以下で必要となるコンパイラ・ライブラリは以下のとおりです.
- gcc-5.5.0, gmp-5.1.2, mpfr-3.1.2, mpc-1.0.1, openmpi-2.1.1, scotch_6.0.9, boost_1_72_0, CGAL-5.0.2, Zoltan-3.90, cmake-3.9.0, qt-5.9.6, ParaView-v5.6.3
コンパイラはGCC以外のintelコンパイラなどでも可能です.GCCのバージョンはREADME
に書いてある最小要件の4.8.5ではc++14でのコンパイル時にエラーになるため,5.x以上のGCCを入れる必要があります.QtのバージョンはCentOSに元々入っているものはバージョンが古く,ParaViewのビルドには5.x以上が必要とされます.
GCC
$ cd ThirdParty-10
$ wget https://ftp.gnu.org/gnu/gcc/gcc-5.5.0/gcc-5.5.0.tar.gz
$ tar zxvf gcc-5.5.0.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
認証の関係でHTTPSのダウンロードができない場合は,--no-check-certificate
をオプションを付けるか,.wgetrcの設定などによって回避してください.
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
Scotch
すでにThirdParty
内にあるのでダウンロード不要です.
Boost
$ wget --no-check-certificate https://sourceforge.net/projects/boost/files/boost/1.72.0/boost_1_72_0.tar.bz2
$ tar jxvf boost_1_72_0.tar.bz2
CGAL
$ wget https://github.com/CGAL/cgal/releases/download/releases%2FCGAL-5.0.2/CGAL-5.0.2.tar.xz
$ tar Jxvf CGAL-5.0.2.tar.xz
Zoltan
$ wget https://github.com/sandialabs/Zoltan/archive/refs/tags/v3.90.tar.gz
$ tar zxvf v3.90.tar.gz
Cmake
$ wget https://www.cmake.org/files/v3.9/cmake-3.9.0.tar.gz
$ tar zxvf cmake-3.9.0.tar.gz
Qt (qmake)
$ wget https://download.qt.io/archive/qt/5.9/5.9.6/single/qt-everywhere-opensource-src-5.9.6.tar.xz
$ tar Jxvf qt-everywhere-opensource-src-5.9.6.tar.xz
ParaView
$ wget http://www.paraview.org/files/v5.6/ParaView-v5.6.3.tar.gz
$ tar zxvf ParaView-v5.6.3.tar.gz
環境設定ファイル・ビルドスクリプトを編集
OpenFOAM本体の環境設定を,vi
やemacs
などの適当なエディタで編集します.シェルはbash
利用で説明します.
$ vi ../OpenFOAM-10/etc/bashrc
修正箇所
export WM_PROJECT=OpenFOAM
export WM_PROJECT_VERSION=10
################################################################################
# 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" -o "$ZSH_NAME" ] && \
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
#- Compiler:
# WM_COMPILER = Gcc | Gcc48 ... Gcc62 | Clang | Icx
export WM_COMPILER=Gcc55
unset WM_COMPILER_ARCH WM_COMPILER_LIB_ARCH
#- MPI implementation:
# WM_MPLIB = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPICH | MPICH-GM | HPMPI
# | MPI | QSMPI | SGIMPI
export WM_MPLIB=OPENMPI
ラベルサイズを32bitから64bitに変更したいときは以下のように指定します.
#- Label size:
# WM_LABEL_SIZE = 32 | 64
export WM_LABEL_SIZE=64
コンパイラ・GNUライブラリの指定は上記のパッケージをダウンロードしていれば問題ありませんが,念のため確認します.
$ more ../OpenFOAM-10/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
Gcc48)
gcc_version=gcc-4.8.5
;;
Gcc49)
gcc_version=gcc-4.9.4
;;
Gcc55)
gcc_version=gcc-5.5.0
;;
OpenFOAM本体でのCGALの設定を変更します.
vi ../OpenFOAM-10/etc/config.sh/CGAL
変更箇所
#boost_version=boost-system
#boost_version=boost-1.55.0
boost_version=boost-1.72.0
#cgal_version=cgal-system
#cgal_version=CGAL-4.10
cgal_version=CGAL-5.0.2
サードパーティのビルド
GCCのビルド
はじめにOpenFOAMの環境設定を読み込みます.
$ . /opt/OpenFOAM/OpenFOAM-10/etc/bashrc
このとき,下記のようなメッセージが出力されますが,GCCがビルドがまだなので当たり前のエラーであり,GCCのビルドを進めます.
Warning in /opt/OpenFOAM/OpenFOAM-10/etc/config.sh/settings:
Cannot find /opt/OpenFOAM/ThirdParty-10/platforms/linux64/gcc-5.5.0 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-10/etc/bashrc
$ ./Allwmake
ここで,私の環境では以下のエラーをOpenMPIのビルド中に出して失敗してしまいました.
libtool: error: require no space between '-L' and '-lrt'
make[2]: *** [mca_pml_ucx.la] エラー 1
このエラーについて検索すると,こちらの記事に解決方法が示されており,configure
するときに--without-ucx
オプションを付ければ良いとのことでした.Allwmake
スクリプトの該当する部分に1行追加します.
$ vi Allwmake
変更箇所
echo ========================================
echo Build MPI libraries if required
echo
case "$WM_MPLIB" in
OPENMPI)
if [ -r $MPI_ARCH_PATH/lib${WM_COMPILER_LIB_ARCH}/libmpi.so ]
then
~~ 省略 ~~
./configure \
--prefix=$MPI_ARCH_PATH \
--disable-orterun-prefix-by-default \
--enable-shared --disable-static \
--enable-mpi-thread-multiple \
--libdir=$MPI_ARCH_PATH/lib${WM_COMPILER_LIB_ARCH} \
--enable-mpi-fortran=none \
--disable-mpi-profile \
--without-ucx \ # 追加した
$configOpt \
;
修正したら,再度Allwmake
します.
$ ./Allwmake
OpenFOAM本体のビルド
再度OpenFOAMの環境設定を読み込んでからビルドします.Allwmake
スクリプトを利用しますが,-j
オプションで並列コンパイルのcpu数を指定できるので,環境に合わせて設定します.
$ . /opt/OpenFOAM/OpenFOAM-10/etc/bashrc
$ cd /opt/OpenFOAM/OpenFOAM-10/
$ ./Allwmake –j4
もしエラーが出て正常終了しないときは,エラーメッセージから足りないライブラリがないかどうかなどを確認します.
OpenFOAM本体のビルド検証
OpenFOAM 4.xまでは,OpenFOAM本体のビルドが正常終了したら,環境設定読み込みを再度行い,テストのためのプログラムfoamInstallationTest
を以下のように実行するのが慣例でした.しかし,OpenFOAM 5.0以降ではfoamInstallationTest
が無いので以下はスキップします.
$ . /opt/OpenFOAM/OpenFOAM-10/etc/bashrc
$ foamInstallationTest
ParaView及びParaView Readerのビルド
Qtのビルド
OpenFOAM 3.0.xまではQtをビルドするためのスクリプトmakeQt
が用意されていましたが,OpenFOAM 4.0以降では見当たりません.どうやらFoundation版のOpenFOAMではmakeQt
が廃止されたようです.
ESI版のOpenFOAMではまだmakeQt
があるので,ESI版のレポジトリThirdParty-commonにあるスクリプトを利用します.
$ cd /opt/OpenFOAM/ThirdParty-10
$ curl https://develop.openfoam.com/Development/ThirdParty-common/-/raw/main/makeQt > makeQt
$ chmod u+x makeQt
makeQt
を実行するには以下のスクリプトもThirdParty
以下に準備する必要があります.
etc/tools/QtFunctions
etc/tools/ThirdPartyFunctions
このうち,QtFunctions
はFoundation版とESI版では同じものですが,ThirdPartyFunctions
は全く内容が異なるので,Qtビルドのときだけスクリプトファイルを差し替えます.
$ mv etc/tools/ThirdPartyFunctions etc/tools/ThirdPartyFunctions.org
$ curl https://develop.openfoam.com/Development/ThirdParty-common/-/raw/main/etc/tools/ThirdPartyFunctions > etc/tools/ThirdPartyFunctions
必要なスクリプトの準備ができたら,バージョンを指定してQtをビルドします.
$ ./makeQt 5.9.6
Qtのビルドが完了したら,上述のThirdPartyFunctions
は元に戻しておきます.
$ mv etc/tools/ThirdPartyFunctions.org etc/tools/ThirdPartyFunctions
次に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-10/platforms/linux64Gcc55/qt-5.9.6/bin/"
# Set the path to cmake
CMAKE_PATH="/opt/OpenFOAM/ThirdParty-10/platforms/linux64Gcc55/cmake-3.9.0/bin/"
また,ParaViewでPythonスクリプトを使いたい場合は,makeParaView
中でwithPYTHON=true
とし,PYTHON_LIBRARY=""
に適切なパスを設定します(今回は設定しない).
ビルドするバージョンを`OpenFOAM-10/etc/config.sh/paraview'で確認します.
$ more ../OpenFOAM-10/etc/config.sh/paraview
確認箇所
#- ParaView version, automatically determine major version
#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_VERSION=5.5.0
export ParaView_VERSION=5.6.3
export ParaView_MAJOR=detect
ParaViewをビルドします.今回はParaView 5.6.3がビルドされます.
$ ./makeParaView
$ wmRefresh
モジュールparaview
ができますが,実際にParaViewを起動すると,OpenGLのシステムのバージョンとParaViewが要求するバージョンが異なるため,ParaViewが利用できませんでした.以前のOpenFOAM v2206のインストール記事ではMESAに関する環境変数の設定でOpenGLを使わないように回避できましたが,今回はうまくいきませんでした.
ParaView 5.0.1以降のビルドでは,OpenGLに関する指定ができるので,以下のようにOpenGLライブラリ2.x以上の機能を利用しないようにし,古いOpenGLライブラリでのビルドを試みてみます.
$ vi makeParaView
修正箇所(OpenGL2からOpenGLに変更)
# Selection of the rendering backend, usually associated to the OpenGL version
RENDERING_BACKEND=OpenGL
# RENDERING_BACKEND=OpenGL2
再度,ParaViewをビルドします.しかしながら,以下のエラーで失敗してしまいました.
$ ./makeParaView
There are no modules for VTK_RENDERING_BACKEND: 'OpenGL', forcing it to the
default value of 'OpenGL2'.
Call Stack (most recent call first):
VTK/CMake/vtkModuleTop.cmake:51 (include)
VTK/CMakeLists.txt:94 (include)
-- Backend OpenGL2 modules: vtkDomainsChemistryOpenGL2;vtkIOExportOpenGL2;vtkImagingOpenGL2;vtkRenderingContextOpenGL2;vtkRenderingGL2PSOpenGL2;vtkRenderingLICOpenGL2;vtkRenderingOpenGL2;vtkRenderingOpenVR;vtkRenderingVolumeOpenGL2
-- Enabling modules for OpenGL2.
CMake Error at VTK/CMake/vtkModuleTop.cmake:56 (message):
No such module "vtkRenderingVolumeOpenGL" needed by "VisItLib"
Call Stack (most recent call first):
VTK/CMake/vtkModuleTop.cmake:72 (vtk_module_check)
VTK/CMake/vtkModuleTop.cmake:79 (vtk_module_check)
VTK/CMakeLists.txt:94 (include)
OpenGL2
ではなくOpenGL
を指定してビルドしようとしていますが,対応する古いモジュールが無いらしくダメだったようです.ParaViewの古いパッケージから該当するモジュールを持ってきて試してみたりもしましたが解決せず,今回は諦めることにしました.
OpenFOAMでの前処理,計算実行,後処理の動作確認
上記のインストール作業がすべて終了したら,OpenFOAMによって流体解析の一連の流れである,前処理(メッシュ作成),計算実行,後処理(可視化)が正常にできるかどうかを,チュートリアルケースであるcavity
を利用して確かめます(ParaViewはインストールできたと仮定).
$ . /opt/OpenFOAM/OpenFOAM-10/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
がエラーなしで計算実行できれば無事にインストール完了です.