PETSc 和 Trilinos 之间的主要区别是什么?
在文化、编码风格和能力方面存在巨大差异。可能根本区别在于 Trilinos 试图提供解决 FEM 问题的环境,而 PETSc 提供解决稀疏线性代数问题的环境。
为什么这很重要?
- Trilinos 将提供大量与 FEM 求解器的不同部分相关的软件包。有时这些包一起工作,有时他们不一起工作。甚至基本组件都在它自己的包和高级 C++ 工具中
- PETSC 提供了少量可以构建的核心例程,但将 FEM 求解器留给第三方软件包。因此,它与一个更大的社区相关联,而不仅仅是 FEM。例如,即使是特征求解器也是第三方,这可以说是线性代数的主要部分。
- 归根结底,Trilinos 专注于在其自己的包中很好地工作,并且 PETSc 具有调用许多中间件包的接口(因此我经常听说它被称为“轻量级”,但我不会这么说)
恕我直言,您应该使用哪个确实取决于问题。请分享更多详细信息,以便我们回答这个问题。
让我补充一下 aterrel 的好评,Trilinos 确实是一大袋(Sandia)东西,而 Petsc 是一个更专注的库。如果你想比较,那么你应该将 PETSc 的稀疏求解器支持与 Trilinos 的 ePetra/ML/etc 稀疏求解器生态系统进行比较,它们做类似的事情。此外,PETSc 支持结构化网格,而 Sandia 历来明确是非结构化 (FEM) 房屋,因此 Trilinos 对结构化网格 AFAIK 的支持很少或根本不支持。并且 Trilinos 具有 PETSc 不具备的功能,例如随机 PDE 支持。
作为一个花了几年时间与两者一起工作的人,我的观点是这两个包实际上并没有那么不同。诚然,他们使用不同的语言,但他们以非常相似的方式使用它(两者都是面向对象的,Trilinos 除了使用类之外几乎没有使用 C++)。两者几乎都支持您想要使用线性代数做的所有事情(通过子包或他们动态下载的东西,从用户的角度来看没有任何区别)。最后,两者都有很多更晦涩且可能不是很广泛使用的子包(例如 PETSc 的网格接口“筛子”、Trilinos 中的自动微分等)。
对我来说,Trilinos 的吸引力有两个方面: - Trilinos 中不起眼的子包的数量要大得多;如果我需要 X 方向的东西,我会在 Trilinos 中找到它,它可以与我的其余代码一起使用。- Trilinos 在他们的发展战略上要保守得多。PETSc 一直在重命名事物,每个版本都要求用户赶上重命名的函数、不同的库等。