From 67c6dbd7cddf9193cadf188d02aa068c8807dff1 Mon Sep 17 00:00:00 2001 From: "pascale.noyret" Date: Tue, 12 Apr 2016 10:46:31 +0200 Subject: [PATCH] sauve intermediaire telemac --- InterfaceQT4/browser.py | 4 + InterfaceQT4/composimp.py | 2 +- InterfaceQT4/editor.py | 13 +- InterfaceQT4/feuille.py | 1 - InterfaceQT4/gereListe.py | 52 +- InterfaceQT4/monChoixCata.py | 2 +- InterfaceQT4/monChoixCommande.py | 2 +- InterfaceQT4/monWidgetCB.py | 18 +- InterfaceQT4/monWidgetCBSD.py | 22 +- InterfaceQT4/monWidgetCommande.py | 4 +- InterfaceQT4/monWidgetFormule.py | 11 + InterfaceQT4/monWidgetOptionnel.py | 8 +- InterfaceQT4/monWidgetPlusieursBase.py | 2 +- InterfaceQT4/monWidgetPlusieursInto.py | 4 +- InterfaceQT4/monWidgetPlusieursIntoOrdonne.py | 39 +- InterfaceQT4/monWidgetPlusieursPlie.py | 9 +- InterfaceQT4/monWidgetSimpTuple.py | 4 +- InterfaceQT4/readercata.py | 45 +- Telemac/aideAuxConvertisseurs.py | 93 ++++ Telemac/enumDicoTelemac.py | 508 ++++++++++++++++++ UiQT5/desWidgetCommande.ui | 28 +- UiQT5/desWidgetPlusieursInto.ui | 6 +- UiQT5/desWidgetPlusieursIntoOrdonne.ui | 22 +- UiQT5/desWidgetRadioButton.ui | 2 +- UiQT5/desWidgetSimpBool.ui | 7 +- UiQT5/eficas_en.ts | 4 + UiQT5/eficas_fr.ts | 290 +++++++++- UiQT5/makefile | 2 +- convert/convert_TELEMAC.py | 346 ++++++++---- generator/generator_TELEMAC.py | 18 +- 30 files changed, 1345 insertions(+), 223 deletions(-) create mode 100644 Telemac/aideAuxConvertisseurs.py create mode 100644 Telemac/enumDicoTelemac.py diff --git a/InterfaceQT4/browser.py b/InterfaceQT4/browser.py index 497a91af..ef81a985 100644 --- a/InterfaceQT4/browser.py +++ b/InterfaceQT4/browser.py @@ -338,14 +338,18 @@ class JDCNode(QTreeWidgetItem,GereRegles): return self.fenetre=self.getPanel() + #print "hhhhhhhhhh", self.editor.splitter.sizes() for indiceWidget in range(self.editor.widgetCentraleLayout.count()): widget=self.editor.widgetCentraleLayout.itemAt(indiceWidget) self.editor.widgetCentraleLayout.removeItem(widget) # ceinture et bretelle #print 'old fenetre = ',self.editor.fenetreCentraleAffichee + #print "iiiiiiiiiiiiiii", self.editor.splitter.sizes() if self.editor.fenetreCentraleAffichee != None : #print "j enleve ", self.editor.fenetreCentraleAffichee, self.editor.fenetreCentraleAffichee.node.item.nom self.editor.widgetCentraleLayout.removeWidget(self.editor.fenetreCentraleAffichee) + + self.editor.fenetreCentraleAffichee.setParent(None) self.editor.fenetreCentraleAffichee.close() self.editor.widgetCentraleLayout.addWidget(self.fenetre) diff --git a/InterfaceQT4/composimp.py b/InterfaceQT4/composimp.py index 91577193..720c6060 100644 --- a/InterfaceQT4/composimp.py +++ b/InterfaceQT4/composimp.py @@ -331,7 +331,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): encorevalide=self.valide_liste_partielle(item,listeActuelle) if encorevalide : listevalideliste.append(item) - print listevalideliste + #print listevalideliste return listevalideliste def get_liste_param_possible(self): diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py index 62597252..247ac6e6 100755 --- a/InterfaceQT4/editor.py +++ b/InterfaceQT4/editor.py @@ -1403,15 +1403,15 @@ class JDCEditor(Ui_baseWidget,QWidget): #------------------------------------ if self.inhibeSplitter : return if not hasattr(self,'splitter') : return - print "______________________" - print "saveSplitterSizes" - print self.splitterSizes if self.splitterSizes[2] != 0 : self.oldSizeWidgetOptionnel = self.splitterSizes[2] - for i in range(len(self.splitter.sizes())): + # print self.splitterSizes + #print self.splitter.sizes() + # PNPNPNPN parfoir self.splitter.sizes() a une longueur de 4... + nbAGarder=len(self.splitter.sizes()) + if nbAGarder > 3 : nbAGarder=3 + for i in range(nbAGarder): self.splitterSizes[i] = self.splitter.sizes()[i] self.splitter.widget(i).resizeEvent=self.saveSplitterSizes - print self.splitterSizes - print "______________________" #----------------------------------------- @@ -1422,7 +1422,6 @@ class JDCEditor(Ui_baseWidget,QWidget): if not(hasattr(self,'splitter')) : return newSizes=self.splitterSizes[:nbWigdet] self.splitter.setSizes(newSizes) - print self.splitterSizes self.inhibeSplitter = 0 #------------------------ diff --git a/InterfaceQT4/feuille.py b/InterfaceQT4/feuille.py index d314472a..dcd0c068 100644 --- a/InterfaceQT4/feuille.py +++ b/InterfaceQT4/feuille.py @@ -196,7 +196,6 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel): def reaffiche(self): #print "dans reaffiche de feuille", self.nom if self.editor.jdc.aReafficher==True : - #print " j appelle le reaffiche de parentQt" self.parentQt.reaffiche() #PN PN PN pas satisfaisant diff --git a/InterfaceQT4/gereListe.py b/InterfaceQT4/gereListe.py index 7f22797b..218d6339 100644 --- a/InterfaceQT4/gereListe.py +++ b/InterfaceQT4/gereListe.py @@ -24,7 +24,7 @@ import traceback from determine import monEnvQT5 if monEnvQT5: from PyQt5.QtWidgets import QLineEdit, QLabel - from PyQt5.QtCore import QEvent + from PyQt5.QtCore import QEvent, Qt from PyQt5.QtGui import QIcon else : from PyQt4.QtGui import * @@ -108,6 +108,11 @@ class GereListe: self.connect(self.RBMoins,SIGNAL("clicked()"),self.moinsPushed) self.connect(self.RBPlus,SIGNAL("clicked()"),self.plusPushed) self.connect(self.RBVoisListe,SIGNAL("clicked()"),self.voisListePushed) + if hasattr(self,'PBAlpha'): + self.connect(self.PBAlpha,SIGNAL("clicked()"),self.alphaPushed) + self.connect(self.PBCata,SIGNAL("clicked()"),self.cataPushed) + self.connect(self.PBFind,SIGNAL("clicked()"),self.findPushed) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEFiltreReturnPressed) def connecterSignaux(self): self.RBHaut.clicked.connect(self.hautPushed) @@ -115,6 +120,40 @@ class GereListe: self.RBMoins.clicked.connect(self.moinsPushed) self.RBPlus.clicked.connect(self.plusPushed) self.RBVoisListe.clicked.connect(self.voisListePushed) + if hasattr(self,'PBAlpha'): + self.PBCata.clicked.connect(self.cataPushed) + self.PBAlpha.clicked.connect(self.alphaPushed) + self.PBFind.clicked.connect(self.findPushed) + self.LEFiltre.returnPressed.connect(self.LEFiltreReturnPressed) + + def filtreListe(self): + print self.alpha + l=[] + if self.filtre != "" : + for i in self.listeAAfficher : + if i.find(self.filtre) == 0 :l.append(i) + self.listeAAfficher=l + if self.alpha : self.listeAAfficher.sort() + + def LEFiltreReturnPressed(self): + self.filtre= self.LEFiltre.text() + self.prepareListeResultat() + + def findPushed(self): + self.filtre= self.LEFiltre.text() + self.prepareListeResultat() + + def alphaPushed(self): + print "alphaPushed" ,self.alpha + if self.alpha == 1 : return + print "lllllllmmmmmmmmmmmmmm" + self.alpha=1 + self.prepareListeResultat() + + def cataPushed(self): + if self.alpha == 0 : return + self.alpha=0 + self.prepareListeResultat() def hautPushed(self): if self.NumLineEditEnCours == 1 : return @@ -172,11 +211,20 @@ class GereListe: def plusPushed(self): if self.indexDernierLabel == self.monSimpDef.max: - self.editor.affiche_infos('nb max de valeurs : '+str(self.monSimpDef.max)+' atteint',Qt.red) + if len(self.listeValeursCourantes) < self.monSimpDef.max : self.chercheLigneVide() + else : self.editor.affiche_infos('nb max de valeurs : '+str(self.monSimpDef.max)+' atteint',Qt.red) return self.ajoutLineEdit() self.descendLesLignes() + def chercheLigneVide(self): + for i in range(self.indexDernierLabel) : + nomLineEdit=self.nomLine+str(i+1) + courant=getattr(self,nomLineEdit) + valeur=courant.getValeur() + if valeur=="" : courant.setFocus(7);return + + def descendLesLignes(self): if self.NumLineEditEnCours==self.indexDernierLabel : return nomLineEdit=self.nomLine+str(self.NumLineEditEnCours+1) diff --git a/InterfaceQT4/monChoixCata.py b/InterfaceQT4/monChoixCata.py index 7527606f..39a47a16 100644 --- a/InterfaceQT4/monChoixCata.py +++ b/InterfaceQT4/monChoixCata.py @@ -37,7 +37,7 @@ class MonChoixCata(Ui_DChoixCata,QDialog): discrètes """ def __init__(self, QWparent, listeCata, title = None): - QtGui.QDialog.__init__(self, QWparent) + QDialog.__init__(self, QWparent) self.setModal(True) self.setupUi(self) self.CBChoixCata.addItems(listeCata) diff --git a/InterfaceQT4/monChoixCommande.py b/InterfaceQT4/monChoixCommande.py index 5f887cce..7c3fc479 100644 --- a/InterfaceQT4/monChoixCommande.py +++ b/InterfaceQT4/monChoixCommande.py @@ -90,7 +90,7 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget): #self.editor.labelCommentaire.setText("") if self.editor.widgetOptionnel!= None : - self.editor.widgetOptionnel.close() + self.editor.fermeOptionnel() self.editor.widgetOptionnel=None self.name=None diff --git a/InterfaceQT4/monWidgetCB.py b/InterfaceQT4/monWidgetCB.py index 1468c3a6..796ffded 100644 --- a/InterfaceQT4/monWidgetCB.py +++ b/InterfaceQT4/monWidgetCB.py @@ -28,6 +28,13 @@ from desWidgetCB import Ui_WidgetCB from politiquesValidation import PolitiqueUnique from qtSaisie import SaisieValeur +from determine import monEnvQT5 +if monEnvQT5: + from PyQt5.QtWidgets import QComboBox, QCompleter +else : + from PyQt4.QtGui import * + from PyQt4.QtCore import * + class MonWidgetCBCommun (Ui_WidgetCB,Feuille): @@ -36,7 +43,10 @@ class MonWidgetCBCommun (Ui_WidgetCB,Feuille): self.politique=PolitiqueUnique(self.node,self.editor) self.determineChoix() self.setValeursApresBouton() - self.connect(self.CBChoix,SIGNAL("currentIndexChanged(int)"),self.ChoixSaisi) + if monEnvQT5: + self.CBChoix.currentIndexChanged.connect(self.ChoixSaisi) + else : + self.connect(self.CBChoix,SIGNAL("currentIndexChanged(int)"),self.ChoixSaisi) #self.CBChoix.lineEdit().setText(tr("Select")) self.parentQt.commandesLayout.insertWidget(-1,self) self.maCommande.listeAffichageWidget.append(self.CBChoix) @@ -53,10 +63,12 @@ class MonWidgetCBCommun (Ui_WidgetCB,Feuille): self.CBChoix.setCurrentIndex(self.CBChoix.findText(valeur)) def determineChoix(self): - listeChoix=QStringList() + if monEnvQT5: listeChoix=[] + else : listeChoix=QStringList() for choix in self.maListeDeValeur: if not(type(choix) in types.StringTypes) : choix=str(choix) - listeChoix< 400 : self.setMinimumHeight(400) else : self.setMinimumHeight(len(self.listeAAfficher)*30) @@ -105,14 +110,14 @@ class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,Gere def setValeurs(self): - listeValeursCourantes=self.node.item.GetListeValeurs() + self.listeValeursCourantes=self.node.item.GetListeValeurs() if self.monSimpDef.max == "**" : aConstruire=7 else : aConstruire=self.monSimpDef.max - if len(listeValeursCourantes) > aConstruire : aConstruire=len(listeValeursCourantes) + if len(self.listeValeursCourantes) > aConstruire : aConstruire=len(self.listeValeursCourantes) for i in range(1,aConstruire+1): self.ajoutLEResultat(i) self.indexDernierLabel=aConstruire index=1 - for val in listeValeursCourantes : + for val in self.listeValeursCourantes : nomLE="LEResultat"+str(index) courant=getattr(self,nomLE) courant.setText(str(val)) @@ -170,13 +175,13 @@ class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,Gere if liste ==[] : return listeVal=[] - listeValeursCourantes=self.node.item.GetListeValeurs() + self.listeValeursCourantes=self.node.item.GetListeValeurs() min,max = self.node.item.GetMinMax() - if len(listeValeursCourantes) +1 > max : + if len(self.listeValeursCourantes) +1 > max : self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red) return else : - self.editor.affiche_infos(tr("")) + self.editor.affiche_infos("") affiche=False for i in range(1,self.indexDernierLabel+1): @@ -212,9 +217,9 @@ class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,Gere validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[]) - listeValeursCourantes=self.node.item.GetListeValeurs() + self.listeValeursCourantes=self.node.item.GetListeValeurs() min,max = self.node.item.GetMinMax() - if len(listeValeursCourantes) < min : + if len(self.listeValeursCourantes) < min : self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red) else : self.editor.affiche_infos("") diff --git a/InterfaceQT4/monWidgetPlusieursPlie.py b/InterfaceQT4/monWidgetPlusieursPlie.py index 1a9a43f5..493ed2b4 100644 --- a/InterfaceQT4/monWidgetPlusieursPlie.py +++ b/InterfaceQT4/monWidgetPlusieursPlie.py @@ -23,11 +23,12 @@ import string,types,os,sys # Modules Eficas from determine import monEnvQT5 if monEnvQT5: - from PyQt5.QtWidgets import Qicon, QScrollbar, QFrame - from PyQt5.QtCore import QTimer, QSize, QT + from PyQt5.QtWidgets import QFrame + from PyQt5.QtCore import QTimer, QSize, Qt + from PyQt5.QtGui import QIcon else : from PyQt4.QtGui import * - from PyQt4.QtCore import + from PyQt4.QtCore import * from Extensions.i18n import tr @@ -45,7 +46,7 @@ class MonWidgetPlusieursPlie (Ui_WidgetPlusieursPlie,Feuille): self.maCommande.listeAffichageWidget.append(self.lineEditVal) if monEnvQT5 : - self.BVisuListe.clicked(self.selectWidgetDeplie) + self.BVisuListe.clicked.connect(self.selectWidgetDeplie) else : self.connect(self.BVisuListe,SIGNAL("clicked()"), self.selectWidgetDeplie) diff --git a/InterfaceQT4/monWidgetSimpTuple.py b/InterfaceQT4/monWidgetSimpTuple.py index a4e42f8e..21212528 100644 --- a/InterfaceQT4/monWidgetSimpTuple.py +++ b/InterfaceQT4/monWidgetSimpTuple.py @@ -20,6 +20,7 @@ # Modules Python import string,types,os +from determine import monEnvQT5 if monEnvQT5: from PyQt5.QtCore import Qt else : @@ -49,7 +50,8 @@ class MonWidgetSimpTuple(Feuille): courant=getattr(self,nomLineEdit) if valeur !=None: courant.setText(str(valeur[i])) setattr(self,nomLineEdit,courant) - self.connect(courant,SIGNAL("returnPressed()"),self.valeursPressed) + if monEnvQT5: courant.returnPressed.connect(self.valeursPressed) + else : self.connect(courant,SIGNAL("returnPressed()"),self.valeursPressed) def valeursPressed(self): aLeFocus=self.focusWidget() diff --git a/InterfaceQT4/readercata.py b/InterfaceQT4/readercata.py index 24782b2e..70783a58 100644 --- a/InterfaceQT4/readercata.py +++ b/InterfaceQT4/readercata.py @@ -44,7 +44,7 @@ from Extensions.eficas_exception import EficasException from determine import monEnvQT5 if monEnvQT5 : - from PyQt5.QtWidgets import QMessageBox + from PyQt5.QtWidgets import QMessageBox, QApplication, QDialog else : from PyQt4.QtGui import * @@ -277,7 +277,7 @@ class READERCATA: lab=str(self.VERSION_EFICAS)+" " lab+=tr(" pour ") - lab+=QString(self.code) + lab+=str(self.code) lab+=tr(" avec le catalogue ") if ret == QDialog.Accepted: cata = cata_choice_list[widgetChoix.CBChoixCata.currentIndex()] @@ -312,22 +312,43 @@ class READERCATA: if dict_clef_docu.has_key(oper.nom): oper.docu=dict_clef_docu[oper.nom] - def cree_dico_inverse(self): self.dicoInverse={} - self.dico={} + self.dicoMC={} listeEtapes=self.cata[0].JdC.commandes for e in self.cata[0].JdC.commandes: + #for e in (self.cata[0].JdC.commandes[0],): + #print e.nom self.traite_entite(e) - #print self.dicoInverse.keys() #for e in self.cata[0].JdC.commandes: - # print "___________", e. nom , '__________________' # self.cree_rubrique(e,self.dico,0) - + #print self.dicoInverse + + from Extensions import localisation + app=QApplication + # tres dommage A Revoir + localisation.localise(app,"fr") + self.dicoInverseFrancais={} + self.dicoFrancaisAnglais={} + self.dicoAnglaisFrancais={} + for k in self.dicoInverse.keys(): + listefr=[] + for nom, obj in self.dicoInverse[k] : + listefr.append((tr(nom),obj)) + self.dicoFrancaisAnglais[tr(nom)]=nom + self.dicoAnglaisFrancais[nom]=tr(nom) + self.dicoInverseFrancais[tr(k)]=listefr + #print tr(k),listefr + if self.appliEficas.langue=="ang" : localisation.localise(app,"en") + def traite_entite(self,e): + #print "_______________" + #print e + #print e.nom boolIn=0 for (nomFils, fils) in e.entites.items() : + self.dicoMC[nomFils]=fils self.traite_entite(fils) boolIn=1 if boolIn==0 : @@ -342,14 +363,12 @@ class READERCATA: def cree_rubrique(self,e,dico, niveau): from Accas import A_BLOC decale=niveau*" " - if niveau != 0 : - if isinstance(e,A_BLOC.BLOC): print decale, e.condition - else : print decale, e. nom + #if niveau != 0 : + # if isinstance(e,A_BLOC.BLOC): print decale, e.condition + # else : print decale, e. nom for (nom, fils) in e.entites.items() : if fils.entites.items() != [] : self.cree_rubrique(fils,dico,niveau+1) - else : print (niveau+1)*" ", nom + #else : print (niveau+1)*" ", nom - - diff --git a/Telemac/aideAuxConvertisseurs.py b/Telemac/aideAuxConvertisseurs.py new file mode 100644 index 00000000..a7d24efc --- /dev/null +++ b/Telemac/aideAuxConvertisseurs.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2007-2013 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +"""Ce module contient le plugin generateur de fichier au format Code_Carmel3D pour EFICAS. +""" + +listeSupprime = ( 'DAY', 'MONTH', 'YEAR', 'HOUR', 'MINUTE', 'SECOND', 'CONSIGNE' + 'LIMIT VALUES H', 'LIMIT VALUES U', 'LIMIT VALUES V', 'LIMIT VALUES T', + 'SISYPHE', 'TOMAWAC', 'DELWAQ', + 'ADVECTION U AND V', 'ADVECTION H', + 'ADVECTION TRACERS', 'ADVECTION K AND EPSILON', + 'TOLERANCE FOR H', 'TOLERANCE FOR U', 'TOLERANCE FOR V', 'TOLERANCE FOR COUT', + 'SUPG OPTION U AND V', 'SUPG OPTION H', 'SUPG OPTION TRACERS', 'SUPG OPTION K AND EPSILON', + 'UPWIND COEFFICIENTS Of U AND V', 'UPWIND COEFFICIENTS OF H', +) + +DicoAglomere= { +'LIMIT VALUES' : ( 'Limit_Values_H', 'Limit_Values_U', 'Limit_Values_V', 'Limit_Values_T'), +'COUPLING WITH' : ( 'Sisyphe', 'Tomawac', 'Delwaq'), +'TYPE OF ADVECTION' : ( 'Advection_U_And_V', 'Advection_H', 'Advection_Tracers','Advection_K_And_Epsilon'), +'TOLERANCE' : ( 'Tolerance_For_H', 'Tolerance_For_U', 'Tolerance_For_V', 'Tolerance_For_cout',), +'SUPG OPTION' : ( 'Supg_Option_U_And_V', 'Supg_Option_H', 'Supg_Option_Tracers', 'Supg_Option_K_And_Epsilon',), +'UPWIND COEFFICIENTS' : ( 'Upwind_Coefficients_Of_U_And_V', 'Upwind_Coefficients_Of_H', ), +} + +DicoEficasToCas= { + 'C U PRECONDITIONING' : 'C-U PRECONDITIONING' , + 'INFORMATION ABOUT K EPSILON MODEL' : 'INFORMATION ABOUT K-EPSILON MODEL' , + 'MANNING DEFAULT VALUE FOR COLEBROOK WHITE LAW' : 'MANNING DEFAULT VALUE FOR COLEBROOK-WHITE LAW' , + 'MASS BALANCE' : 'MASS-BALANCE' , + 'MASS LUMPING FOR WEAK CHARACTERISTICS' : 'MASS-LUMPING FOR WEAK CHARACTERISTICS', + 'MASS LUMPING ON H' : 'MASS-LUMPING ON H' , + 'MASS LUMPING ON TRACERS' : 'MASS-LUMPING ON TRACERS' , + 'MASS LUMPING ON VELOCITY' : 'MASS-LUMPING ON VELOCITY' , + 'MATRIX VECTOR PRODUCT' : 'MATRIX-VECTOR PRODUCT' , + 'NON DIMENSIONAL DISPERSION COEFFICIENTS' : 'NON-DIMENSIONAL DISPERSION COEFFICIENTS' , + 'NON SUBMERGED VEGETATION FRICTION' : 'NON-SUBMERGED VEGETATION FRICTION' , + 'NUMBER OF SUB ITERATIONS FOR NON LINEARITIES' : 'NUMBER OF SUB-ITERATIONS FOR NON-LINEARITIES' , + 'OPTION FOR THE SOLVER FOR K EPSILON MODEL' : 'OPTION FOR THE SOLVER FOR K-EPSILON MODEL' , + 'PRECONDITIONING FOR K EPSILON MODEL' : 'PRECONDITIONING FOR K-EPSILON MODEL' , + 'SOLVER FOR K EPSILON MODEL' : 'SOLVER FOR K-EPSILON MODEL' , + 'STAGE DISCHARGE CURVES FILE' : 'STAGE-DISCHARGE CURVES FILE' , + 'STAGE DISCHARGE CURVES' : 'STAGE-DISCHARGE CURVES' , + 'TIME STEP REDUCTION FOR K EPSILON MODEL' : 'TIME STEP REDUCTION FOR K-EPSILON MODEL' , + 'VARIABLE TIME STEP' : 'VARIABLE TIME-STEP' , + +} + +DicoCasToEficas = {} +for k in DicoCasToEficas.keys() : DicoCasToEficas[DicoEficasToCas[k]]=k + + +DicoFrancaisAvecApostrophe= { + "Coordonnees_De_L_Origine" : "Coordonnees_De_L'origine", + "Modele_De_Nappes_D_Hydrocarbures" : "Modele_De_Nappes_D'hydrocarbures", + "Maximum_D_Iterations_Pour_La_Diffusion_Des_Traceurs" : "Maximum_D'iterations_Pour_La_Diffusion_Des_Traceurs", + "Coefficient_D_Implicitation_Des_Traceurs" : "Coefficient_D'implicitation_Des_Traceurs", + "Coefficient_D_Influence_Du_Vent" : "Coefficient_D'influence_Du_Vent", + "Date_De_L_Origine_Des_Temps" : "Date_De_L'origine_Des_Temps", + "Elements_Masques_Par_L_Utilisateur" : "Elements_Masques_Par_L'utilisateur", + "Maximum_D_Iterations_Pour_L_Identification" : "Maximum_D'iterations_Pour_L'identification", + "Heure_De_L_Origine_Des_Temps" : "Heure_De_L'origine_Des_Temps", + "Methode_D_Identification" : "Methode_D'identification", + "Masse_Volumique_De_L_Eau" : "Masse_Volumique_De_L'eau", + "Coefficient_D_Integration_En_Temps_De_Newmark" : "Coefficient_D'integration_En_Temps_De_Newmark", + "Bornes_En_Temps_Pour_L_Analyse_De_Fourier" : "Bornes_En_Temps_Pour_L'analyse_De_Fourier", + "Periodes_D_Analyse_De_Fourier" : "Periodes_D'analyse_De_Fourier", + "Precisions_Pour_L_Identification" : "Precisions_Pour_L'identification", + "Maximum_D_Iterations_Pour_K_Et_Epsilon" : "Maximum_D'iterations_Pour_K_Et_Epsilon", + "Maximum_D_Iterations_Pour_Les_Schemas_De_Convection" : "Maximum_D'iterations_Pour_Les_Schemas_De_Convection", + "Numero_De_L_Enregistrement_Dans_Le_Fichier_De_Houle" : "Numero_De_L'enregistrement_Dans_Le_Fichier_De_Houle", + "Criteres_D_Arret" : "Criteres_D'arret", +} + +ListeSupprimeCasToEficas = ('Validation','Parallel_Processors') +ListeCalculEficasToCas = ('Validation',) +ListeCalculCasToEficas = ('Option_De_Supg', 'Forme_De_La_Convection') diff --git a/Telemac/enumDicoTelemac.py b/Telemac/enumDicoTelemac.py new file mode 100644 index 00000000..50b3ab80 --- /dev/null +++ b/Telemac/enumDicoTelemac.py @@ -0,0 +1,508 @@ +DicoEnumCasEn={ +'PSI SCHEME OPTION' : { + 1 : "Explicit", + 2 : "Predictor-corrector" + }, + +'TYPE OF ADVECTION' : { + 1 : "Characteristics", + 2 : "SUPG", + 3 : "Conservative N-scheme", + 4 : "Conservative N-scheme", + 5 : "Conservative PSI-scheme", + 6 : "Non conservative PSI-scheme", + 7 : "Implicit non conservative N-scheme", + 13 : "Edge-based N-scheme", + 14 : "Edge-based N-scheme" + }, + +'GEOMETRY FILE FORMAT' : { + 'SERAFIN': 'Serafin', + 'MED': 'MED', + 'SERAFIND': 'SerafinD', + }, + +'PREVIOUS COMPUTATION FILE FORMAT' : { + 'SERAFIN': 'Serafin', + 'MED': 'MED', + 'SERAFIND': 'SerafinD', + }, + +'REFERENCE FILE FORMAT' : { + 'SERAFIN': 'Serafin', + 'MED': 'MED', + 'SERAFIND': 'SerafinD', + }, + +'RESULTS FILE FORMAT' : { + 'SERAFIN': 'Serafin', + 'MED': 'MED', + 'SERAFIND': 'SerafinD', + }, + +'PRECONDITIONING' : { + 0 : "No preconditioning", + 2 : "Diagonal", + 3 : "Diagonal condensee", + 7 : "Crout", + 11 : "Gauss-Seidel", + 14 : "Diagonal and Crout", + 21 : "Diagonal condensed and Crout" + }, + +'INITIAL GUESS FOR H' : { + 1 : "Previous", + 0 : "Zero", + 2 : "Extrapolation" + }, + +'LAW OF BOTTOM FRICTION' : { + 0 : "No friction", + 1 : "Haaland", + 2 : "Chezy", + 3 : "Strickler", + 4 : "Manning", + 5 : "Nikuradse" + }, + +'SOLVER FOR DIFFUSION OF TRACERS' : { + 1 : "Conjugate gradient", + 2 : "Conjugate residual", + 3 : "Conjugate gradient on a normal equation", + 4 : "Minimum error", + 5 : "Squared conjugate gradient", + 6 : "CGSTAB", + 7 : "GMRES", + 8 : "Direct" + }, + +'SOLVER' : { + 3 : "Conjugate gradient on a normal equation", + 1 : "Conjugate gradient", + 2 : "Conjugate residual", + 4 : "Minimum error", + 6 : "CGSTAB", + 7 : "GMRES", + 8 : "Direct" + }, + +'PRECONDITIONING FOR DIFFUSION OF TRACERS' : { + 2 : "Diagonal", + 0 : "No preconditioning", + 3 : "Diagonal condensed", + 7 : "Crout", + 14 : "Diagonal and Crout", + 21 : "Diagonal condensed and Crout" + }, + +'SOLVER FOR K-EPSILON MODEL' : { + 1 : "Conjugate gradient", + 2 : "Conjugate residuals", + 3 : "Conjugate gradient on normal equation", + 4 : "Minimum error", + 5 : "Conjugate gradient squared", + 6 : "Conjugate gradient squared stabilised (CGSTAB)", + 7 : "GMRES", + 8 : "Direct" + }, + +'PRECONDITIONING FOR K-EPSILON MODEL' : { + 2 : "Diagonal", + 0 : "No preconditioning", + 3 : "Diagonal condensed", + 7 : "Crout", + 14 : "Diagonal and Crout", + 21 : "Diagonal condensed and Crout" + }, + +'TURBULENCE MODEL FOR SOLID BOUNDARIES' : { + 1 : "Smooth", + 2 : "Rough" + }, + +'FRICTION COEFFICIENT' : { + 1 : "Linear coefficient", + 2 : "Chezy coefficient", + 3 : "Strickler coefficient", + 4 : "Manning coefficient", + 5 : "Nikuradse grain size", + }, + + +'TURBULENCE MODEL' : { + 1 : "Constant viscosity", + 2 : "Elder", + 3 : "K-Epsilon Model", + 4 : "Smagorinski", + }, + + + +'ROUGHNESS COEFFICIENT OF BOUNDARIES' : { + 1 : "Non programme", + 2 : "Coefficient de Chezy", + 3 : "Coefficient de Strickler", + 4 : "Coefficient de Manning", + 5 : "Hauteur de rugosite de Nikuradse", + }, + + +'VARIABLES FOR GRAPHIC PRINTOUTS' : { + "U" : "Velocity along X axis (m/s)", + "V" : "Velocity along Y axis (m/s)", + "C" : "Wave celerity (m/s)", + "H" : "Water depth (m)", + "S" : "Free surface elevation (m)", + "B" : "Bottom elevation (m)", + "F" : "Froude number ", + "Q" : "Scalar flowrate of fluid (m2/s)", + "T1" : "Tracer 1 etc. ", + "K" : "Turbulent kinetic energy in k-epsilon model (J/kg)", + "E" : "Dissipation of turbulent energy (W/kg)", + "D" : "Turbulent viscosity of k-epsilon model (m2/s)", + "I" : "Flowrate along X axis (m2/s)", + "J" : "Flowrate along Y axis (m2/s)", + "M" : "Scalar velocity (m/s)", + "X" : "Wind along X axis (m/s)", + "Y" : "Wind along Y axis (m/s)", + "P" : "Air pressure (Pa)", + "W" : "Friction coefficient", + "A" : "Drift along X (m)", + "G" : "Drift along Y (m)", + "L" : "Courant number", + "N" : "Supplementary variable N ", + "O" : "Supplementary variable O ", + "R" : "Supplementary variable R ", + "Z" : "Supplementary variable Z ", + "MAXZ" : "Maximum elevation", + "TMXZ" : "Time of maximum elevation ", + "MAXV" : "Maximum velocity", + "TMXV" : "Time of maximum velocity", + "US" : "Friction velocity " + }, + +'VARIABLES TO BE PRINTED' : { + "U" : "Velocity along X axis (m/s)", + "V" : "Velocity along Y axis (m/s)", + "C" : "Wave celerity (m/s)", + "H" : "Water depth (m)", + "S" : "Free surface elevation (m)", + "B" : "Bottom elevation (m)", + "F" : "Froude number", + "Q" : "Scalar flowrate of fluid (m2/s)", + "T" : "Tracer", + "K" : "Turbulent kinetic energy in k-epsilon model (J/kg)", + "E" : "Dissipation of turbulent energy (W/kg)", + "D" : "Turbulent viscosity of k-epsilon model (m2/s)", + "I" : "Flowrate along X axis (m2/s)", + "J" : "Flowrate along Y axis (m2/s)", + "M" : "Scalar velocity (m/s)", + "X" : "Wind along X axis (m/s)", + "Y" : "Wind along Y axis (m/s)", + "P" : "Air pressure (Pa)", + "W" : "Friction coefficient", + "A" : "Drift along X (m)", + "G" : "Drift along Y (m)", + "L" : "Nombre de courants ", + "N" : "Supplementary variable N", + "O" : "Supplementary variable O", + "R" : "Supplementary variable R", + "Z" : "Supplementary variable Z" + }, + + +'INITIAL CONDITIONS' : { + "ZERO ELEVATION" : "Zero elevation", + "CONSTANT ELEVATION" : "Constant elevation", + "ZERO DEPTH" : "Zero depth", + "CONSTANT DEPTH" : "Constant depth", + "SPECIAL" : "Special" , + "TPXO SATELLITE ALTIMETRY" : "TPXO satellite altimetry", + }, + +'SUPG_OPTION_U_AND_V' : { + 0 : "No upwinding", + 1 : "Classical SUPG", + 2 : "Modified SUPG" + }, + +'OPTION FOR THE TREATMENT OF TIDAL FLATS' : { + 1 : "Equations solved everywhere with correction on tidal flats", + 2 : "Dry elements frozen", + 3 : "1 but with porosity (defina method)", + }, + +'INITIAL GUESS FOR U' : { + 0 : "Zero", + 1 : "Previous", + 2 : "Extrapolation", + }, + +'DISCRETIZATIONS IN SPACE' : { + 11 : "Linear", + 12 : "Quasi-bubble", + 13 : "Quadratic", + }, + +'MATRIX VECTOR PRODUCT' : { + 1 : "Classic", + 2 : "Frontal" + }, + +'MATRIX STORAGE' : { + 1 : "Classical EBE" , + 3 : "Edge-based storage" + }, +'OPTION FOR LIQUID BOUNDARIES' : { + 1 : "Classical boundary conditions", + 2 : "Thompson method based on characteristics", + }, + +'TREATMENT OF THE LINEAR SYSTEM' : { + 1 : "Coupled", + 2 : "Wave equation" +}, + +'EQUATIONS' : { + "SAINT-VENANT EF" : "Saint-Venant EF", + "SAINT-VENANT VF" : "Saint-Venant VF", + "BOUSSINESQ" : "Boussinesq" + }, + +'VELOCITY PROFILES' : { + 1 : "Constant normal profile", + 2 : "U and V given in the conlim file", + 3 : "Normal velocity given in ubor in the conlim file", + 4 : "Velocity proportional to square root of depth", + 5 : "Velocity proportional to square root of depth, variant", + 5 : "QRT(depth) profile, variant", + }, + +'OPTION FOR THE DIFFUSION OF TRACERS' : { + 1 : "Div( nu grad(T) )", + 2 : "1/h Div ( h nu grad(T)" , + }, + +'OPTION FOR THE DIFFUSION OF VELOCITIES' : { + 1 : "Normal", + 2 : "Dirac" + }, + + +'PARAMETER ESTIMATION' : { + "FRICTION" : "Friction", + "FROTTEMENT" : "Frottement", + "STEADY" : "Steady" + }, + + +'IDENTIFICATION METHOD' : { + 0 : "List of tests", + 1 : "Gradient simple", + 2 : "Conj gradient", + 3 : "Lagrange interp." + }, + + +'FINITE VOLUME SCHEME' : { + 0 : "Roe scheme", + 1 : "kinetic order 1", + 2 : "kinetic order 2", + 3 : "Zokagoa scheme order 1", + 4 : "Tchamen scheme order 1", + 5 : "HLLC scheme order 1", + 6 : "WAF scheme order 2" + }, + +'STAGE-DISCHARGE CURVES' : { + 0 : "No one", + 1 : "Z(Q)", + 2 : "Q(Z)" + }, + +'TREATMENT OF NEGATIVE DEPTHS' : { + 0 : "No treatment", + 1 : "Smoothing", + 2 : "Flux control", + }, + +'DEPTH IN FRICTION TERMS' : { + 1 : "Nodal", + 2 : "Average", + }, + +'LAW OF FRICTION ON LATERAL BOUNDARIES' : { + 0 : "No friction", + 1 : "Haaland", + 2 : "Chezy", + 3 : "Strickler", + 4 : "Manning", + 5 : "Nikuradse", + 6 : "Log law", + 7 : "Colebrook-white" + }, + + +'TREATMENT OF FLUXES AT THE BOUNDARIES': { + 1 : "Priority to prescribed values", + 2 : "Priority to fluxes", + }, + +'OPTION FOR TIDAL BOUNDARY CONDITIONS': { + 0 : "No tide", + 1 : "Real tide (recommended methodology)", + 2 : "Astronomical tide", + 3 : "Mean spring tide", + 4 : "Mean tide", + 5 : "Mean neap tide", + 6 : "Astronomical neap tide", + 7 : "Real tide (methodology before 2010)" + }, + +'OPTION FOR TSUNAMI GENERATION': { + 0 : "No Tsunami", + 1 : "Tsunami generated on the basis of the Okada model 1992" + }, + +#'PHYSICAL CHARACTERISTICS OF THE TSUNAMI': { +#AIDE1 : ' +# Physical characteristics of the chosen Tsunami model: +# - the focal depth (HH), +# - the fault length (L), +# - the fault width (W) +# - the dislocation (D), +# - the strike direction (TH), +# - the dip angle (DL), +# - the slip (RD), +# - the epicentre latitude (Y0) and +# - the epicentre longitude (X0) +# - the ellipse ( WxL ) area of influence +# }, + +'TIDAL DATA BASE': { + 1 : "JMJ", + 2 : "TPXO", + 3 : "Miscellaneous (LEGOS-NEA, FES20XX, PREVIMER...)" + }, + +'GEOGRAPHIC SYSTEM': { + 0 : "Defined by user", + 1 : "WGS84 longitude/latitude in real degrees", + 2 : "WGS84 northern UTM", + 3 : "WGS84 southern UTM", + 4 : "Lambert", + 5 : "Mercator" + }, + + +'ZONE NUMBER IN GEOGRAPHIC SYSTEM': { + 1 : "Lambert 1 north", + 2 : "Lambert 2 center", + 3 : "Lambert 3 south", + 4 : "Lambert 4 corsica", + 22 : "Lambert 2 extended", + 30 : "UTM zone, E.G." + }, + + +'LAW OF TRACERS DEGRADATION': { + 0 : "No degradation", + 1 : "F(T90) law" + }, + +'SPATIAL PROJECTION TYPE': { + 1 : "Cartesian, not georeferenced", + 2 : "Mercator", + 3 : "Latitude longitude" + }, + +'ALGAE TYPE': { + 1 : "Sphere", + 2 : "Iridaea flaccida (close to ulva)", + 3 : "Pelvetiopsis limitata", + 4 : "Gigartina leptorhynchos" + }, + +'OPTION FOR CHARACTERISTICS': { + 1 : "Strong", + 2 : "Weak" + }, + +'STOCHASTIC DIFFUSION MODEL' : { + 0 : "No model", + 2 : "??" + }, + +'NUMBER OF GAUSS POINTS FOR WEAK CHARACTERISTICS' : { + 1 : "1 point", + 3 : "3 points", + 6 : "6 points" + }, + +'TYPE OF WEIRS': { + 1 : "Horizontal with same number of nodes upstream/downstream (Historical solution with bord)", + 2 : "General (New solution with sources points)" + }, + +'SCHEME FOR ADVECTION OF VELOCITIES': { + 1 : "Characteristics", + 2 : "Explicit + SUPG", + 3 : "Explicit leo postma", + 4 : "Explicit + murd scheme N", + 5 : "Explicit + murd scheme PSI", + 13 : "N-scheme for tidal flats", + 14 : "N-scheme for tidal flats" + }, + +'SCHEME FOR ADVECTION OF TRACERS': { + 0 : "No advection", + 1 : "Characteristics", + 2 : "Explicit + SUPG", + 3 : "Explicit leo postma", + 4 : "Explicit + murd scheme N", + 5 : "Explicit + murd scheme PSI", + 13 : "Leo postma for tidal flats", + 14 : "N-scheme for tidal flats" + }, + + +'SCHEME FOR ADVECTION OF K-EPSILON': { + 0 : "No advection", + 1 : "Characteristics", + 2 : "Explicit + SUPG", + 3 : "Explicit leo postma", + 4 : "Explicit + murd scheme N", + 5 : "Explicit + murd scheme PSI", + 13 : "Leo postma for tidal flats", + 14 : "N-scheme for tidal flats" + }, + + +'SCHEME OPTION FOR ADVECTION OF TRACERS': { + 1 : "explicit", + 2 : "predictor-corrector", + }, + + +'SCHEME OPTION FOR ADVECTION OF VELOCITIES': { + 1 : "Explicit", + 2 : "Predictor-corrector", + }, + +'SCHEME OPTION FOR ADVECTION OF K-EPSILON': { + 1 : "Explicit", + 2 : "Predictor-corrector", + }, + +'OPTION FOR WIND': { + 0 : "No wind", + 1 : "Constant in time and space", + 2 : "Variable in time and (constant in space)", + 3 : "Variable in time and space" + }, + +'NEWMARK TIME INTEGRATION COEFFICIENT' :{ + 1. : "Euler explicit", + 0.5 : "order 2 in time", + }, +} diff --git a/UiQT5/desWidgetCommande.ui b/UiQT5/desWidgetCommande.ui index 3e4e3ae0..ac31d2d3 100644 --- a/UiQT5/desWidgetCommande.ui +++ b/UiQT5/desWidgetCommande.ui @@ -671,18 +671,6 @@ border-radius : 12px - - 0 - - - 0 - - - 0 - - - 0 - @@ -690,13 +678,24 @@ border-radius : 12px + + + + Qt::Vertical + + + + 20 + 5 + + + + - scrollAreaCommandes - frameAffichage qPixmapFromMimeSource @@ -713,7 +712,6 @@ border-radius : 12px - scrollAreaCommandes LENom diff --git a/UiQT5/desWidgetPlusieursInto.ui b/UiQT5/desWidgetPlusieursInto.ui index 39fae3b5..0b3e5099 100644 --- a/UiQT5/desWidgetPlusieursInto.ui +++ b/UiQT5/desWidgetPlusieursInto.ui @@ -279,7 +279,7 @@ 0 0 300 - 99 + 122 @@ -301,14 +301,14 @@ - + Catalogue - + Alpha diff --git a/UiQT5/desWidgetPlusieursIntoOrdonne.ui b/UiQT5/desWidgetPlusieursIntoOrdonne.ui index ad6364e8..999b9620 100644 --- a/UiQT5/desWidgetPlusieursIntoOrdonne.ui +++ b/UiQT5/desWidgetPlusieursIntoOrdonne.ui @@ -79,7 +79,7 @@ - ../Editeur/icons/minusnode.png../Editeur/icons/minusnode.png + ../../../.designer/Editeur/icons/minusnode.png../../../.designer/Editeur/icons/minusnode.png @@ -117,7 +117,7 @@ - ../Editeur/icons/ast-green-ball.png../Editeur/icons/ast-green-ball.png + ../../../.designer/Editeur/icons/ast-green-ball.png../../../.designer/Editeur/icons/ast-green-ball.png @@ -232,7 +232,7 @@ - .. + ../../../.designer/backup../../../.designer/backup @@ -247,14 +247,14 @@ - + Catalogue - + Alpha @@ -586,7 +586,7 @@ - .. + ../../../.designer/backup../../../.designer/backup @@ -621,7 +621,7 @@ - .. + ../../../.designer/backup../../../.designer/backup @@ -656,7 +656,7 @@ - ../Editeur/icons/MoinsBleu.png../Editeur/icons/MoinsBleu.png + ../../../.designer/Editeur/icons/MoinsBleu.png../../../.designer/Editeur/icons/MoinsBleu.png @@ -691,7 +691,7 @@ - ../Editeur/icons/PlusBleu.png../Editeur/icons/PlusBleu.png + ../../../.designer/Editeur/icons/PlusBleu.png../../../.designer/Editeur/icons/PlusBleu.png @@ -741,7 +741,7 @@ - ../Editeur/icons/verre-loupe-icone-6087-64.png../Editeur/icons/verre-loupe-icone-6087-64.png + ../../../.designer/Editeur/icons/verre-loupe-icone-6087-64.png../../../.designer/Editeur/icons/verre-loupe-icone-6087-64.png @@ -812,7 +812,7 @@ - ../Editeur/icons/deleteRond.png../Editeur/icons/deleteRond.png + ../../../.designer/Editeur/icons/deleteRond.png../../../.designer/Editeur/icons/deleteRond.png diff --git a/UiQT5/desWidgetRadioButton.ui b/UiQT5/desWidgetRadioButton.ui index e053cecf..b39fa176 100644 --- a/UiQT5/desWidgetRadioButton.ui +++ b/UiQT5/desWidgetRadioButton.ui @@ -25,7 +25,7 @@ 16777215 - 16777215 + 90 diff --git a/UiQT5/desWidgetSimpBool.ui b/UiQT5/desWidgetSimpBool.ui index 013c2183..6a1577ae 100644 --- a/UiQT5/desWidgetSimpBool.ui +++ b/UiQT5/desWidgetSimpBool.ui @@ -7,7 +7,7 @@ 0 0 1065 - 62 + 56 @@ -25,7 +25,7 @@ 1493 - 85 + 56 @@ -210,6 +210,9 @@ Qt::Vertical + + QSizePolicy::Minimum + 20 diff --git a/UiQT5/eficas_en.ts b/UiQT5/eficas_en.ts index e514c2ef..0d3940d6 100644 --- a/UiQT5/eficas_en.ts +++ b/UiQT5/eficas_en.ts @@ -2,6 +2,10 @@ @default + + Hauteur constante + Constant depth + lecture du fichier impossible : diff --git a/UiQT5/eficas_fr.ts b/UiQT5/eficas_fr.ts index 22d9c577..1e4db6fd 100644 --- a/UiQT5/eficas_fr.ts +++ b/UiQT5/eficas_fr.ts @@ -2,6 +2,248 @@ @default + + Hauteur constante + Constant depth + + + Mass_Lumping_On_H + Mass_Lumping_Sur_H + + + Mass_Lumping_On_Velocity + Mass_Lumping_Sur_La_Vitesse + + + Mass_Lumping_On_Tracers + Mass_Lumping_Sur_Les_Traceurs + + + Mass_Lumping_For_Weak_Characteristics + Mass_Lumping_Pour_Les_Caracteristiques_Faibles + + + INITIALIZATION + INITIALISATION + + + Input_Files + Fichiers_D_Entree + + + Formatted_And_Binary_Files + Fichiers_Formates_Et_Binaires + + + Initial_State + Etat_Initial + + + Coupling + Couplage + + + Mass_Balance + Bilan_De_Masse + + + BOUNDARY_CONDITIONS + CONDITIONS_AUX_LIMITES + + + NUMERICAL_PARAMETERS + PARAMETRES_NUMERIQUES + + + PHYSICAL_PARAMETERS + PARAMETRES_PHYSIQUES + + + OUTPUT_FILES + FICHIERS_DE_SORTIE + + + CONSTRUCTION_WORKS_MODELLING + MODELISATION_DES_OUVRAGES + + + GENERAL_PARAMETERS + PARAMETRES_GENERAUX + + + PARTICLE_TRANSPORT + TRANSPORT_DE_PARTICULE + + + Computation_Continued_Settings + Parametres_De_Continuation_Du_Calcul + + + Inputs_Outputs_For_Tide + Entrees_Sorties_Pour_La_Maree + + + Location + Localisation + + + Physical_Parameters + Parametres_Physiques + + + Liquid_Boundaries + Frontieres_Liquide + + + Solver_Definition + Definition_Du_Solver + + + Linearity + Linearite + + + Precondionning_Setting + Parametres_Preconditionnement + + + Matrix_Informations + Stockage_Des_Matrices + + + Advection + Advection + + + Propagation + Propagation + + + Diffusion + Diffusion + + + Discretization_Implicitation + Discretisation + + + Tidal + Maree + + + Various + Divers + + + Friction_Setting + Parametres_De_Friction + + + Meteorology + Meteorologie + + + Wave + Houle + + + Parameters_Estimation + Parametres_A_Estimer + + + Tolerances_For_Identification + Tolerances_Pour_L_Identification + + + Sources + Sources + + + Coriolis_Settings + Parametres_Pour_Coriolis + + + Various_For_Numerical + Divers_Parametres_Numeriques + + + Secondary_Currents_Settings + Parametres_Pour_Les_Courants_Secondaires + + + Tsunami + Tsunami + + + Graphic_And_Listing_Printouts + Sorties_Listing_Et_Graphiques + + + Controls + Controles + + + Fourier + Fourier + + + General_Location + Localisation_Generale + + + Time + Temps + + + Original_Date_Of_Time + Date_A_L_Origine + + + Original_Hour_Of_Time + Temps_A_L_Origine + + + Limit_Values + Valeurs_Limites + + + Tracers_Setting + Parametres_Des_Traceurs + + + Tracer + Traceur + + + Boundary_Conditions_For_Tracers + Conditions_Aux_Limites_Pour_Les_Traceurs + + + Solving + + + + Accuracy + + + + Source + Source + + + Metereology + Metereologie + + + Numerical + Numerique + + + Degradation + Degradation + + + Values_Of_Tracers_In_The_Rain Valeurs_Des_Traceurs_Dans_La_Pluie @@ -28,7 +270,7 @@ Origin_Coordinates - Coordonnees_De_L'origine + Coordonnees_De_L_Origine Thickness_Of_Algae @@ -60,7 +302,7 @@ Oil_Spill_Model - Modele_De_Nappes_D'hydrocarbures + Modele_De_Nappes_D_Hydrocarbures Definition_Of_Zones @@ -96,7 +338,7 @@ Maximum_Number_Of_Iterations_For_Diffusion_Of_Tracers - Maximum_D'iterations_Pour_La_Diffusion_Des_Traceurs + Maximum_D_Iterations_Pour_La_Diffusion_Des_Traceurs Binary_Results_File @@ -152,7 +394,7 @@ Implicitation_Coefficient_Of_Tracers - Coefficient_D'implicitation_Des_Traceurs + Coefficient_D_Implicitation_Des_Traceurs Formatted_Results_File @@ -176,7 +418,7 @@ Coefficient_Of_Wind_Influence - Coefficient_D'influence_Du_Vent + Coefficient_D_Influence_Du_Vent Depth_In_Friction_Terms @@ -212,7 +454,7 @@ Original_Date_Of_Time - Date_De_L'origine_Des_Temps + Date_De_L_origine_Des_Temps Mean_Temperature @@ -248,7 +490,7 @@ Listing_Printout_Period - Periode_Pour_Les_Sorties_Listing + Periode_De_Sortie_Listing Initial_Guess_For_H @@ -284,7 +526,7 @@ Elements_Masked_By_User - Elements_Masques_Par_L'utilisateur + Elements_Masques_Par_L_Utilisateur Control_Sections @@ -312,7 +554,7 @@ Maximum_Number_Of_Iterations_For_Identification - Maximum_D'iterations_Pour_L'identification + Maximum_D_Iterations_Pour_L_Identification Coefficient_For_Diffusion_Of_Tracers @@ -348,7 +590,7 @@ Original_Hour_Of_Time - Heure_De_L'origine_Des_Temps + Heure_De_L_origine_Des_Temps Law_Of_Friction_On_Lateral_Boundaries @@ -396,7 +638,7 @@ Identification_Method - Methode_D'identification + Methode_D_Identification Names_Of_Points @@ -416,11 +658,11 @@ Water_Density - Masse_Volumique_De_L'eau + Masse_Volumique_De_L_Eau Newmark_Time_Integration_Coefficient - Coefficient_D'integration_En_Temps_De_Newmark + Coefficient_D_Integration_En_Temps_De_Newmark Friction_Data_File @@ -430,10 +672,6 @@ Implicitation_For_Diffusion_Of_Velocity Implicitation_Pour_La_Diffusion_Des_Vitesses - - Limit_Values - Valeurs_Limites - Advection Convection @@ -492,7 +730,7 @@ Time_Range_For_Fourier_Analysis - Bornes_En_Temps_Pour_L'analyse_De_Fourier + Bornes_En_Temps_Pour_L_Analyse_De_Fourier Graphic_Printout_Period @@ -556,7 +794,7 @@ Fourier_Analysis_Periods - Periodes_D'analyse_De_Fourier + Periodes_D_Analyse_De_Fourier H_Clipping @@ -564,7 +802,7 @@ Tolerances_For_Identification - Precisions_Pour_L'identification + Precisions_Pour_L_Identification Previous_Computation_File_Format @@ -636,7 +874,7 @@ Maximum_Number_Of_Iterations_For_K_And_Epsilon - Maximum_D'iterations_Pour_K_Et_Epsilon + Maximum_D_Iterations_Pour_K_Et_Epsilon Tidal_Data_Base @@ -644,7 +882,7 @@ Maximum_Number_Of_Iterations_For_Solver - Maximum_D'iterations_Pour_Le_Solveur + Maximum_D_Iterations_Pour_Le_Solveur Number_Of_Tracers @@ -724,7 +962,7 @@ Maximum_Number_Of_Iterations_For_Advection_Schemes - Maximum_D'iterations_Pour_Les_Schemas_De_Convection + Maximum_D_Iterations_Pour_Les_Schemas_De_Convection Turbulence_Model_For_Solid_Boundaries @@ -748,7 +986,7 @@ Record_Number_In_Wave_File - Numero_De_L'enregistrement_Dans_Le_Fichier_De_Houle + Numero_De_L_Enregistrement_Dans_Le_Fichier_De_Houle Abscissae_Of_Sources @@ -792,7 +1030,7 @@ Stop_Criteria - Criteres_D'arret + Criteres_D_Arret Prescribed_Velocities @@ -3220,7 +3458,7 @@ p, li { white-space: pre-wrap; } &Nouveau - ME VOILA + diff --git a/UiQT5/makefile b/UiQT5/makefile index f0c5fbd7..e753fe20 100644 --- a/UiQT5/makefile +++ b/UiQT5/makefile @@ -19,7 +19,7 @@ PY_FILES = myMain.py desBaseWidget.py desChoixCata.py desChoixCode.py desChoixCo -QM_FILES=eficas_en.qm +QM_FILES=eficas_en.qm eficas_fr.qm %.py:%.ui ${PYUIC} -x -o $@ $< diff --git a/convert/convert_TELEMAC.py b/convert/convert_TELEMAC.py index 8b32301e..b082e82b 100644 --- a/convert/convert_TELEMAC.py +++ b/convert/convert_TELEMAC.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright (C) 2007-2013 EDF R&D # # This library is free software; you can redistribute it and/or @@ -17,112 +16,275 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -""" - Ce module contient le plugin convertisseur de fichier - au format python pour EFICAS. - - Un plugin convertisseur doit fournir deux attributs de classe : - extensions et formats et deux methodes : readfile,convert. +import re, string +from Extensions.i18n import tr +from Accas.A_BLOC import BLOC +from Accas import * - L'attribut de classe extensions est une liste d'extensions - de fichiers preconisees pour ce type de format. Cette information - est seulement indicative. + +from convert_python import PythonParser - L'attribut de classe formats est une liste de formats de sortie - supportes par le convertisseur. Les formats possibles sont : - eval, dict ou exec. - Le format eval est un texte source Python qui peut etre evalue. Le - resultat de l'evaluation est un objet Python quelconque. - Le format dict est un dictionnaire Python. - Le format exec est un texte source Python qui peut etre execute. +pattern_comment_slash = re.compile(r"^\s*/") +pattern_eta = re.compile(r".*&ETA.*") +pattern_fin = re.compile(r".*&FIN.*") +pattern_blanc = re.compile(r"^ *$") +pattern_OUI = re.compile(r"^ *OUI *") +pattern_oui = re.compile(r"^ *oui *") +pattern_NON = re.compile(r"^ *NON *") +pattern_non = re.compile(r"^ *non *") - La methode readfile a pour fonction de lire un fichier dont le - nom est passe en argument de la fonction. - - convertisseur.readfile(nom_fichier) +from aideAuxConvertisseurs import DicoEficasToCas, ListeSupprimeCasToEficas +from aideAuxConvertisseurs import ListeCalculCasToEficas, DicoAvecMajuscules +from enumDicoTelemac import DicoEnumCasEn - La methode convert a pour fonction de convertir le fichier - prealablement lu dans un objet du format passe en argument. - - objet=convertisseur.convert(outformat) +from Extensions import localisation - Ce convertisseur supporte le format de sortie exec +from determine import monEnvQT5 -""" -import sys,string,traceback -import parseur_cas -from Noyau import N_CR -from Extensions.i18n import tr -from Extensions.eficas_exception import EficasException def entryPoint(): """ - Retourne les informations necessaires pour le chargeur de plugins - Ces informations sont retournees dans un dictionnaire + Return a dictionary containing the description needed to load the plugin """ return { - # Le nom du plugin 'name' : 'TELEMAC', - # La factory pour creer une instance du plugin - 'factory' : PythonParser, + 'factory' : TELEMACParser } - -class PythonParser: +class TELEMACParser(PythonParser): """ - Ce convertisseur lit un fichier au format python avec la - methode readfile : convertisseur.readfile(nom_fichier) - et retourne le texte au format outformat avec la - methode convertisseur.convert(outformat) - - Ses caracteristiques principales sont exposees dans 2 attributs - de classe : - - extensions : qui donne une liste d'extensions de fichier preconisees - - formats : qui donne une liste de formats de sortie supportes + This converter works like PythonParser, except that it also initializes all + model variables to None in order to avoid Python syntax errors when loading + a file with a different or inexistent definition of variables. """ - # Les extensions de fichier preconisees - extensions=('.py',) - # Les formats de sortie supportes (eval dict ou exec) - # Le format exec est du python executable (commande exec) converti avec PARSEUR_PYTHON - # Le format execnoparseur est du python executable (commande exec) non converti - formats=('exec','execnoparseur') - - def __init__(self,cr=None): - # Si l'objet compte-rendu n'est pas fourni, on utilise le - # compte-rendu standard - self.text='' - if cr : - self.cr=cr - else: - self.cr=N_CR.CR(debut='CR convertisseur format python', - fin='fin CR format python') - - def readfile(self,filename): - self.filename=filename - try: - self.text=open(filename).read() - except: - self.cr.exception(tr("Impossible d'ouvrir le fichier %s" ,str(filename))) - self.cr.fatal(tr("Impossible d'ouvrir le fichier %s" ,str(filename))) - return + + def convert(self, outformat, appli=None): + self.dicoInverseFrancais=appli.readercata.dicoInverseFrancais + self.dicoAnglaisFrancais=appli.readercata.dicoAnglaisFrancais + self.dicoFrancaisAnglais=appli.readercata.dicoFrancaisAnglais + self.dicoMC=appli.readercata.dicoMC + self.Ordre_Des_Commandes=appli.readercata.Ordre_Des_Commandes - def convert(self,outformat,appli=None): - print "je passe la" - if outformat == 'exec': - #try: - if 1: - print parseur_cas.PARSEUR_CAS - return parseur_cas.PARSEUR_CAS(self.text).get_texte(appli) - else : - #except EficasException: - # Erreur lors de la conversion - l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1], - sys.exc_info()[2]) - self.cr.exception(tr("Impossible de convertir le fichier Python qui doit contenir des erreurs.\n\ - On retourne le fichier non converti. Prevenir la maintenance.\n\n %s", string.join(l))) - # On retourne neanmoins le source initial non converti (au cas ou) - return self.text - elif outformat == 'execnoparseur': - return self.text - else: - raise EficasException(tr("Format de sortie : %s, non supporte", outformat)) - return None + + #print self.dicoInverseFrancais + #text = PythonParser.convert(self, outformat, appli) + + text="" + l_lignes = string.split(self.text,'\n') + self.dictSimp={} + for ligne in l_lignes : + if pattern_comment_slash.match(ligne) : continue + if pattern_eta.match(ligne) : continue + if pattern_fin.match(ligne) : continue + if pattern_blanc.match(ligne) : continue + ligne=re.sub('\t',' ',ligne) + ligne=re.sub("'",' ',ligne) + ligne=re.sub(":",'=',ligne) + if ligne.count('=') != 1 : + print "pb avec la ligne " , ligne + continue + + motsInLigne=string.split(ligne,' ') + listeMotsSimp=() + simp="" + for mot in motsInLigne: + if mot == "" : continue + if mot == "=" : + simp=simp[0:-1] + while simp[-1] == " " : simp=simp[0:-1] + if simp.find('-') > 0 : simp=self.redecoupeSimp(simp) + break + + mot=mot.replace('_','__') + simp=simp+mot[0].upper() +mot[1:].lower()+'_' + valeur=ligne.split('=')[1] + self.dictSimp[simp]=valeur + + + + #print dictSimp + #print self.dicoInverseFrancais + + dicoParMC={} + #print ListeCalculCasToEficas + + if 'Titre' not in self.dictSimp.keys(): + import os + self.dictSimp['Titre']=os.path.basename(self.filename) + + for simp in self.dictSimp.keys(): + if simp in ListeSupprimeCasToEficas: continue + if simp in TELEMACParser.__dict__.keys() : apply(TELEMACParser.__dict__[simp],(self,)) + + for simp in self.dictSimp.keys(): + if simp not in self.dicoInverseFrancais.keys() : + print "************" + print "pb avec ", simp,'------' + print "************" + continue + listeGenea=self.dicoInverseFrancais[simp] + listeGeneaReverse=[] + for (u,v) in listeGenea : + if isinstance(v,BLOC): continue + listeGeneaReverse.append(u) + listeGeneaReverse.reverse() + dicoTravail=dicoParMC + i=0 + #print (listeGeneaReverse[0:-1]) + while i < len(listeGeneaReverse[0:-1]) : + mot=listeGeneaReverse[i] + i=i+1 + if mot not in dicoTravail.keys(): dicoTravail[mot]={} + dicoTravail=dicoTravail[mot] + dicoTravail[simp]=self.dictSimp[simp] + + self.textePy="" + #print "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" + #print dicoParMC + #print "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" + listeMC=self.tri(dicoParMC.keys()) + for k in listeMC : + print "----------- traitement de " , k + self.textePy += self.dicoFrancaisAnglais[k] + "(" + self.traiteMC(dicoParMC[k]) + self.textePy += ");\n" + print "----------- " + + + print self.textePy + return self.textePy + + def traiteMC(self,dico) : + for k in dico.keys() : + valeur= dico[k] + if k not in self.dicoMC.keys() : kA=self.dicoFrancaisAnglais[k] + else : kA=k + obj=self.dicoMC[kA] + if isinstance(obj,FACT): self.generFACT(obj,kA,valeur) + elif isinstance(obj,BLOC): self.generBLOC(obj,kA,valeur) + elif isinstance(obj,SIMP): self.generSIMP(obj,kA,valeur) + else : print "%%%%%%%%%%%\n", "pb generation pour", k, obj, "\n%%%%%%%%%%%" + + #print "_____________" + + def generFACT(self,obj,nom,valeur): + if nom in TELEMACParser.__dict__.keys() : + apply(TELEMACParser.__dict__[nom],(self,)) + return + self.textePy += nom + "=_F( " + self.traiteMC(valeur) + self.textePy += '),\n' + + + def generBLOC(self,obj,nom,valeur): + print "BLOC " + print nom + + def generSIMP(self,obj,nom,valeur): + if nom in ("Prescribed_Flowrates", "Prescribed_Velocities", "Prescribed_Elevations" ): return + if obj.max==1 : + if 'TXM' in obj.type : + valeur=str(valeur) + while valeur[-1] == " " : valeur=valeur[0:-1] + while valeur[0] == " " : valeur=valeur[1:] + valeur=valeur[0].upper()+valeur[1:].lower() + valeur=tr(valeur) + if 'Fichier' in obj.type or 'TXM' in obj.type or 'Repertoire' in obj.type : + valeur=str(valeur) + while valeur[-1] == " " : valeur=valeur[0:-1] + while valeur[0] == " " : valeur=valeur[1:] + self.textePy += nom + "= '" + str(valeur) +"' ," + return + if bool in obj.type : + if pattern_OUI.match(valeur) or pattern_oui.match(valeur) : self.textePy += nom + "= True," + if pattern_NON.match(valeur) or pattern_non.match(valeur) : self.textePy += nom + "= False," + return + if nom in DicoEnumCasEn.keys(): + valeur=DicoEnumCasEn[nom][valeur] + self.textePy += nom + "=" + str(valeur) +"," + + + + def tri(self, listeIn): + if len(listeIn) == 1 : return listeIn + if self.Ordre_Des_Commandes == None : return listeIn + #print self.Ordre_Des_Commandes + listeOut=[listeIn[0],] + for kF in listeIn[1:]: + k=str(self.dicoFrancaisAnglais[kF]) + ordreK=self.Ordre_Des_Commandes.index(k) + i=0 + while i < len(listeOut): + ordreI=self.Ordre_Des_Commandes.index(self.dicoFrancaisAnglais[listeOut[i]]) + if ordreK < ordreI : break + i=i+1 + listeOut.insert(i,kF) + return listeOut + + def Processeurs_Paralleles(self): + #YOANN + if self.dictSimp["Processeurs_Paralleles"] == 0 : del self.dictSimp["Processeurs_Paralleles"] + else : self.dictSimp["Parallel_Computation"]="Parallel" + + + def Option_De_Supg(self): + print "ds Option_De_Supg" + return + + def Forme_De_La_Convection(self): + print "ds Forme_De_La_Convection" + return + + def redecoupeSimp(self,simp): + # replace('-','_') uniquement dans les identifiants + while simp.find('-') > 0 : + ind=simp.find('-') + if ind==len(simp)-1 : break + simp=simp[0:ind]+'_'+simp[ind+1].upper()+simp[ind+2:] + return simp + + + + def Liquid_Boundaries(self): + texte_Boundaries="Liquid_Boundaries=( " + premier=0 + if 'Prescribed_Elevations' in self.dictSimp.keys(): + valeurs=self.dictSimp["Prescribed_Elevations"].split(";") + elif 'Cotes_Imposees' in self.dictSimp.keys(): + valeurs=self.dictSimp["Cotes_Imposees"].split(";") + else : valeurs=() + for e in range(len(valeurs)): + if valeurs[e] == "" or valeurs[e] == "\n" : continue + if eval(valeurs[e],{})==0 : continue + if not premier : premier=1 + texte_Boundaries += "_F(Type_Condition = 'Prescribed Elevations',\n" + texte_Boundaries += "Prescribed_Elevations = " + str(valeurs[e]) + "),\n" + + if 'Prescribed_Flowrates' in self.dictSimp.keys(): + valeurs=self.dictSimp["Prescribed_Flowrates"].split(";") + elif 'Debits_Imposes' in self.dictSimp.keys(): + valeurs=self.dictSimp["Debits_Imposes"].split(";") + else : valeurs=() + for e in range(len(valeurs)): + if valeurs[e] == "" or valeurs[e] == "\n" : continue + if eval(valeurs[e],{})==0 : continue + if not premier : premier=1 + texte_Boundaries += "_F(Type_Condition = 'Prescribed Flowrates',\n" + texte_Boundaries += "Prescribed_Flowrates = " + str(valeurs[e]) + "),\n" + + if 'Prescribed_Velocity' in self.dictSimp.keys(): + valeurs=self.dictSimp["Prescribed_Velocity"].split(";") + elif 'Vitesses_Imposees' in self.dictSimp.keys(): + valeurs=self.dictSimp["Vitesses_Imposees"].split(";") + else : valeurs=() + for e in range(len(valeurs)): + if valeurs[e] == "" or valeurs[e] == "\n" : continue + if eval(valeurs[e],{})==0 : continue + if not premier : premier=1 + texte_Boundaries += "_F(Type_Condition = 'Prescribed Velocity',\n" + texte_Boundaries += "Prescribed_Velocity = " + str(valeurs[e]) + "),\n" + if premier : texte_Boundaries +="),\n" + else : texte_Boundaries="" ; print "pb texte_Boundaries " + self.textePy += texte_Boundaries + diff --git a/generator/generator_TELEMAC.py b/generator/generator_TELEMAC.py index 610ebb4e..f63a6034 100644 --- a/generator/generator_TELEMAC.py +++ b/generator/generator_TELEMAC.py @@ -26,9 +26,11 @@ from Extensions.i18n import tr from generator_python import PythonGenerator extensions=('.comm',) -listeSupprime=('Jour','Mois','An','Heure','Minute','Seconde') -DicoTransforme= {'MASS LUMPING':'MASS-LUMPING','MATRIX VECTOR' : 'MATRIX-VECTOR' , - 'C U PRECON':'C-U PRECON','STAGE DISCHARGE' : 'STAGE-DISCHARGE'} +#listeSupprime=() +#DicoAglomere=() +#DicoEficasToCas=() +from aideAuxConvertisseurs import listeSupprime, DicoAglomere, DicoEficasToCas + def entryPoint(): """ @@ -55,6 +57,7 @@ class TELEMACGenerator(PythonGenerator): def gener(self,obj,format='brut',config=None): self.initDico() + print self.texteDico # Cette instruction genere le contenu du fichier de commandes (persistance) self.text=PythonGenerator.gener(self,obj,format) @@ -70,6 +73,7 @@ class TELEMACGenerator(PythonGenerator): self.texteDico = "" + #---------------------------------------------------------------------------------------- # ecriture #---------------------------------------------------------------------------------------- @@ -78,7 +82,6 @@ class TELEMACGenerator(PythonGenerator): fileDico = fn[:fn.rfind(".")] + '.py' f = open( str(fileDico), 'wb') f.write( self.texteDico ) - print self.texteDico f.close() #---------------------------------------------------------------------------------------- @@ -91,11 +94,8 @@ class TELEMACGenerator(PythonGenerator): nomMajuscule=obj.nom.upper() nom=nomMajuscule.replace('_',' ') if nom in listeSupprime : return s - nomNouveau=nom - for k in DicoTransforme.keys() : - if k in nom : - nomNouveau=nom.replace(k,DicoTransforme[k]) - self.texteDico+=nomNouveau+ "=" + s[0:-1]+ "\n" + if nom in DicoEficasToCas.keys() : nom=DicoEficasToCas[nom] + self.texteDico+=nom+ ":" + s[0:-1]+ "\n" return s def generMCFACT(self,obj): -- 2.39.2