HCL_LinearOp_d is the base class for all linear operators
![]() | Domain () const Domain space access |
![]() | Range () const Range space access |
![]() | Image ( const HCL_Vector_d & x, HCL_Vector_d & y ) const Image computes the action of the operator on x, giving y |
![]() | AdjImage ( const HCL_Vector_d & y, HCL_Vector_d & x ) const AdjImage computes the action of the adjoint on y, giving x |
![]() | CheckAdj (int Display = 1, double tol = 1000 ) CheckAdj tests that the operator and its adjoint satisfy the "adjointness" relationship |
![]() | NormalImage ( const HCL_Vector_d & x, HCL_Vector_d & z ) const NormalImage computes the action of the normal on x, giving z |
![]() | CheckNormal ( int display = 1, double tol = 100 ) CheckNormal tests that the normal operator N is really defined by N = A'A |
![]() | InvImage (const HCL_Vector_d & y, HCL_Vector_d & x) const InvImage computes the action of the inverse on y, giving x |
![]() | InvAdjImage (const HCL_Vector_d & x, HCL_Vector_d & y) const InvAdjImage computes the action of the inverse adjoint on x, giving y |
![]() | 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 ![]() |
![]() | 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 ![]() |
![]() | NormalImageAdd (const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const NormalImageAdd implements ![]() |
![]() | InvImageAdd (const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const InvImageAdd implements ![]() |
![]() | InvAdjImageAdd (const HCL_Vector_d & x, const HCL_Vector_d & z, HCL_Vector_d & y, double a=1.0, double b=1.0) const InvAdjImageAdd implements ![]() |
![]() | ImageAdd (const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const ImageAdd implements ![]() |
![]() | AdjImageAdd (const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const AdjImageAdd implements ![]() |
![]() | NormalImageAdd (const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const NormalImageAdd implements ![]() |
![]() | InvImageAdd (const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const InvImageAdd implements ![]() |
![]() | InvAdjImageAdd (const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const InvAdjImageAdd implements ![]() |
HCL_LinearOp_d is the base class for all linear operators. This class represents a linear operator mapping one vector space to another. The primary methods are:Note that this class makes no assumption about the representation of the operator. Examples include operators defined by dense or sparse matrices and solution operators of (linear) PDEs defined by simulations.
- Domain Returns a reference to the domain of the operator. This is used primarily for error-checking.
- Range Returns a reference to the range of the operator. This is used primarily for error-checking.
- Image Computes the action of the operator on a vector. Here is an example illustrating the use of Domain, Range, and Image:
void fcn( HCL_LinearOp_d & L,HCL_Vector_d & x,HCL_Vector_d & y ) { if( x.Space() != L.Domain() || y.Space() != L.Range() ) // Error condition . . . L.Image( x,y ); // y <-- Lx . . . }- ImageAdd Computes
or
, where a and b are scalars.
- AdjImage Computes the action of the adjoint of the operator on a vector. This method is used as follows:
L.AdjImage( y,x ); // x <-- L'yThe method is implemented as an error in this base class. In a derived class, this method must be implemented to behave as advertised if the operator will be used by algorithms which require the adjoint. If the operator is not intended to be used by such algorithms, then this method need not be over-ridden.- AdjImageAdd Analogous to ImageAdd, but for the adjoint.
- InvImage Computes the action of the inverse of the operator on a vector. This method is used as follows:
L.InvImage( y,x ); // x <-- L^{-1}yThe method is implemented as an error in this base class. In a derived class, this method must be implemented to behave as advertised if the operator will be used by algorithms which require the inverse. If the operator is not intended to be used by such algorithms, then this method need not be over-ridden.- InvImageAdd Analogous to ImageAdd, but for the inverse.
- InvAdjImage Computes the action of the inverse of the adjoint on a vector. The method is implemented as an error in this base class. In a derived class, this method must be implemented to behave as advertised if the operator will be used by algorithms which require the inverse of the adjoint. If the operator is not intended to be used by such algorithms, then this method need not be over-ridden.
- InvAdjImageAdd Analogous to ImageAdd, but for the inverse of the adjoint.
- CheckAdj tests that the operator and its adjoint satisfy the "adjointness" relationship.
- NormalImage Computes the action of the normal operator on a vector. This method is used as follows:
L.NormalImage( x,z ); // z <-- L'LyThe method is implemented in this base class to call the Image method followed by the AdjImage method. In a derived class, this method can be reimplemented if there is a more efficient way to compute the normal operator.- NormalImageAdd Analogous to ImageAdd, but for the normal operator.
- CheckNormal tests that the Image, AdjImage, and NormalImage methods are consistent.
virtual HCL_VectorSpace_d& Range() const
virtual void Image( const HCL_Vector_d & x, HCL_Vector_d & y ) const
virtual void AdjImage( const HCL_Vector_d & y, HCL_Vector_d & x ) const
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 InvImage(const HCL_Vector_d & y, HCL_Vector_d & x) const
virtual void InvAdjImage(const HCL_Vector_d & x, HCL_Vector_d & y) const
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
. This provides
for efficiency in creating linear combinations of the operator output
and another vector.
An efficient implementation will avoid temporary storage of intermediate
results, as well as multiple passes through the data. The
scalars default to 1.0; if left at their default values, no
multiplies are actually performed. For convenience we provide
a default (inefficient) implementation: efficient implementations
for concrete operators will override this.
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
. This
provides for efficiency in creating linear combinations of the
operator output and another vector. An efficient
implementation will avoid temporary storage of intermediate
results, as well as multiple passes through the data. The
scalars default to 1.0; if left at their default values, no
multiplies are actually performed. For convenience we provide
a default (inefficient) implementation: efficient
implementations for concrete operators will override this.
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
. This
provides for efficiency in creating linear combinations of the
operator output and another vector, as frequently occurs in iterative
algorithms. An efficient implementation will avoid temporary storage
of intermediate results, as well as multiple passes through the data.
The scalars default to 1.0; if left at their default values, no
multiplies are actually performed. For convenience we provide
a default (inefficient) implementation: efficient implementations
for concrete operators will override this.
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
. This
provides for efficiency in creating linear combinations of the
operator output and another vector, as frequently occurs in
iterative algorithms. An efficient implementation will avoid
temporary storage of intermediate results, as well as multiple
passes through the data. The scalars default to 1.0; if left
at their default values, no multiplies are actually performed.
For convenience we provide a default (inefficient)
implementation: efficient implementations for concrete
operators will override this.
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
. This
provides for efficiency in creating linear combinations of the
operator output and another vector, as frequently occurs in iterative
algorithms. An efficient implementation will avoid temporary storage
of intermediate results, as well as multiple passes through the data.
The scalars default to 1.0; if left at their default values, no
multiplies are actually performed. For convenience we provide
a default (inefficient) implementation: efficient implementations
for concrete operators will override this.
virtual void ImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
. This provides
for efficiency in creating linear combinations of the operator output
and another vector.
An efficient implementation will avoid temporary storage of intermediate
results, as well as multiple passes through the data. The
scalars default to 1.0; if left at their default values, no
multiplies are actually performed. For convenience we provide
a default (inefficient) implementation: efficient implementations
for concrete operators will override this.
virtual void AdjImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
. This provides
for efficiency in creating linear combinations of the operator output
and another vector.
An efficient implementation will avoid temporary storage of intermediate
results, as well as multiple passes through the data. The
scalars default to 1.0; if left at their default values, no
multiplies are actually performed. For convenience we provide
a default (inefficient) implementation: efficient implementations
for concrete operators will override this.
virtual void NormalImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
. This
provides for efficiency in creating linear combinations of the
operator output and another vector, as frequently occurs in iterative
algorithms. An efficient implementation will avoid temporary storage
of intermediate results, as well as multiple passes through the data.
The scalars default to 1.0; if left at their default values, no
multiplies are actually performed. For convenience we provide
a default (inefficient) implementation: efficient implementations
for concrete operators will override this.
virtual void InvImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
. This
provides for efficiency in creating linear combinations of the
operator output and another vector, as frequently occurs in iterative
algorithms. An efficient implementation will avoid temporary storage
of intermediate results, as well as multiple passes through the data.
The scalars default to 1.0; if left at their default values, no
multiplies are actually performed. For convenience we provide
a default (inefficient) implementation: efficient implementations
for concrete operators will override this.
virtual void InvAdjImageAdd(const HCL_Vector_d & x, HCL_Vector_d & y, double a=1.0, double b=1.0) const
. This
provides for efficiency in creating linear combinations of the
operator output and another vector, as frequently occurs in iterative
algorithms. An efficient implementation will avoid temporary storage
of intermediate results, as well as multiple passes through the data.
The scalars default to 1.0; if left at their default values, no
multiplies are actually performed. For convenience we provide
a default (inefficient) implementation: efficient implementations
for concrete operators will override this.
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