trilinos介绍
trilinos 是Sandia国家实验室开发的一个用来解决大规模复杂的科学计算问题,与petsc (argonne国家实验室开发的解决大规模科学计算问题)功能类似.两者都是美国能源部的项目,同时项目都是开源.
下面是我在阅读trilinos文档和浏览官网的过程中,记录的一些笔记。
框架介绍
trilinos 是一个建立在packages之上的一个框架,作用的连接packages之间的相互调用.为何这么说呢,应该在trilinos中实现的每个功能都会以一个独立的packages包存在,每个包都是有一些小型的团队开发的,用来的解决特定的问题,同时不可避免的形成,每个包的结构和自身的文档都有各自的风格.各个packages之间相互集成调用才能发挥trilinos最大的作用.
trilinos 是一个大型的软件项目,里面包含超算50多个packages包,整套软件packages包涵盖了广泛的算法,可以用来解决大规模的,复杂的多物理工程和科学问题,以及大量改进科学计算软件开发的应用程序.充分使用和理解每个packages需要时间,每个packages都包括复杂的功能.
对应常见的packages介绍:
基本的线性代数库
- Epetra 核心的线性代数包.用于构建和操作分布式、连续的图,稀疏矩阵、向量和多维向量.
- EpetraExt 对Epetra包的扩展.
- Tpetra 下一代的模板化的Epetra,充分的利用了c++的高级功能.
- Jpetra Petra的java版本.
- Kokkos Trilinos的核心内核.
使用迭代求解时,需要使用预处理器来调整矩阵的性质,以便于更快的求解方程.
- AztecOO ILU型的预处理器
- IFPACK 分布式代数预处理器,其中包括域分解框架中的不完全分解和基于松弛的预处理器,与AztecOO是兼容的.
- ifpack2 包含了对于Tpetra包提供了模块化的线性大似乎对象的操作的预处理器,用于IFPACK的模板版替代品.
- ML 多级、分布式内存存储的代数预处理器,为分布式线性求解系统提供多级,多网格的预处理器,与AzteOO兼容. 是Sandia开发的多重网格预处理器(听说特别强).
- Teko 封闭的预处理器包,操作块运算符,主要是用来创建矩阵逆的运算符.
线性求解器
- Epetra 建立在blas和lapack之上的求解库
- Teuchos 建立在blas和lapack之上的求解库
- Pliris 面向对象的LU求解接口,并行的密集矩阵.
- AztecOO 预处理krylov子空间迭代法.
- Belos 下一代的线性迭代求解器,没有依赖任何的基本的线性代数库.
- Komplex 复杂的线性求解器包,通过等效的实际公式求解复数的线性方程系统.
- Amesos 直接求解器,支持第三方求解器(DSCPACK,SuperLU,SuperLU_Dist,UMFPACK),与Epetra兼容.
- Amesos2 模板化的Amesos.
- NOX 非线性求解器包,包括非线性问题的构造和求解的抽象和具体类的实现.
- LOCA 一个执行大规模应用的分叉分析的软件库,使用牛顿方法定位非线性问题的稳态解决方案.
- ROL 快速优化库,大规模优化的下一代的软件包,用于大规模工程应用中的优化设计,最优控制和反问题的解决方案.其他用途包括网格优化和图像处理,ROL通过一般的等式和不等式约束来解决非线性非凸优化问题,并且针对各种问题类型进行了有效的优化,其中无矩阵API支持直接使用应用程序数据结构和存储空间,线性求解器、非线性求解器和预处理器.
- MOOCHO 用于优化的多功能面向对象框架,目的是使用缩小空间连续二次规划(SQP)方法来解决大规模的等式、不等式非线性约束,非凸优化问题.
- Piro 尝试统一非线性求解器,时间积分,优化和UQ问题上的统一包.
- Rythmos 常微分方程和微分代数方程的瞬态积分器,支持显式,隐式,一步和多步的算法.
- TriKota 建立在Dakota(优化求解包,包含各种优化算法)框架之上.
- GloboPack 包含一组用于非线性求解器,优化求解器等.
- OptiPack 建立在Thyra之上的优化算法.
- Anasazi 一个可扩展且可操作的的大规模特征值算法框架,目的求解大规模特征值问题.
- Sacado 一个用于自动微分的c++程序.
- Stokhos 一个用于侵入随机Galerkin不确定性量化方法的软件包.
域分解
- Claps 是一个域分解预处理器和求解器的集合.
- Moertel 使用mortar方法提供二维和三维不合格网格的匹配问题.(翻译可能有误,不太懂)
在有限元软件中,使用并行技术就需要对模型进行分区操作,使得各个计算核负载要均衡.
- Isorropia 一个分区和负载平衡包,帮助并行执行设置过程中重新分配对象(图和网格),以实现更高效的计算.建立在Zoltan之上.
- Zoltan 用于动态的,非结构化和自适应的并行工具包,为各种应用提供负载平衡,包括有限元,矩阵运算,粒子运算,碰撞模拟等.同时提供并行图着色,矩阵排序,非结构化同学工具等功能.
- Thyra 抽象的线性求解器包.
- Pytrilinos trilinos的python接口.
- [CTrilinos] trilinos的c借口.
- ForTrilinos Trilinos的fortran接口.
- [WebTrilinos] (https://trilinos.org/packages/webtrilinos) 浏览器web接口.
- [Stratimikos] 用于Trilinos的线性求解器和预处理器接口.
- FEI 有限元组成的线性方程组的通用借口.
- [TrilinosCouplings] (https://trilinos.org/packages/trilinoscouplings) 包之间接口集合.
- Mesquite 应用各种节点移动算法来提高质量和适应的网格.
- PAMGEN 并行的生成六面体和死面向网格.