44 #ifndef EPETRAEXT_DISTARRAY_H
45 #define EPETRAEXT_DISTARRAY_H
47 #if defined(EpetraExt_SHOW_DEPRECATED_WARNINGS)
49 #warning "The EpetraExt package is deprecated"
103 "Map.MaxElementSize() != 1"));
106 "Map.ConstantElementSize() != true"));
143 inline T&
operator()(
const int GEID,
const int ID,
const bool isLocal)
145 int LEID =
Map().
LID(GEID);
154 os <<
"DistArray object, label = " << this->Label() << std::endl;
159 for (
int iproc=0; iproc < Comm().NumProc(); iproc++)
164 for (
int i = 0; i <
RowSize(); ++i) os <<
"V\t";
168 if (Comm().MyPID() == iproc)
172 os <<
Map().
GID(i) <<
'\t';
174 os <<
values_[i * RowSize_ + j] <<
'\t';
194 return(
Map().GID(0));
228 int * PermuteFromLIDs,
245 NumSameEntries = NumSameIDs;
248 if (To==From) NumSameEntries = 0;
253 for (j=0; j<NumSameEntries *
RowSize_; j++)
260 if (NumPermuteIDs>0) {
262 for (j=0; j<NumPermuteIDs *
RowSize_; j++)
263 To[PermuteToLIDs[j]] = From[PermuteFromLIDs[j]];
288 SizeOfPacket =
RowSize_ *
sizeof(T);
290 if(NumExportIDs*SizeOfPacket>LenExports) {
291 if (LenExports>0)
delete [] Exports;
292 LenExports = NumExportIDs*SizeOfPacket;
293 Exports =
new char[LenExports];
298 if (NumExportIDs>0) {
302 for (
int j=0; j<NumExportIDs; j++)
304 *ptr++ = From[ExportLIDs[j] * RowSize_ + k];
322 if (CombineMode !=
Insert)
325 std::cout << NumImportIDs << std::endl;
326 if (NumImportIDs<=0)
return(0);
337 for (j=0; j<NumImportIDs; j++)
339 To[ImportLIDs[j] * RowSize_ + k] = *ptr++;
int NumGlobalElements() const
int MyLength() const
Returns the length of the locally owned array.
int MyLength_
Length of the locally owned array.
virtual int CopyAndPermute(const Epetra_SrcDistObject &Source, int NumSameIDs, int NumPermuteIDs, int *PermuteToLIDs, int *PermuteFromLIDs, const Epetra_OffsetIndex *Indexor, Epetra_CombineMode CombineMode=Zero)
int GlobalLength() const
Returns the global length of the array.
bool ConstantElementSize() const
#define EPETRA_CHK_ERR(a)
int RowSize_
Amount of data associated with each element.
virtual int CheckSizes(const Epetra_SrcDistObject &Source)
DistArray(const Epetra_Map &Map, const int RowSize)
Constructor for a given Map and RowSize.
int NumMyElements() const
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)
T * Values()
Returns a pointer to the internally stored data (non-const version).
std::vector< T > values_
Container of local data.
virtual int PackAndPrepare(const Epetra_SrcDistObject &Source, int NumExportIDs, int *ExportLIDs, int &LenExports, char *&Exports, int &SizeOfPacket, int *Sizes, bool &VarSizes, Epetra_Distributor &Distor)
virtual const Epetra_BlockMap & Map() const =0
const std::vector< T > & ExtractView() const
Extracts a view of the array.
int GlobalLength_
Length of the global array.
const T * Values() const
Returns a pointer to the internally stored data (const version).
int RowSize() const
Returns the row size, that is, the amount of data associated with each element.
T & operator()(const int GEID, const int ID, const bool isLocal)
void Print(std::ostream &os) const
Prints the array on the specified stream.
int MaxElementSize() const
T & operator()(const int LEID, const int ID)
Returns a reference to the ID component of the LEID local element.
DistArray<T>: A class to store row-oriented multivectors of type T.