NOX::Solver::TensorBased Class Reference

Nonlinear solver based on a rank-1 tensor method. More...

#include <NOX_Solver_TensorBased.H>

Inheritance diagram for NOX::Solver::TensorBased:

[legend]
Collaboration diagram for NOX::Solver::TensorBased:
[legend]
List of all members.

Public Member Functions

 TensorBased (NOX::Abstract::Group &grp, NOX::StatusTest::Generic &tests, NOX::Parameter::List &params)
 Constructor.
virtual ~TensorBased ()
 Destructor.
virtual bool reset (NOX::Abstract::Group &grp, NOX::StatusTest::Generic &tests, NOX::Parameter::List &params)
 Reset the nonlinear solver for a new solve.
virtual bool reset (NOX::Abstract::Group &xgrp, NOX::StatusTest::Generic &tests)
 A soft reset of the nonlinear solver for a new problem.
virtual NOX::StatusTest::StatusType getStatus ()
 Check current convergence and failure status.
virtual NOX::StatusTest::StatusType iterate ()
 Do one nonlinear method iteration and return status.
virtual NOX::StatusTest::StatusType solve ()
 Solve the nonlinear problem and return final status.
virtual const NOX::Abstract::GroupgetSolutionGroup () const
 Return a reference to the current solution group.
virtual const NOX::Abstract::GroupgetPreviousSolutionGroup () const
 Return a reference to the previous solution group.
virtual int getNumIterations () const
 Get number of iterations.
virtual const NOX::Parameter::ListgetParameterList () const
 Return a refernece to the solver parameters.

Protected Types

enum  StepType { TensorStep, NewtonStep }
 Types of steps.
enum  LineSearchType {
  Curvilinear, Standard, Dual, FullStep,
  Newton
}
 Enumerated list for each type of line search.
enum  ConvergenceCriteriaType { ArmijoGoldstein, AredPred, None }
 Algorithms used to determine convergence of the line search. More...
enum  LambdaSelectionType { Halving, Quadratic }
 Types of lambda selection.
enum  RecoveryStepType { Constant, LastComputedStep }
 Type of recovery step to use. More...

Protected Member Functions

virtual void init ()
 Print out initialization information.
virtual void printUpdate ()
 Prints the current iteration information.
bool computeTensorDirection (NOX::Abstract::Group &soln, const NOX::Solver::Generic &solver)
 Subroutine for computing the tensor and Newton directions.
double calculateBeta (double qa, double qb, double qc, double &qval, double &lambdaBar, double lambda=1.0) const
 Subroutine for calculating beta.
bool computeCurvilinearStep (NOX::Abstract::Vector &dir, const NOX::Abstract::Group &soln, const NOX::Solver::Generic &s, double &lambda)
 Subroutine for computing the curvilinear step.
bool implementGlobalStrategy (NOX::Abstract::Group &newGrp, double &step, const NOX::Solver::Generic &s)
 Subroutine for executing the tensor linesearch.
bool performLinesearch (NOX::Abstract::Group &newsoln, double &step, const NOX::Abstract::Vector &lsDir, const NOX::Solver::Generic &s)
 Performs a standard tensor linesearch (tensor or Newton direction).
double getNormModelResidual (const NOX::Abstract::Vector &dir, const NOX::Abstract::Group &soln, bool isTensorModel) const
 Compute the residual norm of the local model.
void printDirectionInfo (char *dirName, const NOX::Abstract::Vector &dir, const NOX::Abstract::Group &soln, bool isTensorModel) const
 Print pertinent information about the direction.
double getDirectionalDerivative (const NOX::Abstract::Vector &dir, const NOX::Abstract::Group &soln) const
 Calculate the directional derivative.
double selectLambda (double newf, double oldf, double oldfprime, double lambda)
 Select lambda for linesearch (quadratic or halving).
void throwError (const string &functionName, const string &errorMsg) const
 Throw an error with a method's name and error message.

Protected Attributes

