Salome HOME
Improve unitary documentation of the observers
[modules/adao.git] / doc / fr / ref_observers_requirements.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 .. _ref_observers_requirements:
25
26 Exigences pour les fonctions décrivant un "*observer*"
27 ------------------------------------------------------
28
29 .. index:: single: Observer
30 .. index:: single: Observer Template
31
32 Certaines variables spéciales, internes à l'optimisation, utilisées au cours des
33 calculs, peuvent être surveillées durant un calcul ADAO. Ces variables peuvent
34 être affichées, tracées, enregistrées, etc. C'est réalisable en utilisant des
35 "*observer*", parfois aussi appelés des "callback". Ce sont des scripts Python,
36 qui sont chacun associé à une variable donnée. Ils sont activés à chaque
37 modification de la variable.
38
39 Il y a 3 méthodes pratiques pour intégrer un "*observer*" dans un cas ADAO. La
40 méthode est choisie à l'aide du mot-clé "*NodeType*" de chaque entrée de type
41 "*observer*", comme montré dans la figure qui suit :
42
43   .. eficas_observer_nodetype:
44   .. image:: images/eficas_observer_nodetype.png
45     :align: center
46     :width: 100%
47   .. centered::
48     **Choisir pour un "*observer*" son type d'entrée**
49
50 L'"*observer*" peut être fourni sous la forme d'un script explicite (entrée de
51 type "*String*"), d'un script contenu dans un fichier externe (entrée de type
52 "*Script*"), ou en utilisant un modèle (entrée de type "*Template*") fourni par
53 défaut dans ADAO lors de l'usage de l'éditeur graphique. Ces derniers sont des
54 scripts simples qui peuvent être adaptés par l'utilisateur, soit dans l'étape
55 d'édition intégrée du cas, soit dans l'étape d'édition du schéma avant
56 l'exécution, pour améliorer la performance du calcul ADAO dans le superviseur
57 d'exécution de SALOME.
58
59 Forme générale d'un script permettant de définir un *observer*
60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
61
62 Pour pouvoir utiliser cette capacité, l'utilisateur doit disposer ou construire
63 des scripts utilisant en entrée standard (i.e. disponible dans l'espace de
64 nommage) les variables ``var`` et ``info``. La variable ``var`` est à utiliser
65 comme un objet de type liste/tuple, contenant la variable d'intérêt indicée par
66 l'étape de mise à jour.
67
68 A titre d'exemple, voici un script très simple (similaire au modèle
69 "*ValuePrinter*"), utilisable pour afficher la valeur d'une variable
70 surveillée::
71
72     print "    --->",info," Value =",var[-1]
73
74 Stocké comme un fichier Python ou une chaîne de caractères explicite, ces lignes
75 de script peuvent être associées à chaque variable présente dans le mot-clé
76 "*SELECTION*" de la commande "*Observers*" du cas ADAO : "*Analysis*",
77 "*CurrentState*", "*CostFunction*"... La valeur courante de la variable sera
78 affichée à chaque étape de l'algorithme d'optimisation ou d'assimilation. Les
79 "*observer*" peuvent inclure des capacités d'affichage graphique, de stockage,
80 de traitement complexe, d'analyse statistique, etc.
81
82 On donne ci-aprés l'identifiant et le contenu de chaque modèle disponible.
83
84 Inventaire des modèles d'*observer* disponibles ("*Template*")
85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
86
87 .. index:: single: ValueGnuPlotter (Observer)
88
89 Modèle **ValueGnuPlotter** :
90 ............................
91
92 Affiche graphiquement avec Gnuplot la valeur courante de la variable.
93
94 ::
95
96     import numpy, Gnuplot
97     v=numpy.array(var[-1], ndmin=1)
98     global ifig, gp
99     try:
100         ifig += 1
101         gp('set style data lines')
102     except:
103         ifig = 0
104         gp = Gnuplot.Gnuplot(persist=1)
105         gp('set style data lines')
106     gp('set title  "%s (Figure %i)"'%(info,ifig))
107     gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
108
109 .. index:: single: ValueMean (Observer)
110
111 Modèle **ValueMean** :
112 ......................
113
114 Imprime sur la sortie standard la moyenne de la valeur courante de la variable.
115
116 ::
117
118     import numpy
119     print info, numpy.nanmean(var[-1])
120
121 .. index:: single: ValuePrinter (Observer)
122
123 Modèle **ValuePrinter** :
124 .........................
125
126 Imprime sur la sortie standard la valeur courante de la variable.
127
128 ::
129
130     print info, var[-1]
131
132 .. index:: single: ValuePrinterAndGnuPlotter (Observer)
133
134 Modèle **ValuePrinterAndGnuPlotter** :
135 ......................................
136
137 Imprime sur la sortie standard et, en même temps, affiche graphiquement avec Gnuplot la valeur courante de la variable.
138
139 ::
140
141     print info, var[-1]
142     import numpy, Gnuplot
143     v=numpy.array(var[-1], ndmin=1)
144     global ifig,gp
145     try:
146         ifig += 1
147         gp('set style data lines')
148     except:
149         ifig = 0
150         gp = Gnuplot.Gnuplot(persist=1)
151         gp('set style data lines')
152     gp('set title  "%s (Figure %i)"'%(info,ifig))
153     gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
154
155 .. index:: single: ValuePrinterAndSaver (Observer)
156
157 Modèle **ValuePrinterAndSaver** :
158 .................................
159
160 Imprime sur la sortie standard et, en même temps, enregistre dans un fichier la valeur courante de la variable.
161
162 ::
163
164     import numpy, re
165     v=numpy.array(var[-1], ndmin=1)
166     print info,v
167     global istep
168     try:
169         istep += 1
170     except:
171         istep = 0
172     f='/tmp/value_%s_%05i.txt'%(info,istep)
173     f=re.sub('\s','_',f)
174     print 'Value saved in "%s"'%f
175     numpy.savetxt(f,v)
176
177 .. index:: single: ValuePrinterSaverAndGnuPlotter (Observer)
178
179 Modèle **ValuePrinterSaverAndGnuPlotter** :
180 ...........................................
181
182 Imprime sur la sortie standard et, en même temps, enregistre dans un fichier et affiche graphiquement la valeur courante de la variable .
183
184 ::
185
186     print info, var[-1]
187     import numpy, re
188     v=numpy.array(var[-1], ndmin=1)
189     global istep
190     try:
191         istep += 1
192     except:
193         istep = 0
194     f='/tmp/value_%s_%05i.txt'%(info,istep)
195     f=re.sub('\s','_',f)
196     print 'Value saved in "%s"'%f
197     numpy.savetxt(f,v)
198     import Gnuplot
199     global ifig,gp
200     try:
201         ifig += 1
202         gp('set style data lines')
203     except:
204         ifig = 0
205         gp = Gnuplot.Gnuplot(persist=1)
206         gp('set style data lines')
207     gp('set title  "%s (Figure %i)"'%(info,ifig))
208     gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
209
210 .. index:: single: ValueRMS (Observer)
211
212 Modèle **ValueRMS** :
213 .....................
214
215 Imprime sur la sortie standard la racine de la moyenne des carrés (RMS), ou moyenne quadratique, de la valeur courante de la variable.
216
217 ::
218
219     import numpy
220     v = numpy.matrix( numpy.ravel( var[-1] ) )
221     print info, float( numpy.sqrt((1./v.size)*(v*v.T)) )
222
223 .. index:: single: ValueSaver (Observer)
224
225 Modèle **ValueSaver** :
226 .......................
227
228 Enregistre la valeur courante de la variable dans un fichier du répertoire '/tmp' nommé 'value...txt' selon le nom de la variable et l'étape d'enregistrement.
229
230 ::
231
232     import numpy, re
233     v=numpy.array(var[-1], ndmin=1)
234     global istep
235     try:
236         istep += 1
237     except:
238         istep = 0
239     f='/tmp/value_%s_%05i.txt'%(info,istep)
240     f=re.sub('\s','_',f)
241     print 'Value saved in "%s"'%f
242     numpy.savetxt(f,v)
243
244 .. index:: single: ValueSerieGnuPlotter (Observer)
245
246 Modèle **ValueSerieGnuPlotter** :
247 .................................
248
249 Affiche graphiquement avec Gnuplot la série des valeurs de la variable.
250
251 ::
252
253     import numpy, Gnuplot
254     v=numpy.array(var[:],  ndmin=1)
255     global ifig, gp
256     try:
257         ifig += 1
258         gp('set style data lines')
259     except:
260         ifig = 0
261         gp = Gnuplot.Gnuplot(persist=1)
262         gp('set style data lines')
263     gp('set title  "%s (Figure %i)"'%(info,ifig))
264     gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
265
266 .. index:: single: ValueSeriePrinter (Observer)
267
268 Modèle **ValueSeriePrinter** :
269 ..............................
270
271 Imprime sur la sortie standard la série des valeurs de la variable.
272
273 ::
274
275     print info, var[:]
276
277 .. index:: single: ValueSeriePrinterAndGnuPlotter (Observer)
278
279 Modèle **ValueSeriePrinterAndGnuPlotter** :
280 ...........................................
281
282 Imprime sur la sortie standard et, en même temps, affiche graphiquement avec Gnuplot la série des valeurs de la variable.
283
284 ::
285
286     print info, var[:] 
287     import numpy, Gnuplot
288     v=numpy.array(var[:],  ndmin=1)
289     global ifig,gp
290     try:
291         ifig += 1
292         gp('set style data lines')
293     except:
294         ifig = 0
295         gp = Gnuplot.Gnuplot(persist=1)
296         gp('set style data lines')
297     gp('set title  "%s (Figure %i)"'%(info,ifig))
298     gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
299
300 .. index:: single: ValueSeriePrinterAndSaver (Observer)
301
302 Modèle **ValueSeriePrinterAndSaver** :
303 ......................................
304
305 Imprime sur la sortie standard et, en même temps, enregistre dans un fichier la série des valeurs de la variable.
306
307 ::
308
309     import numpy, re
310     v=numpy.array(var[:],  ndmin=1)
311     print info,v
312     global istep
313     try:
314         istep += 1
315     except:
316         istep = 0
317     f='/tmp/value_%s_%05i.txt'%(info,istep)
318     f=re.sub('\s','_',f)
319     print 'Value saved in "%s"'%f
320     numpy.savetxt(f,v)
321
322 .. index:: single: ValueSeriePrinterSaverAndGnuPlotter (Observer)
323
324 Modèle **ValueSeriePrinterSaverAndGnuPlotter** :
325 ................................................
326
327 Imprime sur la sortie standard et, en même temps, enregistre dans un fichier et affiche graphiquement la série des valeurs de la variable.
328
329 ::
330
331     print info, var[:] 
332     import numpy, re
333     v=numpy.array(var[:],  ndmin=1)
334     global istep
335     try:
336         istep += 1
337     except:
338         istep = 0
339     f='/tmp/value_%s_%05i.txt'%(info,istep)
340     f=re.sub('\s','_',f)
341     print 'Value saved in "%s"'%f
342     numpy.savetxt(f,v)
343     import Gnuplot
344     global ifig,gp
345     try:
346         ifig += 1
347         gp('set style data lines')
348     except:
349         ifig = 0
350         gp = Gnuplot.Gnuplot(persist=1)
351         gp('set style data lines')
352     gp('set title  "%s (Figure %i)"'%(info,ifig))
353     gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
354
355 .. index:: single: ValueSerieSaver (Observer)
356
357 Modèle **ValueSerieSaver** :
358 ............................
359
360 Enregistre la série des valeurs de la variable dans un fichier du répertoire '/tmp' nommé 'value...txt' selon le nom de la variable et l'étape.
361
362 ::
363
364     import numpy, re
365     v=numpy.array(var[:],  ndmin=1)
366     global istep
367     try:
368         istep += 1
369     except:
370         istep = 0
371     f='/tmp/value_%s_%05i.txt'%(info,istep)
372     f=re.sub('\s','_',f)
373     print 'Value saved in "%s"'%f
374     numpy.savetxt(f,v)
375
376 .. index:: single: ValueStandardError (Observer)
377
378 Modèle **ValueStandardError** :
379 ...............................
380
381 Imprime sur la sortie standard l'écart-type de la valeur courante de la variable.
382
383 ::
384
385     import numpy
386     print info, numpy.nanstd(var[-1])
387
388 .. index:: single: ValueVariance (Observer)
389
390 Modèle **ValueVariance** :
391 ..........................
392
393 Imprime sur la sortie standard la variance de la valeur courante de la variable.
394
395 ::
396
397     import numpy
398     print info, numpy.nanvar(var[-1])