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

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

Peridigmを用いたPeridynamicsによる破壊解析:実行環境の準備(3)

2012年12月29日 06時59分50秒 | OpenCAE活用
ついに最終段階で、Peridigmの構築に進みます。これまでの準備で作業の8割は終わっているのであと少しです。

以下の、公式サイトの導入手順の解説ウエブでは、ソースパッケージをsvnを利用してダウンロードするようになっています。そこで、ウエブにある開発者の方にsvnのアカウントをメールでお願いしたところ、オープンソースとしては公開しないので、直接にソースパッケージのtar-ball (Peridigm.tar.gz)を送付いただけました。この部分は、各自で取り組んでください。
https://software.sandia.gov/trac/peridigm/wiki/User/GettingStarted

■構築の準備

このPeridigmはバージョンの更新に備えて、専用ディレクトリ~/PeridigmWorkで構築を進めます。以下の手順で準備します。ここでは、構築用ディレクトリbuildを作り、その中で作業を進めます。
$ cd ~
$ mkdir PeridigmWork
$ cd PeridigmWork
$ mv ~/Download/Peridigm.tar.gz . (最後のドット . に注意)
$ tar xvfz Peridigm.tar.gz
$ mv userTarBall/Peridigm . (最後のドット . に注意)
$ rmdir userTarBall
$ cd Peridigm
$ mkdir build
$ cd build

構築環境設定ツールcmakeの実行スクリプトcmake-peridigm.shを、PeridigmWork/Peridigm/build内に以下の内容で作る。インストール先は/opt/peridigmとする。

===== cmake-peridigm.sh =====
rm -f CMakeCache.txt
cmake \
-D CMAKE_INSTALL_PREFIX:PATH=/opt/peridigm \
-D CMAKE_BUILD_TYPE:STRING=Debug \
-D TRILINOS_DIR:PATH=/opt/trilinos/lib/cmake/Trilinos \
-D CMAKE_CXX_COMPILER:PATH=/opt/mpich/bin/mpicxx \
-D BOOST_ROOT=/opt/boost/include \
/home/dexcs/PeridigmWork/Peridigm
=============================

■構築の実行

実際にcmake-trilinos.shを実行する。処理が続きます。
$ sh ./cmake-peridigm.sh
「-- Build files have been written to: /home/dexcs/PeridigmWork/Peridigm/build」と表示されたら完了です。Makefileなど多数の構築用ファイルが生成されています。

受け取ったソースパッケージのなかで1つだけ、ここで用いたコンパイル環境ではエラーが出る部分があるので修正しておきます。検索してみると良くある対応だそうです。(作者に知らせないと…)以下の手順で、Peridigm_ZoltanSearchTree.cppを修正します。要は、#include <stdio.h>をファイルの初めの部分に追加します。
$ cd ../src/io/
$ vi Peridigm_ZoltanSearchTree.cpp

コンパイルします。処理が暫く続くので、コメントの進展の割合(%)を見ながら100%になるまで暫く待ちます。エラー表示が無く100%まで到達し、「[100%] Built target utPeridigm_ElasticPlasticMaterial」と表示されたら完成です。
$ cd ../../build
$ make
インストールします。「-- Set runtime path of "/opt/peridigm/bin/Peridigm" to "/opt/boost/lib:/opt/netcdf/lib"」と表示されたら完成です。
$ make install
以下でインストールされていることが確認できます。
$ ls -l /opt/peridigm

ここでPeridigmの補助ツールが作業ディレクトリ~/PeridigmWork/Peridigmのscriptsファルダにあるので、これらもインストールディレクトリ/opt/peridigm/binにコピーしておきます。
$ cd ~/PeridigmWork/Peridigm/scripts
$ cp * /opt/peridigm/bin

■環境の設定

以上で構築作業が完了したので、次に動作環境を設定します。要は環境変数の設定です。ホームディレクトリの.bashrcの最後に以下を追記します。設定を有効にするために、sourceコマンドを実行しておきます。
$ cd ~
$ vi .bashrc
$ source .bashrc

