Annexes

Annexe A: Structure d’un fichier Amelet HDF

HDF5

Tout comme le format HDF5 est organisé hierarchiquement comme un système de fichiers avec des dossiers et des fichiers. Les principaux types d’objets sont:

Group

Un “group” ressemble à un dossier dans un système de fichiers et peut contenir d’autres objets.

Dataset

Un “dataset” est un tableau de données multidimensionnelles et est contenu dans un “group”, comme un fichier est contenu dans un dossier.

Table

Un “table” est un “dataset” spécial représentant des données multicolonnes.

Voici un exemple de structure de fichier HDF5 :

exemple.h5
data.h5/
|-- dataset1[@type=a_type]
|-- table1
|-- group1
|   |-- dataset2
|   |-- dataset3
|   |-- table2
|   |-- group2
|   |   |-- table3
|   |   `-- table4
|   `-- table5
|-- table2
`-- dataset3

Chaque objet est identifié par un chemin absolu ou relatif depuis le noeud racine ou un autre noeud. Par exemple, le chemin absolu de table4 est /group1/group2/table4. Le chemin relatif de table4 par rapport à group1 est group2/table4.

Chaque objet peut être décrit par des attributs, qui sont des paires clé-valeur. Par exemple, l’attribut type de dataset1 a pour valeur a_type. La valeur d’un attribut peut être de n’importe quel type pris en charge par HDF5, tels que : entier, réel, booléen, chaîne de caractères.

L’extension h5 est souvent associée aux fichiers HDF5.

Amelet HDF

Amelet HDF est basé sur le format HDF5. Il ajoute des conventions pour l’organisation des données dans un fichier HDF5. Les conventions Amelet HDF sont les suivantes :

Attributs de fichiers

Une instance de fichier Amelet HDF doit avoir les attributs avec les valeurs suivantes :

data.h5[@FORMAT=AMELETHDF
|       @AMELETHDF_FORMAT_VERSION=1.0.0]/
`-- physicalModel
    `-- volume
        |--$water
        `--$soltWater
Des catégories prédéfinies

Les objets Amelet HDF sont organisés dans des catégories (ou “group”) prédéfinies. En voici une la structure complète:

