Skip to main content
`Ctrl`+`K`

# SNESLineSearchPreCheckPicard

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

## Synopsis

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

Logically Collective

## Input Parameters

- linesearch - the line search context

- X - base state for this step

- ctx - context for this function

## Input/Output Parameter

- Y - correction, possibly modified

## Output Parameter

- changed - flag indicating that `Y` was modified

## Options Database Keys

- -snes_linesearch_precheck_picard - activate this routine

- -snes_linesearch_precheck_picard_angle - angle

## Notes

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” [HP96]. This correction is generally not useful when using a Newton linearization.

## Developer Note

The use of `PetscObjectGetState()` would eliminate the need for the `changed` argument to be provided

## References

[HP96] (1,2)

Richard CA Hindmarsh and Antony J Payne. Time-step limits for stable solutions of the ice-sheet equation. Annals of Glaciology, 23:74–85, 1996.

## See Also

SNES: Nonlinear Solvers, `SNES`, `SNESLineSearch`, `SNESSetPicard()`, `SNESGetLineSearch()`, `SNESLineSearchSetPreCheck()`, `SNESLineSearchSetPostCheck()`

## Level

advanced

## Location

src/snes/linesearch/interface/linesearch.c

## Examples

src/snes/tutorials/ex15.c

Index of all SNES routines
Table of Contents for all manual pages
Index of all manual pages