===== .bashrc =====
# peridigm
export PATH=/opt/peridigm/bin:/opt/trilinos/bin:/opt/mpich/bin:$PATH
export LD_LIBRARY_PATH=/opt/boost/lib:/opt/netcdf/lib:/opt/mpich/lib:$LD_LIBRARY_PATH
===================

■動作の確認

やっとPeridigmが動作するようになったので、例題を用いて動作の確認を行います。以下の手順で実行します。なお例題は、Peridigmの構築ディレクトリ~/PeridigmWorkのPeridigm/examplesにあります。peridigmによる破壊解析は非常に計算時間が長くて、例題の中でも18時間ぐらいかかるものもありました。ここでは比較的短時間で結果の出るdisk_impactを試してみます。

$ cd ~/PeridigmWork/Peridigm/examples
$ cd disk_impact

色々なファイルがありますが、現時点で理解しておきたいのは、以下の2つです。
・disk_impact.xml: Peridigmによる破壊解析の入力ファイルです。xml形式で記述されています。
・disk_impact.g: 形状表示用のGenesis形式(.g)のファイルです。ParaViewで直接表示できます。

単一コアでの実行を、以下のように試してみます。
$ Peridigm disk_impact.xml
正常に実行されると、計算の進展が以下のようなメッセージで表示されます。解析の進展が100%になるまで待ちます。
Explicit time integration [============64% Complete========]
最後にWallclock Timeとして秒表示の計算時間が表示されます。この環境では、1.8e+02なので約3分で終わりました。

解析結果は、disk_impact.eとしてExodus形式(.e)のファイルとして出力されます。結構大きくて7MBほどになりました。これをParaViewで確認します。ここで用いるParaViewは、OpenFOAM用に事前にインストールしておいたものを用いています。
$ paraview disk_impact.e

ParaViewが表示されたら、Applyを押して表示します。白い粒子の表現で、円盤と球体が表示されます。右上のアニメーション操作で、実行させると円盤に球体が衝突して跳ね返る様子が見られます。これでPeridigmの解析が成功していることが確認できます。なお仮想マシン上でのParaViewの実行のためか、OpenGLの警告が出る場合がありますが止むを得ません。

■並列処理の確認

それでは並列処理の確認を行います。まずシステムモニタを表示して、cpuのコアの動作状態が分かるようにします。この環境では、CPUが4コア利用できるのですが、これ例題では形状が2つに領域分割されているようで、disk_impact.g.2.0/1の2つが確認できます。そこで2並列で実行してみます。以下の用に行います。同じように計算の進展を示す表示が進みます。解析の進展が100%になるまで待ちます。
$ mpirun -np 2 Peridigm disk_impact.xml

最後にWallclock Timeとして秒表示の計算時間が表示されます。ここでは並列処理の複数のノードでの情報が最小・最大・平均として表示されています。今回はこの環境では、1.1e+02なので約2分弱で終わりました。並列処理の効率としては2並列で、1.6倍の高速化を実現しています。相等に並列効率が良いと思います。今後が期待できます。

なお並列処理の場合、解析結果は1つのExodus形式ファイルではなく、計算ステップ毎にファイル名にdisk_impactに、ステップ数**に対応して-s**がついて、最後に並列処理のノード番号が末尾についた多数の結果ファイル群となっています。これらを統合する必要があるので、Peridigmの補助スクリプトMergeFile.pyを以下の用に利用します。ファイルのベース名がdisk_impact-sで並列処理数2とします。
$ MergeFiles.py disk_impact-s 2

なぜか「Error when merging files! Check .log file for error details.」と表示されるので、ログファイルdisk_impact-s.logを見るのですが、それらしいエラーも無く、統合した解析結果ファイルdisk_impact-s.eは出来ていますので良とします。同じようにparaviewで可視化が可能です。
$ paraview disk_impact-s.e

■可視化の確認

