From 8eece1c8d57079d5034ac26184ec9fdad2ae76ff Mon Sep 17 00:00:00 2001 From: "pascale.noyret" Date: Tue, 3 Nov 2015 16:21:45 +0100 Subject: [PATCH] pour traduction des mots-clefs --- InterfaceQT4/browser.py | 7 +- InterfaceQT4/feuille.py | 3 + InterfaceQT4/monChoixCommande.py | 13 +- InterfaceQT4/monWidgetOptionnel.py | 11 +- InterfaceQT4/monWidgetRadioButton.py | 2 +- InterfaceQT4/qtEficas.py | 31 ++- generator/generator_CARMEL3D_frequentiel.py | 256 +++++++++++++++----- generator/generator_CARMEL3D_temporel.py | 143 +++++------ generator/generator_PSEN.py | 2 +- 9 files changed, 302 insertions(+), 166 deletions(-) diff --git a/InterfaceQT4/browser.py b/InterfaceQT4/browser.py index 0f1b30b5..7b49f301 100644 --- a/InterfaceQT4/browser.py +++ b/InterfaceQT4/browser.py @@ -130,10 +130,12 @@ class JDCTree( QTreeWidget,GereRegles ): item.setExpanded(True) return item.deplieToutEtReaffiche() + self.inhibeExpand == False def handleOnItem(self,item,int): #print "je passe dans handleOnItem pour ",self, item.item.nom, item, item.item + self.inhibeExpand == True self.itemCourrant=item itemParent=item @@ -722,6 +724,8 @@ class JDCNode(QTreeWidgetItem,GereRegles): def plieToutEtReafficheSaufItem(self, itemADeplier): #print "je suis dans plieToutEtReaffiche", self.item.get_nom() + from InterfaceQT4 import compojdc + if (isinstance(self, compojdc.Node)) : self.affichePanneau(); return self.editor.deplier = False for item in self.children : # il ne faut pas plier les blocs @@ -729,13 +733,14 @@ class JDCNode(QTreeWidgetItem,GereRegles): if (isinstance(item,compobloc.Node)) : continue item.setPlie() if item==itemADeplier : - print itemADeplier.item.nom itemADeplier.setDeplie() self.affichePanneau() def plieToutEtReaffiche(self): #print "je suis dans plieToutEtReaffiche", self.item.get_nom() + from InterfaceQT4 import compojdc + if (isinstance(self, compojdc.Node)) : self.affichePanneau(); return self.editor.deplier = False for item in self.children : # il ne faut pas plier les blocs diff --git a/InterfaceQT4/feuille.py b/InterfaceQT4/feuille.py index c910e327..780ca95e 100644 --- a/InterfaceQT4/feuille.py +++ b/InterfaceQT4/feuille.py @@ -181,6 +181,9 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel): else : if hasattr(self, 'AAfficher'): self.AAfficher.setFocus(7) + def rendVisible(self): + #print "jjjjjjjjjjjjjjjjjjjjj" + pass def traiteClicSurLabel(self,texte): #print self.aide diff --git a/InterfaceQT4/monChoixCommande.py b/InterfaceQT4/monChoixCommande.py index 59cb201e..3fdab859 100644 --- a/InterfaceQT4/monChoixCommande.py +++ b/InterfaceQT4/monChoixCommande.py @@ -36,7 +36,12 @@ class MonChoixCommande(Ui_ChoixCommandes,QtGui.QWidget): def __init__(self,node, jdc_item, editor): QtGui.QWidget.__init__(self,None) self.setupUi(self) - #self.labelIcone.setText(''); + + self.repIcon=os.path.join( os.path.dirname(os.path.abspath(__file__)),'..','Editeur','icons') + iconeFile=os.path.join(self.repIcon,'lettreRblanc30.png') + icon = QIcon(iconeFile) + self.RBRegle.setIcon(icon) + self.RBRegle.setIconSize(QtCore.QSize(21, 31)) self.item = jdc_item self.node = node @@ -44,6 +49,7 @@ class MonChoixCommande(Ui_ChoixCommandes,QtGui.QWidget): self.jdc = self.item.object.get_jdc_root() debutTitre=self.editor.titre self.listeWidget=[] + self.dicoCmd={} if self.editor.fichier != None : nouveauTitre=debutTitre+" "+str(os.path.basename(self.editor.fichier)) else : @@ -165,6 +171,7 @@ class MonChoixCommande(Ui_ChoixCommandes,QtGui.QWidget): if self.affiche_alpha==1 : liste=self.creeListeCommande(filtre) for cmd in liste : + self.dicoCmd[tr(cmd)]=cmd rbcmd=(QRadioButton(tr(cmd))) self.buttonGroup.addButton(rbcmd) self.commandesLayout.addWidget(rbcmd) @@ -186,6 +193,7 @@ class MonChoixCommande(Ui_ChoixCommandes,QtGui.QWidget): if aAjouter == 1 : self.commandesLayout.addWidget(label) aAjouter=0 + self.dicoCmd[tr(cmd)]=cmd rbcmd=(QRadioButton(tr(cmd))) self.buttonGroup.addButton(rbcmd) self.commandesLayout.addWidget(rbcmd) @@ -204,6 +212,7 @@ class MonChoixCommande(Ui_ChoixCommandes,QtGui.QWidget): if cmd in listeFiltre : liste.append(cmd) for cmd in liste : + self.dicoCmd[tr(cmd)]=cmd rbcmd=(QRadioButton(tr(cmd))) self.buttonGroup.addButton(rbcmd) self.commandesLayout.addWidget(rbcmd) @@ -217,7 +226,7 @@ class MonChoixCommande(Ui_ChoixCommandes,QtGui.QWidget): self.ajouteRadioButtons() def rbClique(self,id): - self.name=str(id.text().toLatin1()) + self.name=self.dicoCmd[str(id.text().toLatin1())] definitionEtape=getattr(self.jdc.cata[0],self.name) commentaire=getattr(definitionEtape,self.jdc.lang) try : diff --git a/InterfaceQT4/monWidgetOptionnel.py b/InterfaceQT4/monWidgetOptionnel.py index 93a81041..2bcef99c 100644 --- a/InterfaceQT4/monWidgetOptionnel.py +++ b/InterfaceQT4/monWidgetOptionnel.py @@ -30,11 +30,12 @@ from desWidgetOptionnel import Ui_WidgetOptionnel class monButtonCustom(QCheckBox): def __init__(self,texte,monOptionnel,parent=None): - QCheckBox.__init__(self,texte,parent) + QCheckBox.__init__(self,QString(tr(texte)),parent) + self.texte=texte self.monOptionnel=monOptionnel def mouseDoubleClickEvent(self, event): - #print "dans mouseDoubleClickEvent" + #print "dans mouseDoubleClickEvent", self if self not in self.monOptionnel.dicoCb.keys() : event.accept() return @@ -90,13 +91,14 @@ class MonWidgetOptionnel (QWidget,Ui_WidgetOptionnel): self.GeneaLabel.setText(tr("Options pour \n") +texte) for cb in self.dicoCb.keys(): - #print 'je detruit', self.dicoCb[cb], cb + #print 'je detruis', self.dicoCb[cb], cb #print cb.close() cb.close() + self.dicoCb={} liste.reverse() for mot in liste : - cb = monButtonCustom(QString(mot),self) + cb = monButtonCustom(mot,self) #print "j ajoute ", mot, cb self.dicoCb[cb]=mot self.commandesOptionnellesLayout.insertWidget(0,cb) @@ -104,7 +106,6 @@ class MonWidgetOptionnel (QWidget,Ui_WidgetOptionnel): def CBChecked(self): # ordre ? - #print "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk" return for cb in self.dicoCb.keys() : if cb.isChecked() and self.dicoCb[cb] not in self.listeChecked : self.listeChecked.append(self.dicoCb[cb]) diff --git a/InterfaceQT4/monWidgetRadioButton.py b/InterfaceQT4/monWidgetRadioButton.py index cff2bbc2..fa5b7c6c 100644 --- a/InterfaceQT4/monWidgetRadioButton.py +++ b/InterfaceQT4/monWidgetRadioButton.py @@ -65,7 +65,7 @@ class MonWidgetRadioButtonCommun (Feuille): bouton=getattr(self,nomBouton) valeur=self.maListeDeValeur[i-1] if not(type(valeur) in types.StringTypes) : valeur=str(valeur) - bouton.setText(valeur) + bouton.setText(tr(valeur)) self.dict_bouton[valeur]=bouton self.connect(bouton,SIGNAL("clicked()"),self.boutonclic) bouton.keyPressEvent=self.keyPressEvent diff --git a/InterfaceQT4/qtEficas.py b/InterfaceQT4/qtEficas.py index e38f1e61..99c60c4c 100644 --- a/InterfaceQT4/qtEficas.py +++ b/InterfaceQT4/qtEficas.py @@ -42,11 +42,6 @@ class Appli(Ui_Eficas,QMainWindow): """ QMainWindow.__init__(self,parent) Ui_Eficas.__init__(self) - self.setupUi(self) - self.myQtab.removeTab(0) - self.blEntete= QBoxLayout(0,self.frameEntete) - self.blEntete.insertWidget(0,self.toolBar) - self.blEntete.insertWidget(0,self.menubar) version=getEficasVersion() @@ -70,14 +65,27 @@ class Appli(Ui_Eficas,QMainWindow): import eficasSalome Accas.SalomeEntry = eficasSalome.SalomeEntry - #self.ajoutIcones() self.multi=multi - if langue=='fr': self.langue=langue - else : self.langue="ang" if self.multi == False : self.definitCode(code,ssCode) if code==None: return + if not self.salome and hasattr(self.CONFIGURATION,'lang') : langue=self.CONFIGURATION.lang + if langue=='fr': self.langue=langue + else : self.langue="ang" + + from Extensions import localisation + app=QApplication + localisation.localise(app,langue) + + self.setupUi(self) + + self.myQtab.removeTab(0) + self.blEntete= QBoxLayout(0,self.frameEntete) + self.blEntete.insertWidget(0,self.toolBar) + self.blEntete.insertWidget(0,self.menubar) + + eficas_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) self.viewmanager = MyTabview(self) @@ -91,7 +99,6 @@ class Appli(Ui_Eficas,QMainWindow): self.toolBar.addSeparator() if self.code != None : self.construitMenu() - self.setWindowTitle(self.VERSION_EFICAS) self.ouvreFichiers() @@ -247,7 +254,7 @@ class Appli(Ui_Eficas,QMainWindow): def CARMEL3D(self): #if self.salome == 0 : return self.enleverNewInclude() - self.menuMesh = self.menubar.addMenu("menuMesh") + self.menuMesh = self.menubar.addMenu(tr("Gestion Maillage")) self.menuMesh.setObjectName("Mesh") self.menuMesh.addAction(self.actionChercheGrpMaille) self.griserActionsStructures() @@ -381,12 +388,12 @@ class Appli(Ui_Eficas,QMainWindow): # Pour Carmel self.actionChercheGrpMaille = QAction(self) - self.actionChercheGrpMaille.setText(tr("Acquiert Groupe Maille")) + self.actionChercheGrpMaille.setText(tr("Acquiert groupe mailles")) self.connect(self.actionChercheGrpMaille,SIGNAL("triggered()"),self.ChercheGrpMaille) # Pour CarmelCND self.actionChercheGrp = QAction(self) - self.actionChercheGrp.setText(tr("Accquisition Groupe Maille")) + self.actionChercheGrp.setText(tr("Acquisition Groupe Maille")) self.connect(self.actionChercheGrp,SIGNAL("triggered()"),self.ChercheGrp) # Pour Aide diff --git a/generator/generator_CARMEL3D_frequentiel.py b/generator/generator_CARMEL3D_frequentiel.py index 0b6f2907..5fa1e061 100755 --- a/generator/generator_CARMEL3D_frequentiel.py +++ b/generator/generator_CARMEL3D_frequentiel.py @@ -149,6 +149,11 @@ class CARMEL3DFV0Generator(PythonGenerator): self.dictStrand={} self.dictDomaine={} self.dictPort={} + self.cutlineValeur=[] + self.cutplaneValeur=[] + self.visu3dValeur=[] + self.fieldmapValeur=[] + self.fielddumpValeur=[] self.repertory="" self.frequency="" self.domaine="" @@ -303,38 +308,65 @@ class CARMEL3DFV0Generator(PythonGenerator): if self.debug: print "MCSIMP %(v_1)s %(v_2)s" % {'v_1': obj.nom, "v_2": obj.valeur} s=PythonGenerator.generMCSIMP(self,obj) - self.dicoCourant[obj.nom]=obj.valeurFormatee + try: + self.dicoCourant[obj.nom]=obj.valeurFormatee + except: + print "Oubli des messages texte homo='information'" return s #---------------------------------------------------------------------------------------- def generMCFACT(self,obj) : """recuperation de l objet MCFACT""" + if self.debug: + print "MCFACT debut %(v_1)s %(v_2)s" % {'v_1': unicode(obj.nom), "v_2": unicode(obj.valeur)} dico={} self.dicoMCFACTCourant=dico self.dicoCourant=self.dicoMCFACTCourant s=PythonGenerator.generMCFACT(self,obj) - self.dicoEtapeCourant[obj.nom]=self.dicoMCFACTCourant + # sauvegarde, dans self.dicoEtapeCourant, de la valeur du FACT courant, pour utilisation ultérieure dans generETAPE et generPROC_ETAPE + # Traitement des FACT CUTLINE et CUTPLANE multiples (max='**' dans le catalogue) + # Ce traitement spécial est nécessaire pour le moment car le générateur bogue sinon au niveau des matériaux (non-linéaires ?) + if obj.nom in ('FIELDDUMP','CUTLINE', 'CUTPLANE', 'FIELDMAP', 'VISU3D' ): + # Remplissage se self.dicoEtapeCourant pour le nom du FACT courant + # Il ne contient qu'une seule valeur (un dictionnaire) par défaut lorsque le FACT est unique (max=1 dans le catalogue), + # mais il peut aussi contenir plusieurs valeurs (tableau) dans le cas contraire, e.g., max='**' dans le catalogue + if self.dicoEtapeCourant.has_key(obj.nom): # plusieurs valeurs + print "self.dicoEtapeCourant= %s"%self.dicoEtapeCourant + if type(self.dicoEtapeCourant[obj.nom]) == types.DictType: # une seule valeur entrée jusqu'à présent + dicoMCFACTprecedent = self.dicoEtapeCourant[obj.nom] # sauvegarde de la valeur précédente + print "dicoMCFACTpreceden= %s self.dicoEtapeCourant= %s"%(dicoMCFACTprecedent,self.dicoEtapeCourant) + self.dicoEtapeCourant[obj.nom] = [ dicoMCFACTprecedent, self.dicoMCFACTCourant ] # restructuration en liste et insertion de la valeur précédente et de la valeur courant + print "self.dicoEtapeCourant[obj.nom]= %s"%self.dicoEtapeCourant[obj.nom] + else: # plusieurs valeurs entrées jusqu'à présent, sous la forme d'une liste de dictionnaires + self.dicoEtapeCourant[obj.nom].append(self.dicoMCFACTCourant) # extension de la liste avec cette valeur, placée en dernier + else: # une seule valeur ou première valeur + self.dicoEtapeCourant[obj.nom]=self.dicoMCFACTCourant + else: # traitement usuel des FACT uniques, pour ignorer le bogue décrit plus haut + self.dicoEtapeCourant[obj.nom]=self.dicoMCFACTCourant self.dicoMCFACTCourant=None self.dicoCourant=self.dicoEtapeCourant + if self.debug: + print "MCFACT fin %(v_1)s %(v_2)s" % {'v_1': unicode(obj.nom), "v_2": unicode(obj.valeur)} return s #---------------------------------------------------------------------------------------- def generPROC_ETAPE(self,obj): """analyse des PROC du catalogue ( VERSION )""" + if self.debug: + print "PROC_ETAPE initial: %(v_1)s %(v_2)s" % {'v_1': unicode(obj.nom), "v_2": unicode(obj.valeur)} dico={} self.dicoEtapeCourant=dico self.dicoCourant=self.dicoEtapeCourant s=PythonGenerator.generPROC_ETAPE(self,obj) - obj.valeur=self.dicoEtapeCourant - + obj.valeur=self.dicoEtapeCourant # on passe à obj la bonne structure générée par PythonGenerator.generPROC_ETAPE, pour le traitement de chaque partie ci-dessous if self.debug: - print "PROC_ETAPE %(v_1)s %(v_2)s" % {'v_1': unicode(obj.nom), "v_2": unicode(obj.valeur)} - s=PythonGenerator.generPROC_ETAPE(self,obj) + print "PROC_ETAPE mis a jour: %(v_1)s %(v_2)s" % {'v_1': unicode(obj.nom), "v_2": unicode(obj.valeur)} if obj.nom=="PARAMETERS" : self.generBLOC_PARAMETERS(obj) if obj.nom=="SOLVEUR" : self.generSOLVEUR(obj) if obj.nom=="POST_COMMANDS" : self.generPOST_COMMANDS(obj) + s=PythonGenerator.generPROC_ETAPE(self,obj) # obj.valeur a été modifiée pour le traitement ci-dessus, alors il faut tout remettre en ordre en appelant de nouveau PythonGenerator.generPROC_ETAPE return s @@ -342,19 +374,21 @@ class CARMEL3DFV0Generator(PythonGenerator): #---------------------------------------------------------------------------------------- def generETAPE(self,obj): """analyse des OPER du catalogue""" + if self.debug: + print "ETAPE mis a jour: obj.nom = %(v_1)s , obj.valeur= %(v_2)s" % {'v_1': obj.nom, 'v_2': obj.valeur} dico={} self.dicoEtapeCourant=dico self.dicoCourant=self.dicoEtapeCourant s=PythonGenerator.generETAPE(self,obj) - obj.valeur=self.dicoEtapeCourant + obj.valeur=self.dicoEtapeCourant # cf. generPROC_ETAPE if self.debug: - print "ETAPE : obj.nom = %(v_1)s , obj.valeur= %(v_2)s" % {'v_1': obj.nom, 'v_2': obj.valeur} + print "ETAPE mis a jour: obj.nom = %(v_1)s , obj.valeur= %(v_2)s" % {'v_1': obj.nom, 'v_2': obj.valeur} if obj.nom=="MESHGROUP" : self.generMESHGROUP(obj) if obj.nom=="MATERIAL" : self.generMATERIAL(obj) if obj.nom=="SOURCE" : self.generSOURCE(obj) if obj.nom=="STRANDED_INDUCTOR_GEOMETRY" : self.generSTRANDED_INDUCTOR_GEOMETRY(obj) if obj.nom=="MACRO_GROUPE": self.generMACRO_GROUPE(obj) - s=PythonGenerator.generETAPE(self,obj) + s=PythonGenerator.generETAPE(self,obj) # cf. generPROC_ETAPE return s #---------------------------------------------------------------------------------------- @@ -412,7 +446,7 @@ class CARMEL3DFV0Generator(PythonGenerator): if self.debug: print "obj.valeur.keys()= %s" % obj.valeur.keys() if 'MATERIAL' in obj.valeur.keys() and 'SOURCE' in obj.valeur.keys(): # test d'erreur lors de presence de materiau et source a la fois - raise ValueError,tr(" ce groupe de maillage %s est associe a au moins un materiau et au moins une source." % nomGroupe) + raise ValueError, nomGroupe + tr(" : ce groupe de maillage ne peut pas etre associe a un materiau et une source a la fois.") # association a un materiau if 'MATERIAL' in obj.valeur.keys(): self.dictGroupes[nomGroupe]['MATERIAL'] = obj.valeur['MATERIAL'].nom # sauvegarde de l'association entre ce groupe de maillage et un materiau ou source, par son nom, i.e. nom du concept du materiau ou de la source @@ -464,7 +498,7 @@ class CARMEL3DFV0Generator(PythonGenerator): if self.debug: print "obj.valeur.keys()= %s" % obj.valeur.keys() if 'MATERIAL' in obj.valeur.keys() and 'SOURCE' in obj.valeur.keys(): # test d'erreur lors de presence de materiau et source a la fois - raise ValueError,tr("Ce MACRO_GROUPE %s ne peut pas contenir a la fois un MATERIAL et une SOURCE." % nomGroupe) + raise ValueError, nomgroupe + tr(" : ce MACRO_GROUPE ne peut pas contenir a la fois un MATERIAL et une SOURCE.") # association a une source if 'SOURCE' in obj.valeur.keys(): self.dictGroupes[nomGroupe]['SOURCE'] = obj.valeur['SOURCE'].nom # sauvegarde de l'association entre ce macro groupe et un materiau ou source, par son nom, i.e. nom du concept du materiau ou de la source @@ -481,7 +515,7 @@ class CARMEL3DFV0Generator(PythonGenerator): if not self.dictGroupes[groupe].has_key('STRAND'): listeStrandedInductorGeometry = False # au moins un groupe de la liste n'est pas un inducteur bobiné ou topologique (morceau ou entier). self.dictGroupes['ordreListeJdC'].append(nomGroupe) # sauvegarde du nom du macro groupe associe a une source, dans l'ordre du JdC if not listeStrandedInductorGeometry: # Erreur en cas de liste ne définissant pas que des inducteurs bobinés ou topologiques en morceaux - raise ValueError, tr(u"Le MACRO_GROUPE %s ne doit contenir, dans LISTE_MESHGROUP, que des morceaux d'inducteurs bobines ou topologiques." % nomGroupe) + raise ValueError, nomGroupe + tr(" : ce MACRO_GROUPE ne doit contenir, dans LISTE_MESHGROUP, que des morceaux d'inducteurs bobines ou topologiques.") # test de présence du domaine pour les cas appropriés d'inducteur bobiné ou topologique en morceau. if 'Domaine' in obj.valeur.keys(): if listeStrandedInductorGeometry: # Domaine seulement en cas de liste définissant des inducteurs bobinés ou topologiques en morceaux @@ -492,10 +526,12 @@ class CARMEL3DFV0Generator(PythonGenerator): print"le texte=%s" %(texte) self.dictDomaine[obj.get_sdname()]=texte else: # Erreur si Domaine et macro-groupe pas complètement inducteur - raise ValueError, tr(u"Ce MACRO_GROUPE %s contient, dans LISTE_MESHGROUP, des groupes qui ne sont pas que des morceaux d'inducteurs bobines ou topologiques. Il ne doit pas contenir de Domaine." % nomGroupe) + raise ValueError, nomGroupe + tr(" : ce MACRO_GROUPE ne doit pas contenir de Domaine car il contient, dans LISTE_MESHGROUP, des groupes qui ne sont pas que des morceaux d'inducteurs bobines ou topologiques.") else: # Domaine manquant if listeStrandedInductorGeometry: # Erreur en cas de liste définissant des inducteurs bobinés ou topologiques en morceaux - raise ValueError, tr(u"Ce MACRO_GROUPE %s de morceaux d'inducteurs bobines ou topologiques doit contenir aussi un Domaine." % nomGroupe) + raise ValueError, nomGroupe + tr(" : ce MACRO_GROUPE de morceaux d'inducteurs bobines ou topologiques doit contenir aussi un Domaine.") + else: + raise ValueError, nomGroupe + tr(" : ce MACRO_GROUPE doit contenir une liste de groupes LISTE_MESHGROUP.") if self.debug: print "self.dictGroupes= %s" % repr(self.dictGroupes) print "self.dictDomaine=%s" %(self.dictDomaine) @@ -578,7 +614,7 @@ class CARMEL3DFV0Generator(PythonGenerator): # verification des proprietes du sous bloc CONDUCTOR (PERMEABILITY, CONDUCTIVITY) if 'PERMEABILITY' not in obj.valeur or 'CONDUCTIVITY' not in obj.valeur: print "ERREUR! Le matériau conducteur (CONDUCTOR) de nom %s doit contenir les propriétés PERMEABILITY et CONDUCTIVITY." % obj.get_sdname() - raise ValueError, tr("ERREUR! Le materiau conducteur (CONDUCTOR) de nom %s doit contenir les proprietes PERMEABILITY et CONDUCTIVITY." % obj.get_sdname()) + raise ValueError, obj.get_sdname() + tr(" : ce materiau conducteur (CONDUCTOR) doit contenir les proprietes PERMEABILITY et CONDUCTIVITY.") else: # parcours des proprietes du sous bloc CONDUCTOR (PERMEABILITY, CONDUCTIVITY) for keyN1 in ('PERMEABILITY','CONDUCTIVITY') : @@ -664,7 +700,7 @@ class CARMEL3DFV0Generator(PythonGenerator): # verification des proprietes du sous bloc ZSURFACIC (PERMEABILITY, CONDUCTIVITY) if 'PERMEABILITY' not in obj.valeur or 'CONDUCTIVITY' not in obj.valeur: print "ERREUR! Le matériau impedance de surface (ZSURFACIC) de nom %s doit contenir les propriétés PERMEABILITY et CONDUCTIVITY." % obj.get_sdname() - raise ValueError, tr("ERREUR! Le materiau impedance de surface (ZSURFACIC) de nom %s doit contenir les proprietes PERMEABILITY et CONDUCTIVITY." % obj.get_sdname()) + raise ValueError, obj.get_sdname() + tr(" : ce materiau impedance de surface (ZSURFACIC) doit contenir les proprietes PERMEABILITY et CONDUCTIVITY.") else: # parcours des proprietes du sous bloc ZSURFACIC (PERMEABILITY, CONDUCTIVITY) for keyN1 in obj.valeur : @@ -769,17 +805,11 @@ class CARMEL3DFV0Generator(PythonGenerator): wdict = obj.valeur['WAVEFORM_CONSTANT'] # dictionnaire contenant les parametres de la forme de la source if self.problem == HARMONIC: texte+=" CURJ POLAR %s 0\n" % str(wdict['AMPLITUDE']) - print tr("ATTENTION! Une source constante \ - n'est possible qu'a frequence nulle \ - en regime frequentiel") elif "WAVEFORM_SINUS" in obj.valeur: wdict = obj.valeur['WAVEFORM_SINUS'] # dictionnaire contenant les parametres de la forme de la source if self.problem == HARMONIC: texte+=" CURJ POLAR %(ampli)s %(phase)s\n" \ % {'ampli': str(wdict['AMPLITUDE']), 'phase': str(wdict['PHASE'])} - else: - print tr("ERREUR! Une forme de la source du \ - type WAVEFORM_CONSTANT ou WAVEFORM_SINUS est attendue.") self.dictSourceStInd[obj.get_sdname()]=texte if self.debug: print texte @@ -802,16 +832,11 @@ class CARMEL3DFV0Generator(PythonGenerator): wdict = obj.valeur['WAVEFORM_CONSTANT'] # dictionnaire contenant les parametres de la forme de la source if self.problem == HARMONIC: texte+=" AMP POLAR %s 0\n" % str(wdict['AMPLITUDE']) - print tr("ATTENTION! Une source constante n'est \ - possible qu'a frequence nulle en regime frequentiel") elif "WAVEFORM_SINUS" in obj.valeur: wdict = obj.valeur['WAVEFORM_SINUS'] # dictionnaire contenant les parametres de la forme de la source if self.problem == HARMONIC: texte+=" AMP POLAR %(ampli)s %(phase)s\n" \ % {'ampli': str(wdict['AMPLITUDE']), 'phase': str(wdict['PHASE'])} - else: - print tr("ERREUR! Une forme de la source du type \ - WAVEFORM_CONSTANT ou WAVEFORM_SINUS est attendue.") self.dictSourceHport[obj.get_sdname()]=texte if self.debug: print texte @@ -837,15 +862,11 @@ class CARMEL3DFV0Generator(PythonGenerator): wdict = obj.valeur['WAVEFORM_CONSTANT'] # dictionnaire contenant les parametres de la forme de la source if self.problem == HARMONIC: texte+=" AMP POLAR %s 0\n" % str(wdict['AMPLITUDE']) - print tr("ATTENTION! Une source constante n'est possible qu'a frequence nulle en regime frequentiel") elif "WAVEFORM_SINUS" in obj.valeur: wdict = obj.valeur['WAVEFORM_SINUS'] # dictionnaire contenant les parametres de la forme de la source if self.problem == HARMONIC: texte+=" AMP POLAR %(ampli)s %(phase)s\n" \ % {'ampli': str(wdict['AMPLITUDE']), 'phase': str(wdict['PHASE'])} - else: - print tr("ERREUR! Une forme de la source du type \ - WAVEFORM_CONSTANT ou WAVEFORM_SINUS est attendue.") self.dictSourceEport[obj.get_sdname()]=texte if self.debug: print texte @@ -865,33 +886,146 @@ class CARMEL3DFV0Generator(PythonGenerator): if obj.valeur.has_key('GLOBAL'): self.texteCarmel3D_CMD+="[\nGLOBAL\n]\n" + + if obj.valeur.has_key('DUMP'): + champsFieldkind={'total':'TOTAL', 'reaction':'REACTION', 'diffracted':'DIFFRACTED'} + self.texteCarmel3D_CMD+="[\nDUMP" + self.texteCarmel3D_CMD+="\n"+self.projet + '_postgroups.txt' + self.texteCarmel3D_CMD+="\n"+champsFieldkind[obj.valeur["DUMP"]["fieldkind"]]+"\n]\n" + + if obj.valeur.has_key('FIELDDUMP'): + champs = {'T':'TFIELD','H':'HFIELD', 'B':'BFIELD', 'J':'JFIELD', 'E':'EFIELD', 'pertesJoule':'OHMLOSS_DENSITY', 'champSource':'SOURCEFIELD', 'A':'AFIELD', 'Phi':'PHIFIELD', 'Omega':'OMEGAFIELD'} + champsFieldkind={'total':'TOTAL', 'reaction':'REACTION', 'diffracted':'DIFFRACTED'} + self.texteCarmel3D_CMD+="[\nFIELDDUMP" + if type(obj.valeur["FIELDDUMP"]) == types.DictType: # correspondance sur une 'Fielddump' + self.fielddumpValeur.append(obj.valeur["FIELDDUMP"]) + else: + self.fielddumpValeur=obj.valeur["FIELDDUMP"] # correspondance sur plusieurs 'Fielddump' + for indexFielddump in self.fielddumpValeur: + self.texteCarmel3D_CMD+="\n [\n" +" "+ champs[indexFielddump["field"]] + self.texteCarmel3D_CMD+="\n" + " " + champsFieldkind[indexFielddump["fieldkind"]] + "\n ]" + self.texteCarmel3D_CMD+="\n]\n" + + if obj.valeur.has_key('VISU'): self.texteCarmel3D_CMD+="[\nVISU" # test de fichier de maillage bien lu - if self.fichierMaillage == "": raise ValueError, tr("ERREUR! Le fichier de maillage n'existe pas. Le bloc PARAMETERS doit etre defini au dessus du bloc POST_COMMANDS.") + if self.fichierMaillage == "": raise ValueError, tr("Le fichier de maillage n'existe pas. Le bloc PARAMETERS doit etre defini au-dessus du bloc POST_COMMANDS.") self.texteCarmel3D_CMD+="\n"+self.projet+"\n" - self.texteCarmel3D_CMD+=obj.valeur["VISU"]["VISU_Format"]+"\n" - self.texteCarmel3D_CMD+=obj.valeur["VISU"]["VISU_Type"]+"\n]\n" + self.texteCarmel3D_CMD+=obj.valeur["VISU"]["visu_format"]+"\n" + self.texteCarmel3D_CMD+=obj.valeur["VISU"]["visu_type"]+"\n]\n" + + if obj.valeur.has_key('VISU3D'): + champsField = {'T':'TFIELD','H':'HFIELD', 'B':'BFIELD', 'J':'JFIELD', 'E':'EFIELD', 'pertesJoule':'OHMLOSS_DENSITY', 'champSource':'SOURCEFIELD', 'A':'AFIELD', 'Phi':'PHIFIELD', 'Omega':'OMEGAFIELD'} # correspondance sur le nom du champ entre le catalogue (clé) et le fichier de configuration de Code_Carmel3D (valeur) + champsFieldkind={'total':'TOTAL', 'reaction':'REACTION', 'diffracted':'DIFFRACTED'} + if type(obj.valeur["VISU3D"])==types.DictType: # correspondance sur une 'VISU3D' + self.visu3dValeur.append(obj.valeur["VISU3D"]) + else: + self.visu3dValeur=obj.valeur["VISU3D"] # correspondance sur plusieurs 'VISU3D' + self.texteCarmel3D_CMD+="[\nVISU3D" + if self.fichierMaillage == "": raise ValueError, tr("Le fichier de maillage n'existe pas. Le bloc PARAMETERS doit etre defini au-dessus du bloc POST_COMMANDS.") + self.texteCarmel3D_CMD+="\n"+ self.projet + self.texteCarmel3D_CMD+="\n" + self.visu3dValeur[0]["visu_format"] + for indexVisu3d in self.visu3dValeur: + if indexVisu3d["visu_format"]!=self.visu3dValeur[0]["visu_format"]: + print "ERREUR! Dans les multiples VISU3D du bloc POST_COMMANDS, le parametre visu_format doit prendre la meme valeur." + raise ValueError, tr("Dans les multiples VISU3D du bloc POST_COMMANDS, le parametre visu_format doit prendre la meme valeur.") + self.texteCarmel3D_CMD+="\n [\n " + champsField[indexVisu3d["field"]] + self.texteCarmel3D_CMD+="\n "+ champsFieldkind[indexVisu3d["fieldkind"]] + self.texteCarmel3D_CMD+="\n "+ indexVisu3d["visu_type"]+"\n ]" + self.texteCarmel3D_CMD+="\n]\n" + + if obj.valeur.has_key('ASTER_RMS_LOSSES'): + self.texteCarmel3D_CMD+="[\nASTER_RMS_LOSSES" + if self.fichierMaillage == "": raise ValueError, tr("Le fichier de maillage n'existe pas. Le bloc PARAMETERS doit etre defini au-dessus du bloc POST_COMMANDS.") + self.texteCarmel3D_CMD+="\n"+self.projet+"\n" + self.texteCarmel3D_CMD+= obj.valeur["ASTER_RMS_LOSSES"]["rms_losses_format"] +"\n]\n" + if obj.valeur.has_key('CUTLINE'): - champs = {'H':'HFIELD', 'B':'BFIELD', 'J':'JFIELD', 'E':'EFIELD'} # correspondance sur le nom du champ entre le catalogue (clé) et le fichier de configuration de Code_Carmel3D (valeur) - self.texteCarmel3D_CMD+="[\nCUTLINE" - self.texteCarmel3D_CMD+="\n%s" % ' '.join(map(str,obj.valeur["CUTLINE"]["first_point"])) - self.texteCarmel3D_CMD+="\n%s" % ' '.join(map(str,obj.valeur["CUTLINE"]["last_point"])) - self.texteCarmel3D_CMD+="\n%d" % (obj.valeur["CUTLINE"]["number_of_points"], ) - self.texteCarmel3D_CMD+="\n" + obj.valeur["CUTLINE"]["name"] # création du champ, renommé par rapport à l'interface - self.texteCarmel3D_CMD+="\n" + champs[obj.valeur["CUTLINE"]["field"]] - self.texteCarmel3D_CMD+="\n]\n" + champsField = {'H':'HFIELD', 'B':'BFIELD', 'J':'JFIELD', 'E':'EFIELD', 'pertesJoule':'OHMLOSS_DENSITY', 'champSource':'SOURCEFIELD', 'A':'AFIELD', 'Phi':'PHIFIELD', 'Omega':'OMEGAFIELD', 'T':'TFIELD'} # correspondance sur le nom du champ entre le catalogue (clé) et le fichier de configuration de Code_Carmel3D (valeur) + champsFieldkind={'total':'TOTAL', 'reaction':'REACTION', 'diffracted':'DIFFRACTED'} + champsOutput={'xgraphic':'XGRAPHIC', 'gnuplot':'GNUPLOT', 'gmsh':'GMSH'} + champsLissage={'aucun':'NONE', 'un seul point par element':'1PTELT'} + if type(obj.valeur["CUTLINE"]) == types.DictType: # correspondance sur une 'Cutline' + self.cutlineValeur.append(obj.valeur["CUTLINE"]) # transfert d'une dictionnaire à une liste + else: + self.cutlineValeur=obj.valeur["CUTLINE"] # correspondance sur plusieurs 'Cutline' + for indexCutline in self.cutlineValeur: + self.texteCarmel3D_CMD+="[\nCUTLINE" + self.texteCarmel3D_CMD+="\n%s" % ' '.join(map(str,indexCutline["first_point"]), ) + self.texteCarmel3D_CMD+="\n%s" % ' '.join(map(str,indexCutline["last_point"]), ) + self.texteCarmel3D_CMD+="\n%d" % (indexCutline["number_of_points"], ) + self.texteCarmel3D_CMD+="\n" +indexCutline["name"] + self.texteCarmel3D_CMD+="\n" + champsField[indexCutline["field"]] + if indexCutline.has_key('fieldkind'): + self.texteCarmel3D_CMD+="\nFIELDKIND " + champsFieldkind[indexCutline["fieldkind"]] + if indexCutline.has_key('output'): + self.texteCarmel3D_CMD+="\nOUTPUT " +champsOutput[indexCutline["output"]] + if indexCutline.has_key('lissage'): + self.texteCarmel3D_CMD+="\nSMOOTHLEVEL " +champsLissage[indexCutline["lissage"]] + self.texteCarmel3D_CMD+="\n]\n" + if obj.valeur.has_key('CUTPLANE'): - champs = {'H':'HFIELD', 'B':'BFIELD', 'J':'JFIELD', 'E':'EFIELD'} # correspondance sur le nom du champ entre le catalogue (clé) et le fichier de configuration de Code_Carmel3D (valeur) + champs = {'T':'TFIELD','H':'HFIELD', 'B':'BFIELD', 'J':'JFIELD', 'E':'EFIELD','pertesJoule':'OHMLOSS_DENSITY', 'champSource':'SOURCEFIELD', 'A':'AFIELD', 'Phi':'PHIFIELD', 'Omega':'OMEGAFIELD'} # correspondance sur le nom du champ entre le catalogue (clé) et le fichier de configuration de Code_Carmel3D (valeur) + champsFieldkind= {'total':'TOTAL', 'reaction':'REACTION', 'diffracted':'DIFFRACTED'} + champsOutput={'xgraphic':'XGRAPHIC', 'gnuplot':'GNUPLOT', 'gmsh':'GMSH'} + champsLissage={'aucun':'NONE', 'un seul point par element':'1PTELT'} axes = {'Ox':1, 'Oy':2, 'Oz':3} # correspondance de l'axe normal entre le catalogue (clé) et le fichier de configuration Code_Carmel3D (valeur) - self.texteCarmel3D_CMD+="[\nCUTPLANE" - self.texteCarmel3D_CMD+="\n%d" % (axes[obj.valeur["CUTPLANE"]["normal_vector"]], ) - self.texteCarmel3D_CMD+="\n%f" % (obj.valeur["CUTPLANE"]["plane_position"], ) - self.texteCarmel3D_CMD+="\n%s" % ' '.join(map(str,obj.valeur["CUTPLANE"]["number_of_points"])) - self.texteCarmel3D_CMD+="\n" + obj.valeur["CUTPLANE"]["name"] - self.texteCarmel3D_CMD+="\n" + champs[obj.valeur["CUTPLANE"]["field"]] - self.texteCarmel3D_CMD+="\n]\n" + if type(obj.valeur["CUTPLANE"]) == types.DictType: + self.cutplaneValeur.append(obj.valeur["CUTPLANE"]) # correspondance sur une 'Cutplane' + else: + self.cutplaneValeur=obj.valeur["CUTPLANE"] # correspondance sur plusieurs 'Cutplane' + for indexCutplane in self.cutplaneValeur: + self.texteCarmel3D_CMD+="[\nCUTPLANE" + self.texteCarmel3D_CMD+="\n%d" % (axes[indexCutplane["normal_vector"]], ) + self.texteCarmel3D_CMD+="\n%f" % (indexCutplane["plane_position"], ) + self.texteCarmel3D_CMD+="\n%s" % ' '.join(map(str,indexCutplane["number_of_points"])) + self.texteCarmel3D_CMD+="\n" + indexCutplane["name"] + self.texteCarmel3D_CMD+="\n" + champs[indexCutplane["field"]] + if indexCutplane.has_key('fieldkind'): + self.texteCarmel3D_CMD+="\nFIELDKIND " + champsFieldkind[indexCutplane["fieldkind"]] + if indexCutplane.has_key('output'): + self.texteCarmel3D_CMD+="\nOUTPUT " +champsOutput[indexCutplane["output"]] + if indexCutplane.has_key('lissage'): + self.texteCarmel3D_CMD+="\nSMOOTHLEVEL " +champsLissage[indexCutplane["lissage"]] + self.texteCarmel3D_CMD+="\n]\n" + + if obj.valeur.has_key('FIELDMAP'): + champs = {'T':'TFIELD','H':'HFIELD', 'B':'BFIELD', 'J':'JFIELD', 'E':'EFIELD','pertesJoule':'OHMLOSS_DENSITY', 'champSource':'SOURCEFIELD', 'A':'AFIELD', 'Phi':'PHIFIELD', 'Omega':'OMEGAFIELD'} # correspondance sur le nom du champ entre le catalogue (clé) et le fichier de configuration de Code_Carmel3D (valeur) + champsFieldkind= {'total':'TOTAL', 'reaction':'REACTION', 'diffracted':'DIFFRACTED'} + champsOutput={'xgraphic':'XGRAPHIC', 'gnuplot':'GNUPLOT', 'gmsh':'GMSH'} + champsFieldmap_type={'equation':'EQUATION', 'fichier':'FILE'} + champsType={'plane':'PLANE', 'line':'LINE'} + axes = {'Ox':1, 'Oy':2, 'Oz':3} # correspondance de l'axe normal entre le catalogue (clé) et le fichier de configuration Code_Carmel3D (valeur) + if type(obj.valeur["FIELDMAP"]) == types.DictType: + self.fieldmapValeur.append(obj.valeur["FIELDMAP"]) # correspondance sur une 'Fieldmap' + else: + self.fieldmapValeur=obj.valeur["FIELDMAP"]# correspondance sur plusieurs 'Fieldmap' + for indexFieldmap in self.fieldmapValeur: + self.texteCarmel3D_CMD+="[\nFIELDMAP" + self.texteCarmel3D_CMD+="\n" + champsFieldmap_type[indexFieldmap["fieldmap_type"]] + if indexFieldmap["fieldmap_type"]=="equation": + self.texteCarmel3D_CMD+="\n" + champsType[indexFieldmap["type"]] + if indexFieldmap["type"]=="line": + self.texteCarmel3D_CMD+="\n%s" % ' '.join(map(str,indexFieldmap["first_point"]), ) + self.texteCarmel3D_CMD+="\n%s" % ' '.join(map(str,indexFieldmap["last_point"]), ) + self.texteCarmel3D_CMD+="\n%d" % (indexFieldmap["number_of_points"], ) + if indexFieldmap["type"]=="plane": + self.texteCarmel3D_CMD+="\n%d" % (axes[indexFieldmap["normal_vector"]], ) + self.texteCarmel3D_CMD+="\n%f" % (indexFieldmap["plane_position"], ) + self.texteCarmel3D_CMD+="\n%s" % ' '.join(map(str,indexFieldmap["number_of_points"])) + if indexFieldmap["fieldmap_type"]=="fichier": + self.fichierFieldmap=indexFieldmap["filename"] + self.nomFichierFieldmap = os.path.basename(self.fichierFieldmap) # nom du fichier de fieldmap, sans le chemin + self.texteCarmel3D_CMD+="\n" + self.nomFichierFieldmap + self.texteCarmel3D_CMD+="\n" + champs[indexFieldmap["field"]] + self.texteCarmel3D_CMD+="\n" + champsFieldkind[indexFieldmap["fieldkind"]] + self.texteCarmel3D_CMD+="\n" +indexFieldmap["name"] # nom systématique, quel que soit le fieldmap_type, placé entre fieldkind et output + self.texteCarmel3D_CMD+="\n" +champsOutput[indexFieldmap["output"]] + self.texteCarmel3D_CMD+="\n]\n" + + #--------------------------------------------------------------------------------------- @@ -980,7 +1114,7 @@ class CARMEL3DFV0Generator(PythonGenerator): if self.dictGroupes[nom]['MATERIAL'][:] in dictProprietes.keys(): # test si le nom du materiau associe est du bon type if dictProprietes[self.dictGroupes[nom]['MATERIAL'][:]]['valeur']['PERMEABILITY']['LAW'] == 'NONLINEAR': # Erreur si ce matériau est non-linéaire print u"ERREUR! Le matériau de nom %s associé au groupe %s doit avoir sa perméabilité (PERMEABILITY) linéaire (LINEAR) seulement." % (self.dictGroupes[nom]['MATERIAL'][:], nom) - raise ValueError, tr("ERREUR! Le materiau de nom %s associe au groupe %s doit avoir sa permeabilite (PERMEABILITY) lineaire (LINEAR) seulement." % (self.dictGroupes[nom]['MATERIAL'][:], nom)) + raise ValueError, self.dictGroupes[nom]['MATERIAL'][:] + ',' + nom + tr(" : ce materiau (nom, groupe associe) doit avoir sa permeabilite (PERMEABILITY) lineaire (LINEAR) seulement.") if dictProprietes[self.dictGroupes[nom]['MATERIAL'][:]]['valeur']['PERMEABILITY']['HOMOGENEOUS'] == 'FALSE' \ or dictProprietes[self.dictGroupes[nom]['MATERIAL'][:]]['valeur']['CONDUCTIVITY']['HOMOGENEOUS'] == 'FALSE': # recherche si matériau non-homogène self.materiauxGroupesTousHomogenes = False # alors tous les matériaux ne sont pas homogènes @@ -1008,7 +1142,7 @@ class CARMEL3DFV0Generator(PythonGenerator): if self.dictGroupes[nom]['MATERIAL'][:] in dictProprietes.keys(): # test si le nom du materiau associe est du bon type if dictProprietes[self.dictGroupes[nom]['MATERIAL'][:]]['valeur']['PERMEABILITY']['LAW'] == 'NONLINEAR': # Erreur si ce matériau est non-linéaire print u"ERREUR! Le matériau de nom %s associé au groupe %s doit avoir sa perméabilité (PERMEABILITY) linéaire (LINEAR) seulement." % (self.dictGroupes[nom]['MATERIAL'][:], nom) - raise ValueError, tr("ERREUR! Le materiau de nom %s associe au groupe %s doit avoir sa permeabilite (PERMEABILITY) lineaire (LINEAR) seulement." % (self.dictGroupes[nom]['MATERIAL'][:], nom)) + raise ValueError, self.dictGroupes[nom]['MATERIAL'][:] + ',' + nom + tr(" : ce materiau (nom, groupe associe) doit avoir sa permeabilite (PERMEABILITY) lineaire (LINEAR) seulement.") if dictProprietes[self.dictGroupes[nom]['MATERIAL'][:]]['valeur']['PERMEABILITY']['HOMOGENEOUS'] == 'FALSE': # recherche si matériau non-homogène self.materiauxGroupesTousHomogenes = False # alors tous les matériaux ne sont pas homogènes if dictProprietes[self.dictGroupes[nom]['MATERIAL'][:]]['valeur']['PERMEABILITY']['ISOTROPIC'] == 'FALSE': # recherche si matériau non-homogène @@ -1200,13 +1334,13 @@ class CARMEL3DFV0Generator(PythonGenerator): if self.debug: print "nomSource courant=",nom if self.dictGroupes[nom].has_key('SOURCE'): if self.dictGroupes[nom]['SOURCE'] not in self.dictPort : - if not self.dictGroupes[nom].has_key('DOMAINE'): raise ValueError, tr("Il manque le Domaine à l'inducteur de nom : "+nom) + if not self.dictGroupes[nom].has_key('DOMAINE'): raise ValueError, nom + tr(" : il manque un Domaine a cet inducteur.") self.texteCarmel3D_INGEND2+="\n%s" %(self.dictGroupes[nom]['DOMAINE']) # écriture du nom de domaine else: - if not self.dictGroupes[nom].has_key('DOMAINE'): raise ValueError, tr("Il manque le Domaine à l'inducteur de nom : "+nom) + if not self.dictGroupes[nom].has_key('DOMAINE'): raise ValueError, nom + tr(" : il manque un Domaine a cet inducteur.") self.texteCarmel3D_INGEND2+="\n%s" %(self.dictGroupes[nom]['DOMAINE']) # écriture du nom de domaine if self.dictGroupes[nom].has_key('STRAND'): # inducteur en un seul morceau - if not self.dictGroupes[nom].has_key('DOMAINE'): raise ValueError, tr("Il manque le Domaine à l'inducteur de nom : "+nom) + if not self.dictGroupes[nom].has_key('DOMAINE'): raise ValueError, nom + tr(" : il manque un Domaine a cet inducteur.") strand = self.dictGroupes[nom]['STRAND'] if self.debug: print "un seul morceau : nomStrand courant=", strand self.texteCarmel3D_INGEND2+= self.dictStrand[strand] @@ -1280,19 +1414,19 @@ class CARMEL3DFV0Generator(PythonGenerator): partiesNom = nom.split(sepNomGroupeMaille) # separation du nom du groupe en parties # les tests suivants ne generent une erreur que si le prefixe est obligatoire if len(partiesNom) < 2: # test d'erreur, pas de separateur donc nom incorrect, i.e. sans prefixe c'est sur - print tr("ERREUR! ce groupe de maille (%s) n'a pas de prefixe \ - indiquant le type de materiau ou de source associee", nom) + print "ERREUR! ce groupe de maille (%s) n'a pas de prefixe \ + indiquant le type de materiau ou de source associee" % (nom, ) elif partiesNom[0] not in listePrefixesGroupeMaille: # prefixe non defini - print tr("ERREUR! ce groupe de maille (%s) n'a pas de prefixe valable", nom) + print "ERREUR! ce groupe de maille (%s) n'a pas de prefixe valable" % (nom, ) else: # verification de l'adequation du prefixe avec le type de bloc demande, si fourni if typeBloc is not None: if typeBloc not in dictPrefixesGroupeMaille: # test validite de typeBloc, devant etre une cle du dictionnaire - print tr("ERREUR! ce type de bloc (%s) n'est pas valable", str(typeBloc)) + print "ERREUR! ce type de bloc (%s) n'est pas valable" % (str(typeBloc), ) elif partiesNom[0] not in dictPrefixesGroupeMaille[typeBloc]: # pas de prefixe correct pour ce type de bloc - print tr("ERREUR! ce groupe de maille (%(nom)s) n'a pas \ + print "ERREUR! ce groupe de maille (%(nom)s) n'a pas \ le prefixe correct pour etre associe a un type %(type_bloc)s", \ - {'nom': nom, 'type_bloc': str(typeBloc)}) + {'nom': nom, 'type_bloc': str(typeBloc)} else: # c'est bon nomReel = join(partiesNom[1:], sepNomGroupeMaille) # reconstruction du nom du groupe sans prefixe complet if self.debug: diff --git a/generator/generator_CARMEL3D_temporel.py b/generator/generator_CARMEL3D_temporel.py index 0a89bce1..6720c87d 100644 --- a/generator/generator_CARMEL3D_temporel.py +++ b/generator/generator_CARMEL3D_temporel.py @@ -125,22 +125,10 @@ class CARMEL3DTV0Generator(PythonGenerator): # Paramètres divers self.typeSolveur = "" # type de solveur, linéaire (Solveur_lineaire) ou non-linéaire (Solveur_non_lineaire) #Post traitement - self.carteChamp="" - self.carteCourantInduit="" - self.carteForce="" - self.perteJoule="" - self.fluxInducteur="" - self.courantInducteur="" - self.tensionInducteur="" - self.energie="" - self.ForceCouple="" - self.fluxSpire="" - self.fluxGroupe="" - self.ddpElect="" - self.ddpMagn="" - self.fluxMagn="" - self.fluxJinduitTotal="" - self.potFlottant = "" + self.carteChamp="" # liste des pas de temps demandés lors du post-traitement des cartes de champ + self.carteCourantInduit="" # liste des pas de temps demandés lors du post-traitement des cartes de courants induits + self.carteForce="" # liste des pas de temps demandés lors du post-traitement des cartes de force + self.post_global = [] # liste des grandeurs globales demandées lors du post-traitement # on force le probleme a etre frequentiel, seul possible en l'etat des choses self.problem = HARMONIC @@ -443,44 +431,52 @@ class CARMEL3DTV0Generator(PythonGenerator): #Definir Post traitement postraitement=ET.SubElement(root, "postraitement") + # Ecriture des cartes de champ carteChamp=ET.SubElement(postraitement, "carteChamp") if type(self.carteChamp)==float: carteChamp.text="%s" %(self.carteChamp) - else: carteChamp.text="%s" % ','.join(map(str,self.carteChamp)) + else: + carteChamp.text="%s" % ','.join(map(str,self.carteChamp)) + # Ecriture des cartes de courants induits carteCourantInduit=ET.SubElement(postraitement, "carteCourantInduit") if type(self.carteCourantInduit)==float: carteCourantInduit.text="%s" %(self.carteCourantInduit) - else: carteCourantInduit.text="%s" % ','.join(map(str,self.carteCourantInduit)) + else: + carteCourantInduit.text="%s" % ','.join(map(str,self.carteCourantInduit)) + # Ecriture des cartes de force carteForce=ET.SubElement(postraitement, "carteForce") if type(self.carteForce)==float: carteForce.text="%s" %(self.carteForce) - else: carteForce.text="%s" % ','.join(map(str,self.carteForce)) - perteJoule=ET.SubElement(postraitement, "perteJoule") - perteJoule.text="%s" %(correspondance_booleen[self.perteJoule]) - fluxInducteur=ET.SubElement(postraitement, "fluxInducteur") - fluxInducteur.text="%s" %(correspondance_booleen[self.fluxInducteur]) - courantInducteur=ET.SubElement(postraitement, "courantInducteur") - courantInducteur.text="%s" %(correspondance_booleen[self.courantInducteur]) - tensionInducteur=ET.SubElement(postraitement, "tensionInducteur") - tensionInducteur.text="%s" %(correspondance_booleen[self.tensionInducteur]) - energie=ET.SubElement(postraitement, "energie") - energie.text="%s" %(correspondance_booleen[self.energie]) - ForceCouple=ET.SubElement(postraitement, "ForceCouple") - ForceCouple.text="%s" %(correspondance_booleen[self.ForceCouple]) - fluxSpire=ET.SubElement(postraitement, "fluxSpire") - fluxSpire.text="%s" %(correspondance_booleen[self.fluxSpire]) - fluxGroupe=ET.SubElement(postraitement, "fluxGroupe") - fluxGroupe.text="%s" %(correspondance_booleen[self.fluxGroupe]) - ddpElect=ET.SubElement(postraitement, "ddpElect") - ddpElect.text="%s" %(correspondance_booleen[self.ddpElect]) - ddpMagn=ET.SubElement(postraitement, "ddpMagn") - ddpMagn.text="%s" %(correspondance_booleen[self.ddpMagn]) - fluxMagn=ET.SubElement(postraitement, "fluxMagn") - fluxMagn.text="%s" %(correspondance_booleen[self.fluxMagn]) - fluxJinduitTotal=ET.SubElement(postraitement, "fluxJinduitTotal") - fluxJinduitTotal.text="%s" %(correspondance_booleen[self.fluxJinduitTotal]) - potentielFlottant=ET.SubElement(postraitement, "potFlottant") - potentielFlottant.text="%s" %(correspondance_booleen[self.potFlottant]) + else: + carteForce.text="%s" % ','.join(map(str,self.carteForce)) + # Sortie des grandeurs globales, enregistrées dans self.post_global + # liste de correspondance entre la valeur du catalogue et le nom de la balise XML + # sous forme ordonnée (nomXML, valeur catalogue) + correspondance_global = (('energie', "Energie"),\ + ('perteJoule', "Pertes Joules"),\ + ('fluxInducteur', "Flux par inducteur"),\ + ('courantInducteur', "Courants par inducteur"),\ + ('tensionInducteur', "Tensions par inducteur"), \ + ('forceCouple', "Force et couple"),\ + ('fluxSpire', "Flux par spire exploratrice"),\ + ('fluxGroupe', "Flux par groupe"),\ + ('ddpElect', "Tensions electriques"),\ + ('ddpMagn', "DDP magnetiques"), \ + ('fluxMagn', "Flux magnetiques"),\ + ('fluxJinduitTotal', "Flux J induit"),\ + ('potFlottant', "Potentiel flottant")) + # Sortie des grandeurs demandées seulement (true) + for table in correspondance_global: + if table[1] in self.post_global: + post_global_item=ET.SubElement(postraitement, table[0]) + post_global_item.text = "true" +# # Sortie de toutes les grandeurs possibles, avec la valeur true pour celles demandées et false sinon +# for table in correspondance_global: +# post_global_item=ET.SubElement(postraitement, table[0]) +# if table[1] in self.post_global: +# post_global_item.text = "true" +# else: +# post_global_item.text = "false" self.indent(root) # indentations et retours à la ligne, à l'aide d'une fonction maison, car xml.etree.ElementTree ne sait pas faire et le module lxml n'est pas disponible dans Salomé @@ -512,7 +508,10 @@ class CARMEL3DTV0Generator(PythonGenerator): if self.debug: print "MCSIMP %(v_1)s %(v_2)s" % {'v_1': obj.nom, "v_2": obj.valeur} s=PythonGenerator.generMCSIMP(self,obj) - self.dicoCourant[obj.nom]=obj.valeurFormatee + try: + self.dicoCourant[obj.nom]=obj.valeurFormatee + except: + print "Oubli des messages texte homo='information'" return s @@ -543,7 +542,6 @@ class CARMEL3DTV0Generator(PythonGenerator): s=PythonGenerator.generPROC_ETAPE(self,obj) if obj.nom=="PARAMETERS" : self.generBLOC_PARAMETERS(obj) if obj.nom=="SOLVEUR" : self.generSOLVEUR(obj) - if obj.nom=="POST_COMMANDS" : self.generPOST_COMMANDS(obj) if obj.nom=="SYMETRIE" : self.generBLOC_SYMETRIE(obj) if obj.nom=="POST_TRAITEMENT" : self.generPOST_TRAITEMENT(obj) return s @@ -669,25 +667,25 @@ class CARMEL3DTV0Generator(PythonGenerator): groupe = groupe.replace('"', "") # suppression des guillement doubles self.dictMacroGroupes[nomMacroGroupe]['LISTE'].append(groupe) # sauvegarde du nom au formatage correct else: - raise ValueError, tr("Ce MACRO_GROUPE %s doit contenir une liste de groupes LISTE_MESHGROUP." % nomMacroGroupe) + raise ValueError, nomMacroGroupe + tr(" : ce MACRO_GROUPE doit contenir une liste de groupes LISTE_MESHGROUP.") for nomGroupe in self.dictMacroGroupes[nomMacroGroupe]['LISTE']: # liste des groupes MESHGROUP de ce macro-groupe. On leur associe les propriétés du MACRO_GROUPE for propriete in ('SOURCE', 'MATERIAL', 'STRANDED_INDUCTOR_GEOMETRY'): # liste des propriétés automatiques à copier du MACRO_GROUPE à chaque MESHGROUP de la liste if propriete in obj.valeur.keys(): # ce macro-groupe est associé à cette propriété if self.dictGroupes[nomGroupe].has_key(propriete) and self.dictGroupes[nomGroupe][propriete] != self.dictGroupes[nomGroupe][propriete].nom: # erreur, ce meshgroup a déjà une telle propriéte définie, différente - print u"ERREUR! Conflit entre la %s : %s du MACRO_GROUPE %s et celle : %s du MESHGROUP associé à ce macro-groupe." % \ + print u"ERREUR! Conflit entre la %s : %s du MACRO_GROUPE %s et celle : %s du MESHGROUP %s associé à ce macro-groupe." % \ ( propriete, obj.valeur[propriete].nom, nomMacroGroupe, self.dictGroupes[nomGroupe][propriete], nomGroupe ) - raise ValueError, tr(u"ERREUR! Conflit entre la %s : %s du MACRO_GROUPE %s et celle : %s du MESHGROUP associé à ce macro-groupe." % \ - ( propriete, obj.valeur[propriete].nom, nomMacroGroupe, self.dictGroupes[nomGroupe][propriete], nomGroupe )) + raise ValueError, propriete + ',' + obj.valeur[propriete].nom + ',' + nomMacroGroupe + ',' + self.dictGroupes[nomGroupe][propriete] + ',' + nomGroupe\ + + tr(" : conflit entre la propriete (#1:#2) du MACRO_GROUPE (de nom #3) et celle (#4) du MESHGROUP (#5) associe a ce macro-groupe.") else : # pas de conflit de cette propriété, alors copie, meme si les propriétés sont les memes pour simplifier self.dictGroupes[nomGroupe][propriete] = obj.valeur[propriete].nom # sauvegarde du nom de la propriété du macro-groupe dans le meshgroup for propriete in ('CONDITION_LIMITE', ): # liste des propriétés définies à l'avance automatiques à copier du MACRO_GROUPE à chaque MESHGROUP de la liste if propriete in obj.valeur.keys(): # ce macro-groupe est associé à cette propriété if self.dictGroupes[nomGroupe].has_key(propriete) and self.dictGroupes[nomGroupe][propriete] != self.dictGroupes[nomGroupe][propriete]: # erreur, ce meshgroup a déjà une telle propriéte définie, différente - print u"ERREUR! Conflit entre la %s : %s du MACRO_GROUPE %s et celle : %s du MESHGROUP associé à ce macro-groupe." % \ + print u"ERREUR! Conflit entre la %s : %s du MACRO_GROUPE %s et celle : %s du MESHGROUP %s associé à ce macro-groupe." % \ ( propriete, obj.valeur[propriete], nomMacroGroupe, self.dictGroupes[nomGroupe][propriete], nomGroupe ) - raise ValueError, tr(u"ERREUR! Conflit entre la %s : %s du MACRO_GROUPE %s et celle : %s du MESHGROUP associé à ce macro-groupe." % \ - ( propriete, obj.valeur[propriete], nomMacroGroupe, self.dictGroupes[nomGroupe][propriete], nomGroupe )) + raise ValueError, propriete + ',' + obj.valeur[propriete].nom + ',' + nomMacroGroupe + ',' + self.dictGroupes[nomGroupe][propriete] + ',' + nomGroupe\ + + tr(" : conflit entre la propriete (#1:#2) du MACRO_GROUPE (de nom #3) et celle (#4) du MESHGROUP (#5) associe a ce macro-groupe.") else : # pas de conflit de cette propriété, alors copie, meme si les propriétés sont les memes pour simplifier self.dictGroupes[nomGroupe][propriete] = obj.valeur[propriete] # sauvegarde du nom de la propriété du macro-groupe dans le meshgroup except ValueError, err: @@ -763,22 +761,6 @@ class CARMEL3DTV0Generator(PythonGenerator): except ValueError, err: raise ValueError, str(err) - def generPOST_COMMANDS(self, obj): - if self.debug: - print "generation POST_COMMANDS obj.valeur = %s" % obj.valeur - - - - self.visu = False - self.post_global = False - if obj.valeur.has_key('GLOBAL'): - self.post_global = True - if obj.valeur.has_key('VISU'): - self.visu = True - self.visu_format=obj.valeur["VISU"]["VISU_Format"] - # self.visu_type=obj.valeur["VISU"]["VISU_Type"] - - #--------------------------------------------------------------------------------------- # traitement fichier PHYS #--------------------------------------------------------------------------------------- @@ -861,19 +843,14 @@ class CARMEL3DTV0Generator(PythonGenerator): self.carteChamp=obj.valeur["Cartes_des_champs"] self.carteCourantInduit=obj.valeur["Cartes_des_courants_induits"] self.carteForce=obj.valeur["Cartes_des_forces"] - self.perteJoule=obj.valeur["Pertes_Joules"] - self.fluxInducteur=obj.valeur["Flux_par_inducteur"] - self.courantInducteur=obj.valeur["Courants_par_inducteur"] - self.tensionInducteur=obj.valeur["Tensions_par_inducteur"] - self.energie=obj.valeur["Energie"] - self.ForceCouple=obj.valeur["Forces_et_couple"] - self.fluxSpire=obj.valeur["Flux_par_spire"] - self.fluxGroupe=obj.valeur["Flux_par_groupe"] - self.ddpElect=obj.valeur["Tensions_electriques"] - self.ddpMagn=obj.valeur["DDP_magnetiques"] - self.fluxMagn=obj.valeur["Flux_magnetiques"] - self.fluxJinduitTotal=obj.valeur["Flux_J_induit"] - self.potFlottant=obj.valeur["Potentiel_Flottant"] + if obj.valeur.has_key('GLOBAL'): + self.post_global = obj.valeur['GLOBAL'] + # sauvegarde de la liste au format correct, en supprimant les guillemets simples et doubles extra générés par Eficas + # car Eficas génère une liste ["'Energie'","'Flux par inducteur'","'Force et couple'"] enrichie + # à partir de l'instruction .comm correctement formatée : GLOBAL=('Energie','Flux par inducteur','Force et couple',) + for i in range(len(self.post_global)): + self.post_global[i] = self.post_global[i].replace("'", "") # suppression des guillement simples + self.post_global[i] = self.post_global[i].replace('"', "") # suppression des guillement doubles #------------------------------------- # Methodes utilitaires diff --git a/generator/generator_PSEN.py b/generator/generator_PSEN.py index d158fa53..30daec50 100755 --- a/generator/generator_PSEN.py +++ b/generator/generator_PSEN.py @@ -91,7 +91,7 @@ class PSENGenerator(DicoImbriqueGenerator): #---------------------------------------------------------------------------------------- def writeDefault(self,fn) : - fileDico = "PSEN/PSENconfig.py" + fileDico=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','PSEN_Eficas','PSEN','PSENconfig.py')) f = open( str(fileDico), 'wb') f.write( self.Entete + "Dico =" + str(self.Dico) ) f.close() -- 2.39.2