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_SERIAL_LINEAR_OP_BASE_DECL_HPP
00030 #define THYRA_SERIAL_LINEAR_OP_BASE_DECL_HPP
00031
00032 #include "Thyra_SingleScalarEuclideanLinearOpBaseDecl.hpp"
00033 #include "Teuchos_StandardMemberCompositionMacros.hpp"
00034
00035 namespace Thyra {
00036
00161 template<class Scalar>
00162 class SerialLinearOpBase : virtual public SingleScalarEuclideanLinearOpBase<Scalar>
00163 {
00164 public:
00165
00167 using SingleScalarEuclideanLinearOpBase<Scalar>::euclideanApply;
00168
00172 Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > rangeScalarProdVecSpc() const;
00174 Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > domainScalarProdVecSpc() const;
00179 void euclideanApply(
00180 const ETransp M_trans
00181 ,const MultiVectorBase<Scalar> &X
00182 ,MultiVectorBase<Scalar> *Y
00183 ,const Scalar alpha
00184 ,const Scalar beta
00185 ) const;
00187
00188 protected:
00189
00192
00201 STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, forceUnitStride )
00202
00203
00210 SerialLinearOpBase();
00211
00227 virtual void setSpaces(
00228 const Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > &range
00229 ,const Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > &domain
00230 );
00231
00249 virtual void setDimensions(
00250 const Index dimRange
00251 ,const Index dimDomain
00252 );
00253
00255
00258
00271 virtual void euclideanApply(
00272 const ETransp M_trans
00273 ,const RTOpPack::SubVectorT<Scalar> &x
00274 ,const RTOpPack::MutableSubVectorT<Scalar> *y
00275 ,const Scalar alpha
00276 ,const Scalar beta
00277 ) const = 0;
00278
00299 virtual void euclideanApply(
00300 const ETransp M_trans
00301 ,const RTOpPack::SubMultiVectorT<Scalar> &X
00302 ,const RTOpPack::MutableSubMultiVectorT<Scalar> *Y
00303 ,const Scalar alpha
00304 ,const Scalar beta
00305 ) const;
00306
00308
00309 private:
00310
00311 Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > range_;
00312 Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > domain_;
00313
00314 };
00315
00316 }
00317
00318 #endif