from .generator_python import PythonGenerator
extensions=('.comm',)
-#if 1:
-try :
- from enumDicoTelemac import TelemacdicoEn
- DicoEnumCasEnInverse={}
- for motClef in TelemacdicoEn():
- d={}
- for valTelemac in TelemacdicoEn[motClef]:
- valEficas= TelemacdicoEn[motClef][valTelemac]
- d[valEficas]=valTelemac
- DicoEnumCasEnInverse[motClef]=d
-except :
- pass
+
def entryPoint():
class TELEMACGenerator(PythonGenerator):
"""
Ce generateur parcourt un objet de type JDC et produit
- un texte au format eficas et
+ un texte au format eficas et
un texte au format dictionnaire
"""
#----------------------------------------------------------------------------------------
- def gener(self,obj,format='brut',config=None,appli=None,statut="Entier"):
-
- self.statut=statut
- self.langue=appli.langue
+ def gener(self,obj,format='brut',config=None,appli=None,statut="Leger"):
+
+ self.statut = statut
+ self.langue = appli.langue
+ try : self.TelemacdicoEn = appli.readercata.TelemacdicoEn
+ except :
+ print ('Attention : pas de TelemacdicoEn declare')
+ self.TelemacdicoEn = {}
+ self.DicoEnumCasEnInverse = {}
+ #from enum_Telemac2d_auto import self.TelemacdicoEn
+ for motClef in self.TelemacdicoEn:
+ d={}
+ for valTelemac in self.TelemacdicoEn[motClef]:
+ valEficas = self.TelemacdicoEn[motClef][valTelemac]
+ d[valEficas] =valTelemac
+ self.DicoEnumCasEnInverse[motClef]=d
+ if self.langue == 'fr' :
+ #from enum_Telemac2d_auto import DicoEnumCasFrToEnumCasEn
+ self.DicoEnumCasFrToEnumCasEn = appli.readercata.DicoEnumCasFrToEnumCasEn
+ for motClef in self.DicoEnumCasFrToEnumCasEn:
+ d={}
+ for valTelemac in self.DicoEnumCasFrToEnumCasEn[motClef]:
+ valEficas = self.DicoEnumCasFrToEnumCasEn[motClef][valTelemac]
+ d[valEficas] = valTelemac
+ self.DicoEnumCasEnInverse[motClef]=d
self.initDico()
# Pour Simplifier les verifs d ecriture
if hasattr(appli,'listeTelemac') : self.listeTelemac=appli.listeTelemac
else : self.listeTelemac = ()
self.dicoCataToCas={}
- self.dicoCasToCata=appli.readercata.dicoCasToCata
+ try :
+ self.dicoCasToCata=appli.readercata.dicoCasToCata
+ except :
+ print ('Attention pas de dicoCasToCata declare')
+ self.dicoCasToCata={}
+ self.dicoCataToCas={}
for motClef in self.dicoCasToCata:
self.dicoCataToCas[self.dicoCasToCata[motClef]]=motClef
#----------------------------------------------------------------------------------------
# initialisations
#----------------------------------------------------------------------------------------
-
+
def initDico(self) :
-
+
self.PE=False
self.FE=False
self.VE=False
+ self.commentaireAvant = False
+ self.texteCom=''
if self.langue == "fr" :
self.textPE = 'COTES IMPOSEES :'
self.textFE = 'DEBITS IMPOSES :'
self.textVE = 'PRESCRIBED VELOCITIES :'
self.nbTracers = 0
self.texteDico = ""
-
+
#----------------------------------------------------------------------------------------
def writeDefault(self,fn) :
- self.texteDico+='\n&ETA\n&FIN\n'
- if self.statut == 'Leger' : extension = ".Lcas"
- else : extension = ".cas"
- fileDico = fn[:fn.rfind(".")] + extension
+ self.texteDico+='&ETA\n'
+ #if self.statut == 'Leger' : extension = ".Lcas"
+ #else : extension = ".cas"
+ extension=".cas"
+ fileDico = fn[:fn.rfind(".")] + extension
f = open( str(fileDico), 'w')
f.write( self.texteDico )
f.close()
# ecriture de Leger
#----------------------------------------------------------------------------------------
- def writeLeger(self,fn,jdc,config,appli) :
- jdc_formate=self.gener(jdc,config=config,appli=appli,statut="Leger")
- self.writeDefault(fn)
+ def writeComplet(self,fn,jdc,config,appli) :
+ jdc_formate=self.gener(jdc,config=config,appli=appli,statut="Entier")
+ self.writeDefault(fn)
#----------------------------------------------------------------------------------------
-# analyse de chaque noeud de l'arbre
+# analyse de chaque noeud de l'arbre
#----------------------------------------------------------------------------------------
def generPROC_ETAPE(self,obj):
- self.texteDico += '/------------------------------------------------------/\n'
- self.texteDico += '/\t\t\t'+obj.nom +'\n'
- self.texteDico += '/------------------------------------------------------/\n'
+ if not self.commentaireAvant or self.texteCom.find(obj.nom) < 0:
+ self.texteDico += '/------------------------------------------------------------------/\n'
+ self.texteDico += '/\t\t\t'+obj.nom +'\n'
+ self.texteDico += '/------------------------------------------------------------------/\n'
+ self.commentaireAvant = False
+ self.texteCom=''
s=PythonGenerator.generPROC_ETAPE(self,obj)
if obj.nom in TELEMACGenerator.__dict__ : TELEMACGenerator.__dict__[obj.nom](*(self,obj))
-
+
return s
def generMCSIMP(self,obj) :
"""recuperation de l objet MCSIMP"""
s=PythonGenerator.generMCSIMP(self,obj)
-
+
# Attention pas sur --> ds certains cas non traite par MCFACT ?
- # a reflechir avec Yoann
+ # a reflechir avec Yoann
# ajouter le statut ?
if self.statut == 'Leger' :
if hasattr(obj.definition,'defaut') and (obj.definition.defaut == obj.valeur) and (obj.nom not in self.listeTelemac) : return s
if hasattr(obj.definition,'defaut') and obj.definition.defaut != None and (type(obj.valeur) == tuple or type(obj.valeur) == list) and (tuple(obj.definition.defaut) == tuple(obj.valeur)) and (obj.nom not in self.listeTelemac) : return s
-
+
#nomMajuscule=obj.nom.upper()
- #nom=nomMajuscule.replace('_',' ')
+ #nom=nomMajuscule.replace('_',' ')
#if nom in listeSupprime or s == "" : return s
- if s == "" : return s
+ if s == "None," : s=None
+ if s == "" or s==None : return s
-
-
sTelemac=s[0:-1]
if not( type(obj.valeur) in (tuple,list) ):
- if obj.nom in DicoEnumCasEnInverse:
- try : sTelemac=str(DicoEnumCasEnInverse[obj.nom][obj.valeur])
- except : print(("generMCSIMP Pb valeur avec ", obj.nom, obj.valeur))
+ if obj.nom in self.DicoEnumCasEnInverse:
+ try : sTelemac=str(self.DicoEnumCasEnInverse[obj.nom][obj.valeur])
+ except :
+ if obj.valeur==None : sTelemac=obj.valeur
+ else : print(("generMCSIMP Pb valeur avec ", obj.nom, obj.valeur))
+ # Si le resultat est du texte on ajoute des guillemets
+ if sTelemac[0] not in '0123456789':
+ sTelemac = "'" + sTelemac +"'"
+
if type(obj.valeur) in (tuple,list) :
- if obj.nom in DicoEnumCasEnInverse:
+ if obj.nom in self.DicoEnumCasEnInverse:
#sT = "'"
sT=''
for v in obj.valeur:
- try : sT +=str(DicoEnumCasEnInverse[obj.nom][v]) +";"
- except : print(("generMCSIMP Pb Tuple avec ", obj.nom, v, obj.valeur))
+ try : sT +=str(self.DicoEnumCasEnInverse[obj.nom][v]) +";"
+ except :
+ if obj.definition.intoSug != [] : sT +=str(v) + ";"
+ else : print(("generMCSIMP Pb Tuple avec ", obj.nom, v, obj.valeur))
#sTelemac=sT[0:-1]+"'"
sTelemac=sT[0:-1]
else :
sTelemac=sTelemac[0:-1]
if sTelemac.find("'") > 0 :
- sTelemac= sTelemac.replace (',',';\n ')
-
+ sTelemac= sTelemac.replace (',',';\n ')
+ # on enleve le dernier ';'
+ index=(sTelemac.rfind(";"))
+ sTelemac=sTelemac[:index]+' '+sTelemac[index+1:]
if self.langue=='fr' :
s1=str(sTelemac).replace('True','OUI')
else :
s1=str(sTelemac).replace('True','YES')
s2=s1.replace('False','NO')
- s3=s2.replace(',',';')
- if s3 != "" and s3[0]=='(' :
+ if hasattr(obj.definition,'max'):
+ if obj.definition.max != 1:
+ s3=s2.replace(',',';')
+ else:
+ s3=s2
+ if s3 != "" and s3[0]=='(' :
try : s3=s3[1:-1] # cas de liste vide
except : s3 = ' '
-
-
+
+
# LIQUID_BOUNDARIES
- if obj.nom in ('PRESCRIBED_FLOWRATES','PRESCRIBED_VELOCITIES','PRESCRIBED_ELEVATIONS') :
- return s
+ #if obj.nom in ('PRESCRIBED_FLOWRATES','PRESCRIBED_VELOCITIES','PRESCRIBED_ELEVATIONS') :
+ # return s
+
+ # cas des Tuples
+ if obj.waitTuple() and s3 != '' and s3 != 'None':
+ s3=s
+ if s3[-1] == ',': s3=s3[:-1]
+
if obj.nom not in self.dicoCataToCas :
if obj.nom == 'Consigne' : return ""
return s
nom=self.dicoCataToCas[obj.nom]
- if nom == "VARIABLES FOR GRAPHIC PRINTOUTS" : s3=s3.replace(';',',')
- if nom == "VARIABLES POUR LES SORTIES GRAPHIQUES" : s3=s3.replace(';',',')
- if s3 == "" or s3 == " " : s3 = "None"
+ if nom in ["VARIABLES FOR GRAPHIC PRINTOUTS", "VARIABLES POUR LES SORTIES GRAPHIQUES",
+ "VARIABLES TO BE PRINTED","VARIABLES A IMPRIMER",
+ "VARIABLES FOR 3D GRAPHIC PRINTOUTS", "VARIABLES POUR LES SORTIES GRAPHIQUES 3D",
+ "VARIABLES POUR LES SORTIES GRAPHIQUES 2D", "VARIABLES FOR 2D GRAPHIC PRINTOUTS",
+ "C_VSM_PRINTOUT_SELECTION"]:
+ if s3 != '' and s3 != 'None':
+ s3=s3.replace(';',',')
+ s3="'"+ s3 +"'"
+ else:
+ s3 = "''"
+ if nom in ["COUPLING WITH", "COUPLAGE AVEC"]:
+ s3 = s3.strip().replace("\n","")\
+ .replace(" ", "")\
+ .replace("\t", "")\
+ .replace("';'", ",")
+ if s3 == "" or s3 == " " : s3 = " "
ligne=nom+ " : " + s3 + "\n"
- if len(ligne) > 72 : ligne=self.redecoupeLigne(nom,s3)
+ if len(ligne) > 72 : ligne=self.redecoupeLigne(nom,s3)
self.texteDico+=ligne
def generMCFACT(self,obj):
"""
"""
s=PythonGenerator.generMCFACT(self,obj)
- if obj.nom in TELEMACGenerator.__dict__ : TELEMACGenerator.__dict__[obj.nom],(self,obj)
-
+ if obj.nom in TELEMACGenerator.__dict__ : TELEMACGenerator.__dict__[obj.nom](self,obj)
+
return s
-
- def LIQUID_BOUNDARIES(self,obj):
- if 'BOUNDARY_TYPE' in obj.liste_mc_presents() :
- objForme=obj.get_child('BOUNDARY_TYPE')
- valForme=objForme.valeur
- if valForme == None : return
-
- nomBloc='b_'+valForme.split(" ")[1]
- if nomBloc in obj.liste_mc_presents() :
- objBloc=obj.get_child(nomBloc)
- objValeur=objBloc.get_child(objBloc.liste_mc_presents()[0])
- valeur=objValeur.valeur
- if valeur== None : valeur="0."
- if valForme == 'Prescribed Elevations' :
- self.PE=True
- self.textPE += str(valeur) +"; "
- else : self.textPE += "0.; "
- if valForme == 'Prescribed Flowrates' :
- self.FE=True
- self.textFE += str(valeur) +"; "
- else : self.textFE += "0.; "
- if valForme == 'Prescribed Velocity' :
- self.VE=True
- self.textVE += str(valeur) +"; "
- else : self.textVE += "0.; "
-
- def BOUNDARY_CONDITIONS(self,obj):
- # sans '; '
- if self.FE : self.texteDico += self.textFE[0:-2]+'\n'
- if self.PE : self.texteDico += self.textPE[0:-2]+'\n'
- if self.VE : self.texteDico += self.textVE[0:-2]+'\n'
def TRACERS(self,obj):
if self.nbTracers != 0 : self.texteDico += 'NUMBER_OF_TRACERS : '+str(self.nbTracers) + '\n'
-
+
def NAME_OF_TRACER(self,obj):
print((dir(obj) ))
- print((obj.get_genealogie_precise()))
+ print((obj.getGenealogiePrecise()))
def Validation(self,obj):
self.texteDico += "VALIDATION : True \n"
-
+
def Date_De_L_Origine_Des_Temps (self,obj):
- an=obj.get_child('Year').valeur
- mois=obj.get_child('Month').valeur
- jour=obj.get_child('Day').valeur
+ an=obj.getChild('Year').valeur
+ mois=obj.getChild('Month').valeur
+ jour=obj.getChild('Day').valeur
self.texteDico += "ORIGINAL DATE OF TIME :"+ str(an)+ " ,"+str(mois)+ "," +str(jour)+ "\n"
def Original_Hour_Of_Time (self,obj):
- hh=obj.get_child('Hour').valeur
- mm=obj.get_child('Minute').valeur
- ss=obj.get_child('Second').valeur
+ hh=obj.getChild('Hour').valeur
+ mm=obj.getChild('Minute').valeur
+ ss=obj.getChild('Second').valeur
self.texteDico += "ORIGINAL HOUR OF TIME :"+str(hh)+" ,"+str(mm)+ ","+str(ss)+"\n"
def Type_Of_Advection(self,obj):
if c.nom[0:18] == 'Type_Of_Advection_' and c.valeur!=None:
suf=c.nom[18:]
index=dicoSuf[suf]
- listeAdvection[index]=DicoEnumCasEnInverse['Type_Of_Advection'][c.valeur]
+ listeAdvection[index]=self.DicoEnumCasEnInverse['Type_Of_Advection'][c.valeur]
if c.nom[0:13] == 'Supg_Option_' and c.valeur!=None:
suf=c.nom[13:]
index=dicoSuf[suf]
- listeAdvection[index]=DicoEnumCasEnInverse['Supg_Option'][c.valeur]
+ listeAdvection[index]=self.DicoEnumCasEnInverse['Supg_Option'][c.valeur]
if c.nom[0:23] == 'Upwind_Coefficients_Of_' and c.valeur!=None:
suf=c.nom[23:]
index=dicoSuf[suf]
self.texteDico += "TYPE OF ADVECTION = "+ str(listeAdvection) + "\n"
self.texteDico += "SUPG OPTION = "+ str(listeSupg) + "\n"
self.texteDico += "UPWIND COEFFICIENTS = "+ str(listeUpwind) + "\n"
-
+
def chercheChildren(self,obj):
- for c in obj.liste_mc_presents():
- objc=obj.get_child(c)
- if hasattr(objc,'liste_mc_presents') and objc.liste_mc_presents() != [] : self.chercheChildren(objc)
+ for c in obj.listeMcPresents():
+ objc=obj.getChild(c)
+ if hasattr(objc,'listeMcPresents') and objc.listeMcPresents() != [] : self.chercheChildren(objc)
else : self.listeMCAdvection.append(objc)
-
-
+
+
def redecoupeLigne(self,nom,valeur) :
text=nom+ " : \n"
valeur=valeur
lval=valeur.split(";")
ligne=" "
for v in lval :
- if len(ligne) < 70 : ligne += str(v)+'; '
+ if len(ligne+ str(v)+'; ') < 70 : ligne += str(v)+'; '
else :
text+= ligne+"\n"
ligne=" "+str(v)+'; '
text+= ligne[0:-2]+'\n'
return text
+
+ def generCOMMENTAIRE(self,obj):
+ sans_saut = re.sub("\n$","",obj.valeur)
+ l_lignes = sans_saut.split('\n')
+ txt='/'+66*'-'+'/'+'\n'
+ i=1
+ for ligne in l_lignes:
+ self.texteCom+=ligne+'\n'
+ txt = txt + '/'+ligne+'\n'
+ txt= txt + '/'+66*'-'+'/'+'\n'
+ self.texteDico += txt
+ self.commentaireAvant= True
+ return PythonGenerator.generCOMMENTAIRE(self,obj)
+
+