NOX::Abstract::GroupsolnPtr
 Current solution.
NOX::Abstract::GroupoldSolnPtr
 Previous solution pointer.
NOX::Abstract::GroupoldSoln
 Previous solution reference.
NOX::Abstract::VectornewtonVecPtr
 Current Newton direction (pointer).
NOX::Abstract::VectornewtonVec
 Current Newton direction (reference).
NOX::Abstract::VectortensorVecPtr
 Current tensor direction (pointer).
NOX::Abstract::VectortensorVec
 Current tensor direction (reference).
NOX::Abstract::VectoraVecPtr
 Current tensor term vector (pointer).
NOX::Abstract::VectoraVec
 Current tensor term vector (reference).
NOX::Abstract::VectorsVecPtr
 Vector to previous point (pointer).
NOX::Abstract::VectorsVec
 Vector to previous point (reference).
NOX::Abstract::VectortmpVecPtr
 Working vector (pointer).
NOX::Abstract::VectortmpVec
 Working vector (reference).
NOX::Abstract::VectorresidualVecPtr
 Residual vector (pointer).
NOX::Abstract::VectorresidualVec
 Working vector (reference).
NOX::StatusTest::GenerictestPtr
 Stopping test.
NOX::Parameter::ListparamsPtr
 Input parameters.
NOX::Parameter::ListlinearParamsPtr
 Parameters for the Linear Solver of the local model.
NOX::Utils utils
 Printing Utils.
double step
 Current step.
double beta
 Value of sc'*dt.
int nIter
 Number of nonlinear iterations.
NOX::StatusTest::StatusType status
 Status of nonlinear solver.
StepType requestedBaseStep
 Flag for the base direction to compute after the first iteration.
LineSearchType lsType
 Choice of line search.
ConvergenceCriteriaType convCriteria
 Choice of convergence criteria (currently unused).
LambdaSelectionType lambdaSelection
 Flag for lambda selection (Halving/Quadratic).
RecoveryStepType recoveryStepType
 Choice of the recovery step type; uses "Recovery Step Type" parameter.
bool useModifiedMethod
 Flag for using modifications that force quadratic to have real root.
bool isNewtonDirection
 Flag for Newton direction.
bool doRescue
 Flag for rescuing Linear Solver from a bad solve.
double minStep
 Minimum step length (i.e., when we give up).
double defaultStep
 Default step.
double recoveryStep
 Default step for linesearch failure.
int maxIters
 Maximum iterations.
double alpha
 Scaling factor for the Armijo-Goldstein condition.
double sTinvJF
 Value of s'*inv(J)*F.
double sTinvJa
 Value of s'*inv(J)*a.
NOX::LineSearch::Utils::Printing print
 Common line search printing utilities.
NOX::LineSearch::Utils::Counters counter
 Common common counters for line searches.
NOX::LineSearch::Utils::Slope slopeObj
 Common slope calculations for line searches.
int numJvMults
 Counter for number of Jacobian-vector products.
int numJ2vMults
 Counter for number of "double" Jacobian-vector products.
NOX::Solver::PrePostOperator prePostOperator
 Pointer to a user defined NOX::Abstract::PrePostOperator object.

Detailed Description

Nonlinear solver based on a rank-1 tensor method.

Solves $F(x)=0$ using a rank-1 tensor method and a linesearch globalization.

At the kth nonlinear iteration, the solver does the following:

The solver iterates until the status tests (see NOX::StatusTest) determine either failure or convergence.

Input Parameters

To use this solver, set the "Nonlinear Solver" parameter to be "Tensor Based". Then, specify the following sublists with the appropriate parameters as indicated below.

Output Parameters

Every time solve() is called, a sublist for output parameters called "Output" will be created and will contain the following parameters:

References

Author:
Brett Bader (SNL 9233)


Member Enumeration Documentation

enum NOX::Solver::TensorBased::ConvergenceCriteriaType [protected]
 

Algorithms used to determine convergence of the line search.

