OpenMPSプロジェクト
𠮷藤尚生
[オープンCAEシンポジウム2017一般講演C14]
MPS法のオープンソース実装
詳しくはopenmps.bitbucket.io参照
※MPSとSPHは もはや空間離散化手法の違いでしかない(4)
詳しくは参考文献(1)参照
オリジナルMPS法(1)をかなり改善
詳しくはGotoh and Khayyer (2016)を参照
今回、簡単なV&Vを実施した
本来は、OpenMPS自体を全て直接検証するべき
→大きいため、コストが高い
3段階に分けて実施
https://bitbucket.org/OpenMps/openmps1d
修正前
// ダミー粒子以外
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);
// 標準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);
return 0;