1 #@ MODIF fiabilite_mefisto Macro DATE 04/10/2005 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.
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.
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 # ======================================================================
22 # RESPONSABLE GNICOLAS G.NICOLAS
24 def fiabilite_mefisto ( self, Rep_Calc_LOGICIEL_global,
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
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.
45 """ Ecriture des données spécifiques à MEFISTO. """
47 from Macro import fiabilite_fichier
51 from Utilitai.Utmess import UTMESS
53 #____________________________________________________________________
56 #____________________________________________________________________
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.",
68 trad_oui_non = { "OUI" : 1,
75 #____________________________________________________________________
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 #____________________________________________________________________
82 fic_dataMenu = "dataMenu"
83 fic_dataStoch = "dataStoch"
84 fic_dataNum = "dataNum"
85 fic_dataGrad = "dataGrad"
87 #____________________________________________________________________
89 # 3. Construction du fichier 'dataMenu'
90 #____________________________________________________________________
92 # 3.1 ==> Ouverture du fichier
94 f_menu = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataMenu, INFO )
95 erreur = f_menu.Ouvre_Fichier ( "w" )
99 # 3.2 ==> Ecriture des données nécessaires
101 f_menu.Ecrit_Titre ("MENU DU PROGRAMME MEFISTO")
102 f_menu.Ecrit_Titre ("1 <=> OUI et 0 <=> NON (entiers)")
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)
108 f_menu.Ecrit_Titre ("First Order Reliability Analyses")
109 aux = trad_oui_non[args["METHODE_FORM"]]
110 f_menu.Ecrit_Valeurs (aux)
112 f_menu.Ecrit_Titre ("Second Order Reliability Analyses")
113 aux = trad_oui_non[args["METHODE_SORM"]]
114 f_menu.Ecrit_Valeurs (aux)
116 f_menu.Ecrit_Titre ("Importance Sampling Analyses")
117 aux = trad_oui_non[args["TIRAGE_IMPORTANCE"]]
118 f_menu.Ecrit_Valeurs (aux)
120 f_menu.Ecrit_Titre ("Optimality Test (1) : Hessian Test")
121 aux = trad_oui_non[args["T_HESSIEN"]]
122 f_menu.Ecrit_Valeurs (aux)
124 f_menu.Ecrit_Titre ("Optimality Test (2) : Sphere Test")
125 aux = trad_oui_non[args["T_SPHERE"]]
126 f_menu.Ecrit_Valeurs (aux)
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)
132 f_menu.Ecrit_Titre ("Experiment Plan")
133 aux = trad_oui_non[args["PLAN_EXPERIENCE"]]
134 f_menu.Ecrit_Valeurs (aux)
136 f_menu.Ecrit_Titre ("Polynomial Taylor Approximation (order 2)")
137 aux = trad_oui_non[args["POLYNOME_TAYLOR"]]
138 f_menu.Ecrit_Valeurs (aux)
140 # 3.3 ==> Fermeture du fichier
142 erreur = f_menu.Ferme_Fichier ( )
147 erreur = f_menu.Imprime_Fichier ( )
151 #____________________________________________________________________
153 # 4. Construction du fichier "dataStoch"
154 #____________________________________________________________________
156 # 4.1 ==> Ouverture du fichier
158 f_stoch = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataStoch, INFO )
159 erreur = f_stoch.Ouvre_Fichier ( "w" )
163 # 4.2 ==> Nombre d'occurence de VARIABLE
165 nb_occu_variable = len(VARIABLE)
167 # 4.3 ==> Ecriture des données nécessaires
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 )
175 aux = [ "Gradients evaluated by the code" ]
176 aux.append("1 : Au moins 1 ; 0 : aucun")
177 f_stoch.Ecrit_Titre (aux)
180 if m["GRADIENT"] == "OUI" : gradient = 1
181 f_stoch.Ecrit_Valeurs (gradient)
183 f_stoch.Ecrit_Titre ("Variates number")
184 f_stoch.Ecrit_Valeurs ( nb_occu_variable )
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)
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"] ] )
210 f_stoch.Ecrit_Titre ("Initial Points")
212 if m["POINT_INI"] is None :
213 aux = valeurs_lois[m]["v_moy_physique"]
216 f_stoch.Ecrit_Valeurs ( aux )
218 f_stoch.Ecrit_Titre ("Reference Points")
220 if m["POINT_REF"] is None :
221 aux = valeurs_lois[m]["v_moy_physique"]
224 f_stoch.Ecrit_Valeurs ( aux )
226 f_stoch.Ecrit_Titre ("Design Points")
228 if args["RECH_PT_CONCEPT"] == "OUI" :
230 elif m["POINT_CONCEPT"] is None :
231 aux = valeurs_lois[m]["v_moy_physique"]
233 aux = m["POINT_CONCEPT"]
234 f_stoch.Ecrit_Valeurs ( aux )
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 UTMESS('F','FIABILITE_MEPHISTO',' LE NOMBRE D ELEMENTS'
241 +' DU MOT CLE MATRICE DOIT ETRE EGAL A : '
242 +str(nb_occu_variable**2))
243 for m in range(nb_occu_variable) :
245 for n in range(nb_occu_variable) :
246 aux.append(args["MATRICE"][n + m*nb_occu_variable])
247 f_stoch.Ecrit_Valeurs ( aux )
249 aux=Numeric.identity(nb_occu_variable)
250 aux=Numeric.concatenate(aux)
252 f_stoch.Ecrit_Valeurs ( aux )
254 f_stoch.Ecrit_Titre ("Parameter threshold value")
255 if SEUIL_TYPE == "MAXIMUM" :
259 f_stoch.Ecrit_Valeurs ( aux )
261 # 4.4 ==> Fermeture du fichier
263 erreur = f_stoch.Ferme_Fichier ( )
268 erreur = f_stoch.Imprime_Fichier ( )
272 #____________________________________________________________________
274 # 5. Construction du fichier 'dataNum'
275 #____________________________________________________________________
277 # 5.1 ==> Ouverture du fichier
279 f_num = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataNum, INFO )
280 erreur = f_num.Ouvre_Fichier ( "w" )
284 # 5.2 ==> Ecriture des données nécessaires
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"])
296 f_num.Ecrit_Valeurs (aux)
298 f_num.Ecrit_Titre ("Parameters : hgrad, hhess")
299 f_num.Ecrit_Valeurs (args["HGRAD"])
300 f_num.Ecrit_Valeurs (args["HHESS"])
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)
308 if args["T_SPHERE"] == "OUI" :
310 if args["METHODE_TEST"] == "PARAMETRIQUE" :
312 elif args["METHODE_TEST"] == "GAUSSIENNE" :
314 elif args["METHODE_TEST"] == "REJECTION" :
317 self.cr.warn("METHODE DE TEST : "+args["METHODE_TEST"])
321 aux2 = args["NB_POINT"]
325 # remarque : il faut mettre une valeur plausible en aux1, sinon plantage violent ...
329 f_num.Ecrit_Valeurs ( [ aux1 , aux2 ] )
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" :
341 f_num.Ecrit_Valeurs ( aux1 )
342 f_num.Ecrit_Valeurs ( aux2 )
344 f_num.Ecrit_Titre ("Parameters Strong Max Test : cosLim, dProb")
345 if args["T_MAXIMUM_FORT"] == "OUI" :
346 aux1 = args["COS_LIM"]
351 f_num.Ecrit_Valeurs ( aux1 )
352 f_num.Ecrit_Valeurs ( aux2 )
354 f_num.Ecrit_Titre ("Parameter Importance Samplings : Simulation Number")
355 if args["TIRAGE_IMPORTANCE"] == "OUI" :
356 aux = args["NB_SIMULATION"]
359 f_num.Ecrit_Valeurs ( aux )
361 # 5.3 ==> Fermeture du fichier
363 erreur = f_num.Ferme_Fichier ( )
368 erreur = f_num.Imprime_Fichier ( )
372 #____________________________________________________________________
374 # 6. Construction du fichier 'dataGrad'
375 #____________________________________________________________________
377 # 6.1 ==> Création du fichier
379 f_grad = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataGrad, INFO )
380 erreur = f_grad.Ouvre_Fichier ( "w" )
384 # 6.2 ==> Ecriture des données nécessaires
386 f_grad.Ecrit_Titre ("Commentaires")
389 f_grad.Ecrit_Commentaires (m["NOM"])
390 if m["GRADIENT"] == "OUI" :
395 increment = m["INCREMENT"]
396 aux = [gradient,increment]
397 f_grad.Ecrit_Valeurs (aux)
399 # 6.3 ==> Fermeture du fichier
401 erreur = f_grad.Ferme_Fichier ( )
406 erreur = f_grad.Imprime_Fichier ( )
410 #____________________________________________________________________
413 #____________________________________________________________________
418 if not messages_erreur.has_key(erreur) :
420 self.cr.warn(messages_erreur[erreur])
425 ########################## Fin de la fonction##################################
427 ########################## Auto-test##################################
429 if __name__ == "__main__" :
435 Rep_Calc_LOGICIEL_global = tempfile.mktemp()
436 os.mkdir(Rep_Calc_LOGICIEL_global)
441 SEUIL_TYPE = "MAXIMUM"
446 erreur = fiabilite_mefisto ( None, Rep_Calc_LOGICIEL_global,
452 ### print "Erreur = ", erreur
453 Liste = os.listdir(Rep_Calc_LOGICIEL_global)
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)