1

我是使用 PETSc 的初学者,我正在尝试开发一个函数来反转 PETSc 矩阵。但是,由于我使用的是mpiaij矩阵,所以 PETSc 不支持这种类型。

[0]PETSC ERROR: No support for this operation for this object type
[0]PETSC ERROR: Mat type mpiaij

在这个答案中发现了一个类似的问题,但是在下载和配置 SuperLU 包之后,没有任何效果。我认为我们需要更改原始MatLUFactor文件,但 SuperLU 中没有建立文档。我曾尝试PCFactorSetMatSolverType在 PETSc 中配置 SuperLU,但它不起作用。

非常感谢你的帮助!

这是我的代码:

void inv_PETSC_matrix(Mat& matrix,  Mat &inv_matrix)
{

  Mat             Ones;
  PetscInt        petsc_m=0, petsc_n=0,i,j;
  PetscErrorCode  ierr=0;
  PetscScalar     v = 1.0;
  ierr = MatGetSize(matrix, &petsc_m, &petsc_n);

    //Create a Ones matrix
  MatCreateSeqDense(PETSC_COMM_SELF,petsc_m,petsc_n,NULL,&Ones);
    //Create a Solution matrix
  MatCreateSeqDense(PETSC_COMM_SELF,petsc_m,petsc_n,NULL,&inv_matrix);

    //Factorisation LU
  MatLUFactor(matrix,NULL,NULL,NULL);

    //Affect value to the matrix Ones
  for(i = 0; i<petsc_m; i++)
    for(j=0; j<petsc_n; j++)
      MatSetValues(Ones,1,&i,1,&j,&v,INSERT_VALUES);

      //Inversion
  MatMatSolve(matrix, Ones, inv_matrix);
}
4

0 回答 0