PlayaDefaultBlockVectorSpaceDecl.hpp

00001 /* @HEADER@ */
00002 //   
00003 /* @HEADER@ */
00004 
00005 #ifndef PLAYA_DEFAULT_BLOCK_VECTOR_SPACE_DECL_HPP
00006 #define PLAYA_DEFAULT_BLOCK_VECTOR_SPACE_DECL_HPP
00007 
00008 #include "PlayaDefs.hpp"
00009 #include "PlayaBlockVectorSpaceDecl.hpp"
00010 #include "Teuchos_Array.hpp"
00011 
00012 
00013 
00014 namespace Playa
00015 {
00016 using Teuchos::Array;
00017 
00024 template <class Scalar>
00025 class DefaultBlockVectorSpace : public BlockVectorSpaceBase<Scalar>
00026 {
00027 public:
00029   DefaultBlockVectorSpace(const Array<VectorSpace<Scalar> >& blocks) ;
00030 
00033   virtual const VectorSpace<Scalar>& getBlock(int b) const ;
00034 
00036   virtual RCP<VectorBase<Scalar> > createMember(const VectorSpace<Scalar>& self) const ;
00037 
00039   virtual const MPIComm& comm() const ;
00040 
00042   virtual int baseGlobalNaturalIndex() const ;
00043 
00045   int numBlocks() const {return blocks_.size();}
00046 
00047 
00048 private:
00049   Array<VectorSpace<Scalar> > blocks_;
00050   int baseGNI_;
00051 };
00052 
00053 
00055 template <class Scalar> 
00056 VectorSpace<Scalar> blockSpace(
00057   const VectorSpace<Scalar>& v1);
00058 
00060 template <class Scalar> 
00061 VectorSpace<Scalar> blockSpace(
00062   const VectorSpace<Scalar>& v1,
00063   const VectorSpace<Scalar>& v2);
00064 
00066 template <class Scalar> 
00067 VectorSpace<Scalar> blockSpace(
00068   const VectorSpace<Scalar>& v1,
00069   const VectorSpace<Scalar>& v2,
00070   const VectorSpace<Scalar>& v3);
00071 
00073 template <class Scalar> 
00074 VectorSpace<Scalar> blockSpace(
00075   const VectorSpace<Scalar>& v1,
00076   const VectorSpace<Scalar>& v2,
00077   const VectorSpace<Scalar>& v3,
00078   const VectorSpace<Scalar>& v4);
00079 
00081 template <class Scalar> 
00082 VectorSpace<Scalar> blockSpace(const Array<VectorSpace<Scalar> >& x);
00083 
00084 }
00085 
00086 #endif

doxygen