PDE(Navier-Stokes,Poisson)的稀疏线性求解器和学习 PETSc 的实用参考

计算科学 线性求解器 宠物
2021-11-30 17:24:13

我的背景主要是工程和应用研究,我曾经是一名开发人员或一些 CFD 软件,但主要是在高水平上,而不用担心线性求解器等。这种情况最近发生了变化,我们是否一直希望在没有我们自己的软件的情况下集成 PETSc,而不是使用我们自己的内部稀疏库(原因我相信是显而易见的。我们的小实验室无法开发更好的库PETSc 或 Trillinos 的线性求解器)。

但是,由于具有工程背景,我发现我完全缺乏迭代线性求解器(Krylov 子空间、多重网格等)的知识。是否会有参考书(最好是一本书,我仍然是老派)以某种方式涵盖此类材料,无需本科或研究生学习数学,但来自更多的工程背景?

在相关说明中,我看到他们的主页上有很多关于 PETSc 的教程(http://www.mcs.anl.gov/petsc/documentation/tutorials/HandsOnExercise.html),但我担心我很难找到学习此类库甚至将其正确安装在我的本地 linux 发行版上的起点。对于 a) 安装(并确保 MPI 正常)和 b) 逐步学习,最好的起始文档是什么?

3个回答

哇!一个我可以回答的问题!

在过去的一年半里,我一直在使用 PETSc 来求解 Navier-Stokes 方程(使用一些硬编码的 MPI)。

学习 PETSc 的最佳方法是 (1) 阅读手册,以便您大致了解 PETSc 中的内容,(2) 大致确定您需要 PETSc 的哪个部分,然后 (3) 开始尝试简单的示例以建立对 PETSc 的理解您需要的组件。

我最近学习了如何将 PETSc 的分布式阵列数据管理 (DMDA) 与 KSP 结合使用。据我所知,没有直接的指南。最好的学习方法是选择系统的一个基本组件,例如 DMDACreate3D(),并尝试构建一个仅说明该对象的工作代码。您可以通过查看 PETSc 的函数的深入示例来构建工作代码。

在使用许多不同的 PETSc 概念(例如 DMDA、矩阵和向量、索引集、向量散射等)进行此操作之后,您可以将自己的应用程序代码组合在一起。

不幸的是,没有捷径可走……但您可能知道 HPC。

祝你好运。

如果您正在寻找一本书并且对有限元离散化感到满意,您可以查看 Elman、Silvester 和 Wather,“Finite Elements and Fast Iterative Solvers”。如果您更喜欢有限体积或有限差分方法,Wesseling 的 CFD 书中有一个关于多重网格的部分,它至少会为您提供多重网格特定材料的背景。如果您对多重网格特别感兴趣,Trottenberg 是一个不错的选择。Saad 是一本很好的迭代方法书籍,但是对于理解 PETSc 中的求解器来说,深度并不是必需的。

... b) 逐步学习的最佳起始文件是什么?

请参阅我的项目以编写有关使用 PETSc 解决偏微分方程的介绍书: https ://github.com/bueler/p4pdes

早期的 PDF 草案位于“发布”选项卡中。