43 #include "Epetra_Comm.h"
44 #include "Epetra_BlockMap.h"
45 #include "Epetra_Map.h"
46 #include "Epetra_Vector.h"
47 #include "Epetra_IntVector.h"
48 #include "Epetra_IntSerialDenseVector.h"
49 #include "Epetra_Import.h"
51 using namespace Matlab;
67 if (A.NumVectors() > 1) {
68 for (
int i=0; i < A.NumVectors(); i++)
76 int numRows = map.NumMyElements();
81 for (
int i=0; i<numRows; i++) allGids[i] = map.GID(i);
84 int numChunks = numProc;
90 int numImportGids = 0;
92 importGidList.
Size(stripSize+1);
93 for (
int i=0; i<numChunks; i++) {
94 if (comm.
MyPID()==0) {
95 curStripSize = stripSize;
96 if (i<remainder) curStripSize++;
97 for (
int j=0; j<curStripSize; j++) importGidList[j] = j + curStart;
98 curStart += curStripSize;
104 if (importGids.Import(allGids, gidImporter,
Insert))
return(-1);
113 if (importA.Import(A1, importer,
Insert))
return(-1);
125 int length = A.GlobalLength();
126 int numVectors = A.NumVectors();
128 if (comm.
MyPID()!=0) {
129 if (A.MyLength()!=0) ierr = -1;
132 if (length!=A.MyLength()) ierr = -1;
133 double* matlabAvalues = *matlabApr;
134 double* Aptr = A.Values();
135 memcpy((
void *)matlabAvalues, (
void *)Aptr,
sizeof(*Aptr) * length * numVectors);
136 *matlabApr += length;
139 comm.
MinAll(&ierr, &ierrGlobal, 1);
int CopyMultiVector(double **matlabApr, const Epetra_MultiVector &A)
int DoCopyMultiVector(double **matlabApr, const Epetra_MultiVector &A)
virtual int MinAll(double *PartialMins, double *GlobalMins, int Count) const =0
virtual int MyPID() const =0
const Epetra_Comm & Comm() const
virtual int NumProc() const =0