从输入文件到 LAPACK 的矩阵并再次反转到输出文件

Matrix from a input file to LAPACK and inverse to a output file again

我正在做一个 FEM 项目,我需要一个 Ku=f 的线性解。 我正在通过 LAPACK 求解器执行此操作。 您可能很熟悉,有时 K 矩阵会非常大 (30GB)。 它需要良好的 ram 才能以常规方式分配这样的矩阵。如果我可以将矩阵写入文件,我只需要你的帮助 你能否建议我将这样的矩阵从文件本身输入到 lapack 求解器并将输出输出到文件。

提前致谢。 马哈希.

30G对于计算服务器来说不算大。您可能需要升级您的服务器。

在硬件有限的情况下,是的,您可以将矩阵放入文件中,并使用相同的 LAPACK 例程来求解方程。该技术称为内存映射文件。它将一个文件的内容映射到一个大小相同的内存地址范围,而不分配物理内存。当你read/write数据from/to这个地址范围时,你实际上是read/write文件

https://en.wikipedia.org/wiki/Memory-mapped_file

在 linux 上,您可以使用 mmap() 来实现。

http://man7.org/linux/man-pages/man2/mmap.2.html

但是访问内存地址范围的速度和访问磁盘文件一样慢。

根据 FEM 代码中使用的形状函数的支持,矩阵 K 通常是 sparse:矩阵的大部分元素为空。因此,使用专用于稀疏矩阵的格式(例如 CSR)可以更有效地存储矩阵。不幸的是,LAPACK 几乎不支持此类矩阵,尽管它可以处理带状矩阵。

看看Eigen library or the PETSc library. These libraries provide interfaces to efficient solvers dedicated to sparse matrices. See there for PETSc. For instance, see Mumps or SuiteSparse