PlayaDefaultBlockVectorSpaceDecl.hpp
00001
00002
00003
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