NOX Development
|
Use NonlinearCG linesearch. More...
#include <NOX_LineSearch_NonlinearCG.H>
Public Member Functions | |
NonlinearCG (const Teuchos::RCP< NOX::GlobalData > &gd, Teuchos::ParameterList ¶ms) | |
Constructor. | |
~NonlinearCG () | |
Destructor. | |
bool | reset (const Teuchos::RCP< NOX::GlobalData > &gd, Teuchos::ParameterList ¶ms) |
bool | compute (NOX::Abstract::Group &newgrp, double &step, const NOX::Abstract::Vector &dir, const NOX::Solver::Generic &s) |
Perform a line search. | |
![]() | |
Generic () | |
Default constructor. | |
virtual | ~Generic () |
Destructor. | |
Use NonlinearCG linesearch.
This is a simple linesearch intended to be used with NOX::Direction::NonlinearCG, which provides search direction
where
where
Derivation / Theory:
This linesearch is derived by attempting to achieve in a single step, the following minimization:
where
An approximate solution to this equation can be obtained from a second-order expansion of
,
from which it immediately follows
Input Parameters
The NonlinearCG linesearch is selected using:
"Line Search"
"Method" = "%NonlinearCG" [required]
Currently, no adjustable parameters exist for this linesarch.
References
linesearch is adapted from ideas presented in Section 14.2 of:
|
virtual |
Perform a line search.
On input:
grp | The initial solution vector, ![]() |
dir | A vector of directions to be used in the line search, ![]() |
s | The nonlinear solver. |
On output:
step | The distance the direction was scaled, ![]() |
grp | The grp is updated with a new solution, ![]() |
Ideally,
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::Abstract::Group::getF(), NOX::Solver::Generic::getPreviousSolutionGroup(), NOX::Utils::InnerIteration, and NOX::Abstract::Vector::innerProduct().