42 #include <Epetra_ConfigDefs.h>
47 #include <Epetra_CrsMatrix.h>
48 #include <Epetra_Map.h>
49 #include <Epetra_GIDTypeVector.h>
51 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
52 #include <Epetra_LongLongVector.h>
55 #include <Epetra_Export.h>
56 #include <Epetra_Import.h>
64 if( NewColMap_ )
delete NewColMap_;
67 template<
typename int_type>
70 Toperator( OriginalTypeRef orig )
79 int_type NumGlobalElements = (int_type) OldDomainMap.NumGlobalElements64();
80 assert( orig.RowMap().NumMyElements() == NewRowMap_.
NumMyElements() );
82 if (NumGlobalElements == 0 && orig.RowMap().NumGlobalElements64() == 0 )
95 Epetra_Map tmpColMap( NumGlobalElements, NumMyElements, 0, OldDomainMap.
Comm() );
97 for(
int i = 0; i < NumMyElements; ++i )
98 Cols[i] = (int_type) tmpColMap.GID64(i);
100 NewCols.Import( Cols, Importer, Insert );
102 std::vector<int_type*> NewColIndices(1);
103 NewCols.ExtractView( &NewColIndices[0] );
106 int_type NumGlobalColElements = (int_type) OldColMap.NumGlobalElements64();
108 NewColMap_ =
new Epetra_Map( NumGlobalColElements, NumMyColElements, NewColIndices[0], (int_type) OldColMap.IndexBase64(), OldColMap.
Comm() );
117 int numMyRows = NewMatrix->NumMyRows();
118 for(
int i = 0; i < numMyRows; ++i )
120 orig.ExtractMyRowView( i, indicesCnt, myValues, myIndices );
121 NewMatrix->InsertMyValues( i, indicesCnt, myValues, myIndices );
124 NewMatrix->FillComplete();
137 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
138 if(orig.RowMatrixRowMap().GlobalIndicesInt())
139 return Toperator<int>(orig);
142 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
143 if(orig.RowMatrixRowMap().GlobalIndicesLongLong())
144 return Toperator<long long>(orig);
147 throw "EpetraExt::CrsMatrix_Reindex::operator(): Global indices unknown.";
~CrsMatrix_Reindex()
Destructor.
NewTypeRef operator()(OriginalTypeRef orig)
Constructs "reindexed" Matrix.
int NumMyElements() const
const Epetra_Comm & Comm() const