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:

Inheritance graph
[legend]
Collaboration diagram for NOX::Solver::TensorBased:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 TensorBased (const Teuchos::RCP< NOX::Abstract::Group > &grp, const Teuchos::RCP< NOX::StatusTest::Generic > &tests, const Teuchos::RCP< Teuchos::ParameterList > &params)
 Constructor.
virtual ~TensorBased ()
 Destructor.
virtual void reset (const NOX::Abstract::Vector &initialGuess, const Teuchos::RCP< NOX::StatusTest::Generic > &tests)
 Resets the solver, sets a new status test, and sets a new initial guess.
virtual void reset (const NOX::Abstract::Vector &initialGuess)
 Resets the solver and sets a new initial guess.
virtual NOX::StatusTest::StatusType getStatus ()
 Check current convergence and failure status.
virtual NOX::StatusTest::StatusType step ()
 Do one nonlinear step in the iteration sequence and return status.
virtual NOX::StatusTest::StatusType solve ()
 Solve the nonlinear problem and return final status.
virtual const
NOX::Abstract::Group
getSolutionGroup () const
 Return a reference to the current solution group.
virtual const
NOX::Abstract::Group
getPreviousSolutionGroup () const
 Return a reference to the previous solution group.
virtual int getNumIterations () const
 Get number of iterations.
virtual const
Teuchos::ParameterList & 
getList () const
 Return a refernece to the solver parameters.

Protected Types

enum  StepType { TensorStep, NewtonStep }
 Types of steps. More...
enum  LineSearchType {
  Curvilinear, Standard, Dual, FullStep,
  Newton
}
 Flag for the direction to be computed this iteration. More...
enum  ConvergenceCriteriaType { ArmijoGoldstein, AredPred, None }
 Algorithms used to determine convergence of the line search. More...
enum  LambdaSelectionType { Halving, Quadratic }
 Types of lambda selection. More...
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.
virtual bool reset (const Teuchos::RCP< NOX::Abstract::Group > &grp, const Teuchos::RCP< NOX::StatusTest::Generic > &tests, const Teuchos::RCP< Teuchos::ParameterList > &params)
 Constructor initialization routine.
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 (std::string 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

Teuchos::RCP< NOX::GlobalDataglobalDataPtr
 Pointer to the global data object.
Teuchos::RCP< NOX::UtilsutilsPtr
 Printing Utils.
Teuchos::RCP
< NOX::Abstract::Group
solnPtr
 Current solution.
Teuchos::RCP
< NOX::Abstract::Group
oldSolnPtr
 Previous solution pointer.
Teuchos::RCP
< NOX::Abstract::Vector
newtonVecPtr
 Current Newton direction (pointer).
Teuchos::RCP
< NOX::Abstract::Vector
tensorVecPtr
 Current tensor direction (pointer).
Teuchos::RCP
< NOX::Abstract::Vector
aVecPtr
 Current tensor term vector (pointer).
Teuchos::RCP
< NOX::Abstract::Vector
sVecPtr
 Vector to previous point (pointer).
Teuchos::RCP
< NOX::Abstract::Vector
tmpVecPtr
 Working vector (pointer).
Teuchos::RCP
< NOX::Abstract::Vector
residualVecPtr
 Residual vector (pointer).
Teuchos::RCP
< NOX::StatusTest::Generic
testPtr
 Stopping test.
NOX::StatusTest::CheckType checkType
 Type of check to use for status tests. See NOX::StatusTest for more details.
Teuchos::RCP
< Teuchos::ParameterList > 
paramsPtr
 Input parameters.
Teuchos::ParameterList * linearParamsPtr
 Line Search parameters.
double stepSize
 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)

Definition at line 267 of file NOX_Solver_TensorBased.H.


Member Enumeration Documentation

Types of steps.

Definition at line 434 of file NOX_Solver_TensorBased.H.

Flag for the direction to be computed this iteration.

Enumerated list for each type of line search

Definition at line 447 of file NOX_Solver_TensorBased.H.

Algorithms used to determine convergence of the line search.

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

Definition at line 460 of file NOX_Solver_TensorBased.H.

Types of lambda selection.

Definition at line 474 of file NOX_Solver_TensorBased.H.

Type of recovery step to use.

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

Definition at line 484 of file NOX_Solver_TensorBased.H.


