00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 #include <med.h>
00024 #define MESGERR 1
00025 #include <med_utils.h>
00026 
00027 #include <string.h>
00028 
00029 int main (int argc, char **argv) {
00030   med_idt fid;
00031   const char meshname[MED_NAME_SIZE+1] = "2D unstructured mesh";
00032   char meshdescription[MED_COMMENT_SIZE+1]="";
00033   med_int meshdim;
00034   med_int spacedim;
00035   med_sorting_type sortingtype;
00036   med_int nstep;
00037   med_mesh_type meshtype;
00038   med_axis_type axistype;
00039   char axisname[2*MED_SNAME_SIZE+1]="";
00040   char unitname[2*MED_SNAME_SIZE+1]="";
00041   char dtunit[MED_SNAME_SIZE+1];
00042   med_float *coordinates = NULL;
00043   med_int nnodes = 0;
00044   med_int *triaconnectivity = NULL;
00045   med_int ntria3 = 0;
00046   med_int *quadconnectivity = NULL;
00047   med_int nquad4 = 0;
00048   med_bool coordinatechangement;
00049   med_bool geotransformation;
00050   int i;
00051   med_int nfamily, ngroup;
00052   med_int familynumber;
00053   char *groupname=NULL;
00054   char familyname[MED_NAME_SIZE+1]="";
00055   med_int *familynumbers = NULL;
00056   int ret=-1;
00057 
00058   
00059   fid = MEDfileOpen("UsesCase_MEDmesh_10.med",MED_ACC_RDONLY);
00060   if (fid < 0) {
00061     MESSAGE("ERROR : open file in READ ONLY ACCESS mode ...");
00062     goto ERROR;
00063   }
00064 
00065   
00066 
00067 
00068 
00069 
00070   
00071   if (MEDmeshInfoByName(fid, meshname, &spacedim, &meshdim, &meshtype, meshdescription, 
00072                         dtunit, &sortingtype, &nstep, &axistype, axisname, unitname) < 0) {
00073     MESSAGE("ERROR : mesh info ...");
00074     goto ERROR;
00075   }
00076 
00077   
00078   if ((nnodes = MEDmeshnEntity(fid, meshname, MED_NO_DT, MED_NO_IT, MED_NODE, MED_NO_GEOTYPE,
00079                                MED_COORDINATE, MED_NO_CMODE,&coordinatechangement,
00080                                &geotransformation)) < 0) {
00081     MESSAGE("ERROR : number of nodes ...");
00082     goto ERROR;
00083   }
00084   
00085   
00086 
00087 
00088 
00089 
00090   
00091   if ((ntria3 = MEDmeshnEntity(fid, meshname, MED_NO_DT, MED_NO_IT, MED_CELL,MED_TRIA3,
00092                                MED_CONNECTIVITY, MED_NODAL,&coordinatechangement,
00093                                &geotransformation)) < 0) {
00094     MESSAGE("ERROR : number of MED_TRIA3 ...");
00095     goto ERROR;
00096   }
00097 
00098   
00099   if ((nquad4 = MEDmeshnEntity(fid, meshname, MED_NO_DT, MED_NO_IT, MED_CELL,MED_QUAD4,
00100                                MED_CONNECTIVITY, MED_NODAL, &coordinatechangement,
00101                                &geotransformation)) < 0) {
00102     MESSAGE("ERROR : number of MED_QUAD4 ...");
00103     goto ERROR;
00104   }
00105 
00106   
00107   if ((coordinates = (med_float*) malloc(sizeof(med_float)*nnodes*spacedim)) == NULL) {
00108     MESSAGE("ERROR : memory allocation ...");
00109     goto ERROR;
00110   }
00111 
00112   if (MEDmeshNodeCoordinateRd(fid, meshname, MED_NO_DT, MED_NO_IT, MED_FULL_INTERLACE,
00113                               coordinates) < 0) {
00114     MESSAGE("ERROR : nodes coordinates ...");
00115     free(coordinates);
00116     goto ERROR;
00117   }
00118 
00119   free(coordinates);
00120 
00121   
00122   if ((triaconnectivity = (med_int *) malloc(sizeof(med_int)*ntria3*3)) == NULL) {
00123     MESSAGE("ERROR : memory allocation ...");
00124     goto ERROR;
00125   }
00126   if (MEDmeshElementConnectivityRd(fid, meshname, MED_NO_DT, MED_NO_IT, MED_CELL,
00127                                    MED_TRIA3, MED_NODAL, MED_FULL_INTERLACE, triaconnectivity) < 0) {
00128     MESSAGE("ERROR : MED_TRIA3 connectivity ...");
00129     free(triaconnectivity);
00130     goto ERROR;
00131   }
00132   free(triaconnectivity);
00133 
00134   if ((quadconnectivity = (med_int *) malloc(sizeof(med_int)*nquad4*4)) == NULL) {
00135     MESSAGE("ERROR : memory allocation ...");
00136     goto ERROR;
00137   }
00138   if (MEDmeshElementConnectivityRd(fid, meshname, MED_NO_DT, MED_NO_IT, MED_CELL,
00139                                    MED_QUAD4, MED_NODAL, MED_FULL_INTERLACE, quadconnectivity) < 0) {
00140     MESSAGE("ERROR : MED_TRIA3 connectivity ...");
00141     free(quadconnectivity);
00142     goto ERROR;
00143   }
00144   free(quadconnectivity);
00145 
00146   
00147 
00148 
00149   if ((nfamily = MEDnFamily(fid,meshname)) < 0) {
00150     MESSAGE("ERROR : read number of family ...");
00151     goto ERROR;
00152   }
00153   
00154   for (i=0; i<nfamily ; i++) {
00155 
00156     if ((ngroup = MEDnFamilyGroup(fid, meshname, i+1)) < 0) {
00157       MESSAGE("ERROR : read number of group in a family ...");
00158       goto ERROR;
00159     }
00160     
00161     if (ngroup > 0) {
00162       if ((groupname = (char*) malloc(sizeof(char)*MED_LNAME_SIZE*ngroup+1)) == NULL) {
00163         MESSAGE("ERROR : memory allocation ...");
00164         goto ERROR;
00165       }
00166       
00167       if (MEDfamilyInfo(fid, meshname, i+1, familyname, &familynumber, groupname) < 0) {
00168         MESSAGE("ERROR : family info ...");
00169         free(groupname);
00170         goto ERROR;
00171       }
00172       free(groupname);
00173     }
00174     
00175   }
00176 
00177   
00178   
00179 
00180   if ((familynumbers = (med_int *) malloc(sizeof(med_int)*nnodes)) == NULL) {
00181     MESSAGE("ERROR : memory allocation ...");
00182     goto ERROR;
00183   }
00184   if (MEDmeshEntityFamilyNumberRd(fid, meshname, MED_NO_DT, MED_NO_IT,
00185                                   MED_NODE,MED_NONE,familynumbers ) < 0) 
00186     for (i=0; i<nnodes; i++) *(familynumbers+i) = 0;
00187 
00188   for (i=0; i<nnodes; i++) printf("%d - ", *(familynumbers+i));
00189 
00190   if (familynumbers)
00191     free (familynumbers);
00192 
00193   
00194   if ((familynumbers = (med_int *) malloc(sizeof(med_int)*ntria3)) == NULL) {
00195     MESSAGE("ERROR : memory allocation ...");
00196     goto ERROR;
00197   }
00198   if (MEDmeshEntityFamilyNumberRd(fid, meshname, MED_NO_DT, MED_NO_IT,
00199                                   MED_CELL,MED_TRIA3,familynumbers ) < 0) 
00200     for (i=0; i<ntria3; i++) *(familynumbers+i) = 0;
00201 
00202     free (familynumbers);
00203 
00204 
00205   if ((familynumbers = (med_int *) malloc(sizeof(med_int)*nquad4)) == NULL) {
00206     MESSAGE("ERROR : memory allocation ...");
00207     goto ERROR;
00208   }
00209   if (MEDmeshEntityFamilyNumberRd(fid, meshname, MED_NO_DT, MED_NO_IT,
00210                                   MED_CELL,MED_QUAD4,familynumbers ) < 0) 
00211     for (i=0; i<nquad4; i++) *(familynumbers+i) = 0;
00212 
00213   free (familynumbers);
00214 
00215   ret=0;
00216  ERROR:
00217 
00218   
00219   if (MEDfileClose(fid) < 0) {
00220     MESSAGE("ERROR : close file");             
00221     ret= -1; 
00222   } 
00223 
00224   return ret;
00225 }