med_int nmfdfivr(med_int *fid, char *fname, unsigned int bidon1, med_int *fnamelen, med_int *numdt, med_int *numit, med_int *etype, med_int *gtype, med_int *swm, med_int *cs, med_int *val) #endif { med_err _ret=0; char *_fn1; med_switch_mode _swm = (med_switch_mode) *swm; med_geometry_type _gtype = (med_geometry_type) *gtype; med_entity_type _etype = (med_entity_type) *etype; _fn1 = _MED2cstring((char *) fname, (int) *fnamelen); if (!_fn1) return(-1); _ret = (med_int) MEDfieldValueRd((const med_idt) *fid, _fn1, (med_int) *numdt, (med_int) *numit, _etype, _gtype, _swm, (med_int) *cs, (unsigned char *) val); _MEDcstringFree(_fn1); return (_ret); }
int main (int argc, char **argv) { med_idt fid; med_idt nfield, i, j; char meshname[MED_NAME_SIZE+1]=""; med_bool localmesh; char fieldname[MED_NAME_SIZE+1]=""; med_field_type fieldtype; char *componentname = NULL; char *componentunit = NULL; char dtunit[MED_SNAME_SIZE+1]=""; med_float *values = NULL; med_int nstep, nvalues; med_int ncomponent; med_int csit, numit, numdt, meshnumit, meshnumdt, it; med_float dt; med_geometry_type geotype; med_geometry_type *geotypes = MED_GET_CELL_GEOMETRY_TYPE; int k; int ret=-1; /* open file */ fid = MEDfileOpen("UsesCase_MEDfield_4.med",MED_ACC_RDONLY); if (fid < 0) { MESSAGE("ERROR : open file ..."); goto ERROR; } /* * generic approach : how many fields in the file and identification * of each field. */ if ((nfield = MEDnField(fid)) < 0) { MESSAGE("ERROR : How many fields in the file ..."); goto ERROR; } /* * read values for each field */ for (i=0; i<nfield; i++) { if ((ncomponent = MEDfieldnComponent(fid,i+1)) < 0) { MESSAGE("ERROR : number of field component ..."); goto ERROR; } if ((componentname = (char *) malloc(ncomponent*MED_SNAME_SIZE+1)) == NULL) { MESSAGE("ERROR : memory allocation ..."); goto ERROR; } if ((componentunit = (char *) malloc(ncomponent*MED_SNAME_SIZE+1)) == NULL) { MESSAGE("ERROR : memory allocation ..."); goto ERROR; } if (MEDfieldInfo(fid, i+1, fieldname, meshname, &localmesh, &fieldtype, componentname, componentunit, dtunit, &nstep) < 0) { MESSAGE("ERROR : Field info ..."); free(componentname); free(componentunit); goto ERROR; } free(componentname); free(componentunit); /* * Read field values for each computing step */ for (csit=0; csit<nstep; csit++) { if (MEDfieldComputingStepMeshInfo(fid, fieldname, csit+1, &numdt, &numit, &dt, &meshnumdt, &meshnumit) < 0) { MESSAGE("ERROR : Computing step info ..."); goto ERROR; } /* * ... In our case, we suppose that the field values are only defined on cells ... */ for (it=1; it<=MED_N_CELL_FIXED_GEO; it++) { geotype = geotypes[it]; if ((nvalues = MEDfieldnValue(fid, fieldname, numdt, numit, MED_CELL, geotype)) < 0) { MESSAGE("ERROR : read number of values ..."); goto ERROR; } if (nvalues) { if ((values = (med_float *) malloc(sizeof(med_float)*nvalues*ncomponent)) == NULL) { MESSAGE("ERROR : memory allocation ..."); goto ERROR; } if (MEDfieldValueRd(fid, fieldname, numdt, numit, MED_CELL, geotype, MED_FULL_INTERLACE, MED_ALL_CONSTITUENT, (unsigned char*) values) < 0) { MESSAGE("ERROR : read fields values for cells ..."); free(values); goto ERROR; } free(values); } } } } ret=0; ERROR: /* close file */ if (MEDfileClose(fid) < 0) { MESSAGE("ERROR : close file ..."); ret=-1; } return ret; }
int main (int argc, char **argv) { med_idt fid; char meshname[MED_NAME_SIZE+1]=""; med_bool localmesh; const char fieldname[MED_NAME_SIZE+1] = "TEMPERATURE_FIELD"; med_field_type fieldtype; char componentname[MED_SNAME_SIZE+1]=""; char componentunit[MED_SNAME_SIZE+1]=""; char dtunit[MED_SNAME_SIZE+1]=""; med_float *values = NULL; med_int nstep, nvalues; med_int ncomponent = 1; med_int csit, numit, numdt, meshnumit, meshnumdt, it; med_float dt; med_geometry_type geotype; med_geometry_type *geotypes = MED_GET_CELL_GEOMETRY_TYPE; int ret=-1; /* open file */ fid = MEDfileOpen("UsesCase_MEDfield_4.med",MED_ACC_RDONLY); if (fid < 0) { MESSAGE("ERROR : open file ..."); goto ERROR; } /* * ... we know that the MED file has only one field with one component , * a real code working would check ... */ /* * if you know the field name, direct access to field informations */ if (MEDfieldInfoByName(fid, fieldname, meshname, &localmesh, &fieldtype, componentname, componentunit, dtunit, &nstep) < 0) { MESSAGE("ERROR : Field info by name ..."); goto ERROR; } /* * Read field values for each computing step */ for (csit=0; csit<nstep; csit++) { if (MEDfieldComputingStepMeshInfo(fid, fieldname, csit+1, &numdt, &numit, &dt, &meshnumdt, &meshnumit) < 0) { MESSAGE("ERROR : Computing step info ..."); goto ERROR; } /* * ... In our case, we suppose that the field values are only defined on cells ... */ for (it=1; it<=MED_N_CELL_FIXED_GEO; it++) { geotype = geotypes[it]; if ((nvalues = MEDfieldnValue(fid, fieldname, numdt, numit, MED_CELL, geotype)) < 0) { MESSAGE("ERROR : read number of values ..."); goto ERROR; } if (nvalues) { if ((values = (med_float *) malloc(sizeof(med_float)*nvalues*ncomponent)) == NULL) { MESSAGE("ERROR : memory allocation ..."); goto ERROR; } if (MEDfieldValueRd(fid, fieldname, numdt, numit, MED_CELL, geotype, MED_FULL_INTERLACE, MED_ALL_CONSTITUENT, (unsigned char*) values) < 0) { MESSAGE("ERROR : read fields values for cells ..."); free(values); goto ERROR; } free(values); } } } ret=0; ERROR: /* close file */ if (MEDfileClose(fid) < 0) { MESSAGE("ERROR : close file ..."); ret=-1; } return ret; }