/[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 964 by gross, Tue Feb 13 05:10:26 2007 UTC revision 1156 by gross, Mon May 21 06:45:14 2007 UTC
# Line 27  Line 27 
27    
28  /*  reads a mesh from a Finley file of name fname */  /*  reads a mesh from a Finley file of name fname */
29    
30  Finley_Mesh* Finley_Mesh_read(char* fname,index_t order) {  Finley_Mesh* Finley_Mesh_read(char* fname,index_t order, index_t reduced_order,  bool_t optimize_labeling) {
31    
32    dim_t numNodes, numDim, numEle, i0, i1;    dim_t numNodes, numDim, numEle, i0, i1;
33      index_t tag_key;
34    Finley_Mesh *mesh_p=NULL;    Finley_Mesh *mesh_p=NULL;
35    char name[LenString_MAX],element_type[LenString_MAX],frm[20];    char name[LenString_MAX],element_type[LenString_MAX],frm[20];
36    char error_msg[LenErrorMsg_MAX];    char error_msg[LenErrorMsg_MAX];
37    double time0=Finley_timer();    double time0=Finley_timer();
38      FILE *fileHandle_p = NULL;
39      ElementTypeId typeID, faceTypeID, contactTypeID, pointTypeID;
40    
41    Finley_resetError();    Finley_resetError();
42    #ifdef PASO_MPI
43      /* TODO */
44      Finley_setError(SYSTEM_ERROR,"Finley_Mesh_read: MPI is not suporrted yet.");`
45      return NULL;
46    #endif
47    
48    /* get file handle */    /* get file handle */
49    FILE * fileHandle_p = fopen(fname, "r");    fileHandle_p = fopen(fname, "r");
50    if (fileHandle_p==NULL) {    if (fileHandle_p==NULL) {
51      sprintf(error_msg,"%s: Opening file %s for reading failed.",__FILE__,fname);      sprintf(error_msg,"Finley_Mesh_read: Opening file %s for reading failed.",fname);
52      Finley_setError(IO_ERROR,error_msg);      Finley_setError(IO_ERROR,error_msg);
53      return NULL;      return NULL;
54    }    }
# Line 53  Finley_Mesh* Finley_Mesh_read(char* fnam Line 61  Finley_Mesh* Finley_Mesh_read(char* fnam
61    
62    fscanf(fileHandle_p, "%1d%*s %d\n", &numDim,&numNodes);    fscanf(fileHandle_p, "%1d%*s %d\n", &numDim,&numNodes);
63    /* allocate mesh */    /* allocate mesh */
64  #ifndef PASO_MPI    mesh_p = Finley_Mesh_alloc(name,numDim,order,reduced_order);
   mesh_p = Finley_Mesh_alloc(name,numDim,order);  
65    if (! Finley_noError()) return NULL;    if (! Finley_noError()) return NULL;
 #else  
   /* TODO */  
 #endif  
66    
 #ifndef PASO_MPI  
67    Finley_NodeFile_allocTable(mesh_p->Nodes, numNodes);    Finley_NodeFile_allocTable(mesh_p->Nodes, numNodes);
68    if (! Finley_noError()) return NULL;    if (! Finley_noError()) return NULL;
 #else  
   /* TODO */  
 #endif  
69    
70    if (1 == numDim) {    if (1 == numDim) {
71        for (i0 = 0; i0 < numNodes; i0++)        for (i0 = 0; i0 < numNodes; i0++)
# Line 90  Finley_Mesh* Finley_Mesh_read(char* fnam Line 90  Finley_Mesh* Finley_Mesh_read(char* fnam
90    /* get the element type */    /* get the element type */
91    
92    fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);    fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);
93    ElementTypeId typeID=Finley_RefElement_getTypeId(element_type);    typeID=Finley_RefElement_getTypeId(element_type);
94    if (typeID==NoType) {    if (typeID==NoType) {
95      sprintf(error_msg,"%s :Unidentified element type %s",__FILE__,element_type);      sprintf(error_msg,"Finley_Mesh_read :Unidentified element type %s",element_type);
96      Finley_setError(VALUE_ERROR,error_msg);      Finley_setError(VALUE_ERROR,error_msg);
97      return NULL;      return NULL;
98    }    }
99    /* read the elements */    /* read the elements */
100  #ifndef PASO_MPI    mesh_p->Elements=Finley_ElementFile_alloc(typeID,mesh_p->order, mesh_p->reduced_order);
   mesh_p->Elements=Finley_ElementFile_alloc(typeID,mesh_p->order);  
 #else  
   /* TODO */  
 #endif  
101    Finley_ElementFile_allocTable(mesh_p->Elements, numEle);    Finley_ElementFile_allocTable(mesh_p->Elements, numEle);
102    mesh_p->Elements->minColor=0;    mesh_p->Elements->minColor=0;
103    mesh_p->Elements->maxColor=numEle-1;    mesh_p->Elements->maxColor=numEle-1;
# Line 117  Finley_Mesh* Finley_Mesh_read(char* fnam Line 113  Finley_Mesh* Finley_Mesh_read(char* fnam
113    
114    /* get the face elements */    /* get the face elements */
115    fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);    fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);
116    ElementTypeId faceTypeID=Finley_RefElement_getTypeId(element_type);    faceTypeID=Finley_RefElement_getTypeId(element_type);
117      faceTypeID=Finley_RefElement_getTypeId(element_type);
118    if (faceTypeID==NoType) {    if (faceTypeID==NoType) {
119      sprintf(error_msg,"%s :Unidentified element type %s for face elements",__FILE__,element_type);      sprintf(error_msg,"Finley_Mesh_read :Unidentified element type %s for face elements",element_type);
120      Finley_setError(VALUE_ERROR,error_msg);      Finley_setError(VALUE_ERROR,error_msg);
121      return NULL;      return NULL;
122    }    }
123  #ifndef PASO_MPI    mesh_p->FaceElements=Finley_ElementFile_alloc(faceTypeID,mesh_p->order, mesh_p->reduced_order);
   mesh_p->FaceElements=Finley_ElementFile_alloc(faceTypeID,mesh_p->order);  
 #else  
   /* TODO */  
 #endif  
124    Finley_ElementFile_allocTable(mesh_p->FaceElements, numEle);    Finley_ElementFile_allocTable(mesh_p->FaceElements, numEle);
125    mesh_p->FaceElements->minColor=0;    mesh_p->FaceElements->minColor=0;
126    mesh_p->FaceElements->maxColor=numEle-1;    mesh_p->FaceElements->maxColor=numEle-1;
# Line 143  Finley_Mesh* Finley_Mesh_read(char* fnam Line 136  Finley_Mesh* Finley_Mesh_read(char* fnam
136    
137    /* get the Contact face element */    /* get the Contact face element */
138    fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);    fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);
139    ElementTypeId contactTypeID=Finley_RefElement_getTypeId(element_type);    contactTypeID=Finley_RefElement_getTypeId(element_type);
140    if (contactTypeID==NoType) {    if (contactTypeID==NoType) {
141      sprintf(error_msg,"%s: Unidentified element type %s for contact elements",__FILE__,element_type);      sprintf(error_msg,"Finley_Mesh_read: Unidentified element type %s for contact elements",element_type);
142      Finley_setError(VALUE_ERROR,error_msg);      Finley_setError(VALUE_ERROR,error_msg);
143      return NULL;      return NULL;
144    }    }
145  #ifndef PASO_MPI    mesh_p->ContactElements=Finley_ElementFile_alloc(contactTypeID,mesh_p->order, mesh_p->reduced_order);
   mesh_p->ContactElements=Finley_ElementFile_alloc(contactTypeID,mesh_p->order);  
 #else  
   /* TODO */  
 #endif  
146    Finley_ElementFile_allocTable(mesh_p->ContactElements, numEle);    Finley_ElementFile_allocTable(mesh_p->ContactElements, numEle);
147    mesh_p->ContactElements->minColor=0;    mesh_p->ContactElements->minColor=0;
148    mesh_p->ContactElements->maxColor=numEle-1;    mesh_p->ContactElements->maxColor=numEle-1;
# Line 169  Finley_Mesh* Finley_Mesh_read(char* fnam Line 158  Finley_Mesh* Finley_Mesh_read(char* fnam
158    
159    /* get the nodal element */    /* get the nodal element */
160    fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);    fscanf(fileHandle_p, "%s %d\n", element_type, &numEle);
161    ElementTypeId pointTypeID=Finley_RefElement_getTypeId(element_type);    pointTypeID=Finley_RefElement_getTypeId(element_type);
162    if (pointTypeID==NoType) {    if (pointTypeID==NoType) {
163      sprintf(error_msg,"%s: Unidentified element type %s for points",__FILE__,element_type);      sprintf(error_msg,"Finley_Mesh_read: Unidentified element type %s for points",element_type);
164      Finley_setError(VALUE_ERROR,error_msg);      Finley_setError(VALUE_ERROR,error_msg);
165      return NULL;      return NULL;
166    }    }
167  #ifndef PASO_MPI    mesh_p->Points=Finley_ElementFile_alloc(pointTypeID,mesh_p->order, mesh_p->reduced_order);
   mesh_p->Points=Finley_ElementFile_alloc(pointTypeID,mesh_p->order);  
 #else  
   /* TODO */  
 #endif  
168    Finley_ElementFile_allocTable(mesh_p->Points, numEle);    Finley_ElementFile_allocTable(mesh_p->Points, numEle);
169    mesh_p->Points->minColor=0;    mesh_p->Points->minColor=0;
170    mesh_p->Points->maxColor=numEle-1;    mesh_p->Points->maxColor=numEle-1;
# Line 192  Finley_Mesh* Finley_Mesh_read(char* fnam Line 177  Finley_Mesh* Finley_Mesh_read(char* fnam
177      }   /* for i1 */      }   /* for i1 */
178      fscanf(fileHandle_p, "\n");      fscanf(fileHandle_p, "\n");
179    } /* for i0 */    } /* for i0 */
180      /* get the name tags */
181      if (feof(fileHandle_p) == 0) {
182         fscanf(fileHandle_p, "%s\n", name);
183         while (feof(fileHandle_p) == 0) {
184           fscanf(fileHandle_p, "%s %d\n", name, &tag_key);
185           Finley_Mesh_addTagMap(mesh_p,name,tag_key);
186         }
187      }
188    /* close file */    /* close file */
189    
190    fclose(fileHandle_p);    fclose(fileHandle_p);
191    
192    /*   resolve id's : */    /*   resolve id's : */
193    
194    Finley_Mesh_resolveNodeIds(mesh_p);    if (Finley_noError()) {
195         Finley_Mesh_resolveNodeIds(mesh_p);
196      }
197    
198    /* rearrange elements: */    /* rearrange elements: */
199    
200    Finley_Mesh_prepare(mesh_p);    if (Finley_noError()) {
201         Finley_Mesh_prepare(mesh_p);
202      }
203    
204      /* optimize node labeling*/
205    
206      if (Finley_noError()) {
207          if (optimize_labeling) Finley_Mesh_optimizeNodeLabeling(mesh_p);
208      }
209    
210    /* that's it */    /* that's it */
211    #ifdef Finley_TRACE    #ifdef Finley_TRACE

Legend:
Removed from v.964  
changed lines
  Added in v.1156

  ViewVC Help
Powered by ViewVC 1.1.26