med.h

Aller à la documentation de ce fichier.
00001 /* -*- mode:C; coding:utf-8 -*- */
00002 /*  This file is part of MED.
00003  *
00004  *  COPYRIGHT (C) 1999 - 2015  EDF R&D, CEA/DEN
00005  *  MED is free software: you can redistribute it and/or modify
00006  *  it under the terms of the GNU Lesser General Public License as published by
00007  *  the Free Software Foundation, either version 3 of the License, or
00008  *  (at your option) any later version.
00009  *
00010  *  MED is distributed in the hope that it will be useful,
00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  *  GNU Lesser General Public License for more details.
00014  *
00015  *  You should have received a copy of the GNU Lesser General Public License
00016  *  along with MED.  If not, see <http://www.gnu.org/licenses/>.
00017  */
00018 
00019 #ifndef MED_H
00020 #define MED_H
00021 
00022 #include <hdf5.h>
00023 
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027 
00028 #define HDF5_VERSION (H5_VERS_MAJOR * 10000 + H5_VERS_MINOR * 100  + H5_VERS_RELEASE )
00029 
00030 #if HDF5_VERSION < 10607
00031 /*TODO : A enlever après MAJ complète api hdf5-1.8 */
00032 #define HDF5_SELECT_BUG (const hsize_t **)
00033 #else
00034 #define HDF5_SELECT_BUG
00035 #endif
00036 
00037 /*Le symbole H5F_LIBVER_18 n'existe pas dans hdf5-1.8.4 (uniquement à partir de la version 1.8.6)
00038   Pour rester dans le modèle interne hdf introduit en 1.8 quelque soit les futurs modèles internes hdf
00039   on impose le modèle 1.8 et non le LATEST.
00040   La valeur utilisée est celle définie dans les  version >= 1.8.6 (cf H5Fpublic.h) */
00041 #ifndef H5F_LIBVER_18
00042 
00043 #define H5F_LIBVER_18 1
00044 #endif
00045 
00046 #define MED_MAJOR_NUM 3
00047 #define MED_MINOR_NUM 1
00048 #define MED_RELEASE_NUM 0
00049 
00050 #define MED_NUM_MAJEUR 3
00051 #define MED_NUM_MINEUR 1
00052 #define MED_NUM_RELEASE 0
00053 
00054 #define STR(x) #x
00055 #define _MED_VERSION(x,y,z) STR(x) "." STR(y) "." STR(z)
00056 #define MED_VERSION_STR _MED_VERSION(MED_NUM_MAJEUR,MED_NUM_MINEUR,MED_NUM_RELEASE)
00057 
00058 
00059 
00060 #define MED_NULL       (void *) NULL
00061 #define MED_MAX_PARA        20
00062 
00065 #define MED_COMMENT_SIZE 200
00066 #define MED_IDENT_SIZE 8
00067 #define MED_NAME_SIZE 64
00068 #define MED_SNAME_SIZE 16
00069 #define MED_LNAME_SIZE 80
00070 
00071 #define MED_SNAME_BLANK "                "
00072 #define MED_NAME_BLANK  "                                                                "
00073 /*                       0123456789012345678901234567890123456789012345678901234567890123*/
00074 
00075 #define MED_PATHNAME_SIZE 255
00076 #define MED_MAX_CHFID_PATH MED_PATHNAME_SIZE  
00081 /* 2.3v3.0 ok*/
00082 typedef enum {MED_FULL_INTERLACE, 
00083               MED_NO_INTERLACE,    
00084               MED_UNDEF_INTERLACE=-1
00085         }  med_switch_mode;
00086 
00087 
00091 /* 2.3v3.0 ok*/
00092 typedef enum { MED_UNDEF_STMODE,  
00093                MED_GLOBAL_STMODE, 
00094                MED_COMPACT_STMODE, 
00095                MED_GLOBAL_PFLMODE=MED_GLOBAL_STMODE,   
00096                MED_COMPACT_PFLMODE=MED_COMPACT_STMODE, 
00097                MED_UNDEF_PFLMODE=MED_UNDEF_STMODE      
00098              }  med_storage_mode;
00099 
00100 
00104 typedef enum {MED_ACC_RDONLY, 
00105               MED_ACC_RDWR,   
00106               MED_ACC_RDEXT,  
00107               MED_ACC_CREAT,  
00108               MED_ACC_UNDEF   
00109              } med_access_mode;
00110 
00114 /*2.3v3.0 ok*/
00115 typedef enum {MED_UNSTRUCTURED_MESH, MED_STRUCTURED_MESH, MED_UNDEF_MESH_TYPE=-1} med_mesh_type;
00116 
00120 /* 2.3v3.0 ok*/
00121 typedef enum {MED_CARTESIAN_GRID,
00122               MED_POLAR_GRID,
00123               MED_CURVILINEAR_GRID,
00124               MED_UNDEF_GRID_TYPE=-1} med_grid_type;
00125 
00126 /* 2.3v3.0 ok*/
00127 typedef enum {MED_CELL, MED_DESCENDING_FACE, MED_DESCENDING_EDGE, MED_NODE,
00128               MED_NODE_ELEMENT, MED_STRUCT_ELEMENT, MED_ALL_ENTITY_TYPE,
00129               MED_UNDEF_ENTITY_TYPE=-1 } med_entity_type;
00130 #define MED_N_ENTITY_TYPES 6
00131 
00132 /* 2.3v3.0 ok*/
00133 typedef enum {MED_COORDINATE, MED_CONNECTIVITY, MED_NAME, MED_NUMBER,  MED_FAMILY_NUMBER, 
00134         MED_COORDINATE_AXIS1, MED_COORDINATE_AXIS2, MED_COORDINATE_AXIS3, 
00135         MED_INDEX_FACE, MED_INDEX_NODE, MED_GLOBAL_NUMBER,
00136         MED_VARIABLE_ATTRIBUTE, MED_COORDINATE_TRSF,MED_UNDEF_DATATYPE=-1} med_data_type;
00137 
00138 /* 2.3v3.0 ok*/
00140 typedef enum {MED_INTERNAL_FLOAT64=6, MED_INTERNAL_INT32=24,MED_INTERNAL_INT64=26,
00141          MED_INTERNAL_INT=28, MED_INTERNAL_NAME=30, MED_INTERNAL_SNAME=32,
00142          MED_INTERNAL_LNAME=34, MED_INTERNAL_IDENT=38, MED_INTERNAL_CHAR=40, MED_INTERNAL_UNDEF=0 } med_internal_type; 
00144 /*TODO: Réécrire les routines _MEDatt avec med_internal_type au lieu de med_field_type */
00145 
00146 typedef enum {MED_FLOAT64=MED_INTERNAL_FLOAT64, MED_INT32=MED_INTERNAL_INT32, 
00147               MED_INT64=MED_INTERNAL_INT64, MED_INT=MED_INTERNAL_INT }  med_field_type; 
00148 
00149 typedef enum {MED_ATT_FLOAT64=MED_INTERNAL_FLOAT64,
00150               MED_ATT_INT=MED_INTERNAL_INT,
00151               MED_ATT_NAME=MED_INTERNAL_NAME,
00152               MED_ATT_UNDEF=MED_INTERNAL_UNDEF }  med_attribute_type; 
00153 
00154 typedef med_field_type med_parameter_type; 
00155 
00156 #define MED_ATT_FLOAT64_ctype   med_float       
00157 #define MED_ATT_INT_ctype       med_int         
00158 #define MED_ATT_NAME_ctype      char            
00159 #define MED_ATT_UNDEF_ctype     unknown_ctype   
00161 #define MED_CTYPE(medatttype) medatttype##_ctype 
00162 
00163 /* 2.3v3.0 ok : med_type_donnee*/
00164 typedef enum {MED_MESH, MED_FIELD, MED_LIBRARY, MED_FILE,
00165         MED_MESH_SUPPORT,MED_ELSTRUCT, MED_FAMILY,MED_EQUIVALENCE, MED_GROUP, MED_JOINT, 
00166         MED_LOCALIZATION, MED_PROFILE, MED_FILTER, MED_INTERPOLATION, MED_NUMERICAL_DATA,
00167         MED_LINK, MED_CLASS_UNDEF=-1, MED_CLASS_ALL=-2 } med_class;
00168 
00169 
00170 typedef int med_geometry_type;
00171 
00172 #define MED_POINT1 001
00173 
00174 #define MED_SEG2 102
00175 #define MED_SEG3 103
00176 #define MED_SEG4 104
00177 #define MED_TRIA3 203
00178 #define MED_QUAD4 204
00179 #define MED_TRIA6 206
00180 #define MED_TRIA7 207
00181 #define MED_QUAD8 208
00182 #define MED_QUAD9 209
00183 
00184 #define MED_TETRA4 304
00185 #define MED_PYRA5 305
00186 #define MED_PENTA6 306
00187 #define MED_HEXA8 308
00188 #define MED_TETRA10 310
00189 #define MED_OCTA12 312
00190 #define MED_PYRA13 313
00191 #define MED_PENTA15 315
00192 #define MED_HEXA20 320
00193 #define MED_HEXA27 327
00194 
00195 #define MED_POLYGON 400
00196 #define MED_POLYGON2 420
00197 #define MED_POLYHEDRON 500
00198 
00199 #define MED_STRUCT_GEO_INTERNAL 600
00200 #define MED_STRUCT_GEO_SUP_INTERNAL 700
00201 
00202 #define MED_NONE 0
00203 #define MED_NO_GEOTYPE MED_NONE
00204 #define MED_UNDEF_GEOTYPE MED_NONE
00205 #define MED_UNDEF_GEOMETRY_TYPE MED_NONE
00206 #define MED_ALL_GEOTYPE -1
00207 #define MED_GEO_ALL MED_ALL_GEOTYPE
00208 
00209 #define MED_N_CELL_GEO            24 
00210 #define MED_N_CELL_FIXED_GEO      23 
00211 #define MED_N_CELL_GEO_FIXED_CON  20 
00213 #define MED_N_FACE_GEO               8
00214 #define MED_N_FACE_FIXED_GEO         8
00215 #define MED_N_FACE_GEO_FIXED_CON     6
00216 
00217 #define MED_N_EDGE_TYPES             3
00218 #define MED_N_EDGE_FIXED_GEO         3
00219 #define MED_N_EDGE_GEO_FIXED_CON     3
00220 
00221 #define MED_N_NODE_GEO               1
00222 #define MED_N_NODE_FIXED_GEO         1
00223 #define MED_N_NODE_GEO_FIXED_CON     1
00224 
00225 /*2.3v3.0 ok*/
00226   typedef enum {MED_NODAL, MED_DESCENDING, MED_UNDEF_CONNECTIVITY_MODE=-1, MED_NO_CMODE=-1} med_connectivity_mode; 
00227 
00228 /*2.3v3.0 ok*/
00229 typedef enum {MED_CARTESIAN, MED_CYLINDRICAL, MED_SPHERICAL, MED_UNDEF_AXIS_TYPE=-1} med_axis_type;
00230 
00231 typedef enum {MED_FALSE, MED_TRUE} med_bool ;
00232 
00233 #define MED_GAUSS_ELNO "MED_GAUSS_ELNO" 
00236 #define MED_IPOINT_ELNO MED_GAUSS_ELNO
00237 
00238 
00239 #define MED_NO_NAME ""                  
00241 #define MED_NO_MESHNAME ""              
00242 #define MED_NO_MESH     ""              
00244 #define MED_NO_MESH_SUPPORT ""          
00246 #define MED_NO_LOCALIZATION ""          
00248 #define MED_NO_INTERPOLATION ""         
00250 #define MED_NO_IPOINT_INTERNAL 1       
00252 #define MED_NO_PROFILE ""                     
00257 #define MED_NO_GROUP ""                 
00259 #define MED_ALLENTITIES_PROFILE MED_NO_PROFILE 
00263 #define MED_NO_PROFILE_INTERNAL   "MED_NO_PROFILE_INTERNAL"   
00264 #define MED_SAME_PROFILE_INTERNAL "MED_SAME_PROFILE_INTERNAL" 
00266 #define MED_ALL_CONSTITUENT 0                 
00270 #define MED_UNDEF_SIZE 0
00271 #define MED_NO_PROFILE_SIZE 0  
00273 typedef enum {MED_SORT_DTIT,MED_SORT_ITDT,MED_SORT_UNDEF=-1 } med_sorting_type; 
00282 #define MED_NO_DT -1 
00283 #define MED_NO_IT -1 
00284 #define MED_UNDEF_DT 0 
00286 #define MED_ATT_NOT_FILLED -1
00287 
00288 
00289 /* correspondance des types avec HDF 5 */
00290 
00291 typedef hsize_t        med_size;  
00292 typedef hssize_t       med_ssize; 
00293 typedef hid_t          med_idt;   
00294 typedef herr_t         med_err;   
00296 /* types elementaires */
00297 
00298 typedef double         med_float;
00299 /*La ligne suivante est déterminée à l'étape de configuration*/
00300 typedef int  med_int; 
00302 #define INIT4X( x ) x, x, x, x
00303 #define INIT10X( x ) x, x, x, x, x, x, x, x, x, x
00304 #define MED_MAX_FILTER_SPACES 4100
00305 #define MED_MAX_FILTER_SPACES_INIT {INIT4X(INIT10X(INIT10X(INIT10X(0)))), INIT10X(INIT10X(0)) }
00306 
00310 typedef struct {
00311   /*PRIVATE attributes*/
00312   med_int          nspaces;
00313   med_idt          memspace[MED_MAX_FILTER_SPACES];
00314   med_idt          diskspace[MED_MAX_FILTER_SPACES];
00315   /*PUBLIC IN attributes*/
00316   med_int          nentity;
00317   med_int          nvaluesperentity;
00318   med_int          nconstituentpervalue;
00319   med_int          constituentselect;
00320   med_switch_mode  switchmode;
00321   med_int          filterarraysize;
00322   med_size*        filterarray23v30;
00323   med_int          profilearraysize;/*PRIVATE attribute en IN et OUT positionnée dans MEDfilterCr*/
00324   med_storage_mode storagemode;
00325   char             profilename[MED_NAME_SIZE+1];
00326 } med_filter; 
00327 
00328 
00329 #define MED_FILTER_INIT { 0, MED_MAX_FILTER_SPACES_INIT, MED_MAX_FILTER_SPACES_INIT ,0,0,0,0,\
00330                           MED_UNDEF_INTERLACE,MED_NO_FILTER_SIZE, NULL , \
00331                           MED_NO_PROFILE_SIZE,MED_UNDEF_PFLMODE,MED_NO_PROFILE }
00332 
00333 #define MED_NO_FILTER NULL
00334 #define MED_NO_FILTER_SIZE 0
00335 #define MED_NO_PROFILE_F "                                "
00336 
00340 typedef struct {
00341   med_int majeur; med_int mineur; med_int release;
00342 } med_file_version;
00343 #define MED_FILE_VERSION_INIT {0, 0, 0};
00344 
00348 typedef struct {
00349   void *app_image_ptr; 
00350   size_t app_image_size; 
00351   int ref_count; 
00353   void *fapl_image_ptr; 
00354   size_t fapl_image_size;
00355   int fapl_ref_count; 
00356   void *vfd_image_ptr; 
00357   size_t vfd_image_size; 
00358   int vfd_ref_count; 
00359   med_access_mode flags; 
00360 } med_memfile ;
00361 
00362 #define MED_MEMFILE_INIT {NULL, 0, 1, NULL, 0, 0, NULL, 0, 0, MED_ACC_RDONLY}
00363 
00364 
00365 #include "med_proto.h"
00366 
00367 /*En cas de modifications/ajouts de type d'entité/géométrique mettre à jour les itérateurs suivants : */
00368 
00369 extern MEDC_EXPORT med_entity_type MED_GET_ENTITY_TYPE[MED_N_ENTITY_TYPES+2];
00370 extern MEDC_EXPORT const char * const MED_GET_ENTITY_TYPENAME[MED_N_ENTITY_TYPES+2];
00371 extern MEDC_EXPORT med_geometry_type MED_GET_CELL_GEOMETRY_TYPE[MED_N_CELL_FIXED_GEO+2];
00372 extern MEDC_EXPORT const char * const MED_GET_CELL_GEOMETRY_TYPENAME[MED_N_CELL_FIXED_GEO+2];
00373 extern MEDC_EXPORT med_geometry_type MED_GET_FACE_GEOMETRY_TYPE[MED_N_FACE_FIXED_GEO+2];
00374 extern MEDC_EXPORT const char * const MED_GET_FACE_GEOMETRY_TYPENAME[MED_N_FACE_FIXED_GEO+2];
00375 extern MEDC_EXPORT med_geometry_type MED_GET_EDGE_GEOMETRY_TYPE[MED_N_EDGE_FIXED_GEO+2];
00376 extern MEDC_EXPORT const char * MED_GET_EDGE_GEOMETRY_TYPENAME[MED_N_EDGE_FIXED_GEO+2];
00377 extern MEDC_EXPORT med_geometry_type MED_GET_NODE_GEOMETRY_TYPE[MED_N_NODE_FIXED_GEO+2];
00378 extern MEDC_EXPORT const char * MED_GET_NODE_GEOMETRY_TYPENAME[MED_N_NODE_FIXED_GEO+2];
00379 
00380 /*      Predefined names for struct elements            */
00381 #define MED_PARTICLE_NAME   "MED_PARTICLE"
00382 #define MED_BALL_NAME       "MED_BALL"
00383 #define MED_BEAM_NAME       "MED_BEAM"
00384 
00385 /*      Predefined attributes names for struct elements */
00386 #define MED_PARTICLE_LABEL  "MED_PARTICLE_LABEL"
00387 #define MED_BALL_DIAMETER   "MED_BALL_DIAMETER"
00388 #define MED_BEAM_THICKNESS  "MED_BEAM_THICKNESS"
00389 
00390 #ifdef __cplusplus
00391 }
00392 #endif
00393 
00394 #endif  /* MED_H */

Généré le Thu Oct 8 14:26:16 2015 pour MED fichier par  doxygen 1.6.1