data.h5/
|-- label
|-- group
|-- externalElement
|-- globalEnvironment
|-- electromagneticSource
|   |-- planeWave
|   |-- sphericalWave
|   |-- generator
|   |-- dipole
|   |-- sourceOnMesh
|   `-- antenna
|-- physicalModel
|   |-- multiport
|   |-- multilayer
|   |-- slotProperties
|   |-- anisotropic
|   |-- volume
|   |-- aperture
|   |-- shield
|   `-- grid
|-- mesh
|-- floatingType
|-- exchangeSurface
|-- transmissionLine
|   `--transmissionLineElement
|-- network
|   `-- $net1
|       |-- topology
|       |-- tubes
|       |-- junctions
|       `-- connections
|-- link
|-- outputRequest
|-- localizationSystem
|-- extensionTypes
|   `-- $car
`-- simulation
    `-- $sim1
        |-- input
        `-- output

Pour plus d’informations, voir la documentation de la spécification Amelet HDF.

Les maillages dans Amelet HDF

Dans Amelet HDF, les maillages se trouvent dans la catégorie /mesh. Etant donné la possibilité de maillages hybrides, les maillages sont stockés dans des groupes de la catégorie /mesh. En voici un exemple :

data.h5/
`-- mesh/
    |-- $gmesh1
    |    |-+ $mesh#5
    |    `-+ $mesh_6
    `-- $gmesh2
        |-- $mesh1[@type=unstructured]/
        |   |-- elementNodes
        |   |-- elementTypes
        |   |-- nodes
        |   |-- group
        |   |   |-- $field-location[@type=node]
        |   |   |-- $right-wing[@type=element
        |   |   |               @entityType=face]
        |   |   `-- $left-wing[@type=element
        |   |                  @entityType=face]
        |   |-- groupGroup
        |   |   `-- $wings
        |   `-- selectorOnMesh
        |       |-- nodes
        |       |-- elements
        |       `-- groups
        |-+ $mesh-two
        `-- $mesh-3[@type=structured]/
            |-- cartesianGrid
            |-- group
            |   |-- $field-location[@type=node]
            |   |-- $right-wing[@type=element
            |   |               @entityType=face]
            |   `-- $left-wing[@type=element
            |                  @entityType=face]
            |-- groupGroup
            |   `-- $wings
            `-- selectorOnMesh
                |-- nodes
                |-- elements
                `-- groups

Les noms d’objets commençant par un $ sont des noms qui peuvent être modifiés par l’utilisateur.

Dans l’exemple ci-dessus, le maillage data.h5:/mesh/$gmesh2/$mesh1 est un maillage non structuré et data.h5:/mesh/$gmesh2/$mesh-3 est un maillage structuré.

Maillage non structuré

Dans Amelet HDF, un maillage non structuré est un groupe d’un groupe de la catégorie /mesh portant l’attribut type avec la valeur unstructured, et contenant les éléments obligatoires suivants :

nodes

Un dataset contenant les coordonnées (x, y, z en 3D) des noeuds du maillage.

elementTypes

Un dataset contenant les types des éléments du maillage. Ces types sont des entiers et sont définis dans la documentation officielle de la spécification Amelet HDF. Par exemple, le type d’un triangle linéaire est 11.

elementNodes

Un dataset (uni-dimensionnel) contenant la connectivité des éléments du maillage. Pour chaque ligne du dataset elementTypes, correspond une ou plusieurs lignes du dataset elementNodes selon le type de l’élément.

Par exemple, pour le /mesh/$gmesh/$mesh/elementTypes suivant :

index type de l’élément

0

11

1

11

/mesh/$gmesh/$mesh/elementNodes est :

index indices des noeuds de l’élément

0

0

1

1

2

1

3

2

4

0

5

2

Un maillage non structuré peut contenir les éléments optionnels suivants :

group

Un groupe contenant des datasets d’entiers (groupes d’éléments). Ces groupes d’éléments peuvent être utilisés pour définir des zones cruciales pour la simulation. Ces datasets sont d’ensembles d’indices de noeuds ou d’éléments selon qu’ils aient un attribut type avec la valeur node ou element. Si l’attribut type vaut element, alors le dataset a un attribut entityType avec l’une des valeurs suivante :

edge

Le dataset contient des éléments linéaires.

face

Le dataset contient des éléments surfaciques.

volume

Le dataset contient des éléments volumiques.

groupGroup

Un groupe contenant un ensemble de nom de groupes d’éléments. Autrement dit, il contient des datasets de chaînes de caractères. Ces chaînes de caractères sont les noms des groupes d’éléments contenus dans le groupe group.

Voici un exemple de maillage non structuré :

data.h5
`-- mesh/
    `-- $gmesh1/
        `-- $mesh1[@type=unstructured]/
            |-- nodes
            |-- elementTypes
            |-- elementNodes
            |-- group
            |   |-- $field-location[@type=node]
            |   |-- $right-wing[@type=element
            |   |               @entityType=face]
            |   `-- $left-wing[@type=element
            |                  @entityType=face]
            `-- groupGroup
                `-- $wings

avec data.h5:/mesh/$gmesh1/$mesh1/groupGroup/$wings contenant :

index les enfants de data.h5:/mesh/$gmesh1/$mesh1/group

0

$right-wing

1

$left-wing

Maillage structuré

Dans Amelet HDF, un maillage structuré est un groupe d’un groupe de la catégorie /mesh portant l’attribut type avec la valeur structured, et contenant l’élément obligatoires suivants :

cartesianGrid

Un groupe représentant la grille cartésienne du maillage. Selon la dimension du maillage (1, 2 ou 3), la grille est représentée par les vecteurs (datasets uni-dimensionnels) de floattants x, y et z. Ces datasets possèdent un attribut obligatoire floatingType = vector. Les noeuds du maillage sont les points de la grille cartésienne, c’est à dire les intersections des lignes de la grille cartésienne.

Selon la dimension de l’espace, chaque élément de la grille est défini à l’aide des indices i, j, k respectivement des vecteurs x, y et z. On distingue principallement les éléments suivants :

node

Un noeud A est défini par un tuple d’entier, la dimension du tuple dépendant de la dimension de l’espace:

dimension de l’espace coordonnées de A

1D

i

2D

(i, j)

3D

(i, j, k)

edge

Une arête A est définie par deux noeuds alignés A et B selon un axe de la grille.

dimension de l’espace coordonnées de A coordonnées B

1D

i

i+1

2D

(i, j)

(i+1, j)

(i, j)

(i, j+1)

3D

(i, j, k)

(i+1, j, k)

(i, j, k)

(i, j+1, k)

(i, j, k)

(i, j, k+1)

face

Une face est définie par deux noeuds A et B.

dimension de l’espace coordonnées de A coordonnées B

2D

(i, j)

(i+1, j+1)

3D

(i, j, k)

(i+1, j+1, k)

(i, j, k)

(i, j+1, k+1)

(i, j, k)

(i+1, j, k+1)

volume

Un volume est défini par deux noeuds A et B.

dimension de l’espace coordonnées de A coordonnées B

3D

(i, j, k)

(i+1, j+1, k+1)

Tout comme un maillage non structuré, un maillage structuré peut contenir les éléments optionnels suivants :

  • group

  • groupGroup

Voici un exemple de maillage structuré :

data.h5
`-- mesh/
    `-- $gmesh1/
        `-- $mesh1[@type=structured]/
            |-- cartesianGrid
            |   |-- x[@physicalNature=length
            |   |     @unit=meter]
            |   |-- y[@physicalNature=length
            |   |     @unit=meter]
            |   `-- z[@physicalNature=length
            |          @unit=meter]
            |-- group
                |-- $right-wing[@type=element
                                @entityType=volume]

data.h5:/mesh/$gmesh1/$mesh1/group/$right-wing est :

imin

jmin

kmin

imax

jmax

kmax

1

1

1

2

2

2

15

15

15

27

25

27

Dans cet exemple, data.h5:/mesh/$gmesh1/$mesh1/group/$right-wing est un constité de 2 volumes. Chaque ligne de data.h5:/mesh/$gmesh1/$mesh1/group/$right-wing représente ainsi un ou plusieurs parallelepipedes rectangles de la grille cartésienne.