关于 3D FMM 转换运算符的说明

计算科学 快速多极
2021-12-04 00:27:26

我正在使用“基本”实现自适应 3D FMMO(p4)翻译操作员。我正在寻找有关多极到多极 (M2M) 转换运算符的说明。我将解释我的理解:在方程 6.26 中,参数α,β多极子的坐标是子框相对于移到原点的父框坐标的坐标。此外,多极矩Ojnkm是孩子的那些,它解释了孩子中包含的所有粒子,并使用 (6) 计算,其中多极子的参数αi,βi是子框中的粒子相对于移到原点的子框的坐标。 在此处输入图像描述

在此处输入图像描述

在我的实现中,我通过使用 (1) 子盒的多极矩和 (2) 多极矩在离子盒的父级足够远的点评估多极展开(方程 5)来测试 M2M 算子子框翻译成父框。也就是说,父盒子中唯一考虑的粒子是那些也包含在子盒子中的粒子。我的理解是,由此产生的电位在分析上是精确的;这些值之间的唯一误差应归因于浮点误差。但是,我的测试返回的相对误差非常高,见下文(我对自适应改进中创建的 4 个框中的每一个重复步骤(1)和(2))。

我想知道这个错误是否归因于我对上述基本定理的理解?我已经测试了代码库的其他方面,我认为这些方面也会影响错误。

如上所述,将每个子框 #4、3、2、1 的矩评估与父框进行比较而返回的相对错误

1个回答

首先,在 FMM 实现中,您总是在相对于某个框的中心的某个坐标系中工作,因此PQ向量定义了上面的初始坐标系。确保这在您的实施中是正确的。

其次,您的测试不是为调试而精心设计的,因为它着眼于最终产品而不是感兴趣的实际数量(多极系数);你真的应该做以下事情。计算多极膨胀系数Mjk的父框直接从里面包含的费用。然后,计算子多极展开系数Ojk, 应用您的 M2M 运营商获取M~jk,父级多极系数。这些应该匹配Mjk到许多小数位,如果不是机器精度的话。从单项展开式开始,并验证您的实现是否获得了正确的常数项。然后转到线性、二次等项来验证您的实现。

要考虑的另一件事 - 如果您的框太小,您将需要应用缩放以实现数值稳定性。使用盒子O(1)直径进行调试。