##
Documentation de la bibliothèque MED-fichier V2.3 : Types élémentaires et paramètres de base de l'interface C

Sommaire de la page

- Introduction
- Types de données élémentaires
- Taille des chaînes de caractères
- Mode d'accès au fichier
- Mode de stockage des données en mémoire
- Type du maillage
- Type d'une grille structurée
- Type d'une entité du maillage
- Type géométrique d'un élément
- Mode d'accès aux attributs des entités
- Mode de connectivité
- Type du repère des coordonnées
- Type des composantes d'un champ
- Paramètres constants utiles à la lecture et à l'écriture des champs
- Type de définition du stockage mémoire des profils de champs
- Type des données à monter dans un fichier
- Type booléen

Retour à la page de garde du guide de référence

# Introduction

Tout ce qui suit est disponible dans le fichier "med.h". Tous les types énumérés qui sont décrits sont utiles à la définition des paramètres des routines de l'API.

# Types de données élémentaires

- med_idt : type de l'identificateur d'un fichier MED après ouverture.
- med_err : type du code de retour des routines de l'API, 0 si réussite, -1 sinon.
- med_int : type entier de référence utilisé pour stocker les données entières stockées dans les fichiers MED. La taille de cet entier correspond à celle des entiers natifs FORTRAN propre à chaque plate-forme.
- med_float : type des flottants stockés dans les fichiers MED (IEEE 64 BITS).

Les types med_int et med_float correspondent aux types numériques de base du modèle de données.

# Tailles des chaînes de caractères

Ces constantes spécifient la taille des chaînes de caractères utilisées par l'API. Elles permettent de définir les chaînes de caractères spécifiées dans les types de base du modèle de données. La taille des chaînes de caractères est standardisée en fonction de l'information représentée.

    #define MED_TAILLE_DESC   200
    #define MED_TAILLE_NOM     32
    #define MED_TAILLE_LNOM    80
    #define MED_TAILLE_PNOM    16

Remarque : Les chaînes de caractères C ne doivent pas contenir de caractères blancs en fin de chaine. Par exemple, la chaîne "Mon Maillage" est valide tandis que la chaîne "Mon Maillage " est invalide.

# Mode d'accès aux fichiers

    typedef enum {MED_LECTURE, MED_LECTURE_ECRITURE, MED_LECTURE_AJOUT, MED_CREATION} med_mode_acces;

Ce type définit le mode d'accès aux données d'un fichier MED qui est spécifié lorsque l'on ouvre le fichier via la routine MEDouvrir :

- MED_LECTURE : Ouverture en lecture seule. Il est alors impossible de modifier le contenu du fichier.
- MED_LECTURE_ECRITURE : Ouverture en lecture/écriture du fichier. Si une donnée existe déjà et qu'on la réécrit, elle est écrasée.
- MED_LECTURE_AJOUT : Ouverture en lecture/écriture du fichier. L'écriture n'est possible que pour ajouter de nouvelles données : si une donnée existe et qu'on tente de la réécrire dans le fichier, une erreur est générée.
- MED_CREATION : Création du fichier s'il n'existe pas, écrasement sinon.

Le mode d'accès du fichier est stocké dans la variable globale MED_MODE_ACCES

# Mode de stockage des données en mémoire

    typedef enum {MED_FULL_INTERLACE,MED_NO_INTERLACE}  med_mode_switch;

Ce type définit le mode de stockage des données en mémoire. On trouve deux modes possibles :

- MED_FULL_INTERLACE : Mode entrelacé.
- MED_NO_INTERLACE : Mode non entrelacé.

Exemple d'utilisation : Stockage des coordonnées dans un tableau en mémoire dans un repère cartésien à 3 dimensions.

- En mode entrelacé : X1, Y1, Z1, X2, Y2, Z2, .... , Xn, Yn, Zn.
- En mode non entrelacé : X1, X2, ..., Xn, Y1, Y2, ..., Yn, Z1, Z2, ..., Zn

Conventions utilisées :

- Dans un fichier MED, les données sont stockées en mode non entrelacé (MED_NO_INTERLACE). La conversion éventuelle vers ou à partir de la mémoire en mode entrelacé est réalisée automatiquement par les routines de l'API.
- Chaque code est libre de gérer ses données en mémoire selon l'un des deux modes.

# Type du maillage

    typedef enum {MED_NON_STRUCTURE, MED_STRUCTURE} med_maillage;

Ce type permet de typer un maillage selon les 2 catégories possibles :

1. MED_NON_STRUCTURE : Permet de définir un maillage non structuré.
2. MED_STRUCTURE : Permet de définir un maillage structuré.

