From b2ab08fd7617bc1919416221b7032890e7fcc78a Mon Sep 17 00:00:00 2001 From: "pascale.noyret" Date: Wed, 8 Apr 2015 15:29:57 +0200 Subject: [PATCH] etat provisoire pour sauvegarde avant vacances. non stable --- Extensions/CreeTraductions/eficas.pro | 2 +- Ihm/I_MCSIMP.py | 7 +- Ihm/I_OBJECT.py | 4 +- InterfaceQT4/browser.py | 112 +++-- InterfaceQT4/composimp.py | 8 + InterfaceQT4/editor.py | 5 +- InterfaceQT4/feuille.py | 60 +-- InterfaceQT4/gereIcones.py | 52 ++- InterfaceQT4/gereListe.py | 11 +- InterfaceQT4/getVersion.py | 2 +- InterfaceQT4/groupe.py | 14 +- InterfaceQT4/monChoixCommande.py | 7 +- InterfaceQT4/monWidgetCommande.py | 42 +- InterfaceQT4/monWidgetCommentaire.py | 2 +- InterfaceQT4/monWidgetFact.py | 6 +- InterfaceQT4/monWidgetFactPlie.py | 3 + InterfaceQT4/monWidgetInfo.py | 40 ++ InterfaceQT4/monWidgetOptionnel.py | 16 +- InterfaceQT4/monWidgetPlusieursBase.py | 25 +- InterfaceQT4/monWidgetRadioButton.py | 1 + InterfaceQT4/monWidgetSimpBase.py | 14 +- Noyau/N_MCCOMPO.py | 9 +- Noyau/N_PROC.py | 2 +- Telemac/Telemac_Cata.py | 600 ++++++++++++++++--------- UiQT4/desParam.ui | 225 ++++++++++ UiQT4/desWidgetFactPlie.ui | 9 +- UiQT4/desWidgetInformationV1.ui | 168 +++++++ UiQT4/desWidgetPlusieursBase.ui | 41 +- UiQT4/desWidgetSimpTxt.ui | 8 +- UiQT4/desWidgetVide.ui | 6 +- generator/generator_python.py | 19 +- 31 files changed, 1163 insertions(+), 357 deletions(-) create mode 100644 InterfaceQT4/monWidgetInfo.py create mode 100644 UiQT4/desParam.ui create mode 100644 UiQT4/desWidgetInformationV1.ui diff --git a/Extensions/CreeTraductions/eficas.pro b/Extensions/CreeTraductions/eficas.pro index cc89b79b..8367830c 100644 --- a/Extensions/CreeTraductions/eficas.pro +++ b/Extensions/CreeTraductions/eficas.pro @@ -212,10 +212,10 @@ FORMS= ../../UiQT4/aideQT.ui \ ../../UiQT4/desWidgetSimpBool.ui \ ../../UiQT4/desWidgetSimpComplexe.ui \ ../../UiQT4/desWidgetSimpFichier.ui \ - ../../UiQT4/desWidgetSimpTuple.ui \ ../../UiQT4/desWidgetSimpTxt.ui \ ../../UiQT4/desWidgetTuple2.ui \ ../../UiQT4/desWidgetTuple3.ui \ + ../../UiQT4/desVisu.ui \ ../../UiQT4/myMain.ui TRANSLATIONS = ../../UiQT4/eficas_fr.ts ../../UiQT4/eficas_en.ts diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py index 01fe42a3..1c6c87bf 100644 --- a/Ihm/I_MCSIMP.py +++ b/Ihm/I_MCSIMP.py @@ -230,7 +230,11 @@ class MCSIMP(I_OBJECT.OBJECT): return self.definition.statut=='o' def isImmuable(self): - return self.definition.statut=='i' + return self.definition.homo=='constant' + + def isInformation(self): + return self.definition.homo=='information' + def valid_val(self,valeur): @@ -604,7 +608,6 @@ class MCSIMP(I_OBJECT.OBJECT): return valid,comment def valideMatrice(self,cr): - print "jjjjjjjjjjjjjjjj" #Attention, la matrice contient comme dernier tuple l ordre des variables if self.monType.methodeCalculTaille != None : apply (MCSIMP.__dict__[self.monType.methodeCalculTaille],(self,)) diff --git a/Ihm/I_OBJECT.py b/Ihm/I_OBJECT.py index 9a37fb80..6dd26a64 100644 --- a/Ihm/I_OBJECT.py +++ b/Ihm/I_OBJECT.py @@ -124,9 +124,11 @@ class OBJECT: Retourne la chaine d'aide contenue dans le catalogue en tenant compte de la langue """ - try : + try: + #if 1 : return getattr(self.definition,self.jdc.lang) except: + #else: try : return getattr(self.definition,"fr") except : diff --git a/InterfaceQT4/browser.py b/InterfaceQT4/browser.py index d9a8efb4..2938b967 100644 --- a/InterfaceQT4/browser.py +++ b/InterfaceQT4/browser.py @@ -22,6 +22,7 @@ import string,re import types,sys,os import traceback import typeNode +import pdb from PyQt4 import * from PyQt4.QtGui import * from PyQt4.QtCore import * @@ -68,8 +69,10 @@ class JDCTree( QTreeWidget ): if self.racine.children !=[] : if self.editor.afficheCommandesPliees : self.racine.children[0].plieToutEtReaffiche() else : self.racine.children[0].deplieToutEtReaffiche() + self.racine.children[0].fenetre.donnePremier() else : self.racine.affichePanneau() - + #PNPNPN + #pdb.set_trace() def contextMenuEvent(self,event) : print "contextMenuEvent" @@ -97,22 +100,18 @@ class JDCTree( QTreeWidget ): def handleCollapsedItem(self,item): - print "dans CollapsedItem", self.inhibeExpand + #print "dans CollapsedItem", self.inhibeExpand if self.inhibeExpand == True : return - #print "apres if" - #print "item = ", item, item.item.get_nom() - #itemParent=item - #while not (hasattr (itemParent,'getPanel2')) : - # print "While itemParent = ", itemParent, itemParent.item.get_nom() - # print itemParent.plie - # if itemParent.plie==True : itemParent.setPlie() - # itemParent=itemParent.treeParent - #if self.tree.node_selected != self : - # item.setExpanded(False) - # return - if item.fenetre != self.editor.fenetreCentraleAffichee : - item.setPlie() - #print "apres 2ndif" + # On traite le cas de l item non selectionne + itemParent=item + while not (hasattr (itemParent,'getPanel2')) : + itemParent=itemParent.treeParent + if self.tree.node_selected != itemParent : + item.setExpanded(False) + return + + itemParent=item + item.setPlie() item.plieToutEtReaffiche() def handleExpandedItem(self,item): @@ -147,7 +146,7 @@ class JDCTree( QTreeWidget ): #print self.editor.afficheCommandesPliees if self.editor.afficheCommandesPliees : itemParent.plieToutEtReaffiche() else : itemParent.affichePanneau() - if itemParent!=item : item.fenetre.rendVisible() + if itemParent!=item and item.fenetre != None: item.fenetre.rendVisible() #try : if 1: fr = item.item.get_fr() @@ -204,7 +203,9 @@ class JDCNode(QTreeWidgetItem): ajoutAuParentduNoeud=0 from InterfaceQT4 import compobloc - while (isinstance(self.treeParent,compobloc.Node)) : + from InterfaceQT4 import compomclist + while (isinstance(self.treeParent,compobloc.Node) or ( isinstance(self.treeParent,compomclist.Node) and self.treeParent.item.isMCList())) : + #while (isinstance(self.treeParent,compobloc.Node)) : self.treeParent=self.treeParent.treeParent ajoutAuParentduNoeud=1 if ajoutAuParentduNoeud : @@ -212,7 +213,8 @@ class JDCNode(QTreeWidgetItem): self.treeParent.childrenIssusDesBlocs.append(self) while (isinstance(self.treeParent,compobloc.Node)) : self.treeParent=self.treeParent.treeParent - if isinstance(self,compobloc.Node) : + #if isinstance(self,compobloc.Node) : + if (isinstance(self,compobloc.Node) or ( isinstance(self,compomclist.Node) and self.item.isMCList())) : QTreeWidgetItem.__init__(self,None,mesColonnes) else : QTreeWidgetItem.__init__(self,self.treeParent,mesColonnes) @@ -236,7 +238,9 @@ class JDCNode(QTreeWidgetItem): self.state="" self.fenetre=None try : - if self.item.getObject().isBLOC() : self.setExpanded(True) + if self.item.getObject().isBLOC() : + self.setExpanded(True) + self.plie=False except : pass @@ -248,19 +252,18 @@ class JDCNode(QTreeWidgetItem): listeExpanded=[] for item in self.childrenComplete : - #try : - # print " je detruis ", item.item.GetLabelText() ," parent : ", item.treeParent.item.GetLabelText() - #except : - # print "mot clef fact" - if item.isExpanded(): - if self.childrenComplete.index(item) < posInsertion : - listeExpanded.append(self.childrenComplete.index(item)) - else : - listeExpanded.append( self.childrenComplete.index(item) +1) + print dir(item) + #if item.isExpanded(): + # if self.childrenComplete.index(item) < posInsertion : + # listeExpanded.append(self.childrenComplete.index(item)) + # print dir(item.item ) + # else : + # listeExpanded.append( self.childrenComplete.index(item) +1) self.detruit_les_noeuds_issus_de_blocs(item) parent=item.treeParent parent.removeChild(item) + #print listeExpanded self.children = [] self.childrenComplete = [] sublist = self.item._GetSubList() @@ -269,13 +272,15 @@ class JDCNode(QTreeWidgetItem): nouvelItem=item.itemNode(self,item) self.children.append(nouvelItem) #print " J ajoute ", nouvelItem ,nouvelItem.item.GetLabelText(),"dans" ,self.item.GetLabelText() + #print item #if ind in listeExpanded : nouvelItem.setExpanded(1) #if ind in listeExpanded : print "plie=0" #else : print "plie=1" #if ind in listeExpanded : nouvelItem.plie=0 #else : nouvelItem.plie=1 - ind=ind+1 + #ind=ind+1 + #print "*********** fin build_children ",self.item, self.item.GetLabelText() def chercheNoeudCorrespondant(self,objSimp): @@ -285,7 +290,7 @@ class JDCNode(QTreeWidgetItem): return None def affichePanneau(self) : - print "dans affichePanneau appel getPanel2", self.item.GetLabelText() + #print "dans affichePanneau appel getPanel2", self.item.GetLabelText() if self.item.isactif(): itemParent=self while not (hasattr (itemParent,'getPanel2')) : @@ -299,8 +304,8 @@ class JDCNode(QTreeWidgetItem): self.fenetre = PanelInactif(self,self.editor) self.editor.widgetCentraleLayout.addWidget(self.fenetre) - print "widgetCentraleLayout = ", self.editor.widgetCentraleLayout - print "nouvelle fenetre ", self.fenetre, " associee a ", self + #print "widgetCentraleLayout = ", self.editor.widgetCentraleLayout + #print "nouvelle fenetre ", self.fenetre, " associee a ", self self.editor.anciennefenetre=self.editor.fenetreCentraleAffichee #print "ancienne fenetre ", self.editor.anciennefenetre @@ -389,6 +394,7 @@ class JDCNode(QTreeWidgetItem): Rend le noeud courant (self) selectionne et deselectionne tous les autres """ + print "je suis sur select" for item in self.tree.selectedItems() : item.setSelected(0) self.setSelected( True ) @@ -422,7 +428,7 @@ class JDCNode(QTreeWidgetItem): ou en position intermediaire. Si pos vaut None, on le place a la position du catalogue. """ - print "************** append_child ",self.item.GetLabelText(), plier + #print "************** append_child ",self.item.GetLabelText(), plier self.editor.init_modif() if pos == 'first': index = 0 @@ -498,7 +504,7 @@ class JDCNode(QTreeWidgetItem): toselect.affichePanneau() else : if self.treeParent.fenetre== None : return - print "J appelle reaffiche de browser apres delete" + #print "J appelle reaffiche de browser apres delete" self.treeParent.fenetre.reaffiche(toselect) def deleteMultiple(self,liste=()): @@ -556,7 +562,7 @@ class JDCNode(QTreeWidgetItem): #print "onAdd pour ", self.item.nom self.editor.init_modif() self.update_nodes() - print "dans onAdd" ,self.item + #print "dans onAdd" ,self.item # PN -- non necessaire si item=jdc if hasattr(self.item,'jdc'): self.item.jdc.aReafficher=True @@ -698,7 +704,7 @@ class JDCNode(QTreeWidgetItem): def plieToutEtReaffiche(self): - print "je suis dans plieToutEtReaffiche", self.item.get_nom() + #print "je suis dans plieToutEtReaffiche", self.item.get_nom() self.editor.deplier = False for item in self.children : item.setPlie() @@ -712,7 +718,7 @@ class JDCNode(QTreeWidgetItem): def setPlie(self): #print "je mets inhibeExpand a true dans setPlie" - print "je suis dans plieTout", self.item.get_nom() + #print "je suis dans plieTout", self.item.get_nom() self.tree.inhibeExpand=True self.tree.collapseItem(self) self.setPlieChildren() @@ -732,21 +738,31 @@ class JDCNode(QTreeWidgetItem): self.plie=True for c in self.children : c.setPlieChildren() - print "dans setPlieChildren appartientAUnNoeudPlie=True ", c, c.item.GetLabelText()[0] + #print "dans setPlieChildren appartientAUnNoeudPlie=True ", c, c.item.GetLabelText()[0] c.appartientAUnNoeudPlie=True c.plie=True - c.setExpanded(True) + c.setExpanded(False) - # Pour les blocs + # Pour les blocs et les motcles list # on affiche un niveau de plus from InterfaceQT4 import compobloc - if isinstance(self,compobloc.Node) : + from InterfaceQT4 import compomclist + if (isinstance(self,compobloc.Node) or ( isinstance(self,compomclist.Node) and self.item.isMCList())) : niveauPere=self.treeParent - while (isinstance(niveauPere,compobloc.Node)): - niveauPere=self.niveauPere.treeParent + while (isinstance(niveauPere,compobloc.Node) or (isinstance(niveauPere,compomclist.Node) and niveauPere.item.isMCList())) : + niveauPere=niveauPere.treeParent for c in self.children : c.appartientAUnNoeudPlie=niveauPere.appartientAUnNoeudPlie - + c.setExpanded(False) + + # on affiche un niveau de plus + #if isinstance(self,compomclist.Node) : + #if isinstance(self,compobloc.Node) : + # niveauPere=self.treeParent + # while (isinstance(niveauPere,compobloc.Node)): + # niveauPere=niveauPere.treeParent + # for c in self.children : + # c.appartientAUnNoeudPlie=niveauPere.appartientAUnNoeudPlie def setDeplie(self): #print "je mets inhibeExpand a true dans setDeplie" @@ -755,13 +771,13 @@ class JDCNode(QTreeWidgetItem): self.tree.expandItem(self) self.setDeplieChildren() self.tree.inhibeExpand=False - print "je mets inhibeExpand a false dans setDePlie" + #print "je mets inhibeExpand a false dans setDePlie" def setDeplieChildren(self): - print "dans setDeplieChildren appartientAUnNoeudPlie=False ", self.item.GetLabelText() + #print "dans setDeplieChildren appartientAUnNoeudPlie=False ", self.item.GetLabelText() for c in self.children : c.setDeplieChildren() - print "dans setDeplieChildren appartientAUnNoeudPlie=False ", c.item.GetLabelText() + #print "dans setDeplieChildren appartientAUnNoeudPlie=False ", c.item.GetLabelText() c.appartientAUnNoeudPlie=False c.setExpanded(True) c.plie=False diff --git a/InterfaceQT4/composimp.py b/InterfaceQT4/composimp.py index 0cc07f7a..88876b2d 100644 --- a/InterfaceQT4/composimp.py +++ b/InterfaceQT4/composimp.py @@ -119,6 +119,14 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): monNom=self.item.nom maCommande=commande + # label informatif + if monObjet.isInformation(): + from monWidgetInfo import MonWidgetInfo + widget=MonWidgetInfo(self,maDefinition,monNom,monObjet,parentQt,maCommande) + self.widget=widget + return widget + + # Attention l ordre des if est important # Attention il faut gerer les blocs et les facteurs # a gerer comme dans composimp diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py index f37b1fa2..2104e6ba 100644 --- a/InterfaceQT4/editor.py +++ b/InterfaceQT4/editor.py @@ -82,6 +82,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget): self.widgetTree.close() self.widgetTree=None self.appliEficas.resize(1440,self.appliEficas.height()) + self.affiche_alpha=0 else : self.appliEficas.resize(2000,self.appliEficas.height()) @@ -190,7 +191,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget): if (not self.jdc.isvalid()) and (not self.nouveau) and (self.appliEficas.ssIhm == False): self.viewJdcRapport() - if self.code=="TELEMAC" : print "kkkkkkkk" + # if self.code=="TELEMAC" : print "kkkkkkkk" if jdc_item: @@ -1199,7 +1200,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget): #---------------------------# def _newTELEMAC(self): #---------------------------# - texte="INITIALIZATION();TIDE_PARAMETERS();INITIAL_STATE();NUMERICAL_PARAMETERS();PHYSICAL_PARAMETERS()" + texte="INITIALIZATION();INITIAL_STATE();BOUNDARY_CONDITIONS();NUMERICAL_PARAMETERS();PHYSICAL_PARAMETERS()" return texte #---------------------------# diff --git a/InterfaceQT4/feuille.py b/InterfaceQT4/feuille.py index 8f90b305..f033eac4 100644 --- a/InterfaceQT4/feuille.py +++ b/InterfaceQT4/feuille.py @@ -63,8 +63,9 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel): self.setValeurs() self.setNom() self.setValide() - self.setPoubelle() - self.setIcones() + self.setIconePoubelle() + self.setIconesFichier() + self.setIconesSalome() self.setCommentaire() self.setZoneInfo() @@ -96,44 +97,19 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel): def setCommentaire(self): c = self.debutToolTip if self.node.item.definition.validators : c+=self.node.item.definition.validators.aide() + self.aide=c if self.objSimp.get_fr() != None and self.objSimp.get_fr() != "": c2 = '

