在 Multigrid 中通常没有收敛检查吗?

计算科学 多重网格
2021-12-24 01:44:33

我刚刚阅读了 Briggs/Henson/McCormick 的“A Multigrid Tutorial”中的第 3 章, 链接

文本是关于多重网格循环,例如 V-cycle、mu-cycle、FMG。什么引起了我的注意:在大多数迭代过程中,检查它是否已经收敛到所需的容差/精度,如果是,则过程停止。但是 Briggs/Henson/McCormick 在提出的方案中没有使用任何收敛性检查。迭代和递归的数量只是硬编码的,人们必须相信该方案会收敛。

那么这在Multigrid中通常是如何完成的呢?迭代/递归的数量通常是硬编码的吗?我真的担心我会浪费大量的计算时间,因为我过于精确,或者另一方面,当我选择较少数量的迭代/递归时,在许多情况下准确性会很差。

3个回答

是的,出于几个原因,在 MG 中没有收敛检查是正常的。首先,如果您在每次通过时使用不同数量的迭代,则 MG 算子不再是线性的,您将不得不使用 FGMRES 之类的东西作为可以容纳非线性预处理器的加速器。其次,FMG 在工作时是一个精确求解器(将误差减少到离散化误差以下),因此检查收敛性会在算法中引入代价高昂的同步。您通常会在最后检查以验证收敛性。

当然不。举一个例子,Multigrid一书在第 53 页有一个图(图 2.10),它显示了残差的减少是 V 或 W 循环数的函数。当您对残差的大小感到满意时,您将停止循环。

您混淆的根源可能是因为某些描述仅描述了一个 V 循环。在一些有限的情况下,因为多重网格是一种强大的技术,这可能会产生一个合适的解决方案。此外,多重网格可以用作预处理器在这种情况下,多重网格只是一个加速器,收敛检查发生在更高的级别。但是检查应该总是发生在某个地方。

在用作求解器的 Multigrid 中,通常使用残差的相对范数作为停止准则。随着您降低该比率 - 解决方案的准确性应该提高。此外,在最粗略的层面上,研究人员会做不同的事情:

  1. 使用直接求解器求解(不收敛)
  2. 使用固定迭代(不收敛)
  3. 使用迭代之间的连续差异作为收敛标准(不是一个好方法,因为您可能远离解决方案)
  4. 再次使用残差的相对范数作为停止标准。

当 Multigrid 用作处理器时,上面列出的最粗略的方法 2 很好(这里的 Multigrid 专家可以评论 - 我是初学者)。

因此,通常使用收敛