MED fichier
med.h
Aller à la documentation de ce fichier.
1 /* -*- mode:C; coding:utf-8 -*- */
2 /* This file is part of MED.
3  *
4  * COPYRIGHT (C) 1999 - 2017 EDF R&D, CEA/DEN
5  * MED is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU Lesser General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * MED is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with MED. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #ifndef MED_H
20 #define MED_H
21 
22 #include <hdf5.h>
23 #ifdef HAVE_STDINT_H
24 #include <stdint.h> // Use the C99 official header
25 #endif
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
31 /* This is the minimum hdf version med must have */
32 #define HDF_VERSION_REF 5-1.8.11
33 #define HDF_VERSION_MAJOR_REF 1
34 #define HDF_VERSION_MINOR_REF 8
35 #define HDF_VERSION_RELEASE_REF 11
36 #define HDF_VERSION_NUM_REF (HDF_VERSION_MAJOR_REF * 10000 + HDF_VERSION_MINOR_REF * 100 + HDF_VERSION_RELEASE_REF )
37 
38 #define HDF5_VERSION (H5_VERS_MAJOR * 10000 + H5_VERS_MINOR * 100 + H5_VERS_RELEASE )
39 
40 #if HDF5_VERSION < 10607
41 /*TODO : A enlever après MAJ complète api hdf5-1.8 */
42 #define HDF5_SELECT_BUG (const hsize_t **)
43 #else
44 #define HDF5_SELECT_BUG
45 #endif
46 
47 /*Le symbole H5F_LIBVER_18 n'existe pas dans hdf5-1.8.4 (uniquement à partir de la version 1.8.6)
48  Pour rester dans le modèle interne hdf introduit en 1.8 quelque soit les futurs modèles internes hdf
49  on impose le modèle 1.8 et non le LATEST (cf _MEDfileCreate).
50  La valeur utilisée est celle définie dans les version >= 1.8.6 (cf H5Fpublic.h) */
51 #ifndef H5F_LIBVER_18
52 
53 #define H5F_LIBVER_18 1
54 #endif
55 
56 /*En anglais*/
57 #define MED_MAJOR_NUM 3
58 #define MED_MINOR_NUM 3
59 #define MED_RELEASE_NUM 1
60 /*En franglais*/
61 #define MED_NUM_MAJEUR 3
62 #define MED_NUM_MINEUR 3
63 #define MED_NUM_RELEASE 1
64 
65 #define STR(x) #x
66 #define _MED_VERSION(x,y,z) STR(x) "." STR(y) "." STR(z)
67 #define MED_VERSION_STR _MED_VERSION(MED_NUM_MAJEUR,MED_NUM_MINEUR,MED_NUM_RELEASE)
68 
69 
70 
71 #define MED_NULL (void *) NULL
72 #define MED_MAX_PARA 20
73 
75 #define MED_COMMENT_SIZE 200
76 #define MED_IDENT_SIZE 8
77 #define MED_NAME_SIZE 64
78 #define MED_SNAME_SIZE 16
79 #define MED_LNAME_SIZE 80
80 
81 #define MED_SNAME_BLANK " "
82 #define MED_NAME_BLANK " "
83 /* 0123456789012345678901234567890123456789012345678901234567890123*/
84 
85 #define MED_PATHNAME_SIZE 255
86 #define MED_MAX_CHFID_PATH MED_PATHNAME_SIZE
91 /* 2.3v3.0 ok*/
92 typedef enum {MED_FULL_INTERLACE,
98 
99 
103 /* 2.3v3.0 ok*/
104 typedef enum { MED_UNDEF_STMODE,
111 
112 
116 typedef enum {MED_ACC_RDONLY,
121  } med_access_mode;
122 
126 /*2.3v3.0 ok*/
128 
132 /* 2.3v3.0 ok*/
133 typedef enum {MED_CARTESIAN_GRID,
137 
138 /* 2.3v3.0 ok*/
142 #define MED_N_ENTITY_TYPES 6
143 
144 /* 2.3v3.0 ok*/
149 
150 /* 2.3v3.0 ok*/
158 /*TODO: Réécrire les routines _MEDatt avec med_internal_type au lieu de med_field_type */
159 
166  } med_field_type;
167 
172 
174 
175 #define MED_ATT_FLOAT64_ctype med_float
176 #define MED_ATT_INT_ctype med_int
177 #define MED_ATT_NAME_ctype char
178 #define MED_ATT_UNDEF_ctype unknown_ctype
180 #define MED_CTYPE(medatttype) medatttype##_ctype
181 
182 /* 2.3v3.0 ok : med_type_donnee*/
187 
188 
189 typedef int med_geometry_type;
190 
191 /* Mailles dont la géométrie à une connectivité fixe*/
192 
193 #define MED_POINT1 001
194 
195 #define MED_SEG2 102
196 #define MED_SEG3 103
197 #define MED_SEG4 104
198 #define MED_TRIA3 203
199 #define MED_QUAD4 204
200 #define MED_TRIA6 206
201 #define MED_TRIA7 207
202 #define MED_QUAD8 208
203 #define MED_QUAD9 209
204 
205 #define MED_TETRA4 304
206 #define MED_PYRA5 305
207 #define MED_PENTA6 306
208 #define MED_HEXA8 308
209 #define MED_TETRA10 310
210 #define MED_OCTA12 312
211 #define MED_PYRA13 313
212 #define MED_PENTA15 315
213 #define MED_PENTA18 318
214 #define MED_HEXA20 320
215 #define MED_HEXA27 327
216 
217 /* Mailles dont la géométrie à une connectivité variable*/
218 #define MED_POLYGON 400
219 #define MED_POLYGON2 420
220 #define MED_POLYHEDRON 500
221 
222 /* Mailles dont la géométrie est dynamique (découverte du modèle dans le fichier) */
223 #define MED_STRUCT_GEO_INTERNAL 600
224 #define MED_STRUCT_GEO_SUP_INTERNAL 700
225 
226 #define MED_NONE 0
227 #define MED_NO_GEOTYPE MED_NONE
228 #define MED_UNDEF_GEOTYPE MED_NONE
229 #define MED_UNDEF_GEOMETRY_TYPE MED_NONE
230 #define MED_ALL_GEOTYPE -1
231 #define MED_GEO_ALL MED_ALL_GEOTYPE
232 
233 #define MED_N_CELL_GEO 25
234 #define MED_N_CELL_FIXED_GEO 24
235 #define MED_N_CELL_GEO_FIXED_CON 21
237 #define MED_N_FACE_GEO 8
238 #define MED_N_FACE_FIXED_GEO 8
239 #define MED_N_FACE_GEO_FIXED_CON 6
240 
241 #define MED_N_EDGE_TYPES 3
242 #define MED_N_EDGE_FIXED_GEO 3
243 #define MED_N_EDGE_GEO_FIXED_CON 3
244 
245 #define MED_N_NODE_GEO 1
246 #define MED_N_NODE_FIXED_GEO 1
247 #define MED_N_NODE_GEO_FIXED_CON 1
248 
249 /*2.3v3.0 ok*/
251 
252 /*2.3v3.0 ok*/
254 
255 typedef enum {MED_FALSE, MED_TRUE} med_bool ;
256 
257 #define MED_GAUSS_ELNO "MED_GAUSS_ELNO"
260 #define MED_IPOINT_ELNO MED_GAUSS_ELNO
261 
262 
263 #define MED_NO_NAME ""
265 #define MED_NO_MESHNAME ""
266 #define MED_NO_MESH ""
268 #define MED_NO_MESH_SUPPORT ""
270 #define MED_NO_LOCALIZATION ""
272 #define MED_NO_INTERPOLATION ""
274 #define MED_NO_IPOINT_INTERNAL 1
276 #define MED_NO_PROFILE ""
281 #define MED_NO_GROUP ""
283 #define MED_ALLENTITIES_PROFILE MED_NO_PROFILE
287 #define MED_NO_PROFILE_INTERNAL "MED_NO_PROFILE_INTERNAL"
288 #define MED_SAME_PROFILE_INTERNAL "MED_SAME_PROFILE_INTERNAL"
290 #define MED_ALL_CONSTITUENT 0
294 #define MED_UNDEF_SIZE 0
295 #define MED_NO_PROFILE_SIZE 0
297 typedef enum {MED_SORT_DTIT,MED_SORT_ITDT,MED_SORT_UNDEF=-1 } med_sorting_type;
306 #define MED_NO_DT -1
307 #define MED_NO_IT -1
308 #define MED_UNDEF_DT 0
310 #define MED_ATT_NOT_FILLED -1
311 
312 
313 /* correspondance des types avec HDF 5 */
315 typedef hsize_t med_size;
316 typedef hssize_t med_ssize;
317 typedef hid_t med_idt;
318 typedef herr_t med_err;
320 /* types elementaires */
321 
322 typedef double med_float;
323 typedef double med_float64;
324 typedef double med_double;
325 typedef float med_float32;
326 
327 /*La ligne suivante est déterminée à l'étape de configuration*/
328 typedef int med_int;
329 typedef int32_t med_int32;
330 typedef int64_t med_int64;
332 #define INIT2X( x ) x, x,
333 #define INIT4X( x ) x, x, x, x
334 #define INIT10X( x ) x, x, x, x, x, x, x, x, x, x
335 #define MED_MAX_FILTER_SPACES 4100
336 #define MED_MAX_FILTER_SPACES_INIT {INIT4X(INIT10X(INIT10X(INIT10X(0)))), INIT10X(INIT10X(0)) }
341 typedef struct {
342  /*PRIVATE attributes*/
343  med_int nspaces;
344  med_idt memspace[MED_MAX_FILTER_SPACES];
345  med_idt diskspace[MED_MAX_FILTER_SPACES];
346  /*PUBLIC IN attributes*/
347  med_int nentity;
348  med_int nvaluesperentity;
349  med_int nconstituentpervalue;
350  med_int constituentselect;
351  med_switch_mode switchmode;
352  med_int filterarraysize;
353  med_size* filterarray23v30;
354  med_int profilearraysize;/*PRIVATE attribute en IN et OUT positionnée dans MEDfilterCr*/
355  med_storage_mode storagemode;
356  char profilename[MED_NAME_SIZE+1];
360 #define MED_FILTER_INIT { 0, MED_MAX_FILTER_SPACES_INIT, MED_MAX_FILTER_SPACES_INIT ,0,0,0,0,\
361  MED_UNDEF_INTERLACE,MED_NO_FILTER_SIZE, NULL , \
362  MED_NO_PROFILE_SIZE,MED_UNDEF_PFLMODE,MED_NO_PROFILE }
364 #define MED_NO_FILTER NULL
365 #define MED_NO_FILTER_SIZE 0
366 #define MED_NO_PROFILE_F " "
371 typedef struct {
372  med_int majeur; med_int mineur; med_int release;
374 #define MED_FILE_VERSION_INIT {0, 0, 0};
375 
379 typedef struct {
380  void *app_image_ptr;
381  size_t app_image_size;
382  int ref_count;
384  void *fapl_image_ptr;
385  size_t fapl_image_size;
386  int fapl_ref_count;
387  void *vfd_image_ptr;
388  size_t vfd_image_size;
389  int vfd_ref_count;
390  med_access_mode flags;
393 #define MED_MEMFILE_INIT {NULL, 0, 1, NULL, 0, 0, NULL, 0, 0, MED_ACC_RDONLY}
396 #define AFF_MEMFILE \
397 XSCRUTE(memfile->app_image_ptr);\
398 ISCRUTE_long(memfile->app_image_size);\
399 ISCRUTE_int(memfile->ref_count);\
400 XSCRUTE(memfile->fapl_image_ptr);\
401 ISCRUTE_long(memfile->fapl_image_size);\
402 ISCRUTE_int(memfile->fapl_ref_count);\
403 XSCRUTE(memfile->vfd_image_ptr);\
404 ISCRUTE_long(memfile->vfd_image_size);\
405 ISCRUTE_int(memfile->vfd_ref_count);\
406 ISCRUTE_int(memfile->flags);
407 
408 
409 #include "med_proto.h"
410 
411 /*En cas de modifications/ajouts de type d'entité/géométrique mettre à jour les itérateurs suivants : */
412 
414 extern MEDC_EXPORT const char * const MED_GET_ENTITY_TYPENAME[MED_N_ENTITY_TYPES+2];
423 
424 /* Predefined names for struct elements */
425 #define MED_PARTICLE_NAME "MED_PARTICLE"
426 #define MED_BALL_NAME "MED_BALL"
427 #define MED_BEAM_NAME "MED_BEAM"
428 
429 /* Predefined attributes names for struct elements */
430 #define MED_PARTICLE_LABEL "MED_PARTICLE_LABEL"
431 #define MED_BALL_DIAMETER "MED_BALL_DIAMETER"
432 #define MED_BEAM_THICKNESS "MED_BEAM_THICKNESS"
434 #ifdef __cplusplus
435 }
436 #endif
438 #endif /* MED_H */
Structure d'acceuil du buffer d'un fichier MED en mémoire.
Definition: med.h:386
#define MED_N_ENTITY_TYPES
Definition: med.h:142
med_connectivity_mode
Definition: med.h:250
int herr_t
double med_float64
Definition: med.h:330
herr_t med_err
Definition: med.h:325
Definition: med.h:139
#define MEDC_EXPORT
Definition: medC_win_dll.h:29
#define MED_N_FACE_FIXED_GEO
Definition: med.h:238
float med_float32
Definition: med.h:332
#define MED_N_CELL_FIXED_GEO
Definition: med.h:234
Definition: med.h:165
med_access_mode
Definition: med.h:116
MEDC_EXPORT const char *const MED_GET_FACE_GEOMETRY_TYPENAME[MED_N_FACE_FIXED_GEO+2]
Definition: MEDiterators.c:116
med_data_type
Definition: med.h:145
med_switch_mode
Definition: med.h:92
hsize_t med_size
Definition: med.h:322
Definition: med.h:164
Definition: med.h:183
double med_float
Definition: med.h:329
#define MED_MAX_FILTER_SPACES
Definition: med.h:342
med_class
Definition: med.h:183
med_mesh_type
Definition: med.h:127
Definition: med.h:163
MEDC_EXPORT med_geometry_type MED_GET_NODE_GEOMETRY_TYPE[MED_N_NODE_FIXED_GEO+2]
Definition: MEDiterators.c:145
double med_double
Definition: med.h:331
MEDC_EXPORT med_geometry_type MED_GET_FACE_GEOMETRY_TYPE[MED_N_FACE_FIXED_GEO+2]
Definition: MEDiterators.c:103
MEDC_EXPORT const char *const MED_GET_ENTITY_TYPENAME[MED_N_ENTITY_TYPES+2]
Definition: MEDiterators.c:33
Definition: med.h:139
Definition: med.h:183
Definition: med.h:184
unsigned long long hsize_t
Definition: med.h:250
med_entity_type
Definition: med.h:139
Definition: med.h:183
#define MED_N_EDGE_FIXED_GEO
Definition: med.h:242
MEDC_EXPORT med_geometry_type MED_GET_CELL_GEOMETRY_TYPE[MED_N_CELL_FIXED_GEO+2]
Definition: MEDiterators.c:44
med_axis_type
Definition: med.h:253
int med_int
Definition: med.h:335
Filtre de sélection.
Definition: med.h:348
int hid_t
Definition: med.h:145
MEDC_EXPORT const char * MED_GET_NODE_GEOMETRY_TYPENAME[MED_N_NODE_FIXED_GEO+2]
Definition: MEDiterators.c:151
med_storage_mode
Definition: med.h:104
hssize_t med_ssize
Definition: med.h:323
med_field_type
Definition: med.h:160
Definition: med.h:255
int32_t med_int32
Definition: med.h:336
int64_t med_int64
Definition: med.h:337
Definition: med.h:184
MEDC_EXPORT med_geometry_type MED_GET_EDGE_GEOMETRY_TYPE[MED_N_EDGE_FIXED_GEO+2]
Definition: MEDiterators.c:129
#define MED_N_NODE_FIXED_GEO
Definition: med.h:246
hid_t med_idt
Definition: med.h:324
Structure d'acceuil du numéro de version MED d'un fichier.
Definition: med.h:378
med_internal_type
Definition: med.h:152
#define MED_NAME_SIZE
Definition: med.h:77
med_grid_type
Definition: med.h:133
MEDC_EXPORT const char *const MED_GET_CELL_GEOMETRY_TYPENAME[MED_N_CELL_FIXED_GEO+2]
Definition: MEDiterators.c:73
Definition: med.h:255
med_bool
Definition: med.h:255
Definition: med.h:186
med_field_type med_parameter_type
Definition: med.h:173
int med_geometry_type
Definition: med.h:189
MEDC_EXPORT const char * MED_GET_EDGE_GEOMETRY_TYPENAME[MED_N_EDGE_FIXED_GEO+2]
Definition: MEDiterators.c:137
med_attribute_type
Definition: med.h:168
MEDC_EXPORT med_entity_type MED_GET_ENTITY_TYPE[MED_N_ENTITY_TYPES+2]
Definition: MEDiterators.c:22