44 #include "Epetra_Map.h" 53 const Epetra_BlockMap & BaseMap,
54 const Epetra_BlockMap & GlobalMap,
56 : Epetra_MultiVector( GlobalMap, numVecs ),
66 const Epetra_BlockMap & BaseMap,
67 const Epetra_MultiVector & BlockVec)
68 : Epetra_MultiVector( CV, BlockVec, 0, BlockVec.NumVectors() ),
77 : Epetra_MultiVector( dynamic_cast<const Epetra_MultiVector &>(Source) ),
91 long long IndexOffset = GlobalBlockRow *
Offset_;
96 for (
int i=0; i<
BaseMap_.NumMyElements(); i++) {
97 localIndex = this->Map().LID((IndexOffset +
BaseMap_.GID64(i)));
99 std::cout <<
"Error in BlockMultiVector::GetBlock: " << i <<
" " 100 << IndexOffset <<
" " <<
BaseMap_.GID64(i) << std::endl;
103 for (
int j=0; j<NumVectors(); j++)
104 BaseVector[j][i] = (*
this)[j][localIndex];
113 long long IndexOffset = GlobalBlockRow *
Offset_;
118 for (
int i=0; i<
BaseMap_.NumMyElements(); i++) {
119 localIndex = this->Map().LID((IndexOffset +
BaseMap_.GID64(i)));
120 if (localIndex==-1) {
121 std::cout <<
"Error in BlockMultiVector::GetBlock: " << i <<
" " 122 << IndexOffset <<
" " <<
BaseMap_.GID64(i) << std::endl;
125 for (
int j=0; j<NumVectors(); j++)
126 (*
this)[j][localIndex] = BaseVector[j][i];
133 Teuchos::RCP<const Epetra_MultiVector>
136 long long offset = GlobalBlockRow *
BaseMap_.NumMyElements();
137 int numVecs = NumVectors();
138 double **pointers = Pointers();
139 double **block_pointers =
new double*[numVecs];
140 for (
int i=0; i<numVecs; i++)
141 block_pointers[i] = pointers[i]+offset;
142 Teuchos::RCP<Epetra_MultiVector> block =
143 Teuchos::rcp(
new Epetra_MultiVector(View,
BaseMap_, block_pointers,
145 delete [] block_pointers;
150 Teuchos::RCP<Epetra_MultiVector>
153 long long offset = GlobalBlockRow *
BaseMap_.NumMyElements();
154 int numVecs = NumVectors();
155 double **pointers = Pointers();
156 double **block_pointers =
new double*[numVecs];
157 for (
int i=0; i<numVecs; i++)
158 block_pointers[i] = pointers[i]+offset;
159 Teuchos::RCP<Epetra_MultiVector> block =
160 Teuchos::rcp(
new Epetra_MultiVector(View,
BaseMap_, block_pointers,
162 delete [] block_pointers;
167 const Epetra_BlockMap&
int ExtractBlockValues(Epetra_MultiVector &BaseVec, long long BlockRow) const
Extract a single block from a Block Vector: block row is global, not a stencil value.
virtual ~BlockMultiVector()
Destructor.
EpetraExt::BlockCrsMatrix: A class for constructing a distributed block matrix.
const Epetra_BlockMap & GetBaseMap() const
Return base map.
BlockMultiVector(const Epetra_BlockMap &BaseMap, const Epetra_BlockMap &GlobalMap, int NumVectors)
BlockMultiVector constuctor with one block row per processor.
int LoadBlockValues(const Epetra_MultiVector &BaseVec, long long BlockRow)
Load a single block into a Block Vector: block row is global, not a stencil value.
Teuchos::RCP< const Epetra_MultiVector > GetBlock(long long BlockRow) const
Return Epetra_MultiVector for given block row.