]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
generateur Carmel en cours de dev
authorilct <>
Fri, 17 Feb 2012 15:52:03 +0000 (15:52 +0000)
committerilct <>
Fri, 17 Feb 2012 15:52:03 +0000 (15:52 +0000)
generator/generator_CARMEL3D_17fev.py [new file with mode: 0644]

diff --git a/generator/generator_CARMEL3D_17fev.py b/generator/generator_CARMEL3D_17fev.py
new file mode 100644 (file)
index 0000000..11c6f9c
--- /dev/null
@@ -0,0 +1,190 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+"""
+   Ce module contient le plugin generateur de fichier au format 
+   CARMEL3D pour EFICAS.
+
+"""
+import traceback
+import types,string,re,os
+
+from generator_python import PythonGenerator
+
+# dictionnaire contenant :
+#           cle = nom du materiau de reference
+#           valeur = nature du materiau de reference ; correspond a l entete du sous bloc dans le bloc MATERIALS du fichier de parametres Carmel3D
+#
+dictNatureMaterRef={"MAT_REF_COND1":"CONDUCTOR", 
+                    "MAT_REF_DIEL1":"DIELECTRIC"}
+print "generateur carmel "
+print "generateur carmel "
+
+def entryPoint():
+   """
+      Retourne les informations necessaires pour le chargeur de plugins
+
+      Ces informations sont retournees dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'CARMEL3D',
+        # La factory pour creer une instance du plugin
+          'factory' : CARMEL3DGenerator,
+          }
+
+
+class CARMEL3DGenerator(PythonGenerator):
+   """
+      Ce generateur parcourt un objet de type JDC et produit
+      un texte au format eficas et 
+      un texte au format attendu par le code Carmel3D 
+
+   """
+   # Les extensions de fichier permis?
+   extensions=('.comm',)
+
+   def gener(self,obj,format='brut',config=None):
+       
+      self.initDico()
+      
+      # Cette instruction génère le contenu du fichier de commandes (persistance)
+      self.text=PythonGenerator.gener(self,obj,format)
+
+      # Cette instruction génère le contenu du fichier de pametres pour le code Carmel3D
+      self.genereCARMEL3D()
+      
+      print "texte carmel3d :\n",self.texteCarmel3D
+      print "dictName : ",self.dictName
+      print "dictMaterConductor : ",self.dictMaterConductor
+      print "text = ", self.text
+      
+      return self.text
+
+
+   def genereCARMEL3D(self) :
+      '''
+      Prépare le contenu du fichier de parmetres pour le code Carmel3D
+      '''
+      print "cle dico materconductor : " , self.dictMaterConductor.keys()
+    
+      self.texteCarmel3D+="[MATERIALS\n"
+      self.texteCarmel3D+="     [CONDUCTOR\n"
+    
+      for cle in self.dictMaterConductor.keys():
+          if cle not in self.dictName.keys():
+              print "Attention : groupe de maille non defini pour materiau : ",cle
+              print "fichier phys incomplet "
+          else : 
+              for chaine in self.dictMaterConductor[cle] :
+                   self.texteCarmel3D+=str(self.dictName[cle])
+                   self.texteCarmel3D+=chaine
+     
+     
+      self.texteCarmel3D+="     ]\n"
+      self.texteCarmel3D+="]\n"
+
+
+   def initDico(self) :
+      self.texteCarmel3D=""
+      self.dictName={}
+      self.dictMaterConductor={}
+
+  
+   def generPROC_ETAPE(self,obj):
+      # analyse des PROC du catalogue
+      # ( SOURCES et VERSION )   
+      #   
+      print "PROC_ETAPE", obj.nom, "  ", obj.valeur
+      if obj.nom=="SOURCES" : self.generSOURCES(obj)
+      s=PythonGenerator.generPROC_ETAPE(self,obj)
+      return s
+  
+   def generETAPE(self,obj):
+      # analyse des OPER du catalogue
+
+      print "ETAPE", obj.nom, "  ", obj.valeur
+  #   print "DIR = ", dir(obj)
+
+      if obj.nom=="MESH_GROUPE" : self.generMESHGROUPE(obj)
+      if obj.nom=="MATERIALS" : self.generMATERIALS(obj)
+
+      s=PythonGenerator.generETAPE(self,obj)
+      return s
+
+   def generSOURCES(self,obj):
+      # preparation du bloc SOURCES 
+
+      self.texteCarmel3D+="["+obj.nom+"\n"
+      for keyN1 in obj.valeur :
+          self.texteCarmel3D+="   ["+keyN1+"\n"
+         for keyN2 in obj.valeur[keyN1]:
+             self.texteCarmel3D+="      "+keyN2+" "+str(obj.valeur[keyN1][keyN2])+"\n"
+         self.texteCarmel3D+="   ]"+"\n"
+      self.texteCarmel3D+="]"+"\n"
+
+   def generMESHGROUPE(self,obj):
+      # preparation de la ligne NAME referencant le groupe de mailles 
+      # associe le groupe de mailles au materiau utilisateur
+       texteName="       NAME     "+obj.get_sdname()+"\n"
+       self.dictName[obj.valeur['MON_MATER'].nom]=texteName
+
+   def generMATERIALS(self,obj):
+      # preparation du bloc MATERIALS 
+          texte=""
+          print "gener materials obj valeur = ", obj.valeur
+         try :
+              nature=dictNatureMaterRef[obj.valeur['MAT_REF']]
+             if nature=="CONDUCTOR" : self.generMATERIALSCONDUCTOR(obj)
+#            if nature=="DIELECTRIC" : self.generMATERIALSDIELECTRIC(obj)
+         except:
+             pass
+
+
+   def generMATERIALSCONDUCTOR(self,obj):
+      # preparation du sous bloc CONDUCTOR
+       texte=""
+       print "___________________________"
+       for keyN1 in obj.valeur :
+          if keyN1=='MAT_REF': continue
+           print "keyN1=", keyN1
+          print obj.valeur[keyN1]['TYPE_LAW']
+          texte+="         ["+keyN1+"\n"
+          if obj.valeur[keyN1]['TYPE_LAW']=='LINEAR_REAL' :
+             texte+="            LAW LINEAR\n"
+             texte+="            HOMOGENOUS TRUE\n"
+             texte+="            ISOTROPIC TRUE\n"
+             texte+="            VALUE COMPLEX "+str(obj.valeur[keyN1]["VALUE_REAL"])+" 0\n"
+          if obj.valeur[keyN1]['TYPE_LAW']=='LINEAR_COMPLEX' :
+                texte+="            LAW LINEAR\n"
+                texte+="            HOMOGENOUS TRUE\n"
+                texte+="            ISOTROPIC TRUE\n"
+                texte+="            VALUE COMPLEX "+str(obj.valeur[keyN1]["VALUE_COMPLEX"][1])+" "+str(obj.valeur[keyN1]["VALUE_COMPLEX"][2])+"\n"
+                 
+          texte+="         ]"+"\n"
+
+       print "obj get sdname= ", obj.get_sdname()
+       if obj.get_sdname() in self.dictMaterConductor.keys() :
+         self.dictMaterConductor[obj.get_sdname()].append(texte) 
+       else :
+         self.dictMaterConductor[obj.get_sdname()]=[texte,]
+       print texte
+   
+