DALAB情報発信用ブログ:OpenCAE+GPGPU+Peridynamics編

DALABで行っている研究活動の中で、OpenCAEやGPGPUや破壊解析の取り組みについてまとめてゆきます。

DEXCS-OpenFOAMの有効活用:LIGGGHTSによるDEM解析(2)

2011年11月17日 22時06分08秒 | DEXCS情報
コンパイルにより作られたliggghtsを用いてDEM解析のサンプルを実行し、結果の可視化までを説明します。

■サンプルケースの用意
ダウンロードしたLIGGGHTSのパッケージには、/opt/LIGGGHTS/liggghts/examples/LIGGGHTSにたくさんのサンプルが用意されています。
コンベア上に粒子が移動する例題conveyorを試してみます。

ホームディレクトリに作業用ディレクトリを用意します。
$ mkdir ~/DEMwork
上記のサンプルをコピーします。
$ cp -r /opt/LIGGGHTS/liggghts/examples/LIGGGHTS/conveyor ~/DEMwork

■サンプルケースの実行
サンプルケースのディレクトリに移動します。
$ cd ~/DEMwork/conveyor
入力ファイルin.conveyorを確認したら、次のようにして単体実行できます。
$ liggghts < in.conveyor
計算結果は、postディレクトリのdump.conveyorに保存されます。
なお、実行環境が4coreCPUならば、MPIを用いて並列実行も以下のように可能です。
$ mpirun -np 4 /opt/LIGGGHTS/bin/liggghts < in.conveyor

■可視化データ変換ツールpizza.pyのインストール
このpizza.pyを用いて、liggghtsの計算結果dump.conveyorをVTKに変換して、ParaViewで可視化結果を確認します。

まずはpizza.pyをインストールします。以下のサイトよりPizza.py Toolkitにチェックを入れて、ダウンロードボタンを押して入手します。/opt/LIGGGHTSにおき、パッケージを展開します。
http://www.sandia.gov/~sjplimp/download.html
$ tar xvfz pizza.tar.gz
これでツールが/opt/LIGGGHTS/pizza-70ct11にインストールされました。
※ダウンロードした時期によってOctではなくDecになりますが、同様な手順で進めるので読み替えてください。

次にシステムのpythonを利用するために、環境に合わせてpizza.pyを変更するため、以下のディレクトリに移動します。
$ cd /opt/LIGGGHTS/pizza-7Oct11/src

pythonがインストールされている場所をwhereisで確認すると/usr/bin/pythonなので、pizza.pyの先頭を以下のようにエディタで変更します。
$ vi pizza.py
 #!/usr/bin/python -i

この場所/opt/LIGGGHTS/pizza-7Oct11/srcにコマンドパスを通しておきます。
$ vi ~/.bashrc
 export PATH=/opt/LIGGGHTS/pizza-7Oct11/src:$PATH
この.bashrcを有効にするために以下のsourceを実行します。
$ source ~/.bashrc

■pizza.pyの実行環境の追加
このpizza.pyでは解析データを可視化するために、いくつかの補足ライブラリが必要です。以下の項目をパッケージマネージャで追加します。

システム⇒システム管理⇒Synapticパッケージマネージャを起動します。各項目を検索して、適用しインストールします。
・Pmw: python-pmw, python-pmw-doc
・ImageTk: python-imaging-tk, python-imaging-tk-dbg
・OpenGL: python-opengl

ここでToglについては、liblablgl-ocaml, liblabgl-ocaml-devなどをインストールしたのですが、pythonからToglを正しく読み込めないようです。ただし今回はVTKへの変換だけを行い直接にOpenGLの可視化は行わないので、pizza.pyのパスを通した/opt/LIGGGHTS/pizza-7Oct11/srcより、gl.py,gl.pycの2つを上のディレクトリに移動しておきます。
※H231225の時点でダウンロードした場合は、pizza-8Dec11が作られますが、この場合には上記のエラーは出ないので、glの移動は不要でした。

■pizza.pyによる可視化データ作成
先に実行したサンプルconveyorのディレクトリ~/DEMwork/coveyorに移動します。
pizza.pyの動作を記述するPzzaScriptを、以下の内容を記述したファイルpizzascriptとして作成します。
$ vi pizzascript
 d=dump("post/dump.conveyor")
 v=vtk(d)
 v.many("post/dump")
 exit()

データ作成を以下の様に実行します。
$ pizza.py -f pizzascript
色々なメッセージが出力されますが、Ctrl-Dで抜けてから、サンプルの結果が保存されているpostディレクトリの中に、dump0000.vtk ... dump0199.vtkが作成されています。

ParaViewを利用して結果を確認します。
$ paraview
起動したら、ファイルメニューから上記のVTKファイルを選択して、Applyで表示して調整すると、赤い粒子が落ちてきてコンベアーの上を移動する様子が分かります。

以上で最も基本となる動作が確認できました。

DEXCS-OpenFOAMの有効活用:LIGGGHTSによるDEM解析(1)

2011年11月17日 12時13分44秒 | DEXCS情報
ここでは、DEM解析のソフトウエアの1つであるLIGGGHTSを利用する手順を説明します。OpenFOAM-2.0でもDEM解析が可能ですが、これは粒子を1種類しか指定できない(今の知識では)ので、物体の衝突などを扱うことが難しいと思うのです。

