SNESLineSearchApply#

Computes the line-search update.

Synopsis#

#include "petscsnes.h" 
PetscErrorCode SNESLineSearchApply(SNESLineSearch linesearch, Vec X, Vec F, PetscReal *fnorm, Vec Y)

Collective

Input Parameter#

  • linesearch - The line search context

Input/Output Parameters#

  • X - The current solution, on output the new solution

  • F - The current function value, on output the new function value at the solution value X

  • fnorm - The current norm of F, on output the new norm of F

  • Y - The current search direction, on output the direction determined by the linesearch, i.e. Xnew = Xold - lambda*Y

Options Database Keys#

  • -snes_linesearch_type - basic (or equivalently none), bt, l2, cp, nleqerr, shell

  • -snes_linesearch_monitor [:filename] - Print progress of line searches

  • -snes_linesearch_damping - The linesearch damping parameter, default is 1.0 (no damping)

  • -snes_linesearch_norms - Turn on/off the linesearch norms computation (SNESLineSearchSetComputeNorms())

  • -snes_linesearch_keeplambda - Keep the previous search length as the initial guess

  • -snes_linesearch_max_it - The number of iterations for iterative line searches

Notes#

This is typically called from within a SNESSolve() implementation in order to help with convergence of the nonlinear method. Various SNES types use line searches in different ways, but the overarching theme is that a line search is used to determine an optimal damping parameter of a step at each iteration of the method. Each application of the line search may invoke SNESComputeFunction() several times, and therefore may be fairly expensive.

See Also#

SNES: Nonlinear Solvers, SNES, SNESLineSearch, SNESGetLineSearch(), SNESLineSearchCreate(), SNESLineSearchGetLambda(), SNESLineSearchPreCheck(), SNESLineSearchPostCheck(), SNESSolve(), SNESComputeFunction(), SNESLineSearchSetComputeNorms(), SNESLineSearchType, SNESLineSearchSetType()

Level#

intermediate

Location#

src/snes/linesearch/interface/linesearch.c

Implementations#

SNESLineSearchApply_NCGLinear() in src/snes/impls/ncg/snesncg.c
SNESLineSearchApply_Basic() in src/snes/linesearch/impls/basic/linesearchbasic.c
SNESLineSearchApply_BT() in src/snes/linesearch/impls/bt/linesearchbt.c
SNESLineSearchApply_CP() in src/snes/linesearch/impls/cp/linesearchcp.c
SNESLineSearchApply_L2() in src/snes/linesearch/impls/l2/linesearchl2.c
SNESLineSearchApply_NLEQERR() in src/snes/linesearch/impls/nleqerr/linesearchnleqerr.c
SNESLineSearchApply_Shell() in src/snes/linesearch/impls/shell/linesearchshell.c


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