65 MyLength_(map.NumMyPoints()),
66 GlobalLength_(map.NumGlobalPoints64()),
67 NumVectors_(numVectors),
68 UserAllocated_(false),
69 ConstantStride_(true),
70 Stride_(map.NumMyPoints()),
90 MyLength_(Source.MyLength_),
91 GlobalLength_(Source.GlobalLength_),
92 NumVectors_(Source.NumVectors_),
93 UserAllocated_(false),
94 ConstantStride_(true),
101 int ** Source_Pointers = Source.
Pointers();
112 int *
A,
int MyLDA,
int numVectors)
117 MyLength_(map.NumMyPoints()),
118 GlobalLength_(map.NumGlobalPoints64()),
119 NumVectors_(numVectors),
120 UserAllocated_(false),
121 ConstantStride_(true),
122 Stride_(map.NumMyPoints()),
142 int **ArrayOfPointers,
int numVectors)
147 MyLength_(map.NumMyPoints()),
148 GlobalLength_(map.NumGlobalPoints64()),
149 NumVectors_(numVectors),
150 UserAllocated_(false),
151 ConstantStride_(true),
152 Stride_(map.NumMyPoints()),
173 int *Indices,
int numVectors)
178 MyLength_(Source.MyLength_),
179 GlobalLength_(Source.GlobalLength_),
180 NumVectors_(numVectors),
181 UserAllocated_(false),
182 ConstantStride_(true),
191 int ** Source_Pointers = Source.
Pointers();
204 int StartIndex,
int numVectors)
209 MyLength_(Source.MyLength_),
210 GlobalLength_(Source.GlobalLength_),
211 NumVectors_(numVectors),
212 UserAllocated_(false),
213 ConstantStride_(true),
222 int ** Source_Pointers = Source.
Pointers();
263 int randval = rand();
267 int locrandval = randval;
295 #ifdef EPETRA_HAVE_OMP
296 #pragma omp parallel for default(none) shared(to,from,myLength)
297 for (
int j=0; j<myLength; j++) to[j] = from[j];
299 memcpy(to, from, myLength*
sizeof(
int));
317 int randval = rand();
321 int locrandval = randval;
362 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
366 EPETRA_CHK_ERR(ChangeGlobalValue<int>(GlobalRow, 0, VectorIndex, OrdinalValue,
false));
371 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
375 EPETRA_CHK_ERR(ChangeGlobalValue<long long>(GlobalRow, 0, VectorIndex, OrdinalValue,
false));
380 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
382 int VectorIndex,
int OrdinalValue) {
384 EPETRA_CHK_ERR(ChangeGlobalValue<int>(GlobalBlockRow, BlockRowOffset, VectorIndex, OrdinalValue,
false));
389 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
391 int VectorIndex,
int OrdinalValue) {
393 EPETRA_CHK_ERR(ChangeGlobalValue<long long>(GlobalBlockRow, BlockRowOffset, VectorIndex, OrdinalValue,
false));
398 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
402 EPETRA_CHK_ERR(ChangeGlobalValue<int>(GlobalRow, 0, VectorIndex, OrdinalValue,
true));
407 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
411 EPETRA_CHK_ERR(ChangeGlobalValue<long long>(GlobalRow, 0, VectorIndex, OrdinalValue,
true));
416 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
418 int VectorIndex,
int OrdinalValue) {
420 EPETRA_CHK_ERR(ChangeGlobalValue<int>(GlobalBlockRow, BlockRowOffset, VectorIndex, OrdinalValue,
true));
425 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
427 int VectorIndex,
int OrdinalValue) {
429 EPETRA_CHK_ERR(ChangeGlobalValue<long long>(GlobalBlockRow, BlockRowOffset, VectorIndex, OrdinalValue,
true));
442 int VectorIndex,
int OrdinalValue) {
455 int VectorIndex,
int OrdinalValue) {
461 template<
typename int_type>
463 int VectorIndex,
int OrdinalValue,
bool SumInto) {
465 if(!
Map().
template GlobalIndicesIsType<int_type>())
466 throw ReportError(
"Epetra_IntMultiVector::ChangeGlobalValues mismatch between argument types (int/long long) and map type.", -1);
474 int VectorIndex,
int OrdinalValue,
bool SumInto) {
478 if (BlockRowOffset<0 || BlockRowOffset>=
Map().ElementSize(MyBlockRow))
EPETRA_CHK_ERR(-2);
483 Pointers_[VectorIndex][entry+BlockRowOffset] += OrdinalValue;
485 Pointers_[VectorIndex][entry+BlockRowOffset] = OrdinalValue;
501 int * to = A + i*MyLDA;
502 for (
int j=0; j<myLength; j++) *to++ = *from++;
534 int * to = ArrayOfPointers[i];
535 memcpy(to, from, myLength*
sizeof(
int));
575 #ifdef EPETRA_HAVE_OMP
576 #pragma omp parallel for default(none) shared(ScalarConstant,myLength,to)
578 for (
int j=0; j<myLength; j++) to[j] = ScalarConstant;
596 int *PermuteFromLIDs,
608 int * ToFirstPointInElementList = 0;
609 int * FromFirstPointInElementList = 0;
610 int * FromElementSizeList = 0;
614 if (!ConstantElementSize) {
627 if (MaxElementSize==1) {
629 NumSameEntries = NumSameIDs;
631 else if (ConstantElementSize) {
633 NumSameEntries = NumSameIDs * MaxElementSize;
637 NumSameEntries = FromFirstPointInElementList[NumSameIDs];
641 if (To==From) NumSameEntries = 0;
646 for (
int i=0; i < numVectors; i++) {
647 if (CombineMode==
Epetra_AddLocalAlso)
for (
int j=0; j<NumSameEntries; j++) To[i][j] += From[i][j];
648 else for (
int j=0; j<NumSameEntries; j++) To[i][j] = From[i][j];
652 if (NumPermuteIDs>0) {
658 if (CombineMode==
Epetra_AddLocalAlso)
for (
int j=0; j<NumPermuteIDs; j++) To[0][PermuteToLIDs[j]] += From[0][PermuteFromLIDs[j]];
659 else for (
int j=0; j<NumPermuteIDs; j++) To[0][PermuteToLIDs[j]] = From[0][PermuteFromLIDs[j]];
662 for (
int j=0; j<NumPermuteIDs; j++) {
663 jj = PermuteToLIDs[j];
664 jjj = PermuteFromLIDs[j];
665 if (CombineMode==
Epetra_AddLocalAlso)
for (
int i=0; i<numVectors; i++) To[i][jj] += From[i][jjj];
666 else for (
int i=0; i<numVectors; i++) To[i][jj] = From[i][jjj];
673 for (
int j=0; j<NumPermuteIDs; j++) {
674 jj = MaxElementSize*PermuteToLIDs[j];
675 jjj = MaxElementSize*PermuteFromLIDs[j];
676 if (CombineMode==
Epetra_AddLocalAlso)
for (
int i=0; i<numVectors; i++)
for (k=0; k<MaxElementSize; k++) To[i][jj+k] += From[i][jjj+k];
677 else for(
int i=0; i<numVectors; i++)
for (k=0; k<MaxElementSize; k++) To[i][jj+k] = From[i][jjj+k];
684 for (
int j=0; j<NumPermuteIDs; j++) {
685 jj = ToFirstPointInElementList[PermuteToLIDs[j]];
686 jjj = FromFirstPointInElementList[PermuteFromLIDs[j]];
687 int ElementSize = FromElementSizeList[PermuteFromLIDs[j]];
688 if (CombineMode==
Epetra_AddLocalAlso)
for (
int i=0; i<numVectors; i++)
for (k=0; k<ElementSize; k++) To[i][jj+k] += From[i][jjj+k];
689 else for (
int i=0; i<numVectors; i++)
for (k=0; k<ElementSize; k++) To[i][jj+k] = From[i][jjj+k];
719 int * FromFirstPointInElementList = 0;
720 int * FromElementSizeList = 0;
722 if (!ConstantElementSize) {
727 int * OrdinalExports = 0;
729 SizeOfPacket = numVectors*MaxElementSize*(int)
sizeof(
int);
731 if(SizeOfPacket*NumExportIDs>LenExports) {
732 if (LenExports>0)
delete [] Exports;
733 LenExports = SizeOfPacket*NumExportIDs;
734 OrdinalExports =
new int[numVectors*MaxElementSize*NumExportIDs];
735 Exports = (
char *) OrdinalExports;
740 if (NumExportIDs>0) {
741 ptr = (
int *) Exports;
744 if (MaxElementSize==1) {
747 for (
int j=0; j<NumExportIDs; j++)
748 *ptr++ = From[0][ExportLIDs[j]];
751 for (
int j=0; j<NumExportIDs; j++) {
753 for (
int i=0; i<numVectors; i++)
754 *ptr++ = From[i][jj];
760 else if (ConstantElementSize) {
762 for (
int j=0; j<NumExportIDs; j++) {
763 jj = MaxElementSize*ExportLIDs[j];
764 for (
int i=0; i<numVectors; i++)
765 for (k=0; k<MaxElementSize; k++)
766 *ptr++ = From[i][jj+k];
773 int thisSizeOfPacket = numVectors*MaxElementSize;
774 for (
int j=0; j<NumExportIDs; j++) {
775 ptr = (
int *) Exports + j*thisSizeOfPacket;
776 jj = FromFirstPointInElementList[ExportLIDs[j]];
777 int ElementSize = FromElementSizeList[ExportLIDs[j]];
778 for (
int i=0; i<numVectors; i++)
779 for (k=0; k<ElementSize; k++)
780 *ptr++ = From[i][jj+k];
806 if( CombineMode !=
Add
807 && CombineMode !=
Zero
814 && CombineMode !=
AbsMax )
817 if (NumImportIDs<=0)
return(0);
824 int * ToFirstPointInElementList = 0;
825 int * ToElementSizeList = 0;
827 if (!ConstantElementSize) {
835 ptr = (
int *) Imports;
838 if (MaxElementSize==1) {
841 if (CombineMode==
InsertAdd)
for (
int j=0; j<NumImportIDs; j++) To[0][ImportLIDs[j]] = 0.0;
842 if (CombineMode==
Add || CombineMode==
InsertAdd)
for (
int j=0; j<NumImportIDs; j++) To[0][ImportLIDs[j]] += *ptr++;
843 else if(CombineMode==
Insert)
for (
int j=0; j<NumImportIDs; j++) To[0][ImportLIDs[j]] = *ptr++;
844 else if(CombineMode==
AbsMax)
for (
int j=0; j<NumImportIDs; j++) {To[0][ImportLIDs[j]] =
EPETRA_MAX( To[0][ImportLIDs[j]],std::abs(*ptr)); ptr++;}
845 else if(CombineMode==
AbsMin)
for (
int j=0; j<NumImportIDs; j++) {To[0][ImportLIDs[j]] =
EPETRA_MIN( To[0][ImportLIDs[j]],std::abs(*ptr)); ptr++;}
846 else if(CombineMode==
Epetra_Max)
for (
int j=0; j<NumImportIDs; j++) {To[0][ImportLIDs[j]] =
EPETRA_MAX( To[0][ImportLIDs[j]],*ptr); ptr++;}
847 else if(CombineMode==
Epetra_Min)
for (
int j=0; j<NumImportIDs; j++) {To[0][ImportLIDs[j]] =
EPETRA_MIN( To[0][ImportLIDs[j]],*ptr); ptr++;}
848 else if(CombineMode==
Average)
for (
int j=0; j<NumImportIDs; j++) {To[0][ImportLIDs[j]] += *ptr++; To[0][ImportLIDs[j]] *= 0.5;}
874 for (
int j=0; j<NumImportIDs; j++) {
876 for (
int i=0; i<numVectors; i++) {
877 if (CombineMode==
InsertAdd) To[i][jj] = 0.0;
878 if (CombineMode==
Add || CombineMode==
InsertAdd) To[i][jj] += *ptr++;
879 else if (CombineMode==
Insert) To[i][jj] = *ptr++;
880 else if (CombineMode==
AbsMax) {To[i][jj] =
EPETRA_MAX( To[i][jj], std::abs(*ptr)); ptr++; }
881 else if (CombineMode==
AbsMin) {To[i][jj] =
EPETRA_MIN( To[i][jj], std::abs(*ptr)); ptr++; }
884 else if (CombineMode==
Average){To[i][jj] += *ptr++; To[i][jj] *= 0.5;}}
938 else if (ConstantElementSize) {
940 for (
int j=0; j<NumImportIDs; j++) {
941 jj = MaxElementSize*ImportLIDs[j];
942 for (
int i=0; i<numVectors; i++) {
943 if (CombineMode==
InsertAdd)
for (k=0; k<MaxElementSize; k++) To[i][jj+k] = 0.0;
944 if (CombineMode==
Add || CombineMode==
InsertAdd)
for (k=0; k<MaxElementSize; k++) To[i][jj+k] += *ptr++;
945 else if (CombineMode==
Insert)
for (k=0; k<MaxElementSize; k++) To[i][jj+k] = *ptr++;
946 else if (CombineMode==
AbsMax) {
for (k=0; k<MaxElementSize; k++) { To[i][jj+k] =
EPETRA_MAX( To[i][jj+k], std::abs(*ptr)); ptr++; }}
947 else if (CombineMode==
AbsMin) {
for (k=0; k<MaxElementSize; k++) { To[i][jj+k] =
EPETRA_MIN( To[i][jj+k], std::abs(*ptr)); ptr++; }}
948 else if (CombineMode==
Epetra_Max) {
for (k=0; k<MaxElementSize; k++) { To[i][jj+k] =
EPETRA_MAX( To[i][jj+k], *ptr); ptr++; }}
949 else if (CombineMode==
Epetra_Min) {
for (k=0; k<MaxElementSize; k++) { To[i][jj+k] =
EPETRA_MIN( To[i][jj+k], *ptr); ptr++; }}
950 else if (CombineMode==
Average) {
for (k=0; k<MaxElementSize; k++) { To[i][jj+k] += *ptr++; To[i][jj+k] *= 0.5;}}
1010 int thisSizeOfPacket = numVectors*MaxElementSize;
1012 for (
int j=0; j<NumImportIDs; j++) {
1013 ptr = (
int *) Imports + j*thisSizeOfPacket;
1014 jj = ToFirstPointInElementList[ImportLIDs[j]];
1015 int ElementSize = ToElementSizeList[ImportLIDs[j]];
1016 for (
int i=0; i<numVectors; i++) {
1017 if (CombineMode==
InsertAdd)
for (k=0; k<ElementSize; k++) To[i][jj+k] = 0.0;
1018 if (CombineMode==
Add || CombineMode==
InsertAdd)
for (k=0; k<ElementSize; k++) To[i][jj+k] += *ptr++;
1019 else if (CombineMode==
Insert)
for (k=0; k<ElementSize; k++) To[i][jj+k] = *ptr++;
1020 else if (CombineMode==
AbsMax) {
for (k=0; k<ElementSize; k++) { To[i][jj+k] =
EPETRA_MAX( To[i][jj+k], std::abs(*ptr)); ptr++; }}
1021 else if (CombineMode==
Epetra_Max) {
for (k=0; k<ElementSize; k++) { To[i][jj+k] =
EPETRA_MAX( To[i][jj+k], *ptr); ptr++; }}
1022 else if (CombineMode==
Epetra_Min) {
for (k=0; k<ElementSize; k++) { To[i][jj+k] =
EPETRA_MIN( To[i][jj+k], *ptr); ptr++; }}
1023 else if (CombineMode==
Average) {
for (k=0; k<ElementSize; k++) { To[i][jj+k] += *ptr++; To[i][jj+k] *= 0.5;}}
1108 int MinVal = 2000000000;
1109 if (myLength>0) MinVal = from[0];
1110 #ifdef EPETRA_HAVE_OMP
1111 #pragma omp parallel default(none) shared(MinVal,myLength,from)
1113 int localMinVal = MinVal;
1115 for (
int j=0; j< myLength; j++) localMinVal =
EPETRA_MIN(localMinVal,from[j]);
1116 #pragma omp critical
1123 for (
int j=0; j< myLength; j++) MinVal =
EPETRA_MIN(MinVal,from[j]);
1156 if (!epetrampicomm) {
1160 MPI_Comm mpicomm = epetrampicomm->
GetMpiComm();
1161 int numProcs = epetrampicomm->
NumProc();
1162 int* owork =
new int[numProcs*(NumVectors_+1)];
1165 owork, NumVectors_+1, MPI_INT, mpicomm);
1171 bool overwrite = myLength == 0 ?
true :
false;
1173 int myPID = epetrampicomm->
MyPID();
1174 int* owork_ptr = owork;
1176 for(
int j=0; j<numProcs; ++j) {
1180 if (j == myPID || owork_ptr[NumVectors_] == 0) {
1181 owork_ptr += NumVectors_+1;
1186 int val = owork_ptr[i];
1190 if (overwrite || (Result[i] > val)) Result[i] = val;
1195 if (overwrite) overwrite =
false;
1197 owork_ptr += NumVectors_+1;
1221 int MaxVal = -2000000000;
1222 if (myLength>0) MaxVal = from[0];
1223 #ifdef EPETRA_HAVE_OMP
1224 #pragma omp parallel default(none) shared(MaxVal,myLength,from)
1226 int localMaxVal = MaxVal;
1228 for (
int j=0; j< myLength; j++) localMaxVal =
EPETRA_MAX(localMaxVal,from[j]);
1229 #pragma omp critical
1236 for (
int j=0; j< myLength; j++) MaxVal =
EPETRA_MAX(MaxVal,from[j]);
1269 if (!epetrampicomm) {
1273 MPI_Comm mpicomm = epetrampicomm->
GetMpiComm();
1274 int numProcs = epetrampicomm->
NumProc();
1275 int* owork =
new int[numProcs*(NumVectors_+1)];
1278 owork, NumVectors_+1, MPI_INT, mpicomm);
1284 bool overwrite = myLength == 0 ?
true :
false;
1286 int myPID = epetrampicomm->
MyPID();
1287 int* owork_ptr = owork;
1289 for(
int j=0; j<numProcs; ++j) {
1293 if (j == myPID || owork_ptr[NumVectors_] == 0) {
1294 owork_ptr += NumVectors_+1;
1299 int val = owork_ptr[i];
1303 if (overwrite || (Result[i] < val)) Result[i] = val;
1308 if (overwrite) overwrite =
false;
1310 owork_ptr += NumVectors_+1;
1359 if (
this != &Source)
Assign(Source);
1372 throw ReportError(
"Length of MultiVectors incompatible in Assign. The this MultiVector has MyLength = " +
toString(myLength)
1378 const int * from = A_Pointers[i];
1379 #ifdef EPETRA_HAVE_OMP
1380 #pragma omp parallel for default(none) shared(myLength,to,from)
1382 for (
int j=0; j<myLength; j++) to[j] = from[j];
1393 if (myLength>0) source =
new int[myLength*
NumVectors_];
1401 int * tmp1 = source;
1404 for (
int j=0; j< myLength; j++) *tmp1++ = *tmp2++;
1406 if (myLength>0) target =
new int[myLength*
NumVectors_];
1410 if (myLength>0)
delete [] source;
1412 int * tmp2 = target;
1415 for (
int j=0; j< myLength; j++) *tmp1++ = *tmp2++;
1417 if (myLength>0)
delete [] target;
1441 for (
int iproc=0; iproc < NumProc; iproc++) {
1444 int NumMyElements1 =
Map(). NumMyElements();
1446 int * FirstPointInElementList1 = NULL;
1452 os <<
" MyPID"; os <<
" ";
1454 if (MaxElementSize1==1)
1458 for (
int j = 0; j < NumVectors1 ; j++)
1465 for (
int i=0; i < NumMyElements1; i++) {
1469 os << MyPID; os <<
" ";
1471 if (MaxElementSize1==1) {
1472 if(
Map().GlobalIndicesInt())
1474 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
1476 os << MyGlobalElements1[i] <<
" ";
1478 throw ReportError(
"Epetra_IntMultiVector::Print: ERROR, GlobalIndicesInt but no API for it.",-1);
1481 else if(
Map().GlobalIndicesLongLong())
1483 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
1485 os << MyGlobalElements1[i] <<
" ";
1487 throw ReportError(
"Epetra_IntMultiVector::Print: ERROR, GlobalIndicesLongLong but no API for it.",-1);
1491 throw ReportError(
"Epetra_IntMultiVector::Print ERROR, Don't know map global index type.",-1);
1496 if(
Map().GlobalIndicesInt())
1498 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
1500 os << MyGlobalElements1[i]<<
"/" << ii <<
" ";
1502 throw ReportError(
"Epetra_IntMultiVector::Print: ERROR, GlobalIndicesInt but no API for it.",-1);
1505 else if(
Map().GlobalIndicesLongLong())
1507 #ifndef EPETRA_NO_64BIT_GLOBAL_INDICES
1509 os << MyGlobalElements1[i]<<
"/" << ii <<
" ";
1511 throw ReportError(
"Epetra_IntMultiVector::Print: ERROR, GlobalIndicesLongLong but no API for it.",-1);
1515 throw ReportError(
"Epetra_IntMultiVector::Print ERROR, Don't know map global index type.",-1);
1517 iii = FirstPointInElementList1[i]+ii;
1519 for (
int j = 0; j < NumVectors1 ; j++)
1522 os << A_Pointers[j][iii];
void UpdateIntVectors() const
int ** Pointers() const
Get pointer to individual vector pointers.
Epetra_IntVector *& operator()(int i)
Vector access function.
int * FirstPointInElementList() const
Pointer to internal array containing a mapping between the local elements and the first local point n...
bool DistributedGlobal() const
Returns true if this multi-vector is distributed global, i.e., not local replicated.
int PutScalar(int OrdinalConstant)
Initialize all values in a multi-vector with constant value.
int CopyAndPermute(const Epetra_SrcDistObject &Source, int NumSameIDs, int NumPermuteIDs, int *PermuteToLIDs, int *PermuteFromLIDs, const Epetra_OffsetIndex *Indexor, Epetra_CombineMode CombineMode=Zero)
Perform ID copies and permutations that are on processor.
int ElementSize() const
Returns the size of elements in the map; only valid if map has constant element size.
MPI_Comm GetMpiComm() const
Get the MPI Communicator (identical to Comm() method; used when we know we are MPI.
Epetra_Distributor: The Epetra Gather/Scatter Setup Base Class.
Epetra_OffsetIndex: This class builds index for efficient mapping of data from one Epetra_CrsGraph ba...
Epetra_IntVector: A class for constructing and using dense integer vectors on a parallel computer...
int MyGlobalElements(int *MyGlobalElementList) const
Puts list of global elements on this processor into the user-provided array.
int MyLength() const
Returns the local vector length on the calling processor of vectors in the multi-vector.
int MinValue(int *Result) const
Compute minimum value of each vector in multi-vector.
int NumProc() const
Returns total number of processes.
bool ConstantElementSize() const
Returns true if map has constant element size.
#define EPETRA_CHK_ERR(a)
int ExtractCopy(int *A, int MyLDA) const
Put multi-vector values into user-provided two-dimensional array.
Epetra_IntMultiVector(const Epetra_BlockMap &Map, int NumVectors, bool zeroOut=true)
Basic Epetra_IntMultiVector constuctor.
int * ElementSizeList() const
List of the element sizes corresponding to the array MyGlobalElements().
Epetra_IntMultiVector & operator=(const Epetra_IntMultiVector &Source)
= Operator.
int ExtractView(int **A, int *MyLDA) const
Set user-provided addresses of A and MyLDA.
int NumVectors() const
Returns the number of vectors in the multi-vector.
Epetra_IntMultiVector: A class for constructing and using dense multi-vectors, vectors and matrices i...
Epetra_MpiComm: The Epetra MPI Communication Class.
virtual void Barrier() const =0
Epetra_Comm Barrier function.
int AllocateForCopy(void)
int ReplaceGlobalValue(int GlobalRow, int VectorIndex, int OrdinalValue)
Replace current value at the specified (GlobalRow, VectorIndex) location with OrdinalValue.
virtual int MyPID() const =0
Return my process ID.
virtual ~Epetra_IntMultiVector()
Epetra_MultiVector destructor.
virtual int MaxAll(double *PartialMaxs, double *GlobalMaxs, int Count) const =0
Epetra_Comm Global Max function.
void Assign(const Epetra_IntMultiVector &rhs)
Epetra_IntVector ** IntVectors_
int ResetView(int **ArrayOfPointers)
Reset the view of an existing multivector to point to new user data.
virtual int SumAll(double *PartialSums, double *GlobalSums, int Count) const =0
Epetra_Comm Global Sum function.
int NumMyElements() const
Number of elements on the calling processor.
int SetSeed(unsigned int Seed_in)
Set seed for Random function.
std::string toString(const int &x) const
int FirstPointInElement(int LID) const
Returns the requested entry in the FirstPointInElementList; see FirstPointInElementList() for details...
int MaxValue(int *Result) const
Compute maximum value of each vector in multi-vector.
const Epetra_Comm * Comm_
Epetra_CompObject: Functionality and data that is common to all computational classes.
int ChangeGlobalValue(int_type GlobalBlockRow, int BlockRowOffset, int VectorIndex, int OrdinalValue, bool SumInto)
Epetra_BlockMap: A class for partitioning block element vectors and matrices.
const Epetra_Comm & Comm() const
Access function for Epetra_Comm communicator.
virtual void Print(std::ostream &os) const
Print method.
int PackAndPrepare(const Epetra_SrcDistObject &Source, int NumExportIDs, int *ExportLIDs, int &LenExports, char *&Exports, int &SizeOfPacket, int *Sizes, bool &VarSizes, Epetra_Distributor &Distor)
Perform any packing or preparation required for call to DoTransfer().
virtual int NumProc() const =0
Returns total number of processes.
int ChangeMyValue(int MyBlockRow, int BlockRowOffset, int VectorIndex, int OrdinalValue, bool SumInto)
void UpdateOrdinalTemp() const
int SumIntoGlobalValue(int GlobalRow, int VectorIndex, int OrdinalValue)
Adds OrdinalValue to existing value at the specified (GlobalRow, VectorIndex) location.
int MaxElementSize() const
Maximum element size across all processors.
int CheckSizes(const Epetra_SrcDistObject &A)
Allows the source and target (this) objects to be compared for compatibility, return nonzero if not...
int SumIntoMyValue(int MyRow, int VectorIndex, int OrdinalValue)
Adds OrdinalValue to existing value at the specified (MyRow, VectorIndex) location.
int ReplaceMyValue(int MyRow, int VectorIndex, int OrdinalValue)
Replace current value at the specified (MyRow, VectorIndex) location with OrdinalValue.
virtual int ReportError(const std::string Message, int ErrorCode) const
Error reporting method.
int ReplaceMap(const Epetra_BlockMap &map)
Replace map, only if new map has same point-structure as current map.
int NumMyPoints() const
Number of local points for this map; equals the sum of all element sizes on the calling processor...
Epetra_SrcDistObject: A class for supporting flexible source distributed objects for import/export op...
long long * MyGlobalElements64() const
int AllocateForView(void)
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)
Perform any unpacking and combining after call to DoTransfer().
int MyPID() const
Return my process ID.
Epetra_DistObject: A class for constructing and using dense multi-vectors, vectors and matrices in pa...
const Epetra_BlockMap & Map() const
Returns the address of the Epetra_BlockMap for this multi-vector.