import os
+defaultSTD = """#! /usr/bin/env python
+class StudyFileGenerationError:
+ def __init__ (self, st):
+ self.st = st
+ def __str__(self):
+ return "'%s'" % self.st
+
+raise StudyFileGenerationError, "The study file was not generated"
+"""
+
+enteteSTD = """#! /usr/bin/env python
+
+# Chargement du module systeme
+import sys
+sys.path.append( '%s' )
+
+# Chargement du module Open TURNS
+from openturns import *
+
+"""
+
+piedDePageSTD = """
+
+# Terminaison du fichier
+sys.exit( 0 )
+"""
#=============================================
# La classe de creation du fichier STD
'''
Generation du fichier python
'''
- def __init__ (self, DictMCVal, ListeVariables, DictLois ) :
+ def __init__ (self, appli, DictMCVal, ListeVariables, DictLois ) :
self.DictMCVal = DictMCVal
self.ListeVariables = ListeVariables
self.DictLois = DictLois
print "DictMCVal=", DictMCVal
print "ListeVariables=", ListeVariables
print "DictLois=", DictLois
+ self.texteSTD = defaultSTD
+ self.OpenTURNS_path = appli.CONFIGURATION.OpenTURNS_path
+
+ # Ce dictionnaire fait la correspondance entre le mot lu dans le dictionnaire des mots-clefs et la methode a appeler
+ self.traitement = {
+ "Min/Max" : "MinMax",
+ "Central Uncertainty" : "CentralUncertainty",
+ "Threshold Exceedence" : "ThresholdExceedence",
+ "Experiment Plane" : "ExperimentPlane",
+ "Random Sampling" : "RandomSampling",
+ }
+
+ # Ce dictionnaire liste le nom des variables utilisees dans le script
+ # La clef est le nom attendu par les methodes, la valeur est le nom produit dans le fichier de sortie
+ # Le fait de passer par un dictionnaire permet de controler que les variables existent et sont correctement nommees
+ # meme si clef == valeur
+ self.variable = {
+ "n" : "n",
+ "p" : "p",
+ "model" : "model",
+ "scaledVector" : "scaledVector",
+ "translationVector" : "translationVector",
+ "levels" : "levels",
+ "myCenteredReductedGrid" : "myCenteredReductedGrid",
+ "myExperimentPlane" : "myExperimentPlane",
+ "inputSample" : "inputSample",
+ "outputSample" : "outputSample",
+ "minValue" : "minValue",
+ "maxValue" : "maxValue",
+ "flags" : "flags",
+ }
+ # Ce dictionnaire fait la correspondance entre le mot-clef du catalogue et le flag de la bibliotheque
+ self.logFlags = {
+ "DebugMessages" : "Log.DBG",
+ "WrapperMessages" : "Log.WRAPPER",
+ "UserMessages" : "Log.USER",
+ "InfoMessages" : "Log.INFO",
+ "WarningMessages" : "Log.WARN",
+ "ErrorMessages" : "Log.ERROR",
+ }
+
def CreeSTD (self) :
'''
Pilotage de la creation du fichier python
'''
- return 'Zloup !'
+ TypeAnalyse = None
+ if ( self.DictMCVal.has_key( 'Type' ) ):
+ TypeAnalyse = self.DictMCVal[ 'Type' ]
+
+ Traitement = None
+ if ( self.traitement.has_key( TypeAnalyse ) ):
+ Traitement = self.traitement[ TypeAnalyse ]
+
+ if ( Traitement is not None ):
+ self.texteSTD = apply( STDGenerateur.__dict__[ Traitement ], (self,) )
+
+ return self.texteSTD
+
+ def Entete (self) :
+ '''
+ Imprime l entete commun a tous les fichiers
+ '''
+ txt = enteteSTD % self.OpenTURNS_path
+ txt += "# Definit le niveau d'affichage de la log\n"
+ txt += "%s = Log.NONE\n" % self.variable["flags"]
+ for flag in self.logFlags.keys():
+ if ( self.DictMCVal.has_key( flag ) ):
+ val = self.DictMCVal[ flag ]
+ op = "-"
+ if val == 'yes' :
+ op = "+"
+ txt += "%s = %s %s %s\n" % (self.variable["flags"], self.variable["flags"], op, self.logFlags[ flag ])
+ txt += "Log.Show( %s )\n" % self.variable["flags"]
+ txt += "\n"
+ return txt
+
+ def PiedDePage (self) :
+ '''
+ Imprime le pied de page commun a tous les fichiers
+ '''
+ return piedDePageSTD
+
+ def MinMax (self):
+ '''
+ Produit le fichier study correspondant a une analyse Min/Max
+ '''
+ txt = self.Entete()
+ txt += "# Etude 'Min/Max'\n"
+
+ txt += self.Model()
+
+ Methode = None
+ if ( self.DictMCVal.has_key( 'Method' ) ):
+ Methode = self.DictMCVal[ 'Method' ]
+
+ Traitement = None
+ if ( self.traitement.has_key( Methode ) ):
+ Traitement = self.traitement[ Methode ]
+
+ if ( Traitement is not None ):
+ txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) )
+
+ txt += self.MinMaxComputation()
+ txt += self.MinMaxResult()
+
+ txt += self.PiedDePage()
+ return txt
+
+ def Model (self):
+ '''
+ Importe le modele physique
+ '''
+ fonction = None
+ if ( self.DictMCVal.has_key( 'Name' ) ):
+ fonction = self.DictMCVal[ 'Name' ]
+
+ txt = "# Charge le modele physique\n"
+ txt += "%s = NumericalMathFunction( '%s' )\n" % (self.variable["model"], fonction)
+ txt += "%s = %s.getInputNumericalPointDimension()\n" % (self.variable["n"], self.variable["model"])
+ txt += "\n"
+ return txt
+
+ def ExperimentPlane (self):
+ '''
+ Etude par plan d experience
+ '''
+ txt = "# Etude par plan d'experience\n"
+ txt += self.Levels()
+ txt += self.CenteredReductedGrid()
+ txt += self.ScaledVector()
+ txt += self.TranslationVector()
+ return txt
+
+ def RandomSampling (self):
+ '''
+ Etude par echantillonage aleatoire
+ '''
+ txt = "# Etude par echantillonage aleatoire\n"
+ return txt
+
+ def ScaledVector (self):
+ '''
+ Definit les coefficients multiplicateurs par composante du vecteur
+ '''
+ dimension = 0
+ if ( self.DictMCVal.has_key( 'UnitsPerDimension' ) ):
+ unitsPerDimension = self.DictMCVal[ 'UnitsPerDimension' ]
+ dimension = len( unitsPerDimension )
+
+ txt = "# Definit les facteurs d'echelle dans chaque direction\n"
+ txt += "%s = NumericalPoint( %s )\n" % (self.variable["scaledVector"], self.variable["n"])
+ for i in range(dimension):
+ txt += "%s[%d] = %g\n" % (self.variable["scaledVector"], i, unitsPerDimension[i])
+ txt += "%s.scale( %s )\n" % (self.variable["myExperimentPlane"], self.variable["scaledVector"])
+ txt += "\n"
+ return txt
+
+ def TranslationVector (self):
+ '''
+ Definit le vecteur de translation
+ '''
+ dimension = 0
+ if ( self.DictMCVal.has_key( 'Center' ) ):
+ center = self.DictMCVal[ 'Center' ]
+ dimension = len( center )
+
+ txt = "# Definit le vecteur de translation\n"
+ txt += "%s = NumericalPoint( %s )\n" % (self.variable["translationVector"], self.variable["n"])
+ for i in range(dimension):
+ txt += "%s[%d] = %g\n" % (self.variable["translationVector"], i, center[i])
+ txt += "%s.translate( %s )\n" % (self.variable["myExperimentPlane"], self.variable["translationVector"])
+ txt += "\n"
+ return txt
+
+ def Levels (self):
+ '''
+ Definit les niveaux du plan d experience
+ '''
+ dimension = 0
+ if ( self.DictMCVal.has_key( 'Levels' ) ):
+ levels = self.DictMCVal[ 'Levels' ]
+ dimension = len( levels )
+
+ txt = "# Definit les niveaux de la structure de grille\n"
+ txt += "%s = NumericalPoint( %d )\n" % (self.variable["levels"], dimension)
+ for i in range(dimension):
+ txt += "%s[%d] = %g\n" % (self.variable["levels"], i, levels[i])
+ txt += "\n"
+ return txt
+
+ def CenteredReductedGrid (self):
+ '''
+ Definit la grille reduite du plan d experience
+ '''
+ plane = None
+ if ( self.DictMCVal.has_key( 'ExperimentPlane' ) ):
+ plane = self.DictMCVal[ 'ExperimentPlane' ]
+
+ txt = "# Cree le plan d'experience centre reduit\n"
+ txt += "%s = %s(%s, %s)\n" % (self.variable["myCenteredReductedGrid"], plane, self.variable["n"], self.variable["levels"])
+ txt += "%s = %s.generate()\n" % (self.variable["myExperimentPlane"], self.variable["myCenteredReductedGrid"])
+ txt += "\n"
+ return txt
+
+ def MinMaxComputation (self):
+ '''
+ Realise le calcul deterministe
+ '''
+ txt = "# Calcul\n"
+ txt += "%s = %s\n" % (self.variable["inputSample"], self.variable["myExperimentPlane"])
+ txt += "%s = %s( %s )\n" % (self.variable["outputSample"], self.variable["model"], self.variable["inputSample"])
+ txt += "\n"
+ return txt
+
+ def MinMaxResult (self):
+ '''
+ Produit les resultats de l etude
+ '''
+ txt = "# Resultats\n"
+ txt += "%s = %s.getMin()\n" % (self.variable["minValue"], self.variable["outputSample"])
+ txt += "%s = %s.getMax()\n" % (self.variable["maxValue"], self.variable["outputSample"])
+ txt += "\n"
+ txt += "print '%s = ', %s\n" % (self.variable["minValue"], self.variable["minValue"])
+ txt += "print '%s = ', %s\n" % (self.variable["maxValue"], self.variable["maxValue"])
+ txt += "\n"
+ return txt
+
+ def CentralUncertainty (self):
+ '''
+ Produit le fichier study correspondant a une analyse d incertitude en valeur centrale
+ '''
+ txt = self.Entete()
+ txt += "# Etude 'Central Uncertainty'\n\n"
+ txt += self.PiedDePage()
+ return txt
+
+ def ThresholdExceedence (self):
+ '''
+ Produit le fichier study correspondant a une analyse de depassement de seuil
+ '''
+ txt = self.Entete()
+ txt += "# Etude 'Threshold Exceedence'\n\n"
+ txt += self.PiedDePage()
+ return txt