在 nbody 重力模拟中,我没有做精确的(全对蛮力)解决方案,而是将每个物体的质量添加到 3D 网格的单元格中(每个单元格只是一个具有质量值的浮点值)。然后使用模板平滑网格。现在我试图从网格中获得点质量的近似值。我已经尝试过直接进行体细胞相互作用(类似于体体,但使用平滑的细胞质量和细胞的中心位置),但这会选择原本不含质量的细胞,就好像它们正在吸引并导致高误差。
执行以下选项之一的最精确(或合乎逻辑)的方法可能是什么:
- 一个近似位置的单位质量
- 单位距离和角度处的近似质量
- 质量和距离的近似值
以便总力量的远程分量正确地与全对蛮力版本(它的远程部分)相同?
或者,除了上层选项之外,还有什么合适的方法?我可以为这些使用质量密度的导数(通过相邻单元)吗?
现在我只计算所有对(但只有远程部分)版本和这个具有平滑质量的单元中心之间的 RMS 误差(仅在远程距离后最近的相邻单元(等于 2 * 单元大小))检查模拟与全对版本的接近程度。
我正在做这个网格平滑,因为我想学习 nbody 的多重网格加速。要逐步学习它(并与以后进行性能比较),仅使用具有简单平滑的单个网格(16x16x16 立方体(作为网格大小)和具有 26 个最近相邻单元的 16 个平滑步骤(使用连续过度松弛)。
最初两个版本都以立方体体积开始。(总粒子只有 3072)
然后在每个时间步,计算两个版本之间所有身体位置的误差均方根值。
将点质量添加到单元格非常简单,如下所示
atomic_add(closest_cell_to_current_particle,all_of_current_particle_mass);

