# 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
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/linesearch/interface/linesearch.c.html#SNESLineSearchApply">src/snes/linesearch/interface/linesearch.c</A>

## Implementations

<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/impls/ncg/snesncg.c.html#SNESLineSearchApply_NCGLinear">SNESLineSearchApply_NCGLinear in src/snes/impls/ncg/snesncg.c</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/linesearch/impls/basic/linesearchbasic.c.html#SNESLineSearchApply_Basic">SNESLineSearchApply_Basic in src/snes/linesearch/impls/basic/linesearchbasic.c</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/linesearch/impls/bt/linesearchbt.c.html#SNESLineSearchApply_BT">SNESLineSearchApply_BT in src/snes/linesearch/impls/bt/linesearchbt.c</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/linesearch/impls/cp/linesearchcp.c.html#SNESLineSearchApply_CP">SNESLineSearchApply_CP in src/snes/linesearch/impls/cp/linesearchcp.c</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/linesearch/impls/l2/linesearchl2.c.html#SNESLineSearchApply_L2">SNESLineSearchApply_L2 in src/snes/linesearch/impls/l2/linesearchl2.c</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/linesearch/impls/nleqerr/linesearchnleqerr.c.html#SNESLineSearchApply_NLEQERR">SNESLineSearchApply_NLEQERR in src/snes/linesearch/impls/nleqerr/linesearchnleqerr.c</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/linesearch/impls/shell/linesearchshell.c.html#SNESLineSearchApply_Shell">SNESLineSearchApply_Shell in src/snes/linesearch/impls/shell/linesearchshell.c</A><BR>


---
[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](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