'+c+str(self.objSimp.get_fr())+"

" self.label.setToolTip(c2) + self.aide=str(self.objSimp.get_fr())+" "+c else : c+=self.finCommentaire() if c != "" and c != None : + self.aide=c #c=str('

')+c+"

" c=str('

')+c+"

" self.label.setToolTip(c) - def setIcones(self): - - mctype = self.monSimpDef.type[0] - # selon - if ( hasattr(self,"BFichier")): - if mctype == "Repertoire": - self.BRepertoire=self.BFichier - self.connect(self.BRepertoire,SIGNAL("clicked()"),self.BRepertoirePressed) - else : - #icon = QIcon(self.repIcon+"/visuFichier.png") - self.connect(self.BFichier,SIGNAL("clicked()"),self.BFichierPressed) - self.connect(self.BVisuFichier,SIGNAL("clicked()"),self.BFichierVisu) - return - - if ( hasattr(self,"BSalome")): - enable_salome_selection = self.editor.salome and \ - (('grma' in repr(mctype)) or ('grno' in repr(mctype)) or ('SalomeEntry' in repr(mctype)) or - (hasattr(mctype, "enable_salome_selection") and mctype.enable_salome_selection)) - if enable_salome_selection: - self.connect(self.BSalome,SIGNAL("pressed()"),self.BSalomePressed) - - if not(('grma' in repr(mctype)) or ('grno' in repr(mctype))) or not(self.editor.salome): - self.BView2D.close() - else : - self.connect(self.BView2D,SIGNAL("clicked()"),self.BView2DPressed) - else: - self.BSalome.close() - self.BView2D.close() def showEvent(self, event): @@ -144,10 +120,9 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel): QWidget.showEvent(self,event) def aideALaSaisie(self): - return mc = self.node.item.get_definition() mctype = mc.type[0] - d_aide = { 'TXM' : tr(u"chaine de caracteres"), + d_aides = { 'TXM' : tr(u"chaine de caracteres"), 'R' : tr("reel"), 'I' : tr("entier"), 'C' : tr("complexe"), @@ -155,7 +130,8 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel): 'Fichier' : tr(u'fichier'), 'FichierNoAbs' : tr(u'fichier existant'), 'Repertoire' : tr(u'repertoire')} - if mc.min == mc.max: commentaire=tr("Entrez ")+str(mc.min) + + if mc.min == mc.max: commentaire=tr("Entrez ")+" "+str(mc.min)+" " else : commentaire=tr("Entrez entre ")+str(mc.min)+tr(" et ")+str(mc.max) if type(mctype) == types.ClassType: ctype = getattr(mctype, 'help_message', tr("Type de base inconnu")) @@ -163,7 +139,7 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel): if ctype == tr("Type de base inconnu") and "Tuple" in str(mctype): ctype=str(mctype) commentaire+=ctype - if self.max!=1 : commentaire+="s" + if mc.max!=1 : commentaire+="s" return commentaire def setZoneInfo(self): @@ -174,10 +150,11 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel): #self.editor.affiche_infos(info) def reaffiche(self): - print "dans reaffiche de feuille", self.nom + #print "dans reaffiche de feuille", self.nom if self.editor.jdc.aReafficher==True : - print " j appelle le reaffiche de parentQt" + #print " j appelle le reaffiche de parentQt" self.parentQt.reaffiche() + #PN PN PN pas satisfaisant #nodeAVoir=self.parentQt.node.chercheNoeudCorrespondant(self.objSimp) #print nodeAVoir.fenetre @@ -185,4 +162,15 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel): #if nodeAVoir.fenetre.isVisible() : return #self.editor.fenetreCentraleAffichee.rendVisibleNoeud(nodeAVoir) #nodeAVoir.fenetre.setFocus() + # return # on est bien postionne + if self.objSimp.isvalid(): + self.editor.fenetreCentraleAffichee.afficheSuivant(self.AAfficher) + else : + print "dans le else de reaffiche" + self.AAfficher.setFocus(7) + + def traiteClicSurLabel(self): + #print self.aide + self.aide+="\n"+self.aideALaSaisie() + self.editor.affiche_infos(self.aide) diff --git a/InterfaceQT4/gereIcones.py b/InterfaceQT4/gereIcones.py index 4d3285e1..718626b3 100644 --- a/InterfaceQT4/gereIcones.py +++ b/InterfaceQT4/gereIcones.py @@ -69,16 +69,50 @@ class FacultatifOuOptionnel: QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee ")) - def setPoubelle(self): + def setIconePoubelle(self): if not(hasattr(self,"RBPoubelle")):return + icon1 = QtGui.QIcon() + repIcon=os.path.join(os.path.abspath(os.path.dirname(__file__)),'../Editeur/icons') if self.node.item.object.isoblig() : - icon1 = QtGui.QIcon() - icon1.addPixmap(QtGui.QPixmap("/home/A96028/Install_EficasV1/KarineEficas/Editeur/icons/deleteRondVide.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon1.addPixmap(QtGui.QPixmap(repIcon+"/deleteRondVide.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.RBPoubelle.setIcon(icon1) return + icon1.addPixmap(QtGui.QPixmap(repIcon+"/deleteRond.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.RBPoubelle.show() self.connect(self.RBPoubelle,SIGNAL("clicked()"),self.aDetruire) + def setIconesSalome(self): + if not (hasattr(self,"RBSalome")): return + from Accas import SalomeEntry + mc = self.node.item.get_definition() + mctype = mc.type[0] + enable_salome_selection = self.editor.salome and \ + (('grma' in repr(mctype)) or ('grno' in repr(mctype)) or ('SalomeEntry' in repr(mctype)) or \ + (hasattr(mctype, "enable_salome_selection") and mctype.enable_salome_selection)) + if enable_salome_selection: + self.connect(self.RBSalome,SIGNAL("pressed()"),self.BSalomePressed) + if not(('grma' in repr(mctype)) or ('grno' in repr(mctype))) or not(self.editor.salome): self.BView2D.close() + else : self.connect(self.RBSalomeVue,SIGNAL("clicked()"),self.BView2DPressed) + else: + self.RBSalome.close() + self.RBSalomeVue.close() + + + def setIconesFichier(self): + if not ( hasattr(self,"BFichier")): return + mc = self.node.item.get_definition() + mctype = mc.type[0] + if mctype == "Repertoire": + self.BRepertoire=self.BFichier + self.connect(self.BRepertoire,SIGNAL("clicked()"),self.BRepertoirePressed) + self.BVisuFichier.close() + else : + self.connect(self.BFichier,SIGNAL("clicked()"),self.BFichierPressed) + self.connect(self.BVisuFichier,SIGNAL("clicked()"),self.BFichierVisu) + + + + def setRun(self): if hasattr(self.editor.appliEficas, 'mesScripts'): if self.tree.currentItem().item.get_nom() in self.appliEficas.mesScripts.dict_commandes.keys() : @@ -101,10 +135,18 @@ class FacultatifOuOptionnel: icon=QIcon(self.repIcon+"/ast-red-ball.png") self.RBValide.setIcon(icon) + # il faut chercher la bonne fenetre def rendVisible(self): print "je passe par rendVisible de FacultatifOuOptionnel" - self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self) - self.setFocus() + print self + print self.node.fenetre + print "return pour etre sure" + return + #PNPN + newNode=self.node.treeParent.chercheNoeudCorrespondant(self.node.item.object) + print newNode + self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(newNode.fenetre) + #newNode.fenetre.setFocus() class ContientIcones: diff --git a/InterfaceQT4/gereListe.py b/InterfaceQT4/gereListe.py index 3c135293..3a846023 100644 --- a/InterfaceQT4/gereListe.py +++ b/InterfaceQT4/gereListe.py @@ -39,8 +39,10 @@ class LECustom(QLineEdit): self.num=i def focusInEvent(self,event): + print "dans focusInEvent de LECustom" self.parentQt.LineEditEnCours=self self.parentQt.NumLineEditEnCours=self.num + QLineEdit.focusInEvent(self,event) @@ -58,8 +60,6 @@ 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) - self.connect(self.RBSalome,SIGNAL("clicked()"),self.salomePushed) - self.connect(self.RBSalomeVue,SIGNAL("clicked()"),self.salomeVuePushed) def hautPushed(self): if self.NumLineEditEnCours == 1 : return @@ -140,9 +140,6 @@ class GereListe: f=ViewText(self,self.editor,entete,texteValeurs[0:-2]) f.show() - def salomePushed(self): - print "salomePushed" - - def salomeVuePushed(self): - print "salomeVuePushed" + def selectInFile(self): + print "selectInFile" diff --git a/InterfaceQT4/getVersion.py b/InterfaceQT4/getVersion.py index ae0b7b1e..65671a5b 100644 --- a/InterfaceQT4/getVersion.py +++ b/InterfaceQT4/getVersion.py @@ -3,7 +3,7 @@ __version = { 'major': 7, - 'minor': 3 + 'minor': 6 } def getEficasVersion(): diff --git a/InterfaceQT4/groupe.py b/InterfaceQT4/groupe.py index 4823604e..b92d03c5 100644 --- a/InterfaceQT4/groupe.py +++ b/InterfaceQT4/groupe.py @@ -49,7 +49,7 @@ class Groupe(QtGui.QWidget,FacultatifOuOptionnel): self.appliEficas=self.editor.appliEficas self.repIcon=self.appliEficas.repIcon self.jdc=self.node.item.get_jdc() - self.setPoubelle() + self.setIconePoubelle() self.setRun() self.setValide() self.setReglesEtAide() @@ -71,16 +71,16 @@ class Groupe(QtGui.QWidget,FacultatifOuOptionnel): def afficheMots(self): + print "ds afficheMots ",self.node.item.nom for node in self.node.children: - print "ds afficheMots ",node," " ,node.item.nom, " " - print "ds afficheMots ",node," " ,node.item.nom, " ",node.plie ," ", node.appartientAUnNoeudPlie + print "afficheMots ",node," " ,node.item.nom, " ",node.plie ," ", node.appartientAUnNoeudPlie # non return mais continue car il faut tenir compte des blocs if node.appartientAUnNoeudPlie==True : continue - print "je suis apres le if pour ",node.item.nom + #print "je suis apres le if pour ",node.item.nom widget=node.getPanelGroupe(self,self.maCommande) #print "widget pour ", node.item.nom, widget - #print "fin pour " , node.item.nom self.listeFocus.append(node.fenetre) + print "fin pour " , self.node.item.nom def calculOptionnel(self): @@ -178,3 +178,7 @@ class Groupe(QtGui.QWidget,FacultatifOuOptionnel): self.node.setDeplie() self.reaffiche(self.node) + def traiteClicSurLabel(self): + self.afficheOptionnel() + + diff --git a/InterfaceQT4/monChoixCommande.py b/InterfaceQT4/monChoixCommande.py index af68c8af..fb803fd8 100644 --- a/InterfaceQT4/monChoixCommande.py +++ b/InterfaceQT4/monChoixCommande.py @@ -60,6 +60,7 @@ class MonChoixCommande(Ui_ChoixCommandes,QtGui.QWidget): self.name=None self.AjouteRadioButton() self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.AjouteRadioButton) + if self.editor.affiche_alpha==0 : self.afficheGroupe() def afficheAlpha(self): self.affiche_alpha=1 @@ -85,9 +86,13 @@ class MonChoixCommande(Ui_ChoixCommandes,QtGui.QWidget): nouveau.setDeplie() #if self.editor.afficheApresInsert==True : nouveau.plieToutEtReaffiche() if self.editor.afficheApresInsert == True : - if self.editor.affichePlie ==True: nouveau.plieToutEtReaffiche() + #if self.editor.affichePlie==True: nouveau.plieToutEtReaffiche() + if self.editor.afficheCommandesPliees ==True: nouveau.plieToutEtReaffiche() else : nouveau.deplieToutEtReaffiche() + nouveau.fenetre.donnePremier() #nouveau.deplieToutEtReaffiche() + event.accept() + def CreeListeCommande(self,filtre): listeGroupes,dictGroupes=self.jdc.get_groups() diff --git a/InterfaceQT4/monWidgetCommande.py b/InterfaceQT4/monWidgetCommande.py index 270620fa..fd18d799 100644 --- a/InterfaceQT4/monWidgetCommande.py +++ b/InterfaceQT4/monWidgetCommande.py @@ -83,19 +83,32 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): self.monOptionnel=MonWidgetOptionnel(self) self.editor.widgetOptionnel=self.monOptionnel self.editor.splitter.addWidget(self.monOptionnel) - #print "dans init ", self.monOptionnel self.afficheOptionnel() #print "fin init de widget Commande" + def donnePremier(self): + #print "dans donnePremier" + qApp.processEvents() + self.listeAffichageWidget[0].setFocus(7) + #print self.listeAffichageWidget + qApp.processEvents() + #print self.focusWidget() + + def focusNextPrevChild(self, next): # on s assure que ce n est pas un chgt de fenetre #print "je passe dans focusNextPrevChild" if self.editor.fenetreCentraleAffichee != self : return True - try : - i= self.listeAffichageWidget.index(self.focusWidget()) - except : - i = -1 + f=self.focusWidget() + if f not in self.listeAffichageWidget : + i=0 + while not hasattr (f,'AAfficher') : + if f==None :i=-1; break + f=f.parentWidget() + if hasattr(f,'AAfficher') : f=f.AAfficher + if i != -1 : i=self.listeAffichageWidget.index(f) + else :i=self.listeAffichageWidget.index(f) if (i==len(self.listeAffichageWidget) -1) and next and not self.inhibe: self.listeAffichageWidget[1].setFocus(7) w=self.focusWidget() @@ -120,6 +133,17 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1]) i=i+1 # si on boucle on perd l'ordre + + def afficheSuivant(self,f): + try : + i=self.listeAffichageWidget.index(f) + next=i+1 + except : + next=1 + if (next==len(self.listeAffichageWidget) -1 ): next =0 + #self.f=next + #QTimer.singleShot(1, self.rendVisible) + self.listeAffichageWidget[next].setFocus(7) def nomChange(self): nom = str(self.LENom.text()) @@ -141,10 +165,10 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): self.monOptionnel.parentMC=self self.monOptionnel.affiche(liste) - def focusInEvent(self,event): + #def focusInEvent(self,event): #print "je mets a jour dans focusInEvent de monWidget Commande " - if self.editor.code == "CARMELCND" : return #Pas de MC Optionnels pour Carmel - self.afficheOptionnel() + # if self.editor.code == "CARMELCND" : return #Pas de MC Optionnels pour Carmel + # self.afficheOptionnel() def reaffiche(self,nodeAVoir=None): @@ -178,7 +202,7 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): def rendVisible(self): qApp.processEvents() - self.f.setFocus() + self.f.setFocus(7) self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f) def afficheCatalogue(self): diff --git a/InterfaceQT4/monWidgetCommentaire.py b/InterfaceQT4/monWidgetCommentaire.py index 6618a221..abdcf456 100644 --- a/InterfaceQT4/monWidgetCommentaire.py +++ b/InterfaceQT4/monWidgetCommentaire.py @@ -40,7 +40,7 @@ class MonWidgetCommentaire(QWidget,Ui_WidgetCommentaire,FacultatifOuOptionnel): self.node.fenetre=self self.setupUi(self) self.editor=editor - self.setPoubelle() + self.setIconePoubelle() self.remplitTexte() if self.editor.code in ['MAP','CARMELCND'] : self.bCatalogue.close() else : self.connect(self.bCatalogue,SIGNAL("clicked()"), self.afficheCatalogue) diff --git a/InterfaceQT4/monWidgetFact.py b/InterfaceQT4/monWidgetFact.py index 5f831e81..28d17ddf 100644 --- a/InterfaceQT4/monWidgetFact.py +++ b/InterfaceQT4/monWidgetFact.py @@ -37,7 +37,7 @@ class MonWidgetFact(Ui_WidgetFact,Groupe): self.GroupBox.setTextInteractionFlags(Qt.TextSelectableByMouse) self.parentQt.commandesLayout.insertWidget(-1,self) - def focusInEvent(self,event): - print "je passe dans focusInEvent" - if self.editor.code != "CARMELCND" :self.afficheOptionnel() + #def focusInEvent(self,event): + #print "je passe dans focusInEvent" + # if self.editor.code != "CARMELCND" :self.afficheOptionnel() diff --git a/InterfaceQT4/monWidgetFactPlie.py b/InterfaceQT4/monWidgetFactPlie.py index c7a53b72..454b8fbb 100644 --- a/InterfaceQT4/monWidgetFactPlie.py +++ b/InterfaceQT4/monWidgetFactPlie.py @@ -35,3 +35,6 @@ class MonWidgetFactPlie(Ui_WidgetFactPlie,Groupe): self.groupBox.setText(self.obj.nom) self.parentQt.commandesLayout.insertWidget(-1,self) + def traiteClicSurLabel(self): + return + diff --git a/InterfaceQT4/monWidgetInfo.py b/InterfaceQT4/monWidgetInfo.py new file mode 100644 index 00000000..402171d5 --- /dev/null +++ b/InterfaceQT4/monWidgetInfo.py @@ -0,0 +1,40 @@ +# -*- 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 +# +# Modules Python +import string,types,os + +# Modules Eficas +from PyQt4.QtGui import * +from PyQt4.QtCore import * +from Extensions.i18n import tr + +from desWidgetInformation import Ui_WidgetInformative + + +class MonWidgetInfo (Ui_WidgetInformative,QWidget): +# c est juste la taille des differents widgets de base qui change + + def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande): + QWidget.__init__(self,None) + self.setupUi(self) + valeur=node.item.get_valeur() + self.lineEditVal.setText(str(valeur)) + parentQt.commandesLayout.insertWidget(-1,self) + diff --git a/InterfaceQT4/monWidgetOptionnel.py b/InterfaceQT4/monWidgetOptionnel.py index 510321d6..eb797065 100644 --- a/InterfaceQT4/monWidgetOptionnel.py +++ b/InterfaceQT4/monWidgetOptionnel.py @@ -35,16 +35,23 @@ class monButtonCustom(QCheckBox): def mouseDoubleClickEvent(self, event): #print "dans mouseDoubleClickEvent" - if self not in self.monOptionnel.dicoCb.keys() : return + if self not in self.monOptionnel.dicoCb.keys() : + event.accept() + return listeCheckedMC="+"+self.monOptionnel.dicoCb[self] self.monOptionnel.parentMC.ajoutMC(listeCheckedMC) self.setChecked(False) + event.accept() + def mousePressEvent(self, event): #print "dans mousePressEvent" self.mousePressed=True - if not( event.button() != Qt.RightButton) : return + if not( event.button() != Qt.RightButton) : + event.accept() + return QCheckBox.mousePressEvent(self, event) + event.accept() class MonWidgetOptionnel (QWidget,Ui_WidgetOptionnel): @@ -62,9 +69,11 @@ class MonWidgetOptionnel (QWidget,Ui_WidgetOptionnel): self.cb=None self.parentQt=parentQt self.connect(self.bAjoutMC,SIGNAL("clicked()"), self.ajoutMC) + #print "fin init de monWidgetOptionnel ", parentQt, parentQt.node.item.nom + def affiche(self,liste): #print "dans Optionnel ____ affiche", liste self.show() @@ -82,8 +91,8 @@ class MonWidgetOptionnel (QWidget,Ui_WidgetOptionnel): for cb in self.dicoCb.keys(): #print 'je detruit', self.dicoCb[cb], cb + #print cb.close() cb.close() - #print self.commandesOptionnellesLayout.children() self.dicoCb={} liste.reverse() for mot in liste : @@ -91,6 +100,7 @@ class MonWidgetOptionnel (QWidget,Ui_WidgetOptionnel): #print "j ajoute ", mot, cb self.dicoCb[cb]=mot self.commandesOptionnellesLayout.insertWidget(0,cb) + #print "Fin Optionnel ____ affiche", liste def CBChecked(self): # ordre ? diff --git a/InterfaceQT4/monWidgetPlusieursBase.py b/InterfaceQT4/monWidgetPlusieursBase.py index b661744e..8f8fddab 100644 --- a/InterfaceQT4/monWidgetPlusieursBase.py +++ b/InterfaceQT4/monWidgetPlusieursBase.py @@ -39,10 +39,13 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe): def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande): #print "MonWidgetPlusieursBase", nom - self.index=1 + self.inInit=True self.indexDernierLabel=0 + self.listeAffichageWidget=[] Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande) GereListe.__init__(self) + self.connect(self.BSelectFichier,SIGNAL("clicked()"), self.selectInFile) + self.listeValeursCourantes=self.node.item.GetListeValeurs() if self.monSimpDef.max != "**" and self.monSimpDef.max < 7: hauteur=dicoLongueur[self.monSimpDef.max] @@ -54,10 +57,12 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe): self.setMinimumHeight(hauteurMax) self.parentQt.commandesLayout.insertWidget(1,self) self.maCommande.listeAffichageWidget.append(self.lineEditVal1) + self.AAfficher=self.lineEditVal1 + self.inInit=False def setValeurs(self): - #print "je passe dans SetValeur" + print "je passe dans SetValeur" self.vScrollBar = self.scrollArea.verticalScrollBar() self.politique=PolitiquePlusieurs(self.node,self.editor) # construction du min de valeur a entrer @@ -97,15 +102,27 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe): else : nouveauLE.setStyleSheet("background:rgb(235,235,235)") nouveauLE.setFrame(False) self.connect(nouveauLE,SIGNAL("returnPressed()"),self.changeValeur) - nouveauLE.setFocus() setattr(self,nomLineEdit,nouveauLE) + self.listeAffichageWidget.append(nouveauLE) + self.etablitOrdre() if valeur != None : nouveauLE.setText(str(valeur)) # deux lignes pour que le ensureVisible fonctionne self.estVisible=nouveauLE - QTimer.singleShot(1, self.rendVisibleLigne) + if self.inInit==False :QTimer.singleShot(1, self.rendVisibleLigne) + + def etablitOrdre(self): + i=0 + while(i +1 < len(self.listeAffichageWidget)): + self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus) + self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1]) + i=i+1 + # si on boucle on perd l'ordre + def rendVisibleLigne(self): + #PNPNP + return qApp.processEvents() self.estVisible.setFocus() self.scrollArea.ensureWidgetVisible(self.estVisible,0,0) diff --git a/InterfaceQT4/monWidgetRadioButton.py b/InterfaceQT4/monWidgetRadioButton.py index ae75024f..c8f89b1a 100644 --- a/InterfaceQT4/monWidgetRadioButton.py +++ b/InterfaceQT4/monWidgetRadioButton.py @@ -40,6 +40,7 @@ class MonWidgetRadioButtonCommun (Feuille): self.determineChoix() self.setValeursApresBouton() self.parentQt.commandesLayout.insertWidget(-1,self) + self.AAfficher=self.radioButton_1 self.maCommande.listeAffichageWidget.append(self.radioButton_1) diff --git a/InterfaceQT4/monWidgetSimpBase.py b/InterfaceQT4/monWidgetSimpBase.py index f61c9f4f..a03db34a 100644 --- a/InterfaceQT4/monWidgetSimpBase.py +++ b/InterfaceQT4/monWidgetSimpBase.py @@ -38,14 +38,16 @@ class MonWidgetSimpBase (Ui_WidgetSimpBase,Feuille): self.parentQt.commandesLayout.insertWidget(-1,self) self.setFocusPolicy(Qt.StrongFocus) self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.LEValeurPressed) + self.AAfficher=self.lineEditVal self.maCommande.listeAffichageWidget.append(self.lineEditVal) - def showEvent(self, event): - if self.prendLeFocus==1 : - self.activateWindow() - self.lineEditVal.setFocus() - self.prendLeFocus=0 - QWidget.showEvent(self,event) + + #def showEvent(self, event): + # if self.prendLeFocus==1 : + # self.activateWindow() + # self.lineEditVal.setFocus() + # self.prendLeFocus=0 + # QWidget.showEvent(self,event) def setValeurs(self): self.politique=PolitiqueUnique(self.node,self.editor) diff --git a/Noyau/N_MCCOMPO.py b/Noyau/N_MCCOMPO.py index dbc7f727..e4258783 100644 --- a/Noyau/N_MCCOMPO.py +++ b/Noyau/N_MCCOMPO.py @@ -103,12 +103,15 @@ class MCCOMPO(N_OBJECT.OBJECT): # A ce stade, mc_liste ne contient que les fils de l'objet courant # args ne contient plus que des mots-clés qui n'ont pas été attribués car ils sont # à attribuer à des blocs du niveau inférieur ou bien sont des mots-clés erronés - dico_valeurs = self.cree_dict_condition(mc_liste, condition=1) for k, v in self.definition.entites.items(): - if v.label != 'BLOC': - continue + if v.label != 'BLOC': continue + # condition and a or b : Equivalent de l'expression : condition ? # a : b du langage C + #PNPN on recalcule dico_valeurs dans le for + # pour les globaux imbriques (exple Telemac Advection) + # avant le calcul etait avant le for + dico_valeurs = self.cree_dict_condition(mc_liste, condition=1) globs = self.jdc and self.jdc.condition_context or {} if v.verif_presence(dico_valeurs, globs): # Si le bloc existe : diff --git a/Noyau/N_PROC.py b/Noyau/N_PROC.py index ab3f0378..70f3bee7 100644 --- a/Noyau/N_PROC.py +++ b/Noyau/N_PROC.py @@ -92,7 +92,7 @@ class PROC(N_ENTITE.ENTITE): self.reentrant = reentrant self.repetable = repetable self.fr = fr - self.ang="" + self.ang=ang self.docu = docu if type(regles) == types.TupleType: self.regles = regles diff --git a/Telemac/Telemac_Cata.py b/Telemac/Telemac_Cata.py index 3e11b260..5a3c01b7 100644 --- a/Telemac/Telemac_Cata.py +++ b/Telemac/Telemac_Cata.py @@ -43,6 +43,8 @@ JdC = JDC_CATA (code = 'MAP', INITIALIZATION=PROC(nom="INITIALIZATION",op=None, fr="Initialisation des fichiers d'entrée et de sortie", ang="Input and Output files initialization", + #UIinfo = { "groupes" : ( "CACHE", )}, + UIinfo = { "groupes" : ( "iiii", )}, Title = SIMP( statut='o',typ='TXM', fr='Titre du cas etudie. Ce titre figurera sur les dessins.', @@ -51,9 +53,11 @@ INITIALIZATION=PROC(nom="INITIALIZATION",op=None, #Working_Directory = SIMP( statut='o',typ='Repertoire',defaut='/tmp'), Input_Files= FACT(statut='o', - Dictionary = SIMP( statut='o', typ = ('Fichier', 'Dico (*.dico);;All Files (*)',), - defaut='telemac2d.dico', - fr='Dictionnaire des mots cles.', ang='Key word dictionary.',), + # Dictionary = SIMP( statut='o', typ = ('Fichier', 'Dico (*.dico);;All Files (*)',), + # defaut='telemac2d.dico', + # fr='Dictionnaire des mots cles.', ang='Key word dictionary.',), +# PN : le mot cle doit etre dans le dictionnaire et repris du catalogue mais n +# est pas modifiable Geometry_File_Format = SIMP( statut='o',typ='TXM',into=['SERAFIN','MED','SERAFIND'], defaut='SERAFIN', fr='Format du fichier de geometrie. Les valeurs possibles sont : \n \ @@ -72,17 +76,17 @@ INITIALIZATION=PROC(nom="INITIALIZATION",op=None, #Steering_File = SIMP( statut='o', typ = ('Fichier', 'Steering Files (*.cas);;All Files (*)',),), + + Fortran_File = SIMP(statut='f',typ = ('Fichier', 'Fortran files (*.f);;All Files (*)'), + fr='Nom du fichier a soumettre', + ang='Name of FORTRAN file to be submitted',), + Bottom_Topography_File = SIMP( statut='f', typ = ('Fichier', 'Geo Files (*.geo);;All Files (*)',), fr = "Nom du fichier eventuel contenant la bathymetrie associee au maillage. \ Si ce mot-cle est utilise; c'est cette bathymetrie qui sera utilisee pour le calcul.", ang = 'Name of the possible file containing the bathymetric data.\ Where this keyword is used, these bathymetric data shall be used in the computation.', ), - - Fortran_File = SIMP(statut='f',typ = ('Fichier', 'Fortran files (*.f);;All Files (*)'), - fr='Nom du fichier a soumettre', - ang='Name of FORTRAN file to be submitted',), - Boundary_Conditions_File = SIMP( statut='o', typ = ('Fichier', 'Boundary Condition (*.cli);;All Files (*)',), fr='Nom du fichier contenant les types de conditions aux limites. Ce fichier est rempli de facon automatique\n\ par le mailleur au moyen de couleurs affectees aux noeuds des frontieres du domaine de calcul.', @@ -110,6 +114,12 @@ Where this keyword is used, these bathymetric data shall be used in the computat Formatted_And_Binary_Files=FACT( statut='f', + Formatted_File1 = SIMP( statut='f', typ = ('Fichier', 'formated File (*.txt);;All Files (*)',), + fr = "Fichier de donnees formate mis a la disposition de l''utilisateur. \n\ +Les donnees de ce fichier seront a lire sur le canal 26.", + ang = 'Formatted data file made available to the user.\n\ +The data in this file shall be read on channel 26.', + ), Formatted_File2 = SIMP( statut='f', typ = ('Fichier', 'formated File (*.txt);;All Files (*)',), fr = "Fichier de donnees formate mis a la disposition de l'utilisateur. \n\ @@ -134,9 +144,10 @@ The data in this file shall be read on channel 25.', ), # Fin de InputFile - Computation_Continued=FACT( statut='f', + Computation_Continued=SIMP( statut='o',typ=bool,defaut=False), + b_comput_con = BLOC(condition = 'Computation_Continued== True', -#PNPNPN Computation_Continued == Validation + Computattion_Continued_Settings=FACT(statut='o', Previous_Computation_File_Format=SIMP( statut='o',typ='TXM', into=['SERAFIN','MED','SERAFIND'], defaut='SERAFIN', @@ -157,10 +168,7 @@ The data in this file shall be read on channel 25.', ang = 'Name of a file containing the results of an earlier computation which was made on the same mesh.\n\ The last recorded time step will provid the initial conditions for the new computation.', ), - Previous_Computation_Comm = SIMP( statut='f', typ = ('Fichier', 'COMM(*.comm);;All Files (*)',), - fr = "Nom du fichier .comm décrivant le cas précédent", - ang = "Name of a file containing the earlier study" ,), - Initial_Time_Set = SIMP(typ=bool, statut='f', + Initial_Time_Set = SIMP(typ=bool, statut='o', fr = 'Remet le temps a zero en cas de suite de calcul', ang = 'Initial time set to zero in case of restart', defaut="False"), @@ -168,14 +176,9 @@ The data in this file shall be read on channel 25.', fr = "numero de l'enregistrement de depart dans le fichier du calcul precedent. 0 signifie qu'on prend le dernier enregistrement", ang ="record number to start from in the previous computation file, 0 for last record" ), ), + ),# fin Fact conputation - Computation=FACT(statut='o', - #Machine=FACT( statut='o', -# A voir plus tar Obsolete ? - # Parallel_Processors=SIMP(statut='o',typ='I',val_min=0,defaut=1), - #Parallel_Computation=SIMP(statut='o',typ=bool,defaut=False), - # ), - Coupling=FACT( statut='o', + Coupling=FACT( statut='o', Sisyphe=SIMP(statut='o',typ=bool,defaut=False), Tomawac=SIMP(statut='o',typ=bool,defaut=False), Delwacq=SIMP(statut='o',typ=bool,defaut=False), @@ -188,7 +191,10 @@ The data in this file shall be read on channel 25.', TOMAWAC : internal coupling with Tomawac\n\ DELWAQ: will yield results file for Delwaq', ), - ), + Parallel_Computation=SIMP(statut='o',typ='TXM',into=['Sequentiel','Parallel'],defaut='Sequentiel',), + b_para = BLOC(condition = 'Parallel_Computation== "Parallel"', + Parallel_Processors=SIMP(statut='o',typ='I',val_min=0,defaut=1), + ), ) TIDE_PARAMETERS=PROC(nom="TIDE_PARAMETERS",op=None, @@ -209,27 +215,7 @@ TIDE_PARAMETERS=PROC(nom="TIDE_PARAMETERS",op=None, ), - Time=FACT( statut='o', - #Original_Date_Of_Time=SIMP(statut='f',typ=DateJJMMAAAA,validators=VerifTypeTuple(('R','R','R'))), - #Original_Hour_Of_Time=SIMP(statut='f',typ=HeureHHMMSS,validators=VerifTypeTuple(('R','R','R'))), - Original_Date_Of_Time=FACT( statut='o', - fr = "Permet de fixer la date d'origine des temps du modele lors de la prise en compte de la force generatrice de la maree.", - ang ='Give the date of the time origin of the model when taking into account the tide generating force.', - Year=SIMP(statut='o',typ='I',val_min=1900,defaut=1900), - Month=SIMP(statut='o',typ='I',val_min=1,val_max=12,defaut=1), - Day=SIMP(statut='o',typ='I',val_min=1,val_max=31,defaut=1), - ), - Original_Hour_Of_Time=FACT( statut='f', - fr = "Permet de fixer l'heure d'origine des temps du modele lors de la prise en compte de la force generatrice de la maree.", - ang ='Give the time of the time origin of the model when taking into account the tide generating force.', - Hour=SIMP(statut='o',typ='I',val_min=0,val_max=24,defaut=0), - Minute=SIMP(statut='o',typ='I',val_min=0,val_max=60,defaut=0), - Second=SIMP(statut='o',typ='I',val_min=0,val_max=60,defaut=0), - ), - ), - Location=FACT( statut='f', - #regles=( PRESENT_PRESENT('Longitude_Of_origin','Latitute_Of_origin', ),), - #Spatial_Projection=SIMP(statut='f',typ='I',into=[1,2,3]), + Location=FACT( statut='o', #Geographic_System=SIMP(statut='f',typ='I',into=[-1,0,1,2,3,4,5]), Geographic_System=SIMP(statut='f',typ='TXM', @@ -238,25 +224,20 @@ TIDE_PARAMETERS=PROC(nom="TIDE_PARAMETERS",op=None, fr = 'Systeme de coordonnees geographiques dans lequel est construit le modele numerique.', ang = 'Geographic coordinates system in which the numerical model is built.Indicate the corresponding zone with the keyword ', ), - b_geo_system = BLOC(condition = "Geographic_System in ('WGS84 LONGITUDE/LATITUDE EN DEGRES REELS','WGS84 NORD UTM','WGS84 SUD UTM','MERCATOR')", - Spatial_Projection=SIMP(statut='o',typ='TXM',into=["CARTESIAN, NOT GEOREFERENCED","MERCATOR","LATITUDE LONGITUDE"]), - ang = 'Option 2 or 3 mandatory for spherical coordinates Option 3: latitude and longitude in radians!', - b_lat = BLOC(condition = "Spatial_Projection == 'LATITUDE LONGITUDE' ", - Latitude_Of_Origin=SIMP(statut='o',typ='R',val_min=-90,val_max=90,fr="en radians", ang="in radians"), - Longitude_Of_Origin=SIMP(statut='o',typ='R',fr="en radians", ang="in radians"), - ), # fin bloc b_lat - ), # fin bloc b_geo -# declenchement du calcul du mot_clef SPHERICAL COORDINATES Zone_number_in_Geographic_System=SIMP(statut='f',typ='TXM', #into=[-1,0,1,2,3,4,22,30], into=[ 'LAMBERT 1 NORD', 'LAMBERT 2 CENTRE', 'LAMBERT 3 SUD', 'LAMBERT 4 CORSE', 'LAMBERT 2 ETENDU', 'ZONE UTM, PAR EXEMPLE'], fr="Numero de zone (fuseau ou type de projection) lors de l'utilisation d'une projection plane.\n Indiquer le systeme geographique dans lequel est construit le modele numerique avec le mot-cle SYSTEME GEOGRAPHIQUE", ang='Number of zone when using a plane projection. \nIndicate the geographic system in which the numerical model is built with the keyword GEOGRAPHIC SYSTEM'), - ), - Physical_Parameters=FACT(statut='o', + ), + Physical_Parameters=FACT(statut='o', Tide_Generating_Force=SIMP(statut='o',typ=bool,defaut=False), b_Tide = BLOC(condition = "Tide_Generating_Force==True", + Longitude_Of_Origin_Point=SIMP(typ='R',statut='o',defaut=48., + fr = 'Fixe la valeur de la longitude du point origine du modele, lors de l utilisation de la force generatrice de la maree.', + ang = 'Give the value of the longitude of the origin point of the model, when taking into account of the tide generator force.', + ), Tidal_Data_Base=SIMP(statut='o',typ='TXM', into=[ "JMJ", "TPXO", "LEGOS-NEA", "FES20XX", "PREVIMER",], fr = 'Pour JMJ, renseigner la localisation du fichier bdd_jmj et geofin dans les mots-cles BASE DE DONNEES DE MAREE \n\ @@ -266,19 +247,25 @@ ang = 'For JMJ, indicate the location of the files bdd_jmj and geofin with keywo For TPXO, LEGOS-NEA, FES20XX and PREVIMER, the user has to download files of harmonic constituents on the internet', ), -#-1,1,2,3,4]), + b_tpxo =BLOC(condition = "Tidal_Data_Base=='TPXO'", + Minor_Constituents_Inference = SIMP( statut='o',typ='bool', + defaut=False , + fr = 'Interpolation de composantes harmoniques mineures a partir de celles lues dans les fichiers dentree lies aux mots-cles BASE BINAIRE 1 DE DONNEES DE MAREE et BASE BINAIRE 2 DE DONNEES DE MAREE', + ang= 'Inference of minor constituents from the one read in input files linked to keywords BINARY DATABASE 1 FOR TIDE and BINARY DATABASE 2 FOR TIDE', + ), + ),#fin du bloc b_tpxo + +#-1,1,2,3,4], Coefficient_To_Calibrate_Tidal_Range=SIMP(statut='o',typ='R',sug=1.), Coefficient_To_Calibrate_Tidal_Velocity=SIMP(statut='o',typ='R',sug=999999), Coefficient_To_Calibrate_Sea_Level=SIMP(statut='o',typ='R',sug=0.), Binary_Database_1_for_Tide = SIMP( statut='o', typ = ('Fichier', '(All Files (*),)',),), Binary_Database_2_for_Tide = SIMP( statut='o', typ = ('Fichier', '(All Files (*),)',),), - ), - - Wave_Driven_Currents=SIMP(statut='f',typ=bool,sug=False), + ), + Wave_Driven_Currents=SIMP(statut='o',typ=bool,defaut=False), b_Wave =BLOC(condition = "Wave_Driver_Currents=='True'", Record_Number_in_Wave_File=SIMP(statut='f',typ='I',sug=1), ), - ), Option_For_Tidal_Boundary_Conditions = SIMP( statut='o',typ='TXM',defaut='No tide', into=['No tide', 'Real tide (recommended methodology)', 'Astronomical tide', 'Mean spring tide', 'Mean tide',\ @@ -299,8 +286,9 @@ For TPXO, LEGOS-NEA, FES20XX and PREVIMER, the user has to download files of har fr = 'Coefficient pour ajuster le marnage de l''onde de maree aux frontieres maritimes', ang = 'Coefficient to calibrate the tidal range of tidal wave at tidal open boundary conditions', ), + ), ), - +# ) # Fin TIDE_PARAMETERS INITIAL_STATE=PROC(nom="INITIAL_STATE",op=None, @@ -346,8 +334,10 @@ INITIAL_STATE=PROC(nom="INITIAL_STATE",op=None, ), # fin b_special +#PNPN il faut changer la condition pour que cela soit dans maree. il faut une position=global_jdc et remonter +# cela b_initial_TPXO = BLOC (condition = "Initial_Conditions == 'TPXO SATELLITE ALTIMETRY'", - Base_Ascii_De_Donnees_De_Maree = SIMP( statut='o', typ = ('Fichier', 'All Files (*)',), ), + Ascii_Database_For_Tide = SIMP( statut='o', typ = ('Fichier', 'All Files (*)',), ), fr = 'Base de donnees de constantes harmoniques tirees du fichier du modele de maree', ang = 'Tide data base of harmonic constituents extracted from the tidal model file', ), # fin b_initial_TPXO @@ -356,6 +346,8 @@ INITIAL_STATE=PROC(nom="INITIAL_STATE",op=None, BOUNDARY_CONDITIONS=PROC(nom="BOUNDARY_CONDITIONS",op=None, fr = 'On donne un ensemble de conditions par frontiere liquide', ang = 'One condition set per liquid boundary is given', + #UIinfo = { "groupes" : ( "CACHE", )}, + UIinfo = { "groupes" : ( "iiii", )}, # Dans l ideal il faut aller regarder selon les groupes dans le fichier med # en sortie il faut aller chercher le .cli qui va bien #Liquid_Boundaries=FACT(statut='f',max='**', @@ -408,13 +400,14 @@ Les donnees de ce fichier seront a lire sur le canal 12.', #PNPN Attention dans le Dico STAGE-DISCHARGE CURVES +#PNPN regarder le document de reference pour changer non programme Stage_Discharge_Curves = SIMP(statut='f',typ='TXM', #into=[0,1,2], into=["no","Z(Q)","not programmed"], fr='Indique si une courbe de tarage doit etre utilisee pour une frontiere', ang='Says if a discharge-elevation curve must be used for a given boundary', ), - b_discharge_curve = BLOC (condition = "Stage_Discharge_Curves == 'Z(Q)'", + b_discharge_curve = BLOC (condition = "Stage_Discharge_Curves != 'no'", #PNPN Attention dans le Dico STAGE-DISCHARGE CURVES FILES Stage_Discharge_Curves_File = SIMP( statut='f', typ = ('Fichier', 'All Files (*)',), @@ -437,6 +430,8 @@ Les donnees de ce fichier seront a lire sur le canal 12.', NUMERICAL_PARAMETERS=PROC(nom="NUMERICAL_PARAMETERS",op=None, + #UIinfo = { "groupes" : ( "CACHE", )}, + UIinfo = { "groupes" : ( "iiii", )}, Solver_Definition=FACT(statut='o', Equations=SIMP(statut='o',typ='TXM', @@ -483,12 +478,12 @@ Note: a maximum number of 40 iterations per time step seems to be reasonable.', ), ), # fin Solver - Time=FACT(statut='f', + Time=FACT(statut='o', regles=(AU_MOINS_UN('Number_Of_Time_Steps','Duration'), EXCLUS('Number_Of_Time_Steps','Duration'), ), - Time_Step=SIMP(statut='o',typ='R'), + Time_Step=SIMP(statut='o',typ='R',defaut=1), Number_Of_Time_Steps=SIMP(statut='f',typ='I', fr='Definit le nombre de pas de temps effectues lors de l''execution du code.', ang='Specifies the number of time steps performed when running the code.'), @@ -497,6 +492,19 @@ Note: a maximum number of 40 iterations per time step seems to be reasonable.', b_var_time = BLOC(condition = "Variable_Time_Step==True" , Desired_Courant_Number=SIMP(statut='o',typ='R'), ), + Original_Date_Of_Time=FACT( statut='o', + fr = "Permet de fixer la date d'origine des temps du modele lors de la prise en compte de la force generatrice de la maree.", + ang ='Give the date of the time origin of the model when taking into account the tide generating force.', + Year=SIMP(statut='o',typ='I',val_min=1900,defaut=1900), + Month=SIMP(statut='o',typ='I',val_min=1,val_max=12,defaut=1), + Day=SIMP(statut='o',typ='I',val_min=1,val_max=31,defaut=1),), + Original_Hour_Of_Time=FACT( statut='f', + fr = "Permet de fixer l'heure d'origine des temps du modele lors de la prise en compte de la force generatrice de la maree.", + ang ='Give the time of the time origin of the model when taking into account the tide generating force.', + Hour=SIMP(statut='o',typ='I',val_min=0,val_max=24,defaut=0), + Minute=SIMP(statut='o',typ='I',val_min=0,val_max=60,defaut=0), + Second=SIMP(statut='o',typ='I',val_min=0,val_max=60,defaut=0), + ), Stop_If_A_Steady_State_Is_Reached=SIMP(statut='f',typ=bool,defaut='False'), b_stop = BLOC(condition = "Stop_If_A_Steady_State_Is_Reached==True" , @@ -647,6 +655,10 @@ The non-linearities can be taken into account through this technique.',), ), ), ), + Scheme_For_Advection_Of_K_Epsilon=SIMP(statut='o',typ='TXM', + into=["no advection", "characteristics", "explicit + supg"," postma", "explicit + murd scheme n", "explicit + murd scheme psi", "leo postma for tidal flats", "n-scheme for tidal flats"], + fr = 'Choix du schema de convection pour k et epsilon, remplace FORME DE LA CONVECTION', + ang = 'Choice of the advection scheme for k and epsilon, replaces TYPE OF ADVECTION',), #PNPNPN # recalculer la liste de 4 @@ -772,85 +784,6 @@ This key-word may have an influence on mass conservation since the truncation of ), ), - Turbulence=FACT(statut='f', - Solver_For_K_epsilon_Model = SIMP( statut='o',typ='TXM', - defaut="conjugate gradient" , - into =("conjugate gradient", "conjugate residuals", "conjugate gradient on normal equation", "minimum error", "conjugate gradient squared",\ - "conjugate gradient squared stabilised (cgstab)", "gmres", "direct"), - #into =('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 (see option for the solver for k-epsilon model)"', '8="direct"'), - fr = 'Permet de choisir le solveur utilise pour la resolution du systeme du modele k-epsilon', - ang= 'Makes it possible to select the solver used for solving the system of the k-epsilon model.', - ), - - b_gmres=BLOC(condition='Solver_For_K_epsilon_Model=="gmres"', - Option_For_The_Solver_For_K_epsilon_Model = SIMP( statut='o',typ='I', - defaut=2 ,val_min=2,val_max=15, - fr = 'le mot cle est la dimension de lespace de KRILOV (valeurs conseillees entre 2 et 7)', - ang= 'dimension of the krylov space try values between 2 and 7',), - ), - - Preconditioning_For_K_epsilon_Model = SIMP( statut='o',typ='TXM', - defaut='diagonal' , - into =("diagonal", "no preconditioning", "diagonal condensed", "crout", "diagonal and crout", "diagonal condensed and crout"), - #into =('2="diagonal"', '0="no preconditioning"', '3="diagonal condensed"', '7="crout"', '14="diagonal and crout"', '21="diagonal condensed and crout"'), - fr = 'Permet de preconditionner le systeme relatif au modele k-epsilon', - ang= 'Preconditioning of the linear system in the diffusion step of the k-epsilon model.', - ), - - Turbulence_Model = SIMP( statut='o',typ='TXM', defaut="CONSTANT VISCOSITY", - #into =('1="CONSTANT VISCOSITY"', '2="ELDER"', '3="K-EPSILON MODEL"', '4="SMAGORINSKI"'), - into =("Constant Viscosity", "Elder", "K-Epsilon Model", "Smagorinski"), - - fr = 'si on choisit loption 2 il ne faut pas oublier dajuster les deux valeurs du mot-cle : COEFFICIENTS ADIMENSIONNELS DE DISPERSION Si on choisit loption 3, ce meme parametre doit retrouver sa vraie valeur physique car elle est utilisee comme telle dans le modele de turbulence', - ang= 'When option 2 is chosen, the two values of key-word : NON-DIMENSIONAL DISPERSION COEFFICIENTS are used When option 3 is chosen, this parameter should recover its true physical value, since it is used as such in the turbulence model.', - ), - - b_turbu_const=BLOC(condition='Turbulence_Model=="Constant Viscosity"', - Velocity_Diffusivity=SIMP( statut='o',typ='R',defaut=1.E-6, - fr='Fixe de facon uniforme pour l ensemble du domaine la valeur du coefficient de diffusion de viscosite globale (dynamique + turbulente).\n\ -Cette valeur peut avoir une influence non negligeable sur la forme et la taille des recirculations.', - ang = 'Sets, in an even way for the whole domain, the value of the coefficient of global (dynamic+turbulent) viscosity. \n\ -this value may have a significant effect both on the shapes and sizes of recirculation zones.',), - - ), - b_turbu_elder=BLOC(condition='Turbulence_Model=="Elder"', - Non_Dimensional_Dispersion_Coefficients = SIMP (statut='o', - typ=Tuple(2),validators=VerifTypeTuple(('R','R')),defaut=(6.,0.6), - fr = 'coefficients longitudinal et transversal dans la formule de Elder.', - ang = 'Longitudinal and transversal coefficients in elder s formula. Used only with turbulence model number 2',), - ), - - Accuracy_Of_K = SIMP( statut='o',typ='R', defaut=1e-09 , - fr = 'Fixe la precision demandee sur k pour le test darret dans letape de diffusion et termes sources du modele k-epsilon.', - ang= 'Sets the required accuracy for computing k in the diffusion and source terms step of the k-epsilon model.', - ), - - Accuracy_Of_Epsilon = SIMP( statut='o',typ='R', defaut=1e-09 , - fr = 'Fixe la precision demandee sur epsilon pour le test darret dans letape de diffusion et termes sources de k et epsilon.', - ang= 'Sets the required accuracy for computing epsilon in the diffusion and source-terms step of the k-epsilon model.', - ), - Time_Step_Reduction_For_K_epsilon_Model = SIMP( statut='f',typ='R', defaut=1.0 , - fr = 'Coefficient reducteur du pas de temps pour le modele k-epsilon (qui est normalement identique a celui du systeme hydrodynamique).\n\ -Utilisation deconseillee', - ang= 'Time step reduction coefficient for k-epsilon model (which is normally same the same as that of the hydrodynamic system).\n\ -Not recommended for use.', - ), - Maximum_Number_Of_Iterations_For_K_And_Epsilon = SIMP( statut='o',typ='I', - defaut=50 , - fr = 'Fixe le nombre maximum diterations accepte lors de la resolution du systeme diffusion-termes sources du modele k-epsilon.', - ang= 'Sets the maximum number of iterations that are acceptable when solving the diffusion source-terms step of the k-epsilon model.', - ), - Turbulence_Model_For_Solid_Boundaries = SIMP( statut='o',typ='TXM', - defaut='rough' , - #into =('1=smooth', '2=rough'), - into =('smooth', 'rough'), - fr = 'Permet de choisir le regime de turbulence aux parois ', - ang= 'Provided for selecting the type of friction on the walls', - ), - - - ),# fin Turbulence - Various=FACT( Finite_Volume_Scheme = SIMP( statut='o',typ='TXM', #CHoix de 0 a 6 @@ -877,24 +810,50 @@ Not recommended for use.', PHYSICAL_PARAMETERS=PROC(nom="PHYSICAL_PARAMETERS",op=None, Atmosphere=FACT(statut='f', - Wind=SIMP(statut='f',typ=bool,sug=False), - b_Wind =BLOC(condition = "Wind=='True'", + Wind=SIMP(statut='o',typ=bool,defaut=False), + b_Wind =BLOC(condition = "Wind==True", regles=( PRESENT_PRESENT('Wind_Velocity_along_X','Wind_Velocity_along_Y', ),), - Coefficient_Of_Wind_Influence=SIMP(statut='f',typ='R',sug=0,), - Wind_Velocity_along_X=SIMP(statut='f',typ='R',sug=0,), - Wind_Velocity_along_Y=SIMP(statut='f',typ='R',sug=0,), - Threashold_Depth_for_Wind=SIMP(statut='f',typ='R',sug=0,), - Air_Pressure=SIMP(statut='f',typ=bool,sug=False), - ), - Rain_or_Evaporation=SIMP(statut='f',typ=bool,sug=False), - b_Rain =BLOC(condition = "Rain_or_Evaporation=='True'", - Rain_or_Evaporation_in_mm_perday=SIMP(statut='f',typ='I',sug=0), - ), - ), + Wind_Velocity_along_X=SIMP(statut='o',typ='R',defaut=0.,), + Wind_Velocity_along_Y=SIMP(statut='o',typ='R',defaut=0.,), + Threashold_Depth_for_Wind=SIMP(statut='o',typ='R',defaut=0.,), + Air_Pressure=SIMP(statut='o',typ=bool,defaut=False), + Coefficient_Of_Wind_Influence = SIMP( statut='o',typ='R', defaut=0.0 , + fr = 'Fixe la valeur du coefficient d entrainement du vent (cf. Note de principe).', + ang= 'Sets the value of the wind driving coefficient. Refer to principle note.', + ), + + + Option_For_Wind = SIMP( statut='o',typ='TXM', defaut=0 , + into=["no wind","constant in time and space","variable in time","variable in time and space"], + fr = 'donne les options pour introduire le vent', + ang= 'gives option for managing the wind' + ), + file_for_wind = BLOC (condition = 'Option_For_Wind== "variable in time" or Option_For_Wind == "variable in time and space"', + Consigne = SIMP(statut="o",homo='information',typ="TXM", defaut=" give formated file 3"), + ), + speed_for_wind = BLOC (condition = 'Option_For_Wind== "constant in time and space"', + Speed_And_Direction_Of_Wind = SIMP( statut='o', defaut=(0.0, 0.0) , typ=Tuple(2),validators=VerifTypeTuple(('R','R')), + fr = 'Donne la vitesse et la direction (en degres de 0 a 360, 0 etant y=0 et x=+inf) du vent', + ang= 'gives the speed and direction (degre (from 0 to 360), 0 given y=0 anx x=+infinity)', + ), + ), + ), # fin b_Wind + + Value_Of_Atmospheric_Pressure = SIMP( statut='o',typ='R', + defaut=100000.0 , + fr = 'donne la valeur de la pression atmospherique lorsquelle est constante en temps et en espace', + ang= 'gives the value of atmospheric pressure when it is contant in time and space', + ), + Rain_or_Evaporation=SIMP(statut='o',typ=bool,defaut=False), + b_Rain =BLOC(condition = "Rain_or_Evaporation==True", + Rain_or_Evaporation_in_mm_perday=SIMP(statut='o',typ='I',defaut=0.), + ), + ), # fin atmosphere Friction_Data=SIMP(statut='o',typ=bool,defaut=False), b_Friction = BLOC(condition = "Friction_Data==True", + Friction_Setting=FACT(statut='o', Friction_Data_File = SIMP( statut='o', typ = ('Fichier', ';;All Files (*)'), fr = 'fichier de donnees pour le frottement', @@ -907,8 +866,8 @@ PHYSICAL_PARAMETERS=PROC(nom="PHYSICAL_PARAMETERS",op=None, ang= '1: nodal 2: average', ), Law_Of_Bottom_Friction = SIMP( statut='o',typ='TXM', - defaut='0="NO FRICTION"' , - into =('0="NO FRICTION"', '1="HAALAND"', '2="CHEZY"', '3="STRICKLER"', '4="MANNING"', '5="NIKURADSE"','Log Law of Boundaries 6','Colebrooke_White Log 7'), + defaut='NO FRICTION' , + into =('NO FRICTION', '1="HAALAND"', '2="CHEZY"', '3="STRICKLER"', '4="MANNING"', '5="NIKURADSE"','Log Law of Boundaries 6','Colebrooke_White Log 7'), fr = 'selectionne le type de formulation utilisee pour le calcul du frottement sur le fond.', ang= 'Selects the type of formulation used for the bottom friction.', ), @@ -924,7 +883,7 @@ It is noteworthy that the meaning of this figure changes according to the select 1 : linear coefficient 2 : Chezy coefficient 3 : Strickler coefficient 4 : Manning coefficient 5 : Nikuradse grain size', ), ), - b_Colebrooke_White = BLOC(condition =' "Law_Of_Bottom_Friction" in ("Colebrooke_White Log 7",)', + b_Colebrooke_White = BLOC(condition ="Law_Of_Bottom_Friction =='Colebrooke_White Log 7'", Manning_Default_Value_For_Colebrook_white_Law = SIMP( statut='o',typ='R', defaut=0.02 , fr = 'valeur par defaut du manning pour la loi de frottement de Colebrook-White ', @@ -980,6 +939,7 @@ fr ='Si > 0., declenche la procedure de ressuyage qui evite le franchissement pa ang='If > 0., will trigger the receding procedure that avoids overwhelming of dykes which are too loosely discretised ', ), + ), ), # Fin de Friction Parameter_Estimation=FACT(statut='f', Parameter_Estimation = SIMP( statut='o',typ='TXM', into =["FRICTION","FROTTEMENT, STEADY"], @@ -1014,7 +974,61 @@ ang='If > 0., will trigger the receding procedure that avoids overwhelming of dy min=4,max=4,) ), -) + + + Number_Of_Sources = SIMP( statut='o',typ='I', defaut=0 ,), +#PNPNPNPN saisir autant de source du le nombre +# Attention a la sortie a reformatter. voir page 68 du user manuel V7 + sources_exist=BLOC(condition="Number_Of_Sources!=0", + Sources_File = SIMP( statut='o',typ = ('Fichier', 'All Files (*)',), + fr = 'Nom du fichier contenant les informations variables en temps des sources', + ang= 'Name of the file containing time-dependent information on sources', + ), + Source=FACT(statut='o', + max="**", + Abscissae_Of_Sources = SIMP( statut='o', + typ=Tuple(2),validators=VerifTypeTuple(('R','R')), + fr = 'Valeurs des abscisses des sources de debit et de traceur.', + ang= 'abscissae of sources of flowrate and/or tracer', + ), + + Ordinates_Of_Sources = SIMP( statut='o', + typ=Tuple(2),validators=VerifTypeTuple(('R','R')), + fr = 'Valeurs des ordonnees des sources de debit et de traceur.', + ang= 'ordinates of sources of flowrate and/or tracer', + ), + Water_Discharge_Of_Sources = SIMP( statut='o', + typ=Tuple(2),validators=VerifTypeTuple(('R','R')), + fr = 'Valeurs des debits des sources.', + ang= 'values of water discharge of sources', + ), + Velocities_Of_The_Sources_Along_X = SIMP( statut='f', + typ=Tuple(2),validators=VerifTypeTuple(('R','R')), + fr = 'Vitesses du courant a chacune des sources. Si elles ne sont pas donnees, on considere que la vitesse est celle du courant', + ang= 'Velocities at the sources. If they are not given, the velocity of the flow at this location is taken', + ), + Velocities_Of_The_Sources_Along_Y = SIMP( statut='f', + typ=Tuple(2),validators=VerifTypeTuple(('R','R')), + fr = 'Vitesses du courant a chacune des sources', + ang= 'Velocities at the sources', + ), + ), + Type_Of_Sources=SIMP(statut='o',typ='TXM',into=["Normal","Dirac"], + fr = 'Source portee par une base elements finis Source portee par une fonction de Dirac', + ang= 'Source term multiplied by a finite element basis, Source term multiplied by a Dirac function', + ), + ),#fin bloc source + Water_Density=SIMP(statut='o',typ='R',defaut=1000., + fr = 'Fixe la valeur de la masse volumique de l eau.', + ang = 'set the value of water density', + ), + Gravity_Acceleration=SIMP(statut='o',typ='R',defaut=9.81, + fr = 'Fixe la valeur de l acceleration de la pesanteur.', + ang = 'Set the value of the acceleration due to gravity.', + ), + + +)# fin PHYSICAL POST_PROCESSING=PROC(nom="POST_PROCESSING",op=None, Graphic_Printouts=FACT(statut='f', @@ -1023,6 +1037,7 @@ POST_PROCESSING=PROC(nom="POST_PROCESSING",op=None, Variables_For_Graphic_Printouts=SIMP(statut='o',max="**", typ='TXM',into=['a','b','c'],), # ajouter le into ), +#PNPN Attention - il existe un mot clef Listing_Printouts Listing_Printouts=FACT(statut='f', Results_File_Format = SIMP( statut='o',typ='TXM',into=['SERAFIN','MED','SERAFIND'], defaut='SERAFIN', @@ -1070,12 +1085,38 @@ Les resultats a placer dans ce fichier seront a ecrire sur le canal 28.", The results to be entered into this file shall be written on channel 28.", ), -Information_About_Solver = SIMP(typ=bool, statut='f',defaut=False, + Information_About_Solver = SIMP(typ=bool, statut='f',defaut=False, fr = "Si vrai, Donne a chaque pas de temps le nombre d'iterations necessaires a la convergence du solveur de l'etape de propagation.", ang = "if True, prints the number of iterations that have been necessary to get the solution of the linear system.", -), + ), + + Controls=FACT( + Controls_Section=SIMP(statut='o',typ=Tuple(2),validators=VerifTypeTuple(('I','I')), + fr = 'Couples de points (numeros globaux dans le maillage) entre lesquels les debits instantanes et cumules seront donnes.', + ang ='Couples of points (global numbers in the mesh) defining sections where the instantaneous and cumulated discharges will be given', + ), + + Printing_Cumulated_Flowrates = SIMP( statut='o',typ=bool, defaut=False , + fr = 'IMPRESSION DU FLUX CUMULE A TRAVERS LES SECTIONS DE CONTROLE', + ang= 'PRINTING THE CUMULATED FLOWRATES THROUGH CONTROL SECTIONS', + ), + + Compatible_Computation_Of_Fluxes = SIMP( statut='o',typ=bool, defaut=False , + fr = 'FLUX A TRAVERS LES SECTIONS DE CONTROLE, CALCUL COMPATIBLE AVEC LIMPERMEABILITE SOUS FORME FAIBLE', + ang= 'FLOWRATES THROUGH CONTROL SECTIONS, COMPUTATION COMPATIBLE WITH THE WEAK FORMULATION OF NO-FLUX BOUNDARY CONDITION', + ), + Sections_Input_File = SIMP( statut='f', typ = ('Fichier', 'All Files (*)'), + fr = 'sections input file, partitioned', + ang= 'sections input file, partitioned', + ), + + Sections_Output_File = SIMP( statut='f', typ = ('Fichier', 'All Files (*)'), + fr = 'sections output file, written by the master', + ang= 'sections output file, written by the master', + ), + ),# fin controls PRECONDITIONING = SIMP( statut='o',typ='I', defaut=2 , @@ -1087,7 +1128,7 @@ PRECONDITIONING = SIMP( statut='o',typ='I', # Attention calculer le logique BREACH -STRUCTURES=PROC(nom="STRUCTURES",op=None, +CONSTRUCTION_WORKS_MODELLING=PROC(nom="CONSTRUCTION_WORKS_MODELLING",op=None, # Attention calculer le logique BREACH @@ -1098,43 +1139,11 @@ dans le fichier cas. Leurs caracteristiques sont donnees dans le fichier de donn ang= 'Number of culverts treated as source terms. They must be described as sources in the domain\ and their features are given in the culvert data file (see written documentation)', ), - culvert_exist=BLOC(condition="Number_Of_Culverts!=0", - Culverts= FACT(statut='o', - min=1,max="**", - Abscissae_Of_Sources = SIMP( statut='o', - typ=Tuple(2),validators=VerifTypeTuple(('R','R')), - fr = 'Valeurs des abscisses des sources de debit et de traceur.', - ang= 'abscissae of sources of flowrate and/or tracer', - ), - - Ordinates_Of_Sources = SIMP( statut='o', - typ=Tuple(2),validators=VerifTypeTuple(('R','R')), - fr = 'Valeurs des ordonnees des sources de debit et de traceur.', - ang= 'ordinates of sources of flowrate and/or tracer', - ), - Water_Discharge_Of_Sources = SIMP( statut='o', - typ=Tuple(2),validators=VerifTypeTuple(('R','R')), - fr = 'Valeurs des debits des sources.', - ang= 'values of water discharge of sources', - ), - Velocities_Of_The_Sources_Along_X = SIMP( statut='o', - typ=Tuple(2),validators=VerifTypeTuple(('R','R')), - fr = 'Vitesses du courant a chacune des sources. Si elles ne sont pas donnees, on considere que la vitesse est celle du courant', - ang= 'Velocities at the sources. If they are not given, the velocity of the flow at this location is taken', - ), - Velocities_Of_The_Sources_Along_Y = SIMP( statut='o', - typ=Tuple(2),validators=VerifTypeTuple(('R','R')), - fr = 'Vitesses du courant a chacune des sources', - ang= 'Velocities at the sources', - ), - ), - Culvert_Data_File = SIMP( statut='o',typ = ('Fichier', 'All Files (*)',), fr = 'Fichier de description des siphons presents dans le modele', ang= 'Description of culvert existing in the model', ), - ), Number_Of_Tubes = SIMP( statut='o',typ='I', @@ -1164,9 +1173,19 @@ Ces seuils doivent etre decrits comme des frontieres du domaine de calcul', typ = ('Fichier', 'All Files (*)',), fr = 'Fichier de description des seuils presents dans le modele', ang= 'Description of weirs existing in the model',), + +#PNPN a passer an anglais avec une solution lisible + Type_Of_Weirs = SIMP( statut='o',typ='TXM', + into=["HORIZONTAL AVEC MEME NOMBRE DE NOEUDS AMONT/AVAL (Solution historique avec bord)", + "GENERALE (Nouvelle solution avec pts sources)"], + defaut= "HORIZONTAL AVEC MEME NOMBRE DE NOEUDS AMONT/AVAL (Solution historique avec bord)", + fr = 'Méthode de traitement des seuils ', + ang= 'Method for treatment of weirs', ), - Breach=SIMP(statut='o',typ=bool,defaut=False, + ), + + Breach=SIMP(statut='f',typ=bool,defaut=False, fr = 'Prise en compte de breches dans le calcul par modification altimetrique dans le maillage.', ang = 'Take in account some breaches during the computation by modifying the bottom level of the mesh.', ), @@ -1183,12 +1202,6 @@ Ces seuils doivent etre decrits comme des frontieres du domaine de calcul', maskob = BLOC (condition = 'Vertical_Structures==True', Consigne = SIMP(statut="o",homo='information',typ="TXM", defaut="subroutine DRAGFO must then be implemented"), ), - Formatted_File1 = SIMP( statut='f', typ = ('Fichier', 'formated File (*.txt);;All Files (*)',), - fr = "Fichier de donnees formate mis a la disposition de l''utilisateur. \n\ -Les donnees de ce fichier seront a lire sur le canal 26.", - ang = 'Formatted data file made available to the user.\n\ -The data in this file shall be read on channel 26.', - ), ) # FIn STRUCTURE TRACERS=PROC(nom="TRACERS",op=None, Boundary_conditions=FACT(statut='o', @@ -1201,3 +1214,186 @@ if Priority to fluxes, Dirichlet prescribed values are not obeyed,but the fluxes ), ), # fin Boundary_conditions ) # FIN TRACERS + +GENERAL_PARAMETERS=PROC(nom="GENERAL_PARAMETERS",op=None, + + Spherical_Coordinates=SIMP(typ=bool,statut='o',defaut=False, + fr = 'Choix des coordonnees spheriques pour la realisation du calcul ( pour les grands domaines de calcul).', + ang = 'Selection of spherical coordinates to perform the computation (for large computation domains).' + ), + + b_Spher = BLOC(condition = 'Spherical_Coordinates== True', + Latitude_Of_Origin_Point=SIMP(typ='R',statut='o',defaut=48., + fr = 'Determine l origine utilisee pour le calcul de latitudes lorsque l on effectue un calcul en coordonnees spheriques.', + ang = 'Determines the origin used for computing latitudes when a computation is made in spherical coordinates.this latitude\n\ +is in particular used to compute the Coriolis force. In cartesian coordinates, Coriolis coefficient is considered constant.' + ), + Spatial_Projection_Type=SIMP(statut='o',typ='TXM',into=["MERCATOR","LATITUDE LONGITUDE"]), + ), + b_Spher_faux = BLOC(condition = 'Spherical_Coordinates== False', + Spatial_Projection_Type=SIMP(statut='o',typ='TXM',into=["CARTESIAN, NOT GEOREFERENCED","MERCATOR","LATITUDE LONGITUDE"], + defaut="CARTESIAN, NOT GEOREFERENCED",), + ), +) + + +TURBULENCE=PROC(nom="TURBULENCE",op=None, + + Turbulence_Model = SIMP( statut='o',typ='TXM', defaut="CONSTANT VISCOSITY", + #into =('1="CONSTANT VISCOSITY"', '2="ELDER"', '3="K-EPSILON MODEL"', '4="SMAGORINSKI"'), + into =("Constant Viscosity", "Elder", "K-Epsilon Model", "Smagorinski"), + + fr = 'si on choisit loption 2 il ne faut pas oublier dajuster les deux valeurs du mot-cle : COEFFICIENTS ADIMENSIONNELS DE DISPERSION Si on choisit loption 3, ce meme parametre doit retrouver sa vraie valeur physique car elle est utilisee comme telle dans le modele de turbulence', + ang= 'When option 2 is chosen, the two values of key-word : NON-DIMENSIONAL DISPERSION COEFFICIENTS are used When option 3 is chosen, this parameter should recover its true physical value, since it is used as such in the turbulence model.', + ), + + b_turbu_const=BLOC(condition='Turbulence_Model=="Constant Viscosity"', + Velocity_Diffusivity=SIMP( statut='o',typ='R',defaut=1.E-6, + fr='Fixe de facon uniforme pour l ensemble du domaine la valeur du coefficient de diffusion de viscosite globale (dynamique + turbulente).\n\ +Cette valeur peut avoir une influence non negligeable sur la forme et la taille des recirculations.', + ang = 'Sets, in an even way for the whole domain, the value of the coefficient of global (dynamic+turbulent) viscosity. \n\ +this value may have a significant effect both on the shapes and sizes of recirculation zones.',), + + ), + b_turbu_elder=BLOC(condition='Turbulence_Model=="Elder"', + Non_Dimensional_Dispersion_Coefficients = SIMP (statut='o', + typ=Tuple(2),validators=VerifTypeTuple(('R','R')),defaut=(6.,0.6), + fr = 'coefficients longitudinal et transversal dans la formule de Elder.', + ang = 'Longitudinal and transversal coefficients in elder s formula. Used only with turbulence model number 2',), + ), + + Accuracy_Of_K = SIMP( statut='o',typ='R', defaut=1e-09 , + fr = 'Fixe la precision demandee sur k pour le test darret dans letape de diffusion et termes sources du modele k-epsilon.', + ang= 'Sets the required accuracy for computing k in the diffusion and source terms step of the k-epsilon model.', + ), + + Accuracy_Of_Epsilon = SIMP( statut='o',typ='R', defaut=1e-09 , + fr = 'Fixe la precision demandee sur epsilon pour le test darret dans letape de diffusion et termes sources de k et epsilon.', + ang= 'Sets the required accuracy for computing epsilon in the diffusion and source-terms step of the k-epsilon model.', + ), + Time_Step_Reduction_For_K_epsilon_Model = SIMP( statut='f',typ='R', defaut=1.0 , + fr = 'Coefficient reducteur du pas de temps pour le modele k-epsilon (qui est normalement identique a celui du systeme hydrodynamique).\n\ +Utilisation deconseillee', + ang= 'Time step reduction coefficient for k-epsilon model (which is normally same the same as that of the hydrodynamic system).\n\ +Not recommended for use.', + ), + Maximum_Number_Of_Iterations_For_K_And_Epsilon = SIMP( statut='o',typ='I', + defaut=50 , + fr = 'Fixe le nombre maximum diterations accepte lors de la resolution du systeme diffusion-termes sources du modele k-epsilon.', + ang= 'Sets the maximum number of iterations that are acceptable when solving the diffusion source-terms step of the k-epsilon model.', + ), + Turbulence_Model_For_Solid_Boundaries = SIMP( statut='o',typ='TXM', + defaut='rough' , + #into =('1=smooth', '2=rough'), + into =('smooth', 'rough'), + fr = 'Permet de choisir le regime de turbulence aux parois ', + ang= 'Provided for selecting the type of friction on the walls', + ), + Solver_For_K_epsilon_Model = SIMP( statut='o',typ='TXM', + defaut="conjugate gradient" , + into =("conjugate gradient", "conjugate residuals", "conjugate gradient on normal equation", "minimum error", "conjugate gradient squared",\ + "conjugate gradient squared stabilised (cgstab)", "gmres", "direct"), + #into =('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 (see option for the solver for k-epsilon model)"', '8="direct"'), + fr = 'Permet de choisir le solveur utilise pour la resolution du systeme du modele k-epsilon', + ang= 'Makes it possible to select the solver used for solving the system of the k-epsilon model.', + ), + + b_gmres=BLOC(condition='Solver_For_K_epsilon_Model=="gmres"', + Option_For_The_Solver_For_K_epsilon_Model = SIMP( statut='o',typ='I', + defaut=2 ,val_min=2,val_max=15, + fr = 'le mot cle est la dimension de lespace de KRILOV (valeurs conseillees entre 2 et 7)', + ang= 'dimension of the krylov space try values between 2 and 7',), + ), + + Preconditioning_For_K_epsilon_Model = SIMP( statut='o',typ='TXM', + defaut='diagonal' , + into =("diagonal", "no preconditioning", "diagonal condensed", "crout", "diagonal and crout", "diagonal condensed and crout"), + #into =('2="diagonal"', '0="no preconditioning"', '3="diagonal condensed"', '7="crout"', '14="diagonal and crout"', '21="diagonal condensed and crout"'), + fr = 'Permet de preconditionner le systeme relatif au modele k-epsilon', + ang= 'Preconditioning of the linear system in the diffusion step of the k-epsilon model.', + ), + Information_About_K_Epsilon_Model=SIMP(statut='o',typ=bool,defaut=True, + fr = 'Donne le nombre d iterations du solveur de l etape de diffusion et termes sources du modele k-epsilon.', + ang = 'Gives the number of iterations of the solver in the diffusion and source terms step of the k-epsilon model.', + ), +)# fin Turbulence + +PARTICULE=PROC(nom="PARTICULE",op=None, + Number_Of_Drogues=SIMP(statut='o',typ='I',defaut=0, + fr = 'Permet d''effectuer un suivi de flotteurs', + ang = 'Number of drogues in the computation.', + ), + + + Algae_Transport_Model = SIMP( statut='o',typ=bool, defaut=False , + fr = 'Si oui, les flotteurs seront des algues', + ang= 'If yes, the floats or particles will be algae', + ), + + algae_exist=BLOC(condition="Algae_Transport_Model==True", + + Algae_Type = SIMP( statut='o',typ='TXM', + into=["SPHERE", "IRIDAEA FLACCIDA (CLOSE TO ULVA)", "PELVETIOPSIS LIMITATA", "GIGARTINA LEPTORHYNCHOS"], + defaut="Sphere", + fr = 'Type des algues. Pour le choix 1 les algues seront modelisees comme des spheres, pour les autres choix voir Gaylord et al. (1994).', + ang= 'Algae type. For choice 1 the algae particles will be modeled as spheres, and for the other choices see Gaylord et al. (1994)', + ), + Diametre_Of_Algae = SIMP( statut='o',typ='R', defaut=0.1 , + fr = 'Diametre des algues en m', + ang= 'Diametre of algae in m', + ), + + Density_Of_Algae = SIMP( statut='o',typ='R', defaut=1050.0 , + fr = 'Masse volumique des algues en kg/m3', + ang= 'Density of algae in kg/m3', + ), + + Thickness_Of_Algae = SIMP( statut='o',typ='R', defaut=0.01 , + fr = 'Epaisseur des algues en m', + ang= 'Thickness of algae in m', + ), + ), # fin algae + + + Oil_Spill_Model = SIMP( statut='o',typ=bool, defaut=False , + fr = 'pour declencher le modele de derive de nappes, dans ce cas le fichier de commandes migrhycar est necessaire', + ang= 'will trigger the oil spill model, in this case the migrhycar steering file is needed', + ), + + oil_exist=BLOC(condition="Oil_Spill_Model==True", + Oil_Spill_Steering_File = SIMP( statut='o',typ=('Fichier', 'All Files (*)',), + fr = 'Contient les donnees pour le modele de derive de nappes', + ang= 'Contains data for the oil spill model', + ), + ), + + drogues_exist=BLOC(condition="Number_Of_Drogues!=0 or Algae_Transport_Model==True or Oil_Spill_Model==True", + Drogues_File = SIMP( statut='o',typ = ('Fichier', 'All Files (*)',), + fr = 'Fichier de resultat avec les positions des flotteurs', + ang = 'Results file with positions of drogues', + ), + + Printout_Period_For_Drogues=SIMP(statut='o',typ='I',defaut=1, + fr = 'Nombre de pas de temps entre 2 sorties de positions de flotteurs dans le fichier des resultats binaire supplementaire\n\ +N affecte pas la qualite du calcul de la trajectoire', + ang = 'Number of time steps between 2 outputs of drogues positions in the binary file', + ), + ),#fin drogues ou algae + + + Stochastic_Diffusion_Model = SIMP( statut='o',typ='I', defaut=0 , + fr = 'Pour les particules : flotteurs, algues, hydrocarbures', + ang= 'Meant for particles: drogues, algae, oil spills', + ), + + Number_Of_Lagrangian_Drifts = SIMP( statut='o',typ='I', defaut=0 , + fr = 'Permet deffectuer simultanement plusieurs calculs de derives lagrangiennes initiees a des pas differents', + ang= 'Provided for performing several computations of lagrangian drifts starting at different times.', + ), + + b_cons=BLOC(condition="Number_Of_Lagrangian_Drifts !=0", + Consigne = SIMP(statut="o",homo='information',typ="TXM", + defaut="Add A and G in the VARIABLES FOR GRAPHIC PRINTOUTS key-word in POST_PROCESSING SECTION"), + ), + +)# fin PARTICULE diff --git a/UiQT4/desParam.ui b/UiQT4/desParam.ui new file mode 100644 index 00000000..d533a7e0 --- /dev/null +++ b/UiQT4/desParam.ui @@ -0,0 +1,225 @@ + + + DParam + + + + 0 + 0 + 571 + 410 + + + + + 505 + 0 + + + + DComm + + + + + + QLineEdit {background:rgb(240,240,240)} + + + 1 + + + + Utiliser un Paramètre + + + + + + QAbstractItemView::MultiSelection + + + + + + + + Créer un Paramètre + + + + + + + + + 0 + 0 + + + + <u><b><p align="center">Parametre</p></b></u> + + + false + + + + + + + Qt::Horizontal + + + + 288 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 2 + + + + + + + + + + + 231 + 31 + + + + false + + + + + + + <b> Nom: </b> + + + false + + + + + + + + 231 + 31 + + + + false + + + + + + + <b> Valeur: </b> + + + false + + + + + + + + + Qt::Vertical + + + QSizePolicy::MinimumExpanding + + + + 20 + 168 + + + + + + + + + + Qt::Horizontal + + + + 368 + 20 + + + + + + + + + 0 + 0 + + + + + 140 + 40 + + + + + 140 + 40 + + + + background-color:rgb(104,110,149); +color :white; +border-radius : 12px + + + + Nouveau + + + + + + + + + + + + + qPixmapFromMimeSource + + TWChoix + lineEditNom + lineEditVal + + + + diff --git a/UiQT4/desWidgetFactPlie.ui b/UiQT4/desWidgetFactPlie.ui index d1e1abad..57ccde00 100644 --- a/UiQT4/desWidgetFactPlie.ui +++ b/UiQT4/desWidgetFactPlie.ui @@ -7,7 +7,7 @@ 0 0 727 - 25 + 27 @@ -119,7 +119,7 @@ 22 - + 0 @@ -210,6 +210,11 @@ QToolButton
monBoutonValide.h
+ + MonLabelClic + QLabel +
monLabelClic.h
+
diff --git a/UiQT4/desWidgetInformationV1.ui b/UiQT4/desWidgetInformationV1.ui new file mode 100644 index 00000000..d8202d0d --- /dev/null +++ b/UiQT4/desWidgetInformationV1.ui @@ -0,0 +1,168 @@ + + + WidgetInformative + + + + 0 + 0 + 941 + 41 + + + + + 0 + 0 + + + + + 0 + 0 + + + + Form + + + + 0 + + + 0 + + + 1 + + + 0 + + + 1 + + + + + 0 + + + QLayout::SetFixedSize + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 21 + 20 + + + + + + + + + 21 + 25 + + + + + 21 + 25 + + + + Qt::ClickFocus + + + border : 0px + + + ... + + + + ../Editeur/icons/ast-yel-ball.png../Editeur/icons/ast-yel-ball.png + + + + 25 + 25 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 21 + 20 + + + + + + + + + 1 + 0 + + + + + 0 + 25 + + + + + 805 + 16777215 + + + + background:rgb(255,254,226); +border:0px; + + + + + + + Qt::Horizontal + + + + 288 + 20 + + + + + + + + lineEditVal + RBValide + + + + diff --git a/UiQT4/desWidgetPlusieursBase.ui b/UiQT4/desWidgetPlusieursBase.ui index e847b273..54e07bc8 100644 --- a/UiQT4/desWidgetPlusieursBase.ui +++ b/UiQT4/desWidgetPlusieursBase.ui @@ -89,6 +89,9 @@ border: 1px solid gray; 35
+ + Qt::ClickFocus + border : 0px @@ -213,7 +216,16 @@ border: 1px solid gray; 1 - + + 2 + + + 0 + + + 2 + + 0 @@ -273,6 +285,9 @@ border: 1px solid gray; 31 + + Qt::ClickFocus + border : 0px @@ -305,6 +320,9 @@ border: 1px solid gray; 31 + + Qt::ClickFocus + border : 0px @@ -337,6 +355,9 @@ border: 1px solid gray; 31 + + Qt::ClickFocus + border : 0px @@ -369,6 +390,9 @@ border: 1px solid gray; 31 + + Qt::ClickFocus + border : 0px @@ -419,6 +443,9 @@ border: 1px solid gray; 31 + + Qt::ClickFocus + border : 0px @@ -475,6 +502,9 @@ border: 1px solid gray; 31 + + Qt::ClickFocus + border : 0px @@ -507,6 +537,9 @@ border: 1px solid gray; 31 + + Qt::ClickFocus + border : 0px @@ -558,6 +591,9 @@ border: 1px solid gray; 30 + + Qt::ClickFocus + border:0px @@ -606,6 +642,9 @@ border: 1px solid gray; 31 + + Qt::ClickFocus + border : 0px diff --git a/UiQT4/desWidgetSimpTxt.ui b/UiQT4/desWidgetSimpTxt.ui index 4e1d3b7e..dfbb2df9 100644 --- a/UiQT4/desWidgetSimpTxt.ui +++ b/UiQT4/desWidgetSimpTxt.ui @@ -178,7 +178,7 @@ border:0px; 0 - + 25 @@ -213,7 +213,7 @@ border:0px; - + 0 @@ -322,8 +322,8 @@ border:0px; lineEditVal - BSalome - BView2D + RBSalome + RBSalomeVue RBValide RBPoubelle diff --git a/UiQT4/desWidgetVide.ui b/UiQT4/desWidgetVide.ui index 0ff2a942..6a55f766 100644 --- a/UiQT4/desWidgetVide.ui +++ b/UiQT4/desWidgetVide.ui @@ -181,7 +181,7 @@ border:0px; 0 - + 25 @@ -216,7 +216,7 @@ border:0px; - + 0 @@ -321,7 +321,7 @@ border:0px; lineEditVal BSalome - BView2D + RBSalomeVue RBValide RBPoubelle diff --git a/generator/generator_python.py b/generator/generator_python.py index 8ec2dbc0..96324218 100644 --- a/generator/generator_python.py +++ b/generator/generator_python.py @@ -30,8 +30,12 @@ from Noyau.N_utils import repr_float import Accas import Extensions from Extensions.parametre import ITEM_PARAMETRE -from Formatage import Formatage +from Formatage import Formatage +from Formatage import FormatageLigne from Extensions.param2 import Formula +from Extensions.eficas_exception import EficasException +from Extensions.i18n import tr + def entryPoint(): """ @@ -92,6 +96,7 @@ class PythonGenerator: """ self.appli=obj.get_jdc_root().appli #self.appli=obj.appli + print format liste= self.generator(obj) if format == 'brut': self.text=liste @@ -100,8 +105,11 @@ class PythonGenerator: elif format == 'beautifie': jdc_formate = Formatage(liste,mode='.py') self.text=jdc_formate.formate_jdc() + elif format == 'Ligne': + jdc_formate = FormatageLigne(liste,mode='.py') + self.text=jdc_formate.formate_jdc() else: - raise "Format pas implemente : "+format + raise EficasException(tr("Format non implemente ") +format) return self.text def generator(self,obj): @@ -152,7 +160,7 @@ class PythonGenerator: elif isinstance(obj,Formula): return self.generFormula(obj) else: - raise "Type d'objet non prevu",obj + raise EficasException(tr("Type d'objet non prevu") +obj) def generJDC(self,obj): """ @@ -414,7 +422,6 @@ class PythonGenerator: # on est en presence d'un MCSIMP : on recupere une string text =self.generator(v) l.append(v.nom+'='+text) - if obj.nom=="Observers": print l # il faut etre plus subtil dans l'ajout de la virgule en differenciant # le cas ou elle est obligatoire (si self a des freres cadets # dans self.parent) ou non @@ -429,8 +436,7 @@ class PythonGenerator: """ if len(obj.data) > 1: l=['('] - for mcfact in obj.data: - l.append(self.generator(mcfact)) + for mcfact in obj.data: l.append(self.generator(mcfact)) l.append('),') else: l= self.generator(obj.data[0]) @@ -523,6 +529,7 @@ class PythonGenerator: Convertit un objet MCSIMP en une liste de chaines de caracteres a la syntaxe python """ + if obj.isInformation() : return "" waitTuple=0 if type(obj.valeur) in (types.TupleType,types.ListType) : s = '' -- 2.39.2