##
Documentation de la bibliothèque MED-fichier V2.2 : De la V2.1 à la V2.2

Sommaire de la rubrique

- Introduction
- Evolutions apportées au modèle de données
  - Extensions apportées au modèle
    - Eléments polygones et polyèdres
    - Localisation des points de Gauss
    - Variables scalaire
  - Evolutions apportées aux types de données pré-existants
    - Maillage
    - Champ de résultat
    - Définition de la taille des noms et des unités
- Evolutions apportées à l'API de la bibliothèque
  - Nouvelles fonctionnalités
    - Montage/démontage de fichier
    - Ecriture et lecture des coordonnées des noeuds d'un maillage structuré
    - Ecriture et lecture de la connectivité des éléments polyèdres et polygones
    - Ecriture et lecture des variables scalaire
    - Ecriture et lecture des éléments de référence aux points de Gauss
    - Ecriture et lecture des liens sur fichier distant
  - Refonte de l'existant
    - Simplification des droits d'accès aux données
    - Accès aux différents types de maillage
    - Simplification de la définition de la connectivité des mailles
    - Simplification des conventions sur les noms des familles de noeuds et d'éléments
    - Clarification de l'API sur les familles
    - Nouveau mode d'accès aux valeurs des champs
- Evolutions apportées aux utilitaires livrés avec la V2.2
  - Utilitaire MDUMP
  - Utilitaire MEDCONFORME
  - Utilitaire MEDIMPORT
- Mettre à jour une interface MED-fichier V2.1
  - Droits d'accès aux données
  - Taille des noms et des unités
  - Accès aux différents types de maillage
  - Accès aux maillages structurés
  - Accès à la connectivité des éléments
  - Accès à la connectivité des polyèdres et des polygones
  - Accès aux familles d'entités
  - Accès aux champs de résultat
  - Prise en compte des liens sur fichier distant
  - Prise en compte de la localisation des points de Gauss
  - Prise en compte des variables scalaire

# Introduction

Cette rubrique a pour objectif de faciliter le passage de MED-fichier V2.1 à MED-fichier V2.2, elle s'adresse en premier lieu aux développeurs qui veulent mettre à niveau leur interface avec la bibliothèque MED-fichier au sein d'un code.

# Evolutions apportées au modèle de données

### Extensions apportées au modèle

#### Eléments polygones et polyèdres

MED-fichier V2.2 donne la possibilité de définir des éléments qui correspondent à des polyèdres et des polygones quelconques.

- Un polyèdre peut constituer une maille 3D.
- Un polygone peut constituer :
  - Une maille 2D.
  - Une face.

#### Localisation des points de Gauss

Dans le cadre des échanges de champs de résultats exprimés sur les points de Gauss, MED-fichier V2.2 fournit la possibilité de localiser ces points sur des éléments de référence en des lieux différents selon la modélisation numérique choisie. Pour chaque type de modélisation, il est possible de spécifier cette localisation sur des éléments de référence.

On distingue différentes familles de points de Gauss en fonction du nombre de points d'intégration. Chaque point d'intégration est localisé au sein d'un élément de référence par ses coordonnées et se voit associer un poids.

La localisation des points de Gauss pour un élément de référence nécessite donc de connaître :

- Le type géométrique de l'élément : triangle à 3 noeuds, triangle à 6 noeuds, ...
- Les coordonnées des noeuds de l'élement.
- Les coordonnées et le poids de chaque point de Gauss.

Pour plus de détails, on peut consulter le modèle de données.

#### Variables scalaire

Une variable scalaire numérique correspond à une variable entière ou réelle non directement liée au domaine de calcul et donc indépendante de la notion de maillage.

Les valeurs numériques stockées dans ce type de variable peuvent être associées à une étape de calcul identifiée par un pas de temps et/ou un numéro d'ordre.

Pour plus de détails, on peut consulter le modèle de données.

### Evolutions apportées aux types de données pré-existants

#### Maillage

Dans MED-fichier 2.2, on distingue deux catégories de maillages :

1. Les maillages structurés (grille cartésienne, polaire et standard). Un maillage structuré est uniquement défini par ses noeuds. La connectivité entre les noeuds est de type (i,j,k) en 3D, (i,j) en 2D et (i) en 1D. Pour un axe donné (i, j ou k), on doit fournir un nombre de points qui permet spécifier un découpage régulier de l'axe. Les conventions d'indexation, de numérotation des noeuds ainsi que le mode de définition des coordonnées d'une grille sont définies dans le modèle de données.
2. Les maillages non structurés. Il s'agit des maillages déjà définis dans MED-fichier V2.1.

De plus des informations supplémentaires sont associées aux maillages par rapport à MED-fichier V2.1 :

- Une description. Il s'agit d'une simple chaîne de caractères qui permet à l'utilisateur de décrire son maillage.
- La distinction possible entre la dimension du maillage et celle de l'espace de calcul. On peut avoir un maillage 2D dans un espace 3D.

Pour plus de détails, on peut consulter le modèle de données.

#### Champ de résultat

Les évolutions sur les champs portent sur :

1. La possibilité pour une même séquence de calcul (pas de temps/numéro d'ordre) de définir des valeurs portant sur plusieurs maillages.
2. L'accès à la localisation des points de Gauss sur des éléments de référence.

La modélisation des champs est définie dans les packages du modèle de données :

- Résultat.
- Séquence de valeurs sur entité.
- Valeur sur entité.

#### Définition de la taille des noms et des unités

La taille des noms et unités passe de 8 à 16 caractères. Les noms et unités apparaissent dans les :

- Composantes d'un champ qui sont définies dans le package Résultat.
- Noms et coordonnées des noeuds d'un maillage qui sont définies dans le package Noeud.
- Noms des éléments d'un maillage : packages maille, face et arête.

# Evolutions apportées à l'API de la bibliothèque

### Nouvelles fonctionnalités

#### Montage/démontage de fichier

Les données d'une étude peuvent être réparties dans des fichiers différents :

- Les maillages peuvent être dans un premier fichier.
- Les champs de résultat peuvent être dans un second fichier.

Le mécanisme de montage de fichier fourni par l'API de MED-fichier V2.2 permet de monter dans un fichier MED (que l'on a au préalable ouvert) les données contenues dans un autre fichier. Le montage est sélectif : on monte soit les maillages, soit les champs.

Le mécanisme de montage dépend de 2 routines :

- La routine MEDmonter/efmont permet de créer un point de montage dans le fichier courant. Ce point de montage permet d'accéder de manière transparente soit aux maillages, soit aux champs de résultats d'un fichier distinct du fichier courant.
- La routine MEDdemonter/efdemo permet de desactiver un point de montage.

La description de ces routines est disponible dans le guide de référence. Le mode d'utilisation de ces routines est fourni par le guide d'utilisation.

#### Ecriture et lecture des coordonnées des noeuds d'un maillage structuré

Les conventions d'indexation, de numérotation des noeuds ainsi que le mode de définition des coordonnées d'une grille sont définis dans le modèle de données.

##### Coordonnées des noeuds d'un maillage structuré (MED_STRUCTURE) standard (MED_GRILLE_STANDARD)

- A l'écriture, on distingue 2 routines :
  - La routine MEDstructureCoordEcr/efscoe permet de définir la structure des coordonnées d'une grille de type MED_GRILLE_STANDARD. Cette structure est définie par un tableau d'entiers mono dimensionnel dont la taille est celle de la dimension du maillage. Chaque élément contient le nombre d'indices par dimension (axe) de la grille. Par exemple, la structure pour définir une grille 5x3 correspondra à un tableau entier à 2 éléments : int structure[2] = {5,3}.
  - La routine MEDcoordEcr/efcooe permet ensuite d'écrire les coordonnées des noeuds du maillage.
