我正在尝试使用 UMFPACK 和与 C++ 的增强数值绑定来求解 3D 热扩散的方程组( A x = b)(即每个方程最多有 7 个项,不包括常数“b”项)。
例如:
namespace umf = boost::numeric::bindings::umfpack;
umf::umf_solve(A,x,b);
我可以使用大约 200MB 的内存为 200K+ 组方程填充A矩阵和“b”向量。然后在 UMFPACK 例程中,我的程序使用的内存跃升至 2.3GB+。
此外,在约 211K 方程以上的某个点,例程将“x”的所有零传回,而不会引发错误。我认为这与某种内存限制有关。
这在我测试过的每台机器上都是一样的(我的 MacBook、我的 Ubuntu VM 和 Red Hat 超级计算机上的一个节点)。
我的问题是:
- 为什么 UMFPACK 返回零而没有错误?
- 为什么 UMFPACK 需要这么多内存?
- 我有哪些选项可以为更大的方程组求解系统?