Salome HOME
Translate GUI user guide to english
[modules/med.git] / src / MEDOP / doc / sphinx / fr / medop-specifications.rst
diff --git a/src/MEDOP/doc/sphinx/fr/medop-specifications.rst b/src/MEDOP/doc/sphinx/fr/medop-specifications.rst
new file mode 100644 (file)
index 0000000..09ca88c
--- /dev/null
@@ -0,0 +1,916 @@
+.. meta::
+   :keywords: maillage, champ, manipulation, med
+   :author: Guillaume Boulant
+
+.. include:: medop-definitions.rst
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Module MED: Spécifications fonctionnelles et techniques
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Ce texte présente les spécifications informatiques pour le
+développement d'un module de manipulation de champs qui répond à
+l'expression de besoins formulée dans le cahier des charges
+|REF_EDF_VCA_H-I2C-2009-03595-FR|_.
+
+.. contents:: Sommaire
+   :local:
+   :backlinks: none
+
+Description des cas d'application de référence
+==============================================
+
+Plusieurs cas d'applications métier sont identifiés pour piloter le
+développement du module de manipulation de champs:
+
+* **Analyser et post-traiter le résultat d'un calcul**. C'est l'usage
+  principal qui consiste typiquement à créer des champs comme le
+  résultat d'*opérations mathématiques* dont les opérandes sont des
+  champs et des scalaires. On compte également dans cette catégorie
+  les *opérations de restriction* qui permettent d'extraire puis
+  utiliser une partie d'un champs, c'est-à-dire de créer un champ
+  comme la restriction d'un autre champ à une partie de son domaine de
+  définition (certaines composantes, certains pas de temps, limitation
+  à un groupe de mailles).
+* **Comparer des champs issus d'un calcul paramétrique**. Il s'agit
+  d'une variante du cas précédent qui consiste à mesurer et visualiser
+  les variations entre des champs issues de sources de données
+  différentes (différents fichiers med).
+* **Préparer les conditions aux limites d'une calcul**. Il s'agit de
+  pouvoir initialiser un champ sur un maillage ou un groupe de
+  mailles, c'est-à-dire créer un champ de toute pièce sur un
+  support spatial donné, par exemple par la donnée d'une fonction
+  mathématique qui donne les valeurs des composantes en fonction des
+  coordonnées spatiales.
+* **Gérer des données de calcul**. Il s'agit typiquement de pouvoir
+  rassembler au sein d'un même fichier med des champs et des maillages
+  issues de différentes sources de données, et/ou créés au travers des
+  cas d'application présentés ci-dessus.
+
+Modèle conceptuel des données
+=============================
+
+On rappelle ici les concepts utilisés dans le module et les modalités
+d'utilisation de ces concepts. Le point de vue est celui de
+l'utilisateur du module de manipulation de champs. Il s'agit
+essentiellement pour le moment d'éclaircir l'ergonomie d'usage sur le
+plan conceptuel, avant d'aborder la déclinaison en spécifications
+techniques pour lesquelles les particularités du modèle MED devront
+être intégrées à la réflexion.
+
+Concept de champ
+----------------
+
+Le concept central est celui de *champ*, c'est-à-dire une grandeur
+physique exprimée sur un domaine spatial D. La grandeur peut être de
+type scalaire (une température), de type vectorielle (une vitesse) ou
+de type tensorielle (les contraintes). En un point de l'espace, elle
+se définie donc par la donnée d'une ou plusieurs valeurs numériques
+appelées les *composantes* (1 pour un champ scalaire, 3 pour un champ
+vectoriel 3D, 6 pour un champ tensoriel symétrique 3D).
+
+.. note:: Une pratique courante au niveau des codes est de stocker
+   plusieurs grandeurs physiques différentes dans un même champs med
+   (au sens informatique du terme). Par exemple, le champ
+   électromagnétique à 6 composantes, plus le champ de température
+   scalaire peuvent techniquement être stockés dans un même champs med
+   à 7 composantes. C'est pourquoi, le module de manipulation de
+   champs doit fournir des fonctions de restrictions qui permettent
+   d'extraire certaines composantes pour former la grandeur physique à
+   étudier. Dans la suite du document, on part du principe que l'on
+   peut se ramener dans tous les cas au cas d'un champ homogène tel
+   que défini plus haut.
+
+Dans le cadre d'un modèle numérique discret, les valeurs du champ sont
+exprimées pour un nombre fini de positions, qui correspondent à des
+lieux particuliers du maillage. Suivant la nature des modèles de
+calcul, les valeurs peuvent être données par cellule, par face, par
+noeud, aux points de gauss, ...
+
+Ainsi, un champ discret est un objet dont les valeurs peuvent être
+lues selon les dimensions suivantes:
+
+* *La position p dans l'espace*, caractérisée par le type de l'élément
+  de maillage support et son numéro identifiant
+* *La composante c*, caractérisée par son indice (jusqu'à 6
+  composantes dans les modèles physiques envisagés)
+
+L'évolution d'un champ dans le temps peut être exprimée sous la forme
+d'une série temporelle, c'est-à-dire une séquence de champs donnés
+pour des instants discrets. Aussi, si l'on manipule un champ qui varie
+dans le temps, l'accès aux valeurs introduit une dimension
+supplémentaire:
+
+* *Le temps t*, caractérisé par un numéro de pas de temps
+  (correspondant en général à une étape du calcul qui a produit le champ).
+
+.. note:: Il s'agit là d'une représentation conceptuelle standard dont
+   le |LINK_EDF_MEDDOC|_ fait une expression détaillée. En
+   particulier, la position p est déterminée par la donnée du type
+   d'élément support (valeurs aux noeuds, aux mailles, aux noeuds par
+   éléments, aux points de gauss) et de l'indice de cet élément. En
+   général, le type d'éléments support est résolu à l'initialisation
+   et l'indice peut suffire au repérage dans les algorithmes. Le temps
+   t est déterminé par un numéro d'itération, qui peut éventuellement
+   être complété par un numéro d'ordre. Le cas des points de gauss
+   ajoute un cran de complexité dans la mesure où il faut repérer
+   l'entité géométrique (maille, face, arrête) puis le point de gauss
+   de cette entité. A noter que dans le modèle MED, le concept de
+   série temporelle de champ n'est pas explicitement définie et
+   l'accès à des valeurs à différents instants t1 et t2 nécessite le
+   chargement des champs ``F1=F(t1)`` et ``F2=F(t2)``.
+
+Par convention, on utilisera par la suite les notations:
+
+* **U(t,p,c)** pour désigner la valeur de la composante c d'un champ U
+  à la position p et prise à l'instant t; 
+* **U(t,p,:)** pour signifier que l'on manipule l'ensemble de toutes
+  les composantes;
+* **U(t,:,c)** pour signifier que l'on manipule le domaine de
+  définition spatial complet. 
+
+Dans une grande majorité des cas d'usage on travaille à temps t fixé
+et sur un domaine spatiale prédéfini. Aussi on utilisera également la
+notation à deux arguments ``U(:,:)`` ou tout simplement ``U`` (dès
+lors qu'il n'y a pas ambiguïté) pour désigner un champ complet et Uc
+pour désigner la composante c du champ avec c=1..6.
+
+Concept d'opération
+-------------------
+Le deuxième concept à préciser est la notion d'*opération*. Une
+opération dans le présent contexte est l'application d'un opérateur
+sur un ou plusieurs champs pour produire une grandeur de type champ ou
+de type valeur numérique.
+
+Par exemple, la formule ``W=OP(U,V)`` indique que le champ W est formé
+à partir des champs U et V en arguments d'une fonction OP. Dans le cas
+d'une opération algébrique comme l'addition (cf. :ref:`Spécification
+des opérations<xmed-specifications>`, le résultat attendu par défaut
+est que pour chaque instant t, chaque position p et chaque composante
+c, on a ``W(t,p,c)=U(t,p,c)+V(t,p,c)`` (que l'on peut noter également
+``W(:,:,:)=U(:,:,:)+V(:,:,:)`` compte-tenu de la convention présentée
+plus haut). Ce n'est cependant pas une règle et l'utilisateur peut
+très bien manoeuvrer les champs en détaillant et mixant les
+composantes (par exemple ``W(:,:,3)=5+U(:,:,1)*V(:,:,2)``), ou encore
+ne travailler que sur un domaine spatial et/ou temporel particulier
+(cf. |REF_EDF_VCA_H-I2C-2009-03595-FR|_ §5.4.1).
+
+On formalise donc le concept d'opération par les propriétés suivantes:
+
+* L'opérateur peut produire un champ (par exemple la somme de deux
+  champs W=sum(U,V)=U+V), une valeur numérique (par exemple la moyenne
+  spatiale d'un champ m=smoy(U)) ou une valeur logique (par exemple le
+  test d'égalité de deux champs b=isequal(U,V));
+* L'opérateur peut être paramétré par la donnée de valeurs numériques
+  (par exemple, le changement d'unité peut être défini comme une
+  multiplication par un scalaire V=multiply(U,1000)=1000*U);
+* L'opérateur est caractérisé par un domaine d'application qui
+  spécifie la portée de l'opération. Ce domaine comporte plusieurs
+  dimensions:
+  - Un domaine temporel T qui spécifie les pas de temps sur lesquels
+    l'opération est appliquée;
+  - Un domaine spatial D qui spécifie la limite de portée de
+    l'opérateur et donc le domaine de définition du champ produit (qui
+    correspond dans ce cas à une restriction du domaine de définition
+    des champs en argument);
+  - Un domaine de composantes C qui spécifie les composantes sur
+    lesquelles l'opération est appliquée;
+
+.. note::
+   Sur le plan informatique, l'opérateur aura également un paramètre
+   appelé *option* qui pourra indiquer par exemple dans une
+   opération unaire V=F(U) si le résultat V est une nouvelle instance
+   de champ ou la valeur modifiée du champ de départ U. Il pourra
+   également être amené à manoeuvrer des paramètres de type chaîne de
+   caractères, par exemple pour les opérations de changement de nom
+   des champs.
+
+De manière générale, on utilisera la notation
+**(W|y)=OP[D,C,T](P,U,V,...)** pour désigner une opération OP:
+
+* **(V|y)**: V ou y désignent respectivement un résultat de type
+  champ ou de type valeur numérique ou logique;
+* **[T,D,C]**: le domaine d'application de l'opérateur avec T le
+  domaine temporel, D le domaine spatial et C le domaine des
+  composantes;
+* **P,U,V,...**: les paramètres numériques P (liste de valeurs
+  numériques) et les champs U,V,... en arguments de l'opérateur;
+
+On note également les particularités suivantes pour certaines
+opérations:
+
+* Le domaine de définition du champ produit par une opération peut
+  être différent du domaine de définition des champs en argument. Par
+  exemple, dans le cas d'une opération de projection de champ, le
+  domaine spatial résultat peut être modifié par rapport au domaine de
+  définition initial, soit par la modification de la zone géométrique,
+  soit par modification des entités de maillage support.
+* En dehors des opérations de type dérivée et intégrale, les valeurs
+  résultats sont déterminées de manière locale en chaque point du
+  domaine d'application. Par exemple, l'addition W=U+V consiste à
+  produire un champ W dont les valeurs en chaque point p sont la somme
+  des valeurs des composantes de U et V en ce point p: ``W=U+V <=>
+  W(:,p,:)=U(:,p,:)+V(:,p,:)`` pour tout point p du domaine
+  d'application D.
+
+Concept de domaine d'application
+--------------------------------
+
+Un domaine d'application est associé à une opération (et non pas à un
+champ). Il a pour objectif de restreindre la portée de l'opération en
+terme spatial, temporel, jeu des composantes.
+
+Pour ce qui concerne le domaine spatial D, plusieurs modalités de
+définition sont envisagées:
+
+* la donnée d'un maillage ou d'un groupe d'éléments du maillage;
+* un système de filtres qui peut combiner:
+
+  - une zone géométrique définie indépendamment du maillage (boîte
+    limite par exemple),
+  - des critères conditionnant le calcul (par exemple U(t,p,c)=1 si
+    V(t,p,c)<seuil).
+
+.. warning:: Version 2010: D pourra correspondre au maillage complet
+   et dans la mesure du possible à un groupe d'éléments du maillage
+
+Ce domaine d'application peut être différent du domaine de définition
+des champs mais il doit être compatible (recouvrement spatial partiel
+au moins et même support d'entité de maillage). Ainsi, sans précision
+particulière, une opération s'applique à l'ensemble du domaine de
+définition des champs en argument (qui dans la pratique MED est
+spécifié par le support et correspond en général au maillage
+complet).
+
+Limites d'utilisation
+---------------------
+
+Plusieurs situations doivent être examinées pour poser les limites
+d'utilisation:
+
+* Les champs en argument n'ont pas tous le même domaine de définition,
+  par exemple parcequ'il ne sont pas définis sur les mêmes zones
+  géométriques ou parcequ'ils ne sont pas donnés sur le même type
+  d'entité de maillage. On peut imaginer dans ce cas produire le
+  résultat sur les zones de recouvrement uniquement.
+* Le domaine de définition des champs et le domaine d'application de
+  l'opérateur ne sont pas compatibles, par exemple parcequ'on demande
+  une restriction sur une zone géométrique qui ne fait pas partie de
+  la zone de définition du champ d'entrée. A priori, ce type
+  d'opération est déclaré en échec.
+* Les champs en argument ne sont pas définis sur les mêmes pas de
+  temps. Si l'opération est tolérée (techniquement MEDCoupling permet
+  de le faire), le pas de temps résultat est indéfini.
+
+.. warning:: **A faire**: spécifier les modalités de prise en compte de
+   ces différentes situations (au moins sur le plan conceptuel).
+
+Au delà de ces limites conceptuelles, il faut avoir en tête les
+limites techniques liées à l'usage de MED mémoire (paquet
+MEDCoupling). Par exemple, MEDCoupling impose que les champs opérandes
+soient définis sur le même maillage support (on parle ici de l'objet
+informatique correspondant au maillage). Deux champs construits sur le
+même maillage (du point de vue conceptuel) mais issus de deux fichiers
+med différents sont considérés comme des champs définis sur des
+maillages support différents, c'est-à-dire que les objects
+informatiques correspondant aux maillages sont différents (chargés de
+deux fichiers différents). En l'état, il est donc impossible par
+exemple de faire la comparaison de champs résultats d'une étude
+paramétriques. MEDCoupling fournit une solution qu'il faudra mettre en
+oeuvre de manière ergonomique au niveau du module MED. Il est possible
+de changer le maillage support M1 d'un champs par un maillage M2 à
+partir du moment où les maillages M1 et M2 sont identiques
+géométriquement à une erreur près qu'il est possible de spécifier.
+
+.. note:: 
+   D'autres situations limites peuvent être évoquées sous l'angle
+   informatique. Ce sont des situations qui a priori n'ont pas de
+   raison d'exister sur le plan conceptuel mais qui peuvent très bien
+   survenir au niveau du module informatique compte-tenu des
+   particularités du modèle MED. Par exemple:
+   
+   * Le nombre et la nature des composantes ne sont pas identiques
+     pour tous les champs d'entrée. Par exemple, U défini ses
+     composantes comme U(:,:,1)=Ux, U(:,:,2)=Uy, U(:,:,3)=Uz et V les
+     défini comme U(:,:,1)=Uz, U(:,:,2)=Ux, U(:,:,3)=Uy. Cette
+     situation peut être gérée techniquement par exemple au moyen
+     d'une carte de correspondance qui accompagnerai chacun des champs
+     pour exprimer le sens physique de chaque composants (histoire de
+     ne pas ajouter des choux et des carottes).
+
+Spécifications générales
+========================
+
+Le diagramme ci-dessous représente un découpage fonctionnel qui rend
+compte de l'expression des besoins:
+
+.. image:: images/xmed-functions.png
+   :align: center
+
+On peut identifier les fonctionnalités suivantes:
+
+* **Opérations**: fonctions de manipulation de champs proprement
+  dites;
+* **Persistance**: fonctions d'enregistrement persistant et de
+  chargement des données (au format med fichier)
+* **Visualisation**: fonctions de contrôle visuel des champs
+  manipulés
+* **Export des données**: fonction de transposition des données de
+  champs dans un format textuel directement exploitable et de manière
+  autoportante dans une autre application, par exemple en python au
+  moyen des structures de données Numpy.
+
+Ces fonctions s'articulent autour d'un conteneur qui héberge les
+champs manipulés et les supports de ces champs (représenté par le
+cylindre central).
+
+Un scénario d'utilisation type est:
+
+* Préparation des champs à manipuler, par deux moyens complémentaires:
+
+  - Utilisation des fonctions de persistance: chargement depuis un
+    fichier med d'un ensemble de champs qui partagent le même espace
+    de définition;
+  - Utilisation des opérations de champs: chargement d'un maillage
+    depuis un fichier med, puis création ab initio de champs au moyen
+    des opérations de champs;
+
+* Manipulation des champs par application des opérations à
+  disposition, puis contrôle visuel des résultats produits au moyen
+  des fonctions de visualisation mises à disposition par SALOME;
+* Restitution des résultats produits, par deux moyens complémentaires:
+
+  - Restitution des champs produits et/ou modifiés sous une forme
+    persistante (fichier med);
+  - Restitution d'une partie seulement des résultats sous forme de
+    tableaux de valeurs sauvegardés dans un fichier texte ou exporté
+    sous forme de tableau numpy
+
+.. _xmed-specifications:
+
+Spécification des opérations
+============================
+
+Le cahier des charges définit trois catégories d'opérations
+mathématiques:
+
+* **Les opérations arithmétiques**, dans lesquelles le résultat à la
+  position p et à l'instant t ne dépend que des données à la position
+  p et à l'instant t;
+* **Les opérations d'interpolations**, dans lesquelles le résultat
+  est exprimé sur des entités de maillages différentes ou est projeté
+  sur une zone géométrique différente du domaine de définition
+  initial;
+* **Les opérations globales**, dans lesquelles le résultat peut
+  demander l'agrégation des valeurs sur plusieurs position p ou
+  plusieurs pas de temps t (calcul d'extremum, d'intégrale);
+
+Auxquelles, on peut ajouter à des fins de gestion des données:
+
+* **Les opérations de génération**, qui permettent de créer un champ
+  sur un maillage vierge ou d'étendre le domaine spatial de définition
+  d'un champ;
+* **Les opérations d'ordre sémantique**, qui permettent de modifier
+  les méta-données associées aux champs (nom, unité, ...)
+* **Les opérations de diagnostic**, qui permettent d'effectuer une
+  analyse particulière d'un champ et/ou des éléments de maillage
+  associés et de fournir un compte-rendu, sous la forme d'une
+  structure de données ou d'un texte formaté affichable dans
+  l'interface utilisateur.
+
+La suite de la section décrit les spécifications prévues pour chaque
+type d'opération unitaire. Un dernier paragraphe concerne les
+modalités de combinaison des opérations et spécifie la définition d'un
+domaine d'application sur une opération, qui permet de restreindre la
+portée de l'opération en terme spatial, temporelle ou nature des
+composantes impliquées.
+
+Les opérations arithmétiques
+----------------------------
+
+Les opérations arithmétiques regroupent:
+
+* les **opérations algébriques** (+, -, x, /);
+* les **opérations vectorielles** (produit scalaire, produit
+  vectoriel, produit tensoriel);
+* l'**application d'une fonction mathématique** à variable scalaire
+  (exponentielle, logarithme, fonctions trigonométriques, valeur
+  absolue, partie entière) ou à variable de type champ (les fonctions
+  de norme par exemple).
+
+Pour les besoins des spécifications informatiques, il est plus commode
+de classer ces opérations en deux catégories:
+
+* les **opérations unaires**, qui prennent un opérande unique en
+  argument. C'est le cas de la plupart des fonctions mathématiques
+  envisagées;
+* les **opérations binaires**, qui prennent deux opérandes en
+  argument. C'est le cas des opérations algébriques et des opérations
+  vectorielles.
+A partir de cette classification, il convient de distinguer trois
+formes d'usage selon la nature des opérandes:
+
+* les opérandes sont exclusivement des scalaires (typiquement des
+  valeurs de composantes des champs et des paramètres numériques). Par
+  exemple::
+    W(:,:4) = 1+2xU(:,:,2)+V(:,:,3)
+
+* les opérandes sont exclusivement des champs. Par exemple::
+
+    W = U + V       (addition)
+    W = U ^ V       (produit vectoriel)
+
+* les opérandes sont des champs et des paramètres numériques. Par exemple::
+
+    W = 3xU - 2xV
+    W = U + 2
+
+Le premier cas de figure (opérandes scalaires) est trivial car les
+règles mathématiques conventionnelles s'appliquent et sont
+implémentées dans tous les langages (Python et C++ en
+particulier). Les cas 2 et 3 par contre doivent être précisés car (i)
+les règles de comportement ne peuvent pas être simplement déduites des
+règles mathématiques (quel est le résultat de ``W = U + 2`` ?) et
+(ii) certaines écritures ne peuvent avoir aucun sens (par exemple
+``W = 2 / U``). Il convient donc de  préciser les conventions et
+les limites sur ces deux cas de figure.
+
+Dans le cas des opérations unaires où l'opérande est un champ, on doit
+distinguer deux cas d'usage:
+
+* l'application d'une fonction mathématique à valeur de type champ. Ce
+  cas est trivial également et on applique la règle d'usage de la
+  fonction. C'est typiquement le cas des fonctions de calcul de
+  norme.
+* l'application d'une fonction mathématique à valeur scalaire. Dans ce
+  cas, on convient d'appliquer la fonction de manière unitaire sur
+  chacune des composantes c du champ: ``W(:,:,c) = OP( U(:,:,c)
+  )``
+
+Dans le cas des opérations binaires, on recense les combinaisons
+d'opérandes suivantes (les lettres capitales représentent des champs,
+et les lettres minuscules une valeur scalaire qui peut être un
+paramètre numérique ou la composante d'un champ):
+
+* U+V ajoute les composantes en regard: W(:,:,c)=U(:,:,c)+V(:,:,c)
+* U-V soustrait les composantes en regard: W(:,:,c)=U(:,:,c)-V(:,:,c)
+* U*V multiplie les composantes en regard: W(:,:,c)=U(:,:,c)*V(:,:,c)
+* U/V divise les composantes en regard: W(:,:,c)=U(:,:,c)/V(:,:,c)
+* U+x ajoute x à toute les composantes: W(:,:,c)=U(:,:,c)+x
+* U*x multiplie toutes les composantes par x: W(:,:,c)=U(:,:,c)*x
+* U.V produit scalaire des champs U et V: W(:,:c)=U(:,:,c)*V(:,:,c)
+* U^V produit vectoriel des champs U et V: W(:,:1)=U(:,:,2)*V(:,:,3)-U(:,:,3)*V(:,:,2), ...
+
+.. note::
+   Pour ce qui concerne les opérations vectorielles, un convention
+   implicite est appliquée par laquelle on suppose que les composantes
+   sont rangées dans l'ordre des dimensions spatiales U1=Ux, U2=Uy,
+   U3=Uz. Sur le plan informatique au niveau du modèle MEDMEM, ceci
+   n'est pas garanti et aucun élément du modèle ne permet de
+   contraindre l'application de cette convention. Il convient donc de
+   prévoir des fonctions techniques qui permettront de mettre en
+   correspondance les indices de composantes et les dimensions
+   spatiales (par exemple par la données d'une carte de correspondance
+   applicable à un ensemble de champs).
+
+.. warning::
+   A développer:
+   
+   * Analyse dimensionnelle du champ résultats pour adapter
+     l'unité. Par exemple, si on fait UxV où U et V sont exprimés en
+     [m] alors le résultat est en [m2].
+
+Les opérations d'interpolation
+------------------------------
+.. warning:: Non prévues au programme 2010.
+
+Les opérations mathématiques globales
+-------------------------------------
+.. warning:: Non prévues au programme 2010.
+
+Les opérations de génération
+----------------------------
+.. warning:: EN TRAVAUX
+
+Les opérations de génération sont des fonctions qui permettent de
+créer un champ sur un domaine du maillage où il n'est pas défini
+initialement. Deux cas de figure peuvent se présenter:
+
+* Le champ n'existe pas et il doit être créé sur un domaine à définir;
+* Le champ existe mais les valeurs ne sont pas définies sur l'ensemble
+  du maillage.
+
+On peut envisager plusieurs modalités de mise en oeuvre:
+
+* le prolongement par une valeur constante (ou plus généralement par
+  une fonction de l'espace?);
+* les valeurs du champs sont données par une fonction f(p,t) qui prend
+  la position p et le pas de temps t en argument;
+* on peut prédéfinir le champ position **r** qui porte les
+  coordonnées spatiales de l'élément de maillage support, puis faire
+  une opération arithmétique standard.
+
+Les opérations d'ordre sémantique
+---------------------------------
+.. warning:: EN TRAVAUX
+
+Concerne:
+
+* le changement de nom du champ
+* le changement d'unité du champ (il s'agit ici de conserver la
+  cohérence entre la valeur numérique et l'attribut "unité" d'un
+  champ.
+
+Les opérations de diagnostic
+----------------------------
+.. warning:: EN TRAVAUX. A faire en fonction des besoins des cas d'application
+
+On peut identifier plusieurs types d'opérations:
+
+* les opérations à diagnostic booléen, par exemple
+  b=isequal(U,V)=[U=V] (où [.] signifie évaluation de la condition
+  entre crochers)
+* les opérations à diagnostic textuel, par exemple afficher les
+  méta-données associées à un champs (unité, nom, maillage support,
+  type d'entité, pas de temps, ...)
+* les opérations à diagnostic structuré, qui donneraient une structure
+  de données exploitable au niveau d'un code logiciel.
+
+Combinaison des opérations
+--------------------------
+.. warning:: EN TRAVAUX. Indiquer les règles de combinaison (associativité, commutativité, ...)
+
+Définition d'un domaine d'application
+-------------------------------------
+Pour rappel, un domaine d'application peut être associé à une
+opération pour restreindre la portée de l'opération en terme spatial,
+temporelle ou nature des composantes impliquées.
+
+.. warning:: Todo: spécifier comment on le définit et les modalités d'applications.
+
+Spécification de l'ergonomie
+============================
+
+L'ergonomie générale d'utilisation du module de manipulation de champs
+est inspirée des logiciels comme octave ou scilab. Elle associe une
+interface graphique, pour sélectionner et préparer les données, avec
+une interface texte (la console python) pour le travail effectif sur
+les données:
+
+* L'**interface graphique** a pour fonction essentielle de sélectionner et
+  préparer les champs à manipuler dans l'interface texte, puis
+  fournit des fonctions pour la gestion générale des données
+  (chargement, sauvegarde, contrôle visuel, export).
+* L'**interface texte** offre un jeu de commandes pour manipuler les
+  champs (afficher les données, effectuer des opérations), piloter les
+  fonctions d'affichage (contrôle visuel au moyen des modules VISU
+  et/ou PARAVIS) et communiquer avec l'interface graphique (ajouter
+  des nouveaux champs dans l'espace de gestion, mettre à jour les
+  méta-données d'un champ).
+
+Sur le plan de l'ergonomie, cela se traduit par un processus de
+travail dans lequel on peut distinguer différentes phases:
+
+* Une phase de préparation des champs à manoeuvrer sous la forme de
+  variables nommées et simples à manipuler dans l'interface
+  textuelle. Lors de cette phase, l'utilisateur spécifie de manière
+  graphique tout ce qui peut être définis à l'avance et pour toute la
+  durée du processus de travail. Par exemple, en spécifiant le nom des
+  fichiers med source des données et les noms des champs à utiliser
+  dans ces fichiers, le pas de temps de travail, le jeu des
+  composantes à considérer, le domaine d'application des opérations;
+* Une phase de manipulation des champs proprement dite, qui a lieu
+  principalement dans l'interface textuelle, et qui peut s'accompagner
+  de contrôle visuel des résultats et/ou d'export à destination
+  d'outils complémentaires indépendants (gnuplot, python, ...);
+* Une phase de restitution des champs produits pour assurer la
+  persistance des données de travail. Tout les champs créés par les
+  manipulations au niveau de l'interface textuelle ne sont pas à
+  sauvegarder, et on on propose donc à l'utilisateur les moyens de
+  choisir les champs à conserver. Cette phase peut amener
+  l'utilisateur à préciser les informations manquantes, comme les noms
+  de fichiers, les noms de champs produits, les unités, ...
+
+Dans ce cadre, l'utilisation type des fonctions de manipulation de
+champs est un processus de la forme suivante:
+
+1. Chargement d'un fichier med dans SALOME et exploration du contenu,
+   composé de maillages, sur lesquels sont définis des champs, pouvant
+   contenir un ou plusieurs pas de temps.
+2. Sélection (graphique) des champs à manipuler, avec la possibilité
+   de préciser des restrictions d'utilisation (pas de temps,
+   composantes, groupe de maille).
+3. Création de nouveaux champs par l'exécution d'opérations
+   algébriques (+,-,*,/) entre champs, l'application de fonctions
+   mathématiques standard (pow, sqrt, abs), ou encore l'initialisation
+   "from scratch" à partir d'un maillage support.
+4. Contrôle visuel rapide des champs produits (avec les modules VISU
+   et/ou PARAVIS de SALOME, pilotés automatiquement depuis l'interface
+   utilisateur)
+5. Enregistrement d'une partie des champs produits dans un fichier med
+
+
+Les espaces de données utilisateur
+----------------------------------
+
+Sur le plan conceptuel, on est amené à définir deux espaces de données
+utilisateur:
+
+* **l'espace des données source** (*dataspace*), dans lequel
+  l'utilisateur définit les sources de données med (*datasource*),
+  c'est-à-dire les fichiers med dans lesquels sont lus les champs
+  et maillages. Cet espace est en lecture seule et permet
+  l'exploration des sources de données (aperçu des maillages et des
+  champs).
+* **l'espace des données de travail** (*workspace*), dans lequel
+  l'utilisateur dépose les champs et maillages à utiliser, puis range
+  les champs produits au travers des fonctions de manipulation de
+  champs.
+
+La figure ci-dessous en donne une représentation imagée avec le
+support de l'interface graphique du module (interface non définitive
+affichée ici pour illustration des spécifications):
+
+.. image:: images/xmed-gui-withframe.png
+   :align: center
+
+.. note:: Techniquement, les données sources sont rangées dans l'étude
+   SALOME et peuvent être explorées au moyen de l'object browser. Les
+   données de travail sont rangées dans un arbre complémentaire et
+   manipulable dans la console python.
+
+Le principe général est que **les données sources ne sont jamais
+modifiées**. Le dataspace est un espace de chargement qui permet
+d'explorer puis de sélectionner les données à manipuler. L'utilisateur
+travaille à partir de maillages et de champs chargés préalablement
+dans cet espace, mais ne peut en aucun cas les modifier
+directement. Pour cela, il doit d'abord les sélectionner pour
+utilisation dans l'espace de travail. Ce choix garantie l'intégrité
+des sources de données et permet de rejouer la séquence de travail à
+partir de zéro en cas de besoin (on efface le tableau noir et on
+recommence). Par ailleurs, il permet d'assister graphiquement la
+définition du champs à manipuler effectivement, en particulier pour
+affecter un nom de variable de manipulation.
+
+Les captures d'écrans suivantes montrent le principe d'utilisation sur
+le cas de la sélection d'un pas de temps à utiliser dans l'espace de
+travail. Les données à manoeuvrer (maillage et/ou champs) sont
+sélectionnées pour utilisation dans l'espace de travail, où elles
+peuvent être modifiées et/ou utilisées dans les opérations de
+champs. Ici, le champ est désigné par la varibale ``f4`` dans
+l'interface textuelle:
+
+* Sur cette première capture, on sélectionne le pas de temps n°4 du
+  champs ``Pulse`` définit sur le maillage ``Grid_80x80`` de la source
+  de données ``timeseries.med`` (concrètement le fichier
+  ``timeseries.med``) pour faire apparaître ensuite le menu contextuel
+  et choisir l'option "Use in workspace":
+
+.. image:: images/xmed-gui-datasource-contextmenu_70pc.png
+   :align: center
+
+* Cette capture montre une fenêtre de dialogue qui invite
+  l'utilisateur à spécifier un alias pour la variable python qui
+  va permettre la manipulation du champ dans l'interface textuelle de
+  l'espace de travail (par défaut, le nom complet du champ est
+  proposé). Ici, l'utilisateur spécifie ``f4``: 
+
+.. image:: images/xmed-gui-datasource-useinworkspace_70pc.png
+   :align: center
+
+* La validation de la fenêtre provoque l'ajout du champs dans l'espace
+  de travail (le champ est désormais disponible à la manipulation) et
+  définit une variable python de nom ``f4`` qui permet la manipulation
+  du champ:
+
+.. image:: images/xmed-gui-datasource-useinworkspace-result_70pc.png
+   :align: center
+
+Modalités d'utilisation
+-----------------------
+
+.. warning:: cette section est à nettoyer car elle contient des
+   informations redondantes avec d'autres sections précédentes ou pire
+   qui contredisent des sections précédentes.
+
+Dans le cadre défini ci-dessus, une session d'utilisation type est:
+
+* Sélectionner les sources de données puis définir le domaine
+  d'application (espace, temps, composantes), avec éventuellement
+  l'assistance d'une interface graphique;
+* Charger les champs en conséquence dans l'espace de travail. Cette
+  opération propose de définir une variable python pour manipulation
+  dans l'interface textuelle.
+* Effectuer les opérations dans l'espace de travail, c'est-à-dire en
+  ligne de commandes python (ce qui demandera sans doute un travail
+  conséquent de simplification et d'assistance en ligne). Par exemple,
+  si ``fa`` et ``fb`` désignent deux champs définis dans l'espace de
+  travail, alors on peut en faire la somme par la commande::
+  
+  >>> r=fa+fb
+
+* Effectuer les contrôles visuel et les diagnostics en ligne de
+  commandes python (cf. :ref:`Spécification des fonctions de
+  visualisation<specification_visualisation>`)::
+
+  >>> view(r)
+
+* Enregistrer les champs produits dans l'espace de travail sous forme
+  de fichier med.
+
+Sur cette base, on peut envisager une grande variété de cas d'utilisation:
+
+* La structure MED (champs, maillage et groupes de mailles) est
+  chargée dans le dataspace (l'étude SALOME techniquement) et peut
+  être explorée au niveau de l'arbre d'étude. L'arbre peut faire
+  apparaître:
+  - les maillages et les groupes (qui peuvent être utilisés
+    éventuellement pour restreindre le domaine d'application)
+  - les champs dont on peut explorer les composantes et les itérations
+
+* On sélectionne plusieurs champs, éventuellement en sélectionnant les
+  pas de temps, les composantes et les domaines d'application spatiaux
+* Menu contextuel --> Modifier un champ, Créer un champ, Prolonger un
+  champ, ....
+* On choisi pour la suite "Créer un champ", une fenêtre de dialogue
+  s'affiche avec les saisies préremplies avec les données
+  sélectionnées. Il est possible de rajouter des éléments ou préciser
+  le domaine d'application
+* Une partie de la boîte de dialogue est réservée à la saisie de la
+  ligne de commande python qui permet la création du nouveau champ. Le
+  nom dans l'étude pour le nouveau champ, ainsi que son nom python,
+  sont spécifié par l'utilisateur ({{H|un peu à la mode du module
+  system}}).
+* L'opération est exécutée dans l'espace utilisateur (l'interface
+  python), de sorte que les variables soient projetées dans cet espace
+  et manipulables après l'opération au besoin. Par ailleurs,
+  l'utilisateur peut visualiser les ligne de commandes nécessaires à
+  taper pour exécuter sa requête.
+
+.. _specification_visualisation:
+
+Spécification des fonctions de visualisation
+============================================
+
+Dans le cadre du module MED, on appelle *fonction de visualisation*
+une fonction qui permet d'avoir un aperçu graphique d'un champ, par
+exemple au moyen d'une carte de champ construite sur une de ses
+composante. Il s'agit là de vue de contrôle pour avoir une idée rapide
+de la forme du champs. Pour créer des représentations spécifiques, on
+préférera passer par les fonctions d'export vers le module PARAVIS.
+
+Les modules VISU et PARAVIS offre des interface de programmation C++
+et python qui permettent le pilotage depuis un module tiers comme le
+module MED. On peut donc envisager une fonction de visualisation
+intégrée au module de manipulation de champs, c'est-à-dire que l'on
+déclenche sans sortir du module MED, et qui exploite les fonctions de
+visualisation des modules VISU et/ou PARAVIS.
+
+Les captures d'écran ci-dessous illustrent la mise en oeuvre de la
+fonction de visualisation:
+
+* Sélection d'un champ pour faire apparaitre le menu contextuel et
+  choisir l'option "Visualize":
+
+.. image:: images/xmed-gui-datasource-visualize_70pc.png
+   :align: center   
+
+* Cette option déclenche l'affichage d'une carte de champ sur le cadre
+  d'affichage des viewers SALOME:
+
+.. image:: images/xmed-gui-datasource-visualize-result_70pc.png
+   :align: center
+
+Cette fonction est également disponible en ligne de commandes de
+l'interface textuelle. Par exemple si ``f4`` désigne un champ de
+l'espace de travail (importé des données source ou construit par les
+opérations de champs), alors, on obtient une carte de champ par la
+commande::
+
+ >>> view(f4)
+
+On peut remarquer d'ailleurs sur la capture d'écran de droite
+ci-dessus que la demande de visualisation déclenche l'exécution de la
+commande ``view`` dans la console de travail sur un champ identifié
+par son numéro (3 dans l'exemple).
+
+.. note:: Tous les champs, qu'ils soient des champs chargés d'une
+   source de données ou construits par des opérations de champs sont
+   identifiés par un numéro unique et invariant tout au long de la
+   session de travail.
+
+Spécification des fonctions de persistance
+==========================================
+
+On adopte le principe de fonctionnement suivant:
+
+* Le module n’assure pas la persistence au sens SALOME du terme,
+  c’est-à-dire qu’il ne permet pas la sauvegarde du travail dans une
+  étude au format hdf, ni le dump sous la forme de script python
+  SALOME. Le besoin n'est pas avéré et on peut même dire que ça n'a
+  pas de sens compte-tenu de l'usage envisagé pour le module MED.
+* Par contre, le module fournit des fonctions de sauvegarde du travail
+  sous forme de fichiers med, l’export vers les modules VISU et
+  PARAVIZ, ou même la sauvegarde de l’historique de l’interface de
+  commandes.
+
+Ainsi donc, l'utilisateur aura une fonction (probablement graphique)
+pour définir la sélection des champs de l'espace de travail à
+sauvegarder.
+
+Spécification des fonctions d'export
+====================================
+
+.. warning:: EN TRAVAUX.
+
+Plusieurs export peuvent être proposés:
+
+* Export des champs vers le module PARAVIZ, dans l'objectif par
+  exemple d'en faire une analyse visuelle plus poussée qu'avec les
+  cartes de champs disponibles par défaut dans le module MED
+* Export des données sous forme de tableau numpy, par exemple pour
+  permettre un travail algorithmique sur les valeurs des champs.
+
+Spécifications techniques
+=========================
+
+Il s'agit d'exprimer ici les contraintes techniques applicables à la
+conception et au développement du nouveau module MED.
+
+Implantation technique du module
+--------------------------------
+
+Il est convenu que le module MED existant dans la plate-forme SALOME
+incarne le module de manipulation de champ. Dans la pratique, il
+s'agit d'identifier clairement les parties à conserver, d'une part,
+puis les parties à re-écrire, d'autre part. On peut partir sur les
+hypothèses techniques suivantes:
+
+* Le noyau du module en charge des opérations de manipulation de
+  champs proprement dites est construit sur la base des paquets
+  logiciels MEDCoupling (lui-même basé sur le INTERP_KERNEL) et
+  MEDLoader.
+* L'interface graphique du module MED est complétement re-écrite et
+  remplacée par une interface adaptée spécialement à la manipulation
+  des champs et la gestion des données associées
+* Le contrôle visuel pourra être déclenché dans les visualisateurs
+  SALOME (servis par les modules VISU et/ou PARAVIZ);
+* Le module n'assure pas la persistence au sens SALOME du terme,
+  c'est-à-dire qu'il ne permet pas la sauvegarde du travail dans une
+  étude au format hdf, ni le dump sous la forme de script python
+  SALOME.
+* Par contre, il fournit des fonctions de sauvegarde du travail sous
+  forme de fichiers med, l'export vers les modules VISU et PARAVIZ, ou
+  même la sauvegarde de l'historique de l'interface de commandes.
+
+L'implantation technique des développements est représentée sur la
+figure ci-dessous:
+
+.. image:: images/xmed-implantation.png
+   :align: center
+
+Le schéma représente les packages logiciels qui composent le module
+MED (cf. |REF_CEA_VBE_MEDMEM|_):
+
+* La partie MEDMEM, représentées en blanc. Cette partie est conservée
+  pour compatibilité ascendante au niveau des applications métier qui
+  ont fait le choix historique de s'appuyer sur MEDMEM. Cette partie
+  du module MED aura tendance à disparaitre dans le futur au bénéfice
+  de MEDCoupling et MEDLoader.
+* La partie MEDCoupling, représentée en orange et qui founrnit le
+  modèle MED mémoire de référence (composé de maillage et de champs)
+  et l'interface de programmation pour manipuler le modèle. Le paquet
+  MEDLoader est une extention dédiée à la persistence au format med
+  fichier (lecture et écriture de champs et de maillage dans des
+  fichiers med).
+* La partie à développer pour la manipulation de champ, représentée en
+  bleu.
+
+.. note:: MEDCoupling peut être vu comme une structure de donnée
+   particulièrement adaptée à la manipulation des gros volumes de
+   données, en particulier par l'exploitation des possibilités de
+   parallélisation et la réduction de la tailles des structures de
+   données. En contrepartie, elle peut présenter un périmètre
+   fonctionnel moins large que MEDMEM. Pour cette raison, MEDMEM avait
+   été choisi comme socle de développement du prototype en 2010:
+
+   * MEDCoupling ne permet pas de gérer des maillages composés de
+     plusieurs type de mailles et il est exclus de le faire évoluer
+     dans ce sens (c'est un choix fait pour les objectifs de
+     performances évoqués plus haut);
+   * MEDCoupling ne permet pas de gérer les supports qui expriment les
+     champs aux noeuds par élément ni aux points de gauss. Cette
+     seconde limitation a disparu en 2011.
+
+   Aujourd'hui, on fait clairement le choix de MEDCoupling pour sa
+   qualité et sa robustesse, dans l'objectif d'une meilleure
+   maintenance à long terme. Par ailleurs, les différences
+   fonctionnelles avec MEDMEM, si elles existaient encore en 2012 pour
+   les besoins de la manipulation de champs, pourront être résorbées
+   dans un futur proche.
+
+