据我所知,美国能源部的两个大型通用计算科学软件框架是 PETSc和Trilinos。乍一看,它们看起来很相似,只是语言上的差异(C与C ++)不同。这两个框架之间的主要区别是什么?应该选择哪些因素来影响一个因素?(忽略机构偏见和现有基础结构。)
据我所知,美国能源部的两个大型通用计算科学软件框架是 PETSc和Trilinos。乍一看,它们看起来很相似,只是语言上的差异(C与C ++)不同。这两个框架之间的主要区别是什么?应该选择哪些因素来影响一个因素?(忽略机构偏见和现有基础结构。)
Answers:
在文化,编码风格和功能上存在巨大差异。根本的区别可能是Trilinos尝试提供解决FEM问题的环境,而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一直在重命名事物,每个版本都要求用户跟上重命名的函数,不同的库等。
PETSc可以很容易地与Fortran一起使用,并且文档/示例相当好。
在我看来,Trilinos令人困惑(包括其所有子包和命名方案),并且对Fortran的支持参差不齐(至少当我几年前查看时)。
有两种与Fortran中的Trilinos进行交互的方法:(1)将原始数据传递到C ++包装器中,从而使您的[此类包装器存在多个包]都对Trilinos包进行了所有调用;或(2)使用了新的ForTrilinos接口,练习Fortran 2003的面向对象功能。ForTrilinos所需的大多数功能在大多数编译器中都可用。这些功能的编译器实现虽然有错误,但仍在迅速改进。ForTrilinos当前使用IBM和NAG编译器进行构建。Cray,Intel和Portland Group编译器的当前版本或即将发布的版本都名义上支持对错误修复的必要功能。即将发布的GCC 4.7.0版本将具有所有必需的功能,但只有一项,因此对编译器的广泛支持在不久的将来不会太久。