Ce type correspond au type med_maillage défini dans le package "Maillage" du modèle de données.

# Type d'une grille structurée

    typedef enum {MED_GRILLE_CARTESIENNE, MED_GRILLE_POLAIRE, MED_GRILLE_STANDARD} med_type_grille;

Ce type permet de typer une grille (maillage structuré) :

1. MED_GRILLE_CARTESIENNE : Permet de définir une grille cartésienne.
2. MED_GRILLE_POLAIRE : Permet de définir une grille polaire.
3. MED_GRILLE_STANDARD : Permet de définir une grille standard.

Ce type correspond au type med_type_grille défini dans le package "Maillage" du modèle de données.

# Type d'une entité d'un maillage

    typedef enum {MED_MAILLE, MED_FACE, MED_ARETE, MED_NOEUD} med_entite_maillage;

Ce type définit les différents types d'entités qui composent un maillage.

- MED_MAILLE : maille.
- MED_FACE : face (connectivité descendante).
- MED_ARETE : arête (connectivité descendante).
- MED_NOEUD : noeud.

# Type géométrique d'un élément

    typedef enum {MED_POINT1=1, MED_SEG2=102, MED_SEG3=103, MED_TRIA3=203,
    	      MED_QUAD4=204, MED_TRIA6=206,MED_QUAD8=208, MED_TETRA4=304,
    	      MED_PYRA5=305, MED_PENTA6=306, MED_HEXA8=308, MED_TETRA10=310,
    	      MED_PYRA13=313, MED_PENTA15=315, MED_HEXA20=320, MED_POLYGONE=400,
                  MED_POLYEDRE=500,MED_NONE=0} med_geometrie_element;

Ce type définit les différents types géométriques des éléments d'un maillage (mailles/faces/arêtes) :

- MED_POINT1 : point à 1 noeud.
- MED_SEG2 : segment à 2 noeuds.
- MED_SEG3 : segment à 3 noeuds.
- MED_TRIA3 : triangle à 3 noeuds.
- MED_TRIA6 : triangle à 6 noeuds.
- MED_QUAD4 : quadrangle à 4 noeuds.
- MED_QUAD8 : quadrangle à 8 noeuds.
- MED_TETRA4 : tétraèdre à 4 noeuds.
- MED_TETRA10 : tétraèdre à 10 noeuds.
- MED_HEXA8 : hexaèdre à 8 noeuds.
- MED_HEXA20 : hexaèdre à 20 noeuds.
- MED_PENTA6 : pentaèdre à 6 noeuds.
- MED_PENTA15 : pentaèdre à 15 noeuds.
- MED_PYRA5 : pyramide à 5 noeuds.
- MED_PYRA13 : pyramide à 13 noeuds.
- MED_POLYGONE : polygone quelconque.
- MED_POLYEDRE : polyèdre quelconque.
- NONE : vide.

Remarques :

1. Correspondent
   - Aux mailles : tous les types géométriques possibles.
   - Aux faces : les entités de dimension 2 : MED_TRIA3, MED_TRIA6, MED_QUAD4, MED_QUAD8, MED_POLYGONE.
   - Aux arêtes : les entités de dimension 1 : MED_SEG2, MED_SEG3.
2. Constantes littérales associées :

       #define MED_NBR_GEOMETRIE_MAILLE 15
       #define MED_NBR_GEOMETRIE_FACE 4
       #define MED_NBR_GEOMETRIE_ARETE 2

   Ces constantes correspondent au nombre de types de mailles/faces/arêtes dont la géométrie est pré-définie (les types MED_POLYGONE et MED_POLYEDRE ne sont donc pas comptés).
3. A noter que des valeurs entières sont associées à chaque type géométrique : pour chacune, le premier chiffre indique la dimension de l'entité, son modulo 100 son nombre de noeuds. Ces conventions ne s'appliquent pas aux types MED_POLYGONE et MED_POLYEDRE.

# Mode d'accès aux attributs des entités

    typedef enum {MED_COOR, MED_CONN, MED_NOM, MED_NUM, MED_FAM,MED_COOR_IND1,
                  MED_COORD_IND2, MED_COORD_IND3} med_table;

Ce type permet d'accéder à un type d'attribut interne des entités d'un maillage.

- MED_COOR : coordonnées des noeuds.
- MED_CONN : connectivité des mailles/faces/arêtes.
- MED_NOM : noms des noeuds/mailles/faces/arêtes.
- MED_NUM : numéros des noeuds/mailles/faces/arêtes.
- MED_FAM : familles des noeuds/mailles/faces/arêtes.
- MED_COORD_IND1 : coordonnées des indices de l'axe 1 d'une grille.
- MED_COORD_IND2 : coordonnées des indices de l'axe 2 d'une grille.
- MED_COORD_IND3 : coordonnées des indices de l'axe 3 d'une grille.

