PC クラスタコンソーシアム HPCオープンソースソフトウェア普及部会ワークショップ「高性能数値計算ライブラリLexADV」
2021 年9月10日 オンライン（Zoom）

粒子法MPSライブラリ
LexADV_EMPSの概要と実装
鄭 宏杰（東洋大学）

本日の内容• LexADV_EMPSの概要• LexADV_EMPSのインストール及び使い方• LexADV_EMPSの応用例• まとめ

LexADV_EMPSの概要• LexADV_EMPS: Explicit MPS (Moving Particle Simulation) Solver framework• 高並列な分散メモリ環境での粒子法ソルバー• オープンソースソフトウェア http://adventure.sys.t.u-tokyo.ac.jp/lexadv• プログラム言語： C, MPI• Platform: Linux, Mac OS X, Windows (Cygwin)• 公開履歴：Ver.0.1.2.b, 2014/12/01

LexADV_EMPSの概要• バケットベースの領域分割と通信方法• 粒子の分散メモリ並列処理向け動的負荷分散

粒子をバケットに格納

PE 0

Haloexchange

Haloexchange

領域分割

PE 1

Haloexchange

PE 2

PE 348

隣接プロセス間通信を少なくするバケットベース
2階層領域分割とHalo通信パターン生成機能

１つの計算ノードの粒子数が、5,500になったら、領域再分割を行う

LexADV_EMPSの概要• Strong scaling by K computer and FX100

LexADV_EMPSの概要

LexADV_EMPSのインストール• LexADV_EMPSをインストールする前に、依存する外部ライブラリをインストール

MPI

並列計算用ライブラリ

MPI: http://www-unix.mcs.anl.gov/mpi/

LexADV_EMPS

ParMetis

領域分割用ライブラリ

http://glaros.dtc.umn.edu/gkhome/metis/parmetis/download

ADVENTURE_IO

ADVENTUREモジュール用IOフォーマットとライブラリ

https://adventure.sys.t.u-tokyo.ac.jp/jp/download/IO.html

LexADV_EMPSのインストール• LexADV_EMPSをダウンロードする

https://adventure.sys.t.u-tokyo.ac.jp/lexadv/lexadv_EMPS.html

初めてのユーザーにregistrationが必要

コードをDownload
するLexADV_EMPSのインストール• LexADV_EMPSをダウンロードする

https://adventure.sys.t.u-tokyo.ac.jp/lexadv/lexadv_EMPS.html

LexADV_EMPS-0.1.2b.tar.gz

LexADV_EMPSのインストール• LexADV_EMPSを展開する

LexADV_EMPSのインストール• LexADV_EMPSを展開した中身

LexADV_EMPS

doc

LexADV_EMPSの概要と使い方

LexADV_EMPSLexADV_EMPSライブラリ

HDDM_EMPS

LexADV_EMPSを利用したMPS陽解法解析コード

HDDM_EMPS_with_LexADV_EMPSLexADV_EMPSをHDDM_EMPSのディレクトリに入れたコード

make_dambreak_advio

ダムブレイク解析用の粒子生成コード

make_floating_advio

2つ剛体が浮遊する解析用の粒子生成コード

adv2vtu

ParaViewで可視化するためのvtuファイル生成
コード

LexADV_EMPSのインストール• LexADV_EMPSの中身を確認する
cm@DESKTOP-1B1M200 LexADV_EMPS/• makefileを編集し、外部ライブラリのパスを設定する
ADVIOのパスを設定する

ParMetisのパスを設定する

LexADV_EMPSのインストール• 計算条件は、mps_define.hのパラメータを設定する
cm@DESKTOP-1B1M200 LexADV_EMPS/#define KinematicViscosity 0.000001#define CollisionRatio 0.2#define DistanceLimitRatio 0.9#define Gravity_x 0.0#define Gravity_y 0.0#define Gravity_z -9.8
#define CourantNumber 0.1......
......

// 動粘性係数（水）// 衝突係数// 衝突半径// 重力// クーラン数

LexADV_EMPSのインストール• LexADV_EMPSをコンパイル
cm@DESKTOP-1B1M200 LexADV_EMPS$ makeBuilding file: mps_init.c
mpicc -I/home/cm/ADVENTURE/include -I/home/cm/ParMetis-3.1.1 I/home/cm/ParMetis-3.1.1/METISLib -I/home/cm/ParMetis3.1.1/ParMETISLib -c -fopenmp -O3 -o"mps_init.o" "mps_init.c"
Finished building: mps_init.c
mpicc -I/home/cm/ADVENTURE/include -I/home/cm/ParMetis-3.1.1 I/home/cm/ParMetis-3.1.1/METISLib -I/home/cm/ParMetis-3.1.1/ParMETISLib-c -fopenmp -O3 -o"mps_distribution_particle.o""mps_distribution_particle.c"
Finished building: mps_distribution_particle.c

LexADV_EMPSのインストール• MPS陽解法ソルバーHDDM_EMPSの中身を確認してコンパイルする
cm@DESKTOP-1B1M200 HDDM_EMPS•

makefileを編集し、外部ライブラリのパスを設定する•

HDDM_EMPSをコンパイルする
cm@DESKTOP-1B1M200 HDDM_EMPS$ makeLexADV_EMPSのインストール• EMPSSettings_r002.txtの計算条件を設定する
cm@DESKTOP-1B1M200 HDDM_EMPS#TimeStep0.0005#FinishTime
1.0#SoundSpeed22.0#OutputFrequency
100

