58 bool doSizes = !map.ConstantElementSize();
61 int * myElements = map.MyGlobalElements();
62 int * elementSizeList = 0;
63 if (doSizes) elementSizeList = map.ElementSizeList();
64 return(
DoCopyBlockMap(matlabA, valueCount, map.NumGlobalElements(), myElements, elementSizeList, doSizes));
67 int numRows = map.NumMyElements();
72 for (
int i=0; i<numRows; i++) allGids[i] = map.GID(i);
75 for (
int i=0; i<numRows; i++) allSizes[i] = map.ElementSize(i);
78 int numChunks = numProc;
79 int stripSize = allGids.GlobalLength()/numChunks;
80 int remainder = allGids.GlobalLength()%numChunks;
85 int numImportGids = 0;
86 if (comm.MyPID()==0) {
87 importGidList.
Size(stripSize+1);
88 if (doSizes) importSizeList.Size(stripSize+1);
90 for (
int i=0; i<numChunks; i++) {
91 if (comm.MyPID()==0) {
92 curStripSize = stripSize;
93 if (i<remainder) curStripSize++;
94 for (
int j=0; j<curStripSize; j++) importGidList[j] = j + curStart;
95 curStart += curStripSize;
98 Epetra_Map importGidMap(-1, curStripSize, importGidList.Values(), 0, comm);
102 if (importGids.Import(allGids, gidImporter,
Insert))
return(-1);
104 if (doSizes)
if (importSizes.Import(allSizes, gidImporter,
Insert))
return(-1);
109 int * myElements = importGids.Values();
110 int * elementSizeList = 0;
111 if (doSizes) elementSizeList = importSizes.Values();
113 if (comm.MyPID()==0) {
114 DoCopyBlockMap(matlabA, valueCount, importGids.MyLength(), myElements, elementSizeList, doSizes);
120int DoCopyBlockMap(mxArray* matlabA,
int& valueCount,
int length,
const int * v1,
const int * v2,
bool doSizes) {
122 double* matlabAvaluesPtr = mxGetPr(matlabA);
123 int* matlabAcolumnIndicesPtr = mxGetJc(matlabA);
124 int* matlabArowIndicesPtr = mxGetIr(matlabA);
127 matlabAvaluesPtr += valueCount;
128 matlabArowIndicesPtr += valueCount;
129 int numGidsDone = valueCount;
134 matlabAcolumnIndicesPtr += numGidsDone;
136 for (
int i=0; i<length; i++) {
137 *matlabAcolumnIndicesPtr++ = valueCount;
138 *matlabArowIndicesPtr++ = 0;
139 *matlabAvaluesPtr++ = v1[i];
142 *matlabAvaluesPtr++ = v2[i];
144 *matlabArowIndicesPtr++ = 1;