動作確認の最後として、破壊する状態を見る例題としてdisk_failureを実行します。上記と同様に形状データdisk_failure.g.2.0/1と2つに分割されているので、2並列で行います。まれにMPIの起動に失敗することがあるようです。この時は再度実行してください。
$ cd ~/PeridigmWork/Peridigm/examples
$ cd disk_faiuure
$ mpirun -np 2 Peridigm disk_failure.xml

今回も2コア動作になっています。メモリの使用量は2.0GB弱程度です。計算時間は相等に長いので他の仕事をしてましょう。忘れたころに計算の進展のメッセージが表示されます。最後に100% Completeとなって解析が終了します。今回は1.4e+04秒ですので、約4時間もかかりました。結果をParaViewで確認します。今回も並列処理したので、結果ファイルを統合してから可視化します。
$ MergeFiles.py disk_failure-s 2
$ paraview disk_failure-s.e

解析結果の全ての項目を表示するために、Object InspectorのVariablesをチェックして全てを選択しておきます。これでApplyを押すと、先ほどと同じ白い点で解析結果我表示されます。
・左上のSolid ColorのメニューをDamegeに変更すると表示が青くなります。これは損傷度合いを表しており、青が損傷度0%で赤が100%になっています。これでアニメーションを実行すると損傷の様子が欲分かります。
・粒子の大きさを変更するには、Object InspectorのDisplayタブより、Point sizeを変更すると粒子が矩形で大きく表示されます。大きくすると粒子がつながって連続体の用に表示することができます。
・ファイル選択で、disk_faiulre.gを選択すると、形状をメッシュ表示で正確に確認することができます。図形状で右クリックして、Representationで色々な表現方法を選択できます。

このdisk_failureの例題を、単一コアで解析してみました。計算時間は2.3e+04なので約6.4時間となり、2コアの並列処理は1.6倍の効率化を達成したことになります。先ほどの検証と同様の結果になっています。

実は、MBP15Rでは内蔵のSSDが256MBしかないため、USB3の外付けHDDに仮想マシンを構築しています。この部分がボトルネックになっているのかも?これからは、ハードウエアに直接にUbuntuをインストールして解析環境を構築するか、MacOSXのネイティブで動作する環境構築を目指したいと思います。

以上でPeridigmの解析環境の構築は完成です。続きでは入力ファイルを分析して実践的な解析の実現や、並列処理の計算効率の検証などを進めてゆきます。

Peridigmを用いたPeridynamicsによる破壊解析:実行環境の準備(2)

2012年12月28日 10時17分51秒 | OpenCAE活用
構築環境のパッケージの導入を終えたところで、ソースパッケージのコンパイルとインストールを行います。慣れていないと不安で面倒ですが、設定変更を正確に行い所定のコマンドを実行するだけですので意外と簡単です。

構築環境はUbuntu12.04なのですが、日本語環境が構築されておりホームディレクトリに日本語のフォルダがいくつか作られています。ここではchromeウエブブラウザでパッケージをダウンロードするのですが、保存先がホームディレクトリのダウンロードフォルダになります。これだとコマンドラインから指定しにくいので、以下の手順で英語名Downloadへリンクを作っておきます。
$ cd ~
$ ln -s ダウンロード Download

以下のソースパッケージのインストールでは、ベースとなるシステム構築と同様に、全てを/optの中に配置することにします。なお/optは自由に読み書き出来るように、パーミッションが777にするため、以下のようにします。
また作業はdexcsユーザーとして行っているので、絶対パス表示すると/home/dexcs/ダウンロード(Download)がダウンロードディレクトリになります。
$ sudo chmod 777 /opt

■mpichの導入

mpichは定番の並列計算ライブラリで、様々な実装がありますが、ここではmpich2の後継であるmpich-3をインストールします。公式サイトhttp://www.mpich.org/downloads/から、ソースパッケージmpich-3.0.1 (stable release)をダウンロードします。各種のバイナリパッケージがありますが、ライブラリを参照するためソースコンパイルします。

ダウンロードディレクトリに移動して、ソースパッケージを展開し、ソースディレクトリに移動します。
$ cd ~/Download
$ tar xvfz mpich-3.0.1.tar.gz
$ cd mpich-3.0.1

