> On Jul 9, 2015, at 4:45 PM, Michele Rosso <[email protected]> wrote: > > 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?
The PCSetUp() routine (slightly confusingly) is actually called for every linear iteration (though, of course, it does nothing within a single linear solve). This is just the way the logic of the KSP implementation currently is. Barry > 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 >> >> >> >> >> >> >> > >> >> >> >
