10 #ifndef THYRA_LINEAR_OP_DECL_HPP
11 #define THYRA_LINEAR_OP_DECL_HPP
13 #include "Thyra_OperatorVectorTypes.hpp"
14 #include "Teuchos_Describable.hpp"
15 #include "Teuchos_ExpandScalarTypeMacros.hpp"
16 #include "Teuchos_PromotionTraits.hpp"
158 template<
class Scalar>
320 template<
class Scalar>
321 bool isFullyUninitialized(
const LinearOpBase<Scalar> &M );
329 template<
class Scalar>
330 bool isPartiallyInitialized(
const LinearOpBase<Scalar> &M );
338 template<
class Scalar>
339 bool isFullyInitialized(
const LinearOpBase<Scalar> &M );
346 template<
class Scalar>
348 bool opSupported(
const LinearOpBase<Scalar> &M,
EOpTransp M_trans );
355 template<
class Scalar>
357 const LinearOpBase<Scalar> &M,
359 const MultiVectorBase<Scalar> &X,
360 const Ptr<MultiVectorBase<Scalar> > &Y,
361 const Scalar alpha = static_cast<Scalar>(1.0),
362 const Scalar beta = static_cast<Scalar>(0.0)
374 const LinearOpBase<double> &M,
376 const MultiVectorBase<double> &X,
377 const Ptr<MultiVectorBase<double> > &Y,
378 const double alpha = 1.0,
379 const double beta = 0.0
391 template<
class Scalar>
393 bool Thyra::isFullyUninitialized(
const LinearOpBase<Scalar> &M )
399 template<
class Scalar>
400 bool Thyra::isPartiallyInitialized(
const LinearOpBase<Scalar> &M )
414 template<
class Scalar>
415 bool Thyra::isFullyInitialized(
const LinearOpBase<Scalar> &M )
429 template<
class Scalar>
431 bool Thyra::opSupported(
const LinearOpBase<Scalar> &M,
EOpTransp M_trans )
433 return M.opSupported(M_trans);
439 const LinearOpBase<double> &M,
441 const MultiVectorBase<double> &X,
442 const Ptr<MultiVectorBase<double> > &Y,
447 apply<double>(M, M_trans, X, Y, alpha, beta);
451 #endif // THYRA_LINEAR_OP_DECL_HPP
virtual bool opSupportedImpl(EOpTransp M_trans) const =0
Override in subclass.
bool is_null(const boost::shared_ptr< T > &p)
virtual RCP< const VectorSpaceBase< Scalar > > range() const =0
Return a smart pointer for the range space for this operator.
EOpTransp
Enumeration for determining how a linear operator is applied. `*.
virtual void applyImpl(const EOpTransp M_trans, const MultiVectorBase< Scalar > &X, const Ptr< MultiVectorBase< Scalar > > &Y, const Scalar alpha, const Scalar beta) const =0
Override in subclass.
Use the non-transposed operator.
Use the transposed operator with complex-conjugate clements (same as TRANS for real scalar types)...
bool opSupported(EOpTransp M_trans) const
Return if the M_trans operation of apply() is supported or not.
Use the non-transposed operator with complex-conjugate elements (same as NOTRANS for real scalar type...
Use the transposed operator.
Interface for a collection of column vectors called a multi-vector.
bool opSupported(const LinearOpBase< Scalar > &M, EOpTransp M_trans)
Determines if an operation is supported for a single scalar type.
void apply(const EOpTransp M_trans, const MultiVectorBase< Scalar > &X, const Ptr< MultiVectorBase< Scalar > > &Y, const Scalar alpha, const Scalar beta) const
Apply the linear operator to a multi-vector : Y = alpha*op(M)*X + beta*Y.
virtual RCP< const LinearOpBase< Scalar > > clone() const
Clone the linear operator object (if supported).
Base class for all linear operators.
virtual RCP< const VectorSpaceBase< Scalar > > domain() const =0
Return a smart pointer for the domain space for this operator.