Barry, this helped a lot. I do multiple solves with the operator changing at each solve. Without forcing recomputing the preconditioner and setting explicitly KSPSetReusePreconditioner, I mostly get "PCSetUp(): Leaving PC with identical preconditioner since operator is unchanged" and a few times "PCSetUp(): Setting up PC with same nonzero pattern". Shouldn't I get "PCSetUp(): Setting up PC with same nonzero pattern" all the times since the operator keeps changing? I am solving with CG + MG with coarse operators computed via Galerkin process.
Michele On Thu, 2015-07-09 at 15:06 -0500, Barry Smith wrote: > Run with -info ; it prints lots of stuff but you can grep for PCSetUp and > you'll see a message such as > > Setting up PC for first time > > Leaving PC with identical preconditioner since operator is unchanged > > Setting up PC with different nonzero pattern\n");CHKERRQ(ierr); > > Setting up PC with same nonzero pattern > > or > > Leaving PC with identical preconditioner since reuse preconditioner is set > > > > > On Jul 9, 2015, at 2:45 PM, Michele Rosso <[email protected]> wrote: > > > > Barry, > > > > thanks you for your help. > > Is there a database options that allows me to check weather PC has been > > recomputed or kept the same? > > > > Thanks, > > Michele > > > > > > On Thu, 2015-07-09 at 14:43 -0500, Barry Smith wrote: > >> By default in the last two PETSc releases KSP automatically updates the > >> preconditioner whenever the matrix you set with KSPSetOperators() has been > >> changed. That is you have to do nothing and PETSc will recompute the > >> preconditioner as needed. If you wish to keep the same preconditioner even > >> though the matrix has changed then you can use > >> KSPSetReusePreconditioner(ksp,PETSC_TRUE) and it will keep using the same > >> preconditioner until you call KSPSetReusePreconditioner(ksp,PETSC_FALSE) > >> which will switch back to the default mode. > >> > >> You only need to destroy the KSP or call KSPReset() when you change the > >> size of the vectors or matrices. > >> > >> Barry > >> > >> > >> > On Jul 9, 2015, at 12:20 PM, Michele Rosso <[email protected]> wrote: > >> > > >> > Hi, > >> > > >> > I need to recompute the preconditioner every once in a while. So far I > >> > do this "manually", i.e. I destroy ksp and re-create and reset it > >> > whenever needed. > >> > I am wondering if there is a cleaner way of doing this via a PETSc > >> > function. I found KSPreset but there are no examples about it so I am > >> > not sure it is what I am looking for. > >> > Could you help please? > >> > > >> > > >> > Thanks, > >> > Michele > >> > >> > >> > > >
