NOX Development
LOCA::Homotopy::DeflatedGroup Class Reference

LOCA's Homotopy Algorithm. More...

#include <LOCA_Homotopy_DeflatedGroup.H>

Inheritance diagram for LOCA::Homotopy::DeflatedGroup:
[legend]
Collaboration diagram for LOCA::Homotopy::DeflatedGroup:
[legend]

List of all members.

## Public Member Functions

DeflatedGroup (const Teuchos::RCP< LOCA::GlobalData > &global_data, const Teuchos::RCP< Teuchos::ParameterList > &topParams, const Teuchos::RCP< Teuchos::ParameterList > &hParams, const Teuchos::RCP< LOCA::Homotopy::AbstractGroup > &grp, const Teuchos::RCP< const NOX::Abstract::Vector > &start_vec, const std::vector< Teuchos::RCP< const NOX::Abstract::Vector > > &prev_solns, const double identity_sign=1.0)
Constructor.
DeflatedGroup (const DeflatedGroup &source, NOX::CopyType type=NOX::DeepCopy)
Copy constructor.
virtual ~DeflatedGroup ()
Destructor.
double getHomotopyParam () const
Get homotopy parameter.
Implementation of NOX::Abstract::Group virtual methods
virtual NOX::Abstract::Groupoperator= (const NOX::Abstract::Group &source)
Assignment operator.
virtual Teuchos::RCP
< NOX::Abstract::Group
clone (NOX::CopyType type=NOX::DeepCopy) const
Clone function.
virtual void setX (const NOX::Abstract::Vector &y)
Set the solution vector to y.
virtual void computeX (const NOX::Abstract::Group &g, const NOX::Abstract::Vector &d, double step)
Compute and return solution vector, x, where this.x = grp.x + step * d.
virtual
NOX::Abstract::Group::ReturnType
computeF ()
Compute extended continuation equations.
virtual
NOX::Abstract::Group::ReturnType
computeJacobian ()
Compute extended continuation jacobian.
virtual
NOX::Abstract::Group::ReturnType
Gradient is not defined for this system.
virtual
NOX::Abstract::Group::ReturnType
computeNewton (Teuchos::ParameterList &params)
Compute Newton direction for extended continuation system.
virtual
NOX::Abstract::Group::ReturnType
applyJacobian (const NOX::Abstract::Vector &input, NOX::Abstract::Vector &result) const
Applies Jacobian for extended system.
virtual
NOX::Abstract::Group::ReturnType
applyJacobianTranspose (const NOX::Abstract::Vector &input, NOX::Abstract::Vector &result) const
Jacobian transpose not defined for this system.
virtual
NOX::Abstract::Group::ReturnType
applyJacobianInverse (Teuchos::ParameterList &params, const NOX::Abstract::Vector &input, NOX::Abstract::Vector &result) const
Applies Jacobian inverse for extended system.
virtual
NOX::Abstract::Group::ReturnType
applyJacobianMultiVector (const NOX::Abstract::MultiVector &input, NOX::Abstract::MultiVector &result) const
Applies Jacobian for extended system.
virtual
NOX::Abstract::Group::ReturnType
applyJacobianTransposeMultiVector (const NOX::Abstract::MultiVector &input, NOX::Abstract::MultiVector &result) const
Jacobian transpose not defined for this system.
virtual
NOX::Abstract::Group::ReturnType
applyJacobianInverseMultiVector (Teuchos::ParameterList &params, const NOX::Abstract::MultiVector &input, NOX::Abstract::MultiVector &result) const
Applies Jacobian inverse for extended system.
virtual bool isF () const
Return true if extended residual is valid.
virtual bool isJacobian () const
Return true if the extended Jacobian is valid.
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 residual.
virtual double getNormF () const
Return 2-norm of extended residual.
virtual const
NOX::Abstract::Vector
virtual const
NOX::Abstract::Vector
getNewton () const
Return extended Newton direction.
virtual Teuchos::RCP< const
NOX::Abstract::Vector
getXPtr () const
Return RCP to extended solution vector.
virtual Teuchos::RCP< const
NOX::Abstract::Vector
getFPtr () const
Return RCP to extended residual.
virtual Teuchos::RCP< const
NOX::Abstract::Vector
virtual Teuchos::RCP< const
NOX::Abstract::Vector
getNewtonPtr () const
Return RCP to extended Newton direction.
virtual double getNormNewtonSolveResidual () const
Returns 2-norm of extended Newton solve residual.
Implementation of LOCA::Extended::MultiAbstractGroup

