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 - 2016 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 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 /* This is the minimum hdf version med must have */
29 #define HDF_VERSION_REF 5-1.8.11
30 #define HDF_VERSION_MAJOR_REF 1
31 #define HDF_VERSION_MINOR_REF 8
32 #define HDF_VERSION_RELEASE_REF 11
33 #define HDF_VERSION_NUM_REF (HDF_VERSION_MAJOR_REF * 10000 + HDF_VERSION_MINOR_REF * 100 + HDF_VERSION_RELEASE_REF )
34 
35 #define HDF5_VERSION (H5_VERS_MAJOR * 10000 + H5_VERS_MINOR * 100 + H5_VERS_RELEASE )
36 
37 #if HDF5_VERSION < 10607
38 /*TODO : A enlever après MAJ complète api hdf5-1.8 */
39 #define HDF5_SELECT_BUG (const hsize_t **)
40 #else
41 #define HDF5_SELECT_BUG
42 #endif
43 
44 /*Le symbole H5F_LIBVER_18 n'existe pas dans hdf5-1.8.4 (uniquement à partir de la version 1.8.6)
45  Pour rester dans le modèle interne hdf introduit en 1.8 quelque soit les futurs modèles internes hdf
46  on impose le modèle 1.8 et non le LATEST (cf _MEDfileCreate).
47  La valeur utilisée est celle définie dans les version >= 1.8.6 (cf H5Fpublic.h) */
48 #ifndef H5F_LIBVER_18
49 
50 #define H5F_LIBVER_18 1
51 #endif
52 
53 /*En anglais*/
54 #define MED_MAJOR_NUM 3
55 #define MED_MINOR_NUM 2
56 #define MED_RELEASE_NUM 1
57 /*En franglais*/
58 #define MED_NUM_MAJEUR 3
59 #define MED_NUM_MINEUR 2
60 #define MED_NUM_RELEASE 1
61 
62 #define STR(x) #x
63 #define _MED_VERSION(x,y,z) STR(x) "." STR(y) "." STR(z)
64 #define MED_VERSION_STR _MED_VERSION(MED_NUM_MAJEUR,MED_NUM_MINEUR,MED_NUM_RELEASE)
65 
66 
67 
68 #define MED_NULL (void *) NULL
69 #define MED_MAX_PARA 20
70 
72 #define MED_COMMENT_SIZE 200
73 #define MED_IDENT_SIZE 8
74 #define MED_NAME_SIZE 64
75 #define MED_SNAME_SIZE 16
76 #define MED_LNAME_SIZE 80
77 
78 #define MED_SNAME_BLANK " "
79 #define MED_NAME_BLANK " "
80 /* 0123456789012345678901234567890123456789012345678901234567890123*/
81 
82 #define MED_PATHNAME_SIZE 255
83 #define MED_MAX_CHFID_PATH MED_PATHNAME_SIZE
88 /* 2.3v3.0 ok*/
89 typedef enum {MED_FULL_INTERLACE,
95 
96 
100 /* 2.3v3.0 ok*/
101 typedef enum { MED_UNDEF_STMODE,
108 
109 
113 typedef enum {MED_ACC_RDONLY,
118  } med_access_mode;
119 
123 /*2.3v3.0 ok*/
125 
129 /* 2.3v3.0 ok*/
130 typedef enum {MED_CARTESIAN_GRID,
134 
135 /* 2.3v3.0 ok*/
139 #define MED_N_ENTITY_TYPES 6
140 
141 /* 2.3v3.0 ok*/
146 
147 /* 2.3v3.0 ok*/
153 /*TODO: Réécrire les routines _MEDatt avec med_internal_type au lieu de med_field_type */
154 
157 
162 
164 
165 #define MED_ATT_FLOAT64_ctype med_float
166 #define MED_ATT_INT_ctype med_int
167 #define MED_ATT_NAME_ctype char
168 #define MED_ATT_UNDEF_ctype unknown_ctype
170 #define MED_CTYPE(medatttype) medatttype##_ctype
171 
172 /* 2.3v3.0 ok : med_type_donnee*/
177 
178 
179 typedef int med_geometry_type;
180 
181 #define MED_POINT1 001
182 
183 #define MED_SEG2 102
184 #define MED_SEG3 103
185 #define MED_SEG4 104
186 #define MED_TRIA3 203
187 #define MED_QUAD4 204
188 #define MED_TRIA6 206
189 #define MED_TRIA7 207
190 #define MED_QUAD8 208
191 #define MED_QUAD9 209
192 
193 #define MED_TETRA4 304
194 #define MED_PYRA5 305
195 #define MED_PENTA6 306
196 #define MED_HEXA8 308
197 #define MED_TETRA10 310
198 #define MED_OCTA12 312
199 #define MED_PYRA13 313
200 #define MED_PENTA15 315
201 #define MED_HEXA20 320
202 #define MED_HEXA27 327
203 
204 #define MED_POLYGON 400
205 #define MED_POLYGON2 420
206 #define MED_POLYHEDRON 500
207 
208 #define MED_STRUCT_GEO_INTERNAL 600
209 #define MED_STRUCT_GEO_SUP_INTERNAL 700
210 
211 #define MED_NONE 0
212 #define MED_NO_GEOTYPE MED_NONE
213 #define MED_UNDEF_GEOTYPE MED_NONE
214 #define MED_UNDEF_GEOMETRY_TYPE MED_NONE
215 #define MED_ALL_GEOTYPE -1
216 #define MED_GEO_ALL MED_ALL_GEOTYPE
217 
218 #define MED_N_CELL_GEO 24
219 #define MED_N_CELL_FIXED_GEO 23
220 #define MED_N_CELL_GEO_FIXED_CON 20
222 #define MED_N_FACE_GEO 8
223 #define MED_N_FACE_FIXED_GEO 8
224 #define MED_N_FACE_GEO_FIXED_CON 6
225 
226 #define MED_N_EDGE_TYPES 3
227 #define MED_N_EDGE_FIXED_GEO 3
228 #define MED_N_EDGE_GEO_FIXED_CON 3
229 
230 #define MED_N_NODE_GEO 1
231 #define MED_N_NODE_FIXED_GEO 1
232 #define MED_N_NODE_GEO_FIXED_CON 1
233 
234 /*2.3v3.0 ok*/
236 
237 /*2.3v3.0 ok*/
239 
240 typedef enum {MED_FALSE, MED_TRUE} med_bool ;
241 
242 #define MED_GAUSS_ELNO "MED_GAUSS_ELNO"
245 #define MED_IPOINT_ELNO MED_GAUSS_ELNO
246 
247 
248 #define MED_NO_NAME ""
250 #define MED_NO_MESHNAME ""
251 #define MED_NO_MESH ""
253 #define MED_NO_MESH_SUPPORT ""
255 #define MED_NO_LOCALIZATION ""
257 #define MED_NO_INTERPOLATION ""
259 #define MED_NO_IPOINT_INTERNAL 1
261 #define MED_NO_PROFILE ""
266 #define MED_NO_GROUP ""
268 #define MED_ALLENTITIES_PROFILE MED_NO_PROFILE
272 #define MED_NO_PROFILE_INTERNAL "MED_NO_PROFILE_INTERNAL"
273 #define MED_SAME_PROFILE_INTERNAL "MED_SAME_PROFILE_INTERNAL"
275 #define MED_ALL_CONSTITUENT 0
279 #define MED_UNDEF_SIZE 0
280 #define MED_NO_PROFILE_SIZE 0
282 typedef enum {MED_SORT_DTIT,MED_SORT_ITDT,MED_SORT_UNDEF=-1 } med_sorting_type;
291 #define MED_NO_DT -1
292 #define MED_NO_IT -1
293 #define MED_UNDEF_DT 0
295 #define MED_ATT_NOT_FILLED -1
296 
297 
298 /* correspondance des types avec HDF 5 */
300 typedef hsize_t med_size;
301 typedef hssize_t med_ssize;
302 typedef hid_t med_idt;
303 typedef herr_t med_err;
305 /* types elementaires */
306 
307 typedef double med_float;
308 /*La ligne suivante est déterminée à l'étape de configuration*/
309 typedef int med_int;
311 #define INIT4X( x ) x, x, x, x
312 #define INIT10X( x ) x, x, x, x, x, x, x, x, x, x
313 #define MED_MAX_FILTER_SPACES 4100
314 #define MED_MAX_FILTER_SPACES_INIT {INIT4X(INIT10X(INIT10X(INIT10X(0)))), INIT10X(INIT10X(0)) }
315 
319 typedef struct {
320  /*PRIVATE attributes*/
321  med_int nspaces;
322  med_idt memspace[MED_MAX_FILTER_SPACES];
323  med_idt diskspace[MED_MAX_FILTER_SPACES];
324  /*PUBLIC IN attributes*/
325  med_int nentity;
326  med_int nvaluesperentity;
327  med_int nconstituentpervalue;
328  med_int constituentselect;
329  med_switch_mode switchmode;
330  med_int filterarraysize;
331  med_size* filterarray23v30;
332  med_int profilearraysize;/*PRIVATE attribute en IN et OUT positionnée dans MEDfilterCr*/
333  med_storage_mode storagemode;
334  char profilename[MED_NAME_SIZE+1];
338 #define MED_FILTER_INIT { 0, MED_MAX_FILTER_SPACES_INIT, MED_MAX_FILTER_SPACES_INIT ,0,0,0,0,\
339  MED_UNDEF_INTERLACE,MED_NO_FILTER_SIZE, NULL , \
340  MED_NO_PROFILE_SIZE,MED_UNDEF_PFLMODE,MED_NO_PROFILE }
342 #define MED_NO_FILTER NULL
343 #define MED_NO_FILTER_SIZE 0
344 #define MED_NO_PROFILE_F " "
349 typedef struct {
350  med_int majeur; med_int mineur; med_int release;
352 #define MED_FILE_VERSION_INIT {0, 0, 0};
353 
357 typedef struct {
358  void *app_image_ptr;
359  size_t app_image_size;
360  int ref_count;
362  void *fapl_image_ptr;
363  size_t fapl_image_size;
364  int fapl_ref_count;
365  void *vfd_image_ptr;
366  size_t vfd_image_size;
367  int vfd_ref_count;
368  med_access_mode flags;
371 #define MED_MEMFILE_INIT {NULL, 0, 1, NULL, 0, 0, NULL, 0, 0, MED_ACC_RDONLY}
374 #define AFF_MEMFILE \
375 XSCRUTE(memfile->app_image_ptr);\
376 ISCRUTE_long(memfile->app_image_size);\
377 ISCRUTE_int(memfile->ref_count);\
378 XSCRUTE(memfile->fapl_image_ptr);\
379 ISCRUTE_long(memfile->fapl_image_size);\
380 ISCRUTE_int(memfile->fapl_ref_count);\
381 XSCRUTE(memfile->vfd_image_ptr);\
382 ISCRUTE_long(memfile->vfd_image_size);\
383 ISCRUTE_int(memfile->vfd_ref_count);\
384 ISCRUTE_int(memfile->flags);
385 
386 
387 #include "med_proto.h"
388 
389 /*En cas de modifications/ajouts de type d'entité/géométrique mettre à jour les itérateurs suivants : */
390 
392 extern MEDC_EXPORT const char * const MED_GET_ENTITY_TYPENAME[MED_N_ENTITY_TYPES+2];
401 
402 /* Predefined names for struct elements */
403 #define MED_PARTICLE_NAME "MED_PARTICLE"
404 #define MED_BALL_NAME "MED_BALL"
405 #define MED_BEAM_NAME "MED_BEAM"
406 
407 /* Predefined attributes names for struct elements */
408 #define MED_PARTICLE_LABEL "MED_PARTICLE_LABEL"
409 #define MED_BALL_DIAMETER "MED_BALL_DIAMETER"
410 #define MED_BEAM_THICKNESS "MED_BEAM_THICKNESS"
412 #ifdef __cplusplus
413 }
414 #endif
416 #endif /* MED_H */
Definition: med.h:136
#define MED_N_ENTITY_TYPES
Definition: med.h:139
med_connectivity_mode
Definition: med.h:235
int herr_t
herr_t med_err
Definition: med.h:310
Definition: med.h:156
#define MEDC_EXPORT
Definition: medC_win_dll.h:29
#define MED_N_FACE_FIXED_GEO
Definition: med.h:223
Filtre de sélection.
Definition: med.h:326
Definition: med.h:155
med_access_mode
Definition: med.h:113
#define MED_N_CELL_FIXED_GEO
Definition: med.h:219
med_switch_mode
Definition: med.h:89
MEDC_EXPORT const char *const MED_GET_FACE_GEOMETRY_TYPENAME[MED_N_FACE_FIXED_GEO+2]
Definition: MEDiterators.c:114
med_data_type
Definition: med.h:142
hsize_t med_size
Definition: med.h:307
med_class
Definition: med.h:173
double med_float
Definition: med.h:314
med_mesh_type
Definition: med.h:124
#define MED_MAX_FILTER_SPACES
Definition: med.h:320
Definition: med.h:173
MEDC_EXPORT med_geometry_type MED_GET_NODE_GEOMETRY_TYPE[MED_N_NODE_FIXED_GEO+2]
Definition: MEDiterators.c:143
Definition: med.h:235
MEDC_EXPORT med_geometry_type MED_GET_FACE_GEOMETRY_TYPE[MED_N_FACE_FIXED_GEO+2]
Definition: MEDiterators.c:101
MEDC_EXPORT const char *const MED_GET_ENTITY_TYPENAME[MED_N_ENTITY_TYPES+2]
Definition: MEDiterators.c:33
Definition: med.h:174
unsigned long long hsize_t
Structure d'acceuil du numéro de version MED d'un fichier.
Definition: med.h:356
med_entity_type
Definition: med.h:136
#define MED_N_EDGE_FIXED_GEO
Definition: med.h:227
MEDC_EXPORT med_geometry_type MED_GET_CELL_GEOMETRY_TYPE[MED_N_CELL_FIXED_GEO+2]
Definition: MEDiterators.c:44
Definition: med.h:240
int med_int
Definition: med.h:316
Definition: med.h:142
med_axis_type
Definition: med.h:238
Definition: med.h:136
Structure d'acceuil du buffer d'un fichier MED en mémoire.
Definition: med.h:364
Definition: med.h:173
Definition: med.h:174
int hid_t
MEDC_EXPORT const char * MED_GET_NODE_GEOMETRY_TYPENAME[MED_N_NODE_FIXED_GEO+2]
Definition: MEDiterators.c:149
med_storage_mode
Definition: med.h:101
med_field_type
Definition: med.h:155
Definition: med.h:173
hssize_t med_ssize
Definition: med.h:308
Definition: med.h:240
MEDC_EXPORT med_geometry_type MED_GET_EDGE_GEOMETRY_TYPE[MED_N_EDGE_FIXED_GEO+2]
Definition: MEDiterators.c:127
Definition: med.h:176
#define MED_N_NODE_FIXED_GEO
Definition: med.h:231
hid_t med_idt
Definition: med.h:309
med_grid_type
Definition: med.h:130
med_internal_type
Definition: med.h:149
#define MED_NAME_SIZE
Definition: med.h:74
MEDC_EXPORT const char *const MED_GET_CELL_GEOMETRY_TYPENAME[MED_N_CELL_FIXED_GEO+2]
Definition: MEDiterators.c:72
med_bool
Definition: med.h:240
med_field_type med_parameter_type
Definition: med.h:163
int med_geometry_type
Definition: med.h:179
MEDC_EXPORT const char * MED_GET_EDGE_GEOMETRY_TYPENAME[MED_N_EDGE_FIXED_GEO+2]
Definition: MEDiterators.c:135
med_attribute_type
Definition: med.h:158
MEDC_EXPORT med_entity_type MED_GET_ENTITY_TYPE[MED_N_ENTITY_TYPES+2]
Definition: MEDiterators.c:22
Definition: med.h:156