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 char meshname[MED_NAME_SIZE+1]="";
00032 med_bool localmesh;
00033 const char fieldname[MED_NAME_SIZE+1] = "TEMPERATURE_FIELD";
00034 med_field_type fieldtype;
00035 char componentname[MED_SNAME_SIZE+1]="";
00036 char componentunit[MED_SNAME_SIZE+1]="";
00037 char dtunit[MED_SNAME_SIZE+1]="";
00038 med_float *values = NULL;
00039 med_int nstep, nvalues;
00040 med_int ncomponent = 1;
00041 med_int csit, numit, numdt, it;
00042 med_float dt;
00043 med_geometry_type geotype;
00044 med_geometry_type *geotypes = MED_GET_CELL_GEOMETRY_TYPE;
00045 med_int pit, profilesize;
00046 med_int np;
00047 char profilename[MED_NAME_SIZE+1] = "";
00048 med_int nintegrationpoint;
00049 char localizationname[MED_NAME_SIZE+1] = "";
00050 int ret = -1;
00051
00052
00053
00054 fid = MEDfileOpen("UsesCase_MEDfield_7.med",MED_ACC_RDONLY);
00055 if (fid < 0) {
00056 MESSAGE("ERROR : open file ...");
00057 goto ERROR;
00058 }
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068 if (MEDfieldInfoByName(fid, fieldname, meshname, &localmesh, &fieldtype,
00069 componentname, componentunit, dtunit, &nstep) < 0) {
00070 MESSAGE("ERROR : Field info by name ...");
00071 goto ERROR;
00072 }
00073
00074
00075
00076
00077 for (csit=0; csit<nstep; csit++) {
00078
00079 if (MEDfieldComputingStepInfo(fid, fieldname, csit+1, &numdt, &numit, &dt) < 0) {
00080 MESSAGE("ERROR : Computing step info ...");
00081 goto ERROR;
00082 }
00083
00084
00085
00086
00087 for (it=1; it<=MED_N_CELL_FIXED_GEO; it++) {
00088
00089 geotype = geotypes[it];
00090
00091
00092
00093 if ((np = MEDfieldnProfile(fid, fieldname, numdt, numit, MED_CELL, geotype,
00094 profilename, localizationname)) < 0) {
00095 MESSAGE("ERROR : read number of profile ");
00096 goto ERROR;
00097 }
00098
00099
00100
00101
00102 for (pit=0; pit<np; pit++) {
00103
00104 if ((nvalues = MEDfieldnValueWithProfile(fid, fieldname, numdt, numit, MED_CELL, geotype,
00105 pit+1, MED_COMPACT_PFLMODE, profilename, &profilesize,
00106 localizationname, &nintegrationpoint)) < 0) {
00107 MESSAGE("ERROR : read number of values with a profile ...");
00108 goto ERROR;
00109 }
00110
00111 if (nvalues) {
00112 if ((values = (med_float *) malloc(sizeof(med_float)*nvalues*ncomponent)) == NULL) {
00113 MESSAGE("ERROR : memory allocation ...");
00114 goto ERROR;
00115 }
00116 if (MEDfieldValueWithProfileRd(fid, fieldname, numdt, numit, MED_CELL, geotype,
00117 MED_COMPACT_PFLMODE, profilename,
00118 MED_FULL_INTERLACE, MED_ALL_CONSTITUENT,
00119 (unsigned char*) values) < 0) {
00120 MESSAGE("ERROR : read fields values for cells ...");
00121 free(values);
00122 goto ERROR;
00123 }
00124
00125 free(values);
00126 }
00127 }
00128 }
00129 }
00130
00131 ret=0;
00132 ERROR:
00133
00134
00135 if (MEDfileClose(fid) < 0) {
00136 MESSAGE("ERROR : close file ...");
00137 ret=-1;
00138 }
00139
00140 return ret;
00141 }