粒子法オープンソース実装OpenMPSのV&V

OpenMPSプロジェクト

𠮷藤尚生

[オープンCAEシンポジウム2017一般講演C14]

概要

コード検証

1次元版OpenMPSを開発&比較

静水問題

自由表面位置の比較

時間変化

成果

  • MPSを単純化した1次元版、OpenMps1Dを開発した
  • OpenMps1Dと本流OpenMPSを比較し、コード検証した
  • コード誤りが2件発見&修正できた
  • 静水問題で妥当性確認を実施した
  • 高精度粒子法を用いる時、時間刻みを粗くすると体積保存に難
  • 動きの少ない問題では、時間刻みをCFL条件よりかなり細かくする必要がある

目次

  1. 概要
  2. OpenMPSとは
  3. OpenMPS1Dによるコード検証
  4. 静水問題による妥当性確認
  5. まとめ

OpenMPSとは

目次

  1. 概要
  2. OpenMPSとは
  3. OpenMPS1Dによるコード検証
  4. 静水問題による妥当性確認
  5. まとめ

OpenMPSとは

MPS法のオープンソース実装

詳しくはopenmps.bitbucket.io参照

こんな計算ができます

なぜMPS法?

  • 射影法型粒子法だから
  • ISPHより先発であり、研究実績などが豊富だから

※MPSとSPHは もはや空間離散化手法の違いでしかない(4)

MPS法の流れ

  1. 重力粘性により移動
  2. (粒子数)密度を保つような圧力を計算
  3. 圧力勾配により移動

詳しくは参考文献(1)参照

高精度粒子法

オリジナルMPS法(1)かなり改善

  • HS法(高精度生成項)、Khayyer and Gotoh (2009)
  • HL法(高精度ラプラシアン)、Khayyer and Gotoh (2010)
  • GC法(勾配修正行列)、Khayyer and Gotoh (2011)
  • ECS法(誤差修正項)、Khayyer and Gotoh (2011)
  • DS法(動的人工斥力)、Tsuruta et al. (2013)

詳しくはGotoh and Khayyer (2016)を参照

OpenMPSの特徴

  • MPS法のオープンソース実装
  • 高精度粒子法が導入済み
  • V&Vが十分とは言えない

今回、簡単なV&Vを実施した

OpenMPS1Dによるコード検証

目次

  1. 概要
  2. OpenMPSとは
  3. OpenMPS1Dによるコード検証
  4. 静水問題による妥当性確認
  5. まとめ

コード検証(Verification)

本来は、OpenMPS自体を全て直接検証するべき

→大きいため、コストが高い

コード検証の手法

3段階に分けて実施

  1. サイズが小さく単純な1次元版を開発
  2. 1次元版を直接検証
  3. 1次元版と通常版のコードを比較

1次元版:OpenMps1D

https://bitbucket.org/OpenMps/openmps1d

  • 320行程度の小さいmain.cppのみ
  • \(z<0\)に壁(床)を配置
  • \(-z\)方向に重力
  • 粘性はなし
  • 固定時間刻みの計算結果を標準出力に出すだけ
  • 高精度粒子法のうち、HSとHLのみ実装

OpenMps1D実演

検証結果1:HS

Pull Requst#25

修正前

// ダミー粒子以外
if(type != Particle::Type::Dummy)
{
	const Vector dx = x - thisX;
	const Vector du = u - thisU;
	const auto r = boost::numeric::ublas::norm_2(dx);
	return boost::numeric::ublas::inner_prod(dx, du) / (r*r*r);
}
else
{
	return 0.0;
}

修正後

// ここは粒子数密度の計算なので、対ダミー粒子も含める
const Vector dx = x - thisX;
const Vector du = u - thisU;
const auto r = boost::numeric::ublas::norm_2(dx);
return boost::numeric::ublas::inner_prod(dx, du) / (r*r*r);

検証結果2:標準ラプラシアン

Pull Requst#26

修正前
// 標準MPS法:-2D/(λn0) w
const auto a_ij = (2 * DIM / lambda * n0) * Particle::W(r, r_e);
修正後
// 標準MPS法:-2D/(λn0) w
const auto a_ij = (2 * DIM / lambda / n0) * Particle::W(r, r_e);

静水問題による妥当性確認

目次

  1. 概要
  2. OpenMPSとは
  3. OpenMPS1Dによるコード検証
  4. 静水問題による妥当性確認
  5. まとめ

静水問題

  1. 水槽に水を入れる
  2. 水深を計測&比較
  • 水槽幅:5[cm]
  • 水槽高さ:10[cm]
  • 初期粒子間距離:0.1[cm]
  • 時間刻み:0.5[μs]

確認結果

水深の時間変化

まとめ

目次

  1. 概要
  2. OpenMPSとは
  3. OpenMPS1Dによるコード検証
  4. 静水問題による妥当性確認
  5. まとめ

成果

  • MPSを単純化した1次元版、OpenMps1Dを開発した
  • OpenMps1Dと本流OpenMPSを比較し、コード検証した
  • コード誤りが2件発見&修正できた
  • 静水問題で妥当性確認を実施した
  • 高精度粒子法を用いる時、時間刻みを粗くすると体積保存に難
  • 動きの少ない問題では、時間刻みをCFL条件よりかなり細かくする必要がある

今後の課題

  • 圧力・流速などの妥当性確認
  • 水中崩壊などの動きの激しい問題でV&V
  • 他の高精度粒子法部のV&V
  • 利用者・開発者の勧誘

参考文献

  1. Koshizuka, S. and Oka, y. (1996):"Moving-Particle Semi-implicit Method for Fragmentation of Incompressible Fluid", Nucl. Sci. Eng.
  2. OpenMPS http://openmps.bitbucket.org/
  3. 青子守歌(2016):『粒子法オープンソース実装OpenMPSプロジェクトの開発』、オープンCAEシンポジウム2016@東京講演概要集、A11。
  4. Gotoh, H. and Khayyer, A. (2016):"Current achievements and future perspectives for projection-based particle methods with applications in ocean engineering", J. Ocean Eng. Mar. Energy.
  5. OpenMps1D https://bitbucket.org/OpenMps/openmps1d

return 0;