MED fichier
UsesCase_MEDfield_5.c
Aller à la documentation de ce fichier.
1/* This file is part of MED.
2 *
3 * COPYRIGHT (C) 1999 - 2020 EDF R&D, CEA/DEN
4 * MED is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * MED is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with MED. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18/*
19 * Field use case 5 : read a field with following with computing steps
20 */
21
22#include <med.h>
23#define MESGERR 1
24#include <med_utils.h>
25
26#include <string.h>
27
28int main (int argc, char **argv) {
29 med_idt fid;
30 char meshname[MED_NAME_SIZE+1]="";
31 med_bool localmesh;
32 const char fieldname[MED_NAME_SIZE+1] = "TEMPERATURE_FIELD";
33 med_field_type fieldtype;
34 char componentname[MED_SNAME_SIZE+1]="";
35 char componentunit[MED_SNAME_SIZE+1]="";
36 char dtunit[MED_SNAME_SIZE+1]="";
37 med_float *values = NULL;
38 med_int nstep, nvalues;
39 med_int ncomponent = 1;
40 med_int csit, numit, numdt, meshnumit, meshnumdt, it;
41 med_float dt;
42 med_geometry_type geotype;
44 int ret=-1;
45
46 /* open file */
47 fid = MEDfileOpen("UsesCase_MEDfield_4.med",MED_ACC_RDONLY);
48 if (fid < 0) {
49 MESSAGE("ERROR : open file ...");
50 goto ERROR;
51 }
52
53 /*
54 * ... we know that the MED file has only one field with one component ,
55 * a real code would check ...
56 */
57
58 /*
59 * if you know the field name, direct access to field informations
60 */
61 if (MEDfieldInfoByName(fid, fieldname, meshname, &localmesh, &fieldtype,
62 componentname, componentunit, dtunit, &nstep) < 0) {
63 MESSAGE("ERROR : Field info by name ...");
64 goto ERROR;
65 }
66
67 /*
68 * Read field values for each computing step
69 */
70 for (csit=0; csit<nstep; csit++) {
71
72 if (MEDfieldComputingStepMeshInfo(fid, fieldname, csit+1, &numdt, &numit, &dt,
73 &meshnumdt, &meshnumit) < 0) {
74 MESSAGE("ERROR : Computing step info ...");
75 goto ERROR;
76 }
77
78 /*
79 * ... In our case, we suppose that the field values are only defined on cells ...
80 */
81 for (it=1; it<=MED_N_CELL_FIXED_GEO; it++) {
82
83 geotype = geotypes[it];
84
85 if ((nvalues = MEDfieldnValue(fid, fieldname, numdt, numit, MED_CELL, geotype)) < 0) {
86 MESSAGE("ERROR : read number of values ...");
87 goto ERROR;
88 }
89
90 if (nvalues) {
91 if ((values = (med_float *) malloc(sizeof(med_float)*nvalues*ncomponent)) == NULL) {
92 MESSAGE("ERROR : memory allocation ...");
93 goto ERROR;
94 }
95 if (MEDfieldValueRd(fid, fieldname, numdt, numit, MED_CELL, geotype,
96 MED_FULL_INTERLACE, MED_ALL_CONSTITUENT, (unsigned char*) values) < 0) {
97 MESSAGE("ERROR : read fields values for cells ...");
98 free(values);
99 goto ERROR;
100 }
101 free(values);
102 }
103 }
104 }
105
106 ret=0;
107 ERROR:
108
109 /* close file */
110 if (MEDfileClose(fid) < 0) {
111 MESSAGE("ERROR : close file ...");
112 ret=-1;
113 }
114
115 return ret;
116}
int main(int argc, char **argv)
#define MED_NAME_SIZE
#define MED_SNAME_SIZE
#define MED_ALL_CONSTITUENT
#define MED_N_CELL_FIXED_GEO
MEDC_EXPORT med_geometry_type MED_GET_CELL_GEOMETRY_TYPE[MED_N_CELL_FIXED_GEO+2]
#define MESSAGE(chaine)
MEDC_EXPORT med_err MEDfieldValueRd(const med_idt fid, const char *const fieldname, const med_int numdt, const med_int numit, const med_entity_type entitype, const med_geometry_type geotype, const med_switch_mode switchmode, const med_int componentselect, unsigned char *const value)
Cette fonction permet de lire les valeurs d'un champ définies sur des entités d'un maillage pour une ...
MEDC_EXPORT med_err MEDfieldComputingStepMeshInfo(const med_idt fid, const char *const fieldname, const int csit, med_int *const numdt, med_int *const numit, med_float *const dt, med_int *const meshnumdt, med_int *const meshnumit)
Cette fonction permet de lire les informations caractérisant une étape de calcul : numéro de pas de t...
MEDC_EXPORT med_err MEDfieldInfoByName(const med_idt fid, const char *const fieldname, char *const meshname, med_bool *const localmesh, med_field_type *const fieldtype, char *const componentname, char *const componentunit, char *const dtunit, med_int *const ncstp)
Cette fonction permet de lire les informations concernant le champ de nom fieldname.
MEDC_EXPORT med_int MEDfieldnValue(const med_idt fid, const char *const fieldname, const med_int numdt, const med_int numit, const med_entity_type entitype, const med_geometry_type geotype)
Cette fonction permet de lire le nombre de valeurs dans un champ pour une étape de calcul,...
MEDC_EXPORT med_err MEDfileClose(med_idt fid)
Fermeture d'un fichier MED.
MEDC_EXPORT med_idt MEDfileOpen(const char *const filename, const med_access_mode accessmode)
Ouverture d'un fichier MED.
Definition MEDfileOpen.c:42