NOX Development
Public Member Functions
NOX::LineSearch::Backtrack Class Reference

Generic backtracking line search. More...

#include <NOX_LineSearch_Backtrack.H>

Inheritance diagram for NOX::LineSearch::Backtrack:
Inheritance graph
[legend]
Collaboration diagram for NOX::LineSearch::Backtrack:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 Backtrack (const Teuchos::RCP< NOX::GlobalData > &gd, Teuchos::ParameterList &params)
 Constructor.
 ~Backtrack ()
 Destructor.
bool reset (const Teuchos::RCP< NOX::GlobalData > &gd, Teuchos::ParameterList &params)
bool compute (NOX::Abstract::Group &newgrp, double &step, const NOX::Abstract::Vector &dir, const NOX::Solver::Generic &s)
 Perform a line search.

Detailed Description

Generic backtracking line search.

This line search starts with the step length defined by "Default Step". It checks to see if the norm of the right hand side (RHS) has been reduced. If so, it exits successfully. Otherwise, it reduces the step length by the reduction factor (defaults to one-half). It continues to repeat this procedure until it either finds a reduction in the norm of the RHS or the step is less than that specified by "Minimum Step". In the later case, the line search has failed, and we take the step defined by "Recovery Step".

This line search can be called via NOX::LineSearch::Manager.

The following parameters can be specified for this line search in the "Backtrack" sublist of the "Line Search" sublist.


Member Function Documentation

bool NOX::LineSearch::Backtrack::compute ( NOX::Abstract::Group grp,
double &  step,
const NOX::Abstract::Vector dir,
const NOX::Solver::Generic s 
) [virtual]

Perform a line search.

On input:

Parameters:
grpThe initial solution vector, $x_{\rm old}$.
dirA vector of directions to be used in the line search, $d$.
sThe nonlinear solver.

On output:

Parameters:
stepThe distance the direction was scaled, $ \lambda $.
grpThe grp is updated with a new solution, $ x_{\rm new} $, resulting from the linesearch. Normally, for a single direction line search, this is computed as:

\[ x_{\rm new} = x_{\rm old} + \lambda d. \]

Ideally, $ \|F(x_{\rm new})\| < \|F(x_{\rm old})\| $ (e.g the final direction is a descent direction).

Note that the dir object is a std::vector. For typical line searches as described in the above equation, this vector is of size one. We have used a std::vector to allow for special cases of multi-directional line searches such as the Bader/Schnabel curvillinear line search.

Return value is true for a successful line search computation.

Implements NOX::LineSearch::Generic.

References NOX::Abstract::Group::computeF(), NOX::Abstract::Group::computeX(), NOX::Utils::fill(), NOX::StatusTest::FiniteValue::finiteNumberTest(), NOX::Solver::Generic::getPreviousSolutionGroup(), NOX::Utils::InnerIteration, and NOX::Abstract::Group::Ok.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends