##
Documentation de la bibliothèque MED-fichier V2.2 : Modèle de données

Sommaire de la rubrique

1. Introduction
2. Dictionnaire
3. Modèle de données
   - Types de base
   - Vue d'ensemble
   - Package "Etude"
   - Package "Maillage"
   - Package "Noeud"
   - Package "Maille"
     - Sous package "Maille 0D"
     - Sous package "Maille 1D"
     - Sous package "Maille 2D"
     - Sous-package "Maille 3D"
   - Package "Face"
   - Package "Arête"
   - Package "Famille"
   - Package "Equivalence"
   - Package "Résultat"
   - Package "Séquence de valeurs sur entité"
   - Package "Valeur sur entité"
   - Package "Profil"
   - Package "Variable scalaire numérique"
   - Package "Evolution temporelle"
   - Package "Localisation des points de Gauss par type d'élément"
4. Conventions pour les maillages non structurés : connectivités de référence
   - Segments
   - Triangles
   - Quadrangles
   - Tétraèdres
   - Pyramides
   - Hexaèdres
   - Pentaèdres
   - Polygones et polyèdres quelconques
5. Conventions pour les maillages structurés
   - Indexation d'une grille
   - Numérotation des noeuds et des élements d'une grille
   - Définition des coordonnées des noeuds d'une grille polaire ou cartésienne
6. Conventions et notations UML employées
   - Classe et attribut de classe
   - Association
   - Agrégation
   - Composition
   - Héritage
   - Package

# 1. Introduction

### Présentation de la démarche de modélisation

Le modèle de données MED se base sur :

- Un dictionnaire commun des concepts manipulés. Le dictionnaire permet de s'assurer qu'il n'y a pas d'ambiguïté sur les termes utilisés.
- Un modèle de données commun bâti à partir des définitions du dictionnaire. Ce modèle définit de manière logique les structures de données échangées entre les différents codes. Ce modèle de données est défini selon une approche orientée objet et est décrit en UML (Unified Modeling Language). La section 6 présente les conventions et notations UML utilisées pour décrire les diagrammes de classes.

### Présentation rapide des données modélisées

Les données modélisées sont des données destinées à être échangées entre codes de calcul au cours d'une étude, ces données portent sur les notions de :

- Maillage,
- Résultat,
- Valeurs scalaires numériques quelconques.

Une étude correspond à un enchaînement de séquences de calculs effectué dans le cadre d'une simulation. Une étude s'appuie sur un ou plusieurs maillages. Elle aboutit à des résultats sur les maillages utilisés en entrée.

Le maillage fournit une représentation du domaine de calcul. A ce titre, un maillage contient les types d'informations suivants :

- Les informations géométriques portées par les entités du maillage : liste des noeuds et des mailles et éventuellement des faces et des arêtes.
- Les informations sur l'interpolation par éléments finis : le maillage doit être compatible avec l'interpolation choisie.
- Les informations permettant la mise en oeuvre des calculs physiques : des repérages pour affecter les caractéristiques physiques des matériaux, conditions initiales et conditions aux limites.

On distingue parmi les maillages, les maillages structurés des maillages non structurés.

Un résultat est constitué d'un ensemble de valeurs définies sur les entités du maillage. Un résultat est constitué d'un ou plusieurs champs, les champs pouvant avoir plusieurs composantes (valeurs scalaires). Les champs peuvent être définis sur les :

- Noeuds,
- Eléments (mailles, faces, arêtes)
- Points de Gauss des éléments.

Ils peuvent n'être définis que sur une partie du maillage.

Le modèle de données définit également la notion de variable scalaire numérique. Une variable scalaire numérique peut contenir une séquence de valeurs scalaires.

# 2. Dictionnaire

- Arête : Une arête peut être une arête d'une maille volumique ou d'une maille surfacique. Elle est constituée par 2 ou 3 noeuds (les sommets et éventuellement un noeud milieu).
- Champ : Un champ est constitué d'une ou plusieurs composantes scalaires. A un champ est associé un type et les valeurs correspondant aux différentes composantes sont toutes du même type.
- Composante : Pour chaque composante d'un champ, et à chaque entité du maillage, peut correspondre une valeur entière ou réelle.
- Connectivité : La connectivité d'un maillage définit le type des connexions entre ses sommets.
- Connectivité de référence : Pour chaque type d'entité du maillage, la connectivité de référence définit la topologie d'une entité.
- Connectivité descendante : C'est la description des entités de maillage de dimension N par la liste ordonnée des entités géométriques (noeuds, arêtes ou faces) de dimension N-1.
- Connectivité nodale : C'est la description d'une entité du maillage par la liste ordonnée des noeuds qui la composent.
- Entité de référence : A chaque maille, face ou arête est associée un type géométrique.
- Entité du maillage : Ce sont les composants géométriques du maillage : noeuds, mailles, faces et arêtes. Les faces et les arêtes ne sont que des entités intermédiaires qui permettent de définir les mailles en connectivité descendante.
- Equivalence : Une équivalence est une liste de correspondance 2 à 2 entre des entités de même dimension.
- Etude : Une étude correspond à un enchaînement de séquences de calcul.
- Face : Face d'une maille volumique (triangle, quadrangle).
- Famille : Les entités du maillage sont décrites par un certain nombre de caractéristiques (conditions limites, appartenance à des groupes). Les familles sont des classes d'équivalence par rapport à ces caractéristiques (deux entités du maillage appartiennent à la même famille ssi elles ont les mêmes caractéristiques). Une famille est décrite par des attributs et par une liste d'appartenance aux groupes.
- Groupe : Ensemble non ordonné d'entités du maillage. Une même entité peut appartenir à plusieurs groupes.
- Maillage : Un maillage d'un domaine D est un ensemble E recouvrant D. Cet ensemble est constitué d'un nombre fini de mailles.
- Maillage libre : cf. "Maillage non structuré".
- Maillage non structuré : Un maillage est non structuré si sa connectivité est quelconque. Un tel maillage est composé de triangles, de quadrangles et éventuellement de polygones quelconques en dimension 2, de tétraèdres, d'hexaèdres, de pentaèdres, de pyramides et éventuellement de polyèdres quelconques en dimension 3.
- Maillage structuré : Un maillage structuré est un maillage dont la construction utilise des directions géométriques particulières. Un tel maillage est appelé une grille. En dimension 2, l'élément d'une grille est le quadrangle tandis qu'en dimension 3, une grille est composée d'héxaèdres. On distingue des grilles quelconques, les grilles cartésiennes et les grilles polaires.
- Maille : Les mailles sont les éléments de l'ensemble E. Elles sont définies par leur connectivité. Une maille peut être de dimension 0, 1, 2 ou 3.
- Noeud : Un noeud peut être un noeud isolé du maillage, un noeud sommet ou un noeud milieu d'une arête. Un noeud est associé à un point.
- Point : Entité géométrique définie par ses coordonnées dans l'espace de définition du domaine D.
- Profil de champ : Les champs ne peuvent être définis que sur une partie du maillage. Le profil d'un champ ou d'une composante d'un champ indique sur quelles entités du maillage se trouvent les valeurs.
- Résultat : Liste de champs portant sur un même maillage.

