#include <NOX_Solver_TensorBased.H>
Inheritance diagram for NOX::Solver::TensorBased:


Public Member Functions | |
| TensorBased (const Teuchos::RCP< NOX::Abstract::Group > &grp, const Teuchos::RCP< NOX::StatusTest::Generic > &tests, const Teuchos::RCP< Teuchos::ParameterList > ¶ms) | |
| 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 | |
| TensorStep | |
| NewtonStep | |
| Curvilinear | |
| Standard | |
| Dual | |
| FullStep | |
| Newton | |
| ArmijoGoldstein | |
| Sufficient decrease condition. | |
| AredPred | |
| Ared/Pred condition. | |
| None | |
| Just accept the first step. | |
| Halving | |
| Quadratic | |
| Constant | |
| Use a constant value. | |
| LastComputedStep | |
| Use the last value computed in the line search algorithm. | |
| 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. | |
| virtual bool | reset (const Teuchos::RCP< NOX::Abstract::Group > &grp, const Teuchos::RCP< NOX::StatusTest::Generic > &tests, const Teuchos::RCP< Teuchos::ParameterList > ¶ms) |
| 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::GlobalData > | globalDataPtr |
| Pointer to the global data object. | |
| Teuchos::RCP< NOX::Utils > | utilsPtr |
| 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 |
| Parameters for the Linear Solver of the local model. | |
| 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 | |
| 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. | |
Solves
using a rank-1 tensor method and a linesearch globalization.
At the kth nonlinear iteration, the solver does the following:
by finding the root or smallest magnitude minimizer of the local model
where
and
as
via a linesearch method, where
is some function of
. For instance, the curvilinear step
is a function of the linesearch parameter
and is a parametric step that spans the directions of the tensor step and the Newton step. At
, the curvilinear step equals the full tensor step, and as
nears 0, the curvilinear step approaches the Newton direction. This step provides a monotonic decrease in the norm of the local tensor model as
varies from 0 to 1.
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
enum NOX::Solver::TensorBased::ConvergenceCriteriaType [protected] |
enum NOX::Solver::TensorBased::RecoveryStepType [protected] |
| 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.
| 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.
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.
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.
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.
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.
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.
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.
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.
1.4.7