Enumeration values:
ArmijoGoldstein  Sufficient decrease condition.
AredPred  Ared/Pred condition.
None  Just accept the first step.

enum NOX::Solver::TensorBased::RecoveryStepType [protected]
 

Type of recovery step to use.

Enumeration values:
Constant  Use a constant value.
LastComputedStep  Use the last value computed in the line search algorithm.


Constructor & Destructor Documentation

NOX::Solver::TensorBased::TensorBased NOX::Abstract::Group grp,
NOX::StatusTest::Generic tests,
NOX::Parameter::List params
 

Constructor.

See reset() for description.


Member Function Documentation

bool NOX::Solver::TensorBased::reset NOX::Abstract::Group xgrp,
NOX::StatusTest::Generic tests
[virtual]
 

A soft reset of the nonlinear solver for a new problem.

This is a light-weight version of reset that takes no parameter list. Therefore, this reset only resets counters, the initial guess (contained in the grp argument) and new status tests (contained in the tests argument).

This reset allows problems to bypass the potentially time consuming parsing of the parameter lists.

Implements NOX::Solver::Generic.

bool NOX::Solver::TensorBased::reset NOX::Abstract::Group grp,
NOX::StatusTest::Generic tests,
NOX::Parameter::List params
[virtual]
 

Reset the nonlinear solver for a new solve.

Parameters:
grp On input, contains the intial guess. On output, contains the solution.
tests Status tests to check for convergence or failure. These tests will be modified by the solver.
params List of parameters. These parameters will be modified by the solver.
Note:
All the objects passed to reset() will be modified.

The group object will be cloned via NOX::Abstract::Group::clone(), and the vectors within will also be individually cloned via NOX::Abstract::Vector::clone().

Warning:
If the contents of grp, tests, or params are modified by the calling program after calling reset(), then the behavior of iterate() and solve() are completely undefined. To remedy this, call reset() again with the modified objects.

Implements NOX::Solver::Generic.

NOX::StatusTest::StatusType NOX::Solver::TensorBased::solve  )  [virtual]
 

Solve the nonlinear problem and return final status.

By "solve", we call iterate() until the NOX::StatusTest value is either NOX::StatusTest::Converged or NOX::StatusTest::Failed.

Implements NOX::Solver::Generic.


Member Data Documentation

NOX::Abstract::Vector* NOX::Solver::TensorBased::aVecPtr [protected]
 

Current tensor term vector (pointer).

We have both a pointer and a reference because we need to create a DERIVED object and then want to have a reference to it.

NOX::Abstract::Vector* NOX::Solver::TensorBased::newtonVecPtr [protected]
 

Current Newton direction (pointer).

We have both a pointer and a reference because we need to create a DERIVED object and then want to have a reference to it.

NOX::Abstract::Group* NOX::Solver::TensorBased::oldSolnPtr [protected]
 

Previous solution pointer.

We have both a pointer and a reference because we need to create a DERIVED object and then want to have a reference to it.

NOX::Abstract::Vector* NOX::Solver::TensorBased::residualVecPtr [protected]
 

Residual vector (pointer).

We have both a pointer and a reference because we need to create a DERIVED object and then want to have a reference to it.

NOX::Abstract::Vector* NOX::Solver::TensorBased::sVecPtr [protected]
 

Vector to previous point (pointer).

We have both a pointer and a reference because we need to create a DERIVED object and then want to have a reference to it.

NOX::Abstract::Vector* NOX::Solver::TensorBased::tensorVecPtr [protected]
 

Current tensor direction (pointer).

We have both a pointer and a reference because we need to create a DERIVED object and then want to have a reference to it.

NOX::Abstract::Vector* NOX::Solver::TensorBased::tmpVecPtr [protected]
 

Working vector (pointer).

We have both a pointer and a reference because we need to create a DERIVED object and then want to have a reference to it.


The documentation for this class was generated from the following files:
Generated on Thu Sep 18 12:42:29 2008 for NOX by doxygen 1.3.9.1