101 if (
Map.MaxElementSize() != 1)
103 "Map.MaxElementSize() != 1"));
104 if (!
Map.ConstantElementSize())
106 "Map.ConstantElementSize() != true"));
108 MyLength_ =
Map.NumMyElements();
109 GlobalLength_ =
Map.NumGlobalElements();
112 values_.resize(MyLength_ * RowSize_);
127 return(GlobalLength_);
139 assert (ID <= RowSize_);
140 return(values_[LEID * RowSize_ + ID]);
143 inline T&
operator()(
const int GEID,
const int ID,
const bool isLocal)
145 int LEID =
Map().
LID(GEID);
147 assert (ID <= RowSize_);
148 return(values_[LEID * RowSize_ + ID]);
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';
173 for (
int j = 0; j < RowSize_; ++j)
174 os << values_[i * RowSize_ + j] <<
'\t';
185 if (count_ <
Map().NumMyElements())
186 return(
Map().GID(count_));
194 return(
Map().GID(0));
228 int * PermuteFromLIDs,
233 const std::vector<T>& From = S.ExtractView();
235 std::vector<T>& To = values_;
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]];
270 virtual int PackAndPrepare(
const Epetra_SrcDistObject& Source,
278 Epetra_Distributor& Distor)
281 const std::vector<T>& From = S.ExtractView();
283 std::vector<T> To = values_;
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++)
303 for (
int k = 0; k < RowSize_ ; ++k)
304 *ptr++ = From[ExportLIDs[j] * RowSize_ + k];
310 virtual int UnpackAndCombine(
const Epetra_SrcDistObject& Source,
316 Epetra_Distributor& Distor,
317 Epetra_CombineMode CombineMode,
318 const Epetra_OffsetIndex * Indexor)
322 if (CombineMode != Insert)
325 std::cout << NumImportIDs << std::endl;
326 if (NumImportIDs<=0)
return(0);
337 for (j=0; j<NumImportIDs; j++)
338 for (
int k = 0; k < RowSize_ ; ++k)
339 To[ImportLIDs[j] * RowSize_ + k] = *ptr++;
348 std::vector<T> values_;