##
Documentation de la bibliothèque MED-fichier V2.3 : Guide d'utilisation - Module "MED_Champ".

Sommaire de la page

- Routines disponibles
- Modèles de programmation
  - Créer un champ dans un fichier
  - Ecrire des valeurs de résultat dans un champ
  - Créer un lien vers un fichier distant
  - Accéder dans un fichier aux liens vers des fichiers distants
  - Lire le nombre de liens vers des fichiers distants dans un fichier
  - Lire les informations sur un lien vers un fichier distant
  - Lire la taille d'un lien vers un fichier distant
  - Lire un lien vers un fichier distant
  - Accéder aux champs de résultat dans un fichier
  - Lire le nombre de champ dans un fichier ou de composantes dans un champ
  - Lire les informations sur un champ
  - Lire le nombre de pas de temps (séquence de calcul) dans un champ
  - Lire les informations sur un pas de temps (séquence de calcul)
  - Lire le nombre de maillages référencés dans un pas de temps (séquence de calcul)
  - Lire les informations sur les valeurs référencées par un maillage dans une séquence de calcul
  - Lire le nombre de valeur à lire pour un type géométrique d'entité, une séquence de calcul et un maillage donnés
  - Lire des valeurs de résultat dans un champ
- Exemples de programmation
  - Exemple de création de champs dans un fichier
  - Exemple de lecture des champs dans un fichier
- Convention sur la définition des champs de résultats

Retour à la page de garde du guide d'utilisation

# Routines disponibles

Les routines disponibles permettent de :

- Créer un champ.
- Créer un lien vers un fichier distant (les résultats peuvent porter sur les entités d'un maillage stocké dans un fichier distant).
- Ecrire des valeurs de résultat dans un champ portant sur les entités d'un maillage qui peut être local (dans le même fichier) ou distant (le maillage est contenu dans un autre fichier). Les valeurs peuvent porter sur :
  - Les noeuds.
  - Les éléments.
  - Les points de Gauss des éléments.
  - Les noeuds par maille.
  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.
- Lire le nombre de lien vers des fichiers distants dans un fichier.
- Lire les informations sur un lien vers un fichier distant.
- Lire la taille d'un lien vers un fichier distant.
- Lire un lien vers un fichier distant.
- Lire le nombre de champ dans un fichier ou de composantes dans un champ.
- Lire les informations sur un champ.
- Lire le nombre de pas de temps (séquence de calcul) dans un champ.
- Lire les informations sur un pas de temps (séquence de calcul).
- Lire le nombre de maillages référencés dans un pas de temps (séquence de calcul).
- Lire les informations sur les valeurs référencées par un maillage dans une séquence de calcul.
- Lire le nombre de valeur à lire dans un champ pour un type géométrique d'entité donné, une séquence de calcul donnée et un maillage donné.
- Lire des valeurs dans un champ sur les entités d'un maillage qui peut être local (dans le même fichier) ou distant (le maillage est contenu dans un autre fichier). Les valeurs peuvent porter sur :
  - Les noeuds.
  - Les éléments.
  - Les points de Gauss des éléments.
  - Les noeuds par maille.
  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.

Ces routines sont détaillées dans le guide de référence du module "MED_Champ".

# Modèles de programmation

### Créer un champ dans un fichier

La routine MEDChampCr/efchac permet de créer un champ dans un fichier MED. Un champ est identifié par son nom qui est une chaîne de MED_TAILLE_NOM caractères en Fortran (au plus MED_TAILLE_NOM en C).

Un champ est composé de plusieurs composantes scalaires. Chaque composante se voit attribuer un nom et une unité.

Un champ porte un type qui correspond au type de ses composantes qui peut être :

- MED_FLOAT64 : réel 64 bits IEEE.
- MED_INT32 : entier 32 bits.
- MED_INT64 : entier 64 bits.

### Ecrire des valeurs de résultat dans un champ

La routine MEDchampEcr/efchae permet d'écrire dans un champ des valeurs correspondant à un résultat portant sur un type d'entité géométrique d'un maillage donné. Si le champ porte sur plusieurs types d'entité, il faut donc appeler cette routine autant de fois qu'il y a de types différents.

Les valeurs peuvent porter sur :

- Les noeuds.
- Les éléments.
- Les points de Gauss des éléments.
- Les noeuds par maille.

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.

Remarques :

- Le maillage référencé 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.
- 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.
- Dans un même champ, il n'est pas possible de référencer un maillage local et un maillage distant portant le même nom.
- Le mode de stockage mémoire du tableau de valeur à écrire est au choix :
  - MED_FULL_INTERLACE.
  - MED_NO_INTERLACE.
- 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 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 élément de référence de la localisation des points de Gauss.

### Créer un lien vers un fichier distant

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.

Les données écrites sont donc :

- Le nom du lien qui doit correspondre au nom du maillage.
- Le chemin d'accès au fichier distant.

Remarques :

- Cette routine permet d'indiquer que le maillage qui donne son nom au lien n'est pas défini dans le fichier courant, mais dans un autre fichier (le fichier distant) dont on spécifie le chemin d'accès.
- 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.

### Accéder dans un fichier aux liens sur fichiers distants

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).

