我正在使用 C 编写有限差分法程序。刚度矩阵是对称的和带状的。对于它的存储,我想使用稀疏对角存储格式。
有人可以告诉我,哪些求解器可以使用对角存储格式?Intel MKL 的 Paradiso 只使用 CRS 格式,SparseLib 没有,Spooles 似乎也 =(
谢谢你。
我正在使用 C 编写有限差分法程序。刚度矩阵是对称的和带状的。对于它的存储,我想使用稀疏对角存储格式。
有人可以告诉我,哪些求解器可以使用对角存储格式?Intel MKL 的 Paradiso 只使用 CRS 格式,SparseLib 没有,Spooles 似乎也 =(
谢谢你。
令人惊讶的是,Google 上很少提及“稀疏对角存储”格式。这是我发现的一些幻灯片的 PDF ,其中简要概述了 Compressed Row、Jagged Diagonal 和 Sparse Diagonal 格式。大多数其他链接指向一篇论文,KK Yalamanchili 和 SC Anand在有限元分析中使用稀疏对角存储。
所以这不是一个好消息,真的:这表明稀疏对角存储还没有被广泛采用。我将冒险猜测:该格式对于迭代方法可能比直接(因式分解)方法更有用。对于这些格式中的任何一种,实现稀疏矩阵向量乘法都相对简单,因此对于迭代方法,您可以随意存储(至少在您需要对预处理器进行不完全分解之前!)
如果您的矩阵具有相对密集的对角带,那么您可能需要考虑 LAPACK 的带状求解器之一。这些存储沿矩阵行的对角线,其中 B 是矩阵的带宽。(编辑:如果矩阵是对称的/厄米特矩阵,则为 (B+1)/2 行)。但是如果你真的需要一个稀疏直接求解器,那么看起来你要么必须实现自己的,要么转换为更常见的存储格式。(如果您决定自己实现,也许您会很快了解为什么 SDS 不适合 :P)
编辑:Yalamanchili-Anand 论文的摘要表明他们专注于向量矩阵乘法;即迭代方法。
找到=),但没试过。
在英特尔 MKL Sparse BLAS 2 级和 3 级例程中。
mkl_?diatrsv 具有简化接口的三角形求解器,用于对角线格式的稀疏矩阵,具有从一开始的索引。
所用对角线格式的说明在页面中间 http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-9FCEB1C4-670D-4738-81D2-F378013412B0.htm