.. meta::
   :keywords: maillage, champ, manipulation, med
   :author: Guillaume Boulant

.. include:: medcalc-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.