PlayaEpetraVectorSpace.hpp
00001
00002
00003
00004
00005 #ifndef PLAYA_EPETRAVECTORSPACE_HPP
00006 #define PLAYA_EPETRAVECTORSPACE_HPP
00007
00008 #include "PlayaDefs.hpp"
00009 #include "Epetra_Map.h"
00010 #include "Teuchos_RefCountPtr.hpp"
00011 #include "PlayaMPIComm.hpp"
00012 #include "PlayaVectorSpaceBaseDecl.hpp"
00013
00014 namespace Playa
00015 {
00016 using namespace Teuchos;
00017
00018
00022 class EpetraVectorSpace : public VectorSpaceBase<double>
00023 {
00024 public:
00026 EpetraVectorSpace(const RCP<const Epetra_Map>& map);
00027
00029 RCP<VectorBase<double> >
00030 createMember(const VectorSpace<double>& self) const ;
00031
00035 std::string description() const;
00037
00040
00042 int dim() const {return globalDim_;}
00043
00045 int numLocalElements() const {return numLocalElements_;}
00046
00048 int baseGlobalNaturalIndex() const {return baseGlobalNaturalIndex_;}
00049
00051 bool isCompatible(const VectorSpaceBase<double>* other) const ;
00052
00053 int numBlocks() const {return 1;}
00054
00056
00058 const RCP<const Epetra_Map>& epetraMap() const
00059 {return epetraMap_;}
00060
00061
00063 virtual const MPIComm& comm() const {return comm_;}
00064
00065 protected:
00066
00067 MPIComm epetraCommToTeuchosMPIComm(const Epetra_Comm& epComm) ;
00068
00069 private:
00070 RCP<const Epetra_Map> epetraMap_;
00071
00072 MPIComm comm_;
00073
00074 int globalDim_;
00075
00076 int baseGlobalNaturalIndex_;
00077
00078 int numLocalElements_;
00079 };
00080
00081 }
00082
00083 #endif