Thyra::LinearOpBase< RangeScalar, DomainScalar > Class Template Reference

#include <Thyra_LinearOpBaseDecl.hpp>

Inheritance diagram for Thyra::LinearOpBase< RangeScalar, DomainScalar >:

[legend]
List of all members.

Public pure virtual functions (must be overridden by subclass)

virtual Teuchos::RefCountPtr<
const VectorSpaceBase< RangeScalar > > 
range () const =0
 Return a smart pointer for the range space for this operator.
virtual Teuchos::RefCountPtr<
const VectorSpaceBase< DomainScalar > > 
domain () const =0
 Return a smart pointer for the domain space for this operator.
virtual void apply (const EConj conj, const MultiVectorBase< DomainScalar > &X, MultiVectorBase< RangeScalar > *Y, const RangeScalar alpha=Teuchos::ScalarTraits< RangeScalar >::one(), const RangeScalar beta=Teuchos::ScalarTraits< RangeScalar >::zero()) const =0
 Apply the forward non-conjugate or conjugate linear operator to a multi-vector : Y = alpha*M*X + beta*Y.

Public virtual functions with default implementations

virtual bool applySupports (const EConj conj) const
 Determines if apply() supports this conj argument.
virtual bool applyTransposeSupports (const EConj conj) const
 Determines if applyTranspose() supports this conj argument.
virtual void applyTranspose (const EConj conj, const MultiVectorBase< RangeScalar > &X, MultiVectorBase< DomainScalar > *Y, const DomainScalar alpha=Teuchos::ScalarTraits< DomainScalar >::one(), const DomainScalar beta=Teuchos::ScalarTraits< DomainScalar >::zero()) const
 Apply the non-conjugate or conjugate transposed linear operator to a multi-vector : Y = alpha*trans(M)*X + beta*Y.
virtual Teuchos::RefCountPtr<
const LinearOpBase< RangeScalar,
DomainScalar > > 
clone () const
 Clone the linear operator object (if supported).

template<class RangeScalar, class DomainScalar>
class Thyra::LinearOpBase< RangeScalar, DomainScalar >


Member Function Documentation

template<class RangeScalar, class DomainScalar>
virtual Teuchos::RefCountPtr< const VectorSpaceBase<RangeScalar> > Thyra::LinearOpBase< RangeScalar, DomainScalar >::range  )  const [pure virtual]
 

Return a smart pointer for the range space for this operator.

Note that a return value of return.get()==NULL is a flag that *this is not fully initialized.

If return.get()!=NULL, it is required that the object referenced by *return.get() must have lifetime that extends past the lifetime of the returned smart pointer object. However, the object referenced by *return.get() may change if *this modified so this reference should not be maintained for too long.

New Behavior! It is required that the VectorSpaceBase object embedded in return must be valid past the lifetime of *this linear operator object.

Implemented in Thyra::DefaultInverseLinearOp< Scalar >, Thyra::DefaultColumnwiseMultiVector< Scalar >, Thyra::DefaultVectorMultiVector< Scalar >, Thyra::EuclideanLinearOpBase< RangeScalar, DomainScalar >, Thyra::DefaultAddedLinearOp< Scalar >, Thyra::DefaultBlockedLinearOp< Scalar >, Thyra::DefaultDiagonalLinearOp< Scalar >, Thyra::DefaultIdentityLinearOp< Scalar >, Thyra::DefaultMultipliedLinearOp< Scalar >, Thyra::DefaultScaledAdjointLinearOp< Scalar >, Thyra::DefaultZeroLinearOp< Scalar >, Thyra::VectorDefaultBase< Scalar >, ComplexFFTLinearOp< RealScalar >, RealComplexFFTLinearOp< RealScalar >, and Thyra::EuclideanLinearOpBase< Scalar >.

template<class RangeScalar, class DomainScalar>
virtual Teuchos::RefCountPtr< const VectorSpaceBase<DomainScalar> > Thyra::LinearOpBase< RangeScalar, DomainScalar >::domain  )  const [pure virtual]
 

Return a smart pointer for the domain space for this operator.

Note that a return value of return.get()==NULL is a flag that *this is not fully initialized.

If return.get()!=NULL, it is required that the object referenced by *return.get() must have lifetime that extends past the lifetime of the returned smart pointer object. However, the object referenced by *return.get() may change if *this modified so this reference should not be maintained for too long.

New Behavior! It is required that the VectorSpaceBase object embedded in return must be valid past the lifetime of *this linear operator object.

Implemented in Thyra::DefaultInverseLinearOp< Scalar >, Thyra::DefaultColumnwiseMultiVector< Scalar >, Thyra::DefaultVectorMultiVector< Scalar >, Thyra::EuclideanLinearOpBase< RangeScalar, DomainScalar >, Thyra::DefaultAddedLinearOp< Scalar >, Thyra::DefaultBlockedLinearOp< Scalar >, Thyra::DefaultDiagonalLinearOp< Scalar >, Thyra::DefaultIdentityLinearOp< Scalar >, Thyra::DefaultMultipliedLinearOp< Scalar >, Thyra::DefaultScaledAdjointLinearOp< Scalar >, Thyra::DefaultZeroLinearOp< Scalar >, Thyra::VectorDefaultBase< Scalar >, ComplexFFTLinearOp< RealScalar >, RealComplexFFTLinearOp< RealScalar >, and Thyra::EuclideanLinearOpBase< Scalar >.

