ただし空気抵抗は無視しないものとする

流体解析の勉強の題材として日頃気になったことをまとめたり確かめたりしていく予定です。OSSしか使わないつもりです。

OpenFOAM-v1906のインストール〜ParaView5.7.0とPython3を添えて〜

はじめに

 先日OpenFOAM-v1906がリリースされました。せっかくなので最新のParaViewと一緒にインストールする方法をまとめてみました。

注意

  • この記事の内容(コマンド等)に関して一切の責任を負いかねます。
  • sudoを用いたコマンドが頻出します。入力ミス、コピペミス、私のミスなどで重大なエラーが生じる可能性がありますのでコマンド実行の際にはその意味を確かめてから実行してください。
  • インストール時の環境変数がAnacondaと競合することがあります。念の為OpenFOAMインストール時にはAnacondaは無効化するのが無難です。
  • 【未解決】本記事では以下の機能をインストールできませんでした。
    • ParaViewの-mpiオプション:7/12現在ParaViewで並列計算を有効にするとインストールできない事例を確認しています。(参考
    • PVFoamReader:ParaViewのOpenFOAMケース表示プラグインであるPVFoamReaderをインストールできませんでした。

環境

  • OS : Ubuntu 18.04 LTS(VirtualBox内)
  • OpenFOAM : v1906
  • ParaView : 5.7.0-RC1
  • Python : 3.6.8
  • インストール日 : 2019/07/11〜7/13

参考

 以下のサイトを見ながらインストールしました。困ったら全部良く読みましょう。

1. Requirements

 まずはOpenFOAMやParaViewを動かすためのライブラリなどをインストールします。(Python3も入れます)

sudo apt update && sudo apt -y upgrade
sudo apt install build-essential flex bison cmake zlib1g-dev libboost-system-dev libboost-thread-dev \
libopenmpi-dev openmpi-bin gnuplot libreadline-dev libncurses-dev libxt-dev \
qt5-default libqt5x11extras5-dev libqt5help5 qtdeclarative5-dev qttools5-dev \
libqtwebkit-dev freeglut3-dev libqt5opengl5-dev texinfo \
libscotch-dev libcgal-dev python python-dev \
libglu1-mesa-dev python3 python3-dev libglu1-mesa-dev qt4-dev-tools

仮想マシンの場合

 VirtualBoxなどの仮想マシンの場合は以下の操作が必要になるそうです。(OpenFOAM wiki

sudo apt install mesa-utils scons llvm-dev
sudo sed -i~orig -e 's/# deb-src/deb-src/' /etc/apt/sources.list   
sudo apt update
sudo apt build-dep mesa

2. OpenFOAMなどのダウンロード

 各ソースをダウンロード&解凍していきます。

# ディレクトリの作成
mkdir OpenFOAM && cd OpenFOAM
# OpenFOAM-v1906のダウンロードと解凍
wget https://sourceforge.net/projects/openfoam/files/v1906/OpenFOAM-v1906.tgz
tar -xzf OpenFOAM-v1906.tgz
# ThirdParty-v1906のダウンロードと解凍
wget https://sourceforge.net/projects/openfoam/files/v1906/ThirdParty-v1906.tgz
tar -xzf ThirdParty-v1906.tgz
# decomposeParのためのmetisがはいっていないためダウンロードと解凍
cd ThirdParty-v1906
wget http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz
tar -xzf metis-5.1.0.tar.gz

3. ParaView-5.7.0-RC1をダウンロード

 公式サイトから"ParaView-v5.7.0-RC1.tar.gz"ダウンロードします。

f:id:inabower:20190712112948p:plain

 そしてこれをさきほど作成された~/OpenFOAM/ThirdParty-v1906の中で解凍し、解凍されたディレクトリの名前をParaView-v5.7.0に変更します。

 そうするとディレクトリの構成はmetisも含めて以下のようになっているかと思います。

f:id:inabower:20190712113516p:plain

4. ParaViewのバージョンを指定するファイル

 現在ThirdParty-v1906ではデフォルトでParaView-v5.6.0をインストールする設定になっています。これを変更するにはOpenFOAM側の設定を変更する必要があります。 例えばターミナルに以下のコマンドを入力しファイルを開きます。

gedit ~/OpenFOAM/OpenFOAM-v1906/etc/config.sh/paraview

 ここで57行目のParaView_VERSION=を5.7.0に変更することでParaViewのバージョンを指定することができます。

...
#
# Note
#     When _foamAddLib is unset (eg, called from makeParaView or from foamPV):
#       - the ParaView_VERSION variable is retained.
#------------------------------------------------------------------------------
# USER EDITABLE PART: Changes made here may be lost with the next upgrade

ParaView_VERSION=5.7.0
ParaView_QT=qt-system
cmake_version=cmake-system
...

※後に出てくる./makeParaViewの際に./makeParaView 5.7.0のように引数にバージョンを記述することで同様に5.7.0をインストールすることもできます。 しかしこれだとOpenFOAM側のutilitiesであるparaFoamで呼び出すことができません。 今回はこれも踏まえてOpenFOAM側のconfigファイルを変更しました。

5. 環境変数の設定

 ターミナル(bash)起動時にOpenFOAM1906の環境変数を読み込むためにbashrcに追記を行います。

echo "alias of1906='source \$HOME/OpenFOAM/OpenFOAM-v1906/etc/bashrc'" >> $HOME/.bashrc
echo "of1906" >> $HOME/.bashrc
. $HOME/.bashrc
No completion added for /home/inabower/OpenFOAM/OpenFOAM-v1906/platforms/linux64GccDPInt32Opt/bin
... incorrect platform, or not yet compiled?



 上のようなメッセージが出たら準備完了です。更に確認したい場合にはgedit $HOME/.bashrcなどのコマンドで.bashrcファイルを開いて最後の行に

alias of1906='source $HOME/OpenFOAM/OpenFOAM-v1906/etc/bashrc'
of1906

が追加されていればOKです。aliasによりof1906と入力すればOpenFOAM-v1906の環境をセットできるようになります。そのためv1906をデフォルトで使用しないのであればof1906での行は削除して構いません。 その場合はターミナルを開くたびにof1906入力することになります。

ちょっといじる

 私の環境だとこのまま./makeParaViewすると2時間後くらいに以下のエラーが出てしまいコンパイルができませんでした。

CMake Error at /home/inabower/OpenFOAM/ThirdParty-v1906/ParaView-v5.7.0/CMake/ParaViewClient.cmake:522 (message):
  Failed to convert servermanager XML: xmlpatterns: could not exec
  '/usr/lib/qt5/bin/xmlpatterns': No such file or directory

make[2]: *** [Plugins/AcceleratedAlgorithms/paraview_help/AcceleratedAlgorithms_doc.xslt] Error 1
make[1]: *** [Plugins/AcceleratedAlgorithms/CMakeFiles/AcceleratedAlgorithms_doc.dir/all] Error 2
make: *** [all] Error 2
Command exited with non-zero status 2

苦肉の策ですが、以下のようにqt4から持ってくるとエラーは解消しました。

sudo cp /usr/lib/x86_64-linux-gnu/qt4/bin/xmlpatterns /usr/lib/qt5/bin/

 ※ もし/usr/lib/qt5/bin/xmlpatternsが既にあるようでしたらこの操作は問題ありません。

  •  こことかを見ながらqt5のxmlpatternsをaptからインストールしようと試みたのですが叶いませんでした。もし方法をご存じの方がいましたら教えてください。

6. ParaViewのコンパイル

 新しいターミナルを開き、以下のコマンドでParaViewをインストールしていきます。-python -python-lib -python-includeではPython3のライブラリの場所を指定します。 「ファイルが見つからない」と言われた場合にはfind /usr/lib -name "libpython3*"などのコマンドで探してみましょう。

cd $WM_THIRD_PARTY_DIR
./makeParaView -python -python-lib /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 -python-include /usr/include/python3.6m/ > log.makeParaView

 終了まで数時間かかります。なお新しいターミナルで以下のコマンドを入力することでインストールの進行状況を見ることができます。

tail -f $WM_THIRD_PARTY_DIR/log.makeParaView
...
-- Installing: /home/inabower/OpenFOAM/ThirdParty-v1906/platforms/linux64Gcc/ParaView-5.7.0/lib/python3.6/site-packages/paraview/vtk.py

====
Installation complete for paraview-5.7.0 with qt-5.9.5
    ParaView_DIR=/home/inabower/OpenFOAM/ThirdParty-v1906/platforms/linux64Gcc/ParaView-5.7.0

You may need to update the OpenFOAM environment by running:
    wmRefresh
====

Done



というようなメッセージができたらインストール成功です。

7. OpenFOAMのコンパイル

 いよいよOpenFOAMをコンパイルしていきます。

foam
./Allwmake -j 4

4はコンパイルの並列数です。各自のCPUの数に合わせて数字を入れてください。

2019-07-13 12:32:07 +0900
========================================
  Finished compile of cfMesh with OpenFOAM-v1906
  Gcc system compiler
  linux64GccDPInt32Opt, with SYSTEMOPENMPI openmpi-system


2019-07-13 12:32:07 +0900
========================================
  OpenFOAM-v1906
  Gcc system compiler
  linux64GccDPInt32Opt, with SYSTEMOPENMPI openmpi-system

  api   = 1906
  patch = 0
  bin   = 285 entries
  lib   = 133 entries

========================================

こんなのが表示されたら完了です。(途中でインストールを中断したりしたので数などが異なる可能性があります。)

8. インストールの確認

 ちゃんとインストールされているかどうかを確認していきます。

軽いソルバー(potentialFoam) + paraFoam

 今回インストールしたものの中で、まず軽いソルバーの実行とその結果の表示ができるかを確認します。 ソルバーはpotentialFoamで試してみて、それをparaFoamで表示します。 paraFoamはParaViewがインストールされた状態でOpenFOAMをインストールすると搭載される機能で、OpenFOAMのケースをコマンド一つで開くことができるようになります。

mkdir $WM_PROJECT_USER_DIR && cd $WM_PROJECT_USER_DIR
cp -r $FOAM_TUTORIALS/basic/potentialFoam/pitzDaily/ ./
cd pitzDaily
./Allrun
paraFoam
Cannot use ParaView reader module library (PVFoamReader) - not built?
Consider building the reader module
    cd $WM_PROJECT_DIR/applications/utilities/postProcessing/graphics/PVReaders
    ./Allwclean
    ./Allwmake

Continuing with builtin reader:  paraFoam -vtk



f:id:inabower:20190714034747p:plain ※Skip Zero Timeの表示を外すこと

 エラーメッセージが表示されましたが、結果を表示することができました。

 このエラーメッセージは「PVFoamReaderはインストールされませんでしたがvtkOpenFOAMReaderを使ってケースを表示しました」みたいな意味です。 PVFoamReaderはOpenFOAMで用意されたPluginで、vtkOpenFOAMReaderは元々ParaViewに備わっているVTK由来の機能です。 主な違いはSetを読み込めるかどうかかだったと思います。

 なお今現在は表示されているエラーメッセージ通りにコマンドを入力してもPVFoamReaderのコンパイルは成功しません。(Qtの問題?)

SCOTCH(decomposePar)

 次にThirdPartyとしてインストールされている並列計算のための分割手法であるSCOTCHの確認を行います。 以下のようにchtMultiRegionFoamのチュートリアルをコピーしてきて実行するとデフォルトでは並列数4で計算が行われます。 その際にdecomposeParではSCOTCHを用いて分割が行われます。

cd $WM_PROJECT_USER_DIR
cp -r $FOAM_TUTORIALS/heatTransfer/chtMultiRegionFoam/multiRegionHeater/ ./
./Allrun
paraFoam -builtin

f:id:inabower:20190714040504p:plain

 ちゃんと計算が行われていたらOKです。

Python3

 最後にPython3の機能が搭載されているかをチェックします。

 先程開いたParaViewのメニューバーでViewPython Shellをチェックすると下にコンソールが現れます。 ここをクリックすると以下のように環境が表示されますので、Python3環境であることが確認できます。

>>>
Python 3.6.8 (default, Jan 14 2019, 11:02:34) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
>>> from paraview.simple import *

 試しに以下のようなPython3のコマンドを実行してみても良いかと思います。

f:id:inabower:20190714041328p:plain

最後に

 お疲れ様でした!