LOCA::SingularJacobianSolve::Nic Class Reference

This class computes the solution to $J x = b$ using the Nic method. More...

#include <LOCA_SingularJacobianSolve_Nic.H>

Inheritance diagram for LOCA::SingularJacobianSolve::Nic:

[legend]
Collaboration diagram for LOCA::SingularJacobianSolve::Nic:
[legend]
List of all members.

Public Member Functions

 Nic (NOX::Parameter::List &params)
 Constructor.
 Nic (const Nic &source)
 Copy constructor.
virtual ~Nic ()
 Destructor.
virtual LOCA::SingularJacobianSolve::Genericclone () const
 Clone function.
virtual LOCA::SingularJacobianSolve::Genericoperator= (const LOCA::SingularJacobianSolve::Generic &source)
 Assignment operator.
virtual Nicoperator= (const Nic &source)
 Assignment operator.
virtual NOX::Abstract::Group::ReturnType reset (NOX::Parameter::List &params)
 Reset parameters.
virtual NOX::Abstract::Group::ReturnType compute (NOX::Parameter::List &params, LOCA::Continuation::AbstractGroup &grp, const NOX::Abstract::Vector &input, const NOX::Abstract::Vector &approxNullVec, const NOX::Abstract::Vector &jacApproxNullVec, NOX::Abstract::Vector &result)
 Computes the solution as described above.
virtual NOX::Abstract::Group::ReturnType computeMulti (NOX::Parameter::List &params, LOCA::Continuation::AbstractGroup &grp, const NOX::Abstract::Vector *const *inputs, const NOX::Abstract::Vector &approxNullVec, const NOX::Abstract::Vector &jacApproxNullVec, NOX::Abstract::Vector **results, int nVecs)
 Computes solution for multiple RHS.

Detailed Description

This class computes the solution to $J x = b$ using the Nic method.

The idea here is to use deflation of the right hand side to improve the conditioning of the linear system. Typically a solution to $J x = b$ when $J$ is nearly singular will have a large component in the direction of the null vector $v$. The idea then is to deflate $Jv$ out of the right hand side $b$. The complete algorithm used here is:

\[ \begin{aligned} &\tilde{b} = b - \frac{v^T b}{v^T J v} Jv \\ &\text{Solve}\; J\tilde{x} = \tilde{b} \\ &x = \tilde{x} + \frac{v^T b}{v^T J v} v \end{aligned} \]

The solve $J\tilde{x} = \tilde{b}$ uses the underlying group's applyJacobianInverse() method and therefore this is a generic technique for computing solutions to nearly singular system since it uses any supplied linear solver.

This algorithm is selected by setting the "Method" parameter of the "Singular Solve" sublist of the NOX linear solver parameter list to "Nic". The idea for this algorithm is taken from: R. A. Nicolaides, "Deflation of Conjugate Gradients With Applications to Boundary Value Problems," SIAM J. Numer. Anal., 24(2), 1987.


Member Function Documentation

NOX::Abstract::Group::ReturnType LOCA::SingularJacobianSolve::Nic::reset NOX::Parameter::List params  )  [virtual]
 

Reset parameters.

There are no additional parameters for the Nic calculation.

Implements LOCA::SingularJacobianSolve::Generic.


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