/[escript]/trunk/finley/src/Mesh_read.c
ViewVC logotype

Diff of /trunk/finley/src/Mesh_read.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1876 by phornby, Mon Oct 13 10:19:17 2008 UTC revision 1887 by ksteube, Wed Oct 15 03:26:25 2008 UTC
# Line 21  Line 21 
21  #include <ctype.h>  #include <ctype.h>
22  #include "Mesh.h"  #include "Mesh.h"
23    
24    #define FSCANF_CHECK(scan_ret, reason) { if (scan_ret == EOF) perror(reason); return NULL; }
25    
26  /**************************************************************/  /**************************************************************/
27    
28  /*  reads a mesh from a Finley file of name fname */  /*  reads a mesh from a Finley file of name fname */
# Line 38  Finley_Mesh* Finley_Mesh_read(char* fnam Line 40  Finley_Mesh* Finley_Mesh_read(char* fnam
40    double time0=Finley_timer();    double time0=Finley_timer();
41    FILE *fileHandle_p = NULL;    FILE *fileHandle_p = NULL;
42    ElementTypeId typeID, faceTypeID, contactTypeID, pointTypeID;    ElementTypeId typeID, faceTypeID, contactTypeID, pointTypeID;
43      int scan_ret;
44        
45    Finley_resetError();    Finley_resetError();
46    
# Line 55  Finley_Mesh* Finley_Mesh_read(char* fnam Line 58  Finley_Mesh* Finley_Mesh_read(char* fnam
58        
59       /* read header */       /* read header */
60       sprintf(frm,"%%%d[^\n]",LenString_MAX-1);       sprintf(frm,"%%%d[^\n]",LenString_MAX-1);
61       fscanf(fileHandle_p, frm, name);       scan_ret = fscanf(fileHandle_p, frm, name);
62         FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
63        
64       /* get the nodes */       /* get the nodes */
65        
66       fscanf(fileHandle_p, "%1d%*s %d\n", &numDim,&numNodes);       scan_ret = fscanf(fileHandle_p, "%1d%*s %d\n", &numDim,&numNodes);
67         FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
68       /* allocate mesh */       /* allocate mesh */
69       mesh_p = Finley_Mesh_alloc(name,numDim,order,reduced_order,mpi_info);       mesh_p = Finley_Mesh_alloc(name,numDim,order,reduced_order,mpi_info);
70       if (Finley_noError()) {       if (Finley_noError()) {
# Line 68  Finley_Mesh* Finley_Mesh_read(char* fnam Line 73  Finley_Mesh* Finley_Mesh_read(char* fnam
73          Finley_NodeFile_allocTable(mesh_p->Nodes, numNodes);          Finley_NodeFile_allocTable(mesh_p->Nodes, numNodes);
74          if (Finley_noError()) {          if (Finley_noError()) {
75             if (1 == numDim) {             if (1 == numDim) {
76                 for (i0 = 0; i0 < numNodes; i0++)                 for (i0 = 0; i0 < numNodes; i0++) {
77                  fscanf(fileHandle_p, "%d %d %d %le\n", &mesh_p->Nodes->Id[i0],                  scan_ret = fscanf(fileHandle_p, "%d %d %d %le\n", &mesh_p->Nodes->Id[i0],
78                         &mesh_p->Nodes->globalDegreesOfFreedom[i0], &mesh_p->Nodes->Tag[i0],                         &mesh_p->Nodes->globalDegreesOfFreedom[i0], &mesh_p->Nodes->Tag[i0],
79                         &mesh_p->Nodes->Coordinates[INDEX2(0,i0,numDim)]);                         &mesh_p->Nodes->Coordinates[INDEX2(0,i0,numDim)]);
80                FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
81               }
82             } else if (2 == numDim) {             } else if (2 == numDim) {
83                      for (i0 = 0; i0 < numNodes; i0++)                      for (i0 = 0; i0 < numNodes; i0++) {
84                            fscanf(fileHandle_p, "%d %d %d %le %le\n", &mesh_p->Nodes->Id[i0],                            scan_ret = fscanf(fileHandle_p, "%d %d %d %le %le\n", &mesh_p->Nodes->Id[i0],
85                                   &mesh_p->Nodes->globalDegreesOfFreedom[i0], &mesh_p->Nodes->Tag[i0],                                   &mesh_p->Nodes->globalDegreesOfFreedom[i0], &mesh_p->Nodes->Tag[i0],
86                                   &mesh_p->Nodes->Coordinates[INDEX2(0,i0,numDim)],                                   &mesh_p->Nodes->Coordinates[INDEX2(0,i0,numDim)],
87                                   &mesh_p->Nodes->Coordinates[INDEX2(1,i0,numDim)]);                                   &mesh_p->Nodes->Coordinates[INDEX2(1,i0,numDim)]);
88                      FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
89                    }
90             } else if (3 == numDim) {             } else if (3 == numDim) {
91                      for (i0 = 0; i0 < numNodes; i0++)                      for (i0 = 0; i0 < numNodes; i0++) {
92                            fscanf(fileHandle_p, "%d %d %d %le %le %le\n", &mesh_p->Nodes->Id[i0],                            scan_ret = fscanf(fileHandle_p, "%d %d %d %le %le %le\n", &mesh_p->Nodes->Id[i0],
93                                   &mesh_p->Nodes->globalDegreesOfFreedom[i0], &mesh_p->Nodes->Tag[i0],                                   &mesh_p->Nodes->globalDegreesOfFreedom[i0], &mesh_p->Nodes->Tag[i0],
94                                   &mesh_p->Nodes->Coordinates[INDEX2(0,i0,numDim)],                                   &mesh_p->Nodes->Coordinates[INDEX2(0,i0,numDim)],
95                                   &mesh_p->Nodes->Coordinates[INDEX2(1,i0,numDim)],                                   &mesh_p->Nodes->Coordinates[INDEX2(1,i0,numDim)],
96                                   &mesh_p->Nodes->Coordinates[INDEX2(2,i0,numDim)]);                                   &mesh_p->Nodes->Coordinates[INDEX2(2,i0,numDim)]);
97                      FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
98                    }
99             } /* if else else */             } /* if else else */
100          }          }
101          /* read elements */          /* read elements */
102          if (Finley_noError()) {          if (Finley_noError()) {
103        
104             fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);             scan_ret = fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);
105           FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
106             typeID=Finley_RefElement_getTypeId(element_type);             typeID=Finley_RefElement_getTypeId(element_type);
107             if (typeID==NoType) {             if (typeID==NoType) {
108               sprintf(error_msg,"Finley_Mesh_read :Unidentified element type %s",element_type);               sprintf(error_msg,"Finley_Mesh_read :Unidentified element type %s",element_type);
# Line 104  Finley_Mesh* Finley_Mesh_read(char* fnam Line 116  Finley_Mesh* Finley_Mesh_read(char* fnam
116                   mesh_p->Elements->maxColor=numEle-1;                   mesh_p->Elements->maxColor=numEle-1;
117                   if (Finley_noError()) {                   if (Finley_noError()) {
118                      for (i0 = 0; i0 < numEle; i0++) {                      for (i0 = 0; i0 < numEle; i0++) {
119                        fscanf(fileHandle_p, "%d %d", &mesh_p->Elements->Id[i0], &mesh_p->Elements->Tag[i0]);                        scan_ret = fscanf(fileHandle_p, "%d %d", &mesh_p->Elements->Id[i0], &mesh_p->Elements->Tag[i0]);
120                  FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
121                        mesh_p->Elements->Color[i0]=i0;                        mesh_p->Elements->Color[i0]=i0;
122                        mesh_p->Elements->Owner[i0]=0;                        mesh_p->Elements->Owner[i0]=0;
123                        for (i1 = 0; i1 < mesh_p->Elements->ReferenceElement->Type->numNodes; i1++) {                        for (i1 = 0; i1 < mesh_p->Elements->ReferenceElement->Type->numNodes; i1++) {
124                             fscanf(fileHandle_p, " %d",                             scan_ret = fscanf(fileHandle_p, " %d",
125                                &mesh_p->Elements->Nodes[INDEX2(i1, i0, mesh_p->Elements->ReferenceElement->Type->numNodes)]);                                &mesh_p->Elements->Nodes[INDEX2(i1, i0, mesh_p->Elements->ReferenceElement->Type->numNodes)]);
126                   FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
127                        } /* for i1 */                        } /* for i1 */
128                        fscanf(fileHandle_p, "\n");                        scan_ret = fscanf(fileHandle_p, "\n");
129                  FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
130                      } /* for i0 */                      } /* for i0 */
131                   }                   }
132               }               }
# Line 119  Finley_Mesh* Finley_Mesh_read(char* fnam Line 134  Finley_Mesh* Finley_Mesh_read(char* fnam
134          }          }
135          /* get the face elements */          /* get the face elements */
136          if (Finley_noError()) {          if (Finley_noError()) {
137               fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);               scan_ret = fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);
138             FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
139               faceTypeID=Finley_RefElement_getTypeId(element_type);               faceTypeID=Finley_RefElement_getTypeId(element_type);
140               if (faceTypeID==NoType) {               if (faceTypeID==NoType) {
141                 sprintf(error_msg,"Finley_Mesh_read :Unidentified element type %s for face elements",element_type);                 sprintf(error_msg,"Finley_Mesh_read :Unidentified element type %s for face elements",element_type);
# Line 132  Finley_Mesh* Finley_Mesh_read(char* fnam Line 148  Finley_Mesh* Finley_Mesh_read(char* fnam
148                        mesh_p->FaceElements->minColor=0;                        mesh_p->FaceElements->minColor=0;
149                        mesh_p->FaceElements->maxColor=numEle-1;                        mesh_p->FaceElements->maxColor=numEle-1;
150                        for (i0 = 0; i0 < numEle; i0++) {                        for (i0 = 0; i0 < numEle; i0++) {
151                          fscanf(fileHandle_p, "%d %d", &mesh_p->FaceElements->Id[i0], &mesh_p->FaceElements->Tag[i0]);                          scan_ret = fscanf(fileHandle_p, "%d %d", &mesh_p->FaceElements->Id[i0], &mesh_p->FaceElements->Tag[i0]);
152                FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
153                          mesh_p->FaceElements->Color[i0]=i0;                          mesh_p->FaceElements->Color[i0]=i0;
154                          mesh_p->FaceElements->Owner[i0]=0;                          mesh_p->FaceElements->Owner[i0]=0;
155                          for (i1 = 0; i1 < mesh_p->FaceElements->ReferenceElement->Type->numNodes; i1++) {                          for (i1 = 0; i1 < mesh_p->FaceElements->ReferenceElement->Type->numNodes; i1++) {
156                               fscanf(fileHandle_p, " %d",                               scan_ret = fscanf(fileHandle_p, " %d",
157                                  &mesh_p->FaceElements->Nodes[INDEX2(i1, i0, mesh_p->FaceElements->ReferenceElement->Type->numNodes)]);                                  &mesh_p->FaceElements->Nodes[INDEX2(i1, i0, mesh_p->FaceElements->ReferenceElement->Type->numNodes)]);
158                     FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
159                          }   /* for i1 */                          }   /* for i1 */
160                          fscanf(fileHandle_p, "\n");                          scan_ret = fscanf(fileHandle_p, "\n");
161                FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
162                        } /* for i0 */                        } /* for i0 */
163                     }                     }
164                  }                  }
# Line 147  Finley_Mesh* Finley_Mesh_read(char* fnam Line 166  Finley_Mesh* Finley_Mesh_read(char* fnam
166          }          }
167          /* get the Contact face element */          /* get the Contact face element */
168          if (Finley_noError()) {          if (Finley_noError()) {
169               fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);               scan_ret = fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);
170             FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
171               contactTypeID=Finley_RefElement_getTypeId(element_type);               contactTypeID=Finley_RefElement_getTypeId(element_type);
172               if (contactTypeID==NoType) {               if (contactTypeID==NoType) {
173                 sprintf(error_msg,"Finley_Mesh_read: Unidentified element type %s for contact elements",element_type);                 sprintf(error_msg,"Finley_Mesh_read: Unidentified element type %s for contact elements",element_type);
# Line 160  Finley_Mesh* Finley_Mesh_read(char* fnam Line 180  Finley_Mesh* Finley_Mesh_read(char* fnam
180                        mesh_p->ContactElements->minColor=0;                        mesh_p->ContactElements->minColor=0;
181                        mesh_p->ContactElements->maxColor=numEle-1;                        mesh_p->ContactElements->maxColor=numEle-1;
182                        for (i0 = 0; i0 < numEle; i0++) {                        for (i0 = 0; i0 < numEle; i0++) {
183                          fscanf(fileHandle_p, "%d %d", &mesh_p->ContactElements->Id[i0], &mesh_p->ContactElements->Tag[i0]);                          scan_ret = fscanf(fileHandle_p, "%d %d", &mesh_p->ContactElements->Id[i0], &mesh_p->ContactElements->Tag[i0]);
184                FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
185                          mesh_p->ContactElements->Color[i0]=i0;                          mesh_p->ContactElements->Color[i0]=i0;
186                          mesh_p->ContactElements->Owner[i0]=0;                          mesh_p->ContactElements->Owner[i0]=0;
187                          for (i1 = 0; i1 < mesh_p->ContactElements->ReferenceElement->Type->numNodes; i1++) {                          for (i1 = 0; i1 < mesh_p->ContactElements->ReferenceElement->Type->numNodes; i1++) {
188                              fscanf(fileHandle_p, " %d",                              scan_ret = fscanf(fileHandle_p, " %d",
189                                 &mesh_p->ContactElements->Nodes[INDEX2(i1, i0, mesh_p->ContactElements->ReferenceElement->Type->numNodes)]);                                 &mesh_p->ContactElements->Nodes[INDEX2(i1, i0, mesh_p->ContactElements->ReferenceElement->Type->numNodes)]);
190                    FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
191                          }   /* for i1 */                          }   /* for i1 */
192                          fscanf(fileHandle_p, "\n");                          scan_ret = fscanf(fileHandle_p, "\n");
193                FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
194                        } /* for i0 */                        } /* for i0 */
195                    }                    }
196                 }                 }
# Line 175  Finley_Mesh* Finley_Mesh_read(char* fnam Line 198  Finley_Mesh* Finley_Mesh_read(char* fnam
198          }            }  
199          /* get the nodal element */          /* get the nodal element */
200          if (Finley_noError()) {          if (Finley_noError()) {
201               fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);               scan_ret = fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);
202             FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
203               pointTypeID=Finley_RefElement_getTypeId(element_type);               pointTypeID=Finley_RefElement_getTypeId(element_type);
204               if (pointTypeID==NoType) {               if (pointTypeID==NoType) {
205                 sprintf(error_msg,"Finley_Mesh_read: Unidentified element type %s for points",element_type);                 sprintf(error_msg,"Finley_Mesh_read: Unidentified element type %s for points",element_type);
# Line 188  Finley_Mesh* Finley_Mesh_read(char* fnam Line 212  Finley_Mesh* Finley_Mesh_read(char* fnam
212                     mesh_p->Points->minColor=0;                     mesh_p->Points->minColor=0;
213                     mesh_p->Points->maxColor=numEle-1;                     mesh_p->Points->maxColor=numEle-1;
214                     for (i0 = 0; i0 < numEle; i0++) {                     for (i0 = 0; i0 < numEle; i0++) {
215                       fscanf(fileHandle_p, "%d %d", &mesh_p->Points->Id[i0], &mesh_p->Points->Tag[i0]);                       scan_ret = fscanf(fileHandle_p, "%d %d", &mesh_p->Points->Id[i0], &mesh_p->Points->Tag[i0]);
216                 FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
217                       mesh_p->Points->Color[i0]=i0;                       mesh_p->Points->Color[i0]=i0;
218                       mesh_p->Points->Owner[i0]=0;                       mesh_p->Points->Owner[i0]=0;
219                       for (i1 = 0; i1 < mesh_p->Points->ReferenceElement->Type->numNodes; i1++) {                       for (i1 = 0; i1 < mesh_p->Points->ReferenceElement->Type->numNodes; i1++) {
220                           fscanf(fileHandle_p, " %d",                           scan_ret = fscanf(fileHandle_p, " %d",
221                              &mesh_p->Points->Nodes[INDEX2(i1, i0, mesh_p->Points->ReferenceElement->Type->numNodes)]);                              &mesh_p->Points->Nodes[INDEX2(i1, i0, mesh_p->Points->ReferenceElement->Type->numNodes)]);
222                 FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
223                       }  /* for i1 */                       }  /* for i1 */
224                       fscanf(fileHandle_p, "\n");                       scan_ret = fscanf(fileHandle_p, "\n");
225                 FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
226                     } /* for i0 */                     } /* for i0 */
227                  }                  }
228               }               }
# Line 203  Finley_Mesh* Finley_Mesh_read(char* fnam Line 230  Finley_Mesh* Finley_Mesh_read(char* fnam
230          /* get the name tags */          /* get the name tags */
231          if (Finley_noError()) {          if (Finley_noError()) {
232             if (feof(fileHandle_p) == 0) {             if (feof(fileHandle_p) == 0) {
233                fscanf(fileHandle_p, "%s\n", name);                scan_ret = fscanf(fileHandle_p, "%s\n", name);
234              FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
235                while (feof(fileHandle_p) == 0) {                while (feof(fileHandle_p) == 0) {
236                     fscanf(fileHandle_p, "%s %d\n", name, &tag_key);                     scan_ret = fscanf(fileHandle_p, "%s %d\n", name, &tag_key);
237               FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
238                     Finley_Mesh_addTagMap(mesh_p,name,tag_key);                     Finley_Mesh_addTagMap(mesh_p,name,tag_key);
239                }                }
240             }             }
# Line 248  Finley_Mesh* Finley_Mesh_read_MPI(char* Line 277  Finley_Mesh* Finley_Mesh_read_MPI(char*
277    ElementTypeId typeID, faceTypeID, contactTypeID, pointTypeID;    ElementTypeId typeID, faceTypeID, contactTypeID, pointTypeID;
278    Finley_TagMap* tag_map;    Finley_TagMap* tag_map;
279    index_t tag_key;    index_t tag_key;
280      int scan_ret;
281    
282    Finley_resetError();    Finley_resetError();
283    
# Line 263  Finley_Mesh* Finley_Mesh_read_MPI(char* Line 293  Finley_Mesh* Finley_Mesh_read_MPI(char*
293    
294       /* read header */       /* read header */
295       sprintf(frm,"%%%d[^\n]",LenString_MAX-1);       sprintf(frm,"%%%d[^\n]",LenString_MAX-1);
296       fscanf(fileHandle_p, frm, name);       scan_ret = fscanf(fileHandle_p, frm, name);
297         FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
298    
299       /* get the number of nodes */       /* get the number of nodes */
300       fscanf(fileHandle_p, "%1d%*s %d\n", &numDim,&numNodes);       scan_ret = fscanf(fileHandle_p, "%1d%*s %d\n", &numDim,&numNodes);
301         FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
302    }    }
303    
304  #ifdef PASO_MPI  #ifdef PASO_MPI
# Line 314  Finley_Mesh* Finley_Mesh_read_MPI(char* Line 346  Finley_Mesh* Finley_Mesh_read_MPI(char*
346          chunkNodes = 0;          chunkNodes = 0;
347          for (i1=0; i1<chunkSize; i1++) {          for (i1=0; i1<chunkSize; i1++) {
348            if (totalNodes >= numNodes) break;    /* End of inner loop */            if (totalNodes >= numNodes) break;    /* End of inner loop */
349                if (1 == numDim)                if (1 == numDim) {
350          fscanf(fileHandle_p, "%d %d %d %le\n",          scan_ret = fscanf(fileHandle_p, "%d %d %d %le\n",
351            &tempInts[0+i1], &tempInts[chunkSize+i1], &tempInts[chunkSize*2+i1],            &tempInts[0+i1], &tempInts[chunkSize+i1], &tempInts[chunkSize*2+i1],
352            &tempCoords[i1*numDim+0]);            &tempCoords[i1*numDim+0]);
353                if (2 == numDim)          FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
354          fscanf(fileHandle_p, "%d %d %d %le %le\n",            }
355                  if (2 == numDim) {
356            scan_ret = fscanf(fileHandle_p, "%d %d %d %le %le\n",
357            &tempInts[0+i1], &tempInts[chunkSize+i1], &tempInts[chunkSize*2+i1],            &tempInts[0+i1], &tempInts[chunkSize+i1], &tempInts[chunkSize*2+i1],
358            &tempCoords[i1*numDim+0], &tempCoords[i1*numDim+1]);            &tempCoords[i1*numDim+0], &tempCoords[i1*numDim+1]);
359                if (3 == numDim)          FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
360          fscanf(fileHandle_p, "%d %d %d %le %le %le\n",            }
361                  if (3 == numDim) {
362            scan_ret = fscanf(fileHandle_p, "%d %d %d %le %le %le\n",
363            &tempInts[0+i1], &tempInts[chunkSize+i1], &tempInts[chunkSize*2+i1],            &tempInts[0+i1], &tempInts[chunkSize+i1], &tempInts[chunkSize*2+i1],
364            &tempCoords[i1*numDim+0], &tempCoords[i1*numDim+1], &tempCoords[i1*numDim+2]);            &tempCoords[i1*numDim+0], &tempCoords[i1*numDim+1], &tempCoords[i1*numDim+2]);
365            FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
366              }
367            totalNodes++; /* When do we quit the infinite loop? */            totalNodes++; /* When do we quit the infinite loop? */
368            chunkNodes++; /* How many nodes do we actually have in this chunk? It may be smaller than chunkSize. */            chunkNodes++; /* How many nodes do we actually have in this chunk? It may be smaller than chunkSize. */
369          }          }
# Line 395  Finley_Mesh* Finley_Mesh_read_MPI(char* Line 433  Finley_Mesh* Finley_Mesh_read_MPI(char*
433      /* Read the element typeID */      /* Read the element typeID */
434          if (Finley_noError()) {          if (Finley_noError()) {
435        if (mpi_info->rank == 0) {        if (mpi_info->rank == 0) {
436              fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);              scan_ret = fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);
437            FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
438              typeID=Finley_RefElement_getTypeId(element_type);              typeID=Finley_RefElement_getTypeId(element_type);
439        }        }
440  #ifdef PASO_MPI  #ifdef PASO_MPI
# Line 433  Finley_Mesh* Finley_Mesh_read_MPI(char* Line 472  Finley_Mesh* Finley_Mesh_read_MPI(char*
472          chunkEle = 0;          chunkEle = 0;
473          for (i0=0; i0<chunkSize; i0++) {          for (i0=0; i0<chunkSize; i0++) {
474            if (totalEle >= numEle) break; /* End inner loop */            if (totalEle >= numEle) break; /* End inner loop */
475            fscanf(fileHandle_p, "%d %d", &tempInts[i0*(2+numNodes)+0], &tempInts[i0*(2+numNodes)+1]);            scan_ret = fscanf(fileHandle_p, "%d %d", &tempInts[i0*(2+numNodes)+0], &tempInts[i0*(2+numNodes)+1]);
476            for (i1 = 0; i1 < numNodes; i1++) fscanf(fileHandle_p, " %d", &tempInts[i0*(2+numNodes)+2+i1]);            FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
477            fscanf(fileHandle_p, "\n");            for (i1 = 0; i1 < numNodes; i1++) {
478            scan_ret = fscanf(fileHandle_p, " %d", &tempInts[i0*(2+numNodes)+2+i1]);
479                FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
480              }
481              scan_ret = fscanf(fileHandle_p, "\n");
482              FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
483            totalEle++;            totalEle++;
484            chunkEle++;            chunkEle++;
485          }          }
# Line 495  Finley_Mesh* Finley_Mesh_read_MPI(char* Line 539  Finley_Mesh* Finley_Mesh_read_MPI(char*
539      /* Read the element typeID */      /* Read the element typeID */
540          if (Finley_noError()) {          if (Finley_noError()) {
541        if (mpi_info->rank == 0) {        if (mpi_info->rank == 0) {
542              fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);              scan_ret = fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);
543            FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
544              typeID=Finley_RefElement_getTypeId(element_type);              typeID=Finley_RefElement_getTypeId(element_type);
545        }        }
546  #ifdef PASO_MPI  #ifdef PASO_MPI
# Line 533  Finley_Mesh* Finley_Mesh_read_MPI(char* Line 578  Finley_Mesh* Finley_Mesh_read_MPI(char*
578          chunkEle = 0;          chunkEle = 0;
579          for (i0=0; i0<chunkSize; i0++) {          for (i0=0; i0<chunkSize; i0++) {
580            if (totalEle >= numEle) break; /* End inner loop */            if (totalEle >= numEle) break; /* End inner loop */
581            fscanf(fileHandle_p, "%d %d", &tempInts[i0*(2+numNodes)+0], &tempInts[i0*(2+numNodes)+1]);            scan_ret = fscanf(fileHandle_p, "%d %d", &tempInts[i0*(2+numNodes)+0], &tempInts[i0*(2+numNodes)+1]);
582            for (i1 = 0; i1 < numNodes; i1++) fscanf(fileHandle_p, " %d", &tempInts[i0*(2+numNodes)+2+i1]);            FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
583            fscanf(fileHandle_p, "\n");            for (i1 = 0; i1 < numNodes; i1++) {
584            scan_ret = fscanf(fileHandle_p, " %d", &tempInts[i0*(2+numNodes)+2+i1]);
585                FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
586              }
587              scan_ret = fscanf(fileHandle_p, "\n");
588              FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
589            totalEle++;            totalEle++;
590            chunkEle++;            chunkEle++;
591          }          }
# Line 595  Finley_Mesh* Finley_Mesh_read_MPI(char* Line 645  Finley_Mesh* Finley_Mesh_read_MPI(char*
645      /* Read the element typeID */      /* Read the element typeID */
646          if (Finley_noError()) {          if (Finley_noError()) {
647        if (mpi_info->rank == 0) {        if (mpi_info->rank == 0) {
648              fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);              scan_ret = fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);
649            FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
650              typeID=Finley_RefElement_getTypeId(element_type);              typeID=Finley_RefElement_getTypeId(element_type);
651        }        }
652  #ifdef PASO_MPI  #ifdef PASO_MPI
# Line 633  Finley_Mesh* Finley_Mesh_read_MPI(char* Line 684  Finley_Mesh* Finley_Mesh_read_MPI(char*
684          chunkEle = 0;          chunkEle = 0;
685          for (i0=0; i0<chunkSize; i0++) {          for (i0=0; i0<chunkSize; i0++) {
686            if (totalEle >= numEle) break; /* End inner loop */            if (totalEle >= numEle) break; /* End inner loop */
687            fscanf(fileHandle_p, "%d %d", &tempInts[i0*(2+numNodes)+0], &tempInts[i0*(2+numNodes)+1]);            scan_ret = fscanf(fileHandle_p, "%d %d", &tempInts[i0*(2+numNodes)+0], &tempInts[i0*(2+numNodes)+1]);
688            for (i1 = 0; i1 < numNodes; i1++) fscanf(fileHandle_p, " %d", &tempInts[i0*(2+numNodes)+2+i1]);            FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
689            fscanf(fileHandle_p, "\n");            for (i1 = 0; i1 < numNodes; i1++) {
690            scan_ret = fscanf(fileHandle_p, " %d", &tempInts[i0*(2+numNodes)+2+i1]);
691                FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
692              }
693              scan_ret = fscanf(fileHandle_p, "\n");
694              FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
695            totalEle++;            totalEle++;
696            chunkEle++;            chunkEle++;
697          }          }
# Line 695  Finley_Mesh* Finley_Mesh_read_MPI(char* Line 751  Finley_Mesh* Finley_Mesh_read_MPI(char*
751      /* Read the element typeID */      /* Read the element typeID */
752          if (Finley_noError()) {          if (Finley_noError()) {
753        if (mpi_info->rank == 0) {        if (mpi_info->rank == 0) {
754              fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);              scan_ret = fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);
755            FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
756              typeID=Finley_RefElement_getTypeId(element_type);              typeID=Finley_RefElement_getTypeId(element_type);
757        }        }
758  #ifdef PASO_MPI  #ifdef PASO_MPI
# Line 733  Finley_Mesh* Finley_Mesh_read_MPI(char* Line 790  Finley_Mesh* Finley_Mesh_read_MPI(char*
790          chunkEle = 0;          chunkEle = 0;
791          for (i0=0; i0<chunkSize; i0++) {          for (i0=0; i0<chunkSize; i0++) {
792            if (totalEle >= numEle) break; /* End inner loop */            if (totalEle >= numEle) break; /* End inner loop */
793            fscanf(fileHandle_p, "%d %d", &tempInts[i0*(2+numNodes)+0], &tempInts[i0*(2+numNodes)+1]);            scan_ret = fscanf(fileHandle_p, "%d %d", &tempInts[i0*(2+numNodes)+0], &tempInts[i0*(2+numNodes)+1]);
794            for (i1 = 0; i1 < numNodes; i1++) fscanf(fileHandle_p, " %d", &tempInts[i0*(2+numNodes)+2+i1]);            FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
795            fscanf(fileHandle_p, "\n");            for (i1 = 0; i1 < numNodes; i1++) {
796            scan_ret = fscanf(fileHandle_p, " %d", &tempInts[i0*(2+numNodes)+2+i1]);
797                FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
798              }
799              scan_ret = fscanf(fileHandle_p, "\n");
800              FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
801            totalEle++;            totalEle++;
802            chunkEle++;            chunkEle++;
803          }          }
# Line 798  Finley_Mesh* Finley_Mesh_read_MPI(char* Line 860  Finley_Mesh* Finley_Mesh_read_MPI(char*
860          long cur_pos, end_pos;          long cur_pos, end_pos;
861          if (mpi_info->rank == 0) {  /* Master */          if (mpi_info->rank == 0) {  /* Master */
862        /* Read the word 'Tag' */        /* Read the word 'Tag' */
863        if (! feof(fileHandle_p)) fscanf(fileHandle_p, "%s\n", name);        if (! feof(fileHandle_p)) {
864            scan_ret = fscanf(fileHandle_p, "%s\n", name);
865            FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
866          }
867        /* Read rest of file in one chunk, after using seek to find length */        /* Read rest of file in one chunk, after using seek to find length */
868    
869  #if defined(_WIN32)  /* windows ftell lies on unix formatted text files */  #if defined(_WIN32)  /* windows ftell lies on unix formatted text files */
# Line 835  Finley_Mesh* Finley_Mesh_read_MPI(char* Line 900  Finley_Mesh* Finley_Mesh_read_MPI(char*
900            end_pos = ftell(fileHandle_p);            end_pos = ftell(fileHandle_p);
901            fseek(fileHandle_p, (long)cur_pos, SEEK_SET);            fseek(fileHandle_p, (long)cur_pos, SEEK_SET);
902        remainder = TMPMEMALLOC(end_pos-cur_pos+1, char);        remainder = TMPMEMALLOC(end_pos-cur_pos+1, char);
903        if (! feof(fileHandle_p)) fread(remainder, (size_t) end_pos-cur_pos, sizeof(char), fileHandle_p);        if (! feof(fileHandle_p)) {
904            scan_ret = fread(remainder, (size_t) end_pos-cur_pos, sizeof(char), fileHandle_p);
905                FSCANF_CHECK(scan_ret, "Finley_Mesh_read")
906          }
907        remainder[end_pos-cur_pos] = 0;        remainder[end_pos-cur_pos] = 0;
908  #endif  #endif
909        len = strlen(remainder);        len = strlen(remainder);

Legend:
Removed from v.1876  
changed lines
  Added in v.1887

  ViewVC Help
Powered by ViewVC 1.1.26