78 const int lineLength = 1025;
79 char line[lineLength];
80 char token[lineLength];
81 int M,
N, numProc, MaxElementSize, MinElementSize, NumMyElements, IndexBase, NumGlobalElements, firstGid;
87 handle = fopen(filename,
"r");
92 if(fgets(line, lineLength, handle)==0)
return(-1);
93 if(sscanf(line,
"%s", token)==0)
return(-1);
94 if (!strcmp(token,
"%NumProc:")) inHeader =
false;
97 if(fgets(line, lineLength, handle)==0)
return(-1);
98 if(sscanf(line,
"%s %d", token, &numProc)==0)
return(-1);
100 if(fgets(line, lineLength, handle)==0)
return(-1);
101 if(fgets(line, lineLength, handle)==0)
return(-1);
102 if(sscanf(line,
"%s %d", token, &MaxElementSize)==0)
return(-1);
104 if(fgets(line, lineLength, handle)==0)
return(-1);
105 if(fgets(line, lineLength, handle)==0)
return(-1);
106 if(sscanf(line,
"%s %d", token, &MinElementSize)==0)
return(-1);
108 if(fgets(line, lineLength, handle)==0)
return(-1);
109 if(fgets(line, lineLength, handle)==0)
return(-1);
110 if(sscanf(line,
"%s %d", token, &IndexBase)==0)
return(-1);
112 if(fgets(line, lineLength, handle)==0)
return(-1);
113 if(fgets(line, lineLength, handle)==0)
return(-1);
114 if(sscanf(line,
"%s %d", token, &NumGlobalElements)==0)
return(-1);
118 if (comm.NumProc()==numProc) {
119 if(fgets(line, lineLength, handle)==0)
return(-1);
121 for (
int i=0; i<comm.MyPID(); i++) {
122 if(fgets(line, lineLength, handle)==0)
return(-1);
123 if(sscanf(line,
"%s %d", token, &NumMyElements)==0)
return(-1);
124 firstGid += NumMyElements;
127 if(fgets(line, lineLength, handle)==0)
return(-1);
128 if(sscanf(line,
"%s %d", token, &NumMyElements)==0)
return(-1);
130 for (
int i=comm.MyPID()+1; i<numProc; i++) {
131 if(fgets(line, lineLength, handle)==0)
return(-1);
137 if(fgets(line, lineLength, handle)==0)
return(-1);
138 for (
int i=0; i<numProc; i++) {
139 if(fgets(line, lineLength, handle)==0)
return(-1);
142 NumMyElements = NumGlobalElements/comm.NumProc();
143 firstGid = comm.MyPID()*NumMyElements;
144 int remainder = NumGlobalElements%comm.NumProc();
145 if (comm.MyPID()<remainder) NumMyElements++;
146 int extra = remainder;
147 if (comm.MyPID()<remainder) extra = comm.MyPID();
150 if(fgets(line, lineLength, handle)==0)
return(-1);
151 if(sscanf(line,
"%d %d", &M, &
N)==0)
return(-1);
153 bool doSizes = (
N>1);
156 for (
int i=0; i<firstGid; i++) {
157 if(fgets(line, lineLength, handle)==0)
return(-1);
161 for (
int i=0; i<NumMyElements; i++) {
162 if(fgets(line, lineLength, handle)==0)
return(-1);
163 if(sscanf(line,
"%d %d", &v1[i], &v2[i])==0)
return(-1);
167 for (
int i=0; i<NumMyElements; i++) {
168 if(fgets(line, lineLength, handle)==0)
return(-1);
169 if(sscanf(line,
"%d", &v1[i])==0)
return(-1);
170 v2[i] = MinElementSize;
173 if (fclose(handle))
return(-1);
177 if (MinElementSize==1 && MaxElementSize==1)
178 map =
new Epetra_Map(-1, NumMyElements, v1.Values(), IndexBase, comm);
180 map =
new Epetra_BlockMap(-1, NumMyElements, v1.Values(), v2.Values(), IndexBase, comm);
188 const int lineLength = 1025;
189 char line[lineLength];
190 char token[lineLength];
191 int numProc, MaxElementSize, MinElementSize, NumMyElements;
192 long long M,
N, IndexBase, NumGlobalElements, firstGid;
196 bool inHeader =
true;
198 handle = fopen(filename,
"r");
203 if(fgets(line, lineLength, handle)==0)
return(-1);
204 if(sscanf(line,
"%s", token)==0)
return(-1);
205 if (!strcmp(token,
"%NumProc:")) inHeader =
false;
208 if(fgets(line, lineLength, handle)==0)
return(-1);
209 if(sscanf(line,
"%s %d", token, &numProc)==0)
return(-1);
211 if(fgets(line, lineLength, handle)==0)
return(-1);
212 if(fgets(line, lineLength, handle)==0)
return(-1);
213 if(sscanf(line,
"%s %d", token, &MaxElementSize)==0)
return(-1);
215 if(fgets(line, lineLength, handle)==0)
return(-1);
216 if(fgets(line, lineLength, handle)==0)
return(-1);
217 if(sscanf(line,
"%s %d", token, &MinElementSize)==0)
return(-1);
219 if(fgets(line, lineLength, handle)==0)
return(-1);
220 if(fgets(line, lineLength, handle)==0)
return(-1);
221 if(sscanf(line,
"%s %lld", token, &IndexBase)==0)
return(-1);
223 if(fgets(line, lineLength, handle)==0)
return(-1);
224 if(fgets(line, lineLength, handle)==0)
return(-1);
225 if(sscanf(line,
"%s %lld", token, &NumGlobalElements)==0)
return(-1);
229 if (comm.NumProc()==numProc) {
230 if(fgets(line, lineLength, handle)==0)
return(-1);
232 for (
int i=0; i<comm.MyPID(); i++) {
233 if(fgets(line, lineLength, handle)==0)
return(-1);
234 if(sscanf(line,
"%s %d", token, &NumMyElements)==0)
return(-1);
235 firstGid += NumMyElements;
238 if(fgets(line, lineLength, handle)==0)
return(-1);
239 if(sscanf(line,
"%s %d", token, &NumMyElements)==0)
return(-1);
241 for (
int i=comm.MyPID()+1; i<numProc; i++) {
242 if(fgets(line, lineLength, handle)==0)
return(-1);
248 if(fgets(line, lineLength, handle)==0)
return(-1);
249 for (
int i=0; i<numProc; i++) {
250 if(fgets(line, lineLength, handle)==0)
return(-1);
253 NumMyElements = (int) (NumGlobalElements/comm.NumProc());
254 firstGid = ((
long long) comm.MyPID())*NumMyElements;
255 int remainder = (int) (NumGlobalElements%comm.NumProc());
256 if (comm.MyPID()<remainder) NumMyElements++;
257 int extra = remainder;
258 if (comm.MyPID()<remainder) extra = comm.MyPID();
261 if(fgets(line, lineLength, handle)==0)
return(-1);
262 if(sscanf(line,
"%lld %lld", &M, &
N)==0)
return(-1);
264 bool doSizes = (
N>1);
267 for (
long long i=0; i<firstGid; i++) {
268 if(fgets(line, lineLength, handle)==0)
return(-1);
272 for (
int i=0; i<NumMyElements; i++) {
273 if(fgets(line, lineLength, handle)==0)
return(-1);
274 if(sscanf(line,
"%lld %d", &v1[i], &v2[i])==0)
return(-1);
278 for (
int i=0; i<NumMyElements; i++) {
279 if(fgets(line, lineLength, handle)==0)
return(-1);
280 if(sscanf(line,
"%lld", &v1[i])==0)
return(-1);
281 v2[i] = MinElementSize;
284 if (fclose(handle))
return(-1);
288 if (MinElementSize==1 && MaxElementSize==1)
289 map =
new Epetra_Map(-1LL, NumMyElements, v1.Values(), IndexBase, comm);
291 map =
new Epetra_BlockMap(-1LL, NumMyElements, v1.Values(), v2.Values(), IndexBase, comm);
406 FILE* infile = fopen(filename,
"r");
407 if (infile == NULL) {
414 if (err != 0)
return(err);
421 long long numrows, numcols, nnz;
423 if (err != 0)
return(err);
435 int num_map_cols = 0, insertPoint, foundOffset;
437 if(numcols > (
long long) std::numeric_limits<int>::max())
438 allocLen = std::numeric_limits<int>::max();
440 allocLen = (int) numcols;
442 long long* map_cols =
new long long[allocLen];
447 for(
int i=0; i<nnz; ++i) {
454 if (rowmap->MyGID(I)) {
457 if (foundOffset < 0) {
459 num_map_cols, allocLen);
467 colmap =
new Epetra_Map(-1LL, num_map_cols, map_cols, 0, comm);