class HCL_BlockLinearOp_d : public HCL_LinearOp_d

HCL_BlockLinearOp_d implements a 2D array of linear operators acting on a product vector space

Inheritance:


Public Methods

HCL_BlockLinearOp_d ( HCL_ProductSpace_d * d, HCL_ProductSpace_d * r )
Usual constructor; needs the domain and range spaces
HCL_BlockLinearOp_d ( HCL_ProductSpace_d * d, HCL_VectorSpace_d * r, int flag )
Special constructor for the case of a ``row'' or ``column'' operator
int Initialized () const
Initialized is a boolean method indicating whether all blocks in the operator have been initialized
int IsSet ( int i, int j ) const
IsSet is a boolean indicated whether the (i,j) block has been initialized
virtual HCL_VectorSpace_d& Domain () const
Domain space access. Returns a reference to the domain.
virtual HCL_VectorSpace_d& Range () const
Range space access. Returns a reference to the range.
HCL_LinearOp_d& operator) ( int i, int j ) const
The () operator provides access to the individual operators.
int Rows () const
Rows returns the number of rows in the array.
int Cols () const
Cols returns the number of columns in the array.
virtual void Image ( const HCL_Vector_d & x, HCL_Vector_d & y ) const
Image computes the action of the operator on x, giving y.
virtual void AdjImage ( const HCL_Vector_d & x, HCL_Vector_d & y ) const
AdjImage computes the action of the adjoint on y, giving x.
virtual void InvImage (const HCL_Vector_d & y, HCL_Vector_d & x) const
InvImage computes the action of the inverse on y, giving x
virtual void InvAdjImage (const HCL_Vector_d & x, HCL_Vector_d & y) const
InvAdjImage computes the action of the inverse adjoint on x, giving y
virtual void ImageAdd (const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const
ImageAdd implements
virtual void AdjImageAdd (const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const
AdjImageAdd implements
virtual void ImageAdd (const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
ImageAdd implements
virtual void AdjImageAdd (const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
AdjImageAdd implements
void SetNext ( HCL_LinearOp_d * L )
SetNext sets the "next" block to L; when this method is used, the blocks must be specified by rows
void Set ( int i, int j, HCL_LinearOp_d * L )
Set sets the (i,j) block to L
virtual ostream& Write ( ostream & str ) const
Write invokes the Write method for the blocks.

Inherited from HCL_LinearOp_d:

Public Methods

int CheckAdj(int Display = 1, double tol = 1000 )
virtual void NormalImage( const HCL_Vector_d & x, HCL_Vector_d & z ) const
int CheckNormal( int display = 1, double tol = 100 )
virtual void NormalImageAdd(const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void InvImageAdd(const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void InvAdjImageAdd(const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void NormalImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void InvImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
virtual void InvAdjImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const

Inherited from HCL_Base:

Public Methods

void IncCount() const
void DecCount() const
int Count() const

Documentation

HCL_BlockLinearOp_d implements a 2D array of linear operators acting on a product vector space. For example, if the array is 2x2, the operator is of the form In general, HCL_BlockLinearOp_d represents an operator defined by

In order to construct a general block operator, one must specify the domain and range, which are product spaces represented by instances of HCL_ProductSpace_d. The blocks are then specified by rows using the SetNext method, or in any order using the Set method. Here is an example of creating a block operator using the SetNext method. In this example, the operator is , that is, the domain space has two factors, while the range space has three.

// X and Y are instances of HCL_ProductSpace_d with 2 and 3 factors,
// respectively.  The operator L will map X into Y.

   HCL_BlockLinearOp_d L( &X,&Y );

// L11, L12, L21, L22, L31, L32 are instances of HCL_LinearOp_d with the
// appropriate domains and ranges.  For example, L21 must map X(1) into Y(2).
// Note that, when using the SetNext method, the blocks are specified by
// rows.

   L.SetNext( &L11 );
   L.SetNext( &L12 );
   L.SetNext( &L21 );
   L.SetNext( &L22 );
   L.SetNext( &L31 );
   L.SetNext( &L32 );

// L is now ready to use.
The same thing can be accomplished using the Set method:
// X and Y are instances of HCL_ProductSpace_d with 2 and 3 factors,
// respectively.  The operator L will map X into Y.

   HCL_BlockLinearOp_d L( &X,&Y );

// L11, L12, L21, L22, L31, L32 are instances of HCL_LinearOp_d with the
// appropriate domains and ranges.  For example, L21 must map X(1) into Y(2).
// Note that, when using the Set method, the blocks can be specified in
// any order.

   L.Set( 1,1,&L11 );
   L.Set( 2,1,&L21 );
   L.Set( 3,2,&L32 );
   L.Set( 2,2,&L22 );
   L.Set( 3,1,&L31 );
   L.Set( 1,2,&L12 );

// L is now ready to use.
It is not intended that SetNext and Set both be used in initializing a single operator (although they should work---SetNext sets the first unitialized block, scanning across the rows).

It is also possible to use HCL_BlockLinearOp_d to represent a "row" operator or a "column" operator. A row operator maps a product space into an ordinary vector space, while a column operator maps an ordinary vector space into a product space. This option is provided so that users of the class do not need to construct a product space with one factor to represent an ordinary vector space. To construct a row or column operator, pass the constructor the product space, the ordinary vector space, and either the ROWOP or the COLUMNOP flag (these flags are defined in the header file).

HCL_BlockLinearOp_d( HCL_ProductSpace_d * d, HCL_ProductSpace_d * r )
Usual constructor; needs the domain and range spaces. The operators are defined with either the SetNext method or the Set method.

HCL_BlockLinearOp_d( HCL_ProductSpace_d * d, HCL_VectorSpace_d * r, int flag )
Special constructor for the case of a ``row'' or ``column'' operator. The input flag must have value ROWOP or COLUMNOP. If the operator is a row, then the product space is the domain, and the vector space is the range; if the operator is a column, the reverse is true.

int Initialized() const
Initialized is a boolean method indicating whether all blocks in the operator have been initialized

int IsSet( int i, int j ) const
IsSet is a boolean indicated whether the (i,j) block has been initialized

virtual HCL_VectorSpace_d& Domain() const
Domain space access. Returns a reference to the domain.

virtual HCL_VectorSpace_d& Range() const
Range space access. Returns a reference to the range.

HCL_LinearOp_d& operator)( int i, int j ) const
The () operator provides access to the individual operators.

int Rows() const
Rows returns the number of rows in the array.

int Cols() const
Cols returns the number of columns in the array.

virtual void Image( const HCL_Vector_d & x, HCL_Vector_d & y ) const
Image computes the action of the operator on x, giving y.

virtual void AdjImage( const HCL_Vector_d & x, HCL_Vector_d & y ) const
AdjImage computes the action of the adjoint on y, giving x.

virtual void InvImage(const HCL_Vector_d & y, HCL_Vector_d & x) const
InvImage computes the action of the inverse on y, giving x. This method is not implemented in this initial version of the class, and returns an error message.

virtual void InvAdjImage(const HCL_Vector_d & x, HCL_Vector_d & y) const
InvAdjImage computes the action of the inverse adjoint on x, giving y. This method is not implemented in this initial version of the class, and returns an error message.

virtual void ImageAdd(const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const
ImageAdd implements

virtual void AdjImageAdd(const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const
AdjImageAdd implements

virtual void ImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
ImageAdd implements

virtual void AdjImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
AdjImageAdd implements

void SetNext( HCL_LinearOp_d * L )
SetNext sets the "next" block to L; when this method is used, the blocks must be specified by rows

void Set( int i, int j, HCL_LinearOp_d * L )
Set sets the (i,j) block to L

virtual ostream& Write( ostream & str ) const
Write invokes the Write method for the blocks.


This class has no child classes.

alphabetic index hierarchy of classes


this page has been generated automatically by doc++

(c)opyright by Malte Zöckler, Roland Wunderling
contact: doc++@zib.de