[petsc-dev] ASPIN and SNESSetType

Barry Smith bsmith at mcs.anl.gov
Thu Oct 1 14:28:07 CDT 2015


  Matt is at least partially right, having this as a SNESType is questionable. It is actually a specific nonlinear preconditioner PLUS a specific set of options for the NewtonLS SNES method. I also understand why Peter did it this way because there is no clean "other way" to provide this functionality that is not ad hoc. 

  I think the correct short term fix is to add a SNESDestroy_ASPIN() that does delete the npc and then calls the SNESDestroy_NewtonLS()

  Stefano,

    Are you willing to make a pull request or patch to do this?

   Thanks for letting us know about this problem

  Barry

  
> On Oct 1, 2015, at 12:43 PM, Matthew Knepley <knepley at gmail.com> wrote:
> 
> On Thu, Oct 1, 2015 at 7:42 AM, Stefano Zampini <stefano.zampini at gmail.com> wrote:
> I just noticed that the behaviour of a code like this
> 
> SNESSetType(snes,SNESASPIN)
> SNESSetFromOptions(snes)
> 
> is not the same as 
> 
> SNESSetType(snes,SNESNEWTONLS)
> SNESSetFromOptions(snes)
> 
> when -snes_type newtonls is specified at command line. In both cases, the snes will be of type SNESNEWTONLS, but in the first case, the snes object will also have a nonlinear preconditioner embedded in, since SNESASPIN creates snes->pc, and there's no SNESDestroy_ASPIN.
> 
> What is the correct approach to fix this? Should the nonlinear preconditioner be destroyed by the SNESSetType interface or by the specific implementation of ASPIN?
> 
> I wish Peter had not done it this way. His reason was that a special Jacobian action can be defined for
> Newton -L NASM, but we should just do this with a flag rather than a new SNES type.
> 
>    Matt
>  
> 
> -- 
> Stefano
> 
> 
> 
> -- 
> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
> -- Norbert Wiener




More information about the petsc-dev mailing list