我正在使用 PETSc 的示例代码的ex2.c工作。在第 65 行,代码指定:
MatMPIAIJSetPreallocation(A,5,PETSC_NULL,5,PETSC_NULL);
我查阅了 MatMPIAIJSetPreallocation() 的文档,并了解它的目的是以并行压缩的稀疏行格式为矩阵分配内存。也就是说,仅为每行中预期的最大非零数分配内存。根据this documentation,第二个论点是
d_nz - 局部子矩阵的对角线部分每行的非零数
我不太确定“本地子矩阵的对角线部分”是什么意思。此外,为什么每行的对角线 (d_nz) 和非对角线 (o_nz) 部分都需要 5 个值?据我了解,正在解决的 5 点模板拉普拉斯问题有一个线性方程组,每行最多需要 5 个非零条目。此处指定的 d_nz 和 o_nz 值似乎向我表明已为每行分配了 10 个值。我确定我在解释 d_nz 和 o_nz 时遗漏了一些东西。