44 #ifndef EPETRA_CRSGRAPH_H
45 #define EPETRA_CRSGRAPH_H
47 #if defined(Epetra_SHOW_DEPRECATED_WARNINGS)
49 #warning "The Epetra package is deprecated"
274 const Epetra_BlockMap& ColMap,
const int* NumIndicesPerRow,
bool StaticProfile =
false);
294 const Epetra_BlockMap& ColMap,
int NumIndicesPerRow,
bool StaticProfile =
false);
323 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
324 int InsertGlobalIndices(
int GlobalRow,
int NumIndices,
int* Indices);
326 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
327 int InsertGlobalIndices(
long long GlobalRow,
int NumIndices,
long long* Indices);
340 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
341 int RemoveGlobalIndices(
int GlobalRow,
int NumIndices,
int* Indices);
343 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
344 int RemoveGlobalIndices(
long long GlobalRow,
int NumIndices,
long long* Indices);
355 int RemoveGlobalIndices(
long long Row);
374 int InsertMyIndices(
int LocalRow,
int NumIndices,
int* Indices);
386 int RemoveMyIndices(
int LocalRow,
int NumIndices,
int* Indices);
396 int RemoveMyIndices(
int Row);
442 int OptimizeStorage();
458 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
459 int ExtractGlobalRowCopy(
int GlobalRow,
int LenOfIndices,
int& NumIndices,
int* Indices)
const;
461 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
462 int ExtractGlobalRowCopy(
long long GlobalRow,
int LenOfIndices,
int& NumIndices,
long long* Indices)
const;
476 int ExtractMyRowCopy(
int LocalRow,
int LenOfIndices,
int& NumIndices,
int* Indices)
const;
489 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
490 int ExtractGlobalRowView(
int GlobalRow,
int& NumIndices,
int*& Indices)
const;
492 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
493 int ExtractGlobalRowView(
long long GlobalRow,
int& NumIndices,
long long*& Indices)
const;
507 int ExtractMyRowView(
int LocalRow,
int& NumIndices,
int*& Indices)
const;
512 bool Filled()
const {
return(CrsGraphData_->Filled_);}
540 bool NoDiagonal()
const {
return(CrsGraphData_->NoDiagonal_);}
543 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
547 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
548 bool MyGlobalRow(
long long GID)
const {
return(RowMap().MyGID(GID));}
556 bool HaveColMap()
const {
return(CrsGraphData_->HaveColMap_);}
563 int NumMyRows()
const {
return(CrsGraphData_->NumMyRows_);}
566 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
568 if(RowMap().GlobalIndicesInt())
569 return (
int) NumGlobalRows64();
570 throw "Epetra_CrsGraph::NumGlobalRows: GlobalIndices not int.";
580 int NumMyCols()
const {
return(CrsGraphData_->NumMyCols_);}
586 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
588 if(RowMap().GlobalIndicesInt())
589 return (
int) NumGlobalCols64();
590 throw "Epetra_CrsGraph::NumGlobalCols: GlobalIndices not int.";
602 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
604 if(RowMap().GlobalIndicesInt())
605 return (
int) NumGlobalNonzeros64();
606 throw "Epetra_CrsGraph::NumGlobalNonzeros: GlobalIndices not int.";
615 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
617 if(RowMap().GlobalIndicesInt())
618 return (
int) NumGlobalDiagonals64();
619 throw "Epetra_CrsGraph::NumGlobalDiagonals: GlobalIndices not int.";
634 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
636 if(RowMap().GlobalIndicesInt())
637 return (
int) NumGlobalBlockRows64();
638 throw "Epetra_CrsGraph::NumGlobalBlockRows: GlobalIndices not int.";
653 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
655 if(RowMap().GlobalIndicesInt())
656 return (
int) NumGlobalBlockCols64();
657 throw "Epetra_CrsGraph::NumGlobalBlockCols: GlobalIndices not int.";
672 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
674 if(RowMap().GlobalIndicesInt())
675 return (
int) NumGlobalBlockDiagonals64();
676 throw "Epetra_CrsGraph::NumGlobalBlockDiagonals: GlobalIndices not int.";
685 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
687 if(RowMap().GlobalIndicesInt())
688 return (
int) NumGlobalEntries64();
689 throw "Epetra_CrsGraph::NumGlobalEntries: GlobalIndices not int.";
703 int MaxRowDim()
const {
return(CrsGraphData_->MaxRowDim_);}
715 int MaxColDim()
const {
return(CrsGraphData_->MaxColDim_);}
730 int NumGlobalIndices(
long long Row)
const;
733 int NumAllocatedGlobalIndices(
long long Row)
const;
767 int NumMyIndices(
int Row)
const {
if (Row<0 || Row >= NumMyRows())
return(0);
768 if (StorageOptimized())
return(CrsGraphData_->IndexOffset_[Row+1] - CrsGraphData_->IndexOffset_[Row]);
769 else return(CrsGraphData_->NumIndicesPerRow_[Row]);}
773 if (StorageOptimized())
return(CrsGraphData_->IndexOffset_[Row+1] - CrsGraphData_->IndexOffset_[Row]);
774 else return(CrsGraphData_->NumAllocatedIndicesPerRow_[Row]);}
777 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
778 int IndexBase()
const {
780 if(RowMap().GlobalIndicesInt())
781 return (
int) IndexBase64();
782 throw "Epetra_CrsGraph::IndexBase: GlobalIndices not int.";
785 long long IndexBase64()
const {
return(CrsGraphData_->IndexBase_);};
866 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
867 int LRID(
int GRID_in)
const {
return(RowMap().LID(GRID_in));}
870 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
871 int LRID(
long long GRID_in)
const {
return(RowMap().LID(GRID_in));}
874 #if defined(EPETRA_NO_32BIT_GLOBAL_INDICES) && defined(EPETRA_NO_64BIT_GLOBAL_INDICES)
877 int LRID(
long long GRID_in)
const {
return(RowMap().LID(GRID_in));}
881 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
883 if(RowMap().GlobalIndicesInt())
884 return (
int) GRID64(LRID_in);
885 throw "Epetra_CrsGraph::GRID: GlobalIndices not int.";
888 long long GRID64(
int LRID_in)
const {
return(RowMap().GID64(LRID_in));}
894 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
897 return( CrsGraphData_->HaveColMap_ ? ColMap().LID(GCID_in) : -1 );
901 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
902 int LCID(
long long GCID_in)
const
904 return( CrsGraphData_->HaveColMap_ ? ColMap().LID(GCID_in) : -1 );
912 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
914 if(RowMap().GlobalIndicesInt())
915 return (
int) GCID64(LCID_in);
916 throw "Epetra_CrsGraph::GCID: GlobalIndices not int.";
921 return( CrsGraphData_->HaveColMap_ ? ColMap().GID64(LCID_in) : -1 );
925 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
926 bool MyGRID(
int GRID_in)
const {
return(LRID(GRID_in) != -1);}
929 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
930 bool MyGRID(
long long GRID_in)
const {
return(LRID(GRID_in) != -1);}
934 bool MyLRID(
int LRID_in)
const {
return(GRID64(LRID_in) != IndexBase64() - 1);}
940 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
941 bool MyGCID(
int GCID_in)
const {
return(LCID(GCID_in) != -1);}
944 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
945 bool MyGCID(
long long GCID_in)
const {
return(LCID(GCID_in) != -1);}
952 bool MyLCID(
int LCID_in)
const {
return(GCID64(LCID_in) != IndexBase64() - 1);}
966 if (StorageOptimized()){
return(CrsGraphData_->data->All_Indices_.Values() + CrsGraphData_->IndexOffset_[Loc]);}
967 else return(CrsGraphData_->data->Indices_[Loc]); }
970 if (StorageOptimized()) {
return(CrsGraphData_->data->All_Indices_.Values() +CrsGraphData_->IndexOffset_[Loc]);}
971 else return(CrsGraphData_->data->Indices_[Loc]); }
985 virtual void Print(std::ostream& os)
const;
988 void PrintGraphData(std::ostream& os,
int level)
const {CrsGraphData_->Print(os, level);}
998 int TransformToLocal();
1056 if (!StorageOptimized())
throw ReportError(
"This method: int *All_Indices() cannot be called when StorageOptimized()==false", -1);
1057 else return(CrsGraphData_->data->All_Indices_.Values());}
1058 #if defined(Epetra_ENABLE_MKL_SPARSE) && !defined(Epetra_DISABLE_MKL_SPARSE_MM)
1059 int *All_IndicesPlus1()
const;
1062 if (!StorageOptimized())
throw ReportError(
"This method: int *IndexOffset() cannot be called when StorageOptimized()==false", -1);
1063 else return(CrsGraphData_->IndexOffset_.Values());}
1065 if (StorageOptimized())
throw ReportError(
"This method: int* NumIndicesPerRow() cannot be called when StorageOptimized()==true", -1);
1066 else return(CrsGraphData_->NumIndicesPerRow_.Values());}
1068 if (StorageOptimized())
throw ReportError(
"This method: int* NumAllocatedIndicesPerRow() cannot be called when StorageOptimized()==true", -1);
1069 else return(CrsGraphData_->NumAllocatedIndicesPerRow_.Values());}
1071 if (StorageOptimized())
throw ReportError(
"This method: int** Indices() cannot be called when StorageOptimized()==true", -1);
1072 else return(CrsGraphData_->data->Indices_);}
1074 if (StorageOptimized())
return(CrsGraphData_->data->All_Indices_.Values()+CrsGraphData_->IndexOffset_[LocalRow]);
1075 else return(CrsGraphData_->data->Indices_[LocalRow]);}
1077 template<
typename int_type>
1079 if (StorageOptimized())
throw ReportError(
"This method: int_type** TIndices() cannot be called when StorageOptimized()==true", -1);
1080 else return(CrsGraphData_->Data<int_type>().Indices_);}
1082 template<
typename int_type>
1084 if (StorageOptimized())
return(CrsGraphData_->Data<int_type>().All_Indices_.Values()+CrsGraphData_->IndexOffset_[LocalRow]);
1085 else return(CrsGraphData_->Data<int_type>().Indices_[LocalRow]);}
1091 bool GlobalConstantsComputed()
const;
1092 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
1093 bool FindGlobalIndexLoc(
int LocalRow,
int Index,
int Start,
int& Loc)
const;
1094 bool FindGlobalIndexLoc(
int NumIndices,
const int* Indices,
int Index,
int Start,
int& Loc)
const;
1096 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
1097 bool FindGlobalIndexLoc(
int LocalRow,
long long Index,
int Start,
int& Loc)
const;
1098 bool FindGlobalIndexLoc(
int NumIndices,
const long long* Indices,
long long Index,
int Start,
int& Loc)
const;
1101 bool FindMyIndexLoc(
int LocalRow,
int Index,
int Start,
int& Loc)
const;
1102 bool FindMyIndexLoc(
int NumIndices,
const int* Indices,
int Index,
int Start,
int& Loc)
const;
1104 int InsertIndices(
int Row,
int NumIndices,
int* Indices);
1105 int InsertIndicesIntoSorted(
int Row,
int NumIndices,
int* Indices);
1107 int InsertIndices(
int Row,
int NumIndices,
long long* Indices);
1108 int InsertIndicesIntoSorted(
int Row,
int NumIndices,
long long* Indices);
1123 bool Sorted()
const {
return(CrsGraphData_->Sorted_);}
1129 int RemoveRedundantIndices();
1130 int DetermineTriangular();
1139 void ComputeIndexState();
1141 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
1144 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
1147 int Allocate(
const int* NumIndicesPerRow,
int Inc,
bool StaticProfile);
1149 int ComputeGlobalConstants();
1160 int* PermuteFromLIDs,
1167 int* PermuteFromLIDs,
1171 template<
typename int_type>
1176 int* PermuteFromLIDs,
1184 int* PermuteFromLIDs,
1188 template<
typename int_type>
1193 int* PermuteFromLIDs,
1241 template<
typename int_type>
1242 int TAllocate(
const int* numIndicesPerRow,
int Inc,
bool staticProfile);
1244 template<
typename int_type>
1245 int InsertGlobalIndices(int_type GlobalRow,
int NumIndices, int_type* Indices);
1247 template<
typename int_type>
1248 int TInsertIndices(
int Row,
int NumIndices, int_type* Indices);
1250 template<
typename int_type>
1251 int TInsertIndicesIntoSorted(
int Row,
int NumIndices, int_type* Indices);
1253 template<
typename int_type>
1254 int RemoveGlobalIndices(int_type GlobalRow,
int NumIndices, int_type* Indices);
1256 template<
typename int_type>
1257 int TRemoveGlobalIndices(
long long Row);
1259 template<
typename int_type>
1260 bool FindGlobalIndexLoc(
int LocalRow, int_type Index,
int Start,
int& Loc)
const;
1262 template<
typename int_type>
1263 bool FindGlobalIndexLoc(
int NumIndices,
const int_type* Indices, int_type Index,
int Start,
int& Loc)
const;
1265 template<
typename int_type>
1266 int ExtractGlobalRowCopy(int_type Row,
int LenOfIndices,
int& NumIndices, int_type* Indices)
const;
1268 template<
typename int_type>
1269 int ExtractMyRowCopy(
int Row,
int LenOfIndices,
int& NumIndices, int_type* targIndices)
const;
void SetFilled(bool Flag)
const Epetra_BlockMap & RangeMap() const
Returns the RangeMap associated with this graph.
bool HaveColMap() const
Returns true if we have a well-defined ColMap, and returns false otherwise.
int GlobalMaxNumIndices() const
Returns the maximun number of nonzero entries across all rows across all processors.
int NumGlobalRows() const
Returns the number of matrix rows in global matrix.
Epetra_IntSerialDenseVector: A class for constructing and using dense vectors.
long long NumGlobalRows64() const
int NumMyBlockRows() const
Returns the number of block matrix rows on this processor.
long long GCID64(int LCID_in) const
const Epetra_Comm & Comm() const
Returns a pointer to the Epetra_Comm communicator associated with this graph.
const Epetra_Comm & Comm() const
Returns the address of the Epetra_Comm for this multi-vector.
Epetra_Distributor: The Epetra Gather/Scatter Setup Base Class.
virtual int CopyAndPermute(const Epetra_SrcDistObject &Source, int NumSameIDs, int NumPermuteIDs, int *PermuteToLIDs, int *PermuteFromLIDs, const Epetra_OffsetIndex *Indexor, Epetra_CombineMode CombineMode=Zero)=0
Perform ID copies and permutations that are on processor.
Epetra_OffsetIndex: This class builds index for efficient mapping of data from one Epetra_CrsGraph ba...
int MaxColDim() const
Returns the max column dimension of block entries on the processor.
int * IndexOffset() const
bool MyGlobalRow(int GID) const
Returns true of GID is owned by the calling processor, otherwise it returns false.
int NumGlobalBlockCols() const
Returns the number of Block matrix columns in global matrix.
long long NumGlobalCols64() const
virtual void Print(std::ostream &os) const
Print method.
bool MyGRID(int GRID_in) const
Returns true if the GRID passed in belongs to the calling processor in this map, otherwise returns fa...
Epetra Finite-Element CrsGraph.
int NumMyEntries() const
Returns the number of entries on this processor.
const Epetra_Import * Importer() const
Returns the Importer associated with this graph.
long long NumGlobalDiagonals64() const
int NumMyBlockCols() const
Returns the number of Block matrix columns on this processor.
int NumMyBlockDiagonals() const
Returns the number of Block diagonal entries in the local graph, based on global row/column index com...
int NumMyRows() const
Returns the number of matrix rows on this processor.
Epetra_Export: This class builds an export object for efficient exporting of off-processor elements...
Epetra_VbrMatrix: A class for the construction and use of real-valued double-precision variable block...
const Epetra_BlockMap & ColMap() const
Returns the Column Map associated with this graph.
const Epetra_BlockMap & ImportMap() const
Use ColMap() instead.
void SetAllocated(bool Flag)
const Epetra_BlockMap & DomainMap() const
Returns the DomainMap associated with this graph.
int NumGlobalEntries() const
Returns the number of entries in the global graph.
Epetra_Import: This class builds an import object for efficient importing of off-processor elements...
int_type ** TIndices() const
long long NumGlobalBlockDiagonals64() const
bool StaticProfile() const
int MaxNumNonzeros() const
Returns the maximum number of nonzero points across all rows on this processor.
Epetra_CrsGraphData * CrsGraphData_
virtual int CheckSizes(const Epetra_SrcDistObject &Source)=0
Allows the source and target (this) objects to be compared for compatibility, return nonzero if not...
int LCID(long long GCID_in) const
int NumGlobalBlockDiagonals() const
Returns the number of Block diagonal entries in the global graph, based on global row/column index co...
Epetra_Time: The Epetra Timing Class.
int NumMyCols() const
Returns the number of entries in the set of column-indices that appear on this processor.
Epetra_CrsGraphData: The Epetra CrsGraph Data Class.
bool NoRedundancies() const
If RemoveRedundantIndices() has been called, this query returns true, otherwise it returns false...
int LRID(int GRID_in) const
Returns the local row index for given global row index, returns -1 if no local row for this global ro...
Epetra_Util: The Epetra Util Wrapper Class.
long long NumGlobalNonzeros64() const
bool MyLRID(int LRID_in) const
Returns true if the LRID passed in belongs to the calling processor in this map, otherwise returns fa...
const Epetra_CrsGraphData * DataPtr() const
Returns a pointer to the CrsGraphData instance this CrsGraph uses.
Epetra Finite-Element CrsMatrix.
int LCID(int GCID_in) const
Returns the local column index for given global column index, returns -1 if no local column for this ...
int NumGlobalCols() const
Returns the number of matrix columns in global matrix.
bool MyGlobalRow(long long GID) const
bool Sorted() const
If SortIndices() has been called, this query returns true, otherwise it returns false.
void PrintGraphData(std::ostream &os, int level) const
Epetra_Comm: The Epetra Communication Abstract Base Class.
int MaxRowDim() const
Returns the max row dimension of block entries on the processor.
void SetIndicesAreGlobal(bool Flag)
void SetIndicesAreLocal(bool Flag)
bool MyLCID(int LCID_in) const
Returns true if the LRID passed in belongs to the calling processor in this map, otherwise returns fa...
void SetNoRedundancies(bool Flag)
int * NumIndicesPerRow() const
void SetIndicesAreContiguous(bool Flag)
long long NumGlobalBlockRows64() const
long long NumGlobalBlockCols64() const
bool IndicesAreGlobal() const
If column indices are in global range, this query returns true, otherwise it returns false...
virtual int UnpackAndCombine(const Epetra_SrcDistObject &Source, int NumImportIDs, int *ImportLIDs, int LenImports, char *Imports, int &SizeOfPacket, Epetra_Distributor &Distor, Epetra_CombineMode CombineMode, const Epetra_OffsetIndex *Indexor)=0
Perform any unpacking and combining after call to DoTransfer().
Epetra_BlockMap: A class for partitioning block element vectors and matrices.
int GCID(int LCID_in) const
Returns the global column index for give local column index, returns IndexBase-1 if we don't have thi...
long long GRID64(int LRID_in) const
int NumGlobalNonzeros() const
Returns the number of indices in the global graph.
const Epetra_BlockMap & RowMap() const
Returns the RowMap associated with this graph.
int NumAllocatedMyIndices(int Row) const
Returns the allocated number of nonzero entries in specified local row on this processor.
int LRID(long long GRID_in) const
int * All_Indices() const
void SetGlobalConstantsComputed(bool Flag)
void SortGhostsAssociatedWithEachProcessor(bool Flag)
Forces FillComplete() to locally order ghostnodes associated with each remote processor in ascending ...
Epetra_DistObject & operator=(const Epetra_DistObject &src)
int GlobalMaxColDim() const
Returns the max column dimension of block entries across all processors.
bool MyGCID(long long GCID_in) const
int ReferenceCount() const
Returns the reference count of CrsGraphData.
int NumMyIndices(int Row) const
Returns the current number of nonzero entries in specified local row on this processor.
int GRID(int LRID_in) const
Returns the global row index for give local row index, returns IndexBase-1 if we don't have this loca...
void SetSorted(bool Flag)
int * NumAllocatedIndicesPerRow() const
int GlobalMaxRowDim() const
Returns the max row dimension of block entries across all processors.
Epetra Finite-Element VbrMatrix.
bool UpperTriangular() const
If graph is upper triangular in local index space, this query returns true, otherwise it returns fals...
int_type * TIndices(int LocalRow) const
bool StorageOptimized() const
If OptimizeStorage() has been called, this query returns true, otherwise it returns false...
bool MyGCID(int GCID_in) const
Returns true if the GCID passed in belongs to the calling processor in this map, otherwise returns fa...
int * Indices(int LocalRow) const
Epetra_CrsMatrix: A class for constructing and using real-valued double-precision sparse compressed r...
bool IndicesAreContiguous() const
int MaxNumIndices() const
Returns the maximum number of nonzero entries across all rows on this processor.
virtual int ReportError(const std::string Message, int ErrorCode) const
Error reporting method.
int NumMyDiagonals() const
Returns the number of diagonal entries in the local graph, based on global row/column index compariso...
long long IndexBase64() const
const Epetra_Export * Exporter() const
Returns the Exporter associated with this graph.
bool NoDiagonal() const
If graph has no diagonal entries in global index space, this query returns true, otherwise it returns...
Epetra_SrcDistObject: A class for supporting flexible source distributed objects for import/export op...
int * operator[](int Loc) const
Epetra_RowMatrix: A pure virtual class for using real-valued double-precision row matrices...
void PrintGraphData(std::ostream &os) const
int * operator[](int Loc)
Inlined bracket operator for fast access to data. (Const and Non-const versions)
int NumGlobalBlockRows() const
Returns the number of Block matrix rows in global matrix.
int NumMyNonzeros() const
Returns the number of indices in the local graph.
bool LowerTriangular() const
If graph is lower triangular in local index space, this query returns true, otherwise it returns fals...
int GlobalMaxNumNonzeros() const
Returns the maximun number of nonzero points across all rows across all processors.
long long NumGlobalEntries64() const
Epetra_CrsGraph: A class for constructing and using sparse compressed row graphs. ...
int NumGlobalDiagonals() const
Returns the number of diagonal entries in the global graph, based on global row/column index comparis...
Epetra_DistObject: A class for constructing and using dense multi-vectors, vectors and matrices in pa...
bool MyGRID(long long GRID_in) const
virtual int PackAndPrepare(const Epetra_SrcDistObject &Source, int NumExportIDs, int *ExportLIDs, int &LenExports, char *&Exports, int &SizeOfPacket, int *Sizes, bool &VarSizes, Epetra_Distributor &Distor)=0
Perform any packing or preparation required for call to DoTransfer().
const Epetra_BlockMap & Map() const
Returns the address of the Epetra_BlockMap for this multi-vector.
bool IndicesAreLocal() const
If column indices are in local range, this query returns true, otherwise it returns false...