COMSOL Multiphysics 使用的网格排序算法

计算科学 康索尔 非结构化网格
2021-12-05 14:16:22

非结构化网格中元素的排序对于计算性能无疑是非常重要的。例如,它确定由 PDE 离散化产生的稀疏矩阵的结构,这会影响大多数线性代数运算(如矩阵向量积)的性能。

最近,我们使用了 COMSOL Multiphysics 生成的非结构化四面体网格。对于给定的网格,我们构造一个具有以下结构的矩阵:每一行对应于网格的某个面,非零元素对应于与面相邻的一个或两个单元的面,即对于四面体网格,每个面row 最多有 7 个非零元素。COMSOL 生成的网格的矩阵结构如下图所示。FF

在此处输入图像描述

同时,我们尝试使用其他网格生成器,但我们目前没有一个好的方法来订购网格。使用按顺序遍历单元中心八叉树的简单方法,我们得到与上面相同矩阵的以下结构,它不像原始的那样“好”:

在此处输入图像描述

不幸的是,COMSOL 文档没有说明网格排序算法。有没有人知道它可能使用哪种算法或哪些算法可能会生成相似(或更好)的结构?

2个回答

在有限元网格中“对节点进行排序”以提高稀疏求解器的计算时间的想法起源于 70 年代的大型结构分析 FE 代码。这些代码通常对稀疏矩阵使用带状或可变带存储方案,因此减少带宽是主要标准。这就是旧的 Cuthill-McKee 和 Reverse-Cuthill-McKee 带宽缩减算法的起源。

如今,在所有使用现代稀疏求解器的 FE 代码(例如 COMSOL)中,这些概念基本上已经过时。

您说您的第二次订购不如第一次订购“好”,大概是因为带宽比第一次大。在所有现代稀疏求解器中,带宽是一个完全不相关的指标。

这是一个您可能会感到惊讶的具体示例。在 1973 年的经典论文嵌套剖析中,艾伦乔治表明,用简单的方形有限元网格离散的拉普拉斯方程的最佳编号是通过他所谓的“嵌套剖析”获得的。下图显示了根据嵌套剖分算法排序 网格的非零点。7×7在此处输入图像描述

如您所见,矩阵的带宽几乎等于方程的数量。这是在因式分解期间最小化浮点运算次数的方程排序。

我知道的所有现代稀疏求解器都包括用于重新排序方程以提高计算效率的算法,并且默认情况下会调用它们。许多算法包括多种算法,并会尝试两种或更多算法来找到最小化分解时间的一种。

我发现的最新 COMSOL 文档显示直接稀疏求解器选项是 MUMPS、PARDISO 和 SPOOLES。所有这三个都具有用于重新排序方程的出色算法。它们包括试图找到类似于 George 对一般网格的嵌套剖析的排序的算法。

对于您的具体问题,有必要查看 COMSOL 关于直接求解器选择的指南。您可能想尝试一种迭代求解器选项,其中方程排序无关紧要。但是,在任何一种情况下,用于标记网格中节点的数字都不会对计算时间产生任何显着影响。所以选择对你最方便的。

根据@TylerOlsen 的评论,我在原始问题的同一矩阵上应用了反向 Cuthill-McKee 排序的boost 实现,结果如下:

在此处输入图像描述

结构看起来非常相似,但与使用 COMSOL 排序的原始矩阵相比,带宽要小得多。此外,更改 Cuthill-McKee 算法中的起始顶点(例如强制使用与 COMSOL 相同的起始顶点)对该特定网格的带宽没有显着影响。我认为这是更好的结果。

由于我不能正式接受评论,我将自行接受这个答案,但当然要归功于@TylerOlsen。