/[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 3125 by jfenwick, Fri Aug 27 05:26:25 2010 UTC revision 3126 by jfenwick, Wed Sep 1 00:37:53 2010 UTC
# Line 40  Dudley_Mesh* Dudley_Mesh_readGmsh(char* Line 40  Dudley_Mesh* Dudley_Mesh_readGmsh(char*
40    char line[LenString_MAX+1];    char line[LenString_MAX+1];
41    char error_msg[LenErrorMsg_MAX];    char error_msg[LenErrorMsg_MAX];
42    double rtmp0, rtmp1;    double rtmp0, rtmp1;
43    Dudley_ReferenceElementSet *refPoints=NULL, *refContactElements=NULL, *refFaceElements=NULL, *refElements=NULL;    Dudley_ReferenceElementSet *refPoints=NULL, *refFaceElements=NULL, *refElements=NULL;
44  #ifdef Dudley_TRACE  #ifdef Dudley_TRACE
45    double time0=Dudley_timer();    double time0=Dudley_timer();
46  #endif  #endif
# Line 127  Dudley_Mesh* Dudley_Mesh_readGmsh(char* Line 127  Dudley_Mesh* Dudley_Mesh_readGmsh(char*
127        
128           ElementTypeId final_element_type = NoRef;           ElementTypeId final_element_type = NoRef;
129           ElementTypeId final_face_element_type = NoRef;           ElementTypeId final_face_element_type = NoRef;
          ElementTypeId contact_element_type = NoRef;  
130           numElements=0;           numElements=0;
131           numFaceElements=0;           numFaceElements=0;
132           scan_ret = fscanf(fileHandle_p, "%d", &totalNumElements);           scan_ret = fscanf(fileHandle_p, "%d", &totalNumElements);
# Line 155  Dudley_Mesh* Dudley_Mesh_readGmsh(char* Line 154  Dudley_Mesh* Dudley_Mesh_readGmsh(char*
154                        numNodesPerElement= 3;                        numNodesPerElement= 3;
155                        element_dim=2;                        element_dim=2;
156                        break;                        break;
 //                   case 3:  /* quadrilateral order 1 */  
 //                       element_type[e]=Rec4;  
 //                       numNodesPerElement= 4;  
 //                       element_dim=2;  
 //                       break;  
157                    case 4:  /* tetrahedron order 1 */                    case 4:  /* tetrahedron order 1 */
158                        element_type[e]=Tet4;                        element_type[e]=Tet4;
159                        numNodesPerElement= 4;                        numNodesPerElement= 4;
160                        element_dim=3;                        element_dim=3;
161                        break;                        break;
 //                   case 5:  /* hexahedron order 1 */  
 //                       element_type[e]=Hex8;  
 //                       numNodesPerElement= 8;  
 //                       element_dim=3;  
 //                       break;  
                   case 8:  /* line order 2 */  
                       if (useMacroElements) {  
                           element_type[e]=Line3Macro;  
                       } else {  
                           element_type[e]=Line3;  
                       }  
                       numNodesPerElement= 3;  
                       element_dim=1;  
                       break;  
                   case 9:  /* traingle order 2 */  
                       if (useMacroElements) {  
                            element_type[e]=Tri6Macro;  
                       } else {  
                            element_type[e]=Tri6;  
                       }  
                       numNodesPerElement= 6;  
                       element_dim=2;  
                       break;  
 //                  case 10:  /* quadrilateral order 2 */  
 //                      if (useMacroElements) {  
 //                          element_type[e]=Rec9Macro;  
 //                      } else {  
 //                          element_type[e]=Rec9;  
 //                      }  
 //                      numNodesPerElement= 9;  
 //                      element_dim=2;  
 //                      break;  
                   case 11:  /* tetrahedron order 2 */  
                       if (useMacroElements) {  
                           element_type[e]=Tet10Macro;  
                       } else {  
                           element_type[e]=Tet10;  
                       }  
                       numNodesPerElement= 10;  
                       element_dim=3;  
                       break;  
 // /*                  case 16:  /* rectangular order 2 */  
 //                       element_type[e]=Rec8;  
 //                       numNodesPerElement= 8;  
 //                       element_dim=2;  
 //                       break;  
 //                   case 17:  /* hexahedron order 2 */  
 //                       element_type[e]=Hex20;  
 //                       numNodesPerElement= 20;  
 //                       element_dim=3;  
 //                       break;*/  
162                    case 15 :  /* point */                    case 15 :  /* point */
163                        element_type[e]=Point1;                        element_type[e]=Point1;
164                        numNodesPerElement= 1;                        numNodesPerElement= 1;
# Line 277  Dudley_Mesh* Dudley_Mesh_readGmsh(char* Line 220  Dudley_Mesh* Dudley_Mesh_readGmsh(char*
220          scan_ret = fscanf(fileHandle_p, "%d", &vertices[INDEX2(j,e,MAX_numNodes_gmsh)]);          scan_ret = fscanf(fileHandle_p, "%d", &vertices[INDEX2(j,e,MAX_numNodes_gmsh)]);
221              FSCANF_CHECK(scan_ret, "fscanf: Dudley_Mesh_readGmsh");              FSCANF_CHECK(scan_ret, "fscanf: Dudley_Mesh_readGmsh");
222            }            }
               /* for tet10 the last two nodes need to be swapped */  
               if ((element_type[e]==Tet10) || (element_type[e]==Tet10Macro)) {  
                    itmp=vertices[INDEX2(9,e,MAX_numNodes_gmsh)];  
                    vertices[INDEX2(9,e,MAX_numNodes_gmsh)]=vertices[INDEX2(8,e,MAX_numNodes_gmsh)];  
                    vertices[INDEX2(8,e,MAX_numNodes_gmsh)]=itmp;  
               }  
