2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

オープンCAEAdvent Calendar 2022

Day 4

CentOSにOpenFOAM 10をインストール

Posted at

この記事は流体解析のオープンソースソフトウェアである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以下にインストールします.

インストール手順の概要

  1. 管理者権限で必要なrpmパッケージをダウンロード・インストールする.
  2. OpenFOAM本体,サードパーティのビルドに必要となるソースパッケージをダウンロードし,展開する.
  3. 環境設定ファイル・ビルドスクリプトを編集する.
  4. サードパーティ(ツール,ライブラリ)のビルドする.
  5. OpenFOAM本体をビルドする.
  6. ビルドしたOpenFOAM本体(ソルバー)の動作検証を行う.
  7. 可視化に用いるParaView及び可視化用データリーダーのビルドする.
  8. 流体解析の一連の流れである,前処理(メッシュ生成),計算実行, 後処理(可視化)ができることを確認する.

手順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本体の環境設定を,viemacsなどの適当なエディタで編集します.シェルは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がエラーなしで計算実行できれば無事にインストール完了です.

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?