我已经启动并运行了平滑粒子流体动力学的 2D 实现,但是当我尝试使用适当的 3D 内核将其移动到 3D 时,粒子总是倾向于彼此分开。由于我的 2D 实现工作正常,并且我唯一更改的是内核,因此影响它们的唯一参数是支持的长度。
有没有一种好的方法来计算一个好的价值而不是随机检查?
我已经启动并运行了平滑粒子流体动力学的 2D 实现,但是当我尝试使用适当的 3D 内核将其移动到 3D 时,粒子总是倾向于彼此分开。由于我的 2D 实现工作正常,并且我唯一更改的是内核,因此影响它们的唯一参数是支持的长度。
有没有一种好的方法来计算一个好的价值而不是随机检查?
我不是 SPH 方面的专家,所以其他人也应该加入进来,但这里有一个考虑因素:需要选择,以便在半径的邻域内围绕一个点,还有其他点。所以与点之间的平均距离有关。2d 和 3d 之间的不同之处在于,在相同数量的点下,它们在 3d 中的平均距离要大得多。例如,如果你分散在作为单位平方的二维域中的点,则它们平均相距 0.001(2d 形式的粒子,如果有意放置,则晶格)在 3d 中它们是 0.01,即相距 10 倍(因为在 3d 中,它们形成一个格子)。你将不得不调整你的相应地。
两件事情。确保内核值的总和是等于 1.0 以达到所需的精度。如果根据参考密度计算,请检查您是否使用了每个粒子质量的正确值。如果您使用与 2d 中相同的 h 值,则应该可以提供稳定的模拟。
最重要的是内核必须在影响半径内进行归一化:
。
网格中的初始粒子间距离应计算为
二维或
在 3D 中。是估计的邻居数: in 2D and in 3D。
如果这些都满足并且我们假设参数在物理上是正确的,那么使用相同的参数,2D 和 3D 模拟都应该是稳定的。