Olek Niewiarowski <[email protected]> writes:

> Barry,
> Thank you for your help and detailed suggestions. I will try to implement 
> what you proposed and will follow-up with any questions. In the meantime, I 
> just want to make sure I understand the use of SNESSetPicard:
> r       - vector to store function value
> b       - function evaluation routine    - my F(u) function
> Amat    - matrix with which A(x) x - b(x) is to be computed  - a 
> MatCreateLRC() -- what's the best way of passing in scalar k?

Typically via the context argument, similar to any SNES example.

> Pmat    - matrix from which preconditioner is computed (usually the same as 
> Amat) - a regular Mat()
> J       - function to compute matrix value, see 
> SNESJacobianFunction<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/SNESJacobianFunction.html#SNESJacobianFunction>
>  for details on its calling sequence --  computes K + kaa'
>
> By the way, the manual page states "we do not recommend using this routine. 
> It is far better to provide the nonlinear function F() and some approximation 
> to the Jacobian and use an approximate Newton solver :-)"

Yep, this is mainly for when someone has legacy code to compute a matrix
as a nonlinear function of the state U, but not a matrix-free way to
compute a residual.  Implementing as Newton (with inexact
matrix/preconditioner) is more flexible and often enables faster
convergence.

Reply via email to