/[escript]/branches/domexper/dudley/src/Mesh_readGmsh.c
ViewVC logotype

Diff of /branches/domexper/dudley/src/Mesh_readGmsh.c

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

revision 3246 by jfenwick, Thu Sep 30 06:07:08 2010 UTC revision 3247 by caltinay, Wed Oct 6 05:53:06 2010 UTC
# Line 45  Dudley_Mesh *Dudley_Mesh_readGmsh(char * Line 45  Dudley_Mesh *Dudley_Mesh_readGmsh(char *
45      double time0 = Dudley_timer();      double time0 = Dudley_timer();
46  #endif  #endif
47      FILE *fileHandle_p = NULL;      FILE *fileHandle_p = NULL;
48      ElementTypeId *element_type = NULL;      Dudley_ElementTypeId *element_type = NULL;
49    
50      Esys_MPIInfo *mpi_info = Esys_MPIInfo_alloc(MPI_COMM_WORLD);      Esys_MPIInfo *mpi_info = Esys_MPIInfo_alloc(MPI_COMM_WORLD);
51      Dudley_resetError();      Dudley_resetError();
# Line 140  Dudley_Mesh *Dudley_Mesh_readGmsh(char * Line 140  Dudley_Mesh *Dudley_Mesh_readGmsh(char *
140          else if (!strncmp(&line[1], "ELM", 3) || !strncmp(&line[1], "Elements", 8))          else if (!strncmp(&line[1], "ELM", 3) || !strncmp(&line[1], "Elements", 8))
141          {          {
142    
143          ElementTypeId final_element_type = NoRef;          Dudley_ElementTypeId final_element_type = Dudley_NoRef;
144          ElementTypeId final_face_element_type = NoRef;          Dudley_ElementTypeId final_face_element_type = Dudley_NoRef;
145          numElements = 0;          numElements = 0;
146          numFaceElements = 0;          numFaceElements = 0;
147          scan_ret = fscanf(fileHandle_p, "%d", &totalNumElements);          scan_ret = fscanf(fileHandle_p, "%d", &totalNumElements);
# Line 150  Dudley_Mesh *Dudley_Mesh_readGmsh(char * Line 150  Dudley_Mesh *Dudley_Mesh_readGmsh(char *
150          id = TMPMEMALLOC(totalNumElements, index_t);          id = TMPMEMALLOC(totalNumElements, index_t);
151          tag = TMPMEMALLOC(totalNumElements, index_t);          tag = TMPMEMALLOC(totalNumElements, index_t);
152    
153          element_type = TMPMEMALLOC(totalNumElements, ElementTypeId);          element_type = TMPMEMALLOC(totalNumElements, Dudley_ElementTypeId);
154          vertices = TMPMEMALLOC(totalNumElements * MAX_numNodes_gmsh, index_t);          vertices = TMPMEMALLOC(totalNumElements * MAX_numNodes_gmsh, index_t);
155          if (!          if (!
156              (Dudley_checkPtr(id) || Dudley_checkPtr(tag) || Dudley_checkPtr(element_type)              (Dudley_checkPtr(id) || Dudley_checkPtr(tag) || Dudley_checkPtr(element_type)
# Line 164  Dudley_Mesh *Dudley_Mesh_readGmsh(char * Line 164  Dudley_Mesh *Dudley_Mesh_readGmsh(char *
164              switch (gmsh_type)              switch (gmsh_type)
165              {              {
166              case 1: /* line order 1 */              case 1: /* line order 1 */
167                  element_type[e] = Line2;                  element_type[e] = Dudley_Line2;
168                  element_dim = 1;                  element_dim = 1;
169                  numNodesPerElement = 2;                  numNodesPerElement = 2;
170                  break;                  break;
171              case 2: /* traingle order 1 */              case 2: /* triangle order 1 */
172                  element_type[e] = Tri3;                  element_type[e] = Dudley_Tri3;
173                  numNodesPerElement = 3;                  numNodesPerElement = 3;
174                  element_dim = 2;                  element_dim = 2;
175                  break;                  break;
176              case 4: /* tetrahedron order 1 */              case 4: /* tetrahedron order 1 */
177                  element_type[e] = Tet4;                  element_type[e] = Dudley_Tet4;
178                  numNodesPerElement = 4;                  numNodesPerElement = 4;
179                  element_dim = 3;                  element_dim = 3;
180                  break;                  break;
181              case 15:    /* point */              case 15:    /* point */
182                  element_type[e] = Point1;                  element_type[e] = Dudley_Point1;
183                  numNodesPerElement = 1;                  numNodesPerElement = 1;
184                  element_dim = 0;                  element_dim = 0;
185                  break;                  break;
186              default:              default:
187                  element_type[e] = NoRef;                  element_type[e] = Dudley_NoRef;
188                  sprintf(error_msg, "Unexected gmsh element type %d in mesh file %s.", gmsh_type, fname);                  sprintf(error_msg, "Unexected gmsh element type %d in mesh file %s.", gmsh_type, fname);
189                  Dudley_setError(IO_ERROR, error_msg);                  Dudley_setError(IO_ERROR, error_msg);
190              }              }
191              if (element_dim == numDim)              if (element_dim == numDim)
192              {              {
193                  if (final_element_type == NoRef)                  if (final_element_type == Dudley_NoRef)
194                  {                  {
195                  final_element_type = element_type[e];                  final_element_type = element_type[e];
196                  }                  }
# Line 204  Dudley_Mesh *Dudley_Mesh_readGmsh(char * Line 204  Dudley_Mesh *Dudley_Mesh_readGmsh(char *
204              }              }
205              else if (element_dim == numDim - 1)              else if (element_dim == numDim - 1)
206              {              {
207                  if (final_face_element_type == NoRef)                  if (final_face_element_type == Dudley_NoRef)
208                  {                  {
209                  final_face_element_type = element_type[e];                  final_face_element_type = element_type[e];
210                  }                  }
# Line 267  Dudley_Mesh *Dudley_Mesh_readGmsh(char * Line 267  Dudley_Mesh *Dudley_Mesh_readGmsh(char *
267              if (Dudley_noError())              if (Dudley_noError())
268              {              {
269              /* first we have to identify the elements to define Elementis and FaceElements */              /* first we have to identify the elements to define Elementis and FaceElements */
270              if (final_element_type == NoRef)              if (final_element_type == Dudley_NoRef)
271              {              {
272                  if (numDim == 1)                  if (numDim == 1)
273                  {                  {
274                  final_element_type = Line2;                  final_element_type = Dudley_Line2;
275                  }                  }
276                  else if (numDim == 2)                  else if (numDim == 2)
277                  {                  {
278                  final_element_type = Tri3;                  final_element_type = Dudley_Tri3;
279                  }                  }
280                  else if (numDim == 3)                  else if (numDim == 3)
281                  {                  {
282                  final_element_type = Tet4;                  final_element_type = Dudley_Tet4;
283                  }                  }
284              }              }
285              if (final_face_element_type == NoRef)              if (final_face_element_type == Dudley_NoRef)
286              {              {
287                  if (numDim == 1)                  if (numDim == 1)
288                  {                  {
289                  final_face_element_type = Point1;                  final_face_element_type = Dudley_Point1;
290                  }                  }
291                  else if (numDim == 2)                  else if (numDim == 2)
292                  {                  {
293                  final_face_element_type = Line2;                  final_face_element_type = Dudley_Line2;
294                  }                  }
295                  else if (numDim == 3)                  else if (numDim == 3)
296                  {                  {
297                  final_face_element_type = Tri3;                  final_face_element_type = Dudley_Tri3;
298                  }                  }
299              }              }
300              mesh_p->Elements = Dudley_ElementFile_alloc(final_element_type, mpi_info);              mesh_p->Elements = Dudley_ElementFile_alloc(final_element_type, mpi_info);
301              mesh_p->FaceElements = Dudley_ElementFile_alloc(final_face_element_type, mpi_info);              mesh_p->FaceElements = Dudley_ElementFile_alloc(final_face_element_type, mpi_info);
302              mesh_p->Points = Dudley_ElementFile_alloc(Point1, mpi_info);              mesh_p->Points = Dudley_ElementFile_alloc(Dudley_Point1, mpi_info);
303              if (Dudley_noError())              if (Dudley_noError())
304              {              {
305                  Dudley_ElementFile_allocTable(mesh_p->Elements, numElements);                  Dudley_ElementFile_allocTable(mesh_p->Elements, numElements);

Legend:
Removed from v.3246  
changed lines
  Added in v.3247

  ViewVC Help
Powered by ViewVC 1.1.26