]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA9/Macro/fiabilite_mefisto.py
Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
[tools/eficas.git] / Aster / Cata / cataSTA9 / Macro / fiabilite_mefisto.py
1 #@ MODIF fiabilite_mefisto Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
9 # (AT YOUR OPTION) ANY LATER VERSION.                                                  
10 #                                                                       
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
15 #                                                                       
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
18 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
19 # ======================================================================
20
21
22 # RESPONSABLE GNICOLAS G.NICOLAS
23 #
24 def fiabilite_mefisto ( self, Rep_Calc_LOGICIEL_global,
25                         INFO, VERSION,
26                         SEUIL, SEUIL_TYPE,
27                         VARIABLE,
28                         valeurs_lois,
29                         **args ) :
30 #
31 #    valeurs_lois est un dictionnaire indexé sur les variables.
32 #    Chaque case, valeurs_lois[m], est un dictionnaire contenant :
33 #    d["v_moy_physique"] = valeur moyenne physique
34 #    d["v_moy_loi"] = valeur moyenne de la loi
35 #    d["v_min_loi"] = valeur minimale de la loi
36 #    d["v_max_loi"] = valeur maximale de la loi
37 #    d["sigma_loi"] = ecart type de la loi
38 #
39 #    args est le dictionnaire des arguments optionnels
40 #    args.keys() est la liste des mots-clés
41 #    args.keys()[0] est la premiere valeur de cette liste
42 #    args.keys()[1:] est la liste des valeurs suivantes dans cette liste
43 #    args.keys(mot_cle) représente le contenu de la variable mot_cle dans la macro appelante.
44 #
45   """ Ecriture des données spécifiques à MEFISTO. """
46 #
47   from Macro import fiabilite_fichier
48   import os
49   import string
50   import Numeric
51   from Utilitai.Utmess import  UTMESS
52 #
53 #____________________________________________________________________
54 #
55 # 1. Préalables
56 #____________________________________________________________________
57 #
58 #
59   messages_erreur = { 0 : "Tout va bien",
60                       1 : "Fichier inconnu.",
61                       2 : "Problème d'ouverture de fichier.",
62                      10 : "Problème d'ouverture de fichier.",
63                      11 : "Problème de fermeture de fichier.",
64                      20 : "Problème d'impression de fichier.",
65                      50 : "Donnée inacceptable.",
66                     100 : "Erreur." }
67 #
68   trad_oui_non = { "OUI" : 1,
69                    "NON" : 0 }
70 #
71   erreur = 0
72 #
73   while not erreur :
74 #
75 #____________________________________________________________________
76 #
77 # 2. Les fichiers pour le logiciel de fiabilité
78 #    Ils sont créés dans le répertoire d'exécution du logiciel de fiabilité, avec leurs noms officiels
79 #____________________________________________________________________
80 #
81 #
82     fic_dataMenu  = "dataMenu"
83     fic_dataStoch = "dataStoch"
84     fic_dataNum   = "dataNum"
85     fic_dataGrad  = "dataGrad"
86 #
87 #____________________________________________________________________
88 #
89 # 3. Construction du fichier 'dataMenu'
90 #____________________________________________________________________
91 #
92 # 3.1 ==> Ouverture du fichier
93 #
94     f_menu = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataMenu, INFO )
95     erreur = f_menu.Ouvre_Fichier ( "w" )
96     if erreur :
97       break
98 #
99 # 3.2 ==> Ecriture des données nécessaires
100 #
101     f_menu.Ecrit_Titre ("MENU DU PROGRAMME MEFISTO")
102     f_menu.Ecrit_Titre ("1 <=> OUI et 0 <=> NON (entiers)")
103 #
104     f_menu.Ecrit_Titre ("Recherche du point de conception")
105     aux = trad_oui_non[args["RECH_PT_CONCEPT"]]
106     f_menu.Ecrit_Valeurs (aux)
107 #
108     f_menu.Ecrit_Titre ("First Order Reliability Analyses")
109     aux = trad_oui_non[args["METHODE_FORM"]]
110     f_menu.Ecrit_Valeurs (aux)
111 #
112     f_menu.Ecrit_Titre ("Second Order Reliability Analyses")
113     aux = trad_oui_non[args["METHODE_SORM"]]
114     f_menu.Ecrit_Valeurs (aux)
115 #
116     f_menu.Ecrit_Titre ("Importance Sampling Analyses")
117     aux = trad_oui_non[args["TIRAGE_IMPORTANCE"]]
118     f_menu.Ecrit_Valeurs (aux)
119 #
120     f_menu.Ecrit_Titre ("Optimality Test (1) : Hessian Test")
121     aux = trad_oui_non[args["T_HESSIEN"]]
122     f_menu.Ecrit_Valeurs (aux)
123 #
124     f_menu.Ecrit_Titre ("Optimality Test (2) : Sphere Test")
125     aux = trad_oui_non[args["T_SPHERE"]]
126     f_menu.Ecrit_Valeurs (aux)
127 #
128     f_menu.Ecrit_Titre ("Optimality Test (3) : Strong Max Test")
129     aux = trad_oui_non[args["T_MAXIMUM_FORT"]]
130     f_menu.Ecrit_Valeurs (aux)
131 #
132     f_menu.Ecrit_Titre ("Experiment Plan")
133     aux = trad_oui_non[args["PLAN_EXPERIENCE"]]
134     f_menu.Ecrit_Valeurs (aux)
135 #
136     f_menu.Ecrit_Titre ("Polynomial Taylor Approximation (order 2)")
137     aux = trad_oui_non[args["POLYNOME_TAYLOR"]]
138     f_menu.Ecrit_Valeurs (aux)
139 #
140 # 3.3 ==> Fermeture du fichier
141 #
142     erreur = f_menu.Ferme_Fichier ( )
143     if erreur :
144       break
145 #
146     if INFO >= 2 :
147       erreur = f_menu.Imprime_Fichier ( )
148       if erreur :
149         break
150 #
151 #____________________________________________________________________
152 #
153 # 4. Construction du fichier "dataStoch"
154 #____________________________________________________________________
155 #
156 # 4.1 ==> Ouverture du fichier
157 #
158     f_stoch = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataStoch, INFO )
159     erreur = f_stoch.Ouvre_Fichier ( "w" )
160     if erreur :
161       break
162 #
163 # 4.2 ==> Nombre d'occurence de VARIABLE
164 #
165     nb_occu_variable = len(VARIABLE)
166 #
167 # 4.3 ==> Ecriture des données nécessaires
168 #
169     f_stoch.Ecrit_Titre ("Code name")
170     aux=string.replace(VERSION,"_",".")
171     aux=string.replace(aux,"N","n")
172     aux=string.replace(aux,"V","v")
173     f_stoch.Ecrit_Valeurs ( "aster_" + aux )
174 #
175     aux = [ "Gradients evaluated by the code" ]
176     aux.append("1 : Au moins 1 ; 0 : aucun")
177     f_stoch.Ecrit_Titre (aux)
178     gradient = 0
179     for m in VARIABLE :
180       if m["GRADIENT"] == "OUI" : gradient = 1
181     f_stoch.Ecrit_Valeurs (gradient)
182 #
183     f_stoch.Ecrit_Titre ("Variates number")
184     f_stoch.Ecrit_Valeurs ( nb_occu_variable )
185 #
186     aux = [ "Stochastic Variates" ]
187     aux.append("1: Uniforme (min, max)")
188     aux.append("2: Normal (mean, std dev)")
189     aux.append("3: LogNormal (mean, std dev, min)")
190     aux.append("4: Normal Truncated (mean, std dev, min, max)")
191     f_stoch.Ecrit_Titre (aux)
192 #
193     for m in VARIABLE :
194 #
195       d = valeurs_lois[m]
196       if m["LOI"] == "UNIFORME" :
197         f_stoch.Ecrit_Valeurs ( [ m["NOM"],  1 , d["v_min_loi"] , d["v_max_loi"] ] )
198       elif m["LOI"] == "NORMALE" :
199         f_stoch.Ecrit_Valeurs ( [ m["NOM"],  2 , d["v_moy_loi"] , d["sigma_loi"] ] )
200       elif m["LOI"] == "LOGNORMALE" :
201         f_stoch.Ecrit_Valeurs ( [ m["NOM"],  3 , d["v_moy_loi"] , d["sigma_loi"] , d["v_min_loi"] ] )
202       elif m["LOI"] == "NORMALE_TRONQUEE" :
203         f_stoch.Ecrit_Valeurs ( [ m["NOM"],  4 , d["v_moy_loi"] , d["sigma_loi"] , d["v_min_loi"] , d["v_max_loi"] ] )
204       else :
205         erreur = 50
206 #
207     if erreur :
208       break
209 #
210     f_stoch.Ecrit_Titre ("Initial Points")
211     for m in VARIABLE :
212       if m["POINT_INI"] is None :
213         aux = valeurs_lois[m]["v_moy_physique"]
214       else :
215         aux = m["POINT_INI"]
216       f_stoch.Ecrit_Valeurs ( aux )
217 #
218     f_stoch.Ecrit_Titre ("Reference Points")
219     for m in VARIABLE :
220       if m["POINT_REF"] is None :
221         aux = valeurs_lois[m]["v_moy_physique"]
222       else :
223         aux = m["POINT_REF"]
224       f_stoch.Ecrit_Valeurs ( aux )
225 #
226     f_stoch.Ecrit_Titre ("Design Points")
227     for m in VARIABLE :
228       if args["RECH_PT_CONCEPT"] == "OUI" :
229         aux = 1792.
230       elif m["POINT_CONCEPT"] is None :
231         aux = valeurs_lois[m]["v_moy_physique"]
232       else :
233         aux = m["POINT_CONCEPT"]
234       f_stoch.Ecrit_Valeurs ( aux )
235 #
236     f_stoch.Ecrit_Titre ("Correlation matrix fictive")
237 #    if args.has_key('MATRICE'):
238     if args["MATRICE"] != None:
239       if len(args["MATRICE"]) != nb_occu_variable**2:
240 #        +' DU MOT CLE MATRICE DOIT ETRE EGAL A : '
241 #        +str(nb_occu_variable**2))
242         UTMESS('F','FIABILITE0_1',vali=nb_occu_variable**2)
243       for m in range(nb_occu_variable) :
244         aux = [ ]
245         for n in range(nb_occu_variable) :
246           aux.append(args["MATRICE"][n + m*nb_occu_variable])
247         f_stoch.Ecrit_Valeurs ( aux )
248     else:
249         aux=Numeric.identity(nb_occu_variable)
250         aux=Numeric.concatenate(aux)
251         aux=aux.tolist()
252         f_stoch.Ecrit_Valeurs ( aux )
253 #
254     f_stoch.Ecrit_Titre ("Parameter threshold value")
255     if SEUIL_TYPE == "MAXIMUM" :
256       aux = SEUIL
257     else :
258       aux = -SEUIL
259     f_stoch.Ecrit_Valeurs ( aux )
260 #
261 # 4.4 ==> Fermeture du fichier
262 #
263     erreur = f_stoch.Ferme_Fichier ( )
264     if erreur :
265       break
266 #
267     if INFO >= 2 :
268       erreur = f_stoch.Imprime_Fichier ( )
269       if erreur :
270         break
271 #
272 #____________________________________________________________________
273 #
274 # 5. Construction du fichier 'dataNum'
275 #____________________________________________________________________
276 #
277 # 5.1 ==> Ouverture du fichier
278 #
279     f_num = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataNum, INFO )
280     erreur = f_num.Ouvre_Fichier ( "w" )
281     if erreur :
282       break
283 #
284 # 5.2 ==> Ecriture des données nécessaires
285 #
286     f_num.Ecrit_Titre ("Parameters : EpsU, EpsG, Tau, Omega, iterMax")
287     if args["RECH_PT_CONCEPT"] == "OUI" :
288       f_num.Ecrit_Valeurs (args["EPSILON_U"])
289       f_num.Ecrit_Valeurs (args["EPSILON_G"])
290       f_num.Ecrit_Valeurs (args["TAU"])
291       f_num.Ecrit_Valeurs (args["OMEGA"])
292       f_num.Ecrit_Valeurs (args["ITER_MAX"])
293     else :
294       aux = 0.1848
295       for k in range(5) :
296         f_num.Ecrit_Valeurs (aux)
297 #
298     f_num.Ecrit_Titre ("Parameters : hgrad, hhess")
299     f_num.Ecrit_Valeurs (args["HGRAD"])
300     f_num.Ecrit_Valeurs (args["HHESS"])
301 #
302     aux = [ "Parameter Optimality Test(sphere)" ]
303     aux.append("1: Parametric Method (Point Number in each direction)")
304     aux.append("2: Gaussian Method (Total Point Number)")
305     aux.append("3: Rejection Method (Total Point Number)")
306     f_num.Ecrit_Titre (aux)
307 #
308     if args["T_SPHERE"] == "OUI" :
309 #
310       if args["METHODE_TEST"] == "PARAMETRIQUE" :
311         aux1 = 1
312       elif args["METHODE_TEST"] == "GAUSSIENNE" :
313         aux1 = 2
314       elif args["METHODE_TEST"] == "REJECTION" :
315         aux1 = 3
316       else :
317         self.cr.warn("METHODE DE TEST : "+args["METHODE_TEST"])
318         erreur = 50
319         break
320 #
321       aux2 = args["NB_POINT"]
322 #
323     else :
324 #
325 #     remarque : il faut mettre une valeur plausible en aux1, sinon plantage violent ...
326       aux1 = 1
327       aux2 = 1789
328 #
329     f_num.Ecrit_Valeurs ( [ aux1 , aux2 ] )
330 #
331     aux = [ "Parameters : alpha, beta" ]
332     aux.append("alpha: common net")
333     aux.append("beta: extreme net")
334     f_num.Ecrit_Titre (aux)
335     if args["PLAN_EXPERIENCE"] == "OUI" :
336       aux1 = args["ALPHA"]
337       aux2 = args["BETA"]
338     else :
339       aux1 = 1789.0
340       aux2 = 1789.0
341     f_num.Ecrit_Valeurs ( aux1 )
342     f_num.Ecrit_Valeurs ( aux2 )
343 #
344     f_num.Ecrit_Titre ("Parameters Strong Max Test : cosLim, dProb")
345     if args["T_MAXIMUM_FORT"] == "OUI" :
346       aux1 = args["COS_LIM"]
347       aux2 = args["DPROB"]
348     else :
349       aux1 = 0.1789
350       aux2 = 0.1789
351     f_num.Ecrit_Valeurs ( aux1 )
352     f_num.Ecrit_Valeurs ( aux2 )
353 #
354     f_num.Ecrit_Titre ("Parameter Importance Samplings : Simulation Number")
355     if args["TIRAGE_IMPORTANCE"] == "OUI" :
356       aux = args["NB_SIMULATION"]
357     else :
358       aux = 1945
359     f_num.Ecrit_Valeurs ( aux )
360 #
361 # 5.3 ==> Fermeture du fichier
362 #
363     erreur = f_num.Ferme_Fichier ( )
364     if erreur :
365       break
366 #
367     if INFO >= 2 :
368       erreur = f_num.Imprime_Fichier ( )
369       if erreur :
370         break
371 #
372 #____________________________________________________________________
373 #
374 # 6. Construction du fichier 'dataGrad'
375 #____________________________________________________________________
376 #
377 # 6.1 ==> Création du fichier
378 #
379     f_grad = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataGrad, INFO )
380     erreur = f_grad.Ouvre_Fichier ( "w" )
381     if erreur :
382       break
383 #
384 # 6.2 ==> Ecriture des données nécessaires
385 #
386     f_grad.Ecrit_Titre ("Commentaires")
387 #
388     for m in VARIABLE :
389       f_grad.Ecrit_Commentaires (m["NOM"])
390       if m["GRADIENT"] == "OUI" :
391         gradient = 1
392         increment = 0.0
393       else :
394         gradient = 0
395         increment = m["INCREMENT"]
396       aux = [gradient,increment]
397       f_grad.Ecrit_Valeurs (aux)
398 #
399 # 6.3 ==> Fermeture du fichier
400 #
401     erreur = f_grad.Ferme_Fichier ( )
402     if erreur :
403       break
404 #
405     if INFO >= 2 :
406       erreur = f_grad.Imprime_Fichier ( )
407       if erreur :
408         break
409 #
410 #____________________________________________________________________
411 #
412 # 7. C'est fini !
413 #____________________________________________________________________
414 #
415     break
416 #
417   if erreur :
418     if not messages_erreur.has_key(erreur) :
419       erreur = 100
420     self.cr.warn(messages_erreur[erreur])
421     erreur = 11
422 #
423   return erreur
424 #
425 ##########################  Fin de la fonction##################################
426 #
427 ##########################   Auto-test##################################
428 #
429 if __name__ == "__main__" :
430 #
431   import os
432   import sys
433   import tempfile
434 #
435   Rep_Calc_LOGICIEL_global = tempfile.mktemp()
436   os.mkdir(Rep_Calc_LOGICIEL_global)
437 #
438   INFO = 2
439   VERSION = "V3_2"
440   SEUIL = 1789.
441   SEUIL_TYPE = "MAXIMUM"
442   VARIABLE = []
443   args = {}
444   valeurs = {}
445 #
446   erreur = fiabilite_mefisto ( None, Rep_Calc_LOGICIEL_global,
447                         INFO, VERSION,
448                         SEUIL, SEUIL_TYPE,
449                         VARIABLE,
450                         valeurs,
451                         **args )
452 ###  print "Erreur = ", erreur
453   Liste = os.listdir(Rep_Calc_LOGICIEL_global)
454 #
455   for nomfic in Liste :
456     fic_total = os.path.join(Rep_Calc_LOGICIEL_global,nomfic)
457     os.chmod  (fic_total,0755)
458     os.remove (fic_total)
459   os.rmdir (Rep_Calc_LOGICIEL_global)
460 #
461   sys.exit("blabla")