]> SALOME platform Git repositories - tools/eficas.git/blob - generator/generator_homard.py
Salome HOME
7e0770d6dd9ca2dc6c9927f063d3c88a87cf27d8
[tools/eficas.git] / generator / generator_homard.py
1 #            CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
8 #
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
13 #
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
17 #
18 #
19 # ======================================================================
20 """
21     Ce module contient le plugin generateur de fichier au format 
22     homard pour EFICAS.
23
24 """
25 import traceback
26 import types,string,re
27
28 from Noyau import N_CR
29 from Noyau.N_utils import repr_float
30 from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE
31 from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL
32 from Accas import GEOM,ASSD,MCNUPLET
33 from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM
34 from Formatage import Formatage
35 from generator_python import PythonGenerator
36
37 def entryPoint():
38    """
39        Retourne les informations nécessaires pour le chargeur de plugins
40
41        Ces informations sont retournées dans un dictionnaire
42    """
43    return {
44         # Le nom du plugin
45           'name' : 'homard',
46         # La factory pour créer une instance du plugin
47           'factory' : HomardGenerator,
48           }
49
50
51 class HomardGenerator(PythonGenerator):
52    """
53        Ce generateur parcourt un objet de type JDC et produit
54        un texte au format eficas et 
55        un texte au format homard 
56
57    """
58    # Les extensions de fichier préconisées
59    extensions=('.comm',)
60
61    def __init__(self,cr=None):
62       # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
63       if cr :
64          self.cr=cr
65       else:
66          self.cr=N_CR.CR(debut='CR generateur format homard pour homard',
67                          fin='fin CR format homard pour homard')
68       # Le texte au format homard est stocké dans l'attribut text
69       self.dico_mot_clef={}
70       self.assoc={}
71       self.lmots_clef_calcules = ('SuivFron','TypeBila','ModeHOMA','CCAssoci', 'CCNoChaI','HOMaiN__','HOMaiNP1')
72       self.lmots_genea = ('NOM_MED_MAILLAGE_N','NOM_MED_MAILLAGE_NP1')
73 #,'COMPOSANTE','NUME_ORDRE','INST','PRECISION','CRITERE')
74       self.init_assoc()
75       self.text=''
76       self.textehomard=[]
77
78    def init_assoc(self):
79       self.lmot_clef  = ('CCMaiN__', 'CCNoMN__', 'CCIndica', 'CCSolN__', 'CCFronti', 'CCNoMFro', 'CCMaiNP1', 
80                          'CCNoMNP1', 'CCSolNP1', 'TypeRaff', 'TypeDera', 'NiveauMa', 'SeuilHau', 'SeuilHRe', 
81                          'SeuilHPE', 'NiveauMi', 'SeuilBas', 'SeuilBRe', 'SeuilBPE', 'ListeStd', 'NumeIter', 
82                          'Langue  ', 'CCGroFro', 'CCNoChaI', 'CCNumOrI', 'CCNumPTI', 'SuivFron', 'TypeBila', 
83                          'ModeHOMA', 'HOMaiN__', 'HOMaiNP1')
84
85 # Bizarre demander a Gerald : 
86 #               CVSolNP1
87       self.assoc['CCMaiN__']='FICHIERS:NOM_MED_MAILLAGE_N'
88       self.assoc['CCNoMN__']='TRAITEMENT:NOM_MED_MAILLAGE_N'
89       self.assoc['CCIndica']='FICHIERS:NOM_MED_MAILLAGE_N'
90       self.assoc['CCSolN__']='FICHIERS:NOM_MED_MAILLAGE_N'
91       self.assoc['CCFronti']='FIC_FRON'
92       self.assoc['CCNoMFro']='NOM_MED_MAILLAGE_FRONTIERE'
93       self.assoc['CCMaiNP1']='FICHIERS:NOM_MED_MAILLAGE_NP1'
94       self.assoc['CCNoMNP1']='TRAITEMENT:NOM_MED_MAILLAGE_NP1'
95       self.assoc['CCSolNP1']='FICHIERS:NOM_MED_MAILLAGE_NP1'
96       self.assoc['TypeRaff']='RAFFINEMENT'
97       self.assoc['TypeDera']='DERAFFINEMENT'
98       self.assoc['NiveauMa']='NIVE_MAX'
99       self.assoc['SeuilHau']='CRIT_RAFF_ABS'
100       self.assoc['SeuilHRe']='CRIT_RAFF_REL'
101       self.assoc['SeuilHPE']='CRIT_RAFF_PE'
102       self.assoc['NiveauMi']='NIVE_MIN'
103       self.assoc['SeuilBas']='CRIT_DERA_ABS'
104       self.assoc['SeuilBRe']='CRIT_DERA_REL'
105       self.assoc['SeuilBPE']='CRIT_DERA_PE'
106       self.assoc['ListeStd']='INFORMATION'
107       self.assoc['NumeIter']='NITER'
108       self.assoc['Langue  ']='LANGUE'
109       self.assoc['CCGroFro']='GROUP_MA'
110 #     self.assoc['CCNoChaI']='NOM_MED' (on doit aussi ajouter 'COMPOSANTE')
111       self.assoc['CCNumOrI']='NUME_ORDRE'
112       self.assoc['CCNumPTI']='NUME_ORDRE'
113
114
115    def gener(self,obj,format='brut'):
116       self.text=PythonGenerator.gener(self,obj,format)
117       self.genereConfiguration()
118       return self.text
119
120    def generMCSIMP(self,obj) :
121       """
122           Convertit un objet MCSIMP en une liste de chaines de caractères à la
123           syntaxe homard
124       """
125       s=PythonGenerator.generMCSIMP(self,obj)
126       if obj.nom in self.lmots_genea:
127          genea = obj.get_genealogie()
128          clef=genea[1]+":"+genea[-1]
129       else :
130          clef=obj.nom
131       self.dico_mot_clef[clef]=obj.val
132       return s
133
134    def genereConfiguration(self):
135       ligbla=31*' '
136       self.textehomard=[]
137       for mot in self.lmot_clef:
138           if mot not in self.lmots_clef_calcules :
139              clef_eficas=self.assoc[mot]
140              if self.dico_mot_clef.has_key(clef_eficas):
141                 val=self.dico_mot_clef[clef_eficas]
142                 if val != None:
143                    try :
144                     ligne=mot+' '+val
145                    except:
146                     ligne=mot+' '+repr(val)
147                    ligne.rjust(32)
148                    self.textehomard.append(ligne)
149           else:
150              val=apply(HomardGenerator.__dict__[mot],(self,))
151              if val != None:
152                 mot.rjust(8)
153                 ligne=mot+' '+val
154                 ligne.rjust(32)
155                 self.textehomard.append(ligne)
156
157    def get_homard(self):
158        return self.textehomard
159
160    def SuivFron(self):
161         val="non"
162         if self.dico_mot_clef.has_key('NOM_MED_MAILLAGE_FRONTIERE'):
163            if self.dico_mot_clef['NOM_MED_MAILLAGE_FRONTIERE'] != None:
164                 val="oui"
165         return val
166
167    def TypeBila(self):
168         inttypeBilan = 1
169         retour=None
170         dict_val={'NOMBRE':7,'INTERPENETRATION':3,'QUALITE':5,'CONNEXITE':11,'TAILLE':13}
171         for mot in ('NOMBRE','QUALITE','INTERPENETRATION','CONNEXITE','TAILLE'):
172             if self.dico_mot_clef.has_key(mot):
173                if (self.dico_mot_clef[mot] == "OUI"):
174                   inttypeBilan=inttypeBilan*dict_val[mot]
175                   retour = repr(inttypeBilan)
176         return retour
177
178
179    def ModeHOMA(self):
180         intModeHOMA=1
181         if self.dico_mot_clef.has_key('INFORMATION'):
182            if self.dico_mot_clef['INFORMATION'] == "OUI":
183               intModeHOMA=2
184         return repr(intModeHOMA)
185            
186    def CCAssoci(self):
187         return 'MED' 
188
189    def CCNoChaI(self):
190         if not (self.dico_mot_clef.has_key('NOM_MED')):
191            return None
192         if (self.dico_mot_clef['NOM_MED']== None):
193            return None
194         if not (self.dico_mot_clef.has_key('COMPOSANTE')):
195            return None
196         if (self.dico_mot_clef['COMPOSANTE']== None):
197            return None
198         chaine=self.dico_mot_clef['NOM_MED']+' '+self.dico_mot_clef['COMPOSANTE']
199         return chaine
200
201    def HOMaiN__(self):
202        chaine=None
203        if self.dico_mot_clef.has_key('NITER'):
204           if self.dico_mot_clef['NITER'] != None :
205              num="M"+repr(self.dico_mot_clef['NITER'])
206              chaine=num+" "+num+".hom"
207        return chaine
208
209    def HOMaiNP1(self):
210        chaine=None
211        if self.dico_mot_clef.has_key('NITER'):
212           if self.dico_mot_clef['NITER'] != None :
213              num="M"+repr(self.dico_mot_clef['NITER']+1)
214              chaine=num+" "+num+".hom"
215        return chaine
216