virtual methods

virtual Teuchos::RCP< const
LOCA::MultiContinuation::AbstractGroup
getUnderlyingGroup () const
Return underlying group.
virtual Teuchos::RCP
< LOCA::MultiContinuation::AbstractGroup
getUnderlyingGroup ()
Return underlying group.
Implementation of LOCA::MultiContinuation::AbstractGroup

virtual methods

virtual void copy (const NOX::Abstract::Group &source)
Assignment operator.
virtual void setParamsMulti (const std::vector< int > &paramIDs, const NOX::Abstract::MultiVector::DenseMatrix &vals)
Set parameters indexed by (integer) paramIDs.
virtual void setParams (const ParameterVector &p)
Set the parameter vector in the group to p (pVector = p).
virtual void setParam (int paramID, double val)
Set parameter indexed by (integer) paramID.
virtual void setParam (std::string paramID, double val)
Set parameter indexed by (std::string) paramID.
virtual const ParameterVectorgetParams () const
Return a const reference to the ParameterVector owned by the group.
virtual double getParam (int paramID) const
Return copy of parameter indexed by (integer) paramID.
virtual double getParam (std::string paramID) const
Return copy of parameter indexed by (std::string) paramID.
virtual
NOX::Abstract::Group::ReturnType
computeDfDpMulti (const std::vector< int > &paramIDs, NOX::Abstract::MultiVector &dfdp, bool isValidF)
virtual void preProcessContinuationStep (LOCA::Abstract::Iterator::StepStatus stepStatus)
Perform any preprocessing before a continuation step starts.
virtual void postProcessContinuationStep (LOCA::Abstract::Iterator::StepStatus stepStatus)
Perform any postprocessing after a continuation step finishes.
virtual void projectToDraw (const NOX::Abstract::Vector &x, double *px) const
Projects solution to a few scalars for multiparameter continuation.
virtual int projectToDrawDimension () const
Returns the dimension of the project to draw array.
virtual double computeScaledDotProduct (const NOX::Abstract::Vector &a, const NOX::Abstract::Vector &b) const
Compute a scaled dot product.
virtual void printSolution (const double conParam) const
Function to print out solution and parameter after successful step.
virtual void printSolution (const NOX::Abstract::Vector &x, const double conParam) const
Function to print out a vector and parameter after successful step.
virtual void scaleVector (NOX::Abstract::Vector &x) const
Scales a vector using scaling vector.
Implementation of
virtual int getBorderedWidth () const
Return the total width of the bordered rows/columns.
virtual Teuchos::RCP< const
NOX::Abstract::Group
getUnborderedGroup () const
Get bottom-level unbordered group.
virtual bool isCombinedAZero () const
Indicates whether combined A block is zero.
virtual bool isCombinedBZero () const
Indicates whether combined B block is zero.
virtual bool isCombinedCZero () const
Indicates whether combined C block is zero.
virtual void extractSolutionComponent (const NOX::Abstract::MultiVector &v, NOX::Abstract::MultiVector &v_x) const
virtual void extractParameterComponent (bool use_transpose, const NOX::Abstract::MultiVector &v, NOX::Abstract::MultiVector::DenseMatrix &v_p) const
virtual void loadNestedComponents (const NOX::Abstract::MultiVector &v_x, const NOX::Abstract::MultiVector::DenseMatrix &v_p, NOX::Abstract::MultiVector &v) const
virtual void fillA (NOX::Abstract::MultiVector &A) const
Fill the combined A block as described above.
virtual void fillB (NOX::Abstract::MultiVector &B) const
Fill the combined B block as described above.
virtual void fillC (NOX::Abstract::MultiVector::DenseMatrix &C) const
Fill the combined C block as described above.

## Protected Member Functions

virtual void resetIsValid ()
Resets all isValid flags to false.
virtual void setupViews ()
Sets up multivector views.
void setHomotopyParam (double param)
Set homotopy parameter.
void setStepperParameters (Teuchos::ParameterList &topParams)
Creates and sets the "Stepper" parameter sublist.

## Protected Attributes

