Implements a correction that is sometimes useful to improve the convergence rate of Picard iteration


#include "petscsnes.h" 
PetscErrorCode SNESLineSearchPreCheckPicard(SNESLineSearch linesearch,Vec X,Vec Y,PetscBool *changed,void *ctx)
Logically Collective on SNESLineSearch

Input Arguments

linesearch - linesearch context
X - base state for this step
Y - initial correction
ctx - context for this function

Output Arguments

Y - correction, possibly modified
changed - flag indicating that Y was modified

Options Database Key

-snes_linesearch_precheck_picard - activate this routine
-snes_linesearch_precheck_picard_angle - angle

Level: advanced


This function should be passed to SNESLineSearchSetPreCheck()

The justification for this method involves the linear convergence of a Picard iteration so the Picard linearization should be provided in place of the "Jacobian". This correction is generally not useful when using a Newton linearization.


Hindmarsh and Payne (1996) Time step limits for stable solutions of the ice sheet equation, Annals of Glaciology.

See Also

SNESGetLineSearch(), SNESLineSearchSetPreCheck()