- A la lecture, on doit utiliser 3 routines :
  - La routine MEDnEntMaa/efnema permet de lire le nombre de noeuds dans un maillage structuré (MED_STRUCTURE) correspondant à une grille de type MED_GRILLE_STANDARD.
  - La routine MEDstructureCoordLire/efscol permet de lire la structure des coordonnées d'une grille de type MED_GRILLE_STANDARD. Cette structure est définie par un tableau d'entiers mono dimensionnel dont la taille est celle de la dimension du maillage.
  - La routine MEDcoordLire/efcool permet ensuite de lire les coordonnées des noeuds du maillage.

La description de ces routines est disponible dans le guide de référence. Le mode d'utilisation de ces routines est fourni par le guide d'utilisation.

##### Coordonnées des noeuds d'un maillage structuré (MED_STRUCTURE) cartésien (MED_GRILLE_CARTESIENNE) ou polaire (MED_GRILLE_POLAIRE)

- L'écriture des coordonnées d'un maillage structuré correspondant à une grille MED_GRILLE_CARTESIENNE ou MED_GRILLE_POLAIRE ne nécessite que l'écriture des indices de coordonnées selon chacun des axes de la grille. La routine MEDindicesCoordEcr/eficoe permet l'écriture des indices d'un axe donné. Il faut appeler cette routine pour chacun des axes de la grille.
- La lecture se fait axe d'indices de coordonnées par axe d'indices de coordonnées. Pour un axe donné, il s'agit de :
  - Lire le nombre d'indice sur l'axe. La routine MEDnEntMaa/efnema permet de lire cette information.
  - Allouer la mémoire nécessaire au stockage des indices.
  - Lire les indices de coordonées de l'axe. La routine MEDindicesCoordLire/eficol pemet de réaliser cette opération.

La description de ces routines est disponible dans le guide de référence. Le mode d'utilisation de ces routines est fourni par le guide d'utilisation.

#### Ecriture et lecture de la connectivité des éléments polyèdres et polygones

En plus des types géométriques prédéfinis dans MED (MED_SEG2,MED_SEG3, MED_TRIA3, ...), il est possible d'écrire/lire la connectivité de mailles correspondant à des polyèdres quelconques (référencés dans MED par le mot clé MED_POLYEDRE) :

- L'écriture de la connectivité des mailles de type MED_POLYEDRE est réalisée par la routine MEDpolyedreConnEcr/efpece.
- Pour récupérer le nombre de polyèdres, il faut utiliser la routine MEDnEntMaa/efnema. La lecture de la connectivité des mailles de type MED_POLYEDRE est réalisée par 2 routines :
  - La routine MEDpolyedreInfo/efpyei permet de lire la taille des tableaux qu'il faudra passer en paramètre à la routine MEDpolyedreConnLire/efpecl.
  - La routine MEDpolyedreConnLire/efpecl va lire dans le maillage la connectivité des mailles polyèdres.

De la même manière, il est possible d'écrire la connectivité de mailles/faces correspondant à des polygones quelconques (référencés dans MED par le mot clé MED_POLYGONE) :

- L'écriture de la connectivité des mailles/faces de type MED_POLYGONE est réalisée par la routine MEDpolygoneConnEcr/efpgce.
- Pour récupérer le nombre de polygones, il faut utiliser la routine MEDnEntMaa/efnema. La lecture de la connectivité des mailles/faces de type MED_POLYGONE est réalisée par 2 routines :
  - La routine MEDpolygoneInfo/efpygi permet de lire la taille des tableaux qu'il faudra passer en paramètre à la routine MEDpolygoneConnLire/efpgcl.
  - La routine MEDpolygoneConnLire/efpgcl va lire dans le maillage la connectivité des mailles/faces polygones.

La description de ces routines est disponible dans le guide de référence. Le mode d'utilisation de ces routines est fourni par le guide d'utilisation.

#### Ecriture et lecture des variables scalaire

L'API de MED-fichier V2.2 propose des routines pour écrire/lire des variables scalaires entières ou flottantes, associées ou non à des pas de temps et/ou des numéros d'ordre :

- A l'écriture :
  - La routine MEDscalaireCr/efscac permet de créer une variable scalaire dans un fichier.
  - La routine MEDscalaireEntierEcr/efscee permet d'écrire une valeur dans une variable scalaire de type entier.
  - La routine MEDscalaireFlottantEcr/efscfe permet d'écrire une valeur dans une variable scalaire de type réel.