Constructor & Destructor Documentation

NOX::Solver::TensorBased::TensorBased ( const Teuchos::RCP< NOX::Abstract::Group > &  grp,
const Teuchos::RCP< NOX::StatusTest::Generic > &  tests,
const Teuchos::RCP< Teuchos::ParameterList > &  params 
)

Constructor.

See reset() for description.

Definition at line 62 of file NOX_Solver_TensorBased.C.

References NOX::DeepCopy, reset(), and NOX::ShapeCopy.

NOX::Solver::TensorBased::~TensorBased (  )  [virtual]

Destructor.

Definition at line 266 of file NOX_Solver_TensorBased.C.

References NOX::Utils::Details, numJ2vMults, numJvMults, and utilsPtr.


Member Function Documentation

void NOX::Solver::TensorBased::reset ( const NOX::Abstract::Vector initial_guess,
const Teuchos::RCP< NOX::StatusTest::Generic > &  test 
) [virtual]

Resets the solver, sets a new status test, and sets a new initial guess.

Implements NOX::Solver::Generic.

Definition at line 251 of file NOX_Solver_TensorBased.C.

References init(), solnPtr, and testPtr.

Referenced by TensorBased().

void NOX::Solver::TensorBased::reset ( const NOX::Abstract::Vector initial_guess  )  [virtual]

Resets the solver and sets a new initial guess.

Implements NOX::Solver::Generic.

Definition at line 260 of file NOX_Solver_TensorBased.C.

References init(), and solnPtr.

NOX::StatusTest::StatusType NOX::Solver::TensorBased::getStatus (  )  [virtual]

Check current convergence and failure status.

Implements NOX::Solver::Generic.

Definition at line 278 of file NOX_Solver_TensorBased.C.

References status.

NOX::StatusTest::StatusType NOX::Solver::TensorBased::step (  )  [virtual]

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.

Definition at line 385 of file NOX_Solver_TensorBased.C.

References nIter, paramsPtr, prePostOperator, NOX::Solver::PrePostOperator::runPostSolve(), NOX::Solver::PrePostOperator::runPreSolve(), solnPtr, status, step(), and NOX::StatusTest::Unconverged.

const NOX::Abstract::Group & NOX::Solver::TensorBased::getSolutionGroup (  )  const [virtual]

Return a reference to the current solution group.

Implements NOX::Solver::Generic.

Definition at line 405 of file NOX_Solver_TensorBased.C.

References solnPtr.

const NOX::Abstract::Group & NOX::Solver::TensorBased::getPreviousSolutionGroup (  )  const [virtual]

Return a reference to the previous solution group.

Implements NOX::Solver::Generic.

Definition at line 411 of file NOX_Solver_TensorBased.C.

References oldSolnPtr.

int NOX::Solver::TensorBased::getNumIterations (  )  const [virtual]

Get number of iterations.

Implements NOX::Solver::Generic.

Definition at line 416 of file NOX_Solver_TensorBased.C.

References nIter.

const Teuchos::ParameterList & NOX::Solver::TensorBased::getList (  )  const [virtual]

Return a refernece to the solver parameters.

Implements NOX::Solver::Generic.

Definition at line 422 of file NOX_Solver_TensorBased.C.

References paramsPtr.

void NOX::Solver::TensorBased::init (  )  [protected, virtual]

void NOX::Solver::TensorBased::printUpdate (  )  [protected, virtual]

bool NOX::Solver::TensorBased::reset ( const Teuchos::RCP< NOX::Abstract::Group > &  grp,
const Teuchos::RCP< NOX::StatusTest::Generic > &  tests,
const Teuchos::RCP< Teuchos::ParameterList > &  params 
) [protected, virtual]

bool NOX::Solver::TensorBased::computeTensorDirection ( NOX::Abstract::Group soln,
const NOX::Solver::Generic solver 
) [protected]

double NOX::Solver::TensorBased::calculateBeta ( double  qa,
double  qb,
double  qc,
double &  qval,
double &  lambdaBar,
double  lambda = 1.0 
) const [protected]

Subroutine for calculating beta.

Definition at line 719 of file NOX_Solver_TensorBased.C.

References NOX::Utils::Details, and utilsPtr.

Referenced by computeCurvilinearStep(), and computeTensorDirection().