template<class RangeScalar, class DomainScalar>
virtual void Thyra::LinearOpBase< RangeScalar, DomainScalar >::apply const EConj  conj,
const MultiVectorBase< DomainScalar > &  X,
MultiVectorBase< RangeScalar > *  Y,
const RangeScalar  alpha = Teuchos::ScalarTraits< RangeScalar >::one(),
const RangeScalar  beta = Teuchos::ScalarTraits< RangeScalar >::zero()
const [pure virtual]
 

Apply the forward non-conjugate or conjugate linear operator to a multi-vector : Y = alpha*M*X + beta*Y.

Parameters:
conj [in] Determines whether the elements are non-conjugate or conjugate. The value NONCONJ_ELE gives the standard forward operator while the value of CONJ_ELE gives the forward operator with the complex conjugate matrix elements. For a real-valued operators, this argument is ignored and has no effect.
X [in] The right hand side multi-vector
Y [in/out] The target multi-vector being transformed
alpha [in] Scalar multiplying M, where M==*this. The default value of alpha is 1.0
beta [in] The multiplier for the target multi-vector Y. The default value of beta is 0.0.
Preconditions:

Postconditions:

  • Is it not obvious? After the function returns the multi-vector Y is transformed as indicated above.

Implemented in Thyra::EuclideanLinearOpBase< RangeScalar, DomainScalar >.

template<class RangeScalar, class DomainScalar>
bool Thyra::LinearOpBase< RangeScalar, DomainScalar >::applySupports const EConj  conj  )  const [virtual]
 

Determines if apply() supports this conj argument.

The default implementation returns true for real valued scalar types or when conj==NONCONJ_ELE for complex valued types.

Reimplemented in Thyra::SingleScalarEuclideanLinearOpBase< Scalar >, Thyra::SingleScalarLinearOpBase< Scalar >, and Thyra::SingleScalarLinearOpBase< std::complex< RealScalar > >.

Definition at line 41 of file Thyra_LinearOpBase.hpp.

template<class RangeScalar, class DomainScalar>
bool Thyra::LinearOpBase< RangeScalar, DomainScalar >::applyTransposeSupports const EConj  conj  )  const [virtual]
 

Determines if applyTranspose() supports this conj argument.

The default implementation returns false which is consistent with the below default implementation for applyTranspose().

Reimplemented in Thyra::SingleScalarEuclideanLinearOpBase< Scalar >, Thyra::SingleScalarLinearOpBase< Scalar >, and Thyra::SingleScalarLinearOpBase< std::complex< RealScalar > >.

Definition at line 47 of file Thyra_LinearOpBase.hpp.

template<class RangeScalar, class DomainScalar>
void Thyra::LinearOpBase< RangeScalar, DomainScalar >::applyTranspose const EConj  conj,
const MultiVectorBase< RangeScalar > &  X,
MultiVectorBase< DomainScalar > *  Y,
const DomainScalar  alpha = Teuchos::ScalarTraits< DomainScalar >::one(),
const DomainScalar  beta = Teuchos::ScalarTraits< DomainScalar >::zero()
const [virtual]
 

Apply the non-conjugate or conjugate transposed linear operator to a multi-vector : Y = alpha*trans(M)*X + beta*Y.

Parameters:
conj [in] Determines whether the elements are non-conjugate or conjugate. The value NONCONJ_ELE gives the standard transposed operator with non-conjugate transposed matrix elements while the value of CONJ_ELE gives the standard adjoint operator with the complex conjugate transposed matrix elements. For a real-valued operators, this argument is ignored and has no effect.
X [in] The right hand side multi-vector
Y [in/out] The target multi-vector being transformed
alpha [in] Scalar multiplying M, where M==*this. The default value of alpha is 1.0
beta [in] The multiplier for the target multi-vector Y. The default value of beta is 0.0.
Preconditions:

Postconditions:

  • Is it not obvious? After the function returns the multi-vector Y is transformed as indicated above.

The default implementation throws an exception but gives a very good error message. The assumption here is that most linear operators will not be able to support an transpose apply and that is why this default implementation is provided.

Reimplemented in Thyra::EuclideanLinearOpBase< RangeScalar, DomainScalar >.

Definition at line 53 of file Thyra_LinearOpBase.hpp.

template<class RangeScalar, class DomainScalar>
Teuchos::RefCountPtr< const LinearOpBase< RangeScalar, DomainScalar > > Thyra::LinearOpBase< RangeScalar, DomainScalar >::clone  )  const [virtual]
 

Clone the linear operator object (if supported).

The primary purpose for this function is to allow a client to capture the current state of a linear operator object and be guaranteed that some other client will not alter its behavior. A smart implementation will use reference counting and lazy evaluation internally and will not actually copy any large amount of data unless it has to.

The default implementation returns return.get()==NULL which is allowable. A linear operator object is not required to return a non-NULL value but many good matrix-based linear operator implementations will.

Reimplemented in Thyra::MultiVectorBase< Scalar >, Thyra::DefaultInverseLinearOp< Scalar >, Thyra::DefaultAddedLinearOp< Scalar >, Thyra::DefaultBlockedLinearOp< Scalar >, Thyra::DefaultDiagonalLinearOp< Scalar >, Thyra::DefaultIdentityLinearOp< Scalar >, Thyra::DefaultMultipliedLinearOp< Scalar >, Thyra::DefaultScaledAdjointLinearOp< Scalar >, and Thyra::DefaultZeroLinearOp< Scalar >.

Definition at line 72 of file Thyra_LinearOpBase.hpp.


The documentation for this class was generated from the following files:
Generated on Thu Sep 18 12:33:11 2008 for Thyra Package Browser (Single Doxygen Collection) by doxygen 1.3.9.1