From: pascale.noyret Date: Thu, 4 Jun 2015 13:25:12 +0000 (+0200) Subject: gestion des listes et label sur 2 X-Git-Tag: PSEN_V1~19 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=fcb18e3a18b12e87c855602ef6b29a539e7ef875;p=modules%2Feficas.git gestion des listes et label sur 2 --- diff --git a/Adao/ADAO_Cata_V7_6_0.py b/Adao/ADAO_Cata_V7_6_0.py index a383b0ba..70bd3963 100755 --- a/Adao/ADAO_Cata_V7_6_0.py +++ b/Adao/ADAO_Cata_V7_6_0.py @@ -1,7 +1,5 @@ #-*-coding:iso-8859-1-*- # -# Copyright (C) 2008-2015 EDF R&D -# # This file is part of SALOME ADAO module # # This library is free software; you can redistribute it and/or @@ -461,7 +459,7 @@ def F_InitChoice() : return ("Background", def F_Init(statut) : return FACT(statut = statut, INIT_FILE = SIMP(statut = "o", typ = "FichierNoAbs", validators=(OnlyStr())), - TARGET_LIST = SIMP(statut = "o", typ = "TXM", min=1, max="**", into=F_InitChoice(), validators=(VerifExiste(2))), + TARGET_LIST = SIMP(statut = "o", typ = "TXM", min=1, max="**", into=F_InitChoice(),homo="SansOrdreNiDoublon", validators=(VerifExiste(2))), ) def F_ObserverTemplate() : return BLOC(condition = " NodeType == 'Template' ", @@ -494,7 +492,7 @@ def F_ObserverTemplate() : return BLOC(condition = " NodeType == 'Template' ", def F_Observers(statut) : return FACT( statut=statut, - SELECTION = SIMP(statut="o", defaut=[], typ="TXM", min=0, max="**", validators=NoRepeat(), into=(['Analysis', 'CurrentState', 'Innovation', 'SimulatedObservationAtCurrentState', 'OMA', 'OMB', 'BMA', 'CostFunctionJ', 'CostFunctionJb', 'CostFunctionJo', 'GradientOfCostFunctionJ', 'GradientOfCostFunctionJb', 'GradientOfCostFunctionJo', 'SigmaObs2', 'SigmaBck2', 'APosterioriCovariance'])), + SELECTION = SIMP(statut="o", defaut=[], typ="TXM", min=0, max="**", validators=NoRepeat(), homo="SansOrdreNiDoublon", into=(['Analysis', 'CurrentState', 'Innovation', 'SimulatedObservationAtCurrentState', 'OMA', 'OMB', 'BMA', 'CostFunctionJ', 'CostFunctionJb', 'CostFunctionJo', 'GradientOfCostFunctionJ', 'GradientOfCostFunctionJb', 'GradientOfCostFunctionJo', 'SigmaObs2', 'SigmaBck2', 'APosterioriCovariance'])), Analysis = BLOC (condition=" 'Analysis' in set(SELECTION) ", Analysis_data = FACT(statut = "o", Scheduler = SIMP(statut = "f", typ = "TXM"), @@ -730,7 +728,7 @@ def F_AlgorithmParameters(statut,algos_names) : return FACT( data = F_Dict("o"), ), Parameters3DVAR = BLOC (condition = " (Parameters == 'Defaults') and (Algorithm == '3DVAR') ", - statut="f", + Consigne = SIMP(statut="o",homo='information',typ="TXM", defaut="Choisir les parametres dans les Mots Clefs Optionnels"), Bounds = SIMP(statut="f", typ="TXM", fr="Liste des valeurs de bornes"), CostDecrementTolerance = SIMP(statut="f", typ="R", min=1, max=1, defaut=1e-07, fr="Diminution relative minimale du cout lors de l'arrêt"), GradientNormTolerance = SIMP(statut="f", typ="R", min=1, max=1, defaut=1e-05, fr="Maximum des composantes du gradient lors de l'arrêt"), @@ -741,15 +739,26 @@ def F_AlgorithmParameters(statut,algos_names) : return FACT( Quantiles = SIMP(statut="f", typ="TXM", max="**", into=None, fr="Liste des valeurs de quantiles"), SetSeed = SIMP(statut="f", typ="TXM", fr="Graine fixée pour le générateur aléatoire"), SimulationForQuantiles = SIMP(statut="f", typ="TXM", min=1, max=1, defaut="Linear", into=['Linear', 'NonLinear'], fr="Type de simulation pour l'estimation des quantiles"), - StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**", into=['APosterioriCovariance', 'BMA', 'OMA', 'OMB', 'CurrentState', 'CostFunctionJ', 'Innovation', 'SigmaObs2', 'MahalanobisConsistency', 'SimulationQuantiles', 'SimulatedObservationAtBackground', 'SimulatedObservationAtCurrentState', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), + StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**",homo="SansOrdreNiDoublon", into=['APosterioriCovariance', 'BMA', 'OMA', 'OMB', 'CurrentState', 'CostFunctionJ', 'Innovation', 'SigmaObs2', 'MahalanobisConsistency', 'SimulationQuantiles', 'SimulatedObservationAtBackground', 'SimulatedObservationAtCurrentState', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), ), ParametersBlue = BLOC (condition = " (Parameters == 'Defaults') and (Algorithm == 'Blue') ", - statut="f", - NumberOfSamplesForQuantiles = SIMP(statut="f", typ="I", val_min=1, min=1, max=1, defaut=100, fr="Nombre d'échantillons simulés pour le calcul des quantiles"), - Quantiles = SIMP(statut="f", typ="TXM", max="**", into=None, fr="Liste des valeurs de quantiles"), - SetSeed = SIMP(statut="f", typ="TXM", fr="Graine fixée pour le générateur aléatoire"), - SimulationForQuantiles = SIMP(statut="f", typ="TXM", min=1, max=1, defaut="Linear", into=['Linear', 'NonLinear'], fr="Type de simulation pour l'estimation des quantiles"), - StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**", into=['APosterioriCovariance', 'BMA', 'OMA', 'OMB', 'CostFunctionJ', 'Innovation', 'SigmaBck2', 'SigmaObs2', 'MahalanobisConsistency', 'SimulationQuantiles', 'SimulatedObservationAtBackground', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), + ParamParmi=SIMP(statut="o", typ="TXM",min=1, max="**", + into=["NumberOfSamplesForQuantiles","Quantiles","SetSeed","StoreSupplementaryCalculations"],homo="SansOrdreNiDoublon"), + bloc_nb=BLOC (condition = 'ParamParmi!=None and "NumberOfSamplesForQuantiles" in ParamParmi', + NumberOfSamplesForQuantiles = SIMP(statut="o", typ="I", val_min=1, defaut=100, fr="Nombre d'échantillons simulés pour le calcul des quantiles"), + ), + bloc_quant=BLOC (condition = 'ParamParmi!=None and "Quantiles" in ParamParmi', statut='o', + Quantiles = SIMP(statut="o", typ="TXM", max="**", into=None, fr="Liste des valeurs de quantiles"), + ), + bloc_seed=BLOC (condition = ' ParamParmi!=None and "SetSeed" in ParamParmi', statut='o', + SetSeed = SIMP(statut="o", typ="TXM", fr="Graine fixée pour le générateur aléatoire"), + ), + bloc_siml=BLOC (condition = ' ParamParmi!=None and "SimulationForQuantiles" in ParamParmi', statut='o', + SimulationForQuantiles = SIMP(statut="o", typ="TXM", min=1, max=1, defaut="Linear", into=['Linear', 'NonLinear'], fr="Type de simulation pour l'estimation des quantiles"), + ), + bloc_store=BLOC (condition = ' ParamParmi!=None and "StoreSupplementaryCalculations" in ParamParmi', statut='o', + StoreSupplementaryCalculations = SIMP(statut="o", typ="TXM", max="**",homo="SansOrdreNiDoublon", into=['APosterioriCovariance', 'BMA', 'OMA', 'OMB', 'CostFunctionJ', 'Innovation', 'SigmaBck2', 'SigmaObs2', 'MahalanobisConsistency', 'SimulationQuantiles', 'SimulatedObservationAtBackground', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), + ), ), ParametersEnsembleBlue = BLOC (condition = " (Parameters == 'Defaults') and (Algorithm == 'EnsembleBlue') ", statut="f", @@ -761,23 +770,23 @@ def F_AlgorithmParameters(statut,algos_names) : return FACT( Quantiles = SIMP(statut="f", typ="TXM", max="**", into=None, fr="Liste des valeurs de quantiles"), SetSeed = SIMP(statut="f", typ="TXM", fr="Graine fixée pour le générateur aléatoire"), SimulationForQuantiles = SIMP(statut="f", typ="TXM", min=1, max=1, defaut="Linear", into=['Linear', 'NonLinear'], fr="Type de simulation pour l'estimation des quantiles"), - StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**", into=['APosterioriCovariance', 'BMA', 'OMA', 'OMB', 'CostFunctionJ', 'Innovation', 'SigmaBck2', 'SigmaObs2', 'MahalanobisConsistency', 'SimulationQuantiles', 'SimulatedObservationAtBackground', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), + StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**",homo="SansOrdreNiDoublon", into=['APosterioriCovariance', 'BMA', 'OMA', 'OMB', 'CostFunctionJ', 'Innovation', 'SigmaBck2', 'SigmaObs2', 'MahalanobisConsistency', 'SimulationQuantiles', 'SimulatedObservationAtBackground', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), ), ParametersExtendedKalmanFilter = BLOC (condition = " (Parameters == 'Defaults') and (Algorithm == 'ExtendedKalmanFilter') ", statut="f", Bounds = SIMP(statut="f", typ="TXM", fr="Liste des valeurs de bornes"), ConstrainedBy = SIMP(statut="f", typ="TXM", min=1, max=1, defaut="EstimateProjection", into=['EstimateProjection'], fr="Prise en compte des contraintes"), EstimationOf = SIMP(statut="f", typ="TXM", min=1, max=1, defaut="State", into=['State', 'Parameters'], fr="Estimation d'etat ou de parametres"), - StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**", into=['APosterioriCovariance', 'BMA', 'CurrentState', 'CostFunctionJ', 'Innovation'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), + StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**",homo="SansOrdreNiDoublon", into=['APosterioriCovariance', 'BMA', 'CurrentState', 'CostFunctionJ', 'Innovation'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), ), ParametersKalmanFilter = BLOC (condition = " (Parameters == 'Defaults') and (Algorithm == 'KalmanFilter') ", statut="f", EstimationOf = SIMP(statut="f", typ="TXM", min=1, max=1, defaut="State", into=['State', 'Parameters'], fr="Estimation d'etat ou de parametres"), - StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**", into=['APosterioriCovariance', 'BMA', 'CurrentState', 'CostFunctionJ', 'Innovation'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), + StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**",homo="SansOrdreNiDoublon", into=['APosterioriCovariance', 'BMA', 'CurrentState', 'CostFunctionJ', 'Innovation'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), ), ParametersLinearLeastSquares = BLOC (condition = " (Parameters == 'Defaults') and (Algorithm == 'LinearLeastSquares') ", statut="f", - StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**", into=['OMA', 'CostFunctionJ', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), + StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**",homo="SansOrdreNiDoublon", into=['OMA', 'CostFunctionJ', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), ), ParametersNonLinearLeastSquares = BLOC (condition = " (Parameters == 'Defaults') and (Algorithm == 'NonLinearLeastSquares') ", statut="f", @@ -787,7 +796,7 @@ def F_AlgorithmParameters(statut,algos_names) : return FACT( MaximumNumberOfSteps = SIMP(statut="f", typ="I", val_min=-1, min=1, max=1, defaut=15000, fr="Nombre maximal de pas d'optimisation"), Minimizer = SIMP(statut="f", typ="TXM", min=1, max=1, defaut="LBFGSB", into=['LBFGSB', 'TNC', 'CG', 'NCG', 'BFGS', 'LM'], fr="Minimiseur utilisé"), ProjectedGradientTolerance = SIMP(statut="f", typ="R", val_min=-1, min=1, max=1, defaut=-1.0, fr="Maximum des composantes du gradient projeté lors de l'arrêt"), - StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**", into=['BMA', 'OMA', 'OMB', 'CurrentState', 'CostFunctionJ', 'Innovation', 'SimulatedObservationAtCurrentState', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), + StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**",homo="SansOrdreNiDoublon", into=['BMA', 'OMA', 'OMB', 'CurrentState', 'CostFunctionJ', 'Innovation', 'SimulatedObservationAtCurrentState', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), ), ParametersParticleSwarmOptimization = BLOC (condition = " (Parameters == 'Defaults') and (Algorithm == 'ParticleSwarmOptimization') ", statut="f", @@ -797,7 +806,7 @@ def F_AlgorithmParameters(statut,algos_names) : return FACT( NumberOfInsects = SIMP(statut="f", typ="I", val_min=-1, min=1, max=1, defaut=100, fr="Nombre d'insectes dans l'essaim"), QualityCriterion = SIMP(statut="f", typ="TXM", min=1, max=1, defaut="AugmentedWeightedLeastSquares", into=['AugmentedWeightedLeastSquares', 'AWLS', 'AugmentedPonderatedLeastSquares', 'APLS', 'DA', 'WeightedLeastSquares', 'WLS', 'PonderatedLeastSquares', 'PLS', 'LeastSquares', 'LS', 'L2', 'AbsoluteValue', 'L1', 'MaximumError', 'ME'], fr="Critère de qualité utilisé"), SetSeed = SIMP(statut="f", typ="TXM", fr="Graine fixée pour le générateur aléatoire"), - StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**", into=['BMA', 'OMA', 'OMB', 'CurrentState', 'CostFunctionJ', 'Innovation', 'SimulatedObservationAtBackground', 'SimulatedObservationAtCurrentState', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), + StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**",homo="SansOrdreNiDoublon", into=['BMA', 'OMA', 'OMB', 'CurrentState', 'CostFunctionJ', 'Innovation', 'SimulatedObservationAtBackground', 'SimulatedObservationAtCurrentState', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), SwarmVelocity = SIMP(statut="f", typ="R", val_min=0.0, min=1, max=1, defaut=1.0, fr="Vitesse de groupe imposée par l'essaim"), ), ParametersQuantileRegression = BLOC (condition = " (Parameters == 'Defaults') and (Algorithm == 'QuantileRegression') ", @@ -807,7 +816,7 @@ def F_AlgorithmParameters(statut,algos_names) : return FACT( MaximumNumberOfSteps = SIMP(statut="f", typ="I", val_min=1, min=1, max=1, defaut=15000, fr="Nombre maximal de pas d'optimisation"), Minimizer = SIMP(statut="f", typ="TXM", min=1, max=1, defaut="MMQR", into=['MMQR'], fr="Minimiseur utilisé"), Quantile = SIMP(statut="f", typ="R", val_min=0.0, val_max=1.0, min=1, max=1, defaut=0.5, fr="Quantile pour la regression de quantile"), - StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**", into=['BMA', 'OMA', 'OMB', 'CurrentState', 'CostFunctionJ', 'Innovation', 'SimulatedObservationAtBackground', 'SimulatedObservationAtCurrentState', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), + StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**",homo="SansOrdreNiDoublon", into=['BMA', 'OMA', 'OMB', 'CurrentState', 'CostFunctionJ', 'Innovation', 'SimulatedObservationAtBackground', 'SimulatedObservationAtCurrentState', 'SimulatedObservationAtOptimum'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), ), ParametersUnscentedKalmanFilter = BLOC (condition = " (Parameters == 'Defaults') and (Algorithm == 'UnscentedKalmanFilter') ", statut="f", @@ -818,7 +827,7 @@ def F_AlgorithmParameters(statut,algos_names) : return FACT( EstimationOf = SIMP(statut="f", typ="TXM", min=1, max=1, defaut="State", into=['State', 'Parameters'], fr="Estimation d'etat ou de parametres"), Kappa = SIMP(statut="f", typ="I", val_max=2, min=1, max=1, defaut=0, fr=""), Reconditioner = SIMP(statut="f", typ="R", val_min=0.001, val_max=10.0, min=1, max=1, defaut=1.0, fr=""), - StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**", into=['APosterioriCovariance', 'BMA', 'CurrentState', 'CostFunctionJ', 'Innovation'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), + StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**",homo="SansOrdreNiDoublon", into=['APosterioriCovariance', 'BMA', 'CurrentState', 'CostFunctionJ', 'Innovation'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), ), ParametersAdjointTest = BLOC (condition = " (Parameters == 'Defaults') and (Algorithm == 'AdjointTest') ", statut="f", @@ -866,7 +875,7 @@ def F_AlgorithmParameters(statut,algos_names) : return FACT( SampleAsnUplet = SIMP(statut="f", typ="TXM", max="**", into=None, fr="Points de calcul définis par une liste de n-uplet"), SetDebug = SIMP(statut="f", typ="I", min=1, max=1, defaut=0, fr="Activation du mode debug lors de l'exécution"), SetSeed = SIMP(statut="f", typ="TXM", fr="Graine fixée pour le générateur aléatoire"), - StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**", into=['CostFunctionJ', 'CurrentState', 'Innovation', 'SimulatedObservationAtCurrentState'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), + StoreSupplementaryCalculations = SIMP(statut="f", typ="TXM", max="**",homo="SansOrdreNiDoublon", into=['CostFunctionJ', 'CurrentState', 'Innovation', 'SimulatedObservationAtCurrentState'], fr="Liste de calculs supplémentaires à stocker et/ou effectuer"), ), ParametersTangentTest = BLOC (condition = " (Parameters == 'Defaults') and (Algorithm == 'TangentTest') ", statut="f", diff --git a/Adao/prefs_Adao.py b/Adao/prefs_Adao.py index 2fda728c..e28c0633 100644 --- a/Adao/prefs_Adao.py +++ b/Adao/prefs_Adao.py @@ -14,10 +14,9 @@ encoding='iso-8859-1' # Choix des catalogues # format du Tuple (code,version,catalogue,formatOut, finit par defaut Ãventuellement) catalogues = ( -# ('Adao','V0',os.path.join(repIni,'monCode_Cata.py'),'python','python'), - ('Adao','V1',os.path.join(repIni,'ADAO_Cata_V7_6_0.py'),'dicoImbrique','python'), # ('Adao','V1',os.path.join(repIni,'ADAO_Cata_V1.py'),'python','python'), -# ('Adao','V2',os.path.join(repIni,'ADAO_Cata_V2.py'),'python','python'), + ('Adao','V760',os.path.join(repIni,'ADAO_Cata_V0_V7_6_0.py'),'python','python'), + ('Adao','V751',os.path.join(repIni,'ADAO_Cata_V0_V7_5_1.py'),'python','python'), ) # lang indique la langue utilisée pour les chaines d'aide : fr ou ang diff --git a/Aster/prefs_ASTER.py b/Aster/prefs_ASTER.py index 252ef0a2..f9aa732c 100644 --- a/Aster/prefs_ASTER.py +++ b/Aster/prefs_ASTER.py @@ -50,7 +50,8 @@ catalogues=( #('ASTER','STA8.8',os.path.join(rep_cata,'cataSTA8'),'python'), #('ASTER','STA9.8',os.path.join(rep_cata,'cataSTA9'),'python'), #('ASTER','STA10.3',os.path.join(rep_cata,'cataSTA10'),'python'), -('ASTER','STA11',os.path.join(rep_cata,'cataSTA11'),'python','defaut'), +#('ASTER','STA11',os.path.join(rep_cata,'cataSTA11'),'python','defaut'), +('ASTER','STA12',os.path.join(rep_cata,'cataSTA12'),'python','defaut'), ) exec_acrobat = '/usr/bin/xgd-open' diff --git a/Carmel3D/Carmel3D_Cata_frequentiel_V1.py b/Carmel3D/Carmel3D_Cata_frequentiel_V1.py index 0064033e..8817403a 100644 --- a/Carmel3D/Carmel3D_Cata_frequentiel_V1.py +++ b/Carmel3D/Carmel3D_Cata_frequentiel_V1.py @@ -158,7 +158,7 @@ SOLVEUR = PROC ( nom ="SOLVEUR", Type= SIMP (statut="o", typ="TXM", - into=('Solveur_lineaire',), + into=("Solveur_lineaire"), defaut='Solveur_lineaire', ang="Linear solver only for harmonic problems.", fr =u"Solveur linéaire seulement pour les problèmes fréquentiels.", diff --git a/Carmel3D/ajoutGroupe.py b/Carmel3D/ajoutGroupe.py index a2565e05..7179c9e3 100644 --- a/Carmel3D/ajoutGroupe.py +++ b/Carmel3D/ajoutGroupe.py @@ -1,6 +1,40 @@ # -*- coding: iso-8859-1 -*- -def handleAjoutGroupFiltre(editor,listeGroup): +import re # module interne utilisé pour vérifier la validité du nom du maillage + +concept_re=re.compile(r'[a-zA-Z_]\w*$') # nom de maillage valide s'il correspond à un identifiant (variable) Python possible. Basé sur Ihm/I_Etape.py:nomme_sd, qui fait foi + +def handleAjoutGroupSansFiltre(editor,listeGroup): + """code_Carmel temporel : obtention des groupes de maille du maillage selectionne dans Salome + Les groupes de mailles ne sont pas filtrés. + La creation du MESH_GROUPE n'est donc pas typé. + ATTENTION! Le nom devenant un concept, i.e. une variable Python, certains signes sont interdits dans le nom du groupe, + e.g. les signes moins (-), plus (+), etc. Une erreur est retournee en ce cas. + """ + # retourne le dernier element du JdC, ou None si le JdC est vide, afin de savoir a quelle place ajouter les MESH_GROUPE (en dernier) + debug = True + try: + dernier=editor.tree.racine.children[-1] + except: + dernier=None + for groupe in listeGroup: # parcours de la liste de tous les groupes de maille trouves (volumiques et les autres), puis ecriture du MESHGROUP systématique sans analyse de nom multiple + if debug: print 'groupe=', groupe + if not concept_re.match(groupe): # Le nom du groupe de maillage doit etre un identificateur Python + raise ValueError, "Ce nom de groupe ("+groupe+") ne peut pas etre utilise car il ne peut pas servir de concept a cause de caracteres interdits, e.g. signes moins (-), plus (+), etc." + try: # test de conformite du nom pour un concept, i.e. une variable Python + #exec(groupe+'=None') # le test consiste a tenter de creer une variable, initialisee a None, a partir du nom, e.g. toto=None est bon mais toto-foo=None ne fonctionne pas. + # creation du groupe MESH_GROUPE + if dernier != None: + new_node = dernier.append_brother("MESHGROUP",'after') + else: + new_node=editor.tree.racine.append_child("MESHGROUP",pos='first') + test,mess = new_node.item.nomme_sd(groupe) # precision du nom (de concept) du groupe + if debug: print u"ce nom de groupe ("+groupe+") est utilise..." + dernier=new_node # mise a jour du dernier noeud du JdC, afin de rajouter les autres MESH_GROUPE eventuels a sa suite + except: + raise ValueError, "Ce nom de groupe ("+groupe+") pose un probleme inconnu" + +def handleAjoutGroupAvecFiltre(editor,listeGroup): """CARMEL3D : obtention des groupes de maille du maillage selectionne dans Salome Les groupes de mailles sont filtres en utilisant une liste des prefixes autorises pour code Code_Carmel3D, i.e. un nom de groupe de mailles est DIEL_toto_foo par exemple, qui deviendra toto_foo. @@ -9,79 +43,161 @@ def handleAjoutGroupFiltre(editor,listeGroup): e.g. les signes moins (-), plus (+), etc. Une erreur est retournee en ce cas. """ from string import join - debug = True + debug = False #True listePrefixesMateriaux = ('DIEL', 'NOCOND','COND', 'ZS', 'ZJ', 'NILMAT') # liste des prefixes pour les materiaux - listePrefixesSources = ('CURRENT', 'EPORT', 'HPORT') # liste des prefixes pour les sources - listePrefixes = listePrefixesMateriaux + listePrefixesSources # liste de tous les prefixes autorises - listePrefixesGroupesMultiples = ('CURRENT', ) # listes des prefixes autorises pour groupes multiples, i.e. plusieurs groupes de mailles associes en une seule caracteistique materiau ou source + listePrefixesSourcesHorsInducteur = ('EPORT', 'HPORT') # liste des prefixes pour les sources + listePrefixesInducteurBobine = ('CURRENT', ) # listes des prefixes autorises pour definir la geometrie d'un inducteur bobiné complet ou en morceaux + listePrefixesTrous = ('TOPO', ) # listes des prefixes autorises pour definir la geometrie d'un trou complet ou en morceaux + listePrefixesBBK = ('BBK', ) # listes des prefixes autorises pour definir le groupe d'éléments servant de boîte englobante dans laquelle est calculée K (inducteur bobiné ou topo). + listePrefixes = listePrefixesMateriaux + listePrefixesSourcesHorsInducteur +listePrefixesInducteurBobine + listePrefixesTrous + listePrefixesBBK # liste de tous les prefixes autorises + listePrefixesGroupesMultiples = ('CURRENT', 'TOPO' ) # listes des prefixes autorises pour groupes multiples, i.e. plusieurs groupes de mailles associes en une seule caracteistique materiau ou source + if debug: + print "listePrefixes=", listePrefixes + print "listePrefixesGroupesMultiples=", listePrefixesGroupesMultiples sep = '_' # separateur entre le prefixe et le nom reel du groupe (qui peut lui aussi contenir ce separateur) - dictGroupesMultiplesNomsPossibles = {} # dictionnaire contenant les noms reels possibles de groupes multiples et leur occurence dans la liste, i.e. 1 par defaut et > 1 pour une groupe multiple, e.g. pour un inducteur bobine en plusieurs morceaux CURRENT_toto_1, CURRENT_toto_2, ce dictionnaire contiendra 'toto':2 - listeGroupesMultiples = [] # liste contenant les noms possibles de groupes multiples, e.g. pour un inducteur bobine en plusieurs morceaux CURRENT_toto_1, CURRENT_toto_2, cette liste contiendra 'toto' + dictGroupesMultiples = {} # dictionnaire contenant les noms reels possibles de groupes multiples et leur occurence dans la liste, i.e. 1 par defaut et > 1 pour une groupe multiple, e.g. pour un inducteur bobine en plusieurs morceaux CURRENT_toto_1, CURRENT_toto_2, ce dictionnaire contiendra 'toto':2 for groupe in listeGroup: partiesGroupe = groupe.split(sep) # parties du nom, separees initialement par le separateur du prefixe, e.g. 'CURRENT_toto_foo' devient ['CURRENT','toto','foo'] et 'toto' devient ['toto'] prefix = partiesGroupe[0] # prefixe possible de ce nom, ou nom lui-meme - if len(partiesGroupe) >= 2 and prefix in listePrefixesGroupesMultiples: # prefixe existant et autorise + if len(partiesGroupe) >= 3 and prefix in listePrefixesGroupesMultiples: # prefixe existant et autorise nomGroupeMultiple = partiesGroupe[1] # nom possible d'un groupe multiple - if dictGroupesMultiplesNomsPossibles.has_key(nomGroupeMultiple): # comptage du nombre d'occurrences de ce nom de groupe multiple possible - dictGroupesMultiplesNomsPossibles[nomGroupeMultiple] += 1 + if dictGroupesMultiples.has_key(nomGroupeMultiple): # comptage du nombre d'occurrences de ce nom de groupe multiple possible + dictGroupesMultiples[nomGroupeMultiple]['nombre'] += 1 + dictGroupesMultiples[nomGroupeMultiple]['membres'].append(join(partiesGroupe[1:], sep)) else: - dictGroupesMultiplesNomsPossibles[nomGroupeMultiple] = 1 - for nom in dictGroupesMultiplesNomsPossibles: # suppression des noms avec une seule occurence, i.e. ils ne sont pas des groupes multiples - if dictGroupesMultiplesNomsPossibles[nom] > 1: listeGroupesMultiples.append(nom) + dictGroupesMultiples[nomGroupeMultiple] = {'type': prefix,'nombre':1, 'membres':[join(partiesGroupe[1:], sep)]} + for groupe in dictGroupesMultiples.keys(): # recherche de tous les groupes multiples. Boucle ignorée si aucun groupe multiple. + dictGroupesMultiples[groupe]['membres'].sort() # tri alphabétique des membres du groupe multiple, qui est l'ordre lu par gendof.exe/MED (ordre lexicographique). + dictGroupesMultiples[groupe]['membres'] = tuple(dictGroupesMultiples[groupe]['membres']) # transformation en tuple, qui est le format attendu par le catalogue (LISTE_MESHGROUP) if debug: - print "listeGroup=", listeGroup - print "dictGroupesMultiplesNomPossibles=", dictGroupesMultiplesNomsPossibles - print "listeGroupesMultiples=", listeGroupesMultiples - print "listePrefixes=", listePrefixes + print "dictGroupesMultiples=", dictGroupesMultiples # retourne le dernier element du JdC, ou None si le JdC est vide, afin de savoir a quelle place ajouter les MESH_GROUPE (en dernier) try: dernier=editor.tree.racine.children[-1] except: dernier=None - for groupe in listeGroup: # parcours de la liste de tous les groupes de maille trouves (volumiques et les autres) + for groupe in listeGroup: # parcours de la liste de tous les groupes de maille trouves (volumiques et les autres), puis ecriture du MESHGROUP systématique sans analyse de nom multiple if debug: print 'groupe=', groupe partiesGroupe = groupe.split(sep) # parties du nom, separees initialement par le separateur du prefixe, e.g. 'CURRENT_toto_foo' devient ['CURRENT','toto','foo'] et 'toto' devient ['toto'] - prefix = partiesGroupe[0] # prefixe possible de ce nom, ou nom lui-meme if len(partiesGroupe) == 1: # pas de prefixe print u"ERREUR: ce nom de groupe ("+groupe+") ne peut pas etre utilise car il n'a pas de prefixe" - elif len(partiesGroupe) >= 2 and prefix in listePrefixes: # prefixe existant et autorise - nomReel = None # initialisation du nom reel, qui provoquera une erreur par la suite (evaluation de None=None) s'il reste ainsi - if prefix in listePrefixesGroupesMultiples: # ce groupe pourrait faire partie d'un groupe multiple - nomGroupeMultiple = partiesGroupe[1] # nom possible d'un groupe multiple - if nomGroupeMultiple in listeGroupesMultiples: # ce groupe est multiple et n'a pas encore ete cree - nomReel = nomGroupeMultiple # ce groupe pourrait etre utilise... - listeGroupesMultiples.remove(nomGroupeMultiple) #... une seule fois - if debug: print u"ce nom de groupe ("+nomReel+") est multiple et sera utilise une fois seulement" - elif dictGroupesMultiplesNomsPossibles[nomGroupeMultiple] == 1: # ce groupe existe dans le dictionnaire et n'est pas multiple (occurence =1) - nomReel = join(partiesGroupe[1:], sep) # reconstruction du nom reel, i.e. sans le prefixe - if debug: print u"ce nom de groupe ("+nomReel+") n'est pas multiple et sera utilise" - else: # ce groupe est multiple et a deja ete utilise - if debug: print u"ce nom de groupe ("+groupe+") est multiple et a deja ete utilise" - else: # ce groupe n'est pas multiple, il pourrait etre utilise tel quel - nomReel = join(partiesGroupe[1:], sep) # reconstruction du nom reel, i.e. sans le prefixe - if nomReel is not None: # on a un nom de groupe possible, il faut realiser des tests plus pousses - try: # test de conformite du nom pour un concept, i.e. une variable Python - exec(nomReel+'=None') # le test consiste a tenter de creer une variable, initialisee a None, a partir du nom, e.g. toto=None est bon mais toto-foo=None ne fonctionne pas. - # creation du groupe MESH_GROUPE - if dernier != None: - new_node = dernier.append_brother("MESHGROUP",'after') - else: - new_node=editor.tree.racine.append_child("MESHGROUP",pos='first') - test,mess = new_node.item.nomme_sd(nomReel) # precision du nom (de concept) du groupe - if debug: print u"ce nom de groupe ("+nomReel+") est utilise..." - if prefix in listePrefixesMateriaux: # ce groupe est associe a un materiau - new_node.append_child('MATERIAL') # on rajoute la propriete de materiau, qu'il suffit d'associer ensuite a la liste des materiaux presents - if debug: print u" et c'est un materiau." - elif prefix in listePrefixesSources: # ce groupe est associe a une source + elif len(partiesGroupe) >= 2 and partiesGroupe[0] in listePrefixes: # prefixe existant et autorise + prefix = partiesGroupe[0] # prefixe possible de ce nom, ou nom lui-meme + nom = partiesGroupe[1] # nom du groupe ou du macro-groupe si défini. + nomReel = join(partiesGroupe[1:], sep) # reconstruction du nom reel, i.e. sans le prefixe, pour la plupart des groupes + if prefix in listePrefixesBBK: nomReel = groupe # pour la boite englobante, il faut le nom avec préfixe + if not concept_re.match(nomReel): # Le nom du groupe de maillage doit etre un identificateur Python + raise ValueError, "Ce nom de groupe ("+nomReel+") ne peut pas etre utilise car il ne peut pas servir de concept a cause de caracteres interdits, e.g. signes moins (-), plus (+), etc." + try: # test de conformite du nom pour un concept, i.e. une variable Python + #exec(nomReel+'=None') # le test consiste a tenter de creer une variable, initialisee a None, a partir du nom, e.g. toto=None est bon mais toto-foo=None ne fonctionne pas. + # creation du groupe MESH_GROUPE + if dernier != None: + new_node = dernier.append_brother("MESHGROUP",'after') + else: + new_node=editor.tree.racine.append_child("MESHGROUP",pos='first') + test,mess = new_node.item.nomme_sd(nomReel) # precision du nom (de concept) du groupe + if debug: print u"ce nom de groupe ("+nomReel+") est utilise..." + if prefix in listePrefixesMateriaux: # ce groupe est associe a un materiau + new_node.append_child('MATERIAL') # on rajoute la propriete de materiau, qu'il suffit d'associer ensuite a la liste des materiaux presents + if debug: print u" et c'est un materiau." + elif prefix in listePrefixesSourcesHorsInducteur: # ce groupe est associe a une source + new_node.append_child('SOURCE') # on rajoute la propriete de la source, qu'il suffit d'associer ensuite a la liste des sources presentes + if debug: print u" et c'est une source." + elif prefix in listePrefixesInducteurBobine: # ce groupe est associe a une source + new_node.append_child('STRANDED_INDUCTOR_GEOMETRY') # on rajoute la propriete de géométrie de l'inducteur bobiné + if debug: print u" et c'est un inducteur bobine dont on definit la geometrie." + if nom not in dictGroupesMultiples.keys(): # il ne fait pas partie d'un macro-groupe. La source est définie ici, ainsi que le domaine. new_node.append_child('SOURCE') # on rajoute la propriete de la source, qu'il suffit d'associer ensuite a la liste des sources presentes - if debug: print u" et c'est une source." - else: # ce cas ne devrait pas se produire - pass - dernier=new_node # mise a jour du dernier noeud du JdC, afin de rajouter les autres MESH_GROUPE eventuels a sa suite - except: - print u"ERREUR: ce nom de groupe ("+nomReel+") ne peut pas etre utilise car il ne peut pas servir de concept a cause de caractères interdits, e.g. signes moins (-), plus (+), etc." - else: # ce nom de groupe est ecarte car le groupe multiple deja ete cree - print u"Ce nom de groupe ("+groupe+") ne peut pas etre utilise car il appartient a un groupe multiple qui a deja ete cree." + new_node.append_child('Domaine') # on rajoute la propriete du domaine (default automatique), qu'il suffit d'associer ensuite a la liste des domaines présents + if debug: print u" et c'est une source en un seul morceau." + else: # ce cas ne devrait pas se produire + pass + dernier=new_node # mise a jour du dernier noeud du JdC, afin de rajouter les autres MESH_GROUPE eventuels a sa suite + except: + raise ValueError, "Ce nom de groupe ("+nomReel+") pose un probleme inconnu" + #print u"ERREUR: ce nom de groupe ("+nomReel+") ne peut pas etre utilise car il ne peut pas servir de concept a cause de caractères interdits, e.g. signes moins (-), plus (+), etc." else: # prefixe existant mais non autorise print u"ERREUR: ce nom de groupe ("+groupe+") ne peut pas etre utilise car son prefixe ("+partiesGroupe[0]+") n'est pas dans la liste autorisee "+str(listePrefixes) + if len(dictGroupesMultiples) > 0: # on a des groupes à nom multiples, e.g., inducteur bobiné en morceaux. + for groupe, contenu in dictGroupesMultiples.iteritems(): # parcours de la liste de tous les groupes de maille trouves (volumiques et les autres), et sélection des groupes à nom multiple + if debug: print 'groupe, contenu=', groupe, contenu + nomReel = groupe + prefix = contenu['type'] + try: # test de conformite du nom pour un concept, i.e. une variable Python + exec(nomReel+'=None') # le test consiste a tenter de creer une variable, initialisee a None, a partir du nom, e.g. toto=None est bon mais toto-foo=None ne fonctionne pas. + # creation du groupe MACRO_GROUPE + if dernier != None: + new_node = dernier.append_brother("MACRO_GROUPE",'after') + else: + new_node=editor.tree.racine.append_child("MACRO_GROUPE",pos='first') + test,mess = new_node.item.nomme_sd(nomReel) # precision du nom (de concept) du groupe + if debug: print u"ce nom de groupe ("+nomReel+") est utilise..." + if debug: print u" et on ajoute la liste LISTE_MESHGROUP." + node_list=new_node.append_child('LISTE_MESHGROUP') # Ajout de la liste des membres du groupe multiple + if debug: + print 'Liste possible pour LISTE_MESHGROUP :' + print '_____________________' + print node_list.item.get_liste_possible(()) + print '_____________________' + print dir(node_list.item) + listeNom=node_list.item.get_sd_avant_du_bon_type() + listeObjet=[] + for nom in listeNom: + if nom in dictGroupesMultiples[groupe]['membres']: + #--> transformation du nom en objet + obj,valide=node_list.item.eval_valeur(nom) + listeObjet.append(obj) + node_list.item.set_valeur(listeObjet) + node_list.affichePanneau() + if prefix in listePrefixesMateriaux: # ce groupe est associe a un materiau + new_node.append_child('MATERIAL') # on rajoute la propriete de materiau, qu'il suffit d'associer ensuite a la liste des materiaux presents + if debug: print u" et c'est un materiau." + elif prefix in listePrefixesSourcesHorsInducteur: # ce groupe est associe a une source + new_node.append_child('SOURCE') # on rajoute la propriete de la source, qu'il suffit d'associer ensuite a la liste des sources presentes + if debug: print u" et c'est une source hors inducteur." + elif prefix in listePrefixesInducteurBobine: # ce groupe est associe a une source + new_node.append_child('SOURCE') # on rajoute la propriete de la source, qu'il suffit d'associer ensuite a la liste des sources presentes + new_node.append_child('Domaine') # on rajoute la propriete du domaine (default automatique), qu'il suffit d'associer ensuite a la liste des domaines présents + if debug: print u" et c'est une source inducteur." + elif prefix in listePrefixesTrous: # ce groupe est associe a un trou + new_node.append_child('Domaine') # on rajoute la propriete du domaine (default automatique), qu'il suffit d'associer ensuite a la liste des domaines présents + if debug: print u" et c'est un trou." + else: # ce cas ne devrait pas se produire + pass + dernier=new_node # mise a jour du dernier noeud du JdC, afin de rajouter les autres MESH_GROUPE eventuels a sa suite + except: + print u"ERREUR: ce nom de groupe ("+nomReel+") ne peut pas etre utilise car il ne peut pas servir de concept a cause de caractères interdits, e.g. signes moins (-), plus (+), etc." +def handleAjoutGroupFiltre(editor,listeGroup): + """CARMEL3D : obtention des groupes de maille du maillage selectionne dans Salome + Les groupes de mailles sont filtres en utilisant une liste des prefixes autorises pour code Code_Carmel3D, + i.e. un nom de groupe de mailles est DIEL_toto_foo par exemple, qui deviendra toto_foo. + La creation du MESH_GROUPE est type (materiau ou source), d'après le prefixe. + ATTENTION! Le nom devenant un concept, i.e. une variable Python, certains signes sont interdits dans le nom du groupe, + e.g. les signes moins (-), plus (+), etc. Une erreur est retournee en ce cas. + """ + from string import join + debug = True + #print 'DEBUG listeGroup manuel' # Il faut aussi commenter la ligne Msg,listeGroup=self.ChercheGrpMailleInSalome() dans la routine ChercheGrpMaille de qtEficas.py + #listeGroup = ['DIEL_air', 'COND_plaque', 'CURRENT_bobine' ] # cas-test plaque Rodger avec DIEL_ + #listeGroup = ['NOCOND_air', 'COND_plaque', 'CURRENT_bobine' ] # cas-test plaque Rodger + #listeGroup = ['DIEL_air', 'COND_plaque', 'NOCOND_noyau', 'CURRENT_bobine_1', 'CURRENT_bobine_2', 'CURRENT_bobine_3' ] + #listeGroup = ['DIEL_air', 'COND_plaque', 'NOCOND_noyau', 'CURRENT_bobine' ] + #listeGroup = ['BBK_bobine', 'DIEL_air', 'COND_plaque', 'NOCOND_noyau', 'CURRENT_bobine' ] # avec BBK + #listeGroup = ['EPORT+_dom', 'EPORT-_dom', 'H', 'COND_cyl', 'EPORT_dom'] # cas-test CSS_Tempimpo + #listeGroup= ['BBK_spire', 'CURRENT_spire_4', 'NOCOND_air', 'CURRENT_spire_3', 'CURRENT_spire_1', 'CURRENT_spire_2'] # cas-test spire_dans l'air en 4 morceaux + #listeGroup= ['BBK_bobine', 'CURRENT_ind_2', 'DIEL_air', 'CURRENT_ind_8', 'CURRENT_ind_6', 'CURRENT_ind_1', 'CURRENT_ind_3', 'CURRENT_ind_7', 'CURRENT_ind_5', 'CURRENT_ind_4', 'BBK_topo', 'COND_plaque', 'TOPO_trou_1', 'TOPO_trou_3', 'TOPO_trou_2', 'TOPO_trou_8', 'TOPO_trou_4', 'TOPO_trou_7', 'TOPO_trou_5', 'TOPO_trou_6'] # cas-test T.E.A.M. Workshop 7 + if debug: + print "listeGroup=", listeGroup + version_catalogue = editor.CONFIGURATION.appli.readercata.version_code # détermination si le catalogue est fréquentiel ou temporel, d'après la deuxième entrée de la liste catalogues dans prefs_CARMEL3D.py + if debug: + print "Version catalogue=", version_catalogue + type_code = version_catalogue.split(' ')[0] # on garde le premier mot de la version du catalogue : 'frequentiel' ou 'temporel' + if debug: + print "Type de code=", type_code + if type_code not in ('frequentiel', 'temporel'): # test de cohérence du type de code + raise ValueError("Ce catalogue n'est ni frequentiel ni temporel") + if type_code == 'frequentiel': + handleAjoutGroupAvecFiltre(editor, listeGroup) + if type_code == 'temporel': + handleAjoutGroupSansFiltre(editor, listeGroup) diff --git a/Carmel3D/opsCarmel.py b/Carmel3D/opsCarmel.py index 896c1cb2..8270d474 100644 --- a/Carmel3D/opsCarmel.py +++ b/Carmel3D/opsCarmel.py @@ -22,7 +22,6 @@ def INCLUDE(self,FileName,**args): """ Fonction sd_prod pour la macro INCLUDE """ - print "kkkkkkkkkkkk" if hasattr(self,'change_fichier'): delattr(self,'change_fichier') delattr(self,'fichier_ini') @@ -33,9 +32,7 @@ def INCLUDE_context(self,d): """ Fonction op_init pour macro INCLUDE """ - print "llllllllllllllllllll" for k,v in self.g_context.items(): d[k]=v - diff --git a/Carmel3D/prefs_CARMEL3D.py b/Carmel3D/prefs_CARMEL3D.py index 52a50b5d..41e26ee1 100644 --- a/Carmel3D/prefs_CARMEL3D.py +++ b/Carmel3D/prefs_CARMEL3D.py @@ -1,40 +1,39 @@ -# -*- 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 -# - -import os - -# repIni sert a localiser le fichier editeur.ini -repIni=os.path.dirname(os.path.abspath(__file__)) - -# lang indique la langue utilisee pour les chaines d'aide : fr ou ang -lang='fr' - -# Codage des strings qui accepte les accents (en remplacement de 'ascii') -encoding='utf-8' - -# Choix des catalogues -# format du Tuple (code,version,catalogue,formatOut, finit par defaut Ăventuellement) -catalogues = ( - -# catalogue avec generation Phys et materiaux reels - ('CARMEL3D','frequentiel ',os.path.join(repIni,'Carmel3D_Cata_frequentiel_V1.py'),'CARMEL3DFV0','defaut'), -# ('CARMEL3D','frequentiel (V1)',os.path.join(repIni,'Carmel3D_Cata_frequentiel_V1.py'),'CARMEL3DFV1','defaut'), -# ('CARMEL3D','temporel (V1)',os.path.join(repIni,'Carmel3D_Cata_temporel_V1.py'),'CARMEL3DTV1','defaut'), -) +# -*- 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 +# + +import os + +# repIni sert a localiser le fichier editeur.ini +repIni=os.path.dirname(os.path.abspath(__file__)) + +# lang indique la langue utilisee pour les chaines d'aide : fr ou ang +lang='fr' + +# Codage des strings qui accepte les accents (en remplacement de 'ascii') +encoding='utf-8' + +# Choix des catalogues +# format du Tuple (code,version,catalogue,formatOut, finit par defaut Ăventuellement) +catalogues = ( + +# catalogue avec generation Phys et materiaux reels + ('CARMEL3D','temporel (dev)',os.path.join(repIni,'Carmel3D_Cata_temporel_V0.py'),'CARMEL3DTV0','defaut'), + ('CARMEL3D','frequentiel',os.path.join(repIni,'Carmel3D_Cata_frequentiel_V1.py'),'CARMEL3DFV0','defaut') +) diff --git a/InterfaceQT4/browser.py b/InterfaceQT4/browser.py index 5b61c09a..786c3d1b 100644 --- a/InterfaceQT4/browser.py +++ b/InterfaceQT4/browser.py @@ -67,8 +67,10 @@ class JDCTree( QTreeWidget ): self.inhibeExpand=False #print "self.editor.afficheCommandesPliees", self.editor.afficheCommandesPliees 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 diff --git a/InterfaceQT4/compomacro.py b/InterfaceQT4/compomacro.py index c5c282e2..ef78cf4e 100644 --- a/InterfaceQT4/compomacro.py +++ b/InterfaceQT4/compomacro.py @@ -38,6 +38,11 @@ class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode): from monMacroPanel import MonMacroPanel return MonMacroPanel (self,parent=self.editor ) + def getPanel2(self): + from monWidgetCommande import MonWidgetCommande + return MonWidgetCommande (self,self.editor ,self.item.object) + + def createPopUpMenu(self): typeNode.PopUpMenuNode.createPopUpMenu(self) if ("AFFE_CARA_ELEM" in self.item.get_genealogie()) and self.editor.salome: diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py index f94753fa..2be9a3c0 100644 --- a/InterfaceQT4/editor.py +++ b/InterfaceQT4/editor.py @@ -1200,7 +1200,7 @@ class JDCEditor(Ui_baseWidget,QtGui.QWidget): #---------------------------# def _newTELEMAC(self): #---------------------------# - texte="INITIALIZATION();INITIAL_STATE();BOUNDARY_CONDITIONS();NUMERICAL_PARAMETERS();PHYSICAL_PARAMETERS()" + texte="INITIALIZATION();BOUNDARY_CONDITIONS();GENERAL_PARAMETERS();PHYSICAL_PARAMETERS();NUMERICAL_PARAMETERS();" #texte="" return texte diff --git a/InterfaceQT4/feuille.py b/InterfaceQT4/feuille.py index 74e4018e..1b11cbf0 100644 --- a/InterfaceQT4/feuille.py +++ b/InterfaceQT4/feuille.py @@ -216,4 +216,5 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel): newText=newTexte[1:] return newText - + + diff --git a/InterfaceQT4/gereListe.py b/InterfaceQT4/gereListe.py index b88ee9e7..11a43dbd 100644 --- a/InterfaceQT4/gereListe.py +++ b/InterfaceQT4/gereListe.py @@ -43,8 +43,26 @@ class LECustom(QLineEdit): print "dans focusInEvent de LECustom" self.parentQt.LineEditEnCours=self self.parentQt.NumLineEditEnCours=self.num + self.setFrame(True) QLineEdit.focusInEvent(self,event) + def focusOutEvent(self,event): + self.setFrame(False) + QLineEdit.focusOutEvent(self,event) + +# ---------------------------- # +class MonLabelListeClic(QLabel): +# ---------------------------- # + def __init__(self,parent): + QLabel.__init__(self,parent) + self.parent=parent + + def event(self,event) : + if event.type() == QEvent.MouseButtonRelease: + self.texte=self.text() + self.parent.traiteClicSurLabelListe(self.texte) + return QLabel.event(self,event) + @@ -66,6 +84,7 @@ class GereListe: if self.NumLineEditEnCours == 1 : return else : numEchange=self.NumLineEditEnCours-1 self.echange(self.NumLineEditEnCours,numEchange) + self.LineEditEnCours.setFocus(True) self.scrollArea.ensureWidgetVisible(self.LineEditEnCours) @@ -73,6 +92,7 @@ class GereListe: if self.NumLineEditEnCours == self.indexDernierLabel : return else : numEchange=self.NumLineEditEnCours+1 self.echange(self.NumLineEditEnCours,numEchange) + self.LineEditEnCours.setFocus(True) self.scrollArea.ensureWidgetVisible(self.LineEditEnCours) def echange(self,num1,num2): @@ -90,6 +110,7 @@ class GereListe: self.changeValeur(changeDePlace=False) self.NumLineEditEnCours=num2 self.LineEditEnCours=courant2 + self.LineEditEnCours.setFocus(True) def moinsPushed(self): # on supprime le dernier diff --git a/InterfaceQT4/groupe.py b/InterfaceQT4/groupe.py index 7e7f7ac0..65a9012a 100644 --- a/InterfaceQT4/groupe.py +++ b/InterfaceQT4/groupe.py @@ -181,4 +181,3 @@ class Groupe(QtGui.QWidget,FacultatifOuOptionnel): def traiteClicSurLabel(self,texte): self.afficheOptionnel() - diff --git a/InterfaceQT4/monChoixCommande.py b/InterfaceQT4/monChoixCommande.py index ce8b84e6..674ceaeb 100644 --- a/InterfaceQT4/monChoixCommande.py +++ b/InterfaceQT4/monChoixCommande.py @@ -55,7 +55,9 @@ class MonChoixCommande(Ui_ChoixCommandes,QtGui.QWidget): self.connect(self.RBGroupe,SIGNAL("clicked()"),self.afficheGroupe) self.connect(self.RBOrdre,SIGNAL("clicked()"),self.afficheOrdre) + if self.editor.Ordre_Des_Commandes == None : self.RBOrdre.close() + self.editor.labelCommentaire.setText("") self.name=None self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.AjouteRadioButton) diff --git a/InterfaceQT4/monWidgetCommande.py b/InterfaceQT4/monWidgetCommande.py index c51fbb77..c304ea33 100644 --- a/InterfaceQT4/monWidgetCommande.py +++ b/InterfaceQT4/monWidgetCommande.py @@ -65,6 +65,8 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): else : self.connect(self.bAvant,SIGNAL("clicked()"), self.afficheAvant) self.connect(self.bApres,SIGNAL("clicked()"), self.afficheApres) + + self.connect(self.LENom,SIGNAL("returnPressed()"),self.nomChange) self.racine=self.node.tree.racine if self.node.item.GetIconName() == "ast-red-square" : self.LENom.setDisabled(True) diff --git a/InterfaceQT4/monWidgetFact.py b/InterfaceQT4/monWidgetFact.py index 28d17ddf..77756ad4 100644 --- a/InterfaceQT4/monWidgetFact.py +++ b/InterfaceQT4/monWidgetFact.py @@ -37,7 +37,8 @@ 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() + QWidget.focusInEvent(self,event) diff --git a/InterfaceQT4/monWidgetFactPlie.py b/InterfaceQT4/monWidgetFactPlie.py index 454b8fbb..5804200a 100644 --- a/InterfaceQT4/monWidgetFactPlie.py +++ b/InterfaceQT4/monWidgetFactPlie.py @@ -35,6 +35,6 @@ class MonWidgetFactPlie(Ui_WidgetFactPlie,Groupe): self.groupBox.setText(self.obj.nom) self.parentQt.commandesLayout.insertWidget(-1,self) - def traiteClicSurLabel(self): + def traiteClicSurLabel(self,texte): return diff --git a/InterfaceQT4/monWidgetPlusieursInto.py b/InterfaceQT4/monWidgetPlusieursInto.py index a4f3e39f..5f3a5097 100644 --- a/InterfaceQT4/monWidgetPlusieursInto.py +++ b/InterfaceQT4/monWidgetPlusieursInto.py @@ -70,8 +70,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille): self.vScrollBar = self.scrollArea.verticalScrollBar() self.politique=PolitiquePlusieurs(self.node,self.editor) self.indexListe=1 - for i in range(1,len(self.listeAAfficher)+1): - self.ajoutCB(i) + for i in range(1,len(self.listeAAfficher)+1): self.ajoutCB(i) for i in range(len(self.listeAAfficher)): nomCB="lineEditVal"+str(i+1) courant=getattr(self,nomCB) @@ -85,8 +84,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille): def ajoutCB(self,index,valeur=None): #print "ajoutCB ", index nomCB="lineEditVal"+str(index) - if hasattr(self,nomCB) : - return + if hasattr(self,nomCB) : return nouveauCB = QCheckBox(self.scrollArea) self.CBLayout.addWidget(nouveauCB) qApp.processEvents() diff --git a/InterfaceQT4/monWidgetPlusieursIntoOrdonne.py b/InterfaceQT4/monWidgetPlusieursIntoOrdonne.py index 12d542d4..ed20a4da 100644 --- a/InterfaceQT4/monWidgetPlusieursIntoOrdonne.py +++ b/InterfaceQT4/monWidgetPlusieursIntoOrdonne.py @@ -31,7 +31,8 @@ from politiquesValidation import PolitiquePlusieurs from qtSaisie import SaisieValeur from gereListe import GereListe from gereListe import LECustom -from monLabelClic import MonLabelClic +from gereListe import MonLabelListeClic + class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,GereListe): @@ -39,16 +40,24 @@ class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,Gere def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande): #print "MonWidgetPlusieursInto", nom, self self.nomLine="LEResultat" + self.listeLE=[] Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande) GereListe.__init__(self) self.parentQt.commandesLayout.insertWidget(-1,self) - self.maCommande.listeAffichageWidget.append(self.lineEditVal1) + try : + self.maCommande.listeAffichageWidget.append(self.lineEditVal1) + except : + # cas ou on ne peut rien ajouter + pass self.ouAjouter=0 self.prepareListeResultat() + self.adjustSize() self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar() - def setValeurs(self): + for i in self.listeLE: + i.close() + self.listeLE=[] listeValeursCourantes=self.node.item.GetListeValeurs() if hasattr(self.node.item.definition.validators,'set_MCSimp'): obj=self.node.item.getObject() @@ -56,20 +65,19 @@ class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,Gere if self.node.item.isvalid() == 0 : liste=[] for item in listeValeursCourantes: - if self.node.item.definition.validators.verif_item(item)==1: - liste.append(item) + if self.node.item.definition.validators.verif_item(item)==1: liste.append(item) self.listeAAfficher=self.node.item.get_liste_possible(liste) else: self.listeAAfficher=self.node.item.get_liste_possible([]) else : - self.listeAAfficher=self.monSimpDef.into + self.listeAAfficher=self.node.item.get_liste_possible(listeValeursCourantes) + if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400) else : self.setMinimumHeight(len(self.listeAAfficher)*30) - self.adjustSize() + self.vScrollBar = self.scrollArea.verticalScrollBar() self.politique=PolitiquePlusieurs(self.node,self.editor) - for i in range(1,len(self.listeAAfficher)+1): - self.ajoutLE(i) + for i in range(1,len(self.listeAAfficher)+1): self.ajoutLE(i) for i in range(len(self.listeAAfficher)): nomLE="lineEditVal"+str(i+1) courant=getattr(self,nomLE) @@ -81,8 +89,7 @@ class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,Gere if self.monSimpDef.max == "**" : aConstruire=7 else : aConstruire=self.monSimpDef.max if len(listeValeursCourantes) > aConstruire : aConstruire=len(listeValeursCourantes) - for i in range(1,aConstruire+1): - self.ajoutLEResultat(i) + for i in range(1,aConstruire+1): self.ajoutLEResultat(i) self.indexDernierLabel=aConstruire index=1 for val in listeValeursCourantes : @@ -94,17 +101,15 @@ class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,Gere def moinsPushed(self): self.ouAjouter=self.ouAjouter-1 - feuille.moinsPushed(self) + GereListe.moinsPushed(self) + self.setValeurs() - #def ajoutLineEdit(self): - # print "kljlkj" def ajoutLEResultat (self,index,valeur=None): nomLE="LEResultat"+str(index) if hasattr(self,nomLE) : return nouveauLE = LECustom(self.scrollAreaRE,self,index) nouveauLE.setFrame(False) - #self.CBChoisis.addWidget(nouveauLE) self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE) self.ouAjouter=self.ouAjouter+1 nouveauLE.setText("") @@ -118,12 +123,11 @@ class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,Gere nouveauLE.setText(valeur) def ajoutLE(self,index,valeur=None): - #print "ajoutLE ", index nomLE="lineEditVal"+str(index) - if hasattr(self,nomLE) : return - nouveauLE = MonLabelClic(self) + nouveauLE = MonLabelListeClic(self) #self.CBLayout.addWidget(nouveauLE) self.CBLayout.insertWidget(index -1,nouveauLE) + self.listeLE.append(nouveauLE) nouveauLE.setFrameShape(QFrame.NoFrame) qApp.processEvents() nouveauLE.setText("") @@ -157,7 +161,7 @@ class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,Gere return str(com) - def traiteClicSurLabel(self,valeur): + def traiteClicSurLabelListe(self,valeur): if valeur == None : return liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur)) if validite == 0 : return @@ -190,6 +194,7 @@ class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,Gere self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum) QTimer.singleShot(1, self.rendVisibleLigneRE) self.changeValeur() + self.setValeurs() def changeValeur(self,changeDePlace=False,oblige=False): #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase @@ -203,6 +208,7 @@ class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,Gere listeVal.append(str(valeur)) validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[]) + listeValeursCourantes=self.node.item.GetListeValeurs() min,max = self.node.item.GetMinMax() diff --git a/InterfaceQT4/politiquesValidation.py b/InterfaceQT4/politiquesValidation.py index 3d5e6ed0..6daaf273 100644 --- a/InterfaceQT4/politiquesValidation.py +++ b/InterfaceQT4/politiquesValidation.py @@ -217,6 +217,7 @@ class PolitiquePlusieurs(Validation): commentaire2=self.node.item.info_erreur_liste() # On traite le cas ou la liste n est pas valide pour un pb de cardinalite min,max = self.node.item.GetMinMax() + print len(listecourante) if len(listecourante) + 1 >= max : commentaire="La liste atteint le nombre maximum d'elements : "+ str(max) +" ,ajout refuse" return valide,commentaire,commentaire2,listeRetour diff --git a/Noyau/N_VALIDATOR.py b/Noyau/N_VALIDATOR.py index 3d50c405..7114615f 100644 --- a/Noyau/N_VALIDATOR.py +++ b/Noyau/N_VALIDATOR.py @@ -1034,6 +1034,7 @@ class AndVal(Valid): def info_erreur_liste(self): a = 1 + chaine="" for v in self.validators: if v.info_erreur_liste() != " ": if a == 1: diff --git a/Telemac/Telemac_Cata.py b/Telemac/Telemac_Cata.py index 96276515..d24bfdfc 100644 --- a/Telemac/Telemac_Cata.py +++ b/Telemac/Telemac_Cata.py @@ -46,8 +46,8 @@ 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", )}, + UIinfo = { "groupes" : ( "CACHE", )}, + #UIinfo = { "groupes" : ( "iiii", )}, # ------------------------------------ Title = SIMP( statut = 'o',typ = 'TXM', @@ -176,7 +176,7 @@ Les donnees de ce fichier seront a lire sur le canal 27.", The data in this file shall be read on channel 27.",), # ------------------------------------ - Binary_Data_File_1 = SIMP( statut = 'f', typ = ('Fichier', 'Reference File (*.txt);;All Files (*)',), + Binary_Data_File_1 = SIMP( statut = 'f', typ = ('Fichier', 'All Files (*)',), # ------------------------------------ fr = 'Fichier de donnees code en binaire mis a la disposition de l utilisateur. \n\ Les donnees de ce fichier seront a lire sur le canal 24.', @@ -184,7 +184,7 @@ Les donnees de ce fichier seront a lire sur le canal 24.', The data in this file shall be read on channel 24.',), # ------------------------------------ - Binary_Data_File_2 = SIMP( statut = 'f', typ = ('Fichier', 'Reference File (*.txt);;All Files (*)',), + Binary_Data_File_2 = SIMP( statut = 'f', typ = ('Fichier', 'All Files (*)',), # ------------------------------------ fr = 'Fichier de donnees code en binaire mis a la disposition de l utilisateur.\n\ Les donnees de ce fichier seront a lire sur le canal 25.', @@ -195,6 +195,76 @@ The data in this file shall be read on channel 25.',), ), # Fin de InputFile + # ----------------------------------------------------------------------- + Initial_State = FACT(statut='o', + # ----------------------------------------------------------------------- + +# ------------------------------------ + Initial_Conditions = SIMP(statut = 'o',typ = 'TXM', +# ------------------------------------ + into = ['Zero elevation','Constant elevation','Zero depth','Constant depth','Special','TPXO satellite altimetry'], + defaut = 'Zero elevation', + fr = "Permet de definir les conditions initiales sur les hauteurs d'eau. Les valeurs possibles sont :\n\ + - COTE NULLE. Initialise la cote de surface libre a 0. \nLes hauteurs d'eau initiales sont alors retrouvees en faisant la difference entre les cotes de surface libre et du fond. \n\ + - COTE CONSTANTE . Initialise la cote de surface libre a la valeur donnee par le mot-cle COTE INITIALE. Les hauteurs d'eau initiales sont calculees comme precedemment.\n\ + - HAUTEUR NULLE .Initialise les hauteurs d'eau a 0. \n\ + - HAUTEUR CONSTANTE. Initialise les hauteurs d'eau a la valeur donnee par le mot-cle HAUTEUR INITIALE. \n\ + - PARTICULIERES. Les conditions initiales sur la hauteur d'eau doivent etre precisees dans le sous-programme CONDIN. \n\ + - ALTIMETRIE SATELLITE TPXO. Les conditions initiales sur la hauteur d'eau et les vitesses sont etablies sur \n\ + la base des donnees satellite TPXO dont les 8 premiers constistuents ont ete extraits et sauves dans le fichier\n\ + BASE DE DONNEES DE MAREE." , + ang = 'Makes it possible to define the initial conditions with the water depth. The possible values are : \n\ + - ZERO ELEVATION. Initializes the free surface elevation to 0. \n The initial water depths are then found by computing the difference between the free surface and the bottom. \n\ + - CONSTANT ELEVATION. Initializes the water elevation to the value given by the keyword \n\ + - INITIAL ELEVATION. The initial water depths are computed as in the previous case. \n\ + - ZERO DEPTH. Initializes the water depths to 0. \n\ + - CONSTANT DEPTH. Initializes the water depths to the value givenby the key-word INITIAL DEPTH. \n\ + - SPECIAL. The initial conditions with the water depth should be stated in the CONDIN subroutine. \n\ + - TPXO SATELITE ALTIMETRY. The initial conditions on the free surface and velocities are established from the TPXO satellite program data,\n the harmonic constituents of which are stored in the TIDE DATA BASE file.', ), + +# ------------------------------------ + b_initial_elevation = BLOC (condition = "Initial_Conditions == 'Constant elevation'", +# ------------------------------------ +# ------------------------------------ + Initial_Elevation = SIMP(statut = 'o',typ = 'R', +# ------------------------------------ + fr = 'Valeur utilisee avec l''option : CONDITIONS INITIALES - COTE CONSTANTE', + ang = 'Value to be used with the option : INITIAL CONDITIONS -CONSTANT ELEVATION' ), + ) , # fin b_initial_elevation + +# ------------------------------------ + b_initial_depth = BLOC (condition = "Initial_Conditions == 'Constant depth'", +# ------------------------------------ +# ------------------------------------ + Initial_Depth = SIMP(statut = 'o',typ = 'R', +# ------------------------------------ + fr = 'Valeur utilisee avec l''option : CONDITIONS INITIALES :-HAUTEUR CONSTANTE-', + ang = 'Value to be used along with the option: INITIAL CONDITIONS -CONSTANT DEPTH-' ), + ),# fin b_initial_depth + +# ------------------------------------ + b_special = BLOC (condition = "Initial_Conditions == 'Special'", +# ------------------------------------ +# ------------------------------------ + Consigne = SIMP(statut = "o",homo = 'information',typ = "TXM", +# ------------------------------------ + defaut = "The initial conditions with the water depth should be stated in the CONDIN subroutine"), + ), # 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'", +# ------------------------------------ +# ------------------------------------ + 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 + + ), # fin Initial_State + # ------------------------------------ Computation_Continued = SIMP( statut = 'o',typ = bool,defaut = False,position = "global_jdc"), @@ -385,7 +455,7 @@ For TPXO, LEGOS-NEA, FES20XX and PREVIMER, the user has to download files of har # ------------------------------------ # ------------------------------------ - Minor_Constituents_Inference = SIMP( statut = 'o',typ = 'bool', + Minor_Constituents_Inference = SIMP( statut = 'o',typ = bool, # ------------------------------------ defaut = False , fr = 'Interpolation de composantes harmoniques mineures a partir de celles lues dans les \n\ @@ -454,83 +524,13 @@ La valeur par defaut 999999. signifie que c''est la racine carree du Coefficient ), #fin Physical_Parameters ) # Fin TIDE_PARAMETERS -# ----------------------------------------------------------------------- -INITIAL_STATE = PROC(nom = "INITIAL_STATE",op = None, -# ----------------------------------------------------------------------- - -# ------------------------------------ - Initial_Conditions = SIMP(statut = 'o',typ = 'TXM', -# ------------------------------------ - into = ['Zero elevation','Constant elevation','Zero depth','Constant depth','Special','TPXO satellite altimetry'], - defaut = 'Zero elevation', - fr = "Permet de definir les conditions initiales sur les hauteurs d'eau. Les valeurs possibles sont :\n\ - - COTE NULLE. Initialise la cote de surface libre a 0. \nLes hauteurs d'eau initiales sont alors retrouvees en faisant la difference entre les cotes de surface libre et du fond. \n\ - - COTE CONSTANTE . Initialise la cote de surface libre a la valeur donnee par le mot-cle COTE INITIALE. Les hauteurs d'eau initiales sont calculees comme precedemment.\n\ - - HAUTEUR NULLE .Initialise les hauteurs d'eau a 0. \n\ - - HAUTEUR CONSTANTE. Initialise les hauteurs d'eau a la valeur donnee par le mot-cle HAUTEUR INITIALE. \n\ - - PARTICULIERES. Les conditions initiales sur la hauteur d'eau doivent etre precisees dans le sous-programme CONDIN. \n\ - - ALTIMETRIE SATELLITE TPXO. Les conditions initiales sur la hauteur d'eau et les vitesses sont etablies sur \n\ - la base des donnees satellite TPXO dont les 8 premiers constistuents ont ete extraits et sauves dans le fichier\n\ - BASE DE DONNEES DE MAREE." , - ang = 'Makes it possible to define the initial conditions with the water depth. The possible values are : \n\ - - ZERO ELEVATION. Initializes the free surface elevation to 0. \n The initial water depths are then found by computing the difference between the free surface and the bottom. \n\ - - CONSTANT ELEVATION. Initializes the water elevation to the value given by the keyword \n\ - - INITIAL ELEVATION. The initial water depths are computed as in the previous case. \n\ - - ZERO DEPTH. Initializes the water depths to 0. \n\ - - CONSTANT DEPTH. Initializes the water depths to the value givenby the key-word INITIAL DEPTH. \n\ - - SPECIAL. The initial conditions with the water depth should be stated in the CONDIN subroutine. \n\ - - TPXO SATELITE ALTIMETRY. The initial conditions on the free surface and velocities are established from the TPXO satellite program data,\n the harmonic constituents of which are stored in the TIDE DATA BASE file.', ), - -# ------------------------------------ - b_initial_elevation = BLOC (condition = "Initial_Conditions == 'Constant elevation'", -# ------------------------------------ -# ------------------------------------ - Initial_Elevation = SIMP(statut = 'o',typ = 'R', -# ------------------------------------ - fr = 'Valeur utilisee avec l''option : CONDITIONS INITIALES - COTE CONSTANTE', - ang = 'Value to be used with the option : INITIAL CONDITIONS -CONSTANT ELEVATION' ), - ) , # fin b_initial_elevation - -# ------------------------------------ - b_initial_depth = BLOC (condition = "Initial_Conditions == 'Constant depth'", -# ------------------------------------ -# ------------------------------------ - Initial_Depth = SIMP(statut = 'o',typ = 'R', -# ------------------------------------ - fr = 'Valeur utilisee avec l''option : CONDITIONS INITIALES :-HAUTEUR CONSTANTE-', - ang = 'Value to be used along with the option: INITIAL CONDITIONS -CONSTANT DEPTH-' ), - ),# fin b_initial_depth - -# ------------------------------------ - b_special = BLOC (condition = "Initial_Conditions == 'Special'", -# ------------------------------------ -# ------------------------------------ - Consigne = SIMP(statut = "o",homo = 'information',typ = "TXM", -# ------------------------------------ - defaut = "The initial conditions with the water depth should be stated in the CONDIN subroutine"), - ), # 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'", -# ------------------------------------ -# ------------------------------------ - 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 - -) # fin INITIAL_STATE - # ----------------------------------------------------------------------- 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", )}, + 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 = '**', @@ -544,7 +544,7 @@ BOUNDARY_CONDITIONS = PROC(nom = "BOUNDARY_CONDITIONS",op = None, # Il faut seulement l un des 3 # ------------------------------------ - Liquid_Boundaries = FACT(statut = 'f',max = '**', + Liquid_Boundaries = FACT(statut = 'o',max = '**', # ------------------------------------ # ------------------------------------ @@ -559,7 +559,7 @@ BOUNDARY_CONDITIONS = PROC(nom = "BOUNDARY_CONDITIONS",op = None, # On ajoute le type pour rendre l 'ihm plus lisible # mais ce mot-cle n existe pas dans le dico # ------------------------------------ - into = ['Prescribed flowrates', 'Prescribed elevations', 'Prescribed velocity'],), + into = ['Prescribed Flowrates', 'Prescribed Elevations', 'Prescribed Velocity'],), # ------------------------------------ b_Flowrates = BLOC (condition = "Type_Condition == 'Prescribed Flowrates'", @@ -652,8 +652,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", )}, + UIinfo = { "groupes" : ( "CACHE", )}, + #UIinfo = { "groupes" : ( "iiii", )}, # ------------------------------------ Equations = SIMP(statut = 'o',typ = 'TXM', @@ -724,123 +724,6 @@ Note: a maximum number of 40 iterations per time step seems to be reasonable.',) ), # fin Solver -# ------------------------------------ - 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', defaut = 1, - 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.'), - -# ------------------------------------ - 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.'), - -# ------------------------------------ - Duration = SIMP(statut = 'f',typ = 'R', -# ------------------------------------ - fr = 'duree de la simulation. alternative au parametre nombre de pas de temps. \n\ -On en deduit le nombre de pas de temps en prenant l''entier le plus proche de (duree du calcul/pas de temps).\n\ -Si le nombre de pas de temps est aussi donne, on prend la plus grande valeur', - ang = 'duration of simulation. May be used instead of the parameter NUMBER OF TIME STEPS. \n\ -The nearest integer to (duration/time step) is taken. If NUMBER OF TIME STEPS is also given, the greater value is taken',), - -# PNPN -# Attention, on laisse la règle mais il est possible d avoir les 2 en entrées --> attention au convert -# ------------------------------------ - Variable_Time_Step = SIMP(statut = 'f',typ = bool, -# ------------------------------------ - fr = 'Pas de temps variable pour avoir un nombre de courant souhaite', - ang = 'Variable time-step to get a given Courant number'), - -# ------------------------------------ - b_var_time = BLOC(condition = "Variable_Time_Step == True" , -# ------------------------------------ -# ------------------------------------ - Desired_Courant_Number = SIMP(statut = 'o',typ = 'R', -# ------------------------------------ - fr = 'Nombre de Courant souhaite ', - ang = 'Desired Courant number',), - ), - -# ------------------------------------ - 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 = 'o', -# ------------------------------------ - 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 = 'o', -# ------------------------------------ - typ = bool,defaut = 'False'), - -# ------------------------------------ - b_stop = BLOC(condition = "Stop_If_A_Steady_State_Is_Reached == True" , -# ------------------------------------ -# ------------------------------------ - Stop_Criteria = SIMP(statut = 'o',typ = Tuple(3),validators = VerifTypeTuple(('R','R','R')), -# ------------------------------------ - fr = "Criteres d'arret pour un ecoulement permanent. ces coefficients sont respectivement appliques a\n\ - 1- U et V 2- H 3- T ", - ang = 'Stop criteria for a steady state These coefficients are applied respectively to\n\ - 1- U and V 2- H 3- T ',), - ), # fin b_stop - -# ------------------------------------ - Control_Of_Limits = SIMP(statut = 'o', -# ------------------------------------ - typ = bool, defaut = 'False', - fr = 'Le programme s''arrete si les limites sur u,v,h ou t sont depassees', - ang = 'The program is stopped if the limits on u,v,h, or t are trespassed',), - -# ------------------------------------ - b_limit = BLOC(condition = "Control_Of_Limit == True" , - Limit_Values = FACT(statut = 'o', -# Attention : 1 seul MC ds Telemac -# ------------------------------------ - fr = 'valeurs mini et maxi acceptables min puis max', - ang = 'min and max acceptable values ', - -# ------------------------------------ - Limit_Values_H = SIMP(statut = 'o',typ = Tuple(2), -# ------------------------------------ - validators = VerifTypeTuple(('R','R')), defaut = (-1000,9000)), -# ------------------------------------ - Limit_Values_U = SIMP(statut = 'o',typ = Tuple(2), -# ------------------------------------ - validators = VerifTypeTuple(('R','R')), defaut = (-1000,1000)), -# ------------------------------------ - Limit_Values_V = SIMP(statut = 'o',typ = Tuple(2), -# ------------------------------------ - validators = VerifTypeTuple(('R','R')), defaut = (-1000,1000)), -# ------------------------------------ - Limit_Values_T = SIMP(statut = 'o',typ = Tuple(2), -# ------------------------------------ - validators = VerifTypeTuple(('R','R')), defaut = (-1000,1000)), - ),), # fin Fact et b_limit - ), # Fin de Time - # ------------------------------------ Linearity = FACT(statut = 'f', # ------------------------------------ @@ -858,16 +741,15 @@ The nearest integer to (duration/time step) is taken. If NUMBER OF TIME STEPS i # ------------------------------------ # ------------------------------------ - Preconditioning = SIMP(statut = 'o',typ = 'TXM', + Preconditioning = SIMP(statut = 'o',typ = 'TXM',max="**", # ------------------------------------ # PNPN Soizic ? Est ce que c'est une liste # Comment fait-on le into est faux : voir l aide # PN Je propose qu 'on puisse faire +sieurs choix et qu on recalcule en sortie # ou on propose des choix croisés parce que toutes les combinaisons ne sont pas possibles ? # - into = [ "Diagonal", "No preconditioning", "Diagonal condensee", "Crout", \ - "Gauss-Seidel", "Diagonal and Crout", "Diagonal condensed and Crout"], - defaut="Diagonal", + into = [ "Diagonal", "No preconditioning", "Diagonal condensee", "Crout", "Gauss-Seidel", ], + defaut=("Diagonal",), homo="SansOrdreNiDoublon", fr='Permet de preconditionner le systeme de l etape de propagation afin d accelerer la convergence \n\ lors de sa resolution. Certains preconditionnements sont cumulables : (les diagonaux 2 ou 3 avec les autres)\n\ Pour cette raison on ne retient que les nombres premiers pour designer les preconditionnements. Si l on souhaite en cumuler\n\ @@ -890,16 +772,18 @@ the product of relevant options shall be made.', Matrix_Informations = FACT(statut = 'f', # ------------------------------------ # ------------------------------------ - Matrix_Vector_Product = SIMP(statut = 'f',typ = 'TXM', + Matrix_Vector_Product = SIMP(statut = 'o',typ = 'TXM', # ------------------------------------ into = ["Classic", "Frontal"], + defaut='Classic', fr = 'attention, si frontal, il faut une numerotation speciale des points', ang = 'beware, with option 2, a special numbering of points is required', ), # ------------------------------------ - Matrix_Storage = SIMP(statut = 'f',typ = 'TXM', + Matrix_Storage = SIMP(statut = 'o',typ = 'TXM', # ------------------------------------ - into = ["Classical EBE","Edge-based storage",] + into = ["Classical EBE","Edge-based storage",], + defaut='Edge-based storage', ), ),# fin Matrix_Informations @@ -909,7 +793,7 @@ the product of relevant options shall be made.', # ------------------------------------ # ------------------------------------ - Advection_Propagation = FACT(statut = 'o', + Type_Of_Advection = FACT(statut = 'o', # ------------------------------------ # PNPNPN recalcul @@ -918,7 +802,7 @@ the product of relevant options shall be made.', # soizic. choix 3 et 4 et 13 et 14 # Attention recalcul de Type_Of_Advection # ------------------------------------ - Advection_Of_U_And_V = SIMP(statut = 'o',typ = bool, defaut = False, + Advection_Of_U_And_V = SIMP(statut = 'o',typ = bool, defaut = True, # ------------------------------------ fr = 'Prise en compte ou non de la convection de U et V.', ang = 'The advection of U and V is taken into account or ignored.'), @@ -937,6 +821,11 @@ the product of relevant options shall be made.', # ------------------------------------ b_upwind = BLOC(condition = "Type_Of_Advection_U_And_V == 'SUPG'", # ------------------------------------ +# ------------------------------------ + Supg_Option_U_And_V = SIMP(statut = 'o', defaut = 'Modified SUPG', typ = 'TXM', +# ------------------------------------ + into = ['No upwinding', 'Classical SUPG','Modified SUPG']), + # ------------------------------------ Upwind_Coefficients_Of_U_And_V = SIMP(statut = 'o',typ = 'R', defaut = 1.) # ------------------------------------ @@ -944,7 +833,7 @@ the product of relevant options shall be made.', ),# fin b_u_v # ------------------------------------ - Advection_Of_H = SIMP(statut = 'o',typ = bool, defaut = False, + Advection_Of_H = SIMP(statut = 'o',typ = bool, defaut = True, # ------------------------------------ fr = 'Prise en compte ou non de la convection de H.', ang = 'The advection of H is taken into account or ignored.'), @@ -962,6 +851,11 @@ the product of relevant options shall be made.', # ------------------------------------ b_upwind_H = BLOC(condition = "Type_Of_Advection_H == 'SUPG'", # ------------------------------------ +# ------------------------------------ + Supg_Option_H = SIMP(statut = 'o', defaut = 'Modified SUPG', typ = 'TXM', +# ------------------------------------ + into = ['No upwinding', 'Classical SUPG','Modified SUPG']), + # ------------------------------------ Upwind_Coefficients_Of_H = SIMP(statut = 'o',typ = 'R', defaut = 1.) # ------------------------------------ @@ -969,7 +863,7 @@ the product of relevant options shall be made.', ),# fin b_h # ------------------------------------ - Advection_Of_K_And_Epsilon = SIMP(statut = 'o',typ = bool, defaut = False, + Advection_Of_K_And_Epsilon = SIMP(statut = 'o',typ = bool, defaut = True, # ------------------------------------ fr = 'Prise en compte ou non de la convection de Tracer.', ang = 'The advection of Tracer is taken into account or ignored.'), @@ -987,6 +881,11 @@ the product of relevant options shall be made.', # ------------------------------------ b_upwind_k = BLOC(condition = "Type_Of_Advection_K_And_Epsilon == 'SUPG'", # ------------------------------------ +# ------------------------------------ + Supg_Option_Tracers = SIMP(statut = 'o', defaut = 'Modified SUPG', typ = 'TXM', +# ------------------------------------ + into = ['No upwinding', 'Classical SUPG','Modified SUPG']), + # ------------------------------------ Upwind_Coefficients_Of_K_And_Epsilon = SIMP(statut = 'o',typ = 'R', defaut = 1.) # ------------------------------------ @@ -994,7 +893,7 @@ the product of relevant options shall be made.', ),# fin b_k # ------------------------------------ - Advection_Of_Tracers = SIMP(statut = 'o',typ = bool, defaut = False, + Advection_Of_Tracers = SIMP(statut = 'o',typ = bool, defaut = True, # ------------------------------------ fr = 'Prise en compte ou non de la convection de Tracer.', ang = 'The advection of Tracer is taken into account or ignored.'), @@ -1011,6 +910,11 @@ the product of relevant options shall be made.', # ------------------------------------ b_upwind_Tracers = BLOC(condition = "Type_Of_Advection_Tracers == 'SUPG'", # ------------------------------------ +# ------------------------------------ + Supg_Option_K_And_Epsilon = SIMP(statut = 'o', defaut = 'Modified SUPG', typ = 'TXM', +# ------------------------------------ + into = ['No upwinding', 'Classical SUPG','Modified SUPG']), + # ------------------------------------ Upwind_Coefficients_Of_Tracers = SIMP(statut = 'o',typ = 'R', defaut = 1.) # ------------------------------------ @@ -1041,39 +945,32 @@ si Priorité aux flux, on ne retrouve pas exactement les valeurs imposees des tr if Priority to fluxes, Dirichlet prescribed values are not obeyed,but the fluxes are correct',), ), # fin b_traitement - ), # Fin Advection_Propagation + ), # Fin Type_Of_Advection -# ------------------------------------ - Scheme_For_Advection_Of_K_Epsilon = SIMP(statut = 'o',typ = 'TXM', -# ------------------------------------ - into = ["No advection", "Characteristics", "Explicit + SUPG", "Explicit leo 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 # Attention bloc selon le type de convection # ------------------------------------ - SUPG = FACT(statut = 'o', +# SUPG = FACT(statut = 'o', # ------------------------------------ # ------------------------------------ - Supg_Option_U_And_V = SIMP(statut = 'o', defaut = 'Modified SUPG', typ = 'TXM', +# Supg_Option_U_And_V = SIMP(statut = 'o', defaut = 'Modified SUPG', typ = 'TXM', # ------------------------------------ - into = ['No upwinding', 'Classical SUPG','Modified SUPG']), +# into = ['No upwinding', 'Classical SUPG','Modified SUPG']), # ------------------------------------ - Supg_Option_H = SIMP(statut = 'o', defaut = 'Modified SUPG', typ = 'TXM', +# Supg_Option_H = SIMP(statut = 'o', defaut = 'Modified SUPG', typ = 'TXM', # ------------------------------------ - into = ['No upwinding', 'Classical SUPG','Modified SUPG']), +# into = ['No upwinding', 'Classical SUPG','Modified SUPG']), # ------------------------------------ - Supg_Option_Tracers = SIMP(statut = 'o', defaut = 'Modified SUPG', typ = 'TXM', +# Supg_Option_Tracers = SIMP(statut = 'o', defaut = 'Modified SUPG', typ = 'TXM', # ------------------------------------ - into = ['No upwinding', 'Classical SUPG','Modified SUPG']), +# into = ['No upwinding', 'Classical SUPG','Modified SUPG']), # ------------------------------------ - Supg_Option_K_And_Epsilon = SIMP(statut = 'o', defaut = 'Modified SUPG', typ = 'TXM', +# Supg_Option_K_And_Epsilon = SIMP(statut = 'o', defaut = 'Modified SUPG', typ = 'TXM', # ------------------------------------ - into = ['No upwinding', 'Classical SUPG','Modified SUPG']), - ), # Fin de SUPG +# into = ['No upwinding', 'Classical SUPG','Modified SUPG']), +# ), # Fin de SUPG # ------------------------------------ Mass_Lumping_On_H = SIMP(statut = 'o',typ = 'R', defaut = 0, @@ -1095,13 +992,17 @@ This parameter sets the extent of mass-lumping that is performed on h.'), fr = 'Fixe le taux de mass-lumping effectue sur la vitesse.', ang = 'Sets the amount of mass-lumping that is performed on the velocity.'), +# ------------------------------------ + Mass_Lumping_For_Weak_Characteristics = SIMP(statut = 'o',typ = 'R',defaut = 0, +# ------------------------------------ + fr = 'Applique a la matrice de masse', + ang = 'To be applied to the mass matrix',), # ------------------------------------ Free_Surface_Gradient_Compatibility = SIMP(statut = 'o',typ = 'R',defaut = 1., # ------------------------------------ fr = 'Des valeurs inferieures a 1 suppriment les oscillations parasites', ang = 'Values less than 1 suppress spurious oscillations'), - # ------------------------------------ Number_Of_Sub_Iterations_For_Non_Linearities = SIMP(statut = 'o',typ = 'I', # ------------------------------------ @@ -1117,11 +1018,6 @@ these fields are given by C and the velocity field in the previous time step. At the results of the previous sub-iteration is used to update the advection and propagation field.\n\ The non-linearities can be taken into account through this technique.',), -# ------------------------------------ - Mass_Lumping_For_Weak_Characteristics = SIMP(statut = 'o',typ = 'R',defaut = 0, -# ------------------------------------ - fr = 'Applique a la matrice de masse', - ang = 'To be applied to the mass matrix',), ), # fin Advection @@ -1235,6 +1131,8 @@ Values below 0.5 result in an unstable condition.'), ), # fin Discretization_Implicitation +# ------------------------------------ + Tidal=FACT(statut='f', # ------------------------------------ Tidal_Flats = SIMP(statut = 'o',typ = bool,defaut = True, # ------------------------------------ @@ -1290,6 +1188,7 @@ This key-word may have an influence on mass conservation since the truncation of ang = 'Sets the minimum H value when option H CLIPPING is implemented. Not fully implemented.',), ), # fin b_clipping ), # fin bloc b_tidal_flats + ), # fin bloc tidal # ------------------------------------ Various = FACT( @@ -1315,133 +1214,8 @@ This key-word may have an influence on mass conservation since the truncation of # ----------------------------------------------------------------------- PHYSICAL_PARAMETERS = PROC(nom = "PHYSICAL_PARAMETERS",op = None, # ----------------------------------------------------------------------- + UIinfo = { "groupes" : ( "CACHE", )}, # ------------------------------------ - Meteorology = FACT(statut = 'o', -# ------------------------------------ - -# ------------------------------------ - Wind = SIMP(statut = 'o',typ = bool,defaut = False, -# ------------------------------------ - fr = 'Prise en compte ou non des effets du vent.', - ang = 'Determines whether the wind effects are to be taken into account or not.'), - -# ------------------------------------ - b_Wind = BLOC(condition = "Wind == True", -# ------------------------------------ -# ------------------------------------ - Wind_Velocity_Along_X = SIMP(statut = 'o',typ = 'R', defaut = 0., -# ------------------------------------ - fr = 'Composante de la vitesse du vent suivant l''axe des x (m/s).', - ang = 'Wind velocity, component along x axis (m/s).',), - -# ------------------------------------ - Wind_Velocity_Along_Y = SIMP(statut = 'o',typ = 'R',defaut = 0., -# ------------------------------------ - fr = 'Composante de la vitesse du vent suivant l''axe des y (m/s).', - ang = 'Wind velocity, component along y axis (m/s).',), - -# ------------------------------------ - Threshold_Depth_For_Wind = SIMP(statut = 'o',typ = 'R',defaut = 0., -# ------------------------------------ - fr = 'Retire la force due au vent dans les petites profondeurs', - ang = 'Wind is not taken into account for small depths' ), - -# ------------------------------------ - 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"), - ), # fin bloc file_For_wind - -# ------------------------------------ - 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)',), - ), # speed_For_wind - - ), # fin b_Wind - -# ------------------------------------ - Air_Pressure = SIMP(statut = 'o',typ = bool, defaut = False, -# ------------------------------------ - fr = 'Permet de decider si l''on prend ou non en compte l''influence d''un champ de pression.', - ang = 'Provided to decide whether the influence of an atmosphere field is taken into account or not.'), - -# ------------------------------------ - b_air = BLOC(condition = "Air_Pressure == True", -# ------------------------------------ -# ------------------------------------ - 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',), - ), # fin b_air - -# ------------------------------------ - Rain_Or_Evaporation = SIMP(statut = 'o',typ = bool, -# ------------------------------------ - defaut = False, - fr = 'Pour ajouter un apport ou une perte d''eau en surface.', - ang = 'to add or remove water at the free surface. ',), - -# ----------------------------------- - b_Rain = BLOC(condition = "Rain_Or_Evaporation == True", -# ------------------------------------ -# ------------------------------------ - Rain_Or_Evaporation_In_Mm_Per_Day = SIMP(statut = 'o',typ = 'I',defaut = 0.), -# ------------------------------------ - ), # fin b_Rain - - ), # fin Meteorology - -# ------------------------------------ - Wave = FACT(statut = 'o', -# ------------------------------------ - -# ------------------------------------ - Wave_Driven_Currents = SIMP(statut = 'o', -# ------------------------------------ - typ = bool, defaut = False, - fr = 'Active la prise en compte des courants de houle', - ang = 'Wave driven currents are taken into account.'), - -# ------------------------------------ - b_Wave = BLOC(condition = "Wave_Driven_Currents == True", -# ------------------------------------ -# ------------------------------------ - Record_Number_In_Wave_File = SIMP(statut = 'o',typ = 'I', defaut = 1, -# ------------------------------------ - fr = 'Numero d enregistrement dans le fichier des courants de houle', - ang = 'Record number to read in the wave driven currents file'), - ), # fin b_Wave - ), # fin Wave - -# ------------------------------------ - Friction_Data = SIMP(statut = 'o',typ = bool,defaut = False), -# ------------------------------------ -# ------------------------------------ - b_Friction = BLOC(condition = "Friction_Data == True", Friction_Setting = FACT(statut = 'o', # ------------------------------------ # ------------------------------------ @@ -1561,8 +1335,129 @@ It is noteworthy that the meaning of this figure changes according to the select # ------------------------------------ ), # fin b_def_zone - ), # fin du fact Friction ), # Fin du bloc Friction +# ------------------------------------ + Meteorology = FACT(statut = 'f', +# ------------------------------------ + +# ------------------------------------ + Wind = SIMP(statut = 'o',typ = bool,defaut = False, +# ------------------------------------ + fr = 'Prise en compte ou non des effets du vent.', + ang = 'Determines whether the wind effects are to be taken into account or not.'), + +# ------------------------------------ + b_Wind = BLOC(condition = "Wind == True", +# ------------------------------------ +# ------------------------------------ + Wind_Velocity_Along_X = SIMP(statut = 'o',typ = 'R', defaut = 0., +# ------------------------------------ + fr = 'Composante de la vitesse du vent suivant l''axe des x (m/s).', + ang = 'Wind velocity, component along x axis (m/s).',), + +# ------------------------------------ + Wind_Velocity_Along_Y = SIMP(statut = 'o',typ = 'R',defaut = 0., +# ------------------------------------ + fr = 'Composante de la vitesse du vent suivant l''axe des y (m/s).', + ang = 'Wind velocity, component along y axis (m/s).',), + +# ------------------------------------ + Threshold_Depth_For_Wind = SIMP(statut = 'o',typ = 'R',defaut = 0., +# ------------------------------------ + fr = 'Retire la force due au vent dans les petites profondeurs', + ang = 'Wind is not taken into account for small depths' ), + +# ------------------------------------ + 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"), + ), # fin bloc file_For_wind + +# ------------------------------------ + 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)',), + ), # speed_For_wind + + ), # fin b_Wind + +# ------------------------------------ + Air_Pressure = SIMP(statut = 'o',typ = bool, defaut = False, +# ------------------------------------ + fr = 'Permet de decider si l''on prend ou non en compte l''influence d''un champ de pression.', + ang = 'Provided to decide whether the influence of an atmosphere field is taken into account or not.'), + +# ------------------------------------ + b_air = BLOC(condition = "Air_Pressure == True", +# ------------------------------------ +# ------------------------------------ + 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',), + ), # fin b_air + +# ------------------------------------ + Rain_Or_Evaporation = SIMP(statut = 'o',typ = bool, +# ------------------------------------ + defaut = False, + fr = 'Pour ajouter un apport ou une perte d''eau en surface.', + ang = 'to add or remove water at the free surface. ',), + +# ----------------------------------- + b_Rain = BLOC(condition = "Rain_Or_Evaporation == True", +# ------------------------------------ +# ------------------------------------ + Rain_Or_Evaporation_In_Mm_Per_Day = SIMP(statut = 'o',typ = 'I',defaut = 0.), +# ------------------------------------ + ), # fin b_Rain + + ), # fin Meteorology + +# ------------------------------------ + Wave = FACT(statut = 'f', +# ------------------------------------ + +# ------------------------------------ + Wave_Driven_Currents = SIMP(statut = 'o', +# ------------------------------------ + typ = bool, defaut = False, + fr = 'Active la prise en compte des courants de houle', + ang = 'Wave driven currents are taken into account.'), + +# ------------------------------------ + b_Wave = BLOC(condition = "Wave_Driven_Currents == True", +# ------------------------------------ +# ------------------------------------ + Record_Number_In_Wave_File = SIMP(statut = 'o',typ = 'I', defaut = 1, +# ------------------------------------ + fr = 'Numero d enregistrement dans le fichier des courants de houle', + ang = 'Record number to read in the wave driven currents file'), + ), # fin b_Wave + ), # fin Wave + # ------------------------------------ @@ -1620,6 +1515,9 @@ It is noteworthy that the meaning of this figure changes according to the select ), # fin fact Parameters_Estimation +# ------------------------------------ + Sources = FACT( statut = 'f', +# ------------------------------------ # ------------------------------------ Number_Of_Sources = SIMP( statut = 'o',typ = 'I', defaut = 0 ,), # ------------------------------------ @@ -1685,16 +1583,11 @@ It is noteworthy that the meaning of this figure changes according to the select ang = 'Source term multiplied by a finite element basis, Source term multiplied by a Dirac function',), ),#fin bloc source - exits + ),#fin MC source - exits -# ------------------------------------ - 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', - ), # ------------------------------------ - Coriolis_Settings = FACT(statut = 'o', + Coriolis_Settings = FACT(statut = 'f', # ------------------------------------ # ------------------------------------ Coriolis = SIMP( statut='o',typ=bool, @@ -1714,37 +1607,26 @@ Les composantes de la force de Coriolis sont alors : FU = FCOR x V FV = - FCOR denoted FCOR in the code, should be equal to 2 w sin(l)d where w denotes the earth angular speed of rotation and l the latitude. \n\ w = 7.27 10-5 rad/sec The Coriolis force components are then: FU = FCOR x V, FV = -FCOR x U In spherical coordinates, the latitudes are known',), ), #fin Coriolis_Settings -# ------------------------------------ - Tsunami = FACT(statut = 'o', -# ------------------------------------ -# ------------------------------------------------------- - Option_For_Tsunami_Generation = SIMP( statut='o',typ='I', defaut=0 , -# ------------------------------------------------------- - fr = '', - ang= '',), -# ------------------------------------------------------- - Physical_Characteristics_Of_The_Tsunami = SIMP( statut='o',typ='R', -# ------------------------------------------------------- - min=10,max=10, - defaut=(100.0, 210000.0, 75000.0, 13.6, 81.0, 41.0, 110.0, 0.0, 0.0, 3.0) , - fr = '', - ang= '',), - ), #fin Tsunami +# ------------------------------------ + Various = FACT( statut = 'f', +# ------------------------------------ +# ------------------------------------ + 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, -# ------------------------------------ +# ------------------------------------ + 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.', - ), - + ), -# ------------------------------------ - Various = FACT( statut = 'o', -# ------------------------------------ # ------------------------------------ Vertical_Structures = SIMP(statut = 'o',typ = bool,defaut = False, # ------------------------------------ @@ -1760,6 +1642,56 @@ w = 7.27 10-5 rad/sec The Coriolis force components are then: FU = FCOR x V, FV defaut = "subroutine DRAGFO must then be implemented"), ), # fin maskob ), + +# ----------------------------------------------------------------------- + Secondary_Currents_Settings = FACT( statut='f', +# ----------------------------------------------------------------------- +# ----------------------------------------------------------------------- + Secondary_Currents = SIMP( statut='o',typ=bool, +# ----------------------------------------------------------------------- + defaut=False , + fr = 'Pour prendre en compte les courants secondaires', + ang= 'Using the parametrisation for secondary currents', + ), + +# ----------------------------------------------------------------------- + b_currents_exists = BLOC(condition = "Secondary_Currents == True", +# ----------------------------------------------------------------------- +# ----------------------------------------------------------------------- + Production_Coefficient_For_Secondary_Currents = SIMP( statut='o',typ='R', +# ----------------------------------------------------------------------- + defaut=7.071 , + fr = 'Une constante dans les termes de creation de Omega', + ang= 'A constant in the production terms of Omega',), + +# ----------------------------------------------------------------------- + Dissipation_Coefficient_For_Secondary_Currents = SIMP( statut='o',typ='R', +# ----------------------------------------------------------------------- + defaut=0.5 , + fr = 'Coefficient de dissipation de Omega', + ang= 'Coefficient of dissipation term of Omega',), + + ), # fin b_currents_exists + ), # fin Secondary_Currents_Settings + +# ------------------------------------ + Tsunami = FACT(statut = 'f', +# ------------------------------------ +# ------------------------------------------------------- + Option_For_Tsunami_Generation = SIMP( statut='o',typ='I', defaut=0 , +# ------------------------------------------------------- + fr = '', + ang= '',), + +# ------------------------------------------------------- + Physical_Characteristics_Of_The_Tsunami = SIMP( statut='o',typ='R', +# ------------------------------------------------------- + min=10,max=10, + defaut=(100.0, 210000.0, 75000.0, 13.6, 81.0, 41.0, 110.0, 0.0, 0.0, 3.0) , + fr = '', + ang= '',), + ), #fin Tsunami + )# fin PHYSICAL_PARAMETERS # ----------------------------------------------------------------------- @@ -1779,7 +1711,8 @@ OUTPUT_FILES = PROC(nom = "OUTPUT_FILES",op = None, "Scalar velocity (m/s)", "Wind along X axis (m/s)", "Wind along Y axis (m/s)", "Air pressure (Pa)", "Friction coefficient", "Drift along X (m)", "Drift along Y (m)", "Courant number ", "Supplementary variable N ", "Supplementary variable O ", "Supplementary variable R ", "Supplementary variable Z ", "Maximum elevation", - "Time of maximum elevation ", "Maximum velocity", "Time of maximum velocity", "Friction velocity "],), + "Time of maximum elevation ", "Maximum velocity", "Time of maximum velocity", "Friction velocity "], + homo="SansOrdreNiDoublon"), # ------------------------------------ Graphic_Printout_Period = SIMP(statut = 'o', typ = 'I',defaut = 1, @@ -1798,7 +1731,7 @@ OUTPUT_FILES = PROC(nom = "OUTPUT_FILES",op = None, # ------------------------------------ Results_File = SIMP( statut = 'o', # ------------------------------------ - typ = ('Fichier', 'Steering Files (*.cas);;All Files (*)',), + typ = ('Fichier', 'All Files (*)',), fr = 'Nom du fichier dans lequel sont ecrits les resultats du calcul avec la periodicite donnee PERIODE POUR LES SORTIES GRAPHIQUES.', ang = 'Name of the file into which the computation results shall be written, the periodicity being given by GRAPHIC PRINTOUT PERIOD.',), @@ -1852,6 +1785,16 @@ Les resultats a placer dans ce fichier seront a ecrire sur le canal 29.', The results to be entered into this file shall be written on channel 29.',), +# ------------------------------------ + Binary_Results_File = SIMP( statut = 'f', +# ------------------------------------ + typ = ('Fichier', ';;All Files (*)',), + fr = "Fichier de resultats code en binaire mis a la disposition de l'utilisateur.\n\ +Les resultats a placer dans ce fichier seront a ecrire sur le canal 28.", + ang = "Additional binary-coded result file made available to the user. \n\ +The results to be entered into this file shall be written on channel 28.",), + + # ------------------------------------ Output_Of_Initial_Conditions = SIMP(typ = bool, statut = 'o', # ------------------------------------ @@ -1890,16 +1833,6 @@ This procedures computes the following at each time step: the domain inflows and the relative error in the mass for that time step. The relative error in the mass over the whole computation can be found at the end of the listing.', ), - -# ------------------------------------ - Binary_Results_File = SIMP( statut = 'f', -# ------------------------------------ - typ = ('Fichier', ';;All Files (*)',), - fr = "Fichier de resultats code en binaire mis a la disposition de l'utilisateur.\n\ -Les resultats a placer dans ce fichier seront a ecrire sur le canal 28.", - ang = "Additional binary-coded result file made available to the user. \n\ -The results to be entered into this file shall be written on channel 28.",), - # ------------------------------------ Controls = FACT( statut='f', # ------------------------------------ @@ -1940,7 +1873,7 @@ The results to be entered into this file shall be written on channel 28.",), # ------------------------------------ Fourier_Analysis_Periods = SIMP( statut='o', # ------------------------------------ - typ = Tuple(2), validators = VerifTypeTuple(('R','R')), + max='**', typ = 'R', fr = 'Liste des periodes que lon veut analyser', ang= 'List of periods to be analysed',), @@ -2065,6 +1998,10 @@ Ces seuils doivent etre decrits comme des frontieres du domaine de calcul', # ----------------------------------------------------------------------- GENERAL_PARAMETERS = PROC(nom = "GENERAL_PARAMETERS",op = None, # ----------------------------------------------------------------------- + UIinfo = { "groupes" : ( "CACHE", )}, +# ------------------------------------ + Location = FACT(statut = 'o', +# ------------------------------------ # ------------------------------------ Origin_Coordinates = SIMP( statut='o', # ------------------------------------ @@ -2105,6 +2042,129 @@ is in particular used to compute the Coriolis force. In cartesian coordinates, C defaut = "Cartesian, not georeferenced",), ), # fin b_Spher_faux + ), # Fin de Location +# ------------------------------------ + Time = FACT(statut = 'o', +# ------------------------------------ + regles = (AU_MOINS_UN('Number_Of_Time_Steps','Duration'), + EXCLUS('Number_Of_Time_Steps','Duration'), + ), + +# ----------------------------------------------------------------------- + Consigne = SIMP(statut = "o",homo = 'information',typ = "TXM", +# ----------------------------------------------------------------------- + defaut = "Choose between Keywords 'Number_Of_Time_Steps' or 'Duration'"), + +# ------------------------------------ + Time_Step = SIMP(statut = 'o', +# ------------------------------------ + typ = 'R', defaut = 1, + 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.'), + +# ------------------------------------ + 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.'), + +# ------------------------------------ + Duration = SIMP(statut = 'f',typ = 'R', +# ------------------------------------ + fr = 'duree de la simulation. alternative au parametre nombre de pas de temps. \n\ +On en deduit le nombre de pas de temps en prenant l''entier le plus proche de (duree du calcul/pas de temps).\n\ +Si le nombre de pas de temps est aussi donne, on prend la plus grande valeur', + ang = 'duration of simulation. May be used instead of the parameter NUMBER OF TIME STEPS. \n\ +The nearest integer to (duration/time step) is taken. If NUMBER OF TIME STEPS is also given, the greater value is taken',), + +# PNPN +# Attention, on laisse la règle mais il est possible d avoir les 2 en entrées --> attention au convert +# ------------------------------------ + Variable_Time_Step = SIMP(statut = 'o',typ = bool, defaut=False, +# ------------------------------------ + fr = 'Pas de temps variable pour avoir un nombre de courant souhaite', + ang = 'Variable time-step to get a given Courant number'), + +# ------------------------------------ + b_var_time = BLOC(condition = "Variable_Time_Step == True" , +# ------------------------------------ +# ------------------------------------ + Desired_Courant_Number = SIMP(statut = 'o',typ = 'R', +# ------------------------------------ + fr = 'Nombre de Courant souhaite ', + ang = 'Desired Courant number',), + ), + +# ------------------------------------ + 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 = 'o', +# ------------------------------------ + 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 = 'o', +# ------------------------------------ + typ = bool,defaut = False), + +# ------------------------------------ + b_stop = BLOC(condition = "Stop_If_A_Steady_State_Is_Reached == True" , +# ------------------------------------ +# ------------------------------------ + Stop_Criteria = SIMP(statut = 'o',typ = Tuple(3),validators = VerifTypeTuple(('R','R','R')), +# ------------------------------------ + fr = "Criteres d'arret pour un ecoulement permanent. ces coefficients sont respectivement appliques a\n\ + 1- U et V 2- H 3- T ", + ang = 'Stop criteria for a steady state These coefficients are applied respectively to\n\ + 1- U and V 2- H 3- T ',), + ), # fin b_stop + +# ------------------------------------ + Control_Of_Limits = SIMP(statut = 'o', +# ------------------------------------ + typ = bool, defaut = False, + fr = 'Le programme s''arrete si les limites sur u,v,h ou t sont depassees', + ang = 'The program is stopped if the limits on u,v,h, or t are trespassed',), + +# ------------------------------------ + b_limit = BLOC(condition = "Control_Of_Limit == True" , + Limit_Values = FACT(statut = 'o', +# Attention : 1 seul MC ds Telemac +# ------------------------------------ + fr = 'valeurs mini et maxi acceptables min puis max', + ang = 'min and max acceptable values ', + +# ------------------------------------ + Limit_Values_H = SIMP(statut = 'o',typ = Tuple(2), +# ------------------------------------ + validators = VerifTypeTuple(('R','R')), defaut = (-1000,9000)), +# ------------------------------------ + Limit_Values_U = SIMP(statut = 'o',typ = Tuple(2), +# ------------------------------------ + validators = VerifTypeTuple(('R','R')), defaut = (-1000,1000)), +# ------------------------------------ + Limit_Values_V = SIMP(statut = 'o',typ = Tuple(2), +# ------------------------------------ + validators = VerifTypeTuple(('R','R')), defaut = (-1000,1000)), +# ------------------------------------ + Limit_Values_T = SIMP(statut = 'o',typ = Tuple(2), +# ------------------------------------ + validators = VerifTypeTuple(('R','R')), defaut = (-1000,1000)), + ),), # fin Fact et b_limit + ), # Fin de Time + # Attention il faut recalculer en sortie : il faut 0 ou 1 et non un boolean # ------------------------------------ Debugger = SIMP(typ = bool , statut = 'o', @@ -2225,41 +2285,11 @@ Not recommended for use.',), ), )# fin TURBULENCE -# ----------------------------------------------------------------------- -SECONDARY_CURRENTS_SETTINGS = PROC(nom = "SECONDARY_CURRENTS_SETTINGS",op = None, -# ----------------------------------------------------------------------- - -# ----------------------------------------------------------------------- - Secondary_Currents = SIMP( statut='o',typ=bool, -# ----------------------------------------------------------------------- - defaut=False , - fr = 'Pour prendre en compte les courants secondaires', - ang= 'Using the parametrisation for secondary currents', - ), - -# ----------------------------------------------------------------------- - b_currents_exists = BLOC(condition = "Secondary_Currents == True", -# ----------------------------------------------------------------------- -# ----------------------------------------------------------------------- - Production_Coefficient_For_Secondary_Currents = SIMP( statut='o',typ='R', -# ----------------------------------------------------------------------- - defaut=7.071 , - fr = 'Une constante dans les termes de creation de Omega', - ang= 'A constant in the production terms of Omega',), - -# ----------------------------------------------------------------------- - Dissipation_Coefficient_For_Secondary_Currents = SIMP( statut='o',typ='R', -# ----------------------------------------------------------------------- - defaut=0.5 , - fr = 'Coefficient de dissipation de Omega', - ang= 'Coefficient of dissipation term of Omega',), - ), # fin b_currents_exists -)# Fin SECONDARY_CURRENTS_SETTINGS # ----------------------------------------------------------------------- -PARTICULE = PROC(nom = "PARTICULE",op = None, +PARTICLE_TRANSPORT = PROC(nom = "PARTICLE_TRANSPORT",op = None, # ----------------------------------------------------------------------- # ----------------------------------------------------------------------- Number_Of_Drogues = SIMP(statut = 'o',typ = 'I',defaut = 0, @@ -2285,7 +2315,7 @@ PARTICULE = PROC(nom = "PARTICULE",op = None, ang = 'Algae type. For sphere, the algae particles will be modeled as spheres, for the other choices see Gaylord et al.(1994)',), # ----------------------------------------------------------------------- - Diametre_Of_Algae = SIMP( statut = 'o',typ = 'R', defaut = 0.1 , + Diameter_Of_Algae = SIMP( statut = 'o',typ = 'R', defaut = 0.1 , # ----------------------------------------------------------------------- fr = 'Diametre des algues en m', ang = 'Diametre of algae in m',), @@ -2487,13 +2517,15 @@ TRACERS = PROC(nom = "TRACERS",op = None, # ----------------------------------------------------------------------- Sources = FACT( statut='o', # ----------------------------------------------------------------------- +# ------------------------------------ + Consigne = SIMP(statut = "o",homo = 'information',typ = "TXM", +# ------------------------------------ + defaut = "La longueur de la liste doit etre nb de source * nb de tracers"), # ----------------------------------------------------------------------- Values_Of_The_Tracers_At_The_Sources = SIMP( statut='o',typ='R', max='**' , # ----------------------------------------------------------------------- -# en fait, c'est une liste de Tuple de 2. Il faudrait caluler la taille en fonction du Nombre de sources fr = 'Valeurs des traceurs a chacune des sources', ang= 'Values of the tracers at the sources',), - ), # fin Sources # ----------------------------------------------------------------------- Metereology = FACT( statut='o', @@ -2613,6 +2645,5 @@ TRACERS = PROC(nom = "TRACERS",op = None, )# fin TRACERS -Ordre_Des_Commandes = ( 'INITIALIZATION', 'GENERAL_PARAMETERS','INITIAL_STATE', 'BOUNDARY_CONDITIONS', 'NUMERICAL_PARAMETERS', - 'PHYSICAL_PARAMETERS', 'CONSTRUCTION_WORKS_MODELLING', 'TRACERS', 'TIDE_PARAMETERS', -'TURBULENCE', 'SECONDARY_CURRENTS_SETTINGS', 'PARTICULE', 'OUTPUT_FILES') +Ordre_Des_Commandes = ( 'INITIALIZATION', 'BOUNDARY_CONDITIONS','GENERAL_PARAMETERS', 'PHYSICAL_PARAMETERS', 'NUMERICAL_PARAMETERS', +'TURBULENCE', 'TRACERS', 'PARTICLE_TRANSPORT', 'CONSTRUCTION_WORKS_MODELLING', 'TIDE_PARAMETERS', 'OUTPUT_FILES') diff --git a/Telemac/prefs_TELEMAC.py b/Telemac/prefs_TELEMAC.py index 92636e22..fe1e1193 100644 --- a/Telemac/prefs_TELEMAC.py +++ b/Telemac/prefs_TELEMAC.py @@ -37,5 +37,8 @@ docPath=repIni # catalogues=( #('TELEMAC','default',os.path.join(repIni,'Telemac_Cata_nouveau.py'),'TELEMAC','python'), - ('TELEMAC','default',os.path.join(repIni,'Telemac_Cata.py'),'TELEMAC','python'), + ('TELEMAC','comm',os.path.join(repIni,'Telemac_Cata.py'),'TELEMAC','python'), + #('TELEMAC','cas',os.path.join(repIni,'Telemac_Cata.py'),'TELEMAC','TELEMAC'), ) +mode_nouv_commande="figee" +affiche = "ordre" diff --git a/Traducteur/calcG.py b/Traducteur/calcG.py index 87d04853..d39e8eb2 100644 --- a/Traducteur/calcG.py +++ b/Traducteur/calcG.py @@ -17,8 +17,8 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -from parseur import FactNode -from load import jdcSet +from Traducteur.parseur import FactNode +from Traducteur.load import jdcSet import logging dict_commande={} diff --git a/Traducteur/changeValeur.py b/Traducteur/changeValeur.py index 49d0be93..0bd6fd64 100644 --- a/Traducteur/changeValeur.py +++ b/Traducteur/changeValeur.py @@ -17,13 +17,13 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -from utils import lineToDict +from Traducteur.utils import lineToDict import logging -from dictErreurs import EcritErreur -from load import jdcSet -from renamemocle import decaleLignesdeNBlancs -from removemocle import removeMotCleInFact -import regles +from Traducteur.dictErreurs import EcritErreur +from Traducteur.load import jdcSet +from Traducteur.renamemocle import decaleLignesdeNBlancs +from Traducteur.removemocle import removeMotCleInFact +from Traducteur import regles #-------------------------------------------------------------------------- diff --git a/Traducteur/dictErreurs.py b/Traducteur/dictErreurs.py index 6e507902..b3b20fb7 100644 --- a/Traducteur/dictErreurs.py +++ b/Traducteur/dictErreurs.py @@ -19,7 +19,7 @@ # import logging -from load import jdcSet +from Traducteur.load import jdcSet def EcritErreur(listeGena,ligne=None) : diff --git a/Traducteur/inseremocle.py b/Traducteur/inseremocle.py index 95131814..29de1a01 100644 --- a/Traducteur/inseremocle.py +++ b/Traducteur/inseremocle.py @@ -18,11 +18,11 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # import logging -from parseur import FactNode -from load import jdcSet -from dictErreurs import EcritErreur +from Traducteur.parseur import FactNode +from Traducteur.load import jdcSet +from Traducteur.dictErreurs import EcritErreur import string -import regles +from Traducteur import regles debug=0 @@ -138,6 +138,7 @@ def insereMotCleDansFacteur(jdc,facteur,texte): ligneaCouper=ligneaCouper+1 ancien=jdc.getLine(ligneaCouper) + if trouve : break #----------------------------------- diff --git a/Traducteur/load.py b/Traducteur/load.py index 93b0ce4f..f6815a2e 100644 --- a/Traducteur/load.py +++ b/Traducteur/load.py @@ -20,8 +20,8 @@ import os import re -import parseur -from mocles import parseKeywords +from Traducteur import parseur +from Traducteur.mocles import parseKeywords import sets jdcSet=sets.Set() diff --git a/Traducteur/mocles.py b/Traducteur/mocles.py index 0356734a..809a3fe9 100644 --- a/Traducteur/mocles.py +++ b/Traducteur/mocles.py @@ -20,9 +20,9 @@ import compiler import types -from parseur import Keyword, FactNode, lastparen, lastparen2,maskStringsAndComments -from visiteur import KeywordFinder, visitor -from utils import indexToCoordinates, lineToDict, DictToLine +from Traducteur.parseur import Keyword, FactNode, lastparen, lastparen2,maskStringsAndComments +from Traducteur.visiteur import KeywordFinder, visitor +from Traducteur.utils import indexToCoordinates, lineToDict, DictToLine debug=0 diff --git a/Traducteur/movemocle.py b/Traducteur/movemocle.py index 78ca3db8..73ed8b86 100644 --- a/Traducteur/movemocle.py +++ b/Traducteur/movemocle.py @@ -19,10 +19,10 @@ # import logging -import removemocle -import inseremocle -from parseur import lastparen -from load import jdcSet +from Traducteur import removemocle +from Traducteur import inseremocle +from Traducteur.parseur import lastparen +from Traducteur.load import jdcSet debug=0 #----------------------------------------------------- diff --git a/Traducteur/removemocle.py b/Traducteur/removemocle.py index 84c09b74..07bfbb30 100644 --- a/Traducteur/removemocle.py +++ b/Traducteur/removemocle.py @@ -18,10 +18,10 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # import logging -import regles -from parseur import FactNode -from dictErreurs import EcritErreur -from load import jdcSet +from Traducteur import regles +from Traducteur.parseur import FactNode +from Traducteur.dictErreurs import EcritErreur +from Traducteur.load import jdcSet debug=0 #debug=1 @@ -212,5 +212,4 @@ def fusionne(jdc,numLigne): fusion=0 if fusion : - import load jdc.joinLineandNext(numLigne) diff --git a/Traducteur/renamemocle.py b/Traducteur/renamemocle.py index 4550f5b3..1b6294d9 100644 --- a/Traducteur/renamemocle.py +++ b/Traducteur/renamemocle.py @@ -19,10 +19,10 @@ # import logging import sys -from parseur import FactNode -from load import jdcSet -import regles -from dictErreurs import EcritErreur +from Traducteur.parseur import FactNode +from Traducteur.load import jdcSet +from Traducteur import regles +from Traducteur.dictErreurs import EcritErreur #debug=1 debug=0 diff --git a/Traducteur/traduitV10V11.py b/Traducteur/traduitV10V11.py index 8b3404ea..a7b35b0b 100755 --- a/Traducteur/traduitV10V11.py +++ b/Traducteur/traduitV10V11.py @@ -29,16 +29,16 @@ import log import optparse import sys -from load import getJDC -from mocles import parseKeywords -from removemocle import * -from renamemocle import * -from renamemocle import * -from inseremocle import * -from changeValeur import * -from movemocle import * -from dictErreurs import * -from regles import pasDeRegle +from Traducteur.load import getJDC +from Traducteur.mocles import parseKeywords +from Traducteur.removemocle import * +from Traducteur.renamemocle import * +from Traducteur.renamemocle import * +from Traducteur.inseremocle import * +from Traducteur.changeValeur import * +from Traducteur.movemocle import * +from Traducteur.dictErreurs import * +from Traducteur.regles import pasDeRegle atraiter=( "AFFE_CARA_ELEM", diff --git a/Traducteur/traduitV11V12.py b/Traducteur/traduitV11V12.py index 3eaa9b83..cdf5a304 100755 --- a/Traducteur/traduitV11V12.py +++ b/Traducteur/traduitV11V12.py @@ -29,16 +29,16 @@ import log import optparse import sys -from load import getJDC -from mocles import parseKeywords -from removemocle import * -from renamemocle import * -from renamemocle import * -from inseremocle import * -from changeValeur import * -from movemocle import * -from dictErreurs import * -from regles import pasDeRegle +from Traducteur.load import getJDC +from Traducteur.mocles import parseKeywords +from Traducteur.removemocle import * +from Traducteur.renamemocle import * +from Traducteur.renamemocle import * +from Traducteur.inseremocle import * +from Traducteur.changeValeur import * +from Traducteur.movemocle import * +from Traducteur.dictErreurs import * +from Traducteur.regles import pasDeRegle atraiter=( "AFFE_CARA_ELEM", diff --git a/Traducteur/traduitV9V10.py b/Traducteur/traduitV9V10.py index c435ccc0..69b71068 100755 --- a/Traducteur/traduitV9V10.py +++ b/Traducteur/traduitV9V10.py @@ -29,16 +29,16 @@ import log import optparse import sys -from load import getJDC -from mocles import parseKeywords -from removemocle import * -from renamemocle import * -from renamemocle import * -from inseremocle import * -from changeValeur import * -from movemocle import * -from dictErreurs import * -from regles import pasDeRegle +from Traducteur.load import getJDC +from Traducteur.mocles import parseKeywords +from Traducteur.removemocle import * +from Traducteur.renamemocle import * +from Traducteur.renamemocle import * +from Traducteur.inseremocle import * +from Traducteur.changeValeur import * +from Traducteur.movemocle import * +from Traducteur.dictErreurs import * +from Traducteur.regles import pasDeRegle atraiter=("AFFE_CARA_ELEM","AFFE_CHAR_CINE","AFFE_CHAR_MECA","AFFE_CHAR_MECA_F","AFFE_MATERIAU","AFFE_MODELE", "CALC_CHAM_ELEM","CALC_ELEM","CALC_G","CALC_META","CALC_MODAL","CALC_PRECONT","CALCUL","CALC_MISS","CALC_NO", diff --git a/UiQT4/desWidget4a6RadioButton.ui b/UiQT4/desWidget4a6RadioButton.ui index 3e881b5e..71780e85 100644 --- a/UiQT4/desWidget4a6RadioButton.ui +++ b/UiQT4/desWidget4a6RadioButton.ui @@ -35,9 +35,18 @@ 0 - + 0 + + 2 + + + 0 + + + 2 + diff --git a/UiQT4/desWidgetCB.ui b/UiQT4/desWidgetCB.ui index b2326321..b15d99e5 100644 --- a/UiQT4/desWidgetCB.ui +++ b/UiQT4/desWidgetCB.ui @@ -38,9 +38,18 @@ 0 - + 0 + + 1 + + + 0 + + + 1 + diff --git a/UiQT4/desWidgetDate.ui b/UiQT4/desWidgetDate.ui index a86038cd..8d4184d9 100644 --- a/UiQT4/desWidgetDate.ui +++ b/UiQT4/desWidgetDate.ui @@ -29,9 +29,18 @@ 0 - + 0 + + 1 + + + 0 + + + 1 + diff --git a/UiQT4/desWidgetHeure.ui b/UiQT4/desWidgetHeure.ui index 9411f4d0..7204b0b9 100644 --- a/UiQT4/desWidgetHeure.ui +++ b/UiQT4/desWidgetHeure.ui @@ -29,7 +29,16 @@ 0 - + + 0 + + + 1 + + + 0 + + 0 diff --git a/UiQT4/desWidgetPlusieursBase.ui b/UiQT4/desWidgetPlusieursBase.ui index 75af887b..bdbdfee0 100644 --- a/UiQT4/desWidgetPlusieursBase.ui +++ b/UiQT4/desWidgetPlusieursBase.ui @@ -310,8 +310,7 @@ border: 1px solid gray; ... - - ../Editeur/icons/flecheHautBleue.png../Editeur/icons/flecheHautBleue.png + @@ -348,8 +347,7 @@ border: 1px solid gray; ... - - ../Editeur/icons/flecheBasBleue.png../Editeur/icons/flecheBasBleue.png + @@ -387,7 +385,8 @@ border: 1px solid gray; - ../Editeur/icons/MoinsBleu2.png../Editeur/icons/MoinsBleu2.png + ../Editeur/icons/MoinsBleu2.png + @@ -638,8 +637,7 @@ border: 1px solid gray; ... - - ../Editeur/icons/txt2.png../Editeur/icons/txt2.png + @@ -741,7 +739,6 @@ border: 1px solid gray; RBHaut RBBas RBMoins - RBPlus RBVoisListe RBSalome RBSalomeVue diff --git a/UiQT4/desWidgetPlusieursIntoOrdonne.ui b/UiQT4/desWidgetPlusieursIntoOrdonne.ui index 3ca46d6b..a5b63dfa 100644 --- a/UiQT4/desWidgetPlusieursIntoOrdonne.ui +++ b/UiQT4/desWidgetPlusieursIntoOrdonne.ui @@ -7,7 +7,7 @@ 0 0 934 - 293 + 253 @@ -33,7 +33,7 @@ 0 - 4 + 1 0 @@ -126,38 +126,58 @@ - - - - 0 - 0 - - - - - 300 - 25 - - - - - 178 - 16777215 - - - - QFrame::NoFrame - - - <html><head/><body><p>aaa</p><p>dqsklmdqm</p></body></html> - - - false - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + 0 - + + + + + 0 + 0 + + + + + 300 + 25 + + + + + 178 + 16777215 + + + + QFrame::NoFrame + + + <html><head/><body><p>aaa</p><p>dqsklmdqm</p></body></html> + + + false + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + + 0 + 0 + + + + TextLabel + + + + @@ -187,8 +207,8 @@ 0 0 - 267 - 286 + 266 + 249 @@ -238,78 +258,94 @@ - - - 0 - + - - - - 0 - 0 - - - - background : rgb(247,247,247) - - - QFrame::Box - - - 1 - - - true - - - Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + 0 - - - - 0 - 0 - 264 - 231 - - - - - 0 - 0 - - - - - 0 + + + + + 0 + 0 + + + + background : rgb(247,247,247) + + + QFrame::Box - - 0 + + 1 - - - - Qt::Vertical + + true + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + 0 + 0 + 261 + 204 + + + + + 0 + 0 + + + + + 0 - - - 20 - 40 - + + 0 - - - - - + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + 0 + 0 + + QFrame::Box + + 0 + + + 0 + @@ -342,8 +378,9 @@ ... - - ../Editeur/icons/flecheHautBleue.png../Editeur/icons/flecheHautBleue.png + + + @@ -377,8 +414,9 @@ ... - - ../Editeur/icons/flecheBasBleue.png../Editeur/icons/flecheBasBleue.png + + + @@ -598,7 +636,6 @@ horizontalSpacer scrollArea horizontalSpacer_2 - label diff --git a/UiQT4/desWidgetRadioButton.ui b/UiQT4/desWidgetRadioButton.ui index 5958f9b3..a5581881 100644 --- a/UiQT4/desWidgetRadioButton.ui +++ b/UiQT4/desWidgetRadioButton.ui @@ -6,12 +6,12 @@ 0 0 - 894 - 60 + 851 + 62 - + 0 0 @@ -35,9 +35,18 @@ 0 - + 0 + + 1 + + + 0 + + + 1 + @@ -190,6 +199,9 @@ Qt::Horizontal + + QSizePolicy::Fixed + 2 @@ -216,6 +228,9 @@ Qt::Horizontal + + QSizePolicy::Fixed + 2 @@ -244,7 +259,7 @@ - 20 + 5 20 diff --git a/UiQT4/desWidgetSimpBase.ui b/UiQT4/desWidgetSimpBase.ui index 70ab51a4..60c7dce5 100644 --- a/UiQT4/desWidgetSimpBase.ui +++ b/UiQT4/desWidgetSimpBase.ui @@ -35,9 +35,18 @@ 0 - + 0 + + 1 + + + 0 + + + 1 + diff --git a/UiQT4/desWidgetSimpComplexe.ui b/UiQT4/desWidgetSimpComplexe.ui index a70bb161..4e9db7e6 100644 --- a/UiQT4/desWidgetSimpComplexe.ui +++ b/UiQT4/desWidgetSimpComplexe.ui @@ -41,9 +41,18 @@ border:0px; 0 - + 0 + + 1 + + + 0 + + + 1 + diff --git a/UiQT4/desWidgetSimpFichier.ui b/UiQT4/desWidgetSimpFichier.ui index f5f8997c..ead9d015 100644 --- a/UiQT4/desWidgetSimpFichier.ui +++ b/UiQT4/desWidgetSimpFichier.ui @@ -29,9 +29,18 @@ 0 - + 0 + + 1 + + + 0 + + + 1 + @@ -219,8 +228,7 @@ border:0px; ... - - ../Editeur/icons/fichier.png../Editeur/icons/fichier.png + diff --git a/UiQT4/desWidgetSimpTxt.ui b/UiQT4/desWidgetSimpTxt.ui index f08eca69..6fa4b7e9 100644 --- a/UiQT4/desWidgetSimpTxt.ui +++ b/UiQT4/desWidgetSimpTxt.ui @@ -35,9 +35,18 @@ 0 - + + 1 + + + 0 + + 0 + + 1 + diff --git a/UiQT4/desWidgetTuple2.ui b/UiQT4/desWidgetTuple2.ui index 46c5e67d..9c45154b 100644 --- a/UiQT4/desWidgetTuple2.ui +++ b/UiQT4/desWidgetTuple2.ui @@ -32,9 +32,18 @@ 0 - + 0 + + 1 + + + 0 + + + 1 + diff --git a/UiQT4/desWidgetTuple3.ui b/UiQT4/desWidgetTuple3.ui index 1507a498..a31e9b55 100644 --- a/UiQT4/desWidgetTuple3.ui +++ b/UiQT4/desWidgetTuple3.ui @@ -29,9 +29,18 @@ 0 - + + 1 + + + 0 + + 0 + + 1 + diff --git a/UiQT4/myMain.ui b/UiQT4/myMain.ui index bbe8960b..fe8fbf82 100644 --- a/UiQT4/myMain.ui +++ b/UiQT4/myMain.ui @@ -209,8 +209,7 @@ QMenuBar { - - ../Editeur/icons/new_file.png../Editeur/icons/new_file.png + &Nouveau @@ -229,8 +228,7 @@ QMenuBar { - - ../Editeur/icons/ouvrir.png../Editeur/icons/ouvrir.png + &Ouvrir @@ -241,8 +239,7 @@ QMenuBar { - - ../Editeur/icons/save.png../Editeur/icons/save.png + Enregistrer @@ -257,6 +254,9 @@ QMenuBar { + + + Enregistrer sous @@ -279,8 +279,7 @@ QMenuBar { - - ../Editeur/icons/cut.png../Editeur/icons/cut.png + Couper @@ -294,8 +293,7 @@ QMenuBar { - - ../Editeur/icons/copy.png../Editeur/icons/copy.png + Copier @@ -309,8 +307,7 @@ QMenuBar { - - ../Editeur/icons/paste.png../Editeur/icons/paste.png + Coller @@ -368,8 +365,7 @@ QMenuBar { - - ../Editeur/icons/delete.png../Editeur/icons/delete.png + Supprimer @@ -390,6 +386,9 @@ QMenuBar { + + + Rechercher