bool NOX::Solver::TensorBased::computeCurvilinearStep ( NOX::Abstract::Vector dir,
const NOX::Abstract::Group soln,
const NOX::Solver::Generic s,
double &  lambda 
) [protected]

bool NOX::Solver::TensorBased::implementGlobalStrategy ( NOX::Abstract::Group newGrp,
double &  step,
const NOX::Solver::Generic s 
) [protected]

bool NOX::Solver::TensorBased::performLinesearch ( NOX::Abstract::Group newsoln,
double &  step,
const NOX::Abstract::Vector lsDir,
const NOX::Solver::Generic s 
) [protected]

double NOX::Solver::TensorBased::getNormModelResidual ( const NOX::Abstract::Vector dir,
const NOX::Abstract::Group soln,
bool  isTensorModel 
) const [protected]

void NOX::Solver::TensorBased::printDirectionInfo ( std::string  dirName,
const NOX::Abstract::Vector dir,
const NOX::Abstract::Group soln,
bool  isTensorModel 
) const [protected]

double NOX::Solver::TensorBased::getDirectionalDerivative ( const NOX::Abstract::Vector dir,
const NOX::Abstract::Group soln 
) const [protected]

double NOX::Solver::TensorBased::selectLambda ( double  newf,
double  oldf,
double  oldfprime,
double  lambda 
) [protected]

Select lambda for linesearch (quadratic or halving).

Definition at line 1110 of file NOX_Solver_TensorBased.C.

References lambdaSelection.

Referenced by performLinesearch().

void NOX::Solver::TensorBased::throwError ( const string &  functionName,
const string &  errorMsg 
) const [protected]

Throw an error with a method's name and error message.

Definition at line 1132 of file NOX_Solver_TensorBased.C.

References NOX::Utils::Error, and utilsPtr.

Referenced by computeTensorDirection().


Member Data Documentation

Pointer to the global data object.

Definition at line 360 of file NOX_Solver_TensorBased.H.

Referenced by reset().

Current solution.

Definition at line 366 of file NOX_Solver_TensorBased.H.

Referenced by getSolutionGroup(), printUpdate(), reset(), solve(), and step().

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.

Definition at line 371 of file NOX_Solver_TensorBased.H.

Referenced by getPreviousSolutionGroup(), and step().

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.

Definition at line 376 of file NOX_Solver_TensorBased.H.

Referenced by computeCurvilinearStep(), computeTensorDirection(), implementGlobalStrategy(), and performLinesearch().

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.

Definition at line 381 of file NOX_Solver_TensorBased.H.

Referenced by computeCurvilinearStep(), computeTensorDirection(), implementGlobalStrategy(), and printUpdate().

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.

Definition at line 386 of file NOX_Solver_TensorBased.H.

Referenced by computeTensorDirection(), and getNormModelResidual().

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.

Definition at line 391 of file NOX_Solver_TensorBased.H.

Referenced by computeTensorDirection(), and getNormModelResidual().

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.

Definition at line 396 of file NOX_Solver_TensorBased.H.

Referenced by computeTensorDirection(), and performLinesearch().

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.

Definition at line 401 of file NOX_Solver_TensorBased.H.

Referenced by computeTensorDirection().

Stopping test.

Definition at line 404 of file NOX_Solver_TensorBased.H.

Referenced by printUpdate(), reset(), and step().

Type of check to use for status tests. See NOX::StatusTest for more details.

Definition at line 407 of file NOX_Solver_TensorBased.H.

Referenced by reset(), and step().

Teuchos::RCP<Teuchos::ParameterList> NOX::Solver::TensorBased::paramsPtr [protected]

Input parameters.

Definition at line 410 of file NOX_Solver_TensorBased.H.

Referenced by computeTensorDirection(), getList(), init(), performLinesearch(), reset(), and solve().

Teuchos::ParameterList* NOX::Solver::TensorBased::linearParamsPtr [protected]

Line Search parameters.

Direction parameters. Parameters for the Linear Solver of the local model.

Definition at line 419 of file NOX_Solver_TensorBased.H.

Current step.

Definition at line 422 of file NOX_Solver_TensorBased.H.

Referenced by init(), printUpdate(), and step().

double NOX::Solver::TensorBased::beta [protected]

Value of sc'*dt.

Definition at line 425 of file NOX_Solver_TensorBased.H.

