Esempio n. 1
0
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;
}
Esempio n. 3
0
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;
}