我正在努力优化用 Fortran 编写的流体流动和传热分析程序。当我尝试运行越来越大的网格模拟时,我遇到了内存限制问题。不过,网格并不是那么大。运行典型的 CFD 代码只需 500,000 个单元和小花生。即使我为我的问题请求 80 GB 内存,它也会由于虚拟内存不足而崩溃。
我对哪些数组占用了所有内存有一些猜测。特别是分配给(28801,345600)。如果我的计算有误,请纠正我,但双精度数组是每个值 8 位。那么这个数组的大小是 28801*345600*8=79.6 GB?
现在,我认为这个数组的大部分最终在整个计算过程中都是零,所以我们不需要存储它们。我想我可以将解决方案算法更改为仅将非零值存储在一个更小的数组中。但是,我想确定我正在查看正确的数组以减小大小。那么首先,我是否正确计算了上面的数组大小?其次,有没有办法让 Fortran 在运行时以 MB 或 GB 为单位显示数组大小?除了打印出内存最密集的数组之外,我还想看看代码的内存需求在运行时是如何变化的。