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