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 - 2019 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.10.2
33 #define HDF_VERSION_MAJOR_REF 1
34 #define HDF_VERSION_MINOR_REF 10
35 #define HDF_VERSION_RELEASE_REF 2
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 4
58 #define MED_MINOR_NUM 0
59 #define MED_RELEASE_NUM 0
60 #define MED_3_LATEST_MINOR 3
61 #define MED_4_LATEST_MINOR 0
62 /*En franglais*/
63 #define MED_NUM_MAJEUR 4
64 #define MED_NUM_MINEUR 0
65 #define MED_NUM_RELEASE 0
66 
67 #define STR(x) #x
68 #define _MED_VERSION(x,y,z) STR(x) "." STR(y) "." STR(z)
69 #define MED_VERSION_STR _MED_VERSION(MED_NUM_MAJEUR,MED_NUM_MINEUR,MED_NUM_RELEASE)
70 
71 #define MED_HAVE_MPI
72 
73 #define MED_NULL (void *) NULL
74 #define MED_MAX_PARA 20
75 
77 #define MED_COMMENT_SIZE 200
78 #define MED_IDENT_SIZE 8
79 #define MED_NAME_SIZE 64
80 #define MED_SNAME_SIZE 16
81 #define MED_LNAME_SIZE 80
82 
83 #define MED_SNAME_BLANK " "
84 #define MED_NAME_BLANK " "
85 /* 0123456789012345678901234567890123456789012345678901234567890123*/
86 
87 #define MED_PATHNAME_SIZE 255
88 #define MED_MAX_CHFID_PATH MED_PATHNAME_SIZE
93 /* 2.3v3.0 ok*/
94 typedef enum {MED_FULL_INTERLACE,
100 
101 
105 /* 2.3v3.0 ok*/
106 typedef enum { MED_UNDEF_STMODE,
113 
114 
118 typedef enum {MED_ACC_RDONLY,
123  } med_access_mode;
124 
128 /*2.3v3.0 ok*/
130 
134 /* 2.3v3.0 ok*/
135 typedef enum {MED_CARTESIAN_GRID,
139 
140 /* 2.3v3.0 ok*/
144 #define MED_N_ENTITY_TYPES 6
145 
146 /* 2.3v3.0 ok*/
151 
152 /* 2.3v3.0 ok*/
160 /*TODO: Réécrire les routines _MEDatt avec med_internal_type au lieu de med_field_type */
161 
168  } med_field_type;
169 
174 
176 
177 #define MED_ATT_FLOAT64_ctype med_float
178 #define MED_ATT_INT_ctype med_int
179 #define MED_ATT_NAME_ctype char
180 #define MED_ATT_UNDEF_ctype unknown_ctype
182 #define MED_CTYPE(medatttype) medatttype##_ctype
183 
184 /* 2.3v3.0 ok : med_type_donnee*/
189 
190 
191 typedef int med_geometry_type;
192 
193 /* Mailles dont la géométrie à une connectivité fixe*/
194 
195 #define MED_POINT1 001
196 
197 #define MED_SEG2 102
198 #define MED_SEG3 103
199 #define MED_SEG4 104
200 #define MED_TRIA3 203
201 #define MED_QUAD4 204
202 #define MED_TRIA6 206
203 #define MED_TRIA7 207
204 #define MED_QUAD8 208
205 #define MED_QUAD9 209
206 
207 #define MED_TETRA4 304
208 #define MED_PYRA5 305
209 #define MED_PENTA6 306
210 #define MED_HEXA8 308
211 #define MED_TETRA10 310
212 #define MED_OCTA12 312
213 #define MED_PYRA13 313
214 #define MED_PENTA15 315
215 #define MED_PENTA18 318
216 #define MED_HEXA20 320
217 #define MED_HEXA27 327
218 
219 /* Mailles dont la géométrie à une connectivité variable*/
220 #define MED_POLYGON 400
221 #define MED_POLYGON2 420
222 #define MED_POLYHEDRON 500
223 
224 /* Mailles dont la géométrie est dynamique (découverte du modèle dans le fichier) */
225 #define MED_STRUCT_GEO_INTERNAL 600
226 #define MED_STRUCT_GEO_SUP_INTERNAL 700
227 
228 #define MED_NONE 0
229 #define MED_NO_GEOTYPE MED_NONE
230 #define MED_UNDEF_GEOTYPE MED_NONE
231 #define MED_UNDEF_GEOMETRY_TYPE MED_NONE
232 #define MED_ALL_GEOTYPE -1
233 #define MED_GEO_ALL MED_ALL_GEOTYPE
234 
235 #define MED_N_CELL_GEO 25
236 #define MED_N_CELL_FIXED_GEO 24
237 #define MED_N_CELL_GEO_FIXED_CON 21
239 #define MED_N_FACE_GEO 8
240 #define MED_N_FACE_FIXED_GEO 8
241 #define MED_N_FACE_GEO_FIXED_CON 6
242 
243 #define MED_N_EDGE_TYPES 3
244 #define MED_N_EDGE_FIXED_GEO 3
245 #define MED_N_EDGE_GEO_FIXED_CON 3
246 
247 #define MED_N_NODE_GEO 1
248 #define MED_N_NODE_FIXED_GEO 1
249 #define MED_N_NODE_GEO_FIXED_CON 1
250 
251 /*2.3v3.0 ok*/
253 
254 /*2.3v3.0 ok*/
256 
257 typedef enum {MED_FALSE, MED_TRUE} med_bool ;
258 
259 #define MED_GAUSS_ELNO "MED_GAUSS_ELNO"
262 #define MED_IPOINT_ELNO MED_GAUSS_ELNO
263 
264 
265 #define MED_NO_NAME ""
267 #define MED_NO_MESHNAME ""
268 #define MED_NO_MESH ""
270 #define MED_NO_MESH_SUPPORT ""
272 #define MED_NO_LOCALIZATION ""
274 #define MED_NO_INTERPOLATION ""
276 #define MED_NO_IPOINT_INTERNAL 1
278 #define MED_NO_PROFILE ""
283 #define MED_NO_GROUP ""
285 #define MED_ALLENTITIES_PROFILE MED_NO_PROFILE
289 #define MED_NO_PROFILE_INTERNAL "MED_NO_PROFILE_INTERNAL"
290 #define MED_SAME_PROFILE_INTERNAL "MED_SAME_PROFILE_INTERNAL"
292 #define MED_ALL_CONSTITUENT 0
296 #define MED_UNDEF_SIZE 0
297 #define MED_NO_PROFILE_SIZE 0
299 typedef enum {MED_SORT_DTIT,MED_SORT_ITDT,MED_SORT_UNDEF=-1 } med_sorting_type;
308 #define MED_NO_DT -1
309 #define MED_NO_IT -1
310 #define MED_UNDEF_DT 0
312 #define MED_ATT_NOT_FILLED -1
313 
314 
315 /* correspondance des types avec HDF 5 */
316 
317 typedef hsize_t med_size;
318 typedef hssize_t med_ssize;
319 typedef hid_t med_idt;
320 typedef herr_t med_err;
322 /* types elementaires */
323 
324 typedef double med_float;
325 typedef double med_float64;
326 typedef double med_double;
327 typedef float med_float32;
328 
329 /*La ligne suivante est déterminée à l'étape de configuration*/
330 typedef int med_int;
331 typedef int32_t med_int32;
332 typedef int64_t med_int64;
334 #define INIT2X( x ) x, x,
335 #define INIT4X( x ) x, x, x, x
336 #define INIT10X( x ) x, x, x, x, x, x, x, x, x, x
337 #define MED_MAX_FILTER_SPACES 4100
338 #define MED_MAX_FILTER_SPACES_INIT {INIT4X(INIT10X(INIT10X(INIT10X(0)))), INIT10X(INIT10X(0)) }
339 
343 typedef struct {
344  /*PRIVATE attributes*/
345  med_int nspaces;
346  med_idt memspace[MED_MAX_FILTER_SPACES];
347  med_idt diskspace[MED_MAX_FILTER_SPACES];
348  /*PUBLIC IN attributes*/
349  med_int nentity;
350  med_int nvaluesperentity;
351  med_int nconstituentpervalue;
352  med_int constituentselect;
353  med_switch_mode switchmode;
354  med_int filterarraysize;
355  med_size* filterarray23v30;
356  med_int profilearraysize;/*PRIVATE attribute en IN et OUT positionnée dans MEDfilterCr*/
357  med_storage_mode storagemode;
358  char profilename[MED_NAME_SIZE+1];
360 
361 
362 #define MED_FILTER_INIT { 0, MED_MAX_FILTER_SPACES_INIT, MED_MAX_FILTER_SPACES_INIT ,0,0,0,0,\
363  MED_UNDEF_INTERLACE,MED_NO_FILTER_SIZE, NULL , \
364  MED_NO_PROFILE_SIZE,MED_UNDEF_PFLMODE,MED_NO_PROFILE }
365 
366 #define MED_NO_FILTER NULL
367 #define MED_NO_FILTER_SIZE 0
368 #define MED_NO_PROFILE_F " "
369 
373 typedef struct {
374  med_int majeur; med_int mineur; med_int release;
376 #define MED_FILE_VERSION_INIT {0, 0, 0};
377 
381 typedef struct {
382  void *app_image_ptr;
383  size_t app_image_size;
384  int ref_count;
386  void *fapl_image_ptr;
387  size_t fapl_image_size;
388  int fapl_ref_count;
389  void *vfd_image_ptr;
390  size_t vfd_image_size;
391  int vfd_ref_count;
392  med_access_mode flags;
394 
395 #define MED_MEMFILE_INIT {NULL, 0, 1, NULL, 0, 0, NULL, 0, 0, MED_ACC_RDONLY}
396 
398 #define AFF_MEMFILE \
399 XSCRUTE(memfile->app_image_ptr);\
400 ISCRUTE_long(memfile->app_image_size);\
401 ISCRUTE_int(memfile->ref_count);\
402 XSCRUTE(memfile->fapl_image_ptr);\
403 ISCRUTE_long(memfile->fapl_image_size);\
404 ISCRUTE_int(memfile->fapl_ref_count);\
405 XSCRUTE(memfile->vfd_image_ptr);\
406 ISCRUTE_long(memfile->vfd_image_size);\
407 ISCRUTE_int(memfile->vfd_ref_count);\
408 ISCRUTE_int(memfile->flags);
409 
410 
411 #include "med_proto.h"
412 
413 /*En cas de modifications/ajouts de type d'entité/géométrique mettre à jour les itérateurs suivants : */
414 
416 extern MEDC_EXPORT const char * const MED_GET_ENTITY_TYPENAME[MED_N_ENTITY_TYPES+2];
425 
426 /* Predefined names for struct elements */
427 #define MED_PARTICLE_NAME "MED_PARTICLE"
428 #define MED_BALL_NAME "MED_BALL"
429 #define MED_BEAM_NAME "MED_BEAM"
430 
431 /* Predefined attributes names for struct elements */
432 #define MED_PARTICLE_LABEL "MED_PARTICLE_LABEL"
433 #define MED_BALL_DIAMETER "MED_BALL_DIAMETER"
434 #define MED_BEAM_THICKNESS "MED_BEAM_THICKNESS"
435 
436 #ifdef __cplusplus
437 }
438 #endif
439 
440 #endif /* MED_H */
MED_LOCALIZATION
Definition: med.h:187
med_class
med_class
Definition: med.h:185
hid_t
int64_t hid_t
Definition: H5public_extract.h:28
MED_ACC_CREAT
Definition: med.h:121
med_float
double med_float
Definition: med.h:331
MED_STRUCT_ELEMENT
Definition: med.h:142
MED_CARTESIAN_GRID
Definition: med.h:135
MED_INTERPOLATION
Definition: med.h:187
MEDC_EXPORT
#define MEDC_EXPORT
Definition: medC_win_dll.h:29
med_bool
med_bool
Definition: med.h:257
MED_FILTER
Definition: med.h:187
MED_COMPACT_PFLMODE
Definition: med.h:110
MED_DOUBLE
Definition: med.h:162
MED_LIBRARY
Definition: med.h:185
MED_COORDINATE_TRSF
Definition: med.h:150
MED_PROFILE
Definition: med.h:187
MED_ATT_UNDEF
Definition: med.h:173
MED_INTERNAL_NAME
Definition: med.h:156
MED_N_EDGE_FIXED_GEO
#define MED_N_EDGE_FIXED_GEO
Definition: med.h:244
MED_ELSTRUCT
Definition: med.h:186
MED_GET_ENTITY_TYPE
MEDC_EXPORT med_entity_type MED_GET_ENTITY_TYPE[MED_N_ENTITY_TYPES+2]
Definition: MEDiterators.c:22
MED_GLOBAL_PFLMODE
Definition: med.h:109
med_grid_type
med_grid_type
Definition: med.h:135
MED_GET_EDGE_GEOMETRY_TYPE
MEDC_EXPORT med_geometry_type MED_GET_EDGE_GEOMETRY_TYPE[MED_N_EDGE_FIXED_GEO+2]
Definition: MEDiterators.c:129
MED_DESCENDING
Definition: med.h:252
MED_ACC_RDWR
Definition: med.h:119
MED_CONNECTIVITY
Definition: med.h:147
MED_ALL_ENTITY_TYPE
Definition: med.h:142
MED_INT32
Definition: med.h:165
MED_SPHERICAL
Definition: med.h:255
MED_COORDINATE_AXIS2
Definition: med.h:148
MED_GLOBAL_NUMBER
Definition: med.h:149
MED_INTERNAL_INT32
Definition: med.h:155
med_attribute_type
med_attribute_type
Definition: med.h:170
MED_GROUP
Definition: med.h:186
MED_INDEX_NODE
Definition: med.h:149
MED_GET_NODE_GEOMETRY_TYPENAME
const MEDC_EXPORT char * MED_GET_NODE_GEOMETRY_TYPENAME[MED_N_NODE_FIXED_GEO+2]
Definition: MEDiterators.c:151
MED_MAX_FILTER_SPACES
#define MED_MAX_FILTER_SPACES
Definition: med.h:344
MED_NODE
Definition: med.h:141
MED_UNDEF_CONNECTIVITY_MODE
Definition: med.h:252
MED_CARTESIAN
Definition: med.h:255
MED_UNSTRUCTURED_MESH
Definition: med.h:129
MED_UNDEF_DATATYPE
Definition: med.h:150
MED_INTERNAL_FLOAT32
Definition: med.h:154
MED_COORDINATE_AXIS1
Definition: med.h:148
MED_NUMERICAL_DATA
Definition: med.h:187
MED_INTERNAL_LNAME
Definition: med.h:157
MED_UNDEF_GRID_TYPE
Definition: med.h:138
MED_NODE_ELEMENT
Definition: med.h:142
MED_N_CELL_FIXED_GEO
#define MED_N_CELL_FIXED_GEO
Definition: med.h:236
MED_STRUCTURED_MESH
Definition: med.h:129
hsize_t
unsigned long long hsize_t
Definition: H5public_extract.h:29
med_access_mode
med_access_mode
Definition: med.h:118
MED_GET_CELL_GEOMETRY_TYPENAME
const MEDC_EXPORT char *const MED_GET_CELL_GEOMETRY_TYPENAME[MED_N_CELL_FIXED_GEO+2]
Definition: MEDiterators.c:73
MED_UNDEF_AXIS_TYPE
Definition: med.h:255
med_mesh_type
med_mesh_type
Definition: med.h:129
med_memfile
Structure d'acceuil du buffer d'un fichier MED en mémoire.
Definition: med.h:388
MED_INTERNAL_SNAME
Definition: med.h:156
med_filter
Filtre de sélection.
Definition: med.h:350
med_entity_type
med_entity_type
Definition: med.h:141
med_field_type
med_field_type
Definition: med.h:162
MED_CLASS_UNDEF
Definition: med.h:188
MED_NUMBER
Definition: med.h:147
med_err
herr_t med_err
Definition: med.h:327
MED_EQUIVALENCE
Definition: med.h:186
MED_NODAL
Definition: med.h:252
herr_t
int herr_t
Definition: H5public_extract.h:27
med_idt
hid_t med_idt
Definition: med.h:326
med_parameter_type
med_field_type med_parameter_type
Definition: med.h:175
med_axis_type
med_axis_type
Definition: med.h:255
med_file_version
Structure d'acceuil du numéro de version MED d'un fichier.
Definition: med.h:380
MED_GET_ENTITY_TYPENAME
const MEDC_EXPORT char *const MED_GET_ENTITY_TYPENAME[MED_N_ENTITY_TYPES+2]
Definition: MEDiterators.c:33
MED_GLOBAL_STMODE
Definition: med.h:107
MED_GET_EDGE_GEOMETRY_TYPENAME
const MEDC_EXPORT char * MED_GET_EDGE_GEOMETRY_TYPENAME[MED_N_EDGE_FIXED_GEO+2]
Definition: MEDiterators.c:137
med_float32
float med_float32
Definition: med.h:334
MED_N_NODE_FIXED_GEO
#define MED_N_NODE_FIXED_GEO
Definition: med.h:248
MED_FILE
Definition: med.h:185
MED_ACC_RDONLY
Definition: med.h:118
MED_NO_CMODE
Definition: med.h:252
med_proto.h
med_data_type
med_data_type
Definition: med.h:147
med_switch_mode
med_switch_mode
Definition: med.h:94
MED_FIELD
Definition: med.h:185
MED_NO_INTERLACE
Definition: med.h:96
MED_MESH
Definition: med.h:185
MED_POLAR_GRID
Definition: med.h:136
MED_DESCENDING_FACE
Definition: med.h:141
MED_FLOAT32
Definition: med.h:164
MED_NAME_SIZE
#define MED_NAME_SIZE
Definition: med.h:79
MED_COORDINATE
Definition: med.h:147
MED_INTERNAL_INT64
Definition: med.h:155
MED_FLOAT64
Definition: med.h:163
med_connectivity_mode
med_connectivity_mode
Definition: med.h:252
MED_ATT_INT
Definition: med.h:171
MED_JOINT
Definition: med.h:186
MED_LINK
Definition: med.h:188
MED_ATT_NAME
Definition: med.h:172
MED_N_FACE_FIXED_GEO
#define MED_N_FACE_FIXED_GEO
Definition: med.h:240
MED_UNDEF_INTERLACE
Definition: med.h:98
MED_UNDEF_MESH_TYPE
Definition: med.h:129
MED_DESCENDING_EDGE
Definition: med.h:141
MED_ACC_RDEXT
Definition: med.h:120
MED_FULL_INTERLACE
Definition: med.h:94
MED_N_ENTITY_TYPES
#define MED_N_ENTITY_TYPES
Definition: med.h:144
MED_GET_NODE_GEOMETRY_TYPE
MEDC_EXPORT med_geometry_type MED_GET_NODE_GEOMETRY_TYPE[MED_N_NODE_FIXED_GEO+2]
Definition: MEDiterators.c:145
MED_INTERNAL_CHAR
Definition: med.h:158
MED_CELL
Definition: med.h:141
MED_UNDEF_ENTITY_TYPE
Definition: med.h:143
MED_INTERNAL_FLOAT64
Definition: med.h:154
MED_FAMILY
Definition: med.h:186
MED_GET_FACE_GEOMETRY_TYPENAME
const MEDC_EXPORT char *const MED_GET_FACE_GEOMETRY_TYPENAME[MED_N_FACE_FIXED_GEO+2]
Definition: MEDiterators.c:116
MED_CLASS_ALL
Definition: med.h:188
MED_ATT_FLOAT64
Definition: med.h:170
med_int32
int32_t med_int32
Definition: med.h:338
MED_INT64
Definition: med.h:166
med_storage_mode
med_storage_mode
Definition: med.h:106
med_float64
double med_float64
Definition: med.h:332
MED_FALSE
Definition: med.h:257
med_int64
int64_t med_int64
Definition: med.h:339
MED_COORDINATE_AXIS3
Definition: med.h:148
med_geometry_type
int med_geometry_type
Definition: med.h:191
MED_INDEX_FACE
Definition: med.h:149
med_double
double med_double
Definition: med.h:333
MED_CURVILINEAR_GRID
Definition: med.h:137
MED_MESH_SUPPORT
Definition: med.h:186
med_internal_type
med_internal_type
Definition: med.h:154
MED_INTERNAL_UNDEF
Definition: med.h:158
MED_NAME
Definition: med.h:147
MED_UNDEF_STMODE
Definition: med.h:106
med_int
int med_int
Definition: med.h:337
MED_GET_CELL_GEOMETRY_TYPE
MEDC_EXPORT med_geometry_type MED_GET_CELL_GEOMETRY_TYPE[MED_N_CELL_FIXED_GEO+2]
Definition: MEDiterators.c:44
MED_INTERNAL_INT
Definition: med.h:155
MED_ACC_UNDEF
Definition: med.h:122
MED_FAMILY_NUMBER
Definition: med.h:147
MED_GET_FACE_GEOMETRY_TYPE
MEDC_EXPORT med_geometry_type MED_GET_FACE_GEOMETRY_TYPE[MED_N_FACE_FIXED_GEO+2]
Definition: MEDiterators.c:103
MED_TRUE
Definition: med.h:257
MED_INT
Definition: med.h:167
MED_INTERNAL_IDENT
Definition: med.h:157
MED_VARIABLE_ATTRIBUTE
Definition: med.h:150
MED_COMPACT_STMODE
Definition: med.h:108
med_ssize
hssize_t med_ssize
Definition: med.h:325
med_size
hsize_t med_size
Definition: med.h:324
MED_CYLINDRICAL
Definition: med.h:255
MED_UNDEF_PFLMODE
Definition: med.h:111