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/lib/python2.6/site-packages/salome/xmed/test_medoperation.py
66 L'exécution imprime un rapport détaillant le résultat pour chaque
69 test_addition (__main__.MyTestSuite) ... ok
70 test_arithmetics (__main__.MyTestSuite) ... ok
71 test_composition (__main__.MyTestSuite) ... FAIL
72 test_litteral_equation (__main__.MyTestSuite) ... ok
73 test_modification_of_attributes (__main__.MyTestSuite) ... ok
74 test_unary_operations (__main__.MyTestSuite) ... ok
75 test_update_metadata (__main__.MyTestSuite) ... ok
77 Les scripts de test sont:
79 * ``test_medoperation.py``: tests des operations de champs telles
80 qu'elles sont mises en oeuvre depuis l'interface textuelle.
81 * ``test_xmed.py``: tests des composants CORBA mis en oeuvre
82 (``MEDDataManager`` et ``MEDCalculator``)
84 Architecture du module XMED
85 ===========================
87 Le module MED pour la manipulation de champs est composé de:
89 * une bibliothèque de fonctions pour le traitement de données sur des
90 maillages et des champs conformes au modèle MED (package
91 MEDCoupling, MEDLoader et REMAPPER);
92 * une interface graphique pour la mise en oeuvre des cas standard de
93 manipulation de champs;
94 * une ensemble d'outils pour intervenir sur des fichiers au format
97 Une bibliothèque de fonctions pour le traitement de données
98 -----------------------------------------------------------
100 La figure ci-dessous montre la structure des paquets logiciels qui
101 constituent la bibliothèque:
103 .. image:: images/medlayers.png
106 Elle comprend en particulier les paquets suivants:
108 * MEDCoupling: qui décrit les structures de données pour porter les
109 maillages et les champs
110 * MEDLoader: qui fournit les fonctions de persistence sous forme de
111 fichiers au format MED (lecture et écriture).
114 Il est important de noter que MEDCoupling n'a aucune dépendance
115 logicielle autre que la bibliothèque C++ standard. Ceci permet
116 d'envisager son implantation dans un code de calcul ou un outil de
117 traitement sans tirer l'ensemble pré-requis de SALOME.
119 Une interface graphique pour l'exécution des cas standard
120 ---------------------------------------------------------
123 Un ensemble d'outils pour le traitement de fichiers
124 ---------------------------------------------------
127 Description des composants
128 ==========================
130 MEDDataManager - Le gestionnaire des données de session
131 -------------------------------------------------------
133 Le composant MEDDataManager s'occupe de fournir les données MED sur
134 demande des interfaces clientes, en particulier pour module de
135 pilotage fieldproxy.py. Ces données peuvent avoir plusieurs sources,
136 en général elle proviennent d'un fichier au format med contenant des
137 champs définis sur des maillages. Les données sont identifiées à la
138 lecture des métadonnées de description dans le fichiers med, puis les
139 valeurs des champs et les maillages support sont chargés au besoin.
141 Le chargement des métadonnées de description se fait par la méthode::
143 addDatasource(const char \*filepath)
147 Eléments d'implémentation
148 =========================
150 Ecrire un service CORBA qui retourne une sequence de FieldHandler:
154 MEDOP::FieldHandlerList * MyFunction(...) {
155 vector<MEDOP::FieldHandler*> fieldHandlerList;
158 fieldHandlerList.push_back(fieldHandler);
160 // Map the resulting list to a CORBA sequence for return:
161 MEDOP::FieldHandlerList_var fieldHandlerSeq = new MEDOP::FieldHandlerList();
162 int nbFieldHandler = fieldHandlerList.size();
163 fieldHandlerSeq->length(nbFieldHandler);
164 for (int i=0; i<nbFieldHandler; i++) {
165 fieldHandlerSeq[i] = *fieldHandlerList[i];
167 return fieldHandlerSeq._retn();
170 Ecrire un service CORBA qui retourne une structure CORBA:
174 MEDOP::FieldHandler * fieldHandler = new ...
175 _fieldHandlerMap[fieldHandler->id] = fieldHandler;
177 // >>> WARNING: CORBA struct specification indicates that the
178 // assignement acts as a desctructor for the structure that is
179 // pointed to. The values of the fields are copy first in the new
180 // structure that receives the assignement and finally the initial
181 // structure is destroyed. In the present case, WE WANT to keep
182 // the initial fieldHandler in the map. We must then make a deep
183 // copy of the structure found in the map and return the copy. The
184 // CORBA struct specification indicates that a deep copy can be
185 // done using the copy constructor. <<<
186 return new MEDOP::FieldHandler(*fieldHandler);
190 ANNEXE A: Bug en cours
191 ======================
195 * la composition d'opérations n'est pas possible (ex: 2*f1+f2) car
196 2*f1 est indiqué comme non compatible (il semble qu'il n'ai pas la
197 reference correcte vers le maillage).
198 * le script de test test_medoperation.py plante si le module xmed n'a
199 pas été chargé avec des données chargées.
201 ANNEXE B: Traçabilité avec le module XMED
202 =========================================
204 Le module SALOME de nom XMED est l'espace de développement initial du
205 composant logiciel MEDOP, intégré aujourd'hui au module MED. Cette
206 annexe est la notice technique de ce module, qui reste disponible mais
207 qui n'est plus maintenu.
209 Gestion de configuration du module XMED
210 ---------------------------------------
212 Les sources du module (répertoire ``xmed``) sont archivés en dépôt de
213 configuration dans une base git du projet NEPAL. Ils peuvent être
214 récupérés au moyen de la commande::
216 $ git clone git@cli70rw.der.edf.fr:xom/xmed.git
218 Cette commande installe un répertoire ``xmed`` contenant l'ensemble
219 des sources du module XMED.
221 Le module XMED a pour pré-requis logiciel la plateforme SALOME:
223 * SALOME version 6.1.3 (au moins) à télécharger à l'URL
224 http://pal.der.edf.fr/pal/projets/pal/releases/V6_1_3
225 * On peut également utiliser une version dérivée comme SALOME-MECA 2010.1
226 * Installer la plate-forme choisie selon les instructions fournies.
228 Le module XMED utilise également une bibliothèque interne au projet
229 NEPAL, appelée XSALOME, et qui fournit une extension aux fonctions de
230 SALOME pour un usage de développement (XSALOME signifie eXtension
231 SALOME). Les sources de cette bibliothèque doivent être récupérés au
232 moyen de la commande::
234 $ git clone git@cli70rw.der.edf.fr:xom/xsalome.git
236 Cette commande installe un répertoire ``xsalome`` contenant l'ensemble
237 des sources de la bibliothèque XSALOME.
239 .. note:: La bibliothèque XSALOME n'est pas un module SALOME mais une
240 simple bibliothèque de fonctions qui complète ou rend plus facile
241 d'utilisation les fonctions de SALOME. Elle NE DOIT EN AUCUN CAS
242 être intégrée à d'autres projets que les projets internes NEPAL ou
243 MAILLAGE. Il s'agit en effet d'une bibliothèque de transition qui
244 héberge des développements destinés à être reversés dans la
245 plate-forme SALOME. Le contenu et les interfaces de XSALOME ne peut
246 donc être garanti sur le long terme.
248 Installation et lancement de l'application
249 ------------------------------------------
251 L'installation suppose qu'une version 6.1.3 de SALOME (ou plus) est
252 disponible et que le shell de travail est étendu avec l'environnement
253 de SALOME. En général, par des commandes de la forme::
255 $ . /where/is/salome/prerequis.sh
256 $ . /where/is/salome/envSalome.sh
258 La compilation des modules xsalome et xmed suit le standard SALOME. La
259 bibliothèque xsalome est un prérequis à la compilation de xmed. Pour
260 cela, la variable d'environnement XSALOME_DIR doit être spécifiée pour
261 la configuration de la procédure de reconstruction de xmed::
263 $ export XSALOME_DIR=<xsalome_installdir>
265 Aprés l'installation de xmed, il est possible de générer
266 automatiquement une application SALOME prête à l'emploi pour la
267 manipulation de champs::
269 $ <xmed_installdir>/bin/salome/xmed/appligen/appligen.sh
271 Cette commande génére un répertoire ``appli`` à l'emplacement où elle
272 est exécutée. Il reste à lancer l'application SALOME au moyen de la
275 $ ./appli/runAppli -k