223              }              }
224              /* all elements have been read, now we have to identify the elements for dudley */              /* all elements have been read, now we have to identify the elements for dudley */
225                    
# Line 306  Dudley_Mesh* Dudley_Mesh_readGmsh(char* Line 243  Dudley_Mesh* Dudley_Mesh_readGmsh(char*
243                      final_face_element_type=Tri3;                      final_face_element_type=Tri3;
244                   }                   }
245                }                }
               if (final_face_element_type == Line2) {  
                   contact_element_type=Line2_Contact;  
               } else  if ( (final_face_element_type == Line3) || (final_face_element_type == Line3Macro) ) {  
                   contact_element_type=Line3_Contact;  
               } else  if (final_face_element_type == Tri3) {  
                   contact_element_type=Tri3_Contact;  
               } else  if ( (final_face_element_type == Tri6) || (final_face_element_type == Tri6Macro)) {  
                   contact_element_type=Tri6_Contact;  
               } else {  
                   contact_element_type=Point1_Contact;  
               }  
246                refElements= Dudley_ReferenceElementSet_alloc(final_element_type,order, reduced_order);                refElements= Dudley_ReferenceElementSet_alloc(final_element_type,order, reduced_order);
247                refFaceElements=Dudley_ReferenceElementSet_alloc(final_face_element_type,order, reduced_order);                refFaceElements=Dudley_ReferenceElementSet_alloc(final_face_element_type,order, reduced_order);
               refContactElements= Dudley_ReferenceElementSet_alloc(contact_element_type,order, reduced_order);  
248                refPoints= Dudley_ReferenceElementSet_alloc(Point1,order, reduced_order);                refPoints= Dudley_ReferenceElementSet_alloc(Point1,order, reduced_order);
249                mesh_p->Elements=Dudley_ElementFile_alloc(refElements, mpi_info);                mesh_p->Elements=Dudley_ElementFile_alloc(refElements, mpi_info);
250                mesh_p->FaceElements=Dudley_ElementFile_alloc(refFaceElements, mpi_info);                mesh_p->FaceElements=Dudley_ElementFile_alloc(refFaceElements, mpi_info);
               mesh_p->ContactElements=Dudley_ElementFile_alloc(refContactElements, mpi_info);  
251                mesh_p->Points=Dudley_ElementFile_alloc(refPoints, mpi_info);                mesh_p->Points=Dudley_ElementFile_alloc(refPoints, mpi_info);
252                if (Dudley_noError()) {                if (Dudley_noError()) {
253                    Dudley_ElementFile_allocTable(mesh_p->Elements, numElements);                    Dudley_ElementFile_allocTable(mesh_p->Elements, numElements);
254                    Dudley_ElementFile_allocTable(mesh_p->FaceElements, numFaceElements);                    Dudley_ElementFile_allocTable(mesh_p->FaceElements, numFaceElements);
                   Dudley_ElementFile_allocTable(mesh_p->ContactElements, 0);  
255                    Dudley_ElementFile_allocTable(mesh_p->Points, 0);                    Dudley_ElementFile_allocTable(mesh_p->Points, 0);
256                    if (Dudley_noError()) {                    if (Dudley_noError()) {
257                        mesh_p->Elements->minColor=0;                        mesh_p->Elements->minColor=0;
258                        mesh_p->Elements->maxColor=numElements-1;                        mesh_p->Elements->maxColor=numElements-1;
259                        mesh_p->FaceElements->minColor=0;                        mesh_p->FaceElements->minColor=0;
260                        mesh_p->FaceElements->maxColor=numFaceElements-1;                        mesh_p->FaceElements->maxColor=numFaceElements-1;
                       mesh_p->ContactElements->minColor=0;  
                       mesh_p->ContactElements->maxColor=0;  
261                        mesh_p->Points->minColor=0;                        mesh_p->Points->minColor=0;
262                        mesh_p->Points->maxColor=0;                        mesh_p->Points->maxColor=0;
263                        numElements=0;                        numElements=0;
# Line 399  Dudley_Mesh* Dudley_Mesh_readGmsh(char* Line 320  Dudley_Mesh* Dudley_Mesh_readGmsh(char*
320       if (Dudley_noError()) Dudley_Mesh_prepare(mesh_p, optimize);       if (Dudley_noError()) Dudley_Mesh_prepare(mesh_p, optimize);
321       /* free up memory */       /* free up memory */
322       Dudley_ReferenceElementSet_dealloc(refPoints);       Dudley_ReferenceElementSet_dealloc(refPoints);
      Dudley_ReferenceElementSet_dealloc(refContactElements);  
323       Dudley_ReferenceElementSet_dealloc(refFaceElements);       Dudley_ReferenceElementSet_dealloc(refFaceElements);
324       Dudley_ReferenceElementSet_dealloc(refElements);       Dudley_ReferenceElementSet_dealloc(refElements);
325       Paso_MPIInfo_free( mpi_info );       Paso_MPIInfo_free( mpi_info );

Legend:
Removed from v.3125  
changed lines
  Added in v.3126

  ViewVC Help
Powered by ViewVC 1.1.26