# 3. Modèle de données

### Types de base

Les types de base attribués aux attributs internes des classes du modèle sont définis de la manière suivante :

- Types numériques :
  - Entier.
  - Réel.
- Chaînes de caractères :
  - Chaîne 16 : chaîne de 16 caractères.
  - Chaîne 32 : chaîne de 32 caractères.
  - Chaîne 80 : chaîne de 80 caractères.
  - Chaîne 200 : chaîne de 200 caractères.

### Vue d'ensemble

Nous présentons dans cette section une vue d'ensemble du modéle de données MED. L'ensemble des données modélisées dans MED sont rassemblées dans le package englobant "MED : Modélisation et Echanges de Données" qui constitue le package racine du modèle.

Le schéma suivant fournit une vue d'ensemble des différents packages composant le modèle MED. Les différentes classes du modèle sont réparties entre divers packages. Des relations de dépendance apparaissent entre deux packages du modèle quand des classes issues de ces deux packages sont associées. Les packages portant le stéréotype "layer" ont un caractère uniquement descriptif qui permet d'illustrer le découpage logique des données du modèle et n'apparaissent que dans ce diagramme. Chacun des packages contient un ou plusieurs packages internes. Ce sont ces packages internes qui contiennent les diagrammes de classe du modèle. Chaque package interne sera détaillé dans la suite de la section 3.

Au sommet de la hiérarchie, le package "Etude" va regrouper l'ensemble des données échangées au cours d'une étude. Ces données d'étude sont définies dans les packages :

- "Maillage",
- "Résultat",
- "Variable scalaire numérique".

On a donc une dépendance du package "Etude" vers ces trois packages.

Le package "Maillage" donne accès à la description du domaine de calcul :

- Le package "Entités du maillage" fournit la description des entités géométriques qui sont décrites dans les packages :
  - "Noeud".
  - "Maille".
  - "Face".
  - "Arête".
- Les propriétés physiques des entités d'un maillage sont définies dans le package "Famille".
- La notion de périodicité est décrite dans le package "Equivalence".

Les relations de dépendance entre ces différentes catégories de packages sont les suivantes :

- En interne au package "Entités d'un maillage", les mailles sont définies directement à partir des noeuds (connectivité nodale) ou par l'intermédiaire des faces et des arêtes (connectivité descendante). On a donc des relations de dépendance du package "Maille" vers les packages "Noeud", "Face" et "Arête". En connectivité descendante, les faces sont décrites par des arêtes, on a donc une dépendance du package "Face" vers le package "Arête", de plus les arêtes sont décrites par des noeuds, on a donc une dépendance du package "Arête" vers le package "Noeud".
- L'application des propriétés physiques aux entités du maillage (noeuds, mailles, faces ou arêtes) est décrite par des familles. On a donc une relation de dépendance du package "Entité d'un maillage" vers le package "Famille".
- Les équivalences peuvent porter sur les éléments géométriques du maillage (noeuds, mailles, faces ou arêtes). On a donc une relation de dépendance du package "Equivalence" vers le package "Entités d'un maillage".

Le package "Résultat" donne un "accès aux valeurs des résultats" qui portent sur les "Entités d'un maillage". L'accès à ces valeurs se fait par l'intermédiaire de séquences de valeurs qui sont décrites dans le package "Séquences de valeurs sur entité". Une "Séquence de valeurs sur entité" peut se voir associer les paramètres suivants :

- Une "Etape de calcul" qui est spécifiée dans le package "Evolution temporelle". Une évolution peut être temporelle ou itérative. Il existe donc une dépendance du package "Séquence de valeurs sur entité" vers le package "Evolution temporelle"
- L'accès éventuel à un "Profil" qui permet de savoir sur quelles entités du maillage les valeurs du champ sont présentes (par défaut sans profil, les valeurs sont associées à toutes les entités du même type). Il existe donc une dépendance du package "Séquence de valeurs sur entité" vers le package "Profil".
- L'accès éventuel à la "Localisation des points de Gauss par type d'élément". Cette information est utile pour les échanges de champs exprimés aux points de Gauss des éléments (mailles, faces, arêtes) du maillage. Le package "Localisation des points de Gauss par type d'élément" fournit une description de la répartition des points de Gauss par type d'élément géométrique selon la modélisation numérique utilisée. Il existe donc une dépendance du package "Séquence de valeurs sur entité" vers le package "Localisation des points de Gauss par type d'élément".

Les valeurs du résultat correspondant à la "Séquence de valeurs sur entité" sont décrites dans le package "Valeur sur entité" et sont associées à des entités d'un ou plusieurs maillages. On a donc une dépendance du package "Séquence de valeurs sur entité" vers le package "Valeur sur entité" et du package "Valeur sur entité" vers le package "Entités d'un maillage".

Enfin le package "Variable scalaire numérique" fournit une description des données numériques scalaires qu'il est possible d'échanger. Ces données sont indépendantes des maillages mais peuvent se voir associer à une "Etape de calcul". On a donc une dépendance du package "Variable scalaire numérique" vers le package "Evolution temporelle".

A noter que les packages "Profil" et "Localisation des points de Gauss par élément" dépendent directement du package "Etude" car les informations définies dans ces packages peuvent être partagées par différentes séries de résultats.

### Package "Etude"

#### Description

Une étude correspond à un enchaînement de calculs. Une étude peut s'appuyer sur plusieurs maillages. Elle fournit des résultats sur ces maillages et éventuellement des valeurs numériques indépendantes des maillages.

#### Diagramme de classe

