PlayaDefaultBlockVectorDecl.hpp
00001
00002
00003
00004
00005 #ifndef PLAYA_DEFAULT_BLOCK_VECTOR_DECL_HPP
00006 #define PLAYA_DEFAULT_BLOCK_VECTOR_DECL_HPP
00007
00008 #include "PlayaBlockVectorBaseDecl.hpp"
00009 #include "PlayaVectorDecl.hpp"
00010 #include "Teuchos_Array.hpp"
00011
00012
00013 namespace Playa
00014 {
00015 using Teuchos::Array;
00016
00020 template <class Scalar>
00021 class DefaultBlockVector : public BlockVectorBase<Scalar>
00022 {
00023 public:
00025 DefaultBlockVector(const VectorSpace<Scalar>& space);
00026
00028 DefaultBlockVector(const VectorSpace<Scalar>& space,
00029 const Array<Vector<Scalar> >& blocks);
00030
00032 virtual ~DefaultBlockVector(){}
00033
00037 RCP<const VectorSpaceBase<double> > space() const {return space_.ptr();}
00039
00041 virtual void setBlock(int b, const Vector<Scalar>& block) ;
00042
00044 virtual const Vector<Scalar>& getBlock(int b) const ;
00045
00047 virtual Vector<Scalar> getNonConstBlock(int b) ;
00048
00050 virtual int numBlocks() const {return blocks_.size();}
00051
00052 private:
00053 VectorSpace<Scalar> space_;
00054 Teuchos::Array<Vector<Scalar> > blocks_;
00055
00056 };
00057
00059 template <class Scalar>
00060 Vector<Scalar> blockVector(
00061 const Vector<Scalar>& v1);
00062
00064 template <class Scalar>
00065 Vector<Scalar> blockVector(
00066 const Vector<Scalar>& v1,
00067 const Vector<Scalar>& v2);
00068
00070 template <class Scalar>
00071 Vector<Scalar> blockVector(
00072 const Vector<Scalar>& v1,
00073 const Vector<Scalar>& v2,
00074 const Vector<Scalar>& v3);
00075
00077 template <class Scalar>
00078 Vector<Scalar> blockVector(
00079 const Vector<Scalar>& v1,
00080 const Vector<Scalar>& v2,
00081 const Vector<Scalar>& v3,
00082 const Vector<Scalar>& v4);
00083
00085 template <class Scalar>
00086 Vector<Scalar> blockVector(const Array<Vector<Scalar> >& x);
00087
00088
00089 }
00090
00091 #endif