Main Page | Directories | File List | File Members

load_mesh.h File Reference

#include "../services/dynamical_allocations.h"

Go to the source code of this file.

Functions

void load_mesh (char inp[])


Function Documentation

void load_mesh char  inp[]  ) 
 

Definition at line 28 of file load_mesh.h.

References coord, fp, i_dom, i_front, Ne, Ng, noeud_geo, and printf().

Referenced by read_input_file().

00029 {
00030 /*
00031   ============================================================================
00032    Programmer    : Jean Michel Sellier
00033    Creation      : 07 Dic.2003, Paris, J.M.Sellier
00034    Purpose       : Load the 3D mesh INRIA format file called "device.mesh"
00035   ============================================================================
00036 */
00037 
00038  int i;
00039  int dum;
00040  
00041  FILE *fp;
00042 
00043  fp=fopen(inp,"r");
00044 
00045 // check the existence of the input file
00046 // *************************************
00047 // if the file does not exist the code close the PETSc library and exit.
00048  if(fp==NULL){
00049    printf("INPUT file 'device.mesh' does not exist\nexit\n");
00050    exit(0);
00051  }
00052 
00053 // *************************************************************
00054 //  Load 'device.mesh' and store the mesh in the correct arrays
00055 // *************************************************************
00056 
00057 // Read the number of vertices
00058 // ***************************
00059 /* The code skip two rows which have to be in the following format:
00060    MeshVersionFormatted 0 (or 1)
00061    Dimension
00062    3
00063    Vertices */
00064 // Ng = number of vertices of the mesh (nombre total de noeuds du maillage)
00065  fscanf(fp,"%*s %*d %*s %*d %*s %d",&Ng);
00066  printf("Number of vertices = %d\n",Ng);
00067 
00068 // allocation for i_front
00069 /*  printf("Allocating memory for mesh arrays...\n");
00070   i_front = malloc((Ng+1)*sizeof(int));
00071   if(i_front==NULL){
00072     printf("load_mesh : not enough memory for i_front allocation!\n");
00073     exit(0);
00074   }
00075   for(i=0;i<3;i++){
00076     coord[i] = malloc((Ng+1)*sizeof(double));
00077     if(coord[i]==NULL){
00078       printf("load_mesh : not enough memory for coord[%d] allocation!\n",i);
00079       exit(0);
00080     }
00081   }*/
00082 // read the global coordinate of the mesh vertices and related reference number
00083 // ****************************************************************************
00084 // i_front[i] = reference number of the i-th vertex (nombre de reference du noeud)
00085 //               This number = 0 if we are inside the device
00086 //                 ''       != 0 if we are on the frontier
00087 //               In this latter case this number makes one understand what
00088 //               kind of boundary conditions one has to impose on that vertex.
00089 // coord[0][i] = global coordinate x of the i-th vertex (i=0..Ng-1)
00090 // coord[1][i] = global coordinate y of the i-th vertex
00091 // coord[2][i] = global coordinate z of the i-th vertex
00092 // French comment:
00093 // Pour k=0..dim-1 (dim = dimension de l'espace) et n=0..Ng-1, coord[k][n] est la k-ieme
00094 // coordonee du noeud de numero global n.
00095 
00096 
00097  for(i=0;i<Ng;i++){
00098    fscanf(fp,"%lg %lg %lg %d",&coord[0][i],&coord[1][i],&coord[2][i],&i_front[i]);
00099    coord[0][i]*=1.e-6;
00100    coord[1][i]*=1.e-6;
00101    coord[2][i]*=1.e-6;
00102    
00103 //   printf("%2.20g %2.20g %2.20g %d\n",coord[0][i],coord[1][i],coord[2][i],i_front[i]);
00104  }
00105 
00106 /*
00107 // Then we skip the informations about the triangles edges
00108 // *******************************************************
00109 // The following skipped row has to be as follows:
00110 //   Edges
00111  fscanf(fp,"%*s %d",&dum);
00112 // printf("%d\n",dum);
00113  for(i=1;i<=dum;i++) fscanf(fp,"%*d %*d %*d");
00114 */
00115 
00116 // Then we skip the informations about the triangles
00117 // *************************************************
00118 // (This gives us informations about the definition of triangles)
00119 // The skipped row has to be as follows:
00120 //   Triangles
00121  fscanf(fp,"%*s %d",&dum);
00122 //printf("dum = %d\n",dum);
00123 // Allocate arrays and set values  for **noeud_geo and *i_dom
00124 //  PetscMalloc(Ne*sizeof(PetscInt),&i_dom);
00125 //  PetscMalloc(ng,&noeud_geo);
00126 //  for(i=0;i<ng;i++) PetscMalloc(Ne*sizeof(PetscInt),&noeud_geo[i]);
00127  for(i=0;i<dum;i++){
00128    fscanf(fp,"%*d %*d %*d %*d\n");
00129 //   fscanf(fp,"%d %d %d %d\n",&noeud_geo[0][i],&noeud_geo[1][i],&noeud_geo[2][i],&i_dom[i]);
00130 //   printf("%d %d %d %d %d\n",i,noeud_geo[0][i],noeud_geo[1][i],noeud_geo[2][i],i_dom[i]);
00131  }
00132 // Read informations about the various tetrahedra
00133 // **********************************************
00134 // (this gives us informations about the definition of tetrahedra)
00135 // i_dom[i] = reference number of the i-th tetrahedra
00136 // noeud_geo[0][i] = global number of the first vertex in the i-th tetrahedra
00137 // noeud_geo[1][i] = global number of the second vertex in the i-th tetrahedra
00138 // noeud_geo[2][i] = global number of the third vertex in the i-th tetrahedra
00139 // noeud_geo[3][i] = global number of the fourth vertex in the i-th tetrahedra
00140 // The skipped row has to be as follows:
00141 //   Tetrahedra
00142  fscanf(fp,"%*s %d",&Ne);
00143  printf("Number of elements (tetrahedra) = %d\n",Ne);
00144 
00145 // allocations
00146 /*  i_dom = malloc((Ne+1)*sizeof(int));
00147   for(i=0;i<4;i++) noeud_geo[i] = malloc((Ne+1)*sizeof(int));
00148   if(i_dom==NULL){
00149     printf("load_mesh : not enough memory for i_front allocation!\n");
00150     exit(0);
00151   }*/
00152 
00153 // Allocate arrays and set values  for **noeud_geo and *i_dom
00154 //  PetscMalloc(Ne*sizeof(PetscInt),&i_dom);
00155 //  PetscMalloc(ng,&noeud_geo);
00156 //  for(i=0;i<ng;i++) PetscMalloc(Ne*sizeof(PetscInt),&noeud_geo[i]);
00157  for(i=0;i<Ne;i++){
00158    fscanf(fp,"%d %d %d %d %d",&noeud_geo[0][i],&noeud_geo[1][i],
00159                                 &noeud_geo[2][i],&noeud_geo[3][i],&i_dom[i]);
00160 //   printf("%d %d %d %d %d %d\n",i,noeud_geo[0][i],noeud_geo[1][i],
00161 //                             noeud_geo[2][i],noeud_geo[3][i],i_dom[i]);
00162  }
00163 
00164  fclose(fp);
00165 
00166 // various dynamical allocations
00167 #include "../services/dynamical_allocations.h"
00168 }


© sourcejam.com 2005-2008