インストール先を/opt/mpichとして、構築環境設定コマンドconfigureを、以下のように実行します。
$ ./configure --prefix=/opt/mpich
「Configuration completed.」と表示されたら完了です。Makefileが生成されています。

コンパイルします。結構な時間がかかるので、暫く待ちます。エラー表示が無く、「make[1]: ディレクトリ `/home/dexcs/ダウンロード/mpich-3.0.1' から出ます」と表示されたら完成です。
$ make
インストールします。「make[1]: ディレクトリ `/home/dexcs/ダウンロード/mpich-3.0.1' から出ます」と表示されたら完成です。
$ make install
以下でインストールされていることが確認できます。
$ ls -l /opt/mpich

■boostの導入

boostは定番のC++ライブラリで、後で行うPeridigmの構築などで利用しますが、バージョン1.37以上が必要です。ダウンロードサイトhttp://sourceforge.net/projects/boost/files/boost/1.52.0/から、ソースパッケージboost_1_52_0.tar.gzをダウンロードします。

ダウンロードディレクトリに移動して、ソースパッケージを展開し、ソースディレクトリに移動します。
$ cd ~/Download
$ tar xvfz boost_1_52_0.tar.gz
$ cd boost_1_52_0

インストール先を/opt/boostとして、構築環境設定コマンドbootstrap.sh、以下のように実行します。
$ ./bootstrap.sh --prefix=/opt/boost
暫く待って「Bootstrapping is done. To build, run:」に続くように表示されたら完成です。以下のコマンドでコンパイルとインストールを続けて行います。暫く待って、「...updated 10682 targets...」と表示されたら完成です。
$ ./b2 install
以下でインストールされていることが確認できます。
$ ls -l /opt/boost

■hdf5の導入

hdf5は階層型のデータ記述ライブラリで、後で行うnetcdfの構築などで利用しますが、バージョンは最新版を用いて、ダウンロードサイトhttp://www.hdfgroup.org/ftp/HDF5/current/src/から、ソースパッケージhdf5-1.8.10.tar.gzをダウンロードします。

ダウンロードディレクトリに移動して、ソースパッケージを展開し、ソースディレクトリに移動します。
$ cd ~/Download
$ tar xvfz hdf5-1.8.10.tar.gz
$ cd hdf5-1.8.10

構築環境設定ツールconfigureの実行スクリプトconfig.shを、以下の内容で作る。最初にコンパイル時のフラグを設定し、インストール先は/opt/HDF5として、並列処理も可能にする。

===== config.sh =====
CC=mpicc \
CFLAGS="-fPIC -DMPICH_IGNORE_CXX_SEEK" \
FC=mpif90 \
FCFLAGS="-fPIC -DMPICH_IGNORE_CXX_SEEK" \
CXX=mpicxx \
CXXFLAGS="-fPIC -DMPICH_IGNORE_CXX_SEEK" \
./configure \
--prefix=/opt/HDF5 \
--enable--parallel
=====================

実際にconfig.shを実行する。
$ sh ./config.sh
「Large File Support (LFS): yes」と表示されたら完了です。Makefileが生成されています。

コンパイルします。結構な時間がかかるので、暫く待ちます。エラー表示が無く、「make[1]: ディレクトリ `/home/dexcs/ダウンロード/hdf5-1.8.10/perform' から出ます」と表示されたら完成です。
$ make
インストールします。「make[1]: ディレクトリ `/home/dexcs/ダウンロード/hdf5-1.8.10/hl' から出ます」と表示されたら完成です。
$ make install
以下でインストールされていることが確認できます。
$ ls -l /opt/HDF5

■netcdfの導入

netcdfはネットワーク共通データ形式のライブラリで、後で行うtrilinosの構築などで利用しますが、バージョンは4.2以上が必要です。ダウンロードサイトhttp://www.unidata.ucar.edu/downloads/netcdf/netcdf-4_2_1_1/index.jspから、ソースパッケージnetcdf-4.2.1.1.tar.gzをダウンロードします。