Teuchos::RCP< LOCA::GlobalDataglobalData
Pointer LOCA global data object.
Teuchos::RCP
< LOCA::Parameter::SublistParser
parsedParams
Parsed top-level parameters.
Teuchos::RCP
< Teuchos::ParameterList
homotopyParams
Pitchfork parameter list.
Teuchos::RCP
< LOCA::Homotopy::AbstractGroup
grpPtr
Pointer to base group that defines .
Teuchos::RCP
< LOCA::BorderedSystem::AbstractGroup
bordered_grp
Pointer to base group as a bordered group.
LOCA::MultiContinuation::ExtendedMultiVector xMultiVec
Stores the extended solution vector.
LOCA::MultiContinuation::ExtendedMultiVector fMultiVec
Stores the extended residual vector.
LOCA::MultiContinuation::ExtendedMultiVector newtonMultiVec
Stores the extended Newton vector.
Teuchos::RCP
< LOCA::MultiContinuation::ExtendedVector
xVec
Stores view of first column of xMultiVec.
Teuchos::RCP
< LOCA::MultiContinuation::ExtendedVector
fVec
Stores view of first column of fMultiVec.
Teuchos::RCP
< LOCA::MultiContinuation::ExtendedVector
newtonVec
Stores view of first column of newtonMultiVec.
Teuchos::RCP
< LOCA::MultiContinuation::ExtendedVector
Stores view of first column of gradientMultiVec.
Teuchos::RCP< const
NOX::Abstract::Vector
startVec
Stores the starting vector, .
double identitySign
std::vector< Teuchos::RCP
< const NOX::Abstract::Vector > >
solns
Stores array of deflated solution vectors.
Teuchos::RCP
< NOX::Abstract::Vector
distVec
Temporary vector for storing distance.
Teuchos::RCP
< NOX::Abstract::MultiVector
totalDistMultiVec
Temporary vector for storing sum of distances.
Teuchos::RCP
< NOX::Abstract::Vector
totalDistVec
Temporary vector for storing sum of distances.
Teuchos::RCP
< NOX::Abstract::MultiVector
underlyingF
underlying group's F vector as a multivector
Teuchos::RCP
< LOCA::BorderedSolver::JacobianOperator
jacOp
Teuchos::RCP
< LOCA::BorderedSolver::AbstractStrategy
borderedSolver
Stores bordered solver strategy.
Teuchos::RCP
< NOX::Abstract::MultiVector::DenseMatrix
minusOne
Stores -1.
int numSolns
Number of previous solutions.
std::vector< double > distances
Array of distances from previous solutions.
double distProd
Product of distances.
std::vector< int > index_f
Stores indices for getting f part of fMultiVec.
LOCA::ParameterVector paramVec
Copy of the ParameterVector for the underlying grpPtr.
double conParam
Value of the homotopy continuation parameter.
int conParamID
Continuatioin parameter ID number from the ParameterVector.
const std::string conParamLabel
Contains the std::string used to identify the homotopy parameter in the ParameterVector object.
bool augmentJacForHomotopyNotImplemented
Tracks whether the LOCA::Homotopy::Group method augmentJacobianForHomotopy is implemented. If not, the augmentation is applied during the applyJacobian assuming a matrix-free implementation.
bool isValidF
Is residual vector valid.
bool isValidJacobian
Is Jacobian matrix valid.
bool isValidNewton
Is Newton vector valid.
bool isBordered
Flag that indicates whether underlying group is a bordered group.

## Detailed Description

LOCA's Homotopy Algorithm.

The HomotopyGroup is a concrete implementation of the LOCA::Continuation::AbstractGroup that modifies the set of nonlinear equations to be solved to allow for Homotopy to be applied to the system. This object should be used in conjunction with the LOCA::Stepper object to drive the continuation. This algorithm solves a system of nonlinear equations supplied by the user ( ) through continuation. An artificial parameter is used to control the continuation. The idea is to solve a simple equation starting at = 0 and, using the solution from the previous step, solve systems of equations that gets progressively closer to the true system of interest ( at = 1.0 we recover the original equations ). By constraining the definition of and using artificial parameter contiuation, the continuation branch should be free of multiplicity and bifurcation phenomena.

The modified system of equations, , supplied by the HomotopyGroup is defined as:

where is the solution vector, is an artificial parameter, is the set of nonlinear equations the user supplies, is the corresponding set of homotopy equations that LOCA will solve, is a random vector, and is a scaling factor used to switch sign of the last term (typically valued 1.0 or -1.0).