Le package "Etude" ne contient qu'une seule classe, la classe "Etude". Un objet "Etude" est le conteneur logique de toutes les instances des classes du modèle d'échanges de données MED -i.e. il contient :

- Un ou plusieurs objets maillages.
- Un ou plusieurs objets résultats.
- Zéro ou plusieurs objets variables scalaires numériques.
- Zéro ou plusieurs objets profils.
- Zéro ou plusieurs objets éléments de référence aux points de Gauss.

La classe "Etude" contient également des attributs spécifiques qui permettent de l'identifier (nom, date de dernière modification, auteur). Tous ces attributs sont des chaînes de caractères.

### Package "Maillage"

#### Description

Un maillage doit contenir les informations utiles aux calculs d'une étude : informations géométriques, informations physiques :

- Les listes de mailles et de noeuds fournissent la description géométrique du maillage. Cette description géométrique peut être complétée par les listes de faces et d'aretes. Les faces et les arêtes constituent des entités intermédiaires qui permettent de définir les mailles en connectivité descendante.
- Les familles portent les propriétés physiques du maillage (conditions aux limites, conditions initiales, appartenance à des groupes, ...).
- D'autre part pour les maillages périodiques ou dans le cas des domaines maillés contenant des fissures, on utilise la notion d'équivalence qui permet de mettre en correspondance deux à deux des entités géométriques de même dimension (par exemple des segments ou des triangles).

On distingue dans MED, deux catégories de maillages :

