我是使用 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);
}