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
00030 #ifndef THYRA_DEFAULT_SPMD_VECTOR_SPACE_DECL_HPP
00031 #define THYRA_DEFAULT_SPMD_VECTOR_SPACE_DECL_HPP
00032
00033
00034 #include "Thyra_SpmdVectorSpaceDefaultBase_decl.hpp"
00035 #include "Thyra_ProductVectorSpaceBase.hpp"
00036 #include "Teuchos_Handleable.hpp"
00037
00038
00039 namespace Thyra {
00040
00041
00056 template<class Scalar>
00057 class DefaultSpmdVectorSpace
00058 : public SpmdVectorSpaceDefaultBase<Scalar>,
00059 public Teuchos::Handleable<VectorSpaceBase<Scalar> >
00060 {
00061 public:
00062
00063 TEUCHOS_GET_RCP(VectorSpaceBase<Scalar>);
00064
00067
00069 static RCP<DefaultSpmdVectorSpace<Scalar> > create();
00070
00078 void initialize(
00079 const Index dim
00080 );
00081
00136 void initialize(
00137 const RCP<const Teuchos::Comm<Index> > &comm,
00138 const Index localSubDim, const Index globalDim
00139 );
00140
00149 void uninitialize();
00150
00152
00158 bool hasInCoreView(
00159 const Range1D& rng, const EViewType viewType, const EStrideType strideType
00160 ) const;
00162 RCP< const VectorSpaceBase<Scalar> > clone() const;
00164
00165 protected:
00166
00169
00171 RCP<VectorBase<Scalar> >
00172 createMember() const;
00174 RCP<MultiVectorBase<Scalar> >
00175 createMembers(int numMembers) const;
00177 RCP<VectorBase<Scalar> >
00178 createMemberView( const RTOpPack::SubVectorView<Scalar> &raw_v ) const;
00180 RCP<const VectorBase<Scalar> >
00181 createMemberView( const RTOpPack::ConstSubVectorView<Scalar> &raw_v ) const;
00183 RCP<MultiVectorBase<Scalar> >
00184 createMembersView( const RTOpPack::SubMultiVectorView<Scalar> &raw_mv ) const;
00186 RCP<const MultiVectorBase<Scalar> >
00187 createMembersView( const RTOpPack::ConstSubMultiVectorView<Scalar> &raw_mv ) const;
00188
00190
00191 public:
00192
00195
00197 RCP<const Teuchos::Comm<Index> > getComm() const;
00199 Index localSubDim() const;
00200
00202
00203 private:
00204
00205
00206
00207
00208 RCP<const Teuchos::Comm<Index> > comm_;
00209 Index localSubDim_;
00210 int numProc_;
00211 int procRank_;
00212 RCP<DefaultSpmdVectorSpace<Scalar> > weakSelfPtr_;
00213
00214
00215
00216
00217 DefaultSpmdVectorSpace();
00218
00219 public:
00220
00223
00225 DefaultSpmdVectorSpace(
00226 const Index dim
00227 );
00228
00230 DefaultSpmdVectorSpace(
00231 const RCP<const Teuchos::Comm<Index> > &comm,
00232 const Index localSubDim, const Index globalDim
00233 );
00234
00236
00237 };
00238
00239
00244 template<class Scalar>
00245 RCP<DefaultSpmdVectorSpace<Scalar> >
00246 defaultSpmdVectorSpace()
00247 {
00248 return DefaultSpmdVectorSpace<Scalar>::create();
00249 }
00250
00251
00256 template<class Scalar>
00257 RCP<DefaultSpmdVectorSpace<Scalar> >
00258 defaultSpmdVectorSpace( const Index dim )
00259 {
00260 RCP<DefaultSpmdVectorSpace<Scalar> > vs =
00261 DefaultSpmdVectorSpace<Scalar>::create();
00262 vs->initialize(dim);
00263 return vs;
00264 }
00265
00266
00272 template<class Scalar>
00273 RCP<DefaultSpmdVectorSpace<Scalar> >
00274 defaultSpmdVectorSpace(
00275 const RCP<const Teuchos::Comm<Index> > &comm,
00276 const Index localSubDim, const Index globalDim
00277 )
00278 {
00279 RCP<DefaultSpmdVectorSpace<Scalar> > vs =
00280 DefaultSpmdVectorSpace<Scalar>::create();
00281 vs->initialize(comm, localSubDim, globalDim);
00282 return vs;
00283 }
00284
00285
00286 }
00287
00288
00289 #endif // THYRA_DEFAULT_SPMD_VECTOR_SPACE_DECL_HPP