1. Les maillages non structurés,
2. Les maillages structurés (grille cartésienne, grille 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.

#### Diagramme de classe

La classe "Maillage" est la classe abstraite qui constitue la racine du package "Maillage". La classe Maillage comprend les attributs suivants :

- nom : chaîne de 32 caractères qui définit le nom du maillage. Il s'agit du nom spécifié par l'utilisateur.
- nom universel : chaîne de 200 caractères. Le nom universel est unique pour chaque maillage.
- type : attribut qui spécifie le type du maillage (structuré ou non structuré). Cet attribut est de type "med_maillage" qui est un type énuméré contenant les valeurs MED_NON_STRUCTURE et MED_STRUCTURE.
- description : chaîne de 200 caractères qui peut être fournie par l'utilisateur en complément de l'attribut "nom".
- dimension : Entier qui spécifie la dimension du maillage (1,2 ou 3).
- dimension espace : Entier qui indique la dimension de l'espace de calcul qui peut être supérieure ou égale à celle du maillage (on peut avoir un maillage de dimension 2 dans un espace de dimension 3).

Un objet maillage contient également :

- Un ou plusieurs objets noeuds.
- Un ou plusieurs objets mailles.
- Zéro ou plusieurs objets faces.
- Zéro ou plusieurs objets arêtes.
- Un ou plusieurs objets familles.
- Zéro ou plusieurs objets équivalences.

La classe "Maillage" est spécialisée (par héritage) en deux classes :

1. "Maillage non structuré",
2. "Maillage structuré".

La classe "Maillage structuré" se dérive elle-même en deux nouvelles classes

1. "Grille cartésienne",
2. "Grille polaire".

La classe "Maillage non structuré" comporte l'attribut :

- type : attribut de type "med_maillage" dont la valeur est fixée à MED_NON_STRUCTURE.
- nombre de noeuds isolés : Entier.
- nombre de noeuds maximum dans une maille : Entier.
- nombre de noeuds sommet : Entier.

La classe "Maillage structuré" contient les attributs :

- type : attribut de type "med_maillage" dont la valeur est fixée à MED_STRUCTURE.
- type_grille : attribut de type "med_type_grille" qui spécifie le type de la grille correspondant au maillage. Dans cette classe la valeur de cet attribut est fixée à "MED_GRILLE_STANDARD".

La classe "Grille cartésienne" contient l'attribut :

- type_grille : attribut de type "med_type_grille" qui spécifie le type de la grille correspondant au maillage. Dans cette classe la valeur de cet attribut est fixée à "MED_GRILLE_CARTESIENNE".

La classe "Grille polaire" contient l'attribut :

- type_grille : attribut de type "med_type_grille" qui spécifie le type de la grille correspondant au maillage. Dans cette classe la valeur de cet attribut est fixée à "MED_GRILLE_POLAIRE".

Un objet maillage structuré se voit associer de un à trois objets axe selon sa dimension. La classe "Axe" contient l'attribut :

- nombre de points : Entier qui spécifie le nombre de points définis sur l'axe.

### Package "Noeud"

#### Description

Un noeud peut être le sommet d'une ou plusieurs arêtes, le milieu d'une arête ou un noeud isolé qui n'apparaît dans aucune connectivité.

#### Diagramme de classe

La classe racine du package "Noeud" est la classe "Noeud" qui contient les attributs suivants :

- nom : chaîne de 16 caractères.
- numéro : Entier.

Ces deux attributs internes permettent d'identifier le noeud.

Un noeud est associé à un point qui indique sa localisation spatiale. On a donc une association entre la classe "Noeud" et la classe abstraite "Point" qui se spécialise en fonction de la dimension de l'espace : le nombre de coordonnées d'un point dépend de la dimension de l'espace (1,2 ou 3). Les valeurs des coordonnées sont placées en attributs internes des classes "Point 1D", "Point 2D" et "Point 3D".

Les coordonnées sont exprimées selon un repère géométrique particulier (cartésien, cylindrique ou sphérique). La classe "Point" est donc associée à la classe "Repère". La classe "Repère" possède les attributs internes :

- type : cet attribut de type "med_repere" précise la nature du repère (cartésien : MED_CARTESIEN, cylindrique : MED_CYLINDRIQUE ou sphérique : MED_SPHERIQUE).
- nombre de coordonnées : cet attribut entier précise le nombre de coordonnées par point. Ce nombre est égal à celui de la dimension de l'espace du domaine maillé.

Les coordonnées associées au repère sont décrites dans la classe "Coordonnées" dont les attributs internes sont :

- nom : chaîne comportant au plus 16 caractères, exemples : "x", "y","z","r","theta",...
- unité : chaîne comportant au plus 16 caractères, exemples : "cm","m",...

Les conditions limites ou initiales associées à un noeud sont placées dans une unique famille. Un noeud se retrouve donc associé à une unique famille.

#### Cas spécifique des maillages structurés

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. 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 la section 5.

### Package "Maille"

#### Description

On trouve des mailles de dimension 0,1,2 ou 3. Une maille est décrite soit par connectivité nodale, soit par connectivité descendante :

- La connectivité nodale correspond à une liste ordonnée de noeuds.
- La connectivité descendante correspond à une liste ordonnée de noeuds, d'arêtes ou de faces selon la dimension de la maille considérée.

Au même titre que pour les noeuds, les conditions limites ou initiales associées à une maille sont placées dans une unique famille.

#### Diagramme de classe

La classe racine du package "Maille" est la classe abstraite "Maille" qui contient les attributs internes suivants :

- nom : Chaîne 16.
- numéro : Entier.

Ces deux attributs permettent d'identifier la maille.

Une association de la classe "Maille" vers la classe "Famille" permet d'accéder aux propriéts physiques de la maille.

La classe "Maille" est spécialisée (par héritage) en fonction de sa dimension, on a donc les classes "Maille 0D", "Maille 1D", "Maille 2D" et "Maille 3D". Chaque catégorie de maille est décrite dans un sous package spécifique.

#### Cas spécifique des maillages structurés

Un maillage structuré est uniquement défini par ses noeuds. La définition de la connectivité des mailles d'un maillage structuré est implicite : cf la section 5.

### Sous package "Maille 0D"

#### Description

Une maille de dimension 0 est réduite à un noeud.

#### Diagramme de classe

La classe racine du package "Maille 0D" est la classe abstraite "Maille 0D". La connectivité d'une "Maille 0D" se réduit à un seul objet "Noeud". La classe "Maille 0D" se spécialise en classe "MED_MAILLE_POINT1".

### Sous package "Maille 1D"

#### Description

En connectivité descendante ou nodale, une maille de dimension 1 est décrite par 2 sommets et éventuellement un noeud milieu.

Une "Maille 1D" est orientée. L'ordre dans lequel sont donnés les noeuds dans les deux types de connectivité définit une orientation implicite de la maille. Ces orientations sont fournies pour tous les types géométriques dans la section 4.

Les deux types géométrique de type "Maille 1D" sont :

1. Les segments à 2 noeuds.
2. Les segments à 3 noeuds.

#### Diagramme de classe

La classe racine du package "Maille 1D" est la classe abstraite "Maille 1D". La connectivité d'un objet "Maille 1D" est décrite par deux ou trois objets "Noeud".

La classe "Maille 1D", se spécialise en fonction des deux types géométriques pré-cités en deux sous-classes : MED_MAILLE_SEG2 (segment à 2 noeuds) et MED_MAILLE_SEG3 (segment à 3 noeuds).

### Sous package "Maille 2D"

#### Description

Les mailles de dimension 2 sont orientées. En connectivité descendante, les mailles de dimension 2 sont décrites par une liste ordonnée d'arêtes. Celles-ci sont précédées d'un signe qui indique l'orientation. En connectivité nodale, la liste des noeuds définit le sens de parcours. Ces orientations sont fournies pour tous les types géométriques dans la section 4.

Les cinq types géométriques possibles sont :

1. Les triangles à 3 noeuds.
2. Les triangles à 6 noeuds.
3. Les quadrangles à 4 noeuds.
4. Les quadrangles à 8 noeuds.
5. Les polygones quelconques.

#### Diagramme de classe

La classe racine de ce package est la classe abstraite "Maille 2D". Selon le mode de description de la connectivité, on accède à :

- Mode nodal : au moins 3 noeuds.
- Mode descendant : au moins 3 arêtes.

La classe "Maille 2D" est spécialisée par héritage selon les différents types géométriques possibles :

- Les triangles à 3 noeuds : classe "MED_MAILLE_TRIA3".
- Les triangles à 6 noeuds : classe "MED_MAILLE_TRIA6".
- Les quadrangles à 4 noeuds : classe "MED_MAILLE_QUAD4".
- Les quadrangles à 8 noeuds : classe "MED_MAILLE_QUAD8".
- Les polygones quelconques : classe "MED_MAILLE_POLYGONE".

### Sous package "Maille 3D"

#### Description

En connectivité descendante, les mailles de dimension 3 sont décrites par une liste ordonnée de faces, les faces étant elles-mêmes orientées. En connectivité nodale, les mailles de dimension 3 sont décrites par une liste ordonnée des noeuds qui les composent. Ces orientations sont fournies pour tous les types géométriques dans la section 4.

Les 9 types géométriques possibles sont :

1. Les tétraèdres à 4 noeuds.
2. Les tétraèdres à 10 noeuds.
3. Les pyramides à 5 noeuds.
4. Les pyramides à 13 noeuds.
5. Les hexaèdres à 8 noeuds.
6. Les héxaèdres à 20 noeuds.
7. Les pentaèdres à 6 noeuds.
8. Les pentaèdres à 15 noeuds.
9. Les polyèdres quelconques.

#### Diagramme de classe

La classe racine de ce package est la classe abstraite "Maille 3D". Selon le mode de description de la connectivité, on accède à :

- Mode nodal : au moins quatre noeuds.
- Mode descendant : au moins six faces.

La classe "Maille 3D" est spécialisée par héritage selon les différents types géométriques possibles :

- Les tétraèdres à 4 noeuds : MED_MAILLE_TETRA4.
- Les tétraèdres à 10 noeuds : MED_MAILLE_TETRA10.
- Les pyramides à 5 noeuds : MED_MAILLE_PYRA5.
- Les pyramides à 13 noeuds : MED_MAILLE_PYRA13.
- Les hexaèdres à 8 noeuds : MED_MAILLE_HEXA8.
- Les héxaèdres à 20 noeuds : MED_MAILLE_HEXA20.
- Les pentaèdres à 6 noeuds : MED_MAILLE_PENTA6.
- Les pentaèdres à 15 noeuds : MED_MAILLE_PENTA15.
- Les polyèdres quelconques : MED_MAILLE_POLYEDRE.

### Package "Face"

#### Description

Une face est une entité intermédiaire qui apparaît dans la connectivité descendante d'une maille 3D. Une face peut être triangulaire ou quadrangulaire.

De même que les mailles de dimension 2, les faces sont orientées. Elles sont décrites par leur connectivité descendante (liste ordonnée d'arêtes orientées).

Les 4 types possibles sont :

1. Les triangles à 3 noeuds.
2. Les triangles à 6 noeuds.
3. Les quadrangles à 4 noeuds.
4. Les quadrangles à 8 noeuds.
5. Les polygones quelconques.

#### Diagramme de classe

La classe racine de ce package est la classe abstraite "Face" qui contient les attributs internes suivants :

- nom : Chaîne 16.
- numéro : Entier.

Ces deux attributs permettent d'identifier la face.

La connectivité d'une face étant forcément décrite selon le mode de connectivité descendante, on accède en fonction de la géométrie de la face à au moins 3 arêtes.

La classe "Face" est spécialisée par héritage selon les différents types géométriques possibles :

- Les triangles à 3 noeuds : classe "MED_FACE_TRIA3".
- Les triangles à 6 noeuds : classe "MED_FACE_TRIA6".
- Les quadrangles à 4 noeuds : classe "MED_FACE_QUAD4".
- Les quadrangles à 8 noeuds : classe "MED_FACE_QUAD8".
- Les polygones quelconques : classe "MED_FACE_POLYGONE".

De même que pour les noeuds et les mailles, les propriétés physiques d'une face sont portées par une unique famille.

#### Cas spécifique des maillages structurés

Un maillage structuré est uniquement défini par ses noeuds. La définition de la connectivité des faces d'un maillage structuré est implicite (cf. la section 5).

### Package "Arête"

#### Description

Une arête apparaît dans la connectivité descendante d'une maille surfacique ou d'une face. Elle est définie par un segment.

De même que les mailles de dimension 1, les arêtes sont orientées.

Les 2 types géométriques possibles sont :

- Les segments à deux noeuds.
- Les segments à trois noeuds.

#### Diagramme de classe

La classe racine du package est la classe abstraite "Arête" qui contient les attributs internes suivants :

- nom : Chaîne 16.
- numéro : Entier.

Ces deux attributs permettent d'identifier une arête.

La connectivité d'un objet "Arête" est décrite par deux ou trois objets "Noeud".

La classe "Arête", se spécialise en fonction des deux types géométriques pré-cités en deux sous-classes :

- Classe "MED_ARETE_SEG2" : segment à 2 noeuds
- Classe "MED_ARETE_SEG3" : segment à 3 noeuds.

De même que pour les noeuds, les mailles et les faces, les propriétés physiques d'une face sont portées par une unique famille.

#### Cas spécifique des maillages structurés

Un maillage structuré est uniquement défini par ses noeuds. La définition de la connectivité des arêtes d'un maillage structuré est implicite (cf. la section 5).

### Package "Famille"

#### Description

Les familles constituent une partition de l'ensemble des entités du maillage : chaque entité du maillage (noeud, maille, face ou arête) appartient à une seule famille. Chaque famille repère des zones à particulariser pour le calcul : propriétés physiques, conditions aux limites, extraction des résultats, etc.

Un objet famille est identifié par son nom et son numéro. Une famille est décrite par un ensemble de paramètres (attributs) et par une liste de groupes auxquels les entités de la famille appartiennent.

Une famille donnée ne peut porter que sur un seul type d'entité, une famille est donc soit (exclusif) :

- Une famille de noeuds,
- Une famille d'éléments (mailles/faces/arêtes).

#### Diagramme de classe

La classe racine du package "Famille" est la classe "Famille" qui comporte les attributs internes :

- nom : Chaîne de 32 caractères.
- numéro : Entier.

Ces 2 attributs permettent d'identifier une famille.

Le paramètre d'une famille est défini dans la classe "Attribut". Cette classe possède les attributs internes suivants :

- identificateur : Entier.
- valeur : Entier.
- description : Chaîne de 200 caractères.

Un groupe est défini dans la classe "Groupe" qui possède un seul attribut nom de type "Chaîne 80" et qui correspond au nom du groupe.

Un objet "Famille" peut contenir une référence à :

- Zéro ou plusieurs objets attribut.
- Zéro ou plusieurs objets groupe.

A noter qu'un objet groupe ou attribut peut être référencé par plusieurs familles.

Une famille donnée ne pouvant porter les propriétés physiques que d'un seul type entité, on a donc une association exclusive de type "XOR" entre la classe "Famille" et

- La classe "Noeud" d'une part.
- Les classes "Maille", "Face" et "Arêtes" d'autre part.

### Package "Equivalence"

#### Description

La notion d'équivalence permet de gérer des listes de correspondances mettant en relation deux entités de même type (deux noeuds, deux mailles, deux arêtes ou deux faces).

Une équivalence est identifiée par son nom et possède également une description.

#### Diagramme de classe

La classe "Equivalence" possède les attributs internes suivants :

- nom : Chaîne 32.
- description : Chaîne 200.

Le nom permet d'identifier un objet équivalence.

Un objet "Equivalence" possède de un à plusieurs objets instances de la classe "Correspondance".

La classe "Correspondance" permet d'associer des entités du maillage du même type, on a donc une association exclusive de type "XOR" entre la classe "Correspondance" et les classes :

- "Noeud".
- "Face".
- "Arête".
- "Maille 0D".
- "Maille 1D".
- "Maille 2D".

### Package Résultat

#### Description

Un résultat est constitué d'un ensemble de champs, chaque champ pouvant lui-même être constitué de plusieurs composantes. Un champ est identifié par son nom et le type de ses composantes (entier ou réel). Les composantes correspondent à des valeurs scalaires (Exemple : un résultat peut être composé d'un champ PRESSION à 1 composante et d'un champ VITESSE à 3 composantes).

Les valeurs du champ sont réparties entre différentes séquences de valeurs. Ces valeurs portent sur les entités d'un ou plusieurs maillages.

#### Diagramme de classe

La classe "Résultat" est la classe racine du package "Résultat". Un objet instance de la classe "Résultat" peut contenir de un à plusieurs objets instances de la classe "Champ".

La classe "Champ" contient les attributs internes :

- nom : Chaîne 32.
- type : attribut de type "med_type_champ" qui est un type énuméré qui spécifie le type des valeurs du champ : MED_INT32, MED_INT64 et MED_FLOAT64.

Un objet "Champ" contient de :

- Un à plusieurs objets instances de la classe "Composante".
- Un ou plusieurs objets instances de la classe "Séquence de valeurs sur entité".

L'attribut "nom" permet d'identifier un objet champ.

La classe "Composante" comporte les attributs internes suivants :

- nom : Chaîne 16.
- unité : Chaîne 16.

### Package "Séquence de valeurs sur entité"

#### Description

L'accès aux valeurs d'un champ se fait par l'intermédiaire de séquences de valeurs qui peuvent porter sur les entités d'un ou plusieurs maillages.

Chaque séquence de valeurs peut se voir associer :

- Une étape de calcul, il s'agit d'une date (pas de temps) et/ou d'une étape itérative (numéro d'ordre).
- L'accès à un ou plusieurs profils qui permet(tent) de savoir sur quelles entités du maillage les valeurs sont présentes (par défaut sans profil, les valeurs sont associées à toutes entités du même type). Les composantes n'ont pas forcément de valeur sur toutes les entités du même type (noeuds, mailles, faces, arêtes) d'un maillage. Le profil permet de savoir où les valeurs sont présentes.
- Un accès éventuel à la localisation des points de Gauss sur des éléments de référence. Cette information est utile pour les échanges de champs exprimés aux points de Gauss des éléments (mailles, faces, arêtes) du maillage.

#### Diagramme de classe

L'unique classe du package est la classe "Séquence de valeurs sur entité". Un objet instance de cette classe possède de :

- Zéro ou un objet pas de temps.
- Zéro ou un objet numéro d'ordre.
- Zéro à plusieurs références vers des objets profil.
- Zéro à plusieurs références vers des objets éléments de référence aux points de Gauss.
- Un à plusieurs objets valeur sur entité.

### Package "Valeur sur entité"

#### Description

On peut associer une valeur scalaire par composante du champ à :

- Une entité d'un maillage, -i.e. soit à :
  - Un noeud.
  - Un élément (maille, face ou arête).
- Aux points de Gauss d'un élément d'un maillage.

#### Diagramme de classe

La classe abstraite "Valeur sur entité" est la classe racine du package. Cette classe par héritage se spécialise selon le type d'entité sur lequel portent les valeurs des composantes du champ. Les classes dérivées sont les suivantes :

- "Valeur au noeud".
- "Valeur sur élément".

La classe "Valeur au noeud" permet d'associer une valeur scalaire par composante du champ à un noeud du maillage. Un objet "Valeur au noeud" contient donc de un à plusieurs objets "Valeur par composante" et porte une référence vers un objet "Noeud".

La classe "Valeur sur élément" permet d'associer une valeur scalaire par composante du champ :

- Soit directement à un élément d'un maillage. Dans ce cas, l'objet contient de un à plusieurs objets "Valeur par composante" (1 objet par composante).
- Soit aux points de Gauss d'un élément d'un maillage. Dans ce cas, l'objet contient de un à plusieurs objets "Valeur au point de Gauss" (un objet par point de Gauss). Un objet "Valeur au point de Gauss" contient lui-même de un à plusieurs objets "Valeur par composante".

De plus un objet "Valeur sur élément" porte une référence vers un objet élément d'un maillage ("Maille", "Face" ou "Arête").

La classe "Valeur par composante" comporte un attribut valeur de type "med_type_champ" qui correspond à une valeur numérique entière ou réelle.

### Package "Profil"

#### Description

Un profil désigne une liste d'entités d'un maillage (noeuds, mailles, faces ou arêtes).

#### Diagramme de classe

La classe "profil" est classe racine de ce package. Cette classe comporte un attribut interne nom de type "Chaîne 32" qui permet d'identifier un objet profil.

La classe "Profil" permet de référencer des entités du maillage d'un type géométrique donné. On a donc une composition exclusive de type "XOR" entre la classe "Profil" et les classes définissant les différents types d'entité d'un maillage :

- "Référence à un noeud". Un objet intance de classe constitue une référence à un objet noeud.
- "Référence à une maille". Un objet intance de classe constitue une référence à un objet maille.
- "Référence à une face". Un objet intance de classe constitue une référence à un objet face.
- "Référence à une arête". Un objet intance de classe constitue une référence à un objet arête.

### Package "Variable scalaire numérique"

#### Description

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.

#### Diagramme de classe

La classe "Variable scalaire numérique" est la classe racine de ce package. Cette classe a les attributs internes suivants :

- nom : Chaîne 32
- type : attribut de type "med_type_champ" qui précise le type numérique (MED_INT32, MED_INT64 ou MED_FLOAT64).
- description : Chaîne 200.

Un objet instance de la classe variable scalaire numérique possède de un à plusieurs objets valeur scalaire.

La classe "Valeur scalaire" contient un attribut interne valeur de type "med_type_champ". Chaque objet valeur scalaire peut être associé à une étape de calcul identifiée par un objet pas de temps et/ou un objet numéro d'ordre.

### Package "Evolution temporelle"

#### Description

Une étude correspond à un enchaînement de séquences de calcul. Le package "Evolution temporelle" fournit les éléments nécessaires à l'identification d'une étape de calcul :

- Par date avec un pas de temps.
- Par itération avec un numéro d'ordre.

Les pas de temps et numéros d'ordre sont utilisés pour identifier des étapes de calcul au sein des champs de résultats et les variables scalaires.

#### Diagramme de classe

Le package "Evolution temporelle" contient les classes "Pas de temps" et "Numéro d'ordre".

La classe "Pas de temps" contient les attributs internes :

- date : Réel. Cet attribut définit la date correspondant à la séquence de calcul.
- numéro : Entier. Cet attribut constitue le numéro d'ordre.
- unité : Chaîne 16. Cet attribut spécifie l'unité de l'attribut "date".

La classe "Numéro d'ordre" contient un unique attribut numéro qui correspond à un numéro d'itération.

### Package "Localisation des points de Gauss par type d'élément"

#### Description

Il est possible dans MED d'échanger des champs exprimés sur les points de Gauss des éléments. Ces points sont répartis au sein des éléments en des lieux différents selon les modélisations numériques utilisées. 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.

#### Diagramme de classe

La classe "Elément de référence aux points de Gauss" constitue la classe racine du package "Localisation des points de Gauss par type d'élément". Cette classe contient les attributs suivants :

- nom : de type Chaîne 32 qui permet d'identifier un objet instance de cette classe.
- type : de type "med_géométrie_élément" (type énuméré qui liste tous les types géométriques d'éléments pré-définis, MED_SEG2 : segment à deux noeuds, MED_SEG3 : segment à trois noeuds, ...).
- nombre de points de Gauss : Entier.

Pour chaque élément de référence, il est possible :

- D'accéder aux noeuds de l'élément. Un objet "Elément de référence aux points de Gauss" va donc contenir de un à plusieurs objets noeud.
- D'accéder aux points de Gauss de l'élément. Un objet "Elément de référence aux points de Gauss" va donc contenir de un à plusieurs objets "Point de Gauss".

La classe "Point de Gauss" contient un attribut interne poids de type Réel. Un objet "Point de Gauss" contient un objet noeud qui portent les coordonnées du point de Gauss.

# 4. Conventions les maillages non structurés : Connectivités de référence

Cette section décrit les connectivités de référence. Pour chaque type de maille, la connectivité de référence permet de reconstituer les arêtes et les faces des mailles (on donne la composition en noeuds des arêtes et la composition en arêtes des faces).

### Les segments

- Segments à 2 noeuds

  Arête | Sommet 1 | Sommet 2
  --- | --- | ---
  A1 | N1 | N2

- Segments à 3 noeuds

  Arête | Sommet 1 | Sommet 2 | Milieu
  --- | --- | --- | ---
  A1 | N1 | N2 | N3

### Les triangles

- Les triangles à 3 noeuds

  Arête | Sommet 1 | Sommet 2
  --- | --- | ---
  A1 | N1 | N2
  A2 | N2 | N3
  A3 | N3 | N1

- Les triangles à 6 noeuds

  Arête | Sommet 1 | Sommet 2 | Milieu
  --- | --- | --- | ---
  A1 | N1 | N2 | N4
  A2 | N2 | N3 | N5
  A3 | N3 | N1 | N6

### Les quadrangles

- Les quadrangles à 4 noeuds

  Arête | Sommet 1 | Sommet 2
  --- | --- | ---
  A1 | N1 | N2
  A2 | N2 | N3
  A3 | N3 | N4
  A4 | N4 | N1

- Les quadrangles à 8 noeuds

  Arête | Sommet 1 | Sommet 2 | Milieu
  --- | --- | --- | ---
  A1 | N1 | N2 | N5
  A2 | N2 | N3 | N6
  A3 | N3 | N4 | N7
  A4 | N4 | N1 | N8

### Les tétraèdres

- Les tétraêdres à 4 noeuds

  Arête | Sommet 1 | Sommet 2
  --- | --- | ---
  A1 | N1 | N2
  A2 | N2 | N3
  A3 | N3 | N1
  A4 | N1 | N4
  A5 | N2 | N4
  A6 | N3 | N4

- Les tétraèdres à 10 noeuds

  Arête | Sommet 1 | Sommet 2 | Milieu
  --- | --- | --- | ---
  A1 | N1 | N2 | N5
  A2 | N2 | N3 | N6
  A3 | N3 | N1 | N7
  A4 | N1 | N4 | N8
  A5 | N2 | N4 | N9
  A6 | N3 | N4 | N10

- Connectivité descendante commune

  Face | Arête 1 | Arête 2 | Arête 3
  --- | --- | --- | ---
  F1 | A1 | A2 | A3
  F2 | A4 | -A5 | -A1
  F3 | A5 | -A6 | -A2
  F4 | A6 | -A4 | -A3

### Les pyramides

- Les pyramides 5 noeuds

  Arête | Sommet 1 | Sommet 2
  --- | --- | ---
  A1 | N1 | N2
  A2 | N2 | N3
  A3 | N3 | N4
  A4 | N4 | N1
  A5 | N1 | N5
  A6 | N2 | N5
  A7 | N3 | N5
  A8 | N4 | N5

- Les pyramides à 13 noeuds

  Arête | Sommet 1 | Sommet 2 | Milieu
  --- | --- | --- | ---
  A1 | N1 | N2 | N6
  A2 | N2 | N3 | N7
  A3 | N3 | N4 | N8
  A4 | N4 | N1 | N9
  A5 | N1 | N5 | N10
  A6 | N2 | N5 | N11
  A7 | N3 | N5 | N12
  A8 | N4 | N5 | N13

- Connectivité descendante commune

  Face | Arête 1 | Arête 2 | Arête 3 | Arête 4
  --- | --- | --- | --- | ---
  F1 | A1 | A2 | A3 | A4
  F2 | A5 | -A6 | -A1 | _
  F3 | A6 | -A7 | -A2 | _
  F4 | A7 | -A8 | -A3 | _
  F5 | A8 | -5 | -A4 | _

### Les hexaèdres

- Les hexaèdres à 8 noeuds

  Arête | Sommet 1 | Sommet 2
  --- | --- | ---
  A1 | N1 | N2
  A2 | N2 | N3
  A3 | N3 | N4
  A4 | N4 | N1
  A5 | N5 | N6
  A6 | N6 | N7
  A7 | N7 | N8
  A8 | N8 | N5
  A9 | N1 | N5
  A10 | N2 | N6
  A11 | N3 | N7
  A12 | N4 | N8

- Les hexaèdres à 20 noeuds

  Arête | Sommet 1 | Sommet 2 | Milieu
  --- | --- | --- | ---
  A1 | N1 | N2 | N9
  A2 | N2 | N3 | N10
  A3 | N3 | N4 | N11
  A4 | N4 | N1 | N12
  A5 | N5 | N6 | N13
  A6 | N6 | N7 | N14
  A7 | N7 | N8 | N15
  A8 | N8 | N5 | N16
  A9 | N1 | N5 | N17
  A10 | N2 | N6 | N18
  A11 | N3 | N7 | N19
  A12 | N4 | N8 | N20

- Connectivité descendante commune

  Face | Arête 1 | Arête 2 | Arête 3 | Arête 4
  --- | --- | --- | --- | ---
  F1 | A1 | A2 | A3 | A4
  F2 | -A8 | -A7 | -A6 | -A5
  F3 | A9 | A5 | -A10 | -A1
  F4 | A10 | A6 | -A11 | -A2
  F5 | A11 | A7 | -A12 | -A3
  F6 | A12 | A8 | -A9 | -A4

### Les pentaèdres

- Les pentaèdres à 6 noeuds

  Arête | Sommet 1 | Sommet 2
  --- | --- | ---
  A1 | N1 | N2
  A2 | N2 | N3
  A3 | N3 | N1
  A4 | N4 | N5
  A5 | N5 | N6
  A6 | N6 | N4
  A7 | N1 | N4
  A8 | N2 | N5
  A9 | N3 | N6

- Les pentaèdres à 15 noeuds

  Arête | Sommet 1 | Sommet 2 | Milieu
  --- | --- | --- | ---
  A1 | N1 | N2 | N7
  A2 | N2 | N3 | N8
  A3 | N3 | N1 | N9
  A4 | N4 | N5 | N10
  A5 | N5 | N6 | N11
  A6 | N6 | N4 | N12
  A7 | N1 | N4 | N13
  A8 | N2 | N5 | N14
  A9 | N3 | N6 | N15

- Connectivité descendante commune

  Face | Arête 1 | Arête 2 | Arête 3 | Arête 4
  --- | --- | --- | --- | ---
  F1 | A1 | A2 | A3 | _
  F2 | -A6 | -A5 | -A4 | _
  F3 | A7 | A4 | -A8 | -A1
  F4 | A8 | A5 | -A9 | -A2
  F5 | A9 | A6 | -A7 | -A3

### Les polygones et polyèdres quelconques

Les éléments considérés ont les propriétés suivantes :

1. L'élément est fermé et borné.
2. L'élément est connexe.
3. Les sommets de l'élément sont distincts.
4. L'élément n'est pas dégénéré (volume/surface non nul(le)).

Les polygones et les polyèdres peuvent apparaître dans un maillage MED issu d'un raccordement non conforme de deux maillages.

# 5. Conventions pour les maillages structurés

### Indexation d'une grille

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 : la connaissance des indices d'un noeud en donne la position relative. Nous adopterons le système d'indexation suivant pour ce type de maillage :

Par convention également, le noeud "origine" d'une grille a pour index (1,1,1) en 3D, (1,1) en 2D et (1) en 1D.

Voici par exemple le résultat obtenu pour une grille "5x3".

### Numérotation des noeuds et des éléments d'une grille

Dans un maillage structuré, la numérotation des noeuds et des éléments est implicite.

Considérons un maillage structuré 2D dont le premier axe comporte "n" points et le second axe "p" points :

- Le noeud d'index (i,j) a pour numéro (i + (j-1) *n).
- L'élément d'index (i,j) (élément porté par le noeud d'index (i,j)) a pour numéro (i + (j-1) * (n-1).

Si on reporte cette convention de numérotation des noeuds et des éléments sur notre grille "5x3", on obtient :

### Définition des coordonnées des noeuds d'une grille polaire ou cartésienne

Pour une grille cartésienne (MED_GRILLE_CARTESIENNE), le repère est cartésien. Pour une grille polaire (MED_GRILLE_POLAIRE), le repère est cylindrique.

Pour ces deux types de grilles, il est inutile de spécifier l'ensemble des coordonnées des noeuds du maillage, il suffit de décrire les coordonnées des points selon chacun des axes de la grille.

Par exemple, pour une grille cartésienne "5x3", il suffit de spécifier les coordonnées selon chacun des axes :

- Pour l'axe "X", on donnera donc 5 réels : X1, X2, X3, X4 et X5.
- Pour l'axe "Y", on donnera donc 3 réels : Y1, Y2 et Y3.

Les coordonnées de chaque noeud se déduisent ensuite en fonction de sa position (index) dans la grille. Par exemple le noeud d'index (2,3) et de numéro 12 a pour coordonnées X2,Y3.

# 6. Conventions et notations UML employées

### Classe et attribut de classe

Une classe est un modèle qui décrit des objets (instances). Une classe comporte des attributs internes. Les attributs d'une classe sont définis par un nom, un type et éventuellement une valeur initiale.

En UML, chaque classe est représentée par un rectangle divisée en compartiments. Le premier compartiment contient le nom de la classe. Le second compartiment contient la liste des attributs.

### Association

Une association décrit un lien entre deux classes d'objets :

- On peut définir des associations multiples. Chaque extrémité d'une association peut porter une information qui précise le nombre d'instances qui participe à la relation. La valeur par défaut est 1, les valeurs les plus courantes sont
  - 0..1 : zéro ou un.
  - 0..* : zéro ou plusieurs.
  - 1..* : un ou plusieurs.
- Pour améliorer la lisibilité d'un diagramme de classes, il est possible de préciser le "rôle d'une association" à l'aide d'une forme verbale passive ou active. Le sens de la lecture est précisé par une flèche.
- Toutes sortes de contraintes peuvent être définies sur un groupe d'associations. Les contraintes se représentent par des expressions placées entre accolades. Par exemple, la contrainte {XOR} indique que pour un objet donné, une seule association parmi un groupe d'associations est valide.
- Une association peut être vue comme un canal de navigation entre deux objets ou deux classes. Par défaut les associations sont navigables dans les deux sens. Dans certains cas, un seul sens de navigation est nécessaire : l'extrémité de l'association vers laquelle la navigation est possible, porte alors une flèche.

Voici en UML, les types d'associations que nous venons de décrire.

### Agrégation

Une agrégation est une association qui exprime un couplage fort entre deux classes. Une des classes (agrégat) joue un rôle dominant dans la relation : relation de type maître/esclave.

La notation UML pour définir une agrégation est la suivante.

### Composition

Une composition est une agrégation avec une notion de couplage encore plus forte. La classe ayant le rôle dominant est appelée conteneur.

La composition implique une coïncidence des durées de vie des objets mis en relation :

- La destruction du conteneur entraîne la destruction de tous les autres objets.
- La création, la modification, la destruction des divers objets internes est à la charge du conteneur.

D'autre part, la valeur maximum de la multiplicité du côté du conteneur ne doit pas excéder 1.

La notation UML définissant une composition est la suivante.

### Héritage

L'héritage est un mécanisme de généralisation, par l'intermédiaire de ce mécanisme, une classe (la classe dérivée) récupère les propriétés (attributs) de la classe parent (classe de base).

Une classe de base peut être une classe abstraite (une classe abtraite n'est pas instanciable, elle ne peut pas donner naissance à un objet).

La notation UML pour définir un héritage en UML est la suivante. Par convention en UML, le nom d'une classe abstraite est en italique.

### Package

Les packages ou paquetages offrent un mécanisme de partition des classes. Les packages permettent de regrouper des classes ou d'autres packages dans un diagramme de classes. Une couche purement logique est définie par un package qui se voit associer le mot clé "layer".

Une relation de dépendance entre packages doit exister dès que deux éléments issus des deux packages différents sont associés. Une relation de dépendance est orientée du package "source" (client) vers le package "cible" (fournisseur).

En UML, un package est représenté graphiquement par un dossier.