PETSc 和 Trilinos 之间的主要区别是什么?

计算科学 宠物 软件 特里诺斯
2021-12-16 20:45:33

据我所知,美国能源部的两大通用计算科学软件框架是 PETScTrilinos乍一看,它们看起来很相似,除了语言上的差异(C 与 C++)。这两个框架之间的主要区别是什么,哪些因素会影响选择一个框架而不是另一个框架?(忽略制度偏见和现有基础设施。)

4个回答

在文化、编码风格和能力方面存在巨大差异。可能根本区别在于 Trilinos 试图提供解决 FEM 问题的环境,而 PETSc 提供解决稀疏线性代数问题的环境。

为什么这很重要?

  • Trilinos 将提供大量与 FEM 求解器的不同部分相关的软件包。有时这些包一起工作,有时他们不一起工作。甚至基本组件都在它自己的包和高级 C++ 工具中
  • PETSC 提供了少量可以构建的核心例程,但将 FEM 求解器留给第三方软件包。因此,它与一个更大的社区相关联,而不仅仅是 FEM。例如,即使是特征求解器也是第三方,这可以说是线性代数的主要部分。
  • 归根结底,Trilinos 专注于在其自己的包中很好地工作,并且 PETSc 具有调用许多中间件包的接口(因此我经常听说它被称为“轻量级”,但我不会这么说)

恕我直言,您应该使用哪个确实取决于问题。请分享更多详细信息,以便我们回答这个问题。

如果您想听取各种软件包的技术主管的意见,从普通 HPC 用户的角度提问,Brock Palen 和 Jeff Squyres 的RCE 播客是一个很好的资源。他们在PETScTrilinos上有剧集,非常清楚。

aterrel 的描述是正确的——PETSc 是一个(相对而言)小的、集成的、经过深思熟虑的通用线性和一些非线性求解器的包,然后可以在求解器框架中使用它;Trilinos 是一个包的集合,其集成在不断发展,主要针对求解器框架,包括像 ODE 求解器、网格包等。

让我补充一下 aterrel 的好评,Trilinos 确实是一大袋(Sandia)东西,而 Petsc 是一个更专注的库。如果你想比较,那么你应该将 PETSc 的稀疏求解器支持与 Trilinos 的 ePetra/ML/etc 稀疏求解器生态系统进行比较,它们做类似的事情。此外,PETSc 支持结构化网格,而 Sandia 历来明确是非结构化 (FEM) 房屋,因此 Trilinos 对结构化网格 AFAIK 的支持很少或根本不支持。并且 Trilinos 具有 PE​​TSc 不具备的功能,例如随机 PDE 支持。

作为一个花了几年时间与两者一起工作的人,我的观点是这两个包实际上并没有那么不同。诚然,他们使用不同的语言,但他们以非常相似的方式使用它(两者都是面向对象的,Trilinos 除了使用类之外几乎没有使用 C++)。两者几乎都支持您想要使用线性代数做的所有事情(通过子包或他们动态下载的东西,从用户的角度来看没有任何区别)。最后,两者都有很多更晦涩且可能不是很广泛使用的子包(例如 PETSc 的网格接口“筛子”、Trilinos 中的自动微分等)。

对我来说,Trilinos 的吸引力有两个方面: - Trilinos 中不起眼的子包的数量要大得多;如果我需要 X 方向的东西,我会在 Trilinos 中找到它,它可以与我的其余代码一起使用。- Trilinos 在他们的发展战略上要保守得多。PETSc 一直在重命名事物,每个版本都要求用户赶上重命名的函数、不同的库等。