简介
我正在Fortran中开发一个代码,通过线性运算符的预处理来解决MHD问题。要反转的稀疏矩阵可以被认为是以下分层结构的矩阵。原始矩阵(例如,A_1)是块的带矩阵。 A_1的每个块是具有相同结构的稀疏矩阵(例如,A_2)(即块带状矩阵)。 A_2的每个块再次是具有相同稀疏结构A_3的块带状矩阵。最后,A_3的每个块是5×5的密集矩阵,A_4。我发现这种分层表示非常便于初始化矩阵的元素。
问题
我想知道是否存在允许处理这种结构并以标准稀疏矩阵格式(CSR,CSC,BSR,......)之一转换它的库(在Fortran中),因为稀疏BLAS或MKL Pardiso将用来反转它。让我强调,我的意图是仅使用层次结构来初始化矩阵的元素。当然,可以忽略层次结构,并且可以用CSR格式对矩阵进行硬编码,但我发现这实现和测试太耗时。
评论
我不希望线性求解器使用层次结构,尽管在S. Pissanetsky“稀疏矩阵技术”,1984,Academmic Press,第27页(可在线here)这样的存储方案提到了,即“超矩阵”和“超级”存储方案,并用于高斯消除。我还没有找到这些方案的可用实现。
块压缩稀疏行(BSR)格式(由MKL支持)可用于处理矩阵的两个级别,A_3(稀疏)+ A_4(密集),而不是更多。