ダウンロードディレクトリに移動して、ソースパッケージを展開し、ソースディレクトリに移動します。
$ cd ~/Download
$ tar xvfz netcdf-4.2.1.1.tar.gz
$ cd netcdf-4.2.1.1

構築環境設定ツールconfigureの実行スクリプトconfig.shを、以下の内容で作る。最初にコンパイル時のフラグを設定し、インストール先は/opt/netcdfとする。

===== config.sh =====
CC=mpicc \
LDFLAGS="-L/opt/HDF5/lib" \
CFLAGS="-fPIC -DMPICH_IGNORE_CXX_SEEK" \
CPPFLAGS="-I/opt/HDF5/include" \
./configure \
--prefix=/opt/netcdf
=====================

またPeridigm破壊解析において、多数の材料情報を扱えるように、netcdf.hの以下の部分を修正する。
$ vi include/netcdf.h

===== netcdf.h =====
#define NC_MAX_DIMS 65536 /* max dimensions per file */
#define NC_MAX_VARS 524288 /* max variables per file */
#define NC_MAX_VAR_DIMS 8 /* max per variable dimensions */
====================

実際にconfig.shを実行する。
$ sh ./config.sh
「config.status: executing libtool commands」と表示されたら完了です。Makefileが生成されています。

コンパイルします。少しだけ待ちます。エラー表示が無く、「make[1]: ディレクトリ `/home/dexcs/ダウンロード/netcdf-4.2.1.1' から出ます」と表示されたら完成です。
$ make
インストールします。「make[1]: ディレクトリ `/home/dexcs/ダウンロード/netcdf-4.2.1.1' から出ます」と表示されたら完成です。
$ make install
以下でインストールされていることが確認できます。
$ ls -l /opt/netcdf

■trilinosの導入

trilinosはオブジェクト指向のコンポーネントベース開発システムで、Peridigmはこれをベースに構築されています。今回入手したPeridigmでは、trilinosのバージョンは11.0以上が必要です。ダウンロードサイトhttp://trilinos.sandia.gov/download/trilinos-11.0.htmlから、ユーザー登録をしてから、ソースパッケージtrilinos-11.0.3-Source.tar.gzをダウンロードします。

このtrilinosはバージョンの更新に備えて、専用ディレクトリ~/TrilinosWorkで構築を進めます。以下の手順で準備します。
$ cd ~
$ mkdir TrilinosWork
$ cd TrilinosWork
$ mv ~/Download/trilinos-11.0.3-Source.tar.gz . (最後のドット . に注意)
$ tar xvfz trilinos-11.0.3-Source.tar.gz

構築環境設定ツールcmakeの実行スクリプトcmake-trilinos.shを、TrilinosWork内に以下の内容で作る。インストール先は/opt/trilinosとする。

