如何获得合适的 SPH 模拟参数?

计算科学 算法 流体动力学 计算物理学 库达 sph
2021-11-27 22:45:07

我正在使用基于例如https://www10.informatik.uni-erlangen.de/Publications/Theses/2010/Staubach_BA10.pdf的 SPH 方法实现基本流体流动模拟器。

编辑(死网址):https ://www10.cs.fau.de/publications/theses/2010/Staubach_BT_2010.pdf

到目前为止,我已经实现:

  • 均匀网格构造

  • 密度和压力场计算

  • 压力和粘性力计算
  • 速度阻尼力计算
  • 表面张力(表面法线和曲率值)计算
  • 加速度和速度计算(基于这些力和重力)

不幸的是,我在校准参数以避免粒子聚集或在每个可能的方向上散布它们时遇到问题。

除了随机之外,还有其他方法可以计算出合适的模拟参数值吗?

我的参数是:

  • 粒子半径- (我希望它是 0.3 并设置与此相对应的其他参数)
  • 平滑半径- 4*粒子半径 = 1.2
  • 粒子质量- 决定一切
  • 刚度- 决定压力值(2.19 方程中的 k)
  • 静息密度- 决定压力场(2.19 方程中的 ρ0)
  • 动态粘度- 决定粘度力的值(2.25 方程中的 μ)
  • 重力- (0.0, -9.81, 0.0)
  • 速度阻尼- 决定阻尼力的值(F = -速度阻尼 * 速度)
  • 张力系数- 决定表面张力的值(2.30 方程中的 σ)
  • 张力阈值 - 计算表面张力的最小表面法线长度(2.31 方程中的 l)
  • 时间步长

我很确定我的计算没有问题。不幸的是,此文档或其他文档中的示例值对我不起作用,我可能需要自己计算它们。

我很乐意回答有关我的实施的任何问题,以帮助您帮助我。:)

哦,差点忘了,我用的是CUDA 6.0。

1个回答

一些通常在科学 SPH(弱可压缩)计算中起作用的约束:

  • 粒子半径或影响半径,Δ:任意定义以设置分辨率。

  • 平滑半径,h:它取决于核函数,在你的情况下是h=Δ/4

  • 静息密度 ρ0:水为 1000。

  • 粒子质量,m:3D 中的邻居数应约为质量可以计算为:n=50m=4Δ3π3nρ0

  • 刚度,其中是模拟中预期的最大速度。c<10umaxumax

  • 粘度μ:链接已失效,所以我没有看到方程式,但假设μ0.01..0.1

  • 时间步长dtmax0.2min(hamax,hc)

  • 初始粒子间距离dx=4Δ3π3n3