#include <LOCA_Bifurcation_TPBord_ExtendedGroup.H>
Inheritance diagram for LOCA::Bifurcation::TPBord::ExtendedGroup:
Public Member Functions | |
| ExtendedGroup (LOCA::Bifurcation::TPBord::AbstractGroup &g, NOX::Parameter::List &bifParamList) | |
| Constructor with initial data passed through parameter lists. | |
| ExtendedGroup (LOCA::Bifurcation::TPBord::AbstractGroup &g, const NOX::Abstract::Vector &lenVec, const NOX::Abstract::Vector &nullVec, int paramId) | |
Constructor to set the base group, length normalization vector , initial guess for the null vector , and bifurcation paramter id (integer). | |
| ExtendedGroup (const LOCA::Bifurcation::TPBord::AbstractGroup &g, const NOX::Abstract::Vector &lenVec, const NOX::Abstract::Vector &nullVec, int paramId) | |
Constructor to set the base group, length normalization vector , initial guess for the null vector , and bifurcation paramter id (integer). | |
| ExtendedGroup (const ExtendedGroup &source, NOX::CopyType type=NOX::DeepCopy) | |
| Copy constructor. | |
| virtual | ~ExtendedGroup () |
| Destructor. | |
| virtual ExtendedGroup & | operator= (const ExtendedGroup &source) |
| Assignment operator. | |
| double | getBifParam () const |
| Get bifurcation parameter. | |
Implementation of NOX::Abstract::Group virtual methods | |
| virtual NOX::Abstract::Group & | operator= (const NOX::Abstract::Group &source) |
| Assignment operator. | |
| virtual NOX::Abstract::Group * | clone (NOX::CopyType type=NOX::DeepCopy) const |
| Cloning function. | |
| virtual void | setX (const NOX::Abstract::Vector &y) |
| Set the solution vector, x, to y. | |
| virtual void | setX (const LOCA::Bifurcation::TPBord::ExtendedVector &y) |
| Set the solution vector, x, to y. | |
| virtual void | computeX (const NOX::Abstract::Group &g, const NOX::Abstract::Vector &d, double step) |
| Compute this.x = grp.x + step * d. | |
| virtual void | computeX (const LOCA::Bifurcation::TPBord::ExtendedGroup &g, const LOCA::Bifurcation::TPBord::ExtendedVector &d, double step) |
| Compute this.x = grp.x + step * d. | |
| virtual NOX::Abstract::Group::ReturnType | computeF () |
Compute the turning point equation residual . | |
| virtual NOX::Abstract::Group::ReturnType | computeJacobian () |
Compute the blocks of the Jacobian derivative of . | |
| virtual NOX::Abstract::Group::ReturnType | computeGradient () |
| Gradient computation is not defined for this group. | |
| virtual NOX::Abstract::Group::ReturnType | computeNewton (NOX::Parameter::List ¶ms) |
| Compute Newton direction using applyJacobianInverse(). | |
| virtual NOX::Abstract::Group::ReturnType | applyJacobian (const NOX::Abstract::Vector &input, NOX::Abstract::Vector &result) const |
| Computes the extended Jacobian vector product. | |
| virtual NOX::Abstract::Group::ReturnType | applyJacobianTranspose (const NOX::Abstract::Vector &input, NOX::Abstract::Vector &result) const |
| Jacobian transpose product is not defined by this group. | |
| virtual NOX::Abstract::Group::ReturnType | applyJacobianInverse (NOX::Parameter::List ¶ms, const NOX::Abstract::Vector &input, NOX::Abstract::Vector &result) const |
| Applies the inverse of the extended Jacobian matrix using the bordering algorithm. | |
| virtual NOX::Abstract::Group::ReturnType | applyRightPreconditioning (bool useTranspose, NOX::Parameter::List ¶ms, const NOX::Abstract::Vector &input, NOX::Abstract::Vector &result) const |
| Applies the extended right preconditioner. | |
| virtual bool | isF () const |
Return true if the extended residual is valid. | |
| virtual bool | isJacobian () const |
Return true if the extended Jacobian is valid. | |
| virtual bool | isGradient () const |
| Always returns false. | |
| virtual bool | isNewton () const |
Return true if the extended Newton direction is valid. | |
| virtual const NOX::Abstract::Vector & | getX () const |
Return extended solution vector . | |
| virtual const NOX::Abstract::Vector & | getF () const |
Return extended equation residual . | |
| virtual double | getNormF () const |
Return 2-norm of . | |
| virtual const NOX::Abstract::Vector & | getGradient () const |
| Vector returned is not valid. | |
| virtual const NOX::Abstract::Vector & | getNewton () const |
| Return extended Newton direction. | |
| virtual double | getNormNewtonSolveResidual () const |
| Return the norm of the Newton solve residual. | |
Implementation of LOCA::Continuation::AbstractGroup virtual methods | |
| virtual LOCA::Continuation::AbstractGroup & | operator= (const LOCA::Continuation::AbstractGroup &source) |
| Assignment operator. | |
| virtual void | setParams (const ParameterVector &p) |
| Set the parameter vector in the group to p. | |
| virtual const ParameterVector & | getParams () const |
| Return a const reference to the paramter vector owned by the group. | |
| virtual void | setParam (int paramID, double val) |
| Set parameter indexed by paramID. | |
| virtual double | getParam (int paramID) const |
| Return copy of parameter indexed by paramID. | |
| virtual void | setParam (string paramID, double val) |
| Set parameter indexed by paramID. | |
| virtual double | getParam (string paramID) const |
| Return copy of parameter indexed by paramID. | |
| virtual NOX::Abstract::Group::ReturnType | computeDfDp (int paramID, NOX::Abstract::Vector &result) |
Compute parameter derivative for the extended system. | |
| virtual NOX::Abstract::Group::ReturnType | applyJacobianInverseMulti (NOX::Parameter::List ¶ms, const NOX::Abstract::Vector *const *inputs, NOX::Abstract::Vector **results, int nVecs) const |
| applyJacobian for multiple right-hand sides Applies the inverse of the extended Jacobian matrix using the bordering algorithm for multiple right-hand sides. | |
| virtual void | printSolution (const double conParam) const |
| Function to print out extended solution and continuation parameter after successful continuation step. | |
Implementation of LOCA::Extended::AbstractGroup virtual methods | |
| virtual LOCA::Extended::AbstractGroup & | operator= (const LOCA::Extended::AbstractGroup &source) |
| Assignment operator. | |
| virtual const LOCA::Continuation::AbstractGroup & | getUnderlyingGroup () const |
| Return underlying group. | |
| virtual LOCA::Continuation::AbstractGroup & | getUnderlyingGroup () |
| Return underlying group. | |
Protected Member Functions | |
| void | init (bool perturbSoln=false, double perturbSize=0.0) |
| Initializes group. | |
| void | setBifParam (double param) |
| Set bifurcation parameter. | |
| double | lTransNorm (const NOX::Abstract::Vector &n) const |
Defines null vector normalization . | |
Protected Attributes | |
| LOCA::Bifurcation::TPBord::AbstractGroup * | grpPtr |
| Stores the underlying group, which stores the solution vector, jacobian, and solution residual. | |
| LOCA::Bifurcation::TPBord::ExtendedVector | tpXVec |
| Stores the turning point solution vector. | |
| LOCA::Bifurcation::TPBord::ExtendedVector | tpFVec |
| Stores the turning point residual vector. | |
| LOCA::Bifurcation::TPBord::ExtendedVector | tpNewtonVec |
| Stores the turning point Newton vector. | |
| NOX::Abstract::Vector * | lengthVecPtr |
| Stores the constant length vector. | |
| int | bifParamId |
| Stores the bifurcation parameter index. | |
| NOX::Abstract::Vector * | derivResidualParamPtr |
| Stores the derivative of the solution residual w.r.t. bifparam. | |
| NOX::Abstract::Vector * | derivNullResidualParamPtr |
| Stores the derivative of the null vector residual w.r.t. bifparam. | |
| bool | ownsGroup |
| Flag indicating whether we have our own copy of the underlying grp. | |
| bool | isValidF |
| Is residual vector valid. | |
| bool | isValidJacobian |
| Is Jacobian matrix valid. | |
| bool | isValidNewton |
| Is Newton vector valid. | |
The LOCA::Bifurcation::TPBord::Group is a concrete implementation of the NOX::Abstract::Group, LOCA::Continuation::AbstractGroup and LOCA::Extended::AbstractGroup that defines the following extended set of equations that are regular at a generic turning point:
where
,
is the solution vector,
is the null vector,
is the length normalization vector and
is the Jacobian of F.
The group stores an underlying group of type LOCA::Bifurcation::TPBord::AbstractGroup to represent the equations
and to manipulate the underlying Jacobian
. Note that the entire extended Jacobian
is not stored in memory, rather a block-elimination algorithm (bordering algorithm) is used to compute linear solves of the extended Jacobian (see LOCA::Bifurcation::TPBord::ExtendedGroup::applyJacobianInverse(), LOCA::Bifurcation::TPBord::ExtendedGroup::applyJacobianInverseMulti() for more details).
This class implements all of the NOX::Abstract::Group, LOCA::Continuation::AbstractGroup, and LOCA::Extended::AbstractGroup methods for this extended set of equations and therefore is a complete group which can be passed to most NOX solvers to locate a single turning point or to the LOCA::Stepper to compute a family of turning points in a second parameter.
However, Jacobian-tranpose operations and gradient calculations cannot be implemented efficiently and therefore gradient-base nonlinear solvers such as steepest descent and Trust region methods cannot be used to solve the extended turning point equations.
|
||||||||||||||||||||
|
Constructor to set the base group, length normalization vector
The initial guess to the null vector is re-scaled so that the normalization condition In this version of the constructor, a non-const reference to the underlying group g is passed and therefore the group will not be copied. |
|
||||||||||||||||||||
|
Constructor to set the base group, length normalization vector
The initial guess to the null vector is re-scaled so that the normalization condition In this version of the constructor, a const reference to the underlying group g is passed and therefore the group will be copied. |
|
||||||||||||
|
Computes the extended Jacobian vector product. This method computes the extended Jacobian vector product
using the applyJacobian and computeDJnDxa methods of the underlying group where Reimplemented from NOX::Abstract::Group. |
|
||||||||||||||||
|
Applies the inverse of the extended Jacobian matrix using the bordering algorithm. This method is a special case of applyJacobianInverseMulti() for a single right-hand-side. Reimplemented from NOX::Abstract::Group. Reimplemented in LOCA::Bifurcation::TPBord::ModifiedBorderingGroup, and LOCA::Bifurcation::TPBord::NicDayModifiedBorderingGroup. |
|
||||||||||||||||||||
|
applyJacobian for multiple right-hand sides Applies the inverse of the extended Jacobian matrix using the bordering algorithm for multiple right-hand sides. This method performs the following multiple right-hand-side linear solve of the extended Jacobian matrix:
where
which requires Each vector in the arrays inputs and outputs must be of type LOCA::Bifurcation::TPBord::ExtendedVector, otherwise an error is thrown. Reimplemented from LOCA::Continuation::AbstractGroup. Reimplemented in LOCA::Bifurcation::TPBord::ModifiedBorderingGroup. |
|
||||||||||||||||||||
|
Applies the extended right preconditioner. This method is implemented using a similar bordering algorithm to applyJacobianInverse(), except calls to the underlying group's applyJacobianInvese method are replaced by applyRightPreconditioning. Reimplemented from NOX::Abstract::Group. |
|
||||||||||||
|
Compute parameter derivative
For a given parameter
Implements LOCA::Continuation::AbstractGroup. |
|
|
Compute the turning point equation residual This method fills the extended residual
The solution component residual Implements NOX::Abstract::Group. |
|
|
Compute the blocks of the Jacobian derivative of
This method computes the
by calling the computeJacobian, computeDfDp, and computeDJnDp methods of the underlying group. The second derivative matrix Reimplemented from NOX::Abstract::Group. |
|
|
Function to print out extended solution and continuation parameter after successful continuation step. This method prints the solution, null-vector, and parameter components of the extended solution vector using the printSolution method of the underlying group. Reimplemented from LOCA::Continuation::AbstractGroup. |
1.3.9.1