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
00030
00031 #ifndef EPETRAEXT_BLOCKVECTOR_H
00032 #define EPETRAEXT_BLOCKVECTOR_H
00033
00034 #include "Epetra_Vector.h"
00035 #include "Teuchos_RCP.hpp"
00036 #include <vector>
00037
00039
00046 namespace EpetraExt {
00047
00048 class BlockVector: public Epetra_Vector {
00049 public:
00050
00052
00053
00062 BlockVector( const Epetra_BlockMap & BaseMap, const Epetra_BlockMap & GlobalMap);
00063
00073 BlockVector(Epetra_DataAccess CV, const Epetra_BlockMap & BaseMap,
00074 const Epetra_Vector & BlockVec);
00075
00077 BlockVector( const BlockVector & MV );
00078
00080 virtual ~BlockVector();
00082
00084 int ExtractBlockValues( Epetra_Vector & BaseVec, int BlockRow) const;
00085
00087 int LoadBlockValues(const Epetra_Vector & BaseVec, int BlockRow);
00088
00090 int BlockSumIntoGlobalValues(int NumIndices, double* Values,
00091 int* Indices, int BlockRow);
00093 int BlockReplaceGlobalValues(int NumIndices, double* Values,
00094 int* Indices, int BlockRow);
00095
00097 Teuchos::RCP<const Epetra_Vector> GetBlock(int BlockRow) const;
00098
00100 Teuchos::RCP<Epetra_Vector> GetBlock(int BlockRow);
00101
00103 const Epetra_BlockMap& GetBaseMap() const;
00104
00105 protected:
00106
00107 Epetra_BlockMap BaseMap_;
00108
00109 int Offset_;
00110
00111 };
00112
00113 }
00114
00115 #endif