Referenced by computeCurvilinearStep(), and computeTensorDirection().

Number of nonlinear iterations.

Definition at line 428 of file NOX_Solver_TensorBased.H.

Referenced by computeTensorDirection(), getNumIterations(), init(), printUpdate(), solve(), and step().

Status of nonlinear solver.

Definition at line 431 of file NOX_Solver_TensorBased.H.

Referenced by getStatus(), init(), printUpdate(), solve(), and step().

Flag for the base direction to compute after the first iteration.

Definition at line 441 of file NOX_Solver_TensorBased.H.

Referenced by computeTensorDirection(), and reset().

Choice of line search.

Definition at line 457 of file NOX_Solver_TensorBased.H.

Referenced by implementGlobalStrategy(), performLinesearch(), and reset().

Choice of convergence criteria (currently unused).

Definition at line 471 of file NOX_Solver_TensorBased.H.

Referenced by reset().

Flag for lambda selection (Halving/Quadratic).

Definition at line 481 of file NOX_Solver_TensorBased.H.

Referenced by reset(), and selectLambda().

Choice of the recovery step type; uses "Recovery Step Type" parameter.

Definition at line 492 of file NOX_Solver_TensorBased.H.

Referenced by performLinesearch(), and reset().

Flag for using modifications that force quadratic to have real root.

Definition at line 495 of file NOX_Solver_TensorBased.H.

Referenced by computeTensorDirection(), and reset().

Flag for Newton direction.

Definition at line 498 of file NOX_Solver_TensorBased.H.

Referenced by implementGlobalStrategy(), and performLinesearch().

Flag for rescuing Linear Solver from a bad solve.

Definition at line 501 of file NOX_Solver_TensorBased.H.

Referenced by computeTensorDirection(), and reset().

Minimum step length (i.e., when we give up).

Definition at line 504 of file NOX_Solver_TensorBased.H.

Referenced by performLinesearch(), and reset().

Default step.

Definition at line 507 of file NOX_Solver_TensorBased.H.

Referenced by performLinesearch(), and reset().

Default step for linesearch failure.

Definition at line 510 of file NOX_Solver_TensorBased.H.

Referenced by performLinesearch(), and reset().

Maximum iterations.

Definition at line 513 of file NOX_Solver_TensorBased.H.

Referenced by performLinesearch(), and reset().

double NOX::Solver::TensorBased::alpha [protected]

Scaling factor for the Armijo-Goldstein condition.

Definition at line 516 of file NOX_Solver_TensorBased.H.

Referenced by performLinesearch(), and reset().

Value of s'*inv(J)*F.

Definition at line 519 of file NOX_Solver_TensorBased.H.

Referenced by computeCurvilinearStep(), and computeTensorDirection().

Value of s'*inv(J)*a.

Definition at line 522 of file NOX_Solver_TensorBased.H.

Referenced by computeCurvilinearStep(), and computeTensorDirection().

Common line search printing utilities.

Definition at line 525 of file NOX_Solver_TensorBased.H.

Referenced by performLinesearch(), and reset().

Common common counters for line searches.

Definition at line 528 of file NOX_Solver_TensorBased.H.

Referenced by implementGlobalStrategy(), init(), and performLinesearch().

Common slope calculations for line searches.

Definition at line 531 of file NOX_Solver_TensorBased.H.

Referenced by implementGlobalStrategy(), performLinesearch(), and reset().

int NOX::Solver::TensorBased::numJvMults [mutable, protected]

Counter for number of Jacobian-vector products.

Definition at line 534 of file NOX_Solver_TensorBased.H.

Referenced by computeTensorDirection(), getDirectionalDerivative(), getNormModelResidual(), init(), performLinesearch(), and ~TensorBased().

int NOX::Solver::TensorBased::numJ2vMults [mutable, protected]

Counter for number of "double" Jacobian-vector products.

Definition at line 537 of file NOX_Solver_TensorBased.H.

Referenced by computeTensorDirection(), init(), and ~TensorBased().

Pointer to a user defined NOX::Abstract::PrePostOperator object.

Definition at line 540 of file NOX_Solver_TensorBased.H.

Referenced by reset(), solve(), and step().


The documentation for this class was generated from the following files:

Generated on Thu Dec 17 11:03:09 2009 for Nonlinear Solver Project by  doxygen 1.5.9