]> SALOME platform Git repositories - modules/adao.git/blob - doc/fr/advanced.rst
Salome HOME
Correcting Bash launching advanced example
[modules/adao.git] / doc / fr / advanced.rst
1 ..
2    Copyright (C) 2008-2015 EDF R&D
3
4    This file is part of SALOME ADAO module.
5
6    This library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10
11    This library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with this library; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19
20    See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21
22    Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
23
24 .. _section_advanced:
25
26 ================================================================================
27 **[DocU]** Usages avancés du module ADAO
28 ================================================================================
29
30 Cette section présente des méthodes avancées d'usage du module ADAO, comment
31 obtenir plus d'information lors d'un calcul, ou comment l'utiliser sans
32 l'interface graphique (GUI). Cela nécessite de savoir comment trouver les
33 fichiers ou les commandes incluses dans l'installation complète de SALOME. Tous
34 les noms à remplacer par l'utilisateur sont indiqués par la syntaxe ``<...>``.
35
36 Convertir et exécuter un fichier de commandes ADAO (JDC) par l'intermédiaire d'un script shell
37 ----------------------------------------------------------------------------------------------
38
39 Il est possible de convertir et exécuter une fichier de commandes ADAO (JDC, ou
40 paire de fichiers ".comm/.py", qui se trouvent dans le répertoire ``<Répertoire
41 du fichier JDC ADAO>``) automatiquement en utilisant un script de commandes
42 shell "type" contenant toutes les étapes requises. L'utilisateur doit savoir où
43 se trouvent les principaux fichiers de lancement de SALOME, et en particulier le
44 fichier ``salome``. Le répertoire dans lequel ce fichier réside est
45 symboliquement nommé ``<Répertoire principal d'installation de SALOME>`` et doit
46 être remplacé par le bon dans le modèle "type" de fichier shell.
47
48 Lorsqu'un fichier de commande ADAO est construit par l'interface d'édition
49 graphique d'ADAO et est enregistré, s'il est nommé par exemple
50 "EtudeAdao1.comm", alors un fichier compagnon nommé "EtudeAdao1.py" est
51 automatiquement créé dans la même répertoire. Il est nommé ``<Fichier Python
52 ADAO>`` dans le modèle "type", et il est converti vers YACS comme un ``<Schéma
53 xml YACS ADAO>``. Ensuite, il peut être exécuté en mode console en utilisant la
54 commande standard en mode console de YACS (voir la documentation YACS pour de
55 plus amples informations).
56
57 Dans l'exemple, on choisit de démarrer et arrêter le serveur d'application
58 SALOME dans le même script, ce qui n'est pas nécessaire, mais utile pour éviter
59 des sessions SALOME en attente. On choisit aussi de supprimer le fichier de
60 ``<Schéma xml YACS ADAO>`` car c'est un fichier généré. L'utilisateur de ce
61 script a seulement besoin de remplacer le texte contenu entre les symboles
62 ``<...>``
63
64 Le modèle "type" de ce script de commandes shell est le suivant::
65
66     #!/bin/bash
67     USERDIR=<Répertoire du fichier JDC ADAO>
68     SALOMEDIR=<Répertoire principal d'installation de SALOME>
69     $SALOMEDIR/salome start -k -t
70     $SALOMEDIR/salome shell -- "python $SALOMEDIR/bin/salome/AdaoYacsSchemaCreator.py $USERDIR/<Fichier Python ADAO> $USERDIR/<Schéma xml YACS ADAO>"
71     $SALOMEDIR/salome shell -- "driver $USERDIR/<Schéma xml YACS ADAO>"
72     $SALOMEDIR/salome shell killSalome.py
73     rm -f $USERDIR/<Schéma xml YACS ADAO>
74
75 Les sorties standard et d'erreur se font à la console.
76
77 Exécuter un schéma de calcul ADAO dans YACS en utilisant le mode "texte" (TUI)
78 ------------------------------------------------------------------------------
79
80 Cette section décrit comment exécuter en mode TUI (Text User Interface) un
81 schéma de calcul YACS, obtenu par la fonction "*Exporter vers YACS*" d'ADAO.
82 Cela utilise le mode texte standard de YACS, qui est rapidement rappelé ici
83 (voir la documentation YACS pour de plus amples informations) à travers un
84 exemple simple. Comme décrit dans la documentation, un schéma XML peut être
85 chargé en python. On donne ici une séquence complète de commandes pour tester la
86 validité du schéma avant de l'exécuter, ajoutant des lignes supplémentaires
87 initiales pour charger de manière explicite le catalogue de types pour éviter
88 d'obscures difficultés::
89
90     #-*-coding:iso-8859-1-*-
91     import pilot
92     import SALOMERuntime
93     import loader
94     SALOMERuntime.RuntimeSALOME_setRuntime()
95
96     r = pilot.getRuntime()
97     xmlLoader = loader.YACSLoader()
98     xmlLoader.registerProcCataLoader()
99     try:
100      catalogAd = r.loadCatalog("proc", "<Schéma xml YACS ADAO>")
101     except:
102       pass
103     r.addCatalog(catalogAd)
104
105     try:
106         p = xmlLoader.load("<Schéma xml YACS ADAO>")
107     except IOError,ex:
108         print "IO exception:",ex
109
110     logger = p.getLogger("parser")
111     if not logger.isEmpty():
112         print "The imported file has errors :"
113         print logger.getStr()
114
115     if not p.isValid():
116         print "Le schéma n'est pas valide et ne peut pas être exécuté"
117         print p.getErrorReport()
118
119     info=pilot.LinkInfo(pilot.LinkInfo.ALL_DONT_STOP)
120     p.checkConsistency(info)
121     if info.areWarningsOrErrors():
122         print "Le schéma n'est pas cohérent et ne peut pas être exécuté"
123         print info.getGlobalRepr()
124
125     e = pilot.ExecutorSwig()
126     e.RunW(p)
127     if p.getEffectiveState() != pilot.DONE:
128         print p.getErrorReport()
129
130 Cette démarche permet par exemple d'éditer le schéma YACS XML en mode texte TUI,
131 ou de rassembler les résultats pour un usage ultérieur.
132
133 .. _section_advanced_observer:
134
135 Obtenir des informations sur des variables spéciales au cours d'un calcul ADAO en YACS
136 --------------------------------------------------------------------------------------
137
138 .. index:: single: Observer
139 .. index:: single: Observers
140 .. index:: single: Observer Template
141
142 Certaines variables spéciales internes à l'optimisation, utilisées au cours des
143 calculs, peuvent être surveillées durant un calcul ADAO en YACS. Ces variables
144 peuvent être affichées, tracées, enregistrées, etc. C'est réalisable en
145 utilisant des "*observers*", qui sont des scripts, chacun associé à une
146 variable. Pour pouvoir utiliser cette capacité, l'utilisateur doit construire
147 des scripts disposant en entrée standard (i.e. disponible dans l'espace de
148 nommage) des variables ``var`` et ``info``. La variable ``var`` est à utiliser
149 de la même manière que l'objet final ADD, c'est-à-dire comme un objet de type
150 liste/tuple.
151
152 Des modèles ("templates") sont disponibles lors de l'édition le cas ADAO dans
153 l'éditeur graphique. Ces scripts simples peuvent être adaptés par l'utilisateur,
154 soit dans l'étape d'édition EFICAS, ou dans l'étape d'édition YACS, pour
155 améliorer l'adaptation du calcul ADAO dans YACS.
156
157 A titre d'exemple, voici un script trés simple (similaire au modèle
158 "*ValuePrinter*") utilisable pour afficher la valeur d'une variable surveillée::
159
160     print "    --->",info," Value =",var[-1]
161
162 Stocké comme un fichier Python, ce script peut être associé à chaque variable
163 présente dans le mot-clé "*SELECTION*" de la commande "*Observers*":
164 "*Analysis*", "*CurrentState*", "*CostFunction*"... La valeur courante de la
165 variable sera affichée à chaque étape de l'algorithme d'optimisation ou
166 d'assimilation. Les "*observers*" peuvent inclure des capacités d'affichage
167 graphique, de stockage, d'affichage complexe, de traitement statistique, etc.
168
169 Obtenir plus d'information lors du déroulement d'un calcul
170 ----------------------------------------------------------
171
172 .. index:: single: Logging
173
174 Lors du déroulement d'un calcul, des données et messages utiles sont
175 disponibles. Il y a deux manières d'obtenir ces informations.
176
177 La première, et la manière préférentielle, est d'utiliser la variable interne
178 "*Debug*" disponible dans chaque cas ADAO. Elle est atteignable dans l'interface
179 graphique d'édition du module. La mettre à "*1*" permet d'envoyer des messages
180 dans la fenêtre de sortie de l'exécution dans YACS ("*YACS Container Log*").
181
182 La seconde consiste à utiliser le module Python natif "*logging*" (voir la
183 documentation Python http://docs.python.org/library/logging.html pour de plus
184 amples informations sur ce module). Dans l'ensemble du schéma YACS,
185 principalement à travers les entrées sous forme de scripts, l'utilisateur peut
186 fixer le niveau de logging en accord avec les besoins d'informations détaillées.
187 Les différents niveaux de logging sont : "*DEBUG*", "*INFO*", "*WARNING*",
188 "*ERROR*", "*CRITICAL*". Toutes les informations associées à un niveau sont
189 affichées à tous les niveaux au-dessus de celui-ci (inclut). La méthode la plus
190 facile consiste à changer le niveau de surveillance en utilisant les lignes
191 Python suivantes::
192
193     import logging
194     logging.getLogger().setLevel(logging.DEBUG)
195
196 Le niveau par défaut standard de surveillance par logging est "*WARNING*", le
197 niveau par défaut dans le module ADAO est "*INFO*".
198
199 Il est aussi recommandé d'inclure de la surveillance par logging ou des
200 mécanismes de débogage dans le code de simulation, et de les utiliser en
201 conjonction avec les deux méthodes précédentes. Néanmoins, il convient d'être
202 prudent dans le stockage de "grosses" variables car cela coûte du temps,
203 quel que soit le niveau de surveillance choisi (c'est-à-dire même si ces
204 variables ne sont pas affichées).
205
206 .. _subsection_ref_parallel_df:
207
208 Accélérer les calculs de dérivées numériques en utilisant un mode parallèle
209 ---------------------------------------------------------------------------
210
211 .. index:: single: EnableMultiProcessing
212
213 Lors de la définition d'un opérateur, comme décrit dans le chapitre des
214 :ref:`section_ref_operator_requirements`, l'utilisateur peut choisir la forme
215 fonctionnelle "*ScriptWithOneFunction*". Cette forme conduit explicitement à
216 approximer les opérateurs tangent et adjoint par un calcul par différences
217 finies. Il requiert de nombreux appels à l'opérateur direct (fonction définie
218 par l'utilisateur), au moins autant de fois que la dimension du vecteur d'état.
219 Ce sont ces appels qui peuvent être potentiellement exécutés en parallèle.
220
221 Sous certaines conditions, il est alors possible d'accélérer les calculs de
222 dérivées numériques en utilisant un mode parallèle pour l'approximation par
223 différences finies. Lors de la définition d'un cas ADAO, c'est effectué en
224 ajoutant le mot-clé optionnel "*EnableMultiProcessing*", mis à "1", de la
225 commande "*SCRIPTWITHONEFUNCTION*" dans la définition de l'opérateur. Le mode
226 parallèle utilise uniquement des ressources locales (à la fois multi-coeurs ou
227 multi-processeurs) de l'ordinateur sur lequel SALOME est en train de tourner,
228 demandant autant de ressources que disponible. Par défaut, ce mode parallèle est
229 désactivé ("*EnableMultiProcessing=0*").
230
231 Les principales conditions pour réaliser ces calculs parallèles viennent de la
232 fonction définie par l'utilisateur, qui représente l'opérateur direct. Cette
233 fonction doit au moins être "thread safe" pour être exécutée dans un
234 environnement Python parallèle (notions au-delà du cadre de ce paragraphe). Il
235 n'est pas évident de donner des règles générales, donc il est recommandé, à
236 l'utilisateur qui active ce parallélisme interne, de vérifier soigneusement sa
237 fonction et les résultats obtenus.
238
239 D'un point de vue utilisateur, certaines conditions, qui doivent être réunies
240 pour mettre en place des calculs parallèles pour les approximations des
241 opérateurs tangent et adjoint, sont les suivantes :
242
243 #. La dimension du vecteur d'état est supérieure à 2 ou 3.
244 #. Le calcul unitaire de la fonction utilisateur directe "dure un certain temps", c'est-à-dire plus que quelques minutes.
245 #. La fonction utilisateur directe n'utilise pas déjà du parallélisme (ou l'exécution parallèle est désactivée dans le calcul de l'utilisateur).
246 #. La fonction utilisateur directe n'effectue pas d'accès en lecture/écriture à des ressources communes, principalement des données stockées, des fichiers de sortie ou des espaces mémoire.
247 #. Les observers ajoutés par l'utilisateur n'effectuent pas d'accès en lecture/écriture à des ressources communes, comme des fichiers ou des espaces mémoire.
248
249 Si ces conditions sont satisfaites, l'utilisateur peut choisir d'activer le
250 parallélisme interne pour le calcul des dérivées numériques. Malgré la
251 simplicité d'activation, obtenue en définissant une variable seulement,
252 l'utilisateur est fortement invité à vérifier les résultats de ses calculs. Il
253 faut au moins les effectuer une fois avec le parallélisme activé, et une autre
254 fois avec le parallélisme désactivé, pour comparer les résultats. Si cette mise
255 en oeuvre échoue à un moment ou à un autre, il faut savoir que ce schéma de
256 parallélisme fonctionne pour des codes complexes, comme *Code_Aster* dans
257 *SalomeMeca* [SalomeMeca]_ par exemple. Donc, si cela ne marche pas dans votre
258 cas, vérifiez bien votre fonction d'opérateur avant et pendant l'activation du
259 parallélisme...
260
261 .. warning::
262
263   en cas de doute, il est recommandé de NE PAS ACTIVER ce parallélisme.
264
265 Passer d'une version d'ADAO à une nouvelle
266 ------------------------------------------
267
268 .. index:: single: Version
269
270 Le module ADAO et ses fichiers de cas ".comm" sont identifiés par des versions,
271 avec des caractéristiques "Major", "Minor" et "Revision". Une version
272 particulière est numérotée "Major.Minor.Revision", avec un lien fort avec la
273 numérotation de la plateforme SALOME.
274
275 Chaque version "Major.Minor.Revision" du module ADAO peut lire les fichiers de
276 cas ADAO de la précédente version mineure "Major.Minor-1.*". En général, elle
277 peut aussi lire les fichiers de cas de toutes les versions mineures "Major.*.*"
278 d'une branche majeure, mais ce n'est pas obligatoirement vrai pour toutes les
279 commandes ou tous les mots-clés. En général aussi, un fichier de cas ADAO d'une
280 version ne peut pas être lu par une précédente version mineure ou majeure du
281 module ADAO.
282
283 Passer de la version 7.5 à la 7.6
284 +++++++++++++++++++++++++++++++++
285
286 Il n'y a pas d'incompatibilité connue pour les fichiers de cas ADAO. La
287 procédure de montée en version consiste à lire l'ancien fichier de cas ADAO avec
288 le nouveau module SALOME/ADAO, et à l'enregistrer avec un nouveau nom. Cette
289 procédure effectue automatiquement les modifications requises dans
290 l'arborescence de stockage du fichier de cas ADAO.
291
292 Passer de la version 7.4 à la 7.5
293 +++++++++++++++++++++++++++++++++
294
295 Il n'y a pas d'incompatibilité connue pour les fichiers de cas ADAO. La
296 procédure de montée en version consiste à lire l'ancien fichier de cas ADAO
297 avec le nouveau module SALOME/ADAO, et à l'enregistrer avec un nouveau nom.
298
299 Passer de la version 7.3 à la 7.4
300 +++++++++++++++++++++++++++++++++
301
302 Il n'y a pas d'incompatibilité connue pour les fichiers de cas ADAO. La
303 procédure de montée en version consiste à lire l'ancien fichier de cas ADAO
304 avec le nouveau module SALOME/ADAO, et à l'enregistrer avec un nouveau nom.
305
306 Passer de la version 7.2 à la 7.3
307 +++++++++++++++++++++++++++++++++
308
309 Il n'y a pas d'incompatibilité connue pour les fichiers de cas ADAO. La
310 procédure de montée en version consiste à lire l'ancien fichier de cas ADAO
311 avec le nouveau module SALOME/ADAO, et à l'enregistrer avec un nouveau nom.
312
313 Passer de la version 6.6 à la 7.2
314 +++++++++++++++++++++++++++++++++
315
316 Il n'y a pas d'incompatibilité connue pour les fichiers de cas ADAO. La
317 procédure de montée en version consiste à lire l'ancien fichier de cas ADAO avec
318 le nouveau module SALOME/ADAO, et à l'enregistrer avec un nouveau nom.
319
320 Il y a une incompatibilité introduite dans les fichiers de script de
321 post-processing ou d'observers. L'ancienne syntaxe pour interroger un objet
322 résultat, comme celui d'analyse "*Analysis*" (fourni dans un script à travers le
323 mot-clé "*UserPostAnalysis*"), était par exemple::
324
325     Analysis = ADD.get("Analysis").valueserie(-1)
326     Analysis = ADD.get("Analysis").valueserie()
327
328 La nouvelle syntaxe est entièrement compatible avec celle (classique) pour les
329 objets de type liste ou tuple::
330
331     Analysis = ADD.get("Analysis")[-1]
332     Analysis = ADD.get("Analysis")[:]
333
334 Les scripts de post-processing doivent être modifiés.
335
336 Passer de la version 6.5 à la 6.6
337 +++++++++++++++++++++++++++++++++
338
339 Il n'y a pas d'incompatibilité connue pour les fichiers de cas ADAO. La
340 procédure de montée en version consiste à lire l'ancien fichier de cas ADAO avec
341 le nouveau module SALOME/ADAO, et à l'enregistrer avec un nouveau nom.
342
343 Il y a une incompatibilité introduite dans la dénomination des opérateurs
344 élémentaires utilisés pour l'opérateur d'observation par script. Les nouveaux
345 noms requis sont "*DirectOperator*", "*TangentOperator*" et "*AdjointOperator*",
346 comme décrit dans la quatrième partie du chapitre :ref:`section_reference`. Les
347 scripts d'opérateur doivent être modifiés.
348
349 Passer de la version 6.4 à la 6.5
350 +++++++++++++++++++++++++++++++++
351
352 Il n'y a pas d'incompatibilité connue pour les fichiers de cas ADAO. La
353 procédure de montée en version consiste à lire l'ancien fichier de cas ADAO avec
354 le nouveau module SALOME/ADAO, et à l'enregistrer avec un nouveau nom.
355
356 Passer de la version 6.3 à la 6.4
357 +++++++++++++++++++++++++++++++++
358
359 Il n'y a pas d'incompatibilité connue pour les fichiers de cas ADAO. La
360 procédure de montée en version consiste à lire l'ancien fichier de cas ADAO avec
361 le nouveau module SALOME/ADAO, et à l'enregistrer avec un nouveau nom.