===== cmake-trilinos.sh =====
rm -f CMakeCache.txt
cmake \
-D CMAKE_INSTALL_PREFIX:PATH=/opt/trilinos \
-D CMAKE_BUILD_TYPE:STRING=RELEASE \
-D Trilinos_ENABLE_ALL_PACKAGES:BOOL=OFF \
-D Trilinos_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=OFF \
-D Trilinos_ENABLE_ALL_FORWARD_DEP_PACKAGES:BOOL=OFF \
-D TPL_ENABLE_BLAS:BOOL=ON \
-D TPL_BLAS_LIBRARIES:FILEPATH=/usr/lib/libblas.so.3gf \
-D TPL_ENABLE_LAPACK:BOOL=ON \
-D TPL_LAPACK_LIBRARIES:FILEPATH=/usr/lib/liblapack.so.3gf \
-D TPL_ENABLE_Boost:BOOL=ON \
-D TPL_Boost_INCLUDE_DIRS:PATH="/opt/boost/include" \
-D TPL_ENABLE_MPI:BOOL=ON \
-D MPI_BASE_DIR:PATH="/opt/mpich" \
-D MPI_CXX_COMPILER:STRING=mpicxx \
-D MPI_C_COMPILER:STRING=mpicc \
-D MPI_Fortran_COMPILER:STRING=mpif90 \
-D TPL_ENABLE_HDF5:BOOL=ON \
-D HDF5_INCLUDE_DIRS:PATH="/opt/HDF5/include" \
-D HDF5_LIBRARY_DIRS:PATH="/opt/HDF5/lib" \
-D TPL_ENABLE_Netcdf:BOOL=ON \
-D Netcdf_INCLUDE_DIRS:PATH="/opt/netcdf/include" \
-D Netcdf_LIBRARY_DIRS:PATH="/opt/netcdf/lib" \
-D CMAKE_CXX_FLAGS:STRING="-g -ansi -Wno-long-long -DMPICH_IGNORE_CXX_SEEK" \
-D CMAKE_C_FLAGS:STRING="-g -ansi -Wno-long-long -DMPICH_IGNORE_CXX_SEEK" \
-D CMAKE_Fortran_FLAGS:STRING="-g -ansi -Wno-long-long -DMPICH_IGNORE_CXX_SEEK" \
-D CMAKE_EXE_LINKER_FLAGS:STRING="-lgfortran -lm" \
-D CMAKE_VERBOSE_MAKEFILE:BOOL=TRUE \
-D Trilinos_ENABLE_AztecOO:BOOL=ON \
-D Trilinos_ENABLE_Belos:BOOL=ON \
-D Trilinos_ENABLE_Epetra:BOOL=ON \
-D Trilinos_ENABLE_EpetraExt:BOOL=ON \
-D Trilinos_ENABLE_Ifpack:BOOL=ON \
-D Trilinos_ENABLE_NOX:BOOL=ON \
-D Trilinos_ENABLE_Phalanx:BOOL=ON \
-D Phalanx_EXPLICIT_TEMPLATE_INSTANTIATION=ON \
-D Trilinos_ENABLE_SEACAS:BOOL=ON \
-D Trilinos_ENABLE_Shards:BOOL=ON \
-D Trilinos_ENABLE_STK:BOOL=ON \
-D Trilinos_ENABLE_Teuchos:BOOL=ON \
-D Trilinos_ENABLE_Zoltan:BOOL=ON \
-D Trilinos_ENABLE_EXAMPLES:BOOL=OFF \
-D Trilinos_ENABLE_TESTS:BOOL=OFF \
-Wno-dev \
/home/dexcs/TrilinosWork/trilinos-11.0.3-Source
=============================

実際にcmake-trilinos.shを実行する。暫く処理が続きます。
$ sh ./cmake-trilinos.sh
「-- Build files have been written to: /home/dexcs/TrilinosWork」と表示されたら完了です。Makefileなど多数の構築用ファイルが生成されています。

コンパイルします。相当長く処理が続くので、コメントの進展の割合(%)を見ながら100%になるまで暫く待ちます。エラー表示が無く100%まで到達し、「/usr/bin/cmake -E cmake_progress_start /home/dexcs/TrilinosWork/CMakeFiles 0」と表示されたら完成です。
$ make
インストールします。「-- Installing: /opt/trilinos/include/IOContFileUtils.H」と表示されたら完成です。
$ make install
以下でインストールされていることが確認できます。
$ ls -l /opt/trilinos

以上でPeridigmの構築に必要な準備が全て整いました。もう後一息です。頑張りましょう。

※実行環境の準備(3)に続く※

Peridigmを用いたPeridynamicsによる破壊解析:実行環境の準備(1)

2012年12月26日 09時32分37秒 | OpenCAE活用
ここでは、Peridynamics破壊力学に基づいた解析システムの構築として、Peridigmの構築方法を解説します。まずは、そもそもPeridigmとは何かについて、簡単に説明します。Peridynamicsは、Sandia National LaboratoriesのSillingらによって提唱された破壊力学理論で、積分方程式を用いることで破断や破壊などの著しい非連続現象を表現することができます。詳しくは論文検索して勉強してください。ここではシステム構築に絞って解説します。