- A la lecture :
  - La routine MEDnScalaire/efnsca permet de lire le nombre de variables scalaire dans un fichier.
  - La routine MEDscalaireInfo/efscai permet de lire les informations sur une variable scalaire.
  - La routine MEDnScalairePasdeTemps/efnspd permet de lire le nombre de pas de temps dans une variable scalaire.
  - La routine MEDscalairePasdetempsInfo/efspdi permet de lire les informations sur un pas de temps. Il s'agit en fait d'un couple (pas de temps, numéro d'ordre).
  - La routine MEDscalaireEntierLire/efscel permet de lire une valeur dans une variable scalaire de type entier.
  - La routine MEDscalaireFlottantLire/efscfl permet de lire une valeur dans une variable scalaire de type réel.

La description de ces routines est disponible dans le guide de référence. Le mode d'utilisation de ces routines est fourni par le guide d'utilisation.

#### Ecriture et lecture des éléments de référence aux points de Gauss

La bibliothèque MED-fichier V2.2 permet d'écrire/lire des éléments de référence de localisation des points de Gauss :

- A l'écriture :
  - La routine MEDgaussEcr/efgaue permet de créer et d'écrire dans un fichier MED un élément de référence de localisation des points de Gauss pour un type géométrique donné.
- A la lecture :
  - La routine MEDnGauss/efngau permet de lire dans un fichier le nombre d'élément de référence de localisation des points de Gauss.
  - La routine MEDGaussInfo/efgaui permet de lire les informations sur un élément de référence de localisation des points de Gauss pour un type géométrique donné.
  - La routine MEDgaussLire/efgaul permet de lire dans un fichier MED un élément de référence de localisation des points de Gauss pour un type géométrique donné.

La description de ces routines est disponible dans le guide de référence. Le mode d'utilisation de ces routines est fourni par le guide d'utilisation.

#### Ecriture et lecture des liens sur fichier distant

La bibliothèque MED-fichier V2.2 permet de écrire/lire des liens sur fichiers distants. Les valeurs définies dans un champ de résultat peuvent porter sur les entités d'un maillage qui n'est pas défini dans le même fichier que celui où se trouve le champ. Un lien sur fichier distant permet d'indiquer dans le fichier courant, le nom et le chemin d'accès du fichier distant dans lequel se trouve le maillage :

- A L'écriture :
  - La routine MEDlienEcr/efliee permet de créer et écrire un lien sur un fichier distant dans le fichier courant. Un lien est identifié par son nom qui correspond au nom du maillage stocké dans le fichier distant que l'on veut référencer.
- A la lecture :
  - La routine MEDnLien/efnlie permet de lire le nombre de liens sur fichier distant dans un fichier.
  - La routine MEDlienInfo/efliei permet de lire les informations sur un lien vers un fichier distant (nom du lien, taille du lien).
  - La routine MEDnValLien/efnvli permet de lire la taille d'un lien dont on connait le nom : la taille lue est celle de la chaîne de caractères correspondant aux chemin d'accès et au nom du fichier distant.
  - La routine MEDlienLire/efliel permet de lire un lien sur un fichier distant dans le fichier courant.

Remarques :

- Pour accéder aux liens sur fichier distant définis dans un fichier MED, il existe 2 possibilités :
  1. La première consiste à balayer et lire l'ensemble des liens distants écrits dans un fichier :

     Dès que l'on connait le nombre de liens distants dans un fichier, il est possible d'accéder à chacun d'entre eux par l'intermédiaire d'une boucle. Si on a "N" liens distants, cette boucle ira de 1 à N. A chaque itération, la valeur du compteur de la boucle est un indice permettant l'accés à un lien distant donné.

     La lecture dans un fichier de l'ensemble des liens distants consiste donc à :

     - Lire le nombre de liens sur fichier distant.
     - Pour chaque lien sur fichier distant :
       - Lire les informations (nom, taille).
       - Allouer la mémoire nécessaire au stockage du lien (chaîne de caractères).
       - Lire le lien (chemin d'accès au fichier distant).
  2. La seconde consiste à lire un lien directement référencé dans un champ :

     Les routines de lecture d'un champ permettent de voir si le maillage sur lequel portent les résultats est local ou non. Dans le cas où il est déclaré non local, on peut directement accéder au lien vers le fichier distant, pour cela il faut :

     - Lire la taille du lien.
     - Allouer la mémoire nécessaire au stockage du lien (chaîne de caractères).
     - Lire le lien (chemin d'accès au fichier distant).
- Pour accéder à partir du fichier courant, au contenu d'un fichier distant, on peut utiliser les fonctionnalités de montage de fichier fournies par les routines
  - MEDmonter/efmont.
  - MEDdemonter/efdemo.
- La nature de la localisation d'un maillage référencé dans un champ de résultat est fournie par la routine MEDpasdetempsInfo/efpdti pour le maillage par défaut et par la routine MEDchampRefInfo/efrefi pour tous les maillages.

La description de ces routines est disponible dans le guide de référence. Le mode d'utilisation de ces routines est fourni par le guide d'utilisation.

### Refonte de l'existant

#### Simplification des droits d'accès aux données

##### Rappel du mode en vigueur dans MED-fichier V2.1

Dans MED-fichier V2.1, le mode d'accès à un fichier MED ou le mode d'écriture d'une structure de données MED pouvait prendre les valeurs :

- MED_LECT : Accès en lecture uniquement (valable uniquement pour les fichiers).
- MED_ECRI : Accès en écriture (si un fichier de même nom existe déjà on ouvre le fichier, si un objet MED de même nom et de même type existe déjà, erreur).
- MED_REMP : Accès en écriture avec remplacement (si un fichier de même nom existe déjà on ouvre le fichier et on écrase son contenu, si un objet MED de même nom et de même type existe déjà, il est remplacé).

Quand on ouvrait un fichier MED V2.1 en mode MED_ECRI ou MED_REMP, il était possible lors de l'écriture de données spécifiques (coordonnées, connectivité, valeurs d'un champ,...) de choisir un mode d'écriture propre à ces données. Ce mode était spécifié par un paramètre mode qui pouvait prendre les valeurs MED_ECRI ou MED_REMP et apparaissait dans les routines :

- MEDchampEcr/efchae
- MEDconnEcr/efcone
- MEDcoordEcr/efcooe
- MEDelementsEcr/efelee
- MEDequivEcr/efeque
- MEDfamEcr/effame
- MEDfichDesEcr/effide
- MEDnoeudsEcr/efnoee
- MEDnomEcr/efnome
- MEDnumEcr/efnume

##### Nouveau mode en vigueur dans MED-fichier V2.2

Dans MED-fichier V2.2, la définition du mode d'accès à un fichier se fait lors de l'ouverture de ce dernier avec la routine MEDouvrir/efouvr. Les différents modes d'accès possibles sont :

- 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'ouverture du fichier décide seul du mode d'accès aux données du fichier. Le paramètre mode disparaît donc dans MED-fichier V2.2 au sein des routines :

- MEDchampEcr/efchae
- MEDconnEcr/efcone
- MEDcoordEcr/efcooe
- MEDelementsEcr/efelee
- MEDequivEcr/efeque
- MEDfamEcr/effame
- MEDfichDesEcr/effide
- MEDnoeudsEcr/efnoee
- MEDnomEcr/efnome
- MEDnumEcr/efnume

#### Accès aux différents types de maillage

##### Rappel du mode en vigueur dans MED-fichier V2.1

Dans MED-fichier V2.1.5, il n'existe qu'un seul type de maillage, celui des maillages non structurés :

- A l'écriture :
  - La routine MEDmaaCr/efmaac permet de créer un maillage dans un fichier MED. Lors de la création d'un maillage, on écrit également dans le fichier les paramètres de base qui permettent de caractériser ce maillage à savoir son nom et sa dimension.
- A la lecture :
  - La routine MEDnMaa/efnmaa permet de lire le nombre total de maillage dans un fichier MED.
  - Dès que l'on connait le nombre de maillage, il est possible d'accéder au nom et aux informations sur chaque maillage à partir d'une boucle : Si on a "N" maillages, cette boucle ira de 1 à N.
    - Pour identifier le maillage associé à l'indice de boucle, il fut utiliser la routine MEDmaaInfo/efmaai qui va lire :
      - Le nom.
      - La dimension .

##### Nouveau mode en vigueur dans MED-fichier V2.2

On distingue désormais les différentes catégories possibles de maillages :

- A l'écriture :
  - La routine MEDmaaCr/efmaac permet de créer un maillage dans un fichier MED. Lors de la création d'un maillage, on écrit également dans le fichier les paramètres de base qui permettent de caractériser ce maillage à savoir sa dimension et son type qui peut prendre les valeurs :
    - MED_NON_STRUCTURE : maillage non structuré.
    - MED_STRUCTURE : maillage structuré.
  - Si la dimension de l'espace du domaine de calcul est différente de celle du maillage (on peut avoir un maillage 2D dans un espace de dimension 3), il est possible d'écrire la dimension de cet espace avec la routine MEDdimEspaceCr/efespc. L'écriture dans un maillage de la dimension de l'espace ne doit avoir lieu que si cette dimension est différente de celle du maillage. Par défaut, on considère que les 2 dimensions sont les mêmes.
  - La routine MEDnatureGrilleEcr/efnage permet d'écrire dans un maillage de type MED_STRUCTURE le type de grille qui lui correspond. On distingue les types suivants :
    - MED_GRILLE_CARTESIENNE : grille cartésienne.
    - MED_GRILLE_POLAIRE : grille polaire.
    - MED_GRILLE_STANDARD : grille standard.
- A la lecture :
  - La routine MEDnMaa/efnmaa permet de lire le nombre total de maillage dans un fichier MED.
  - Dès que l'on connait le nombre de maillage, il est possible d'accéder au nom et aux informations sur chaque maillage à partir d'une boucle : Si on a "N" maillages, cette boucle ira de 1 à N.
    - Pour identifier le maillage associé à l'indice de boucle, il faut utiliser la routine MEDmaaInfo/efmaai qui va lire :
      - Le nom utilisateur du maillage.
      - La dimension .
      - Le type (MED_STRUCTURE ou MED_NON_STRUCTURE).
      - La description associée.
    - La dimension de l'espace du domaine de calcul peut être est différente de celle du maillage (on peut avoir un maillage 2D dans un espace de dimension 3). Il est possible de lire la dimension de cet espace avec la routine MEDdimEspaceLire/efespl. Par défaut, si la dimension de l'espace n'est pas présente dans un maillage, on considère qu'elle est égale à celle du maillage.
    - La routine MEDnatureGrilleLire/efnagl permet de lire dans un maillage de type MED_STRUCTURE le type de grille qui lui correspond. On distingue les types suivants :
      - MED_GRILLE_CARTESIENNE : grille cartésienne.
      - MED_GRILLE_POLAIRE : grille polaire.
      - MED_GRILLE_STANDARD : grille standard.

#### Simplification de la définition de la connectivité des mailles

##### Rappel du mode en vigueur dans MED-fichier V2.1

Avec MED-fichier V2.1, il fallait appliquer la convention suivante pour la définition du tableau de connectivité des éléments d'un maillage non structuré qui était passé en paramètres aux routines MEDconnEcr/efcone, MEDconnLire/efconl, MEDelementsEcr/efelee et MEDelementsLire/efelel :

- Le tableau des connectivités est un tableau à 1 dimension de taille égale à "n * T" où T est la taille de l'entité géométrique.
- Le mode de stockage du tableau en mémoire est soit MED_FULL_INTERLACE, soit MED_NO_INTERLACE.
- Le type de connectivité peut-être : nodale (MED_NOD) ou descendante (MED_DESC).
- Règles à appliquer pour définir la taille mémoire "T" nécessaire au stockage de la connectivité d'une entité géométrique :

  Pour calculer la taille "t" d'une entité géométrique dans le tableau de connectivité, on adopte les conventions suivantes :

  1. Dans le cas de la connectivité nodale :"t" = nombre de noeuds.
  2. Dans le cas de la connectivité descendante :
     1. Entité de dimension 3 : "t" = nombre de faces.
     2. Entité de dimension 2 : "t" = nombre d'arêtes
     3. Entité de dimension 1 : "t" = nombre de noeuds.

  On a alors "T" = "t" .

  Pour un maillage de dimension 3, si on y place des mailles de dimension 2 ou 1 (mais également pour un maillage de dimension 2 avec des mailles de dimension 1), on doit pour ces mailles allouer un entier supplémentaire qui permet d'indiquer une coïncidence avec une face (ou une arête) d'une maille de dimension supérieure. Ce numéro correspondant au numéro de la face ou de l'arête avec laquelle la maille de dimension inférieure coïncide, est signé pour indiquer l'orientation de la maille par rapport à la face (ou de l'arête). On a donc alors "T" = "t" + 1.

  Le renseignement de ce numéro n'est pas obligatoire : on y place alors la valeur 0. Cependant l'allocation de cet entier supplémentaire même non renseigné est obligatoire à la fois en connectivité nodale et descendante.

  Les mailles de dimensions 0 ne sont pas concernées.

  Exemple : pour une maille MED_TRIA3 en connectivité descendante dans un maillage de dimension "D"=3, on a "T" = 3 (nombre d'arête) + 1 (numéro de face d'une maille de dimension 3 ou la valeur 0).

##### Nouveau mode en vigueur dans MED-fichier V2.2

Par rapport à MED-fichier V2.1, la définition du tableau de connectivité a été simplifiée : il n'est plus nécessaire pour les mailles dont la dimension est inférieure à celle du maillage de définir l'entier supplémentaire qui permettait d'indiquer une coïncidence avec une face (ou une arête) d'une maille de dimension supérieure. Cette convention a été supprimée.

La convention suivante est désormais à appliquer pour la définition du tableau de connectivité des éléments d'un maillage non structuré qui est passé en paramètres aux routines MEDconnEcr/efcone, MEDconnLire/efconl, MEDelementsEcr/efelee et MEDelementsLire/efelel :

- Le tableau des connectivités est un tableau à 1 dimension de taille égale à "n * T" où n est le nombre d'éléments et T correspond à la taille mémoire (nombre d'entiers) nécessaire au stockage de la connectivité de l'entité géométrique considérée.
- Le mode de stockage du tableau des connectivités en mémoire est soit MED_FULL_INTERLACE, soit MED_NO_INTERLACE.
- Le type de connectivité peut-être : nodale (MED_NOD) ou descendante (MED_DESC).
- Règles à appliquer pour définir la taille mémoire "T" nécessaire au stockage de la connectivité d'une entité géométrique :
  Pour calculer la taille "T" d'une entité géométrique dans le tableau de connectivité, on adopte les conventions suivantes :
  1. Dans le cas de la connectivité nodale :"T" = nombre de noeuds.
  2. Dans le cas de la connectivité descendante :
     1. Entité de dimension 3 : "T" = nombre de faces.
     2. Entité de dimension 2 : "T" = nombre d'arêtes.
     3. Entité de dimension 1 : "T" = nombre de noeuds.

#### Simplification des conventions sur les noms des familles de noeuds et d'éléments

##### Rappel du mode en vigueur dans MED-fichier V2.1

Avec MED-fichier V2.1, les familles étaient identifiées par un nom qui devait être unique pour un maillage donné.

##### Nouveau mode en vigueur dans MED-fichier V2.2

Désormais avec MED-fichier V2.2, une famille de noeuds peut porter le même nom qu'une famille d'éléments.

##### Informations supplémentaires

Les conventions sur la définition des familles d'un maillage MED V2.2 sont les suivantes :

- On trouve dans un maillage :
  - La famille de numéro 0 qui ne comporte aucun attribut ni groupe.
  - Zéro ou plusieurs familles des noeuds dont le numéro doit être strictement positif.
  - Zéro ou plusieurs familles d'éléments (mailles/faces/arêtes) dont le numéro doit être strictement négatif.
- La définition de la famille vide de numéro 0 est obligatoire, elle constitue la famille de référence pour tous les noeuds et les éléments qui n'appartiennent à aucun groupe et n'ont aucun attribut.
- Une famille de noeuds peut porter le même nom qu'un famille d'éléments. Par contre les familles d'éléments (respectivement de noeuds) doivent toutes avoir des noms différents.
- Le numéro de famille est le lien existant entre la famille considérée et une entité du maillage (noeud, maille, face ou arête). Ce numéro doit être unique pour chaque famille d'un maillage.

#### Clarification de l'API sur les familles

##### Rappel du mode en vigueur dans MED-fichier V2.1

Avec MED-fichier V2.1, la routine MEDnFam/efnfam permettait de lire dans un maillage selon la valeur du dernier paramètre :

- 0 : Le nombre de famille du maillage.
- MED_ATTR : Le nombre d'attribut dans une famille.
- MED_GROUPE : Le nombre de groupe dans une famille.

##### Nouveau mode en vigueur dans MED-fichier V2.2

La routine MEDnFam/efnfam a été éclatée en 3 routines différentes :

- La routine MEDnFam/efnfam ne permet plus que de lire le nombre de famille dans un maillage.
- La routine MEDnAttribut/efnatt permet de lire le nombre d'attribut dans une famille.
- La routine MEDnGroupe/efngro permet de lire le nombre de groupe dans une famille.

#### Nouveau mode d'accès aux valeurs des champs

##### Rappel du mode en vigueur dans MED-fichier V2.1

Avec MED-fichier V2.1, le mode d'accès aux champs de résultat est le suivant :

- A l'écriture :
  - La routine MEDchampCr/efchac permet de créer un champ.
  - La routine MEDchampEcr/efchae permet d'écrire des valeurs du champ pour chaque type d'entité du maillage. Les valeurs peuvent porter sur :
    - Les noeuds.
    - Les éléments.
    - Les points de Gauss des éléments.
    Ces valeurs peuvent être associées à
    - Une séquence de calcul : pas de temps et/ou numéro d'ordre.
    - Une référence à un profil : sélection selon une composante du champ et/ou un sous-ensemble des entités d'un même type géométrique.
- A la lecture :
  - La routine MEDnChamp/efncha permet de lire le nombre de champ dans un fichier.
  - Pour chaque champ :
    - La routine MEDnChamp/efncha permet de lire le nombre de composante du champ.
    - La routine MEDchampInfo/efchai permet de lire les informations du champ : nom, type, nom(s) et unité(s) de(s) composante(s).
    - Pour chaque type d'entité (noeuds, maille, face, arête) :
      - La routine MEDnPasdeTemps/efnpdt permet de lire le nombre de séquence de calcul (pas de temps).
      - Pour chaque séquence de calcul (pas de temps) :
        - La routine MEDpasdetempsInfo/efpdti permet de lire les informations sur la séquence de calcul (pas de temps) et les valeurs à lire : valeur, unité, numéro du pas de temps, numéro d'ordre, nombre de points de Gauss, nom du maillage sur lequel portent les valeurs.
        - La routine MEDnVal/efnval permet de lire le nombre de valeurs à lire pour la séquence.
        - La routine MEDchampLire/efchal permet de lire les valeurs selon un éventuel profil.
        - Si un profil est renvoyé, lire le profil.

##### Nouveau mode en vigueur dans MED-fichier V2.2

Trois évolutions importantes sont fournies par MED-fichier V2.2 :

1. Pour un même type d'entité et pour une même séquence de calcul, il est possible d'écrire des valeurs portant sur les entités de plusieurs maillages.
2. A une séquence de calcul donnée, un type d'entité donné et pour un maillage donné, on peut référencer un élément de référence fournissant la localisation des points de Gauss.
3. Un maillage référencé dans une séquence de calcul peut être stocké dans un autre fichier que celui du champ. Pour indiquer que ce fichier est distant, il faut définir un lien vers un fichier distant.

Le nouveau mode d'accès aux champs de résultats est donc désormais le suivant :

- A l'écriture :
  - La routine MEDchampCr/efchac permet de créer un champ.
  - La routine MEDchampEcr/efchae permet d'écrire des valeurs du champ pour chaque type d'entité d'un maillage. Les valeurs peuvent porter sur :
    - Les noeuds.
    - Les éléments.
    - Les points de Gauss des éléments.
    Ces valeurs peuvent être associées à
    - Une séquence de calcul : pas de temps et/ou numéro d'ordre.
    - Une référence à un profil : sélection selon une composante du champ et/ou un sous-ensemble des entités d'un même type géométrique.
    - Une référence à un élément de référence de la localisation des points de Gauss.
    Informations importantes :
    - Le maillage référencé peut être stocké dans un autre fichier que celui du champ.
    - Pour un même type d'entité et pour une même séquence de calcul, il est possible d'écrire des valeurs portant sur les entités de plusieurs maillages. Le premier appel à MEDchampEcr/efchae pour une même séquence de calcul sur un type d'entité définit le maillage par défaut.
    - A une séquence de calcul donnée, un type d'entité donné et pour un maillage donné, on ne peut référencer qu'un seul profil. Avec un profil, il existe deux modes de définition du tableau des valeurs :
      1. MED_COMPACT : seules les valeurs relatives au profil sont présentes en mémoire.
      2. MED_GLOBAL : la totalité des valeurs du champ sont présentes en mémoire. La routine va sélectionner les valeurs à écrire selon les numéros définis dans le profil.
- A la lecture :
  - La routine MEDnChamp/efncha permet de lire le nombre de champ dans un fichier.
  - Pour chaque champ :
    - La routine MEDnChamp/efncha permet de lire le nombre de composante du champ.
    - La routine MEDchampInfo/efchai permet de lire les informations du champ : nom, type, nom(s) et unité(s) de(s) composante(s).
    - Pour chaque type géométrique d'entité fournis par le modèle MED (noeuds, maille, face, arête) :
      - La routine MEDnPasdeTemps/efnpdt permet de lire le nombre de séquence de calcul (pas de temps).
      - Pour chaque séquence de calcul (pas de temps et/ou numéro d'ordre) :
        - La routine MEDpasdetempsInfo/efpdti permet de lire les informations sur la séquence de calcul (pas de temps) et les valeurs à lire : valeur du pas de temps, unité du pas de temps, numéro d'ordre associé, nom du maillage par défaut sur lequel portent les valeurs, nombre de maillages référencés dans cette séquence.
        - Pour chaque maillage référencé dans la séquence de calcul :
          - La routine MEDchampRefInfo/efrefi permet de lire les informations sur le maillage référencé (nom, localisation, nombre de points de Gauss).
          - Si le maillage n'est pas local, on peut accéder au lien sur fichier distant qui indique dans quel fichier il se trouve.
          - La routine MEDnVal/efnval permet de lire le nombre valeurs à lire en mémoire.
          - La routine MEDchampLire/efchal permet de lire des valeurs selon un éventuel profil.
          - Si un profil est renvoyé, lire le profil.

# Evolutions apportées aux utilitaires

### Utilitaire MDUMP

L'utilitaire mdump prend compte l'ensemble des évolutions du modèle et fonctionnelles pré-citées. Vous pouvez consulter les sources C de cet utilitaire capable de lire et d'afficher à l'écran l'intégralité du contenu de n'importe quel fichier au format MED V2.2.

### Utilitaire MEDCONFORME

L'utilitaire medconforme permet de vérifier la conformité d'un fichier MED vis-à-vis de la bibliothèque MED-fichier V2.2.

Pour un fichier donné, l'utilitaire medconforme :

- Précise à quelle version de MED-fichier, medconforme est associé (ici MED-fichier V2.2.2).
- Vérifie le format du fichier (HDF) passé en paramètre (est-il au format HDF V5 ?).
- Vérifie si le fichier a été créé avec la même version de la bibliothèque MED-fichier (MED V2.2).

### Utilitaire MEDIMPORT

Le nouvel utilitaire medimport qui est livré avec la bibliothèque permet de convertir un fichier au format MED V2.1 dans un fichier au format MED V2.2.

Exemple d'utilisation :

    medimport foo.med

Pour un fichier MED V2.1 "foo.med", l'utilitaire va créer un fichier "foo.med2.2" qui sera le résultat de la conversion de "foo.med" au format MED V2.2.

Sont convertis :

- Les maillages non structurés.
- Les champs de résultats.
- Les profils éventuels.

Exemple de traces d'exécution :

# Mettre à jour une interface MED-fichier V2.1

### Droits d'accès aux données

Il faut tout d'abord mettre à jour le mode d'accès aux données. Pour cela, il faut :

1. Préciser les mode d'ouverture du fichier dans la routine MEDouvrir/efouvr selon le mode d'accès souhaité. Nous rappelons que les différents modes d'accès possibles sont :
   - 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.
2. Retirer le paramètre mode des appels aux routines suivantes :
   - MEDchampEcr/efchae
   - MEDconnEcr/efcone
   - MEDcoordEcr/efcooe
   - MEDelementsEcr/efelee
   - MEDequivEcr/efeque
   - MEDfamEcr/effame
   - MEDfichDesEcr/effide
   - MEDnoeudsEcr/efnoee
   - MEDnomEcr/efnome
   - MEDnumEcr/efnume

### Taille des noms et des unités

La taille des noms et unités passant de 8 à 16 caractères, il faut prendre en compte cette évolution à l'écriture et à la lecture :

1. Des coordonnées des noeuds d'un maillage : Les routines impactées sont alors MEDcoordEcr/efcooe, MEDcoordLire/efcool, MEDnoeudsEcr/efnoee et MEDnoeudsLire/efnoel.
2. Des composantes d'un champ : Les routines impactées sont alors MEDchampCr/efchac et MEDchampInfo/efchai.
3. Des noms des entités : Les routines impactées sont alors MEDnomEcr/efnome, MEDnomLire/efnoml, MEDnoeudsEcr/efnoee,MEDnoeudsLire/efnoel, MEDelementsEcr/efele,MEDelementsLire/efell.

### Accès aux différents types de maillage

On doit désormais distinguer les maillages structurés (MED_STRUCTURE) des maillages non structurés (MED_NON_STRUCTURE).

On a 2 possibilités :

1. Prendre en compte ces deux types de maillages : SCENARIO 1.
2. Continuer à ne pas prendre en compte que les maillages non structurés : SCENARIO 2.

- APPLICATION du SCENARIO 1 :
  - A l'écriture :
    - La routine MEDmaaCr/efmaac permet de créer un maillage dans un fichier MED. Lors de la création d'un maillage, on écrit également dans le fichier les paramètres de base qui permettent de caractériser ce maillage à savoir son nom, sa dimension et son type qui peut prendre les valeurs :
      - MED_NON_STRUCTURE : maillage non structuré.
      - MED_STRUCTURE : maillage structuré.
    - Si la dimension de l'espace du domaine de calcul est différente de celle du maillage (on peut avoir un maillage 2D dans un espace de dimension 3), il est possible d'écrire la dimension de cet espace avec la routine MEDdimEspaceCr/efespc. L'écriture dans un maillage de la dimension de l'espace ne doit avoir lieu que si cette dimension est différente de celle du maillage. Par défaut, on considère que les 2 dimensions sont les mêmes.
    - La routine MEDnatureGrilleEcr/efnage permet d'écrire dans un maillage de type MED_STRUCTURE le type de grille qui lui correspond. On distingue les types suivants :
      - MED_GRILLE_CARTESIENNE : grille cartésienne.
      - MED_GRILLE_POLAIRE : grille polaire.
      - MED_GRILLE_STANDARD : grille standard.
  - A la lecture :
    - La routine MEDnMaa/efnmaa permet de lire le nombre total de maillage dans un fichier MED.
    - Dès que l'on connait le nombre de maillage, il est possible d'accéder au nom et aux informations sur chaque maillage à partir d'une boucle : Si on a "N" maillages, cette boucle ira de 1 à N.
      - Pour identifier le maillage associé à l'indice de boucle, il faut utiliser la routine MEDmaaInfo/efmaai qui va lire :
        - Le nom utilisateur du maillage.
        - La dimension .
        - Le type (MED_STRUCTURE ou MED_NON_STRUCTURE).
        - La description associée.
      - La dimension de l'espace du domaine de calcul peut être est différente de celle du maillage (on peut avoir un maillage 2D dans un espace de dimension 3). Il est possible de lire la dimension de cet espace avec la routine MEDdimEspaceLire/efespl. Par défaut, si la dimension de l'espace n'est pas présente dans un maillage, on considère qu'elle est égale à celle du maillage.
      - Dans le cas d'un maillage structuré, la routine MEDnatureGrilleLire/efnagl permet de lire dans un maillage de type MED_STRUCTURE le type de grille qui lui correspond. On distingue les types suivants :
        - MED_GRILLE_CARTESIENNE : grille cartésienne.
        - MED_GRILLE_POLAIRE : grille polaire.
        - MED_GRILLE_STANDARD : grille standard.
- APPLICATION DU SCENARIO 2 :
  - A l'écriture :
    - La routine MEDmaaCr/efmaac permet de créer un maillage dans un fichier MED. Lors de la création d'un maillage, on écrit également dans le fichier les paramètres de base qui permettent de caractériser ce maillage à savoir son nom, sa dimension et son type : MED_NON_STRUCTURE (maillage non structuré).
    - Si la dimension de l'espace du domaine de calcul est différente de celle du maillage (on peut avoir un maillage 2D dans un espace de dimension 3), il est possible d'écrire la dimension de cet espace avec la routine MEDdimEspaceCr/efespc. L'écriture dans un maillage de la dimension de l'espace ne doit avoir lieu que si cette dimension est différente de celle du maillage. Par défaut, on considère que les 2 dimensions sont les mêmes.
  - A la lecture :
    - La routine MEDnMaa/efnmaa permet de lire le nombre total de maillage dans un fichier MED.
    - Dès que l'on connait le nombre de maillage, il est possible d'accéder au nom et aux informations sur chaque maillage à partir d'une boucle : Si on a "N" maillages, cette boucle ira de 1 à N.
      - Pour identifier le maillage associé à l'indice de boucle, il faut utiliser la routine MEDmaaInfo/efmaai qui va lire :
        - Le nom utilisateur du maillage.
        - La dimension .
        - Le type (MED_STRUCTURE ou MED_NON_STRUCTURE).
        - La description associée.
        Dans le cas où le maillage est de type MED_STRUCTURE, il faut générer une erreur ou un avertissement.
      - La dimension de l'espace du domaine de calcul peut être est différente de celle du maillage (on peut avoir un maillage 2D dans un espace de dimension 3). Il est possible de lire la dimension de cet espace avec la routine MEDdimEspaceLire/efespl. Par défaut, si la dimension de l'espace n'est pas présente dans un maillage, on considère qu'elle est égale à celle du maillage.

Remarques :

- Si vous avez choisi le scénario 2, l'accès aux entités, familles, équivalences d'un maillage reste identique.
- Si vous avez choisi le scénario 1, l'accès aux entités, familles, équivalences d'un maillage MED_NON_STRUCTURE reste identique. Par contre vous devez définir l'accès aux maillages structurés

### Accès aux maillages structurés

Cette section n'est à prendre en compte que si vous avez choisi le scénario 1.

Un maillage structuré (MED_STRUCTURE) est uniquement défini par ses noeuds. La définition de la connectivité des éléments est implicite. L'ensemble des conventions (indexation, numérotation des noeuds et des éléments, définition des coordonnées) sur les maillages structurés sont décrites dans le modèle de données.

Pour un grille de type MED_GRILLE_STANDARD, on doit pouvoir écrire/lire dans un fichier MED :

- La structure des coordonnées de la grille et les coordonnées des noeuds du maillage. Il faut donc prendre en compte les routines suivantes :
  - A l'écriture :
    - La routine MEDstructureCoordEcr/efscoe permet de définir la structure des coordonnées d'une grille de type MED_GRILLE_STANDARD.
    - La routine MEDcoordEcr/efcooe permet ensuite d'écrire les coordonnées des noeuds du maillage.
  - A la lecture :
    - La routine MEDnEntMaa/efnema permet de lire le nombre de noeuds dans un maillage structuré (MED_STRUCTURE) correspondant à une grille de type MED_GRILLE_STANDARD.
    - La routine MEDstructureCoordLire/efscol permet de lire la structure des coordonnées d'une grille de type MED_GRILLE_STANDARD.
    - La routine MEDcoordLire/efcool permet ensuite de lire les coordonnées des noeuds du maillage.
- Les noms des noeuds et des éléments (optionnel).
- Les numéros des noeuds et des éléments (optionnel).
- Les numéros de famille de noeuds et des éléments.
- Les familles de noeuds et d'éléments.

Pour une grille de type MED_GRILLE_CARTESIENNE ou MED_GRILLE_POLAIRE, on doit pouvoir écrire/lire dans un fichier MED :

- Les indices de coordonnées selon chacun des axes. Il faut donc prendre en compte les routines suivantes :
  - L'écriture des coordonnées d'un maillage structuré correspondant à une grille MED_GRILLE_CARTESIENNE ou MED_GRILLE_POLAIRE ne nécessite que l'écriture des indices de coordonnées selon chacun des axes de la grille. La routine MEDindicesCoordEcr/eficoe permet l'écriture des indices d'un axe donné. Il faut appeler cette routine pour chacun des axes de la grille.
  - La lecture se fait axe d'indices de coordonnées par axe d'indices de coordonnées. Pour un axe donné, il s'agit de :
    - Lire le nombre d'indice sur l'axe. La routine MEDnEntMaa/efnema permet de lire cette information.
    - Allouer la mémoire nécessaire au stockage des indices.
    - Lire les indices de coordonées de l'axe. La routine MEDindicesCoordLire/eficol pemet de réaliser cette opération.
- Les noms des noeuds et des éléments (optionnel).
- Les numéros des noeuds et des éléments (optionnel).
- Les numéros de famille de noeuds et des éléments.
- Les familles de noeuds et d'éléments.

Remarques : Au même titre que pour les maillages MED_NON_STRUCTURE,

- Pour écrire/lire les noms des noeuds et des éléments, il faut utiliser les routines MEDnomEcr/efnome et MEDnomLire/efnoml.
- Pour écrire/lire les numéros des noeuds et des éléments, il faut utiliser les routines MEDnumEcr/efnume et MEDnumLire/efnuml.
- Pour écrire/lire les numéros de famille des noeuds et des éléments, il faut utiliser les routine MEDfamEcr/effame et MEDfamLire/effaml.
- Pour écrire et lire les familles de noeuds et d'éléments, il faut utilisr les routines : MEDfamCr/effamc, MEDnFam/efnfam, MEDnGroupe/efngro, MEDnAttribut/efnatt et MEDfamInfo/effami.

### Accès à la connectivité des éléments

La définition du tableau de connectivité a été simplifiée : il n'est plus nécessaire pour les mailles dont la dimension est inférieure à celle du maillage de définir l'entier supplémentaire qui permettait d'indiquer une coïncidence avec une face (ou une arête) d'une maille de dimension supérieure. Cette convention a été supprimée.

La convention suivante est désormais à appliquer pour la définition du tableau de connectivité des éléments d'un maillage non structuré qui est passé en paramètres aux routines MEDconnEcr/efcone, MEDconnLire/efconl, MEDelementsEcr/efelee et MEDelementsLire/efelel :

- Le tableau des connectivités est un tableau à 1 dimension de taille égale à "n * T" où n est le nombre d'éléments et T correspond à la taille mémoire (nombre d'entiers) nécessaire au stockage de la connectivité de l'entité géométrique considérée.
- Le mode de stockage du tableau des connectivités en mémoire est soit MED_FULL_INTERLACE, soit MED_NO_INTERLACE.
- Le type de connectivité peut-être : nodale (MED_NOD) ou descendante (MED_DESC).
- Règles à appliquer pour définir la taille mémoire "T" nécessaire au stockage de la connectivité d'une entité géométrique :
  Pour calculer la taille "T" d'une entité géométrique dans le tableau de connectivité, on adopte les conventions suivantes :
  1. Dans le cas de la connectivité nodale :"T" = nombre de noeuds.
  2. Dans le cas de la connectivité descendante :
     1. Entité de dimension 3 : "T" = nombre de faces.
     2. Entité de dimension 2 : "T" = nombre d'arêtes.
     3. Entité de dimension 1 : "T" = nombre de noeuds.

### Accès à la connectivité des polyèdres et des polygones

On a 2 possibilités :

1. Prendre en compte les polyèdres et les polygones quelconques : SCENARIO 3.
2. Continuer à ne pas prendre en compte que les éléments géométriques pré-définis : SCENARIO 4.

- APPLICATION du SCENARIO 3 :
  - A l'écriture :
    - L'écriture de la connectivité des mailles de type MED_POLYEDRE est réalisée par la routine MEDpolyedreConnEcr/efpece.
    - L'écriture de la connectivité des mailles/faces de type MED_POLYGONE est réalisée par la routine MEDpolygoneConnEcr/efpgce.
  - A la lecture :
    - Pour récupérer le nombre de polyèdres, il faut utiliser la routine MEDnEntMaa/efnema. La lecture de la connectivité des mailles de type MED_POLYEDRE est réalisée par 2 routines :
      - La routine MEDpolyedreInfo/efpyei permet de lire la taille des tableaux qu'il faudra passer en paramètre à la routine MEDpolyedreConnLire/efpecl.
      - La routine MEDpolyedreConnLire/efpecl va lire dans le maillage la connectivité des mailles polyèdres.
    - Pour récupérer le nombre de polygones, il faut utiliser la routine MEDnEntMaa/efnema. La lecture de la connectivité des mailles/faces de type MED_POLYGONE est réalisée par 2 routines :
      - La routine MEDpolygoneInfo/efpygi permet de lire la taille des tableaux qu'il faudra passer en paramètre à la routine MEDpolygoneConnLire/efpgcl.
      - La routine MEDpolygoneConnLire/efpgcl va lire dans le maillage la connectivité des mailles/faces polygones.
- APPLICATION du SCENARIO 4 :
  - A l'écriture :
    - On ne change rien.
  - A la lecture :
    - Pour récupérer le nombre de polyèdres, il faut utiliser la routine MEDnEntMaa/efnema. Si ce nombre est positif il faut générer une erreur ou émettre un avertissement.
    - Pour récupérer le nombre de polygones, il faut utiliser la routine MEDnEntMaa/efnema. Si ce nombre est positif il faut générer une erreur ou émettre un avertissement.

Remarques :

- Pour écrire/lire les noms, les numéros et les numéros de familles des polyèdres et polygones, il faut utiliser les mêmes routines que pour les autres types d'éléments.

### Accès aux familles d'entités

A la lecture des familles d'un maillage, il faut mettre à jour les appels à la routine MEDnFam/efnfam qui a été éclatée en 3 routines différentes :

- La routine MEDnFam/efnfam ne permet plus que de lire le nombre de famille dans un maillage.
- La routine MEDnAttribut/efnatt permet de lire le nombre d'attribut dans une famille.
- La routine MEDnGroupe/efngro permet de lire le nombre de groupe dans une famille.

### Accès aux champs de résultat

Il s'agit de prendre en compte les trois évolutions importantes fournies par MED-fichier V2.2 :

1. Pour un même type d'entité et pour une même séquence de calcul, il est possible d'écrire des valeurs portant sur les entités de plusieurs maillages.
2. A une séquence de calcul donnée, un type d'entité donné et pour un maillage donné, on peut référencer un élément de référence fournissant la localisation des points de Gauss (voir la suite du document).
3. Un maillage référencé dans une séquence de calcul peut être stocké dans un autre fichier que celui du champ. Pour indiquer que ce fichier est distant, il faut définir un lien vers un fichier distant (voir la suite du document).

Le nouveau mode d'accès aux champs de résultats est donc désormais le suivant :

- A l'écriture :
  - La routine MEDchampCr/efchac permet de créer un champ.
  - La routine MEDchampEcr/efchae permet d'écrire des valeurs du champ pour chaque type d'entité d'un maillage. Les valeurs peuvent porter sur :
    - Les noeuds.
    - Les éléments.
    - Les points de Gauss des éléments.
    Ces valeurs peuvent être associées à
    - Une séquence de calcul : pas de temps et/ou numéro d'ordre.
    - Une référence à un profil : sélection selon une composante du champ et/ou un sous-ensemble des entités d'un même type géométrique.
    - Une référence à un élément de référence de la localisation des points de Gauss.
    Informations importantes :
    - Le maillage référencé peut être stocké dans un autre fichier que celui du champ.
    - Pour un même type d'entité et pour une même séquence de calcul, il est possible d'écrire des valeurs portant sur les entités de plusieurs maillages. Le premier appel à MEDchampEcr/echae pour une même séquence de calcul sur un type d'entité définit le maillage par défaut.
    - A une séquence de calcul donnée, un type d'entité donné et pour un maillage donné, on ne peut référencer qu'un seul profil. Avec un profil, il existe deux modes de définition du tableau des valeurs :
      1. MED_COMPACT : seules les valeurs relatives au profil sont présentes en mémoire.
      2. MED_GLOBAL : la totalité des valeurs du champ sont présentes en mémoire. La routine va sélectionner les valeurs à écrire selon les numéros définis dans le profil.
- A la lecture :
  - La routine MEDnChamp/efncha permet de lire le nombre champ dans un fichier.
  - Pour chaque champ :
    - La routine MEDnChamp/efncha permet de lire le nombre de composante du champ.
    - La routine MEDchampInfo/efchai permet de lire les informations du champ : nom, type, nom(s) et unité(s) de(s) composante(s).
    - Pour chaque type géométrique d'entité fournis par le modèle MED (noeuds, maille, face, arête) :
      - La routine MEDnPasdeTemps/efnpdt permet de lire le nombre de séquence de calcul (pas de temps).
      - Pour chaque séquence de calcul (pas de temps et/ou numéro d'ordre) :
        - La routine MEDpasdetempsInfo/efpdti permet de lire les informations sur la séquence de calcul (pas de temps) et les valeurs à lire : valeur du pas de temps, unité du pas de temps, numéro d'ordre associé, nom du maillage par défaut sur lequel portent les valeurs, nombre de maillages référencés dans cette séquence.
        - Pour chaque maillage référencé dans la séquence de calcul :
          - La routine MEDchampRefInfo/efrefi permet de lire les informations sur le maillage référencé (nom, localisation, nombre de points de Gauss).
          - Si le maillage n'est pas local, on peut accéder au lien sur fichier distant qui indique dans quel fichier il se trouve.
          - La routine MEDnVal/efnval permet de lire le nombre valeurs à lire en mémoire.
          - La routine MEDchampLire/efchal permet de lire des valeurs selon un éventuel profil.
          - Si un profil est renvoyé, lire le profil.

### Prise en compte des liens sur fichier distant

On a 2 possibilités :

1. Prendre en compte les liens sur fichier distant : SCENARIO 5.
2. Ne pas prendre en compte les liens sur fichier distant : SCENARIO 6.

- APPLICATION du SCENARIO 5 :
  - A l'écriture : Vous pouvez choisir d'écrire vos résultats dans un fichier et vos maillages dans un autre. La routine MEDlienEcr/efliee permet de créer et écrire un lien sur un fichier distant dans le fichier courant lorsque vous écrivez un résultat qui porte sur un maillage défini dans un autre fichier que celui du champ.
  - A la lecture : Vous devez prendre en compte les liens vers fichiers distants éventuels.
    - La routine MEDnLien/efnlie permet de lire le nombre de liens sur fichier distant dans un fichier.
    - La routine MEDlienInfo/efliei permet de lire les informations sur un lien vers un fichier distant (nom du lien, taille du lien).
    - La routine MEDnValLien/efnvli permet de lire la taille d'un lien dont on connait le nom : la taille lue est celle de la chaîne de caractères correspondant aux chemin d'accès et au nom du fichier distant.
    - La routine MEDlienLire/efliel permet de lire un lien sur un fichier distant dans le fichier courant.
- APPLICATION du SCENARIO 6 :
  - A l'écriture : il n'y a rien à faire.
  - A la lecture : A la lecture d'un champ de résultat, si les informations renvoyées vous indiquent, que le maillage référencé n'est pas dans le fichier courant et que vous voulez accéder au maillage, vous devez renvoyer un erreur.

- Si vous choisissez le scénario 5 et que vous voulez accéder à partir du fichier courant, au contenu d'un fichier distant, vous devez utiliser les fonctionnalités de montage de fichier fournies par les routines.
  - MEDmonter/efmont.
  - MEDdemonter/efdemo.
- La nature de la localisation d'un maillage référencé dans un champ de résultat est fournie par la routine MEDpasdetempsInfo/efpdti pour le maillage par défaut et par la routine MEDchampRefInfo/efrefi pour tous les maillages.

### Prise en compte de la localisation des points de Gauss

La prise en compte de la localisation des points de Gauss est obligatoire si vous devez échanger des champs de résultats dont les valeurs peuvent porter sur les points de Gauss des éléments.

Vous devez donc prendre en compte les routines fournies par l'API de MED-fichier V2.2 :

- A l'écriture :
  - La routine MEDgaussEcr/efgaue permet de créer et d'écrire dans un fichier MED un élément de référence de localisation des points de Gauss pour un type géométrique donné.
- A la lecture :
  - La routine MEDnGauss/efngau permet de lire dans un fichier le nombre d'élément de référence de localisation des points de Gauss.
  - La routine MEDGaussInfo/efgaui permet de lire les informations sur un élément de référence de localisation des points de Gauss pour un type géométrique donné.
  - La routine MEDgaussLire/efgaul permet de lire dans un fichier MED un élément de référence de localisation des points de Gauss pour un type géométrique donné.

### Prise en compte des variables scalaire

On a 2 possibilités :

- La première est de ne pas prendre en compte les variables scalaires. Dans ce cas de figure, on ne change rien à l'interface.
- La seconde est de pouvoir écrire/lire ces variables.

Dans cette seconde optique, vous devez prendre en compte les routines sur les variables scalaires fournies par MED-fichier V2.2 :

- A l'écriture :
  - La routine MEDscalaireCr/efscac permet de créer une variable scalaire dans un fichier.
  - La routine MEDscalaireEntierEcr/efscee permet d'écrire une valeur dans une variable scalaire de type entier.
  - La routine MEDscalaireFlottantEcr/efscfe permet d'écrire une valeur dans une variable scalaire de type réel.
- A la lecture :
  - La routine MEDnScalaire/efnsca permet de lire le nombre de variables scalaire dans un fichier.
  - La routine MEDscalaireInfo/efscai permet de lire les informations sur une variable scalaire.
  - La routine MEDnScalairePasdeTemps/efnspd permet de lire le nombre de pas de temps dans une variable scalaire.
  - La routine MEDscalairePasdetempsInfo/efspdi permet de lire les informations sur un pas de temps. Il s'agit en fait d'un couple (pas de temps, numéro d'ordre).
  - La routine MEDscalaireEntierLire/efscel permet de lire une valeur dans une variable scalaire de type entier.
  - La routine MEDscalaireFlottantLire/efscfl permet de lire une valeur dans une variable scalaire de type réel.