Salome HOME
Documentation and source correction and improvements for DFO
[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: ValuePrinter (Observer)
88
89 Modèle **ValuePrinter** :
90 .........................
91
92 Imprime sur la sortie standard la valeur courante de la variable.
93
94 ::
95
96     print info, var[-1]
97
98 .. index:: single: ValueSeriePrinter (Observer)
99
100 Modèle **ValueSeriePrinter** :
101 ..............................
102
103 Imprime sur la sortie standard la série des valeurs de la variable.
104
105 ::
106
107     print info, var[:]
108
109 .. index:: single: ValueSaver (Observer)
110
111 Modèle **ValueSaver** :
112 .......................
113
114 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.
115
116 ::
117
118     import numpy, re
119     v=numpy.array(var[-1], ndmin=1)
120     global istep
121     try:
122         istep += 1
123     except:
124         istep = 0
125     f='/tmp/value_%s_%05i.txt'%(info,istep)
126     f=re.sub('\s','_',f)
127     print 'Value saved in "%s"'%f
128     numpy.savetxt(f,v)
129
130 .. index:: single: ValueSerieSaver (Observer)
131
132 Modèle **ValueSerieSaver** :
133 ............................
134
135 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.
136
137 ::
138
139     import numpy, re
140     v=numpy.array(var[:],  ndmin=1)
141     global istep
142     try:
143         istep += 1
144     except:
145         istep = 0
146     f='/tmp/value_%s_%05i.txt'%(info,istep)
147     f=re.sub('\s','_',f)
148     print 'Value saved in "%s"'%f
149     numpy.savetxt(f,v)
150
151 .. index:: single: ValuePrinterAndSaver (Observer)
152
153 Modèle **ValuePrinterAndSaver** :
154 .................................
155
156 Imprime sur la sortie standard et, en même temps, enregistre dans un fichier la valeur courante de la variable.
157
158 ::
159
160     import numpy, re
161     v=numpy.array(var[-1], ndmin=1)
162     print info,v
163     global istep
164     try:
165         istep += 1
166     except:
167         istep = 0
168     f='/tmp/value_%s_%05i.txt'%(info,istep)
169     f=re.sub('\s','_',f)
170     print 'Value saved in "%s"'%f
171     numpy.savetxt(f,v)
172
173 .. index:: single: ValueSeriePrinterAndSaver (Observer)
174
175 Modèle **ValueSeriePrinterAndSaver** :
176 ......................................
177
178 Imprime sur la sortie standard et, en même temps, enregistre dans un fichier la série des valeurs de la variable.
179
180 ::
181
182     import numpy, re
183     v=numpy.array(var[:],  ndmin=1)
184     print info,v
185     global istep
186     try:
187         istep += 1
188     except:
189         istep = 0
190     f='/tmp/value_%s_%05i.txt'%(info,istep)
191     f=re.sub('\s','_',f)
192     print 'Value saved in "%s"'%f
193     numpy.savetxt(f,v)
194
195 .. index:: single: ValueGnuPlotter (Observer)
196
197 Modèle **ValueGnuPlotter** :
198 ............................
199
200 Affiche graphiquement avec Gnuplot la valeur courante de la variable.
201
202 ::
203
204     import numpy, Gnuplot
205     v=numpy.array(var[-1], ndmin=1)
206     global ifig, gp
207     try:
208         ifig += 1
209         gp('set style data lines')
210     except:
211         ifig = 0
212         gp = Gnuplot.Gnuplot(persist=1)
213         gp('set style data lines')
214     gp('set title  "%s (Figure %i)"'%(info,ifig))
215     gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
216
217 .. index:: single: ValueSerieGnuPlotter (Observer)
218
219 Modèle **ValueSerieGnuPlotter** :
220 .................................
221
222 Affiche graphiquement avec Gnuplot la série des valeurs de la variable.
223
224 ::
225
226     import numpy, Gnuplot
227     v=numpy.array(var[:],  ndmin=1)
228     global ifig, gp
229     try:
230         ifig += 1
231         gp('set style data lines')
232     except:
233         ifig = 0
234         gp = Gnuplot.Gnuplot(persist=1)
235         gp('set style data lines')
236     gp('set title  "%s (Figure %i)"'%(info,ifig))
237     gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
238
239 .. index:: single: ValuePrinterAndGnuPlotter (Observer)
240
241 Modèle **ValuePrinterAndGnuPlotter** :
242 ......................................
243
244 Imprime sur la sortie standard et, en même temps, affiche graphiquement avec Gnuplot la valeur courante de la variable.
245
246 ::
247
248     print info, var[-1]
249     import numpy, Gnuplot
250     v=numpy.array(var[-1], ndmin=1)
251     global ifig,gp
252     try:
253         ifig += 1
254         gp('set style data lines')
255     except:
256         ifig = 0
257         gp = Gnuplot.Gnuplot(persist=1)
258         gp('set style data lines')
259     gp('set title  "%s (Figure %i)"'%(info,ifig))
260     gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
261
262 .. index:: single: ValueSeriePrinterAndGnuPlotter (Observer)
263
264 Modèle **ValueSeriePrinterAndGnuPlotter** :
265 ...........................................
266
267 Imprime sur la sortie standard et, en même temps, affiche graphiquement avec Gnuplot la série des valeurs de la variable.
268
269 ::
270
271     print info, var[:] 
272     import numpy, Gnuplot
273     v=numpy.array(var[:],  ndmin=1)
274     global ifig,gp
275     try:
276         ifig += 1
277         gp('set style data lines')
278     except:
279         ifig = 0
280         gp = Gnuplot.Gnuplot(persist=1)
281         gp('set style data lines')
282     gp('set title  "%s (Figure %i)"'%(info,ifig))
283     gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
284
285 .. index:: single: ValuePrinterSaverAndGnuPlotter (Observer)
286
287 Modèle **ValuePrinterSaverAndGnuPlotter** :
288 ...........................................
289
290 Imprime sur la sortie standard et, en même temps, enregistre dans un fichier et affiche graphiquement la valeur courante de la variable .
291
292 ::
293
294     print info, var[-1]
295     import numpy, re
296     v=numpy.array(var[-1], ndmin=1)
297     global istep
298     try:
299         istep += 1
300     except:
301         istep = 0
302     f='/tmp/value_%s_%05i.txt'%(info,istep)
303     f=re.sub('\s','_',f)
304     print 'Value saved in "%s"'%f
305     numpy.savetxt(f,v)
306     import Gnuplot
307     global ifig,gp
308     try:
309         ifig += 1
310         gp('set style data lines')
311     except:
312         ifig = 0
313         gp = Gnuplot.Gnuplot(persist=1)
314         gp('set style data lines')
315     gp('set title  "%s (Figure %i)"'%(info,ifig))
316     gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
317
318 .. index:: single: ValueSeriePrinterSaverAndGnuPlotter (Observer)
319
320 Modèle **ValueSeriePrinterSaverAndGnuPlotter** :
321 ................................................
322
323 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.
324
325 ::
326
327     print info, var[:] 
328     import numpy, re
329     v=numpy.array(var[:],  ndmin=1)
330     global istep
331     try:
332         istep += 1
333     except:
334         istep = 0
335     f='/tmp/value_%s_%05i.txt'%(info,istep)
336     f=re.sub('\s','_',f)
337     print 'Value saved in "%s"'%f
338     numpy.savetxt(f,v)
339     import Gnuplot
340     global ifig,gp
341     try:
342         ifig += 1
343         gp('set style data lines')
344     except:
345         ifig = 0
346         gp = Gnuplot.Gnuplot(persist=1)
347         gp('set style data lines')
348     gp('set title  "%s (Figure %i)"'%(info,ifig))
349     gp.plot( Gnuplot.Data( v, with_='lines lw 2' ) )
350
351 .. index:: single: ValueMean (Observer)
352
353 Modèle **ValueMean** :
354 ......................
355
356 Imprime sur la sortie standard la moyenne de la valeur courante de la variable.
357
358 ::
359
360     import numpy
361     print info, numpy.nanmean(var[-1])
362
363 .. index:: single: ValueStandardError (Observer)
364
365 Modèle **ValueStandardError** :
366 ...............................
367
368 Imprime sur la sortie standard l'écart-type de la valeur courante de la variable.
369
370 ::
371
372     import numpy
373     print info, numpy.nanstd(var[-1])
374
375 .. index:: single: ValueVariance (Observer)
376
377 Modèle **ValueVariance** :
378 ..........................
379
380 Imprime sur la sortie standard la variance de la valeur courante de la variable.
381
382 ::
383
384     import numpy
385     print info, numpy.nanvar(var[-1])
386
387 .. index:: single: ValueRMS (Observer)
388
389 Modèle **ValueRMS** :
390 .....................
391
392 Imprime sur la sortie standard la racine de la moyenne des carrés (RMS), ou moyenne quadratique, de la valeur courante de la variable.
393
394 ::
395
396     import numpy
397     v = numpy.matrix( numpy.ravel( var[-1] ) )
398     print info, float( numpy.sqrt((1./v.size)*(v*v.T)) )