# Mode de connectivité

    typedef enum {MED_NOD, MED_DESC} med_connectivite ;

Il existe deux modes de connectivité pour décrire la connectivité des mailles d'un maillage :

- MED_NOD : connectivité nodale.
- MED_DESC : connectivité descendante.

Remarques :

1. Dans le cadre de la connectivité nodale, les mailles sont décrites par la liste des noeuds qui les composent. Pour la connectivité descendante, les mailles sont décrites par les faces, les faces par les arêtes, les arêtes par les noeuds.
2. Il n'y a pas de conversion automatique entre les 2 modes de représentation. Si les mailles sont stockées dans un fichier en mode nodal, un code ne pourra pas les lire en mode descendant.

# Type du repère des coordonnées

    typedef enum {MED_CART, MED_CYL, MED_SPHER} med_repere;

Ce type définit le type du repère des coordonnées des noeuds dans un maillage non structuré :

- MED_CART : cartésien.
- MED_CYL : cylindrique.
- MED_SPHER : sphérique.

# Type des composantes d'un champ

    typedef enum {MED_FLOAT64=6,MED_INT32=24,MED_INT64=26} med_type_champ;

Il s'agit du type des valeurs des composantes d'un champ.

- MED_FLOAT64 : flottant 64 bits IEEE.
- MED_INT32 : entier 32 bits.
- MED_INT64 : entier 64 bits.

# Paramètres constants utiles à la lecture et à l'écriture des champs

    /* 16 caracteres :      1234567890123456*/
    #define MED_PNOM_BLANC "                "
    /* 32 caractères :      12345678901234567890123456789012*/
    #define MED_NOM_BLANC  "                                "

    #define MED_NOPG    1                   /* Variable Interne                            */
    #define MED_NOGAUSS  ""                 /* -> pas de point de Gauss                    */
    #define MED_NOGAUSSi  MED_NOM_BLANC     /* Variable Interne                            */
    #define MED_GAUSS_ELNO "MED_GAUSS_ELNO" /* mot cle qui indique que les points de Gauss
                                               se confondent avec les noeuds de l'element  */
    #define MED_NOPFL   ""                  /* -> pas de profils utilisateur               */
    #define MED_NOPFLi  MED_NOM_BLANC       /* Variable Interne                            */
    #define MED_NOLIEN  ""
    #define MED_NOLIENi MED_NOM_BLANC      /* Variable Interne                            */
    #define MED_NOPF   0                   /* -> pas de profils pour _MEDdataseNnumEcrire */
    #define MED_NOPDT -1                   /* rem: pas de pas de temps negatifs           */
    #define MED_NONOR -1                   /* rem: pas de n°ordre negatif                 */
    #define MED_DIM1   1                   /* PAS */
    #define MED_ALL    0
    #define MED_NOREF  ""
    #define MED_DEFAUT ""                  /* Toutes les donnees champs ou maillage pour le montage */

Ces constantes sont utilisées dans le paramétrage des routines de l'API sur les champs de résultat (module fonctionnel "MED_Champ").

# Type de définition du stockage mémoire des profils de champs

    typedef enum {MED_NO_PFLMOD,
                  MED_GLOBAL,
    	      MED_COMPACT }  med_mode_profil;

Ce type permet de spécifier le mode de répartition des valeurs d'un champ définies sur un profil de champ :

- MED_COMPACT :
  - Seules les valeurs relatives au profil sont en mémoire.
  - Les points de Gauss apparaissent normalement en mémoire.
  - Le mode d'entrelacement mémoire est pris en compte.
- MED_GLOBAL (en test) :
  - La totalité des valeurs du champ sont en mémoire. La librairie MED-fichier s'occupe de sélectionner les valeurs en fonction des numéros indiqués à l'écriture du profil.
  - Les points de Gauss apparaissent normalement en mémoire.
  - Le mode d'entrelacement mémoire est pris en compte.
- MED_NOPFLMOD : aucun mode à gérer (pas de profil).

# Type des données à monter dans un fichier

    typedef enum {MED_MAILLAGE, MED_CHAMP} med_type_donnee;

Ce type permet de spécifier le type des données stockées dans un fichier différent du fichier courant et que l'on veut monter dans le fichier courant :

- MED_MAILLAGE : accès au(x) maillage(s) du fichier que l'on veut monter.
- MED_CHAMP : accès au(x) champ(s) du fichier que l'on veut monter.

# Type booléen

    typedef enum {MED_FAUX, MED_VRAI} med_booleen ;