[petsc-users] KSP and matrix-free matrix (shell)
Florian Lindner
mailinglists at xgm.de
Thu Oct 18 10:56:57 CDT 2018
Hello,
I try to use the KSP solver package together with a shell matrix:
MyContext mycontext; // an empty struct, not sure it it's needed?
Mat s;
ierr = MatCreateShell(PETSC_COMM_WORLD, size, size, PETSC_DECIDE, PETSC_DECIDE, &mycontext, &s);
ierr = MatShellSetOperation(s, MATOP_MULT, (void(*)(void))usermult); CHKERRQ(ierr);
To simulate a meaningfull usermult, I use MatMult on an actual existing matrix of same dimensions:
extern PetscErrorCode usermult(Mat m ,Vec x, Vec y)
{
PetscErrorCode ierr = 0;
ierr = MatMult(matrix, x, y);
printf("Call\n");
return ierr;
}
Btw, what is the significance of the Mat m argument here?
matrix is created like:
ierr = MatCreate(PETSC_COMM_WORLD, &matrix); CHKERRQ(ierr);
ierr = MatSetSizes(matrix, size, size, PETSC_DECIDE, PETSC_DECIDE); CHKERRQ(ierr);
ierr = MatSetFromOptions(matrix); CHKERRQ(ierr);
ierr = MatSetUp(matrix); CHKERRQ(ierr);
MatMult(s, b, x);
works. The usermult function is called.
But trying to use a KSP gives an error:
KSP solver;
KSPCreate(PETSC_COMM_WORLD, &solver);
KSPSetFromOptions(solver);
KSPSetOperators(solver, s, s);
error:
[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
[0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/linearsolvertable.html for possible LU and Cholesky solvers
[0]PETSC ERROR: Could not locate a solver package. Perhaps you must ./configure with --download-<package>
[0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
[0]PETSC ERROR: Petsc Release Version 3.9.3, unknown
[0]PETSC ERROR: ./a.out on a arch-linux2-c-opt named asaru by lindnefn Thu Oct 18 17:39:52 2018
[0]PETSC ERROR: Configure options --with-debugging=0 COPTFLAGS="-O3 -march=native -mtune=native" CXXOPTFLAGS="-O3 -march=native -mtune=native" FOPTFLAGS="-O3 -march=native -mtune=native" --download-petsc4py --download-mpi4py --with-mpi-dir=/opt/mpich
[0]PETSC ERROR: #1 MatGetFactor() line 4328 in /home/lindnefn/software/petsc/src/mat/interface/matrix.c
[0]PETSC ERROR: #2 PCSetUp_ILU() line 142 in /home/lindnefn/software/petsc/src/ksp/pc/impls/factor/ilu/ilu.c
[0]PETSC ERROR: #3 PCSetUp() line 923 in /home/lindnefn/software/petsc/src/ksp/pc/interface/precon.c
[0]PETSC ERROR: #4 KSPSetUp() line 381 in /home/lindnefn/software/petsc/src/ksp/ksp/interface/itfunc.c
[0]PETSC ERROR: #5 KSPSolve() line 612 in /home/lindnefn/software/petsc/src/ksp/ksp/interface/itfunc.c
Do I need to MatShellSetOperations additional operations? Like MATOP_ILUFACTOR? How can I know what operations to implement?
Best Thanks,
Florian
More information about the petsc-users
mailing list