<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div dir="ltr">When you use shell matrix, i.e., matrix-free, you cannot it as a preconditioner. Add option '-pc_type none'.
<div>Hong</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr">On Thu, Oct 18, 2018 at 10:57 AM Florian Lindner <<a href="mailto:mailinglists@xgm.de">mailinglists@xgm.de</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello,<br>
<br>
I try to use the KSP solver package together with a shell matrix:<br>
<br>
<br>
  MyContext mycontext; // an empty struct, not sure it it's needed?<br>
  Mat s;<br>
  ierr = MatCreateShell(PETSC_COMM_WORLD, size, size, PETSC_DECIDE, PETSC_DECIDE, &mycontext, &s);<br>
  ierr = MatShellSetOperation(s, MATOP_MULT, (void(*)(void))usermult); CHKERRQ(ierr);<br>
<br>
To simulate a meaningfull usermult, I use MatMult on an actual existing matrix of same dimensions:<br>
<br>
extern PetscErrorCode usermult(Mat m ,Vec x, Vec y)<br>
{<br>
  PetscErrorCode ierr = 0;<br>
  ierr = MatMult(matrix, x, y);<br>
  printf("Call\n");<br>
  return ierr;<br>
}<br>
<br>
Btw, what is the significance of the Mat m argument here?<br>
<br>
matrix is created like:<br>
<br>
  ierr = MatCreate(PETSC_COMM_WORLD, &matrix); CHKERRQ(ierr);<br>
  ierr = MatSetSizes(matrix, size, size, PETSC_DECIDE, PETSC_DECIDE); CHKERRQ(ierr);<br>
  ierr = MatSetFromOptions(matrix); CHKERRQ(ierr);<br>
  ierr = MatSetUp(matrix); CHKERRQ(ierr);<br>
<br>
<br>
  MatMult(s, b, x);<br>
<br>
works. The usermult function is called.<br>
<br>
But trying to use a KSP gives an error:<br>
<br>
  KSP solver;<br>
  KSPCreate(PETSC_COMM_WORLD, &solver);<br>
  KSPSetFromOptions(solver);<br>
  KSPSetOperators(solver, s, s);<br>
<br>
<br>
error:<br>
<br>
[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<br>
[0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/linearsolvertable.html" rel="noreferrer" target="_blank">
http://www.mcs.anl.gov/petsc/documentation/linearsolvertable.html</a> for possible LU and Cholesky solvers<br>
[0]PETSC ERROR: Could not locate a solver package. Perhaps you must ./configure with --download-<package><br>
[0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" rel="noreferrer" target="_blank">
http://www.mcs.anl.gov/petsc/documentation/faq.html</a> for trouble shooting.<br>
[0]PETSC ERROR: Petsc Release Version 3.9.3, unknown <br>
[0]PETSC ERROR: ./a.out on a arch-linux2-c-opt named asaru by lindnefn Thu Oct 18 17:39:52 2018<br>
[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<br>
[0]PETSC ERROR: #1 MatGetFactor() line 4328 in /home/lindnefn/software/petsc/src/mat/interface/matrix.c<br>
[0]PETSC ERROR: #2 PCSetUp_ILU() line 142 in /home/lindnefn/software/petsc/src/ksp/pc/impls/factor/ilu/ilu.c<br>
[0]PETSC ERROR: #3 PCSetUp() line 923 in /home/lindnefn/software/petsc/src/ksp/pc/interface/precon.c<br>
[0]PETSC ERROR: #4 KSPSetUp() line 381 in /home/lindnefn/software/petsc/src/ksp/ksp/interface/itfunc.c<br>
[0]PETSC ERROR: #5 KSPSolve() line 612 in /home/lindnefn/software/petsc/src/ksp/ksp/interface/itfunc.c<br>
<br>
Do I need to MatShellSetOperations additional operations? Like MATOP_ILUFACTOR? How can I know what operations to implement?<br>
<br>
Best Thanks,<br>
Florian<br>
<br>
<br>
</blockquote>
</div>
</body>
</html>