> 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
>> >> 
>> >> 
>> >> 
>> > 
>> 
>> 
>> 
> 

Reply via email to