假设我们想在 HPC 方面解决 FEM 问题。最常用的方法是什么:
使用 mfem、deal.ii 等开源软件,或者,
自行组装系统(读取网格文件,创建刚度矩阵等),并使用 hypre、PETSc 等高性能软件来解决它。
假设我们想在 HPC 方面解决 FEM 问题。最常用的方法是什么:
使用 mfem、deal.ii 等开源软件,或者,
自行组装系统(读取网格文件,创建刚度矩阵等),并使用 hypre、PETSc 等高性能软件来解决它。
为什么要自己做事?您提到的库都在 10,000 多个内核上运行,并且在引擎盖下使用 PETSc、Trilinos、hypre ......用于线性系统的解决方案或使用无矩阵方法。您将不得不投入数十人年的工作来实现这些库中的功能和优化——您将无法竞争,也不应该:您将获得的只是一个软件,它可以做什么其他人已经这样做了很多年,而且会慢一些。
(免责声明:我是 deal.II 的主要作者之一。)
恕我直言,您的问题的正确答案是“取决于您的目标和您手头的问题”。
1.) 如果您的目标是在 HPC 上模拟大规模问题,并且如果您知道可以轻松模拟问题物理的现有代码,则使用现有代码。
2.) 如果现有代码尚不支持您的问题的物理特性,但提供了许多实用程序,则在该库之上构建所需的功能。
3.) 如果您是从事计算物理或计算工程的研究人员,那么拥有自己的代码可能是个好主意。当前所有的开源库都有一些或其他限制:它们可能不支持某些元素类型或材料定律,或者它们的 BC 应用方式不健壮。
尽管如此,您仍应使用 PETSc、Eigen、Boost 和 VTK 等库,并使用您选择的数值方案开发用于解决问题物理问题的代码。
请注意,即使使用所有第三方库,自己开发代码也需要付出很多努力。但是,如果您正在研究新的数值方案,这是必要的。
我强烈建议您使用可用的 FEM 开源库(例如 deal.II、FENICS、MFEM 等),而不是编写自己的 FEM 代码,然后使用 PETSC 作为底层并行代数库。首先,大多数开源 HPC FEM 代码已经在后台使用 PETSC 或 Trilinos(deal.II 支持两者,FENICS 使用 PETSC 等)。另外,我认为您低估了编写自己的并行 FEM 代码的复杂性。如果您已经知道自己在做什么,那么简单的泊松方程可能在几个月内就可行了,但是如果您想求解非线性向量方程并支持的不仅仅是 P1 元素,那么您将花费大量时间来编写和测试一个可以达到与大多数开源库相同程度的性能的软件。此外,这种重新发明轮子的结果很难发表,因为它们没有带来任何新的东西。您必须考虑需要重新编程的元素数量:参数解析、网格解析、并行结果输出(这不是一项简单的任务)等。
我真的建议不要从头开始编写自己的 FEM 平台。最好为现有平台做出贡献以添加您所追求的功能。尽管您需要花费时间来学习图书馆,但通常在您完成更复杂的事情后,您会立即收回这笔初始投资。
如果您使用 PETSc,您将对事物有更多的控制权。编写高性能 FE 代码最困难的部分是并行汇编和求解,而 PETSc 兼顾两者。PETSc 甚至有用于管理非结构化网格 (DMPLEX) 的例程。
对于其他代码,您对编程语言、网格/元素类型等的选择会受到一定限制。PETSc 也得到了 DOE 的支持,而且很可能会在 20 到 30 年后出现。其他项目可能并非如此。现在它们太多了,我怀疑所有这些都将在 10-15 年后得到积极维护。