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_SPMD_LINEAR_OP_BASE_DECL_HPP
00030 #define THYRA_SPMD_LINEAR_OP_BASE_DECL_HPP
00031
00032 #include "Thyra_SingleScalarEuclideanLinearOpBaseDecl.hpp"
00033 #include "Teuchos_StandardMemberCompositionMacros.hpp"
00034
00035 namespace Teuchos { template<class Ordinal> class Comm; }
00036
00037 namespace Thyra {
00038
00039 template<class Scalar> class SpmdVectorSpaceBase;
00040
00172 template<class Scalar>
00173 class SpmdLinearOpBase : virtual public SingleScalarEuclideanLinearOpBase<Scalar> {
00174 public:
00175
00177 using SingleScalarEuclideanLinearOpBase<Scalar>::euclideanApply;
00178
00182 Teuchos::RCP<const ScalarProdVectorSpaceBase<Scalar> > rangeScalarProdVecSpc() const;
00184 Teuchos::RCP<const ScalarProdVectorSpaceBase<Scalar> > domainScalarProdVecSpc() const;
00189 void euclideanApply(
00190 const EOpTransp M_trans
00191 ,const MultiVectorBase<Scalar> &X
00192 ,MultiVectorBase<Scalar> *Y
00193 ,const Scalar alpha
00194 ,const Scalar beta
00195 ) const;
00197
00198 protected:
00199
00202
00211 STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, forceUnitStride );
00212
00220 SpmdLinearOpBase();
00221
00237 virtual void setSpaces(
00238 const Teuchos::RCP<const SpmdVectorSpaceBase<Scalar> > &range
00239 ,const Teuchos::RCP<const SpmdVectorSpaceBase<Scalar> > &domain
00240 );
00241
00263 virtual void setLocalDimensions(
00264 const Teuchos::RCP<const Teuchos::Comm<Index> > &comm
00265 ,const Index localDimRange
00266 ,const Index localDimDomain
00267 );
00268
00270
00273
00286 virtual void euclideanApply(
00287 const EOpTransp M_trans
00288 ,const RTOpPack::ConstSubVectorView<Scalar> &local_x
00289 ,const RTOpPack::SubVectorView<Scalar> *local_y
00290 ,const Scalar alpha
00291 ,const Scalar beta
00292 ) const = 0;
00293
00314 virtual void euclideanApply(
00315 const EOpTransp M_trans
00316 ,const RTOpPack::ConstSubMultiVectorView<Scalar> &local_X
00317 ,const RTOpPack::SubMultiVectorView<Scalar> *local_Y
00318 ,const Scalar alpha
00319 ,const Scalar beta
00320 ) const;
00321
00323
00324 private:
00325
00326 Teuchos::RCP<const SpmdVectorSpaceBase<Scalar> > range_;
00327 Teuchos::RCP<const SpmdVectorSpaceBase<Scalar> > domain_;
00328 Teuchos::RCP<const ScalarProdVectorSpaceBase<Scalar> > sp_range_;
00329 Teuchos::RCP<const ScalarProdVectorSpaceBase<Scalar> > sp_domain_;
00330
00331 };
00332
00333 }
00334
00335 #endif // THYRA_SPMD_LINEAR_OP_BASE_DECL_HPP