### Lire le nombre de liens vers des fichiers distants dans un fichier

La routine MEDnLien/efnlie permet de lire le nombre de liens sur fichier distant dans un fichier.

### Lire les informations sur un lien vers un fichier distant

La routine MEDlienInfo/efliei permet de lire les informations sur un lien vers un fichier distant (nom du lien, taille du lien).

Remarques :

- Le nom du lien correspond au nom de l'objet stocké dans le fichier distant, ici le nom du maillage.
- La taille lue est celle de la chaîne de caractères correspondant aux chemin d'accès et au nom du fichier distant.

### Lire la taille d'un lien vers un fichier distant

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.

### Lire un lien vers un fichier distant

La routine MEDlienLire/efliel permet de lire 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.

L'information lue correspond au chemin d'accès au fichier distant.

Remarques :

- 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.

### Accéder aux champs de résultat dans un fichier

Le modèle d'accès complet en lecture au(x) champ(s) d'un fichier MED consiste à :

- Lire le nombre de champ.
- Pour chaque champ :
  - Lire le nombre de composante.
  - Lire les informations du champ : nom, type, noms et unités de la ou des composante(s).
  - Pour chaque type géométrique d'entité fournis par le modèle MED (noeuds, maille, face, arête) :
    - Lire le nombre de séquence de calcul (pas de temps et/ou numéro d'ordre).
    - Pour chaque séquence de calcul (pas de temps et/ou numéro d'ordre) :
      - Lire les informations sur le pas de temps et les valeurs stockées (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 :
        - 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.
        - Lire le nombre valeurs à lire en mémoire (taille du tableau à allouer).
        - Allouer la mémoire pour le stockage des valeurs.
        - Lire des valeurs selon un éventuel profil.
        - Si un profil est renvoyé, lire le profil.

Remarques :

- Ce mode d'accès aux champs d'une fichier MED est un mode d'accès exhaustif qui garantit de pouvoir lire tous les champs de tous les fichiers MED V2.3. Vous pouvez cependant choisir de définir un mode d'accès plus restreint notamment si vous ne pouvez pas gérer :
  - Les séquences de calcul.
  - Les références sur plusieurs maillages dans une même séquence de calcul.
  Toutes ces restrictions possibles sont présentées en détail dans le guide de référence du module "MED_Champ".

### Lire le nombre de champ dans un fichier ou de composantes dans un champ

La routine MEDnChamp/efncha permet de lire selon la valeur des ses paramètres :

- Le nombre de champ dans un fichier.
- Le nombre de composante d'un champ.

### Lire les informations sur un champ

La routine MEDchampInfo/efchai permet de lire les informations sur un champ.

Les informations lues sont :

- Le nom du champ.
- Le type des composantes du champ.
- Le nom et l'unité de chacune des composantes du champ.

Remarques :

- Un champ est identifié par son nom qui est une chaîne de MED_TAILLE_NOM caractères en Fortran (au plus MED_TAILLE_NOM en C).
- Un champ est composé de plusieurs composantes scalaires. Chaque composante se voit attribuer un nom et une unité.
- Un champ porte un type qui correspond au type de ses composantes qui peut être :
  - MED_FLOAT64 : réel 64 bits IEEE.
  - MED_INT32 : entier 32 bits.
  - MED_INT64 : entier 64 bits.

### Lire le nombre de pas de temps (séquence de calcul) dans un champ

La routine MEDnPasdeTemps/efnpdt permet de lire le nombre de séquence de calcul dans un champ pour un type d'entité donné. Une séquence de calcul correspond à un pas de temps et/ou un numéro d'ordre.

### Lire les informations sur un pas de temps (séquence de calcul)

La routine MEDpasdetempsInfo/efpdti permet de lire les informations sur une séquence de calcul (pas de temps et/ou numéro d'ordre) pour un type d'entité donné.

Les informations lues sont :

- Le pas de temps : valeur réelle, numéro, unité.
- Le numéro d'ordre.
- Le nom du maillage par défaut sur lequel portent les valeurs de résultats stockées dans cette séquence de calcul. Ce maillage est soit local, soit distant.
- Le nombre de maillages référencés dans cette séquence : les valeurs d'un champ pour un même séquence de calcul peuvent porter sur différents maillages.
- Le nombre de points de Gauss. Le nombre de points de Gauss est lié au type géométrique de l'élément et est constant pour un type géométrique donné.

### Lire le nombre de maillages référencés dans un pas de temps (séquence de calcul)

La routine MEDnChampRef/efnref permet de lire le nombre de maillage référencés dans une séquence de calcul (pas de temps et/ou numéro d'ordre).

Remarques :

- Cette information est également fournie par MEDpasdetempsInfo/efpdti. Cette routine est donc à utilisée uniquement si vous ne pouvez pas utiliser les séquences de calcul dans les champs de résultat.
- Une même séquence de calcul peut contenir des valeurs sur des entités de plusieurs maillages.

### Lire les informations sur les valeurs relatives à un maillage dans une séquence de calcul

La routine MEDchampRefInfo/efrefi permet de lire les informations sur les valeurs relatives à un maillage dans une séquence de calcul

Les informations lues sont :

- Le nom du maillage référencé.
- La nature de la localisation du maillage : locale ou dans un fichier distant.
- Le nombre de points de Gauss. Le nombre de points de Gauss est lié au type géométrique de l'élément et est constant pour un type géométrique donné.

### Lire le nombre de valeur à lire pour un type géométrique d'entité, une séquence de calcul et un maillage donnés

La routine MEDnVal/efnval permet de lire le nombre de valeur à lire dans un champ pour

- Un type géométrique d'entité donné,
- Une séquence de calcul donnée,
- Un maillage donné.

Remarques :

- Si un profil existe pour ces valeurs, cette routine renvoie selon le mode mémoire choisi :
  - MED_COMPACT : Le nombre de valeurs définies par le profil.
  - MED_GLOBAL : Le nombre total de valeurs du champ.
- Cette routine prend en compte le nombre de points de Gauss ou le nombre de noeuds par maille, mais pas le nombre de composantes du champ. A l'allocation, il convient donc de multiplier le nombre de valeur obtenu par le nombre de composantes.

### Lire des valeurs de résultat dans un champ

La routine MEDchampLire/efchal permet de lire dans un champ des valeurs correspondant à un résultat :

- Portant sur un type d'entité géométrique. Les valeurs peuvent porter sur :
  - Les noeuds.
  - Les éléments.
  - Les points de Gauss des éléments.
  - Les noeuds par maille.
- Pour une séquence de calcul (pas de temps/numéro d'ordre).
- Pour un maillage donné.

Les valeurs lues peuvent être associées à

- 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.

Remarques :

- Le maillage référencé et passé en argument peut être stocké dans un autre fichier que celui du champ. Dans un même champ, il n'est pas possible d'avoir un maillage local et un maillage distant portant le même nom.
- Le mode de stockage mémoire du tableau de valeurs est soit :
  - MED_FULL_INTERLACE.
  - MED_NO_INTERLACE.
- 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 de 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 à lire selon les numéros définis dans le profil.
- 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 élément de référence de localisation des points de Gauss.

# Exemples de programmation

### Exemple de création de champs dans un fichier

Le programme suivant présente les différents cas d'utilisations possibles quant à l'écriture de valeurs d'un champ de résultat dans un fichier MED -i.e :

- Création dans le fichier "test10.med" de trois champs : deux champs entier et un champ réel.
- Ecriture de valeurs de résultats dans ces trois champs selon différents cas d'utilisation :
  - Avec et sans séquence de calcul. Pour une même séquence les valeurs peuvent porter sur les entités de plusieurs maillages. Les maillages sont soit locaux, soit déclarés dans des fichiers distants par des liens sur fichiers distants. Les liens sur fichiers distants référencés sont créés dans le fichier.
  - Avec et sans profils. Les profils référencés sont également créés dans le fichier.
  - Les valeurs portent sur différents types d'entités :
    - Noeuds.
    - Eléments.
    - Points de Gauss des éléments. Dans ces cas là, les éléments de référence de la localisation des points de Gauss sont créés dans le fichier.
    - noeuds par maille.
- Fermeture du fichier "test10.med".

Accès aux sources :

- Version C.
- Version FORTRAN.

### Exemple de lecture des champs dans un fichier

Ce programme permet de lire tous les champs de résultats d'un fichier MED selon le modèle de programmation pré-défini qui consiste à :

- Lire le nombre de champ.
- Pour chaque champ :
  - Lire le nombre de composante.
  - Lire les informations du champ : nom, type, noms et unités des composantes.
  - Pour chaque type géométrique d'entité (noeud, maille, face, arête) :
    - Lire le nombre de séquence de calcul (pas de temps et/ou numéro d'ordre).
    - Pour chaque séquence de calcul (pas de temps et/ou numéro d'ordre) :
      - Lire les informations sur le pas de temps et les valeurs stockées (valeur du pas de temps, unité du pas de temps, numéro d'ordre associé, nombre de points de Gauss, 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 :
        - Lire les informations sur le maillage référencé (nom,localité,nombre de points de Gauss).
        - Si le maillage n'est pas local, accéder au lien sur fichier distant.
        - Lire le nombre valeurs à lire en mémoire (taille du tableau à allouer).
        - Allouer la mémoire pour le stockage des valeurs.
        - Lire des valeurs selon un éventuel profil.
        - Si un profil est renvoyé, lire le profil.

Son également lus :

- Les éventuels profils.
- Les éventuels liens sur fichiers distants.
- Les éventuels éléments de référence de la localisation des points de Gauss.

Accès aux sources :

- Version C.
- Version FORTRAN.

# Convention sur la définition des champs de résultats

Un champ est composé de plusieurs composantes scalaires. Chaque composante se voit attribuer un nom et une unité. Un champ porte un type qui correspond au type de ses composantes qui peut être :

- MED_FLOAT64 : réel 64 bits IEEE.
- MED_INT32 : entier 32 bits.
- MED_INT64 : entier 64 bits.

Les valeurs définies dans un champ de résultat portent sur les entités d'un ou plusieurs maillages. Les valeurs peuvent porter sur :

- Les noeuds.
- Les éléments.
- Les points de Gauss des éléments.
- Les noeuds par maille.

Ces valeurs peuvent être associées à

- Une séquence de calcul : pas de temps et/ou numéro d'ordre.
- Un 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.

Remarques :

- Un maillage sur lequel porte les valeurs d'un champ 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. Dans un même champ, il n'est pas possible de référencer un maillage local et un maillage distant portant le même nom.
- 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.
- 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 élément de référence de localisation des points de Gauss. La définition de la localisation des points de Gauss est obligatoire si on définit des valeurs sur les points de Gauss dans un champ. Cependant si les points de Gauss se confondent avec les noeuds de l'élément, le mot clé MED_GAUSS_ELNO doit être utilisé dans la routine MEDchampEcr/efchae. Ce mot clé indique qu'il est inutile de créer une localisation factice avec des poids qui ne signifient rien et des coordonnées des points de Gauss identiques à celles des noeuds.