Jet Framework のコンパイル

2019年1月4日

はじめに

Jet Framework のコンパイルについて。

環境

Ubuntu 16.04 LTS

Jet Framework のコンパイル

ダウンロード。

$ git clone https://github.com/doyubkim/fluid-engine-dev.git --recursive
$ cd fluid-engine-dev

Python API のインストール。

$ pip install -U .
$ python src/examples/python_examples/smoke_example01.py

C++ API のコンパイル。

$ mkdir build && cd build && cmake .. && make

サンプルの実行。ffmpeg をインストールしておく。

$ sudo apt-get install ffmpeg

実行。

$ cd bin
$ ./manual_tests --gtest_filter="ApicSolver2Tests.DamBreaking"
$ python ../../scripts/render_manual_tests_output.py
$ totem manual_tests_output/ApicSolver2/DamBreaking/data.\#point2.mp4

Mitsuba のコンパイル

Jet Framework のデモMitsuba でレンダリングされている。

パッケージをダウンロードして展開。

$ wget https://www.mitsuba-renderer.org/repos/mitsuba/archive/tip.zip
$ unzip tip.zip

必要なパッケージをインストール。

$ sudo apt-get install scons qt4-dev-tools libboost-all-dev libglewmx-dev

libpcrecpp0 というのが必要だが、Ubuntu 16.04 LTS では存在しないので、古いパッケージを こちら からダウンロードしてインストールする。

$ sudo apt-get install ./libpcrecpp0_8.31-2ubuntu2.3_amd64.deb

コンパイル。

$ cd mitsuba-af602c6fd98a/
$ cp build/config-linux-gcc.py config.py
$ scons -j 6
cons: Reading SConscript files ...
Using configuation file "/home/cfd/work2/fluid/mitsuba-af602c6fd98a/config.py"
Checking for Qt 4.x... yes
Checking for g++ ...yes
Checking for C header file png.h... no
libpng is missing (install libpng12-dev for PNG I/O support)
Checking for C header file jpeglib.h... yes
Checking for C++ header file ImfRgba.h... no
OpenEXR is missing (install libopenexr-dev for OpenEXR I/O support)
Checking for C++ header file xercesc/dom/DOMLSParser.hpp... no
Xerces-C++ 3.x must be installed (install libxerces-c-dev)!

いくつか警告やエラーが出るので、パッケージを追加インストール。

$ sudo apt-get install libpng12-dev libopenexr-dev libxerces-c-dev libeigen3-dev libfftw3-dev

あらためてコンパイル。

$ scons -j 6
...
In file included from src/bsdfs/irawan.cpp:33:0:
src/bsdfs/irawan.h:38:67: fatal error: boost/spirit/home/phoenix/bind/bind_member_variable.hpp: そのようなファイルやディレクトリはありません
compilation terminated.
scons: *** [build/release/bsdfs/irawan.os] Error 1

コードを修正。

src/bsdfs/irawan.h

 33 //#if BOOST_VERSION >= 106000
 34 #if BOOST_VERSION >= 105800

再度コンパイル。

src/integrators/misc/motion.cpp:471:7:   required from here
/usr/include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h:88:102: error: no match for ‘operator*=’ (operand types are ‘DScalar1<float, Eigen::Matrix<float, 1, 7> >’ and ‘const DScalar1<float, Eigen::Matrix<float, 1, 7> >’)
 _DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(DstScalar& a, const SrcScalar& b) const { a *= b; }
                                                                                               ^
In file included from src/integrators/misc/motion.cpp:21:0:
include/mitsuba/core/autodiff.h:252:19: note: candidate: DScalar1<_Scalar, _Gradient>& DScalar1<_Scalar, _Gradient>::operator*=(const Scalar&) [with _Scalar = float; _Gradient = Eigen::Matrix<float, 1, 7>; DScalar1<_Scalar, _Gradient>::Scalar = float]
  inline DScalar1& operator*=(const Scalar &v) {
                   ^
include/mitsuba/core/autodiff.h:252:19: note:   no known conversion for argument 1 from ‘const DScalar1<float, Eigen::Matrix<float, 1, 7> >’ to ‘const Scalar& {aka const float&}’

コードを追加 (以下の 258-262 行)。

include/mitsuba/core/autodiff.h

252     inline DScalar1& operator*=(const Scalar &v) {
253         value *= v;
254         grad *= v;
255         return *this;
256     }
257
258     inline DScalar1& operator*=(const DScalar1 &v) {
259         grad = v.grad * value + grad * v.value;
260         value *= v.value;
261         return *this;
262     }

コンパイルされたものは dist の中にあるので、適当なところにインストール。

$ cp -r dist ~/opt/mitsuba-0.5.0

パスを通す。

~/.bashrc

export PATH=~/opt/mitsuba-0.5.0:$PATH
export LD_LIBRARY_PATH=~/opt/mitsuba-0.5.0:$LD_LIBRARY_PATH

参考

デモの実行

$ git clone https://github.com/doyubkim/fluid-engine-dev-demo.git --recursive
$ cd fluid-engine-dev-demo
$ mitsuba dam_breaking.xml