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_MPI_LINEAR_OP_BASE_DECL_HPP
00030 #define THYRA_MPI_LINEAR_OP_BASE_DECL_HPP
00031
00032 #include "Thyra_SingleScalarEuclideanLinearOpBaseDecl.hpp"
00033 #include "Teuchos_StandardMemberCompositionMacros.hpp"
00034
00035 namespace Thyra {
00036
00037 template<class Scalar> class MPIVectorSpaceBase;
00038
00169 template<class Scalar>
00170 class MPILinearOpBase : virtual public SingleScalarEuclideanLinearOpBase<Scalar> {
00171 public:
00172
00174 using SingleScalarEuclideanLinearOpBase<Scalar>::euclideanApply;
00175
00179 Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > rangeScalarProdVecSpc() const;
00181 Teuchos::RefCountPtr<const ScalarProdVectorSpaceBase<Scalar> > domainScalarProdVecSpc() const;
00186 void euclideanApply(
00187 const ETransp M_trans
00188 ,const MultiVectorBase<Scalar> &X
00189 ,MultiVectorBase<Scalar> *Y
00190 ,const Scalar alpha
00191 ,const Scalar beta
00192 ) const;
00194
00195 protected:
00196
00199
00208 STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, forceUnitStride )
00209
00210
00217 MPILinearOpBase();
00218
00234 virtual void setSpaces(
00235 const Teuchos::RefCountPtr<const MPIVectorSpaceBase<Scalar> > &range
00236 ,const Teuchos::RefCountPtr<const MPIVectorSpaceBase<Scalar> > &domain
00237 );
00238
00257 virtual void setLocalDimensions(
00258 MPI_Comm mpiComm
00259 ,const Index localDimRange
00260 ,const Index localDimDomain
00261 );
00262
00264
00267
00280 virtual void euclideanApply(
00281 const ETransp M_trans
00282 ,const RTOpPack::SubVectorT<Scalar> &local_x
00283 ,const RTOpPack::MutableSubVectorT<Scalar> *local_y
00284 ,const Scalar alpha
00285 ,const Scalar beta
00286 ) const = 0;
00287
00308 virtual void euclideanApply(
00309 const ETransp M_trans
00310 ,const RTOpPack::SubMultiVectorT<Scalar> &local_X
00311 ,const RTOpPack::MutableSubMultiVectorT<Scalar> *local_Y
00312 ,const Scalar alpha
00313 ,const Scalar beta
00314 ) const;
00315
00317
00318 private:
00319
00320 Teuchos::RefCountPtr<const MPIVectorSpaceBase<Scalar> > range_;
00321 Teuchos::RefCountPtr<const MPIVectorSpaceBase<Scalar> > domain_;
00322
00323 };
00324
00325 }
00326
00327 #endif