[petsc-users] Implementing the Sherman Morisson formula (low rank update) in petsc4py and FEniCS?

Smith, Barry F. bsmith at mcs.anl.gov
Mon Feb 10 13:11:29 CST 2020


  Note that you can add -snes_fd_operator and get Newton's method with a preconditioner built from the Picard matrix.

   Barry


> On Feb 10, 2020, at 11:16 AM, Jed Brown <jed at jedbrown.org> wrote:
> 
> Olek Niewiarowski <aan2 at princeton.edu> 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.



More information about the petsc-users mailing list