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_PRODUCT_VECTOR_SPACE_DECL_HPP
00030 #define THYRA_PRODUCT_VECTOR_SPACE_DECL_HPP
00031
00032 #include "Thyra_ProductVectorSpaceBase.hpp"
00033 #include "Thyra_VectorSpaceDefaultBase.hpp"
00034
00035 namespace Thyra {
00036
00122 template<class Scalar>
00123 class DefaultProductVectorSpace
00124 : virtual public ProductVectorSpaceBase<Scalar>
00125 , virtual protected VectorSpaceDefaultBase<Scalar>
00126 {
00127 public:
00128
00131
00133 DefaultProductVectorSpace(
00134 const int numBlocks
00135 ,const Teuchos::RefCountPtr<const VectorSpaceBase<Scalar> > vecSpaces[]
00136 );
00137
00168 virtual void initialize(
00169 const int numBlocks
00170 ,const Teuchos::RefCountPtr<const VectorSpaceBase<Scalar> > vecSpaces[]
00171 );
00172
00179 bool hasBeenCloned() const;
00180
00200 virtual void uninitialize(
00201 int *numBlocks = NULL
00202 ,Teuchos::RefCountPtr<const VectorSpaceBase<Scalar> > vecSpaces[] = NULL
00203 );
00204
00213 virtual const Teuchos::RefCountPtr<const VectorSpaceBase<Scalar> >* vecSpaces() const;
00214
00223 virtual const Index* vecSpacesOffsets() const;
00224
00245 void getVecSpcPoss( Index i, int* kth_vector_space, Index* kth_global_offset ) const;
00246
00248
00251
00253 int numBlocks() const;
00255 Teuchos::RefCountPtr<const VectorSpaceBase<Scalar> > getBlock(const int k) const;
00256
00258
00261
00262 Index dim() const;
00264 bool isCompatible( const VectorSpaceBase<Scalar>& vecSpc ) const;
00266 Teuchos::RefCountPtr< VectorBase<Scalar> > createMember() const;
00268 Scalar scalarProd( const VectorBase<Scalar>& x, const VectorBase<Scalar>& y ) const;
00270 void scalarProds( const MultiVectorBase<Scalar>& X, const MultiVectorBase<Scalar>& Y, Scalar scalar_prods[] ) const;
00272 bool hasInCoreView(const Range1D& rng, const EViewType viewType, const EStrideType strideType) const;
00274 Teuchos::RefCountPtr< const VectorSpaceFactoryBase<Scalar> > smallVecSpcFcty() const;
00276 Teuchos::RefCountPtr< MultiVectorBase<Scalar> > createMembers(int numMembers) const;
00278 Teuchos::RefCountPtr< const VectorSpaceBase<Scalar> > clone() const;
00280
00281 private:
00282
00283
00284
00285
00286 typedef std::vector<Teuchos::RefCountPtr<const VectorSpaceBase<Scalar> > > vecSpaces_t;
00287 typedef std::vector<Index> vecSpacesOffsets_t;
00288
00289
00290
00291
00292 int numBlocks_;
00293 Teuchos::RefCountPtr<vecSpaces_t> vecSpaces_;
00294 Teuchos::RefCountPtr<vecSpacesOffsets_t> vecSpacesOffsets_;
00295
00296 Index dim_;
00297 bool isInCore_;
00298
00299 protected:
00300
00301
00302
00303
00305 DefaultProductVectorSpace(){ numBlocks_=0; dim_=0; }
00306
00307 };
00308
00309
00310
00311
00312 template<class Scalar>
00313 inline const Teuchos::RefCountPtr<const VectorSpaceBase<Scalar> >*
00314 DefaultProductVectorSpace<Scalar>::vecSpaces() const
00315 {
00316 return ( dim_ ? &(*vecSpaces_)[0] : NULL );
00317 }
00318
00319 template<class Scalar>
00320 inline const Index* DefaultProductVectorSpace<Scalar>::vecSpacesOffsets() const
00321 {
00322 return ( dim_ ? &(*vecSpacesOffsets_)[0] : NULL );
00323 }
00324
00325 template<class Scalar>
00326 inline bool DefaultProductVectorSpace<Scalar>::hasBeenCloned() const
00327 {
00328 return vecSpaces_.count() > 1;
00329 }
00330
00331 }
00332
00333 #endif // THYRA_PRODUCT_VECTOR_SPACE_DECL_HPP