我的程序加载了一个并行的 PETSc 矩阵在几个 MPI 进程上,每个进程都有一个块子矩阵.
我想检索本地子矩阵, 对应于当前排名的那个。
我不想改变矩阵,我只需要阅读它并计算一些信息(行列式、特征值等)。
int main(int argc, char **args) {
PetscErrorCode ierr;
PetscViewer fd;
Mat A;
ierr = SlepcInitialize(&argc, &args, (char *) nullptr, nullptr);
if (ierr) return ierr;
// Open file
PetscViewerBinaryOpen(PETSC_COMM_WORLD, "matrix.mat", FILE_MODE_READ, &fd);
// Load into Petsc object
MatCreate(PETSC_COMM_WORLD, &A);
MatSetType(A, MATMPIBAIJ);
MatLoad(A, fd);
PetscViewerDestroy(&fd);
// Here I would like to manipulate the local submatrix of A
// For example to show information with MatView
// Clear workspace
MatDestroy(&A);
SlepcFinalize();
return 0;
}
检索当前等级的本地子矩阵的正确方法是什么?
注意:我SlepcInitialize使用 SLEPc 是为了在之后使用 SLEPc 作为特征值。
编辑 :
我有指向的指针VecGetArray,我认为我需要矩阵的等价物,但MatGetArray不应该根据文档(和另一篇文章)使用