我正在研究一个FEM项目,我需要一个Ku = f的线性解决方案。 我是通过LAPACK解算器做的。 您可能已经熟悉,有时K矩阵将是如此巨大(30GB)。 它需要以常规方式对malloc这样的矩阵进行良好的推理。如果我可以将矩阵写入文件,我只需要你的帮助 你能建议我从文件本身输入这样一个矩阵到lapack求解器并输出到文件。
提前致谢。 Maharshi。
答案 0 :(得分:0)
30G对于计算服务器而言并不大。您可能需要升级服务器。
使用有限的硬件,是的,您可以将矩阵放在文件中,并使用相同的LAPACK例程来解决方程式。该技术称为内存映射文件。它将文件的内容映射到具有相同大小的内存地址范围,而不分配物理内存。从/向此地址范围读取/写入数据时,实际上是读/写文件。
https://en.wikipedia.org/wiki/Memory-mapped_file
在Linux上,您可以使用mmap()
来实现此目的。
http://man7.org/linux/man-pages/man2/mmap.2.html
但访问内存地址范围的速度与访问磁盘文件一样慢。
答案 1 :(得分:0)
根据FEM代码中使用的形状函数的支持,矩阵K
通常为sparse:矩阵的大多数元素都为空。因此,使用专用于稀疏矩阵(例如CSR)的格式来存储矩阵更有效。遗憾的是,LAPACK几乎不支持这种矩阵,尽管它可以处理带状矩阵。
查看Eigen library或PETSc library。这些库为专用于稀疏矩阵的高效求解器提供接口。有关PETSc,请参阅there。例如,请参阅Mumps或SuiteSparse。