00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef THYRA_SINGLE_SCALAR_LINEAR_OP_BASE_DECL_HPP
00030 #define THYRA_SINGLE_SCALAR_LINEAR_OP_BASE_DECL_HPP
00031
00032 #include "Thyra_LinearOpDefaultBaseDecl.hpp"
00033
00034 namespace Thyra {
00035
00046 template<class Scalar>
00047 class SingleScalarLinearOpBase : virtual public LinearOpDefaultBase<Scalar> {
00048 public:
00049
00050 #ifdef THYRA_INJECT_USING_DECLARATIONS
00051 using LinearOpDefaultBase<Scalar>::apply;
00052 #endif
00053
00056
00058 bool applySupports( const EConj conj ) const;
00060 bool applyTransposeSupports( const EConj conj ) const;
00062 void apply(
00063 const EConj conj
00064 ,const MultiVectorBase<Scalar> &X
00065 ,MultiVectorBase<Scalar> *Y
00066 ,const Scalar alpha
00067 ,const Scalar beta
00068 ) const;
00070 void applyTranspose(
00071 const EConj conj
00072 ,const MultiVectorBase<Scalar> &X
00073 ,MultiVectorBase<Scalar> *Y
00074 ,const Scalar alpha
00075 ,const Scalar beta
00076 ) const;
00077
00079
00080 protected:
00081
00084
00096 virtual bool opSupported(EOpTransp M_trans) const = 0;
00097
00106 virtual void apply(
00107 const EOpTransp M_trans,
00108 const MultiVectorBase<Scalar> &X,
00109 MultiVectorBase<Scalar> *Y,
00110 const Scalar alpha,
00111 const Scalar beta
00112 ) const = 0;
00113
00115
00116 };
00117
00118 }
00119
00120 #endif // THYRA_SINGLE_SCALAR_LINEAR_OP_BASE_DECL_HPP