]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
*** empty log message ***
authorPascale Noyret <pascale.noyret@edf.fr>
Thu, 27 Nov 2008 14:12:26 +0000 (14:12 +0000)
committerPascale Noyret <pascale.noyret@edf.fr>
Thu, 27 Nov 2008 14:12:26 +0000 (14:12 +0000)
generator/OpenturnsBase.py
generator/OpenturnsSTD.py
generator/OpenturnsXML.py
generator/generator_openturns_study.py
generator/generator_openturns_wrapper.py

index 316a34ebe6c080a3eface529d1c0318261c3d8c0..da8da81f312b6c6b5cf97788a6c17b689f145a1c 100644 (file)
@@ -30,7 +30,7 @@ class Generateur :
   ListeVariables : chaque variable est decrite par un dictionnaire ; cette liste les regroupe
   DictLois : dictionnaires des lois
   '''
-  def __init__ (self, DictMCVal, ListeVariables, DictLois ) :
+  def __init__ (self, appli, DictMCVal, ListeVariables, DictLois ) :
   #---------------------------------------------------------#
     self.ListeVariables = ListeVariables
     self.ListeVariablesIn = []
@@ -39,6 +39,7 @@ class Generateur :
     self.DictTypeVar = {}
     self.nbVarIn = 0
     self.creeInfoVar()
+    self.appli = appli
     #
     # On charge eventuellement le Solver par defaut
     # et les valeurs par defaut du Solver (dans l init)
@@ -61,7 +62,7 @@ class Generateur :
        monSTDGenerateur=gener( self.DictMCVal, self.ListeVariablesIn, self.DictLois )
     except :
         from OpenturnsSTD import STDGenerateur
-        monSTDGenerateur = STDGenerateur( self.DictMCVal, self.ListeVariablesIn, self.DictLois )
+        monSTDGenerateur = STDGenerateur( self.appli, self.DictMCVal, self.ListeVariablesIn, self.DictLois )
     return monSTDGenerateur
       
   def getXMLGenerateur(self) :
@@ -71,7 +72,7 @@ class Generateur :
        monXMLGenerateur=gener( self.DictMCVal, self.ListeVariables, self.DictLois )
     except :
         from OpenturnsXML import XMLGenerateur
-        monXMLGenerateur = XMLGenerateur( self.DictMCVal, self.ListeVariables, self.DictLois )
+        monXMLGenerateur = XMLGenerateur( self.appli, self.DictMCVal, self.ListeVariables, self.DictLois )
     return monXMLGenerateur
       
   def creeInfoVar (self) :
index bbe2873d8e0ccd5b90598442563afe3a30a96a17..3501a91acea4f1a2fdb350111b625fdf6fe50b88 100644 (file)
@@ -10,7 +10,33 @@ __revision__ = "V1.0"
 
 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
@@ -21,18 +47,257 @@ class STDGenerateur :
   '''
   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
 
   
index 74903cac3a2f2061c630626f0920c494c7912d5d..0c12acb3c0202c8522ad9483d71b048b38272afa 100644 (file)
@@ -60,10 +60,11 @@ class XMLGenerateur :
   '''
   Generation du fichier XML
   '''
-  def __init__ (self, DictMCVal, ListeVariables, DictLois ) :
+  def __init__ (self, appli, DictMCVal, ListeVariables, DictLois ) :
     self.DictMCVal = DictMCVal
     self.ListeVariables = ListeVariables
     self.DictLois = DictLois
+    self.appli = appli
 
   def CreeXML (self) :
     '''
index be56baf9bc368a50aec697365e7015647dd44148..7aad619d97e70298b55e77088bc56e137c2ce3e6 100644 (file)
@@ -115,7 +115,7 @@ class OpenturnsGenerator(PythonGenerator):
 
    def genereSTD(self):
       print "IDM: genereSTD dans generator_openturns_study.py"
-      MonBaseGenerateur=Generateur(self.dictMCVal, self.listeVariables, self.dictMCLois)
+      MonBaseGenerateur=Generateur(self.appli,self.dictMCVal, self.listeVariables, self.dictMCLois)
       MonGenerateur=MonBaseGenerateur.getSTDGenerateur()
       #try :
       if 1== 1 :
index 6db1693276ef9932ca5e73cbaba9197816630511..4caa19a49b02434b60d41b6812543338c864159d 100644 (file)
@@ -109,7 +109,7 @@ class OpenturnsGenerator(PythonGenerator):
        #print "appli.CONFIGURATION=",self.appli.CONFIGURATION.__dict__
        if self.listeFichiers != [] :
           self.dictMCVal["Files"]=self.listeFichiers
-       MonBaseGenerateur=Generateur(self.dictMCVal, self.listeVariables, self.dictMCLois)
+       MonBaseGenerateur=Generateur(self.appli,self.dictMCVal, self.listeVariables, self.dictMCLois)
        MonGenerateur=MonBaseGenerateur.getXMLGenerateur()
        #try :
        if 1== 1 :