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