2 :keywords: maillage, champ, manipulation, med, développement
3 :author: Guillaume Boulant
5 .. include:: medop-definitions.rst
7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8 Module MED: Guide de développement du composant MEDOP
9 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
11 Le composant logiciel MEDOP est un élément du module MED. Il fournit
12 une interface utilisateur pour la manipulation de maillages et de
13 champs, composée d'une interface texte (TUI) et d'une interface
14 graphique (GUI). L'interface graphique constitue l'interface graphique
17 Ce document est la documentation technique du composant MEDOP. Il
18 fournit les instructions à suivre pour installer le composant en vue
19 d'un travail de développement, puis décrit les éléments de conception.
21 .. contents:: Sommaire
25 Mise en place de l'espace de développement
26 ==========================================
28 Gestion de configuration du composant MEDOP
29 -------------------------------------------
31 Le composant logiciel MEDOP est un package du module SALOME MED,
32 hébergé dans l'espace source au niveau du sous-répertoire
33 `src/MEDOP`. La gestion des fichiers sources est donc intégrée dans le
36 Organisation des sources du composant MEDOP
37 -------------------------------------------
39 Le répertoire source `src/MEDOP` distingue les sous-répertoires
42 * cmp: package containing the SALOME components
43 * tui: package containing the python user interface
44 * gui: package containing the graphical user interface (the GUI part
46 * res: resources files associated to the MEDOP package (icons, config
47 files, data files, ...)
48 * exe: additional executable programs that can be launched from the
51 Construction du composant MEDOP
52 -------------------------------
54 Intégré à la construction du module MED. Le composant MEDOP dépend de
55 MEDCoupling et MEDLoader uniquement.
57 Exécution des tests unitaires du composant MEDOP
58 ------------------------------------------------
60 Les tests unitaires peuvent être exécutés au moyen de scripts python
61 lancés depuis une session shell SALOME. Dans un nouveau shell, taper::
64 [NS=mars:2810]$ python appli/bin/salome/med/test_medop_components.py
66 L'exécution imprime un rapport détaillant le résultat pour chaque
69 test_Calculator_applyFunc (__main__.MyTestSuite) ... ok
70 test_Calculator_basics (__main__.MyTestSuite) ... ok
71 test_MEDDataManager_getFieldListInFieldseries (__main__.MyTestSuite) ... ok
72 test_MEDDataManager_getFieldseriesListOnMesh (__main__.MyTestSuite) ... ok
73 test_MEDDataManager_getMesh (__main__.MyTestSuite) ... ok
74 test_MEDDataManager_getMeshList (__main__.MyTestSuite) ... ok
75 test_addDatasource (__main__.MyTestSuite) ... ok
76 test_getDataManager (__main__.MyTestSuite) ... ok
77 test_getFieldHandlerList (__main__.MyTestSuite) ... ok
78 test_getFieldRepresentation (__main__.MyTestSuite) ... ok
79 test_markAsPersistent (__main__.MyTestSuite) ... ok
80 test_saveFields (__main__.MyTestSuite) ... ok
81 test_updateFieldMetadata (__main__.MyTestSuite) ... ok
83 Les scripts de test sont installés dans le répertoire ``bin/med``. On trouve:
85 * ``test_medop_components.py``: test les composants SALOME développés pour
86 la manipulation de champs (``MEDDataManager`` et ``MEDCalculator``).
87 * ``test_xmed_fieldOperations.py``: test des operations de champs telles
88 qu'elles sont mises en oeuvre depuis l'interface textuelle.
89 * ``test_xmed_uiEventListener.py``: test du système de notification
90 d'évènements des composants vers la partie gui du module MED.
91 * ``test_xmed_visualisation.py``: test du système de visualisation
92 des champs tel que piloté depuis le module MED.
94 Architecture du module XMED
95 ===========================
97 Le module MED pour la manipulation de champs est composé de:
99 * une bibliothèque de fonctions pour le traitement de données sur des
100 maillages et des champs conformes au modèle MED (package
101 MEDCoupling, MEDLoader et REMAPPER);
102 * une interface graphique pour la mise en oeuvre des cas standard de
103 manipulation de champs;
104 * une ensemble d'outils pour intervenir sur des fichiers au format
107 Une bibliothèque de fonctions pour le traitement de données
108 -----------------------------------------------------------
110 La figure ci-dessous montre la structure des paquets logiciels qui
111 constituent la bibliothèque:
113 .. image:: images/medlayers.png
116 Elle comprend en particulier les paquets suivants:
118 * MEDCoupling: qui décrit les structures de données pour porter les
119 maillages et les champs
120 * MEDLoader: qui fournit les fonctions de persistence sous forme de
121 fichiers au format MED (lecture et écriture).
124 Il est important de noter que MEDCoupling n'a aucune dépendance
125 logicielle autre que la bibliothèque C++ standard. Ceci permet
126 d'envisager son implantation dans un code de calcul ou un outil de
127 traitement sans tirer l'ensemble pré-requis de SALOME.
129 Une interface graphique pour l'exécution des cas standard
130 ---------------------------------------------------------
133 Un ensemble d'outils pour le traitement de fichiers
134 ---------------------------------------------------
137 Description des composants
138 ==========================
140 MEDDataManager - Le gestionnaire des données de session
141 -------------------------------------------------------
143 Le composant MEDDataManager s'occupe de fournir les données MED sur
144 demande des interfaces clientes, en particulier pour module de
145 pilotage fieldproxy.py. Ces données peuvent avoir plusieurs sources,
146 en général elle proviennent d'un fichier au format med contenant des
147 champs définis sur des maillages. Les données sont identifiées à la
148 lecture des métadonnées de description dans le fichiers med, puis les
149 valeurs des champs et les maillages support sont chargés au besoin.
151 Le chargement des métadonnées de description se fait par la méthode::
153 addDatasource(const char \*filepath)
157 Eléments d'implémentation
158 =========================
160 Ecrire un service CORBA qui retourne une sequence de FieldHandler:
164 MEDOP::FieldHandlerList * MyFunction(...) {
165 vector<MEDOP::FieldHandler*> fieldHandlerList;
168 fieldHandlerList.push_back(fieldHandler);
170 // Map the resulting list to a CORBA sequence for return:
171 MEDOP::FieldHandlerList_var fieldHandlerSeq = new MEDOP::FieldHandlerList();
172 int nbFieldHandler = fieldHandlerList.size();
173 fieldHandlerSeq->length(nbFieldHandler);
174 for (int i=0; i<nbFieldHandler; i++) {
175 fieldHandlerSeq[i] = *fieldHandlerList[i];
177 return fieldHandlerSeq._retn();
180 Ecrire un service CORBA qui retourne une structure CORBA:
184 MEDOP::FieldHandler * fieldHandler = new ...
185 _fieldHandlerMap[fieldHandler->id] = fieldHandler;
187 // >>> WARNING: CORBA struct specification indicates that the
188 // assignement acts as a desctructor for the structure that is
189 // pointed to. The values of the fields are copy first in the new
190 // structure that receives the assignement and finally the initial
191 // structure is destroyed. In the present case, WE WANT to keep
192 // the initial fieldHandler in the map. We must then make a deep
193 // copy of the structure found in the map and return the copy. The
194 // CORBA struct specification indicates that a deep copy can be
195 // done using the copy constructor. <<<
196 return new MEDOP::FieldHandler(*fieldHandler);
200 ANNEXE A: Bug en cours
201 ======================
205 * la composition d'opérations n'est pas possible (ex: 2*f1+f2) car
206 2*f1 est indiqué comme non compatible (il semble qu'il n'ai pas la
207 reference correcte vers le maillage).
208 * le script de test test_medoperation.py plante si le module xmed n'a
209 pas été chargé avec des données chargées.
211 ANNEXE B: Traçabilité avec le module XMED
212 =========================================
214 Le module SALOME de nom XMED est l'espace de développement initial du
215 composant logiciel MEDOP, intégré aujourd'hui au module MED. Cette
216 annexe est la notice technique de ce module, qui reste disponible mais
217 qui n'est plus maintenu.
219 Gestion de configuration du module XMED
220 ---------------------------------------
222 Les sources du module (répertoire ``xmed``) sont archivés en dépôt de
223 configuration dans une base git du projet NEPAL. Ils peuvent être
224 récupérés au moyen de la commande::
226 $ git clone git@cli70rw.der.edf.fr:xom/xmed.git
228 Cette commande installe un répertoire ``xmed`` contenant l'ensemble
229 des sources du module XMED.
231 Le module XMED a pour pré-requis logiciel la plateforme SALOME:
233 * SALOME version 6.1.3 (au moins) à télécharger à l'URL
234 http://pal.der.edf.fr/pal/projets/pal/releases/V6_1_3
235 * On peut également utiliser une version dérivée comme SALOME-MECA 2010.1
236 * Installer la plate-forme choisie selon les instructions fournies.
238 Le module XMED utilise également une bibliothèque interne au projet
239 NEPAL, appelée XSALOME, et qui fournit une extension aux fonctions de
240 SALOME pour un usage de développement (XSALOME signifie eXtension
241 SALOME). Les sources de cette bibliothèque doivent être récupérés au
242 moyen de la commande::
244 $ git clone git@cli70rw.der.edf.fr:xom/xsalome.git
246 Cette commande installe un répertoire ``xsalome`` contenant l'ensemble
247 des sources de la bibliothèque XSALOME.
249 .. note:: La bibliothèque XSALOME n'est pas un module SALOME mais une
250 simple bibliothèque de fonctions qui complète ou rend plus facile
251 d'utilisation les fonctions de SALOME. Elle NE DOIT EN AUCUN CAS
252 être intégrée à d'autres projets que les projets internes NEPAL ou
253 MAILLAGE. Il s'agit en effet d'une bibliothèque de transition qui
254 héberge des développements destinés à être reversés dans la
255 plate-forme SALOME. Le contenu et les interfaces de XSALOME ne peut
256 donc être garanti sur le long terme.
258 Installation et lancement de l'application
259 ------------------------------------------
261 L'installation suppose qu'une version 6.1.3 de SALOME (ou plus) est
262 disponible et que le shell de travail est étendu avec l'environnement
263 de SALOME. En général, par des commandes de la forme::
265 $ . /where/is/salome/prerequis.sh
266 $ . /where/is/salome/envSalome.sh
268 La compilation des modules xsalome et xmed suit le standard SALOME. La
269 bibliothèque xsalome est un prérequis à la compilation de xmed. Pour
270 cela, la variable d'environnement XSALOME_DIR doit être spécifiée pour
271 la configuration de la procédure de reconstruction de xmed::
273 $ export XSALOME_DIR=<xsalome_installdir>
275 Aprés l'installation de xmed, il est possible de générer
276 automatiquement une application SALOME prête à l'emploi pour la
277 manipulation de champs::
279 $ <xmed_installdir>/bin/salome/xmed/appligen/appligen.sh
281 Cette commande génére un répertoire ``appli`` à l'emplacement où elle
282 est exécutée. Il reste à lancer l'application SALOME au moyen de la
285 $ ./appli/runAppli -k