2 Ce module contient les variables
6 from OpenturnsSTD import STDGenerateur
7 from OpenturnsXML import XMLGenerateur
9 #====================================================
10 # Preparation du fichier STD
11 #====================================================
12 # C.1. Parties du texte en dur dans le fichier STD
13 #-------------------------------------------------
18 TexteSTDFIN ="\n\nexcept : \n"
19 TexteSTDFIN += DecalSTD + "error_message = sys.exc_type\n"
20 TexteSTDFIN += "\nif error_message is not None :\n"
21 TexteSTDFIN += DecalSTD + "texte = \"\\n=================================================\""
22 TexteSTDFIN += DecalSTD + "texte += \"\\nMessage d'erreur : \" + str(error_message)"
23 TexteSTDFIN += DecalSTD + "texte += \"\\n=================================================\\n\""
24 TexteSTDFIN += DecalSTD + "print texte"
25 TexteSTDFIN += DecalSTD + "\nsys.exit(error_message)\n"
27 # C.2. Definition de composants dans le fichier STD
28 #--------------------------------------------------
30 NomFunction = "myFunction"
31 NomPhysicalStartingPoint = "myPhysicalStartingPoint"
32 NomCollection = "myCollection"
33 NomCopule = "myCopula"
34 NomDistribution = "myDistribution"
35 NomRandomVector_in = "myRandomVector_in"
36 NomRandomVector_out = "myRandomVector_out"
38 NomMethod = "myMethod"
41 NomSampling = "mySampling"
42 NomSolverSD = "mySolver"
46 # Cette classe ajoute les parametres par defaut propres au Solver Aster
47 # Elle va d abord enrichir le dictionnaire DictMCVal avec des valeurs par defaut
48 # C est la methode enrichitMCVal
49 # Elle va ensuite enrichir les variables
50 # C est la methode enrichitListeVariables
52 def __init__(self, parent) :
55 self.enrichitListeVariables()
58 def enrichitMCVal(self) :
59 #=====================
60 # InformationSolver : nom du wrapper, type de fichiers d'echange, etc
61 #----------------------------------------------------------------------
62 # Ajoute les informations sur le wrapper
63 # nom du wrapper, type de fichiers d'echange, etc.
64 dico = { "WrapperPath" : "Code_Aster.so",
65 "FunctionName" : "Code_Aster",
66 "WrapCouplingMode" : "fork",
68 "InDataTransfer" : "files",
69 "OutDataTransfer" : "files",
72 self.parent.ajouteDictMCVal(dico)
74 #InformationSolverFile : parametres par defaut pour les fichiers d'echange
75 #--------------------------------------------------------------------------
78 dicoIn = { "Id" : "file_in", "Type" : "in", "Name" : "StdIn", "Path" : "commandes_aster" }
80 dicoOut = { "Id" : "file_out", "Type" : "out", "Name" : "StdOut", "Path" : "resultats_aster", }
82 dicoFile={"exchange_file" : liste}
83 self.parent.ajouteDictMCVal(dicoFile)
85 # D.2. InformationSolverCommande : arguments, etc
86 #-------------------------------------------------------------------------
87 # InformationSolverCommande est un dictionnaire indexe par le nom du solveur externe appele.
88 # InformationSolverCommande[solveur] est lui-meme un dictionnaire qui contient les parametres
89 # supplementaires pour la commande.
90 # Des parametres sont donnes sous forme de tuple : (ok/nok, "mot-cle") ou (ok/nok, "mot-cle", valeur)
91 # . On ajoute seulement si ok
92 # . Avec (ok/nok, "mot-cle"), on ajoute en arguments les couples ("mot-cle", nom_du_parametre)
93 # . Avec (ok/nok, "mot-cle", valeur), on ajoute en arguments les couples ("mot-cle", valeur)
96 # dico = { "file_out" : (1, "-fic_de_aster_vers_ot"),
97 # "variable_in" : (1, "-variable") }
98 # self.parent.InformationSolverCommande["Code_Aster"] = dico
101 def enrichitListeVariables(self) :
102 # parametres par defaut pour chaque variable
103 #--------------------------------------------
105 dico_in = { "Regexp" : '"^" , "Name", "(.*)= *[0-9eE.+-]+([)]?;?)$"',
106 "Format" : '"Name", "\\1=%20.13G\\2"'
108 dico_out = { "Regexp" : '"(.*)"' }
109 self.parent.ajouteInfoVariables(dico_in,dico_out)
111 class MonSTDGenerateur(STDGenerateur) :
113 def CreeResu (self) :
118 . l'algorithme choisi.
120 . Ecriture des odres d'impression.
122 if self.DictMCVal.has_key("Analysis"):
123 self.Analysis = str(self.DictMCVal["Analysis"])
126 self.fic_resu_OpenTURNS = "fic_resu_OpenTURNS_glop"
127 Algorithm = str (self.DictMCVal["Algorithm"])
128 texte = "\n\n# Le resultat\n"
129 texte += DecalSTDsaut + NomResu + " = " + NomAlgo + ".getResult()"
130 texte += DecalSTDsaut + "###" + "print " + NomResu
131 texte += DecalSTDsaut + "text_resu = \"Resultats\\n=======\\n\""
133 # Particularites des algorithmes de fiabilite
135 if self.Analysis in ( "Reliability", ) :
136 texte += DecalSTDsaut + "aux = " + NomResu + ".getIsStandardPointOriginInFailureSpace()"
137 texte += DecalSTDsaut + "if aux :"
138 texte += DecalSTDsaut + DecalSTD + "texte_bis = \"est\""
139 texte += DecalSTDsaut + "else :"
140 texte += DecalSTDsaut + DecalSTD + "texte_bis = \"n\'est pas\""
141 texte += DecalSTDsaut + "text_resu += \"\\nLe point initial \" + texte_bis + \" dans l\'espace de defaillance.\""
142 l_aux = [ ("Probabilite de defaillance", "EventProbability") ]
143 l_aux.append ( ("Indice de confiance generalise", "GeneralisedReliabilityIndex") )
144 l_aux.append ( ("Indice de confiance de Hasofer", "HasoferReliabilityIndex") )
146 texte += DecalSTDsaut + "text_resu += \"\\n" + t_aux[0] + " = \" + str(" \
147 + NomResu + ".get" + t_aux[1] + "())"
149 l_aux.append("StandardSpaceDesignPoint")
150 l_aux.append("PhysicalSpaceDesignPoint")
151 l_aux.append("ImportanceFactors")
152 texte += DecalSTDsaut + "l_aux_var = []"
153 for DictVariable in self.ListeVariables :
154 if ( DictVariable["Type"] == "in" ) :
155 texte += DecalSTDsaut + "l_aux_var.append(\"" + DictVariable["Name"] + "\")"
156 texte += DecalSTDsaut + "l_aux = []"
157 for type_resu in l_aux :
158 texte += DecalSTDsaut + "l_aux.append(" + NomResu + ".get" + type_resu + "())"
159 texte += DecalSTDsaut + "for resu in l_aux :"
160 texte += DecalSTDsaut + DecalSTD + "if not resu.isEmpty() :"
161 texte += DecalSTDsaut + DecalSTD + DecalSTD + "text_resu += \"\\n\" + resu.getName() + \" :\""
162 texte += DecalSTDsaut + DecalSTD + DecalSTD + "size = resu.getDimension()"
163 texte += DecalSTDsaut + DecalSTD + DecalSTD + "l_aux_1 = resu.getCollection()"
164 texte += DecalSTDsaut + DecalSTD + DecalSTD + "for iaux in range(size) :"
165 texte += DecalSTDsaut + DecalSTD + DecalSTD + DecalSTD + "text_resu += \"\\n. \" + l_aux_var[iaux] + \" : \" + str(l_aux_1[iaux])"
167 # Particularites des algorithmes de simulation
169 if self.Analysis in ( "Simulation", ) :
170 l_aux = [ ("Probabilite de defaillance", "ProbabilityEstimate") ]
171 l_aux.append ( ("Variance", "VarianceEstimate") )
172 l_aux.append ( ("Nombre d\'iterations", "OuterSampling") )
174 texte += DecalSTDsaut + "text_resu += \"\\n" + t_aux[0] + " = \" + str(" \
175 + NomResu + ".get" + t_aux[1] + "())"
176 texte += DecalSTDsaut + "text_resu += \"\\nNombre d'evaluations de l'etat limite = \" + str(" \
177 + NomResu + ".getOuterSampling()*" + NomResu + ".getBlockSize())"
178 if self.DictMCVal.has_key("ConfidenceIntervalProbability") :
179 aux = self.DictMCVal["ConfidenceIntervalProbability"]
180 texte += DecalSTDsaut + "proba = " + NomResu + ".getProbabilityEstimate()"
181 texte += DecalSTDsaut + "t_aux = "
182 if ( type(aux) is type(0.) ) :
183 texte += "(" + str(aux) + ")"
187 texte += DecalSTDsaut + "for val in t_aux :"
188 texte += DecalSTDsaut + DecalSTD + "length = " + NomResu + ".getConfidenceLength(val)"
189 texte += DecalSTDsaut + DecalSTD + "vinf = str( proba - 0.5*length )"
190 texte += DecalSTDsaut + DecalSTD + "vsup = str( proba + 0.5*length )"
191 texte += DecalSTDsaut + DecalSTD + "text_resu += \"\\nIntervalle de confiance a \" + str(val) + \" = [ \" "
192 texte += "+ vinf + \" , \" + vsup + \" ]\""
196 texte += DecalSTDsaut + "d_aux = {}"
197 texte += DecalSTDsaut + "d_aux[\"E\"] = ( \"de la fonction\", " + NomFunction + ".getEvaluationCallsNumber() )"
198 texte += DecalSTDsaut + "d_aux[\"G\"] = ( \"du gradient\", " + NomFunction + ".getGradientCallsNumber() )"
199 texte += DecalSTDsaut + "d_aux[\"H\"] = ( \"du hessien\", " + NomFunction + ".getHessianCallsNumber() )"
200 texte += DecalSTDsaut + "for cle in d_aux.keys() :"
201 texte += DecalSTDsaut + DecalSTD + "if d_aux[cle][1] > 0 :"
202 texte += DecalSTDsaut + DecalSTD + DecalSTD + "text_resu += \"\\nNombre d\'appels au solveur pour le calcul \"" \
203 + " + d_aux[cle][0] + \" = \" + str(d_aux[cle][1])"
207 texte += DecalSTDsaut + "print \"\\n\", text_resu, \"\\n\""
208 texte += DecalSTDsaut + "file_resu = open(\"" + self.fic_resu_OpenTURNS + "\", \"w\")"
209 texte += DecalSTDsaut + "file_resu.write(text_resu)"
210 texte += DecalSTDsaut + "file_resu.close()"
211 texte += DecalSTDsaut + "probability = " + NomResu + ".getEventProbability()"