このPeridynamicsの解析を行うには、もちろん理論から独自にプログラムを開発するのも良いですが、オープンCAEとして公開されたシステムを活用することをここでは選択します。もちろんソースコードが公開されていますから、さらに高度な現象や高速な解析を求めることも可能です。

■Peridynamics解析システムの種類

さてPeridynamicsの解析システムとしてウエブ上で見つかるのは、今の所は以下の3つです。なおこの区別は便宜上のもので正確でないかもしれません。

=公開用:PDLAMMPS:http://lammps.sandia.gov
これは分子動力学解析システムLAMMPSにPeridynamics破壊力学に基づく粒子が組み込まれており、これを用いて破壊解析が可能です。著者らはLAMMPSに個別要素法DEMを組み込んだLIGGGHTSを用いて利用しています。ただSNLとしては開発は完了しておりあくまで検証用の解析システムとなっているそうです。それでも色々なことができます。

=研究用:Peridigm:https://software.sandia.gov/trac/peridigm/
これはPeridynamics破壊解析専用システムで、現在もSNLで開発が進められています。弾塑性の材料モデルを扱うことや構造解析的な分析が可能になっており研究用として非常に有用なシステムです。ただしオープンソースではないため、上記ウエブにある著者にお願いしてソースを分けてもらう必要があります。本格的なシステムで構築も大変です。

=開発用:EMU:http://www.sandia.gov/emu/emu.htm
どうもこれがPeridynamicsによる最も本格的な解析システムのようで、様々な応用が提示されています。是非とも利用したいのですが、例題が国防関連の様ですし連絡しても返事がありませんので、国外不可なのかもしれません。ん~ん何とか使ってみたいのですが、非常に多機能の様です。

ここでは、Peridigmの解析システム構築の手順を解説します。それでは少しだけ長くて大変な構築に進みましょう。

■Peridigmの構築の基盤

基本的には、Ubuntu12.04LTS(64)をベースOSとして進めますが、他のLinuxでも何とかなるかもしれません。また上記のウエブでは、MacPortsなどを駆使してMacOSXでの構築の情報もありますので期待できます。(個人的にはこちらを目指しています)なお以下の手順では仮想マシン上のUbuntuで行っていますので、結局のところホストOSは何でも良いですね。実はPeridigmの構築作業は、MacBookPro 15 Retina (OS X 10.8.2)上にVirtualBOx4.2.6上で行っています。ハードウエアの仕様は、CPU: Intel Corei7 2.3GHz, RAM: 16GBです。

仮想マシンを構築するときには、以下の条件を満たすように設定してください。
・ネットワークで様々なツールをダウンロードするので利用できるようにしておきます。
・Peridigmはmpirunで並列処理が可能なので複数のコアを利用します。(検証では4コア)
・Peridigmはメモリを結構必要としますので出来るだけ多く割り当ててください。(検証では10GB)
・様々なツールを構築しますし出力ファイルも大きいので仮想ディスクは多めにしてください。(検証では、128GB)

ここでは、以前にこのブログの「LAMMPSを用いたPeridynamicsによる破壊解析:実行環境の準備(1)」で説明したPDLAMMPSが構築された状態に加えて、Peridigmを構築することにします。なおこの手順では、LIGGGHTSを用いてCFDEM(CFD+DEM)としてOpenFOAMとの連携のためにOpenFOAM2.1.1を導入し、可視化ツールとしてParaView3.12.0をインストールしています。

まずは、ブログ記事:「LAMMPSを用いたPeridynamicsによる破壊解析:実行環境の準備(1)」に従って準備してください。結局のところ/optの中に、LIGGGHTS(liggghts,lpp), openfoam, paraviewなどが構築された状態です。

■構築環境へのパッケージ追加

