问题
在有限元代码的情况下,我有许多小的(30x30 阶)矩阵逆(或 LU 分解),每个有限元一个。这些矩阵逆永远不会改变,并且必须在无矩阵求解器的上下文中重复应用于向量。
存储所有这些逆是代码的内存瓶颈,因为它们必须应用于网格中的每个有限元。另一方面,“即时”计算逆运算(使用 LAPACK 或 Numpy)是不切实际的,因为这些逆运算必须在稀疏迭代求解的每次迭代中应用,因此每个时间步都需要
(CG 迭代次数)*(元素数量)*(反演时间)
这太昂贵了,即使对于远小于我感兴趣的问题的问题也是如此。
(可能的)解决方案
我正在考虑执行一次矩阵求逆或 LU 分解,然后将它们存储到磁盘,而不是将它们保存在内存中。然后想法是一次一个或一个块地将逆向读入内存,并应用它们,避免重复的倒置。但我知道从磁盘读取可能很昂贵。
有没有好的或可接受的方法来做到这一点?我看过的大多数核心论文都在考虑直接解决或更复杂的问题,所以我也希望能提供任何指向相关参考的指针。
编辑:代码是 Python 和 C 的混合体,我发现一些帖子表明 HDF5 库可能是滚动我自己的缓存的一个很好的替代方案,如上所述。