Diffpack Documentation


Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

Symmlq Class Reference

iterative method for large sparse symmetric system. More...

#include <Symmlq.h>

Inheritance diagram for Symmlq::

KrylovItSolver IterativeSolver LinEqSolver HandleId List of all members.

Public Methods

 Symmlq (NUMT shift)
 Symmlq (const LinEqSolver_prm &pm)
 ~Symmlq ()
virtual bool ok () const
virtual void performance (LinEqStatBlk &performance_status)
virtual bool solve (LinEqSystem &system)
String getStopState () const
virtual String prm2name () const
virtual void name2prm (LinEqSolver_prm &prm, const String &name)
virtual String description () const

Public Attributes

 CLASS_INFO

Protected Methods

virtual bool redim (LinEqSystem &system)
virtual bool satisfied ()

Protected Attributes

NUMT shift
NUMT alpha
NUMT beta
NUMT beta1
NUMT oldB
NUMT gamma
NUMT tmp
NUMT snprod
NUMT bstep
NUMT cs
NUMT sn
NUMT anorm
NUMT ynorm
NUMT cgnorm
NUMT gmin
NUMT gmax
NUMT diag
NUMT gbar
NUMT dbar
NUMT delta
NUMT rhs1
NUMT rhs2
int stop_state
LinEqVector r2
LinEqVector v
LinEqVector y
LinEqVector w

Detailed Description

iterative method for large sparse symmetric system.

NAME: Symmlq - iterative method for large sparse symmetric system

DESCRIPTION:

The class implements the SYMMLQ iterative method by Paige and Saunders for solving symmetric systems of linear equations `$`Ax = b`$`. The system is meant to be large and sparse, but does not have to be positive definite. In case of symmetric positive definite systems, the Conjugate Gradient (CG) method should be preferred (see class "ConjGrad").

The SYMMLQ method is intended to solve the shifted system "(A-shift*I)*x=b", where "shift" is a scalar value. In fact, the computed vector "x" may approximate an (unnormalized) eigenvector of "A" if "shift" and "b" are well chosen.

Several stop states are signalled in this algorithm. It is therefore possible to leave out external convergence monitors.

"stop_state" == -1: Matrix "A" is ill-conditioned (an estimate of cond(A) is too large).

"stop_state" == 0: Maximum number of iteration is reached before any convergence.

"stop_state" == 1: Solution "x" is acceptable.

"stop_state" == 2: The residual is satisfactory small.

"stop_state" == 3: "x" converges towards an eigenvector of "A".


Constructor & Destructor Documentation

Symmlq::Symmlq ( NUMT shift )
 

There is a default constructor without arguments. For the sake of comaptibility, there is also a constructor accepting a "LinEqSolver_prm" object, aimed to be used by "LinEqSolver_prm create".

Symmlq::Symmlq ( const LinEqSolver_prm & pm )
 

See documentation of one of the overloaded constructor.

Symmlq::~Symmlq ( ) [inline]
 


Member Function Documentation

String Symmlq::description ( ) const [virtual]
 

Reimplemented from LinEqSolver.

String Symmlq::getStopState ( ) const
 

returns a "String" contaning the information about the stop state.

void Symmlq::name2prm ( LinEqSolver_prm & prm,
const String & name ) [virtual]
 

given a string like the ones delivered by "prm2name", the current solver is reinitialized.

Reimplemented from LinEqSolver.

bool Symmlq::ok ( ) const [virtual]
 

checks whether all the internal vectors are ready in addition to the standard "KrylovItSolver ok()".

Reimplemented from KrylovItSolver.

void Symmlq::performance ( LinEqStatBlk & performance_status ) [virtual]
 

fills in the "LinEqStatBlk" object with relevant statistics regarding the last solve.

Reimplemented from IterativeSolver.

String Symmlq::prm2name ( ) const [virtual]
 

returns a string describing the current solver, based on the parameter values in use. For instance, the string "T-OM(5)" indicates that class "Orthomin" is in use with "nsearchv = 5" and "restart = false". For most solvers, this function simply returns the class name, e.g. the string "ConjGrad".

Reimplemented from LinEqSolver.

bool Symmlq::redim ( LinEqSystem & system ) [protected, virtual]
 

redimensions internal storage based on the given "LinEqSystem" object. This function is typically called from "solve".

Reimplemented from KrylovItSolver.

bool Symmlq::satisfied ( ) [protected, virtual]
 

evaluates all convergence monitors acting as stopping criteria and builds the compound convergence test depending on the monitor list and each monitors associates relational operator ("CM_AND"/"CM_OR"). The list traversed sequentially from start to end and no special priority is given. (For internal use only).

Convergence monitors that are recording the convergence history are caused to update their history tables (even if not acting as a stopping criterion). (For internal use only).

Reimplemented from IterativeSolver.

bool Symmlq::solve ( LinEqSystem & system ) [virtual]
 

takes an input argument of type "LinEqSystem" which must be properly filled. The solution process is carried out inside the function. If successful, a "true" value will be returned at the same time that different situations of convergence are recorded.

Reimplemented from KrylovItSolver.


Member Data Documentation

Symmlq::CLASS_INFO
 

NUMT Symmlq::alpha [protected]
 

NUMT Symmlq::anorm [protected]
 

NUMT Symmlq::beta [protected]
 

NUMT Symmlq::beta1 [protected]
 

NUMT Symmlq::bstep [protected]
 

NUMT Symmlq::cgnorm [protected]
 

NUMT Symmlq::cs [protected]
 

NUMT Symmlq::dbar [protected]
 

NUMT Symmlq::delta [protected]
 

NUMT Symmlq::diag [protected]
 

NUMT Symmlq::gamma [protected]
 

NUMT Symmlq::gbar [protected]
 

NUMT Symmlq::gmax [protected]
 

NUMT Symmlq::gmin [protected]
 

NUMT Symmlq::oldB [protected]
 

LinEqVector Symmlq::r2 [protected]
 

NUMT Symmlq::rhs1 [protected]
 

NUMT Symmlq::rhs2 [protected]
 

NUMT Symmlq::shift [protected]
 

NUMT Symmlq::sn [protected]
 

NUMT Symmlq::snprod [protected]
 

int Symmlq::stop_state [protected]
 

NUMT Symmlq::tmp [protected]
 

LinEqVector Symmlq::v [protected]
 

LinEqVector Symmlq::w [protected]
 

LinEqVector Symmlq::y [protected]
 

NUMT Symmlq::ynorm [protected]
 


The documentation for this class was generated from the following file:
Copyright © 2003 inuTech GmbH. All rights reserved.