そこで、分子動力学のソフトウエアLAMMPSをベースにして、DEM解析を可能にしたLIGGGHTSを利用してみようと思います。このソフトウエアは、OpenFOAMと連携することで、CFD+DEMつまり流体中の粒子の運動を解析できるそうで、CFDEMとして公開されています。

最終的にはCFDEMを目指すので、OpenFOAMがインストールされている状態を基本とするために、DEXCS2011forOpenFOAMを用いて動作環境を構築します。これは近々公開されるDEXCSで、Ubuntu10.04+OpenFOAM2.0.xの環境となっており、同等の環境ならば同じ手順でできると思います。ここでは64bit環境で構築しています。

なおこの内容は、PENGUINITIS さんのウエブに公開されている情報を手本にして作成しています。
http://www.geocities.jp/penguinitis2002/study/LIGGGHTS/LIGGGHTS/LIGGGHTS.html

■ベースOSの準備
DEXCS2011forOpenFOAMをVMware上に構築します。たぶんDEXCS2010forOpenFOAMにOpenFOAM2.0.xを導入した状態でも同じだと思います。要は、Ubuntu10.04+OpenFOAM2.0.xを用意します。まず最初のLIGGGHTSではOpenFOAMは利用しません。最初にシステム⇒システム管理⇒アップデートマネージャでシステムを更新しておきます。

■コンパイルの準備
LIGGGHTSをコンパイルするには、FFTWとMPIが必要になります。FFTWは、C言語で作られた高速フーリエ変換のツール集で、MPIは並列処理を実現する基盤システムです。ここで用いているDEXCS2011での状況で確認してみます。

システム⇒システム管理⇒Synapticパッケージマネージャを起動して、再読込でパッケージ情報を最新にしておきます。検索からfftwを探してみます。色々と見つかりますが、バージョン2のfftw-dev, fftw-docs, fftw2の3つを選択してインストール指定します。適用を押してダウンロードとインストールを進めます。

次にOpenMPIを準備します。パッケージマネージャでopenmpiを検索して、すでにインストールされているlibopenmpi-dev,libopenmpi1.3,openmpi-commonに加えて、バージョン1.4.1-2に関する4つlibopenmpi-dbg,openmpi-bin,openmpi-checkpoint,openmpi-docをインストール指定します。適用を押してダウンロードとインストールを進めます。環境によっては既にインストールされているパッケージもあります。

LIGGGHTSのコンパイルでMPIのインストール位置を設定するので調べておきます。findでopenmpiを検索すると、/usr/lib/openmpiの中にincludeとlibがありました。

コンパイルは/optにLIGGGHTSを作って行うことにするので、以下の準備をします。
$ sudo mkdir /opt/LIGGGHTS
$ sudo chmod 777 /opt/LIGGGHTS

■LIGGGHTSの入手
gitで最新版のソフトウエアを入手します。/opt/LIGGGHTSの中で、以下のコマンドでダウンロードします。
$ git clone git://cfdem.git.sourceforge.net/gitroot/cfdem/liggghts
しばらく待つと、/opt/LIGGGHTSの中にliggghtsディレクトリができる。

MakeFileが多数用意されているディレクトリに移る。
$ cd liggghts/src/MAKE

■Makefileの修正
最も状況に近いMakefile.linuxを修正して使うのでバックアップを取る。
$ cp Makefile.linux Makefile.linux.org

エディタviなどでMakefile.linuxを状況に合わせて修正する。
$ vi Makefile.linux

変更点は以下の4つ
・コンパイラはgccとする
 #CC = icc
 CC = gcc
・リンカーはgccとする
 #LINK = icc
 LINK = gcc
・MPIのincludeの設定
 #MPI_INC = -DMPICH_IGNORE_CXX_SEEK
 MPI_INC = -DMPICH_IGNORE_CXX_SEEK -I/usr/lib/openmpi/include
・MPIのlibの設定
 #MPI_LIB = -lmpich -lpthread
 MPI_LIB = -L/usr/lib -lmpi -L/usr/lib/openmpi/lib -lmpi_cxx -lpthread

■LIGGGHTSのコンパイルとインストール
先のMakefileを修正した場所の上(/opt/LIGGGHTS/liggghts/src)に移動し、linuxをターゲットにMakeを実行する。
$ cd ..
$ make linux

コンパイルに成功すると/opt/LIGGGHTS/liggghts/srcに実行形式lmp_linuxが作られ、sizeで状態が表示される。
次にインストール用のディレクトリを作り、上記の実行形式をliggghtsとしてコピーしてこれを利用する。
$ mkdir -p /opt/LIGGGHTS/bin
$ cp lmp_linux /opt/LIGGGHTS/bin/liggghts

■コマンドパスを通しておく
まずliggghtsのパスを設定する。~/.bashrcの最後に以下を追加する。
export PATH=/opt/LIGGGHTS/bin:$PATH
次に結果の可視化で用いるparaviewのパスを同様な方法で設定する。
export PATH=/opt/OpenFOAM/ThirdParty-2.0.x/build/linux64Gcc/paraview-3.10.1/bin:$PATH

設定を有効にするために、ログアウトして再ログインしておきます。