:orphan:
# SNESLineSearchApply
Computes the line-search update.
## Synopsis
```
#include "petscsnes.h"
PetscErrorCode SNESLineSearchApply(SNESLineSearch linesearch, Vec X, Vec F, PetscReal *fnorm, Vec Y)
```
Collective
## Input Parameters
- ***linesearch -*** The linesearch context
- ***Y -*** The search direction
## Input/Output Parameters
- ***X -*** The current solution, on output the new solution
- ***F -*** The current function, on output the new function
- ***fnorm -*** The current norm, on output the new function norm
## 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
`SNESLineSearch`, `SNESGetLineSearch()`, `SNESLineSearchCreate()`, `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
---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/snes/linesearch/interface/linesearch.c)
[Index of all SNES routines](index.md)
[Table of Contents for all manual pages](/manualpages/index.md)
[Index of all manual pages](/manualpages/singleindex.md)