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