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_EUCLIDEAN_LINEAR_OP_BASE_DECL_HPP
00030 #define THYRA_SINGLE_SCALAR_EUCLIDEAN_LINEAR_OP_BASE_DECL_HPP
00031
00032 #include "Thyra_EuclideanLinearOpBaseDecl.hpp"
00033
00034 namespace Thyra {
00035
00047 template<class Scalar>
00048 class SingleScalarEuclideanLinearOpBase : virtual public EuclideanLinearOpBase<Scalar> {
00049 public:
00050
00052 using EuclideanLinearOpBase<Scalar>::apply;
00054 using EuclideanLinearOpBase<Scalar>::euclideanApply;
00055
00058
00060 bool applySupports( const EConj conj ) const;
00061
00063 bool applyTransposeSupports( const EConj conj ) const;
00064
00066
00069
00071 void euclideanApply(
00072 const EConj conj
00073 ,const MultiVectorBase<Scalar> &X
00074 ,MultiVectorBase<Scalar> *Y
00075 ,const Scalar alpha
00076 ,const Scalar beta
00077 ) const;
00078
00080 void euclideanApplyTranspose(
00081 const EConj conj
00082 ,const MultiVectorBase<Scalar> &X
00083 ,MultiVectorBase<Scalar> *Y
00084 ,const Scalar alpha
00085 ,const Scalar beta
00086 ) const;
00087
00089
00090 protected:
00091
00094
00106 virtual bool opSupported(ETransp M_trans) const = 0;
00107
00116 virtual void euclideanApply(
00117 const ETransp M_trans
00118 ,const MultiVectorBase<Scalar> &X
00119 ,MultiVectorBase<Scalar> *Y
00120 ,const Scalar alpha
00121 ,const Scalar beta
00122 ) const = 0;
00123
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136 };
00137
00138 }
00139
00140 #endif // THYRA_SINGLE_SCALAR_EUCLIDEAN_LINEAR_OP_BASE_DECL_HPP