[petsc-users] KSP and matrix-free matrix (shell)
Florian Lindner
mailinglists at xgm.de
Fri Oct 19 03:39:12 CDT 2018
Thanks for your help! Using -pc_type none makes it working so far.
> Where the hell is the variable "matrix"? Is it a global variable?? If yes - don't do that.
Yes, it's a global matrix and as I said, I just use it simulate a meaningful matrix-vector product in my 30 lines test program.
Best Thanks,
Florian
Am 18.10.18 um 17:56 schrieb Florian Lindner:
> 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