Peridigm構築の準備として、UbuntuのSynapticを用いて様々なツールをパッケージで追加します。上記の構築でUbuntuソフトウエアセンターからSynapticを使えるようにしてあるはずです。Launcherへ登録してすぐに使えるようにしておきます。追加するパッケージは以下のとおりです。構築手順の基本は、以下の公式ウエブにまとめられています。
https://software.sandia.gov/trac/peridigm/wiki/User/GettingStarted

上記ウエブに対して、構築手順に関してそのままではなく下記の変更や工夫をしています。
・構築の順序が前後しているので、作業手順にしたがって説明しています。この通りに進められます。
・前提となるツールの導入が省略されていますので、Ubuntu12.041をベースに追加を説明します。
・説明ではSVNが使われていますが、ここでは直接にソースプログラムのtar-ballから行っています。
・可視化用にVTKの指示がありますが、ParaViewで直接読める計算結果を出力出きるので、不要です。
・最適化用にDAKOTAの指示がありますが、これはオプションとあるので今後の課題として、不要です。

上記ウエブの最初に、Peridigmを構築するために必要なライブラリなどがまとめられています。この中で、以下に示すものは、ライブラリに依存関係があって段階的に構築してゆくため、ソースパッケージから手動で構築する必要があります。
mpich-3.0.1 => boost_1.52.0 => hdf5-1.8.10 => netcdf-4.2.1.1 => trilinos-11.03

以下のツールは、Synapticを用いて説明の最初に示すキーワードで検索して、必要なパッケージをインストール指定して適用で実行します。依存関係が指摘されたパッケージも全て導入します。

□コンパイラ関係
・g++: ツールの構築にg++のライブラリが必要です。
 g++でver4.6.3関連は全て揃えて置きます。ここでは、g++4.6-multilibをインストール指定、すると多数のライブラリも追加されます。gcc-4.6-docも追加します。インストールファイルは全10個です。
・gfortran: ツールの構築にFortranが必要です。
 gfortranでver4.6.3関連は導入します。gfortran,gfortran-4.6,-doc,-multilibの4つを選択します。関連も追加されて、インストールファイルは全5個です。
・cmake: クロスプラットホームのビルドツールとして必要です。
 検索結果の中からcmake,-data,-dbg,-doc (ver2.8.7)の4つを選択し、インストールファイルは全6個です。

□基盤ツール関係
・blas: 基本的な線形代数ライブラリとして必要です。
 ここでは高速計算で定評があるgotoblasを用いるので、これで検索します。libopenblas-base,-dev (ver0.1alpha2.2-3)の2つを選択します。インストールファイルは全2個です。
・lapack: 線形計算の数値計算ライブラリとして必要です。
 ここでは検索結果の中で、liblapack-dev,-doc,-pic,-test (ver3.3.1-1)の4つを選択し、インストールファイルは全4個です。

□支援ツール関係
・curl: パッケージのダウンロードツールとして必要です。
 検索結果の中で、curl (ver7.22.0)の1つを選択し、インストールファイルは全1個です。
・zlib: データの圧縮展開用のライブラリとして必要です。
 検索結果の中で、zlib1g-dbg (ver1.2.3.4)の1つを選択し、インストールファイルは全1個です。
・python: 汎用スクリプト言語で必要です。
 検索結果の中で、python (ver2.7.3)がインストールされています。ここでは、ver2.6以上でver3.0以下が必要なので確認しておきます。

□補助ツール関係(以下は構築には直接には必要としないものです)
・chrome: 定番のウエブブラウザですが、何かと便利なのでこれを使って意ます。
 要はソースパッケージのダウンロードで用いるだけですので何での良いですが、個人的な趣味です。:
・tree: ディレクトリ内の奥までファイル名をツリー状に表示する。例題ファイルの一覧を見るのに便利
 複数のディレクトリに対して解析ファイルの状態を見る
・vim: 初期導入のviではPeridigmのxmlの色分け表示が出来ないので、標準のvimが便利
 ~/.vimrcにsyntax onを追加しておく
・treeline: さらにxmlデータを見やすく表示編集するためのツールとして
 qt_ja_JP.UTF-8がなくてエラーが出る?

※実行環境の準備(2)に続く※