最大の時間間隔（最大速度で決定される速度と比べて小さい方が選択される）
解析終了時刻疑似音速
TimeStep×OutputFrequencyの値間隔でファイル出力される

ダムブレーク計算例を実行する
make_dambreak_advio/の中身を確認する
cm@DESKTOP-1B1M200 ~/LexADV_EMPS_v0.1.2b_141201/make_dambreak_advio$ lsmake_dambreak_advio.c makefile

make_dambreak_advio/のmakefileにADVIOのパスを設定する

ダムブレークの計算例を実行する
make_dambreak_advio.cの中身を確認する

入力用のadvファイル
可視化確認用のvtuファイル

壁＋ダミー粒子の厚さ

ダムブレークの計算例を実行する
make_dambreak_advio.cを実行し入力用のadvファイルを生成する

ダムブレークの計算例を実行する
Paraviewでdambreak.vtuを確認する

ダムブレークの計算例を実行する• 実行用Shell Script 「dam_r2.sh」を使って実行する
cm@DESKTOP-1B1M200 ~/LexADV_EMPS_v0.1.2b_141201/HDDM_EMPS$ vi dam_r2.sh
mpirun -np 4 ./hddm_emps . ./EMPSSettings_r002.txt 0 --pre ../make_dambreak_advio/dambreak.adv

出力ファイルを書き出す場所

入力ファイル名

入力ファイルを利用する場合は、通常は０入力ファイルを読み込むためのオプション

ダムブレークの計算例を実行する• 解析結果を確認する

ダムブレークの計算例を実行する• リスタート機能を利用する
HDDM_EMPS/EMPSSetting_r002.txtを編集する

HDDM_EMPS/dam_r2.shを編集してリスタート機能を利用する

ダムブレークの計算例を実行する• 可視化用ファイル生成コードadv2vtu/の中身を確認する
cm@DESKTOP-1B1M200 ~/LexADV_EMPS_v0.1.2b_141201/adv2vtu$ ls
adv2vtu.c makefile• Adv2vtuのmakefileにADVIOのパスを設定する

ダムブレークの計算例を実行する• 可視化用ファイルを作成する
cm@DESKTOP-1B1M200 ~/LexADV_EMPS_v0.1.2b_141201/adv2vtu$ ./adv2vtu ../HDDM_EMPS/particle/ vtu_dam_r002/• 可視化用vtuファイルの確認
cm@DESKTOP-1B1M200 ~/LexADV_EMPS_v0.1.2b_141201/adv2vtu$ ls vtu_dam_r002/

ダムブレークの計算例を実行する• ParaViewで解析結果の確認

h=0.7 [m]LexADV_EMPSの応用例
静水圧z

L=0.2[m]y0xB=1.0[m]b=0.08[m]

静水圧 𝑝 の理論解：
𝑝 = 𝜌 𝑔 (0.7 − ℎ)𝑝 : 流体密度， 𝑔 : 重力加速度ベクトルℎ : 水面からの深さ
流体解析MPSの計算条件
0.0005 [s]時間刻み幅
流体粒子数17,500

壁粒子数4,964

初期粒子間距離0.02[m]影響半径0.01 [m]流体密度1000 [kg/m3]

動粘性係数0.0001 [m2/s]

重力加速度9.8[m/s2]

プロセッサ数4

LexADV_EMPSの応用例
福島第一原子力発電所1号機タービン建屋の浸水解析
粒子径：0.1[m], 粒子数：約1.3億

LexADV_EMPSの応用例
大規模流体―構造連成解析
計算機：スーパーコンピュータ京
ノード数：4800
計算時間：約11時間

粒子径：0.1[m]粒子数：約1.3億
建屋四面体2次要素数：1,694,962
自由度数：8,402,583

まとめ• LexADV_EMPSの概要• LexADV_EMPSのインストールから結果出るまでのデモ• LexADV_EMPSの応用例

参考文献• ADVENTURE Project: https://adventure.sys.t.u-tokyo.ac.jp/• LexADV_HDDMPSS: https://adventure.sys.t.u-tokyo.ac.jp/lexadv/index.html• 室谷浩平，分散メモリ並列EMPSライブラリLexADV_EMPS V0.1b, 第9回ADVENTURE定期セミナー, LexADV_EMPSのマニュアル(LexADV_EMPS-0.1.2b/doc/LexADV_EMPS_v0.1b_20141113.pdf).
• Masao Ogino, Hongjie Zheng, Kohei Murotani, Seiichi Koshizuka, Ryuji Shioya, Liu Lijun,Tsunami Run-Up and Inundation Simulations Using LexADV_EMPS Solver Framework onFujitsu FX100, SC16, 2016.
• 室谷浩平, 荻野正雄, 塩谷隆二, MPS法を用いた東日本大震災の津波による福島第一原子力発電所1号機タービン建屋の浸水解析, HPCI利用研究成果集 hp150189, 2017.
• Hongjie Zheng, Ryuji Shioya, Naoto Mitsume, Large-Scale Parallel Simulation of CoastalStructures Loaded by Tsunami Wave Using FEM and MPS Method, Journal of Advanced
Simulation in Science and Engineering, 5, 11 – 16, 2018.