This group requires the loca Stepper for continuation from = 0.0 (a simple set of equations to solve) to = 1.0 (the set of equations requested by the user, ). The Homotopy::Group will generate the Stepper parameter sublist in the parameter list that is passed in to the constructor. The user is free to modify this list (it sets default values) before passing it into the stepper object but should NOT change the starting and stopping values for the continuation parameter.

References:

• ALGORITHM 652 HOMPACK: A Suite of Codes for Globally Convergent Homotopy Algorithms, Watson, L.T., Billups, S.C, and Morgan, A.P., ACM Transactions on Mathematical Software, Vol. 13, No. 3, September 1987, pp281-310.

## Constructor & Destructor Documentation

 LOCA::Homotopy::DeflatedGroup::DeflatedGroup ( const Teuchos::RCP< LOCA::GlobalData > & global_data, const Teuchos::RCP< Teuchos::ParameterList > & topParams, const Teuchos::RCP< Teuchos::ParameterList > & hParams, const Teuchos::RCP< LOCA::Homotopy::AbstractGroup > & grp, const Teuchos::RCP< const NOX::Abstract::Vector > & start_vec, const std::vector< Teuchos::RCP< const NOX::Abstract::Vector > > & prev_solns, const double identity_sign = 1.0 )

Constructor.

Parameters:
 global_data [in] Global data object topParams [in] Parsed top-level parameter list. hParams [in] Homotopy parameters grp [in] Group representing .

## Member Function Documentation

 NOX::Abstract::Group::ReturnType LOCA::Homotopy::DeflatedGroup::computeDfDpMulti ( const std::vector< int > & paramIDs, NOX::Abstract::MultiVector & dfdp, bool isValidF )  [virtual]

Compute for each parameter indexed by paramIDs. The first column of dfdp holds F, which is valid if isValidF is true. Otherwise F must be computed.

Implements LOCA::MultiContinuation::AbstractGroup.

 void LOCA::Homotopy::DeflatedGroup::extractParameterComponent ( bool use_transpose, const NOX::Abstract::MultiVector & v, NOX::Abstract::MultiVector::DenseMatrix & v_p ) const [virtual]

Given the vector v, extract the parameter components of all of the nested subvectors in v down to the solution component for the unbordered group.

Implements LOCA::BorderedSystem::AbstractGroup.

 void LOCA::Homotopy::DeflatedGroup::extractSolutionComponent ( const NOX::Abstract::MultiVector & v, NOX::Abstract::MultiVector & v_x ) const [virtual]

Given the vector v, extract the underlying solution component corresponding to the unbordered group.

Implements LOCA::BorderedSystem::AbstractGroup.

 void LOCA::Homotopy::DeflatedGroup::loadNestedComponents ( const NOX::Abstract::MultiVector & v_x, const NOX::Abstract::MultiVector::DenseMatrix & v_p, NOX::Abstract::MultiVector & v ) const [virtual]

Given the solution component v_x and combined parameter components v_p, distribute these components through the nested sub-vectors in v.

Implements LOCA::BorderedSystem::AbstractGroup.

 void LOCA::Homotopy::DeflatedGroup::postProcessContinuationStep ( LOCA::Abstract::Iterator::StepStatus stepStatus )  [virtual]

Perform any postprocessing after a continuation step finishes.

The stepStatus argument indicates whether the step was successful.

Reimplemented from LOCA::MultiContinuation::AbstractGroup.

 void LOCA::Homotopy::DeflatedGroup::preProcessContinuationStep ( LOCA::Abstract::Iterator::StepStatus stepStatus )  [virtual]

Perform any preprocessing before a continuation step starts.

The stepStatus argument indicates whether the previous step was successful.

Reimplemented from LOCA::MultiContinuation::AbstractGroup.

## Member Data Documentation

 double LOCA::Homotopy::DeflatedGroup::conParam [protected]

Value of the homotopy continuation parameter.

Ranges from 0.0 (easy solution) to 1.0 (solution to the system of interest).

Referenced by copy(), and DeflatedGroup().

 LOCA::ParameterVector LOCA::Homotopy::DeflatedGroup::paramVec [protected]

Copy of the ParameterVector for the underlying grpPtr.

We copy this and then add the homotopy parameter to the list.

Referenced by copy(), and DeflatedGroup().

The documentation for this class was generated from the following files:
• LOCA_Homotopy_DeflatedGroup.H
• LOCA_Homotopy_DeflatedGroup.C