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

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

ソースコンパイルしたParaView(OpenFOAM Third Party)をPythonで呼び出す際のTIPS

はじめに

 以下の記事ではconda-forgeのParaViewパッケージをインストールすることで、PythonでParaViewを扱う方法を紹介しました。 ただこの方法でうまく行かないマシンがありましたので、ソースコンパイルしたParaViewをPythonで呼び出す方法についても紹介したいと思います。

inabower.hateblo.jp

 以下の公式ドキュメントに従いながらThirdParty(ParaView)とOpenFOAMをインストールした場合を想定しています。 インストールと同時にラッピングされるPythonパッケージをAnacondaのPythonから呼び出します。

公式ドキュメントの流れとしては

  1. 必要なライブラリ(requirements)をインストール
  2. OpenFOAM-v???/etc/bashrcを読み込む
  3. 【ParaViewのインストール】ThirdParty-v???へ移動してmakeParaViewを実行
  4. wmRefreshで環境変数を戻す
  5. 【OpenFOAMのインストール】OpenFOAM-v???へ移動してAllwmakeを実行

となっています。後述しますが3のところで引数をつけることでPythonに対応できるようになります。

実行環境

  • Ubuntu 18.04
  • Python 2.7(Anaconda 4.5.12)
    • 2019年1月6日現在 ParaViewはPython3系に対応していません。
  • OpenFOAM v1812 (ParaView 5.6.0)

追加すべきPATHを調べる

 Python対応のParaViewのライブラリのパスは起動してPython Shellを表示させ以下のコマンドを入力することで調べることができます。

>>> import sys
>>> sys.path

すると以下のように現在環境変数として登録されているパスが表示されます。この中の1つめ(sys.path[0])がParaViewを扱う際に必要なPATHとなります。

f:id:inabower:20190105181906p:plain

ちなみに私の場合は'/home/inabower/OpenFOAM/ThirdParty-v1812/platforms/linux64Gcc/ParaView-5.6.0/lib/python2.7/site-packages'のようです。

PATHを追加する

  • .bashrcに追加する ※以下は上述の場合の例
$ echo 'export PYTHONPATH="$PYTHONPATH:/home/inabower/OpenFOAM/ThirdParty-v1812/platforms/linux64Gcc/ParaView-5.6.0/lib/python2.7/site-packages"' >> $HOME/.bashrc
  • プログラムの先頭で追加する
>>> import sys
>>> sys.path.append("/home/inabower/OpenFOAM/ThirdParty-v1812/platforms/linux64Gcc/ParaView-5.6.0/lib/python2.7/site-packages")

など色々と種類があります。(OSにも依ります) 以下の記事がとても参考になるかと思います。

note.nkmk.me

www.javadrive.jp

ParaViewがPythonに対応しているかどうかの確認

 以下の項目が選択可能かどうかで確認することができます。

  • File - Save State File - Files of type : Python state file (*.py)
  • View - Python Shell
  • Tools - Start trace

f:id:inabower:20190105181014p:plain

Python対応でインストールする方法

 Pythonを使用できるようにするためには./makeParaViewを実行する際に以下のように引数を加える必要があります。

$ ./makeParaView -python -python-lib ???/libpython2.7.so.1.0

 ???の部分には libpython2.7.so.1.0 の場所を指定します。 例として以下のような場所になるかと思います。(どちらでも大丈夫です。)

  • /usr/lib/libpython2.7.so.1.0
  • /home/inabower/Applications/Anaconda3/envs/paraview/lib/libpython2.7.so.1.0

 なお./makeParaView -helpとすると以下のような詳細がわかります。

遭遇したエラー

 OpenFOAMよりAnacondaを先にインストールしていた場合、ThirdPartyのインストール時にAnacondaとコンフリクトした(っぽい)ことがありました。

上略
[100%] Built target NonOrthogonalSource
[100%] Building CXX object Plugins/StreamLinesRepresentation/CMakeFiles/StreamLinesRepresentation.dir/moc_StreamLinesRepresentation_Plugin.cpp.o
/usr/lib/x86_64-linux-gnu/libSM.so: `uuid_generate@UUID_1.0' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libSM.so: `uuid_unparse_lower@UUID_1.0' に対する定義されていない参照です
collect2: error: ld returned 1 exit status

 $HOME/.bashrcの下記部分(Anacondaのインストール時に書き込まれた場所)を一時的にコメントアウトしてからParaViewとOpenFOAMのインストールを行うと私の場合はうまくいきました。

# added by Anaconda3 2018.12 installer
# >>> conda init >>>
# !! Contents within this block are managed by 'conda init' 
__conda_setup="$(CONDA_REPORT_ERRORS=false '/home/inabower/Applications/Anaconda3/bin/conda' shell.bash hook 2> /dev/null)"
if [ $? -eq 0 ]; then
    \eval "$__conda_setup"
else
    if [ -f "/home/inabower/Applications/Anaconda3/etc/profile.d/conda.sh" ]; then
        . "/home/inabower/Applications/Anaconda3/etc/profile.d/conda.sh"
        CONDA_CHANGEPS1=false conda activate base
    else
         \export PATH="/home/inabower/Applications/Anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda init <<<