preCICE のセットアップ2019年1月26日 | |
はじめにプログラム同士の連成を行うツール preCICE のセットアップを行う。ここでは こちら の OpenFOAM/CalculiX による流体-構造連成計算を目指してセットアップを行う。 環境Ubuntu 16.04 LTS, preCICE 1.3.0, CalculiX 2.13, OpenFOAM v1812 OpenFOAM については別途セットアップしてあるものとする。 preCICE のコンパイル準備が必要なものは、preCICE、連成させる 2 つのソルバーとそれぞれのアダプタ、そして依存ライブラリである。コンパイル作業はここでは $HOME/build で行う。バイナリのインストール先は $HOME/opt とする。preCICE のみそのまま $HOME/opt 上でコンパイルしている。 Ubuntu 用の手順は こちら に従う。よく読まずに こちら の指示通りにやるとうまくいかない (ステップ 1 にちゃんと書いてはあるが)。 必要なパッケージのインストールpreCICE のコンパイルには SCons を用いる。また、PETSc などいくつか必要なライブラリがある。 $ sudo apt-get update $ sudo apt-get install scons libeigen3-dev libxml2-dev petsc-dev パスの設定 (指示とちょっと変えている)。 ~/.bashrc export PETSC_DIR=/usr/lib/petscdir/3.6.2/x86_64-linux-gnu-real 読み込み。 $ . ~/.bashrc BoostpreCICE が比較的最近の Boost を要求してくるので、コンパイルする。こちら からソースを入手。 $ tar xvzf boost_1_69_0.tar.gz $ cd boost_1_69_0 $ ./bootstrap.sh --with-libraries=log,thread,system,filesystem,program_options,test --prefix=/home/xxxx/opt/boost_1_69_0 $ ./b2 install ユーザー名 "xxxx" として $HOME/opt 以下にインストールしている。指示ではシステム上にインストールするようになっているが、パスを設定してやればその必要はない。ちなみに、何も考えずに Boost 本家の指示に従ってコンパイルすると、preCICE のコンパイルがすんなり行かない上、計算時に preCICE の内部の Boost のロギング機能の呼び出し時に stdc++ で落ちる。 パスの設定。 ~/.bashrc export BOOST_ROOT=~/opt/boost_1_69_0 export CPLUS_INCLUDE_PATH=$BOOST_ROOT/include:$CPLUS_INCLUDE_PATH export LIBRARY_PATH=~/opt/boost_1_69_0/lib:$LIBRARY_PATH export LD_LIBRARY_PATH=~/opt/boost_1_69_0/lib:$LD_LIBRARY_PATH 読み込み。 $ . ~/.bashrc preCICEpreCICE をコンパイル。 $ wget https://github.com/precice/precice/archive/v1.3.0.tar.gz $ tar xvzf v1.3.0.tar.gz $ cd precice-1.3.0 $ scons petsc=yes python=no -j 4 solib symlink $HOME/opt 以下で実施している。何も考えずに本家の一般的な指示に従うとうまくいかないかもしれない。Ubuntu 用の指示では上記になっている。Boost で落ちるのと関係があるのかもしれない。 パスの設定。 ~/.bashrc export PRECICE_ROOT=~/opt/precice-1.3.0 export LD_LIBRARY_PATH=$PRECICE_ROOT/build/last:$LD_LIBRARY_PATH 読み込み。 $ . ~/.bashrc CalculiX のコンパイルCalculiX を使うので、コンパイルする。バージョンは本家の指示に合わせている。 CGX$ wget http://www.dhondt.de/cgx_2.13.all.tar.bz2 $ tar xvjf cgx_2.13.all.tar.bz2 $ cd CalculiX/cgx_2.13/src $ make バイナリを好きなところに置く。 $ mkdir ~/opt/CalculiX $ cp cgx ~/opt/CalculiX/ パスを設定。 ~/.bashrc export PATH=~/opt/CalculiX:$PATH CCXここ の指示に従う。 SPOOLES注意: パッケージをそのまま展開すると大変なことになる (1回やらかした) ので、ディレクトリを作ってその中で展開する。 $ mkdir SPOOLES.2.2 $ cd SPOOLES.2.2 $ wget http://www.netlib.org/linalg/spooles/spooles.2.2.tgz $ tar xvzf spooles.2.2.tgz Make.inc の編集。 14 CC = gcc 15 # CC = /usr/lang-4.0/bin/cc コンパイル。 $ make lib ARPACK$ wget https://www.caam.rice.edu/software/ARPACK/SRC/arpack96.tar.gz $ wget https://www.caam.rice.edu/software/ARPACK/SRC/patch.tar.gz $ tar xvzf arpack96.tar.gz $ tar xvzf patch.tar.gz $ cd ARPACK ARmake.inc の編集。 28 #home = $(HOME)/ARPACK 29 home = $(HOME)/build/ARPACK 116 #MAKE = /bin/make 117 MAKE = make 105 #FC = f77 106 FC = gfortran 107 #FFLAGS = -O -cg89 36 #PLAT = SUN4 37 PLAT = INTEL UTIL/second.f の編集。 24 * EXTERNAL ETIME コンパイル。 $ make lib CCX$ wget http://www.dhondt.de/ccx_2.13.src.tar.bz2 $ tar xvjf ccx_2.13.src.tar.bz2 $ cd CalculiX/ccx_2.13/src $ make バイナリをとりあえず CGX と同じところに置く。実は、これは連成計算には使わない。 $ cp ccx_2.13 ~/opt/CalculiX/ccx YAMLYAML はアダプタが使うらしいが、OpenFOAM のアダプタと CalculiX のアダプタがそれぞれ共有ライブラリと静的ライブラリを要求するので、2 回コンパイルした。 $ wget https://github.com/jbeder/yaml-cpp/archive/yaml-cpp-0.6.2.zip $ unzip yaml-cpp-0.6.2.zip $ cd yaml-cpp-yaml-cpp-0.6.2 コンパイル。 $ cd .. $ mkdir build $ cd build $ cmake .. $ make もう一度別にコンパイル。 $ mkdir build2 $ cd build2 $ cmake -DBUILD_SHARED_LIBS=ON .. $ make パスの設定。 ~/.bashrc export CPLUS_INCLUDE_PATH=~/build/yaml-cpp-yaml-cpp-0.6.2/include:$CPLUS_INCLUDE_PATH export LD_LIBRARY_PATH=~/build/yaml-cpp-yaml-cpp-0.6.2/build2:$LD_LIBRARY_PATH ※今考えると共有ライブラリは ~/opt のほうに入れるべきかも。まあ好みの問題。 アダプタのコンパイルOpenFOAM adapterこちら の指示に従う。 $ git clone https://github.com/precice/openfoam-adapter.git $ cd openfoam-adapter OpenFOAM の設定を有効にして、コンパイル。 $ ./Allwmake なんか言ってくる。 Building completed with linking problems: there were undefined symbols. See wmake.log and ldd.log for more. ldd.log undefined symbol: fftw_taint (/usr/lib/x86_64-linux-gnu/libfftw3_mpi.so.3) undefined symbol: fftw_join_taint (/usr/lib/x86_64-linux-gnu/libfftw3_mpi.so.3) libfftw3_mpi.so.3 が OpenFOAM の中の libfftw3.so.3 を参照しているようなので、パスを設定。 ~/.bashrc export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH "/usr/lib/x86_64-linux-gnu" 自体は検索パスに含まれているはずなので、上記は OpenFOAM のパスより前に持って行く設定になる。 もう一度。 $ ./Allwmake ... Building completed successfully! CalculiX adapterこちら の指示に従う。 $ git clone https://github.com/precice/calculix-adapter.git $ cd calculix-adapter Makefile を編集。ここでは preCICE 以外は $HOME/build でコンパイルしている。
2 CCX = $(HOME)/build/CalculiX/ccx_2.13/src 3 SPOOLES = $(HOME)/build/SPOOLES.2.2 4 ARPACK = $(HOME)/build/ARPACK 5 PRECICE_ROOT = $(HOME)/opt/precice-1.3.0 6 YAML = $(HOME)/build/yaml-cpp-yaml-cpp-0.6.2 コンパイル。 $ make bin/ccx_preCICE ができれば OK。バイナリをパスの通ったところに置く。 $ cp bin/ccx_preCICE ~/opt/CalculiX 実行チュートリアルのダウンロード。 $ git clone https://github.com/precice/tutorials.git frap_perp の例を実行。OpenFOAM の設定を有効にして実行する。 $ cp -r tutorials/FSI/flap_perp/OpenFOAM-CalculiX/ flap_perp $ cd flap_perp $ ./Allrun 別の端末でログをチェック。 $ tail -f Fluid.log 注意: 実行時にメッセージが出るように、Ctrl-C するとバックグラウンドで計算が継続するので、計算を止めたい場合は単に c と打つ。 うまくいっていたら、ParaView で結果を見る。 $ paraview --data=Fluid/Fluid.foam ![]() cylinderFlap の実行。 $ cp -r tutorials/FSI/cylinderFlap/OpenFOAM-CalculiX cylinderFlap $ cd cylinderFlap $ ./Allrun 変なデータが出ている?ので整理して結果を見る。 $ cd Fluid $ mkdir backup $ mv *.?99* backup $ mv 9.89* 9.99* backup $ paraview --data=Fluid.foam ![]() | |
PENGUINITIS |