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" 55 Epetra_BlockMap bmap =
A.Map();
56 const Epetra_Comm & comm = bmap.Comm();
57 int numProc = comm.NumProc();
67 if (
A.NumVectors() > 1) {
68 for (
int i=0; i <
A.NumVectors(); i++)
73 Epetra_Map map(-1, bmap.NumMyPoints(), 0, comm);
75 Epetra_MultiVector A1(
View, map,
A.Pointers(),
A.NumVectors());
76 int numRows = map.NumMyElements();
78 Epetra_Map allGidsMap(-1, numRows, 0,comm);
80 Epetra_IntVector allGids(allGidsMap);
81 for (
int i=0; i<numRows; i++) allGids[i] = map.GID(i);
84 int numChunks = numProc;
85 int stripSize = allGids.GlobalLength()/numChunks;
86 int remainder = allGids.GlobalLength()%numChunks;
89 Epetra_IntSerialDenseVector importGidList;
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;
101 Epetra_Map importGidMap(-1, curStripSize, importGidList.Values(), 0, comm);
102 Epetra_Import gidImporter(importGidMap, allGidsMap);
103 Epetra_IntVector importGids(importGidMap);
104 if (importGids.Import(allGids, gidImporter, Insert))
return(-1);
110 Epetra_Map importMap(-1, importGids.MyLength(), importGids.Values(), 0, comm);
111 Epetra_Import importer(importMap, map);
112 Epetra_MultiVector importA(importMap, A1.NumVectors());
113 if (importA.Import(A1, importer, Insert))
return(-1);
125 int length =
A.GlobalLength();
126 int numVectors =
A.NumVectors();
127 const Epetra_Comm & comm =
A.Map().Comm();
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)