自适应 FEM 中使用了哪些新颖的数据结构?

计算科学 线性代数 有限元 稀疏矩阵
2021-11-27 05:47:05

许多自适应 FEM 库使用更高级的网格数据结构来处理添加/删除节点、边、三角形、四面体等。例如,p4est库使用八叉树数据结构进行自适应网格细化;您不会经常找到用于在静态网格上进行计算的八叉树。

自适应 FEM 的线性代数方面有何变化?

我能想到的最直接的方法是在网格被细化或粗化时完全重建所有系统矩阵。如果网格自适应是一种非常不频繁的操作,那么这样做的费用最终将分摊到其余的计算中。通过这种方法,人们可以轻松地利用现有的稀疏线性代数软件(PETSc、Trilinos 等)。

这种生硬的方法是最常用的,还是有库可以在细化过程中重用或修改旧矩阵?毕竟,在网格适应过程中,大部分网格和相应的矩阵都没有改变。

2个回答

是的,最常见的方法是重建。可就地修改的数据结构在设置后往往效率较低,并且与重新组装相比,重新分配实际上非常便宜(例如,由于非线性),因此它确实是一个很好的解决方案。除了相对罕见的非常容易求解的领域之外,尝试在求解器中使用动态数据结构只会让您的应用程序变慢。然而,对于那些忘记衡量或模拟绩效的人来说,这是一种普遍的看法。

就像 Jed 已经说过的那样,矩阵和向量等线性代数组件的重用并不常见。也没有必要:相对于求解线性系统的成本,设置这些组件相当便宜。

如果您寻找从静态网格到自适应细化网格时发生变化的事物,那么最大的障碍就是处理悬挂节点。deal.II中,这是由ConstraintMatrix类处理的,该类需要 1000 行代码。您可以在我和 Oliver Kayser-Herold(链接到我的出版物页面)的论文中找到该课程的一些描述。当从固定网格变为自适应网格时,没有其他组件(当然,除了处理网格之外)需要如此多的适应。