From: Christian Caremoli <> Date: Thu, 13 Nov 2008 10:19:24 +0000 (+0000) Subject: CCAR: merge de la version 1.14 dans la branche principale X-Git-Tag: LOGILAB~427 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=69ed0ccae7884aee37bbe54cb1af2983cb51492d;p=tools%2Feficas.git CCAR: merge de la version 1.14 dans la branche principale --- diff --git a/AIDE/__init__.py b/AIDE/__init__.py index 99db3d63..edcb6b4d 100644 --- a/AIDE/__init__.py +++ b/AIDE/__init__.py @@ -19,3 +19,9 @@ def go2(fichier=None,master=None): o = aide_gui.AIDE_GUI(index,master=master) o.build() return o + +def go3(fichier=None,parent=None): + if not fichier : + pathDoc=os.path.join(os.path.dirname(__file__),"fichiers") + viewer.HTMLQTViewer(parent,pathDoc) + diff --git a/AIDE/fichiers/INSTALL b/AIDE/fichiers/INSTALL deleted file mode 100644 index 493c4676..00000000 --- a/AIDE/fichiers/INSTALL +++ /dev/null @@ -1,40 +0,0 @@ - - -1- Installation standard - -Pour installer EFICAS a partir de la distribution : .tgz -faire : - tar xzvf .tgz - -ce qui a pour effet de créer un répertoire de nom . - -Pour modifier l'emplacement de la doc, le chemin d'accès à Acrobat Reader, -les catalogues, il faut modifier le fichier editeur.ini dans le répertoire Aster. - - -ATTENTION : -Si Eficas est installé dans un répertoire particulier d'administration -dans lequel les utilisateurs n'ont pas le droit d'écriture, il faut que -l'administrateur lance Eficas pour générer -les fichiers et catalogues compilés .pyc - - - -2- Utilisation d'Eficas - -Pour utiliser Eficas, aller dans le répertoire Aster et faire : - python eficas_aster.py - - - -3- Installation avec un noyau pré-installé - -Aller dans le répertoire Aster du répertoire Eficas -et modifier le fichier prefs.py comme suit : -Mettre dans la variable CODE_PATH le chemin absolu vers -le répertoire contenant les deux répertoires Noyau et Validation que vous voulez -utiliser à la place de ceux fournis dans la livraison d'Eficas - -Pour changer les catalogues, modifier le fichier editeur.ini dans le répertoire Aster - - diff --git a/AIDE/fichiers/INSTALL.txt b/AIDE/fichiers/INSTALL.txt new file mode 100644 index 00000000..493c4676 --- /dev/null +++ b/AIDE/fichiers/INSTALL.txt @@ -0,0 +1,40 @@ + + +1- Installation standard + +Pour installer EFICAS a partir de la distribution : .tgz +faire : + tar xzvf .tgz + +ce qui a pour effet de créer un répertoire de nom . + +Pour modifier l'emplacement de la doc, le chemin d'accès à Acrobat Reader, +les catalogues, il faut modifier le fichier editeur.ini dans le répertoire Aster. + + +ATTENTION : +Si Eficas est installé dans un répertoire particulier d'administration +dans lequel les utilisateurs n'ont pas le droit d'écriture, il faut que +l'administrateur lance Eficas pour générer +les fichiers et catalogues compilés .pyc + + + +2- Utilisation d'Eficas + +Pour utiliser Eficas, aller dans le répertoire Aster et faire : + python eficas_aster.py + + + +3- Installation avec un noyau pré-installé + +Aller dans le répertoire Aster du répertoire Eficas +et modifier le fichier prefs.py comme suit : +Mettre dans la variable CODE_PATH le chemin absolu vers +le répertoire contenant les deux répertoires Noyau et Validation que vous voulez +utiliser à la place de ceux fournis dans la livraison d'Eficas + +Pour changer les catalogues, modifier le fichier editeur.ini dans le répertoire Aster + + diff --git a/AIDE/fichiers/NEWS b/AIDE/fichiers/NEWS deleted file mode 100644 index d228a9b0..00000000 --- a/AIDE/fichiers/NEWS +++ /dev/null @@ -1,53 +0,0 @@ -Version 1.12 (6/2007): - Mise en synchronisation avec la version 9.1 de Code_Aster de mai 2007. - -Version 1.11 (12/2006): - Mise en synchronisation avec la version 8.4 de Code_Aster de decembre 2006. - Première version du Traducteur de V7 en V8 - -Version 1.10 (6/2006): - Mise en synchronisation avec la version 8.3 de Code_Aster de juin 2006. - -Version 1.9 (12/2005): - Mise en synchronisation avec la version 8.2 de Code_Aster de decembre 2005. - -Version 1.8 (6/2005): - Mise en synchronisation avec la version 8.1 de Code_Aster de mai 2005. - Les includes et poursuites peuvent etre édités. Introduction de la notation - scientifique pour les flottants. - -Version 1.7 : (12/2004) - Mise en synchronisation avec la version STA7 de Code_Aster (7.4). - Les formules changent et deviennent des formules au sens python. - Disparition des PARAMETRE-EVAL - Les touches raccourcis (CtrlC par exple) sont activées et paramétrables dans prefs.py. - -Version 1.6 : (05/2004) - Mise en synchronisation avec la version STA7 de Code_Aster (7.2.26) - Evolution de la saisie des valeurs pour definir une fonction (EO2003-241) : - - Saisie des valeurs sous forme de tuple. - - Si une valeur est selectionnée, l'insertion se fera après cette valeur - et non en fin de liste - -Version 1.5 (10/2003): - Mise en synchronisation avec la version STA7 de Code_Aster d'octobre 2003 (7.2) - Introduction des validateurs de mots cles simples - -Version 1.4 (5/2003): - Mise en synchronisation avec la version STA7 de Code_Aster de mai 2003 (7.1) - Possibilité de donner un nom de fichier en argument lors de l'ouverture d'EFICAS (EO2003-060) - Correction d'une anomalie dans la fonctionnalité de commentarisation des commandes (AO2003-041) - Ajout du bouton de documentation dans le panneau FORMULE (AO2002-447) - Selection automatique du concept quand il n'en existe qu'un (EO2002-162) - -Version 1.3 (11/2002): - Mise en synchronisation avec la version STA6 de Code_Aster de septembre 2002 - Ajout de la possibilité de visualiser les INCLUDE, INCLUDE_MATERIAU et POURSUITE (popup - sur click droit de la souris sur l'icone de la commande) - Possibilité d'afficher la liste des commandes par groupe (menu option->affichage commandes) - Reprise profonde du mécanisme de gestion des fichiers inclus (voir menus d'AIDE pour plus de détails) - Corrections diverses - -Version 1.2 (5/2002): - Reconception de la version 1.1 : décomposition en packages Python - Mise en synchronisation avec la version STA6 de Code_Aster de fevrier 2002 diff --git a/AIDE/fichiers/NEWS.txt b/AIDE/fichiers/NEWS.txt new file mode 100644 index 00000000..d228a9b0 --- /dev/null +++ b/AIDE/fichiers/NEWS.txt @@ -0,0 +1,53 @@ +Version 1.12 (6/2007): + Mise en synchronisation avec la version 9.1 de Code_Aster de mai 2007. + +Version 1.11 (12/2006): + Mise en synchronisation avec la version 8.4 de Code_Aster de decembre 2006. + Première version du Traducteur de V7 en V8 + +Version 1.10 (6/2006): + Mise en synchronisation avec la version 8.3 de Code_Aster de juin 2006. + +Version 1.9 (12/2005): + Mise en synchronisation avec la version 8.2 de Code_Aster de decembre 2005. + +Version 1.8 (6/2005): + Mise en synchronisation avec la version 8.1 de Code_Aster de mai 2005. + Les includes et poursuites peuvent etre édités. Introduction de la notation + scientifique pour les flottants. + +Version 1.7 : (12/2004) + Mise en synchronisation avec la version STA7 de Code_Aster (7.4). + Les formules changent et deviennent des formules au sens python. + Disparition des PARAMETRE-EVAL + Les touches raccourcis (CtrlC par exple) sont activées et paramétrables dans prefs.py. + +Version 1.6 : (05/2004) + Mise en synchronisation avec la version STA7 de Code_Aster (7.2.26) + Evolution de la saisie des valeurs pour definir une fonction (EO2003-241) : + - Saisie des valeurs sous forme de tuple. + - Si une valeur est selectionnée, l'insertion se fera après cette valeur + et non en fin de liste + +Version 1.5 (10/2003): + Mise en synchronisation avec la version STA7 de Code_Aster d'octobre 2003 (7.2) + Introduction des validateurs de mots cles simples + +Version 1.4 (5/2003): + Mise en synchronisation avec la version STA7 de Code_Aster de mai 2003 (7.1) + Possibilité de donner un nom de fichier en argument lors de l'ouverture d'EFICAS (EO2003-060) + Correction d'une anomalie dans la fonctionnalité de commentarisation des commandes (AO2003-041) + Ajout du bouton de documentation dans le panneau FORMULE (AO2002-447) + Selection automatique du concept quand il n'en existe qu'un (EO2002-162) + +Version 1.3 (11/2002): + Mise en synchronisation avec la version STA6 de Code_Aster de septembre 2002 + Ajout de la possibilité de visualiser les INCLUDE, INCLUDE_MATERIAU et POURSUITE (popup + sur click droit de la souris sur l'icone de la commande) + Possibilité d'afficher la liste des commandes par groupe (menu option->affichage commandes) + Reprise profonde du mécanisme de gestion des fichiers inclus (voir menus d'AIDE pour plus de détails) + Corrections diverses + +Version 1.2 (5/2002): + Reconception de la version 1.1 : décomposition en packages Python + Mise en synchronisation avec la version STA6 de Code_Aster de fevrier 2002 diff --git a/AIDE/fichiers/index.html b/AIDE/fichiers/index.html index b61b73ec..a9076e83 100644 --- a/AIDE/fichiers/index.html +++ b/AIDE/fichiers/index.html @@ -10,8 +10,8 @@

EFICAS


-

Installation -

Evolution des versions +

Installation +

Evolution des versions

FAQ

Macros INCLUDE, INCLUDE_MATERIAU et POURSUITE diff --git a/AIDE/viewer.py b/AIDE/viewer.py index b383e3d7..a9ef3aad 100644 --- a/AIDE/viewer.py +++ b/AIDE/viewer.py @@ -4,6 +4,12 @@ import Tkinter import ScrolledText import formatter import htmllib +try : + from aideQT import Aide + from qt import * +except : + class Aide: + pass class TkWriter(formatter.DumbWriter): def __init__(self, text,viewer): @@ -208,6 +214,25 @@ class HTMLViewer: except: pass + +class HTMLQTViewer(Aide): + def __init__(self,parent,pathDoc): + Aide.__init__(self,parent=parent,fl=Qt.WType_Dialog) + self.pathDoc=pathDoc + self.parent=parent + self.url=None + self.home=None + self.historique=Historique() + self.TB1init() + self.TB1.setSource("index.html") + self.show() + + def TB1init(self): + self.TB1.mimeSourceFactory().addFilePath(QString(self.pathDoc)); + + def PBIndexPushed(self): + self.TB1.setSource("index.html") + if __name__ == "__main__": v=HTMLViewer(None) v.display("fichiers/index.html") diff --git a/Accas/A_ASSD.py b/Accas/A_ASSD.py index 2791dd94..9182b069 100644 --- a/Accas/A_ASSD.py +++ b/Accas/A_ASSD.py @@ -49,6 +49,8 @@ class formule(I_FONCTION.formule,N_FONCTION.formule,ASSD): N_FONCTION.formule.__init__(self,etape=etape,sd=sd,reg=reg) I_FONCTION.formule.__init__(self,etape=etape,sd=sd,reg=reg) +class formule_c(formule):pass + # On conserve fonction (ceinture et bretelles) # fonction n'existe plus dans N_FONCTION on le remplace par formule class fonction(N_FONCTION.formule,I_FONCTION.fonction,ASSD): diff --git a/Accas/__init__.py b/Accas/__init__.py index 8ba10bf6..2241fee1 100644 --- a/Accas/__init__.py +++ b/Accas/__init__.py @@ -71,6 +71,7 @@ from A_ASSD import GEOM,geom # Pour le moment on laisse fonction (ceinture et bretelles) from A_ASSD import FONCTION, fonction from A_ASSD import formule +from A_ASSD import formule_c from A_ASSD import CO from Noyau.N__F import _F diff --git a/Aster/Cata/Utilitai/Graph.py b/Aster/Cata/Utilitai/Graph.py index 6cc8ab3d..4fd4c66a 100644 --- a/Aster/Cata/Utilitai/Graph.py +++ b/Aster/Cata/Utilitai/Graph.py @@ -1,4 +1,4 @@ -#@ MODIF Graph Utilitai DATE 02/05/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF Graph Utilitai DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -38,12 +38,7 @@ except ImportError: def repout(self): return '/opt/aster/outils' aster=fake_aster() -try: - from Utilitai.Utmess import UTMESS -except ImportError: - def UTMESS(code,sprg,texte): - fmt='\n <%s> <%s> %s\n\n' - print fmt % (code,sprg,texte) +from Macro.externe_mess import UTMESS if not sys.modules.has_key('Table'): try: diff --git a/Aster/Cata/Utilitai/Table.py b/Aster/Cata/Utilitai/Table.py index 9ad24144..a623a922 100644 --- a/Aster/Cata/Utilitai/Table.py +++ b/Aster/Cata/Utilitai/Table.py @@ -1,4 +1,4 @@ -#@ MODIF Table Utilitai DATE 06/11/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF Table Utilitai DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -31,17 +31,7 @@ EnumTypes = (ListType, TupleType) NumberTypes = (IntType, LongType, FloatType, ComplexType) import transpose - -# try/except pour utiliser hors aster -try: - from Utilitai.Utmess import UTMESS -except ImportError: - def UTMESS(code,sprg,texte): - fmt = '\n <%s> <%s> %s\n\n' - if code == 'F': - raise StandardError, fmt % (code,sprg,texte) - else: - print fmt % (code,sprg,texte) +from Macro.externe_mess import UTMESS if not sys.modules.has_key('Graph'): try: @@ -685,38 +675,51 @@ class Colonne(TableBase): # ------------------------------------------------------------------------------ def __le__(self, VALE): - return self._extract(lambda v: v<>None and v<=VALE) + if type(VALE) in EnumTypes : + crit = max(VALE) + else: + crit = VALE + return self._extract(lambda v: v<>None and v<=crit) # ------------------------------------------------------------------------------ def __lt__(self, VALE): - return self._extract(lambda v: v<>None and vNone and vNone and v>=VALE) + if type(VALE) in EnumTypes : + crit = min(VALE) + else: + crit = VALE + return self._extract(lambda v: v<>None and v>=crit) # ------------------------------------------------------------------------------ def __gt__(self, VALE): - return self._extract(lambda v: v<>None and v>VALE) + if type(VALE) in EnumTypes : + crit = min(VALE) + else: + crit = VALE + return self._extract(lambda v: v<>None and v>crit) # ------------------------------------------------------------------------------ def __eq__(self, VALE, CRITERE='RELATIF', PRECISION=0.): - if type(VALE) in EnumTypes : - return self._extract(lambda v: v in VALE) - if PRECISION==0. or not type(VALE) in NumberTypes: - if type(VALE) in StringTypes: - return self._extract(lambda v: v<>None and str(v).strip()==VALE.strip()) + if not type(VALE) in EnumTypes : + VALE = [VALE] + if type(VALE[0]) in StringTypes: + stripVALE = [value.strip() for value in VALE] + return self._extract(lambda v: str(v).strip() in stripVALE) + else: + if PRECISION==0. : + return self._extract(lambda v : v in VALE) + elif CRITERE=='ABSOLU': + return self._extract(lambda v : _func_test_abs(v, VALE, PRECISION)) else: - return self._extract(lambda v: v==VALE) - else: - if CRITERE=='ABSOLU': - vmin=VALE-PRECISION - vmax=VALE+PRECISION - else: - vmin=(1.-PRECISION)*VALE - vmax=(1.+PRECISION)*VALE - return self._extract(lambda v: v<>None and vminNone and str(v).strip()<>VALE.strip()) + if not type(VALE) in EnumTypes : + VALE = [VALE] + if type(VALE[0]) in StringTypes: + stripVALE = [value.strip() for value in VALE] + return self._extract(lambda v: str(v).strip() not in stripVALE) + else: + if PRECISION==0. : + return self._extract(lambda v : v not in VALE) + elif CRITERE=='ABSOLU': + return self._extract(lambda v : not (_func_test_abs(v, VALE, PRECISION))) else: - return self._extract(lambda v: v<>VALE) - else: - if CRITERE=='ABSOLU': - vmin=VALE-PRECISION - vmax=VALE+PRECISION - else: - vmin=(1.-PRECISION)*VALE - vmax=(1.+PRECISION)*VALE - return self._extract(lambda v: v<>None and (v=1. : + for l_val in tab_val : + vale_y.append(l_val[-1]) + else : + indice=int((len(tab_val[0])-1)*fract) + reste =(len(tab_val[0])-1)*fract-indice + for l_val in tab_val : + vale_y.append(l_val[indice]*(1-reste)+l_val[indice+1]*reste) + return t_fonction(vale_x, vale_y, para) diff --git a/Aster/Cata/Utilitai/veri_matr_tang.py b/Aster/Cata/Utilitai/veri_matr_tang.py new file mode 100644 index 00000000..f2e6379e --- /dev/null +++ b/Aster/Cata/Utilitai/veri_matr_tang.py @@ -0,0 +1,269 @@ +#@ MODIF veri_matr_tang Utilitai DATE 18/09/2007 AUTEUR DURAND C.DURAND +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== +from Cata.cata import * + +# =========================================================================== +# MACRO "VERI_MATR_TANG" +# ------------------------------------- +import Numeric +from Numeric import * +import cPickle,string +import LinearAlgebra as LA +import aster +class TANGENT : + + """ + VERIFICATION SUR LES MATRICES TANGENTES + + Attributs publics : + + mat : matrice tangente + ddl : nom des degres de liberte + nddl : nombre de ddl + norme : norme de la matrice tangente + prec_zero : en-dessous de prec_zero, on ne compare pas les matrices + + + Methodes publiques + + Save : sauvegarde la matrice dans un fichier + Load : lit la matrice depuis un fichier + Aster : lit la matrice depuis l'espace Aster + Matrice : range la matrice + Difference : comparaison entre la matrice tangente et une autre matrice + Symetrie : verification du caractere symetrique de la matrice tangente + + """ + + + def __init__(self,ddl='',prec_zero=1.E-12) : + + """ + ddl : chaine de caracteres designant les ddl (ex: 'UUP') + prec_zero : en-dessous de prec_zero, on ne compare pas les matrices + """ + + self.ddl = ddl + self.prec_zero = prec_zero + + + def Load(self,nom_fichier) : + + fichier = file(nom_fichier,'r') + self.__dict__ = cPickle.load(fichier) + + + def Save(self,nom_fichier) : + + fichier = file(nom_fichier,'w') + cPickle.dump(self.__dict__,fichier) + + + def Aster(self,suffixe = 'MATA') : + + """ + nom : suffixe de l'objet jeveux + """ + + nom_obj_jeveux = string.ljust('PYTHON.TANGENT.'+suffixe,24) + obj_jeveux = aster.getvectjev(nom_obj_jeveux) + if not obj_jeveux : + raise 'TANGENT : OBJET JEVEUX DE SUFFIXE '+suffixe+' INEXISTANT' + self.Matrice(obj_jeveux) + + + def Eigen(self) : + + self.vp = sort(LA.eigenvalues(self.mat)) + + + def Matrice(self,matrice) : + + """ + matrice : la matrice tangente (rangement carre) + """ + + if type(matrice) == type((1,)) : + matrice = array(list(matrice)) + elif type(matrice) == type([]) : + matrice = array(matrice) + matrice = matrice.astype(Float) + + nddl = int(len(matrice)**0.5+0.5) + matrice.shape = (nddl,nddl) + + self.mat = matrice + self.nddl = nddl + + if not self.ddl : + self.ddl = 'D'*nddl + elif len(self.ddl) <> nddl : + raise 'Nommage des DDL incoherents avec la taille de la matrice' + + self.norme = trace(dot(transpose(self.mat),self.mat)) + + + def Difference(self,matp,affi_ok=0,prec_diff = 1.E-4) : + + """ + COMPARAISON RELATIVE DE LA MATRICE TANGENTE AVEC UNE AUTRE MATRICE + + matp : matrice avec laquelle self.mat est comparee + affi_ok : si oui, on affiche egalement les valeurs qui collent bien + prec_diff : ecart au-dessus duquel on considere que ce n'est pas OK + """ + + if type(matp) == type((1,)) : + matp = array(list(matp)) + elif type(matp) == type([]) : + matp = array(matp) + elif type(matp) == type(self) : + matp = matp.mat + elif type(matp) == type(array([1])) : + pass + else : + raise '1er argument doit etre une matrice (tuple,liste,TANGENT ou Numeric Array)' + matp = ravel(matp) + matp = matp.astype(Float) + + if len(matp) <> self.nddl*self.nddl : + raise 'Matrices de tailles differentes' + matp.shape = (self.nddl,self.nddl) + + refe = abs(self.mat) + abs(matp) + diff = where(refe > self.prec_zero,abs(self.mat-matp)/(refe+self.prec_zero),0) + nook = nonzero(ravel(diff) > prec_diff) + ok = nonzero(ravel(diff) <= prec_diff) + + if affi_ok : + affi = [ok,nook] + else : + affi = [nook] + + liste_i=[] + liste_j=[] + liste_matt=[] + liste_matp=[] + liste_diff=[] + for ind in affi : +# print '-'*80 + for pos in ind : + i = pos / self.nddl + j = pos % self.nddl +# print self.ddl[i],self.ddl[j],' ',(i+1,j+1),' ',self.mat[i,j],' ',matp[i,j] + liste_i.append(i+1) + liste_j.append(j+1) + liste_matt.append(self.mat[i,j]) + liste_matp.append(matp[i,j]) + liste_diff.append( abs(self.mat[i,j]-matp[i,j])/ ( abs(self.mat[i,j]) + abs(matp[i,j]) + self.prec_zero)) +# print '-'*80 + if self.norme > self.prec_zero : + ecart = (self.mat - matp)/2. + nor_ecart = trace(dot(transpose(ecart),ecart)) + nor_diff= nor_ecart / self.norme + else : + nor_diff= 0. + return liste_i,liste_j,liste_matt,liste_matp, liste_diff,nor_diff + + + def Symetrie(self,prec_diff = 1.E-4) : + + """ + VERIFICATION QUE LA MATRICE TANGENTE EST SYMETRIQUE + + On retourne la norme relative de l'ecart a la symetrie : || (A-At)/2|| / ||A|| + On affiche les termes qui s'ecartent de la symetrie + + prec_diff : ecart au-dessus duquel on considere que ce n'est pas OK + """ + + tran = transpose(self.mat) + liste_i,liste_j,liste_matt,liste_matp,liste_diff,nor_diff=self.Difference(tran,affi_ok=0,prec_diff=prec_diff) + + +# if self.norme > self.prec_zero : +# ecart = (self.mat - tran)/2. +# nor_ecart = trace(dot(transpose(ecart),ecart)) +# return nor_ecart / self.norme +# else : +# return 0. + return liste_i,liste_j,liste_matt,liste_matp, liste_diff,nor_diff + + def Sauve(self,nom_fichier) : + cPickler.dump(self.__dict__) + +def veri_matr_tang_ops(self,SYMETRIE,DIFFERENCE,PRECISION,**args): + + """ + Ecriture de la macro verif_matrice_tangente_ops + """ + import os + from Accas import _F + from Noyau.N_utils import AsType + from Utilitai.Utmess import UTMESS + from Utilitai.UniteAster import UniteAster + + # On importe les definitions des commandes a utiliser dans la macro + CREA_TABLE = self.get_cmd('CREA_TABLE') + + # La macro compte pour 1 dans la numerotation des commandes + self.set_icmd(1) + # Le concept sortant (de type fonction) est nomme ROTGD dans + # le contexte de la macro + + self.DeclareOut('TAB_MAT',self.sd) + ier=0 + # La macro compte pour 1 dans la numerotation des commandes + self.set_icmd(1) + tgt=TANGENT() + tgt.Aster(suffixe='MATA') + matp=TANGENT() + matp.Aster(suffixe='MATC') + prec_diff = PRECISION + if (SYMETRIE=='OUI') : + list1_i,list1_j,list1_matt,list1_matp,list1_diff,symetgt=tgt.Symetrie(prec_diff) + list2_i,list2_j,list2_matt,list2_matp,list2_diff,symeper=matp.Symetrie(prec_diff) + print 'Symetrie de la matrice tangente',symetgt + print 'Symetrie de la matrice pr pertubation',symeper + aster.affiche('MESSAGE',str(tgt.Difference(matp,prec_diff) )) + if (DIFFERENCE=='OUI'): + liste_i,liste_j,liste_matt,liste_matp,liste_diff,nor_diff=tgt.Difference(matp,prec_diff) + print 'différence entre matrice tangente et matrice par pertubation',nor_diff + TAB_MAT=CREA_TABLE(LISTE=( + _F(PARA ='I',LISTE_I = liste_i), + _F(PARA ='J',LISTE_I = liste_j), + _F(PARA ='MAT_TGTE',LISTE_R = liste_matt), + _F(PARA ='MAT_PERT',LISTE_R = liste_matp), + _F(PARA ='MAT_DIFF',LISTE_R = liste_diff), + )) + return + + +VERI_MATR_TANG=MACRO(nom="VERI_MATR_TANG",op=veri_matr_tang_ops,sd_prod=table_sdaster, + docu="",reentrant='n', +fr="verification de la matrice tangente : symétrie et différence par rapport a la matrice calculée par perturbation", + regles=(AU_MOINS_UN('SYMETRIE','DIFFERENCE')), + SYMETRIE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ), + DIFFERENCE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), + PRECISION =SIMP(statut='f',typ='R',defaut=1.E-4 ), +) ; + + + diff --git a/Aster/Cata/__init__.py b/Aster/Cata/__init__.py index 16f05454..fda01819 100644 --- a/Aster/Cata/__init__.py +++ b/Aster/Cata/__init__.py @@ -1,4 +1,4 @@ -#@ MODIF __init__ Cata DATE 20/09/2004 AUTEUR DURAND C.DURAND +#@ MODIF __init__ Cata DATE 20/09/2004 AUTEUR DURAND C.DURAND # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== diff --git a/Aster/Cata/cataSTA8/Macro/calc_fonction_ops.py b/Aster/Cata/cataSTA8/Macro/calc_fonction_ops.py index a541180f..ec198736 100644 --- a/Aster/Cata/cataSTA8/Macro/calc_fonction_ops.py +++ b/Aster/Cata/cataSTA8/Macro/calc_fonction_ops.py @@ -1,4 +1,4 @@ -#@ MODIF calc_fonction_ops Macro DATE 02/05/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF calc_fonction_ops Macro DATE 03/10/2007 AUTEUR SALMONA L.SALMONA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -18,316 +18,393 @@ # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +import copy +import traceback +from math import pi + +# ----------------------------------------------------------------------------- def tocomplex(arg): if arg[0]=='RI' : return complex(arg[1],arg[2]) if arg[0]=='MP' : return complex(arg[1]*cos(arg[2]),arg[1]*sin(arg[2])) + +# ----------------------------------------------------------------------------- def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP, SPEC_OSCI,ABS,COMB,COMB_C,COMPOSE,EXTRACTION, ENVELOPPE,ASSE,CORR_ACCE,PUISSANCE,INVERSE, NOM_PARA,NOM_RESU,INTERPOL,PROL_DROITE, PROL_GAUCHE,NOM_PARA_FONC,INTERPOL_FONC,PROL_DROITE_FONC, PROL_GAUCHE_FONC,INFO,**args): - """ - Ecriture de la macro CALC_FONCTION - """ - ier=0 - import types - import string - import copy - from math import pi - from Utilitai.t_fonction import t_fonction,t_fonction_c,t_nappe - from Utilitai import liss_enveloppe - from Accas import _F - from Cata.cata import nappe_sdaster,fonction_sdaster,fonction_c - from Utilitai.Utmess import UTMESS - from Numeric import alltrue,less,array,reshape,cos,sin,exp,sqrt - from Numeric import choose,zeros,Float - import aster_fonctions - EnumType = (types.ListType,types.TupleType) - - ### On importe les definitions des commandes a utiliser dans la macro - DEFI_FONCTION = self.get_cmd('DEFI_FONCTION') - IMPR_FONCTION = self.get_cmd('IMPR_FONCTION') - DEFI_NAPPE = self.get_cmd('DEFI_NAPPE') - - ### Comptage commandes + déclaration concept sortant - self.set_icmd(1) - self.DeclareOut('C_out',self.sd) - - ### type de traitement - ### - if (INTEGRE != None): - __ff=INTEGRE['FONCTION'].convert() - if INTEGRE['METHODE']=='TRAPEZE' : __ex=__ff.trapeze(INTEGRE['COEF']) - if INTEGRE['METHODE']=='SIMPSON' : __ex=__ff.simpson(INTEGRE['COEF']) - ### - if (DERIVE != None): - __ff=DERIVE['FONCTION'].convert() - __ex=__ff.derive() - ### - if (INVERSE != None): - __ff=INVERSE['FONCTION'].convert() - __ex=__ff.inverse() - ### - if (ABS != None): - __ff=ABS['FONCTION'].convert() - __ex=__ff.abs() - ### - if (COMPOSE != None): - __ff=COMPOSE['FONC_RESU'].convert() - __fg=COMPOSE['FONC_PARA'].convert() - __ex=__ff[__fg] - ### - if (ASSE != None): - __f0=ASSE['FONCTION'][0].convert() - __f1=ASSE['FONCTION'][1].convert() - __ex=__f0.cat(__f1,ASSE['SURCHARGE']) - ### - if (COMB != None): - list_fonc=[] - if isinstance(self.sd,nappe_sdaster): - for mcfact in COMB : - list_fonc.append(mcfact['FONCTION'].convert()) - list_fonch=[] - for f in list_fonc : - __ex=f - for g in list_fonc : - __ex=__ex.homo_support(g) - list_fonch.append(__ex) - list_fonc=list_fonch - elif isinstance(self.sd,fonction_sdaster): - for mcfact in COMB : - __ex=mcfact['FONCTION'].convert() - list_fonc.append(__ex) - - __ex=list_fonc[0] - __ex=__ex*COMB[0]['COEF'] - i=1 - for item in list_fonc[1:] : - item=item*COMB[i]['COEF'] - __ex=__ex+item - i=i+1 - ### - if (COMB_C != None): - list_fonc=[] - if isinstance(self.sd,nappe_sdaster): - for mcfact in COMB_C : - list_fonc.append(mcfact['FONCTION'].convert()) - list_fonch=[] - for f in list_fonc : - __ex=f - for g in list_fonc : - __ex=__ex.homo_support(g) - list_fonch.appen(__ex) - list_fonc=list_fonch - elif isinstance(self.sd,fonction_sdaster) or isinstance(self.sd,fonction_c): - for mcfact in COMB_C : - __ex=mcfact['FONCTION'].convert(arg='complex') - list_fonc.append(__ex) - - __ex=list_fonc[0] - if COMB_C[0]['COEF_R']!=None: __ex=__ex*complex(COMB_C[0]['COEF_R']) - if COMB_C[0]['COEF_C']!=None: - if type(COMB_C[0]['COEF_C']) in EnumType : __ex=__ex*tocomplex(COMB_C[0]['COEF_C']) - else : __ex=__ex*COMB_C[0]['COEF_C'] - i=1 - for item in list_fonc[1:] : - if COMB_C[i]['COEF_R']!=None: coef=complex(COMB_C[i]['COEF_R']) - if COMB_C[i]['COEF_C']!=None: - if type(COMB_C[i]['COEF_C']) in EnumType : coef=tocomplex(COMB_C[i]['COEF_C']) - else : coef=COMB_C[i]['COEF_C'] - item=item*coef - __ex=__ex+item - i=i+1 - ### mot clé LIST_PARA uniquement présent si COMB ou COMB_C - if (COMB != None) or (COMB_C != None) : - if (args['LIST_PARA'] != None) : - __ex=__ex.evalfonc(args['LIST_PARA'].Valeurs()) - ### - if (PUISSANCE != None): - __ff=PUISSANCE['FONCTION'].convert() - __ex=__ff - for i in range(PUISSANCE['EXPOSANT']-1) : __ex=__ex*__ff - ### - if (EXTRACTION != None): - if EXTRACTION['PARTIE']=='REEL' : __ex=EXTRACTION['FONCTION'].convert(arg='real') - if EXTRACTION['PARTIE']=='IMAG' : __ex=EXTRACTION['FONCTION'].convert(arg='imag') - if EXTRACTION['PARTIE']=='MODULE' : __ex=EXTRACTION['FONCTION'].convert(arg='modul') - if EXTRACTION['PARTIE']=='PHASE' : __ex=EXTRACTION['FONCTION'].convert(arg='phase') - ### - if (ENVELOPPE != None): - list_fonc=[] - l_env=ENVELOPPE['FONCTION'] - if type(l_env) not in EnumType : l_env=(l_env,) - if isinstance(self.sd,nappe_sdaster): - for f in l_env : list_fonc.append(f.convert()) - list_fonch=[] - for f in list_fonc : - __ff=f - for g in list_fonc : - __ff=__ff.homo_support(g) - list_fonch.append(__ff) - list_fonc=list_fonch - vale_para=list_fonc[0].vale_para - para =list_fonc[0].para - l_fonc_f =[] - for i in range(len(vale_para)): - __ff=list_fonc[0].l_fonc[i] - if ENVELOPPE['CRITERE']=='SUP' : - for f in list_fonc[1:] : __ff=__ff.sup(f.l_fonc[i]) - if ENVELOPPE['CRITERE']=='INF' : - for f in list_fonc[1:] : __ff=__ff.inf(f.l_fonc[i]) - l_fonc_f.append(__ff) - __ex=t_nappe(vale_para,l_fonc_f,para) - elif isinstance(self.sd,fonction_sdaster): - for f in l_env : list_fonc.append(f.convert()) - __ex=list_fonc[0] - if ENVELOPPE['CRITERE']=='SUP' : - for f in list_fonc[1:] : __ex=__ex.sup(f) - if ENVELOPPE['CRITERE']=='INF' : - for f in list_fonc[1:] : __ex=__ex.inf(f) - ### - if (CORR_ACCE != None): - __ex=CORR_ACCE['FONCTION'].convert() - para=copy.copy(__ex.para) - # suppression de la tendance de l accelero - __ex=__ex.suppr_tend() - # calcul de la vitesse - __ex=__ex.trapeze(0.) - # calcul de la tendance de la vitesse : y = a1*x +a0 - __ex=__ex.suppr_tend() - if CORR_ACCE['CORR_DEPL']=='OUI': - # suppression de la tendance deplacement - # calcul du deplacement : integration - __ex=__ex.trapeze(0.) - # calcul de la tendance du déplacement : y = a1*x +a0 - __ex=__ex.suppr_tend() - # regeneration de la vitesse : derivation - __ex=__ex.derive() - # regeneration de l accelero : derivation - __ex=__ex.derive() - __ex.para=para - ### - if (FFT != None): - if isinstance(self.sd,fonction_c): - __ff=FFT['FONCTION'].convert() - __ex=__ff.fft(FFT['METHODE']) - if isinstance(self.sd,fonction_sdaster): - __ff=FFT['FONCTION'].convert(arg='complex') - __ex=__ff.fft(FFT['METHODE'],FFT['SYME']) - ### - if (SPEC_OSCI != None): - if SPEC_OSCI['AMOR_REDUIT']==None : - l_amor=[0.02,0.05,0.1] - UTMESS('I','CALC_FONCTION',' : génération par défaut de 3 amortissements :'+str(l_amor)) - else : - if type(SPEC_OSCI['AMOR_REDUIT']) not in EnumType : + """ + Ecriture de la macro CALC_FONCTION + """ + ier=0 + from Utilitai.t_fonction import t_fonction, t_fonction_c, t_nappe, homo_support_nappe, \ + FonctionError, ParametreError, InterpolationError, ProlongementError + from Utilitai import liss_enveloppe + from Accas import _F + from Cata.cata import nappe_sdaster,fonction_sdaster,fonction_c + from Utilitai.Utmess import UTMESS + from Numeric import alltrue,less,array,reshape,cos,sin,exp,sqrt + from Numeric import choose,zeros,Float + import aster_fonctions + EnumTypes = (list, tuple) + + ### On importe les definitions des commandes a utiliser dans la macro + DEFI_FONCTION = self.get_cmd('DEFI_FONCTION') + IMPR_FONCTION = self.get_cmd('IMPR_FONCTION') + DEFI_NAPPE = self.get_cmd('DEFI_NAPPE') + + ### Comptage commandes + déclaration concept sortant + self.set_icmd(1) + self.DeclareOut('C_out',self.sd) + + # éléments de contexte + ctxt = Context() + ### l'ensemble est dans un try/except pour recuperer les erreurs du module t_fonction + try: + ### + if (INTEGRE != None): + __ff=INTEGRE['FONCTION'].convert() + ctxt.f = __ff.nom + if INTEGRE['METHODE']=='TRAPEZE' : + __ex=__ff.trapeze(INTEGRE['COEF']) + elif INTEGRE['METHODE']=='SIMPSON' : + __ex=__ff.simpson(INTEGRE['COEF']) + ### + if (DERIVE != None): + __ff=DERIVE['FONCTION'].convert() + ctxt.f = __ff.nom + __ex=__ff.derive() + ### + if (INVERSE != None): + __ff=INVERSE['FONCTION'].convert() + ctxt.f = __ff.nom + __ex=__ff.inverse() + ### + if (ABS != None): + __ff=ABS['FONCTION'].convert() + ctxt.f = __ff.nom + __ex=__ff.abs() + ### + if (COMPOSE != None): + __ff=COMPOSE['FONC_RESU'].convert() + __fg=COMPOSE['FONC_PARA'].convert() + ctxt.f = [__ff.nom, __fg.nom] + __ex=__ff[__fg] + ### + if (ASSE != None): + __f0=ASSE['FONCTION'][0].convert() + __f1=ASSE['FONCTION'][1].convert() + ctxt.f = [__f0.nom, __f1.nom] + __ex=__f0.cat(__f1,ASSE['SURCHARGE']) + ### + if (COMB != None): + list_fonc=[] + if isinstance(self.sd,nappe_sdaster): + for mcfact in COMB : + list_fonc.append(mcfact['FONCTION'].convert()) + ctxt.f = [f.nom for f in list_fonc] + list_fonc = homo_support_nappe(list_fonc) + elif isinstance(self.sd,fonction_sdaster): + for mcfact in COMB : + __ex=mcfact['FONCTION'].convert() + list_fonc.append(__ex) + + __ex = 0. + for item, comb in zip(list_fonc, COMB): + ctxt.f = item.nom + __ex = item * comb['COEF'] + __ex + # on prend les paramètres de la 1ère fonction + __ex.para = copy.copy(list_fonc[0].para) + ### + if (COMB_C != None): + list_fonc=[] + if isinstance(self.sd,nappe_sdaster): + for mcfact in COMB_C: + list_fonc.append(mcfact['FONCTION'].convert()) + ctxt.f = [f.nom for f in list_fonc] + list_fonc = homo_support_nappe(list_fonc) + elif isinstance(self.sd,fonction_sdaster) or isinstance(self.sd,fonction_c): + for mcfact in COMB_C : + __ex=mcfact['FONCTION'].convert(arg='complex') + list_fonc.append(__ex) + + __ex = 0. + for item, comb in zip(list_fonc, COMB_C): + if comb['COEF_R'] != None: + coef = complex(comb['COEF_R']) + elif comb['COEF_C'] != None: + if type(comb['COEF_C']) in EnumTypes: + coef = tocomplex(comb['COEF_C']) + else: + coef = comb['COEF_C'] + ctxt.f = item.nom + __ex = item * coef + __ex + # on prend les paramètres de la 1ère fonction + __ex.para = copy.copy(list_fonc[0].para) + + ### mot clé LIST_PARA uniquement présent si COMB ou COMB_C + if (COMB != None) or (COMB_C != None) : + if (args['LIST_PARA'] != None) : + __ex=__ex.evalfonc(args['LIST_PARA'].Valeurs()) + ### + if (PUISSANCE != None): + __ff=PUISSANCE['FONCTION'].convert() + ctxt.f = __ff.nom + __ex=__ff + for i in range(PUISSANCE['EXPOSANT']-1): + __ex=__ex*__ff + ### + if (EXTRACTION != None): + if EXTRACTION['PARTIE']=='REEL': + __ex=EXTRACTION['FONCTION'].convert(arg='real') + if EXTRACTION['PARTIE']=='IMAG': + __ex=EXTRACTION['FONCTION'].convert(arg='imag') + if EXTRACTION['PARTIE']=='MODULE': + __ex=EXTRACTION['FONCTION'].convert(arg='modul') + if EXTRACTION['PARTIE']=='PHASE': + __ex=EXTRACTION['FONCTION'].convert(arg='phase') + ### + if (ENVELOPPE != None): + list_fonc=[] + l_env=ENVELOPPE['FONCTION'] + if type(l_env) not in EnumTypes: + l_env=(l_env,) + if isinstance(self.sd,nappe_sdaster): + for f in l_env: + list_fonc.append(f.convert()) + ctxt.f = [f.nom for f in list_fonc] + list_fonc = homo_support_nappe(list_fonc) + vale_para=list_fonc[0].vale_para + para =list_fonc[0].para + l_fonc_f =[] + for i in range(len(vale_para)): + __ff=list_fonc[0].l_fonc[i] + for nap in list_fonc[1:] : + ctxt.f = nap.l_fonc[i].nom + __ff=__ff.enveloppe(nap.l_fonc[i], ENVELOPPE['CRITERE']) + l_fonc_f.append(__ff) + __ex=t_nappe(vale_para,l_fonc_f,para) + elif isinstance(self.sd,fonction_sdaster): + for f in l_env: + list_fonc.append(f.convert()) + __ex=list_fonc[0] + for f in list_fonc[1:]: + ctxt.f = [__ex.nom, f.nom] + __ex = __ex.enveloppe(f, ENVELOPPE['CRITERE']) + ### + if (CORR_ACCE != None): + __ex=CORR_ACCE['FONCTION'].convert() + ctxt.f = __ex.nom + para=copy.copy(__ex.para) + # suppression de la tendance de l accelero + __ex=__ex.suppr_tend() + # calcul de la vitesse + __ex=__ex.trapeze(0.) + # calcul de la tendance de la vitesse : y = a1*x +a0 + __ex=__ex.suppr_tend() + if CORR_ACCE['CORR_DEPL']=='OUI': + # suppression de la tendance deplacement + # calcul du deplacement : integration + __ex=__ex.trapeze(0.) + # calcul de la tendance du déplacement : y = a1*x +a0 + __ex=__ex.suppr_tend() + # regeneration de la vitesse : derivation + __ex=__ex.derive() + # regeneration de l accelero : derivation + __ex=__ex.derive() + __ex.para=para + ### + if (FFT != None): + if isinstance(self.sd,fonction_c): + __ff=FFT['FONCTION'].convert() + ctxt.f = __ff.nom + __ex=__ff.fft(FFT['METHODE']) + if isinstance(self.sd,fonction_sdaster): + __ff=FFT['FONCTION'].convert(arg='complex') + ctxt.f = __ff.nom + __ex=__ff.fft(FFT['METHODE'],FFT['SYME']) + ### + if (SPEC_OSCI != None): + if SPEC_OSCI['AMOR_REDUIT']==None: + l_amor=[0.02, 0.05, 0.1] + UTMESS('I','CALC_FONCTION',' : génération par défaut de 3 amortissements :'+str(l_amor)) + else: + if type(SPEC_OSCI['AMOR_REDUIT']) not in EnumTypes : l_amor=[SPEC_OSCI['AMOR_REDUIT'],] - else : l_amor= SPEC_OSCI['AMOR_REDUIT'] - if SPEC_OSCI['FREQ']==None and SPEC_OSCI['LIST_FREQ']==None: - l_freq=[] - for i in range(56) : l_freq.append( 0.2+0.050*i) - for i in range( 8) : l_freq.append( 3.0+0.075*i) - for i in range(14) : l_freq.append( 3.6+0.100*i) - for i in range(24) : l_freq.append( 5.0+0.125*i) - for i in range(28) : l_freq.append( 8.0+0.250*i) - for i in range( 6) : l_freq.append(15.0+0.500*i) - for i in range( 4) : l_freq.append(18.0+1.000*i) - for i in range(10) : l_freq.append(22.0+1.500*i) - texte=[] - for i in range(len(l_freq)/5) : - texte.append(' %f %f %f %f %f' %tuple(l_freq[i*5:i*5+5])) - UTMESS('I','CALC_FONCTION',' : génération par défaut de 150 fréquences :\n'+'\n'.join(texte)) - elif SPEC_OSCI['LIST_FREQ']!=None: - l_freq=SPEC_OSCI['LIST_FREQ'].Valeurs() - elif SPEC_OSCI['FREQ']!=None: - if type(SPEC_OSCI['FREQ']) not in EnumType: + else: + l_amor= SPEC_OSCI['AMOR_REDUIT'] + if SPEC_OSCI['FREQ']==None and SPEC_OSCI['LIST_FREQ']==None: + l_freq=[] + for i in range(56): + l_freq.append( 0.2+0.050*i) + for i in range( 8): + l_freq.append( 3.0+0.075*i) + for i in range(14): + l_freq.append( 3.6+0.100*i) + for i in range(24): + l_freq.append( 5.0+0.125*i) + for i in range(28): + l_freq.append( 8.0+0.250*i) + for i in range( 6): + l_freq.append(15.0+0.500*i) + for i in range( 4): + l_freq.append(18.0+1.000*i) + for i in range(10): + l_freq.append(22.0+1.500*i) + texte=[] + for i in range(len(l_freq)/5) : + texte.append(' %f %f %f %f %f' %tuple(l_freq[i*5:i*5+5])) + UTMESS('I','CALC_FONCTION',' : génération par défaut de 150 fréquences :\n'+'\n'.join(texte)) + elif SPEC_OSCI['LIST_FREQ']!=None: + l_freq=SPEC_OSCI['LIST_FREQ'].Valeurs() + elif SPEC_OSCI['FREQ']!=None: + if type(SPEC_OSCI['FREQ']) not in EnumTypes: l_freq=[SPEC_OSCI['FREQ'],] - else : l_freq= SPEC_OSCI['FREQ'] - if abs(SPEC_OSCI['NORME'])<1.E-10 : - UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, la norme ne peut etre nulle') - if SPEC_OSCI['NATURE_FONC']!='ACCE' : - UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, le type de la fonction doit etre ACCE') - if SPEC_OSCI['METHODE']!='NIGAM' : - UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, seule la méthode NIGAM est codée') - eps=1.e-6 - for amor in l_amor : - if amor>(1-eps) : - UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, la méthode choisie '\ - 'suppose des amortissements sous-critiques, amor<1.') - - __ff=SPEC_OSCI['FONCTION'].convert() - - # appel à SPEC_OSCI - spectr = aster_fonctions.SPEC_OSCI(__ff.vale_x, __ff.vale_y, l_freq, l_amor) + else: + l_freq= SPEC_OSCI['FREQ'] + if min(l_freq)<1.E-10 : + UTMESS('S','CALC_FONCTION','Les fréquences doivent etre strictement positives.') + if abs(SPEC_OSCI['NORME'])<1.E-10 : + UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, la norme ne peut etre nulle') + if SPEC_OSCI['NATURE_FONC']!='ACCE' : + UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, le type de la fonction doit etre ACCE') + if SPEC_OSCI['METHODE']!='NIGAM' : + UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, seule la méthode NIGAM est codée') + eps=1.e-6 + for amor in l_amor : + if amor>(1-eps) : + UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, la méthode choisie '\ + 'suppose des amortissements sous-critiques, amor<1.') + + __ff=SPEC_OSCI['FONCTION'].convert() + ctxt.f = __ff.nom + + # appel à SPEC_OSCI + spectr = aster_fonctions.SPEC_OSCI(__ff.vale_x, __ff.vale_y, l_freq, l_amor) + + # construction de la nappe + vale_para = l_amor + para = { 'INTERPOL' : ['LIN','LOG'], + 'NOM_PARA_FONC' : 'FREQ', + 'NOM_PARA' : 'AMOR', + 'PROL_DROITE' : 'EXCLU', + 'PROL_GAUCHE' : 'EXCLU', + 'NOM_RESU' : SPEC_OSCI['NATURE'] } + para_fonc = { 'INTERPOL' : ['LOG','LOG'], + 'NOM_PARA' : 'FREQ', + 'PROL_DROITE' : 'CONSTANT', + 'PROL_GAUCHE' : 'EXCLU', + 'NOM_RESU' : SPEC_OSCI['NATURE'] } + if SPEC_OSCI['NATURE']=='DEPL': + ideb = 0 + elif SPEC_OSCI['NATURE']=='VITE': + ideb = 1 + else: + ideb = 2 + l_fonc = [] + for iamor in range(len(l_amor)) : + l_fonc.append(t_fonction(l_freq,spectr[iamor,ideb,:]/SPEC_OSCI['NORME'],para_fonc)) + __ex=t_nappe(vale_para,l_fonc,para) + ### + if (LISS_ENVELOP!= None): + __ff=LISS_ENVELOP['NAPPE'].convert() + sp_nappe=liss_enveloppe.nappe(listFreq=__ff.l_fonc[0].vale_x, listeTable=[f.vale_y for f in __ff.l_fonc], listAmor=__ff.vale_para, entete="") + sp_lisse=liss_enveloppe.lissage(nappe=sp_nappe,fmin=LISS_ENVELOP['FREQ_MIN'],fmax=LISS_ENVELOP['FREQ_MAX'],elarg=LISS_ENVELOP['ELARG'],tole_liss=LISS_ENVELOP['TOLE_LISS']) + para_fonc=__ff.l_fonc[0].para + l_fonc=[] + for val in sp_lisse.listTable: + l_fonc.append(t_fonction(sp_lisse.listFreq,val,para_fonc)) + __ex=t_nappe(vale_para=sp_lisse.listAmor,l_fonc=l_fonc,para=__ff.para) - # construction de la nappe - vale_para = l_amor - para = { 'INTERPOL' : ['LIN','LOG'], - 'NOM_PARA_FONC' : 'FREQ', - 'NOM_PARA' : 'AMOR', - 'PROL_DROITE' : 'EXCLU', - 'PROL_GAUCHE' : 'EXCLU', - 'NOM_RESU' : SPEC_OSCI['NATURE'] } - para_fonc = { 'INTERPOL' : ['LOG','LOG'], - 'NOM_PARA' : 'FREQ', - 'PROL_DROITE' : 'CONSTANT', - 'PROL_GAUCHE' : 'EXCLU', - 'NOM_RESU' : SPEC_OSCI['NATURE'] } - if SPEC_OSCI['NATURE']=='DEPL' : ideb = 0 - elif SPEC_OSCI['NATURE']=='VITE' : ideb = 1 - else : ideb = 2 - l_fonc = [] - for iamor in range(len(l_amor)) : - l_fonc.append(t_fonction(l_freq,spectr[iamor,ideb,:]/SPEC_OSCI['NORME'],para_fonc)) - __ex=t_nappe(vale_para,l_fonc,para) - ### - if (LISS_ENVELOP!= None): - __ff=LISS_ENVELOP['NAPPE'].convert() - sp_nappe=liss_enveloppe.nappe(listFreq=__ff.l_fonc[0].vale_x, listeTable=[f.vale_y for f in __ff.l_fonc], listAmor=__ff.vale_para, entete="") - sp_lisse=liss_enveloppe.lissage(nappe=sp_nappe,fmin=LISS_ENVELOP['FREQ_MIN'],fmax=LISS_ENVELOP['FREQ_MAX'],elarg=LISS_ENVELOP['ELARG'],tole_liss=LISS_ENVELOP['TOLE_LISS']) - para_fonc=__ff.l_fonc[0].para - l_fonc=[] - for val in sp_lisse.listTable : - l_fonc.append(t_fonction(sp_lisse.listFreq,val,para_fonc)) - __ex=t_nappe(vale_para=sp_lisse.listAmor,l_fonc=l_fonc,para=__ff.para) + except InterpolationError, msg: + UTMESS('F', 'CALC_FONCTION', 'Un problème d interpolation a été rencontré'+ctxt.f+'Vérifier les valeurs fournies derrière'+ + 'le mot-clé INTERPOL lors de la création de cette(ces) fonction(s). Debug '+str(msg)) + except ParametreError, msg: + UTMESS('F', 'CALC_FONCTION', 'Un problème concernant le nom des abscisses ou ordonnées a été rencontré'+ctxt.f+ + 'Vérifier la valeur fournie derrière les mots-clés NOM_PARA/NOM_RESU lors de la création de cette(ces) fonction(s).'+ + 'Debug : '+str(msg)) + except ProlongementError, msg: + UTMESS('F', 'CALC_FONCTION','Un problème concernant le prolongement de la (des) fonction(s) a été rencontré.'+ctxt.f+ + 'Vérifier la valeur fournie derrière les mots-clés PROL_GAUCHE/PROL_DROITE lors de la création de cette(ces) fonction(s)'+ + 'Debug'+str(msg)) + except FonctionError, msg: + UTMESS('F', 'CALC_FONCTION', 'Une erreur s est produite lors de l opération'+ctxt.f+'Debug :'+str(msg)+ + 'Remontée d erreur (pour aider a l analyse) :'+traceback.format_exc()) - ### creation de la fonction produite par appel à DEFI_FONCTION - ### on récupère les paramètres issus du calcul de __ex - ### et on les surcharge par ceux imposés par l'utilisateur + ### creation de la fonction produite par appel à DEFI_FONCTION + ### on récupère les paramètres issus du calcul de __ex + ### et on les surcharge par ceux imposés par l'utilisateur + + if isinstance(__ex,t_fonction) or isinstance(__ex,t_fonction_c): + para=__ex.para + if NOM_PARA !=None : para['NOM_PARA'] =NOM_PARA + if NOM_RESU !=None : para['NOM_RESU'] =NOM_RESU + if PROL_DROITE!=None : para['PROL_DROITE']=PROL_DROITE + if PROL_GAUCHE!=None : para['PROL_GAUCHE']=PROL_GAUCHE + if INTERPOL !=None : para['INTERPOL'] =INTERPOL + if isinstance(__ex,t_fonction_c): para['VALE_C'] = __ex.tabul() + elif isinstance(__ex,t_fonction) : para['VALE'] = __ex.tabul() + C_out=DEFI_FONCTION(**para) + elif isinstance(__ex,t_nappe): + def_fonc=[] + for f in __ex.l_fonc : + para=f.para + def_fonc.append(_F(VALE =f.tabul(), + INTERPOL =f.para['INTERPOL'], + PROL_DROITE=f.para['PROL_DROITE'], + PROL_GAUCHE=f.para['PROL_GAUCHE'],)) + para=__ex.para + if NOM_PARA !=None : para['NOM_PARA'] =NOM_PARA + if NOM_RESU !=None : para['NOM_RESU'] =NOM_RESU + if PROL_DROITE !=None : para['PROL_DROITE']=PROL_DROITE + if PROL_GAUCHE !=None : para['PROL_GAUCHE']=PROL_GAUCHE + if NOM_PARA_FONC !=None : para['NOM_PARA_FONC'] =INTERPOL + if INTERPOL_FONC !=None : para['INTERPOL'] =INTERPOL + C_out=DEFI_NAPPE(PARA=__ex.vale_para.tolist(),DEFI_FONCTION=def_fonc,**para) + if INFO > 1: + IMPR_FONCTION(FORMAT='TABLEAU', + UNITE=6, + COURBE=_F(FONCTION=C_out),) + return ier - if isinstance(__ex,t_fonction) or isinstance(__ex,t_fonction_c): - para=__ex.para - if NOM_PARA !=None : para['NOM_PARA'] =NOM_PARA - if NOM_RESU !=None : para['NOM_RESU'] =NOM_RESU - if PROL_DROITE!=None : para['PROL_DROITE']=PROL_DROITE - if PROL_GAUCHE!=None : para['PROL_GAUCHE']=PROL_GAUCHE - if INTERPOL !=None : para['INTERPOL'] =INTERPOL - if isinstance(__ex,t_fonction_c): para['VALE_C'] = __ex.tabul() - elif isinstance(__ex,t_fonction) : para['VALE'] = __ex.tabul() - C_out=DEFI_FONCTION(**para) - elif isinstance(__ex,t_nappe): - def_fonc=[] - for f in __ex.l_fonc : - para=f.para - def_fonc.append(_F(VALE =f.tabul(), - INTERPOL =f.para['INTERPOL'], - PROL_DROITE=f.para['PROL_DROITE'], - PROL_GAUCHE=f.para['PROL_GAUCHE'],) - ) - para=__ex.para - if NOM_PARA !=None : para['NOM_PARA'] =NOM_PARA - if NOM_RESU !=None : para['NOM_RESU'] =NOM_RESU - if PROL_DROITE !=None : para['PROL_DROITE']=PROL_DROITE - if PROL_GAUCHE !=None : para['PROL_GAUCHE']=PROL_GAUCHE - if NOM_PARA_FONC !=None : para['NOM_PARA_FONC'] =INTERPOL - if INTERPOL_FONC !=None : para['INTERPOL'] =INTERPOL - C_out=DEFI_NAPPE(PARA=__ex.vale_para.tolist(),DEFI_FONCTION=def_fonc,**para) - if INFO > 1: - IMPR_FONCTION(FORMAT='TABLEAU', - UNITE=6, - COURBE=_F(FONCTION=C_out),) - return ier +# ----------------------------------------------------------------------------- +class Context(object): + """Permet de stocker des éléments de contexte pour aider au + diagnostic lors de l'émission de message. + usage : + context = Context() + context.f = 'nomfon' + print context.f + """ + def __init__(self): + self.__nomf = None + + def get_val(self): + """Retourne le texte formatté. + """ + nomf = self.__nomf + if type(nomf) not in (list, tuple): + nomf = [nomf,] + pluriel = '' + if len(nomf) > 1: + pluriel = 's' + try: + res = """Fonction%(s)s concernée%(s)s : %(nomf)s""" % { + 's' : pluriel, + 'nomf' : ', '.join(nomf), + } + except: + res = 'erreur de programmation !' + return res + + def set_val(self, value): + self.__nomf = value + + def del_val(self): + del self.__nomf + + f = property(get_val, set_val, del_val, "") diff --git a/Aster/Cata/cataSTA8/Macro/calc_table_ops.py b/Aster/Cata/cataSTA8/Macro/calc_table_ops.py index 74201a01..62fa2294 100644 --- a/Aster/Cata/cataSTA8/Macro/calc_table_ops.py +++ b/Aster/Cata/cataSTA8/Macro/calc_table_ops.py @@ -1,4 +1,4 @@ -#@ MODIF calc_table_ops Macro DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF calc_table_ops Macro DATE 04/03/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -74,14 +74,14 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args): # format pour l'impression des filtres form_filtre = '\nFILTRE -> NOM_PARA: %-16s CRIT_COMP: %-4s VALE: %s' if occ['OPERATION'] == 'FILTRE': - col = getattr(tab, occ['NOM_PARA']) # peu importe le type, c'est la meme méthode d'appel opts = [occ[k] for k in ('VALE','VALE_I','VALE_C','VALE_K') if occ.has_key(k)] kargs = {} for k in ('CRITERE','PRECISION'): if occ.has_key(k): kargs[k] = occ[k] - tab = tab & ( getattr(col, occ['CRIT_COMP'])(*opts,**kargs) ) + col = getattr(tab, occ['NOM_PARA']) + tab = getattr(col, occ['CRIT_COMP'])(*opts,**kargs) # trace l'operation dans le titre #if FORMAT in ('TABLEAU','ASTER'): tab.titr += form_filtre % (occ['NOM_PARA'], occ['CRIT_COMP'], \ diff --git a/Aster/Cata/cataSTA8/Macro/impr_oar_ops.py b/Aster/Cata/cataSTA8/Macro/impr_oar_ops.py index 44cebecc..f942f6c1 100644 --- a/Aster/Cata/cataSTA8/Macro/impr_oar_ops.py +++ b/Aster/Cata/cataSTA8/Macro/impr_oar_ops.py @@ -1,4 +1,4 @@ -#@ MODIF impr_oar_ops Macro DATE 07/11/2006 AUTEUR DURAND C.DURAND +#@ MODIF impr_oar_ops Macro DATE 21/11/2007 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -18,14 +18,15 @@ # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -import aster -try : +# protection pour eficas +try: + import aster from Utilitai.Utmess import UTMESS from Utilitai.Table import Table from Utilitai.partition import MAIL_PY -except : +except: pass - + def buildTabString(tabLevel): """ Construit une chaine de tabulation diff --git a/Aster/Cata/cataSTA8/Macro/impr_table_ops.py b/Aster/Cata/cataSTA8/Macro/impr_table_ops.py index fec1bdbb..86ed2de6 100644 --- a/Aster/Cata/cataSTA8/Macro/impr_table_ops.py +++ b/Aster/Cata/cataSTA8/Macro/impr_table_ops.py @@ -1,4 +1,4 @@ -#@ MODIF impr_table_ops Macro DATE 06/11/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF impr_table_ops Macro DATE 07/05/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -22,9 +22,7 @@ import os.path import re - -from types import ListType, TupleType, StringTypes -EnumTypes=(ListType, TupleType) +from sets import Set # ------------------------------------------------------------------------------ @@ -80,7 +78,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args): ltab=[] if args['SENSIBILITE']: lps=args['SENSIBILITE'] - if not type(lps) in EnumTypes: + if not type(lps) in (list, tuple): lps=[lps,] for ps in lps: ncomp = NomCompose(TABLE, ps) @@ -99,7 +97,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args): nom_para=ltab[0][0].para if args['NOM_PARA']: nom_para=args['NOM_PARA'] - if not type(nom_para) in EnumTypes: + if not type(nom_para) in (list, tuple): nom_para=[nom_para,] # 0.4.2. Traiter le cas des UL réservées @@ -180,7 +178,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args): # 4.4. regroupement par paramètre : PAGINATION if args['PAGINATION']: l_ppag=args['PAGINATION'] - if not type(l_ppag) in EnumTypes: + if not type(l_ppag) in (list, tuple): l_ppag=[l_ppag,] kargs['PAGINATION'] = [p for p in l_ppag if p in nom_para] l_para_err = [p for p in l_ppag if not p in nom_para] @@ -191,16 +189,16 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args): timp.Impr(**kargs) # ----- 5. IMPR_FONCTION='OUI' - if args['IMPR_FONCTION'] and args['IMPR_FONCTION']=='OUI': + if args['IMPR_FONCTION'] == 'OUI': # cherche parmi les cellules celles qui contiennent un nom de fonction - dfon={} + dfon=[] for row in timp['FONCTION', 'FONCTION_C']: for par,cell in row.items(): - if type(cell) in StringTypes: + if type(cell) in (str, unicode): if aster.getvectjev(cell.strip().ljust(19)+'.PROL')<>None: - dfon[cell.strip().ljust(19)]=par + dfon.append(['%-19s' % cell, par]) # impression des fonctions trouvées - for f,par in dfon.items(): + for f,par in dfon: __fonc=RECU_FONCTION( TABLE=sdtab, FILTRE=_F( @@ -208,6 +206,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args): VALE_K=f, ), NOM_PARA_TABL=par, + TITRE = 'Fonction %s' % f, ) __fonc.Trace(**kfonc) DETRUIRE(CONCEPT=_F(NOM=('__fonc',),), ALARME='NON', INFO=1,) diff --git a/Aster/Cata/cataSTA8/Macro/macr_ascouf_calc_ops.py b/Aster/Cata/cataSTA8/Macro/macr_ascouf_calc_ops.py index ac8e6edf..91874f1f 100644 --- a/Aster/Cata/cataSTA8/Macro/macr_ascouf_calc_ops.py +++ b/Aster/Cata/cataSTA8/Macro/macr_ascouf_calc_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_ascouf_calc_ops Macro DATE 31/10/2006 AUTEUR REZETTE C.REZETTE +#@ MODIF macr_ascouf_calc_ops Macro DATE 05/09/2007 AUTEUR SALMONA L.SALMONA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -235,7 +235,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA else : motscles['PRES_REP']=_F( GROUP_MA = 'PEAUINT', PRES = PRES_REP['PRES'] ,) - if PRES_REP['EFFE_FOND_P1']!=None : + if PRES_REP['EFFE_FOND_P1']!='NON' : motscles['EFFE_FOND']=_F( GROUP_MA_INT = 'BORDTU' , GROUP_MA = 'EXTUBE' , PRES = PRES_REP['PRES'] ,) diff --git a/Aster/Cata/cataSTA8/Macro/macr_ascouf_mail_ops.py b/Aster/Cata/cataSTA8/Macro/macr_ascouf_mail_ops.py index ec377417..4a5993f9 100644 --- a/Aster/Cata/cataSTA8/Macro/macr_ascouf_mail_ops.py +++ b/Aster/Cata/cataSTA8/Macro/macr_ascouf_mail_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_ascouf_mail_ops Macro DATE 29/08/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF macr_ascouf_mail_ops Macro DATE 21/11/2007 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -21,12 +21,14 @@ import os.path from math import sqrt,cos,sin,pi,tan,log,fabs,ceil,fmod,floor -import aster import string -try : - from Utilitai.Utmess import UTMESS -except : - pass + +# protection pour eficas +try: + import aster + from Utilitai.Utmess import UTMESS +except: + pass # ------------------------------------------------------------------------------ def ASCFON(RC,RM,EP,ORIEN,AZIM,AXEC,POS,Y): diff --git a/Aster/Cata/cataSTA8/Macro/macr_aspic_calc_ops.py b/Aster/Cata/cataSTA8/Macro/macr_aspic_calc_ops.py index ac1b2f66..9229d58a 100644 --- a/Aster/Cata/cataSTA8/Macro/macr_aspic_calc_ops.py +++ b/Aster/Cata/cataSTA8/Macro/macr_aspic_calc_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_aspic_calc_ops Macro DATE 31/10/2006 AUTEUR REZETTE C.REZETTE +#@ MODIF macr_aspic_calc_ops Macro DATE 03/10/2007 AUTEUR SALMONA L.SALMONA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -226,7 +226,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C motscles['PRES_REP' ]= _F(GROUP_MA=APPRES, PRES=PRES_REP['PRES']) else : motscles['PRES_REP' ]= _F(GROUP_MA=APPRES[0],PRES=PRES_REP['PRES']) - if PRES_REP['EFFE_FOND' ]!=None : + if PRES_REP['EFFE_FOND' ]=='OUI' : motscles['EFFE_FOND' ]=(_F(GROUP_MA ='EXTUBU ', GROUP_MA_INT='L_INT_TU', PRES =PRES_REP['PRES']), diff --git a/Aster/Cata/cataSTA8/Macro/macr_aspic_mail_ops.py b/Aster/Cata/cataSTA8/Macro/macr_aspic_mail_ops.py index d1b14cb6..cd7ea66d 100644 --- a/Aster/Cata/cataSTA8/Macro/macr_aspic_mail_ops.py +++ b/Aster/Cata/cataSTA8/Macro/macr_aspic_mail_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_aspic_mail_ops Macro DATE 25/09/2006 AUTEUR GALENNE E.GALENNE +#@ MODIF macr_aspic_mail_ops Macro DATE 07/05/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -485,9 +485,10 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE, VAL4 = 3.0 * sqrt( RMT * EPT2 ) LZMAX = max ( VAL1 , VAL2, VAL3, VAL4 ) ZMAXC = LZMAX + ( DEC/2.0 ) + D1 + D2 - LOK = ( abs(ZMAX-ZMAXC) <= EPSI * abs(ZMAXC) ) + LOK = ( (ZMAX-ZMAXC) >= -1.* EPSI * abs(ZMAXC) ) if not LOK : - message= ' erreur donnees \n' + message= "La valeur de Z_MAX (cote maximale de la tubulure) est inférieure à la longueur\n" + message=message+ " d'amortissement calculée : \n" message=message+ ' Z_MAX FOURNIE : %.2f \n'%ZMAX message=message+ ' Z_MAX CALCULEE : %.2f \n'%ZMAXC UTMESS('F', "MACR_ASPIC_MAIL", message) @@ -496,7 +497,7 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE, VAL2 = 3.0 * sqrt( RMC * EPC ) LXMAX = max( VAL1 , VAL2 ) XMAXC = LXMAX + ( DET1 / 2.0 ) - LOK = ( abs(XMAX-XMAXC) <= EPSI * abs(XMAXC) ) + LOK = ( (XMAX-XMAXC) >= -1.* EPSI * abs(XMAXC) ) if not LOK : message= ' erreur donnees \n' message=message+ ' Z_MAX FOURNIE : %.2f \n'%ZMAX diff --git a/Aster/Cata/cataSTA8/Macro/macr_lign_coupe_ops.py b/Aster/Cata/cataSTA8/Macro/macr_lign_coupe_ops.py index c9b31703..41179af6 100644 --- a/Aster/Cata/cataSTA8/Macro/macr_lign_coupe_ops.py +++ b/Aster/Cata/cataSTA8/Macro/macr_lign_coupe_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_lign_coupe_ops Macro DATE 09/05/2007 AUTEUR SALMONA L.SALMONA +#@ MODIF macr_lign_coupe_ops Macro DATE 01/04/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -363,7 +363,6 @@ def macr_lign_coupe_ops(self,RESULTAT,UNITE_MAILLAGE,LIGN_COUPE,NOM_CHAM, # Production d'une table pour toutes les lignes de coupe - for m in LIGN_COUPE : if m['NB_POINTS'] !=None : ioc2=ioc2+1 groupe='LICOU'+str(ioc2) diff --git a/Aster/Cata/cataSTA8/Macro/macr_spectre_ops.py b/Aster/Cata/cataSTA8/Macro/macr_spectre_ops.py index e97053c1..19d0a455 100644 --- a/Aster/Cata/cataSTA8/Macro/macr_spectre_ops.py +++ b/Aster/Cata/cataSTA8/Macro/macr_spectre_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_spectre_ops Macro DATE 14/11/2006 AUTEUR COURTOIS M.COURTOIS +#@ MODIF macr_spectre_ops Macro DATE 21/11/2007 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -19,12 +19,15 @@ # ====================================================================== from Accas import _F -import aster import string -try : - from Utilitai.Utmess import UTMESS -except : + +# protection pour eficas +try: + import aster + from Utilitai.Utmess import UTMESS +except: pass + def macr_spectre_ops(self,MAILLAGE,PLANCHER,NOM_CHAM,CALCUL,RESU,IMPRESSION=None, FREQ=None,LIST_FREQ=None,LIST_INST=None,AMOR_SPEC=None,**args): """ diff --git a/Aster/Cata/cataSTA8/Macro/macro_elas_mult_ops.py b/Aster/Cata/cataSTA8/Macro/macro_elas_mult_ops.py index b9dac9fe..d253cd00 100644 --- a/Aster/Cata/cataSTA8/Macro/macro_elas_mult_ops.py +++ b/Aster/Cata/cataSTA8/Macro/macro_elas_mult_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macro_elas_mult_ops Macro DATE 07/11/2006 AUTEUR CIBHHLV L.VIVAN +#@ MODIF macro_elas_mult_ops Macro DATE 08/11/2007 AUTEUR SALMONA L.SALMONA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -234,11 +234,13 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL, motscles['NUME_MODE']=m['MODE_FOURIER'] motscles['EXCIT']=[] if m['CHAR_MECA'] : - for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) + for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) elif m['CHAR_CINE'] : - for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) - if CHAR_MECA_GLOBAL: motscles['EXCIT'].append(_F(CHARGE=CHAR_MECA_GLOBAL)) - elif CHAR_CINE_GLOBAL: motscles['EXCIT'].append(_F(CHARGE=CHAR_CINE_GLOBAL)) + for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) + if CHAR_MECA_GLOBAL: + for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt)) + elif CHAR_CINE_GLOBAL: + for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt)) CALC_ELEM(reuse=nomres, RESULTAT=nomres, MODELE=MODELE, @@ -256,11 +258,13 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL, motscles['NUME_MODE']=m['MODE_FOURIER'] motscles['EXCIT']=[] if m['CHAR_MECA'] : - for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) + for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) elif m['CHAR_CINE'] : - for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) - if CHAR_MECA_GLOBAL: motscles['EXCIT'].append(_F(CHARGE=CHAR_MECA_GLOBAL)) - elif CHAR_CINE_GLOBAL: motscles['EXCIT'].append(_F(CHARGE=CHAR_CINE_GLOBAL)) + for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) + if CHAR_MECA_GLOBAL: + for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt)) + elif CHAR_CINE_GLOBAL: + for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt)) CALC_NO(reuse=nomres, RESULTAT=nomres, MODELE=MODELE, diff --git a/Aster/Cata/cataSTA8/Macro/macro_matr_asse_ops.py b/Aster/Cata/cataSTA8/Macro/macro_matr_asse_ops.py index ddf508f1..c070044e 100644 --- a/Aster/Cata/cataSTA8/Macro/macro_matr_asse_ops.py +++ b/Aster/Cata/cataSTA8/Macro/macro_matr_asse_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macro_matr_asse_ops Macro DATE 12/06/2006 AUTEUR CIBHHLV L.VIVAN +#@ MODIF macro_matr_asse_ops Macro DATE 06/02/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -21,7 +21,7 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE, - SOLVEUR,NUME_DDL,CHARGE,CHAR_CINE,INST,**args): + SOLVEUR,NUME_DDL,CHARGE,CHAR_CINE,INST,INFO,**args): """ Ecriture de la macro MACRO_MATR_ASSE """ @@ -30,6 +30,7 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE, # On met le mot cle NUME_DDL dans une variable locale pour le proteger numeddl=NUME_DDL + info=INFO # On importe les definitions des commandes a utiliser dans la macro # Le nom de la variable doit etre obligatoirement le nom de la commande CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM') @@ -38,39 +39,9 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE, # La macro compte pour 1 dans la numerotation des commandes self.set_icmd(1) - if SOLVEUR: - methode=SOLVEUR['METHODE'] - if methode=='LDLT': - if SOLVEUR['RENUM']: - renum=SOLVEUR['RENUM'] - else: - renum='RCMK' - if renum not in ('SANS','RCMK'): - UTMESS('F', "MACRO_MATR_ASSE", "Avec methode LDLT, RENUM doit etre SANS ou RCMK") - elif methode=='MULT_FRONT': - if SOLVEUR['RENUM']: - renum=SOLVEUR['RENUM'] - else: - renum='MDA' - if renum not in ('MDA','MD','METIS'): - UTMESS('F', "MACRO_MATR_ASSE", "Avec methode MULT_FRONT, RENUM doit etre MDA, MD ou RCMK") - elif methode=='MUMPS': - if SOLVEUR['RENUM']: - renum=SOLVEUR['RENUM'] - else: - renum='SANS' - if renum not in ('SANS',): - UTMESS('F', "MACRO_MATR_ASSE", "Avec methode MUMPS, RENUM doit etre SANS") - elif methode=='GCPC': - if SOLVEUR['RENUM']: - renum=SOLVEUR['RENUM'] - else: - renum='SANS' - if renum not in ('SANS','RCMK'): - UTMESS('F', "MACRO_MATR_ASSE", "Avec methode GCPC, RENUM doit etre SANS ou RCMK") - else: - methode='MULT_FRONT' - renum ='MDA' + # Les mots cles simples sous SOLVEUR sont par defaut MULT_FRONT/METIS + methode=SOLVEUR['METHODE'] + renum=SOLVEUR['RENUM'] if numeddl in self.sdprods: # Si le concept numeddl est dans self.sdprods @@ -144,7 +115,7 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE, if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'): self.DeclareOut('num',numeddl) # On peut passer des mots cles egaux a None. Ils sont ignores - num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum) + num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum,INFO=info) else: num=numeddl diff --git a/Aster/Cata/cataSTA8/Macro/macro_miss_3d_ops.py b/Aster/Cata/cataSTA8/Macro/macro_miss_3d_ops.py index 97b6bd15..315f4307 100644 --- a/Aster/Cata/cataSTA8/Macro/macro_miss_3d_ops.py +++ b/Aster/Cata/cataSTA8/Macro/macro_miss_3d_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macro_miss_3d_ops Macro DATE 31/10/2006 AUTEUR ACBHHCD G.DEVESA +#@ MODIF macro_miss_3d_ops Macro DATE 06/06/2007 AUTEUR SALMONA L.SALMONA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -58,9 +58,9 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS, miss3d=loc_fic+'miss3d' - if VERSION=='V1_2': - if PARAMETRE != None and PARAMETRE['TYPE']=='BINAIRE': - raise AsException("MACRO_MISS_3D/PARAMETRE : type incompatible avec version") + # if VERSION=='V1_2': + # if PARAMETRE != None and PARAMETRE['TYPE']=='BINAIRE': + # raise AsException("MACRO_MISS_3D/PARAMETRE : type incompatible avec version") if OPTION['TOUT']!=None: MODUL2='COMPLET' diff --git a/Aster/Cata/cataSTA8/cata.py b/Aster/Cata/cataSTA8/cata.py index 7faa61de..a506925a 100755 --- a/Aster/Cata/cataSTA8/cata.py +++ b/Aster/Cata/cataSTA8/cata.py @@ -1,4 +1,4 @@ -#& MODIF ENTETE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF ENTETE DATE 07/05/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -18,6 +18,7 @@ # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +import os import Accas from Accas import * from Accas import _F @@ -34,7 +35,7 @@ except: pass __version__="$Name: $" -__Id__="$Id: cata.py,v 1.3.8.6 2007-06-14 16:18:24 pnoyret Exp $" +__Id__="$Id: cata.py,v 1.4.6.1.4.1 2008-10-10 13:28:49 pnoyret Exp $" EnumTypes = (ListType, TupleType) @@ -533,7 +534,8 @@ class fonction_class(ASSD): from Utilitai.Graph import Graph gr=Graph() gr.AjoutCourbe(Val=self.Valeurs(), - Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU']]) + Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU']], + Leg=os.linesep.join(self.TITR.get()) ) gr.Trace(FORMAT=FORMAT,**kargs) class fonction_sdaster(fonction_class): @@ -667,9 +669,11 @@ class fonction_c(fonction_class): if self.par_lot() : raise Accas.AsException("Erreur dans fonction_c.Trace en PAR_LOT='OUI'") from Utilitai.Graph import Graph + para = self.Parametres() gr=Graph() gr.AjoutCourbe(Val=self.Valeurs(), - Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU'],'IMAG']) + Lab=[para['NOM_PARA'], '%s_R' % para['NOM_RESU'], '%s_I' % para['NOM_RESU']], + Leg=os.linesep.join(self.TITR.get()) ) gr.Trace(FORMAT=FORMAT,**kargs) def __call__(self,val): ### Pour EFICAS : substitution de l'instance de classe @@ -765,7 +769,8 @@ class nappe_sdaster(fonction_class): lv=self.Valeurs()[1] dp=self.Parametres()[0] for lx,ly in lv: - gr.AjoutCourbe(Val=[lx,ly], Lab=[dp['NOM_PARA_FONC'],dp['NOM_RESU']]) + gr.AjoutCourbe(Val=[lx,ly], Lab=[dp['NOM_PARA_FONC'],dp['NOM_RESU']], + Leg=os.linesep.join(self.TITR.get()) ) gr.Trace(FORMAT=FORMAT,**kargs) # ----------------------------------------------------------------------------- @@ -2655,7 +2660,7 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_pr ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 14/11/2006 AUTEUR TARDIEU N.TARDIEU +#& MODIF COMMANDE DATE 02/06/2008 AUTEUR DESOZA T.DESOZA # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -3042,7 +3047,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, fr="Définit les zones soumises à des conditions de contact unilatéral avec ou sans frottement", regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),), APPARIEMENT =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL", - into=("RIGIDE","NODAL","MAIT_ESCL","MAIT_ESCL_SYME")), + into=("NODAL","MAIT_ESCL","MAIT_ESCL_SYME")), RECHERCHE =SIMP(statut='f',typ='TXM',defaut="NOEUD_BOUCLE", into=("NOEUD_BOUCLE","NOEUD_VOISIN")), LISSAGE =SIMP(statut='f',typ='TXM',defaut="NON", @@ -3243,27 +3248,14 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, REAC_ITER =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"), TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), TOLE_PROJ_INT =SIMP(statut='f',typ='R' ,defaut=0.001), - TOLE_REAC_GEOM =SIMP(statut='f',typ='R' ,defaut=0.05), STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", into=("OUI","NON")), REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", - into=("AUTOMATIQUE","CONTROLE","SANS")), - b_reac_sans =BLOC(condition = "REAC_GEOM == 'SANS' ", - fr="Paramètre de la réactualisation géométrique", - - STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="NON", - into=("OUI","NON")), - ), - b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ", - fr="Paramètre de la réactualisation géométrique", + into=("AUTOMATIQUE","CONTROLE","SANS")), + + b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique", NB_REAC_GEOM =SIMP(statut='o',typ='I'), - STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="ALARME", - into=("OUI","NON")), - ), - b_reac_auto =BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ", - fr="Paramètre de la réactualisation géométrique auto", - NB_REAC_MAXI =SIMP(statut='o',typ='I',defaut = 10), ), SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), @@ -3755,7 +3747,7 @@ AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op= 7,sd_prod=char_meca, ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 14/11/2006 AUTEUR TARDIEU N.TARDIEU +#& MODIF COMMANDE DATE 02/06/2008 AUTEUR DESOZA T.DESOZA # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -4109,17 +4101,33 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, ), FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), COMPLIANCE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), + FOND_FISSURE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), + RACCORD_LINE_QUAD=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), + INTEGRATION =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2", "NCOTES","NCOTES1","NCOTES2")), COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0), FORMULATION =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE")), MODL_AXIS =SIMP(statut='o',typ='TXM',into=("OUI","NON")), - DIRE_APPA =SIMP(statut='f',typ='R',max=3), + DIRE_APPA =SIMP(statut='f',typ='R',max=3,defaut=(0.,0.,0.,)), ITER_GEOM_MAXI =SIMP(statut='f',typ='I',defaut=2), ITER_CONT_MAXI =SIMP(statut='f',typ='I',defaut=30), - DIST_MAIT =SIMP(statut='f',typ='R'), - DIST_ESCL =SIMP(statut='f',typ='R'), + DIST_MAIT =SIMP(statut='f',typ='R',defaut=0.), + DIST_ESCL =SIMP(statut='f',typ='R',defaut=0.), + VECT_ORIE_POU =SIMP(statut='f',typ='R',min=3,max=3), + TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), CONTACT_INIT =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), + b_FOND_FISSURE =BLOC(condition = "FOND_FISSURE == 'OUI' ",fr="TRAITEMENT EN FOND DE FISSURE", + regles=(UN_PARMI('NOEUD_FOND','GROUP_NO_FOND','MAILLE_FOND','GROUP_MA_FOND'),), + NOEUD_FOND =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + GROUP_NO_FOND =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + MAILLE_FOND =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),), + b_RACCORD_SURF =BLOC(condition = "RACCORD_LINE_QUAD == 'OUI' ",fr="TRAITEMENT DU RACCORD SURFACIQUE", + regles=(UN_PARMI('NOEUD_RACC','GROUP_NO_RACC'),), + NOEUD_RACC =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + GROUP_NO_RACC =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),), + b_compliance =BLOC(condition = "COMPLIANCE == 'OUI' ",fr="Parametres de la compliance", ASPERITE =SIMP(statut='o',typ='R',), E_N =SIMP(statut='o',typ='R',), @@ -4132,7 +4140,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, VECT_Z =SIMP(statut='f',typ='R',min=3,max=3), ITER_FROT_MAXI =SIMP(statut='f',typ='I',defaut=2), COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0), - SEUIL_INIT =SIMP(statut='f',typ='I',defaut=0),),), + SEUIL_INIT =SIMP(statut='f',typ='R',defaut=0.),),), b_gcp =BLOC(condition = "METHODE == 'GCP' ", fr="Paramètres de la méthode du gradient conjugué projeté (contact uniquement)", @@ -4141,28 +4149,15 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, REAC_ITER =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"), TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), TOLE_PROJ_INT =SIMP(statut='f',typ='R' ,defaut=0.001), - TOLE_REAC_GEOM =SIMP(statut='f',typ='R' ,defaut=0.05), STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", into=("OUI","NON")), REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", - into=("AUTOMATIQUE","CONTROLE","SANS")), - b_reac_sans =BLOC(condition = "REAC_GEOM == 'SANS' ", - fr="Paramètre de la réactualisation géométrique", - - STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="NON", - into=("OUI","NON")), - ), - b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ", - fr="Paramètre de la réactualisation géométrique", + into=("AUTOMATIQUE","CONTROLE","SANS")), + + b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique", NB_REAC_GEOM =SIMP(statut='o',typ='I'), - - STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="ALARME", - into=("OUI","NON")), + ), - b_reac_auto =BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ", - fr="Paramètre de la réactualisation géométrique auto", - NB_REAC_MAXI =SIMP(statut='o',typ='I',defaut = 10), - ), SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), @@ -6136,7 +6131,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 16/10/2006 AUTEUR JMBHH01 J.M.PROIX +#& MODIF COMMANDE DATE 31/07/2007 AUTEUR SALMONA L.SALMONA # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -6191,9 +6186,11 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant b_fatigue_multi =BLOC(condition = "TYPE_CALCUL == 'FATIGUE_MULTI'", fr="Plan critique dans le cas de la fatigue multiaxiale à grand nombre de cycles.", + regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),), TYPE_CHARGE =SIMP(statut='o',typ='TXM',into=("PERIODIQUE","NON_PERIODIQUE") ), OPTION =SIMP(statut='o',typ='TXM',into=("DOMA_ELGA","DOMA_NOEUD") ), RESULTAT =SIMP(statut='o',typ=(evol_elas, evol_noli) ), + MAILLAGE =SIMP(statut='o',typ=maillage_sdaster ), CHAM_MATER =SIMP(statut='o',typ=(cham_mater) ), GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**' ), MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**' ), @@ -6215,9 +6212,6 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant DELTA_OSCI =SIMP(statut='f',typ='R',defaut= 0.0E+0), ), ), - b_fati_grmano =BLOC(condition = "(GROUP_MA != None or MAILLE != None or GROUP_NO != None or NOEUD != None)", - MAILLAGE =SIMP(statut='o',typ=maillage_sdaster ), - ), ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), @@ -7967,7 +7961,7 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod, INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ), TITRE =SIMP(statut='f',typ='TXM',max='**' ), ) ; -#& MODIF COMMANDE DATE 03/01/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/05/2008 AUTEUR MACOCCO K.MACOCCO # RESPONSABLE MCOURTOI M.COURTOIS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -7989,33 +7983,14 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod, CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster, reentrant='n',fr="Crée un maillage à partir d'un maillage existant", UIinfo={"groupes":("Maillage",)}, - regles=(EXCLUS('ECLA_PG','CREA_MAILLE'), - EXCLUS('ECLA_PG','CREA_GROUP_MA'), - EXCLUS('ECLA_PG','DETR_GROUP_MA'), - EXCLUS('ECLA_PG','MODI_MAILLE'), - EXCLUS('ECLA_PG','LINE_QUAD'), - EXCLUS('ECLA_PG','CREA_FISS'), - EXCLUS('ECLA_PG','COQU_VOLU'), - EXCLUS('LINE_QUAD','MODI_MAILLE'), - EXCLUS('LINE_QUAD','CREA_MAILLE'), - EXCLUS('LINE_QUAD','CREA_GROUP_MA'), - EXCLUS('LINE_QUAD','DETR_GROUP_MA'), - EXCLUS('LINE_QUAD','CREA_FISS'), - EXCLUS('LINE_QUAD','COQU_VOLU'), - EXCLUS('CREA_FISS','MODI_MAILLE'), - EXCLUS('CREA_FISS','CREA_MAILLE'), - EXCLUS('CREA_FISS','CREA_GROUP_MA'), - EXCLUS('CREA_FISS','DETR_GROUP_MA'), - EXCLUS('CREA_FISS','COQU_VOLU'), - EXCLUS('COQU_VOLU','MODI_MAILLE'), - EXCLUS('COQU_VOLU','CREA_MAILLE'), - EXCLUS('COQU_VOLU','CREA_GROUP_MA'), - EXCLUS('COQU_VOLU','DETR_GROUP_MA'), - ), - + + regles=(EXCLUS('COQU_VOLU', 'CREA_FISS', 'CREA_GROUP_MA', 'CREA_MAILLE', 'CREA_POI1', + 'DETR_GROUP_MA', 'ECLA_PG', 'LINE_QUAD', 'MODI_MAILLE', + 'QUAD_LINE', 'REPERE'),), + # le MAILLAGE est inutile si ECLA_PG MAILLAGE =SIMP(statut='f',typ=maillage_sdaster ), - + CREA_POI1 =FACT(statut='f',max='**',fr="Création de mailles de type POI1 à partir de noeuds", regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD' ),), NOM_GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), @@ -19092,7 +19067,7 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=macro_matr_ajou_ops,sd_prod=macro NOEUD_DOUBLE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), AVEC_MODE_STAT =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), ) -#& MODIF COMMANDE DATE 12/06/2006 AUTEUR CIBHHLV L.VIVAN +#& MODIF COMMANDE DATE 06/02/2008 AUTEUR MACOCCO K.MACOCCO # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -19150,9 +19125,19 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops, CHAR_CINE =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ), NUME_DDL =SIMP(statut='o',typ=(nume_ddl_sdaster,CO)), SOLVEUR =FACT(statut='d', - METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT", - into=("LDLT","MULT_FRONT","GCPC","MUMPS")), - RENUM =SIMP(statut='f',typ='TXM',into=("SANS","RCMK","MD","MDA","METIS")), + METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",), + b_mult_front =BLOC(condition="METHODE=='MULT_FRONT'",fr="Paramètres associés à la méthode multifrontale", + RENUM =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ), + ), + b_ldlt =BLOC(condition="METHODE=='LDLT'",fr="Paramètres associés à la méthode LDLT", + RENUM =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK" ), + ), + b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS", + RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")), + ), + b_gcpc =BLOC(condition="METHODE=='GCPC'",fr="Paramètres associés à la méthode gradient conjugué", + RENUM =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK" ), + ), ), MATR_ASSE =FACT(statut='o',max='**', @@ -19190,7 +19175,7 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops, TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), ) ; -#& MODIF COMMANDE DATE 06/06/2007 AUTEUR SALMONA L.SALMONA +#& MODIF COMMANDE DATE 28/05/2008 AUTEUR GREFFET N.GREFFET # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -19221,7 +19206,7 @@ MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops, ), PROJET =SIMP(statut='o',typ='TXM'), REPERTOIRE =SIMP(statut='f',typ='TXM'), - VERSION =SIMP(statut='f',typ='TXM',into=("V1_3","V1_4",),defaut="V1_3"), + VERSION =SIMP(statut='f',typ='TXM',into=("V1_3","V1_4",),defaut="V1_4"), UNITE_IMPR_ASTER=SIMP(statut='f',typ='I',defaut=25), UNITE_OPTI_MISS =SIMP(statut='f',typ='I',defaut=26), UNITE_MODELE_SOL=SIMP(statut='f',typ='I',defaut=27), @@ -21466,7 +21451,7 @@ POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster, MODELE = SIMP(statut='o',typ=modele_sdaster), TITRE = SIMP(statut='f',typ='TXM',max='**'), ); -#& MODIF COMMANDE DATE 03/10/2006 AUTEUR CIBHHLV L.VIVAN +#& MODIF COMMANDE DATE 21/02/2008 AUTEUR VIVAN L.VIVAN # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -21618,8 +21603,8 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster, NUME_SITU =SIMP(statut='o',typ='I',fr="numéro de la situation" ), NOM_SITU =SIMP(statut='f',typ='TXM',fr="nom de la situation" ), COMBINABLE =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ), - NUME_GROUPE =SIMP(statut='o',typ='I',fr="numéro du groupe de la situation" ), - NUME_PASSAGE =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ), + NUME_GROUPE =SIMP(statut='f',typ='I',max=2, + fr="numéro du groupe de la situation,si 2 numéros cette situation est une situation de passage" ), NUME_RESU_THER =SIMP(statut='f',typ='I',max='**',fr="numeros de transitoires thermiques" ), CHAR_ETAT_A =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ), CHAR_ETAT_B =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ), @@ -21706,8 +21691,8 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster, NUME_SITU =SIMP(statut='o',typ='I',fr="numéro de la situation" ), NOM_SITU =SIMP(statut='f',typ='TXM',fr="nom de la situation" ), COMBINABLE =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ), - NUME_GROUPE =SIMP(statut='o',typ='I',fr="numéro du groupe de la situation" ), - NUME_PASSAGE =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ), + NUME_GROUPE =SIMP(statut='f',typ='I',max=2, + fr="numéro du groupe de la situation,si 2 numéros cette situation est une situation de passage" ), NUME_RESU_THER =SIMP(statut='f',typ='I',max='**',fr="numeros de transitoires thermiques" ), CHAR_ETAT_A =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ), CHAR_ETAT_B =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ), diff --git a/Aster/Cata/cataSTA8/ops.py b/Aster/Cata/cataSTA8/ops.py index 6a3e9c19..ce03f042 100644 --- a/Aster/Cata/cataSTA8/ops.py +++ b/Aster/Cata/cataSTA8/ops.py @@ -1,4 +1,4 @@ -#@ MODIF ops Cata DATE 24/10/2006 AUTEUR DURAND C.DURAND +#@ MODIF ops Cata DATE 04/06/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -28,6 +28,7 @@ import pickle import Accas from Accas import ASSD + try: import aster # Si le module aster est présent, on le connecte @@ -149,6 +150,9 @@ def POURSUITE(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args): if isinstance(pickle_context[elem],ASSD) : pickle_context[elem].jdc=self.jdc pickle_context[elem].parent=self.jdc + # pour que sds_dict soit cohérent avec g_context + self.jdc.sds_dict[elem] = pickle_context[elem] + assert elem == pickle_context[elem].nom if elem in self.g_context.keys(): poursu_class=self.g_context[elem].__class__ if poursu_class!=pickle_class : @@ -209,7 +213,8 @@ def POURSUITE_context(self,d): # On ajoute directement les concepts dans le contexte du jdc # XXX est ce que les concepts ne sont pas ajoutés plusieurs fois ?? for v in self.g_context.values(): - if isinstance(v,ASSD) : self.jdc.sds.append(v) + if isinstance(v,ASSD) : + self.jdc.sds.append(v) def build_poursuite(self,**args): """ @@ -261,6 +266,8 @@ def detruire(self,d): """ Cette fonction est la fonction op_init de la PROC DETRUIRE """ + if hasattr(self,"executed") and self.executed == 1: + return if self["CONCEPT"]!=None: sd=[] for mc in self["CONCEPT"]: diff --git a/Aster/Cata/cataSTA8c_clefs_docu b/Aster/Cata/cataSTA8c_clefs_docu index 355eb0dd..f5051ce0 100644 --- a/Aster/Cata/cataSTA8c_clefs_docu +++ b/Aster/Cata/cataSTA8c_clefs_docu @@ -9,17 +9,17 @@ AFFE_CHAR_THER_F:U4.44.02-h AFFE_CHAR_THER:U4.44.02-h AFFE_CHAR_THER_F:U4.44.02-i AFFE_CHAR_THER:U4.44.02-i -AFFE_MATERIAU:U4.43.03-i2 -AFFE_MODELE:U4.41.01-i2 +AFFE_MATERIAU:U4.43.03-i +AFFE_MODELE:U4.41.01-i AIDE:U4.02.01-i ASSE_MAILLAGE:U4.23.03-h ASSE_MATRICE:U4.61.22-i ASSE_MATR_GENE:U4.65.04-g -ASSE_VECTEUR:U4.61.23-h +ASSE_VECTEUR:U4.61.23-i ASSE_VECT_GENE:U4.65.05-g CALC_AMOR_MODAL:U4.52.13-g CALC_CHAM_ELEM:U4.81.03-i -CALC_CHAR_CINE:U4.61.03-h1 +CALC_CHAR_CINE:U4.61.03-h CALC_CHAR_SEISME:U4.63.01-h CALC_ELEM:U4.81.01-i CALC_FATIGUE:U4.83.02-f @@ -28,28 +28,27 @@ CALC_FONCTION:U4.32.04-i CALC_FONC_INTERP:U4.32.01-g CALC_FORC_AJOU:U4.66.03-c CALC_G:U4.82.03-h -CALC_G_LOCAL_T:U4.82.04-h1 CALC_G_THETA_T:U4.82.03-g CALC_INTE_SPEC:U4.36.03-h CALC_MATR_AJOU:U4.66.01-f -CALC_MATR_ELEM:U4.61.01-h +CALC_MATR_ELEM:U4.61.01-i CALC_META:U4.85.01-d CALC_NO:U4.81.02-h -CALC_PRECONT:U4.42.05-a +CALC_PRECONT:U4.42.05-b CALC_TABLE:U4.33.03-a CALC_THETA:U4.82.02-g -CALC_VECT_ELEM:U4.61.02-h +CALC_VECT_ELEM:U4.61.02-i COMB_CHAM_ELEM:U4.72.03-g COMB_CHAM_NO:U4.72.02-h COMB_FOURIER:U4.83.31-f COMB_MATR_ASSE:U4.72.01-i COMB_SISM_MODAL:U4.84.01-g COMP_INCR:U4.51.11-b -CREA_CHAMP:U4.72.04-d1 -CREA_MAILLAGE:U4.23.02-f1 +CREA_CHAMP:U4.72.04-d +CREA_MAILLAGE:U4.23.02-f CREA_RESU:U4.44.12-g CREA_TABLE:U4.33.02-b -DEBUT:U4.11.01-h +DEBUT:U4.11.01-i DEFI_ CONSTANTE:U4.31.01-i DEFI_BASE_MODALE:U4.64.02-h1 DEFI_CABLE_BP:U4.42.04-d @@ -59,15 +58,15 @@ DEFI_COQU_MULT:U4.42.03-h DEFI_FICHIER:U4.12.03-b DEFI_FISS_XFEM:U4.82.08-b DEFI_FLUI_STRU:U4.25.01-g -DEFI_FONCTION:U4.31.02-i1 +DEFI_FONCTION:U4.31.02-i DEFI_FONC_ELEC:U4.mk.10-h DEFI_FONC_FLUI:U4.35.01-f DEFI_FOND_FISS:U4.82.01-h DEFI_GROUP:U4.22.01-h DEFI_INTERF_DYNA:U4.64.01-h DEFI_INTE_SPEC:U4.36.02-h -DEFI_LIST_ENTI:U4.34.02-h -DEFI_LIST_REEL:U4.34.01-h +DEFI_LIST_ENTI:U4.34.02-i +DEFI_LIST_REEL:U4.34.01-i DEFI_MAILLAGE:U4.23.01-h DEFI_MATERIAU:U4.43.01-i DEFI_MODELE_GENE:U4.65.02-g @@ -76,8 +75,7 @@ DEFI_OBSTACLE:U4.44.21-h DEFI_PARA_SENSI:U4.31.06-c DEFI_PART_FETI:U4.23.05-a1 DEFI_SPEC_TURB:U4.44.31-f -DEFI_SQUELETTE:U4.24.01-h -DEFI_TEXTURE:U4.43.05-c +DEFI_SQUELETTE:U4.24.01-i DEFI_THER_JOULE:U4.mk.20-f DEFI_TRC:U4.43.04-h DEPL_INTERNE:U4.62.02-h @@ -90,22 +88,20 @@ DYNA_NON_LINE:U4.53.01-h DYNA_SPEC_MODAL:U4.53.23-f DYNA_TRAN_EXPLI:U4.53.03-b DYNA_TRAN_MODAL:U4.53.21-h -ENGENDRE_TEST:U4.92.11-d +ENGENDRE_TEST:U4.92.11-e EXEC_LOGICIEL:U7.00.01-d EXTR_MODE:U4.52.12-f EXTR_RESU:U4.71.04-e -EXTR_TABLE:U4.71.05-a +EXTR_TABLE:U4.71.05-b FACT_GRAD:U4.55.03-h -FACT_LDLT:U4.55.01-i1 +FACT_LDLT:U4.55.01-i FIN:U4.11.02-i FONC_FLUI_STRU:U4.35.02-f FORMULE:U4.31.05-g GENE_FONC_ALEA:U4.36.05-h GENE_MATR_ALEA:U4.36.06-c -GENE_VARI_ALEA:U4.36.07-b -IMPR_CLASSI:U7.04.21-d +GENE_VARI_ALEA:U4.36.07-c IMPR_CO:U4.91.11-i -IMPR_FICO_HOMA:U7.04.01-c IMPR_FONCTION:U4.33.01-g IMPR_GENE:U4.91.02-f IMPR_JEVEUX:U4.91.21-i @@ -114,16 +110,16 @@ IMPR_MATRICE:U7.04.32-f IMPR_MISS3D:U7.04.11-f IMPR_MISS_3D:U7.04.11-e IMPR_OAR:U7.04.51-b -IMPR_RESU:U4.91.01-h +IMPR_RESU:U4.91.01-i IMPR_STURM:U4.52.01-i -IMPR_TABLE:U4.91.03-e +IMPR_TABLE:U4.91.03-f INCLUDE:U4.13.01-h INCLUDE_MATERIAU:U4.43.02-d INFO_EXEC_ASTER:U4.13.04-b INFO_FONCTION:U4.32.05-a INTE_MAIL_2D:U4.81.11-h INTE_MAIL_3D:U4.81.12-h -LIRE_CHAMP:U7.02.02-d1 +LIRE_CHAMP:U7.02.02-d LIRE_FONCTION:U4.32.02-h LIRE_FORC_MISS:U7.02.33-a LIRE_IMPE_MISS:U7.02.32-a @@ -145,32 +141,31 @@ MACR_ASCOUF_CALC:U4.cf.20-d MACR_ASCOUF_MAIL:U4.cf.10-d MACR_ASPIC_CALC:U4.pc.20-d MACR_ASPIC_MAIL:U4.pc.10-d -MACR_CABRI_CALC:U4.cb.20-a -MACR_CABRI_MAIL:U4.cb.10-a +MACR_CABRI_CALC:U4.cb.20-b +MACR_CABRI_MAIL:U4.cb.10-b MACR_CARA_POUTRE:U4.42.02-f MACR_ECLA_PG:U4.44.14-b MACR_ELEM_DYNA:U4.65.01-g MACR_ELEM_STAT:U4.62.01-h -MACR_FIABILITE:U7.03.31-a +MACR_FIABILITE:U7.03.31-b MACR_FIAB_IMPR:U7.04.41-b MACR_INFO_MAIL:U7.03.02-d MACR_LIGN_COUPE:U4.81.13-c MACR_RECAL:U4.73.02-c +MACR_SPECTRE:U4.32.11-a MAC_MODES:U4.52.15-a MAJ_CATA:U4.15.01-g -MECA_STATIQUE:U4.51.01-i1 +MECA_STATIQUE:U4.51.01-i MEMO_NOM_SENSI:U4.31.07-c -MODE_INTER_CYCL:U4.52.05-h -MODE_ITER_CYCL:U4.52.05-g +MODE_ITER_CYCL:U4.52.05-h MODE_ITER_INV:U4.52.04-i MODE_ITER_SIMULT:U4.52.03-h MODE_STATIQUE:U4.52.14-h MODI_BASE_MODALE:U4.66.21-f MODI_MAILLAGE:U4.23.04-f MODI_MODELE_XFEM:U4.41.11-b -MODI_OBSTACLE:U4.44.22-c +MODI_OBSTACLE:U4.44.22-d MODI_REPERE:U4.74.01-c -MODY_OBSTACLE:U4.44.22-d NORM_MODE:U4.52.11-h NUME_DDL:U4.61.11-i NUME_DDL_GENE:U4.65.03-g @@ -187,10 +182,10 @@ POST_K_TRANS:U4.82.30-a POST_MAIL_XFEM:U4.82.21-a POST_RCCM:U4.83.11-f POST_RELEVE_T:U4.81.21-g1 -POST_USURE:U4.84.05-f +POST_USURE:U4.84.05-g POST_ZAC:U4.83.21-e POURSUITE:U4.11.03-i -PRE_GIBI:U7.01.11-h +PRE_GIBI:U7.01.11-i PRE_GMSH:U7.01.31-c PRE_IDEAS:U7.01.01-i PROD_MATR_CHAM:U4.72.06-e @@ -203,19 +198,20 @@ PROPA_XFEM:U4.82.11-a RECA_WEIBULL:U4.82.06-d RECU_FONCTION:U4.32.03-h RECU_GENE:U4.71.03-h -RECU_TABLE:U4.71.02-c +RECU_TABLE:U4.71.02-d RESO_GRAD:U4.55.04-h -RESO_LDLT:U4.55.02-i1 +RESO_LDLT:U4.55.02-i REST_BASE_PHYS:U4.63.21-h REST_SPEC_PHYS:U4.63.22-f SENSIBILITE:U4.50.02-c -SOLVEUR:U4.50.01-f2 +SIMU_POINT_MAT:U4.51.12-a +SOLVEUR:U4.50.01-f STANLEY:U4.81.31-c STAT_NON_LINE:U4.51.03-h TEST_FICHIER:U4.92.04-b TEST_FONCTION:U4.92.02-h TEST_RESU:U4.92.01-i -TEST_TABLE:U4.92.03-e1 +TEST_TABLE:U4.92.03-e THER_LINEAIRE:U4.54.01-i THER_NON_LINE:U4.54.02-g THER_NON_LINE_MO:U4.54.03-e \ No newline at end of file diff --git a/Aster/Cata/cataSTA9/Macro/Sensibilite.py b/Aster/Cata/cataSTA9/Macro/Sensibilite.py index f9dd3530..abd3f873 100644 --- a/Aster/Cata/cataSTA9/Macro/Sensibilite.py +++ b/Aster/Cata/cataSTA9/Macro/Sensibilite.py @@ -1,8 +1,8 @@ -#@ MODIF Sensibilite Macro DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF Sensibilite Macro DATE 19/11/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -24,15 +24,23 @@ Module traite de la gestion des concepts sensibles : - corps de la macro MEMO_NOM_SENSI """ -# proctection eficas +# protection pour eficas try: import aster - from Utilitai.Utmess import U2MESS as UTMESS + from Utilitai.Utmess import UTMESS except: pass _VIDE_ = '????????' +#------------------------------------------------------------------------------- +def _force_list(obj): + """Impose le type list.""" + if obj is not None and not type(obj) in (list, tuple): + obj = (obj,) + return obj + + #------------------------------------------------------------------------------- class MEMORISATION_SENSIBILITE: """Classe pour la mémorisation des concepts sensibles et leurs dérivées. @@ -43,6 +51,8 @@ class MEMORISATION_SENSIBILITE: self._debug = debug # dictionnaire de correspondance : ('nom concept', 'nom parasensi') : 'nom compose' self._corr = {} + # idem que _corr mais, pour les commandes principales, on stocke sd elle-meme + self._cosd = {} self._nsnp = {} # l'inverse # dictionnaire donnant les 3 tuples de mots-clés, valeurs, mots-clés facteurs self._mcle = {} @@ -64,15 +74,22 @@ class MEMORISATION_SENSIBILITE: key = self.key(nosimp, nopase) if self._corr.has_key(key): UTMESS('F', 'SENSIBILITE_90', valk=(nosimp, nopase)) - limocl = limocl or () - livale = livale or () - limofa = limofa or () + limocl = _force_list(limocl) or () + livale = _force_list(livale) or () + limofa = _force_list(limofa) or () if not (len(limocl) == len(livale) == len(limofa)): UTMESS('F', 'SENSIBILITE_97') if nocomp is None: nocomp = aster.get_nom_concept_unique('S') + # on ne conserve que le nom (au moins pour le moment) + if type(nocomp) != str: + sd = nocomp + nocomp = nocomp.nom + else: + sd = None self._corr[key] = nocomp + self._cosd[nocomp] = sd self._nsnp[nocomp] = key self._mcle[key] = (limocl, livale, limofa) @@ -153,6 +170,12 @@ class MEMORISATION_SENSIBILITE: return tuple(res) + def get_nom_sd_princ(self): + """Retourne la liste des noms des sd dérivées produites par les commandes principales. + """ + return tuple(self._cosd.keys()) + + def delete(self, nosimp, nopase): """On récupère les mots-clés associés à un couple ('nom concept', 'nom parasensi') """ @@ -160,6 +183,7 @@ class MEMORISATION_SENSIBILITE: nocomp = self.get_nocomp(nosimp, nopase) if nocomp != _VIDE_: del self._corr[key] + del self._cosd[nocomp] del self._mcle[key] del self._nsnp[nocomp] @@ -174,20 +198,29 @@ def memo_nom_sensi_ops(self, NOM, **args): Faut-il traiter les mots-clés NOM_ZERO et NOM_UN ? Il me semble que NOM_COMPOSE est toujours présent : obligatoire """ + import aster + ier=0 # La macro compte pour 1 dans la numerotation des commandes self.set_icmd(1) - - # boucle sur les occurrences du mot-clé facteur NOM - for occ in NOM: - dNOM = occ.cree_dict_valeurs(occ.mc_liste) - - nosimp = dNOM['NOM_SD'] - nopase = dNOM['PARA_SENSI'].nom - nocomp = dNOM['NOM_COMPOSE'] - - self.jdc.memo_sensi.set(nosimp, nopase, nocomp, - dNOM['MOT_CLE'], dNOM['VALEUR'], dNOM['MOT_FACT'], - verbose=True) - + + dNOM = NOM[0].cree_dict_valeurs(NOM[0].mc_liste) + + nosimp = dNOM['NOM_SD'] + nopase = dNOM['PARA_SENSI'].nom + nocomp = dNOM['NOM_COMPOSE'] + + self.jdc.memo_sensi.set(nosimp, nopase, nocomp, + dNOM['MOT_CLE'], dNOM['VALEUR'], dNOM['MOT_FACT'], + verbose=True) + + # s'il faut déclarer le concept dérivé dans le jdc + if dNOM['TYPE_SD_DERIV']: + self.DeclareOut('nocomp', dNOM['NOM_COMPOSE']) + # enregistrement dans le tableau des concepts jeveux + icmdt = aster.co_register_jev(dNOM['NOM_COMPOSE'].nom, dNOM['TYPE_SD_DERIV'].upper(), 'MEMO_NOM_SENSI') + return ier + + + diff --git a/Aster/Cata/cataSTA9/Macro/calc_fonction_ops.py b/Aster/Cata/cataSTA9/Macro/calc_fonction_ops.py index 2d768fa6..9041ca56 100644 --- a/Aster/Cata/cataSTA9/Macro/calc_fonction_ops.py +++ b/Aster/Cata/cataSTA9/Macro/calc_fonction_ops.py @@ -1,4 +1,4 @@ -#@ MODIF calc_fonction_ops Macro DATE 30/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF calc_fonction_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -20,6 +20,7 @@ import copy import traceback +import os from math import pi @@ -32,7 +33,7 @@ def tocomplex(arg): # ----------------------------------------------------------------------------- def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP, SPEC_OSCI,ABS,COMB,COMB_C,COMPOSE,EXTRACTION, - ENVELOPPE,ASSE,CORR_ACCE,PUISSANCE,INVERSE, + ENVELOPPE,FRACTILE,ASSE,CORR_ACCE,PUISSANCE,INVERSE, NOM_PARA,NOM_RESU,INTERPOL,PROL_DROITE, PROL_GAUCHE,NOM_PARA_FONC,INTERPOL_FONC,PROL_DROITE_FONC, PROL_GAUCHE_FONC,INFO,**args): @@ -41,11 +42,11 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP, """ ier=0 from Utilitai.t_fonction import t_fonction, t_fonction_c, t_nappe, homo_support_nappe, \ - FonctionError, ParametreError, InterpolationError, ProlongementError + FonctionError, ParametreError, InterpolationError, ProlongementError, enveloppe, fractile from Utilitai import liss_enveloppe from Accas import _F from Cata.cata import nappe_sdaster,fonction_sdaster,fonction_c - from Utilitai.Utmess import UTMESS, U2MESS + from Utilitai.Utmess import UTMESS from Numeric import alltrue,less,array,reshape,cos,sin,exp,sqrt from Numeric import choose,zeros,Float import aster_fonctions @@ -184,16 +185,40 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP, __ff=list_fonc[0].l_fonc[i] for nap in list_fonc[1:] : ctxt.f = nap.l_fonc[i].nom - __ff=__ff.enveloppe(nap.l_fonc[i], ENVELOPPE['CRITERE']) + __ff=enveloppe([__ff,nap.l_fonc[i]], ENVELOPPE['CRITERE']) l_fonc_f.append(__ff) __ex=t_nappe(vale_para,l_fonc_f,para) elif isinstance(self.sd,fonction_sdaster): for f in l_env: list_fonc.append(f.convert()) + ctxt.f = [f.nom for f in list_fonc] + __ex = enveloppe(list_fonc, ENVELOPPE['CRITERE']) + ### + if (FRACTILE != None): + list_fonc=[] + l_frac=FRACTILE['FONCTION'] + if type(l_frac) not in EnumTypes: + l_frac=(l_frac,) + if isinstance(self.sd,nappe_sdaster): + for f in l_frac: + list_fonc.append(f.convert()) + ctxt.f = [f.nom for f in list_fonc] + list_fonc = homo_support_nappe(list_fonc) + vale_para=list_fonc[0].vale_para + para =list_fonc[0].para + l_fonc_f =[] + for i in range(len(vale_para)): + ctxt.f = [nap.l_fonc[i].nom for nap in list_fonc] + __ff=fractile([nap.l_fonc[i] for nap in list_fonc], FRACTILE['FRACT']) + l_fonc_f.append(__ff) + __ex=t_nappe(vale_para,l_fonc_f,para) + elif isinstance(self.sd,fonction_sdaster): + for f in l_frac: + list_fonc.append(f.convert()) __ex=list_fonc[0] for f in list_fonc[1:]: ctxt.f = [__ex.nom, f.nom] - __ex = __ex.enveloppe(f, ENVELOPPE['CRITERE']) + __ex = fractile(list_fonc, FRACTILE['FRACT']) ### if (CORR_ACCE != None): __ex=CORR_ACCE['FONCTION'].convert() @@ -230,7 +255,7 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP, if (SPEC_OSCI != None): if SPEC_OSCI['AMOR_REDUIT']==None: l_amor=[0.02, 0.05, 0.1] - UTMESS('I','CALC_FONCTION',' : génération par défaut de 3 amortissements :'+str(l_amor)) + UTMESS('I','FONCT0_31',valr=l_amor) else: if type(SPEC_OSCI['AMOR_REDUIT']) not in EnumTypes : l_amor=[SPEC_OSCI['AMOR_REDUIT'],] @@ -257,7 +282,7 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP, texte=[] for i in range(len(l_freq)/5) : texte.append(' %f %f %f %f %f' %tuple(l_freq[i*5:i*5+5])) - UTMESS('I','CALC_FONCTION',' : génération par défaut de 150 fréquences :\n'+'\n'.join(texte)) + UTMESS('I','FONCT0_32',valk=os.linesep.join(texte)) elif SPEC_OSCI['LIST_FREQ']!=None: l_freq=SPEC_OSCI['LIST_FREQ'].Valeurs() elif SPEC_OSCI['FREQ']!=None: @@ -265,18 +290,18 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP, l_freq=[SPEC_OSCI['FREQ'],] else: l_freq= SPEC_OSCI['FREQ'] + if min(l_freq)<1.E-10 : + UTMESS('S','FONCT0_43') if abs(SPEC_OSCI['NORME'])<1.E-10 : - UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, la norme ne peut etre nulle') + UTMESS('S','FONCT0_33') if SPEC_OSCI['NATURE_FONC']!='ACCE' : - UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, le type de la fonction doit etre ACCE') + UTMESS('S','FONCT0_34') if SPEC_OSCI['METHODE']!='NIGAM' : - UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, seule la méthode NIGAM est codée') + UTMESS('S','FONCT0_35') eps=1.e-6 for amor in l_amor : if amor>(1-eps) : - UTMESS('S','CALC_FONCTION',' : SPEC_OSCI, la méthode choisie '\ - 'suppose des amortissements sous-critiques, amor<1.') - + UTMESS('S','FONCT0_36') __ff=SPEC_OSCI['FONCTION'].convert() ctxt.f = __ff.nom @@ -318,13 +343,13 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP, __ex=t_nappe(vale_para=sp_lisse.listAmor,l_fonc=l_fonc,para=__ff.para) except InterpolationError, msg: - U2MESS('F', 'FONCT0_27', valk=(ctxt.f, str(msg))) + UTMESS('F', 'FONCT0_27', valk=(ctxt.f, str(msg))) except ParametreError, msg: - U2MESS('F', 'FONCT0_28', valk=(ctxt.f, str(msg))) + UTMESS('F', 'FONCT0_28', valk=(ctxt.f, str(msg))) except ProlongementError, msg: - U2MESS('F', 'FONCT0_29', valk=(ctxt.f, str(msg))) + UTMESS('F', 'FONCT0_29', valk=(ctxt.f, str(msg))) except FonctionError, msg: - U2MESS('F', 'FONCT0_30', valk=(ctxt.f, str(msg), traceback.format_exc())) + UTMESS('F', 'FONCT0_30', valk=(ctxt.f, str(msg), traceback.format_exc())) ### creation de la fonction produite par appel à DEFI_FONCTION ### on récupère les paramètres issus du calcul de __ex diff --git a/Aster/Cata/cataSTA9/Macro/calc_precont_ops.py b/Aster/Cata/cataSTA9/Macro/calc_precont_ops.py index afe030a7..1b178633 100644 --- a/Aster/Cata/cataSTA9/Macro/calc_precont_ops.py +++ b/Aster/Cata/cataSTA9/Macro/calc_precont_ops.py @@ -1,21 +1,21 @@ -#@ MODIF calc_precont_ops Macro DATE 10/10/2006 AUTEUR REZETTE C.REZETTE +#@ MODIF calc_precont_ops Macro DATE 31/03/2008 AUTEUR ASSIRE A.ASSIRE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== @@ -24,8 +24,8 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, CABLE_BP,CABLE_BP_INACTIF, COMP_INCR,ETAT_INIT,NEWTON,RECH_LINEAIRE, - CONVERGENCE,INCREMENT,SOLVEUR,SOLV_NON_LOCAL, - LAGR_NON_LOCAL,INFO,TITRE,**args): + CONVERGENCE,INCREMENT,SOLVEUR, + INFO,TITRE,**args): """ @@ -37,7 +37,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, import types from Accas import _F from Noyau.N_utils import AsType - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS ier=0 # On importe les definitions des commandes a utiliser dans la macro @@ -56,26 +56,26 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, # La macro compte pour 1 dans la numerotation des commandes self.set_icmd(1) - # Le concept sortant (de type evol_noli) est nomme RES dans + # Le concept sortant (de type evol_noli) est nomme RES dans # le contexte de la macro self.DeclareOut('RES',self.sd) # ------------------------------------------------------------- - # 1. CREATION DES MOTS-CLES ET CONCEPTS POUR LES STAT_NON_LINE + # 1. CREATION DES MOTS-CLES ET CONCEPTS POUR LES STAT_NON_LINE # ------------------------------------------------------------ # 1.1 Recuperation de la liste d'instants, de l'instant initial et final # Creation de la nouvelle liste d'instants - # ---------------------------------------------------------- + # ---------------------------------------------------------- dIncrement=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste) - + __prec = dIncrement['PRECISION'] __L0 = dIncrement['LIST_INST'] __L1 = __L0.Valeurs() - + # Traitement de l'etat initial if ETAT_INIT: dEtatInit=ETAT_INIT[0].cree_dict_valeurs(ETAT_INIT[0].mc_liste) @@ -85,7 +85,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, __EVINIT = dEtatInit['EVOL_NOLI'] else : dEtatInit=None - + # Test de la presence de reuse= if self.reuse == None: dReuse=None @@ -110,19 +110,19 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, # Teste si INST_INIT est bien plus petit que INST_FIN if __TMAX <= __TMIN: - UTMESS('F','CALC_PRECONT','INST_FIN PLUS PETIT QUE INST_INIT') + UTMESS('F','CABLE0_1') - # Cree la liste d'instant __L2 allant de __TMIN a __TMAX et contenant + # Cree la liste d'instant __L2 allant de __TMIN a __TMAX et contenant # un instant supplementaire __TINT __L2=[] for m in __L1: if m>=__TMIN and m<=__TMAX: __L2.append(m) - + __TINT = (9.*__L2[-1] + __L2[-2])/10. __L2[-1:-1] = [__TINT] - # __LST0 est la liste d'instants utilisée pour l'etape 1 + # __LST0 est la liste d'instants utilisée pour l'etape 1 __LST0=DEFI_LIST_REEL( DEBUT = __TMIN, INTERVALLE = _F(JUSQU_A = __TMAX, NOMBRE = 1),) @@ -133,7 +133,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, VALE=(__TMIN,0.0,__TINT,1.0,__TMAX,1.0),); for i in dIncrement.keys(): - if dIncrement[i]==None : del dIncrement[i] + if dIncrement[i]==None : del dIncrement[i] dIncrement['LIST_INST']= __LST dIncrement['INST_FIN'] = __TINT @@ -160,21 +160,6 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, if dRech_lin[i]==None : del dRech_lin[i] else : dRech_lin=None - - if SOLV_NON_LOCAL: - dSolv_nonloc=SOLV_NON_LOCAL[0].cree_dict_valeurs(SOLV_NON_LOCAL[0].mc_liste) - for i in dSolv_nonloc.keys(): - if dSolv_nonloc[i]==None : del dSolv_nonloc[i] - else : - dSolv_nonloc=None - - if LAGR_NON_LOCAL: - dLagr_nonloc=LAGR_NON_LOCAL[0].cree_dict_valeurs(LAGR_NON_LOCAL[0].mc_liste) - for i in dLagr_nonloc.keys(): - if dLagr_nonloc[i]==None : del dLagr_nonloc[i] - else : - dLagr_nonloc=None - # 1.3 Creation des mots-cles pour les 3 AFFE_CHAR_MECA @@ -213,11 +198,11 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, SIGM_BPEL = 'OUI', RELA_CINE = 'OUI',) ) - # Creation de __GROUP_MA_A : liste des noms des cables contenus - # dans chaque concept CABLE_BP = cables a activer + # Creation de __GROUP_MA_A : liste des noms des cables contenus + # dans chaque concept CABLE_BP = cables a activer __TCAB = RECU_TABLE(CO=mcabl,NOM_TABLE='CABLE_BP'); __nb = 0 - while 1: + while 1: try: Result[__nb][0] = __TCAB['NOM_CABLE',__nb+1] __CAB = __TCAB['NOM_CABLE',__nb+1] @@ -232,14 +217,14 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, break if i == len(__GROUP_MA_A): __GROUP_MA_A.append(__CAB) - - __nb = __nb + 1 + + __nb = __nb + 1 Result.append([None]*1) # Si on a lu toutes les valeurs alors on sort de la boucle except KeyError: break - # Creation de __GROUP_MA_I : liste des noms des cables contenus + # Creation de __GROUP_MA_I : liste des noms des cables contenus # dans chaque CABLE_BP_INACTIF # __GROUP_MA_CABLE = liste des cables actifs et inactifs Result = [[None]*1] @@ -249,7 +234,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, for mcabl in CABLE_BP_INACTIF: __TCA0 = RECU_TABLE(CO=mcabl,NOM_TABLE='CABLE_BP'); __nb = 0 - while 1: + while 1: try: Result[__nb][0] = __TCA0['NOM_CABLE',__nb+1] __CA0 = __TCA0['NOM_CABLE',__nb+1] @@ -264,8 +249,8 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, break if i == len(__GROUP_MA_I): __GROUP_MA_I.append(__CA0) - - __nb = __nb + 1 + + __nb = __nb + 1 Result.append([None]*1) # Si on a lu toutes les valeurs alors on sort de la boucle except KeyError: @@ -276,12 +261,12 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, # Creation de mots-cles pour les AFFE_CHAR_MECA motscle6['RELA_CINE_BP'].append(_F(CABLE_BP=mcabl, SIGM_BPEL = 'NON', - RELA_CINE = 'OUI',) ) - + RELA_CINE = 'OUI',) ) + __GROUP_MA_CABLES = __GROUP_MA_A + __GROUP_MA_I - # 1.4 Creation des mots-clés facteurs COMP_INCR + # 1.4 Creation des mots-clés facteurs COMP_INCR # pour étape 2 (dComp_incr0) et étape 3 (dComp_incr1) # ------------------------------------------------------ @@ -301,7 +286,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, dComp_incr0=copy.copy(dComp_incr) dComp_incr1=copy.copy(dComp_incr) - + dComp_incr0.append(_F(RELATION='SANS',GROUP_MA=__GROUP_MA_CABLES,) ) if __GROUP_MA_I: dComp_incr1.append(_F(RELATION='SANS',GROUP_MA=__GROUP_MA_I,) ) @@ -311,7 +296,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, # --------------------------------------------------------- __MOD = string.ljust(MODELE.nom,8) - __MOD =__MOD+'.MODELE .NOMA ' + __MOD =__MOD+'.MODELE .LGRF ' __LMAIL = aster.getvectjev(__MOD) __MAIL = string.strip(__LMAIL[0]) @@ -321,16 +306,16 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, AFFE =_F( GROUP_MA = __GROUP_MA_A, PHENOMENE = 'MECANIQUE', MODELISATION = 'BARRE') ) - + # 1.6 Blocage de tous les noeuds des cables actifs # -------------------------------------------------- - + _B_CA=AFFE_CHAR_MECA(MODELE=__M_CA, DDL_IMPO= _F( GROUP_MA = __GROUP_MA_A, DX = 0., DY = 0., - DZ = 0.),) + DZ = 0.),) # 1.7 Chargements concernant les cables @@ -344,13 +329,13 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, # ------------------------------------------------------------- - # 2. CALCULS + # 2. CALCULS # ------------------------------------------------------------ - #------------------------------------------------------------------- - # 2.1 Premiere etape : calcul sur le(s) cable(s) et - # recuperation des _F_CAs aux noeuds + #------------------------------------------------------------------- + # 2.1 Premiere etape : calcul sur le(s) cable(s) et + # recuperation des _F_CAs aux noeuds # on travaile entre tmin et tmax #------------------------------------------------------------------- @@ -368,13 +353,13 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, PRECISION = __prec), SOLVEUR = dSolveur, INFO =INFO, - TITRE = TITRE, ) - + TITRE = TITRE, ) + __EV1 = CALC_NO( reuse = __EV1, RESULTAT = __EV1, GROUP_MA = __GROUP_MA_A, OPTION = 'FORC_NODA' ) - + __REA = CREA_CHAMP ( TYPE_CHAM = 'NOEU_DEPL_R', OPERATION = 'EXTR', @@ -388,15 +373,15 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, ASSE= _F(GROUP_MA=__GROUP_MA_A, CHAM_GD=__REA, COEF_R = -1.), ) - + _F_CA=AFFE_CHAR_MECA(MODELE=__M_CA, - VECT_ASSE = __REAC ) - - - + VECT_ASSE = __REAC ) + + + #----------------------------------------------------------------------- # 2.2 Deuxieme etape : application de la precontrainte sur le beton - # en desactivant les cables + # en desactivant les cables #----------------------------------------------------------------------- # Regeneration des mots-cles EXCIT passés en argument de la macro @@ -415,7 +400,12 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, dExcit1.append(_F(CHARGE = _F_CA, FONC_MULT=__FCT ),) - RES=STAT_NON_LINE( + motscle4={} + if dReuse: motscle4['reuse']=[] + else: motscle4['reuse']=dReuse + + + RES=STAT_NON_LINE( MODELE =MODELE, CARA_ELEM =CARA_ELEM, CHAM_MATER = CHAM_MATER, @@ -426,13 +416,11 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, CONVERGENCE=dConvergence, RECH_LINEAIRE = dRech_lin, SOLVEUR = dSolveur, - SOLV_NON_LOCAL = dSolv_nonloc, - LAGR_NON_LOCAL = dLagr_nonloc, ARCHIVAGE = _F(INST = __TINT), INFO =INFO, TITRE = TITRE, EXCIT = dExcit1, - ) + **motscle4) # Recuperation du dernier numero d'ordre pour pouvoir l'écraser dans RES __dico2 = RES.LIST_VARI_ACCES() @@ -446,28 +434,26 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT, # Creation du mots-cles EXCIT pour le STAT_NON_LINE dExcit2=copy.copy(dExcit) dExcit2.append(_F(CHARGE=_C_CT,) ) - + # Calcul sur un seul pas (de __TINT a __TMAX) RES=STAT_NON_LINE( reuse = RES, ETAT_INIT = _F(EVOL_NOLI =RES), MODELE = MODELE, CHAM_MATER = CHAM_MATER, CARA_ELEM = CARA_ELEM, - COMP_INCR=dComp_incr1, - INCREMENT=_F(LIST_INST = __LST, + COMP_INCR=dComp_incr1, + INCREMENT=_F(LIST_INST = __LST, PRECISION = __prec), NEWTON =dNewton, RECH_LINEAIRE = dRech_lin, CONVERGENCE=dConvergence, SOLVEUR = dSolveur, - SOLV_NON_LOCAL = dSolv_nonloc, - LAGR_NON_LOCAL = dLagr_nonloc, ARCHIVAGE = _F(NUME_INIT = __no, DETR_NUME_SUIV = 'OUI' ), INFO =INFO, - TITRE = TITRE, - EXCIT =dExcit2, - ) + TITRE = TITRE, + EXCIT =dExcit2, + ) return ier diff --git a/Aster/Cata/cataSTA9/Macro/calc_table_ops.py b/Aster/Cata/cataSTA9/Macro/calc_table_ops.py index 01ecfcb0..2f1353bb 100644 --- a/Aster/Cata/cataSTA9/Macro/calc_table_ops.py +++ b/Aster/Cata/cataSTA9/Macro/calc_table_ops.py @@ -1,4 +1,4 @@ -#@ MODIF calc_table_ops Macro DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF calc_table_ops Macro DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -31,7 +31,7 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args): macro = 'CALC_TABLE' from Accas import _F from Cata.cata import table_sdaster, table_fonction, table_jeveux - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS from Utilitai import transpose from Utilitai.Table import Table, merge @@ -73,14 +73,16 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args): # format pour l'impression des filtres form_filtre = '\nFILTRE -> NOM_PARA: %-16s CRIT_COMP: %-4s VALE: %s' if occ['OPERATION'] == 'FILTRE': - col = getattr(tab, occ['NOM_PARA']) # peu importe le type, c'est la meme méthode d'appel opts = [occ[k] for k in ('VALE','VALE_I','VALE_C','VALE_K') if occ.has_key(k)] kargs = {} for k in ('CRITERE','PRECISION'): if occ.has_key(k): kargs[k] = occ[k] - tab = tab & ( getattr(col, occ['CRIT_COMP'])(*opts,**kargs) ) + + col = getattr(tab, occ['NOM_PARA']) + tab = getattr(col, occ['CRIT_COMP'])(*opts,**kargs) + # trace l'operation dans le titre #if FORMAT in ('TABLEAU','ASTER'): tab.titr += form_filtre % (occ['NOM_PARA'], occ['CRIT_COMP'], \ @@ -94,7 +96,7 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args): lpar = [lpar] for p in lpar: if not p in tab.para: - UTMESS('F', macro, 'Paramètre %s inexistant dans la table %s' % (p, TABLE.nom)) + UTMESS('F','TABLE0_2',valk=[p,TABLE.nom]) tab = tab[occ['NOM_PARA']] #---------------------------------------------- @@ -103,7 +105,7 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args): try: tab.Renomme(*occ['NOM_PARA']) except KeyError, msg: - UTMESS('F', macro, msg) + UTMESS('F','TABLE0_3',valk=msg) #---------------------------------------------- # 4. Traitement du TRI @@ -121,9 +123,9 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args): lpar = [lpar] for p in lpar: if not p in tab.para: - UTMESS('F', macro, 'Paramètre %s inexistant dans la table %s' % (p, TABLE.nom)) + UTMESS('F','TABLE0_4',valk=[p, TABLE.nom]) if not p in tab2.para: - UTMESS('F', macro, 'Paramètre %s inexistant dans la table %s' % (p, occ['TABLE'].nom)) + UTMESS('F','TABLE0_5',valk=[p,occ['TABLE'].nom] ) opts.append(lpar) tab = merge(*opts) @@ -136,6 +138,15 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args): vectval = getattr(tab, occ['NOM_PARA']).values() aster.affiche('MESSAGE', 'Ajout de la colonne %s : %s' % (occ['NOM_PARA']+repr(vectval))+'\n') + #---------------------------------------------- + # 6. Traitement de AJOUT + if occ['OPERATION'] == 'AJOUT': + if len(occ['NOM_PARA']) != len(occ['VALE']): + UTMESS('F', 'TABLE0_14') + dnew = dict(zip(occ['NOM_PARA'], occ['VALE'])) + # ajout de la ligne avec vérification des types + tab.append(dnew) + #---------------------------------------------- # 99. Création de la table_sdaster résultat # cas réentrant : il faut détruire l'ancienne table_sdaster @@ -164,3 +175,4 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args): **dprod) return ier + diff --git a/Aster/Cata/cataSTA9/Macro/creation_donnees_homard.py b/Aster/Cata/cataSTA9/Macro/creation_donnees_homard.py index e2185578..115448c8 100644 --- a/Aster/Cata/cataSTA9/Macro/creation_donnees_homard.py +++ b/Aster/Cata/cataSTA9/Macro/creation_donnees_homard.py @@ -1,4 +1,4 @@ -#@ MODIF creation_donnees_homard Macro DATE 04/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF creation_donnees_homard Macro DATE 11/12/2007 AUTEUR GNICOLAS G.NICOLAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -17,11 +17,11 @@ # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE ABBAS M.ABBAS +# RESPONSABLE GNICOLAS G.NICOLAS """ Cette classe crée le fichier de configuration permettant de lancer HOMARD depuis Code_Aster. """ -__revision__ = "V1.2" +__revision__ = "V1.3" __all__ = [ ] import os @@ -30,13 +30,13 @@ from types import ListType, TupleType EnumTypes = (ListType, TupleType) try: - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS except ImportError: - def UTMESS(code, sprg, texte) : + def UTMESS(code, idmess, valk=(), vali=(), valr=()): """Clone de utmess si on ne reussit pas à le charger """ - fmt = '\n <%s> <%s> %s\n\n' - print fmt % (code, sprg, texte) + fmt = '\n <%s> <%s> %s %s %s\n\n' + print fmt % (code, idmess, valk, vali, valr) # ------------------------------------------------------------------------------ class creation_donnees_homard: @@ -75,7 +75,7 @@ class creation_donnees_homard: self.ModeHOMA = d_aux[nom_macro][1] self.mode_homard_texte = d_aux[nom_macro][2] else : - UTMESS("F", nom_macro, "Cette macro commande est inconnue.") + UTMESS("F",'HOMARD0_1') # # 2. Données générales de cette initialisation # @@ -285,7 +285,7 @@ class creation_donnees_homard: break # if message_erreur is not None : - UTMESS("F", self.nom_macro, message_erreur) + UTMESS("F",'HOMARD0_2',valk=message_erreur) # return self.fic_homard_niter, self.fic_homard_niterp1 # ------------------------------------------------------------------------------ @@ -302,13 +302,12 @@ class creation_donnees_homard: os.remove (nomfic) except os.error, codret_partiel : print "Probleme au remove, erreur numéro ", codret_partiel[0], ":", codret_partiel[1] - UTMESS("F", self.nom_macro, "Impossible de tuer le fichier "+nomfic) + UTMESS("F",'HOMARD0_3',valk=nomfic) # fichier = open (nomfic,"w") self.fichier = fichier # return fichier, nomfic -# ------------------------------------------------------------------------------ def ecrire_ligne_configuration_0 (self, commentaire) : """Ecrit une ligne de commentaires du fichier de configuration Arguments : @@ -444,6 +443,23 @@ class creation_donnees_homard: for aux in self.niveau : self.ecrire_ligne_configuration_2(aux[0], aux[1]) # +# 5.5. L'usage de l'indicateur +# + if self.mots_cles.has_key("TYPE_OPER_INDICA") : + if self.mots_cles["TYPE_OPER_INDICA"] is not None : + self.ecrire_ligne_configuration_2("CCModeFI", self.mots_cles["TYPE_OPER_INDICA"]) +# +# 5.6. Les éventuels groupes de filtrage du raffinement/deraffinement +# + for cle in ( "GROUP_MA", "GROUP_NO" ) : + if self.mots_cles.has_key(cle) : + if self.mots_cles[cle] is not None : + if not type(self.mots_cles[cle]) in EnumTypes : + self.ecrire_ligne_configuration_2("CCGroAda", self.mots_cles[cle]) + else : + for group in self.mots_cles[cle] : + self.ecrire_ligne_configuration_2("CCGroAda", group) +# # 6. Les éventuels champs à mettre à jour # if self.dico_configuration.has_key("Champs") : @@ -468,12 +484,12 @@ class creation_donnees_homard: self.ecrire_ligne_configuration_2("SuivFron", "oui") self.ecrire_ligne_configuration_2("CCFronti", self.dico_configuration["Fichier_ASTER_vers_HOMARD"]) self.ecrire_ligne_configuration_2("CCNoMFro", self.dico_configuration["NOM_MED_MAILLAGE_FRONTIERE"]) - if self.mots_cles.has_key("GROUP_MA") : - if self.mots_cles["GROUP_MA"] is not None : - if not type(self.mots_cles["GROUP_MA"]) in EnumTypes : - self.ecrire_ligne_configuration_2("CCGroFro", self.mots_cles["GROUP_MA"]) + if self.mots_cles.has_key("GROUP_MA_FRONT") : + if self.mots_cles["GROUP_MA_FRONT"] is not None : + if not type(self.mots_cles["GROUP_MA_FRONT"]) in EnumTypes : + self.ecrire_ligne_configuration_2("CCGroFro", self.mots_cles["GROUP_MA_FRONT"]) else : - for group_ma in self.mots_cles["GROUP_MA"] : + for group_ma in self.mots_cles["GROUP_MA_FRONT"] : self.ecrire_ligne_configuration_2("CCGroFro", group_ma) # # 8. L'éventuel maillage annexe @@ -508,7 +524,7 @@ class creation_donnees_homard: # if message_erreur is not None : message_erreur = "Ecriture de "+nomfic_global+". "+message_erreur - UTMESS("F", self.nom_macro, message_erreur) + UTMESS("F",'HOMARD0_2',valk=message_erreur) # return # ------------------------------------------------------------------------------ @@ -536,6 +552,6 @@ class creation_donnees_homard: break # if message_erreur is not None : - UTMESS("F", self.nom_macro, message_erreur) + UTMESS("F",'HOMARD0_2',valk=message_erreur) # return nomfic_global diff --git a/Aster/Cata/cataSTA9/Macro/defi_cable_bp_ops.py b/Aster/Cata/cataSTA9/Macro/defi_cable_bp_ops.py index 3a30ca3d..4ff185e4 100644 --- a/Aster/Cata/cataSTA9/Macro/defi_cable_bp_ops.py +++ b/Aster/Cata/cataSTA9/Macro/defi_cable_bp_ops.py @@ -1,21 +1,21 @@ -#@ MODIF defi_cable_bp_ops Macro DATE 26/03/2007 AUTEUR ASSIRE A.ASSIRE +#@ MODIF defi_cable_bp_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== # RESPONSABLE ASSIRE A.ASSIRE @@ -68,7 +68,7 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON, # La macro compte pour 1 dans la numerotation des commandes self.set_icmd(1) - # Le concept sortant (de type char_meca) est nomme CHCABLE dans + # Le concept sortant (de type char_meca) est nomme CHCABLE dans # le contexte de la macro self.DeclareOut('__DC',self.sd) @@ -87,12 +87,12 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON, RAYON = dCONE['RAYON'] LONGUEUR = dCONE['LONGUEUR'] - + motscles['CONE']=[] motscles['CONE'].append( dCONE ) # RECUPERATION DU MAILLAGE A PARTIR DU MODELE - __MAIL = aster.getvectjev( string.ljust(MODELE.nom,8) + '.MODELE .NOMA ' ) + __MAIL = aster.getvectjev( string.ljust(MODELE.nom,8) + '.MODELE .LGRF ' ) __MAIL= __MAIL[0].strip() MAILLAGE = self.get_sd_avant_etape(__MAIL,self) @@ -100,9 +100,9 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON, __NOM = 'AN__' __LGNO = MAILLAGE.LIST_GROUP_NO() __LGN1 = [] - for i in __LGNO : + for i in __LGNO : __LGN1.append( i[0][:len(__NOM)] ) - + __NB = __LGN1.count(__NOM) # FIN RECUPERATION DES INFOS DONNEES PAR LE MOT-CLE "CONE" @@ -122,12 +122,12 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON, motscles['DEFI_CABLE']=[] for i in dDEFI_CABLE: - + # CAS OU L'ON A DEFINI LE MOT-CLE "CONE" if CONE: # CREATION DU PREMIER TUNNEL - + if dCONE['PRESENT'][0] == 'OUI': __NB = __NB + 1 __NOM1 = __NOM + str( int(__NB) ) @@ -135,7 +135,7 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON, motscle2={} motscle2['CREA_GROUP_NO']=[] - if i.has_key('GROUP_MA') == 1: + if i.has_key('GROUP_MA') == 1: __CAB = i['GROUP_MA'] if type(GROUP_MA_BETON) in [types.TupleType, types.ListType]: gma = list(GROUP_MA_BETON) @@ -143,18 +143,12 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON, gma.insert(0, __CAB) motscle2= {'CREA_GROUP_NO': [{'LONGUEUR': LONGUEUR, 'RAYON': RAYON, 'OPTION': 'TUNNEL', 'GROUP_MA': gma, 'GROUP_MA_AXE': __CAB, 'NOM': __NOM1}]} - if i.has_key('MAILLE') == 1: - echo_mess=[] - echo_mess.append( ' \n' ) - echo_mess.append( ' # ---------------------------------------------------------------------------\n' ) - echo_mess.append( ' # DEFI_CABLE_BP - Erreur : MAILLE INTERDIT - UTILISER GROUP_MA \n' ) - echo_mess.append( ' # ---------------------------------------------------------------------------\n' ) - message=string.join(echo_mess) - UTMESS('F',message) - if i.has_key('GROUP_NO_ANCRAGE') == 1: + if i.has_key('MAILLE') == 1: + UTMESS('F','CABLE0_2') + if i.has_key('GROUP_NO_ANCRAGE') == 1: __PC1 = i['GROUP_NO_ANCRAGE'][0] motscle2['CREA_GROUP_NO'][0]['GROUP_NO_ORIG'] = __PC1 - if i.has_key('NOEUD_ANCRAGE') == 1: + if i.has_key('NOEUD_ANCRAGE') == 1: __PC1 = i['NOEUD_ANCRAGE'][0] motscle2['CREA_GROUP_NO'][0]['NOEUD_ORIG'] = __PC1 @@ -174,7 +168,7 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON, motscle2={} motscle2['CREA_GROUP_NO']=[] - if i.has_key('GROUP_MA') == 1: + if i.has_key('GROUP_MA') == 1: __CAB = i['GROUP_MA'] if type(GROUP_MA_BETON) in [types.TupleType, types.ListType]: gma = list(GROUP_MA_BETON) @@ -182,18 +176,12 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON, gma.insert(0, __CAB) motscle2= {'CREA_GROUP_NO': [{'LONGUEUR': LONGUEUR, 'RAYON': RAYON, 'OPTION': 'TUNNEL', 'GROUP_MA': gma, 'GROUP_MA_AXE': __CAB, 'NOM': __NOM2}]} - if i.has_key('MAILLE') == 1: - echo_mess=[] - echo_mess.append( ' \n' ) - echo_mess.append( ' # ---------------------------------------------------------------------------\n' ) - echo_mess.append( ' # DEFI_CABLE_BP - Erreur : MAILLE INTERDIT - UTILISER GROUP_MA \n' ) - echo_mess.append( ' # ---------------------------------------------------------------------------\n' ) - message=string.join(echo_mess) - UTMESS('F',message) - if i.has_key('GROUP_NO_ANCRAGE') == 1: + if i.has_key('MAILLE') == 1: + UTMESS('F','CABLE0_2') + if i.has_key('GROUP_NO_ANCRAGE') == 1: __PC1 = i['GROUP_NO_ANCRAGE'][1] motscle2['CREA_GROUP_NO'][0]['GROUP_NO_ORIG'] = __PC1 - if i.has_key('NOEUD_ANCRAGE') == 1: + if i.has_key('NOEUD_ANCRAGE') == 1: __PC1 = i['NOEUD_ANCRAGE'][1] motscle2['CREA_GROUP_NO'][0]['NOEUD_ORIG'] = __PC1 @@ -204,63 +192,63 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON, **motscle2 ) ; - + # CREATION DES NOUVEAUX FACTEURS DU MOT-CLE "DEFI_CABLE" POUR DEFI_CABLE_BP - + if dCONE['PRESENT'][0] == 'OUI' and dCONE['PRESENT'][1] == 'OUI': - if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: + if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'], GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], GROUP_NO_FUT=( __NOM1,__NOM2, ), ), ) - if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: + if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'], NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], GROUP_NO_FUT=( __NOM1,__NOM2, ), ), ) - + if dCONE['PRESENT'][0] == 'OUI' and dCONE['PRESENT'][1] == 'NON': - if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: + if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'], GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], GROUP_NO_FUT=( __NOM1, ), ), ) - if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: + if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'], NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], GROUP_NO_FUT=( __NOM1, ), ), ) - + if dCONE['PRESENT'][0] == 'NON' and dCONE['PRESENT'][1] == 'OUI': - if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: + if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'], GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], GROUP_NO_FUT=( __NOM2, ), ), ) - if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: + if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'], NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], GROUP_NO_FUT=( __NOM2, ), ), ) - + if dCONE['PRESENT'][0] == 'NON' and dCONE['PRESENT'][1] == 'NON': - if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: + if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'], GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], ), ) - if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: + if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'], NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], ), ) # CAS OU L'ON A PAS DEFINI LE MOT-CLE "CONE" else: - if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: + if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'], GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], ), ) - if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: + if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'], NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], ), ) - if i.has_key('MAILLE') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: + if i.has_key('MAILLE') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1: motscles['DEFI_CABLE'].append( _F(MAILLE=i['MAILLE'], GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], ), ) - if i.has_key('MAILLE') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: + if i.has_key('MAILLE') == 1 and i.has_key('NOEUD_ANCRAGE') == 1: motscles['DEFI_CABLE'].append( _F(MAILLE=i['MAILLE'], NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], ), ) @@ -302,5 +290,5 @@ def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON, # __TCAB = RECU_TABLE(CO=__DC,NOM_TABLE='CABLE_BP'); # IMPR_TABLE(TABLE=__TCAB); - + return ier diff --git a/Aster/Cata/cataSTA9/Macro/defi_inte_spec_ops.py b/Aster/Cata/cataSTA9/Macro/defi_inte_spec_ops.py index 63a04aec..3d27d590 100644 --- a/Aster/Cata/cataSTA9/Macro/defi_inte_spec_ops.py +++ b/Aster/Cata/cataSTA9/Macro/defi_inte_spec_ops.py @@ -1,4 +1,4 @@ -#@ MODIF defi_inte_spec_ops Macro DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF defi_inte_spec_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -32,7 +32,7 @@ def defi_inte_spec_ops(self,DIMENSION,PAR_FONCTION,KANAI_TAJIMI, from types import ListType, TupleType EnumTypes = (ListType, TupleType) from Accas import _F - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS import Numeric commande='DEFI_INTE_SPEC' @@ -59,8 +59,7 @@ def defi_inte_spec_ops(self,DIMENSION,PAR_FONCTION,KANAI_TAJIMI, nfntot = len(PAR_FONCTION)+len(KANAI_TAJIMI)+len(CONSTANT) dimh = (DIMENSION*(DIMENSION+1))/2 if dimh!=nfntot : - txt = "nombre de fonctions erroné pour une matrice hermitienne" - UTMESS('F',commande, txt) + UTMESS('F','SPECTRAL0_1') l_f=[] for occ in PAR_FONCTION : l_f.append(('PAR_FONCTION',occ)) @@ -68,8 +67,7 @@ def defi_inte_spec_ops(self,DIMENSION,PAR_FONCTION,KANAI_TAJIMI, for occ in CONSTANT : l_f.append(('CONSTANT' ,occ)) for occ in l_f : if occ[0]!='PAR_FONCTION' and occ[1]['FREQ_MAX'] 7 ): ln=7-len(str(NB_PART)) - UTMESS('F', nompro, 'Afin de pouvoir générer les GROUP_MA, réduisez le nombre '\ - 'de caractères de NOM_GROUP_MA à un maximum de : %i' %ln) + UTMESS('F','FETI0_1',vali=ln) # Verification que des GROUP_MA ne portent pas deja les memes noms _lst = [] @@ -87,12 +87,12 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO for i in range(NB_PART): if ( NOM_GROUP_MA+str(i) in _lst ): ngrma=NOM_GROUP_MA+str(i) - UTMESS('F', nompro, "Il existe déjà un GROUP_MA nommé : %s" %ngrma) + UTMESS('F','FETI0_2',valk=ngrma) if args.has_key('NOM_GROUP_MA_BORD') : if args['NOM_GROUP_MA_BORD'] != None : if ( args['NOM_GROUP_MA_BORD']+str(i) in _lst ): ngrma=args['NOM_GROUP_MA_BORD']+str(i) - UTMESS('F', nompro, "Il existe déjà un GROUP_MA nommé : %s" %ngrma) + UTMESS('F','FETI0_2',valk=ngrma) # Le concept sortant dans le contexte de la macro self.DeclareOut('_SDFETI',self.sd) @@ -109,7 +109,7 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO for i in dGroup[-1].keys(): if dGroup[-1][i]==None : del dGroup[-1][i] motscle1['GROUPAGE']=dGroup - + # Regeneration des mots-cles POIDS_MAILLES passés en argument de la macro if args.has_key('POIDS_MAILLES'): if args['POIDS_MAILLES'] != None : @@ -119,8 +119,8 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO for i in dEval[-1].keys(): if dEval[-1][i]==None : del dEval[-1][i] motscle1['POIDS_MAILLES']=dEval - - # Y a t'il présence du mot clé : NOM_GROUP_MA_BORD + + # Y a t'il présence du mot clé : NOM_GROUP_MA_BORD if args.has_key('GROUP_MA_BORD'): if args['GROUP_MA_BORD'] != None : motscle1['GROUP_MA_BORD']=args['GROUP_MA_BORD'] @@ -140,13 +140,13 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO MAILLAGE=MAILLAGE, INFO=INFO, METHODE=METHODE, - NB_PART=NB_PART, + NB_PART=NB_PART, CORRECTION_CONNEX=CORRECTION_CONNEX, TRAITER_BORDS=TRAITER_BORDS, - NOM_GROUP_MA=NOM_GROUP_MA, + NOM_GROUP_MA=NOM_GROUP_MA, **motscle1 - ); - + ); + # Liste des groupes de mailles du maillage _LST_GMA = MAILLAGE.LIST_GROUP_MA() _LST_GMA = map(lambda x: x[0], _LST_GMA) @@ -158,15 +158,15 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO for i in range(NB_PART): txt = { 'GROUP_MA': NOM_GROUP_MA + str(i) } _tmp.append( txt ) - + if args.has_key('NOM_GROUP_MA_BORD') : if args['NOM_GROUP_MA_BORD'] != None : if ( args['NOM_GROUP_MA_BORD']+str(i) in _LST_GMA ): txt['GROUP_MA_BORD'] = string.strip(args['NOM_GROUP_MA_BORD']) + str(i) - _tmp.append( txt ) - + _tmp.append( txt ) + motscle2= {'DEFI': _tmp } - + # Regeneration des mots-cles EXCIT passés en argument de la macro if args.has_key('EXCIT'): if args['EXCIT'] != None : @@ -176,7 +176,7 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO for i in dExcit[-1].keys(): if dExcit[-1][i]==None : del dExcit[-1][i] motscle2['EXCIT']=dExcit - + _SDFETI=DEFI_PART_OPS(NOM='SDD', MODELE=args['MODELE'], INFO=1, @@ -184,7 +184,7 @@ def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTIO ); else: _SDFETI=None - + else: _SDFETI=None diff --git a/Aster/Cata/cataSTA9/Macro/dyna_iss_vari_ops.py b/Aster/Cata/cataSTA9/Macro/dyna_iss_vari_ops.py new file mode 100644 index 00000000..9ab71c5c --- /dev/null +++ b/Aster/Cata/cataSTA9/Macro/dyna_iss_vari_ops.py @@ -0,0 +1,349 @@ +#@ MODIF dyna_iss_vari_ops Macro DATE 21/04/2008 AUTEUR ZENTNER I.ZENTNER +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2008 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== +from Accas import _F +import string + +def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNITE_RESU_FORC, + NB_FREQ, PAS, UNITE_RESU_IMPE, TYPE, MATR_GENE ,INFO, + **args): + """ + Macro DYNA_ISS_VARI + """ + ier=0 + import Numeric as Num + import LinearAlgebra as LinAl + import MLab + import os + import aster + diag = MLab.diag + max = MLab.max + min = MLab.min + sum = Num.sum + abs = Num.absolute + conj = Num.conjugate + from Utilitai.Table import Table + from Utilitai.Utmess import UTMESS + + def get_group_coord(group): + """Retourne les coordonnees des noeuds du groupe 'group' + """ + l_ind = Num.array(coll_grno.get('%-8s' % group, [])) - 1 + return Num.take(t_coordo, l_ind) + + + # On importe les definitions des commandes a utiliser dans la macro + + COMB_MATR_ASSE = self.get_cmd('COMB_MATR_ASSE') + LIRE_IMPE_MISS = self.get_cmd('LIRE_IMPE_MISS') + LIRE_FORC_MISS = self.get_cmd('LIRE_FORC_MISS') + COMB_MATR_ASSE = self.get_cmd('COMB_MATR_ASSE') + + CREA_CHAMP = self.get_cmd('CREA_CHAMP') + DYNA_LINE_HARM = self.get_cmd('DYNA_LINE_HARM') + DETRUIRE= self.get_cmd('DETRUIRE') + + DEFI_FONCTION = self.get_cmd('DEFI_FONCTION') + CREA_TABLE = self.get_cmd('CREA_TABLE') + + # Comptage commandes + declaration concept sortant + self.set_icmd(1) + self.DeclareOut('tab_out', self.sd) + macro='DYNA_ISS_VARI' +#-------------------------------------------------------- + dgene = MATR_GENE[0].cree_dict_valeurs(MATR_GENE[0].mc_liste) + if dgene['MATR_AMOR'] != None: + aster.affiche('MESSAGE',' MATR_AMOR existe') + __ma_amort = MATR_GENE['MATR_AMOR'] + else: + __ma_amort=COMB_MATR_ASSE(CALC_AMOR_GENE=_F(MASS_GENE = MATR_GENE['MATR_MASS'] , + RIGI_GENE = MATR_GENE['MATR_RIGI'] , + AMOR_REDUIT= ( 0.0,), + ), + ); + aster.affiche('MESSAGE',' MATR_AMOR pas donnee, on prend AMOR_REDUIT=0.0,') +# dint = INTERF[0].cree_dict_valeurs(INTERF[0].mc_liste) +# dcoh = MATR_COHE[0].cree_dict_valeurs(MATR_COHE[0].mc_liste) + + from SD.sd_maillage import sd_maillage + from SD.sd_base_modale import sd_base_modale + from SD.sd_resultat import sd_resultat + from SD.sd_cham_gene import sd_cham_gene + # MAILLAGE + nom_bamo = MATR_GENE['MATR_RIGI'].REFA.get()[0] + nume_ddl = aster.getvectjev(nom_bamo[0:8] + ' .REFD ' )[3] + nom_mail = aster.getvectjev( nume_ddl[0:19] + '.REFN ' )[0] + num_mail = sd_maillage(nom_mail) + # MODELE, DDLGENE + nom_ddlgene = MATR_GENE['MATR_RIGI'].REFA.get()[1] + nom_modele = aster.getvectjev( nume_ddl[0:19] + '.LILI ' )[1] + nume_resu = self.jdc.sds_dict[string.strip(nom_bamo)] + nume_ddlgene = self.jdc.sds_dict[string.strip(nom_ddlgene)] + nume_modele = self.jdc.sds_dict[string.strip(nom_modele[0:8])] + + #TEST base modale + nom_bamo1 = MATR_GENE['MATR_MASS'].REFA.get()[0] + nom_bamo2 = MATR_GENE['MATR_RIGI'].REFA.get()[0] + if string.strip(nom_bamo) != string.strip(nom_bamo1) or string.strip(nom_bamo) != string.strip(nom_bamo2) or string.strip(nom_bamo1) != string.strip(nom_bamo2): + UTMESS('F','ALGORITH5_42') + + + nbnot, nbl, nbma, nbsm, nbsmx, dime = num_mail.DIME.get() + + # coordonnees des noeuds + l_coordo = num_mail.COORDO.VALE.get() + t_coordo = Num.array(l_coordo) + t_coordo.shape = nbnot, 3 + # groupes de noeuds + coll_grno = num_mail.GROUPENO.get() + GROUP_NO_INTER=INTERF['GROUP_NO_INTERF'] + noe_interf = get_group_coord(GROUP_NO_INTER) + # print noe_interf + nbno, nbval = noe_interf.shape + if INFO==2: + aster.affiche('MESSAGE','NBNO INTERFACE : '+str(nbno)) + # MODES + nbval, nbmodt,nbmodd,nbmods = nume_resu.UTIL.get() + + + nbmodt2 = MATR_GENE['MATR_RIGI'].DESC.get()[1] + if nbmodt2 != nbmodt: + UTMESS('F','ALGORITH5_42') + + if INFO==2: + texte = 'NOMBRE DE MODES: '+str(nbmodt)+' MODES DYNAMIQUES: '+str(nbmodd)+' MODES STATIQUES: '+str(nbmods) + aster.affiche('MESSAGE',texte) + aster.affiche('MESSAGE','COMPOSANTE '+NOM_CMP) + SPEC = Num.zeros((NB_FREQ,nbmodt,nbmodt), Num.Float)+1j +# +#--------------------------------------------------------------------- + # BOUCLE SUR LES FREQUENCES + VITE_ONDE = MATR_COHE['VITE_ONDE'] + alpha = MATR_COHE['PARA_ALPHA'] + abscisse = [None]*NB_FREQ + + for k in range(0,NB_FREQ): + freqk=FREQ_INIT+PAS*k + aster.affiche('MESSAGE','FREQUENCE DE CALCUL: '+str(freqk)) + + # Matrice de coherence + XX=noe_interf[:,0] + YY=noe_interf[:,1] + + XN=Num.repeat(XX,nbno) + YN=Num.repeat(YY,nbno) + XR=Num.reshape(XN,(nbno,nbno)) + YR=Num.reshape(YN,(nbno,nbno)) + XRT=Num.transpose(XR) + YRT=Num.transpose(YR) + DX=XR-XRT + DY=YR-YRT + DIST=DX**2+DY**2 + COHE=Num.exp(-(DIST*(alpha*freqk/VITE_ONDE)**2.)) + + # On desactive temporairement les FPE qui pourraient etre generees (a tord!) par blas + aster.matfpe(-1) + eig, vec =LinAl.eigenvectors(COHE) + aster.matfpe(1) + eig=eig.real + vec=vec.real + # on rearrange selon un ordre decroissant + eig = Num.where(eig < 1.E-10, 0.0, eig) + order = (Num.argsort(eig)[::-1]) + eig = Num.take(eig, order) + vec = Num.take(vec, order, 0) + + #----------------------- + # Nombre de modes POD a retenir + etot=sum(diag(COHE)) + ener=0.0 + nbme=0 + + if INFO==2: + aster.affiche('MESSAGE','ETOT :'+str(etot)) + while nbme < nbno: + ener= eig[nbme]+ener + prec=ener/etot + nbme=nbme+1 + if INFO==2: + aster.affiche('MESSAGE','VALEUR PROPRE '+str(nbme)+' : '+str(eig[nbme-1])) + if prec > PRECISION : + break + + aster.affiche('MESSAGE','NOMBRE DE MODES POD RETENUS : '+str(nbme)) + aster.affiche('MESSAGE','PRECISION (ENERGIE RETENUE) : '+str(prec)) + + PVEC=Num.zeros((nbme,nbno), Num.Float) + for k1 in range(0,nbme): + PVEC[k1, 0:nbno]=Num.sqrt(eig[k1])*vec[k1] + # CALCUL DE FS variable------------------------------- + XO=Num.zeros((nbme,nbmods), Num.Float) + if NOM_CMP=='DX': + COMP = 1 + elif NOM_CMP=='DY': + COMP = 2 + elif NOM_CMP=='DZ': + COMP = 3 + + #---------MODES interface + # ----- boucle sur les modes statiques + for mods in range(0,nbmods): + nmo = nbmodd+mods+1 + __CHAM=CREA_CHAMP( TYPE_CHAM='NOEU_DEPL_R', + OPERATION='EXTR', + NUME_ORDRE=nmo, + RESULTAT = nume_resu , + NOM_CHAM = 'DEPL' + ); + MCMP =__CHAM.EXTR_COMP(NOM_CMP,[GROUP_NO_INTER]).valeurs + + NNO =__CHAM.EXTR_COMP(NOM_CMP,[GROUP_NO_INTER], topo=1).noeud + + + som=sum(MCMP) + max1=max(MCMP) + min1=min(MCMP) + maxm=max([abs(max1),abs(min1)]) + #CALCUL DE XO +# on recupere la composante COMP (dx,dy,dz) des modes et on projete + # CAS 1: MODES DE CORPS RIGIDE + if INTERF['MODE_INTERF'] =='CORP_RIGI': + for modp in range(0,nbme): + #modes de translation + if mods+1 <=3: + if abs(som)<10.E-6: + XO[modp,mods]=0.0 + else : + fact=1./som + XO[modp,mods]=fact*Num.innerproduct(MCMP,PVEC[modp]) + #modes de rotation + else: + if maxm<10.E-6: + if som<10.E-6: + XO[modp,mods]=0.0 + else : + UTMESS('F','ALGORITH6_86') + else : + fact = 1./(nbno) + XO[modp,mods]=1./(maxm**2.)*fact*Num.innerproduct(MCMP,PVEC[modp]) + + # CAS 2: MODES EF + if INTERF['MODE_INTERF'] =='TOUT': + for modp in range(0,nbme): + if abs(som)<10.E-6: + if maxm<10.E-6: + XO[modp,mods]=0.0 + else: + UTMESS('F','UTILITAI5_89') + else: + fact=1./som + XO[modp,mods]=fact*Num.innerproduct(MCMP,PVEC[modp]) + + DETRUIRE(CONCEPT=_F(NOM=(__CHAM)),INFO=1) + + #----Impedances etc.----------------------------------------------------------------- + + if k>0: + DETRUIRE(CONCEPT=_F(NOM=(__impe,__fosi,__rito)),INFO=1) + + __impe = LIRE_IMPE_MISS(BASE=nume_resu, + TYPE=TYPE, + NUME_DDL_GENE=nume_ddlgene, + UNITE_RESU_IMPE= UNITE_RESU_IMPE, + FREQ_EXTR=freqk, + ); + __rito=COMB_MATR_ASSE(COMB_C=( + _F(MATR_ASSE=__impe, + COEF_C=1.0+0.j,), + _F(MATR_ASSE=MATR_GENE['MATR_RIGI'], + COEF_C=1.0+0.j,), + ), + SANS_CMP='LAGR', + ); + __fosi = LIRE_FORC_MISS(BASE=nume_resu, + NUME_DDL_GENE=nume_ddlgene, + NOM_CMP=NOM_CMP, + NOM_CHAM='DEPL', + UNITE_RESU_FORC = UNITE_RESU_FORC, + FREQ_EXTR=freqk,); + # impedance + MIMPE=__impe.EXTR_MATR_GENE() + # extraction de la partie modes interface + KRS = MIMPE[nbmodd:nbmodt,nbmodd:nbmodt] + + # force sismique pour verif +# FS0=__fosi.EXTR_VECT_GENE_C() +# FSE=FS0[nbmodd:nbmodt][:] + SP=Num.zeros((nbmodt,nbmodt),Num.Float) + for k1 in range(0,nbme): + # calcul de la force sismique mode POD par mode POD + FS = Num.matrixmultiply(KRS,XO[k1]) + Fzero=Num.zeros((1,nbmodd),Num.Float) + FS2=Num.concatenate((Fzero,Num.reshape(FS,(1,nbmods))),1) + # Calcul harmonique + __fosi.RECU_VECT_GENE_C(FS2[0]) + __dyge = DYNA_LINE_HARM(MODELE= nume_modele, + MATR_MASS = MATR_GENE['MATR_MASS'], + MATR_RIGI = __rito, + FREQ = freqk, + MATR_AMOR = __ma_amort, + EXCIT =_F ( VECT_ASSE = __fosi, + COEF_MULT= 1.0, + ), + ); + # recuperer le vecteur modal depl calcule par dyge + desc = __dyge.DESC.get() + assert desc[0].strip() == 'DEPL', 'Champ DEPL non trouvé' + nomcham = __dyge.TACH.get()[1][0].strip() + cham = sd_cham_gene(nomcham) + RS = Num.array(cham.VALE.get()) + SP=SP+RS*conj(RS[:,Num.NewAxis]) + DETRUIRE(CONCEPT=_F(NOM=(__dyge)),INFO=1) + + + SPEC[k]=SP + + abscisse[k]= freqk +##--------------------------------------------------------------------- +# Ecriture des tables +#--------------------------------------------------------------------- +# ------ CREATION DE L OBJET TABLE + tab = Table() + tab.append({'NOM_CHAM' : 'DSP', 'OPTION' : 'TOUT', 'DIMENSION' : nbmodt}) + foncc=Num.array([None]*NB_FREQ*3) + for k2 in range(nbmodt): + for k1 in range(k2+1): + ks=0 + for k in range(NB_FREQ) : + foncc[ks]=abscisse[k] + foncc[ks+1]= SPEC[k][k1,k2].real + foncc[ks+2]= SPEC[k][k1,k2].imag + ks=ks+3 + _f = DEFI_FONCTION(NOM_PARA='FREQ', + NOM_RESU='SPEC', + VALE_C = foncc.tolist() ) + + # Ajout d'une ligne dans la Table + tab.append({'NUME_ORDRE_I' : k1+1, 'NUME_ORDRE_J' : k2+1, 'FONCTION_C' : _f.nom}) + + + # Creation du concept en sortie + tab_out = CREA_TABLE(TYPE_TABLE='TABLE_FONCTION', + **tab.dict_CREA_TABLE()) + return ier diff --git a/Aster/Cata/cataSTA9/Macro/exec_logiciel_ops.py b/Aster/Cata/cataSTA9/Macro/exec_logiciel_ops.py index cf768078..ad19d219 100644 --- a/Aster/Cata/cataSTA9/Macro/exec_logiciel_ops.py +++ b/Aster/Cata/cataSTA9/Macro/exec_logiciel_ops.py @@ -1,4 +1,4 @@ -#@ MODIF exec_logiciel_ops Macro DATE 29/08/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF exec_logiciel_ops Macro DATE 19/05/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -33,7 +33,7 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO """ macro='EXEC_LOGICIEL' import aster - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS from Utilitai.System import ExecCommand from Utilitai.UniteAster import UniteAster @@ -89,13 +89,13 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO elif dMCF['FORMAT'] == 'SALOME': mode_lancement = EXECFILE if len(l_args) < 1: - UTMESS('F', macro, "FORMAT SALOME, L'ARGUMENT 1 DOIT ETRE " \ - "LE NOM DU FICHIER MED PRODUIT PAR LE SCRIPT PYTHON.") + UTMESS('F','EXECLOGICIEL0_1') else: d_para['fichMED'] = l_args[0] else: - UTMESS('F', macro, "ON NE SAIT PAS TRAITER LE FORMAT '%s'" % dMCF['FORMAT']) + UTMESS('F', 'EXECLOGICIEL0_2', valk=dMCF['FORMAT']) + #---------------------------------------------- # 2. lecture des mots-clés @@ -119,34 +119,29 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO aster.affiche('MESSAGE', output) if CODE_RETOUR_MAXI >= 0 and iret > CODE_RETOUR_MAXI: - UTMESS('F', macro, 'CODE RETOUR INCORRECT (MAXI %d) : %d' \ - % (CODE_RETOUR_MAXI, iret)) + UTMESS('F', 'EXECLOGICIEL0_3', vali=[CODE_RETOUR_MAXI,iret]) #---------------------------------------------- # 3b. Exécution d'un fichier Python elif mode_lancement == EXECFILE: if d_para['prog'] != '': - UTMESS('A', macro, "LE MOT-CLE LOGICIEL N'EST PAS UTILISE AVEC CE FORMAT") + UTMESS('A', 'EXECLOGICIEL0_4') context={} try: execfile(d_para['fichIN'], context) except: traceback.print_exc() txt = open(d_para['fichIN'], 'r').read() - UTMESS('F', macro, """ERREURS LORS DE L'EXECUTION DU FICHIER CI-DESSOUS : -<<<<<<<<<<<<<<< DEBUT DU FICHIER >>>>>>>>>>>>>>> -%s -<<<<<<<<<<<<<<< FIN DU FICHIER >>>>>>>>>>>>>>> -""" % txt) + UTMESS('F', 'EXECLOGICIEL0_5', valk=txt) if not os.path.exists(d_para['fichMED']): - UTMESS('F', macro, "LE FICHIER %s N'EXISTE PAS" % d_para['fichMED']) + UTMESS('F', 'EXECLOGICIEL0_6', valk=d_para['fichMED']) else: # copie fichMED vers fichOUT pour pouvoir le récupérer shutil.copyfile(d_para['fichMED'], d_para['fichOUT']) else: - UTMESS('F', macro, "Mode de lancement inconnu : %s" % mode_lancement) + UTMESS('F','EXECLOGICIEL0_7',valk=mode_lancement) #---------------------------------------------- # 4. Conversion du maillage diff --git a/Aster/Cata/cataSTA9/Macro/externe_mess.py b/Aster/Cata/cataSTA9/Macro/externe_mess.py new file mode 100644 index 00000000..718900fd --- /dev/null +++ b/Aster/Cata/cataSTA9/Macro/externe_mess.py @@ -0,0 +1,27 @@ +#@ MODIF externe_mess Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== +import sys +""" +Définition de la méthode UTMESS pour reca_xxxx.py, Graph.py, Table.py +""" +def UTMESS(code,sprg,texte): + fmt='\n <%s> <%s> %s\n\n' + print fmt % (code,sprg,texte) + if code=='F': sys.exit() diff --git a/Aster/Cata/cataSTA9/Macro/fiabilite_mefisto.py b/Aster/Cata/cataSTA9/Macro/fiabilite_mefisto.py index b74d7e54..f6e2dd62 100644 --- a/Aster/Cata/cataSTA9/Macro/fiabilite_mefisto.py +++ b/Aster/Cata/cataSTA9/Macro/fiabilite_mefisto.py @@ -1,4 +1,4 @@ -#@ MODIF fiabilite_mefisto Macro DATE 04/10/2005 AUTEUR REZETTE C.REZETTE +#@ MODIF fiabilite_mefisto Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -48,7 +48,7 @@ def fiabilite_mefisto ( self, Rep_Calc_LOGICIEL_global, import os import string import Numeric - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS # #____________________________________________________________________ # @@ -237,9 +237,9 @@ def fiabilite_mefisto ( self, Rep_Calc_LOGICIEL_global, # if args.has_key('MATRICE'): if args["MATRICE"] != None: if len(args["MATRICE"]) != nb_occu_variable**2: - UTMESS('F','FIABILITE_MEPHISTO',' LE NOMBRE D ELEMENTS' - +' DU MOT CLE MATRICE DOIT ETRE EGAL A : ' - +str(nb_occu_variable**2)) +# +' DU MOT CLE MATRICE DOIT ETRE EGAL A : ' +# +str(nb_occu_variable**2)) + UTMESS('F','FIABILITE0_1',vali=nb_occu_variable**2) for m in range(nb_occu_variable) : aux = [ ] for n in range(nb_occu_variable) : diff --git a/Aster/Cata/cataSTA9/Macro/gene_vari_alea_ops.py b/Aster/Cata/cataSTA9/Macro/gene_vari_alea_ops.py index 829a93e7..4c1ade83 100644 --- a/Aster/Cata/cataSTA9/Macro/gene_vari_alea_ops.py +++ b/Aster/Cata/cataSTA9/Macro/gene_vari_alea_ops.py @@ -1,4 +1,4 @@ -#@ MODIF gene_vari_alea_ops Macro DATE 28/02/2006 AUTEUR VABHHTS J.PELLET +#@ MODIF gene_vari_alea_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -25,7 +25,7 @@ def gene_vari_alea_ops(self,**args): return 0 def gene_vari_alea_init(self,d): - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS a =self.etape['BORNE_INF'] moyen =self.etape['VALE_MOY' ] TYPE =self.etape['TYPE'] @@ -35,22 +35,12 @@ def gene_vari_alea_init(self,d): if TYPE=='EXP_TRONQUEE' : b =self.etape['BORNE_SUP'] if (a>=b) : - message=' : il faut BORNE_INF < BORNE_SUP \n' - message=message+' BORNE_INF = '+str(a)+'\n' - message=message+' BORNE_SUP = '+str(b)+'\n' - UTMESS('F','GENE_VARI_ALEA',message) + UTMESS('F','PROBA0_1',valr=[a,b]) elif (moyen<=a)or(moyen>=b) : - message=' : VALE_MOY trop grand ou trop petit\n' - message=message+' BORNE_INF = '+str(a)+'\n' - message=message+' VALE_MOY = '+str(moyen)+'\n' - message=message+' BORNE_SUP = '+str(b)+'\n' - UTMESS('F','GENE_VARI_ALEA',message) + UTMESS('F','PROBA0_2',valr=[a,moyen,b]) k=1./(moyen-a) if (exp(-b*k)<1.E-12) : - message=' : BORNE SUP très grande \n' - message=message+'pb précision possible, vérifiez'+'\n' - message=message+'la distribution des valeurs générées \n' - UTMESS('F','GENE_VARI_ALEA',message) + UTMESS('F','PROBA0_3') # résolution par point fixe eps =1.E-4 nitmax=100000 @@ -63,10 +53,7 @@ def gene_vari_alea_init(self,d): self.sd.valeur=-( log(exp(-a*k)-alpha*self.getran()[0] ) ) /k elif TYPE=='EXPONENTIELLE' : if (moyen<=a) : - message=' : on doit avoir : VALE_MOY > BORNE_INF \n' - message=message+' VALE_MOY = '+str(moyen)+'\n' - message=message+' BORNE_INF = '+str(a)+'\n' - UTMESS('F','GENE_VARI_ALEA',message) + UTMESS('F','PROBA0_4',valr=[moyen,a]) v = moyen-a u=self.getran()[0] x = -log(1-u) @@ -74,15 +61,11 @@ def gene_vari_alea_init(self,d): elif TYPE=='GAMMA' : delta =self.etape['COEF_VAR' ] if (moyen<=a) : - message=' : on doit avoir : VALE_MOY > BORNE_INF \n' - message=message+' VALE_MOY = '+str(moyen)+'\n' - message=message+' BORNE_INF = '+str(a)+'\n' - UTMESS('F','GENE_VARI_ALEA',message) + UTMESS('F','PROBA0_4',valr=[moyen,a]) v = moyen-a alpha = 1./(delta**2) if (alpha<=1.) : - message=' : erreur : ALPHA < 1\n' - UTMESS('F','GENE_VARI_ALEA',message) + UTMESS('F','PROBA0_5') gamma2 = alpha-1. gamm1 = 1./gamma2 beta = sqrt(2.*alpha-1.) @@ -98,12 +81,10 @@ def gene_vari_alea_init(self,d): gamdev = beta*tan(pi*(u*c1+c2))+gamma2 unif=self.getran()[0] if unif<0. : - message=' : erreur : unif < 0\n' - UTMESS('F','GENE_VARI_ALEA',message) + UTMESS('F','PROBA0_6') vv= -log(unif) vref = log(1+beta2*((gamdev-gamma2)**2))+gamma2*log(gamdev*gamm1)-gamdev+gamma2 # if vv<=0. : - message=' : erreur : GAMDEV(ALPHA) < 0\n' - UTMESS('F','GENE_VARI_ALEA',message) + UTMESS('F','PROBA0_7') self.sd.valeur = a + v*(delta**2)*gamdev diff --git a/Aster/Cata/cataSTA9/Macro/impr_fonction_ops.py b/Aster/Cata/cataSTA9/Macro/impr_fonction_ops.py index bc276a32..7925a50e 100644 --- a/Aster/Cata/cataSTA9/Macro/impr_fonction_ops.py +++ b/Aster/Cata/cataSTA9/Macro/impr_fonction_ops.py @@ -1,4 +1,4 @@ -#@ MODIF impr_fonction_ops Macro DATE 02/04/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF impr_fonction_ops Macro DATE 06/05/2008 AUTEUR CNGUYEN C.NGUYEN # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -33,10 +33,11 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args): import pprint import aster from Accas import _F - from Cata.cata import nappe_sdaster, fonction_c + from Cata.cata import nappe_sdaster, fonction_c, formule, formule_c from Utilitai import Graph - from Utilitai.Utmess import U2MESS + from Utilitai.Utmess import UTMESS from Utilitai.UniteAster import UniteAster + ier=0 # La macro compte pour 1 dans la numerotation des commandes self.set_icmd(1) @@ -64,7 +65,7 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args): niv='A' else: niv='I' - U2MESS(niv, 'FONCT0_1', valk=nomfich) + UTMESS(niv, 'FONCT0_1', valk=nomfich) # 0.2. Récupération des valeurs sous COURBE unparmi=('FONCTION','LIST_RESU','FONC_X','ABSCISSE') @@ -100,7 +101,7 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args): obj=dCi[typi] break if obj==None: - U2MESS('S', 'SUPERVIS_56') + UTMESS('S', 'SUPERVIS_56') if typi=='FONCTION': if isinstance(obj, nappe_sdaster): lpar,lval=obj.Valeurs() @@ -135,12 +136,18 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args): if not dCi.has_key('LEGENDE') and hasattr(obj,'get_name'): dCi['LEGENDE']=obj.get_name() if obj==None: - U2MESS('S', 'SUPERVIS_56') + UTMESS('S', 'SUPERVIS_56') # 1.2. Extraction des valeurs # 1.2.1. Mot-clé FONCTION if typi=='FONCTION': + # formule à un paramètre seulement + if isinstance(obj, formule): + dpar = obj.Parametres() + if len(dpar['NOM_PARA']) != 1: + UTMESS('S', 'FONCT0_50', valk=obj.nom, vali=len(dpar['NOM_PARA'])) + if isinstance(obj, nappe_sdaster): lpar,lval=obj.Valeurs() dico,ldicf=obj.Parametres() @@ -185,6 +192,9 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args): else: ftmp__=obj dpar=ftmp__.Parametres() + # pour les formules à un paramètre (test plus haut) + if type(dpar['NOM_PARA']) in (list, tuple): + dpar['NOM_PARA'] = dpar['NOM_PARA'][0] if interp: ftmp__=CALC_FONC_INTERP( FONCTION=obj, @@ -200,10 +210,10 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args): lval=list(ftmp__.Valeurs()) lx=lval[0] lr=lval[1] - if isinstance(obj, fonction_c) and dCi.get('PARTIE') == 'IMAG': + if isinstance(obj, (fonction_c, formule_c)) and dCi.get('PARTIE') == 'IMAG': lr=lval[2] # on stocke les données dans le Graph - if isinstance(obj, fonction_c) and not dCi.has_key('PARTIE'): + if isinstance(obj, (fonction_c, formule_c)) and not dCi.has_key('PARTIE'): nomresu=dpar['NOM_RESU'].strip()+'_'+str(len(graph.Legendes)) dicC={ 'Val' : lval, @@ -221,11 +231,11 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args): # 1.2.2. Mot-clé LIST_RESU elif typi=='LIST_RESU': if interp and iocc>0: - U2MESS('S', 'FONCT0_2') + UTMESS('S', 'FONCT0_2') lx=dCi['LIST_PARA'].Valeurs() lr=obj.Valeurs() if len(lx)!=len(lr): - U2MESS('S', 'FONCT0_3') + UTMESS('S', 'FONCT0_3') # on stocke les données dans le Graph dicC={ 'Val' : [lx,lr], @@ -241,9 +251,9 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args): ob2=dCi['FONC_Y'] # peut-on blinder au niveau du catalogue if isinstance(obj, nappe_sdaster) or isinstance(ob2, nappe_sdaster): - U2MESS('S', 'FONCT0_4') + UTMESS('S', 'FONCT0_4') if interp and iocc>0: - U2MESS('S', 'FONCT0_5') + UTMESS('S', 'FONCT0_5') ftmp__=obj dpar=ftmp__.Parametres() ftm2__=ob2 @@ -300,11 +310,11 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args): # 1.2.4. Mot-clé ABSCISSE / ORDONNEE elif typi=='ABSCISSE': if interp and iocc>0: - U2MESS('S', 'FONCT0_6') + UTMESS('S', 'FONCT0_6') lx=obj lr=dCi['ORDONNEE'] if len(lx)!=len(lr): - U2MESS('S', 'FONCT0_7') + UTMESS('S', 'FONCT0_7') # on stocke les données dans le Graph dicC={ 'Val' : [lx,lr], @@ -357,10 +367,11 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args): if FORMAT=='TABLEAU': # surcharge par les formats de l'utilisateur kargs['dform']={ - 'csep' : args['SEPARATEUR'], - 'ccom' : args['COMMENTAIRE'], - 'cdeb' : args['DEBUT_LIGNE'], - 'cfin' : args['FIN_LIGNE'] + 'csep' : args['SEPARATEUR'], + 'ccom' : args['COMMENTAIRE'], + 'ccpara' : args['COMM_PARA'], + 'cdeb' : args['DEBUT_LIGNE'], + 'cfin' : args['FIN_LIGNE'], } # 2.2. au format AGRAF @@ -378,7 +389,7 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args): # 2.39. Format inconnu else: - U2MESS('S', 'FONCT0_8', valk=FORMAT) + UTMESS('S', 'FONCT0_8', valk=FORMAT) # Traiter le cas des UL réservées if args['UNITE'] and args['UNITE'] in ul_reserve: diff --git a/Aster/Cata/cataSTA9/Macro/impr_oar_ops.py b/Aster/Cata/cataSTA9/Macro/impr_oar_ops.py index 44cebecc..0a45e207 100644 --- a/Aster/Cata/cataSTA9/Macro/impr_oar_ops.py +++ b/Aster/Cata/cataSTA9/Macro/impr_oar_ops.py @@ -1,4 +1,4 @@ -#@ MODIF impr_oar_ops Macro DATE 07/11/2006 AUTEUR DURAND C.DURAND +#@ MODIF impr_oar_ops Macro DATE 19/11/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -18,12 +18,13 @@ # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -import aster -try : - from Utilitai.Utmess import UTMESS +# protection pour eficas +try: + import aster + from Utilitai.Utmess import UTMESS from Utilitai.Table import Table from Utilitai.partition import MAIL_PY -except : +except: pass def buildTabString(tabLevel): @@ -284,12 +285,12 @@ class composant(OAR_element) : self.mergeDictTher() # merge les tableaux resultats du revetement et de la structure if not(self.compareListAbscTher()) : - UTMESS('F', 'IMPR_OAR', 'LES COUPES MECANIQUES ET THERMIQUE DOIVENT PARTAGER LES MEMES ABSCISSES') + UTMESS('F','OAR0_1') try : self.interpoleInstants() # Interpolation des instants de la table des température sur celle de la table mécanique except interpolationError, err: - UTMESS('F', 'IMPR_OAR', err.getMess()) + UTMESS('F','OAR0_2',valk=err.getMess()) # 3. Calcul de l'épaisseur de la coupe. self.epaisseur = abs(self.tabAbscisses[len(self.tabAbscisses)-1] - self.tabAbscisses[0]) @@ -352,7 +353,7 @@ class composant(OAR_element) : # Merge des listes d'abscisses # Le revetement est interieur la derniere abscisse du revetement doit etre egal a la premiere de la structure if self.tabAbscisses_S[len(self.tabAbscisses_S)-1] != self.tabAbscisses[0] : - UTMESS('F', 'IMPR_OAR', 'LES COUPES DU REVETEMENT ET DE LA STRUCTURE DOIVENT PARTAGER UNE ABSCISSE COMMUNE') + UTMESS('F','OAR0_3') # On construit une table des abscisses tempopraire tableAbscTemp = self.tabAbscisses_S @@ -492,7 +493,7 @@ class composant(OAR_element) : # Merge des listes d'abscisses # Le revetement est interieur la derniere abscisse du revetement doit etre egal a la premiere de la structure if self.tabAbscisses_S[len(self.tabAbscisses_S)-1] != self.tabAbscisses[0] : - UTMESS('F', 'IMPR_OAR', 'LES COUPES DU REVETEMENT ET DE LA STRUCTURE DOIVENT PARTAGER UNE ABSCISSE COMMUNE') + UTMESS('F','OAR0_3') # On construit une table des abscisses tempopraire tableAbscTemp = self.tabAbscisses_S @@ -667,7 +668,7 @@ class tuyauterie(OAR_element) : self.buildTableTorseur() except : - UTMESS('F', 'IMPR_OAR', "ERREUR D'ACCES AUX DONNEES") + UTMESS('F','OAR0_4') # Construction de l arborescence self.buildTree() @@ -741,11 +742,11 @@ def impr_oar_ops(self, TYPE_CALC, **args) : if TYPE_CALC=='COMPOSANT' : obj = composant(**args) elif TYPE_CALC=='MEF' : - UTMESS('F', 'IMPR_OAR', 'FONCTION NON IMPLANTEE') + UTMESS('F','OAR0_5') elif TYPE_CALC=='TUYAUTERIE' : obj = tuyauterie(**args) else : - UTMESS('F', 'IMPR_OAR', 'Mot clé facteur inconnu') + UTMESS('F','OAR0_6') # Ecriture dans le fichier # Récupération de la LU du fichier de sortie @@ -766,7 +767,7 @@ def impr_oar_ops(self, TYPE_CALC, **args) : else : # extension du fichier existant fileObj = open(name, 'a+t') except IOError : - UTMESS('F', 'IMPR_OAR', "Erreur à l'ouverture du fichier") + UTMESS('F','OAR0_7') else : obj.getNode().save(fileObj) fileObj.close() diff --git a/Aster/Cata/cataSTA9/Macro/impr_table_ops.py b/Aster/Cata/cataSTA9/Macro/impr_table_ops.py index 06d4c5eb..70cecd7b 100644 --- a/Aster/Cata/cataSTA9/Macro/impr_table_ops.py +++ b/Aster/Cata/cataSTA9/Macro/impr_table_ops.py @@ -1,4 +1,4 @@ -#@ MODIF impr_table_ops Macro DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF impr_table_ops Macro DATE 06/05/2008 AUTEUR CNGUYEN C.NGUYEN # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -22,9 +22,7 @@ import os.path import re - -from types import ListType, TupleType, StringTypes -EnumTypes=(ListType, TupleType) +from sets import Set # ------------------------------------------------------------------------------ @@ -37,7 +35,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args): import aster from Accas import _F from Cata.cata import table_jeveux - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS from Utilitai.UniteAster import UniteAster ier=0 # La macro compte pour 1 dans la numerotation des commandes @@ -60,8 +58,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args): nomfich=UL.Nom(args['UNITE']) if nomfich and os.path.exists(nomfich) and os.stat(nomfich).st_size<>0: if FORMAT=='XMGRACE': - UTMESS('A',macro,'Le fichier '+nomfich+' existe déjà, on écrit ' \ - 'à la suite.') + UTMESS('A','TABLE0_6',valk=nomfich) # 0.2. Création des dictionnaires des FILTRES Filtre=[] @@ -79,7 +76,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args): ltab=[] if args['SENSIBILITE']: lps=args['SENSIBILITE'] - if not type(lps) in EnumTypes: + if not type(lps) in (list, tuple): lps=[lps,] for ps in lps: ncomp = self.jdc.memo_sensi.get_nocomp(TABLE.nom, ps.nom) @@ -98,7 +95,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args): nom_para=ltab[0][0].para if args['NOM_PARA']: nom_para=args['NOM_PARA'] - if not type(nom_para) in EnumTypes: + if not type(nom_para) in (list, tuple): nom_para=[nom_para,] # 0.4.2. Traiter le cas des UL réservées @@ -142,7 +139,7 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args): # vérification des paramètres for p in nom_para: if not p in tab.para: - UTMESS('A', 'IMPR_TABLE', 'Paramètre absent de la table : %s' % p) + UTMESS('A','TABLE0_7',valk=p) # sélection des paramètres et suppression des colonnes vides timp = tab[nom_para] @@ -161,55 +158,72 @@ def impr_table_ops(self, FORMAT, TABLE, INFO, **args): 'FICHIER' : nomfich, } - # 4.1. au format AGRAF - if FORMAT=='AGRAF': + # 4.1. au format TABLEAU + if FORMAT=='TABLEAU': + # surcharge par les formats de l'utilisateur + kargs['dform']={ + 'csep' : args['SEPARATEUR'], + 'ccom' : args['COMMENTAIRE'], + 'ccpara' : args['COMM_PARA'], + 'cdeb' : args['DEBUT_LIGNE'], + 'cfin' : args['FIN_LIGNE'], + } + + # 4.2. au format AGRAF + elif FORMAT=='AGRAF': kargs['dform']={ 'formR' : '%12.5E' } kfonc['FORMAT']='TABLEAU' - # 4.2. au format XMGRACE et dérivés + # 4.3. au format XMGRACE et dérivés elif FORMAT=='XMGRACE': kargs['dform']={ 'formR' : '%.8g' } kargs['PILOTE']=args['PILOTE'] kfonc['PILOTE']=args['PILOTE'] - # 4.3. format spécifié dans les arguments + # 4.4. format spécifié dans les arguments if args['FORMAT_R']: kargs['dform'].update({ 'formR' : fmtF2PY(args['FORMAT_R']) }) - # 4.4. regroupement par paramètre : PAGINATION + # 4.5. regroupement par paramètre : PAGINATION if args['PAGINATION']: l_ppag=args['PAGINATION'] - if not type(l_ppag) in EnumTypes: + if not type(l_ppag) in (list, tuple): l_ppag=[l_ppag,] kargs['PAGINATION'] = [p for p in l_ppag if p in nom_para] l_para_err = [p for p in l_ppag if not p in nom_para] if len(l_para_err)>0: - UTMESS('A', 'IMPR_TABLE', 'Paramètres absents de la table (ou de '\ - 'NOM_PARA) : %s' % ', '.join(l_para_err)) + UTMESS('A','TABLE0_8',valk=l_para_err) timp.Impr(**kargs) # ----- 5. IMPR_FONCTION='OUI' - if args['IMPR_FONCTION'] and args['IMPR_FONCTION']=='OUI': + if args['IMPR_FONCTION'] == 'OUI': # cherche parmi les cellules celles qui contiennent un nom de fonction - dfon={} - for row in timp['FONCTION', 'FONCTION_C']: - for par,cell in row.items(): - if type(cell) in StringTypes: - if aster.getvectjev(cell.strip().ljust(19)+'.PROL')<>None: - dfon[cell.strip().ljust(19)]=par - # impression des fonctions trouvées - for f,par in dfon.items(): - __fonc=RECU_FONCTION( - TABLE=sdtab, - FILTRE=_F( - NOM_PARA=par, - VALE_K=f, - ), - NOM_PARA_TABL=par, - ) - __fonc.Trace(**kfonc) - DETRUIRE(CONCEPT=_F(NOM=('__fonc',),), ALARME='NON', INFO=1,) + dfon = [] + p_extr = Set(['FONCTION', 'FONCTION_C']) + p_extr.intersection_update(timp.para) + if len(p_extr) > 0: + # on réduit timp aux colonnes FONCTION et FONCTION_C + textr = timp.__getitem__(list(p_extr)) + for row in textr: + for par,cell in row.items(): + if type(cell) in (str, unicode): + cell = cell.strip() + if aster.getvectjev('%-19s.PROL' % cell) != None: + dfon.append(['%-19s' % cell, par]) + # impression des fonctions trouvées + for f,par in dfon: + __fonc=RECU_FONCTION( + TABLE=sdtab, + FILTRE=_F( + NOM_PARA=par, + VALE_K=f, + ), + NOM_PARA_TABL=par, + TITRE = 'Fonction %s' % f, + ) + __fonc.Trace(**kfonc) + DETRUIRE(CONCEPT=_F(NOM=('__fonc',),), ALARME='NON', INFO=1,) # 99. Traiter le cas des UL réservées UL.EtatInit() diff --git a/Aster/Cata/cataSTA9/Macro/info_fonction_ops.py b/Aster/Cata/cataSTA9/Macro/info_fonction_ops.py index 0fe9c89e..67fc3efe 100644 --- a/Aster/Cata/cataSTA9/Macro/info_fonction_ops.py +++ b/Aster/Cata/cataSTA9/Macro/info_fonction_ops.py @@ -1,4 +1,4 @@ -#@ MODIF info_fonction_ops Macro DATE 24/10/2006 AUTEUR DURAND C.DURAND +#@ MODIF info_fonction_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -26,7 +26,7 @@ def info_fonction_ops(self,RMS,NOCI_SEISME,MAX,NORME,ECART_TYPE,INFO,**args): from Utilitai.t_fonction import t_fonction,t_fonction_c,t_nappe import math from Accas import _F - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS import types from types import ListType, TupleType EnumTypes = (ListType, TupleType) @@ -83,14 +83,14 @@ def info_fonction_ops(self,RMS,NOCI_SEISME,MAX,NORME,ECART_TYPE,INFO,**args): lpara=dict([(i,0) for i in lpara]).keys() lresu=dict([(i,0) for i in lresu]).keys() if len(ltyfo)>1 : - UTMESS('F','INFO_FONCTION',''' calcul du MAX, la liste de fonctions\ - n'est pas homogène en type (fonctions et nappes) ''') +# n'est pas homogène en type (fonctions et nappes) ''') + UTMESS('F','FONCT0_37') if len(lpara)>1 : - UTMESS('F','INFO_FONCTION',''' calcul du MAX, la liste de fonctions\ - n'est pas homogène en label NOM_PARA :'''+' '.join(lpara)) +# n'est pas homogène en label NOM_PARA :'''+' '.join(lpara)) + UTMESS('F','FONCT0_38',valk=' '.join(lpara)) if len(lresu)>1 : - UTMESS('F','INFO_FONCTION',''' calcul du MAX, la liste de fonctions\ - n'est pas homogène en label NOM_RESU : '''+' '.join(lresu)) +# n'est pas homogène en label NOM_RESU : '''+' '.join(lresu)) + UTMESS('F','FONCT0_39',valk=' '.join(lresu)) __tab=CALC_TABLE(TABLE = __tmfonc[0], ACTION = mfact ) __min=CALC_TABLE(TABLE = __tab, @@ -183,9 +183,9 @@ def info_fonction_ops(self,RMS,NOCI_SEISME,MAX,NORME,ECART_TYPE,INFO,**args): if NOCI_SEISME['SPEC_OSCI'] !=None : ### cas intensité spectrale d'une nappe de SRO ### la seule option licite est INTE_SPEC - UTMESS('I','INFO_FONCTION',''' : intensite spectrale, avant de calculer l'\ -intensite spectrale, il est prudent de verifier la norme de la nappe sur laquelle \ -porte le calcul, ceci peut etre une source d erreurs.''') +#intensite spectrale, il est prudent de verifier la norme de la nappe sur laquelle \ +#porte le calcul, ceci peut etre une source d erreurs.''') + UTMESS('I','FONCT0_40') amor=NOCI_SEISME['AMOR_REDUIT'] fini=NOCI_SEISME['FREQ_INIT' ] ffin=NOCI_SEISME['FREQ_FIN' ] diff --git a/Aster/Cata/cataSTA9/Macro/lire_fonction_ops.py b/Aster/Cata/cataSTA9/Macro/lire_fonction_ops.py index 748774ea..870ca6b4 100644 --- a/Aster/Cata/cataSTA9/Macro/lire_fonction_ops.py +++ b/Aster/Cata/cataSTA9/Macro/lire_fonction_ops.py @@ -1,4 +1,4 @@ -#@ MODIF lire_fonction_ops Macro DATE 24/05/2005 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF lire_fonction_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -20,6 +20,9 @@ import os.path, Numeric +class LectureBlocError(Exception): + pass + # ------------------------------------------------------------------------------ def lire_blocs(nomfich, SEPAR): """Retourne la liste des blocs @@ -29,9 +32,8 @@ def lire_blocs(nomfich, SEPAR): print " . Bloc %2d : %6d lignes, %6d colonnes" % (ib, nlig, ncol) print " Lecture des blocs du fichier '%s'" % nomfich fich=open(nomfich, 'r') - ier=0 - message = '' - if SEPAR=='None' : SEPAR=None + if SEPAR == 'None': + SEPAR=None blocs = [] lignes = [] llen=0 @@ -45,10 +47,8 @@ def lire_blocs(nomfich, SEPAR): lignes.append(map(float, splin)) if llen==0: llen=len(splin) - elif len(splin)<>llen: - ier+=1 - message='Ligne %d : %d champs au lieu de %d attendus' % (il,len(splin),llen) - return ier, message, [] + elif len(splin) != llen: + raise LectureBlocError, 'Ligne %d : %d champs au lieu de %d attendus' % (il, len(splin), llen) except ValueError: if lignes==[]: pass # dans ce cas, on a plusieurs lignes délimitant 2 fonctions @@ -58,10 +58,10 @@ def lire_blocs(nomfich, SEPAR): lignes=[] llen=0 fich.close() - if lignes!=[] : + if len(lignes) > 0 : blocs.append(Numeric.array(lignes)) info(len(blocs), len(lignes), llen) - return ier, message, blocs + return blocs # ------------------------------------------------------------------------------ def liste_double(nomfich,INDIC_PARA,INDIC_RESU,SEPAR): @@ -75,9 +75,7 @@ def liste_double(nomfich,INDIC_PARA,INDIC_RESU,SEPAR): fonction voulue, au sens de ce découpage. """ from Utilitai.transpose import transpose - ier, message, blocs = lire_blocs(nomfich, SEPAR) - if ier<>0: - return ier,message,[] + blocs = lire_blocs(nomfich, SEPAR) # vérifications de cohérences lignes et colonnes nb_blocs = len(blocs) @@ -85,71 +83,56 @@ def liste_double(nomfich,INDIC_PARA,INDIC_RESU,SEPAR): col_para = INDIC_PARA[1] bloc_resu = INDIC_RESU[0] col_resu = INDIC_RESU[1] - msg=[] - if bloc_para>nb_blocs : - ier+=1 - msg.append("Il y a %d blocs or INDIC_PARA=(%d, .)" % (nb_blocs, bloc_para)) - if bloc_resu>nb_blocs: - ier+=1 - msg.append("Il y a %d blocs or INDIC_RESU=(%d, .)" % (nb_blocs, bloc_resu)) - if ier<>0: - return ier, '\n'.join(msg), [] + if bloc_para > nb_blocs : + raise LectureBlocError, "Il y a %d blocs or INDIC_PARA=(%d, .)" % (nb_blocs, bloc_para) + if bloc_resu > nb_blocs: + raise LectureBlocError, "Il y a %d blocs or INDIC_RESU=(%d, .)" % (nb_blocs, bloc_resu) - if col_para>len(blocs[bloc_para-1][0]): - ier+=1 - msg.append("Le bloc %d comporte %d colonnes or INDIC_PARA=(., %d)" % \ - (bloc_para, len(blocs[bloc_para-1][0]), col_para)) - if col_resu>len(blocs[bloc_resu-1][0]) : - ier+=1 - msg.append("Le bloc %d comporte %d colonnes or INDIC_RESU=(., %d)" % \ - (bloc_resu, len(blocs[bloc_resu-1][0]), col_resu)) - if ier<>0: - return ier, '\n'.join(msg), [] + if col_para > len(blocs[bloc_para-1][0]): + raise LectureBlocError, "Le bloc %d comporte %d colonnes or INDIC_PARA=(., %d)" % \ + (bloc_para, len(blocs[bloc_para-1][0]), col_para) + if col_resu > len(blocs[bloc_resu-1][0]): + raise LectureBlocError, "Le bloc %d comporte %d colonnes or INDIC_RESU=(., %d)" % \ + (bloc_resu, len(blocs[bloc_resu-1][0]), col_resu) # construction du VALE de la fonction par recherche des indices # de colonnes et de fonctions dans le tableau blocs vale_para = blocs[bloc_para-1][:,col_para-1] vale_resu = blocs[bloc_resu-1][:,col_resu-1] - if len(vale_para)!=len(vale_resu) : - ier+=1 + if len(vale_para) != len(vale_resu) : print 'VALE_PARA =', vale_para print 'VALE_RESU =', vale_resu message="""Les deux colonnes extraites n'ont pas la meme longueur %d lignes pour PARA %d lignes pour RESU""" % (len(vale_para), len(vale_resu)) - if ier<>0: - return ier,message,[] + raise LectureBlocError, message laux=transpose([vale_para, vale_resu]) liste_vale=[] - for v in laux: liste_vale.extend(v) - return ier,'',liste_vale + for v in laux: + liste_vale.extend(v) + return liste_vale # ------------------------------------------------------------------------------ def liste_simple(nomfich,INDIC_PARA,SEPAR): """recherche d'une liste simple """ - ier, message, blocs = lire_blocs(nomfich, SEPAR) + blocs = lire_blocs(nomfich, SEPAR) # vérifications de cohérences lignes et colonnes nb_blocs = len(blocs) bloc_para = INDIC_PARA[0] col_para = INDIC_PARA[1] - msg=[] - if bloc_para>nb_blocs : - ier+=1 - msg.append("Il y a %d blocs or INDIC_PARA=(%d, .)" % (nb_blocs, bloc_para)) - if col_para>len(blocs[bloc_para-1][0]): - ier+=1 - msg.append("Le bloc %d comporte %d colonnes or INDIC_PARA=(., %d)" % \ - (bloc_para, len(blocs[bloc_para-1][0]), col_para)) - if ier<>0: - return ier, '\n'.join(msg), [] + if bloc_para > nb_blocs : + raise LectureBlocError, "Il y a %d blocs or INDIC_PARA=(%d, .)" % (nb_blocs, bloc_para) + if col_para > len(blocs[bloc_para-1][0]): + raise LectureBlocError, "Le bloc %d comporte %d colonnes or INDIC_PARA=(., %d)" % \ + (bloc_para, len(blocs[bloc_para-1][0]), col_para) # construction du VALE de la fonction par recherche des indices # de colonnes et de fonctions dans le tableau l_fonc vale_1=blocs[bloc_para-1][:,col_para-1] - return ier,'',vale_1.tolist() + return vale_1.tolist() # ------------------------------------------------------------------------------ def lire_fonction_ops(self,FORMAT,TYPE,SEPAR,INDIC_PARA,UNITE, @@ -158,7 +141,7 @@ def lire_fonction_ops(self,FORMAT,TYPE,SEPAR,INDIC_PARA,UNITE, """Méthode corps de la macro """ from Accas import _F - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS from Utilitai.UniteAster import UniteAster ier=0 @@ -179,15 +162,17 @@ def lire_fonction_ops(self,FORMAT,TYPE,SEPAR,INDIC_PARA,UNITE, UL = UniteAster() nomfich=UL.Nom(UNITE) if not os.path.isfile(nomfich): - UTMESS('F', nompro, "le fichier '%s' est introuvable" % nomfich) + UTMESS('F','FONCT0_41',valk=nomfich) # fonction(_c) ou nappe en sortie self.DeclareOut('ut_fonc',self.sd) if TYPE=='FONCTION': # mise en forme de la liste de valeurs suivant le format choisi : - ier,message,liste_vale=liste_double(nomfich,INDIC_PARA,args['INDIC_RESU'],SEPAR) - if ier!=0: UTMESS('F', nompro, message) + try: + liste_vale = liste_double(nomfich,INDIC_PARA,args['INDIC_RESU'],SEPAR) + except LectureBlocError, message: + UTMESS('F', 'FONCT0_42', valk=message) # création de la fonction ASTER : ut_fonc=DEFI_FONCTION( NOM_PARA =NOM_PARA, @@ -208,11 +193,15 @@ def lire_fonction_ops(self,FORMAT,TYPE,SEPAR,INDIC_PARA,UNITE, if 'INDIC_MODU' in args : indic1=args['INDIC_MODU'] indic2=args['INDIC_PHAS'] - ier,message,liste_vale_r=liste_double(nomfich,INDIC_PARA,indic1,SEPAR) - if ier!=0: UTMESS('F', nompro, message) + try: + liste_vale_r = liste_double(nomfich,INDIC_PARA,indic1,SEPAR) + except LectureBlocError, message: + UTMESS('F', 'FONCT0_42', valk=message) - ier,message,liste_vale_i=liste_double(nomfich,INDIC_PARA,indic2,SEPAR) - if ier!=0: UTMESS('F', nompro, message) + try: + liste_vale_i = liste_double(nomfich,INDIC_PARA,indic2,SEPAR) + except LectureBlocError, message: + UTMESS('F', 'FONCT0_42', valk=message) liste=[] if 'INDIC_REEL' in args : @@ -241,15 +230,19 @@ def lire_fonction_ops(self,FORMAT,TYPE,SEPAR,INDIC_PARA,UNITE, motscles={} motscles['DEFI_FONCTION']=[] for elem in mc_DEFI_FONCTION: - ier,message,liste_vale=liste_double(nomfich,args['INDIC_ABSCISSE'],elem['INDIC_RESU'],SEPAR) - if ier!=0: UTMESS('F', nompro, message) + try: + liste_vale=liste_double(nomfich,args['INDIC_ABSCISSE'],elem['INDIC_RESU'],SEPAR) + except LectureBlocError, message: + UTMESS('F', 'FONCT0_42', valk=message) motscles['DEFI_FONCTION'].append( _F( VALE =liste_vale, INTERPOL =args['INTERPOL_FONC'], PROL_DROITE=args['PROL_DROITE_FONC'], PROL_GAUCHE=args['PROL_GAUCHE_FONC'] ) ) - ier,message,liste_para=liste_simple(nomfich,INDIC_PARA,SEPAR) - if ier!=0: UTMESS('F', nompro, message) + try: + liste_para = liste_simple(nomfich,INDIC_PARA,SEPAR) + except LectureBlocError, message: + UTMESS('F', 'FONCT0_42', valk=message) # création de la nappe ut_fonc=DEFI_NAPPE( PARA =liste_para, diff --git a/Aster/Cata/cataSTA9/Macro/lire_inte_spec_ops.py b/Aster/Cata/cataSTA9/Macro/lire_inte_spec_ops.py index e4f1188d..708dfef4 100644 --- a/Aster/Cata/cataSTA9/Macro/lire_inte_spec_ops.py +++ b/Aster/Cata/cataSTA9/Macro/lire_inte_spec_ops.py @@ -1,4 +1,4 @@ -#@ MODIF lire_inte_spec_ops Macro DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF lire_inte_spec_ops Macro DATE 26/03/2008 AUTEUR BODEL C.BODEL # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -18,100 +18,247 @@ # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -def lire_inte_spec_ops(self,UNITE,FORMAT,NOM_PARA,NOM_RESU,INTERPOL, - PROL_DROITE,PROL_GAUCHE,TITRE,INFO,**args): - ier=0 - - from Accas import _F - import os - from math import cos,sin - from Utilitai.Utmess import UTMESS - from Utilitai.UniteAster import UniteAster - # On importe les definitions des commandes a utiliser dans la macro - DEFI_FONCTION =self.get_cmd('DEFI_FONCTION') - CREA_TABLE =self.get_cmd('CREA_TABLE') - - # La macro compte pour 1 dans la numerotation des commandes - self.set_icmd(1) - nompro='LIRE_INTE_SPEC' - - # Lecture de la fonction dans un fichier d unité logique UNITE - UL = UniteAster() - nomfich=UL.Nom(UNITE) - if not os.path.isfile(nomfich): - UTMESS('F', nompro, "le fichier '%s' est introuvable" % nomfich) - file=open(nomfich,'r') - texte=file.read() - file.close() - - list_fonc=texte.split('FONCTION_C') - entete=list_fonc.pop(0) - try : - entete=entete[entete.index('DIM'):] - dim=int(entete[entete.index('=')+1:entete.index('\n')]) - except ValueError : - UTMESS('F', nompro, "la dimension DIM n est pas précisée dans le fichier lu") - - if len(list_fonc)!=(dim*(dim+1)/2): - UTMESS('F', nompro, "nombre de fonctions incorrect") - - nume_i=[] - nume_j=[] - l_fonc=[] - for i in range(dim*(dim+1)/2): - numi=list_fonc[i][list_fonc[i].index('I =')+3:] - numi=numi[:numi.index('\n')] - nume_i.append(int(numi)) - numj=list_fonc[i][list_fonc[i].index('J =')+3:] - numj=numj[:numj.index('\n')] - nume_j.append(int(numj)) - try : - vale_fonc=list_fonc[i][list_fonc[i].index('VALEUR =\n')+9:list_fonc[i].index('FINSF\n')] - vale_fonc=vale_fonc.replace('\n',' ') - vale_fonc=map(float,vale_fonc.split()) - except ValueError : - UTMESS('F', nompro, "erreur dans les données de fonctions") - - liste=[] - if FORMAT=='REEL_IMAG': - liste=vale_fonc - elif FORMAT=='MODULE_PHASE': - for i in range(len(vale_fonc)/3) : - module=vale_fonc[3*i+1] - phase =vale_fonc[3*i+2] - liste=liste+[vale_fonc[3*i],module*cos(phase),module*sin(phase)] - - # création de la fonction ASTER : - _fonc=DEFI_FONCTION( NOM_PARA =NOM_PARA, - NOM_RESU =NOM_RESU, - PROL_DROITE=PROL_DROITE, - PROL_GAUCHE=PROL_GAUCHE, - INTERPOL =INTERPOL, - INFO =INFO, - TITRE =TITRE, - VALE_C =liste,) - l_fonc.append(_fonc.nom) - - nume_ib=[] - nume_jb=[] - for i in range(dim): - for j in range(i,dim): - nume_ib.append(i+1) - nume_jb.append(j+1) - if nume_i!=nume_ib or nume_j!=nume_jb : - UTMESS('F', nompro, "erreur dans les indices") - mcfact=[] - mcfact.append(_F(PARA='NOM_CHAM' ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,))) - mcfact.append(_F(PARA='OPTION' ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,))) - mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(dim,) ,NUME_LIGN=(1,))) - mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i ,NUME_LIGN=range(2,len(nume_i)+2))) - mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j ,NUME_LIGN=range(2,len(nume_j)+2))) - mcfact.append(_F(PARA='FONCTION_C' ,LISTE_K=l_fonc ,NUME_LIGN=range(2,len(list_fonc)+2))) - self.DeclareOut('tab_inte',self.sd) - tab_inte=CREA_TABLE(LISTE=mcfact, - TITRE=TITRE, - TYPE_TABLE='TABLE_FONCTION') - - # remet UNITE dans son état initial - UL.EtatInit() - return ier +def lire_inte_spec_ops(self, + UNITE = None, + FORMAT = None, + FORMAT_C = None, + NOM_PARA = None, + NOM_RESU = None, + INTERPOL = None, + PROL_DROITE = None, + PROL_GAUCHE = None, + TITRE = None, + INFO = None, + **args): + ier=0 + + from Accas import _F + import os + from math import cos,sin,sqrt + from Utilitai.Utmess import UTMESS + from Utilitai.UniteAster import UniteAster + # On importe les definitions des commandes a utiliser dans la macro + DEFI_FONCTION =self.get_cmd('DEFI_FONCTION') + CREA_TABLE =self.get_cmd('CREA_TABLE') + + # La macro compte pour 1 dans la numerotation des commandes + self.set_icmd(1) + nompro='LIRE_INTE_SPEC' + + # Lecture de la fonction dans un fichier d unité logique UNITE + UL = UniteAster() + nomfich=UL.Nom(UNITE) + if not os.path.isfile(nomfich): + UTMESS('F','SPECTRAL0_4',valk=nomfich) + file=open(nomfich,'r') + texte=file.read() + file.close() + + + if FORMAT == 'IDEAS': + # fabrication d'une liste de data sets 58 + list_fonc = texte.split(' -1') + j = 0 + for ind_fonc in range(len(list_fonc)): + try: + tmp = list_fonc[j].split() + if tmp[0] == '58': + j = j+1 + else: + list_fonc.pop(j) + except IndexError: + list_fonc.pop(j) + + nb_fonc = len(list_fonc) + if nb_fonc == 0: + UTMESS('F', 'SPECTRAL0_9') + + l_fonc = [] + l_noi = [] + l_noj = [] + l_cmpi = [] + l_cmpj = [] + for ind_fonc in range(nb_fonc): + # Extraction des en-tete : nom des noeuds, composantes (=ddl), de leur sens + fonc = list_fonc[ind_fonc] + ligne = fonc.split('\n') + + record_6 = ligne[7].split() + if record_6[0] != '2' and record_6[0] != '3' and record_6[0] != '9' : + UTMESS('F', 'SPECTRAL0_10') + nono = record_6[4] # nom du noeud + nuno = int(record_6[5]) # numero + ddlno = float(record_6[6])/10 # DDL + noref = record_6[7] # nom du noeud de reference + nuref = int(record_6[8]) # numero + ddlref = float(record_6[9])/10 # DDL + # On traduit les ddl "chiffres" en vrais ddl. Avec le sens des capteurs. + sens_no,ddl_no = comp(ddlno) + sens_ref,ddl_ref = comp(ddlref) + signe = sens_no*sens_ref + + # On ne garde que la triang sup de la matrice inter-spectrale + crit1 = nuno + ddlno + crit2 = nuref + ddlref + if crit1 > crit2: + continue + record_7 = ligne[8].split() + nbpairs = int(record_7[1]) + if record_7[2] == 0: + UTMESS('F', 'SPECTRAL0_11') + f0 = float(record_7[3]) + df = float(record_7[4]) + + # Liste des valeurs + liste = fonc.split('\n') + valeurs = '' + for ind in range(13): + liste.pop(0) + for ind_lign in range(len(liste)): + valeurs = valeurs + liste[ind_lign] + tmp = valeurs.split() + valeurs = [signe*float(tmp[ind]) for ind in range(len(tmp))] + + liste = [] + freq = f0 + for ind_freq in range(nbpairs): + liste.append(freq) + liste.append(valeurs[2*ind_freq]) + liste.append(valeurs[2*ind_freq+1]) + freq = freq + df + + # création de la fonction ASTER : + _fonc=DEFI_FONCTION( NOM_PARA = NOM_PARA, + NOM_RESU = NOM_RESU, + PROL_DROITE= PROL_DROITE, + PROL_GAUCHE= PROL_GAUCHE, + INTERPOL = INTERPOL, + INFO = INFO, + TITRE = TITRE, + VALE_C = liste,) + l_fonc.append(_fonc.nom) # Liste des fonctions + l_noi.append('N'+str(nuno)) # Liste des noeuds de mesure + l_cmpi.append(ddl_no) # DDL associes + l_noj.append('N'+str(nuref)) # Liste des noeuds de ref + l_cmpj.append(ddl_ref) # DDL associes + + # Verification a posteriori de la dimension de l'inter-spectre + tmp = 0.5*(-1+sqrt(1+8*len(l_fonc))) + dim = int(tmp) + nb_fonc = 0.5*dim*(dim+1) + + if dim != tmp : + UTMESS('F', 'SPECTRAL0_6') + + + mcfact=[] + mcfact.append(_F(PARA='NOM_CHAM' ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,))) + mcfact.append(_F(PARA='OPTION' ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,))) + mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(dim) ,NUME_LIGN=(1,))) + mcfact.append(_F(PARA='NOEUD_I' ,LISTE_K=l_noi ,NUME_LIGN=range(2,nb_fonc+2))) + mcfact.append(_F(PARA='NOM_CMP_I' ,LISTE_K=l_cmpi ,NUME_LIGN=range(2,nb_fonc+2))) + mcfact.append(_F(PARA='NOEUD_J' ,LISTE_K=l_noj ,NUME_LIGN=range(2,nb_fonc+2))) + mcfact.append(_F(PARA='NOM_CMP_J' ,LISTE_K=l_cmpj ,NUME_LIGN=range(2,nb_fonc+2))) + mcfact.append(_F(PARA='FONCTION_C' ,LISTE_K=l_fonc ,NUME_LIGN=range(2,nb_fonc+2))) + self.DeclareOut('tab_inte',self.sd) + tab_inte=CREA_TABLE(LISTE=mcfact, + TITRE=TITRE, + TYPE_TABLE='TABLE_FONCTION') + + + elif FORMAT == 'ASTER': + list_fonc=texte.split('FONCTION_C') + entete=list_fonc.pop(0) + try : + entete=entete[entete.index('DIM'):] + dim=int(entete[entete.index('=')+1:entete.index('\n')]) + except ValueError : + UTMESS('F', 'SPECTRAL0_5') + + if len(list_fonc)!=(dim*(dim+1)/2): + UTMESS('F', 'SPECTRAL0_6') + + nume_i=[] + nume_j=[] + l_fonc=[] + for i in range(dim*(dim+1)/2): + numi=list_fonc[i][list_fonc[i].index('I =')+3:] + numi=numi[:numi.index('\n')] + nume_i.append(int(numi)) + numj=list_fonc[i][list_fonc[i].index('J =')+3:] + numj=numj[:numj.index('\n')] + nume_j.append(int(numj)) + try : + vale_fonc=list_fonc[i][list_fonc[i].index('VALEUR =\n')+9:list_fonc[i].index('FINSF\n')] + vale_fonc=vale_fonc.replace('\n',' ') + vale_fonc=map(float,vale_fonc.split()) + except ValueError : + UTMESS('F', 'SPECTRAL0_7') + + liste=[] + if FORMAT_C=='REEL_IMAG': + liste=vale_fonc + elif FORMAT_C=='MODULE_PHASE': + for i in range(len(vale_fonc)/3) : + module=vale_fonc[3*i+1] + phase =vale_fonc[3*i+2] + liste=liste+[vale_fonc[3*i],module*cos(phase),module*sin(phase)] + + + # création de la fonction ASTER : + _fonc=DEFI_FONCTION( NOM_PARA =NOM_PARA, + NOM_RESU =NOM_RESU, + PROL_DROITE=PROL_DROITE, + PROL_GAUCHE=PROL_GAUCHE, + INTERPOL =INTERPOL, + INFO =INFO, + TITRE =TITRE, + VALE_C =liste,) + l_fonc.append(_fonc.nom) + + nume_ib=[] + nume_jb=[] + for i in range(dim): + for j in range(i,dim): + nume_ib.append(i+1) + nume_jb.append(j+1) + if nume_i!=nume_ib or nume_j!=nume_jb : + UTMESS('F', 'SPECTRAL0_3') + mcfact=[] + mcfact.append(_F(PARA='NOM_CHAM' ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,))) + mcfact.append(_F(PARA='OPTION' ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,))) + mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(dim,) ,NUME_LIGN=(1,))) + mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i ,NUME_LIGN=range(2,len(nume_i)+2))) + mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j ,NUME_LIGN=range(2,len(nume_j)+2))) + mcfact.append(_F(PARA='FONCTION_C' ,LISTE_K=l_fonc ,NUME_LIGN=range(2,len(list_fonc)+2))) + self.DeclareOut('tab_inte',self.sd) + tab_inte=CREA_TABLE(LISTE=mcfact, + TITRE=TITRE, + TYPE_TABLE='TABLE_FONCTION') + + else: + # mot-clé != 'ASTER', ou 'IDEAS' => ERREUR ! + UTMESS('F', 'SPECTRAL0_12') + + + # remet UNITE dans son état initial + UL.EtatInit() + return ier + + + +def comp(ddlno): + sens = 1 + if ddlno < 0: + sens = -1 + if ddlno == .1:return sens,'DX' + elif ddlno == .2:return sens,'DY' + elif ddlno == .3:return sens,'DZ' + elif ddlno == .4:return sens,'DRX' + elif ddlno == .5:return sens,'DRY' + elif ddlno == .6:return sens,'DRZ' + else: + print "Probleme pour l'attribution des composantes" + + + diff --git a/Aster/Cata/cataSTA9/Macro/lire_table_ops.py b/Aster/Cata/cataSTA9/Macro/lire_table_ops.py index af24a012..80927fff 100644 --- a/Aster/Cata/cataSTA9/Macro/lire_table_ops.py +++ b/Aster/Cata/cataSTA9/Macro/lire_table_ops.py @@ -1,4 +1,4 @@ -#@ MODIF lire_table_ops Macro DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF lire_table_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -35,6 +35,7 @@ def lecture_table(texte, nume, separ): """ from Utilitai.transpose import transpose from Utilitai.Table import Table + from Utilitai.Utmess import UTMESS tab_lue = {} nume_lign = [] @@ -49,9 +50,7 @@ def lecture_table(texte, nume, separ): l_txt = exp.findall(texte) nbbloc = len(l_txt) if nume > nbbloc: - message = """NUME_TABLE=%d incorrect : il n'y a que %d blocs de tables""" \ - """ dans le fichier""" % (nume, nbbloc) - return 1, message, None + UTMESS('F', 'TABLE0_10', vali=(nume, nbbloc)) txttab = l_txt[nume - 1] # expression régulière pour extraire le titre @@ -82,11 +81,10 @@ def lecture_table(texte, nume, separ): for i, line in enumerate(txttab): mat = re.search(lfmt, line) if mat is None or nb_para != len(mat.groups()): - message = """Nombre de champs incorrect ligne %d. -Il y a %d paramètres""" % (i + 1, nb_para) - if hasattr(mat, 'groups'): - message += """, on a lu %d champs.""" % len(mat.groups()) - return 1, message, None + UTMESS('F+', 'TABLE0_11', vali=i + 1) + if mat is not None: + UTMESS('F+', 'TABLE0_12', vali=len(mat.groups())) + UTMESS('F', 'TABLE0_13', vali=nb_para) dico = {} for para, typ, ch in zip(list_para, list_type, mat.groups()): ch = ch.strip() @@ -101,14 +99,14 @@ Il y a %d param l_rows.append(dico) tab = Table(l_rows, list_para, list_type, titre_tab) - return 0, '', tab + return tab # ------------------------------------------------------------------------------ def lire_table_ops(self, **args): """Méthode corps de la macro LIRE_TABLE """ - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS from Utilitai.UniteAster import UniteAster ier = 0 @@ -138,9 +136,7 @@ def lire_table_ops(self, **args): ### mise en forme de la liste de valeurs suivant le format choisi : # pour le moment uniquement ASTER if FORMAT=='ASTER': - ier, message, tab_lue = lecture_table(texte, NUME_TABLE, SEPARATEUR) - if ier != 0 : - UTMESS('F', nompro, message) + tab_lue = lecture_table(texte, NUME_TABLE, SEPARATEUR) else: pass diff --git a/Aster/Cata/cataSTA9/Macro/macr_adap_mail_ops.py b/Aster/Cata/cataSTA9/Macro/macr_adap_mail_ops.py index e090e52d..276e72b6 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_adap_mail_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_adap_mail_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_adap_mail_ops Macro DATE 04/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF macr_adap_mail_ops Macro DATE 11/12/2007 AUTEUR GNICOLAS G.NICOLAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -22,7 +22,7 @@ """ Traitement des macros MACR_ADAP_MAIL/MACR_INFO_MAIL """ -__revision__ = "V1.1" +__revision__ = "V1.2" # def macr_adap_mail_ops ( self, INFO, VERSION_HOMARD, MAILLAGE_FRONTIERE, @@ -262,9 +262,7 @@ def macr_adap_mail_ops ( self, # if args.has_key("ZONE") : # - if args["ZONE"] is None : - les_zones = [] - else : + if args["ZONE"] is not None : les_zones = args["ZONE"] # for zone in les_zones : @@ -429,7 +427,7 @@ def macr_adap_mail_ops ( self, os.mkdir(Rep_Calc_HOMARD_global) except os.error,codret_partiel : self.cr.warn("Code d'erreur de mkdir : " + str(codret_partiel[0]) + " : " + codret_partiel[1]) - UTMESS("F", self.nom, "Impossible de créer le répertoire de travail pour HOMARD : "+Rep_Calc_HOMARD_global) + UTMESS("F",'HOMARD0_4',valk=Rep_Calc_HOMARD_global) # #==================================================================== # 4. Ecriture des commandes de creation des donnees MED @@ -646,7 +644,7 @@ def macr_adap_mail_ops ( self, #gn if dico_configuration.has_key("Indicateur") : #gn print "dico_configuration[Indicateur] = ", dico_configuration["Indicateur"] # -# 5.4. ==> Les zones de raffinement +# 5.4. ==> Les éventuelles zones de raffinement # prem = 1 for dico in liste_zones : @@ -721,7 +719,8 @@ def macr_adap_mail_ops ( self, #gn if ( mode_homard == "ADAP" ) : #gn if args.has_key("MAJ_CHAM") : #gn if args["MAJ_CHAM"] is not None : -#gn os.system("sleep 1000") +#gn import time +#gn time.sleep(3600) # #==================================================================== # 6. Ecriture de la commande d'exécution de homard @@ -740,9 +739,10 @@ def macr_adap_mail_ops ( self, ), LOGICIEL = homard ) -# os.system("sleep 3600") +#gn import time +#gn time.sleep(3600) # - #gn if ( mode_homard == "ADAP" ) : +#gn if ( mode_homard == "ADAP" ) : #gn fichier_homard_vers_aster_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster)) #gn shutil.copyfile(fichier_homard_vers_aster, fichier_homard_vers_aster_2) #gn fichier_homard_vers_aster_2_1 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster)+".1") @@ -782,7 +782,8 @@ def macr_adap_mail_ops ( self, maillage_np1_nom_med = dico["NOM_MED"] # # 7.2. ==> Les champs -#gn os.system("sleep 100") +#gn import time +#gn time.sleep(3600) # for dico in liste_champs : if ( dico["Type_Champ"] == "CHAMP_MAJ" ) : @@ -830,7 +831,7 @@ def macr_adap_mail_ops ( self, os.remove(fic) except os.error,codret_partiel : self.cr.warn("Code d'erreur de remove : " + str(codret_partiel[0]) + " : " + codret_partiel[1]) - UTMESS("F", self.nom, "Impossible de détruire le fichier : "+fic) + UTMESS("F",'HOMARD0_5',valk=fic) #gn print "Répertoire ",Rep_Calc_HOMARD_global #gn os.system("ls -la "+Rep_Calc_HOMARD_global) #gn print "Répertoire ",Rep_Calc_ASTER @@ -843,6 +844,7 @@ def macr_adap_mail_ops ( self, #==================================================================== # #gn if ( mode_homard == "ADAP" ) : -#gn os.system("sleep 1") +#gn import time +#gn time.sleep(3600) # return diff --git a/Aster/Cata/cataSTA9/Macro/macr_ascouf_calc_ops.py b/Aster/Cata/cataSTA9/Macro/macr_ascouf_calc_ops.py index fd92b608..e40741a6 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_ascouf_calc_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_ascouf_calc_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_ascouf_calc_ops Macro DATE 23/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF macr_ascouf_calc_ops Macro DATE 14/04/2008 AUTEUR GALENNE E.GALENNE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -32,7 +32,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA import math import aster from math import pi,sin,cos,sqrt,atan2 - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS ier=0 # On recopie les mots cles affe_materiau et impr_table pour les proteger mc_AFFE_MATERIAU=AFFE_MATERIAU @@ -65,14 +65,14 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE' : message= ' la condition aux limites sur bol a section conique \n' message=message+' est ignoree pour un coude avec sous-epaisseurs \n' - UTMESS('A', "MACR_ASCOUF_CALC", message) + UTMESS('A','ASCOUF0_1') elif (TYPE_MAILLAGE[:4]!='FISS') and (CL_BOL_P2_GV['AZIMUT']!=None) : - UTMESS('E', "MACR_ASCOUF_CALC", "mot-cle AZIMUT non autorise dans le cas d un coude sain") -# + UTMESS('E','ASCOUF0_2') + # if mc_IMPR_TABLE!=None : FLAG = 0 if (mc_IMPR_TABLE['NOM_PARA']==None) and (mc_IMPR_TABLE['POSI_ANGUL']==None) and (mc_IMPR_TABLE['POSI_CURV_LONGI']==None) : - UTMESS('E', "MACR_ASCOUF_CALC", "POSI_ANGUL POSI_CURV_LONGI est obligatoire") + UTMESS('E','ASCOUF0_3') return ier if (mc_IMPR_TABLE['NOM_PARA']!=None) : impr_table_nom_para= mc_IMPR_TABLE['NOM_PARA'] @@ -81,9 +81,9 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA FLAG = 1 if (((impt['ANGLE']==None) and (impt['POSI_ANGUL']==None) and (impt['R_CINTR' ]==None)) or ((impt['ANGLE']==None) and (impt['R_CINTR' ]==None) and (impt['POSI_CURV_LONGI']==None)) ) : - UTMESS('E', "MACR_ASCOUF_CALC", "il faut renseigner : ANGLE, R_CINTR et POSI_ANGUL ou ANGLE, R_CINTR et POSI_CURV_LONGI") + UTMESS('E','ASCOUF0_4') if (mc_IMPR_TABLE['NOM_PARA']==None) : FLAG = 1 - if not FLAG : UTMESS('A', "MACR_ASCOUF_CALC","ANGL_COUDE et ANGL_SOUS_EPAI sont inutiles dans ce cas") + if not FLAG : UTMESS('A','ASCOUF0_5') # #------------------------------------------------------------------ # @@ -91,7 +91,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA # self.DeclareOut('modele',MODELE) mcfact=[] - if (PRES_REP!=None) and (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[:4]=='FISS') : + if (TYPE_MAILLAGE[:4]=='FISS') : mcfact.append(_F(GROUP_MA=GRMAIL ,PHENOMENE='MECANIQUE',MODELISATION='3D' )) else: mcfact.append(_F(GROUP_MA=GRMAIL[:5] ,PHENOMENE='MECANIQUE',MODELISATION='3D' )) @@ -114,7 +114,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA mcfact=[] for mater in mc_AFFE_MATERIAU : if mater['TOUT']!=None : - mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF'])) + mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'])) rccmat = mater['MATER'] else : mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'])) @@ -164,12 +164,12 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA # if RESU_THER!=None : self.DeclareOut('resuth',RESU_THER) mcsimp={} - if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INIT']=INCREMENT['NUME_INST_INIT'] - if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_FIN' ]=INCREMENT['NUME_INST_FIN' ] + if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INST_INIT']=INCREMENT['NUME_INST_INIT'] + if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_INST_FIN' ]=INCREMENT['NUME_INST_FIN' ] mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp) resuth = THER_LINEAIRE( MODELE = __modthe , CHAM_MATER = __affmat , - TEMP_INIT = _F(STATIONNAIRE='OUI',), + ETAT_INIT = _F(STATIONNAIRE='OUI',), EXCIT = _F(CHARGE=__chther,), INCREMENT = mcfact, ) # @@ -283,7 +283,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA else : motscles['PRES_REP']=_F( GROUP_MA = 'PEAUINT', PRES = PRES_REP['PRES'] ,) - if PRES_REP['EFFE_FOND_P1']!=None : + if PRES_REP['EFFE_FOND_P1']!='NON' : motscles['EFFE_FOND']=_F( GROUP_MA_INT = 'BORDTU' , GROUP_MA = 'EXTUBE' , PRES = PRES_REP['PRES'] ,) @@ -309,6 +309,17 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA FORCE_NODALE = mcfact , ) i=i+1 # +# --- commande AFFE_CHAR_MECA --- +# chargement mecanique : verif contact levres +# + if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'): + _chcont = AFFE_CHAR_MECA( MODELE = modele , + CONTACT =_F(GROUP_MA_MAIT = 'FACE1', + GROUP_MA_ESCL = 'FACE2', + METHODE='VERIF', + GROUP_MA_FOND='FONDFISS', + TOLE_INTERP = -1.E-6,),) +# # --- commande STAT_NON_LINE --- # motscles={} @@ -328,6 +339,8 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA else : mcfex.append(_F(CHARGE=_chtor[i],)) i=i+1 + if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'): + mcfex.append(_F(CHARGE=_chcont,)) motscles['EXCIT'] =mcfex # mcfci=[] # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets @@ -647,6 +660,27 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA # if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'): # +# --- post traitement fissure : interpénétration des lèvres ---- +# + __tcont=POST_RELEVE_T( ACTION=_F( INTITULE = 'Contact levres', + GROUP_NO = 'FACE2', + RESULTAT = nomres, + TOUT_ORDRE = 'OUI', + NOM_CHAM = 'VALE_CONT', + NOM_CMP = 'CONT', + OPERATION = 'EXTRACTION')) + tcont=__tcont.EXTR_TABLE() + numo = tcont['NUME_ORDRE'].values()['NUME_ORDRE'] + numo=dict([(i,0) for i in numo]).keys() + nbinst = len(numo) + for i in range(1,nbinst+1) : + tabi = tcont.NUME_ORDRE==i + nbtot = len(tabi) + cont_actif=tabi.CONT>0. + nb_no_cont = len(cont_actif) + if nb_no_cont > 0 : + UTMESS('A','ASCOUF0_58',vali=[i,nbtot,nb_no_cont]) +# # --- post traitement fissure : calcul de g ---- # motscles = {} diff --git a/Aster/Cata/cataSTA9/Macro/macr_ascouf_mail_ops.py b/Aster/Cata/cataSTA9/Macro/macr_ascouf_mail_ops.py index 53aba950..9305fd0e 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_ascouf_mail_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_ascouf_mail_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_ascouf_mail_ops Macro DATE 29/08/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF macr_ascouf_mail_ops Macro DATE 19/11/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -22,10 +22,11 @@ import os.path from math import sqrt,cos,sin,pi,tan,log,fabs,ceil,fmod,floor import string -try : + +try: import aster - from Utilitai.Utmess import UTMESS -except : + from Utilitai.Utmess import UTMESS +except: pass # ------------------------------------------------------------------------------ @@ -314,11 +315,7 @@ def ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP,GEOM,SYME): if ssep.ICIRP>(2.*pi*RM) : texte_final=string.join(echo_mess) aster.affiche("MESSAGE",texte_final) - message= ' ASCSEP valeur hors domaine \n' - message=message+' sous-epaisseur numero : %d \n'%i - message=message+' taille axe circonferentiel : %.2f \n'%ssep.ICIRP - message=message+' bord plaque : %.2f \n'%2*pi*RM - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_6',vali=[i],valr=[ssep.ICIRP,2*pi*RM]) echo_mess.append( 'TAILLE CIRCONFERENTIELLE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ICIRP) echo_mess.append( '<=> TAILLE EQUIVALENTE SUR LA CIRCONFERENCE (DEGRES) : %.2f \n'%(ssep.ICIRP*360./(2.*pi*RM))) @@ -338,9 +335,7 @@ def ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP,GEOM,SYME): if (SYME in ('QUART','DEMI')) and (ssep.ISLP!=ALPHA*CG*RC/2.) : texte_final=string.join(echo_mess) aster.affiche("MESSAGE",texte_final) - message= ' ASCSEP cas de symetrie :\n' - message=message+ ' la sous-epaisseur doit etre dans la section mediane du coude !\n' - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_7') else : if GEOM=='COUDE': echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f \n'%((ssep.BETA)*CG*(RC+(RM+EP/2.)*cos(AZIMC)))) @@ -351,9 +346,7 @@ def ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP,GEOM,SYME): if (SYME in ('QUART','DEMI')) and (ssep.BETA!=ALPHA/2.) : texte_final=string.join(echo_mess) aster.affiche("MESSAGE",texte_final) - message= ' ASCSEP cas de symetrie :\n' - message=message+ ' la sous-epaisseur doit etre dans la section mediane du coude !\n' - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_7') echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP) # # -- CALCUL DE LA TAILLE LONGITUDINALE @@ -449,11 +442,7 @@ def ASCTCI(MCL_SOUS_EPAIS,RM): if (ssep.ISCP>2.*pi*RM) or (ssep.ISCP<0.) : texte_final=string.join(echo_mess) aster.affiche("MESSAGE",texte_final) - message= ' valeur hors domaine \n' - message=message+ ' SOUS-EPAISSEUR NUMERO :%d'%MCL_SOUS_EPAIS.index(ssep) - message=message+ ' ABSC. CURV. CIRCONF. :%.2f \n'%ssep.ISCP - message=message+ ' BORD PLAQUE :%.2f \n'%(2.*pi*RM) - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_9',vali=[MCL_SOUS_EPAIS.index(ssep)],valr=[ssep.ISCP,2.*pi*RM]) TAMPON.append((ssep.ISCP,i)) TAMPON.sort() IABSC1=[] @@ -536,11 +525,7 @@ def ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM): if (ssep.ISLP>ALPHAR*RC) or (ssep.ISLP<0.) : texte_final=string.join(echo_mess) aster.affiche("MESSAGE",texte_final) - message= ' valeur hors domaine \n' - message=message+ ' SOUS-EPAISSEUR NUMERO :%d \n'%MCL_SOUS_EPAIS.index(ssep) - message=message+ ' ABSC. CURV. LONGIT. :%.2f \n'%ssep.ISLP - message=message+ ' BORDS PLAQUE :%.2f \n'%(ALPHAR*RC) - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_10',vali=[MCL_SOUS_EPAIS.index(ssep)],valr=[ssep.ISLP,ALPHAR*RC]) TAMPON.append((ssep.ISLP,i)) TAMPON.sort() IORDO1=[] @@ -572,19 +557,11 @@ def ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM): if YI<(-LTCHAR): texte_final=string.join(echo_mess) aster.affiche("MESSAGE",texte_final) - message= ' valeur hors domaine \n' - message=message+ ' SOUS-EPAISSEUR NUMERO :%d \n'%bid[1] - message=message+ ' BORD INFERIEUR :%.2f \n'%YI - message=message+ ' BORDS PLAQUE :%.2f \n'%(-1*LTCHAR) - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_11',vali=[bid[1]],valr=[YI,-1*LTCHAR]) if YS>(ALPHAR*RC+LTCLIM): texte_final=string.join(echo_mess) aster.affiche("MESSAGE",texte_final) - message= ' valeur hors domaine \n' - message=message+ ' SOUS-EPAISSEUR NUMERO :%d \n'%bid[1] - message=message+ ' BORD INFERIEUR :%.2f \n'%YI - message=message+ ' BORDS PLAQUE :%.2f \n'%(ALPHAR*RC+LTCLIM) - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_11',vali=[bid[1]],valr=[YI,ALPHAR*RC+LTCLIM]) COORYI.append(YI) COORYS.append(YS) # @@ -882,7 +859,6 @@ def ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM): # # NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES # NZONEY = NOMBRE DE ZONES LONGITUDINALES -# # ------------------------------------------------------------------------------ def ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM): ier=0 @@ -2094,11 +2070,7 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE, else: NBTRAN = 1 if COUDE['SYME']!='ENTIER': - message= ' les quart et demi structure \n' - message=message+' ne peuvent etre realisees \n' - message=message+' sur un modele comportant une transition \n' - message=message+' d epaisseur \n' - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_13') # DEXT = COUDE['DEXT_T1'] EP1 = COUDE['EPAIS_T1'] @@ -2123,29 +2095,19 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE, E = EP1 # if COUDE['SYME']!='ENTIER' and (LTCHAR!=LTCLIM) : - message= ' les deux embouts doivent etre \n' - message=message+' de meme longueur pour les cas de symetrie \n' - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_14') # LAMOR = 3.0/2.0 * sqrt( RM*RM*RM / EP1) if LTCHAR(ALPHA*RC*pi/180.0) : - message= ' valeur hors domaine de validite \n' - message=message+' sous-epaisseur numero : %d \n'%isep - message=message+' abscisse curv. longit. : %.2f \n'%ssep['POSI_CURV_LONGI'] - message=message+' valeur maximale autorisee : %.2f \n'%(ALPHA*RC*pi/180.0) - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_30',vali=[isep],valr=[ssep['POSI_CURV_LONGI'],ALPHA*RC*pi/180.0]) LDEFAU = ssep['POSI_CURV_LONGI'] + ssep['AXE_LONGI']/2.0 BETA = 0.0 else: BETA=ssep['POSI_ANGUL'] if (BETA<0.) or (BETA>ALPHA) : - message= ' valeur hors domaine de validite \n' - message=message+' sous-epaisseur numero : %d \n'%isep - message=message+' position angulaire centre sous-ep : %.2f \n'%BETA - message=message+' valeur limite autorisee : %.2f \n'%ALPHA - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_31',vali=[isep],valr=[BETA,ALPHA]) LDEFAU = (BETA*RC*pi/180.0) + ssep['AXE_LONGI']/2.0 # if ssep['POSI_CURV_CIRC']!=None: if ssep['POSI_CURV_CIRC']>(2*pi*RM) : - message= ' valeur hors domaine de validite \n' - message=message+' sous-epaisseur numero : %d \n'%isep - message=message+' abscisse curv. circonf. : %.2f \n'%ssep['POSI_CURV_CIRC'] - message=message+' valeur limite autorisee : %.2f \n'%(2*pi*RM) - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_32',vali=[isep],valr=[ssep['POSI_CURV_CIRC'],2*pi*RM]) if ssep['POSI_CURV_CIRC']!=(pi*RM) and ssep['TYPE']=='AXIS': - message= ' le centre d une sous-epaisseur \n' - message=message+' axisymetrique est impose en intrados (pi*RM) \n' - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_33') else: ssep.IPHIC=ssep['AZIMUT'] if ssep['AZIMUT']!=180. and ssep['TYPE']=='AXIS': - message= ' le centre d une sous-epaisseur \n' - message=message+' axisymetrique est impose en intrados \n' - message=message+' l azimut est fixe a 180 degres \n' - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_34') # l_ITYPE.append(ssep['TYPE' ]) # l_ICIRC.append(ssep['AXE_CIRC' ]) # l_ILONC.append(ssep['AXE_LONGI' ]) @@ -2306,11 +2219,7 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE, # l_IEVID.append(ssep['EMPREINTE' ]) if SOUS_EPAIS_COUDE!=None and COUDE['NB_ELEM_EPAIS']!=3 : - message= ' le nombre d elements dans l \n' - message=message+' epaisseur du coude n est pas parametrable pour \n' - message=message+' la version 2 de la procedure de plaque avec sous \n' - message=message+' -epaisseur : mot-cle NB_ELEM_EPAIS ignore \n' - UTMESS('A', "MACR_ASCOUF_MAIL", message) + UTMESS('A','ASCOUF0_35') # ################################################################################ # --- verifications de coherences --- @@ -2319,38 +2228,23 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE, # donnees globales if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' : if SUREP<0. or SUREP>(RM-EP1/2.0): - message= ' valeur hors domaine de validite \n' - message=message+' surepaisseur : \n',SUREP - message=message+' valeur limite autorisee (RM-EP1/2) : %.2f \n'%(RM-EP1/2.0) - UTMESS('F', "MACR_ASCOUF_MAIL", message) + + UTMESS('F','ASCOUF0_36',vali=SUREP,valr=RM-EP1/2.0) if RC<=(RM+EP1/2.0): - message= ' valeur hors domaine de validite \n' - message=message+' le rayon de cintrage : %.2f \n',RC - message=message+' doit etre superieur a (RM+EP1/2) : %.2f \n'%(RM+EP1/2.0) - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_37',valr=[RC,RM+EP1/2.0]) # # coude fissure # if FISS_COUDE!=None: if (RM/EP1)<5. or (RM/EP1)>50.: - message= ' valeur hors domaine de validite (5,50) \n' - message=message+' rapport RM/EP1 : %.2f \n'%(RM/EP1) - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_38',valr=RM/EP1) if FISS_COUDE['ABSC_CURV']!=None: if SF<0. or SF>(ALPHA*RC*pi/180.0) : - message= ' valeur hors domaine de validite \n' - message=message+' abscisse curviligne centre fissure : %.2f \n'%SF - message=message+' valeur limite autorisee : %.2f \n'%(ALPHA*RC*pi/180.0) - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_39',valr=[SF,ALPHA*RC*pi/180.0]) if (NT-2*(NT/2))!=0: - message= ' valeur hors domaine de validite \n' - message=message+' nombre de tranches : %d \n'%NT - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_40',vali=NT) if FISS_COUDE['ABSC_CURV'] and ((BETA<0.) or (BETA>ALPHA)): - message= ' valeur hors domaine de validite \n' - message=message+' position angulaire centre fissure : %.2f \n'%BETA - message=message+' posi_angul doit etre >= 0 et <= %.2f \n'%ALPHA - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_41',valr=[BETA,ALPHA]) # # transition d epaisseur # @@ -2358,101 +2252,46 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE, LCOUDE = ALPHA * RC * pi / 180.0 DEXT = 2.0*RM + EP1 if (LTRANLCOUDE) : - message= ' valeur hors domaine de validite \n' - message=message+' debut transition d epaisseur : %.2f \n'%LTRAN - message=message+' valeur minimale autorisee : %.2f \n'%LDEFAU - message=message+' valeur maximale autorisee : %.2f \n'%LCOUDE - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_42',valr=[LTRAN,LDEFAU,LCOUDE]) if (TETA1<0.) or (TETA1>30.) : - message= ' valeur hors domaine de validite \n' - message=message+' angle de transition TETA1 : %.2f \n'%TETA1 - message=message+' valeur minimale autorisee : %.2f \n'%0. - message=message+' valeur maximale autorisee : %.2f \n'%30. - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_43',valr=[TETA1]) # # transition d epaisseur a une pente # if NBTRAN==1: if (EP1<12.) or (EP1>80.) : - message= ' valeur hors domaine de validite \n' - message=message+' epaisseur avant la transition : %.2f \n'%EP1 - message=message+' valeur minimale autorisee : %.2f \n'%12. - message=message+' valeur maximale autorisee : %.2f \n'%80. - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_44',valr=[EP1]) if (EP2<20.) or (EP2>110.) : - message= ' valeur hors domaine de validite \n' - message=message+' epaisseur apres la transition : %.2f \n'%EP2 - message=message+' valeur minimale autorisee : %.2f \n'%20. - message=message+' valeur maximale autorisee : %.2f \n'%110. - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_45',valr=[EP2]) if (EP1>EP2) : - message= ' l epaisseur avant la transition \n' - message=message+' doit etre inferieure \n' - message=message+' a celle apres la transition \n' - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_46') LTRANF = LTRAN + ((EP2-EP1)/(tan(TETA1))) if (LTRANF>LCOUDE) : - message= ' valeur hors domaine de validite \n' - message=message+' fin transition d epaisseur : %.2f \n'%LTRANF - message=message+' valeur limite autorisee : %.2f \n'%LCOUDE - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_47',valr=[LTRANF,LCOUDE]) if DEXT<112. or DEXT>880. : - message= ' valeur hors domaine de validite\n' - message=message+' diam ext du tube avant transition: %.2f \n'%DEXT - message=message+' valeur minimum autorisee : %.2f \n'%112. - message=message+' valeur maximum autorisee : %.2f \n'%880. - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_48',valr=[DEXT]) # # transition d epaisseur a une pente # else: if (TETA2<0.) or (TETA2>45.) : - message= ' valeur hors domaine de validite\n' - message=message+' angle de transition TETA2: %.2f \n'%TETA2 - message=message+' valeur minimum autorisee : %.2f \n'%0. - message=message+' valeur maximum autorisee : %.2f \n'%45. - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_49',valr=[TETA2]) if (EP1<7.) or (EP1>35.) : - message= ' valeur hors domaine de validite\n' - message=message+' epaisseur avant 1ere transition: %.2f \n'%EP1 - message=message+' valeur minimum autorisee : %.2f \n'%7. - message=message+' valeur maximum autorisee : %.2f \n'%35. - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_50',valr=[EP1]) if (EP2<15.) or (EP2>40.) : - message= ' valeur hors domaine de validite\n' - message=message+' epaisseur avant 2eme transition: %.2f \n'%EP2 - message=message+' valeur minimum autorisee : %.2f \n'%15. - message=message+' valeur maximum autorisee : %.2f \n'%40. - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_51',valr=[EP2]) if (EPI<15.) or (EPI>40.) : - message= ' valeur hors domaine de validite\n' - message=message+' epaisseur intermediaire: %.2f \n'%EPI - message=message+' valeur minimum autorisee : %.2f \n'%15. - message=message+' valeur maximum autorisee : %.2f \n'%40. - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_52',valr=[EPI]) if (EP1>EPI) : - message= ' valeur hors domaine de validite\n' - message=message+' l epaisseur avant la transition \n' - message=message+' doit etre inferieure a l epaisseur intermediaire \n' - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_53') if (EP2LCOUDE) : - message= ' valeur hors domaine de validite\n' - message=message+' fin transition d epaisseur: %.2f \n'%LTRANF - message=message+' valeur limite autorisee : %.2f \n'%LCOUDE - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_55',valr=[LTRANF,LCOUDE]) if (DEXT<77.) or (DEXT>355.) : - message= ' valeur hors domaine de validite\n' - message=message+' diam ext du tube avant transition: %.2f \n'%LTRANF - message=message+' valeur minimum autorisee : %.2f \n'%77. - message=message+' valeur maximum autorisee : %.2f \n'%355. - UTMESS('F', "MACR_ASCOUF_MAIL", message) + UTMESS('F','ASCOUF0_56',valr=[LTRANF]) # ################################################################################ # --- calcul taille initiale des defauts sur la plaque --- @@ -2486,7 +2325,7 @@ def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE, elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000' else : - UTMESS('F', "MACR_ASCOUF_MAIL", "seuls gibi98 et gibi2000 sont appelables") + UTMESS('F','ASCOUF0_57') # # --- ecriture sur le fichier .datg de la procedure --- # diff --git a/Aster/Cata/cataSTA9/Macro/macr_aspic_calc_ops.py b/Aster/Cata/cataSTA9/Macro/macr_aspic_calc_ops.py index e8a7eb86..0d416a57 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_aspic_calc_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_aspic_calc_ops.py @@ -1,21 +1,21 @@ -#@ MODIF macr_aspic_calc_ops Macro DATE 09/05/2007 AUTEUR REZETTE C.REZETTE +#@ MODIF macr_aspic_calc_ops Macro DATE 14/04/2008 AUTEUR GALENNE E.GALENNE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== @@ -23,13 +23,13 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C FOND_FISS_1,FOND_FISS_2,CHARGE,RESU_THER,AFFE_MATERIAU,EQUILIBRE, PRES_REP,ECHANGE,TORS_CORP,TORS_TUBU,COMP_INCR,COMP_ELAS, THETA_3D,OPTION,SOLVEUR,CONVERGENCE,NEWTON,RECH_LINEAIRE, - INCREMENT,PAS_AZIMUT,IMPRESSION,INFO,TITRE,BORNES ,**args): + INCREMENT,PAS_AZIMUT,IMPRESSION,INFO,TITRE,BORNES ,**args): """ Ecriture de la macro MACR_ASPIC_CALC """ from Accas import _F import types - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS ier=0 #------------------------------------------------------------------ # On recopie le mot cle affe_materiau pour le proteger @@ -54,7 +54,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C # La macro compte pour 1 dans la numerotation des commandes self.set_icmd(1) - + #------------------------------------------------------------------ # data GRMAIL= ('EQUERRE','PEAUINT','EXCORP1','EXCORP2','EXTUBU','LEVRTUBU','LEVRCORP') @@ -77,40 +77,40 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C i=i+1 MRCCM=mate['MATER'] if i>1 : - UTMESS('E', "MACR_ASPIC_CALC", "vous affectez plus d un materiau contenant l option rccm") + UTMESS('E','ASPIC0_1') # if (TYPE_MAILLAGE[:4]=='SAIN') and (TUBULURE==None) : - UTMESS('E', "MACR_ASPIC_CALC", "pour les piquages sains, TUBULURE doit etre renseigne") + UTMESS('E','ASPIC0_2') # if EQUILIBRE['NOEUD'] not in ('P1_CORP','P2_CORP') : - UTMESS('E', "MACR_ASPIC_CALC", "EQUILIBRE[NOEUD] : on attend P1_CORP ou P2_CORP") + UTMESS('E','ASPIC0_3') # if PRES_REP['EFFE_FOND']=='OUI' : if PRES_REP['NOEUD']==None : - UTMESS('E', "MACR_ASPIC_CALC", "il faut preciser un noeud pour EFFE_FOND") + UTMESS('E','ASPIC0_4') if PRES_REP['NOEUD'] not in ('P1_CORP','P2_CORP') : - UTMESS('E', "MACR_ASPIC_CALC", "PRES_REP[NOEUD] : on attend P1_CORP ou P2_CORP") + UTMESS('E','ASPIC0_5') if PRES_REP['NOEUD']==EQUILIBRE['NOEUD'] : - UTMESS('E', "MACR_ASPIC_CALC", "on ne peut appliquer un EFFE_FOND sur PRES_REP[NOEUD] car ce noeud est bloque") + UTMESS('E','ASPIC0_6') # if TORS_CORP!=None : for tors in TORS_CORP : if tors['NOEUD'] not in ('P1_CORP','P2_CORP') : - UTMESS('E', "MACR_ASPIC_CALC", "TORS_CORP[NOEUD] : on attend P1_CORP ou P2_CORP") + UTMESS('E','ASPIC0_7') if tors['NOEUD']==EQUILIBRE['NOEUD'] : - UTMESS('E', "MACR_ASPIC_CALC", "on ne peut appliquer un torseur sur TORS_CORP[NOEUD] car ce noeud est bloque") + UTMESS('E','ASPIC0_8') # if (TYPE_MAILLAGE[:4]=='SAIN') and (THETA_3D!=None) : - UTMESS('E', "MACR_ASPIC_CALC", "si TYPE_MAILLAGE SAIN : mecanique de la rupture impossible") + UTMESS('E','ASPIC0_9') # if OPTION in ('CALC_G_MAX','CALC_G_MAX_LOCAL') : if BORNES==None : - UTMESS('E', "MACR_ASPIC_CALC", "mot-clef obligatoire avec cette option") + UTMESS('E','ASPIC0_10') # if IMPRESSION!=None : if IMPRESSION['FORMAT'] in ('IDEAS','CASTEM') : if IMPRESSION['NOM_CHAM']==None : - UTMESS('E', "MACR_ASPIC_CALC", "impression de resultats demandée sans preciser le nom des champs cf. la documentation utilisateur : U4.PC.20.") + UTMESS('E','ASPIC0_11') # #------------------------------------------------------------------ # @@ -137,8 +137,8 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C # mcfact=[] for mater in mc_AFFE_MATERIAU : - if mater['TOUT']!=None : mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF'])) - else : mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF'])) + if mater['TOUT']!=None : mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'])) + else : mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'])) __affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE , MODELE = modele , AFFE = mcfact ) @@ -173,12 +173,12 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C # if RESU_THER!=None : self.DeclareOut('resuth',RESU_THER) mcsimp={} - if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INIT']=INCREMENT['NUME_INST_INIT'] - if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_FIN' ]=INCREMENT['NUME_INST_FIN' ] + if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INST_INIT']=INCREMENT['NUME_INST_INIT'] + if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_INST_FIN' ]=INCREMENT['NUME_INST_FIN' ] mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp) resuth = THER_LINEAIRE( MODELE = __modthe , CHAM_MATER = __affmat , - TEMP_INIT = _F(STATIONNAIRE='OUI',), + ETAT_INIT = _F(STATIONNAIRE='OUI',), EXCIT = _F(CHARGE=__chther,), INCREMENT = mcfact, ) # @@ -190,12 +190,12 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C mcfact=[] mcfac2=[] for mater in mc_AFFE_MATERIAU : - if mater['TOUT']!=None : + if mater['TOUT']!=None : mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'],)) if indther==1: mcfac2.append(_F(NOM_VARC='TEMP',TOUT='OUI', EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF']),) - else: + else: mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],)) if indther==1: mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA=mater['GROUP_MA'], @@ -237,14 +237,14 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C DRZ = 0.0 , ) ) # # --- commande AFFE_CHAR_MECA --- -# chargement mecanique : pres_rep, effet de fond +# chargement mecanique : pres_rep, effet de fond # motscles={} if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[-4:]=='_DEB') : motscles['PRES_REP' ]= _F(GROUP_MA=APPRES, PRES=PRES_REP['PRES']) else : motscles['PRES_REP' ]= _F(GROUP_MA=APPRES[0],PRES=PRES_REP['PRES']) - if PRES_REP['EFFE_FOND' ]!=None : + if PRES_REP['EFFE_FOND' ]=='OUI' : motscles['EFFE_FOND' ]=(_F(GROUP_MA ='EXTUBU ', GROUP_MA_INT='L_INT_TU', PRES =PRES_REP['PRES']), @@ -290,6 +290,24 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C _chtrt[i] = AFFE_CHAR_MECA( MODELE = modele , FORCE_NODALE = mcfact , ) i=i+1 + +# +# --- commande AFFE_CHAR_MECA --- +# chargement mecanique : verif contact levres +# + if TYPE_MAILLAGE[:4]=='FISS' : + if TYPE_MAILLAGE in ('FISS_LONG_NONDEB','FISS_AXIS_NONDEB') : + mcfond = ('FOND_SUP','FOND_INF') + else : + mcfond = ('FONDFISS') + _chcont = AFFE_CHAR_MECA( MODELE = modele , + CONTACT =_F(GROUP_MA_MAIT = 'LEVRCORP', + GROUP_MA_ESCL = 'LEVRTUBU', + METHODE='VERIF', + TOLE_INTERP = -1.e-6, + GROUP_MA_FOND=mcfond,),) + + # # --- commande STAT_NON_LINE --- # @@ -317,6 +335,8 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C else : mcfex.append(_F(CHARGE=_chtrt[i],)) i=i+1 + if TYPE_MAILLAGE[:4]=='FISS' : + mcfex.append(_F(CHARGE=_chcont,)) motscles['EXCIT'] =mcfex # mcfci=[] # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets @@ -588,9 +608,11 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C NOMMA.append('MAIL_ORI') elif TYPE_MAILLAGE in ('FISS_LONG_NONDEB','FISS_AXIS_NONDEB') : NBFIS = 2 - NOMGRO.append(('P_FON1' ,'P_FIS1' ),) - NOMGRE.append(('P_FON2' ,'P_FIS2' ),) +# NOMGRO.append(('P_FON1' ,'P_FIS1' ),) +# NOMGRE.append(('P_FON2' ,'P_FIS2' ),) + NOMGRO.append(('PS_FON1','PS_FIS1'),) NOMGRO.append(('PI_FON1','PI_FIS1'),) + NOMGRE.append(('PS_FON2','PS_FIS2'),) NOMGRE.append(('PI_FON2','PI_FIS2'),) TABMA8.append('FOND_SUP') TABMA8.append('FOND_INF') @@ -639,6 +661,32 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C INTITULE ='FOND_INF', OPERATION ='EXTRACTION',)) IMPR_TABLE(TABLE = __rthfis2, ) +# +# --- post traitement fissure : interpénétration des lèvres ---- +# + + if TYPE_MAILLAGE[:4]=='FISS' : + __tcont=POST_RELEVE_T( ACTION=_F( INTITULE = 'Contact levres', + GROUP_NO = 'LEVRTUBU', + RESULTAT = nomres, + TOUT_ORDRE = 'OUI', + NOM_CHAM = 'VALE_CONT', + NOM_CMP = 'CONT', + OPERATION = 'EXTRACTION')) + tcont=__tcont.EXTR_TABLE() +# print tcont + numo = tcont['NUME_ORDRE'].values()['NUME_ORDRE'] + numo=dict([(i,0) for i in numo]).keys() + nbinst = len(numo) + for i in range(1,nbinst+1) : + tabi = tcont.NUME_ORDRE==i + nbtot = len(tabi) + cont_actif=tabi.CONT>0. + nb_no_cont = len(cont_actif) + if nb_no_cont > 0 : + UTMESS('A','ASPIC0_22',vali=[i,nbtot,nb_no_cont]) + + # # boucle sur le nombre de fond de fissure # @@ -668,7 +716,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C LEVRE_SUP = _F(GROUP_MA='LEVRCORP',), LEVRE_INF = _F(GROUP_MA='LEVRTUBU',),**motscles) if THETA_3D!=None: - for tht3d in THETA_3D : + for tht3d in THETA_3D : # # --- commande CALC_THETA --- # diff --git a/Aster/Cata/cataSTA9/Macro/macr_aspic_mail_ops.py b/Aster/Cata/cataSTA9/Macro/macr_aspic_mail_ops.py index d1b14cb6..c04e2092 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_aspic_mail_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_aspic_mail_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_aspic_mail_ops Macro DATE 25/09/2006 AUTEUR GALENNE E.GALENNE +#@ MODIF macr_aspic_mail_ops Macro DATE 14/04/2008 AUTEUR GALENNE E.GALENNE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -421,7 +421,7 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE, from Accas import _F import types import aster - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS ier=0 # On importe les definitions des commandes a utiliser dans la macro @@ -459,7 +459,7 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE, TYPSOU= TUBULURE['TYPE' ] DPENE = TUBULURE['L_PENETR' ] if TYPSOU=='TYPE_2' and DPENE>0.0 : - UTMESS('F', "MACR_ASPIC_MAIL", "les piquages penetrants sont autorises uniquement avec les soudures de type 1") + UTMESS('F','ASPIC0_12') if TYPSOU=='TYPE_2' : ITYPSO = 2 else : @@ -485,25 +485,19 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE, VAL4 = 3.0 * sqrt( RMT * EPT2 ) LZMAX = max ( VAL1 , VAL2, VAL3, VAL4 ) ZMAXC = LZMAX + ( DEC/2.0 ) + D1 + D2 - LOK = ( abs(ZMAX-ZMAXC) <= EPSI * abs(ZMAXC) ) + LOK = ( (ZMAX-ZMAXC) >= -1.* EPSI * abs(ZMAXC) ) if not LOK : - message= ' erreur donnees \n' - message=message+ ' Z_MAX FOURNIE : %.2f \n'%ZMAX - message=message+ ' Z_MAX CALCULEE : %.2f \n'%ZMAXC - UTMESS('F', "MACR_ASPIC_MAIL", message) + UTMESS('A','ASPIC0_13',valr=[ZMAX,ZMAXC]) RMC = ( DEC - EPC ) / 2.0 VAL1 = 1.5 * sqrt( RMC**3 / EPC ) VAL2 = 3.0 * sqrt( RMC * EPC ) LXMAX = max( VAL1 , VAL2 ) XMAXC = LXMAX + ( DET1 / 2.0 ) - LOK = ( abs(XMAX-XMAXC) <= EPSI * abs(XMAXC) ) + LOK = ( (XMAX-XMAXC) >= -1.* EPSI * abs(XMAXC) ) if not LOK : - message= ' erreur donnees \n' - message=message+ ' Z_MAX FOURNIE : %.2f \n'%ZMAX - message=message+ ' Z_MAX CALCULEE : %.2f \n'%ZMAXC - UTMESS('F', "MACR_ASPIC_MAIL", message) - message= ' MACR_ASPIC_MAIL / X_MAX CALCULEE : %.2f \n'%XMAX - message=message+ ' MACR_ASPIC_MAIL / Z_MAX CALCULEE : %.2f \n'%XMAXC + UTMESS('A','ASPIC0_23',valr=[XMAX,XMAXC]) + message= ' MACR_ASPIC_MAIL : X_MAX CALCULEE : %.2f X_MAX FOURNI : %.2f\n'%(XMAXC,XMAX) + message=message+ ' MACR_ASPIC_MAIL : Z_MAX CALCULEE : %.2f Z_MAX FOURNI : %.2f\n'%(ZMAXC,ZMAX) aster.affiche('MESSAGE',message) # # --- caracteristiques de la fissure --- @@ -529,18 +523,11 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE, N1 = 1 else : N1 = 0 if (TFISS=='DEB_INT') and (POSI=='INCLINE') and (DPENE>0.0) and (JEU>0.0) : - message= ' erreur donnees \n' - message=message+ ' dans le cas de fissures \n' - message=message+ ' inclinees debouchant en peau interne avec \n' - message=message+ ' piquage penetrant le jeu doit etre nul \n' - UTMESS('F', "MACR_ASPIC_MAIL", message) + UTMESS('F','ASPIC0_14') ZETA = 0.5 if TFISS not in ('DEB_INT','DEB_EXT') : if FISS_SOUDURE['LIGA_INT']==None : - message= ' erreur donnees \n' - message=message+ ' dans le cas de fissures internes\n' - message=message+ ' (NON_DEB) le ligament inferieur est obligatoire \n' - UTMESS('F', "MACR_ASPIC_MAIL", message) + UTMESS('F','ASPIC0_15') LIGA = FISS_SOUDURE['LIGA_INT'] if POSI=='DROIT' : if ITYPSO==1 : ZETA = (A+LIGA)/(EPC+H) @@ -549,21 +536,21 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE, if ITYPSO==1 : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPC else : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPT1 if ZETA < 0.1 : - UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop petit ") + UTMESS('F','ASPIC0_16') if ZETA > 0.9 : - UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop grand ") + UTMESS('F','ASPIC0_17') if LIGA < 0.1*EPC : - UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop petit ") + UTMESS('F','ASPIC0_16') if (LIGA + 2.0*A) > 0.9*EPC : - UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop grand ") + UTMESS('F','ASPIC0_17') if N1==0 : if FISCOU : - UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures courte il faut preciser la longueur") + UTMESS('F','ASPIC0_18') if AXIS=='NON' : - UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de la fissure longue il faut preciser la longueur ou axis=oui ") + UTMESS('F','ASPIC0_19') C = 0.0 else : - if AXIS=='OUI' : UTMESS('A', "MACR_ASPIC_MAIL", "fissure axisymetrique : le mot clef ne doit pas etre renseigne") + if AXIS=='OUI' : UTMESS('A','ASPIC0_20') C = 0.5 * C LEQU=2.*(pi*(DEC-EPC)-DET1+2.*EPT1) # @@ -656,7 +643,7 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE, if logiel=='GIBI98' : logiel = loc_gibi+'gibi98' elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000' else : - UTMESS('F', "MACR_ASPIC_MAIL", "seuls gibi98 et gibi2000 sont appelables ") + UTMESS('F','ASPIC0_21') # # --- ecriture sur le fichier .datg de la procedure --- # @@ -699,6 +686,7 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE, l_CREA_GROUP_NO.append('S_LAT2_C') l_CREA_GROUP_NO.append('S_LAT1_T') l_CREA_GROUP_NO.append('S_LAT2_T') + l_CREA_GROUP_NO.append('LEVRTUBU') if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') : l_CREA_GROUP_NO.append('PFONDINF') l_CREA_GROUP_NO.append('PFONDSUP') @@ -735,6 +723,8 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE, motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = 'FONDFISS',)) if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') : motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = ('FOND_SUP','FOND_INF',),)) + if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='COURTE') : + motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = 'FONDFISS',)) __MAPROV=DEFI_GROUP(reuse =__MAPROV, MAILLAGE=__MAPROV, **motscles ) @@ -759,7 +749,7 @@ def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE, # motscles={} - if TFISS=='DEB_INT' : + if not SAIN : motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU','LEVRTUBU','LEVRCORP'),) else : motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU',),) diff --git a/Aster/Cata/cataSTA9/Macro/macr_cabri_calc_ops.py b/Aster/Cata/cataSTA9/Macro/macr_cabri_calc_ops.py deleted file mode 100644 index e448efd6..00000000 --- a/Aster/Cata/cataSTA9/Macro/macr_cabri_calc_ops.py +++ /dev/null @@ -1,561 +0,0 @@ -#@ MODIF macr_cabri_calc_ops Macro DATE 09/05/2007 AUTEUR REZETTE C.REZETTE -# -*- coding: iso-8859-1 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# ====================================================================== - - - - -def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER, - CHAR_MECA,RESU_THER,RESO_INTE, - AFFE_MATERIAU,DEFI_CHAR_THER,DEFI_CHAR_MECA,RELATION,SOLVEUR,CONVERGENCE,NEWTON, - INCREMENT,CHAM_MATER,**args): - """ - Ecriture de la macro MACR_CABRI_CALC - """ - - ################################################################# - ########## PREPARATION MACRO - ################################################################# - - from Accas import _F - - ier =0 - - # On met certains mots-clefs dans des variables locales pour les proteger - affemateriau = AFFE_MATERIAU - mail = MAILLAGE - resointe = RESO_INTE - - # On importe les definitions des commandes a utiliser dans la macro - # Le nom de la variable doit etre obligatoirement le nom de la commande - DEFI_GROUP = self.get_cmd('DEFI_GROUP') - AFFE_MATERIAU = self.get_cmd('AFFE_MATERIAU') - AFFE_MODELE = self.get_cmd('AFFE_MODELE') - MODI_MAILLAGE = self.get_cmd('MODI_MAILLAGE') - AFFE_CHAR_THER_F = self.get_cmd('AFFE_CHAR_THER_F') - AFFE_CHAR_THER = self.get_cmd('AFFE_CHAR_THER') - AFFE_CHAR_MECA_F = self.get_cmd('AFFE_CHAR_MECA_F') - AFFE_CHAR_MECA = self.get_cmd('AFFE_CHAR_MECA') - DEFI_FONCTION = self.get_cmd('DEFI_FONCTION') - DEFI_LIST_REEL = self.get_cmd('DEFI_LIST_REEL') - THER_LINEAIRE = self.get_cmd('THER_LINEAIRE') - STAT_NON_LINE = self.get_cmd('STAT_NON_LINE') - - # La macro compte pour 1 dans la numerotation des commandes - self.set_icmd(1) - - # Le concept sortant (de type evol_noli) est nomme 'resumeca' dans - # le contexte de la macro - self.DeclareOut('resumeca',self.sd) - self.DeclareOut('mail',MAILLAGE) - - ################################################################# - ########## PREPARATION DES MODELES - ################################################################# - - # Definition des groupes - mail=DEFI_GROUP(reuse =mail,MAILLAGE=mail, - CREA_GROUP_NO=( - _F(GROUP_MA='M_GOU',NOM='N_M_GOU',), - _F(GROUP_MA='M_JOI',NOM='N_M_JOI',), - _F(GROUP_MA='SCBJ',NOM='N_SCBJ',), - _F(GROUP_MA='SCJB',NOM='N_SCJB',), - _F(GROUP_MA='M_L_AA',NOM='N_M_L_AA',), - _F(GROUP_MA='SCEG',NOM='N_SCEG',), - _F(GROUP_MA='SCGE',NOM='N_SCGE',),),) - - # Creation du modele thermique - if MODELE_THER != None: - self.DeclareOut('modther',MODELE_THER) - - modther=AFFE_MODELE(MAILLAGE=mail, - AFFE=_F(GROUP_MA=('VTOT','M_GOU','M_TUB','M_JOI','SCBJ','SCJB', - 'M_L_AA','M_INT','M_L_SA','M_EXT','SCEG','SCGE',), - PHENOMENE='THERMIQUE', - MODELISATION='3D_DIAG',), - ); - - # Creation du modele mecanique - if MODELE_MECA != None: - self.DeclareOut('modmeca',MODELE_MECA) - - modmeca = AFFE_MODELE(MAILLAGE=mail, - AFFE=_F(GROUP_MA=('VTOT','M_GOU','M_TUB','M_JOI','SCBJ','SCJB', - 'M_L_AA','M_L_SA','SCEG','SCGE','M_INT','M_EXT',), - PHENOMENE='MECANIQUE', - MODELISATION='3D',), - ); - - # Orientation des mailles - mail=MODI_MAILLAGE(reuse =mail, - MAILLAGE=mail, - ORIE_PEAU_3D=(_F(GROUP_MA=('M_INT','M_TUB',),), - _F(GROUP_MA=('M_L_AA','M_JOI','M_L_SA',),),), - ); - - - - # Affectation des materiaux (thermique) - motscles={} - motscles['AFFE']=[] - for mat in affemateriau: - if mat['TOUT'] == None: - # Creation de mots-cles pour les AFFE_CHAR_MECA - motscles['AFFE'].append(_F(GROUP_MA=mat['GROUP_MA'], - MATER = mat['MATER'], - TEMP_REF = mat['TEMP_REF'],) ) - else: - # Creation de mots-cles pour les AFFE_CHAR_MECA - motscles['AFFE'].append(_F(TOUT='OUI', - MATER = mat['MATER'], - TEMP_REF = mat['TEMP_REF'],) ) - - __cham = AFFE_MATERIAU(MAILLAGE=mail, - MODELE=modther, - AFFE=motscles['AFFE'], - ) - - ################################################################# - ########## CONDITIONS AUX LIMITES THERMIQUES - ################################################################# - # Recuperation des parametres thermiques - - if DEFI_CHAR_THER != None: - temp_ini = DEFI_CHAR_THER['TEMP_INIT'] - if DEFI_CHAR_THER['COEF_H_FLUI']!=None: - coef_int = DEFI_CHAR_THER['COEF_H_FLUI'] - else: - coef_int = DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,0.016, - 7200.0,0.016,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - if DEFI_CHAR_THER['TEMP_EXT_FLUI']!=None: - temp_int = DEFI_CHAR_THER['TEMP_EXT_FLUI'] - else: - temp_int = DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,temp_ini,1.0,temp_ini,11.0,60.0, - 600.0,60.0,610.0,280.0,1800.0,280.0,7200.0,280.0,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - if DEFI_CHAR_THER['COEF_H_AIR']!=None: - coef_ext = DEFI_CHAR_THER['COEF_H_AIR'] - else: - coef_ext = DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,1e-05,7200.0,1e-05,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - - if DEFI_CHAR_THER['TEMP_EXT_AIR']!=None: - temp_ext = DEFI_CHAR_THER['TEMP_EXT_AIR'] - else: - temp_ext = DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,20.0,7200.0,20.0,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - if DEFI_CHAR_THER['LIST_INST']!=None: - transi1 = DEFI_CHAR_THER['LIST_INST'] - else: - transi1 = DEFI_LIST_REEL(DEBUT=0.0, - INTERVALLE=(_F(JUSQU_A=1.0, - NOMBRE=1,), - _F(JUSQU_A=11.0, - NOMBRE=10,), - _F(JUSQU_A=600.0, - NOMBRE=10,), - _F(JUSQU_A=610.0, - NOMBRE=30,), - _F(JUSQU_A=1800.0, - NOMBRE=30,), - _F(JUSQU_A=7200.0, - NOMBRE=10,),),); - else: - temp_ini = DEFI_CHAR_THER['TEMP_INIT'] - coef_int = DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,0.016, - 7200.0,0.016,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - temp_int = DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,temp_ini,1.0,temp_ini,11.0,60.0, - 600.0,60.0,610.0,280.0,1800.0,280.0,7200.0,280.0,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - coef_ext = DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,1e-05,7200.0,1e-05,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - temp_ext = DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,20.0,7200.0,20.0,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - transi1 = DEFI_LIST_REEL(DEBUT=0.0, - INTERVALLE=(_F(JUSQU_A=1.0, - NOMBRE=1,), - _F(JUSQU_A=11.0, - NOMBRE=10,), - _F(JUSQU_A=600.0, - NOMBRE=10,), - _F(JUSQU_A=610.0, - NOMBRE=30,), - _F(JUSQU_A=1800.0, - NOMBRE=30,), - _F(JUSQU_A=7200.0, - NOMBRE=10,),),); - # Que sauver ? - if CHAR_THER != None: - for m in CHAR_THER: - if m['TYPE']=="BRIDE_FLUIDE": - self.DeclareOut('cl_th1',m['CHARGE']) - if m['TYPE']=="BRIDE_AIR": - self.DeclareOut('cl_th2',m['CHARGE']) - if m['TYPE']=="ECROU_GOUJON": - self.DeclareOut('cl_th3',m['CHARGE']) - if m['TYPE']=="BRIDE_JOINT": - self.DeclareOut('cl_th4',m['CHARGE']) - - # Echanges thermiques internes entre le fluide et la bride - cl_th1=AFFE_CHAR_THER_F(MODELE=modther, - ECHANGE=_F(GROUP_MA = 'M_INT', - COEF_H = coef_int, - TEMP_EXT = temp_int,),); - - # Echanges thermiques externes entre bride et air ambiant - cl_th2=AFFE_CHAR_THER_F(MODELE=modther, - ECHANGE=_F(GROUP_MA='M_EXT', - COEF_H=coef_ext, - TEMP_EXT=temp_ext,),); - - # Echanges thermiques entre ecrou et goujon - cl_th3=AFFE_CHAR_THER(MODELE=modther, - LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG', - GROUP_NO_2='N_SCGE', - DDL_1='TEMP', - COEF_MULT_1=1.0, - DDL_2='TEMP', - COEF_MULT_2=-1.0, - COEF_IMPO=0.0,),); - - # Echanges thermiques entre bride et joint - cl_th4=AFFE_CHAR_THER(MODELE=modther, - LIAISON_GROUP=_F(GROUP_NO_1='N_SCBJ', - GROUP_NO_2='N_SCJB', - DDL_1='TEMP', - COEF_MULT_1=1.0, - DDL_2='TEMP', - COEF_MULT_2=-1.0, - COEF_IMPO=0.0,),); - - - - ################################################################# - ########## CALCUL THERMIQUE - ################################################################# - if RESU_THER != None: - self.DeclareOut('resuther',RESU_THER) - - resuther=THER_LINEAIRE(MODELE=modther, - CHAM_MATER=__cham, - EXCIT=(_F(CHARGE=cl_th1,), - _F(CHARGE=cl_th2,), - _F(CHARGE=cl_th3,), - _F(CHARGE=cl_th4,),), - INCREMENT=_F(LIST_INST=transi1,), - TEMP_INIT=_F(VALE=temp_ini,), - TITRE='CABRI THERMIQUE &DATE &HEURE',); - - # Affectation des materiaux (mécanique) - if CHAM_MATER != None: - self.DeclareOut('_chamt',CHAM_MATER) - motscles={} - motscles['AFFE']=[] - motscles['AFFE_VARC']=[] - for mat in affemateriau: - if mat['TOUT'] == None: - # Creation de mots-cles pour les AFFE_CHAR_MECA - motscles['AFFE'].append(_F(GROUP_MA=mat['GROUP_MA'], - MATER = mat['MATER'],) ) - motscles['AFFE_VARC'].append(_F(NOM_VARC='TEMP',GROUP_MA=mat['GROUP_MA'], - EVOL=resuther,NOM_CHAM='TEMP', - VALE_REF = mat['TEMP_REF'],)) - else: - # Creation de mots-cles pour les AFFE_CHAR_MECA - motscles['AFFE'].append(_F(TOUT='OUI', - MATER = mat['MATER'], - TEMP_REF = mat['TEMP_REF'],) ) - motscles['AFFE_VARC'].append(_F(NOM_VARC='TEMP',TOUT='OUI', - EVOL=resuther,NOM_CHAM='TEMP', - VALE_REF = mat['TEMP_REF'],)) - - _chamt = AFFE_MATERIAU(MAILLAGE=mail, - MODELE=modther, - AFFE=motscles['AFFE'], - AFFE_VARC=motscles['AFFE_VARC'], - ) - - ################################################################# - ########## CONDITIONS AUX LIMITES MECANIQUES - ################################################################# - # Recuperation des parametres mecaniques - if DEFI_CHAR_MECA != None: - if DEFI_CHAR_MECA['PRETENS']!=None: - f_pret = DEFI_CHAR_MECA['PRETENS'] - else: - f_pret=DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,0.0,1.0,-0.02,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - if DEFI_CHAR_MECA['PRES_REP']!=None: - pre_int = DEFI_CHAR_MECA['PRES_REP'] - else: - pre_int = DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,0.0,1.0,0.0,11.0,16.0,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - if DEFI_CHAR_MECA['EFFE_FOND']!=None: - eff_fond = DEFI_CHAR_MECA['EFFE_FOND'] - else: - eff_fond=DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,-0.0,1.0,-0.0,11.0,-20.607059,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - else: - f_pret=DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,0.0,1.0,-0.02,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - - pre_int = DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,0.0,1.0,0.0,11.0,16.0,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - - eff_fond=DEFI_FONCTION(NOM_PARA='INST', - VALE=(0.0,-0.0,1.0,-0.0,11.0,-20.607059,), - PROL_DROITE='CONSTANT', - PROL_GAUCHE='CONSTANT',); - # Que sauver ? - if CHAR_MECA != None: - for m in CHAR_MECA: - if m['TYPE']=="BLOC_BAS_GOUJ": - self.DeclareOut('cl_me1',m['CHARGE']) - if m['TYPE']=="BLOC_BAS_JOINT": - self.DeclareOut('cl_me2',m['CHARGE']) - if m['TYPE']=="BLOC_LAT_ALES": - self.DeclareOut('cl_me3',m['CHARGE']) - if m['TYPE']=="BLOC_LAT_NALES": - self.DeclareOut('cl_me4',m['CHARGE']) - if m['TYPE']=="PLAN_TUBE": - self.DeclareOut('cl_me5',m['CHARGE']) - if m['TYPE']=="PRES_FLU": - self.DeclareOut('cl_me6',m['CHARGE']) - if m['TYPE']=="EFFET_FOND": - self.DeclareOut('cl_me7',m['CHARGE']) - if m['TYPE']=="CONT_JOINT": - self.DeclareOut('cl_me8',m['CHARGE']) - if m['TYPE']=="SERR_ECROU_1": - self.DeclareOut('cl_me10',m['CHARGE']) - if m['TYPE']=="SERR_ECROU_2": - self.DeclareOut('cl_me11',m['CHARGE']) - - - # Blocage bas du goujon - cl_me1=AFFE_CHAR_MECA(MODELE=modmeca, - DDL_IMPO=_F(GROUP_NO='N_M_GOU', - DZ=0.0,), - INFO=2,); - # Blocage bas du joint - cl_me2=AFFE_CHAR_MECA(MODELE=modmeca, - DDL_IMPO=_F(GROUP_NO='N_M_JOI', - DZ=0.0,), - INFO=2,); - - # Blocage lateral, face laterale avec alesage - cl_me3=AFFE_CHAR_MECA(MODELE=modmeca, - DDL_IMPO=_F(GROUP_NO='N_M_L_AA', - DY=0.0,), - INFO=2,); - - # Face laterale sans alesage - cl_me4=AFFE_CHAR_MECA(MODELE=modmeca, - FACE_IMPO=_F(GROUP_MA='M_L_SA', - DNOR=0.0,), - INFO=2,); - - # Condition de planeite de la face de coupe du tube - cl_me5=AFFE_CHAR_MECA(MODELE=modmeca, - LIAISON_UNIF=_F(GROUP_MA='M_TUB', - DDL='DZ',), - INFO=2,); - # Pression due au fluide - cl_me6=AFFE_CHAR_MECA_F(MODELE=modmeca, - PRES_REP=_F(GROUP_MA='M_INT', - PRES=pre_int,), - INFO=2,); - - # Effet de fond - cl_me7=AFFE_CHAR_MECA_F(MODELE=modmeca, - PRES_REP=_F(GROUP_MA='M_TUB', - PRES=eff_fond,), - INFO=2,); - - # Contact zone de joint - cl_me8=AFFE_CHAR_MECA(MODELE=modmeca, - CONTACT=_F(GROUP_MA_MAIT='SCBJ', - GROUP_MA_ESCL='SCJB',), - INFO=2,); - - # Serrage ecrou/goujon (pre-tensionnement) - cl_me10=AFFE_CHAR_MECA_F(MODELE=modmeca, - LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG', - GROUP_NO_2='N_SCGE', - DDL_1='DZ', - COEF_MULT_1=1.0, - DDL_2='DZ', - COEF_MULT_2=-1.0, - COEF_IMPO=f_pret,), - INFO=2,); - - cl_me11=AFFE_CHAR_MECA(MODELE=modmeca, - LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG', - GROUP_NO_2='N_SCGE', - DDL_1='DX', - COEF_MULT_1=1.0, - DDL_2='DX', - COEF_MULT_2=-1.0, - COEF_IMPO=0.0,), - INFO=2,); - - - ################################################################# - ########## CALCUL MECANIQUE - ################################################################# - # Options de convergence - solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste) - - # Elimination des valeurs "None" - for i in solveur.keys(): - if solveur[i]==None : del solveur[i] - - - transi2 = DEFI_LIST_REEL(DEBUT=0.0, - INTERVALLE=(_F(JUSQU_A=1.0, - NOMBRE=2,), - _F(JUSQU_A=11.0, - NOMBRE=20,), - _F(JUSQU_A=600.0, - NOMBRE=20,), - _F(JUSQU_A=610.0, - NOMBRE=20,), - _F(JUSQU_A=1800.0, - NOMBRE=20,), - _F(JUSQU_A=7200.0, - NOMBRE=20,),),); - - # Options d'incrementation - if INCREMENT != None: - if INCREMENT['LIST_INST'] != None: - listinst = INCREMENT['LIST_INST'] - else: - listinst = transi2 - - increment=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste) - - # Elimination des valeurs "None" - for i in increment.keys(): - if increment[i]==None : del increment[i] - - increment['LIST_INST'] = listinst - - else: - listinst = transi2 - increment =_F( - LIST_INST = listinst, - ), - - # Options de Newton - newton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste) - # Elimination des valeurs "None" - for i in newton.keys(): - if newton[i]==None : del newton[i] - - # Options de convergence - convergence=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste) - # Elimination des valeurs "None" - for i in convergence.keys(): - if convergence[i]==None : del convergence[i] - - # Options de comportement - # Type incremental (=1) ou elastique (=0) - comp_incr = 0 - if RELATION: - relation=RELATION - if relation == 'VMIS_ISOT_TRAC': - comp_incr = 1 - else: - comp_incr = 0 - else: - relation = 'ELAS' - comp_incr = 0 - - - # Parametres du calcul - if comp_incr == 1: - resumeca=STAT_NON_LINE(MODELE=modmeca, - CHAM_MATER=_chamt, - EXCIT=(_F(CHARGE=cl_me1,), - _F(CHARGE=cl_me2,), - _F(CHARGE=cl_me3,), - _F(CHARGE=cl_me4,), - _F(CHARGE=cl_me5,), - _F(CHARGE=cl_me6,), - _F(CHARGE=cl_me7,), - _F(CHARGE=cl_me8,), - _F(CHARGE=cl_me10,), - _F(CHARGE=cl_me11,), - ), - SOLVEUR = solveur, - COMP_INCR =_F(RELATION=relation,RESO_INTE=resointe), - NEWTON = newton, - INCREMENT = increment, - CONVERGENCE = convergence, - TITRE='CABRI THERMOM\xe9CANIQUE &DATE &HEURE',); - else: - resumeca=STAT_NON_LINE(MODELE=modmeca, - CHAM_MATER=_chamt, - EXCIT=(_F(CHARGE=cl_me1,), - _F(CHARGE=cl_me2,), - _F(CHARGE=cl_me3,), - _F(CHARGE=cl_me4,), - _F(CHARGE=cl_me5,), - _F(CHARGE=cl_me6,), - _F(CHARGE=cl_me7,), - _F(CHARGE=cl_me8,), - _F(CHARGE=cl_me10,), - _F(CHARGE=cl_me11,), - ), - SOLVEUR = solveur, - COMP_ELAS =_F(RELATION=relation,RESO_INTE=resointe), - NEWTON = newton, - INCREMENT = increment, - CONVERGENCE = convergence, - TITRE='CABRI THERMOM\xe9CANIQUE &DATE &HEURE',); - - return ier - diff --git a/Aster/Cata/cataSTA9/Macro/macr_cabri_mail_dat.py b/Aster/Cata/cataSTA9/Macro/macr_cabri_mail_dat.py deleted file mode 100644 index 7d673257..00000000 --- a/Aster/Cata/cataSTA9/Macro/macr_cabri_mail_dat.py +++ /dev/null @@ -1,630 +0,0 @@ -#@ MODIF macr_cabri_mail_dat Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS -# -*- coding: iso-8859-1 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# ====================================================================== - - - -# Données pour les brides standards - - - -# Pour ajouter une bride x: -# Définir un dico_bride_x comme ci-dessous puis ajoutez-le à dico_bride_std - -# dictionnaire pour la description des variables -dico_var_geo = {'nbgouj':'Nombre de goujons de la jonction boulonnée (GOUJ_N_GOUJON)', - 'dint':'Diamètre intérieur de la bride (BRID_D_INT)', - 'dex1':'Diamétre extérieur de la conduite (TUBU_D_EXT)', - 'dex2':'Position (diamètre) du congé de la bride (BRID_D_CONGE)', - 'dex3':'Diamètre de l''épaulement de la bride au niveau de l''interface d''étanchéité (BRID_D_EPAUL)', - 'dtrou':'Position des alésages de la bride permettant l''introduction des goujons (BRID_P_ALESAG)', - 'dext':'Diamètre extérieur de la bride (BRID_D_EXT)', - 'dt':'Diamètre des alésages de la bride permettant l''introduction des goujons (BRID_D_ALESAG)', - 'drd':'Diamètre de la rondelle (GOUJ_D_RONDEL)', - 'dg':'Diamètre des goujons de la jonction boulonnée (GOUJ_D_GOUJON)', - 'dec':'Diamètre de l''écrou (GOUJ_D_ECROU)', - 'rcong':'Rayon du congé de la bride (BRID_R_CONGE)', - 'he':'Epaisseur de la rondelle (GOUJ_E_RONDEL)', - 'e':'Epaisseur de l''écrou (GOUJ_E_ECROU)', - 'hc1':'Hauteur de la bride (BRID_H)', - 'hcg1':'Hauteur de conduite (TUBU_H)', - 'hb':'Hauteur de l''épaulement de la bride au niveau de l''interface d''étanchéité (BRID_H_EPAUL)', - 'htrou':'Hauteur des alésages de la bride permettant l''introduction des goujons (BRID_H_ALESAG)', - 'pf':'Profondeur (épaisseur) des filets des goujons (GOUJ_E_FILET)', - 'j':'Epaisseur du joint au niveau de l''interface d''étanchéité (ETAN_E_JOINT)'} - -dico_var_msh = {'nrad':'Nombre d''éléments radiaux (NBR_RAD)', - 'ncir':'Nombre d''éléments circonférentiels (NBR_CIR)', - 'nver':'Nombre d''éléments verticaux (NBR_VER)', - 'nsect':'Nombre d''éléments de l''alésage (NBR_ALE)', - 'temps':'Temps d''analyse'} - -# dictionnaires des brides standards -dico_bride_A = {'nbgouj': 4, - 'dint': 15.76, - 'dex1': 21.3, - 'dex2': 38., - 'dex3': 48., - 'dtrou': 67., - 'dext': 95., - 'dt': 14., - 'drd': 25., - 'dg': 12., - 'dec': 18., - 'rcong': 3., - 'he': 12., - 'e': 2.5, - 'hc1': 46.5, - 'hcg1': 20, - 'hb': 1.5, - 'htrou': 20., - 'pf': 1.5, - 'j': 2} - -dico_bride_AA = {'nbgouj': 32, - 'dint': 336.5, - 'dex1': 355.6, - 'dex2': 395., - 'dex3': 415., - 'dtrou': 460., - 'dext': 515., - 'dt': 22., - 'drd': 36., - 'dg': 20., - 'dec': 30., - 'rcong': 5., - 'he': 20., - 'e': 3., - 'hc1': 115., - 'hcg1': 115./2., - 'hb': 3., - 'htrou': 47., - 'pf': 2.2, - 'j': 2} - -dico_bride_B = {'nbgouj': 4, - 'dint': 26.64, - 'dex1': 33.4, - 'dex2': 53., - 'dex3': 63., - 'dtrou': 88., - 'dext': 123., - 'dt': 16., - 'drd': 27., - 'dg': 14., - 'dec': 21., - 'rcong': 4., - 'he': 14., - 'e': 2.5, - 'hc1': 59., - 'hcg1': 59./2., - 'hb': 1.5, - 'htrou': 27.5, - 'pf': 1.7, - 'j': 2} -dico_bride_B1 = {'nbgouj': 4, - 'dint': 24.3, - 'dex1': 33.4, - 'dex2': 53., - 'dex3': 63., - 'dtrou': 88., - 'dext': 123., - 'dt': 16., - 'drd': 27., - 'dg': 14., - 'dec': 21., - 'rcong': 4., - 'he': 14., - 'e': 2.5, - 'hc1': 59., - 'hcg1': 59./2., - 'hb': 1.5, - 'htrou': 27.5, - 'pf': 1.7, - 'j': 2} -dico_bride_C = {'nbgouj': 8, - 'dint': 52.48, - 'dex1': 60.3, - 'dex2': 84., - 'dex3': 100., - 'dtrou': 127., - 'dext': 165., - 'dt': 18., - 'drd': 30, - 'dg': 16., - 'dec': 24., - 'rcong': 4., - 'he': 16., - 'e': 3, - 'hc1': 70., - 'hcg1': 70./2., - 'hb': 1.5, - 'htrou': 21., - 'pf': 1.7, - 'j': 2} -dico_bride_D = {'nbgouj': 8, - 'dint': 42.9, - 'dex1': 60.3, - 'dex2': 84., - 'dex3': 100., - 'dtrou': 127., - 'dext': 165., - 'dt': 18., - 'drd': 30, - 'dg': 16., - 'dec': 24., - 'rcong': 5., - 'he': 16., - 'e': 3., - 'hc1': 87.6, - 'hcg1': 87.6/2., - 'hb': 1.5, - 'htrou': 38.5, - 'pf': 1.7, - 'j': 2} -dico_bride_D1 = {'nbgouj': 8, - 'dint': 49.22, - 'dex1': 60.3, - 'dex2': 84., - 'dex3': 100., - 'dtrou': 127., - 'dext': 165., - 'dt': 18., - 'drd': 30, - 'dg': 16., - 'dec': 24., - 'rcong': 5., - 'he': 16., - 'e': 3., - 'hc1': 87.6, - 'hcg1': 87.6/2., - 'hb': 1.5, - 'htrou': 38.5, - 'pf': 1.7, - 'j': 2} -dico_bride_E = {'nbgouj': 8, - 'dint': 83.1, - 'dex1': 88.9, - 'dex2': 117.5, - 'dex3': 135., - 'dtrou': 165., - 'dext': 209., - 'dt': 18., - 'drd': 30., - 'dg': 16., - 'dec': 24., - 'rcong': 5., - 'he': 16., - 'e': 3., - 'hc1': 80., - 'hcg1': 80./2., - 'hb': 2., - 'htrou': 27., - 'pf': 1.7, - 'j': 2} -dico_bride_F = {'nbgouj': 8, - 'dint': 73.66, - 'dex1': 88.9, - 'dex2': 117.5, - 'dex3': 135., - 'dtrou': 165., - 'dext': 209., - 'dt': 18., - 'drd': 30., - 'dg': 16., - 'dec': 24., - 'rcong': 5., - 'he': 16., - 'e': 3., - 'hc1': 89., - 'hcg1': 89./2., - 'hb': 2., - 'htrou': 36., - 'pf': 1.7, - 'j': 2} -dico_bride_FF = {'nbgouj': 32, - 'dint': 396.99, - 'dex1': 406.4, - 'dex2': 440., - 'dex3': 455., - 'dtrou': 485., - 'dext': 535., - 'dt': 18., - 'drd': 30., - 'dg': 16., - 'dec': 24., - 'rcong': 5., - 'he': 16., - 'e': 3., - 'hc1': 99., - 'hcg1': 99./2., - 'hb': 3., - 'htrou': 40., - 'pf': 1.7, - 'j': 2} -dico_bride_G = {'nbgouj': 12, - 'dint': 66.7, - 'dex1': 88.9, - 'dex2': 117.5, - 'dex3': 135., - 'dtrou': 165., - 'dext': 209., - 'dt': 18., - 'drd': 30., - 'dg': 16., - 'dec': 24., - 'rcong': 5., - 'he': 16., - 'e': 3., - 'hc1': 98., - 'hcg1': 98./2., - 'hb': 2., - 'htrou': 45., - 'pf': 1.7, - 'j': 2} -dico_bride_GG = {'nbgouj': 36, - 'dint': 381., - 'dex1': 406.4, - 'dex2': 445., - 'dex3': 460., - 'dtrou': 495., - 'dext': 545., - 'dt': 22., - 'drd': 36, - 'dg': 20., - 'dec': 30., - 'rcong': 5., - 'he': 20., - 'e': 3., - 'hc1': 129., - 'hcg1': 129./2., - 'hb': 3., - 'htrou': 63., - 'pf': 2.2, - 'j': 2} -dico_bride_H = {'nbgouj': 12, - 'dint': 108.2, - 'dex1': 114.3, - 'dex2': 146., - 'dex3': 157., - 'dtrou': 190., - 'dext': 225., - 'dt': 18., - 'drd': 30., - 'dg': 16., - 'dec': 24., - 'rcong': 5., - 'he': 16., - 'e': 3., - 'hc1': 89., - 'hcg1': 89./2., - 'hb': 2., - 'htrou': 33., - 'pf': 1.7, - 'j': 2} -dico_bride_H1 = {'nbgouj': 12, - 'dint': 102.6, - 'dex1': 114.3, - 'dex2': 146., - 'dex3': 157., - 'dtrou': 190., - 'dext': 225., - 'dt': 18., - 'drd': 30., - 'dg': 16., - 'dec': 24., - 'rcong': 5., - 'he': 16., - 'e': 3., - 'hc1': 89., - 'hcg1': 89./2., - 'hb': 2., - 'htrou': 33., - 'pf': 1.7, - 'j': 2} -dico_bride_I = {'nbgouj': 18, - 'dint': 92.1, - 'dex1': 114.3, - 'dex2': 146., - 'dex3': 160., - 'dtrou': 200., - 'dext': 255., - 'dt': 20., - 'drd': 32., - 'dg': 18., - 'dec': 27., - 'rcong': 5., - 'he': 18., - 'e': 3., - 'hc1': 99., - 'hcg1': 99./2., - 'hb': 2., - 'htrou': 43., - 'pf': 2.2, - 'j': 2} -dico_bride_J = {'nbgouj': 18, - 'dint': 87.34, - 'dex1': 114.3, - 'dex2': 146., - 'dex3': 160., - 'dtrou': 200., - 'dext': 255., - 'dt': 20., - 'drd': 32., - 'dg': 18., - 'dec': 27., - 'rcong': 5., - 'he': 18., - 'e': 3., - 'hc1': 111., - 'hcg1': 111./2., - 'hb': 2., - 'htrou': 55., - 'pf': 2.2, - 'j': 2} -dico_bride_J1 = {'nbgouj': 18, - 'dint': 87.3, - 'dex1': 114.3, - 'dex2': 146., - 'dex3': 160., - 'dtrou': 200., - 'dext': 255., - 'dt': 22., - 'drd': 36., - 'dg': 20., - 'dec': 30., - 'rcong': 5., - 'he': 20., - 'e': 3., - 'hc1': 111., - 'hcg1': 111./2., - 'hb': 2., - 'htrou': 55., - 'pf': 2.2, - 'j': 2} -dico_bride_K = {'nbgouj': 8, - 'dint': 161.5, - 'dex1': 168.3, - 'dex2': 192., - 'dex3': 210., - 'dtrou': 235., - 'dext': 280., - 'dt': 18., - 'drd': 30., - 'dg': 16., - 'dec': 24., - 'rcong': 5., - 'he': 16., - 'e': 3., - 'hc1': 84., - 'hcg1': 84./2., - 'hb': 2., - 'htrou': 28., - 'pf': 1.7, - 'j': 2} -dico_bride_L = {'nbgouj': 16, - 'dint': 154.8, - 'dex1': 168.3, - 'dex2': 206., - 'dex3': 220., - 'dtrou': 255., - 'dext': 317., - 'dt': 18., - 'drd': 30., - 'dg': 16., - 'dec': 24., - 'rcong': 5., - 'he': 16., - 'e': 3., - 'hc1': 96., - 'hcg1': 96./2., - 'hb': 2., - 'htrou': 40., - 'pf': 1.7, - 'j': 2} -dico_bride_L1 = {'nbgouj': 16, - 'dint': 154.8, - 'dex1': 168.3, - 'dex2': 206., - 'dex3': 220., - 'dtrou': 255., - 'dext': 317., - 'dt': 20., - 'drd': 32., - 'dg': 18., - 'dec': 27., - 'rcong': 5., - 'he': 18., - 'e': 3., - 'hc1': 96., - 'hcg1': 96./2., - 'hb': 2., - 'htrou': 40., - 'pf': 2.2, - 'j': 2} -dico_bride_M = {'nbgouj': 16, - 'dint': 139.7, - 'dex1': 168.3, - 'dex2': 206., - 'dex3': 220., - 'dtrou': 250., - 'dext': 290., - 'dt': 24., - 'drd': 40., - 'dg': 22., - 'dec': 32., - 'rcong': 5., - 'he': 22., - 'e': 3., - 'hc1': 135., - 'hcg1': 135./2., - 'hb': 3., - 'htrou': 62., - 'pf': 2.2, - 'j': 2} -dico_bride_N = {'nbgouj': 12, - 'dint': 131.9, - 'dex1': 168.3, - 'dex2': 220., - 'dex3': 240., - 'dtrou': 290., - 'dext': 365., - 'dt': 30., - 'drd': 48., - 'dg': 27., - 'dec': 41., - 'rcong': 5., - 'he': 27., - 'e': 4., - 'hc1': 148., - 'hcg1': 148./2., - 'hb': 3., - 'htrou': 75., - 'pf': 2.6, - 'j': 2} -dico_bride_O = {'nbgouj': 12, - 'dint': 211.58, - 'dex1': 219.1, - 'dex2': 248., - 'dex3': 260., - 'dtrou': 292., - 'dext': 335., - 'dt': 20., - 'drd': 32., - 'dg': 18., - 'dec': 27., - 'rcong': 5., - 'he': 18., - 'e': 3., - 'hc1': 87., - 'hcg1': 87./2., - 'hb': 3., - 'htrou': 30., - 'pf': 2.2, - 'j': 2} -dico_bride_P = {'nbgouj': 16, - 'dint': 202.74, - 'dex1': 219.1, - 'dex2': 248., - 'dex3': 260., - 'dtrou': 292., - 'dext': 335., - 'dt': 20., - 'drd': 32, - 'dg': 18., - 'dec': 27., - 'rcong': 5., - 'he': 18., - 'e': 3., - 'hc1': 99., - 'hcg1': 99./2., - 'hb': 3., - 'htrou': 42., - 'pf': 2.2, - 'j': 2} -dico_bride_S = {'nbgouj': 16, - 'dint': 264.62, - 'dex1': 273., - 'dex2': 305., - 'dex3': 315., - 'dtrou': 350., - 'dext': 390., - 'dt': 18., - 'drd': 30., - 'dg': 16., - 'dec': 24., - 'rcong': 5., - 'he': 16., - 'e': 3., - 'hc1': 89., - 'hcg1': 89./2., - 'hb': 3., - 'htrou': 32., - 'pf': 1.7, - 'j': 2} -dico_bride_T = {'nbgouj': 16, - 'dint': 254.56, - 'dex1': 273., - 'dex2': 320., - 'dex3': 340., - 'dtrou': 385., - 'dext': 444., - 'dt': 27., - 'drd': 45., - 'dg': 24., - 'dec': 36., - 'rcong': 5., - 'he': 24., - 'e': 4., - 'hc1': 128., - 'hcg1': 128./2., - 'hb': 3., - 'htrou': 55., - 'pf': 2.6, - 'j': 2} -dico_bride_W = {'nbgouj': 28, - 'dint': 314.76, - 'dex1': 323.9, - 'dex2': 360., - 'dex3': 385., - 'dtrou': 415., - 'dext': 460., - 'dt': 18., - 'drd': 30., - 'dg': 16., - 'dec': 24., - 'rcong': 5., - 'he': 16., - 'e': 3., - 'hc1': 96., - 'hcg1': 96./2., - 'hb': 3., - 'htrou': 37., - 'pf': 1.7, - 'j': 2} - - -# dictionnaire pour faire le lien entre l'option de bride et les valeurs normalisées -dico_bride_std = {'AA':dico_bride_AA, - 'A':dico_bride_A, - 'B':dico_bride_B, - 'B1':dico_bride_B1, - 'C':dico_bride_C, - 'D':dico_bride_D, - 'D1':dico_bride_D1, - 'E':dico_bride_E, - 'F':dico_bride_F, - 'FF':dico_bride_FF, - 'G':dico_bride_G, - 'GG':dico_bride_GG, - 'H':dico_bride_H, - 'H1':dico_bride_H1, - 'I':dico_bride_I, - 'J':dico_bride_J, - 'J1':dico_bride_J1, - 'K':dico_bride_K, - 'L':dico_bride_L, - 'L1':dico_bride_L1, - 'M':dico_bride_M, - 'N':dico_bride_N, - 'O':dico_bride_O, - 'P':dico_bride_P, - 'S':dico_bride_S, - 'T':dico_bride_T, - 'W':dico_bride_W} diff --git a/Aster/Cata/cataSTA9/Macro/macr_cabri_mail_ops.py b/Aster/Cata/cataSTA9/Macro/macr_cabri_mail_ops.py deleted file mode 100644 index af724996..00000000 --- a/Aster/Cata/cataSTA9/Macro/macr_cabri_mail_ops.py +++ /dev/null @@ -1,459 +0,0 @@ -#@ MODIF macr_cabri_mail_ops Macro DATE 29/08/2006 AUTEUR MCOURTOI M.COURTOIS -# -*- coding: iso-8859-1 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# ====================================================================== - -import os - -def macr_cabri_mail_ops(self,EXEC_MAILLAGE,RAFF_MAILLAGE,VERI_MAIL,GEOM_BRID, - IMPRESSION,**args): - """ - Ecriture de la macro MACR_CABRI_MAIL - """ - import types - from Accas import _F - - ier=0 - - # On importe les definitions des commandes a utiliser dans la macro - # Le nom de la variable doit etre obligatoirement le nom de la commande - EXEC_LOGICIEL = self.get_cmd('EXEC_LOGICIEL') - LIRE_MAILLAGE = self.get_cmd('LIRE_MAILLAGE') - PRE_GIBI = self.get_cmd('PRE_GIBI') - IMPR_RESU = self.get_cmd('IMPR_RESU') - - # La macro compte pour 1 dans la numerotation des commandes - self.set_icmd(1) - - # Le concept sortant (de type mail) est nommé 'nomres' dans - # le contexte de la macro - - self.DeclareOut('nomres',self.sd) - - # Chemin de Gibi - import aster - loc_gibi=aster.repout() - gibi2000=loc_gibi+'gibi' - - # Unité pour le fichier maillage produit (format GIBI) - unite_mgib = EXEC_MAILLAGE['UNITE_MGIB'] - # Unité pour le fichier de commandes GIBI - unite_datg = EXEC_MAILLAGE['UNITE_DATG'] - # Niveau gibi - niveau_gibi = EXEC_MAILLAGE['NIVE_GIBI'] - - # Verif mail - ver_apla = VERI_MAIL['APLAT'] - ver_veri = VERI_MAIL['VERIF'] - - # Impression - if IMPRESSION['UNITE']!=None: - imp_unit = IMPRESSION['UNITE'] - imp_unitF = 1 - else: - imp_unitF = 0 - if IMPRESSION['FORMAT']!=None: - imp_form = IMPRESSION['FORMAT'] - imp_formF = 1 - else: - imp_formF = 0 -# if IMPRESSION['FICHIER']!=None: -# imp_fich = IMPRESSION['FICHIER'] -# imp_fichF = 1 -# else: -# imp_fichF = 0 - - # Maillage - nrad = RAFF_MAILLAGE['NB_RADIAL'] - ncir = RAFF_MAILLAGE['NB_CIRCONF'] - nver = RAFF_MAILLAGE['NB_VERTICAL'] - nsect = RAFF_MAILLAGE['NB_ALESAGE'] - temps = 5. - - maillage = {'nrad': nrad, - 'ncir': ncir, - 'nver': nver, - 'nsect': nsect, - 'temps' : temps,} - - # Création du fichier datg - - if GEOM_BRID['NORME'] == 'OUI': - # Bride standard - type_bride = GEOM_BRID['TYPE'] - ### Ecriture du fichier GIBI principal (dgib) - Bride STANDARD - write_file_dgib_STD(unite_mgib,unite_datg,maillage,type_bride) - else: - # Bride quelconque - geo_bride_qqe = {'nbgouj': GEOM_BRID['GOUJ_N_GOUJON'], - 'dint': GEOM_BRID['BRID_D_INT'], - 'dex1': GEOM_BRID['TUBU_D_EXT'], - 'dex2': GEOM_BRID['BRID_D_CONGE'], - 'dex3': GEOM_BRID['BRID_D_EPAUL'], - 'dtrou': GEOM_BRID['BRID_P_ALESAG'], - 'dext': GEOM_BRID['BRID_D_EXT'], - 'dt': GEOM_BRID['BRID_D_ALESAG'], - 'drd': GEOM_BRID['GOUJ_D_RONDEL'], - 'dg': GEOM_BRID['GOUJ_D_GOUJON'], - 'dec': GEOM_BRID['GOUJ_D_ECROU'], - 'rcong': GEOM_BRID['BRID_R_CONGE'], - 'he': GEOM_BRID['GOUJ_E_ECROU'], - 'e': GEOM_BRID['GOUJ_E_RONDEL'], - 'hc1': GEOM_BRID['BRID_H'], - 'hcg1': GEOM_BRID['TUBU_H'], - 'hb': GEOM_BRID['BRID_H_EPAUL'], - 'htrou': GEOM_BRID['BRID_H_ALESAG'], - 'pf': GEOM_BRID['GOUJ_E_FILET'], - 'j': GEOM_BRID['ETAN_E_JOINT']} - ### Ecriture du fichier GIBI principal (dgib) - Bride QUELCONQUE - write_file_dgib_QQE(unite_mgib,unite_datg,maillage,geo_bride_qqe) - - fichier_datg = 'fort.'+str(unite_datg) - fichier_mgib = 'fort.'+str(unite_mgib) - - # Lancement de GIBI - EXEC_LOGICIEL( - LOGICIEL=gibi2000, - ARGUMENT=(fichier_datg, fichier_mgib), - ) - # Lecture du maillage GIBI dans ASTER - PRE_GIBI( - UNITE_GIBI = unite_mgib, - ) - - nomres = LIRE_MAILLAGE(VERI_MAIL=_F(APLAT = ver_apla, - VERIF = ver_veri ),) - -# if (imp_fichF == 1): -# print imp_fich - if (imp_formF == 1): - print imp_form - if (imp_unitF == 1): - print imp_unit - # Impression du fichier maillage - if (imp_formF == 1): - if (imp_form == 'CASTEM'): - imp_ngib = IMPRESSION['NIVE_GIBI'] - IMPR_RESU( RESU = _F(MAILLAGE=nomres, ), - FORMAT = 'CASTEM', NIVE_GIBI = imp_ngib ) - if (imp_form == 'IDEAS'): - imp_nver = IMPRESSION['VERSION'] - IMPR_RESU(RESU = _F(MAILLAGE=nomres,), - FORMAT = 'IDEAS', VERSION = imp_nver ) - - return ier - - -############################################################################################## -# Liste des fonctions -############################################################################################## - -############# -## EXTERNES (appelables depuis l'extérieur) -############# - -### Ecriture du fichier GIBI principal (dgib) - Bride STANDARD -# null = write_file_dgib_STD(unite_mgib,unite_datg,msh_bride,geo_bride) - -### Ecriture du fichier GIBI principal (dgib) - Bride QUELCONQUE -# null = write_file_dgib_QQE(unite_mgib,unite_datg,msh_bride,geo_bride) - -### Imprime tout le catalogue des brides standards disponibles dans un fichier texte -# null = print_bride_std(nom_fichier) - -### Catalogue complet des brides standards disponibles -# txt = bride_std() - -############# -## INTERNES (réservées au travail interne) -############# - -### Génération du nom du fichier pour le fichier maillage résultant (format GIBI) -# NomFichier(txt) = name_file_mgib(unite_mgib): - -### Génération du nom du fichier pour le fichier générant le maillage (commandes GIBI) -# NomFichier(txt) = name_file_datg(unite_datg): - -### Récupère un fichier texte DATG -# Txt = text_datg(fichier_datg): - -### Génération du texte pour les variables -# Txt = para_text(dico_var,var): - - - -#============================================================================================= -# Importation des modules Python -#============================================================================================= - -from Macro.macr_cabri_mail_dat import dico_var_geo,dico_var_msh,dico_bride_std - -#============================================================================================= -# Fonctions principales -#============================================================================================= -# Ecriture du fichier GIBI principal (dgib) - Bride STANDARD -def write_file_dgib_STD(unite_mgib,unite_datg,msh_bride,geo_bride): - - # Nom du fichier maillage produit par GIBI - nomFichierMGIB = name_file_mgib(unite_mgib) - - # Nom du fichier de commandes pour GIBI - nomFichierDATG = name_file_datg(unite_datg) - - # Ouverture du fichier d'entrée de commandes - fdgib=open(nomFichierDATG,'w') - - # En-tete - text = "**************************************************************\n" - text = text + "* Fichier GIBI pour le maillage d'une bride \n" - text = text + "**************************************************************\n" - text = text + "\n" - text = text + "* Ce fichier a été généré automatiquement par la macro ASTER MACR_CABRI_MAIL \n" - text = text + "* Ne pas modifier\n" - text = text + "\n" - text = text + "**************************************************************\n" - text = text + "* Type bride: Bride standard \n" - text = text + "**************************************************************\n" - text = text + "titre '"+"Bride standard"+"';\n" - text = text + "** Type bride standard: "+geo_bride+"\n" - - text = text + "\n" - text = text + "nomfich = CHAINE \n" - if len(nomFichierMGIB)>72: - raise Exception, 'Nom de fichier trop long (limité à 72 caractères ' \ - 'pour GIBI) :\n',nomFichierMGIB - elif len(nomFichierMGIB)<=69: - text = text + "'"+nomFichierMGIB+"';\n" - else: - text = text + "'"+nomFichierMGIB[:69]+"'\n" \ - + "'"+nomFichierMGIB[69:]+"';\n" - text = text + "opti dime 3 elem cub8 SAUV FORM nomfich;\n" - text = text + "dens 1;\n" - text = text + "\n" - fdgib.write(text) - - # Procédures internes supplémentaires - text = "**************************************************************\n" - text = text + "* Procédures supplémentaires \n" - text = text + "**************************************************************\n" - text = text + text_datg_pro() - fdgib.write(text) - - # Début de procédure de création du maillage - text = "**************************************************************\n" - text = text + "**************************************************************\n" - text = text + "********* Début de procédure de création du maillage *********\n" - text = text + "**************************************************************\n" - text = text + "**************************************************************\n" - text = text + "\n debproc constru;\n" - fdgib.write(text) - - # Paramètres géométriques - car_bride = dico_bride_std[geo_bride] - text = "**************************************************************\n" - text = text + "* Paramètres géométriques \n" - text = text + "**************************************************************\n" - text = text + para_text(dico_var_geo,car_bride) - fdgib.write(text) - - # Paramètres du maillage - text = "**************************************************************\n" - text = text + "* Paramètres physiques \n" - text = text + "**************************************************************\n" - text = text + para_text(dico_var_msh,msh_bride) - fdgib.write(text) - - # Algorithme du maillage - text = "**************************************************************\n" - text = text + "* Algorithme de maillage \n" - text = text + "**************************************************************\n" - text = text + text_datg_std() - fdgib.write(text) - - # Fermeture du fichier maillage - fdgib.close() - - -# Ecriture du fichier GIBI principal (dgib) - Bride QUELCONQUE -def write_file_dgib_QQE(unite_mgib,unite_datg,msh_bride,geo_bride): - - # Nom du fichier maillage produit par GIBI - nomFichierMGIB = name_file_mgib(unite_mgib) - - # Nom du fichier de commandes pour GIBI - nomFichierDATG = name_file_datg(unite_datg) - - # Ouverture du fichier d'entree de commandes - fdgib=open(nomFichierDATG,'w') - - # En-tete - text = "**************************************************************\n" - text = text + "* Fichier GIBI pour le maillage d'une bride \n" - text = text + "**************************************************************\n" - text = text + "\n" - text = text + "* Ce fichier a été généré automatiquement par la macro ASTER MACR_CABRI_MAIL \n" - text = text + "* Ne pas modifier\n" - text = text + "\n" - text = text + "**************************************************************\n" - text = text + "* Type bride: Bride quelconque\n" - text = text + "**************************************************************\n" - text = text + "titre '"+"Bride Quelconque"+"';\n" - text = text + "\n" - text = text + "nomfich = CHAINE \n" - if len(nomFichierMGIB)>72: - raise Exception, 'Nom de fichier trop long (limité à 72 caractères ' \ - 'pour GIBI) :\n',nomFichierMGIB - elif len(nomFichierMGIB)<=69: - text = text + "'"+nomFichierMGIB+"';\n" - else: - text = text + "'"+nomFichierMGIB[:69]+"'\n" \ - + "'"+nomFichierMGIB[69:]+"';\n" - text = text + "opti dime 3 elem cub8 SAUV FORM nomfich;\n" - text = text + "dens 1;\n" - text = text + "\n" - fdgib.write(text) - - # Procédures internes supplémentaires - text = "**************************************************************\n" - text = text + "* Procédures supplémentaires \n" - text = text + "**************************************************************\n" - text = text + text_datg_pro() - fdgib.write(text) - - # Début de procédure de création du maillage - text = "**************************************************************\n" - text = text + "**************************************************************\n" - text = text + "********* Début de procédure de création du maillage *********\n" - text = text + "**************************************************************\n" - text = text + "**************************************************************\n" - text = text + "\n debproc constru;\n" - fdgib.write(text) - - # Paramètres géométriques - text = "**************************************************************\n" - text = text + "* Paramètres géométriques \n" - text = text + "**************************************************************\n" - text = text + para_text(dico_var_geo,geo_bride) - fdgib.write(text) - - # Paramètres du maillage - text = "**************************************************************\n" - text = text + "* Paramètres physiques \n" - text = text + "**************************************************************\n" - text = text + para_text(dico_var_msh,msh_bride) - fdgib.write(text) - - # Algorithme du maillage - text = "**************************************************************\n" - text = text + "* Algorithme de maillage \n" - text = text + "**************************************************************\n" - text = text + text_datg_qqe() - fdgib.write(text) - - # Fermeture du fichier maillage - fdgib.close() - -# Génération du nom du fichier pour le fichier maillage résultant (format GIBI) -def name_file_mgib(unite_mgib): - cur_dir = os.getcwd() - nomFichier = cur_dir+'/fort.'+str(unite_mgib) - return nomFichier - - -# Génération du nom du fichier pour le fichier générant le maillage (commandes GIBI) -def name_file_datg(unite_datg): - cur_dir = os.getcwd() - nomFichier = cur_dir+'/fort.'+str(unite_datg) - return nomFichier - -# Récupère un fichier texte DATG: texte GIBI pour procédures -def text_datg_pro(): - import aster - loc_datg = aster.repdex() - datg_bridePro = loc_datg+"macr_cabri_mail_proc.datg" - fproc=open(datg_bridePro,'r') - procText = fproc.read() - fproc.close() - - return procText - -# Récupère un fichier texte DATG: texte GIBI pour bride quelconque -def text_datg_qqe(): - import aster - loc_datg = aster.repdex() - datg_brideQqe = loc_datg+"macr_cabri_mail_qqe.datg" - fproc=open(datg_brideQqe,'r') - procText = fproc.read() - fproc.close() - - return procText - -# Récupère un fichier texte DATG: texte GIBI pour bride standard -def text_datg_std(): - import aster - loc_datg = aster.repdex() - datg_brideStd = loc_datg+"macr_cabri_mail_std.datg" - fproc=open(datg_brideStd,'r') - procText = fproc.read() - fproc.close() - - return procText - -# Génération du texte pour les variables -def para_text(dico_var,var): - text = '\n' - for nom_var in var.keys(): - text = text+"* "+dico_var[nom_var]+"\n" - text = text+nom_var+" = "+`var[nom_var]`+";\n" - return text - -#============================================================================================= -# Accès au catalogue des brides standards -# (les brides standards sont décrites dans le fichier Data_Brides.py) -#============================================================================================= - - - -# Imprime tout le catalogue des brides standards disponibles dans un fichier texte -def print_bride_std(nom_fichier): - text = bride_std() - # Ouverture du fichier - finfo=open(nom_fichier,'w') - # Ecriture des infos - finfo.write(text) - # Fermeture du fichier - finfo.close() - -# Catalogue complet des brides standards disponibles -def bride_std(): - # Ligne d'info - text = "Liste des brides standards avec leurs dimensions\n" - # Première ligne - text = text+"\t" - for nom_variable in dico_var_geo.keys(): - text = text + nom_variable+"\t\t" - text = text + "\n" - # Lignes suivantes - for nom_bride in dico_bride_std.keys(): - bride = dico_bride_std[nom_bride] - text = text + nom_bride + '\t' - for nom_var in dico_var_geo.keys(): - chaine = "%f" % (bride[nom_var]) - text = text+chaine+"\t" - text = text + "\n" - return text diff --git a/Aster/Cata/cataSTA9/Macro/macr_cara_poutre_ops.py b/Aster/Cata/cataSTA9/Macro/macr_cara_poutre_ops.py index 89195496..9415a2e9 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_cara_poutre_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_cara_poutre_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_cara_poutre_ops Macro DATE 27/02/2006 AUTEUR DURAND C.DURAND +#@ MODIF macr_cara_poutre_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -24,9 +24,10 @@ def macr_cara_poutre_ops(self,UNITE_MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD, """ Ecriture de la macro MACR_CARA_POUTRE """ - import types + import types,string from Accas import _F - from Utilitai.Utmess import UTMESS + import aster + from Utilitai.Utmess import UTMESS ier=0 # On importe les definitions des commandes a utiliser dans la macro # Le nom de la variable doit etre obligatoirement le nom de la commande @@ -61,7 +62,6 @@ def macr_cara_poutre_ops(self,UNITE_MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD, # if GROUP_MA_BORD and GROUP_MA: # if not LIAISON: -# UTMESS('F', "MACR_CARA_POUTRE", "Avec GROUP_MA, il faut obligatoirement preciser LIAISON, LONGUEUR ET MATERIAU") # __nomlma=LIRE_MAILLAGE(UNITE=UNITE_MAILLAGE,) @@ -242,8 +242,17 @@ def macr_cara_poutre_ops(self,UNITE_MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD, motscles={} - if args.has_key('NOEUD'): - motscles['TEMP_IMPO']=(_F(NOEUD=args['NOEUD'],TEMP=__fnsec0)) + if args['NOEUD']!=None: + nthno = args['NOEUD'] + if type(nthno)!=types.StringType : UTMESS('F','POUTRE0_3') + motscles['TEMP_IMPO']=(_F(NOEUD=nthno,TEMP=__fnsec0)) + if args['GROUP_NO']!=None: + collgrno=aster.getcolljev(string.ljust(__nomapi.nom,8)+'.GROUPENO') + nomnoe =aster.getvectjev(string.ljust(__nomapi.nom,8)+'.NOMNOE') + l_no=collgrno[string.ljust(args['GROUP_NO'],8)] + if len(l_no)!=1 : UTMESS('F','POUTRE0_3') + nthno=nomnoe[l_no[0]-1] + motscles['TEMP_IMPO']=(_F(NOEUD=nthno,TEMP=__fnsec0)) __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth, SOURCE=_F(TOUT='OUI', SOUR=__fnsec1,), @@ -275,8 +284,16 @@ def macr_cara_poutre_ops(self,UNITE_MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD, # -------------------------------------------------- motscles={} - if args.has_key('NOEUD'): - motscles['TEMP_IMPO']=_F(NOEUD=args['NOEUD'],TEMP=__fnsec0) + if args['NOEUD']!=None: + nthno = args['NOEUD'] + motscles['TEMP_IMPO']=_F(NOEUD=nthno,TEMP=__fnsec0) + if args['GROUP_NO']!=None: + collgrno=aster.getcolljev(string.ljust(__nomapi.nom,8)+'.GROUPENO') + nomnoe =aster.getvectjev(string.ljust(__nomapi.nom,8)+'.NOMNOE') + l_no=collgrno[string.ljust(args['GROUP_NO'],8)] + if len(l_no)!=1 : UTMESS('F','POUTRE0_3') + nthno=nomnoe[l_no[0]-1] + motscles['TEMP_IMPO']=_F(NOEUD=nthno,TEMP=__fnsec0) __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth, SOURCE=_F(TOUT='OUI', SOUR=__fnsec2,), @@ -573,16 +590,30 @@ def macr_cara_poutre_ops(self,UNITE_MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD, else: l_group_ma= GROUP_MA - if args.has_key('NOEUD'): + l_noeud=None + + if args['NOEUD']!=None: if type(args['NOEUD'])==types.StringType : l_noeud=[args['NOEUD'],] else: l_noeud= args['NOEUD'] + if args['GROUP_NO']!=None: + collgrno=aster.getcolljev(string.ljust(__nomlma.nom,8)+'.GROUPENO') + nomnoe =aster.getvectjev(string.ljust(__nomlma.nom,8)+'.NOMNOE') + l_nu_no =[] + if type(args['GROUP_NO'])==types.StringType : + l_gr_no=[args['GROUP_NO'],] + else: + l_gr_no= args['GROUP_NO'] + for grno in l_gr_no: + l_nu_no =l_nu_no+list(collgrno[string.ljust(grno,8)]) + l_noeud =[nomnoe[no_i-1] for no_i in l_nu_no] + if len(l_group_ma)!=len(l_group_ma_bord): - UTMESS('F', "MACR_CARA_POUTRE", "GROUP_MA et GROUP_MA_BORD incoherents") - if args.has_key('NOEUD') and (len(l_group_ma)!=len(l_noeud)): - UTMESS('F', "MACR_CARA_POUTRE", "GROUP_MA et NOEUD incoherents") + UTMESS('F','POUTRE0_1') + if l_noeud!=None and (len(l_group_ma)!=len(l_noeud)): + UTMESS('F','POUTRE0_2') __catp2=__cageo for i in range(0,len(l_group_ma_bord)): diff --git a/Aster/Cata/cataSTA9/Macro/macr_lign_coupe_ops.py b/Aster/Cata/cataSTA9/Macro/macr_lign_coupe_ops.py index 568a8cea..36c901ab 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_lign_coupe_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_lign_coupe_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_lign_coupe_ops Macro DATE 22/05/2007 AUTEUR GALENNE E.GALENNE +#@ MODIF macr_lign_coupe_ops Macro DATE 07/04/2008 AUTEUR GALENNE E.GALENNE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -21,16 +21,17 @@ ######################################################################## # script PYTHON de creation du résultat local -def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma): +def crea_resu_local(self,dime,NOM_CHAM,m,resin,mail,nomgrma): - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS from math import pi,sqrt,atan2,asin import os,string,types import aster from Accas import _F + MODI_REPERE = self.get_cmd('MODI_REPERE') epsi=0.00000001 - + if NOM_CHAM == 'DEPL': if dime == 2: LCMP=['DX','DY'] @@ -48,7 +49,7 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma): if m['TYPE']=='SEGMENT' and m['REPERE'] != 'CYLINDRIQUE' : - + if m['REPERE'] == 'LOCAL': # --- determination des angles nautiques cx1=m['COOR_EXTR'][0]-m['COOR_ORIG'][0] @@ -58,7 +59,7 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma): cx3=m['COOR_EXTR'][2]-m['COOR_ORIG'][2] nvx=sqrt(cx1**2+cx2**2+cx3**2) if abs(nvx) < epsi: - UTMESS('F', "MACR_LIGN_COUPE", "definition incorrecte de la ligne de coupe") + UTMESS('F','POST0_1') cx1=cx1/nvx cx2=cx2/nvx cx3=cx3/nvx @@ -69,13 +70,13 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma): cy3=m['VECT_Y'][2] nvy=sqrt(cy1**2+cy2**2+cy3**2) if abs(nvy) < epsi: - UTMESS('F', "MACR_LIGN_COUPE", "valeurs incorrectes pour VECT_Y") + UTMESS('F','POST0_2') cy1=cy1/nvy cy2=cy2/nvy cy3=cy3/nvy if ((abs(cx1-cy1) epsi : cz1=cx2*cy3-cx3*cy2 cz2=cx3*cy1-cx1*cy3 @@ -91,10 +92,8 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma): cy1=cy1/nvy cy2=cy2/nvy cy3=cy3/nvy - UTMESS('A','MACR_LIGN_COUPE','LE VECTEUR Y N EST PAS ORTHOGONAL A LA LIGNE DE COUPE' - +'LE VECTEUR Y A ETE ORTHONORMALISE POUR VOUS') - UTMESS('A','MACR_LIGN_COUPE','VECT_Y=('+str(cy1)+','+str(cy2)+','+str(cy3)+')') - else: + UTMESS('A','POST0_4',valr=[cy1,cy2,cy3]) + else: cz1=cx2*cy3-cx3*cy2 cz2=cx3*cy1-cx1*cy3 cz3=cx1*cy2-cx2*cy1 @@ -131,8 +130,8 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma): ANGL_NAUT.append(gamma) motscles['DEFI_REPERE'].append(_F(REPERE='UTILISATEUR',ANGL_NAUT=ANGL_NAUT),) __remodr=MODI_REPERE(RESULTAT=resin,**motscles) - - + + if m['TYPE']=='ARC': if m['REPERE'] == 'CYLINDRIQUE' : motscles={} @@ -153,21 +152,21 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma): motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=ORIGINE,),) __remodr=MODI_REPERE(RESULTAT=resin,**motscles) else : - UTMESS("F","MACR_LIGN_COUPE","LE TYPE "+m['TYPE']+" N'EST PAS COHERENT AVEC LE CHOIX DU REPERE ( REPERE "+m['REPERE']+" ).") + UTMESS('F','POST0_5',valk=[m['TYPE'],m['REPERE']]) if m['TYPE'][:5]=='GROUP' or m['TYPE']=='SEGMENT': - + if m['TYPE'][:5]=='GROUP' and m['REPERE'] == 'LOCAL': - # determination du repère local (v1,v2,v3) + # determination du repère local (v1,v2,v3) # --------------------------------------- noma=mail.nom collgrma=aster.getcolljev(noma.ljust(8)+'.GROUPEMA') collcnx =aster.getcolljev(noma.ljust(8)+'.CONNEX') coord =aster.getvectjev(noma.ljust(8)+'.COORDO .VALE') cnom =aster.getvectjev(noma.ljust(8)+'.NOMNOE') - + numa=collgrma[nomgrma.ljust(8)] dictu={} # initialisations @@ -188,7 +187,7 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma): vectu1.append(uy) vectu2.append(ux) vectu2.append(uy) - if dime ==3 : + if dime ==3 : uz=coord[3*(n2-1)+2]-coord[3*(n1-1)+2] vectu1.append(uz) vectu2.append(uz) @@ -288,7 +287,7 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma): __resu[j]=MODI_REPERE(RESULTAT=__resu[j-1],**motscles) __remodr=__resu[j] - + motscles={} motscles['MODI_CHAM']=[] motscles['DEFI_REPERE']=[] @@ -318,7 +317,7 @@ def crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,resin,mail,nomgrma): # script PYTHON de creation des noeuds d'une ligne de coupe 'arc' def crea_noeu_lig_coup(dimension,pt1,pt2,anglj,dnor): - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS from math import pi,sin,cos,sqrt a=pt1[0]-pt2[0] @@ -328,7 +327,7 @@ def crea_noeu_lig_coup(dimension,pt1,pt2,anglj,dnor): if dimension==2: r=sqrt(a**2+b**2) if abs(r) l_matiere + # l_horsmat=liste des noeuds hors matière + l_matiere = [j for j in listenoe_b if j in lno_c2] + nderm=l_matiere.index(l_matiere[len(l_matiere)-1]) + l_horsmat = [j for j in listenoe_b if j not in lno_c2] + + # si on est en présence de noeuds hors matière, + # on emet une alarme pour informer l'utilisateur + if len(l_horsmat) > 0: + + nderh=l_horsmat.index(l_horsmat[len(l_horsmat)-1]) + cnom = list(__macou.NOMNOE.get()) + l_coor = __macou.COORDO.VALE.get() + indent=os.linesep+' '*12 + l_surlig = [] + l_horslig = [] + for j in l_matiere[:nderm+1]: + nuno=cnom.index(j.ljust(8)) + text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3]) + l_surlig.append(text_coordo) + for j in l_horsmat[:nderh+1]: + nuno=cnom.index(j.ljust(8)) + text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3]) + l_horslig.append(text_coordo) + UTMESS('A','POST0_8',valk=[indent.join(l_surlig),indent.join(l_horslig)]) + + __macou=DEFI_GROUP( reuse =__macou , MAILLAGE=__macou , + CREA_GROUP_NO=_F(NOM=newgrp,NOEUD=l_matiere[:nderm+1]),) + + return ######################################################################## # script PYTHON de creation d un maillage de ligne de coupe def crea_mail_lig_coup(dimension,lignes,groups,arcs): import os,sys,copy - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS # construction du maillage au format Aster des segments de lignes de coupe @@ -525,7 +602,7 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, from Noyau.N_utils import AsType import aster,math from Utilitai.UniteAster import UniteAster - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS ier=0 # On importe les definitions des commandes a utiliser dans la macro @@ -535,7 +612,6 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, PROJ_CHAMP =self.get_cmd('PROJ_CHAMP') POST_RELEVE_T =self.get_cmd('POST_RELEVE_T') CREA_TABLE =self.get_cmd('CREA_TABLE') - MODI_REPERE =self.get_cmd('MODI_REPERE') CREA_RESU =self.get_cmd('CREA_RESU') CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE') @@ -563,13 +639,13 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, n_modele=string.strip(l_modele[0]) if n_modele=='' : if MODELE==None: - UTMESS('F', "MACR_LIGN_COUPE", "nom du modele absent dans le concept resultat "+nomresu) + UTMESS('F','POST0_9',valk=nomresu) else : n_modele=MODELE.nom elif CHAM_GD != None: mcORDR['TOUT_ORDRE']='OUI' if MODELE==None: - UTMESS('F', "MACR_LIGN_COUPE", "veuillez renseigner le MODELE si vous utilisez un CHAM_GD ") + UTMESS('F','POST0_10') else : n_modele=MODELE.nom # récupération de la grandeur du champ n_cham=CHAM_GD.nom @@ -591,7 +667,7 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, NOM_CHAM=NOM_CHAM, TYPE_RESU=TYPE_RESU, AFFE=_F(CHAM_GD=CHAM_GD,INST=0.),) RESULTAT=__resuch - l_mailla=aster.getvectjev(n_modele.ljust(8)+'.MODELE .NOMA') + l_mailla=aster.getvectjev(n_modele.ljust(8)+'.MODELE .LGRF') n_mailla=string.strip(l_mailla[0]) dime=aster.getvectjev(n_mailla.ljust(8)+'.DIME')[5] collgrma=aster.getcolljev(n_mailla.ljust(8)+'.GROUPEMA') @@ -609,22 +685,22 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, lignes.append((m['COOR_ORIG'],m['COOR_EXTR'],m['NB_POINTS'])) minidim=min(minidim,len(m['COOR_ORIG']),len(m['COOR_EXTR'])) if minidim!=dime: - UTMESS('F', "MACR_LIGN_COUPE", "dimensions de maillage et de coordonnees incoherentes") + UTMESS('F','POST0_11') elif m['TYPE'] =='ARC' : minidim=min(minidim,len(m['COOR_ORIG']),len(m['CENTRE'])) if minidim!=dime: - UTMESS('F', "MACR_LIGN_COUPE", "dimensions de maillage et de coordonnees incoherentes") + UTMESS('F','POST0_11') if dime==2: arcs.append((m['COOR_ORIG'],m['CENTRE'],m['NB_POINTS'],m['ANGLE'],)) elif dime==3: if str(m['DNOR'])=='None': - UTMESS('F', "MACR_LIGN_COUPE", "le mot-clé 'DNOR' est obligatoire en 3D pour le type 'ARC'") + UTMESS('F','POST0_12') arcs.append((m['COOR_ORIG'],m['CENTRE'],m['NB_POINTS'],m['ANGLE'],m['DNOR'])) elif m['TYPE']=='GROUP_NO': ngrno=m['GROUP_NO'].ljust(8).upper() - collgrno=aster.getcolljev(n_mailla.ljust(8)+'.GROUPENO') + collgrno=aster.getcolljev(n_mailla.ljust(8)+'.GROUPENO') if ngrno not in collgrno.keys() : - UTMESS('F', "MACR_LIGN_COUPE", "le group_no "+ngrno+" n est pas dans le maillage "+n_mailla) + UTMESS('F','POST0_13',valk=[ngrno,n_mailla]) grpn=collgrno[ngrno] l_coor_group=[ngrno,] for node in grpn: @@ -633,28 +709,25 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, elif m['TYPE']=='GROUP_MA': ngrma=m['GROUP_MA'].ljust(8).upper() if ngrma not in collgrma.keys() : - UTMESS('F', "MACR_LIGN_COUPE", "le group_ma "+ngrma+" n est pas dans le maillage "+n_mailla) + UTMESS('F','POST0_14',valk=[ngrma,n_mailla]) grpm=collgrma[ngrma] for ma in grpm: if ltyma[typma[ma-1]-1][:3] != 'SEG' : nomma=aster.getvectjev(n_mailla.ljust(8)+'.NOMMAI') - UTMESS('F', "MACR_LIGN_COUPE", "le group_ma "+ngrma+" contient la maille "+ - nomma[ma-1]+"qui n'est pas de type SEG.") + UTMESS('F','POST0_15',valk=[ngrma,nomma[ma-1]]) __mailla=CREA_MAILLAGE(MAILLAGE= m['MAILLAGE'],) __mailla=DEFI_GROUP( reuse=__mailla,MAILLAGE= __mailla, CREA_GROUP_NO=_F(OPTION='NOEUD_ORDO',NOM=str(m['GROUP_MA']),GROUP_MA=m['GROUP_MA']),) - collgrno=aster.getcolljev(__mailla.nom.ljust(8)+'.GROUPENO') + collgrno=aster.getcolljev(__mailla.nom.ljust(8)+'.GROUPENO') grpn=collgrno[str(m['GROUP_MA']).ljust(8)] l_coor_group=[ngrma,] for node in grpn: l_coor_group.append(aster.getvectjev(n_mailla.ljust(8)+'.COORDO .VALE',3*(node-1),3)) groups.append(l_coor_group) - - if arcs!=[] and (lignes!=[] or groups!=[]) : - message = 'On ne peut pas combiner des lignes de coupes de type ARC avec des lignes de coupes SEGMENT ou GROUP_NO. \n' - UTMESS('F','MACR_LIGN_COUPE',message) + if arcs!=[] and (lignes!=[] or groups!=[]) : + UTMESS('F','POST0_16') # Création du maillage des NB_POINTS segments entre COOR_ORIG et COOR_EXTR # ainsi que des segments reliant les noeuds issus des group_no demandés @@ -671,10 +744,10 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, # Lecture du maillage de seg2 contenant toutes les lignes de coupe __macou=LIRE_MAILLAGE(UNITE=UNITE_MAILLAGE,); - + # distance min entre 2 points de la ligne de coupe (utile pour PROJ_CHAMP) dmin=dist_min_deux_points(__macou) - + motscles={} iocc=1 motscles['CREA_GROUP_NO']=[] @@ -704,16 +777,16 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, if args['VIS_A_VIS']!=None: for v in args['VIS_A_VIS']: if v['GROUP_MA_1']!=None: - motscles['VIS_A_VIS'].append(_F(GROUP_MA_1 = v['GROUP_MA_1'],TOUT_2='OUI'),) + motscles['VIS_A_VIS'].append(_F(GROUP_MA_1 = v['GROUP_MA_1'],TOUT_2='OUI'),) elif v['MAILLE_1']!=None: - motscles['VIS_A_VIS'].append(_F(MAILLE_1 = v['MAILLE_1'],TOUT_2='OUI'),) + motscles['VIS_A_VIS'].append(_F(MAILLE_1 = v['MAILLE_1'],TOUT_2='OUI'),) if n_modele in self.get_global_contexte().keys() : MODELE_1=self.get_global_contexte()[n_modele] else : MODELE_1=self.jdc.current_context[n_modele] __recou=PROJ_CHAMP(METHODE='ELEM', RESULTAT=RESULTAT, MODELE_1=MODELE_1, - DISTANCE_MAX=dmin*0.001, + DISTANCE_MAX=m['DISTANCE_MAX'], MODELE_2=__mocou, TYPE_CHAM='NOEU', NOM_CHAM=NOM_CHAM, **motscles); @@ -723,11 +796,11 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, ioc2=0 mcACTION=[] angtab=[] - + if AsType(RESULTAT).__name__ in ('evol_elas','evol_noli') : - + if NOM_CHAM in ('DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_DEPL','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU','SIGM_ELNO_DEPL'):icham=1 - + for m in LIGN_COUPE : motscles={} @@ -752,10 +825,13 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, if m['TYPE'] in ('GROUP_NO','GROUP_MA'): groupe=m[m['TYPE']].ljust(8).upper() nomgrma=groupe - else: + else: ioc2=ioc2+1 groupe='LICOU'+str(ioc2) nomgrma=' ' + newgrp='LICOF'+str(ioc2) + crea_grp_matiere(self,groupe,newgrp,m,__remodr,NOM_CHAM,__macou) + groupe=newgrp # on definit l'intitulé if m['INTITULE'] !=None : intitl=m['INTITULE'] @@ -775,16 +851,14 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, GROUP_NO = groupe, NOM_CHAM = NOM_CHAM,**motscles ),) else: - __remodr=crea_resu_local(dime,MODI_REPERE,NOM_CHAM,m,__recou,__macou,nomgrma) + __remodr=crea_resu_local(self,dime,NOM_CHAM,m,__recou,__macou,nomgrma) mcACTION.append( _F(INTITULE = intitl, RESULTAT = __remodr, GROUP_NO = groupe, NOM_CHAM = NOM_CHAM,**motscles ),) else: - UTMESS('A','MACR_LIGN_COUPE','LE CHAMP '+NOM_CHAM+' N EST PAS TRAITE PAR MACR_LIGNE_COUPE EN REPERE '+m['REPERE']+'.' - +'LE CALCUL EST EFFECTUE EN REPERE GLOBAL.') - + UTMESS('A','POST0_17',valk=[NOM_CHAM,m['REPERE']]) mcACTION.append( _F(INTITULE = intitl, RESULTAT = __recou, GROUP_NO = groupe, @@ -792,13 +866,13 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, # Expression des contraintes aux noeuds ou des déplacements dans le repere global else: - + mcACTION.append( _F(INTITULE = intitl, RESULTAT = __recou, GROUP_NO = groupe, NOM_CHAM = NOM_CHAM,**motscles ),) - + elif AsType(RESULTAT).__name__ in ('evol_ther',) : for m in LIGN_COUPE : @@ -824,6 +898,9 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, if m['TYPE'] not in ('GROUP_NO','GROUP_MA') : ioc2=ioc2+1 groupe='LICOU'+str(ioc2) + newgrp='LICOF'+str(ioc2) + crea_grp_matiere(self,groupe,newgrp,m,__remodr,NOM_CHAM,__macou) + groupe=newgrp if m['INTITULE'] !=None : intitl=m['INTITULE'] else : intitl='l.coupe'+str(ioc2) else: @@ -834,7 +911,7 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE, RESULTAT = __recou, GROUP_NO = groupe, NOM_CHAM = NOM_CHAM, **motscles ),) - + __tabitm=POST_RELEVE_T(ACTION=mcACTION,); # on repasse par les tables python pour supprimer les paramètres inutiles diff --git a/Aster/Cata/cataSTA9/Macro/macr_recal_ops.py b/Aster/Cata/cataSTA9/Macro/macr_recal_ops.py index 0efa2e46..e0fafb60 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_recal_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_recal_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_recal_ops Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE +#@ MODIF macr_recal_ops Macro DATE 19/11/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -32,16 +32,7 @@ fichier_export = None mode_python = False type_fonctionnelle = 'float' - -try: - import Utilitai.Utmess - from Utilitai.Utmess import UTMESS -except ImportError: - def UTMESS(code,sprg,texte): - fmt='\n <%s> <%s> %s\n\n' - print fmt % (code,sprg,texte) - if code=='F': sys.exit() - +from externe_mess import UTMESS # -------------------------------------------------------------------------------------------------- def Ecriture_Fonctionnelle(output_file, type_fonctionnelle, fonctionnelle): @@ -87,7 +78,7 @@ def Sortie(LIST_NOM_PARA, LIST_PARA, val, CALCUL_ASTER, Mess): import Cata, aster, Macro from Cata.cata import DEFI_LIST_REEL from Accas import _F - from Utilitai.Utmess import UTMESS + from externe_mess import UTMESS from Macro import reca_message from Macro import reca_algo from Macro import reca_interp @@ -172,7 +163,7 @@ def macr_recal_ops(self,UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, LIST_DERIV, RESU from Macro import reca_utilitaires from Macro import reca_calcul_aster from Macro.reca_controles import gestion - from Utilitai.Utmess import UTMESS + from externe_mess import UTMESS # Gestion des Exceptions prev_onFatalError = aster.onFatalError() @@ -203,7 +194,7 @@ def macr_recal(UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, LIST_DERIV, RESU_CALC, ITER_MAXI, ITER_FONC_MAXI, RESI_GLOB_RELA,UNITE_RESU,PARA_DIFF_FINI, GRAPHIQUE, SUIVI_ESCLAVE, METHODE, INFO, **args ): - + from externe_mess import UTMESS # Import d'as_profil if os.environ.has_key('ASTER_ROOT'): sys.path.append(os.path.join(os.environ['ASTER_ROOT'], 'ASTK', 'ASTK_SERV', 'lib')) @@ -696,7 +687,8 @@ if __name__ == '__main__': mode_python = True from optparse import OptionParser, OptionGroup - + from externe_mess import UTMESS + p = OptionParser(usage='usage: %s fichier_export [options]' % sys.argv[0]) p.add_option('-i', '--input', action='store', dest='input', type='string', default='input.txt', help='fichier contenant les parametres') p.add_option('-o', '--output', action='store', dest='output', type='string', default='output.txt', help='fichier contenant la fonctionnelle') diff --git a/Aster/Cata/cataSTA9/Macro/macr_spectre_ops.py b/Aster/Cata/cataSTA9/Macro/macr_spectre_ops.py index d694fd6a..44fb67d6 100644 --- a/Aster/Cata/cataSTA9/Macro/macr_spectre_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macr_spectre_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macr_spectre_ops Macro DATE 14/11/2006 AUTEUR COURTOIS M.COURTOIS +#@ MODIF macr_spectre_ops Macro DATE 19/11/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -19,12 +19,14 @@ # ====================================================================== from Accas import _F -try : +import string + +try: import aster - from Utilitai.Utmess import UTMESS -except : + from Utilitai.Utmess import UTMESS +except: pass -import string + def macr_spectre_ops(self,MAILLAGE,PLANCHER,NOM_CHAM,CALCUL,RESU,IMPRESSION=None, FREQ=None,LIST_FREQ=None,LIST_INST=None,AMOR_SPEC=None,**args): """ @@ -108,7 +110,7 @@ def macr_spectre_ops(self,MAILLAGE,PLANCHER,NOM_CHAM,CALCUL,RESU,IMPRESSION=None motscles={} if resu['RESU_GENE']!=None : if CALCUL=='ABSOLU' : - UTMESS('F', macro, 'Pas de calcul absolu avec tran_gene') + UTMESS('F','SPECTRAL0_8') motscles['RESU_GENE'] = resu['RESU_GENE'] if resu['RESULTAT' ]!=None : diff --git a/Aster/Cata/cataSTA9/Macro/macro_elas_mult_ops.py b/Aster/Cata/cataSTA9/Macro/macro_elas_mult_ops.py index b9dac9fe..0d5a4139 100644 --- a/Aster/Cata/cataSTA9/Macro/macro_elas_mult_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macro_elas_mult_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macro_elas_mult_ops Macro DATE 07/11/2006 AUTEUR CIBHHLV L.VIVAN +#@ MODIF macro_elas_mult_ops Macro DATE 22/10/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -37,10 +37,10 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL, CALC_MATR_ELEM =self.get_cmd('CALC_MATR_ELEM') NUME_DDL =self.get_cmd('NUME_DDL') ASSE_MATRICE =self.get_cmd('ASSE_MATRICE') - FACT_LDLT =self.get_cmd('FACT_LDLT') + FACTORISER =self.get_cmd('FACTORISER') CALC_VECT_ELEM =self.get_cmd('CALC_VECT_ELEM') ASSE_VECTEUR =self.get_cmd('ASSE_VECTEUR') - RESO_LDLT =self.get_cmd('RESO_LDLT') + RESOUDRE =self.get_cmd('RESOUDRE') CREA_RESU =self.get_cmd('CREA_RESU') CALC_ELEM =self.get_cmd('CALC_ELEM') CALC_NO =self.get_cmd('CALC_NO') @@ -62,7 +62,7 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL, ifour=1 # mot clé MODE_FOURIER présent sous CAS_CHARGE tyresu = 'FOURIER_ELAS' if ielas==1 and ifour==1: - UTMESS('F', "MACRO_ELAS_MULT", "On ne peut avoir a la fois NOM_CAS et MODE_FOURIER") + UTMESS('F','ELASMULT0_1') if (numeddl in self.sdprods) or (numeddl==None): # Si le concept numeddl est dans self.sdprods ou n est pas nommé @@ -100,7 +100,7 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL, __nomras=ASSE_MATRICE(MATR_ELEM=__nomrig,NUME_DDL=num) - __nomraf=FACT_LDLT(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER']) + __nomraf=FACTORISER(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER']) ##################################################################### # boucle sur les items de CAS_CHARGE @@ -126,7 +126,7 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL, __nomras=ASSE_MATRICE(MATR_ELEM=__nomrig,NUME_DDL=num) - __nomraf=FACT_LDLT(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER']) + __nomraf=FACTORISER(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER']) if m['VECT_ASSE']==None : @@ -142,7 +142,7 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL, __nomasv=m['VECT_ASSE'] - __nomchn=RESO_LDLT(MATR_FACT=__nomraf,CHAM_NO=__nomasv,TITRE=m['SOUS_TITRE']) + __nomchn=RESOUDRE(MATR=__nomraf,CHAM_NO=__nomasv,TITRE=m['SOUS_TITRE']) nomchn.append(__nomchn) # fin de la boucle sur les items de CAS_CHARGE @@ -234,11 +234,13 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL, motscles['NUME_MODE']=m['MODE_FOURIER'] motscles['EXCIT']=[] if m['CHAR_MECA'] : - for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) + for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) elif m['CHAR_CINE'] : - for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) - if CHAR_MECA_GLOBAL: motscles['EXCIT'].append(_F(CHARGE=CHAR_MECA_GLOBAL)) - elif CHAR_CINE_GLOBAL: motscles['EXCIT'].append(_F(CHARGE=CHAR_CINE_GLOBAL)) + for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) + if CHAR_MECA_GLOBAL: + for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt)) + elif CHAR_CINE_GLOBAL: + for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt)) CALC_ELEM(reuse=nomres, RESULTAT=nomres, MODELE=MODELE, @@ -256,11 +258,13 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL, motscles['NUME_MODE']=m['MODE_FOURIER'] motscles['EXCIT']=[] if m['CHAR_MECA'] : - for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) + for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) elif m['CHAR_CINE'] : - for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) - if CHAR_MECA_GLOBAL: motscles['EXCIT'].append(_F(CHARGE=CHAR_MECA_GLOBAL)) - elif CHAR_CINE_GLOBAL: motscles['EXCIT'].append(_F(CHARGE=CHAR_CINE_GLOBAL)) + for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt)) + if CHAR_MECA_GLOBAL: + for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt)) + elif CHAR_CINE_GLOBAL: + for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt)) CALC_NO(reuse=nomres, RESULTAT=nomres, MODELE=MODELE, diff --git a/Aster/Cata/cataSTA9/Macro/macro_expans_ops.py b/Aster/Cata/cataSTA9/Macro/macro_expans_ops.py index 884e1556..276f086b 100644 --- a/Aster/Cata/cataSTA9/Macro/macro_expans_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macro_expans_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macro_expans_ops Macro DATE 22/12/2006 AUTEUR BODEL C.BODEL +#@ MODIF macro_expans_ops Macro DATE 26/03/2008 AUTEUR BODEL C.BODEL # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -19,11 +19,13 @@ # ====================================================================== +# MODIF : 24/07/2007. BODEL : suppression du mc NUME_DDL. Le nume_ddl par +# defaut pour PROJ_CHAMP est celui du modèle expérimental. def macro_expans_ops( self, MODELE_CALCUL, MODELE_MESURE, - NUME_DDL, + NUME_DDL=None, RESU_NX=None, RESU_EX=None, RESU_ET=None, @@ -40,6 +42,7 @@ def macro_expans_ops( self, from types import ListType, TupleType ier = 0 + import aster EXTR_MODE = self.get_cmd('EXTR_MODE') PROJ_MESU_MODAL = self.get_cmd('PROJ_MESU_MODAL') REST_BASE_PHYS = self.get_cmd('REST_BASE_PHYS') @@ -108,8 +111,8 @@ def macro_expans_ops( self, paras = ('FREQ') else: paras = None - UTMESS('A', 'MACRO_OBSERV', - "LE MODELE MEDURE DOIT ETRE UN CONCEPT DE TYPE DYNA_HARMO OU MODE_MECA") + #"LE MODELE MEDURE DOIT ETRE UN CONCEPT DE TYPE DYNA_HARMO OU MODE_MECA") + UTMESS('A','MEIDEE0_1') try: @@ -136,18 +139,27 @@ def macro_expans_ops( self, NOM_CHAM = NOM_CHAM); - # Restriction des modes mesures etendus sur le maillage capteur # ------------------------------------------------------------- self.DeclareOut( "RESU_RD", RESU_RD ) + refd1 = aster.getvectjev(RESU_EXP.nom.ljust(19)+".REFD") + refd2 = aster.getvectjev(RESU_EX.nom.ljust(19)+".REFD") + + if RESU_EX.REFD.get(): + tmp = RESU_EX.REFD.get()[3] + nume = self.jdc.sds_dict[tmp.strip()] + elif NUME_DDL: + nume = NUME_DDL + else: + UTMESS('A','MEIDEE0_5') RESU_RD = PROJ_CHAMP( METHODE = 'ELEM', RESULTAT = RESU_ET, MODELE_1 = MOD_CALCUL, MODELE_2 = MOD_MESURE, NOM_CHAM = NOM_CHAM, TOUT_ORDRE = 'OUI', - NUME_DDL = NUME_DDL, + NUME_DDL = nume, VIS_A_VIS =_F( TOUT_1='OUI', TOUT_2='OUI',), NOM_PARA = paras, diff --git a/Aster/Cata/cataSTA9/Macro/macro_matr_ajou_ops.py b/Aster/Cata/cataSTA9/Macro/macro_matr_ajou_ops.py index c3b17003..aa8b0d65 100644 --- a/Aster/Cata/cataSTA9/Macro/macro_matr_ajou_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macro_matr_ajou_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macro_matr_ajou_ops Macro DATE 05/09/2005 AUTEUR DURAND C.DURAND +#@ MODIF macro_matr_ajou_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -30,7 +30,7 @@ def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATI from Accas import _F import types import aster - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS ier=0 # On importe les definitions des commandes a utiliser dans la macro @@ -56,7 +56,7 @@ def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATI else : for flu in FLUIDE : if flu['GROUP_MA']==None : - UTMESS('F', "MACRO_MATR_AJOU", "cas fluides multiples : precisez le GROUP_MA dans lequel vous affectez la masse volumique RHO") + UTMESS('F','MATRICE0_1') IOCFLU=len(FLUIDE) @@ -111,7 +111,7 @@ def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATI if DDL['GROUP_NO']!=None : mfact=_F(GROUP_NO=DDL['GROUP_NO'],TEMP=DDL['PRES_FLUIDE']) affimp.append(mfact) if nflui==0: - UTMESS('F', "MACRO_MATR_AJOU", "PRES_FLUIDE obligatoire une fois") + UTMESS('F','MATRICE0_2') __CHARGE=AFFE_CHAR_THER( MODELE = __NOMFLU, TEMP_IMPO = affimp ) @@ -190,7 +190,7 @@ def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATI if MODE_MECA !=None : mostcles['MODE_MECA'] =MODE_MECA elif DEPL_IMPO !=None : mostcles['CHAM_NO'] =DEPL_IMPO else : - UTMESS('F', "MACRO_MATR_AJOU", "amortissement ajoute sur modele generalise non encore implante") + UTMESS('F','MATRICE0_3') AMORAJ = CALC_MATR_AJOU(MODELE_FLUIDE = __NOMFLU, MODELE_INTERFACE = __NOMINT, @@ -212,7 +212,7 @@ def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATI if MODE_MECA !=None : mostcles['MODE_MECA'] =MODE_MECA elif DEPL_IMPO !=None : mostcles['CHAM_NO'] =DEPL_IMPO else : - UTMESS('F', "MACRO_MATR_AJOU", "rigidite ajoute sur modele generalise non encore implante") + UTMESS('F','MATRICE0_4') RIGIAJ = CALC_MATR_AJOU(MODELE_FLUIDE = __NOMFLU, MODELE_INTERFACE = __NOMINT, diff --git a/Aster/Cata/cataSTA9/Macro/macro_matr_asse_ops.py b/Aster/Cata/cataSTA9/Macro/macro_matr_asse_ops.py index ddf508f1..6bca7b13 100644 --- a/Aster/Cata/cataSTA9/Macro/macro_matr_asse_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macro_matr_asse_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macro_matr_asse_ops Macro DATE 12/06/2006 AUTEUR CIBHHLV L.VIVAN +#@ MODIF macro_matr_asse_ops Macro DATE 18/03/2008 AUTEUR BOYERE E.BOYERE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -21,15 +21,16 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE, - SOLVEUR,NUME_DDL,CHARGE,CHAR_CINE,INST,**args): + SOLVEUR,NUME_DDL,CHARGE,CHAR_CINE,INST,INFO,**args): """ Ecriture de la macro MACRO_MATR_ASSE """ ier=0 - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS # On met le mot cle NUME_DDL dans une variable locale pour le proteger numeddl=NUME_DDL + info=INFO # On importe les definitions des commandes a utiliser dans la macro # Le nom de la variable doit etre obligatoirement le nom de la commande CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM') @@ -38,39 +39,9 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE, # La macro compte pour 1 dans la numerotation des commandes self.set_icmd(1) - if SOLVEUR: - methode=SOLVEUR['METHODE'] - if methode=='LDLT': - if SOLVEUR['RENUM']: - renum=SOLVEUR['RENUM'] - else: - renum='RCMK' - if renum not in ('SANS','RCMK'): - UTMESS('F', "MACRO_MATR_ASSE", "Avec methode LDLT, RENUM doit etre SANS ou RCMK") - elif methode=='MULT_FRONT': - if SOLVEUR['RENUM']: - renum=SOLVEUR['RENUM'] - else: - renum='MDA' - if renum not in ('MDA','MD','METIS'): - UTMESS('F', "MACRO_MATR_ASSE", "Avec methode MULT_FRONT, RENUM doit etre MDA, MD ou RCMK") - elif methode=='MUMPS': - if SOLVEUR['RENUM']: - renum=SOLVEUR['RENUM'] - else: - renum='SANS' - if renum not in ('SANS',): - UTMESS('F', "MACRO_MATR_ASSE", "Avec methode MUMPS, RENUM doit etre SANS") - elif methode=='GCPC': - if SOLVEUR['RENUM']: - renum=SOLVEUR['RENUM'] - else: - renum='SANS' - if renum not in ('SANS','RCMK'): - UTMESS('F', "MACRO_MATR_ASSE", "Avec methode GCPC, RENUM doit etre SANS ou RCMK") - else: - methode='MULT_FRONT' - renum ='MDA' + # Les mots cles simples sous SOLVEUR sont par defaut MULT_FRONT/METIS + methode=SOLVEUR['METHODE'] + renum=SOLVEUR['RENUM'] if numeddl in self.sdprods: # Si le concept numeddl est dans self.sdprods @@ -100,17 +71,17 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE, option=m['OPTION'] if iocc == 1 and lnume == 1 and option not in ('RIGI_MECA','RIGI_MECA_LAGR', 'RIGI_THER','RIGI_ACOU') : - UTMESS('F', "MACRO_MATR_ASSE", "UNE DES OPTIONS DOIT ETRE RIGI_MECA OU RIGI_THER OU RIGI_ACOU OU RIGI_MECA_LAGR") + UTMESS('F','MATRICE0_9') motscles={'OPTION':option} if option == 'RIGI_MECA_HYST': if (not lrigel): - UTMESS('F', "MACRO_MATR_ASSE", "POUR CALCULER RIGI_MECA_HYST, IL FAUT AVOIR CALCULE RIGI_MECA AUPARAVANT (DANS LE MEME APPEL)") + UTMESS('F','MATRICE0_10') motscles['RIGI_MECA'] =rigel if option == 'AMOR_MECA': if (not lrigel or not lmasel): - UTMESS('F', "MACRO_MATR_ASSE", "POUR CALCULER AMOR_MECA, IL FAUT AVOIR CALCULE RIGI_MECA ET MASS_MECA AUPARAVANT (DANS LE MEME APPEL)") + UTMESS('F','MATRICE0_11') if CHAM_MATER != None: motscles['RIGI_MECA'] =rigel motscles['MASS_MECA'] =masel @@ -144,7 +115,7 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE, if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'): self.DeclareOut('num',numeddl) # On peut passer des mots cles egaux a None. Ils sont ignores - num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum) + num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum,INFO=info) else: num=numeddl diff --git a/Aster/Cata/cataSTA9/Macro/macro_miss_3d_ops.py b/Aster/Cata/cataSTA9/Macro/macro_miss_3d_ops.py index 580a9298..7e015759 100644 --- a/Aster/Cata/cataSTA9/Macro/macro_miss_3d_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macro_miss_3d_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macro_miss_3d_ops Macro DATE 29/05/2007 AUTEUR VOLDOIRE F.VOLDOIRE +#@ MODIF macro_miss_3d_ops Macro DATE 13/05/2008 AUTEUR DEVESA G.DEVESA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -29,7 +29,7 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS, """ import types from Accas import _F - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS from types import TupleType, ListType ier=0 @@ -57,6 +57,8 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS, # miss3d=loc_fic+'miss3d' miss3d=loc_fic+'miss3d' + + # miss3d='/aster/logiciels/MISS3D/miss3d.csh-beta-modif' # if VERSION=='V1_2': # if PARAMETRE != None and PARAMETRE['TYPE']=='BINAIRE': @@ -83,14 +85,15 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS, 'FICH_RESU_IMPE','FICH_RESU_FORC','TYPE','DREF','ALGO', 'OFFSET_MAX','OFFSET_NB','SPEC_MAX','SPEC_NB','ISSF', 'FICH_POST_TRAI','CONTR_NB','CONTR_LISTE','LFREQ_NB', - 'LFREQ_LISTE'] + 'LFREQ_LISTE','DIRE_ONDE'] if PARAMETRE != None and PARAMETRE['LFREQ_NB'] != None: if len(PARAMETRE['LFREQ_LISTE']) != PARAMETRE['LFREQ_NB']: - UTMESS('F', 'MACRO_MISS3D', 'Longueur de LFREQ_LISTE incorrecte') + UTMESS('F','MISS0_1') if PARAMETRE != None and PARAMETRE['CONTR_NB'] != None: if len(PARAMETRE['CONTR_LISTE']) != 3*PARAMETRE['CONTR_NB']: - UTMESS('F', 'MACRO_MISS3D', 'Longueur de CONTR_LISTE incorrecte') + UTMESS('F','MISS0_2') + pndio = '0' dpara = {} for cle in l_para: if cle in ('SURF', 'ISSF', ): @@ -102,7 +105,10 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS, dpara[cle] = repr(' '.join([str(s) for s in PARAMETRE[cle]])) else: dpara[cle] = str(PARAMETRE[cle]) - + if cle in ('DIRE_ONDE', ): + pndio = '1' + dpara['SURF'] = 'NON' + EXEC_LOGICIEL( LOGICIEL=miss3d, ARGUMENT=(MODUL2, @@ -135,6 +141,8 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS, dpara['LFREQ_LISTE'], dpara['TYPE'], prfor, + pndio, + dpara['DIRE_ONDE'], ), ) diff --git a/Aster/Cata/cataSTA9/Macro/macro_mode_meca_ops.py b/Aster/Cata/cataSTA9/Macro/macro_mode_meca_ops.py index a24af1f6..1ed675e3 100644 --- a/Aster/Cata/cataSTA9/Macro/macro_mode_meca_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macro_mode_meca_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macro_mode_meca_ops Macro DATE 14/06/2005 AUTEUR DURAND C.DURAND +#@ MODIF macro_mode_meca_ops Macro DATE 30/10/2007 AUTEUR BOYERE E.BOYERE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -110,7 +110,6 @@ def macro_mode_meca_ops(self,MATR_A,MATR_B,INFO,METHODE,OPTION,CALC_FREQ, **motscit) __nomre0=NORM_MODE(reuse =__nomre0, - MASS_INER =normode['MASS_INER'], MODE =__nomre0, NORME =normode['NORME'], INFO =normode['INFO'],) diff --git a/Aster/Cata/cataSTA9/Macro/macro_proj_base_ops.py b/Aster/Cata/cataSTA9/Macro/macro_proj_base_ops.py index 589dde01..89ffe2ca 100644 --- a/Aster/Cata/cataSTA9/Macro/macro_proj_base_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macro_proj_base_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macro_proj_base_ops Macro DATE 05/09/2005 AUTEUR DURAND C.DURAND +#@ MODIF macro_proj_base_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -25,7 +25,7 @@ def macro_proj_base_ops(self,BASE,NB_VECT,MATR_ASSE_GENE,VECT_ASSE_GENE,PROFIL,* Ecriture de la macro MACRO_PROJ_BASE """ ier=0 - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS # On importe les definitions des commandes a utiliser dans la macro NUME_DDL_GENE =self.get_cmd('NUME_DDL_GENE') PROJ_MATR_BASE =self.get_cmd('PROJ_MATR_BASE') @@ -40,7 +40,7 @@ def macro_proj_base_ops(self,BASE,NB_VECT,MATR_ASSE_GENE,VECT_ASSE_GENE,PROFIL,* if m['MATR_ASSE'] : motscles['MATR_ASSE'] =m['MATR_ASSE'] elif m['MATR_ASSE_GENE']: motscles['MATR_ASSE_GENE']=m['MATR_ASSE_GENE'] else: - UTMESS('F', "MACRO_PROJ_BASE", "MATR_ASSE et MATR_ASSE_GENE absents") + UTMESS('F','MODAL0_1') self.DeclareOut('mm',m['MATRICE']) mm=PROJ_MATR_BASE(BASE=BASE,NUME_DDL_GENE=_num,**motscles) @@ -51,7 +51,7 @@ def macro_proj_base_ops(self,BASE,NB_VECT,MATR_ASSE_GENE,VECT_ASSE_GENE,PROFIL,* if v['VECT_ASSE'] : motscles['VECT_ASSE'] =v['VECT_ASSE'] elif v['VECT_ASSE_GENE']: motscles['VECT_ASSE_GENE']=v['VECT_ASSE_GENE'] else: - UTMESS('F', "MACRO_PROJ_BASE", "MATR_ASSE et MATR_ASSE_GENE absents") + UTMESS('F','MODAL0_1') motscles['TYPE_VECT']=v['TYPE_VECT'] self.DeclareOut('vv',v['VECTEUR']) vv=PROJ_VECT_BASE(BASE=BASE,NUME_DDL_GENE=_num,**motscles) diff --git a/Aster/Cata/cataSTA9/Macro/macro_visu_meidee_ops.py b/Aster/Cata/cataSTA9/Macro/macro_visu_meidee_ops.py index 920a6e2b..7d817d30 100644 --- a/Aster/Cata/cataSTA9/Macro/macro_visu_meidee_ops.py +++ b/Aster/Cata/cataSTA9/Macro/macro_visu_meidee_ops.py @@ -1,4 +1,4 @@ -#@ MODIF macro_visu_meidee_ops Macro DATE 02/04/2007 AUTEUR BODEL C.BODEL +#@ MODIF macro_visu_meidee_ops Macro DATE 14/05/2008 AUTEUR BODEL C.BODEL # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -27,114 +27,225 @@ # pour la gestion de l'interface graphique dans meidee_iface - def macro_visu_meidee_ops( self, - INTERACTIF = None, - RESULTATS = None, - UNITE_FIMEN = None, - UNITE_RESU = None, - EXPANSION = None, - FLUIDE_ELASTIQUE = None, - TURBULENT = None, + INTERACTIF = None, + UNITE_FIMEN = None, + UNITE_RESU = None, + EXPANSION = None, + FLUIDE_ELASTIQUE = None, + TURBULENT = None, + MODIFSTRUCT = None, + GROUP_NO_CAPTEURS = None, + GROUP_NO_EXTERIEUR = None, + RESU_FLUDELA = None, + RESU_TURBULENT = None, + RESU_MODIFSTRU = None, **args): - ier = 0 - - from Utilitai.UniteAster import UniteAster - from Meidee.meidee_correlation import InterfaceCorrelation - from Meidee.meidee_fludela import InterfaceFludela, InterfaceDisplay - from Meidee.meidee_turbulent import InterfaceTurbulent - from Meidee.meidee_iface import MessageBox, TabbedWindow - from Meidee.meidee_cata import MeideeObjects - from Tkinter import Tk - from Accas import _F import aster - import sys - -## prev = aster.onFatalError() -## aster.onFatalError("EXCEPTION") + from Meidee.meidee_cata import MeideeObjects + ier = 0 + + prev = aster.onFatalError() + aster.onFatalError("EXCEPTION") # La macro compte pour 1 dans la numerotation des commandes self.set_icmd(1) + + # gestion des concepts sortants de la macro, declares a priori + table = [] + table_fonction = [] + if not RESU_MODIFSTRU: + out_modifstru = {} + else: + out_modifstru = RESU_MODIFSTRU[0] # max=1 dans le capy - # Fichiers fimen éventuels associés aux unités logiques en entrée - fichiers_fimen = [] - print "FIMEN:", UNITE_FIMEN - if UNITE_FIMEN: - if type(FIMEN)==int: - UNITE_FIMEN= [ UNITE_FIMEN ] - for unit in UNITE_FIMEN: - UL = UniteAster() - fichiers_fimen.append( (unit,UL.Nom(unit)) ) - - tables = [] - type_tables = [] - for res in RESULTATS: - tables.append(res['TABLE']) - type_tables.append(res['TYPE_TABLE']) - out = {"DeclareOut" : self.DeclareOut, - "TablesOut" : tables, - "TypeTables" : type_tables} - + if not RESU_TURBULENT: + RESU_TURBULENT = [] + else: + for res in RESU_TURBULENT: + table_fonction.append(res['TABLE']) + out_turbulent = {"DeclareOut" : self.DeclareOut, + "TypeTables" : 'TABLE_FONCTION', + "ComptTable" : 0, + "TablesOut" : table_fonction} + + if not RESU_FLUDELA: + RESU_FLUDELA = [] + else: + for res in RESU_FLUDELA: + table.append(res['TABLE']) + out_fludela = {"DeclareOut" : self.DeclareOut, + "TypeTables" : 'TABLE', + "ComptTable" : 0, + "TablesOut" : table} + # Mode interactif : ouverture d'une fenetre Tk if INTERACTIF == "OUI": - - # fenetre principale - tk = Tk() - tk.rowconfigure(0, weight=1) - tk.columnconfigure(0,weight=1) - tabs = TabbedWindow( tk, [ "Correlation", "Fludela","Fluide Turbulent" ] ) - tabs.grid(sticky='n'+'e'+'s'+'w') - main = tabs.root() - - # ecriture des message dans un fichier message - mess = MessageBox(UNITE_RESU, interactif = 'oui') - # importation des concepts aster de la memoire jeveux - objects = MeideeObjects(self, mess) - tabs.set_objects(objects) - - iface = InterfaceCorrelation(main, objects, self, mess) - fludela = InterfaceFludela(main, objects, fichiers_fimen, mess, out) - turbulent = InterfaceTurbulent(main, objects, mess, out) - - tabs.set_tab("Correlation",iface.main) - tabs.set_tab("Fludela", fludela ) - tabs.set_tab("Fluide Turbulent", turbulent) - tabs.set_current_tab("Correlation") - - - try: - tk.mainloop() - except : - print "MEIDEE : *ERREUR*" - - mess.close_file() - - + create_interactive_window(self, + UNITE_FIMEN, + UNITE_RESU, + out_fludela, + out_turbulent, + out_modifstru) else: + from Meidee.meidee_calcul import MessageBox from Meidee.meidee_test import TestMeidee + mess = MessageBox(UNITE_RESU) + mess.disp_mess("Mode non intéractif") - mess = MessageBox(UNITE_RESU, interactif = 'non') - # importation des concepts aster existants de la memoire jeveux objects = MeideeObjects(self, mess) - - mess.disp_mess( " mode non interactif" ) - + + # importation des concepts aster existants de la memoire jeveux TestMeidee(self, mess, - out, + out_fludela, + out_turbulent, + out_modifstru, objects, EXPANSION, FLUIDE_ELASTIQUE, - TURBULENT + TURBULENT, + MODIFSTRUCT, + GROUP_NO_CAPTEURS, + GROUP_NO_EXTERIEUR ) mess.close_file() + aster.onFatalError(prev) + return ier + + + +def create_tab_mess_widgets(tk, UNITE_RESU): + """Construits les objects table et boîte à messages.""" + try: + from Pmw import PanedWidget + except ImportError: + PanedWidget = None -## aster.onFatalError(prev) + from Meidee.meidee_iface import MessageBoxInteractif, TabbedWindow - return ier + if PanedWidget: + pw = PanedWidget(tk, orient='vertical', + hull_borderwidth = 1, + hull_relief = 'sunken', + ) + tabsw = pw.add("main", min=.1, max=.9) + msgw = pw.add("msg", min=.1, max=.2) + pw.grid(sticky='nsew') + tabsw.rowconfigure(0, weight=1) + tabsw.columnconfigure(0, weight=1) + msgw.rowconfigure(0, weight=1) + msgw.columnconfigure(0, weight=1) + else: + tabsw = tk + msgw = tk + tk.rowconfigure(1, weight=3) + tk.rowconfigure(1, weight=1) + + tabs = TabbedWindow(tabsw, ["Expansion de modeles", + "Modification structurale", + "MEIDEE mono-modal", + "Identification de chargement"]) + + tabs.grid(row=0, column=0, sticky='nsew') + # pack(side='top',expand=1,fill='both') + + # ecriture des message dans un fichier message + mess = MessageBoxInteractif(msgw, UNITE_RESU) + if PanedWidget: + mess.grid(row=0, column=0, sticky='nsew') + #mess.pack(side='top',expand=1,fill='both') + else: + mess.grid(row=1, column=0, sticky='nsew') + #mess.pack(side='top',expand=1,fill='both') + + return tabs, mess + +def get_fimen_files(UNITE_FIMEN, FIMEN=None): + """Fichiers fimen éventuels associés aux unités logiques en entrée""" + # XXX FIMEN is not defined (should it be included in the macro) + from Utilitai.UniteAster import UniteAster + fichiers_fimen = [] + print "FIMEN:", UNITE_FIMEN + + if UNITE_FIMEN: + if type(FIMEN)==int: + UNITE_FIMEN= [ UNITE_FIMEN ] + for unit in UNITE_FIMEN: + UL = UniteAster() + fichiers_fimen.append( (unit, UL.Nom(unit)) ) + + return fichiers_fimen + +class FermetureCallback: + """Opérations à appliquer lors de la fermeture de la + fenêtre Tk. + """ + + def __init__(self, main_tk, turbulent): + self.main_tk = main_tk + self.turbulent = turbulent + + def apply(self): + """Enlève les fichiers temporaires de Xmgrace""" + self.turbulent.xmgr_manager.fermer() + self.main_tk.quit() + + +def create_interactive_window(macro, + UNITE_FIMEN, + UNITE_RESU, + out_fludela, + out_turbulent, + out_modifstru): + """Construit la fenêtre interactive comprenant une table pour + les 4 domaines de Meidee.""" + from Tkinter import Tk + + from Meidee.meidee_cata import MeideeObjects + from Meidee.meidee_correlation import InterfaceCorrelation + from Meidee.meidee_modifstruct import InterfaceModifStruct + from Meidee.meidee_fludela import InterfaceFludela + from Meidee.meidee_turbulent import InterfaceTurbulent + + # fenetre principale + tk = Tk() + tk.rowconfigure(0, weight=1) + tk.columnconfigure(0,weight=1) + + tabs, mess = create_tab_mess_widgets(tk, UNITE_RESU) + main = tabs.root() + + # importation des concepts aster de la memoire jeveux + objects = MeideeObjects(macro, mess) + tabs.set_objects(objects) + + iface = InterfaceCorrelation(main, objects, macro, mess) + imodifstruct = InterfaceModifStruct(main, objects, macro, + mess, out_modifstru) + fludela = InterfaceFludela(main, objects, + get_fimen_files(UNITE_FIMEN), mess, out_fludela) + turbulent = InterfaceTurbulent(main, objects, mess, out_turbulent) + + tabs.set_tab("Expansion de modeles", iface.main) + tabs.set_tab("Modification structurale", imodifstruct.main) + tabs.set_tab("MEIDEE mono-modal", fludela ) + tabs.set_tab("Identification de chargement", turbulent) + + #tabs.set_current_tab("Modifstruct") + tabs.set_current_tab("Identification de chargement") + + tk.protocol("WM_DELETE_WINDOW", FermetureCallback(tk, turbulent).apply) + + try: + tk.mainloop() + except : + print "MEIDEE : *ERREUR*" + + diff --git a/Aster/Cata/cataSTA9/Macro/observation_ops.py b/Aster/Cata/cataSTA9/Macro/observation_ops.py index 62caa230..348cb750 100644 --- a/Aster/Cata/cataSTA9/Macro/observation_ops.py +++ b/Aster/Cata/cataSTA9/Macro/observation_ops.py @@ -1,21 +1,21 @@ -#@ MODIF observation_ops Macro DATE 05/06/2007 AUTEUR BODEL C.BODEL +#@ MODIF observation_ops Macro DATE 26/03/2008 AUTEUR BODEL C.BODEL # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== @@ -66,14 +66,14 @@ def observation_ops(self, # La macro n'est pas encoire capable de traiter les resultats dyna_harmo if isinstance(RESULTAT, dyna_harmo): - UTMESS('E',UTILITAI7_8) + UTMESS('E','UTILITAI7_8') - -#*********************************************** + +#*********************************************** # PHASE DE PROJECTION -#*********************************************** +#*********************************************** - if PROJECTION == 'OUI' : + if PROJECTION == 'OUI' : __proj=PROJ_CHAMP(RESULTAT = RESULTAT, MODELE_1 = MODELE_1, MODELE_2 = MODELE_2, @@ -86,9 +86,7 @@ def observation_ops(self, __proj = RESULTAT - - -#*********************************************** +#*********************************************** # PHASE DE CHANGEMENT DE REPERE #*********************************************** # Le changement de repere se fait dans les routines exterieures crea_normale et crea_repere @@ -110,24 +108,34 @@ def observation_ops(self, # cham_mater et cara_elem pour le resultat a projeter jdc = CONTEXT.get_current_step().jdc - nom_cara_elem = aster.getvectjev( RESULTAT.nom.ljust(19) + '.CARA ' ) - nom_cara_elem = nom_cara_elem[0].strip() - cara_elem = jdc.sds_dict[nom_cara_elem] - nom_cham_mater = aster.getvectjev( RESULTAT.nom.ljust(19) + '.MATE ' ) - nom_cham_mater = nom_cham_mater[0].strip() - cham_mater = jdc.sds_dict[nom_cham_mater] + nom_cara_elem = aster.getvectjev( RESULTAT.nom.ljust(19) + + '.CARA ' )[0].strip() + if len(nom_cara_elem) > 0 : +## nom_cara_elem = nom_cara_elem[0].strip() + cara_elem = jdc.sds_dict[nom_cara_elem] + else: + cara_elem = None + + nom_cham_mater = aster.getvectjev( RESULTAT.nom.ljust(19) + + '.MATE ' )[0].strip() + if len(nom_cham_mater) > 0 : +## nom_cham_mater = nom_cham_mater[0].strip() + cham_mater = jdc.sds_dict[nom_cham_mater] + else: + cham_mater = None # recuperation du maillage associe au modele experimental - _maillag = aster.getvectjev( MODELE_2.nom.ljust(8) + '.MODELE .NOMA ' ) + _maillag = aster.getvectjev( MODELE_2.nom.ljust(8) + '.MODELE .LGRF ' ) maillage = _maillag[0].strip() jdc = CONTEXT.get_current_step().jdc mayaexp = jdc.sds_dict[maillage] - - _maillag = aster.getvectjev( MODELE_1.nom.ljust(8) + '.MODELE .NOMA ' ) + + _maillag = aster.getvectjev( MODELE_1.nom.ljust(8) + '.MODELE .LGRF ' ) maillage = _maillag[0].strip() jdc = CONTEXT.get_current_step().jdc mayanum = jdc.sds_dict[maillage] - + + if MODIF_REPERE != None : for modi_rep in MODIF_REPERE : type_cham = modi_rep['TYPE_CHAM'] @@ -135,10 +143,10 @@ def observation_ops(self, mcfact1 = { 'NOM_CMP' : nom_cmp, 'TYPE_CHAM' : type_cham, 'NOM_CHAM' : NOM_CHAM } - + mcfact2 = { } modi_rep = modi_rep.val - + if modi_rep['REPERE'] == 'NORMALE' : # Cas ou l'utilisateur choisit de creer les reperes locaux # selon la normale. On fait un changement de repere local @@ -147,11 +155,10 @@ def observation_ops(self, if modi_rep.has_key(option): vect = { option : modi_rep[option] } if len(vect) != 1 : - U2MESS('E',UTILITAI7_9) - chnorm = crea_normale(self, MODELE_1, MODELE_2, - cham_mater, cara_elem, NUME_DDL) - + UTMESS('E','UTILITAI7_9') + chnorm = crea_normale(self, MODELE_1, MODELE_2, NUME_DDL, + cham_mater, cara_elem) chnormx = chnorm.EXTR_COMP('DX',[],1) ind_noeuds = chnormx.noeud nom_allno = [mayaexp.NOMNOE.get()[k-1] for k in ind_noeuds] @@ -161,7 +168,7 @@ def observation_ops(self, for typ in ['NOEUD','GROUP_NO','MAILLE','GROUP_MA','TOUT']: if modi_rep.has_key(typ) : list_no_exp = find_no(mayaexp, {typ : modi_rep[typ]}) - + # boucle sur les noeuds pour modifier les reperes. __bid = [None]*(len(list_no_exp) + 1) __bid[0] = __proj @@ -180,21 +187,21 @@ def observation_ops(self, CRITERE = 'RELATIF', **args) k = k + 1 - + __proj = __bid[-1:][0] - + else: for typ in ['NOEUD','GROUP_NO','MAILLE','GROUP_MA','TOUT']: if modi_rep.has_key(typ) : - mcfact1.update({typ : modi_rep[typ]}) + mcfact1.update({typ : modi_rep[typ]}) if modi_rep['REPERE'] == 'CYLINDRIQUE' : origine = modi_rep['ORIGINE'] axe_z = modi_rep['AXE_Z'] mcfact2.update({ 'REPERE' : 'CYLINDRIQUE', 'ORIGINE' : origine, 'AXE_Z' : axe_z }) - + elif modi_rep['REPERE'] == 'UTILISATEUR' : angl_naut = modi_rep['ANGL_NAUT'] mcfact2.update({ 'REPERE' : 'UTILISATEUR', @@ -205,11 +212,11 @@ def observation_ops(self, CRITERE = 'RELATIF', **args) __proj = __bid - + else: # pas de modif de repere demandee pass - + #************************************************* # Phase de selection des DDL de mesure @@ -221,10 +228,10 @@ def observation_ops(self, if FILTRE != None: nb_fi = len(FILTRE) + liste = [] for ind in num_ordr: filtres = [] - liste = [] __chamex = CREA_CHAMP(TYPE_CHAM = 'NOEU_DEPL_R', OPERATION = 'EXTR', RESULTAT = __proj, @@ -248,14 +255,17 @@ def observation_ops(self, ASSE = filtres ); + mcfact2 = {'CHAM_GD' : __cham[ind-1], 'MODELE' : MODELE_2, - 'CHAM_MATER' : cham_mater, - 'CARA_ELEM' : cara_elem, 'NOM_CAS' : str(ind)} + if cham_mater is not None: + mcfact2['CHAM_MATER'] = cham_mater + if cara_elem is not None: + mcfact2['CARA_ELEM'] = cara_elem liste.append(mcfact2) - DETRUIRE( CONCEPT= _F( NOM = __chamex )) + DETRUIRE( CONCEPT= _F( NOM = __chamex ), INFO=1) self.DeclareOut( 'RESU', self.sd) @@ -266,13 +276,13 @@ def observation_ops(self, NOM_CHAM = 'DEPL', AFFE = liste, ); - + if isinstance( RESULTAT, mode_meca): # Fabrication de la base modale resultat. On doit tricher un peu (encore!!), en # faisant un defi_base_modale dans lequel on met zero modes du concept RESULTAT # TODO : permettre la creation directement d'un resu de type mode_meca avec # CREA_RESU - RESBID = CREA_RESU( OPERATION = 'AFFE', + _RESBID = CREA_RESU( OPERATION = 'AFFE', TYPE_RESU = 'MULT_ELAS', NOM_CHAM = 'DEPL', AFFE = liste, @@ -281,7 +291,7 @@ def observation_ops(self, RESU = DEFI_BASE_MODALE( RITZ = ( _F( MODE_MECA = RESULTAT, NMAX_MODE = 0,), - _F( MULT_ELAS = RESBID), + _F( MULT_ELAS = _RESBID), ), NUME_REF=NUME_DDL ); @@ -301,22 +311,21 @@ def observation_ops(self, # RECUPERATION DES NORMALES #********************************************** -def crea_normale(self, modele_1, modele_2, cham_mater, cara_el, nume_ddl): - +def crea_normale(self, modele_1, modele_2, + nume_ddl, cham_mater=None, cara_elem=None): """Cree un champ de vecteurs normaux sur le maillage experimental, par projection du champ de normales cree sur le maillage numerique """ - import Numeric PROJ_CHAMP = self.get_cmd('PROJ_CHAMP') CREA_CHAMP = self.get_cmd('CREA_CHAMP') CREA_RESU = self.get_cmd('CREA_RESU') DEFI_GROUP = self.get_cmd('DEFI_GROUP') import aster - from Accas import _F + from Accas import _F # recherche du maillage associe au modele numerique nom_modele_num = modele_1.nom - _maillag = aster.getvectjev( nom_modele_num.ljust(8) + '.MODELE .NOMA ' ) + _maillag = aster.getvectjev( nom_modele_num.ljust(8) + '.MODELE .LGRF ' ) maillage = _maillag[0].strip() jdc = CONTEXT.get_current_step().jdc mayanum = jdc.sds_dict[maillage] @@ -324,16 +333,22 @@ def crea_normale(self, modele_1, modele_2, cham_mater, cara_el, nume_ddl): DEFI_GROUP( reuse = mayanum, MAILLAGE = mayanum, - CREA_GROUP_MA = _F( NOM = '&&TOUMAIL', + CREA_GROUP_MA = _F( NOM = '&&TOUMAI', TOUT = 'OUI' ) ); - + __norm1 = CREA_CHAMP( MODELE = modele_1, OPERATION = 'NORMALE', TYPE_CHAM = 'NOEU_GEOM_R', - GROUP_MA = '&&TOUMAIL', + GROUP_MA = '&&TOUMAI', ); - + + DEFI_GROUP( reuse = mayanum, + MAILLAGE = mayanum, + DETR_GROUP_MA = _F( NOM = '&&TOUMAI' ) + ); + + __norm2 = CREA_CHAMP( OPERATION = 'ASSE', TYPE_CHAM = 'NOEU_DEPL_R', MODELE = modele_1, @@ -344,16 +359,19 @@ def crea_normale(self, modele_1, modele_2, cham_mater, cara_el, nume_ddl): ) ); + affe_dct = {'CHAM_GD' : __norm2, + 'INST' : 1, + 'MODELE' : modele_1} + if cham_mater is not None: + affe_dct["CHAM_MATER"] = cham_mater + if cara_elem is not None: + affe_dct["CARA_ELEM"] = cara_elem + __norm3 = CREA_RESU( OPERATION = 'AFFE', TYPE_RESU = 'EVOL_ELAS', NOM_CHAM = 'DEPL', - AFFE = _F( CHAM_GD = __norm2, - INST = 1, - MODELE = modele_1, - CHAM_MATER = cham_mater, - CARA_ELEM = cara_el - ) - ); + AFFE = _F(**affe_dct) + ); __norm4 = PROJ_CHAMP( RESULTAT = __norm3, @@ -372,7 +390,7 @@ def crea_normale(self, modele_1, modele_2, cham_mater, cara_el, nume_ddl): TYPE_CHAM = 'NOEU_DEPL_R', ); - + return __norm5 @@ -429,12 +447,12 @@ def crea_repere(chnorm, ind_no, vect): pass elif nom_para == 'CONDITION_Y': pass - + # 3) Calcul de l'angle nautique associe au repere local angl_naut = anglnaut(reploc) return angl_naut - + #***************************************************************************** # Aller chercher une liste de noeuds pour un mot cle 'NOEUD', 'GROUP_NO' # 'MAILLE' ou 'GROUP_MA' @@ -457,7 +475,7 @@ def find_no(maya,mcsimp): mcsimp['GROUP_NO'] = [mcsimp['GROUP_NO']] if mcsimp.has_key('GROUP_MA') and type(mcsimp['GROUP_MA']) != tuple : mcsimp['GROUP_MA'] = [mcsimp['GROUP_MA']] - + if mcsimp.has_key('NOEUD') : list_no = list(mcsimp['NOEUD']) elif mcsimp.has_key('GROUP_NO') : @@ -478,7 +496,8 @@ def find_no(maya,mcsimp): for group in mcsimp['GROUP_MA'] : list_ma.append(maya.GROUPEMA.get()[group.ljust(8)]) for mail in list_ma : - ind_ma = maya.NOMMAI.get().index(mail.ljust(8)) + tmp = list(maya.NOMMAI.get()) + ind_ma = tmp.index(mail.ljust(8)) for ind_no in maya.CONNEX[ind_ma] : nomnoe = maya.NOMNOE.get()[ind_no] if nomnoe not in list_no : @@ -498,7 +517,7 @@ def cross_product(a, b): For a dimension of 2, the z-component of the equivalent three-dimensional cross product is returned. - + For backward compatibility with Numeric <= 23 """ from Numeric import asarray, array @@ -591,6 +610,6 @@ def anglnaut(P): ## -sin(B) = reploc[2][0] ## cos(B)sin(G) = reploc[2][1] ## cos(B)cos(G) = reploc[2][2] - - - + + + diff --git a/Aster/Cata/cataSTA9/Macro/post_dyna_alea_ops.py b/Aster/Cata/cataSTA9/Macro/post_dyna_alea_ops.py index db6f62ab..944f4395 100644 --- a/Aster/Cata/cataSTA9/Macro/post_dyna_alea_ops.py +++ b/Aster/Cata/cataSTA9/Macro/post_dyna_alea_ops.py @@ -1,36 +1,39 @@ -#@ MODIF post_dyna_alea_ops Macro DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF post_dyna_alea_ops Macro DATE 25/04/2008 AUTEUR ZENTNER I.ZENTNER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -def post_dyna_alea_ops(self,INTE_SPEC,NUME_VITE_FLUI,TOUT_ORDRE,NUME_ORDRE_I, - NOEUD_I,OPTION,MOMENT,TITRE,INFO,**args): +import random +import Numeric +from sets import Set +from types import ListType, TupleType +from math import pi,sqrt,log,exp + +EnumTypes = (ListType, TupleType) + + +def post_dyna_alea_ops(self,INTE_SPEC, FRAGILITE,TITRE,INFO,**args): import aster - from types import ListType, TupleType - EnumTypes = (ListType, TupleType) from Accas import _F from Utilitai.Utmess import UTMESS from Utilitai.t_fonction import t_fonction from Utilitai.Table import Table - import Numeric - import math - from math import pi,sqrt - + commande='POST_DYNA_ALEA' ier = 0 @@ -39,7 +42,7 @@ def post_dyna_alea_ops(self,INTE_SPEC,NUME_VITE_FLUI,TOUT_ORDRE,NUME_ORDRE_I, # Le concept sortant (de type table_sdaster ou dérivé) est tab self.DeclareOut('tabout', self.sd) - + # On importe les definitions des commandes a utiliser dans la macro # Le nom de la variable doit etre obligatoirement le nom de la commande CREA_TABLE = self.get_cmd('CREA_TABLE') @@ -47,208 +50,379 @@ def post_dyna_alea_ops(self,INTE_SPEC,NUME_VITE_FLUI,TOUT_ORDRE,NUME_ORDRE_I, IMPR_TABLE = self.get_cmd('IMPR_TABLE') RECU_FONCTION = self.get_cmd('RECU_FONCTION') IMPR_FONCTION = self.get_cmd('IMPR_FONCTION') + DEFI_LIST_REEL = self.get_cmd('DEFI_LIST_REEL') + DEFI_FONCTION = self.get_cmd('DEFI_FONCTION') + CALC_FONCTION = self.get_cmd('CALC_FONCTION') - intespec=INTE_SPEC.EXTR_TABLE() # ------------------------------------------------------------------ -# Liste des moments spectraux -# repérer le type de l'interspectre et son nom -# 1- concept interspectre -# 2- table de table d interspectre - - if 'NUME_VITE_FLUI' in intespec.para : - if TOUT_ORDRE!=None : - jnuor=intespec['NUME_VITE_FLUI'].values()['NUME_VITE_FLUI'] - jvite=dict([(i,0) for i in jnuor]).keys() - else : - jvite=[NUME_VITE_FLUI,] - else : - jvite =[None] +#---------algorithme d'optimisation pour le maximum de vraisemblance + def vrais(x): + am=x[0] + assert am >0.000, 'optimize.py: am negatif' + beta=x[1] + assert am >0.000, 'optimize.py: beta negatif' + res=1.0 + for k in range(Nbval): + ai=liste_indic[k] + xi=float(liste_def[k]) + val=log(ai/am) + pfa=normcdf(val/beta) + f0=pfa**xi*(1.-pfa)**(1-xi) + res=res*f0 + return -res + + def boot_vrais(x): + am=x[0] + beta=x[1] + res=1.0 + for k in range(Nbval): + ai=liste_indic[list_rand[k]] + xi=float(liste_def[list_rand[k]]) + val=log(ai/am) + pfa=normcdf(val/beta) + f0=pfa**xi*(1.-pfa)**(1-xi) + res=res*f0 + return -res # ------------------------------------------------------------------ -# Repérer les couples d'indices selectionnés -# vérification de l'égalité du nombre d indices en i et j - - if NUME_ORDRE_I!=None : - l_ind_i=NUME_ORDRE_I - l_ind_j=args['NUME_ORDRE_J'] - if type(l_ind_i) not in EnumTypes : l_ind_i=[l_ind_i] - if type(l_ind_j) not in EnumTypes : l_ind_j=[l_ind_j] - if len(l_ind_i)!=len(l_ind_j) : - txt = "il faut autant d indices en I et J" - UTMESS('F',commande, txt) - listpara=['NUME_ORDRE_I','NUME_ORDRE_J'] - listtype=['I','I'] - dicotabl={'NUME_ORDRE_I' : l_ind_i ,\ - 'NUME_ORDRE_J' : l_ind_j , } - elif NOEUD_I!=None : - l_ind_i=NOEUD_I - l_ind_j=args['NOEUD_J'] - l_cmp_i=args['NOM_CMP_I'] - l_cmp_j=args['NOM_CMP_J'] - if type(l_cmp_i) not in EnumTypes : l_cmp_i=[l_cmp_i] - if type(l_cmp_j) not in EnumTypes : l_cmp_j=[l_cmp_j] - if type(l_ind_i) not in EnumTypes : l_ind_i=[l_ind_i] - if type(l_ind_j) not in EnumTypes : l_ind_j=[l_ind_j] - if len(l_ind_i)!=len(l_ind_j) : - txt = "il faut autant d indices en I et J" - UTMESS('F',commande, txt) - if len(l_cmp_i)!=len(l_cmp_j) : - txt = "il faut autant de composantes en I et J" - UTMESS('F',commande, txt) - if len(l_ind_i)!=len(l_cmp_i) : - txt = "il faut autant de composantes que de noeuds" - UTMESS('F',commande, txt) - listpara=['NOEUD_I','NOEUD_J','NOM_CMP_I','NOM_CMP_J'] - listtype=['K8','K8','K8','K8',] - dicotabl={'NOEUD_I' : l_ind_i,\ - 'NOEUD_J' : l_ind_j,\ - 'NOM_CMP_I': l_cmp_i,\ - 'NOM_CMP_J': l_cmp_j } -# ------------------------------------------------------------------ -# Cas de tous les indices centraux - - elif OPTION!=None : - if 'NUME_ORDRE_I' in intespec.para : - inuor=intespec['NUME_ORDRE_I'].values()['NUME_ORDRE_I'] - imode=dict([(i,0) for i in inuor]).keys() - l_ind_i=imode - l_ind_j=imode - listpara=['NUME_ORDRE_I','NUME_ORDRE_J'] - listtype=['I','I'] - dicotabl={'NUME_ORDRE_I' : l_ind_i ,\ - 'NUME_ORDRE_J' : l_ind_j , } - else : - if 'NUME_VITE_FLUI' in intespec.para : - intespec=intespec.NUME_VITE_FLUI==jvite[0] - l_ind_i=intespec['NOEUD_I'].values()['NOEUD_I'] - l_ind_j=intespec['NOEUD_J'].values()['NOEUD_J'] - if len(l_ind_i)!=len(l_ind_j) : - txt = "il faut autant d indices en I et J" - UTMESS('F',commande, txt) - l_cmp_i=intespec['NOM_CMP_I'].values()['NOM_CMP_I'] - l_cmp_j=intespec['NOM_CMP_J'].values()['NOM_CMP_J'] - if (len(l_ind_i)!=len(l_cmp_i) or len(l_ind_j)!=len(l_cmp_j)) : - txt = "il faut autant de composantes que de noeuds" - UTMESS('F',commande, txt) - l_l=zip(zip(l_ind_i,l_cmp_i),zip(l_ind_j,l_cmp_j)) - l_ind_i=[] - l_ind_j=[] - l_cmp_i=[] - l_cmp_j=[] - for ai,aj in l_l : - if ai==aj : - l_ind_i.append(ai[0]) - l_ind_j.append(aj[0]) - l_cmp_i.append(ai[1]) - l_cmp_j.append(aj[1]) - listpara=['NOEUD_I','NOEUD_J','NOM_CMP_I','NOM_CMP_J'] - listtype=['K8','K8','K8','K8',] - dicotabl={'NOEUD_I' : l_ind_i*len(jvite) ,\ - 'NOEUD_J' : l_ind_j*len(jvite) ,\ - 'NOM_CMP_I': l_cmp_i*len(jvite) ,\ - 'NOM_CMP_J': l_cmp_j*len(jvite) } - - if jvite[0]!=None : - listpara.append('NUME_VITE_FLUI') - listtype.append('I') - dicotabl['NUME_VITE_FLUI']=[] +# OPTION FRAGILITE +# ------------------------------------------------------------------ + if FRAGILITE !=None : + from Utilitai.optimize import fmin + from Utilitai.stats import normcdf + + if FRAGILITE['LIST_PARA'] != None : + liste_a = FRAGILITE['LIST_PARA'].VALE.get() + elif FRAGILITE['VALE'] != None : + liste_a =FRAGILITE['VALE'] + + + Nba=len(liste_a) + lpfa=[] + tab2 = FRAGILITE['TABL_RESU'].EXTR_TABLE() + dicta = tab2.values() + + if dicta.has_key('DEFA') : + liste_def = dicta['DEFA'] + else: + UTMESS('F','TABLE0_1',valk=('DEFA')) + if dicta.has_key('PARA_NOCI') : + liste_indic = dicta['PARA_NOCI'] + else: + UTMESS('F','TABLE0_1',valk=('PARA_NOCI')) + + Nbval=len(liste_indic) + + test1 = Numeric.equal(None,liste_indic) + test2 = Numeric.equal(None,liste_def) + if test1 >=1 or test2 >=1: + UTMESS('F','TABLE0_15') + + # estimation paramètres + x0 = [FRAGILITE['AM_INI'],FRAGILITE['BETA_INI']] + xopt = fmin(vrais,x0) + + texte='PARAMETRES Am, beta ESTIMES : '+str(xopt)+'\n' + aster.affiche('MESSAGE',texte) #print 'parametres Am, beta estimes: ', xopt + + #courbe de fragilité + vec_a=Numeric.array(liste_a) + vecval=(Numeric.log(vec_a/xopt[0]))/xopt[1] + for m in range(Nba): + lpfa.append(normcdf(vecval[m])) + + # table sortie + + mcfact=[] + if TITRE !=None : + mcfact.append(_F(PARA= 'TITRE' , LISTE_K= TITRE )) + + mcfact.append(_F(PARA= 'AM' ,LISTE_R=xopt[0] )) + mcfact.append(_F(PARA= 'BETA' ,LISTE_R=xopt[1] )) + mcfact.append(_F(PARA= 'PARA_NOCI' ,LISTE_R =liste_a )) + mcfact.append(_F(PARA= 'PFA' ,LISTE_R = lpfa )) + + #print 'fractiles a calculer par bootstrap : ', FRAGILITE['FRACTILE'] + + + # si calcul de fractiles (intervalles de confiance) par bootstrap + + if FRAGILITE['FRACTILE']!= None : + if INFO==2 : + texte='FRACTILES A CALCULER PAR BOOTSTRAP '+ str(FRAGILITE['FRACTILE']) +'\n' + aster.affiche('MESSAGE',texte) + if FRAGILITE['NB_TIRAGE']!= None : + Nboot = FRAGILITE['NB_TIRAGE'] + if Nboot > Nbval : + UTMESS('F','PROBA0_11') #assert Nboot <= Nbval , 'ERREUR: nombre de tirages demandes trop grand' + else: + Nboot = Nbval + + list_fonc = [] + lfract =FRAGILITE['FRACTILE'] + __F1=[None]*Nbval + __ABS=[None]*Nbval + __ORDO=[None]*Nbval + + for kb in range(Nboot) : #in range(Nbval) + + lpfa = [] + list_rand = [] + + for kb2 in range(Nbval) : + list_rand.append(random.randint(0,Nbval-1)) + + xopt = fmin(boot_vrais,x0) + if INFO==2 : + texte1='BOOTSTRAP TIRAGE '+ str(kb+1) + texte2=' PARAMETRES Am, beta ESTIMES : '+str(xopt)+'\n' + aster.affiche('MESSAGE',texte1) #print 'bootstrap tirage', kb+1, ', - parametres Am, beta estimes: ', xopt + aster.affiche('MESSAGE',texte2) + vecval=(Numeric.log(vec_a/xopt[0]))/xopt[1] + for m in range(Nba): + lpfa.append(normcdf(vecval[m])) + + __ABS[kb]=DEFI_LIST_REEL( VALE = liste_a ); + __ORDO[kb]=DEFI_LIST_REEL( VALE = lpfa ); + + __F1[kb]=DEFI_FONCTION( NOM_PARA='PGAZ', + NOM_RESU = 'PFA', + VALE_PARA = __ABS[kb], + VALE_FONC = __ORDO[kb],); + list_fonc.append(__F1[kb],) + + + #__FRACTILE = [None]*len(lfract) + liste = [None]*len(lfract) + for kb in range(len(lfract)): + __FRACTILE=CALC_FONCTION(FRACTILE=_F(FONCTION=(list_fonc), + FRACT=lfract[kb]), ); + liste[kb]= __FRACTILE.Ordo() + mcfact.append(_F(PARA= str(lfract[kb]) ,LISTE_R =liste[kb] )) + + + # fin FRAGILITE + tabout = CREA_TABLE(LISTE=mcfact,TITRE = 'POST_DYNA_ALEA concept : '+self.sd.nom) + # ------------------------------------------------------------------ -# Liste des moments spectraux - l_moments=[0,1,2,3,4] - if MOMENT!=None : - l_moments=l_moments+list(MOMENT) - l_moments=dict([(i,0) for i in l_moments]).keys() # ------------------------------------------------------------------ -# Boucle sur les tables - - l_ind=zip(l_ind_i,l_ind_j) - for vite in jvite : - if INFO==2 : - texte='POUR LA MATRICE INTERSPECTRALE '+INTE_SPEC.nom+'\n' - aster.affiche('MESSAGE',texte) - for ind in l_ind : - mcfact=[] - if vite!=None : - dicotabl['NUME_VITE_FLUI'].append(vite) - mcfact.append(_F(NOM_PARA='NUME_VITE_FLUI',VALE_I=vite)) - if 'NOEUD_I' in listpara : - mcfact.append(_F(NOM_PARA='NOEUD_I',VALE_K=ind[0])) - mcfact.append(_F(NOM_PARA='NOEUD_I',VALE_K=ind[1])) - if INFO==2 : - aster.affiche('MESSAGE','INDICES :'+ind[0]+' - '+ind[1]+'\n') - else : - mcfact.append(_F(NOM_PARA='NUME_ORDRE_I',VALE_I=ind[0])) - mcfact.append(_F(NOM_PARA='NUME_ORDRE_J',VALE_I=ind[1])) +# OPTION INTESPEC +# ------------------------------------------------------------------ + if INTE_SPEC !=None : + + TOUT_ORDRE = args['TOUT_ORDRE'] + NUME_VITE_FLUI=args['NUME_VITE_FLUI'] + + NUME_ORDRE_I=args['NUME_ORDRE_I'] + NOEUD_I=args['NOEUD_I'] + OPTION=args['OPTION'] + + MOMENT=args['MOMENT'] + + intespec=INTE_SPEC.EXTR_TABLE() + # pour la clarté ! + NUME_VITE_FLUI_present = 'NUME_VITE_FLUI' in intespec.para + NUME_ORDRE_I_present = 'NUME_ORDRE_I' in intespec.para + NOEUD_I_present = 'NOEUD_I' in intespec.para + + # table résultat + tabres = Table(titr='POST_DYNA_ALEA concept : %s' % self.sd.nom) + +# ------------------------------------------------------------------ +# Liste des moments spectraux +# repérer le type de l'interspectre et son nom +# 1- concept interspectre +# 2- table de table d interspectre + + if NUME_VITE_FLUI_present : + if TOUT_ORDRE != None : + jvite = list(Set(intespec.NUME_VITE_FLUI.not_none_values())) + jvite.sort() + else : + jvite=[NUME_VITE_FLUI,] + else : + jvite =[None] + +# ------------------------------------------------------------------ +# Repérer les couples d'indices selectionnés +# vérification de l'égalité du nombre d indices en i et j + + if NUME_ORDRE_I!=None : + l_ind_i=NUME_ORDRE_I + l_ind_j=args['NUME_ORDRE_J'] + if type(l_ind_i) not in EnumTypes : l_ind_i=[l_ind_i] + if type(l_ind_j) not in EnumTypes : l_ind_j=[l_ind_j] + if len(l_ind_i)!=len(l_ind_j) : + UTMESS('F','PROBA0_8') + # paramètres fixes de la table + tabres.add_para(['NUME_ORDRE_I','NUME_ORDRE_J'], 'I') + elif NOEUD_I!=None : + l_ind_i=NOEUD_I + l_ind_j=args['NOEUD_J'] + l_cmp_i=args['NOM_CMP_I'] + l_cmp_j=args['NOM_CMP_J'] + if type(l_cmp_i) not in EnumTypes : l_cmp_i=[l_cmp_i] + if type(l_cmp_j) not in EnumTypes : l_cmp_j=[l_cmp_j] + if type(l_ind_i) not in EnumTypes : l_ind_i=[l_ind_i] + if type(l_ind_j) not in EnumTypes : l_ind_j=[l_ind_j] + if len(l_ind_i)!=len(l_ind_j) : + UTMESS('F','PROBA0_8') + if len(l_cmp_i)!=len(l_cmp_j) : + UTMESS('F','PROBA0_9') + if len(l_ind_i)!=len(l_cmp_i) : + UTMESS('F','PROBA0_10') + # paramètres fixes de la table + tabres.add_para(['NOEUD_I','NOEUD_J','NOM_CMP_I','NOM_CMP_J'], 'K8') + +# ------------------------------------------------------------------ +# Cas de tous les indices centraux + + elif OPTION!=None : + if NUME_VITE_FLUI_present : + intespec = intespec.NUME_VITE_FLUI == jvite[0] + + if NUME_ORDRE_I_present : + imode = list(Set(intespec.NUME_ORDRE_I.not_none_values())) + l_ind_i=imode + l_ind_j=imode + # paramètres fixes de la table + tabres.add_para(['NUME_ORDRE_I','NUME_ORDRE_J'], 'I') + else : + l_ind_i = intespec.NOEUD_I.values() + l_ind_j = intespec.NOEUD_J.values() + if len(l_ind_i) != len(l_ind_j) : + UTMESS('F','PROBA0_8') + l_cmp_i = intespec.NOM_CMP_I.values() + l_cmp_j = intespec.NOM_CMP_J.values() + if (len(l_ind_i) != len(l_cmp_i) or len(l_ind_j) != len(l_cmp_j)) : + UTMESS('F','PROBA0_10') + l_l=zip(zip(l_ind_i,l_cmp_i),zip(l_ind_j,l_cmp_j)) + l_ind_i=[] + l_ind_j=[] + l_cmp_i=[] + l_cmp_j=[] + for ai,aj in l_l : + if ai==aj : + l_ind_i.append(ai[0]) + l_ind_j.append(aj[0]) + l_cmp_i.append(ai[1]) + l_cmp_j.append(aj[1]) + # paramètres fixes de la table + tabres.add_para(['NOEUD_I','NOEUD_J','NOM_CMP_I','NOM_CMP_J'], 'K8') + + if jvite[0]!=None : + tabres.add_para('NUME_VITE_FLUI', 'I') + + +# ------------------------------------------------------------------ +# Liste des moments spectraux + + l_moments=[0,1,2,3,4] + if MOMENT!=None : + l_moments.extend(list(MOMENT)) + l_moments=list(Set(l_moments)) + +# ------------------------------------------------------------------ +# Boucle sur les fonctions + + if NOEUD_I_present : + l_ind=zip(l_ind_i,l_ind_j, l_cmp_i,l_cmp_j) + else : + l_ind=zip(l_ind_i, l_ind_j ) + + + # pour la présentation de la table finale, on stocke le nbre de paramètres "initiaux" + nbpara0 = len(tabres.para) + + for vite in jvite : if INFO==2 : - aster.affiche('MESSAGE','INDICES :'+str(ind[0])+' - '\ - +str(ind[1])+'\n') - __fon1=RECU_FONCTION(TABLE = INTE_SPEC, - NOM_PARA_TABL= 'FONCTION_C', - FILTRE = mcfact, ) - val = __fon1.Valeurs() - fvalx= Numeric.array(val[0]) - fvaly= Numeric.array(val[1]) - frez = fvalx[0] - -#--- moments spectraux - - val_mom={} - for i_mom in l_moments : - trapz = Numeric.zeros(len(fvaly),Numeric.Float) - trapz[0] = 0. - valy = fvaly*(2*pi*fvalx)**i_mom - trapz[1:] = (valy[1:]+valy[:-1])/2*(fvalx[1:]-fvalx[:-1]) - prim_y = Numeric.cumsum(trapz) - val_mom[i_mom] = prim_y[-1] - for i_mom in l_moments : - chmo='LAMBDA_'+str(i_mom).zfill(2) - if dicotabl.has_key(chmo) : dicotabl[chmo].append(val_mom[i_mom]) - else : - dicotabl[chmo]=[val_mom[i_mom],] - listpara.append(chmo) - listtype.append('R') - -#--- fonctions statistiques - - pstat = {'ECART' :0.,\ - 'NB_PASS_ZERO_P_S':0.,\ - 'NB_EXTREMA_P_S' :0.,\ - 'FACT_IRRE' :0.,\ - 'FREQ_APPAR' :0.,} - if (NUME_VITE_FLUI or frez>=0.) : -#--- cas NUME_VITE_FLUI, seule la partie positive du spectre est utilisée -#--- Il faut donc doubler lambda pour calculer le bon écart type - pstat['ECART'] = sqrt(val_mom[0]*2.) - else : - pstat['ECART'] = sqrt(val_mom[0]) - if abs(val_mom[2])>=1e-20 : - pstat['NB_EXTREMA_P_S'] = 1./pi*sqrt(val_mom[4]/val_mom[2]) - if abs(val_mom[0])>=1e-20 : - pstat['NB_PASS_ZERO_P_S'] = 1./pi*sqrt(val_mom[2]/val_mom[0]) - pstat['FREQ_APPAR'] = 0.5*pstat['NB_PASS_ZERO_P_S'] - if abs(val_mom[4])>=1e-20 : - pstat['FACT_IRRE'] = sqrt( val_mom[2]*val_mom[2]/val_mom[0]/val_mom[4]) - - for key in pstat.keys(): - if dicotabl.has_key(key) : dicotabl[key].append(pstat[key]) - else : - dicotabl[key]=[pstat[key],] - listpara.append(key) - listtype.append('R') + texte='POUR LA MATRICE INTERSPECTRALE '+INTE_SPEC.nom+'\n' + aster.affiche('MESSAGE',texte) + for ind in l_ind : + dlign = {} + mcfact=[] + if vite!=None : + dlign['NUME_VITE_FLUI'] = vite + mcfact.append(_F(NOM_PARA='NUME_VITE_FLUI',VALE_I=vite)) + if NOEUD_I_present : + i_foncstat = ind[0] == ind[1] and ind[2] == ind[3] + dlign['NOEUD_I'], dlign['NOEUD_J'], dlign['NOM_CMP_I'], dlign['NOM_CMP_J'] = \ + ind[0], ind[1], ind[2], ind[3] + mcfact.append(_F(NOM_PARA='NOEUD_I',VALE_K=ind[0])) + mcfact.append(_F(NOM_PARA='NOEUD_J',VALE_K=ind[1])) + mcfact.append(_F(NOM_PARA='NOM_CMP_I',VALE_K=ind[2])) + mcfact.append(_F(NOM_PARA='NOM_CMP_J',VALE_K=ind[3])) + if INFO==2 : + aster.affiche('MESSAGE','INDICES :'+ind[0]+' - '+ind[1]) + aster.affiche('MESSAGE','INDICES :'+ind[2]+' - '+ind[3]+'\n') + else : + i_foncstat = ind[0] == ind[1] + dlign['NUME_ORDRE_I'], dlign['NUME_ORDRE_J'] = ind[0], ind[1] + mcfact.append(_F(NOM_PARA='NUME_ORDRE_I',VALE_I=ind[0])) + mcfact.append(_F(NOM_PARA='NUME_ORDRE_J',VALE_I=ind[1])) + if INFO==2 : + aster.affiche('MESSAGE','INDICES :'+str(ind[0])+' - '\ + +str(ind[1])+'\n') + + __fon1=RECU_FONCTION(TABLE = INTE_SPEC, + NOM_PARA_TABL= 'FONCTION_C', + FILTRE = mcfact, ) + + val = __fon1.Valeurs() + fvalx= Numeric.array(val[0]) + fvaly= Numeric.array(val[1]) + frez = fvalx[0] + + # -- moments spectraux + + val_mom={} + for i_mom in l_moments : + trapz = Numeric.zeros(len(fvaly),Numeric.Float) + trapz[0] = 0. + valy = fvaly*(2*pi*fvalx)**i_mom + trapz[1:] = (valy[1:]+valy[:-1])/2*(fvalx[1:]-fvalx[:-1]) + prim_y = Numeric.cumsum(trapz) + val_mom[i_mom] = prim_y[-1] + for i_mom in l_moments : + chmo='LAMBDA_'+str(i_mom).zfill(2) + dlign[chmo] = val_mom[i_mom] + + #--- si auto-spectre: + if i_foncstat: + # test si le spectre est bien à valeurs positives + if min(fvaly) < 0.0 : + aster.affiche('MESSAGE', str(ind)+'\n') + UTMESS('F','MODELISA9_95') + # -- fonctions statistiques + if NUME_VITE_FLUI or frez >= 0. : + # -- cas NUME_VITE_FLUI, seule la partie positive du spectre est utilisée + # -- Il faut donc doubler lambda pour calculer le bon écart type + dlign['ECART'] = sqrt(val_mom[0]*2.) + else : + dlign['ECART'] = sqrt(val_mom[0]) + if abs(val_mom[2])>=1e-20 : + dlign['NB_EXTREMA_P_S'] = 1./pi*sqrt(val_mom[4]/val_mom[2]) + if abs(val_mom[0])>=1e-20 : + dlign['NB_PASS_ZERO_P_S'] = 1./pi*sqrt(val_mom[2]/val_mom[0]) + dlign['FREQ_APPAR'] = 0.5*dlign['NB_PASS_ZERO_P_S'] + if abs(val_mom[4])>=1e-20 : + dlign['FACT_IRRE'] = sqrt( val_mom[2]*val_mom[2]/val_mom[0]/val_mom[4]) + + # ajoute la ligne à la Table + tabres.append(dlign) #--- construction de la table produite - mcfact=[] - for i in range(len(listpara)) : - if listtype[i]=='R': - mcfact.append(_F(PARA=listpara[i] ,LISTE_R=dicotabl[listpara[i]] )) - if listtype[i]=='K8': - mcfact.append(_F(PARA=listpara[i] ,LISTE_K=dicotabl[listpara[i]] )) - if listtype[i]=='I': - mcfact.append(_F(PARA=listpara[i] ,LISTE_I=dicotabl[listpara[i]] )) - tabout = CREA_TABLE(LISTE=mcfact,TITRE = 'POST_DYNA_ALEA concept : '+self.sd.nom) + # tri des paramètres + ord_para = tabres.para[nbpara0:] + ord_para.sort() + ord_para = tabres.para[:nbpara0] + ord_para + dprod = tabres[ord_para].dict_CREA_TABLE() + + tabout = CREA_TABLE(**dprod) return ier + diff --git a/Aster/Cata/cataSTA9/Macro/post_gp_ops.py b/Aster/Cata/cataSTA9/Macro/post_gp_ops.py index c72135c1..a66baa1f 100644 --- a/Aster/Cata/cataSTA9/Macro/post_gp_ops.py +++ b/Aster/Cata/cataSTA9/Macro/post_gp_ops.py @@ -1,4 +1,4 @@ -#@ MODIF post_gp_ops Macro DATE 31/10/2006 AUTEUR REZETTE C.REZETTE +#@ MODIF post_gp_ops Macro DATE 15/04/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -6,7 +6,7 @@ # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. +# (AT YOUR OPTION) ANY LATER VERSION. # # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF @@ -27,12 +27,14 @@ def post_gp_ops(self, **args): """ Corps de la macro POST_GP """ + import pdb macro = 'POST_GP' ier=0 from Accas import _F from Utilitai.Utmess import UTMESS - from Utilitai.Table import Table, merge + from Utilitai.Table import Table, merge, Colonne from Utilitai.t_fonction import t_fonction + from Cata.cata import evol_noli import aster # ----- On importe les definitions des commandes a utiliser dans la macro @@ -41,6 +43,13 @@ def post_gp_ops(self, **args): POST_ELEM = self.get_cmd('POST_ELEM') POST_RELEVE_T = self.get_cmd('POST_RELEVE_T') CREA_TABLE = self.get_cmd('CREA_TABLE') + DEFI_LIST_ENTI= self.get_cmd('DEFI_LIST_ENTI') + CALC_ELEM = self.get_cmd('CALC_ELEM') + RECU_FONCTION = self.get_cmd('RECU_FONCTION') + DETRUIRE = self.get_cmd('DETRUIRE') + DEFI_GROUP = self.get_cmd('DEFI_GROUP') + IMPR_CO = self.get_cmd('IMPR_CO') + FIN = self.get_cmd('FIN') # ----- Comptage, commandes + déclaration concept sortant self.set_icmd(1) @@ -51,7 +60,7 @@ def post_gp_ops(self, **args): # 0. ----- Type de calcul identification = self['IDENTIFICATION'] != None if identification: - # 0.1. --- identification : on boule sur les valeurs de TEMP. + # 0.1. --- identification : on boucle sur les valeurs de TEMP. # Pour chaque couple (T, Kjc(T)), on évalue les Ki, Kmoy et # les valeurs de Gpmax, DeltaLmax, inst.max correspondantes. mccalc = self['IDENTIFICATION'] @@ -74,100 +83,434 @@ def post_gp_ops(self, **args): if not type(l_crit) in EnumTypes: l_crit = [l_crit,] + + # Maillage associe au modele + __MAIL = aster.getvectjev( self['MODELE'].nom.ljust(8) + '.MODELE .LGRF ' ) + nom_maillage = __MAIL[0].strip() + + jdc = CONTEXT.get_current_step().jdc + maya = jdc.sds_dict[nom_maillage] + # 1. ----- calcul de G-theta - nbcour = len(self['THETA_2D']) - l_tab = [] - for occ in self['THETA_2D']: - dMC = occ.cree_dict_valeurs(occ.mc_liste) - - __theta = CALC_THETA(MODELE=self['MODELE'], - DIRECTION=self['DIRECTION'], - THETA_2D=_F(GROUP_NO=dMC['GROUP_NO'], - MODULE=1.0, - R_INF=dMC['R_INF'], - R_SUP=dMC['R_SUP']),) - - __gtheta = CALC_G(THETA=_F(THETA=__theta), - EXCIT=self['EXCIT'].List_F(), - RESULTAT=self['RESULTAT'], - TOUT_ORDRE='OUI', - SYME_CHAR=self['SYME_CHAR'], - COMP_ELAS=self['COMP_ELAS'].List_F(),) - - tab = __gtheta.EXTR_TABLE() - - # une Table par couronne - l_tab.append(tab) + + # Cas 2D + if self['THETA_2D'] is not None: + is_2D = True + else: + is_2D = False + + if is_2D: + nbcour = len(self['THETA_2D']) + nb_tranches = 1 + ep_z = 1 + l_tab = [] + for occ in self['THETA_2D']: + dMC = occ.cree_dict_valeurs(occ.mc_liste) + + __theta = CALC_THETA(MODELE=self['MODELE'], + DIRECTION=self['DIRECTION'], + THETA_2D=_F(GROUP_NO=dMC['GROUP_NO'], + MODULE=1.0, + R_INF=dMC['R_INF'], + R_SUP=dMC['R_SUP']),) + + __gtheta = CALC_G(THETA=_F(THETA=__theta), + EXCIT=self['EXCIT'].List_F(), + RESULTAT=self['RESULTAT'], + TOUT_ORDRE='OUI', + SYME_CHAR=self['SYME_CHAR'], + COMP_ELAS=self['COMP_ELAS'].List_F(),) + + tab = __gtheta.EXTR_TABLE() + + # une Table par couronne + l_tab.append(tab) + + else: + #Cas 3D + nbcour = len(self['THETA_3D']) + nb_tranches = self['NB_TRANCHES'] + l_tab = [] + l_noeuds_fissure, pas = getFondFissInfo(self['FOND_FISS']) + nb_noeuds_fissure = len(l_noeuds_fissure) + + for occ in self['THETA_3D']: + dMC = occ.cree_dict_valeurs(occ.mc_liste) + + # on met les mots-clés facultatifs dans des dictionnaires + dpar_theta = {} + if self['DIRECTION'] is not None: + dpar_theta['DIRECTION'] = self['DIRECTION'] + + __gtheta = CALC_G( + THETA=_F(R_INF=dMC['R_INF'], + R_SUP=dMC['R_SUP'], + MODULE=1.0, + FOND_FISS=self['FOND_FISS'], + **dpar_theta), + EXCIT=self['EXCIT'].List_F(), + RESULTAT=self['RESULTAT'], + TOUT_ORDRE='OUI', + SYME_CHAR=self['SYME_CHAR'], + COMP_ELAS=self['COMP_ELAS'].List_F(), + LISSAGE=self['LISSAGE'].List_F() + ) + + + tab = __gtheta.EXTR_TABLE() + + + # une Table par couronne + l_tab.append(tab) + + # 2. ----- Calcul de l'energie élastique en exploitant les groupes de # mailles fournis par la procedure de maillage - l_copo = [grma.strip() for grma in self['GROUP_MA']] - nbcop = len(l_copo) - l_charg = [charg['CHARGE'] for charg in self['EXCIT']] - - __ener = POST_ELEM(MODELE=self['MODELE'], - RESULTAT=self['RESULTAT'], - CHARGE=l_charg, - TOUT_ORDRE='OUI', - ENER_ELAS=_F(GROUP_MA=l_copo), - TITRE='Energie élastique',) - - t_enel = __ener.EXTR_TABLE() - - # 2.1. ----- Indice de chaque copeau et deltaL - d_icop = dict(zip(l_copo, range(1, nbcop + 1))) - - l_lieu = [grma.strip() for grma in t_enel.LIEU.values()] - l_icop = [d_icop[grma] for grma in l_lieu] - t_enel['ICOP'] = l_icop - t_enel.fromfunction('DELTAL', fDL, 'ICOP', { 'pascop' : self['PAS_ENTAILLE'] }) - - # 2.2. ----- Calcul de Gp fonction de Ener.Totale et de deltaL - t_enel.fromfunction('GP', fGp_Etot, ('TOTALE', 'ICOP'), - { 'pascop' : self['PAS_ENTAILLE'], - 'syme' : self['SYME_CHAR'] != 'SANS', - 'R' : self['RAYON_AXIS'] }) - - # 2.3. ----- Tableau de Gp = f(icop) pour chaque instant - if info >= 2: - tGp_t_icop = t_enel['INST', 'DELTAL', 'GP'] - tGp_t_icop.titr = "Gp à chaque instant en fonction de la distance au " \ - "fond d'entaille" - tGp_t_icop.ImprTabCroise() - - # 2.4. ----- Table Gpmax - ttmp = t_enel['NUME_ORDRE', 'INST', 'ICOP', 'DELTAL', 'GP'] - l_numord = list(Set(ttmp.NUME_ORDRE.values())) - l_numord.sort() - for j in l_numord: - tj = ttmp.NUME_ORDRE == j - if self['CRIT_MAXI_GP'] == 'ABSOLU': - t = tj.GP.MAXI() + + l_copo_tot = [grma.strip() for grma in self['GROUP_MA']] + nbcop_tot = len(l_copo_tot) + nbcop = nbcop_tot/nb_tranches + + if self['LIST_EP_COPEAUX'] is not None: + l_ep_copeaux_tot = self['LIST_EP_COPEAUX'] + + l_t_enel = [] + + if self['TRAC_COMP']=='OUI': + # prise en compte de la traction-compression dans le calcul de l'energie + resu2=CALC_ELEM(OPTION=('EQUI_ELNO_SIGM'), + RESULTAT=self['RESULTAT'], + ) + + # indices des mailles du dernier group_ma + # (pour avoir le nombre de mailles par tranche) + l_mailles_last_gm = maya.GROUPEMA.get()[l_copo_tot[-1].ljust(8)] + + # initialisation des concepts reutilises dans la boucle + # on suppose que chaque tranche a le meme nombre de mailles + + kk = 0 + + E_el = [None]*len(l_mailles_last_gm)*nb_tranches + + T_el = [None]*len(l_mailles_last_gm)*nb_tranches + + # on recupere les sd en dehors de la boucle + maya_GROUPEMA = maya.GROUPEMA.get() + maya_NOMMAI = maya.NOMMAI.get() + maya_CONNEX = maya.CONNEX.get() + maya_NOMNOE = maya.NOMNOE.get() + + # liste des tables tb_Gpmax repartie aux noeuds + l_tb_Gpmax_noeuds = [] + + for i in range(0,nb_tranches): + l_copo = l_copo_tot[i*nbcop:(i+1)*nbcop] + l_charg = [charg['CHARGE'] for charg in self['EXCIT']] + + if info >= 2 and not is_2D: + print " Calcul de la tranche %i"%(i+1) + + if self['TRAC_COMP']=='OUI': + + # l_copo est une liste commulative de mailles + # il faut lancer POST_ELEM sur chaque maille de chaque copeau + # puis regarder la trace de SIEF_ELGA sur ce copeau + + # on fera attention a ne pas lancer POST_ELEM sur une maille qui + # a deja ete calculee en stockant son resultat pour la maille en question + d_groupma={} + d_nomma={} + + # indices des mailles des copeaux + for group_ma in l_copo: + d_groupma[group_ma] = maya_GROUPEMA[group_ma.ljust(8)] + + # le dernier copeau contient tous les elements + # on calcule l energie de chaque element de ce copeau + last_copo = l_copo[-1] + + d_ener = {} + + d_nomma = {} + + for k, id_elem in enumerate(d_groupma[last_copo]): + + + # les id des elements dans Aster commencent a 1 + # la liste python commence a 0 + elem = maya_NOMMAI[id_elem-1] + d_nomma[id_elem]=elem + + E_el[kk] = POST_ELEM(MODELE=self['MODELE'], + RESULTAT=self['RESULTAT'], + CHARGE=l_charg, + TOUT_ORDRE='OUI', + ENER_ELAS=_F(MAILLE=elem), + TITRE='Energie élastique',) + + T_el[kk] = E_el[kk].EXTR_TABLE() + + l_enel = T_el[kk].TOTALE.values() + + # signe de la trace <=> signe de la composante VMIS_SG du tenseur EQUI_ELNO_SIGM, + # mais E_enel est par element => on fait une moyenne sur les noeuds de l'element + + list_no = [] + for ind_no in maya_CONNEX[id_elem] : + nomnoe = maya_NOMNOE[ind_no-1] + if nomnoe not in list_no : + list_no.append(nomnoe) + + # print "liste des noeuds de la maille ", id_elem, ": ", list_no + + l_inst = T_el[kk].INST.values() + nb_inst = len(l_inst) + + T_noeuds = Table() + T_noeuds['INST']=l_inst + + # pour chaque noeud de l'element on recupere sa trace + for noeud in list_no: + + VM=RECU_FONCTION(RESULTAT=resu2, + TOUT_INST='OUI', + NOM_CHAM='EQUI_ELNO_SIGM', + NOM_CMP='VMIS_SG', + MAILLE=elem, + NOEUD=noeud); + + T_noeuds[noeud]=VM.Ordo() + + DETRUIRE(CONCEPT=(_F(NOM=VM))) + + T_noeuds.fromfunction('VM_MAIL', moyenne, list_no) + + l_VM_MAIL = T_noeuds.VM_MAIL.values() + + for j, vm in enumerate(l_VM_MAIL): + if vm < 0: + l_enel[j]=-l_enel[j] + + del T_el[kk]['TOTALE'] + T_el[kk][elem]=l_enel + + if k==0: + + # Table de l'energie elastique sur le GROUP_MA + T_el_gm = Table() + T_el_gm['NUME_ORDRE'] = T_el[kk].NUME_ORDRE.values() + T_el_gm['INST'] = T_el[kk].INST.values() + T_el_gm['LIEU'] = [last_copo]*nb_inst + T_el_gm['ENTITE'] = ['GROUP_MA']*nb_inst + + T_el_gm[elem]=l_enel + + kk+=1 + + # sommation sur les mailles du group_ma: + l_nomma = d_nomma.values() + T_el_gm.fromfunction('TOTALE', mysum, l_nomma) + + # Table totale + t_enel=Table(titr="Energie élastique") + t_enel['NUME_ORDRE']=T_el_gm.NUME_ORDRE.values() + t_enel['INST']=T_el_gm.INST.values() + t_enel['LIEU']=T_el_gm.LIEU.values() + t_enel['ENTITE']=T_el_gm.ENTITE.values() + t_enel['TOTALE']=T_el_gm.TOTALE.values() + + # t_enel ne contient jusqu'ici que l'energie elastique du dernier copeau + + # calcul de l'energie elastique pour les autres copeaux + T_el_sub = T_el_gm.copy() + + for k in range(len(l_copo)-2,-1,-1): + group_ma = l_copo[k] + T_el_sub = T_el_sub.copy() + del T_el_sub['LIEU'] + del T_el_sub['TOTALE'] + T_el_sub['LIEU']=[group_ma]*nb_inst + l_id_elem = d_groupma[group_ma] + l_nom_elem = [] + + for id_elem, nom_elem in d_nomma.items(): + if not id_elem in l_id_elem: + # colonne a supprimer + del T_el_sub[nom_elem] + del d_nomma[id_elem] + else: + l_nom_elem.append(nom_elem) + + T_el_sub.fromfunction('TOTALE', sum_and_check, l_nom_elem) + + # Table de l'energie elastique sur le GROUP_MA + T_el_gm_k = Table() + T_el_gm_k['NUME_ORDRE'] =T_el_sub.NUME_ORDRE.values() + T_el_gm_k['INST'] = T_el_sub.INST.values() + T_el_gm_k['LIEU'] = [group_ma]*nb_inst + T_el_gm_k['ENTITE'] = ['GROUP_MA']*nb_inst + T_el_gm_k['TOTALE'] = T_el_sub.TOTALE.values() + + # contribution du group_ma a la table totale: + t_enel = merge(t_enel, T_el_gm_k) + + t_enel.sort('NUME_ORDRE') + + else: + # si self['TRAC_COMP']!='OUI' + # calcul classique de l'energie elastique + + __ener = POST_ELEM(MODELE=self['MODELE'], + RESULTAT=self['RESULTAT'], + CHARGE=l_charg, + TOUT_ORDRE='OUI', + ENER_ELAS=_F(GROUP_MA=l_copo), + TITRE='Energie élastique',) + + t_enel = __ener.EXTR_TABLE() + + # 2.1. ----- Indice de chaque copeau et deltaL + d_icop = dict(zip(l_copo, range(1, nbcop + 1))) + + l_lieu = [grma.strip() for grma in t_enel.LIEU.values()] + + l_icop = [d_icop[grma] for grma in l_lieu] + + t_enel['ICOP'] = l_icop + + l_numord = list(Set(t_enel.NUME_ORDRE.values())) + l_numord.sort() + + if self['PAS_ENTAILLE'] is not None: + t_enel.fromfunction('DELTAL', fDL, 'ICOP', { 'pascop' : self['PAS_ENTAILLE'] }) + else: + l_ep_copeaux_tranche = l_ep_copeaux_tot[i*nbcop:(i+1)*nbcop] + t_enel['DELTAL'] = l_ep_copeaux_tranche*len(l_numord) + + # 2.2. ----- Calcul de Gp fonction de Ener.Totale et de deltaL + if is_2D: + t_enel.fromfunction('GP', fGp_Etot, ('TOTALE', 'DELTAL'), + {'syme' : self['SYME_CHAR'] != 'SANS', + 'R' : self['RAYON_AXIS'],}) else: - t = MaxRelatif(tj, 'GP') - if j == 1: - tb_Gpmax = t + ep_tranche = largeur_tranche(nom_maillage, l_noeuds_fissure, pas, i) + #print "ep_tranche %i: "%i, ep_tranche + t_enel.fromfunction('GP', fGp_Etot, ('TOTALE', 'DELTAL'), + {'syme' : self['SYME_CHAR'] != 'SANS', + 'R' : ep_tranche }) + + #if info >= 2: + # print "Table de l'énergie élastique: ", t_enel + + l_t_enel.append(t_enel) + # 2.3. ----- Tableau de Gp = f(icop) pour chaque instant + if info >= 2: + tGp_t_icop = t_enel['INST', 'DELTAL', 'GP'] + tGp_t_icop.titr = "Gp à chaque instant en fonction de la distance au " \ + "fond d'entaille" + tGp_t_icop.ImprTabCroise() + + # 2.4. ----- Table Gpmax + ttmp = t_enel['NUME_ORDRE', 'INST', 'ICOP', 'DELTAL', 'GP'] + + for j in l_numord: + tj = ttmp.NUME_ORDRE == j + + ## pour tester le comportement de Gpmax quand GP est identiquement nul + #del tj['GP'] + #tj['GP']=[0]*len(tj.GP.values()) + + if self['CRIT_MAXI_GP'] == 'ABSOLU': + t = tj.GP.MAXI() + else: + t = MaxRelatif(tj, 'GP') + + + # cas GP identiquement nul: plusieurs max de GP + # on prend le DELTAL minimum + if len(t.GP.values())>1: + t = t.DELTAL.MINI() + + if j == 1: + tb_Gpmax_i = t + else: + tb_Gpmax_i = tb_Gpmax_i | t + + + tb_Gpmax_i.Renomme('GP', 'GPMAX') + tb_Gpmax_i.Renomme('ICOP', 'ICOPMAX') + tb_Gpmax_i.Renomme('DELTAL', 'DELTALMAX') + tb_Gpmax_i.titr = 'Gpmax à chaque instant' + + # On transfert Gpmax au noeud sommet à gauche et au milieu (si cas quadratique) + # sauf pour la dernière tranche où on transfère également au noeud sommet de droite. + # Tout cela pour pouvoir avoir une table complète avec les G et les Gpmax. + if not is_2D: + tb_Gpmax_i['NUME_TRANCHE']=[i+1]*len(tb_Gpmax_i['GPMAX']) + if i==0: + l_inst = tb_Gpmax_i.INST.values() + nb_inst = len(l_inst) + if pas==1: + tb_Gpmax_i_noeuds = tb_Gpmax_i.copy() + tb_Gpmax_i_noeuds['NOEUD']=[l_noeuds_fissure[i]]*nb_inst + l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds) + else: + tb_Gpmax_i_noeuds_1 = tb_Gpmax_i.copy() + tb_Gpmax_i_noeuds_1['NOEUD'] = [l_noeuds_fissure[pas*i]]*nb_inst + l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds_1) + tb_Gpmax_i_noeuds_2 = tb_Gpmax_i.copy() + tb_Gpmax_i_noeuds_2['NOEUD'] = [l_noeuds_fissure[pas*i+1]]*nb_inst + l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds_2) + if i==nb_tranches-1: + tb_Gpmax_i_noeuds_3 = tb_Gpmax_i.copy() + tb_Gpmax_i_noeuds_3['NOEUD'] = [l_noeuds_fissure[-1]]*nb_inst + l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds_3) + + + + if i == 0: + tb_Gpmax = tb_Gpmax_i else: - tb_Gpmax = tb_Gpmax | t - tb_Gpmax.Renomme('GP', 'GPMAX') - tb_Gpmax.Renomme('ICOP', 'ICOPMAX') - tb_Gpmax.Renomme('DELTAL', 'DELTALMAX') - tb_Gpmax.titr = 'Gpmax à chaque instant' - if info >= 2: - print tb_Gpmax + tb_Gpmax = merge(tb_Gpmax, tb_Gpmax_i) + + # FIN BOUCLE SUR LES TRANCHES + + if not is_2D: + tb_Gpmax_noeuds = Table(para=tb_Gpmax.para+['NOEUD']) + for j, tb in enumerate(l_tb_Gpmax_noeuds): + if j==0: + tb_Gpmax_noeuds = tb + else: + tb_Gpmax_noeuds = merge(tb_Gpmax_noeuds, tb) + # 2.5. ----- extraction de la température en fond d'entaille + #voir le cas 3D => THETA_3D, mais qu'en est-il des tranches? if self['RESU_THER']: - grno_fond = self['THETA_2D'][0]['GROUP_NO'] + #sur un seul noeud ou sur tous les noeuds du fond d'entaille? + + if is_2D: + grno_fond = self['THETA_2D'][0]['GROUP_NO'] + else: + grma_fond = self['THETA_3D'][0]['GROUP_MA'] + grno_fond = "GRNOFOND" + DEFI_GROUP(reuse =maya, + MAILLAGE=maya, + CREA_GROUP_NO=_F(GROUP_MA=grma_fond, + NOM=grno_fond,),); + + l_ordres = DEFI_LIST_ENTI(VALE=l_numord) __relev = POST_RELEVE_T(ACTION=_F(RESULTAT=self['RESU_THER'], OPERATION='EXTRACTION', INTITULE='Temperature', NOM_CHAM='TEMP', - TOUT_ORDRE='OUI', + LIST_ORDRE=l_ordres, NOM_CMP='TEMP', GROUP_NO=grno_fond,),) - t_relev = __relev.EXTR_TABLE()['NUME_ORDRE', 'TEMP'] - + + t_relev = __relev.EXTR_TABLE()['NUME_ORDRE', 'NOEUD', 'TEMP'] # 3. ----- boucle sur les mots-clés facteurs # opérations dépendant de la température @@ -178,7 +521,7 @@ def post_gp_ops(self, **args): # 3.0. ----- Temperature fonction du temps : si on n'a pas de RESU_THER, # on prend la température d'identification. if not self['RESU_THER']: - l_rows = [{'NUME_ORDRE' : i, 'TEMP' : TEMP} for i in l_numord] + l_rows = [{'NUME_ORDRE' : j, 'TEMP' : TEMP} for j in l_numord] t_relev = Table(rows=l_rows, para=('NUME_ORDRE', 'TEMP'), typ=('R', 'R')) flag_mat = True @@ -188,44 +531,73 @@ def post_gp_ops(self, **args): { 'para' : 'E', 'MATER' : MATER }) t_relev.fromfunction('NU', CallRCVALE, 'TEMP', { 'para' : 'NU', 'MATER' : MATER }) - #tb_Gpmax = merge(tb_Gpmax, t_relev, 'NUME_ORDRE') flag_mat = False # 3.2. ----- paramètres dict_constantes = { 'YOUNG' : CallRCVALE(TEMP, 'E', MATER), 'NU' : CallRCVALE(TEMP, 'NU', MATER), - 'R' : self['RAYON_AXIS'], } + if is_2D: + dict_constantes['R'] = self['RAYON_AXIS'] + else: + dict_constantes['R'] = ep_tranche + # 3.3. ----- calcul de Kj(G) l_tabi = [] for k, tab in enumerate(l_tab): - # fusion avec TEMP, E et nu. - tab = merge(tab, t_relev, 'NUME_ORDRE') + #tab: table de la couronne k # calcul de Kj(G) = K_i new_para = 'K_%d' % (k + 1) - tab.fromfunction(new_para, fKj, ('G', 'YOUNG', 'NU'), - { 'R' : self['RAYON_AXIS'] }) - - # renomme G en G_i - tab.Renomme('G', 'G_%d' % (k + 1)) + if is_2D: + # fusion avec TEMP, E et nu + tab = merge(tab, t_relev, 'NUME_ORDRE') + tab.fromfunction(new_para, fKj, ('G', 'YOUNG', 'NU'), + { 'R' : self['RAYON_AXIS'] }) + # renomme G en G_i + tab.Renomme('G', 'G_%d' % (k + 1)) + else: + if self['RESU_THER']: + tab=merge(tab, t_relev, ['NUME_ORDRE', 'NOEUD']) + else: + tab=mergeLineInTable(tab, t_relev, nb_noeuds_fissure) + + # en 3D, le paramètre R n'intervient pas + tab.fromfunction(new_para, fKj, ('G_LOCAL', 'YOUNG', 'NU')) + tab.Renomme('G_LOCAL', 'G_%d' % (k + 1)) + l_tabi.append(tab) # 3.4 ----- Table des Gi, Ki sur les differentes couronnes + Kmoyen - tabK_G = l_tabi[0]['NUME_ORDRE'] - for tab in l_tabi: - tabK_G = merge(tabK_G, tab, 'NUME_ORDRE') + if is_2D: + tabK_G = l_tabi[0]['NUME_ORDRE'] + for tab in l_tabi: + tabK_G = merge(tabK_G, tab, 'NUME_ORDRE') + else: + tabK_G=l_tabi[0] + for i in range(1,len(l_tabi)): + tabK_G = merge(tabK_G, l_tabi[i], ['NUME_ORDRE', 'NOEUD']) tabK_G.titr = 'G et K sur les differentes couronnes + moyennes' - tabK_G.fromfunction('GMOY', moyenne, ['G_%d' % (k + 1) for k in range(nbcour)]) + tabK_G.fromfunction('GMOY', moyenne_positive, ['G_%d' % (k + 1) for k in range(nbcour)]) tabK_G.fromfunction('KMOY', moyenne, ['K_%d' % (k + 1) for k in range(nbcour)]) # 3.5. ----- Contribution à la table globale - tabres = merge(tabK_G, tb_Gpmax, 'NUME_ORDRE') - tabres['OCCURRENCE'] = [iocc + 1] * len(l_numord) - if info >= 2: - print tabres + + if is_2D: + tabres = merge(tabK_G, tb_Gpmax, 'NUME_ORDRE') + tabres['OCCURRENCE'] = [iocc + 1] * len(l_numord) + else: + # tb_Gpmax est une table sur les tranches, + # on l'ajoute dans la table aux noeuds tabres avec la convention: + # au 1er noeud et noeud milieu de la tranche on affecte la valeur de la tranche + # sauf pour la derniere tranche où on affecte la valeur sur les 3 noeuds de la tranche + tabres = tabK_G + tabres = merge(tabK_G, tb_Gpmax_noeuds, ['NUME_ORDRE', 'NOEUD']) + tabres['OCCURRENCE'] = [iocc + 1] * len(l_numord) * nb_noeuds_fissure + #if info >= 2: + # print tabres # 3.5.1. --- Table globale if iocc == 0: @@ -242,37 +614,122 @@ def post_gp_ops(self, **args): 'PROL_DROITE' : 'CONSTANT', 'PROL_GAUCHE' : 'CONSTANT', } - # Gpmax fonction du temps - d_para.update({ 'NOM_RESU' : 'GPMAX' }) - fGp = t_fonction(tabres.INST.values(), tabres.GPMAX.values(), d_para) # 3.6.1. --- identification if identification: KJ_CRIT = l_crit[iocc] - # définition des fonctions pour faire les interpolations - d_para.update({ 'NOM_RESU' : 'DELTALMAX' }) - fdL = t_fonction(tabres.INST.values(), tabres.DELTALMAX.values(), d_para) - - d_para.update({ 'NOM_PARA' : 'KMOY', - 'NOM_RESU' : 'INST', }) - valkmoy = tabres.KMOY.values() - finv = t_fonction(valkmoy, tabres.INST.values(), d_para) - + # on verifie que KJ_CRIT soit compris dans l'intervalle [KMOY_min, KMOY_max] + valkmoy = tabres.KMOY.values() if not (min(valkmoy) <= KJ_CRIT <= max(valkmoy)): - UTMESS('A', macro, 'Interpolation hors du domaine (prolongement ' \ - 'constant utilisé).') - # valeurs à mettre dans la table - ti = finv(KJ_CRIT) - Gpi = fGp(ti) - d_ident = { - 'KJ_CRIT' : KJ_CRIT, - 'INST' : ti, - 'GPMAX' : Gpi, - 'KGPMAX' : fKj(Gpi, **dict_constantes), - 'DELTALMAX' : fdL(ti), - } - lv_ident.append(d_ident) - +# 'constant utilisé).') + UTMESS('A','RUPTURE0_1') + if is_2D: + # définition des fonctions pour faire les interpolations + d_para.update({ 'NOM_RESU' : 'DELTALMAX' }) + # DeltaMax en fonction du temps + fdL = t_fonction(tb_Gpmax.INST.values(), tb_Gpmax.DELTALMAX.values(), d_para) + # Gpmax fonction du temps + d_para.update({ 'NOM_RESU' : 'GPMAX' }) + fGp = t_fonction(tb_Gpmax.INST.values(), tb_Gpmax.GPMAX.values(), d_para) + + d_para.update({ 'NOM_PARA' : 'KMOY', + 'NOM_RESU' : 'INST', }) + valkmoy = tabres.KMOY.values() + # temps en fonction de Kmoy + finv = t_fonction(valkmoy, tabres.INST.values(), d_para) + + # valeurs à mettre dans la table + # temps correspondant à KJ_CRIT + ti = finv(KJ_CRIT) + # GP correspondant au temps critique + Gpi = fGp(ti) + d_ident = { + 'KJ_CRIT' : KJ_CRIT, + 'INST' : ti, + 'GPMAX' : Gpi, + 'KGPMAX' : fKj(Gpi, **dict_constantes), + 'DELTALMAX' : fdL(ti), + } + lv_ident.append(d_ident) + else: + + l_i_noeuds_sommets = range(0,len(l_noeuds_fissure),pas) + t_noeud_Kcrit = Table(para=tabres.para) + + # On determine quel noeud sommet maximise KMOY au cours du temps: + + row_KMOY_max = tabres.KMOY.MAXI() + noeud_KMOY_max = row_KMOY_max.NOEUD.values()[0] + + # avec le noeud ou KJ_CRIT est atteint, on regarde GP a gauche et a droite. + # le GP le plus grand correspond au GPmax + # on garde la tranche ou GP est le plus grand + + id_noeud_KMOY_max = list(l_noeuds_fissure).index(noeud_KMOY_max) + if id_noeud_KMOY_max==0: + # "Gpmax sur la 1ere tranche" + nume_tranche_Gpmax = 1 + elif id_noeud_KMOY_max==(len(l_noeuds_fissure)-1): + # "Gpmax sur la derniere tranche" + nume_tranche_Gpmax = nb_tranches + else: + # "Gpmax sur une tranche intermediaire" + Gpi_tot = Table(para=tb_Gpmax.para) + Gpi_gauche = tb_Gpmax.NUME_TRANCHE==(id_noeud_KMOY_max/pas) + Gpi_tot.append(Gpi_gauche.rows[0]) + Gpi_droite = tb_Gpmax.NUME_TRANCHE==(id_noeud_KMOY_max/pas+1) + Gpi_tot.append(Gpi_droite.rows[0]) + Gpi_tab = Gpi_tot.GPMAX.MAXI() + nume_tranche_Gpmax = Gpi_tab.NUME_TRANCHE.values()[0] + + # tb_Gpmax_TrancheCrit est une table de la meme nature que la table 2D tb_Gpmax + # i.e. valeurs sur la seule tranche qui nous interesse (ou on sait + # que KJ_CRIT sera atteint) + + tb_Gpmax_TrancheCrit = tb_Gpmax.NUME_TRANCHE==nume_tranche_Gpmax + + # avec le noeud ou KJ_CRIT est atteint, on determine le temps + # critique par interpolation + tabres_NoeudCrit = tabres.NOEUD==noeud_KMOY_max + + # la suite est idem 2D, seuls les noms des tables changent + + # définition des fonctions pour faire les interpolations + d_para.update({ 'NOM_RESU' : 'DELTALMAX' }) + # DeltaMax en fonction du temps + fdL = t_fonction(tb_Gpmax_TrancheCrit.INST.values(), + tb_Gpmax_TrancheCrit.DELTALMAX.values(), + d_para) + + # Gpmax fonction du temps + d_para.update({ 'NOM_RESU' : 'GPMAX' }) + fGp = t_fonction(tb_Gpmax_TrancheCrit.INST.values(), + tb_Gpmax_TrancheCrit.GPMAX.values(), + d_para) + + + d_para.update({ 'NOM_PARA' : 'KMOY', + 'NOM_RESU' : 'INST', }) + valkmoy = tabres_NoeudCrit.KMOY.values() + # temps en fonction de Kmoy + finv = t_fonction(valkmoy, tabres_NoeudCrit.INST.values(), d_para) + + # valeurs à mettre dans la table + # temps correspondant a KJ_CRIT + ti = finv(KJ_CRIT) + # GP correspondant au temps critique + Gpi = fGp(ti) + # par rapport a 2D, on ajoute 'NUME_TRANCHE' + d_ident = { + 'KJ_CRIT' : KJ_CRIT, + 'INST' : ti, + 'NUME_TRANCHE' : int(nume_tranche_Gpmax), + 'GPMAX' : Gpi, + 'KGPMAX' : fKj(Gpi, **dict_constantes), + 'DELTALMAX' : fdL(ti), + } + lv_ident.append(d_ident) + # 3.6.2. --- prédiction else: pass @@ -280,9 +737,13 @@ def post_gp_ops(self, **args): # 4. ----- Construction de la table résultat si demandée # 4.1. --- identification if identification: + if is_2D: + para_tab_ident=('KJ_CRIT', 'INST', 'GPMAX', 'KGPMAX', 'DELTALMAX') + else: + para_tab_ident=('KJ_CRIT', 'INST', 'NUME_TRANCHE', 'GPMAX', 'KGPMAX', 'DELTALMAX') tab_ident = Table(rows=lv_ident, - para=('KJ_CRIT', 'INST', 'GPMAX', 'KGPMAX', 'DELTALMAX'), - typ= ('R', 'R', 'R', 'R', 'R'), + para=para_tab_ident, + typ = ('R')*len(para_tab_ident), titr='Identification aux valeurs de tenacités critiques') dprod_result = tab_ident.dict_CREA_TABLE() if info >= 2: @@ -295,7 +756,25 @@ def post_gp_ops(self, **args): 'NOM_RESU' : 'GP_CRIT', }) fGpc = t_fonction(mccalc['TEMP'], mccalc['GP_CRIT'], d_para) - tab_pred = tabl_glob['NUME_ORDRE', 'INST', 'TEMP', 'DELTALMAX', 'GPMAX'] + # en 3D, GPMAX et DELTALMAX ne sont pas dans tab_glob: les recuperer de tb_Gpmax + + if is_2D: + tab_pred = tabl_glob['NUME_ORDRE', 'INST', 'TEMP', 'DELTALMAX', 'GPMAX'] + else: + tab_pred = tb_Gpmax['NUME_ORDRE', 'INST', 'NUME_TRANCHE', 'DELTALMAX', 'GPMAX'] + # on recupere TEMP de tabl_glob + tab_temp_tranche=Table(para=['NUME_ORDRE', 'NUME_TRANCHE', 'TEMP']) + # on fait une moyenne de la temperature sur les noeuds d'une tranche + for ordre in l_numord: + tabl_glob_ORDRE_i = tabl_glob.NUME_ORDRE==ordre + temp_ORDRE_i = tabl_glob_ORDRE_i.TEMP.values() + for i_tranche in range(nb_tranches): + l_temp_noeuds_tranche_i = temp_ORDRE_i[i_tranche : i_tranche+pas+1] + temp_tranche_i = moyenne(*l_temp_noeuds_tranche_i) + d = {'NUME_ORDRE': ordre, 'NUME_TRANCHE': i_tranche+1, 'TEMP': temp_tranche_i} + tab_temp_tranche.append(d) + tab_pred = merge(tab_pred, tab_temp_tranche, ['NUME_ORDRE', 'NUME_TRANCHE']) + tab_pred.fromfunction('GP_CRIT', fGpc, 'TEMP') tab_pred.fromfunction('PREDICTION', crit, ('GP_CRIT', 'GPMAX')) tab_pred.titr = 'Comparaison Gpmax à Gpcrit(T)' @@ -318,10 +797,12 @@ def CallRCVALE(TEMP, para, MATER): return valres # ----------------------------------------------------------------------------- -def fKj(G, YOUNG, NU, R): +def fKj(G, YOUNG, NU, R=1): """Calcul de Kj à partir de G (formule d'Irwin) + R n'intervient pas en 3D """ - return (G / R * YOUNG / (1.0 - NU**2))**0.5 + Kj=(abs(G / R * YOUNG / (1.0 - NU**2)))**0.5 + return Kj # ----------------------------------------------------------------------------- def fDL(ICOP, pascop): @@ -330,16 +811,20 @@ def fDL(ICOP, pascop): return ICOP * pascop # ----------------------------------------------------------------------------- -def fGp_Etot(TOTALE, ICOP, pascop, R, syme=False): +def fGp_Etot(TOTALE, DELTAL, R, syme=False): """Gp(Etotale, K), deltal pris dans le context global. - ICOP : numéro du copeau, - pascop : pas d'entaille. - syme : True s'il y a symétrie. + ICOP : numéro du copeau, + DELTAL : liste des epaisseurs des copeaux + R : rayon en axisymetrique, + longueur de l'élément 1D situé sur le front d'entaille si modèle 3D. + syme : True s'il y a symétrie. """ - fact_axis = 1. + import types + fact_syme = 1. if syme: - fact_axis = 2. - return fact_axis * TOTALE / (fDL(ICOP, pascop) * R) + fact_syme = 2. + Gp_Etot = fact_syme * TOTALE / (DELTAL * R ) + return Gp_Etot # ----------------------------------------------------------------------------- def MaxRelatif(table, nom_para): @@ -369,3 +854,86 @@ def moyenne(*args): """ return sum(args)/len(args) +def moyenne_positive(*args): + """Fonction moyenne + """ + return sum([abs(a) for a in args])/len(args) + +def mysum(*args): + """Fonction sum. + La fonction sum ne peut pas etre appelee sur une liste de parametre + d'une table via fromfunction + """ + return sum(args) + +def sum_and_check(*args): + """Fonction sum. + Verifie si la somme est positive. + Si la somme est negative, on la met egale a zero + """ + somme = sum(args) + if somme<0: + somme=0 + return somme + +# On recupere des infos sur le fond de fissure +def getFondFissInfo(fondfiss): + # >FONFISS .FOND .NOEU < + # >FONFISS .FOND .TYPE < + import aster + l_noeuds_fissure = aster.getvectjev(fondfiss.nom.ljust(8)+'.FOND .NOEU ') + type_mailles = aster.getvectjev(fondfiss.nom.ljust(8)+'.FOND .TYPE ') + if (type_mailles[0].strip() == 'SEG3' ): + pas = 2 + else: + pas = 1 + return l_noeuds_fissure, pas + +######################################################################## +# determination de la distance min entre 2 points consécutifs de la ligne de coupe + +def largeur_tranche(nom_maillage, l_noms_noeuds_fissure, pas, i_tranche): + # >MA .COORDO .VALE < + from math import sqrt + import aster + + # tuple des noms des noeuds du maillage + t_noms_noeuds_maillage = aster.getvectjev(nom_maillage.ljust(8)+'.NOMNOE') + # on convertit en liste pour utiliser la methode index + # qui est plus optimal qu'une boucle sur les indices du tuple + l_noms_noeuds_maillage = list(t_noms_noeuds_maillage) + + l_numeros_noeuds_fissure = [] + for i in range(0,len(l_noms_noeuds_fissure),pas): + nom = l_noms_noeuds_fissure[i] + index = l_noms_noeuds_maillage.index(nom) + l_numeros_noeuds_fissure.append(index) + + coor1=aster.getvectjev(nom_maillage.ljust(8)+'.COORDO .VALE ', + l_numeros_noeuds_fissure[i_tranche]*3,3) + coor2=aster.getvectjev(nom_maillage.ljust(8)+'.COORDO .VALE ', + l_numeros_noeuds_fissure[i_tranche+1]*3,3) + + d=sqrt( (coor1[0]-coor2[0])**2+(coor1[1]-coor2[1])**2+(coor1[2]-coor2[2])**2) + return d + +def mergeLineInTable(multiTable, lineTable, nb_noeuds): + # on ajoute a la table multiTable les colonnes de lineTable + # pour chaque nume_ordre autant de fois qu'il y a de nb_noeuds + from Utilitai.Table import Table, merge + + l_ordre = lineTable.NUME_ORDRE + l_para = lineTable.copy().para + l_para.remove('NUME_ORDRE') + for i, ordre in enumerate(l_ordre): + multiTable_i = multiTable.NUME_ORDRE==ordre + row_i = lineTable.rows[i] + for para in l_para: + valeur_i = row_i[para] + multiTable_i[para] = [valeur_i] * nb_noeuds + if i==0: + newTable=multiTable_i + else: + newTable = merge(newTable, multiTable_i) + + return newTable diff --git a/Aster/Cata/cataSTA9/Macro/post_k1_k2_k3_ops.py b/Aster/Cata/cataSTA9/Macro/post_k1_k2_k3_ops.py index e6c075d6..4222d356 100644 --- a/Aster/Cata/cataSTA9/Macro/post_k1_k2_k3_ops.py +++ b/Aster/Cata/cataSTA9/Macro/post_k1_k2_k3_ops.py @@ -1,4 +1,4 @@ -#@ MODIF post_k1_k2_k3_ops Macro DATE 09/05/2007 AUTEUR REZETTE C.REZETTE +#@ MODIF post_k1_k2_k3_ops Macro DATE 13/05/2008 AUTEUR GALENNE E.GALENNE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -19,19 +19,18 @@ # ====================================================================== def veri_tab(tab,nom,ndim) : - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS macro = 'POST_K1_K2_K3' for label in ('DX','DY','COOR_X','COOR_Y','ABSC_CURV') : if label not in tab.para : - message='le label '+label+' doit etre present dans la table : '+nom - UTMESS('F', macro, message) + UTMESS('F','RUPTURE0_2',valk=[label,nom]) if ndim==3 : if 'DZ' not in tab.para : - message='le label DZ doit etre present dans la table : '+nom - UTMESS('F', macro, message) + label='DZ' + UTMESS('F','RUPTURE0_2',valk=[label,nom]) if 'COOR_Z' not in tab.para : - message='le label COOR_Z doit etre present dans la table : '+nom - UTMESS('F', macro, message) + label='COOR_Z' + UTMESS('F','RUPTURE0_2',valk=[label,nom]) def cross_product(a,b): cross = [0]*3 @@ -72,11 +71,13 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, from types import ListType, TupleType from Accas import _F from Utilitai.Table import Table, merge + from SD.sd_l_charges import sd_l_charges + from SD.sd_mater import sd_compor1 EnumTypes = (ListType, TupleType) macro = 'POST_K1_K2_K3' from Accas import _F - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS ier = 0 # La macro compte pour 1 dans la numerotation des commandes @@ -96,40 +97,33 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, AFFE_MODELE = self.get_cmd('AFFE_MODELE') PROJ_CHAMP = self.get_cmd('PROJ_CHAMP') - + # ------------------------------------------------------------------ # CARACTERISTIQUES MATERIAUX # ------------------------------------------------------------------ - matph = aster.getvectjev( string.ljust(MATER.nom,8)+'.MATERIAU.NOMRC ') + matph = MATER.NOMRC.get() phenom=None for cmpt in matph : if cmpt[:4]=='ELAS' : phenom=cmpt break - if phenom==None : UTMESS('F', macro, 'IL FAUT DEFINIR ELAS DANS DEFI_MATERIAU') + if phenom==None : UTMESS('F','RUPTURE0_5') # --- RECHERCHE SI LE MATERIAU DEPEND DE LA TEMPERATURE: - valk = aster.getvectjev( string.ljust(MATER.nom,8)+'.'+phenom[:10]+'.VALK') - valk = [x.strip() for x in valk] - valr = aster.getvectjev( string.ljust(MATER.nom,8)+'.'+phenom[:10]+'.VALR') + compor = sd_compor1('%-8s.%s' % (MATER.nom, phenom)) + valk = [s.strip() for s in compor.VALK.get()] + valr = compor.VALR.get() dicmat=dict(zip(valk,valr)) # --- PROPRIETES MATERIAUX DEPENDANTES DE LA TEMPERATURE Tempe3D = False - if dicmat.has_key('TEMP_DEF') and FOND_FISS and RESULTAT : -# on recupere juste le nom du resultat thermique + if FOND_FISS and args['EVOL_THER'] : +# on recupere juste le nom du resultat thermique (la température est variable de commande) ndim = 3 - Lchar = aster.getvectjev(string.ljust(RESULTAT.nom,8)+'.0000.EXCIT.LCHA ') - for i in range(len(Lchar)): - resuth = aster.getvectjev(Lchar[i][0:8]+'.CHME.TEMPE.TEMP ') - if resuth !=None : - Tempe3D = True - break - elif dicmat.has_key('TEMP_DEF') and not Tempe3D : - message = 'LES PROPRIETES MATERIAUX, NECESSAIRES AUX CALCULS \n' - message = message +'DES COEFFICIENTS D INTENSITE DES CONTRAINTES, ONT ETE OBTENUES A LA\n' - message = message +'TEMPERATURE DE REFERENCE DU MATERIAU ET NON A LA TEMPERATURE CALCULEE.' - UTMESS('A', macro, message) + Tempe3D=True + resuth=string.ljust(args['EVOL_THER'].nom,8).rstrip() + if dicmat.has_key('TEMP_DEF') and not args['EVOL_THER'] : nompar = ('TEMP',) valpar = (dicmat['TEMP_DEF'],) + UTMESS('A','RUPTURE0_6',valr=valpar) nomres=['E','NU'] valres,codret = MATER.RCVALE('ELAS',nompar,valpar,nomres,'F') e = valres[0] @@ -147,7 +141,7 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, unmnu2 = 1. - nu**2 unpnu = 1. + nu if MODELISATION=='3D' : - UTMESS('I', macro, 'l operateur CALC_G -option CALC_K_G- calcule plus precisement les K1 K2 K3') + coefk='K1 K2 K3' ndim = 3 coefd = coefd / ( 8.0 * unmnu2 ) coefd3 = e*sqrt(2*pi) / ( 8.0 * unpnu ) @@ -159,19 +153,19 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, coefg = unmnu2 / e coefg3 = unpnu / e elif MODELISATION=='D_PLAN' : - UTMESS('I', macro, 'l operateur CALC_G -option CALC_K_G- calcule plus precisement les K1 K2') + coefk='K1 K2' ndim = 2 coefd = coefd / ( 8. * unmnu2 ) coefg = unmnu2 / e coefg3 = unpnu / e elif MODELISATION=='C_PLAN' : - UTMESS('I', macro, 'l operateur CALC_G -option CALC_K_G- calcule plus precisement les K1 K2') + coefk='K1 K2' ndim = 2 coefd = coefd / 8. coefg = 1. / e coefg3 = unpnu / e else : - UTMESS('F', macro, 'modélisation non implantée') + UTMESS('F','RUPTURE0_10') # ------------------------------------------------------------------ @@ -187,49 +181,49 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, TYPE_MAILLAGE = args['TYPE_MAILLAGE'] NB_NOEUD_COUPE = args['NB_NOEUD_COUPE'] if NB_NOEUD_COUPE ==None : NB_NOEUD_COUPE = 5 - LNOFO = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.FOND .NOEU ') + LNOFO = FOND_FISS.FOND_______NOEU.get() RECOL = False # Cas double fond de fissure : par convention les noeuds sont ceux de fond_inf if LNOFO==None : RECOL = True - LNOFO = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.FOND_INF .NOEU ') - if LNOFO==None : UTMESS('F', macro, 'PROBLEME A LA RECUPERATION DES NOEUDS DU FOND DE FISSURE \n') + LNOFO = FOND_FISS.FONDINF____NOEU.get() + if LNOFO==None : UTMESS('F','RUPTURE0_11') LNOFO = map(string.rstrip,LNOFO) Nbfond = len(LNOFO) if MODELISATION=='3D' : # ----------Mots cles TOUT, NOEUD, SANS_NOEUD ------------- - Typ = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.FOND .TYPE ') + Typ = FOND_FISS.FOND_______TYPE.get() if (Typ[0]=='SEG2 ') or (Typ[0]=='SEG3 ' and TOUT=='OUI') : pas = 1 elif (Typ[0]=='SEG3 ') : pas = 2 else : - UTMESS('F', macro, 'TYPE DE MAILLES DU FOND DE FISSURE NON DEFINI') + UTMESS('F','RUPTURE0_12') #### NO_SANS = [] NO_AVEC = [] if GROUP_NO!=None : - collgrno=aster.getcolljev(string.ljust(MAILLAGE.nom,8)+'.GROUPENO') - cnom = aster.getvectjev(string.ljust(MAILLAGE.nom,8)+'.NOMNOE') + collgrno = MAILLAGE.GROUPENO.get() + cnom = MAILLAGE.NOMNOE.get() if type(GROUP_NO) not in EnumTypes : GROUP_NO = (GROUP_NO,) for m in range(len(GROUP_NO)) : ngrno=GROUP_NO[m].ljust(8).upper() if ngrno not in collgrno.keys() : - UTMESS('F', macro, "LE GROUP_NO "+ngrno+" N EST PAS DANS LE MAILLAGE") + UTMESS('F','RUPTURE0_13',valk=ngrno) for i in range(len(collgrno[ngrno])) : NO_AVEC.append(cnom[collgrno[ngrno][i]-1]) NO_AVEC= map(string.rstrip,NO_AVEC) if NOEUD!=None : if type(NOEUD) not in EnumTypes : NO_AVEC = (NOEUD,) else : NO_AVEC = NOEUD if SANS_GROUP_NO!=None : - collgrno=aster.getcolljev(string.ljust(MAILLAGE.nom,8)+'.GROUPENO') - cnom = aster.getvectjev(string.ljust(MAILLAGE.nom,8)+'.NOMNOE') + collgrno = MAILLAGE.GROUPENO.get() + cnom = MAILLAGE.NOMNOE.get() if type(SANS_GROUP_NO) not in EnumTypes : SANS_GROUP_NO = (SANS_GROUP_NO,) for m in range(len(SANS_GROUP_NO)) : ngrno=SANS_GROUP_NO[m].ljust(8).upper() if ngrno not in collgrno.keys() : - UTMESS('F', macro, "LE GROUP_NO "+ngrno+" N EST PAS DANS LE MAILLAGE") + UTMESS('F','RUPTURE0_13',valk=ngrno) for i in range(len(collgrno[ngrno])) : NO_SANS.append(cnom[collgrno[ngrno][i]-1]) NO_SANS= map(string.rstrip,NO_SANS) if SANS_NOEUD!=None : @@ -244,7 +238,7 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, Lnf1.append(NO_AVEC[i]) Nbf1 = Nbf1 +1 else : - UTMESS('F', macro, 'LE NOEUD %s N APPARTIENT PAS AU FOND DE FISSURE'%NO_AVEC[i]) + UTMESS('F','RUPTURE0_15',valk=NO_AVEC[i]) else : for i in range(0,Nbfond,pas) : if not (LNOFO[i] in NO_SANS) : @@ -257,12 +251,12 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, ##### Cas maillage libre########### # creation des directions normales et macr_lign_coup if TYPE_MAILLAGE =='LIBRE': - if not RESULTAT : UTMESS('F', macro, 'MOT CLE RESULTAT OBLIGATOIRE POUR TYPE_MAILLAGE = LIBRE') + if not RESULTAT : UTMESS('F','RUPTURE0_16') Lnofon = Lnf1 Nbnofo = Nbf1 - ListmaS = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.LEVRESUP .MAIL ') + ListmaS = FOND_FISS.LEVRESUP___MAIL.get() if SYME_CHAR=='SANS': - ListmaI = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.LEVREINF .MAIL ') + ListmaI = FOND_FISS.LEVREINF___MAIL.get() __NCOFON=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees noeuds du fond', NOEUD=LNOFO, RESULTAT=RESULTAT, @@ -281,11 +275,11 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, l_coorf = [(i[0],i[1:]) for i in l_coorf] d_coorf = dict(l_coorf) # Coordonnee d un pt quelconque des levres pr determination sens de propagation - cmail=aster.getvectjev(string.ljust(MAILLAGE.nom,8)+'.NOMMAI') + cmail=MAILLAGE.NOMMAI.get() for i in range(len(cmail)) : if cmail[i] == ListmaS[0] : break - colcnx=aster.getcolljev(string.ljust(MAILLAGE.nom,8)+'.CONNEX') - cnom = aster.getvectjev(string.ljust(MAILLAGE.nom,8)+'.NOMNOE') + colcnx=MAILLAGE.CONNEX.get() + cnom = MAILLAGE.NOMNOE.get() NO_TMP = [] for k in range(len(colcnx[i+1])) : NO_TMP.append(cnom[colcnx[i+1][k]-1]) __NCOLEV=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees pt levre', @@ -305,7 +299,7 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, VN = [None]*Nbfond absfon = [0,] if MODELISATION=='3D' : - DTANOR = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.DTAN_ORIGINE') + DTANOR = FOND_FISS.DTAN_ORIGINE.get() Pfon2 = array([d_coorf[LNOFO[0]][0],d_coorf[LNOFO[0]][1],d_coorf[LNOFO[0]][2]]) VLori = Pfon2 - Plev if DTANOR != None : @@ -330,7 +324,7 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, VLextr = Pfon2 - Plev absf = sqrt(dot(transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1] absfon.append(absf) - DTANEX = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.DTAN_EXTREMITE') + DTANEX = FOND_FISS.DTAN_EXTREMITE.get() if DTANEX != None : VN[i] = array(DTANEX) else : @@ -355,13 +349,12 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, TlibS = [None]*Nbf1 TlibI = [None]*Nbf1 if NB_NOEUD_COUPE < 3 : - message = 'LE NOMBRE DE NOEUDS NB_NOEUD_COUPE DOIT ETRE SUPERIEUR A 3 : ON PREND LA VALEUR PAR DEFAUT' - UTMESS('A', macro, message) + UTMESS('A','RUPTURE0_17') NB_NOEUD_COUPE = 5 MOD = aster.getvectjev(string.ljust(RESULTAT.nom,19)+'.MODL ') - if MOD==None : UTMESS('F', macro, 'PROBLEME A LA RECUPERATION DU MODELE DANS LA SD RESULTAT FOURNIE') - MOD = map(string.rstrip,MOD) - MODEL = self.jdc.sds_dict[MOD[0]] + if MOD==None : UTMESS('F','RUPTURE0_18') + MODEL = self.jdc.sds_dict[MOD[0].rstrip()] + dmax = PREC_VIS_A_VIS * ABSC_CURV_MAXI for i in range(Nbf1): Porig = array(d_coorf[Lnf1[i]] ) if Lnf1[i]==LNOFO[0] and DTANOR : Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnf1[i]] @@ -370,33 +363,31 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, TlibS[i] = MACR_LIGN_COUPE(RESULTAT=RESULTAT, NOM_CHAM='DEPL',MODELE=MODEL, VIS_A_VIS=_F(MAILLE_1 = ListmaS), LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],), - TYPE='SEGMENT', COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),),); + TYPE='SEGMENT', COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]), + DISTANCE_MAX=dmax),); if SYME_CHAR=='SANS': TlibI[i] = MACR_LIGN_COUPE(RESULTAT=RESULTAT, NOM_CHAM='DEPL',MODELE=MODEL, VIS_A_VIS=_F(MAILLE_1 = ListmaI), LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],), - TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),),); + TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]), + DISTANCE_MAX=dmax),); ##### Cas maillage regle########### else: # ---------- Dictionnaires des levres ------------- - NnormS = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.SUPNORM .NOEU ') + NnormS = FOND_FISS.SUPNORM____NOEU.get() if NnormS==None : - message= 'PROBLEME A LA RECUPERATION DES NOEUDS DE LA LEVRE SUP : VERIFIER ' - message=message+'QUE LE MOT CLE LEVRE_SUP EST BIEN RENSEIGNE DANS DEFI_FOND_FISS\n' - UTMESS('F', macro, message) + UTMESS('F','RUPTURE0_19') NnormS = map(string.rstrip,NnormS) if LNOFO[0]==LNOFO[-1] and MODELISATION=='3D' : Nbfond=Nbfond-1 # Cas fond de fissure ferme NnormS = [[LNOFO[i],NnormS[i*20:(i+1)*20]] for i in range(0,Nbfond)] NnormS = [(i[0],i[1][0:]) for i in NnormS] dicoS = dict(NnormS) if SYME_CHAR=='SANS': - NnormI = aster.getvectjev(string.ljust(FOND_FISS.nom,8)+'.INFNORM .NOEU ') + NnormI = FOND_FISS.INFNORM____NOEU.get() if NnormI==None : - message= 'PROBLEME A LA RECUPERATION DES NOEUDS DE LA LEVRE INF : VERIFIER ' - message=message+'QUE LE MOT CLE LEVRE_INF EST BIEN RENSEIGNE DANS DEFI_FOND_FISS\n' - UTMESS('F', macro, message) + UTMESS('F','RUPTURE0_20') NnormI = map(string.rstrip,NnormI) NnormI = [[LNOFO[i],NnormI[i*20:(i+1)*20]] for i in range(0,Nbfond)] NnormI = [(i[0],i[1][0:]) for i in NnormI] @@ -489,120 +480,189 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, if abssprecn : - message= 'LES NOEUDS NE SONT PAS EN VIS-A-VIS \n' - message=message+'DANS LE PLAN PERPENDICULAIRE AU NOEUD %s \n'%Lnf1[i] - UTMESS('A', macro, message) + UTMESS('A','RUPTURE0_21',valk=Lnf1[i]) else : NBTRLI = NBTRLI +1 Tmpinf.append(dicoI[Lnf1[i]][k]) # On verifie qu il y a assez de noeuds if NBTRLS < 3 : - message= 'IL MANQUE DES POINTS DANS LE PLAN DEFINI PAR LA LEVRE \n' - message=message+'SUPERIEURE ET PERPENDICULAIRE AU FOND %s :\n'%Lnf1[i] - if itots<3 : message=message+' Augmenter PREC_NORM dans DEFI_FOND_FISS \n' - else : message=message+' Augmenter ABSC_CURV_MAXI' - if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: message=message+' OU VERIFIER LES TANGENTES EXTREMITES' - UTMESS('A',macro, message) + UTMESS('A+','RUPTURE0_22',valk=Lnf1[i]) + if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: UTMESS('A+','RUPTURE0_23') + if itots<3 : UTMESS('A','RUPTURE0_24') + else : UTMESS('A','RUPTURE0_25') elif (SYME_CHAR=='SANS') and (NBTRLI < 3) : - message= 'IL MANQUE DES POINTS DANS LE PLAN DEFINI PAR LA LEVRE \n' - message=message+'INFERIEURE ET PERPENDICULAIRE AU FOND %s :\n'%Lnf1[i] - if itoti<3 : message=message+' Augmenter PREC_NORM dans DEFI_FOND_FISS \n' - else : message=message+' Augmenter ABSC_CURV_MAXI' - if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: message=message+' OU VERIFIER LES TANGENTES EXTREMITES' - UTMESS('A',macro, message) + UTMESS('A+','RUPTURE0_26',valk=Lnf1[i]) + if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: UTMESS('A+','RUPTURE0_23') + if itoti<3 : UTMESS('A','RUPTURE0_24') + else :UTMESS('A','RUPTURE0_25') +# UTMESS('A','RUPTURE0_23') else : Lnosup[Nbnofo] = Tmpsup if SYME_CHAR=='SANS' : Lnoinf[Nbnofo] = Tmpinf Lnofon.append(Lnf1[i]) Nbnofo = Nbnofo+1 if Nbnofo == 0 : - message= 'CALCUL POSSIBLE POUR AUCUN NOEUD DU FOND :' - message=message+' VERIFIER LES DONNEES' - UTMESS('F',macro, message) + UTMESS('F','RUPTURE0_30') #------------- Cas X-FEM --------------------------------- elif FISSURE : MAILLAGE = args['MAILLAGE'] DTAN_ORIG = args['DTAN_ORIG'] DTAN_EXTR = args['DTAN_EXTR'] + dmax = PREC_VIS_A_VIS * ABSC_CURV_MAXI #Projection du resultat sur le maillage lineaire initial MOD = aster.getvectjev(string.ljust(RESULTAT.nom,19)+'.MODL ') - if MOD==None : UTMESS('F', macro, 'PROBLEME A LA RECUPERATION DU MODELE DANS LA SD RESULTAT FOURNIE') - MOD = map(string.rstrip,MOD) - MODEL = self.jdc.sds_dict[MOD[0]] - __MODLINE=AFFE_MODELE(MAILLAGE=MAILLAGE, + if MOD==None : UTMESS('F','RUPTURE0_18') + MODEL = self.jdc.sds_dict[MOD[0].rstrip()] + xcont = MODEL.xfem.XFEM_CONT.get() + if xcont[0] == 0 : + __RESX = RESULTAT +# Si XFEM + contact : il faut reprojeter sur le maillage lineaire + if xcont[0] != 0 : + __MODLINE=AFFE_MODELE(MAILLAGE=MAILLAGE, AFFE=(_F(TOUT='OUI', PHENOMENE='MECANIQUE', MODELISATION=MODELISATION,),),); - __RESLIN=PROJ_CHAMP(METHODE='ELEM',TYPE_CHAM='NOEU',NOM_CHAM='DEPL', + __RESX=PROJ_CHAMP(METHODE='ELEM',TYPE_CHAM='NOEU',NOM_CHAM='DEPL', RESULTAT=RESULTAT, MODELE_1=MODEL, MODELE_2=__MODLINE, ); #Recuperation des coordonnees des points du fond de fissure (x,y,z,absc_curv) - Listfo = aster.getvectjev(string.ljust(FISSURE.nom,8)+'.FONDFISS ') + Listfo = FISSURE.FONDFISS.get() Nbfond = len(Listfo)/4 -# Calcul des normales a chaque point du fond - v1 = array(VECT_K1) - v1 = v1/sqrt(v1[0]**2+v1[1]**2+v1[2]**2) - v1x = aster.getvectjev(string.ljust(FISSURE.nom,8)+'.GRLNNO .VALE ')[0:3] - v1x = array(v1x) - verif = dot(transpose(v1),v1x) - if verif < 0 : v1 = -v1 - if abs(verif) < 0.9 : - message= 'DIFFERENCE ENTRE LE VECTEUR VECT_K1 ET LA NORMALE AU PLAN DE LA FISSURE %s.\n'%FISSURE.nom - message=message+'ON CONTINUE AVEC LA NORMALE AU PLAN : (%f,%f,%f).'%(v1x[0],v1x[1],v1x[2]) - UTMESS('A',macro, message) - v1 = v1x +# Calcul de la direction de propagation en chaque point du fond + VP = [None]*Nbfond VN = [None]*Nbfond absfon = [0,] - i = 0 - if MODELISATION=='3D' : - if DTAN_ORIG != None : - VN[i] = array(DTAN_ORIG) - else : + Vpropa = FISSURE.BASEFOND.get() +# Cas fissure non necessairement plane + if VECT_K1 == None : + i = 0 + if MODELISATION=='3D' : + if DTAN_ORIG != None : + VP[0] = array(DTAN_ORIG) + VP[0] = VP[0]/sqrt(VP[0][0]**2+VP[0][1]**2+VP[0][2]**2) + VN[0] = array([Vpropa[0],Vpropa[1],Vpropa[2]]) + verif = dot(transpose(VP[0]),VN[0]) + if abs(verif) > 0.01: + UTMESS('A','RUPTURE1_33',valr=[VN[0][0],VN[0][1],VN[0][2]]) + else : + VN[0] = array([Vpropa[0],Vpropa[1],Vpropa[2]]) + VP[0] = array([Vpropa[3+0],Vpropa[3+1],Vpropa[3+2]]) + for i in range(1,Nbfond-1): + Pfon1 = array([Listfo[4*(i-1)],Listfo[4*(i-1)+1],Listfo[4*(i-1)+2]]) + Pfon2 = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]]) + absf = sqrt(dot(transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1] + absfon.append(absf) + VN[i] = array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]]) + VP[i] = array([Vpropa[3+6*i],Vpropa[3+6*i+1],Vpropa[3+6*i+2]]) + verif = dot(transpose(VN[i]),VN[i-1]) + if abs(verif) < 0.98: + UTMESS('A','RUPTURE1_35',vali=[i-1,i]) + i = Nbfond-1 + Pfon1 = array([Listfo[4*(i-1)],Listfo[4*(i-1)+1],Listfo[4*(i-1)+2]]) Pfon2 = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]]) - Pfon3 = array([Listfo[4*(i+1)],Listfo[4*(i+1)+1],Listfo[4*(i+1)+2]]) - VT = (Pfon3 - Pfon2)/sqrt(dot(transpose(Pfon3-Pfon2),Pfon3-Pfon2)) - VN[0] = array(cross_product(VT,v1)) - for i in range(1,Nbfond-1): + absf = sqrt(dot(transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1] + absfon.append(absf) + if DTAN_EXTR != None : + VP[i] = array(DTAN_EXTR) + VN[i] = array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]]) + verif = dot(transpose(VP[i]),VN[0]) + if abs(verif) > 0.01: + UTMESS('A','RUPTURE1_34',valr=[VN[i][0],VN[i][1],VN[i][2]]) + else : + VN[i] = array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]]) + VP[i] = array([Vpropa[3+6*i],Vpropa[3+6*i+1],Vpropa[3+6*i+2]]) + else : + for i in range(0,Nbfond): + VP[i] = array([Vpropa[2+4*i],Vpropa[3+4*i],0.]) + VN[i] = array([Vpropa[0+4*i],Vpropa[1+4*i],0.]) +# Cas fissure plane (VECT_K1 donne) + if VECT_K1 != None : + v1 = array(VECT_K1) + v1 = v1/sqrt(v1[0]**2+v1[1]**2+v1[2]**2) + v1 = array(VECT_K1) + i = 0 + if MODELISATION=='3D' : +# Sens du vecteur VECT_K1 + v1x =array([Vpropa[0],Vpropa[1],Vpropa[2]]) + verif = dot(transpose(v1),v1x) + if verif < 0 : v1 = -v1 + VN = [v1]*Nbfond + if DTAN_ORIG != None : + VP[i] = array(DTAN_ORIG) + VP[i] = VP[i]/sqrt(VP[i][0]**2+VP[i][1]**2+VP[i][2]**2) + verif = dot(transpose(VP[i]),VN[0]) + if abs(verif) > 0.01: + UTMESS('A','RUPTURE1_36') + else : + Pfon2 = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]]) + Pfon3 = array([Listfo[4*(i+1)],Listfo[4*(i+1)+1],Listfo[4*(i+1)+2]]) + VT = (Pfon3 - Pfon2)/sqrt(dot(transpose(Pfon3-Pfon2),Pfon3-Pfon2)) + VP[0] = array(cross_product(VT,v1)) + VNi = array([Vpropa[3],Vpropa[4],Vpropa[5]]) + verif = dot(transpose(VP[i]),VNi) + if abs(verif) < 0.99: + vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],] + UTMESS('A','RUPTURE0_32',vali=[i],valr=vv) + for i in range(1,Nbfond-1): + Pfon1 = array([Listfo[4*(i-1)],Listfo[4*(i-1)+1],Listfo[4*(i-1)+2]]) + Pfon2 = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]]) + Pfon3 = array([Listfo[4*(i+1)],Listfo[4*(i+1)+1],Listfo[4*(i+1)+2]]) + absf = sqrt(dot(transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1] + absfon.append(absf) + VT = (Pfon3 - Pfon2)/sqrt(dot(transpose(Pfon3-Pfon2),Pfon3-Pfon2)) + VT = VT+(Pfon2 - Pfon1)/sqrt(dot(transpose(Pfon2-Pfon1),Pfon2-Pfon1)) + VP[i] = array(cross_product(VT,v1)) + VP[i] = VP[i]/sqrt(dot(transpose(VP[i]),VP[i])) + VNi = array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]]) + verif = dot(transpose(VN[i]),VNi) + if abs(verif) < 0.99: + vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],] + UTMESS('A','RUPTURE0_32',vali=[i],valr=vv) + i = Nbfond-1 Pfon1 = array([Listfo[4*(i-1)],Listfo[4*(i-1)+1],Listfo[4*(i-1)+2]]) Pfon2 = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]]) - Pfon3 = array([Listfo[4*(i+1)],Listfo[4*(i+1)+1],Listfo[4*(i+1)+2]]) absf = sqrt(dot(transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1] absfon.append(absf) - VT = (Pfon3 - Pfon2)/sqrt(dot(transpose(Pfon3-Pfon2),Pfon3-Pfon2)) - VT = VT+(Pfon2 - Pfon1)/sqrt(dot(transpose(Pfon2-Pfon1),Pfon2-Pfon1)) - VN[i] = array(cross_product(VT,v1)) - VN[i] = VN[i]/sqrt(dot(transpose(VN[i]),VN[i])) - i = Nbfond-1 - Pfon1 = array([Listfo[4*(i-1)],Listfo[4*(i-1)+1],Listfo[4*(i-1)+2]]) - Pfon2 = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]]) - absf = sqrt(dot(transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1] - absfon.append(absf) - if DTAN_EXTR != None : - VN[i] = array(DTAN_EXTR) - else : - VT = (Pfon2 - Pfon1)/sqrt(dot(transpose(Pfon2-Pfon1),Pfon2-Pfon1)) - VN[i] = array(cross_product(VT,v1)) - else : + if DTAN_EXTR != None : + VP[i] = array(DTAN_EXTR) + VP[i] = VP[i]/sqrt(VP[i][0]**2+VP[i][1]**2+VP[i][2]**2) + verif = dot(transpose(VP[i]),VN[i]) + if abs(verif) > 0.01: + UTMESS('A','RUPTURE1_37') + else : + VT = (Pfon2 - Pfon1)/sqrt(dot(transpose(Pfon2-Pfon1),Pfon2-Pfon1)) + VP[i] = array(cross_product(VT,v1)) + VNi = array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]]) + verif = dot(transpose(VN[i]),VNi) + if abs(verif) < 0.99 : + vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],] + UTMESS('A','RUPTURE0_32',vali=[i],valr=vv) + else : VT = array([0.,0.,1.]) - VN[i] = array(cross_product(v1,VT)) + for i in range(0,Nbfond): + VP[i] = array(cross_product(v1,VT)) + VN[i] = v1 + VNi = array([Vpropa[0+4*i],Vpropa[1+4*i],0.]) + verif = dot(transpose(VN[i]),VNi) + if abs(verif) < 0.99 : + vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],] + UTMESS('A','RUPTURE0_32',vali=[i],valr=vv) #Sens de la tangente if MODELISATION=='3D' : i = Nbfond/2 else : i = 0 - Po = array([Listfo[4*(i-1)],Listfo[4*(i-1)+1],Listfo[4*(i-1)+2]]) - Porig = Po + ABSC_CURV_MAXI*VN[i] - Pextr = Po - ABSC_CURV_MAXI*VN[i] - __Tabg = MACR_LIGN_COUPE(RESULTAT=__RESLIN,NOM_CHAM='DEPL', + Po = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]]) + Porig = Po + ABSC_CURV_MAXI*VP[i] + Pextr = Po - ABSC_CURV_MAXI*VP[i] + __Tabg = MACR_LIGN_COUPE(RESULTAT=__RESX,NOM_CHAM='DEPL', LIGN_COUPE=_F(NB_POINTS=3,COOR_ORIG=(Porig[0],Porig[1],Porig[2],), - TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),),); + TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]), + DISTANCE_MAX=dmax),); tmp=__Tabg.EXTR_TABLE() test = getattr(tmp,'H1X').values() if test==[None]*3 : - message = 'PROBLEME DANS LA RECUPERATION DU SAUT DE DEPLACEMENT SUR LES LEVRES :\n ' - message=message+'VERIFIER QUE LE RESULTAT CORRESPOND BIEN A UN CALCUL SUR DES ELEMENT X-FEM ET QUE\n ' - message=message+'LE MAILLAGE FOURNI EST BIEN LE MAILLAGE LINEAIRE INITIAL' - UTMESS('F',macro, message) + UTMESS('F','RUPTURE0_33') if test[0]!=None : sens = 1 else : @@ -612,30 +672,42 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, TSaut = [None]*Nbfond NB_NOEUD_COUPE = args['NB_NOEUD_COUPE'] if NB_NOEUD_COUPE < 3 : - message = 'LE NOMBRE DE NOEUDS NB_NOEUD_COUPE DOIT ETRE SUPERIEUR A 3 : ON PREND LA VALEUR PAR DEFAUT' - UTMESS('A', macro, message) + UTMESS('A','RUPTURE0_34') NB_NOEUD_COUPE = 5 for i in range(Nbfond): Porig = array([Listfo[4*i],Listfo[4*i+1],Listfo[4*i+2]]) - if i==0 and DTAN_ORIG!=None : Pextr = Porig - ABSC_CURV_MAXI*VN[i] - elif i==(Nbfond-1) and DTAN_EXTR!=None : Pextr = Porig - ABSC_CURV_MAXI*VN[i] - else : Pextr = Porig + ABSC_CURV_MAXI*VN[i]*sens - TSaut[i] = MACR_LIGN_COUPE(RESULTAT=__RESLIN,NOM_CHAM='DEPL', + if i==0 and DTAN_ORIG!=None : Pextr = Porig - ABSC_CURV_MAXI*VP[i] + elif i==(Nbfond-1) and DTAN_EXTR!=None : Pextr = Porig - ABSC_CURV_MAXI*VP[i] + else : Pextr = Porig + ABSC_CURV_MAXI*VP[i]*sens + TSaut[i] = MACR_LIGN_COUPE(RESULTAT=__RESX,NOM_CHAM='DEPL', LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],), - TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),),); + TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]), + DISTANCE_MAX=dmax),); Nbnofo = Nbfond - DETRUIRE(CONCEPT=_F(NOM=__MODLINE),INFO=1) - DETRUIRE(CONCEPT=_F(NOM=__RESLIN),INFO=1) + if xcont[0] != 0 : + DETRUIRE(CONCEPT=_F(NOM=__MODLINE),INFO=1) + DETRUIRE(CONCEPT=_F(NOM=__RESX),INFO=1) + if INFO==2 : + mcfact=[] + mcfact.append(_F(PARA='PT_FOND',LISTE_I=range(Nbfond))) + mcfact.append(_F(PARA='VN_X' ,LISTE_R=[VN[i][0] for i in range(Nbfond)])) + mcfact.append(_F(PARA='VN_Y' ,LISTE_R=[VN[i][1] for i in range(Nbfond)])) + mcfact.append(_F(PARA='VN_Z' ,LISTE_R=[VN[i][2] for i in range(Nbfond)])) + mcfact.append(_F(PARA='VP_X' ,LISTE_R=[VP[i][0] for i in range(Nbfond)])) + mcfact.append(_F(PARA='VP_Y' ,LISTE_R=[VP[i][1] for i in range(Nbfond)])) + mcfact.append(_F(PARA='VP_Z' ,LISTE_R=[VP[i][2] for i in range(Nbfond)])) + __resu2=CREA_TABLE(LISTE=mcfact,TITRE=' VECTEUR NORMAL A LA FISSURE - DIRECTION DE PROPAGATION') + aster.affiche('MESSAGE',__resu2.EXTR_TABLE().__repr__()) + DETRUIRE(CONCEPT=_F(NOM=__resu2),INFO=1) else : - Nbnofo = 1 - + Nbnofo = 1 + # ----------Recuperation de la temperature au fond ------------- if Tempe3D : - resuth = map(string.rstrip,resuth) - Rth = self.jdc.sds_dict[resuth[0]] + Rth = self.jdc.sds_dict[resuth] __TEMP=POST_RELEVE_T(ACTION=_F(INTITULE='Temperature fond de fissure', NOEUD=Lnofon,TOUT_CMP='OUI', RESULTAT=Rth,NOM_CHAM='TEMP',TOUT_ORDRE='OUI', @@ -703,12 +775,12 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, DETRUIRE(CONCEPT=_F(NOM=__TINF),INFO=1) else : tabinf=TABL_DEPL_INF.EXTR_TABLE() - if TABL_DEPL_INF==None : UTMESS('F', macro, 'TABL_DEPL_SUP et TABL_DEPL_INF sont obligatoires si SYME_CHAR=SANS') + if TABL_DEPL_INF==None : UTMESS('F','RUPTURE0_35') veri_tab(tabinf,TABL_DEPL_INF.nom,ndim) Li = [string.ljust(Lnoinf[ino][i],8) for i in range(len(Lnoinf[ino]))] tabinf=tabinf.NOEUD==Li else : - if TABL_DEPL_INF==None : UTMESS('F', macro, 'TABL_DEPL_SUP et TABL_DEPL_INF sont obligatoires si SYME_CHAR=SANS') + if TABL_DEPL_INF==None : UTMESS('F','RUPTURE0_35') tabinf=TABL_DEPL_INF.EXTR_TABLE() veri_tab(tabinf,TABL_DEPL_INF.nom,ndim) @@ -732,13 +804,12 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, if type(NUME_ORDRE) not in EnumTypes : NUME_ORDRE=(NUME_ORDRE,) l_ord=list(NUME_ORDRE) elif LIST_ORDRE !=None : - l_ord= aster.getvectjev(string.ljust(LIST_ORDRE.nom,19)+'.VALE') + l_ord = LIST_ORDRE.VALE.get() l_inst = [] for ord in l_ord : if ord in l_ord_tab : l_inst.append(d_ord_tab[ord]) else : - message ='LE NUMERO D ORDRE %i N A PAS ETE ETE TROUVE DANS LA TABLE\n'%ord - UTMESS('F', macro, message) + UTMESS('F','RUPTURE0_37',vali=ord) PRECISION = 1.E-6 CRITERE='ABSOLU' elif INST !=None or LIST_INST !=None : @@ -752,11 +823,9 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, if CRITERE=='RELATIF' and inst!=0.: match=[x for x in l_inst_tab if abs((inst-x)/inst)=2 : - message = 'PLUSIEURS INSTANTS TROUVES DANS LA TABLE POUR L INSTANT %f\n'%inst - UTMESS('F', macro, message) + UTMESS('F','RUPTURE0_39',valr=inst) else : l_inst=l_inst_tab PRECISION = 1.E-6 @@ -792,7 +861,9 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, if not FOND_FISS : refs=copy.copy(abscs) refs.sort() - if refs!=abscs : UTMESS('F', macro, 'ABSC_CURV NON CROISSANTS POUR TABL_DEPL_INF') + if refs!=abscs : + mctabl='TABL_DEPL_INF' + UTMESS('F','RUPTURE0_40',valk=mctabl) if ABSC_CURV_MAXI!=None : rmax = ABSC_CURV_MAXI else : rmax = abscs[-1] precv = PREC_VIS_A_VIS @@ -834,17 +905,19 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, if not FOND_FISS : refi=copy.copy(absci) refi.sort() - if refi!=absci : UTMESS('F', macro, 'ABSC_CURV NON CROISSANTS POUR TABL_DEPL_SUP') + if refi!=absci : + mctabl='TABL_DEPL_SUP' + UTMESS('F','RUPTURE0_40',valk=mctabl) refic=[x for x in refi if xprecn : UTMESS('F', macro, 'LES NOEUDS NE SONT PAS EN VIS_A_VIS') + if d>precn : UTMESS('F','RUPTURE0_44') if FOND_FISS and not RESULTAT :#tri des noeuds avec abscisse Pfon = array([d_coor[Lnofon[ino]][0],d_coor[Lnofon[ino]][1],d_coor[Lnofon[ino]][2]]) @@ -883,13 +956,10 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, # --- CAS FISSURE X-FEM --- if FISSURE : - nbval = NB_NOEUD_COUPE H1 = getattr(tabsupi,'H1X').values() + nbval = len(H1) if H1[-1]==None : - message = 'PROBLEME DANS LA RECUPERATION DU SAUT DE DEPLACEMENT SUR LES LEVRES :\n ' - message=message+'VERIFIER QUE LE RESULTAT CORRESPOND BIEN A UN CALCUL SUR DES ELEMENT X-FEM ET QUE\n ' - message=message+'LE MAILLAGE FOURNI EST BIEN LE MAILLAGE LINEAIRE INITIAL' - UTMESS('F',macro, message) + UTMESS('F','RUPTURE0_33') H1 = complete(H1) E1 = getattr(tabsupi,'E1X').values() E1 = complete(E1) @@ -908,10 +978,10 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, # --- TESTS NOMBRE DE NOEUDS--- if nbval<3 : - message= 'IL FAUT AU MOINS TROIS NOEUDS DANS LE PLAN DEFINI PAR LES LEVRES ET PERPENDICULAIRE AU FOND DE FISSURE' - if FOND_FISS : message=message+'Noeud %.s \n'%Lnofon[ino] - message=message+' : augmenter ABSC_CURV_MAXI\n' - UTMESS('F',macro, message) + UTMESS('F+','RUPTURE0_46') + if FOND_FISS : + UTMESS('F+','RUPTURE0_47',valk=Lnofon[ino]) + UTMESS('F','RUPTURE0_25') # ---------- CALCUL PROP. MATERIAU AVEC TEMPERATURE ----------- if Tempe3D : @@ -938,7 +1008,8 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, # 3 : VECTEUR TANGENT AU FOND DE FISSURE EN M # if FISSURE : - v2 = VN[ino] + v2 = VP[ino] + v1 = VN[ino] elif SYME_CHAR=='SANS' : vo = array([( coxs[-1]+coxi[-1] )/2.,( coys[-1]+coyi[-1] )/2.,( cozs[-1]+cozi[-1] )/2.]) ve = array([( coxs[0 ]+coxi[0 ] )/2.,( coys[0 ]+coyi[0 ] )/2.,( cozs[0 ]+cozi[0 ] )/2.]) @@ -959,10 +1030,7 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, dpls = asarray([dxs,dys,dzs]) dpls = matrixmultiply(pgl,dpls) if SYME_CHAR!='SANS' and abs(dpls[0][0]) > 1.e-10 : - message= 'DEPLACEMENT NORMAL DU NOEUD %s NON NUL'%Lnofon[ino] - message=message+' ET SYME_CHAR = %s :\n'%SYME_CHAR - message=message+' VERIFIER LES CONDITIONS AUX LIMITES ET VECT_K1.' - UTMESS('A',macro, message) + UTMESS('A','RUPTURE0_49',valk=[Lnofon[ino],SYME_CHAR]) if FISSURE : saut=dpls elif SYME_CHAR=='SANS' : @@ -1089,6 +1157,8 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT, if FISSURE and MODELISATION=='3D': mcfact.append(_F(PARA='PT_FOND',LISTE_I=[ino+1,]*3)) mcfact.append(_F(PARA='ABSC_CURV',LISTE_R=[absfon[ino],]*3)) + if FISSURE and MODELISATION!='3D' and Nbfond!=1 : + mcfact.append(_F(PARA='PT_FOND',LISTE_I=[ino+1,]*3)) mcfact.append(_F(PARA='METHODE',LISTE_I=(1,2,3))) mcfact.append(_F(PARA='K1_MAX' ,LISTE_R=kg[0].tolist() )) mcfact.append(_F(PARA='K1_MIN' ,LISTE_R=kg[1].tolist() )) diff --git a/Aster/Cata/cataSTA9/Macro/post_k_trans_ops.py b/Aster/Cata/cataSTA9/Macro/post_k_trans_ops.py index 6295395b..54b71a97 100644 --- a/Aster/Cata/cataSTA9/Macro/post_k_trans_ops.py +++ b/Aster/Cata/cataSTA9/Macro/post_k_trans_ops.py @@ -1,4 +1,4 @@ -#@ MODIF post_k_trans_ops Macro DATE 31/10/2006 AUTEUR REZETTE C.REZETTE +#@ MODIF post_k_trans_ops Macro DATE 22/01/2008 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -26,7 +26,7 @@ def post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE, import aster import string from Accas import _F - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS from types import ListType, TupleType from Utilitai.Table import Table, merge EnumTypes = (ListType, TupleType) @@ -117,9 +117,7 @@ def post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE, if nmodtr != n_mode : n_mode = min(nmodtr,n_mode) - message = 'NOMBRE DE MODES DIFFERENT ENTRE LA BASE MODALE' - message = message +'ET %s : ON PREND LE MINIMUM DES DEUX (%i)\n'%(nomresu,n_mode) - UTMESS('A', macro, message) + UTMESS('A','RUPTURE0_50',valk=nomresu,vali=n_mode) # # Traitement des mots clés ORDRE/INST/LIST_INST et LIST_ORDRE @@ -151,8 +149,7 @@ def post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE, l_ord.append(ord) l_inst.append(d_ins[ord][0]) else : - message = 'LE NUMERO D ORDRE %i N APPARTIENT PAS AU RESULTAT %s'%(ord,nomresu) - UTMESS('A', macro, message) + UTMESS('A','RUPTURE0_51',vali=ord,valk=nomresu) elif LIST_INST or INST : CRITERE = args['CRITERE'] PRECISION = args['PRECISION'] @@ -165,11 +162,9 @@ def post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE, if CRITERE=='RELATIF' and ins!=0.: match=[x for x in l0_inst if abs((ins-x)/ins)=2 : - message = 'PLUSIEURS INSTANTS TROUVES DANS LA TABLE POUR L INSTANT %f\n'%ins - UTMESS('A', macro, message) + UTMESS('A','RUPTURE0_39',valr=ins) else : l_inst.append(match[0]) l_ord.append(d_ord[match[0]][0]) @@ -177,7 +172,7 @@ def post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE, l_ord = l0_ord l_inst = l0_inst nbarch = len(l_ord) - if nbarch ==0 : UTMESS('F', macro, 'AUCUN INSTANT OU NUMERO D ORDRE TROUVE') + if nbarch ==0 : UTMESS('F','RUPTURE0_54') # diff --git a/Aster/Cata/cataSTA9/Macro/reca_algo.py b/Aster/Cata/cataSTA9/Macro/reca_algo.py index 4537a0fa..249c8a79 100644 --- a/Aster/Cata/cataSTA9/Macro/reca_algo.py +++ b/Aster/Cata/cataSTA9/Macro/reca_algo.py @@ -1,4 +1,4 @@ -#@ MODIF reca_algo Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE +#@ MODIF reca_algo Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # RESPONSABLE ASSIRE A.ASSIRE # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -23,6 +23,7 @@ import Numeric, MLab from Numeric import take, size import copy, os import LinearAlgebra +from externe_mess import UTMESS try: import aster @@ -31,16 +32,6 @@ try: from Accas import _F except: pass -try: - import Utilitai.Utmess - from Utilitai.Utmess import UTMESS -except ImportError: - def UTMESS(code,sprg,texte): - fmt='\n <%s> <%s> %s\n\n' - print fmt % (code,sprg,texte) - if code=='F': sys.exit() - - def calcul_gradient(A,erreur): grad = Numeric.dot(Numeric.transpose(A),erreur) diff --git a/Aster/Cata/cataSTA9/Macro/reca_calcul_aster.py b/Aster/Cata/cataSTA9/Macro/reca_calcul_aster.py index 17609ead..91f78f37 100644 --- a/Aster/Cata/cataSTA9/Macro/reca_calcul_aster.py +++ b/Aster/Cata/cataSTA9/Macro/reca_calcul_aster.py @@ -1,4 +1,4 @@ -#@ MODIF reca_calcul_aster Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE +#@ MODIF reca_calcul_aster Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # RESPONSABLE ASSIRE A.ASSIRE # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -28,15 +28,7 @@ debug = False import copy, Numeric, types, os, sys, pprint, math from glob import glob - -try: - import Utilitai.Utmess - from Utilitai.Utmess import UTMESS -except ImportError: - def UTMESS(code,sprg,texte): - fmt='\n <%s> <%s> %s\n\n' - print fmt % (code,sprg,texte) - if code=='F': sys.exit() +from externe_mess import UTMESS from Utilitai.System import ExecCommand @@ -525,12 +517,14 @@ Message: UTMESS('F', nompro, message) try: - ier, message, table_lue = lecture_table(texte, 1, ' ') + table_lue = lecture_table(texte, 1, ' ') list_para = table_lue.para tab_lue = table_lue.values() except Exception, err: ier=1 message = "Impossible de recuperer les resultats de calcul esclave (lecture des tables)!\nMessage:\n" + str(err) + else: + ier=0 if ier!=0 : UTMESS('F', nompro, message) @@ -606,13 +600,14 @@ Message: UTMESS('F', nompro, message) try: - ier, message, table_lue = lecture_table(texte, 1, ' ') + table_lue = lecture_table(texte, 1, ' ') list_para = table_lue.para tab_lue = table_lue.values() except Exception, err: ier=1 message = "Impossible de recuperer les resultats de calcul esclave (lecture des tables)!\nMessage:\n" + str(err) - + else: + ier=0 if ier!=0 : UTMESS('F', nompro, message) diff --git a/Aster/Cata/cataSTA9/Macro/reca_controles.py b/Aster/Cata/cataSTA9/Macro/reca_controles.py index b9270705..b0daf6a7 100644 --- a/Aster/Cata/cataSTA9/Macro/reca_controles.py +++ b/Aster/Cata/cataSTA9/Macro/reca_controles.py @@ -1,4 +1,4 @@ -#@ MODIF reca_controles Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE +#@ MODIF reca_controles Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # RESPONSABLE ASSIRE A.ASSIRE # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -20,16 +20,7 @@ # ====================================================================== import string, copy, Numeric, types, os, sys, pprint - -try: - import Utilitai.Utmess - from Utilitai.Utmess import UTMESS -except ImportError: - def UTMESS(code,sprg,texte): - fmt='\n <%s> <%s> %s\n\n' - print fmt % (code,sprg,texte) - if code=='F': sys.exit() - +from externe_mess import UTMESS # Nom de la routine nompro = 'MACR_RECAL' diff --git a/Aster/Cata/cataSTA9/Macro/reca_interp.py b/Aster/Cata/cataSTA9/Macro/reca_interp.py index 4c60b3a0..73585f0c 100644 --- a/Aster/Cata/cataSTA9/Macro/reca_interp.py +++ b/Aster/Cata/cataSTA9/Macro/reca_interp.py @@ -1,4 +1,4 @@ -#@ MODIF reca_interp Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE +#@ MODIF reca_interp Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # RESPONSABLE ASSIRE A.ASSIRE # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -21,19 +21,11 @@ import os, sys, pprint import Numeric +from externe_mess import UTMESS try: import Macro except: pass -try: - import Utilitai.Utmess - from Utilitai.Utmess import UTMESS -except ImportError: - def UTMESS(code,sprg,texte): - fmt='\n <%s> <%s> %s\n\n' - print fmt % (code,sprg,texte) - if code=='F': sys.exit() - #=========================================================================================== diff --git a/Aster/Cata/cataSTA9/Macro/reca_message.py b/Aster/Cata/cataSTA9/Macro/reca_message.py index e20cb610..4a4061ca 100644 --- a/Aster/Cata/cataSTA9/Macro/reca_message.py +++ b/Aster/Cata/cataSTA9/Macro/reca_message.py @@ -1,4 +1,4 @@ -#@ MODIF reca_message Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE +#@ MODIF reca_message Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # RESPONSABLE ASSIRE A.ASSIRE # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -20,15 +20,7 @@ # ====================================================================== import os, Numeric - -try: - import Utilitai.Utmess - from Utilitai.Utmess import UTMESS -except: - def UTMESS(code,sprg,texte): - fmt='\n <%s> <%s> %s\n\n' - print fmt % (code,sprg,texte) - if code=='F': sys.exit() +from externe_mess import UTMESS #=========================================================================================== diff --git a/Aster/Cata/cataSTA9/Macro/reca_utilitaires.py b/Aster/Cata/cataSTA9/Macro/reca_utilitaires.py index c379670c..d5d7f94a 100644 --- a/Aster/Cata/cataSTA9/Macro/reca_utilitaires.py +++ b/Aster/Cata/cataSTA9/Macro/reca_utilitaires.py @@ -1,4 +1,4 @@ -#@ MODIF reca_utilitaires Macro DATE 16/05/2007 AUTEUR ASSIRE A.ASSIRE +#@ MODIF reca_utilitaires Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # RESPONSABLE ASSIRE A.ASSIRE # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -21,7 +21,7 @@ import Numeric, LinearAlgebra, copy, os, string, types, sys, glob from Numeric import take - +from externe_mess import UTMESS try: import Gnuplot except: pass @@ -29,14 +29,7 @@ except: pass try: from Cata.cata import INFO_EXEC_ASTER, DEFI_FICHIER, IMPR_FONCTION, DETRUIRE from Accas import _F - import Utilitai.Utmess - from Utilitai.Utmess import UTMESS -except ImportError: - def UTMESS(code,sprg,texte): - fmt='\n <%s> <%s> %s\n\n' - print fmt % (code,sprg,texte) - if code=='F': sys.exit() - +except : pass # ------------------------------------------------------------------------------ diff --git a/Aster/Cata/cataSTA9/Macro/stanley_ops.py b/Aster/Cata/cataSTA9/Macro/stanley_ops.py index 761b45fb..e8c0eab5 100644 --- a/Aster/Cata/cataSTA9/Macro/stanley_ops.py +++ b/Aster/Cata/cataSTA9/Macro/stanley_ops.py @@ -1,21 +1,21 @@ -#@ MODIF stanley_ops Macro DATE 12/09/2006 AUTEUR ASSIRE A.ASSIRE +#@ MODIF stanley_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== @@ -30,7 +30,7 @@ def stanley_ops(self,RESULTAT,MODELE,CHAM_MATER,CARA_ELEM,DISPLAY,**args): import aster from Accas import _F from Noyau.N_utils import AsType - from Utilitai.Utmess import UTMESS + from Utilitai.Utmess import UTMESS from Utilitai.UniteAster import UniteAster prev_onFatalError = aster.onFatalError() @@ -43,12 +43,12 @@ def stanley_ops(self,RESULTAT,MODELE,CHAM_MATER,CARA_ELEM,DISPLAY,**args): # Redefinition eventuelle du DISPLAY if DISPLAY: - UTMESS('I','STANLEY', 'Redefinition du DISPLAY vers : ' + DISPLAY) + UTMESS('I','STANLEY_1',valk=DISPLAY) os.environ['DISPLAY'] = DISPLAY # Mode validation de la non-regression if args['UNITE_VALIDATION']: - UTMESS('I','STANLEY', 'Stanley fonctionne en mode validation de non-regresion') + UTMESS('I','STANLEY_2') UL = UniteAster() FICHIER_VALID=UL.Nom(args['UNITE_VALIDATION']) else: @@ -56,12 +56,12 @@ def stanley_ops(self,RESULTAT,MODELE,CHAM_MATER,CARA_ELEM,DISPLAY,**args): # On ne lance Stanley que si la variable DISPLAY est définie if os.environ.has_key('DISPLAY'): - + import Stanley from Stanley import stanley if (RESULTAT and MODELE and CHAM_MATER): - _MAIL = aster.getvectjev( string.ljust(MODELE.nom,8) + '.MODELE .NOMA ' ) + _MAIL = aster.getvectjev( string.ljust(MODELE.nom,8) + '.MODELE .LGRF ' ) _MAIL = string.strip(_MAIL[0]) MAILLAGE = self.jdc.g_context[_MAIL] if CARA_ELEM: @@ -72,17 +72,7 @@ def stanley_ops(self,RESULTAT,MODELE,CHAM_MATER,CARA_ELEM,DISPLAY,**args): stanley.PRE_STANLEY(FICHIER_VALID) else: - UTMESS('A','STANLEY', - """Aucune variable d'environnement DISPLAY définie ! - STANLEY ne pourra pas fonctionner. On l'ignore. - - Si vous etes en Interactif, cochez le bouton Suivi Interactif - dans ASTK. - - Vous pouvez également préciser votre DISPLAY dans les arguments - de la commande STANLEY : - - STANLEY(DISPLAY='adresse_ip:0.0');""") + UTMESS('A','STANLEY_3',valk=['STANLEY']) aster.onFatalError(prev_onFatalError) diff --git a/Aster/Cata/cataSTA9/Macro/test_fichier_ops.py b/Aster/Cata/cataSTA9/Macro/test_fichier_ops.py index 35d34da1..62e7d02c 100644 --- a/Aster/Cata/cataSTA9/Macro/test_fichier_ops.py +++ b/Aster/Cata/cataSTA9/Macro/test_fichier_ops.py @@ -1,4 +1,4 @@ -#@ MODIF test_fichier_ops Macro DATE 22/05/2006 AUTEUR MCOURTOI M.COURTOIS +#@ MODIF test_fichier_ops Macro DATE 19/11/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -19,18 +19,52 @@ # ====================================================================== import sys -import os.path +import os import re -from math import floor, log10 -from types import StringType import md5 #------------------------------------------------------------------------------- -def test_fichier_ops(self, FICHIER, NB_CHIFFRE, EPSILON, VALE_K, INFO, **args): +class TestFichierError(Exception): + pass + +#------------------------------------------------------------------------------- +def convert(x): + return float(x) + +def f_SOMM(somme, lx): + return somme + sum([convert(x) for x in lx]) + +def f_SOMM_ABS(somme, lx): + return somme + sum([abs(convert(x)) for x in lx]) + +def f_MINI(val, lx): + return min(val, min([convert(x) for x in lx])) + +def f_MAXI(val, lx): + return max(val, max([convert(x) for x in lx])) + +def f_MINI_ABS(val, lx): + return min(val, min([abs(convert(x)) for x in lx])) + +def f_MAXI_ABS(val, lx): + return max(val, max([abs(convert(x)) for x in lx])) + +dict_func_test = { + 'SOMM' : f_SOMM, + 'SOMM_ABS' : f_SOMM_ABS, + 'MINI' : f_MINI, + 'MAXI' : f_MAXI, + 'MINI_ABS' : f_MINI_ABS, + 'MAXI_ABS' : f_MAXI_ABS, +} + +#------------------------------------------------------------------------------- +def test_fichier_ops(self, FICHIER, NB_VALE, VALE, VALE_K, TYPE_TEST, + CRITERE, PRECISION, INFO, **kwargs): """ - Macro TEST_FICHIER permettant de tester la non-regression d'un fichier - 'a une tolerance' pres pour les nombres reels en calculant - le md5sum. + Macro permettant de tester la non-regression d'un fichier. + On teste le nombre de réels présents, et, facultativement, la + somme de ces nombres et le texte du fichier. """ ier = 0 # La macro compte pour 1 dans la numerotation des commandes @@ -45,233 +79,235 @@ def test_fichier_ops(self, FICHIER, NB_CHIFFRE, EPSILON, VALE_K, INFO, **args): import aster from Accas import _F - from Macro.test_fichier_ops import md5file - from Utilitai.Utmess import UTMESS - - # vérifie la syntaxe des expressions régulières fournies - l_regexp = [] - if args['EXPR_IGNORE']: - if type(args['EXPR_IGNORE']) is StringType: - lexp = [args['EXPR_IGNORE']] - else: - lexp = args['EXPR_IGNORE'] - for exp in lexp: - try: - obj = re.compile(exp) - except re.error, s: - UTMESS('F', 'TEST_FICHIER', - ' %s pour %s' % (str(s), repr(exp))) - else: - l_regexp.append(exp) + from Utilitai.Utmess import UTMESS is_ok = 0 # vérifier que le fichier a été fermé tinfo__ = INFO_EXEC_ASTER(LISTE_INFO='ETAT_UNITE', FICHIER=FICHIER) - - if tinfo__['ETAT_UNITE', 1].find('OUVERT')>-1: - UTMESS('A', 'TEST_FICHIER', - "LE FICHIER N'A PAS ETE FERME :\n%s" % FICHIER) + if tinfo__['ETAT_UNITE', 1].find('OUVERT') > -1: + UTMESS('S','TEST0_2',valk=FICHIER) - # fichier correctement fermé - else: - # calcule le md5sum du fichier - ier, mdsum = md5file(FICHIER, NB_CHIFFRE, EPSILON, l_regexp, INFO) - if ier != 0: - if ier == 4: - texte_erreur = 'Fichier inexistant : '+FICHIER - else: - texte_erreur = 'Erreur dans md5file, code retour = '+str(ier) - texte_erreur = ' '+texte_erreur - # aujourd'hui, je ne sais pas déclencher autre chose que ... - self.cr.fatal(texte_erreur) - return ier - - # comparaison a la reference - if INFO > 0 : - aster.affiche('MESSAGE', ' %-20s : %32s\n' % ('REFERENCE', VALE_K)) - - if mdsum == VALE_K: - is_ok = 1 + # lecture du fichier + if not os.path.isfile(FICHIER): + UTMESS('S', 'TEST0_3', valk=FICHIER) + fileobj = open(FICHIER, 'r') + + # filtre par expression régulière + try: + fileobj = regexp_filter(fileobj, kwargs['EXPR_IGNORE']) + except TestFichierError, (idmess, valk): + UTMESS('S', idmess, valk=valk) + + # calcule le nombre de réels et la somme ou min/max + nbval, valeur, md5sum = test_iter(fileobj, function=dict_func_test[TYPE_TEST], verbose=(INFO > 1)) + fileobj.close() # produit le TEST_TABLE - tab1__ = CREA_TABLE(LISTE=(_F(PARA='TEST', - TYPE_K='K8', - LISTE_K='VALEUR ',), - _F(PARA='BOOLEEN', - LISTE_I=is_ok,),),) - if args['REFERENCE'] == 'NON_REGRESSION': - TEST_TABLE(TABLE=tab1__, - FILTRE=_F(NOM_PARA='TEST', - VALE_K='VALEUR ',), - NOM_PARA='BOOLEEN', - VALE_I=1, - PRECISION=1.e-3, - CRITERE='ABSOLU', - REFERENCE=args['REFERENCE'], - VERSION=args['VERSION'],) + md5ref = VALE_K or 'non testé' + is_ok = int(md5sum == md5ref) + tab1__ = CREA_TABLE(LISTE=(_F(PARA='NBVAL', LISTE_I=nbval,), + _F(PARA='VALEUR', LISTE_R=valeur,), + _F(PARA='TEXTE', LISTE_I=is_ok),),) + if VALE is not None: + sVALE = '%20.13e' % VALE else: + sVALE = 'non testé' + UTMESS('I', 'TEST0_4', vali=(nbval, NB_VALE), valr=valeur, valk=(md5sum, md5ref, FICHIER, sVALE)) + + kwopt = { 'REFERENCE' : kwargs['REFERENCE'], } + if kwargs['REFERENCE'] == 'NON_REGRESSION': + kwopt['VERSION'] = kwargs['VERSION'] + + TEST_TABLE(TABLE=tab1__, + NOM_PARA='NBVAL', + VALE_I=NB_VALE, + CRITERE='ABSOLU', + PRECISION=0, + **kwopt) + + if VALE: + TEST_TABLE(TABLE=tab1__, + NOM_PARA='VALEUR', + VALE=VALE, + CRITERE=CRITERE, + PRECISION=PRECISION, + **kwopt) + + if VALE_K: TEST_TABLE(TABLE=tab1__, - FILTRE=_F(NOM_PARA='TEST', - VALE_K='VALEUR ',), - NOM_PARA='BOOLEEN', - VALE_I=1, - PRECISION=1.e-3, + NOM_PARA='TEXTE', + VALE_I=int(True), + PRECISION=0, CRITERE='ABSOLU', - REFERENCE=args['REFERENCE'],) + **kwopt) DETRUIRE(CONCEPT=_F(NOM=('tinfo__','tab1__'),), ALARME='NON',INFO=1,) return ier +#------------------------------------------------------------------------------- +def regexp_filter(file_in, regexp_ignore, debug=False): + """Filtre le fichier fourni (file descriptor) en utilisant les + expressions régulières fournies. + On retourne l'objet file vers le fichier modifié (ou non). + """ + if not regexp_ignore: # None or [] + return file_in + # vérification des expressions régulières + if type(regexp_ignore) not in (list, tuple): + regexp_ignore = [regexp_ignore,] + l_regexp = [] + for exp in regexp_ignore: + try: + obj = re.compile(exp) + except re.error, s: + raise TestFichierError, ('TEST0_1', (s, str(exp))) + else: + l_regexp.append(obj) + # filtre du fichier + file_out = os.tmpfile() + file_in.seek(0) + for i, line in enumerate(file_in): + if debug: + print 'LIGNE', i, + keep = True + for exp in l_regexp: + if exp.search(line): + keep = False + if debug: + print ' >>>>>>>>>> IGNOREE <<<<<<<<<<' + break + if keep: + file_out.write(line) + if debug: + print + file_out.seek(0) + return file_out + #------------------------------------------------------------------------------- -def sign(x): - return int(x/abs(x)) - -def _round(x, n, exp): - v = x * 10**(-exp+n) - val = int(v + sign(x)*0.4999) - return val - -def entier_ini(x, nbch, exp=None): - #if exp is None: - #exp = int(floor(log10(abs(x)))) - val = _round(x, nbch-1, exp) - return val, exp-nbch+1 - -def entier_triple(x, nbch, exp_epsi): - #if abs(x) <= 10**exp_epsi: - #return '0' - y = _round(x * 10**(-exp_epsi), 0, 0) * 10**exp_epsi - exp = int(floor(log10(abs(y)))) - z1, e1 = entier_ini(y, nbch+2, exp) - z2, e2 = entier_ini(z1 * 10**e1, nbch+1, exp) - z3, e3 = entier_ini(z2 * 10**e2, nbch, exp) - return '%sE%d' % (z3, e3) +re_float_expo = re.compile('[-+]?[0-9\.]+[eED][\-\+]{0,1}[0-9]+') +re_float = re.compile('[-+]?[0-9]+?\.[0-9]*') +re_int = re.compile('[0-9]+') + +re_fortran = re.compile('([0-9]+)[dD]([\-\+]{0,1}[0-9]+)') #------------------------------------------------------------------------------- -def md5file(fich, nbch, epsi, - regexp_ignore=[], info=0, output=None, format_func=entier_triple): +def test_iter(obj, function, verbose=False): """ - Cette methode retourne le md5sum d'un fichier en arrondissant les nombres - reels a la valeur significative. + Cette fonction compte le nombre de réels dans le fichier et une grandeur + à partir des valeurs (somme, sommes des valeurs absolues, min/max...). IN : - fich : nom du fichier - nbch : nombre de decimales significatives - epsi : valeur en deca de laquelle on prend 0 - regexp_ignore : liste d'expressions régulières permettant d'ignorer - certaines lignes - output : pour rediriger l'interprétation du fichier (INFO=2) - dans le fichier de nom `output`, - info : on affiche le résumé si info>0 - format_func : on peut préciser une autre fonction pour formatter - les réels... + obj : objet 'file' ou 'string' sur le lequel on peut itérer + function : fonction de test val = func_test(val, [xi, ...]) + verbose : on affiche le résumé si info>0 OUT : - code retour : 0 si ok, >0 sinon - md5sum + nombre de valeurs, valeur résultat + """ + max_buff_size = 1000 + nbval = 0 + val = 0. + md5text = md5.new() + + # Si on lit tout le fichier d'un coup, on va environ 3 fois plus vite + # que si on le lit ligne à ligne, mais on consomme en mémoire environ + # 5 fois la taille du fichier... + # En lisant par paquet de 1000 (ou 10000), on va quasiment aussi vite + # en consommant très peu de mémoire. + + # fichier tout ligne/ligne 1000 lignes + # 10 Mo 3 s 10 s 3 s + # 50 Mo 17 s 48 s 17 s + # 100 Mo 34 s 96 s 35 s - NE PAS AJOUTER D'IMPORT QUI RENDRAIT CETTE FONCTION - INUTILISABLE EN DEHORS DE CODE_ASTER. - """ - if output != None: + # l'itérateur est l'objet file lui-même ou on le crée sur la liste + if type(obj) is file: + obj.seek(0) + iterator = obj + else: + iterator = iter(obj) + + ok = True + buff = [] + while ok: try: - sys.stdout = open(output, 'w') - except IOError, msg: - print "Erreur d'écriture sur %s : %s" % (output, msg) + text = iterator.next() + except StopIteration: + ok = False + text = '' + buff.append(text) + if ok and len(buff) < max_buff_size: + continue + else: + text = ''.join(buff) + buff = [] + + l_float = re_float_expo.findall(text) + l_float = [s.replace('D', 'E') for s in l_float] + text = re_float_expo.sub('', text) + l_float.extend(re_float.findall(text)) + text = re_float.sub('', text) + l_float.extend( re_int.findall(text)) + text = re_int.sub('', text) + + nbval += len(l_float) + val = function(val, l_float) + + text = ''.join([s.strip() for s in text.split()]) + md5text.update(text) + + if verbose: + print 'Nombres réels et entiers :' + print l_float + print 'Texte :' + print text - # 1 Mo 10 Mo 100 Mo - # v0 2.6 s 20.4 s 196.6 s - # v1 2.0 s 10.3 s 94.9 s (pas de distinction entier/reel) - # remplacer le try/except par if re.search(...), 80% plus lent - # v2 10.7 s - if not os.path.isfile(fich): - return 4, '' - f = open(fich,'r') - m = md5.new() - exp_epsi = int(floor(log10(abs(epsi)))) - i = 0 - for ligne in f: - i = i+1 - if info >= 2: - print 'LIGNE', i, - keep = True - for exp in regexp_ignore: - if re.search(exp, ligne): - keep = False - if info >= 2: - print ' >>>>>>>>>> IGNOREE <<<<<<<<<<', - break - if keep: - # découpe des nombres collés : 1.34E-142-1.233D+09 - ligne = re.sub('([0-9]+)\-', '\g<1> -', ligne) - # conversion des DOUBLE fortran en 'E' - ligne = re.sub('([0-9]+)[dD]([\-\+]{0,1}[0-9]+)', '\g<1>E\g<2>', ligne) - r = ligne.split() - for x in r: - try: - xv = float(x) - if abs(xv)= 2: - print (' %'+str(nbch+7)+'s') % s, - m.update(s) - if info >= 2: - print - f.close() - md5sum = m.hexdigest() + md5sum = md5text.hexdigest() - affich_resu = True - if info >= 1: - while affich_resu: - form = ' %-20s : %32s' - print form % ('Fichier', fich) - print form % ('Nombre de lignes', str(i)) - #print form % ('Format des reels',format_float) - print form % ('Nombre de chiffres', str(nbch)) - print form % ('Epsilon', str(epsi)) - print form % ('md5sum', md5sum) - if output == None: - affich_resu = False - else: - sys.stdout = sys.__stdout__ - output = None - return 0, md5sum + return nbval, val, md5sum +#------------------------------------------------------------------------------- +def test_file(filename, regexp_ignore=[], type_test='SOMM', verbose=False): + """Raccourci pour tester rapidement un fichier (utilisé par stanley.py). + """ + if type(regexp_ignore) not in (list, tuple): + regexp_ignore = [regexp_ignore,] + + fileobj = open(filename, 'r') + fileobj = regexp_filter(fileobj, regexp_ignore) + + nbv, val, md5sum = test_iter(fileobj, function=dict_func_test[type_test], verbose=verbose) + + return nbv, val, md5sum #------------------------------------------------------------------------------- if __name__ == '__main__': from optparse import OptionParser, OptionGroup - p = OptionParser(usage='usage: %s a_tester [options]' % sys.argv[0]) - p.add_option('-n', '--nbch', - action='store', dest='nbch', type='int', default=6, - help='nombre de chiffres significatifs') - p.add_option('-e', '--epsilon', - action='store', dest='epsi', type='float', default=1.e-14, - help='epsilon en dessous duquel on considère les nombres nuls') + p = OptionParser(usage='usage: %s fichier [options]' % sys.argv[0]) + p.add_option('--type_test', + action='store', dest='type_test', default='SOMM', + help='type du test : SOMM, SOMM_ABS, MIN, MAX') p.add_option('--expr_ignore', action='store', dest='exp', type='string', help='expression régulière à ignorer') - p.add_option('-o', '--output', - action='store', dest='output', type='string', default='output.txt', - help='fichier de sortie') + p.add_option('-v', '--verbose', + action='store_true', dest='verbose', default=False, + help='mode bavard') opts, args = p.parse_args() - if len(args)<1: - p.print_usage() - sys.exit(1) + if len(args) == 0: + p.error('fichier à tester ?') + if opts.exp is None: exp = [] else: exp = [opts.exp] - print 'Lignes retenues dans %s' % opts.output - iret = md5file(args[0], opts.nbch, opts.epsi, - regexp_ignore=exp, info=2, output=opts.output) + fileobj = open(args[0], 'r') + fileobj = regexp_filter(fileobj, exp) + nbv2, sumv2, md5sum2 = test_iter(fileobj, function=dict_func_test[opts.type_test], verbose=opts.verbose) + print '%6d valeurs, resultat = %f, texte : %s' % (nbv2, sumv2, md5sum2) + diff --git a/Aster/Cata/cataSTA9/Messages/algeline.py b/Aster/Cata/cataSTA9/Messages/algeline.py index e9c4ef11..be7ccc2b 100644 --- a/Aster/Cata/cataSTA9/Messages/algeline.py +++ b/Aster/Cata/cataSTA9/Messages/algeline.py @@ -1,4 +1,4 @@ -#@ MODIF algeline Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF algeline Messages DATE 08/04/2008 AUTEUR MEUNIER S.MEUNIER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -23,103 +23,116 @@ def _(x) : return x cata_msg={ 1: _(""" - option invalide ! + Résolution FETI : option invalide """), 2: _(""" - probleme objet %(k1)s .fetg . il est de longueur impaire ! + Résolution FETI : probleme objet %(k1)s .fetg . il est de longueur impaire """), 3: _(""" - pb division par zerodans la construction du alpha ! + Résolution FETI : division par zéro dans la construction du alpha """), 4: _(""" - valeur inferieure a la tolerance + valeur inférieure à la tolérance """), 5: _(""" - pour l'instant, on ne traiteque le cas des matrices reelles. + Combinaison linéaire de matrices : + pour l'instant, on ne traite que le cas des matrices réelles """), 7: _(""" - Impossible de récupérer les valeurs dans la table. -"""), - -8: _(""" - attention + tbliva : impossible de récupérer les valeurs dans la table """), 9: _(""" - l'origine de l'obstacle est mal positionnee par rapport au noeud de choc de numero %(k1)s , de nom %(k2)s , par rapport au jeu. + l'origine de l'obstacle est mal positionnée par rapport au noeud de choc + de numéro %(k1)s , de nom %(k2)s , par rapport au jeu. """), 10: _(""" - l'origine de l'obstacle est mal positionnee par rapport au noeud de choc de numero %(k1)s , de nom %(k2)s , dans le plan normal au choc. + l'origine de l'obstacle est mal positionnee par rapport au noeud de choc + de numéro %(k1)s , de nom %(k2)s , dans le plan normal au choc. """), 11: _(""" - la normale a l'obstacle fait un angle nul avec le noeud de choc de numero %(k1)s , avec l'axe du tube. + la normale à l'obstacle fait un angle nul avec le noeud de choc + de numéro %(k1)s , avec l'axe du tube. """), 12: _(""" - la normale a l'obstacle fait un angle inferieur a 10 degres au noeud de choc de numero %(k1)s , avec l'axe du tube. + la normale à l'obstacle fait un angle inferieur à 10 degrés au noeud de choc + de numéro %(k1)s , avec l'axe du tube. """), 13: _(""" - la normale a l'obstacle fait un angle inferieur a 45 degres au noeud de choc de numero %(k1)s , avec l'axe du tube. + la normale à l'obstacle fait un angle inferieur à 45 degrés au noeud de choc + de numéro %(k1)s , avec l'axe du tube. """), 14: _(""" - les mailles doivent etre de type quad4 ou tri3 et non de type %(k1)s + les mailles doivent etre de type QUAD4 ou TRI3 et non de type %(k1)s """), 15: _(""" - l'angle au noeud %(k1)s forme par le vecteur normal de la maille %(k2)s et le vecteur normal de la maille %(k3)s est superieur a 90 degres et vaut %(k4)s degres. + l'angle au noeud %(k1)s formé par : + - le vecteur normal de la maille %(k2)s + et - le vecteur normal de la maille %(k3)s + est supérieur à 90 degrés et vaut %(k4)s degrés. """), 16: _(""" - pref_noeud est trop long ou pref_nume est trop grand + PREF_NOEUD est trop long ou PREF_NUME est trop grand """), 17: _(""" - pref_maille est trop long ou pref_nume est trop grand + PREF_MAILLE est trop long ou PREF_NUME est trop grand """), 18: _(""" - mot-cle facteur %(k1)s non traite + mot-clé facteur %(k1)s non traité """), 19: _(""" - le group_no %(k1)s n'existe pas + le GROUP_NO %(k1)s n'existe pas """), 20: _(""" - le nombre de noeuds n'est pas le meme pour les deux group_no + le nombre de noeuds n'est pas le meme pour les deux GROUP_NO """), 21: _(""" - les group_no ne contiennent qu'un seul noeud + les GROUP_NO ne contiennent qu'un seul noeud """), 22: _(""" - creation quad4 degenere + creation QUAD4 dégénéré """), 23: _(""" - le noeud %(k1)s n est pas equidistant des noeuds %(k2)s et %(k3)s pour la maille : %(k4)s . ameliorez le maillage. on arrete pour eviter des resultats faux + le noeud %(k1)s n'est pas équidistant des noeuds %(k2)s et %(k3)s pour la maille : %(k4)s + Améliorez le maillage. Le code s'arrete pour éviter des résultats faux. + - distance n1-n3 = %(r1)g + - distance n2-n3 = %(r2)g + - tolérance = %(r3)g """), 24: _(""" - valeur negative ou nulle pour la puissance quatrieme du nombre d ondes => valeur de l ordre de coque mal determinee => il faut affiner le maillage sur les coques : reduire le pas angulaire pour definir plus de noeuds sur les contours + valeur négative ou nulle pour la puissance quatrième du nombre d'ondes. + La valeur de l'ordre de coque est mal déterminée. + Il faut affiner le maillage sur les coques : + => réduire le pas angulaire pour définir plus de noeuds sur les contours. """), 25: _(""" - nombre de noeuds sur la generatrice inferieur a 4 donc insuffisant pour determiner les coefficients de la deformee axiale + Nombre de noeuds sur la génératrice inférieur à 4 : + c'est insuffisant pour déterminer les coefficients de la déformée axiale """), 26: _(""" - deplacement radial maximum nul sur la generatrice + déplacement radial maximum nul sur la génératrice """), 27: _(""" @@ -130,89 +143,83 @@ cata_msg={ Les resultats du calcul seront a prendre avec circonspection. """), - - - - +28: _(""" + Détermination des coefficients de la deformée axiale, + erreur relative sur la norme des déplacements radiaux : %(r1)g +"""), 29: _(""" - type inconnu + L'ordre de coque est peut-etre mal identifié. + La base modale est trop riche ou le nombre de noeuds du maillage sur une circonference + est trop faible """), 30: _(""" - somme des carres des termes diagonaux nulle => critere indefini + somme des carrés des termes diagonaux nulle + => critère indéfini """), 31: _(""" - somme des carres des termes diagonaux negligeable => critere indefini + somme des carrés des termes diagonaux négligeable + => critere indéfini """), 32: _(""" - cham_cine /= o. sur des ddls non elimines. + CHAM_CINE différent de zéro sur des DDL non éliminés. """), 33: _(""" - la carte des caracteristiques geometriques des elements de poutre n existe pas + la carte des caractéristiques géometriques des éléments de poutre n'existe pas """), 34: _(""" - caracteristiques geometriques elementaires de poutre non definies pour la maille %(k1)s + caractéristiques géométriques élémentaires de poutre non définies pour la maille %(k1)s """), 35: _(""" - l une ou l autre des composantes et n existe pas dans le champ de la grandeur + l'une ou l'autre des composantes et n'existe pas dans le champ de la grandeur """), 36: _(""" - la section de l element de poutre considere n est pas circulaire + la section de l'élément de poutre considéré n'est pas circulaire """), 37: _(""" - rayon exterieur nul a l une ou l autre des extremites de l element considere + rayon extérieur nul à l'une ou l'autre des extrémités de l'élément considéré """), 38: _(""" - le rayon exterieur n est pas constant sur l element considere -"""), - -39: _(""" - arret justifie par le message ci-dessus. -"""), - -40: _(""" - option de calcul non prevue ! -"""), - -41: _(""" - option non prevue en non compile mpi + le rayon extérieur n'est pas constant sur l'élément considéré """), 42: _(""" - les vitesses reduites des fichiers .70 et .71 ne sont pas coherentes + les vitesses réduites des fichiers .70 et .71 ne sont pas cohérentes """), 43: _(""" - les vitesses etudiees doivent etre strictement positives. le sens de l ecoulement est defini par le choix de la configuration experimentale grappe2 de reference + les vitesses etudiees doivent être strictement positives + le sens de l'écoulement est défini par le choix de la configuration experimentale GRAPPE2 de référence """), 44: _(""" - seuls les cas d'enceintes circulaires et rectangulaires sont traites. + seuls les cas d'enceintes circulaires et rectangulaires sont traités. """), 45: _(""" - le nombre total de tubes ne correspond pas a la somme des tubes des groupes d'equivalence + le nombre total de tubes ne correspond pas à la somme des tubes des groupes d'équivalence """), 46: _(""" - la direction des tubes n est pas parallele a l un des axes. + la direction des tubes n'est pas parallèle à l'un des axes. """), 47: _(""" - la direction des tubes n est la meme que celle de l axe directeur. + la direction des tubes n'est la meme que celle de l'axe directeur. """), 48: _(""" - les vitesses etudiees doivent toutes etre du meme signe, sinon il y a ambiguite sur les positions d entree/sortie + les vitesses étudiées doivent toutes être du meme signe + sinon il y a ambiguité sur les positions d entrée/sortie """), 49: _(""" @@ -232,39 +239,37 @@ cata_msg={ """), 53: _(""" - le domaine de recouvrement des coques interne et externe n existe pas + le domaine de recouvrement des coques interne et externe n'existe pas """), 54: _(""" - la carte des caracteristiques geometriques des elements de coque n existe pas. il faut prealablement affecter ces caracteristiques aux groupes de mailles correspondant aux coques interne et externe, par l operateur -"""), - -55: _(""" - ce programme suppose que la grandeur "cacoqu" a 2 entiers codes + la carte des caractéristiques géometriques des éléments de coque n'existe pas. il faut prealablement affecter ces caracteristiques aux groupes de mailles correspondant aux coques interne et externe, par l operateur """), 56: _(""" - les caracteristiques des elements de coque n ont pas ete affectees distinctement a l un ou(et) l autre des groupes de mailles associes aux coques interne et externe + les caractéristiques des éléments de coque n'ont pas été affectées + distinctement à l'un ou(et) l'autre des groupes de mailles associés + aux coques interne et externe """), 57: _(""" - la composante n existe pas dans le champ de la grandeur + la composante n'existe pas dans le champ de la grandeur """), 58: _(""" - pas d epaisseur affectee aux elements de la coque interne + pas d'épaisseur affectée aux éléments de la coque interne """), 59: _(""" - epaisseur de la coque interne nulle + épaisseur de la coque interne nulle """), 60: _(""" - pas d epaisseur affectee aux elements de la coque externe + pas d'epaisseur affectée aux éléments de la coque externe """), 61: _(""" - epaisseur de la coque externe nulle + épaisseur de la coque externe nulle """), 62: _(""" @@ -272,7 +277,8 @@ cata_msg={ """), 63: _(""" - incoherence dans la definition de la configuration : jeu annulaire negatif ou nul + incohérence dans la définition de la configuration : + jeu annulaire négatif ou nul """), 64: _(""" @@ -284,7 +290,7 @@ cata_msg={ """), 66: _(""" - coefficient de type non prevu + coefficient de type non prévu """), 67: _(""" @@ -296,15 +302,18 @@ cata_msg={ """), 69: _(""" - la zone d excitation du fluide, de nom %(k1)s , recoupe une autre zone. + la zone d'excitation du fluide, de nom %(k1)s , recoupe une autre zone. """), 70: _(""" - le noeud d application de l excitation doit appartenir a deux mailles, ni plus ni moins + le noeud d'application de l'excitation doit appartenir à deux mailles + ni plus ni moins """), 71: _(""" - le noeud d application de l excitation est situe a la jonction de deux elements de diametres exterieurs differents => ambiguite pour le dimensionnement de l excitation + le noeud d'application de l excitation est situe à la jonction + de deux éléments de diamètres extérieurs différents + => ambiguité pour le dimensionnement de l'excitation """), 72: _(""" @@ -315,16 +324,13 @@ cata_msg={ le cylindre %(k1)s n a pas un axe rectiligne """), -74: _(""" - erreur dans carces -"""), - 75: _(""" - la composante n'est pas dans le chamelem + la composante n'est pas dans le CHAM_ELEM """), 76: _(""" - resolution impossible matrice singuliere, peut etre a cause des erreurs d arrondis + résolution impossible matrice singulière + peut être à cause des erreurs d'arrondis """), 77: _(""" @@ -332,11 +338,12 @@ cata_msg={ """), 78: _(""" - ererur dans la recherche des valeurs propres - pas de convergence de l algorithme qr + erreur dans la recherche des valeurs propres + pas de convergence de l algorithme QR """), 79: _(""" - le nombre de modes resultats: %(k1)s n est pas correct + le nombre de modes résultats: %(k1)s n'est pas correct """), 80: _(""" @@ -344,11 +351,11 @@ cata_msg={ """), 81: _(""" - le cylindre %(k1)s deborde de l enceinte circulaire + le cylindre %(k1)s déborde de l'enceinte circulaire """), 82: _(""" - pas de groupes de noeuds a creer + pas de groupes de noeuds à créer """), 83: _(""" @@ -372,47 +379,50 @@ cata_msg={ """), 88: _(""" - un cote de l enceinte est delongueur nulle + une cote de l'enceinte est de longueur nulle """), 89: _(""" - les quatres sommets de l enceinte ne forment pas un rectangle + les quatres sommets de l'enceinte ne forment pas un rectangle """), 90: _(""" - le cylindre %(k1)s deborde de l enceinte rectangulaire + le cylindre %(k1)s déborde de l'enceinte rectangulaire """), 91: _(""" - la renumerotation %(k1)s est incompatible avec le solveur multi_frontal. + la renumérotation %(k1)s est incompatible avec le solveur multi_frontal. """), 92: _(""" - absence de relation de comportement de type pour le materiau constitutif de la coque interne + absence de relation de comportement de type pour le matéiau constitutif de la coque interne """), 93: _(""" - absence d un ou de plusieurs parametres de la relation de comportement pour le materiau constitutif de la coque interne + absence d'un ou de plusieurs paramètres de la relation de comportement + pour le matériau constitutif de la coque interne """), 94: _(""" - valeur du module d young nulle pour le materiau constitutif de la coque interne + La valeur du module d'Young est nulle pour le matériau constitutif de la coque interne """), 95: _(""" - absence de relation de comportement de type pour le materiau constitutif de la coque externe + absence de relation de comportement de type + pour le materiau constitutif de la coque externe """), 96: _(""" - absence d un ou de plusieurs parametres de la relation de comportement pour le materiau constitutif de la coque externe + absence d'un ou de plusieurs parametres de la relation de comportement + pour le matériau constitutif de la coque externe """), 97: _(""" - valeur du module d young nulle pour le materiau constitutif de la coque externe + La valeur du module d'Young est nulle pour le matériau constitutif de la coque externe """), 98: _(""" - les deux coques interne et externe sont en mouvement pour le %(k1)s ieme mode. + Les deux coques (interne et externe) sont en mouvement pour le %(k1)s ième mode. """), 99: _(""" diff --git a/Aster/Cata/cataSTA9/Messages/algeline2.py b/Aster/Cata/cataSTA9/Messages/algeline2.py index ff9a7794..4072fac3 100644 --- a/Aster/Cata/cataSTA9/Messages/algeline2.py +++ b/Aster/Cata/cataSTA9/Messages/algeline2.py @@ -1,419 +1,447 @@ -#@ MODIF algeline2 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF algeline2 Messages DATE 19/05/2008 AUTEUR ABBAS M.ABBAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { -2: _(""" - l une des valeurs propres de la matrice du probleme modal generalise en eau au repos n est pas reelle +1 : _(""" + L'argument de "BLOC_DEBUT" doit être strictement positif, + il est pris à 1 """), -3: _(""" - calcul des modes en eau au repos : une des valeurs propres obtenues est nulle +2 : _(""" + Calcul des modes en eau au repos : + une des valeurs propres de la matrice n'est pas réelle """), -4: _(""" - erreur sur la recherche des lagranges. +3 : _(""" + Calcul des modes en eau au repos : + une des valeurs propres obtenues est nulle """), -5: _(""" - mot cle facteur incorrect. +4 : _(""" + Erreur sur la recherche des lagranges """), -6: _(""" - type de matrice " %(k1)s " inconnu. +5 : _(""" + mot cle facteur incorrect """), -7: _(""" - on ne traite pas cette option. +6 : _(""" + Type de matrice " %(k1)s " inconnu. """), -8: _(""" - on ne peut pas combiner une matrice non symetrique dans une matrice symetrique. +7 : _(""" + On ne traite pas cette option """), -9: _(""" - les matrices a combiner ne sont pas construites sur le meme maillage +8 : _(""" + L'argument de "BLOC_FIN" est plus grand que le nombre de blocs de la matrice, + il est ramené à cette valeur """), -10: _(""" - charges cinematiques differentes. +9 : _(""" + Les matrices à combiner ne sont pas construites sur le meme maillage. """), -11: _(""" - les "matass" " %(k1)s " et " %(k2)s " n'ont le meme domaine de definition. +10 : _(""" + Erreur de programmation : + On cherche à combiner 2 matrices qui n'ont pas les memes charges cinématiques. + Noms des 2 matrices : + %(k1)s + %(k2)s + + Solution : + 1) émettre une fiche d'anomalie / évolution + 2) En attendant : ne pas utiliser de charges cinématiques : + remplacer AFFE_CHAR_CINE par AFFE_CHAR_MECA +"""), + +11 : _(""" + Les matrices "%(k1)s" et "%(k2)s" n'ont pas la meme structure. """), -12: _(""" - attention: une dimesion nulle ou nmax.lt.dmax(1,n) +12 : _(""" + Résolution système linéaire méthode de CROUT + Attention: une dimension nulle ou nmax.lt.dmax(1,n) """), -13: _(""" - attention: une dimension negative ou nulle +13 : _(""" + Résolution système linéaire méthode de CROUT + Attention: une dimension negative ou nulle """), -14: _(""" - attention: les dimensions des tableaux ne sont pas correctes +14 : _(""" + Résolution système linéaire méthode de CROUT + Attention: les dimensions des tableaux ne sont pas correctes """), -15: _(""" - pas de charge critique dans l intervalle demande +15 : _(""" + Pas de charge critique dans l'intervalle demandé """), -16: _(""" - %(k1)s charges critiques dans l intervalle demande +16 : _(""" + %(k1)s charges critiques dans l'intervalle demandé """), -17: _(""" - au moins une frequence calculee exterieure a la bande demandee +17 : _(""" + Au moins une fréquence calculée extérieure à la bande demandée """), -18: _(""" - les matrices " %(k1)s " et " %(k2)s " n'ont pas le meme domaine de definition +18 : _(""" + Les matrices " %(k1)s " et " %(k2)s " n'ont pas le meme domaine de définition """), -19: _(""" - problemes a l'allocation des descripteurs de la matrice " %(k1)s " +19 : _(""" + Problèmes a l'allocation des descripteurs de la matrice " %(k1)s " """), -20: _(""" - l'argument de "bloc_debut" est plus grand que le nombre de bloc de la matrice +20 : _(""" + L'argument de "BLOC_DEBUT" est plus grand que le nombre de blocs de la matrice """), -21: _(""" - l'argument de "bloc_fin" doit etre strictement positif +21 : _(""" + L'argument de "BLOC_FIN" doit etre strictement positif """), -22: _(""" - la numerotation des inconnues est incoherente entre la matrice et le second membre. +22 : _(""" + La numérotation des inconnues est incohérente entre la matrice et le second membre. """), -23: _(""" - %(k1)s et %(k2)s n'ont pas le meme domaine de definition. +23 : _(""" + %(k1)s et %(k2)s n'ont pas le meme domaine de définition. """), -24: _(""" - la matrice a des ddls elimines. il faut utiliser le mot cle cham_cine. +24 : _(""" + La matrice a des ddls eliminés. il faut utiliser le mot clé CHAM_CINE. """), -25: _(""" - la matrice et le second membre sont de type different. +25 : _(""" + La matrice et le second membre sont de type différent. """), -26: _(""" - le second membre et le champ cinematiquesont de type different. +26 : _(""" + le second membre et le champ cinématique sont de type différent. """), -27: _(""" - la matrice est d'un type inconnu de l'operateur. +27 : _(""" + la matrice est d'un type inconnu de l'opérateur. """), -28: _(""" - err_31a: les "matr_asse" %(k1)s " et " %(k2)s " ne sont pas combinables. +28 : _(""" + les "MATR_ASSE" %(k1)s " et " %(k2)s " ne sont pas combinables. """), -29: _(""" - la valeur d'entree min et superieure ou egale a la valeur d'entree sup +29 : _(""" + la valeur d'entrée 'min' est supérieure ou égale à la valeur d'entrée 'sup' """), -30: _(""" - les matrices " %(k1)s " et " %(k2)s " n'ont pas le meme domaine de definition. +30 : _(""" + les matrices " %(k1)s " et " %(k2)s " n'ont pas le meme domaine de définition. """), -31: _(""" - trop de re-ajustement de la borne minimale. +31 : _(""" + trop de ré-ajustement de la borne minimale. """), -32: _(""" - trop de re-ajustement de la borne maximale. +32 : _(""" + trop de ré-ajustement de la borne maximale. """), -33: _(""" - type de mode inconnu: %(k1)s +33 : _(""" + type de mode inconnu: %(k1)s """), -34: _(""" - il n'est pas permis de modifier un objet pere +34 : _(""" + il n'est pas permis de modifier un objet père """), -35: _(""" - mode non calcule a partir de matrices assemblees +35 : _(""" + mode non calculé à partir de matrices assemblées """), -36: _(""" - normalisation impossible, le point n'est pas present dans le modele. +36 : _(""" + normalisation impossible, le point n'est pas present dans le modèle. """), -37: _(""" - normalisation impossible, la composante n'est pas presente dans le modele. +37 : _(""" + normalisation impossible, la composante n'est pas présente dans le modèle. """), -38: _(""" - manque des parametres entiers +38 : _(""" + il manque des paramètres entiers """), -39: _(""" - manque des parametres reels +39 : _(""" + il manque des paramètres réels """), -40: _(""" +40 : _(""" manque des parametres caracteres """), -41: _(""" - normalisation impossible, aucune composante n'est presente dans le modele. +41 : _(""" + normalisation impossible, aucune composante n'est présente dans le modèle. """), -42: _(""" - normalisation impossible, le noeud n'est pas present dans le modele. +42 : _(""" + normalisation impossible, le noeud n'est pas présent dans le modèle. """), -43: _(""" - on ne tient pas compte du mot cle facteur "mode_signe" pour des "mode_meca_c" +43 : _(""" + on ne tient pas compte du mot cle facteur "MODE_SIGNE" pour des "MODE_MECA_C" """), -44: _(""" - " %(k1)s " type de mode non traite +44 : _(""" + " %(k1)s " type de mode non traité """), -45: _(""" +45 : _(""" calcul de flambement et absence du mot cle char_crit ne sont pas compatibles """), -46: _(""" +46 : _(""" calcul de flambement et matrice d'amortissement ne sont pas compatibles """), -47: _(""" +47 : _(""" le nombre de frequences demandees est incorrect. """), -48: _(""" +48 : _(""" nmax_iter_ ajuste ou separe est negatif """), -49: _(""" +49 : _(""" nmax_iter est negatif """), -50: _(""" - prec_ ajuste ou separe est irrealiste +50 : _(""" + prec_ ajuste ou separe est irrealiste """), -51: _(""" +51 : _(""" prec est irrealiste (inferieure a 1.e-70) """), -52: _(""" +52 : _(""" pas de valeur donnee, separation impossible """), -53: _(""" +53 : _(""" une seule valeur donnee, separation impossible """), -54: _(""" - la suite des valeurs donnees n'est pas croissante +54 : _(""" + la suite des valeurs donnees n'est pas croissante """), -55: _(""" - mot cle amor_reduit impossible pour cas generalise +55 : _(""" + mot cle AMOR_REDUIT impossible pour cas generalise """), -56: _(""" - mot cle amor_reduit impossible si option differente de proche +56 : _(""" + mot cle AMOR_REDUIT impossible si option differente de PROCHE """), -57: _(""" +57 : _(""" nombre different d'arguments entre les mots cles amor_reduit et freq """), -58: _(""" +58 : _(""" les matrices " %(k1)s " et " %(k2)s " sont incompatibles entre elles """), -59: _(""" +59 : _(""" presence de frequences negatives dans les donnees. """), -60: _(""" +60 : _(""" trop de reajustement d'une borne de l'intervalle de recherche. """), -61: _(""" - erreur trop de reajustementd'une borne de l'intervalle de recherche. +61 : _(""" + erreur trop de reajustement d'une borne de l'intervalle de recherche. """), -62: _(""" +62 : _(""" pas de valeurs propres dans la bande de calcul, le concept ne peut etre cree dans ces conditions. """), -63: _(""" +63 : _(""" " %(k1)s " option inconnue. """), -64: _(""" - le nombre param_ortho_soren n'est pas valide. +64 : _(""" + le nombre PARAM_ORTHO_SOREN n'est pas valide. """), -65: _(""" +65 : _(""" detection des modes de corps rigide n'est utilisee qu'avec tri_diag """), -66: _(""" +66 : _(""" option bande non autorisee pour un probleme avec amortissement """), -67: _(""" +67 : _(""" approche imaginaire ou complexe et frequence nulle incompatible """), -68: _(""" +68 : _(""" option modes de corps rigide non utilisee avec amortissement """), -69: _(""" - pour le probleme generalise ou quadratique complexe on utilise seulement l'algorithme de sorensen +69 : _(""" + pour le probleme generalise ou quadratique complexe on utilise seulement + METHODE='SORENSEN' ou 'QZ' """), -70: _(""" +70 : _(""" probleme complexe et frequence nulle incompatible """), -71: _(""" +71 : _(""" calcul quadratique par la methode de sorensen et frequence nulle incompatible """), -72: _(""" +72 : _(""" la dimension du sous espace de travail est inferieure au nombre de modes rigides """), -73: _(""" - pas de verification par sturm pour le probleme quadratique +73 : _(""" + !! ATTENTION !!, POUR L''INSTANT, PAS DE POST-VERIFICATION DE TYPE STURM + (COMPTAGE DU BON NOMBRE DES VALEURS PROPRES CALCULEES) LORSQU'ON EST + DANS LE PLAN COMPLEXE: + MODAL GENERALISE AVEC K COMPLEXE OU MODAL QUADRATIQUE. """), -74: _(""" - erreur de verification +74 : _(""" + erreur de vérification """), -75: _(""" - conclusion du utmess-e precedent +75 : _(""" + le problème traité étant quadratique, on double l'espace de recherche """), -76: _(""" - 3 ou 6 valeurs pour le mot cle "direction" +76 : _(""" + 3 ou 6 valeurs pour le mot cle "DIRECTION" """), -77: _(""" - pour le mot cle facteur "pseudo_mode", il faut donner la matrice de masse. +77 : _(""" + pour le mot cle facteur "PSEUDO_MODE", il faut donner la matrice de masse. """), -78: _(""" +78 : _(""" la direction est nulle. """), -79: _(""" +79 : _(""" base modale 1 et 2 avec numerotations de taille incompatible """), -80: _(""" +80 : _(""" base modale 1 et 2 avec numerotations incompatibles """), -81: _(""" +81 : _(""" base modale et matrice avec numerotations incompatibles """), -82: _(""" +82 : _(""" nombre de modes et d amortissements differents """), -83: _(""" +83 : _(""" nombre de modes et d amortissements de connors differents """), -84: _(""" - nombre d amortissements different du nombre de modes calcules -"""), - -85: _(""" +85 : _(""" inversion vmin <=> vmax """), -86: _(""" - type de matrice inconnu +86 : _(""" + type de matrice inconnu """), -87: _(""" +87 : _(""" pas de produit car le cham_no %(k1)s existe deja. """), +88 : _(""" + Problème de programmation : + La matrice globale %(k1)s n'existe pas. + Elle est nécessaire pour déterminer les ddls bloqués par AFFE_CHAR_CINE. + Solution (pour l'utilisateur) : + 1) Ne pas utiliser de charges cinématiques (AFFE_CHAR_CINE) + 2) Emettre une fiche d'anomalie. + Solution (pour le programmeur) : + La matrice globale a été détruite abusivement. + Instrumenter la routine jedetr.f pour déterminer la routine coupable. +"""), - - - - -89: _(""" - le mot-cle maillage est obligatoire avec le mot-cle crea_fiss. +89 : _(""" + le mot-cle MAILLAGE est obligatoire avec le mot-cle CREA_FISS. """), -90: _(""" - le mot-cle maillage est obligatoire avec le mot-cle line_quad. +90 : _(""" + le mot-cle MAILLAGE est obligatoire avec le mot-cle LINE_QUAD. """), -91: _(""" - crea_maillage : l'option line_quad ne traite pas les macros mailles +91 : _(""" + CREA_MAILLAGE : l'option line_quad ne traite pas les macros mailles """), -92: _(""" - crea_maillage : l'option line_quad ne traite pas les absc_curv +92 : _(""" + CREA_MAILLAGE : l'option LINE_QUAD ne traite pas les ABSC_CURV """), -93: _(""" - le mot-cle maillage est obligatoire avec le mot-cle quad_line. +93 : _(""" + le mot-cle MAILLAGE est obligatoire avec le mot-cle QUAD_LINE. """), -94: _(""" - crea_maillage : l'option quad_line ne traite pas les macros mailles +94 : _(""" + CREA_MAILLAGE : l'option QUAD_LINE ne traite pas les macros mailles """), -95: _(""" - crea_maillage : l'option quad_line ne traite pas les absc_curv +95 : _(""" + CREA_MAILLAGE : l'option QUAD_LINE ne traite pas les ABSC_CURV """), -96: _(""" - le mot-cle maillage est obligatoire avec le mot-cle modi_maille. +96 : _(""" + le mot-cle MAILLAGE est obligatoire avec le mot-cle MODI_MAILLE. """), -97: _(""" - une seule occurrence de "quad_tria3" +97 : _(""" + une seule occurrence de "QUAD_TRIA3" """), -98: _(""" - le mot-cle maillage est obligatoire avec le mot-cle coqu_volu. +98 : _(""" + le mot-cle MAILLAGE est obligatoire avec le mot-cle COQU_VOLU. """), -99: _(""" +99 : _(""" pas de maille a modifier """), + } diff --git a/Aster/Cata/cataSTA9/Messages/algeline3.py b/Aster/Cata/cataSTA9/Messages/algeline3.py index da88ae5a..26246ffe 100644 --- a/Aster/Cata/cataSTA9/Messages/algeline3.py +++ b/Aster/Cata/cataSTA9/Messages/algeline3.py @@ -1,4 +1,4 @@ -#@ MODIF algeline3 Messages DATE 23/01/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF algeline3 Messages DATE 02/06/2008 AUTEUR MEUNIER S.MEUNIER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -23,35 +23,36 @@ def _(x) : return x cata_msg={ 1: _(""" - le mot-cle maillage est obligatoire avec le mot-cle crea_maille. + le mot-clé MAILLAGE est obligatoire avec le mot-cle CREA_MAILLE. """), 2: _(""" - le mot-cle maillage est obligatoire avec le mot-cle crea_group_ma. + le mot-clé MAILLAGE est obligatoire avec le mot-cle CREA_GROUP_MA. """), 3: _(""" - le mot-cle maillage est obligatoire avec le mot-cle crea_poi1. + le mot-clé MAILLAGE est obligatoire avec le mot-cle CREA_POI1. """), 4: _(""" - le mot-cle maillage est obligatoire avec le mot-cle repere. + le mot-clé MAILLAGE est obligatoire avec le mot-cle REPERE. """), 5: _(""" - sous le mot-cle "nom_orig" du mot-facteur "repere", on ne peut donner que les mots "cdg" ou "torsion". + sous le mot-cle "NOM_ORIG" du mot-clé facteur "REPERE", + on ne peut donner que les mots "CDG" ou "TORSION". """), 6: _(""" - maille non creee %(k1)s + maille non créée %(k1)s """), 7: _(""" - le group_ma : %(k1)s existe deja. + le GROUP_MA : %(k1)s existe déjà. """), 8: _(""" - le mot-cle maillage est obligatoire avec le mot-cle detr_group_ma. + le mot-cle MAILLAGE est obligatoire avec le mot-clé DETR_GROUP_MA. """), 9: _(""" @@ -59,79 +60,86 @@ cata_msg={ """), 10: _(""" - masses effectives unitaires non calculees par norm_mode + masses effectives unitaires non calculées par NORM_MODE """), 11: _(""" - structure resultat vide + structure résultat vide """), 12: _(""" - nombre de noeuds sur le contour insuffisant pour determiner correctement les ordres de coque + nombre de noeuds sur le contour insuffisant pour déterminer correctement + les ordres de coque """), 13: _(""" - azimut indefini pour un des noeuds de la coque + azimut indéfini pour un des noeuds de la coque """), 14: _(""" - ordre de coque nul pour l un des modes pris en compte pour le couplage. le modele de resolution ne supporte pas une telle valeur. + ordre de coque nul pour l'un des modes pris en compte pour le couplage. + le modèle de résolution ne supporte pas une telle valeur. """), 15: _(""" - determination du drmax et du dephasage pour le mode %(k1)s : le determinant du systeme issu du moindre carre est nul + détermination du DRMAX et du déphasage pour le mode %(k1)s : + le déterminant du système issu du moindre carré est nul """), 16: _(""" - determination du dephasage pour le mode %(k1)s : theta0 indefini + détermination du déphasage pour le mode %(k1)s : + THETA0 indéfini """), 17: _(""" - pivot nul dans la resolution du systeme complexe + pivot nul dans la résolution du système complexe """), 18: _(""" - annulation du numerateur dans l expression d un coefficient donnant la solution du probleme fluide instationnaire pour umoy = 0 + annulation du numérateur dans l'expression d un coefficient donnant + la solution du problème fluide instationnaire pour UMOY = 0 """), 19: _(""" - determination des valeurs propres de l operateur differentiel : existence d une racine double + détermination des valeurs propres de l'opérateur différentiel : + existence d'une racine double """), 20: _(""" - la %(k1)s eme valeur propre est trop petite + la %(k1)s ème valeur propre est trop petite """), 21: _(""" - la matr_asse %(k1)s n"est pas stockee "morse" le gcpc est donc impossible. + la MATR_ASSE %(k1)s n'est pas stockée "morse" : + le GCPC est donc impossible. """), 22: _(""" - conflit une matrice stockee morse ne peut avoir qu"un bloc + conflit : une matrice stockée morse ne peut avoir qu'un bloc """), 23: _(""" - le preconditionnement ldlt_inc d"une matrice complexe n"est pas implemente + le préconditionnement LDLT_INC d'une matrice complexe n'est pas implémenté """), 24: _(""" - stop 1:erreur programation. + Résolution LDLT : erreur de programmation. """), 25: _(""" - erreur a l'appel de metis + erreur a l'appel de METIS """), 26: _(""" - pb affichage feti dans preml1 ! + pb d'affichage FETI dans PREML1 """), 27: _(""" - solveur interne ldlt pour l'instant proscrit avec feti + solveur interne LDLT interdit pour l'instant avec FETI """), 28: _(""" - solveur interne mumps pour l'instant proscrit avec feti + solveur interne MUMPS interdit pour l'instant avec FETI """), 29: _(""" @@ -139,7 +147,7 @@ cata_msg={ """), 30: _(""" - matrices a et b incompatibles pour l operation * + matrices A et B incompatibles pour l'opération * """), 31: _(""" @@ -151,43 +159,36 @@ cata_msg={ """), 33: _(""" - on ne traite pas ce type de cham_elem, icoef different de 1 + on ne traite pas ce type de CHAM_ELEM, ICOEF différent de 1 """), 34: _(""" - le cham_no : %(k1)s n"existe pas -"""), - -35: _(""" - la matr_asse %(k1)s n"est pas stockee "morse" -"""), - -36: _(""" - conflit une matrice stockee morse ne peut avoir q'un seul bloc + le CHAM_NO : %(k1)s n'existe pas """), 37: _(""" - gcpc n"est pas prevu pour une matrice complexe + GCPC n"est pas prevu pour une matrice complexe """), 38: _(""" - pas de matrice de preconditionnement : on s'arrete + pas de matrice de préconditionnement : on s'arrete """), 39: _(""" - le cham_no : %(k1)s n"existe pas ==> reprise impossible ==> initialisation par le vecteur nul + le CHAM_NO : %(k1)s n'existe pas + Reprise impossible ==> initialisation par le vecteur nul """), 40: _(""" - erreur : lmat est nul + erreur : LMAT est nul """), 41: _(""" - la matrice possede des ddls imposes elimines: il faut un vcine + la matrice possède des ddls imposés éliminés: il faut un VCINE """), 42: _(""" - la matrice et le vecteur cinematique ne contiennent pas des valeurs de meme type + la matrice et le vecteur cinématique ne contiennent pas des valeurs de meme type """), 43: _(""" @@ -203,19 +204,19 @@ cata_msg={ """), 46: _(""" - recherche de corps rigide pour l'instant proscrite avec matrice non-symetrique + recherche de corps rigide : pour l'instant proscrite avec matrice non-symetrique """), 47: _(""" - recherche de corps rigide pour l'instant proscrite avec matrice complexe + recherche de corps rigide : pour l'instant proscrite avec matrice complexe """), 48: _(""" - nom_nume_ddl %(k1)s non trouve + NOM_NUME_DDL %(k1)s non trouvé """), 49: _(""" - attention plus de six modes de corps rigides detectes + attention : plus de six modes de corps rigides detectés """), 50: _(""" @@ -223,63 +224,63 @@ cata_msg={ """), 51: _(""" - le tableau b est insuffisamment dimensionne pour l operation * -"""), - -52: _(""" - augmenter la taille de la pile + le tableau B est insuffisamment dimensionné pour l'opération * """), 53: _(""" - toutes les frequencessont des frequences de corps rigide + toutes les fréquences sont des fréquences de corps rigide """), 54: _(""" - calcul des nume_modematrice non inversible pour la frequence consideree + calcul des NUME_MODE : matrice non inversible pour la fréquence considérée """), 55: _(""" - probleme a la resolution du systeme reduit. + problème à la résolution du système réduit. """), 56: _(""" - valeur propre infinie trouvee + valeur propre infinie trouvée """), 57: _(""" - methode qr : probleme de convergence + methode QR : problème de convergence """), 58: _(""" - il y a des valeurs propres tres proches -"""), - -59: _(""" - il y a des vp tres proches + il y a des valeurs propres très proches """), 60: _(""" - la matrice : %(k1)s a une numerotation incoherente avec le nume_ddl. + la matrice : %(k1)s a une numérotation incohérente avec le NUME_DDL. """), 61: _(""" - le concept mode " %(k1)s " a ete cree avec les matrices matr_a: %(k2)s , matr_b: %(k3)s , matr_c: %(k4)s et non avec celles passees en arguments. + le concept MODE " %(k1)s " a été créé avec les matrices + MATR_A: %(k2)s + MATR_B: %(k3)s + MATR_C: %(k4)s + et non avec celles passées en arguments. """), 62: _(""" - le concept mode " %(k1)s " a ete cree avec les matrices matr_a: %(k2)s , matr_b: %(k3)s et non avec celles passees en arguments. + le concept MODE " %(k1)s " a été créé avec les matrices + MATR_A: %(k2)s + MATR_B: %(k3)s + et non avec celles passées en arguments. """), 63: _(""" - le systeme a resoudre n'a pas de ddl actif. + le système à résoudre n'a pas de DDL actif. """), 64: _(""" - on trouve plus de 9999valeurs propres dans la bande demandee + on trouve plus de 9999 valeurs propres dans la bande demandée """), 65: _(""" - la matrice de raideur est numeriquement singuliere (malgre la strategie de decalage) la valeur de decalage est une valeur propre ou la matrice est non inversible. + la matrice de raideur est numériquement singulière (malgré la stratégie de décalage) : + la valeur de décalage est une valeur propre ou la matrice est non inversible. """), 66: _(""" @@ -292,11 +293,14 @@ cata_msg={ """), 67: _(""" - la matrice de raideur est numeriquement singuliere (malgre la strategie de decalage) la borne maximale de la bande est une valeur propre. on poursuit tout de meme + la matrice de raideur est numeriquement singulière (malgré la stratégie de decalage) : + la borne maximale de la bande est une valeur propre. + n poursuit tout de meme. """), 68: _(""" - la matrice de raideur est singuliere malgre la strategie de decalage (ie structure avec des modes de corps solide). + la matrice de raideur est singulière malgre la strategie de décalage + (structure avec des modes de corps solide). """), 69: _(""" @@ -304,23 +308,23 @@ cata_msg={ """), 70: _(""" - type des valeurs variable d'un mode a l'autre, recuperation impossible. + type des valeurs variable d'un mode à l'autre, récuperation impossible. """), 71: _(""" - nombre d'equations variable d'un mode a l'autre, recuperation impossible. + nombre d'équations variable d'un mode à l'autre, récuperation impossible. """), 72: _(""" - probleme interne arpack + probleme interne ARPACK """), 73: _(""" - probleme taille workd/l -> augmenter dim_sous_espace + problème taille WORKD/L -> augmenter DIM_SOUS_ESPACE """), 74: _(""" - probleme interne lapack + problème interne LAPACK """), 75: _(""" @@ -328,47 +332,50 @@ cata_msg={ """), 76: _(""" - probleme interne lapack, routine flahqr (forme de schur) + probleme interne LAPACK, routine FLAHQR (forme de SCHUR) """), 77: _(""" - probleme interne lapack, routine ftrevc (vecteurs propres) + probleme interne LAPACK, routine FTREVC (vecteurs propres) """), 78: _(""" - aucune valeur propre a la precision requise --> augmenter prec_soren ou nmax_iter_soren ou augmenter dim_sous_espace + aucune valeur propre à la précision requise + --> augmenter PREC_SOREN ou NMAX_ITER_SOREN ou augmenter DIM_SOUS_ESPACE """), 79: _(""" - la position modale d'une des frequences est negative ou nulle, votre systeme matriciel est surement fortement singulier (ceci correspond generalement a un probleme dans la modelisation). + la position modale d'une des fréquences est négative ou nulle + votre système matriciel est surement fortement singulier + (ceci correspond généralement à un problème dans la modélisation). """), 80: _(""" - mode a creer avant appel a vpstor + MODE à créer avant appel à VPSTOR """), 81: _(""" - " %(k1)s " argument du mot cle "option" pour le calcul des frequences est invalide. + " %(k1)s " argument du mot cle "OPTION" pour le calcul des fréquences est invalide. """), 82: _(""" - pour l'option "bande" il faut exactement 2 frequences. + pour l'option "BANDE" il faut exactement 2 fréquences. """), 83: _(""" - frequence min. plus grande ou egale a la frequence max. + fréquence min. supérieure ou égale à la fréquence max. """), 84: _(""" - pour l'option "centre" il faut exactement 1 frequence. + pour l'option "CENTRE" il faut exactement une fréquence. """), 85: _(""" - pour l'option "plus_petite" les frequences de "freq" sont ignorees. + pour les options "PLUS_PETITE" et "TOUT" les frequences de "FREQ" sont ignorées. """), 86: _(""" - pour l'option "bande" il faut exactement 2 charges critiques. + pour l'option "BANDE" il faut exactement 2 charges critiques. """), 87: _(""" @@ -376,39 +383,39 @@ cata_msg={ """), 88: _(""" - pour l'option "centre" il faut exactement 1 charge critique. + pour l'option "CENTRE" il faut exactement une charge critique. """), 89: _(""" - pour l'option "plus_petite" les charges critiques de "char_crit" sont ignorees. + pour l'option "PLUS_PETITE" et "TOUT" les charges critiques de "CHAR_CRIT" sont ignorées. """), 90: _(""" - objet .refe/.refa/.celk inexistant. + objet .REFE/.REFA/.CELK inexistant. """), 91: _(""" - cham_no non feti ! + CHAM_NO non FETI """), 92: _(""" - liste de cham_no a concatener heterogene + liste de CHAM_NO à concaténer hétérogène """), 93: _(""" - les cham_nos %(k1)s et %(k2)s sont de type inconnu %(k3)s + les CHAM_NO %(k1)s et %(k2)s sont de type inconnu %(k3)s """), 94: _(""" - le cham_no %(k1)s de type %(k2)s ne peut etre copie dans le cham_no %(k3)s de type %(k4)s + le CHAM_NO %(k1)s de type %(k2)s ne peut etre copié dans le CHAM_NO %(k3)s de type %(k4)s """), 95: _(""" - champ a representation constante non traite. + champ à représentation constante : cas non traité. """), 96: _(""" - chout non feti ! + CHOUT non feti """), 97: _(""" @@ -416,10 +423,10 @@ cata_msg={ """), 98: _(""" - probleme interne lapack, routine dlahqr (forme de schur) + probleme interne LAPACK, routine DLAHQR (forme de SCHUR) """), 99: _(""" - probleme interne lapack, routine dtrevc (vecteurs propres) + probleme interne LAPACK, routine DTREVC (vecteurs propres) """), } diff --git a/Aster/Cata/cataSTA9/Messages/algeline4.py b/Aster/Cata/cataSTA9/Messages/algeline4.py index 5d63100d..75f0e40b 100644 --- a/Aster/Cata/cataSTA9/Messages/algeline4.py +++ b/Aster/Cata/cataSTA9/Messages/algeline4.py @@ -1,585 +1,281 @@ -#@ MODIF algeline4 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF algeline4 Messages DATE 02/06/2008 AUTEUR MEUNIER S.MEUNIER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" +1 : _(""" Seules les méthodes de résolution LDLT et MULT_FRONT sont autorisées. """), +3 : _(""" + Erreur lors de la résolution d'un système linéaire (GCPC) : + Non convergence avec le nombre d'iterations autorisé : %(i1)d + norme du residu (absolu) : %(r1)f + norme du residu (relatif) : %(r2)f -3: _(""" - non convergence nombre d'iterations: %(i1)d - norme du residu abs: %(r1)f - norme du residu rel: %(r2)f + Conseils : + * Vous pouvez augmenter le nombre d'itérations autorisées (SOLVEUR/NMAX_ITER). + * Vous pouvez aussi augmenter le niveau de remplissage pour la factorisation + incomplète (SOLVEUR/NIVE_REMPLISSAGE). + * Dans une commande non-linéaire (STAT_NON_LINE par exemple) vous pouvez aussi essayer de + diminuer la précision demandée pour la convergence (SOLVEUR/RESI_RELA), mais c'est plus + risqué car cela peut empecher la convergence de l'algorithme non-linéaire. """), -4: _(""" - manque de memoire memoire disponible %(i1)d et memoire necessaire %(i2)d +4 : _(""" + Manque de mémoire : + Mémoire disponible = %(i1)d + Mémoire nécessaire = %(i2)d """), -5: _(""" - erreur donnees noeud deja existant : %(k1)s +5 : _(""" + Erreur données : noeud déjà existant : %(k1)s """), - - - - - -7: _(""" - erreur donnees maille deja existante : %(k1)s +7 : _(""" + Erreur données : maille déjà existante : %(k1)s """), - - - - - -9: _(""" - erreur donnees group_ma deja existant : %(k1)s +9 : _(""" + Erreur données GROUP_MA déjà existant : %(k1)s """), - - - - - - - -11: _(""" - erreur donnees group_no deja existant : %(k1)s +11 : _(""" + erreur données GROUP_NO déjà existant : %(k1)s """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -17: _(""" - inigpc %(i1)d -"""), - - - - - - - - -19: _(""" +19 : _(""" Matrice masse non définie, il faudrait essayer l'autre algorithme de résolution. """), - - - - - - - -21: _(""" +21 : _(""" manque de place memoire longueur de bloc insuffisante: %(i1)d le super-noeud %(i2)d neccessite un bloc de %(i3)d """), - - - - - - - -23: _(""" - par nueq n'est pas l'identite.indice %(i1)d nueq %(i2)d -"""), - -24: _(""" +24 : _(""" %(k1)s pour le mot cle : %(k2)s noeud : %(k3)s composante : %(k4)s """), -25: _(""" +25 : _(""" combinaison non prevue type resultat : %(k1)s type matrice : %(k2)s type constante: %(k3)s """), - - - - - -27: _(""" - combinaison non prevue type resultat : %(k1)s type matrice : %(k2)s +27 : _(""" + combinaison non prevue + type résultat : %(k1)s + type matrice : %(k2)s """), - - - - - - - - - - - - - - - -31: _(""" - combinaison non prevue type resultat : %(k1)s +31 : _(""" + combinaison non prevue + type résultat : %(k1)s """), -32: _(""" - charge critique retenue : %(r1)f numero de mode stocke %(i1)d +33 : _(""" + la normalisation doit se faire en place + il est impossible d'avoir comme concept produit %(k1)s et %(k2)s comme concept d'entrée. """), -33: _(""" - la normalisation doit se faire en place et donc il est impossible d'avoir comme concept produit %(k1)s - et %(k2)s - comme concept d'entree. %(k3)s - comme le dit la sagesse populaire, on ne peut avoir le beurre et l'argent du beurre (de charente poitou). %(k4)s +36 : _(""" + l'option de normalisation %(k1)s n'est pas implantée. %(i1)d """), -34: _(""" - erreur dans les donnees la masse n existe pas dans la table %(k1)s +37 : _(""" + problème(s) rencontré(s) lors de la factorisation de la matrice : %(k1)s """), - - - - - - - -36: _(""" - l'option de normalisation %(k1)s n'est pas implantee. %(i1)d +38 : _(""" + appel erroné : + code retour de rsexch : %(i1)d + pb CHAM_NO %(k1)s """), -37: _(""" - probleme(s) rencontre(s) lors de la factorisation de la matrice : %(k1)s +42 : _(""" + pas de produit car les valeurs de la MATRICE sont %(k1)s + et celles du CHAM_NO sont %(k2)s """), -38: _(""" - appel errone : code retour de rsexch : %(i1)d pb cham_no %(k1)s +43 : _(""" + la maille de nom %(k1)s existe déjà %(k2)s """), - - - - - - - - - - - - - - - -42: _(""" - pas de produit car les valeurs de la matrice sont %(k1)s - et celles du cham_no sont %(k2)s +55 : _(""" + pas d'extraction pour %(k1)s + pour le numéro d'ordre %(i1)d """), -43: _(""" - la maille de nom %(k1)s existe deja %(k2)s +56 : _(""" + pas de mode extrait pour %(k1)s """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -55: _(""" - ***** alarme *****pas d'extraction pour %(k1)s - pour le numero d'ordre %(i1)d +57 : _(""" + NUME_MODE identique pour le %(i1)d + mode d'ordre %(i2)d """), -56: _(""" - ***** alarme *****pas de mode extrait pour %(k1)s +58 : _(""" + problème dans le préconditionnement de la matrice MATAS par LDLT imcomplet + pivot nul à la ligne : %(i1)d """), -57: _(""" - ***** alarme *****nume_mode identique pour le %(i1)d - mode d'ordre %(i2)d -"""), - -58: _(""" - - probleme dans le preconditionnement de la matrice matas par ldlt imcomplet - pivot nul a la ligne : %(i1)d -"""), - - - - - - - - -60: _(""" - incoherence n2 nbddl sans lagranges %(i1)d nbddl reconstitues %(i2)d +60 : _(""" + incoherence n2 NBDDL sans lagranges %(i1)d NBDDL reconstitués %(i2)d """), -61: _(""" +61 : _(""" pas de mode statique pour le noeud : %(k1)s et sa composante : %(k2)s """), -62: _(""" - pour les modes statiques. on attend un : %(k1)s noeud : %(k2)s - cmp : %(k3)s +62 : _(""" + pour les modes statiques, on attend un : %(k1)s + noeud : %(k2)s + cmp : %(k3)s """), -63: _(""" - champ inexistant.pb champ : %(k1)s noeud : %(k2)s cmp : %(k3)s +63 : _(""" + champ inexistant. + champ : %(k1)s + noeud : %(k2)s + cmp : %(k3)s """), -64: _(""" - detection d'un terme nul sur la sur diagonale valeur de beta %(r1)f - valeur de alpha %(r2)f +64 : _(""" + détection d'un terme nul sur la sur diagonale + valeur de BETA %(r1)f + valeur de ALPHA %(r2)f """), -65: _(""" - on a la %(i1)d -ieme frequence du systeme reduit est complexe = %(r1)f - et partie_imaginaire/reelle = %(r2)f +65 : _(""" + on a la %(i1)d -ème fréquence du système réduit est complexe = %(r1)f + et partie_imaginaire/réelle = %(r2)f """), -66: _(""" - la val. pro. est: %(r1)f +66 : _(""" + la valeur propre est : %(r1)f """), - - - - - - - 68: _(""" - la vp est: %(r1)f + la valeur propre est : %(r1)f """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -74: _(""" - calcul d' erreur modale une valeur propre reelle est detectee %(k1)s - a partir du couple (frequence, amortissement reduit) on ne peut plus l'a reconstruire %(k2)s - par convention l'erreur modale est fixee a : %(r1)f +74 : _(""" + calcul d'erreur modale : + une valeur propre réelle est detectee %(k1)s à partir du couple (fréquence, amortissement réduit) + on ne peut plus la reconstruire %(k2)s + par convention l'erreur modale est fixée à : %(r1)f """), -75: _(""" - probleme generalise complexe - amortissement (reduit) de decalage superieur en valeur absolu a %(r1)f - on le ramene a la valeur : %(r2)f +75 : _(""" + problème généralisé complexe + amortissement (reduit) de décalage supérieur en valeur absolue à %(r1)f + on le ramène à la valeur : %(r2)f """), -76: _(""" - la reorthogonalisation diverge apres %(i1)d iteration(s) %(i2)d +76 : _(""" + la réorthogonalisation diverge après %(i1)d itération(s) %(i2)d """), -77: _(""" - l'option de normalisation %(k1)s n'est pas implantee. +77 : _(""" + l'option de normalisation %(k1)s n'est pas implantée. """), - - - - - - - -79: _(""" - champ inexistant %(k1)s impossible de recuperer neq %(k2)s +79 : _(""" + champ inexistant %(k1)s impossible de récupérer NEQ %(k2)s """), -80: _(""" +80 : _(""" type de valeurs inconnu %(k1)s """), -81: _(""" - champ inexistant pb champ %(k1)s +81 : _(""" + champ inexistant %(k1)s """), -82: _(""" - incoherence de cer tains parametres modaux propres a arpack - numero d'erreur %(i1)d +82 : _(""" + incohérence de certains paramètres modaux propres à ARPACK + numéro d'erreur %(i1)d """), -83: _(""" - nombre de valeurs propres convergees %(i1)d - < nombre de frequences demandees %(i2)d - erreur arpack numero : %(i3)d - --> le calcul continue, la prochaine fois %(i4)d - --> augmenter dim_sous_espace = %(i5)d - --> ou nmax_iter_soren = %(i6)d - --> ou prec_soren = %(r1)f +83 : _(""" + nombre de valeurs propres convergées %(i1)d < nombre de fréquences demandées %(i2)d + erreur ARPACK numéro : %(i3)d + --> le calcul continue, la prochaine fois + --> augmenter DIM_SOUS_ESPACE = %(i4)d + --> ou NMAX_ITER_SOREN = %(i5)d + --> ou PREC_SOREN = %(r1)f """), - - - - - - - -85: _(""" - appel errone mode numero %(i1)d position modale %(i2)d - code retour de rsexch : %(i3)d - pb cham_no %(k1)s +85 : _(""" + appel erroné mode numéro %(i1)d position modale %(i2)d + code retour de RSEXCH : %(i3)d + pb CHAM_NO %(k1)s """), -86: _(""" - la reorthogonalisation diverge apres %(i1)d iteration(s) %(i2)d - vecteur traite : %(i3)d - vecteur teste : %(i4)d - arret de la reorthogonalisation %(k1)s +86 : _(""" + la réorthogonalisation diverge après %(i1)d itération(s) %(i2)d + vecteur traité : %(i3)d + vecteur testé : %(i4)d + arret de la réorthogonalisation %(k1)s """), -87: _(""" - pour le probleme reduitvaleur(s) propre(s) reelle(s) : %(i1)d - valeur(s) propre(s) complexe(s) avec conjuguee : %(i2)d - valeur(s) propre(s) complexe(s) sans conjuguee : %(i3)d +87 : _(""" + pour le probleme réduit + valeur(s) propre(s) réelle(s) : %(i1)d + valeur(s) propre(s) complexe(s) avec conjuguée : %(i2)d + valeur(s) propre(s) complexe(s) sans conjuguée : %(i3)d """), -88: _(""" - votre probleme est fortement amorti. - valeur(s) propre(s) reelle(s) : %(i1)d - valeur(s) propre(s) complexe(s) avec conjuguee : %(i2)d - valeur(s) propre(s) complexe(s) sans conjuguee : %(i3)d +88 : _(""" + votre problème est fortement amorti. + valeur(s) propre(s) réelle(s) : %(i1)d + valeur(s) propre(s) complexe(s) avec conjuguée : %(i2)d + valeur(s) propre(s) complexe(s) sans conjuguée : %(i3)d """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -94: _(""" - probleme quadratique complexe - amortissement (reduit) de decalage superieur en valeur absolu a %(r1)f - on le ramene a la valeur : %(r2)f +94 : _(""" + problème quadratique complexe + amortissement (réduit) de décalage supérieur en valeur absolue à %(r1)f + on le ramène à la valeur : %(r2)f """), -95: _(""" - probleme quadratique - amortissement (reduit) de decalage superieur en valeur absolu a %(r1)f - on le ramene a la valeur : %(r2)f +95 : _(""" + problème quadratique + amortissement (réduit) de décalage supérieur en valeur absolue à %(r1)f + on le ramène à la valeur : %(r2)f """), - - - - - - - - - - - - - - -98: _(""" - nombre de valeurs propres convergees %(i1)d - < nombre de frequences demandees %(i2)d - erreur arpack numero : %(i3)d - --> le calcul continue, la prochaine fois %(i4)d - --> augmenter dim_sous_espace = %(i5)d - --> ou nmax_iter_soren = %(i6)d - --> ou prec_soren = %(r1)f - si votre probleme est fortement amorti %(i7)d - il est possible que des modes propres %(i8)d - non calcules soient sur-amortis %(i9)d - --> diminuez le nombre de frequences %(i10)d - demandees %(i11)d +98 : _(""" + nombre de valeurs propres convergées %(i1)d < nombre de fréquences demandées %(i2)d + erreur ARPACK numéro : %(i3)d + --> le calcul continue, la prochaine fois + --> augmenter DIM_SOUS_ESPACE = %(i4)d + --> ou NMAX_ITER_SOREN = %(i5)d + --> ou PREC_SOREN = %(r1)f + si votre problème est fortement amorti, il est possible que + des modes propres non calculés soient sur-amortis + --> diminuez le nombre de fréquences demandées """), - - - - - - - } diff --git a/Aster/Cata/cataSTA9/Messages/algeline5.py b/Aster/Cata/cataSTA9/Messages/algeline5.py index 431d7e37..cd9b4074 100644 --- a/Aster/Cata/cataSTA9/Messages/algeline5.py +++ b/Aster/Cata/cataSTA9/Messages/algeline5.py @@ -1,4 +1,4 @@ -#@ MODIF algeline5 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF algeline5 Messages DATE 26/05/2008 AUTEUR BOITEAU O.BOITEAU # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -23,40 +23,336 @@ def _(x) : return x cata_msg={ +4: _(""" + erreur LAPACK (ou BLAS) au niveau de la routine %(k1)s + le paramètre numéro %(i1)d + n'a pas une valeur cohérente %(i2)d +"""), +5: _(""" + !! Attention, vous utilisez l'option de test FETI de l'interface. + On va donc simuler la résolution d'un système diagonal canonique, + pour provoquer un test d'ensemble de l'algorithme qui doit trouver + la solution U=1 sur tous les noeuds. + Vos résultats sont donc articiellement faussés pour les besoins de + ce test. Pour réaliser effectivement votre calcul, désactiver cette + option (INFO_FETI(12:12)='F' au lieu de 'T') !! +"""), +6: _(""" + Résolution MULTI_FRONTALE : + problème dans le traitement des résultats de AMDBAR + tous les NDS du SN %(i1)d ont NV nul +"""), +10: _(""" + ! le nb de noeuds de la structure : %(i1)d + ! la base utilisée est : %(k1)s + ! les caractéristiques élémentaires : %(k2)s + ! diamètre de la structure : %(r1)f + ! type de pas : %(i2)d + ---------------------------------------------- +"""), +11: _(""" + ! le profil de vitesse de la zone: %(k1)s + ! type de réseau de la zone : %(i1)d + ---------------------------------------------- +"""), +12: _(""" +"""), +13: _(""" + ! le noeud d'application : %(k1)s + ! la base utilisée est : %(k2)s + ! les caractéristiques élémentaires: %(k3)s + ! diamètre de la structure : %(r1)f + ! type de configuration : %(k4)s + ! le coefficient de masse ajoutée : %(r2)f + ! le profil de masse volumique : %(r3)f + ---------------------------------------------- +"""), +14: _(""" + pas de couplage pris en compte + ---------------------------------------------- +"""), +15: _(""" + pour le concept %(k1)s le mode numéro %(i1)d +"""), +16: _(""" + de frequence %(r1)f +"""), +17: _(""" + de charge critique %(r1)f +"""), +18: _(""" + a une norme d'erreur de %(r1)f supérieure au seuil admis %(r2)f +"""), +19: _(""" + pour le concept %(k1)s le mode numéro %(i1)d +"""), +20: _(""" + de fréquence %(r1)f + est en dehors de l'intervalle de recherche : %(r2)f + , %(r3)f +"""), +21: _(""" + de charge critique %(r1)f + est en dehors de l'intervalle de recherche : %(r2)f + , %(r3)f +"""), +22: _(""" +"""), +23: _(""" + pour le concept %(k1)s +"""), -4: _(""" - erreur lapack (ou blas) au niveau de la routine %(k1)s - le parametre numero %(i1)d - n'a pas une valeur coherente %(i2)d +24: _(""" + dans l'intervalle ( %(r1)f , %(r2)f ) + il y a théoriquement %(i1)d frequence(s) + et on en a calculé %(i2)d """), -5: _(""" - !! Attention, vous utilisez l'option de test FETI de l'interface. - On va donc simuler la résolution d'un système diagonal canonique, - pour provoquer un test d'ensemble de l'algorithme qui doit trouver - la solution U=1 sur tous les noeuds. - Vos résultats sont donc articiellement faussés pour les besoins de - ce test. Pour réaliser effectivement votre calcul, désactiver cette - option (INFO_FETI(12:12)='F' au lieu de 'T') !! +25: _(""" + dans l'intervalle ( %(r1)f , %(r2)f ) + il y a théoriquement %(i1)d charge(s) critique(s) + et on en a calculé %(i2)d +"""), + +26: _(""" + +"""), + +27: _(""" + la valeur du shift %(r1)f est une fréquence propre +"""), + +28: _(""" + les nombres de termes des matrices RIGI et MASSE différent + celui de la matrice MASSE vaut : %(i1)d + celui de la matrice RIGI vaut : %(i2)d + +"""), + +29: _(""" + le nombre d'amortissements reduits est trop grand + le nombre de modes propres vaut %(i1)d + et le nombre de coefficients : %(i2)d + on ne garde donc que les %(i3)d premiers coefficients + +"""), + +30: _(""" + le nombre d'amortissements réduits est insuffisant, il en manque : %(i1)d, + car le nombre de modes vaut : %(i2)d + on rajoute %(i3)d amortissements réduits avec la valeur du dernier mode propre. +"""), + +31: _(""" + incoherence : + DEEQ I = %(i1)d + DEEQ(2*I-1) = %(i2)d + DEEQ(2*I) = %(i3)d + +"""), + +32: _(""" + erreur de type DELG(IDDL) différent de -1 ou -2 %(i1)d +"""), + +33: _(""" + un ddl bloqué a au moins 2 LAMBDA1 ou 2 LAMBDA2 + le ddl bloqué est %(i1)d + """), +34: _(""" + incohérence des lagranges + DDL %(i1)d + LAMBDA1 %(i2)d + LAMBDA1 %(i3)d +"""), + +35: _(""" + erreur programmeur + le LAMBDA2 %(i1)d a moins de 2 voisins + il faut le LAMBDA1 et au moins un DDL + +"""), + +36: _(""" + Problème dans le calcul des DDL : + NUM devrait etre égal à n1 : + num = %(i1)d , n1 = %(i2)d + impression des lagranges +"""), + +37: _(""" + NUME_DDL incohérence des lagranges + ddl %(i1)d + lambda1 %(i2)d + lambda1 %(i3)d +"""), + +38: _(""" + nombre de relations linéaires %(i1)d +"""), + +39: _(""" + LAMBDA1 de R linéaire : %(i1)d + LAMBDA2 de R linéaire : %(i2)d +"""), + +40: _(""" + Données erronées +"""), + +41: _(""" + pas de mode statique pour le noeud : %(k1)s et sa composante : %(k2)s + +"""), + +42: _(""" + pour les modes statiques : + on attend un : %(k1)s + noeud : %(k2)s + cmp : %(k3)s + +"""), + +43: _(""" + champ inexistant. + champ : %(k1)s + noeud : %(k2)s + cmp : %(k3)s + +"""), + +48: _(""" + incohérence de certains paramètres modaux propres à ARPACK + numéro d'erreur %(i1)d + +"""), + +49: _(""" + nombre de valeurs propres convergées %(i1)d < nombre de fréquences demandées %(i2)d + erreur ARPACK numéro : %(i3)d + --> le calcul continue, la prochaine fois + --> augmenter DIM_SOUS_ESPACE = %(i4)d + --> ou NMAX_ITER_SOREN = %(i5)d + --> ou PREC_SOREN = %(r1)f + +"""), + +51: _(""" + la valeur propre numéro %(i1)d a une partie imaginaire non nulle + re(vp) = %(r1)f + im(vp) = %(r2)f + --> ce phénomène numérique est fréquent + --> sur les premières valeurs propres + --> lorsque le spectre recherche est + --> tres étendu (en pulsation) + +"""), + +52: _(""" + LAIGLE: Erreur + - Non convergence à l'itération maxi : %(i1)d + - Convergence irrégulière & erreur > %(r1)f + - Diminuer la taille d'incrément. +"""), + +53: _(""" + Erreur de programmation MULT_FRONT (NUME_DDL / PREML0) : + * Sur-connexion des Lagranges Lambda1 +"""), + +54: _(""" + ==== Type de maille Aster / Type de maille GMSH ==== +"""), + +55: _(""" + %(i1)d éléments %(k1)s découpés en %(i2)d éléments %(k2)s a %(i3)d noeuds +"""), + +56: _(""" + La matrice factorisée produit par l'opérateur FACTOR ne peut faire l'objet + d'un concept réentrant car la méthode de résolution définie dans NUME_DDL + est 'GCPC'. +"""), + +57: _(""" + Le préconditionnement d'une matrice assemblée complexe n'est pas permis. +"""), + +58: _(""" + La masse du modele est nulle. On ne peut normer par rapport a la masse. +"""), + +59: _(""" + MULT_FRONT: Erreur dans la renumerotation + - Le Super-Noeud : %(i1)d + - devrait etre le fils de %(i2)d + + Risques & conseils : + - Vous devriez rencontrer des problèmes lors de la factorisation. + - Essayez un autre algorithme pour la renumérotation : 'MD', 'MDA', ... +"""), + +60: _(""" + Méthode QZ dans MODE_ITER_SIMULT: La variante QR ne fonctionne qu'avec une + matrice B symétrique définie positive ! Donc elle n'accepte pas le flambement, + les Lagranges d'AFFE_CHAR_MECA, une matrice de rigidité complexe ou les + problèmes modaux quadratiques. +"""), +61: _(""" + Méthode QZ dans MODE_ITER_SIMULT: propriété spectrale non respectée sur la + valeur propre n %(i1)d !. On a pas |alpha| < ||A|| et |béta| < ||B|| + |alpha|=%(r1)f, ||A||=%(r2)f + | béta|=%(r3)f, ||B||=%(r4)f +"""), +62: _(""" + Méthode QZ dans MODE_ITER_SIMULT: On trouve un nombre de valeurs propres + %(i1)d différent du nombre de ddls physiques actifs %(i2)d ! +"""), +63: _(""" + Méthode QZ dans MODE_ITER_SIMULT + OPTION='BANDE': On trouve un nombre de + valeurs propres %(i1)d différent du nombre de valeurs propres détectées + dans la bande %(i2)d ! +"""), +64: _(""" + Problème modal quadratique et méthode de JACOBI sont incompatible ! + Essayer plutôt la méthode de SORENSEN (METHODE='SORENSEN'). +"""), +65: _(""" + L'option de calcul 'TOUT' n'est licite qu'avec METHODE='QZ'! +"""), +66: _(""" + Méthode QZ dans MODE_ITER_SIMULT : On souhaite un nombre de valeurs + propres %(i1)d supérieur au nombre de valeurs propres détectées %(i2)d ! +"""), +67: _(""" + Attention on souhaite un nombre de valeurs propres NMAX_FREQ=%(i1)d supérieur + au nombre de valeurs propres détectées NCONV=%(i2)d ! + Pour poursuivre le calcul on impose NMAX_FREQ=NCONV. + Sans doute est-ce du à un mauvais tri dans les valeurs propres complexes + conjuguées. Contacter l'équipe de développement. +"""), +68: _(""" + Méthode QZ dans MODE_ITER_SIMULT: erreur LAPACK %(i1)d ! +"""), } diff --git a/Aster/Cata/cataSTA9/Messages/algorith.py b/Aster/Cata/cataSTA9/Messages/algorith.py index fc8e0b7c..a41b5819 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith.py +++ b/Aster/Cata/cataSTA9/Messages/algorith.py @@ -1,385 +1,220 @@ -#@ MODIF algorith Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF algorith Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { - - - - - - -3: _(""" - type de matrice inconnu. -"""), - -4: _(""" - points confondus +1 : _(""" + La modélisation C_PLAN n'est pas compatible avec la loi de comportement ELAS_VMIS_PUIS. """), -5: _(""" - gradients confondus +3 : _(""" + type de matrice inconnu. """), - - - - -10: _(""" +10 : _(""" impossible de diagonaliser la matrice de raideur en choc """), -11: _(""" - puls(i) = 0. initialisation a puls0(i). +11 : _(""" + PULS(I) = 0. + initialisation à PULS0(I). """), -12: _(""" - -> L'option 'ACCE_ABSOLU' est incorrectement traitée en multi appuis. - Sauf si les mouvements sont corrélés. - -> Risque & Conseil : - Assurez-vous que les mouvements sont décorrélés et indépendants. - +13 : _(""" + le VECT_ELEM n'existe pas : %(k1)s """), -13: _(""" - le vect_elem n'existe pas : %(k1)s +16 : _(""" + les charges cinématiques sont pour l'instant proscrites avec FETI """), -14: _(""" - champ non renseigne. il faut avoir utilise corich('e',...) sur: %(k1)s -"""), - -15: _(""" - impossible -"""), - -16: _(""" - les charges cinematiques sont pour l'instant proscrites avec feti -"""), - -19: _(""" - stop 3 -"""), - -20: _(""" - on n'a pas pu extraire le premier champ des modes mecaniques. -"""), - -21: _(""" +21 : _(""" le noeud %(k1)s n'appartient pas au maillage : %(k2)s """), -22: _(""" - le groupe %(k1)s n'appartient pas au maillage : %(k2)s -"""), - -23: _(""" - le noeud %(k1)s n'est pas un noeud support. +25 : _(""" + données incompatibles. """), -24: _(""" - le nombre de cas doit etre superieur a deux pour etre combine +32 : _(""" + la numérotation n'est pas cohérente avec le modèle généralisé + si vous avez activé l'option INITIAL dans NUME_DDL_GENE faites de meme ici ! """), -25: _(""" - donnees incompatibles. +33 : _(""" + calcul des options RIGI_MECA_TANG, RAPH_MECA et FULL_MECA + en mécanique des milieux poreux avec couplage THM + ---> erreur de dimensionnement """), -26: _(""" - le vecteur directeur du spectre est nul. +34 : _(""" + il y a incohérence entre : + la loi de couplage de DEFI_MATERIAU : %(k1)s + et la loi de couplage de STAT_NON_LINE : %(k2)s """), -27: _(""" - cas du mono_appui : vous avez deja donne un spectre pour cette direction. +35 : _(""" + les champs " %(k1)s " et " %(k2)s " n'ont pas le meme domaine de définition. """), -28: _(""" - erreur(s) rencontree(s) lors de la lecture des supports. +36 : _(""" + BARSOUM, erreur dans le traitement des mailles %(k1)s """), -29: _(""" - vous avez deja donne un spectre pour le support %(k1)s +42 : _(""" + BETON_DOUBLE_DP: incrément de déformation plastique en traction négatif + --> redécoupage automatique du pas de temps """), -30: _(""" - on ne peut pas traiter du mono-appui et du multi-appui simultanement. +43 : _(""" + BETON_DOUBLE_DP: incrément de déformation plastique en compression négatif + --> redécoupage automatique du pas de temps """), -31: _(""" - le noeud %(k1)s ne fait pas parti du maillage : %(k2)s +44 : _(""" + intégration élastoplastique de la loi BETON_DOUBLE_DP : + la condition d'applicabilité sur la taille des éléments + n'est pas respectée en compression. """), -32: _(""" - la numerotation n'est pas coherente avec le modele generalise si vous avez active l'option initial dans nume_ddl_gene faite de meme ici ! on arrete tout +45 : _(""" + intégration élastoplastique de la loi BETON_DOUBLE_DP : + la condition d'applicabilité sur la taille des elements + n'est pas respectée en compression pour la maille: %(k1)s """), -33: _(""" - dimensionement +46 : _(""" + intégration élastoplastique de la loi BETON_DOUBLE_DP : + la condition d'applicabilité sur la taille des éléments + n est pas respectée en traction. """), -34: _(""" - il y a incohrence entre la loi de couplage de defi_materiau %(k1)s et la loi de couplage dans stat_non_line %(k2)s +47 : _(""" + integration élastoplastique de la loi BETON_DOUBLE_DP : + la condition d'applicabilite sur la taille des éléments + n'est pas respectée en traction pour la maille: %(k1)s """), -35: _(""" - les champs " %(k1)s " et " %(k2)s " n'ont pas le meme domaine de definition. -"""), - -36: _(""" - barsoum, hexa : bug ! -"""), - -37: _(""" - barsoum, penta : bug ! -"""), - -38: _(""" - barsoum, pyram : bug ! -"""), - -39: _(""" - barsoum, quad : bug ! -"""), - -40: _(""" - barsoum, tetra : bug ! -"""), - -41: _(""" - barsoum, tria : bug ! -"""), - -42: _(""" - beton_double_dp: increment de deformation plastique en traction negatif --> redecoupage auto du pas de temps -"""), - -43: _(""" - beton_double_dp: increment de deformation plastique en compression negatif --> redecoupage auto du pas de temps -"""), - -44: _(""" - integration elastoplastique de loi beton_double_dp : la condition d applicabilite sur la taille des elements n est pas respectee en compression. -"""), - -45: _(""" - integration elastoplastique de loi beton_double_dp : la condition d applicabilite sur la taille des elements n est pas respectee en compression pour la maille: %(k1)s -"""), - -46: _(""" - integration elastoplastique de loi beton_double_dp : la condition d applicabilite sur la taille des elements n est pas respectee en traction. -"""), - -47: _(""" - integration elastoplastique de loi beton_double_dp : la condition d applicabilite sur la taille des elements n est pas respectee en traction pour la maille: %(k1)s -"""), - -48: _(""" - -> Intégration élastoplastique de loi multi-critères beton_double_dp : - la contrainte équivalente est nulle pour la maille %(k1)s: le calcul - de la matrice tangente est impossible. +48 : _(""" + -> Intégration élastoplastique de loi multi-critères BETON_DOUBLE_DP : + la contrainte équivalente est nulle pour la maille %(k1)s + le calcul de la matrice tangente est impossible. -> Risque & Conseil : - -"""), - -49: _(""" - pour la loi beton_double_dp le parametre coef_elas_comp doit etre compris entre 0. et 100. -"""), - -50: _(""" - pour la loi beton_double_dp le parametre long_cara doit etre strictement positif -"""), - -51: _(""" - beton_double_dp: le cas des contraintes planes n esp pas traite pour ce modele. """), -52: _(""" - resultat n'est pas en evol_noli +51 : _(""" + BETON_DOUBLE_DP: + le cas des contraintes planes n'est pas traité pour ce modèle. """), -53: _(""" - champ sief_elga non trouve +57 : _(""" + le matériau dépend de la température + il n'y a pas de champ de température + le calcul est impossible """), -54: _(""" - champ epsp_elno non trouve +60 : _(""" + certains coefficients de masse ajoutée sont négatifs. + verifiez l'orientation des normales des éléments d'interface. + convention adoptée : structure vers fluide """), -55: _(""" - champ vari_elno_elga non trouve +61 : _(""" + certains coefficients d'amortissement ajouté sont négatifs. + possibilité d'instabilité de flottement """), -56: _(""" - aucun champ initial trouve -"""), - -57: _(""" - le materiau depend de la temperature! il n'y a pas de champ de temperature ! le calcul est impossible -"""), - - - - - - -59: _(""" - thlag-gleg pas possible -"""), - -60: _(""" - certains coefficients de masse ajoutee sont negatifs. verifiez l' orientation des normales des elements d' interface.convention adoptee : structure vers fluide -"""), - -61: _(""" - certains coefficients d amortissement ajoute sont negatifs. possibilited instabilitede flottement -"""), - -62: _(""" +62 : _(""" erreur dans le calcul des valeurs propres de la matrice de raideur """), -63: _(""" - valeurs propres de la matrice de raideur non reelles +63 : _(""" + valeurs propres de la matrice de raideur non réelles """), -64: _(""" - valeurs propres de la matrice de raideur reelles negatives +64 : _(""" + valeurs propres de la matrice de raideur réelles négatives """), -65: _(""" - erreur dans la selection des valeurs propres de la matrice de raideur +65 : _(""" + erreur dans la sélection des valeurs propres de la matrice de raideur """), -66: _(""" +66 : _(""" tailles des matrices incompatibles pour calcul matrice diagonale """), -67: _(""" - option secante non valide +67 : _(""" + option SECANTE non valide """), -68: _(""" - trop de familles de systemes de glissement. augmenter la limite actuelle (5) +68 : _(""" + trop de familles de systèmes de glissement. + augmenter la limite actuelle (5) """), -69: _(""" - trop de familles de systemes de glissement. modifier gerpas +69 : _(""" + trop de familles de systèmes de glissement. + modifier GERPAS """), -70: _(""" - nbsys=0 +70 : _(""" + Le nombre de système de glissement est égal à 0 """), -71: _(""" +71 : _(""" tailles incompatibles pour le produit matrice * vecteur """), -72: _(""" - traitement non prevu pour le type d'obstacle demande +72 : _(""" + traitement non prévu pour le type d'obstacle demandé """), -73: _(""" - obstacle de type discret mal defini (un angle > pi). +73 : _(""" + obstacle de type discret mal défini (un angle est supérieur à pi). """), - - - - - -77: _(""" - pb a la resolution du systeme +77 : _(""" + problème à la résolution du système """), -78: _(""" - cas 2d impossible +78 : _(""" + cas 2D impossible """), -79: _(""" +79 : _(""" liaison de frottement incongrue """), - - - - - -81: _(""" - erreur contact - trop de reac. geom. -"""), - -82: _(""" - erreur pgmeur 1 -"""), - - - - - - - - -89: _(""" - vecteur diagnostic absent (dvlp) -"""), - -90: _(""" - operation inconnue sur le vecteur diagnostic (dvlp) -"""), - -91: _(""" - acces incorrect au vecteur diagnostic (dvlp) -"""), - -92: _(""" - cas impossible -"""), - - - -94: _(""" - pas possible +81 : _(""" + erreur contact - trop de réactualisations géométriques """), - - - - - -96: _(""" - ce mot cle de modi_maillage attend un vecteur de norme non nulle. +96 : _(""" + ce mot cle de MODI_MAILLAGE attend un vecteur de norme non nulle. """), -97: _(""" - le mot cle repere de modi_maillage attend deux vecteurs non nuls orthogonaux. +97 : _(""" + le mot cle REPERE de MODI_MAILLAGE attend deux vecteurs non nuls orthogonaux. """), - - - - - - - - - } diff --git a/Aster/Cata/cataSTA9/Messages/algorith10.py b/Aster/Cata/cataSTA9/Messages/algorith10.py index d8a49ab6..da5950fe 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith10.py +++ b/Aster/Cata/cataSTA9/Messages/algorith10.py @@ -1,8 +1,8 @@ -#@ MODIF algorith10 Messages DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF algorith10 Messages DATE 11/03/2008 AUTEUR MAHFOUZ D.MAHFOUZ # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,397 +20,296 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - la variable %(k1)s n existe pas dans la loi %(k2)s +1 : _(""" + la variable %(k1)s n'existe pas dans la loi %(k2)s """), -2: _(""" - tailles matrices incompatibles +2 : _(""" + tailles de matrices incompatibles """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -10: _(""" +10 : _(""" taille produit matrice-vecteur incompatible """), -11: _(""" - le champ de deplacement n'a pas ete calcule. +11 : _(""" + le champ de déplacement n'a pas été calculé """), -12: _(""" - le champ de vitesse n'a pas ete calcule. +12 : _(""" + le champ de vitesse n'a pas été calculé """), -13: _(""" - le champ d'acceleration n'a pas ete calcule. +13 : _(""" + le champ d'accélération n'a pas ete calcule. """), -14: _(""" - developpement non prevu pour le mult_appui ou corr_stat. +14 : _(""" + développement non prévu pour le MULT_APPUI ou CORR_STAT. """), -15: _(""" - developpement non prevu pour la sous-structuration. +15 : _(""" + développement non prévu pour la sous-structuration. """), -16: _(""" - le champ %(k1)s n'a pas ete calcule dans le mode_meca %(k2)s +16 : _(""" + le champ %(k1)s n'a pas été calculé dans le MODE_MECA %(k2)s """), -17: _(""" - l'option %(k1)s s'aplique sur toute la structure +17 : _(""" + l'option %(k1)s s'applique sur toute la structure """), - - - - - - - - - - -20: _(""" +20 : _(""" le comportement : %(k1)s n'a pas etet defini """), -21: _(""" - dist_refe est obligatoire a la premiere occurence de reco_global +21 : _(""" + DIST_REFE est obligatoire à la première occurence de RECO_GLOBAL """), - - - - - - - - - - - - - - - - - - - - -31: _(""" - la bande de frequence retenue ne comporte pas de modes propres +31 : _(""" + la bande de fréquence retenue ne comporte pas de modes propres """), -32: _(""" - vous avez demande des modes qui ne sont pas calcules +32 : _(""" + vous avez demandé des modes qui ne sont pas calculés """), -33: _(""" - il n y a pas de mode statique calcule pour le couple noeud-cmp ci dessus +33 : _(""" + il n y a pas de mode statique calculé pour le couple noeud-cmp ci dessus """), -34: _(""" - redecoupage demande apres non convergence locale. redecoupage global +34 : _(""" + redécoupage demandé après non convergence locale + redécoupage global """), -35: _(""" - redecoupage excessif du pas de temps interne : reduisez votre pas de temps ou augmenter abs(iter_inte_pas). redecoupage global. +35 : _(""" + redécoupage excessif du pas de temps interne + réduisez votre pas de temps ou augmenter abs(ITER_INTE_PAS) + redecoupage global. """), -36: _(""" - il manque sigm_refe +36 : _(""" + il manque SIGM_REFE """), -37: _(""" - il manque resi_hyd1_refe +37 : _(""" + il manque RESI_HYD1_REFE """), -38: _(""" - il manque resi_hyd2_refe +38 : _(""" + il manque RESI_HYD2_REFE """), -39: _(""" - il manque resi_ther_refe +39 : _(""" + il manque RESI_THER_REFE """), -40: _(""" - vecteur nul entrainant une division par zero dans nmconv +40 : _(""" + vecteur nul entrainant une division par zéro dans NMCONV """), -41: _(""" - incoherence de a ou h +41 : _(""" + incohérence de A ou H """), -42: _(""" - incoherence de donnees +42 : _(""" + incohérence de données """), -43: _(""" - incoherence de c, phi ou a +43 : _(""" + incohérence de C, PHI ou A """), -44: _(""" - champ 'depl' non calcule +44 : _(""" + champ 'DEPL' non calculé """), -45: _(""" - champ 'vite' non calcule +45 : _(""" + champ 'VITE' non calculé """), -46: _(""" - champ 'acce' non calcule +46 : _(""" + champ 'ACCE' non calculé """), -47: _(""" - lecture des instants erronee +47 : _(""" + lecture des instants erronée """), -48: _(""" - axe de rotation indefini. +48 : _(""" + axe de rotation indéfini. """), -49: _(""" - la porosite initiale f0 ne peut etre nulle ou negative +49 : _(""" + la porosité initiale F0 ne peut etre nulle ou négative """), -50: _(""" - la porosite initiale f0 ne peut etre egal ou plus grand que un +50 : _(""" + la porosité initiale F0 ne peut etre supérieure ou égale à 1. """), -51: _(""" - comportement de rousselier version petit_reac non implante en contraintes planes +51 : _(""" + comportement de Rousselier version PETIT_REAC non implanté en contraintes planes """), -52: _(""" - la porosite initiale f0 ne peut etre negative +52 : _(""" + la porosité initiale F0 ne peut etre négative """), -53: _(""" +53 : _(""" pb2, variables de pilotages """), -54: _(""" - rk41. erreur d integration dans runge-kutta. trop d iteration. +54 : _(""" + erreur d'intégration dans Runge-Kutta + trop d'itération. """), -55: _(""" - rk42. erreur d integration dans. runge-kutta. +55 : _(""" + erreur d integration dans Runge-Kutta """), -56: _(""" +56 : _(""" on ne sait pas post-traiter le champ de type: %(k1)s """), -57: _(""" - choix incorrect du schema d'integration numerique pour le contact -"""), - -58: _(""" - choix incorrect de l'algorithme de restriction de l'espace des multiplicateurs -"""), - -60: _(""" +60 : _(""" taille vecteurs incompatible """), -61: _(""" - il faut definir une bande ou un nume_ordre +61 : _(""" + il faut definir une BANDE ou un NUME_ORDRE """), -62: _(""" - il faut definir une "bande" ou une liste de "nume_ordre" +62 : _(""" + il faut definir une "BANDE" ou une liste de "NUME_ORDRE" """), -63: _(""" +63 : _(""" dimension spectrale fausse """), -64: _(""" - l'interspectre modal est de type "acce", on ne peut que restitituer une acceleration +64 : _(""" + l'interspectre modal est de type "ACCE" + on ne peut que restituer une accélération """), -65: _(""" - l'interspectre modal est de type "vite", on ne peut que restitituer une vitesse +65 : _(""" + l'interspectre modal est de type "VITE" + on ne peut que restituer une vitesse """), -66: _(""" - l'interspectre modal est de type "depl", on ne peut pas restitituer une acceleration +66 : _(""" + l'interspectre modal est de type "DEPL" + on ne peut pas restituer une accélération """), -67: _(""" - l'interspectre modal est de type "depl", on ne peut pas restitituer une vitesse +67 : _(""" + l'interspectre modal est de type "DEPL" + on ne peut pas restituer une vitesse """), -68: _(""" - il faut autant de "noeud" que de "nom_cmp" +68 : _(""" + il faut autant de "NOEUD" que de "NOM_CMP" """), -69: _(""" - il faut autant de "maille" que de "noeud" +69 : _(""" + il faut autant de "MAILLE" que de "NOEUD" """), - - - - - - - - - - - - - - -72: _(""" - il faut definir une liste de mailles pour post-traiter un cham_elem +72 : _(""" + il faut définir une liste de mailles pour post-traiter un CHAM_ELEM """), -73: _(""" +73 : _(""" la composante %(k1)s du noeud %(k2)s pour la maille %(k3)s n'existe pas. """), -74: _(""" - on ne traite pas le "poi1" -"""), - -75: _(""" - type de maille non traitee -"""), - -76: _(""" - mot-cle nb_bloc inoperant on prend 1 bloc +74 : _(""" + on ne traite pas la maille "POI1" """), -77: _(""" - element degenere +75 : _(""" + type de maille non traitée """), - - - - - -79: _(""" - ddl inconnu sur le noeud ou la maille specifiee pour le suivi -"""), - -80: _(""" - option indisponible pourle suivi +76 : _(""" + mot-clé nb_bloc inopérant on prend 1 bloc """), -81: _(""" - trop de suivis (limite a 4) +77 : _(""" + élément dégénéré """), -82: _(""" - pas de suivi attache a la demande d affichage +82 : _(""" + pas de suivi attaché à la demande d'affichage """), -83: _(""" +83 : _(""" trop de lignes dans le titre """), -84: _(""" - erreur dvt dans le type d extrema -"""), - -85: _(""" - le nombre de suivi ddl est limite a 4 ! +84 : _(""" + erreur dvt dans le type d'extrema """), -86: _(""" - melange de champs de nature differente dans le meme mot-clef facteur suivi -"""), - -87: _(""" +87 : _(""" vecteur de norme trop petite """), -88: _(""" - comp_elas non implante +88 : _(""" + COMP_ELAS non implanté """), -89: _(""" - z negatif +89 : _(""" + Z est négatif (phase métallurgique) """), -90: _(""" - la definition de la temperature est obligatoire pour une loi de couplage de type %(k1)s +90 : _(""" + la définition de la température est obligatoire + pour une loi de couplage de type %(k1)s """), -91: _(""" - probleme dans la definition de la saturation +91 : _(""" + problème dans la définition de la saturation """), -92: _(""" - echec dans elimination temps +92 : _(""" + échec dans élimination temps """), -93: _(""" +93 : _(""" il faut un nom de champ """), -94: _(""" - pas de champ autre que depl ou vite ou acce +94 : _(""" + pas de champ autre que DEPL ou VITE ou ACCE """), -95: _(""" - pour interpoler il faut fournir une liste de frequences ou instants. +95 : _(""" + pour interpoler il faut fournir une liste de fréquences ou instants. """), -96: _(""" - calcul du transitoire: pas de solution trouvee. utiliser l'option etat_stat = non. +96 : _(""" + calcul du transitoire: pas de solution trouvée + utiliser l'option ETAT_STAT = NON """), -97: _(""" - duree de l'excitation trop courte pour le calcul du transitoire. +97 : _(""" + durée de l'excitation trop courte pour le calcul du transitoire. """), -98: _(""" +98 : _(""" pivot nul """), -99: _(""" - on ne sait pas encore traiterla sous structuration en axisymetrique +99 : _(""" + on ne sait pas encore traiter la sous structuration en axisymétrique """), + } diff --git a/Aster/Cata/cataSTA9/Messages/algorith11.py b/Aster/Cata/cataSTA9/Messages/algorith11.py index b6b04a7b..4cefddcb 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith11.py +++ b/Aster/Cata/cataSTA9/Messages/algorith11.py @@ -1,8 +1,8 @@ -#@ MODIF algorith11 Messages DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF algorith11 Messages DATE 18/03/2008 AUTEUR CNGUYEN C.NGUYEN # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,373 +20,253 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - le sup de kmod0 est nul. on prend le sup de kmod. +1 : _(""" + le sup de KMOD0 est nul + on prend le sup de KMOD """), -2: _(""" - le sup de kmod est nul. +2 : _(""" + le sup de KMOD est nul. """), -3: _(""" - la variable amor est nulle +3 : _(""" + la variable AMOR est nulle """), -4: _(""" +4 : _(""" erreur de dimension (dvlp) """), -5: _(""" +5 : _(""" force normale nulle. """), -6: _(""" +6 : _(""" somme des "impacts-ecrouissage" < somme des "glissement" """), -7: _(""" - "nom_cas" n'est pas une variable d'acces d'un resultat de type "evol_ther". +7 : _(""" + "NOM_CAS" n'est pas une variable d'accès d'un résultat de type "EVOL_THER". """), -8: _(""" - "nume_mode" n'est pas une variable d'acces d'un resultat de type "evol_ther". +8 : _(""" + "NUME_MODE" n'est pas une variable d'accès d'un résultat de type "EVOL_THER". """), -9: _(""" - "nume_mode" n'est pas une variable d'acces d'un resultat de type "mult_elas". +9 : _(""" + "NUME_MODE" n'est pas une variable d'accès d'un résultat de type "MULT_ELAS". """), -10: _(""" - "inst" n'est pas une variable d'acces d'un resultat de type "mult_elas". +10 : _(""" + "INST" n'est pas une variable d'accès d'un resultat de type "MULT_ELAS". """), -11: _(""" - "nom_cas" n'est pas une variable d'acces d'un resultat de type "fourier_elas". +11 : _(""" + "NOM_CAS" n'est pas une variable d'accès d'un resultat de type "FOURIER_ELAS". """), -12: _(""" - "inst" n'est pas une variable d'acces d'un resultat de type "fourier_elas". +12 : _(""" + "INST" n'est pas une variable d'accès d'un resultat de type "FOURIER_ELAS". """), -13: _(""" - "nom_cas" n'est pas une variable d'acces d'un resultat de type "fourier_ther". +13 : _(""" + "NOM_CAS" n'est pas une variable d'accès d'un resultat de type "FOURIER_THER". """), -14: _(""" - "inst" n'est pas une variable d'acces d'un resultat de type "fourier_ther". +14 : _(""" + "INST" n'est pas une variable d'accès d'un resultat de type "FOURIER_THER". """), -15: _(""" - "resu_init" est obligatoire +15 : _(""" + "RESU_INIT" est obligatoire """), -16: _(""" - "maillage_init" est obligatoire +16 : _(""" + "MAILLAGE_INIT" est obligatoire """), -17: _(""" +17 : _(""" "resu_final" est obligatoire """), -18: _(""" +18 : _(""" "maillage_final" est obligatoire """), -19: _(""" - 3 valeurs pour "tran" +20 : _(""" + TYPCAL invalide : %(k1)s """), -20: _(""" - typcal invalide : %(k1)s +24 : _(""" + absence de potentiel permanent """), -24: _(""" - absence de potentiel permanent. on arrete tout. +25 : _(""" + le modele fluide n'est pas thermique """), -25: _(""" - le modele fluide n est pas thermique!!!. on arrete tout. +26 : _(""" + le modele interface n'est pas thermique """), -26: _(""" - le modele interface n est pas thermique!!!. on arrete tout. +27 : _(""" + modèle fluide incompatible avec le calcul de masse ajoutée + seules les modelisations PLAN ou 3D ou AXIS sont utilisées """), -27: _(""" - modele fluide incompatible avec le calcul de masse ajoutee. seules les modelisations plan ou 3d ou axis sont utilisees. -"""), - -28: _(""" - on ne trouve pas de champ de temperature chtn -"""), - -29: _(""" - le nombre d'amortissement modaux est different du nombre de modes dynamiques -"""), - -30: _(""" - il n y a pas le meme nombre de modes retenus dans l'excitation modale et dans la base modale -"""), - -31: _(""" - il faut autant d'indices en i et j -"""), -32: _(""" - avec sour_press et sour_force il faut deux points/ddls d'application -"""), - -33: _(""" - mauvais accord entre nombre d'appuis et nombre de valeur dans le mot-clef: nume_ordre_i -"""), - -34: _(""" - il faut autant de nom de composante que de nom de noeud -"""), - -35: _(""" - vous avez oublie de preciser le mode statique -"""), - -36: _(""" - mode statique non- necessaire -"""), -37: _(""" - la frequence mini doit etre etre plus faible que la frequence max -"""), - -38: _(""" - trop de points dans la liste. -"""), - -39: _(""" - segment nul -"""), - -40: _(""" - la base locale semble fausse -"""), - -41: _(""" - la discretisation du fond de fissure est grossiere par rapport a la courbure du fond de fissure. possibilite de resultats faux. il faudrait raffiner le maillage autour du fond de fissure. -"""), - -42: _(""" - nombre de points d'intersection impossible. -"""), - -43: _(""" - probleme de dimension :ni 2d, ni 3d -"""), - - -45: _(""" - inter douteuse -"""), - -46: _(""" - trop de points d intersection -"""), -47: _(""" - probleme de decoupage a 3 pts +29 : _(""" + le nombre d'amortissement modaux est différent du nombre de modes dynamiques """), -48: _(""" - probleme de decoupage a 4 pts +30 : _(""" + il n y a pas le meme nombre de modes retenus + dans l'excitation modale et dans la base modale """), -49: _(""" - uniquement c_plan/d_plan disponible en xfem -"""), - -51: _(""" - mailles manquantes -"""), - -52: _(""" - point de fond_fiss sans maille de surfface rattachee. -"""), - -53: _(""" - pb dans orientation des normales a fond_fiss. verifier la continuite des mailles de fond_fiss -"""), - -54: _(""" - segment de fond_fiss sans maille de surface rattachee. -"""), - -55: _(""" - augmenter nxmafi -"""), - -56: _(""" - -> Lors de l'enregistrement du champ d'archivage du contact, il s'est avéré - que les valeurs de contact au noeud %(k1)s différents selon la maille sur - laquelle se trouve ce noeud. - -> Risque & Conseil : - Ce message est normal si le contact est activé sur la fissure. -"""), - - - - - - - -61: _(""" - -> Lors de l'orientation des points du fond de fissure, le point du fond de - fissure initial (PFON_INI) est trop loin du fond de fissure. - -> Risque & Conseil : - Le point initial qui en résulte amène surement à une orientation du fond - de fissure erronée. - Veuillez redéfinir le point du fond de fissure initial (mot clé PFON_INI). - -"""), - -62: _(""" - pfon_ini = pt_origine -"""), - -63: _(""" - probleme dans l orientation du fond de fissure : pt_origin mal choisi. -"""), - -64: _(""" - tous les points du fond de fissure sont des points de bord. assurez-vous du bon choix des parametres d'orientation de fissure et de pfon_ini. -"""), - -65: _(""" - pfon_ini semble etre un point de fin de fissure selon l'orientation choisie. assurez-vous du bon choix de pfon_ini. +31 : _(""" + il faut autant d'indices en i et j """), -66: _(""" - la methode "upwind" est en cours d'implementation. +32 : _(""" + avec SOUR_PRESS et SOUR_FORCE, il faut deux points/ddls d'application """), -67: _(""" - les aretes de la maille %(k1)s ( %(k2)s ) ont %(k3)s points d'intersection avec l'isozero de %(k4)s !!! +33 : _(""" + mauvais accord entre le nombre d'appuis et le nombre de valeur dans le mot-clé: NUME_ORDRE_I """), -68: _(""" - probleme pour recuperer ar_min dans la table "cara_geom" +34 : _(""" + il faut autant de noms de composante que de noms de noeud """), -69: _(""" - armin negatif ou nul +35 : _(""" + vous avez oublié de préciser le mode statique """), -70: _(""" - augmenter nxptff +36 : _(""" + mode statique non- nécessaire """), -71: _(""" - le critere de modification de l'enrichissement heaviside servant a eviter les pivots nuls a abouti a un cas de figure qui semble bizarre. normalement, on doit avoir un hexaedre coupe dans un coin (3 points d'intersection), or la, on a un %(k1)s avec %(k2)s points d'intersetion. +37 : _(""" + la fréquence min doit etre plus faible que la fréquence max """), -72: _(""" - aucune arete sur laquelle lsn s annule +73 : _(""" + le parametre materiau taille limite d10 n'est pas defini """), -73: _(""" - taille limite d10 non defini +74 : _(""" + échec de la recherche de zéro (NITER) """), -74: _(""" - echec de la recherche de zero (niter) +75 : _(""" + échec de la recherche de zéro (bornes) """), -75: _(""" - echec de la recherche de zero (bornes) +76 : _(""" + La valeur de F(XMIN) doit être négative. """), -76: _(""" - f(xmin) non negative +77 : _(""" + f=0 : augmenter ITER_INTE_MAXI """), -77: _(""" - f=0 : augmenter iter_inte_maxi +79 : _(""" + pas d'interpolation possible """), -78: _(""" - polynome non resolu +81 : _(""" + STOP_SINGULIER=DECOUPE nécessite la subdivision automatique du pas de temps (SUBD_PAS). """), -79: _(""" - pas d'interpolation possible. +82 : _(""" + NMVPIR erreur direction grandissement + Angle ALPHA %(k1)s + Angle BETA %(k2)s """), -81: _(""" - STOP_SINGULIER=DECOUPE nécessite la subdivision automatique du pas de temps (SUBD_PAS). -"""), -82: _(""" - nmvpir erreur dir grandissement. Angle ALPHA %(k1)s. Angle BETA %(k2)s. -"""), -83: _(""" +83 : _(""" Arret par manque de temps CPU. """), -85: _(""" - On veut affecter un comportement %(k1)s avec la relation %(k2)s sur une maille deja affectee par un autre comportement %(k3)s %(k4)s +85 : _(""" + On veut affecter un comportement %(k1)s avec la relation %(k2)s + sur une maille deja affectée par un autre comportement %(k3)s %(k4)s """), -86: _(""" + +86 : _(""" Perturbation trop petite, calcul impossible """), -87: _(""" - *** Champ déjà existant *** + +87 : _(""" + Champ déjà existant Le champ %(k1)s à l'instant %(r1)g est remplacé par le champ %(k2)s à l'instant %(r2)g avec la précision %(r3)g. """), -88: _(""" - &arret debordement assemblage:ligne +88 : _(""" + arret débordement assemblage : ligne """), -90: _(""" - &arret debordement assemblage:colonne +90 : _(""" + arret débordement assemblage : colonne """), -92: _(""" - arret nombre de sous-structure invalide il en faut au minimum: %(i1)d - vous en avez defini: %(i2)d +92 : _(""" + arret nombre de sous-structures invalide : + il en faut au minimum : %(i1)d + vous en avez défini : %(i2)d """), -93: _(""" - arret nombre de nom de sous-structure invalide il en faut exactement: %(i1)d - vous en avez defini: %(i2)d +93 : _(""" + arret nombre de nom de sous-structures invalide : + il en faut exactement : %(i1)d + vous en avez défini : %(i2)d """), -94: _(""" - nombre de macr_elem invalide sous_structure %(k1)s vous en avez defini: %(i1)d - il en faut exactement: %(i2)d +94 : _(""" + nombre de MACR_ELEM invalide : + sous_structure %(k1)s + il en faut exactement : %(i2)d + vous en avez défini : %(i1)d """), -95: _(""" - nombre d'angles nautiques invalide sous_structure %(k1)s - vous en avez defini: %(i1)d - il en faut exactement: %(i2)d +95 : _(""" + nombre d'angles nautiques invalide + sous_structure %(k1)s + il en faut exactement : %(i2)d + vous en avez défini : %(i1)d """), -96: _(""" - nombre de translation invalide sous_structure %(k1)s vous en avez defini: %(i1)d - il en faut exactement: %(i2)d +96 : _(""" + nombre de translations invalide + sous_structure %(k1)s + il en faut exactement : %(i2)d + vous en avez defini : %(i1)d """), -97: _(""" - nombre de liaison definies invalide vous en avez defini: %(i1)d - il en faut au minimum: %(i2)d +97 : _(""" + nombre de liaison definies invalide + il en faut au minimum : %(i2)d + vous en avez defini : %(i1)d """), -98: _(""" - nombre de mot-cle invalide numero liaison: %(i1)d mot-cle: %(k1)s - vous en avez defini: %(i2)d - il en faut exactement: %(i3)d +98 : _(""" + nombre de mot-clés invalide + numéro liaison: %(i1)d + mot-clé : %(k1)s + il en faut exactement : %(i3)d + vous en avez defini : %(i2)d """), -99: _(""" - sous-structure indefinie numero liaison: %(i1)d nom sous-structure: %(k1)s +99 : _(""" + sous-structure indéfinie + numéro liaison: %(i1)d + nom sous-structure: %(k1)s """), } diff --git a/Aster/Cata/cataSTA9/Messages/algorith12.py b/Aster/Cata/cataSTA9/Messages/algorith12.py index 87c55ab4..292b4667 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith12.py +++ b/Aster/Cata/cataSTA9/Messages/algorith12.py @@ -1,535 +1,366 @@ -#@ MODIF algorith12 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF algorith12 Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { - - - - -2: _(""" - interface inexistante numero liaison: %(i1)d nom sous-structure: %(k1)s - nom macr_elem: %(k2)s - nom interface inexistante: %(k3)s +2 : _(""" + interface inexistante + numéro liaison : %(i1)d + nom sous-structure : %(k1)s + nom MACR_ELEM : %(k2)s + nom interface inexistante : %(k3)s """), -3: _(""" +3 : _(""" une sous-structure est sans connexion sous-structure --> %(k1)s """), -4: _(""" - probleme stockage : option de calcul : %(k1)s occurence : %(k2)s - nom du champ : %(k3)s +7 : _(""" + données incompatibles : + pour les modes mecaniques : %(k1)s + il manque l'option : %(k2)s """), -5: _(""" - probleme stockage : option de calcul : %(k1)s nom du champ cumul : %(k2)s +12 : _(""" + données incompatibles : + pour les MODE_CORR : %(k1)s + il manque le champ : %(k2)s """), -6: _(""" - donnees incompatibles : pour la direction %(k1)s - nombre de blocage : %(i1)d - nombre d'excitations : %(i2)d +13 : _(""" + données incompatibles : + pour les mode_corr : %(k1)s + pour le champ : %(k2)s + le type n'est pas %(k3)s """), -7: _(""" - donnees incompatibles : pour les modes mecaniques : %(k1)s - il manque l'option : %(k2)s +14 : _(""" + donnees incompatibles : + pour les statiques : %(k1)s + il manque le champ : %(k2)s """), - - - - - -9: _(""" - probleme stockage : option de calcul : %(k1)s direction : %(k2)s - nom du champ : %(k3)s +15 : _(""" + données incompatibles : + pour les statiques : %(k1)s + pour le champ : %(k2)s + le type n'est pas %(k3)s """), - - - - - - - -11: _(""" - correction statique non prise en compte pour l'option : %(k1)s +18 : _(""" + on ne sait pas bien traiter l'option de calcul demandée : %(k1)s """), -12: _(""" - donnees incompatibles : pour les mode_corr : %(k1)s - il manque le champ : %(k2)s +20 : _(""" + données incompatibles : + pour les modes mécaniques : %(k1)s + pour l'option : %(k2)s + il manque le champ d'ordre %(i1)d """), -13: _(""" - donnees incompatibles : pour les mode_corr : %(k1)s pour le champ : %(k2)s - le type n'est pas %(k3)s +21 : _(""" + données incompatibles : + pour les mode_corr : %(k1)s + il manque l'option : %(k2)s """), -14: _(""" - donnees incompatibles : pour les statiques : %(k1)s - il manque le champ : %(k2)s +22 : _(""" + données incompatibles : + pour les modes statiques : %(k1)s + il manque l'option : %(k2)s """), -15: _(""" - donnees incompatibles : pour les statiques : %(k1)s pour le champ : %(k2)s - le type n'est pas %(k3)s +23 : _(""" + arret sur question illicite pour le type de base + type de base --> %(k1)s + question --> %(k2)s """), - - - - - - - - - - - - - - -18: _(""" - on ne sait pas bien traiter l'option de calcul demandee : %(k1)s +26 : _(""" + arret sur manque argument + base modale donnée --> %(k1)s + interf_dyna donnée --> %(k2)s """), - - - - - - - -20: _(""" - donnees incompatibles : pour les modes mecaniques : %(k1)s - pour l'option : %(k2)s - il manque le champ d'ordre %(i1)d +27 : _(""" + arret sur type de base incorrecte + base modale donnée --> %(k1)s + type base modale --> %(k2)s + type attendu --> %(k3)s """), -21: _(""" - donnees incompatibles : pour les mode_corr : %(k1)s - il manque l'option : %(k2)s +28 : _(""" + arret sur incohérence données + base modale donnée --> %(k1)s + INTERF_DYNA correspondante --> %(k2)s + INTERF_DYNA donnée --> %(k3)s """), -22: _(""" - donnees incompatibles : pour les modes statiques : %(k1)s - il manque l'option : %(k2)s +29 : _(""" + problème arguments de définition interface + nom interface donné %(k1)s + numero interface donné %(i1)d """), -23: _(""" - arret sur question illicite pour le type de base type de base --> %(k1)s - question --> %(k2)s +30 : _(""" + arret sur base modale sans INTERF_DYNA + base modale donnée --> %(k1)s """), - - - - - - - - - - - - - - -26: _(""" - arret sur manque argument base modale donnee --> %(k1)s - interf_dyna donnee --> %(k2)s -"""), - -27: _(""" - arret sur type de base incorrecte base modale donnee --> %(k1)s - type base modale --> %(k2)s - type attendu --> %(k3)s -"""), - -28: _(""" - arret su incoherence donnees base modale donnee --> %(k1)s - interf_dyna correspondante --> %(k2)s - interf_dyna donnee --> %(k3)s +31 : _(""" + arret sur manque arguments + base modale donnée --> %(k1)s + INTERF_DYNA donnée --> %(k2)s """), -29: _(""" - probleme arguments de definition interface nom interface donne %(k1)s - numero interface donne %(i1)d +38 : _(""" + arret sur problème cohérence interface """), -30: _(""" - arret sur base modale sans interf_dyna base modale donnee --> %(k1)s +39 : _(""" + arret sur matrice inexistante + matrice %(k1)s """), -31: _(""" - arret sur manque arguments base modale donnee --> %(k1)s - interf_dyna donnee --> %(k2)s +40 : _(""" + arret problème de factorisation: + présence probable de modes de corps rigide + la methode de Mac-Neal ne fonctionne pas en présence de modes de corps rigide """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -38: _(""" - arret sur probleme coherence interface -"""), - -39: _(""" - arret sur matrice inexistante matrice %(k1)s -"""), - -40: _(""" - - arret probleme de factorisation: presence probable de modes de corps rigide la methode de mac-neal ne fonctionne pas en presence de modes de corps rigide -"""), - -41: _(""" - --- la taille bloc : %(i1)d est < hauteur_max : %(i2)d +41 : _(""" + la taille bloc : %(i1)d est < HAUTEUR_MAX : %(i2)d changez la taille_bloc des profils: %(k1)s prenez au moins : %(i3)d """), -42: _(""" - le mot-cle %(k1)s est incompatible avec le champ %(k2)s - . utiliser 'group_ma' ou 'maille' pour restreindre le changement de repere a certaines mailles. %(k3)s +42 : _(""" + le mot-clé %(k1)s est incompatible avec le champ %(k2)s + utilisez 'GROUP_MA' ou 'MAILLE' pour restreindre le changement de repere + à certaines mailles. %(k3)s """), -43: _(""" - etude 2d angle nautique unique : %(r1)f +43 : _(""" + étude 2D + angle nautique unique : %(r1)f """), -44: _(""" - noeud sur l axe_z noeud : %(k1)s +44 : _(""" + noeud sur l'AXE_Z noeud : %(k1)s """), - - - - - - - - - - - - - - - - - - - - -49: _(""" - probleme: sous-structure inconnue sous-structure --> %(k1)s +49 : _(""" + problème: sous-structure inconnue + sous-structure --> %(k1)s """), -50: _(""" +50 : _(""" pas de sous-structure dans le squelette """), -51: _(""" - nom de sous-structure non trouve la sous-structure : %(k1)s n existe pas %(k2)s +51 : _(""" + nom de sous-structure non trouvé + la sous-structure : %(k1)s n existe pas %(k2)s """), - - - - - -53: _(""" - arret sur pivot nul ligne --> %(i1)d +53 : _(""" + arret sur pivot nul + ligne --> %(i1)d """), - - - - - - - -55: _(""" - le maillage mail ne contient pas de group_ma mail= %(k1)s +55 : _(""" + le MAILLAGE : %(k1)s ne contient pas de GROUP_MA """), -56: _(""" - le group_ma gp n'existe pas dans le maillage mail mail= %(k1)s gp= %(k2)s +56 : _(""" + le GROUP_MA : %(k2)s n'existe pas dans le MAILLAGE : %(k1)s """), -57: _(""" - le maillage ne contient pas de group_nomaillage= %(k1)s +57 : _(""" + le MAILLAGE : %(k1)s ne contient pas de GROUP_NO """), -58: _(""" - le group_no n'existe pas dansle maillage maillage= %(k1)s - group_no= %(k2)s +58 : _(""" + le GROUP_NO : %(k2)s n'existe pas dans le MAILLAGE : %(k1)s """), -59: _(""" - nombre noeuds communs nbnoco = %(i1)d +59 : _(""" + nombre de noeuds communs NBNOCO = %(i1)d """), - - - - - - - - - - - - - - -62: _(""" - les deux numerotations n'ont pas meme maillage d'origine - numerotation 1: %(k1)s - maillage 1: %(k2)s - numerotation 2: %(k3)s - maillage 2: %(k4)s +62 : _(""" + les deux numérotations n'ont pas meme maillage d'origine + numérotation 1: %(k1)s + maillage 1: %(k2)s + numérotation 2: %(k3)s + maillage 2: %(k4)s """), -63: _(""" - perte information sur ddl physique a la conversion de numerotation - noeud numero: %(i1)d - type ddl numero: %(i2)d +63 : _(""" + perte d'information sur DDL physique à la conversion de numérotation + noeud numéro : %(i1)d + type DDL numéro : %(i2)d """), -64: _(""" - arret sur perte information ddl physique +64 : _(""" + arret sur perte d'information DDL physique """), - - - - - - - -66: _(""" - champ inexistant champ: %(k1)s , nume_ordre: %(i1)d , mode_meca: %(k2)s +66 : _(""" + champ inexistant + CHAMP : %(k1)s + NUME_ORDRE : %(i1)d + MODE_MECA : %(k2)s """), -67: _(""" - arret sur probleme conditions interface +67 : _(""" + arret sur problème de conditions d'interface """), -68: _(""" - le maillage final n'est pas 3d maillage : %(k1)s +68 : _(""" + le maillage final n'est pas 3D + maillage : %(k1)s """), -69: _(""" - l origine du maillage 1d n est pas 0 +69 : _(""" + l'origine du maillage 1D n'est pas 0 """), -70: _(""" - les noeuds du maillage sont confondus +70 : _(""" + les noeuds du maillage sont confondus """), -71: _(""" +71 : _(""" - le noeud se trouve en dehors du domaine de definition avec un profil gauche de type exclu - noeud : %(k1)s + le noeud se trouve en dehors du domaine de définition avec un profil gauche de type EXCLU + noeud : %(k1)s """), -72: _(""" - - le noeud se trouve en dehors du domaine de definition avec un profil droit de type exclu - noeud : %(k1)s -"""), +72 : _(""" -73: _(""" - probleme pour stoker le champ dans le resultat : %(k1)s - , pour le nume_ordre : %(i1)d + le noeud se trouve en dehors du domaine de definition avec un profil droit de type EXCLU + noeud : %(k1)s """), -74: _(""" - *** champ deja existant ***il sera remplace par le champ %(k1)s - pour le nume_ordre %(i1)d +73 : _(""" + problème pour stocker le champ dans le résultat : %(k1)s + pour le NUME_ORDRE : %(i1)d """), -75: _(""" - composante inexistante sur le noeud: %(k1)s composante: %(k2)s +74 : _(""" + champ déjà existant + il sera remplacé par le champ %(k1)s + pour le NUME_ORDRE %(i1)d """), -76: _(""" - probleme recuperation chamno concept resultat: %(k1)s numero ordre: %(i1)d +76 : _(""" + problème de récuperation CHAMNO + concept résultat: %(k1)s + numéro d'ordre : %(i1)d """), -77: _(""" - &pas d' interface definie --> un gage! +77 : _(""" + pas d'interface définie """), -78: _(""" - &arret sur interface deja definie mot-cle interface numero --> %(i1)d - interface --> %(k1)s +78 : _(""" + arret sur interface déjà définie + mot-clé interface numero --> %(i1)d + interface --> %(k1)s """), -79: _(""" - &les deux interfaces ont pas meme nombre de noeuds +79 : _(""" + les deux interfaces n'ont pas le meme nombre de noeuds nombre noeuds interface droite --> %(i1)d nombre noeuds interface gauche --> %(i2)d """), -80: _(""" - &les deux interfaces ont pas meme nombre de degres de liberte +80 : _(""" + les deux interfaces n'ont pas le meme nombre de degrés de liberté nombre ddl interface droite --> %(i1)d nombre ddl interface gauche --> %(i2)d """), -81: _(""" - &arret sur base modale ne comportant pas de modes propres +81 : _(""" + arret sur base modale ne comportant pas de modes propres """), -82: _(""" +82 : _(""" - nombre de modes propres demande superieur au nombre de modes dynamiques de la base - nombre de modes demandes --> %(i1)d - nombre de modes de la base --> %(i2)d - nombre de frequences douteuses --> %(i3)d + nombre de modes propres demandé supérieur au nombre de modes dynamiques de la base + nombre de modes demandés --> %(i1)d + nombre de modes de la base --> %(i2)d + nombre de fréquences douteuses --> %(i3)d """), -83: _(""" - plusieurs champs correspondant a l'acces demande.resultat %(k1)s - , acces "inst": %(r1)f - , nombre : %(i1)d +83 : _(""" + plusieurs champs correspondant à l'acces demandé + resultat : %(k1)s + acces "INST" : %(r1)f + nombre : %(i1)d """), -84: _(""" - pas de champ correspondant a un acces demande.resultat %(k1)s - , acces "inst": %(r1)f +84 : _(""" + pas de champ correspondant à un accès demandé + résultat : %(k1)s + acces "INST" : %(r1)f """), - - - - - - - - - - - - - - -89: _(""" - instant de reprise superieur a la liste des instants instant de reprise: %(r1)f - instant max: %(r2)f -"""), - -90: _(""" - on n'a pas trouve l'instant instant de reprise: %(r1)f - pas de temps: %(r2)f - borne min: %(r3)f - borne max: %(r4)f -"""), - -91: _(""" - instant final inferieur a la liste des instants instant final: %(r1)f - instant min : %(r2)f +89 : _(""" + instant de reprise supérieur à la liste des instants + instant de reprise : %(r1)f + instant max : %(r2)f """), -92: _(""" - on n'a pas trouve l'instant instant final: %(r1)f - pas de temps: %(r2)f - borne min: %(r3)f - borne max: %(r4)f +90 : _(""" + on n'a pas trouvé l'instant + instant de reprise: %(r1)f + pas de temps : %(r2)f + borne min : %(r3)f + borne max : %(r4)f """), - - - - - - - - - - - - - - -96: _(""" - mauvaise valeur de typcum: %(i1)d +91 : _(""" + instant final inférieur à la liste des instants + instant final: %(r1)f + instant min : %(r2)f """), -97: _(""" - donnees erronees - pas d'instant de calcul pour l'instant d'archivage: %(r1)f +92 : _(""" + on n'a pas trouvé l'instant + instant final: %(r1)f + pas de temps : %(r2)f + borne min : %(r3)f + borne max : %(r4)f """), -98: _(""" - donnees erronees - plusieurs instants de calcul pour l'instant d'archivage: %(r1)f +97 : _(""" + données erronées + pas d'instant de calcul pour l'instant d'archivage : %(r1)f """), -99: _(""" - erreur fatalele champ %(k1)s est incompatible avec la commande %(k2)s +98 : _(""" + données erronées + plusieurs instants de calcul pour l'instant d'archivage: %(r1)f """), } diff --git a/Aster/Cata/cataSTA9/Messages/algorith13.py b/Aster/Cata/cataSTA9/Messages/algorith13.py index 3b77a0cf..15dd4c56 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith13.py +++ b/Aster/Cata/cataSTA9/Messages/algorith13.py @@ -1,4 +1,4 @@ -#@ MODIF algorith13 Messages DATE 30/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF algorith13 Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -20,364 +20,250 @@ def _(x) : return x -cata_msg={ -1: _(""" - erreur fatale l'entite %(k1)s n'est pas possible %(k2)s -"""), - -2: _(""" - erreur dans les donnees d'observation le noeud %(k1)s n'existe pas dans %(k2)s -"""), - -3: _(""" - erreur dans les donnees d'observation le group_no %(k1)s n'existe pas dans %(k2)s -"""), - -4: _(""" - erreur dans les donnees d'observation la maille %(k1)s n'existe pas dans %(k2)s -"""), +cata_msg = { -5: _(""" - erreur dans les donnees d'observation le group_ma %(k1)s n'existe pas dans %(k2)s +8 : _(""" + arret sur maillage non squelette """), -6: _(""" - erreur dans les donnees d'observation pour "nom_cham" %(k1)s il faut renseigner %(k2)s ou %(k3)s +10 : _(""" + problème de duplication de la matrice : %(k1)s """), -7: _(""" - erreur dans les donnees d'observation pour "nom_cham" %(k1)s il faut renseigner %(k2)s et %(k3)s -"""), - -8: _(""" - arret sur maillage non skelette -"""), - - - - - - - - -10: _(""" - probleme de duplication de matrice matrice: %(k1)s -"""), - -11: _(""" - arret probleme de factorisation: presence de modes de corps rigide -"""), - - - - - - - - -13: _(""" - icmp dans le desordre pour noeud= %(i1)d et sous-domaine= %(i2)d +11 : _(""" + arret problème de factorisation + présence de modes de corps rigide """), -14: _(""" - systeme (gi)t*gi probablement non inversible: %(i1)d pb lapack dgetrf: %(i2)d +17 : _(""" + arret sur problème base modale sans INTERF_DYNA + base modale --> %(k1)s """), -15: _(""" - systeme (gi)t*gi probablement non inversible: %(i1)d pb lapack dgetrs: %(i2)d +18 : _(""" + GAMDEV(ALPHA) < 0 + GAMDEV(ALPHA) = %(r1)f """), - - - - - - - -17: _(""" - arret sur probleme base modale sans interf_dyna base modale --> %(k1)s -"""), - -18: _(""" - gamdev(alpha) < 0 gamdev(alpha) = %(r1)f -"""), - - - - - - - -26: _(""" - conflit de nom de groupe de maille dans le squelette le nom de groupe : %(k1)s +26 : _(""" + conflit de nom de groupe de maille dans le squelette + le nom de groupe : %(k1)s provenant de la sous-structure : %(k2)s - et du groupe de maille : %(k3)s - existe deja. %(k4)s + et du groupe de maille : %(k3)s + existe déjà. + %(k4)s """), -27: _(""" - nom de groupe non trouvele groupe : %(k1)s n existe pas %(k2)s dans la sous-structure : %(k3)s +27 : _(""" + nom de groupe non trouvé + le groupe : %(k1)s n'existe pas %(k2)s dans la sous-structure : %(k3)s """), -28: _(""" - &aucun axe defini +28 : _(""" + aucun axe de rotation défini """), -29: _(""" - methode non supportee en sous-structuration methode demandee : %(k1)s - methodes supportees: %(k2)s +29 : _(""" + méthode non supportée en sous-structuration + méthode demandée : %(k1)s + méthodes supportées: %(k2)s """), -30: _(""" - conditions initiales non supportees en sous-structuration transitoire +30 : _(""" + conditions initiales non supportées en sous-structuration transitoire """), -31: _(""" - calcul non lineaire non supporte en sous-structuration transitoire +31 : _(""" + calcul non linéaire non supporté en sous-structuration transitoire """), -32: _(""" - rela_effo_dep non supporte en sous-structuration transitoire +32 : _(""" + RELA_EFFO_DEP non supporté en sous-structuration transitoire """), -33: _(""" - rela_effo_vite non supporte en sous-structuration transitoire +33 : _(""" + RELA_EFFO_VITE non supporté en sous-structuration transitoire """), -34: _(""" - - la liste des amortissements modaux est definie au niveau de l'operateur macr_elem_dyna +34 : _(""" + la liste des amortissements modaux est définie au niveau de l'operateur MACR_ELEM_DYNA """), -35: _(""" - numero de mode de votre liste inexistant dans les modes utilises: - numero ds votre liste : %(i1)d +35 : _(""" + numéro de mode de votre liste inexistant dans les modes utilisés: + numéro ds votre liste : %(i1)d """), -36: _(""" - appel errone +39 : _(""" + choc mal defini + la maille définissant le choc %(k1)s doit etre de type %(k2)s """), - - - - -39: _(""" - choc mal definila maille definissant le choc %(k1)s doit etre de type %(k2)s +41 : _(""" + trop de noeuds dans le GROUP_NO %(k1)s + noeud utilisé: %(k2)s """), - - - - -41: _(""" - trop de noeuds dans le group_no %(k1)s noeud utilise: %(k2)s +44 : _(""" + incompatibilité avec multi APPUI : %(k1)s """), - - - - - -44: _(""" - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!incompatibilite avec multi appui : %(k1)s -"""), - - - - - - -46: _(""" +46 : _(""" il manque les modes statiques """), -47: _(""" - il manque les modes corriges +47 : _(""" + il manque les modes corrigés """), -48: _(""" +48 : _(""" Nombre de modes propres calcules insuffisant. - Nombre de modes propres de la base limite a : %(i1)d + Nombre de modes propres de la base limite à : %(i1)d """), -49: _(""" - &sous-structure inexistante dans le modele-generalise modele generalise --> %(k1)s - sous-structure demandee --> %(k2)s +49 : _(""" + sous-structure inexistante dans le modèle généralisé + modèle généralisé --> %(k1)s + sous-structure demandée --> %(k2)s """), -50: _(""" - &sous-structure inexistante dans le modele-generalise modele generalise --> %(k1)s - numero sous-structure demandee --> %(i1)d +50 : _(""" + sous-structure inexistante dans le modèle-généralisé + modèle généralisé --> %(k1)s + numéro sous-structure demandée --> %(i1)d """), - - - - -53: _(""" - champ inexistant mesure %(k1)s nom_cham %(k2)s +53 : _(""" + champ inexistant + mesure %(k1)s + nom_cham %(k2)s """), - - - -56: _(""" - pb.interpolation volumique 3d:evol_char : %(k1)s instant : %(r1)f +56 : _(""" + problème interpolation volumique 3d: + evol_char : %(k1)s + instant : %(r1)f code_retour: %(i1)d """), -57: _(""" - pb.interpolation volumique 2d:evol_char : %(k1)s instant : %(r1)f +57 : _(""" + problème interpolation volumique 2d: + evol_char : %(k1)s + instant : %(r1)f code_retour: %(i1)d """), -58: _(""" - pb.charge vol2d puis surf3d:evol_char: %(k1)s instant : %(r1)f +58 : _(""" + problème charge vol2d puis surf3d: + evol_char: %(k1)s + instant : %(r1)f """), -59: _(""" - pb.interpolation surfacique 3d:evol_char : %(k1)s instant : %(r1)f +59 : _(""" + problème interpolation surfacique 3d: + evol_char : %(k1)s + instant : %(r1)f code_retour: %(i1)d """), -60: _(""" - pb.charge vol3d puis surf2d:evol_char: %(k1)s instant : %(r1)f +60 : _(""" + problème charge vol3d puis surf2d: + evol_char: %(k1)s + instant : %(r1)f """), -61: _(""" - pb.interpolation surfacique 2d:evol_char : %(k1)s instant : %(r1)f +61 : _(""" + problème interpolation surfacique 2d: + evol_char : %(k1)s + instant : %(r1)f code_retour: %(i1)d """), -62: _(""" - pb. interpolation pression:evol_char : %(k1)s instant : %(r1)f +62 : _(""" + problème interpolation pression: + evol_char : %(k1)s + instant : %(r1)f on ne sait pas extrapoler le champ %(k2)s de pression par rapport au temps %(k3)s mais seulement l'interpoler %(k4)s """), -63: _(""" - pb. interpolation pression:evol_char : %(k1)s instant : %(r1)f +63 : _(""" + problème interpolation pression: + evol_char : %(k1)s + instant : %(r1)f code_retour: %(i1)d - contacter les developpeurs %(k2)s -"""), - -64: _(""" - interpolation temperature:evol_ther: %(k1)s instant: %(r1)f icoret: %(i1)d -"""), - - - - - - -66: _(""" - Force fluide, grappe bloquee - - iteration %(i1)d , z = %(r1)f iteration %(i2)d , z = %(r2)f - temps de chute compris entre %(r3)f et %(r4)f + contacter le support %(k2)s """), - - -68: _(""" - pb.interpolation vitesse:evol_char : %(k1)s instant : %(r1)f +68 : _(""" + problème interpolation vitesse: + evol_char : %(k1)s + instant : %(r1)f code_retour: %(i1)d """), -69: _(""" - le noeud: nomnoe ne peut pas etre typl et typbnomnoe %(k1)s -"""), - -70: _(""" - impossible de coder le nombre : %(i1)d sur : %(k1)s -"""), - -71: _(""" - choix impossiblepour initpr : %(i1)d +69 : _(""" + le noeud: %(k1)s ne peut pas etre TYPL et TYPB """), - - - - - -74: _(""" - composante non definie dans la numerotation : %(k1)s +74 : _(""" + composante non définie dans la numérotation : %(k1)s """), -75: _(""" - & detection d'une sous-structure non connectesous-structure de nom: %(k1)s +75 : _(""" + détection d'une sous-structure non connectée + sous-structure de nom: %(k1)s """), -76: _(""" - & arret sur probleme de connexion sous-structure +76 : _(""" + arret sur problème de connexion sous-structure """), - - - -78: _(""" - les intervalles doivent etre croissants. valeur de la borne precedente : %(i1)d - valeur de la borne : %(i2)d +78 : _(""" + les intervalles doivent etre croissants + valeur de la borne precedente : %(i1)d + valeur de la borne : %(i2)d """), -79: _(""" - l'intervalle entre les deux derniers instants ne sera pas egal - au pas courant : %(i1)d - , pour l'intervalle %(i2)d +79 : _(""" + l'intervalle entre les deux derniers instants ne sera pas égal au pas courant : %(i1)d + pour l'intervalle %(i2)d """), -80: _(""" +80 : _(""" le nombre de pas est trop grand : %(i1)d , pour l'intervalle %(i2)d """), -81: _(""" - les valeurs doivent etre croissantes. valeur precedente : %(i1)d - valeur : %(i2)d +81 : _(""" + les valeurs doivent etre croissantes + valeur précédente : %(i1)d + valeur : %(i2)d """), -82: _(""" - la distance entre les deux derniers reels ne sera pas egal +82 : _(""" + la distance entre les deux derniers réels ne sera pas égale au pas courant : %(r1)f, pour l'intervalle %(i1)d """), - - - -84: _(""" - modele amont non defini -"""), - -85: _(""" - champ inexistant resultat %(k1)s nom_cham %(k2)s nume_ordre %(i1)d -"""), - -86: _(""" - type de matrice inconnuetype: %(k1)s +85 : _(""" + champ inexistant + résultat : %(k1)s + nom_cham : %(k2)s + nume_ordre : %(i1)d """), - - - - - -91: _(""" - &probleme de dimension matrice a mutiplier +91 : _(""" + problème de dimension de la matrice à mutiplier """), -92: _(""" - &probleme de dimension matrice resultat +92 : _(""" + problème de dimension de la matrice résultat """), - - - - - -99: _(""" - matrice d'amortissement non creeedans le macro-element : %(k1)s +99 : _(""" + matrice d'amortissement non créée dans le macro-élément : %(k1)s """), } diff --git a/Aster/Cata/cataSTA9/Messages/algorith14.py b/Aster/Cata/cataSTA9/Messages/algorith14.py index b5c7fc7a..abc37019 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith14.py +++ b/Aster/Cata/cataSTA9/Messages/algorith14.py @@ -1,4 +1,4 @@ -#@ MODIF algorith14 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF algorith14 Messages DATE 18/03/2008 AUTEUR CNGUYEN C.NGUYEN # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -20,437 +20,316 @@ def _(x) : return x -cata_msg={ +cata_msg = { - - - - - - - - - - - - - -3: _(""" - &type interface non supportee en cyclique type interface --> %(k1)s +3 : _(""" + type d'interface non supportée en cyclique + type interface --> %(k1)s """), -4: _(""" - arret sur type de resultat non supporte type donne --> %(k1)s - types supportes --> %(k2)s %(k3)s +4 : _(""" + arrêt sur type de résultat non supporté + type donné --> %(k1)s + types supportés --> %(k2)s %(k3)s """), - - - - - - - - - - - - - - - - - - - - - -8: _(""" - manque la deformee modale pour le mode %(i1)d +8 : _(""" + il manque la déformée modale pour le mode %(i1)d """), - - - - - -10: _(""" - le maille noe n'existe pas dans le maillage mail mail= %(k1)s noe= %(k2)s +10 : _(""" + la maille %(k2)s n'existe pas dans le maillage %(k1)s """), -11: _(""" - le noeud n'existe pas dans le maillage maillage= %(k1)s noeud= %(k2)s +11 : _(""" + le noeud %(k2)s n'existe pas dans le maillage %(k1)s """), - - - - - - - -13: _(""" - & arret sur base modale de type illicitebase modale --> %(k1)s type --> %(k2)s - type attendu --> %(k3)s +13 : _(""" + arrêt sur base modale de type illicite + base modale --> %(k1)s + type --> %(k2)s + type attendu --> %(k3)s """), -14: _(""" - arret sur matrice raideur non unique +14 : _(""" + arrêt sur matrice de raideur non unique """), -15: _(""" - arret sur matrice masse non unique +15 : _(""" + arrêt sur matrice de masse non unique """), -16: _(""" - arret sur matrice amortissement non unique en argument +16 : _(""" + arrêt sur matrice d'amortissement non unique en argument """), +17 : _(""" + Le type de matrice %(k1)s est inconnu. Erreur développeur +"""), - - - - - - - - - - - - - - - - - - - -21: _(""" - les matrices assemblees n'ont pas la meme numerotation masse= %(k1)s - raideur= %(k2)s +21 : _(""" + les matrices assemblées n'ont pas la même numérotation + masse = %(k1)s + raideur = %(k2)s """), -22: _(""" - les matrices assemblees n'ont pas la meme numerotation amortissement= %(k1)s - raideur= %(k2)s +22 : _(""" + les matrices assemblées n'ont pas la même numérotation + amortissement = %(k1)s + raideur = %(k2)s """), -23: _(""" +23 : _(""" - les matrices assemblees et la base modalen'ont pas le meme maillage initial - maillage matrice: %(k1)s - maillage base modale: %(k2)s + les matrices assemblées et la base modale n'ont pas le même maillage initial + maillage matrice : %(k1)s + maillage base modale : %(k2)s """), -24: _(""" - arret sur probleme coherence mode_meca donne --> %(k1)s - numerotation associee --> %(k2)s - interf_dyna donnee --> %(k3)s - numerotation associee --> %(k4)s +24 : _(""" + arrêt sur problème de cohérence + MODE_MECA donné --> %(k1)s + numerotation associée --> %(k2)s + INTERF_DYNA donnée --> %(k3)s + numérotation associée --> %(k4)s """), -25: _(""" - sous-structure inexistante dans le modele generalise modele generalisee %(k1)s - sous-structure %(k2)s +25 : _(""" + sous-structure inexistante dans le modele généralisé + modèle generalisé : %(k1)s + sous-structure : %(k2)s """), -26: _(""" - probleme coherence nombre de champs base modale base modale %(k1)s - nombre de champs de la base %(i1)d - nombre de dgres generalises %(i2)d +26 : _(""" + problème de cohérence du nombre de champs de la base modale + base modale : %(k1)s + nombre de champs de la base : %(i1)d + nombre de degrés généralisés : %(i2)d """), -27: _(""" - le maillage n'est pas un maillage squelette maillage %(k1)s +27 : _(""" + le maillage %(k1)s n'est pas un maillage SQUELETTE """), -28: _(""" - aucun type d'interface defini pour la sous structure : %(i1)d - pas de mode rigide d'interface le calcul de masses effectives risque d'etre imprecis %(i2)d +28 : _(""" + aucun type d'interface défini pour la sous-structure : %(i1)d + pas de mode rigide d'interface + le calcul de masses effectives risque d'être imprécis %(i2)d """), - - - - - - - -30: _(""" - incoherence detectee dans squelette objet non trouve : %(k1)s +30 : _(""" + incoherence détectée dans le squelette + objet non trouvé : %(k1)s """), - - - - - -32: _(""" - sd resultat resultle champ n'existe pas %(k1)s +32 : _(""" + sd resultat %(k1)s, le champ %(k2)s n'existe pas pour le nume_ordre %(i1)d """), -33: _(""" - sd resultat nomresle champ n'a pas ete duplique %(k1)s +33 : _(""" + sd resultat %(k1)s, le champ %(k2)s n'a pas ete duplique pour le nume_ordre %(i1)d """), - - - - - -35: _(""" - aucun champ n'est calculedans la structure de donnees %(k1)s +35 : _(""" + aucun champ n'est calculé dans la structure de donnees %(k1)s """), -36: _(""" +36 : _(""" les numerotations des champs ne coincident pas celui de %(k1)s est : %(k2)s et celui de %(k3)s est : %(k4)s """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -50: _(""" +50 : _(""" il faut au moins 1 mode ! """), -51: _(""" +51 : _(""" il faut un mode_meca a la 1ere occurence de ritz """), - - - - - - - - -55: _(""" - le champ de "temp" n'existe pas pour le numero d'ordre %(i1)d +55 : _(""" + le champ de "TEMP" n'existe pas pour le numéro d'ordre %(i1)d """), - - - - - - - - - - - - - - - - - - - -59: _(""" - le champ de "meta_elno_temp" n'existe pas - pour le numero d'ordre %(i1)d +59 : _(""" + le champ de "META_ELNO_TEMP" n'existe pas pour le numéro d'ordre %(i1)d """), +61 : _(""" + le pas de temps du calcul métallurgique ne correspond pas + au pas de temps du calcul thermique + - numero d'ordre : %(i1)d + - pas de temps thermique : %(r1)f + - pas de temps métallurgique : %(r2)f +"""), +62 : _(""" + il manque la déformée modale nom_cham %(k1)s pour le mode %(i1)d +"""), - - - - - -61: _(""" - - le pas de temps du calcul metallurgique ne correspond pas au pas de temps du calcul thermique - numero d'ordre %(i1)d - pas de temps thermique %(r1)f - pas de temps metallurgique %(r2)f +63 : _(""" + données incompatibles : + pour le mode_stat : %(k1)s + il manque le champ : %(k2)s """), -62: _(""" - manque la deformee modale nom_cham %(k1)s pour le mode %(i1)d +64 : _(""" + il manque le mode statique nom_cham %(k1)s pour le mode %(i1)d """), -63: _(""" - donnees incompatibles : pour le mode_stat : %(k1)s - il manque le champ : %(k2)s +66 : _(""" + Taille de bloc insuffisante + taille de bloc demandée (kr8): %(r1)f + taille de bloc utilisée (kr8): %(r2)f """), -64: _(""" - manque le mode statique nom_cham %(k1)s pour le mode %(i1)d +68 : _(""" + Estimation de la durée du régime transitoire : + valeur minimale conseillée : %(r1)f """), +69 : _(""" + non-linearité incompatible avec la définition du modèle généralisé + noeud_1 : %(k1)s + sous_struc_1 : %(k2)s + noeud_2 : %(k3)s + sous_struc_2 : %(k4)s +"""), +70 : _(""" + problème de cohérence du nombre de noeuds d'interface + sous-structure1 : %(k1)s + interface1 : %(k2)s + nombre de noeuds interface1: %(i1)d + sous-structure2 : %(k3)s + interface2 : %(k4)s + nombre de noeuds interface2: %(i2)d +"""), +71 : _(""" + problème de cohérence des interfaces orientées + sous-structure1 : %(k1)s + interface1 : %(k2)s + presence composante sur 1 : %(k3)s + sous-structure2 : %(k4)s + interface2 : %(k5)s + composante inexistante sur 2 %(k6)s +"""), +72 : _(""" + problème de cohérence des interfaces orientées + sous-structure2 : %(k1)s + interface2 : %(k2)s + presence composante sur 2 : %(k3)s + sous-structure1 : %(k4)s + interface1 : %(k5)s + composante inexistante sur 1 %(k6)s +"""), +73 : _(""" + Sous-structures incompatibles + sous-structure 1 : %(k1)s + MACR_ELEM associé : %(k2)s + numéro grandeur sous-jacente : %(i1)d + sous-structure 2 : %(k3)s + MACR_ELEM associé : %(k4)s + numéro grandeur sous-jacente : %(i2)d +"""), +74 : _(""" + arret sur incompatibilité de sous-structures +"""), +75 : _(""" + Erreur développement : code retour 1 dans nmcomp en calculant la matrice tangente + """), -66: _(""" - &taille de bloc insuffisante taille de bloc demandee (kr8): %(r1)f - taille de bloc utilisee (kr8): %(r2)f +77 : _(""" + les types des deux matrices sont différents + type de la matrice de raideur : %(k1)s + type de la matrice de masse : %(k2)s """), +78 : _(""" + les numérotations des deux matrices sont différentes + numérotation matrice de raideur : %(k1)s + numérotation matrice de masse : %(k2)s +"""), +79 : _(""" + coefficient de conditionnement des lagranges : %(r1)f +"""), +80 : _(""" + affichage des coefficients d'amortissement : + premier coefficient d'amortissement : %(r1)f + second coefficient d'amortissement : %(r2)f +"""), +82 : _(""" + calcul du nombre de diamètres modaux demandé impossible + nombre de diamètres demandé --> %(i1)d +"""), +83 : _(""" + calcul des modes propres limité au nombre de diamètres maximum --> %(i1)d +"""), +84 : _(""" + calcul cyclique : + aucun nombre de diamètres nodaux licite +"""), - -68: _(""" - valeur minimale conseillee : %(r1)f +85 : _(""" + liste de fréquences incompatible avec l'option + nombre de fréquences --> %(i1)d + option --> %(k1)s """), -69: _(""" - non-linearite incompatible avec la definition du modele generalise - noeud_1 : %(k1)s - sous_struc_1 : %(k2)s - noeud_2 : %(k3)s - sous_struc_2 : %(k4)s +87 : _(""" + résolution du problème généralisé complexe + nombre de modes dynamiques: %(i1)d + nombre de ddl droite : %(i2)d """), -70: _(""" - &probleme de coherence de nombre de noeuds d'interface - sous-structure1: %(k1)s - interface1: %(k2)s - nombre de noeuds interface1: %(i1)d - sous-structure2: %(k3)s - interface2: %(k4)s - nombre de noeuds interface2: %(i2)d +88 : _(""" + nombre de ddl axe : %(i1)d + dont cycliques : %(i2)d + dont non cycliques : %(i3)d """), -71: _(""" - &probleme de coherence des interfaces orientees sous-structure1: %(k1)s - interface1: %(k2)s - presence composante sur 1: %(k3)s - sous-structure2: %(k4)s - interface2: %(k5)s - composante inexistante sur 2 %(k6)s +89 : _(""" + dimension max du problème : %(i1)d """), -72: _(""" - &probleme de coherence des interfaces orientees sous-structure2: %(k1)s - interface2: %(k2)s - presence composante sur 2: %(k3)s - sous-structure1: %(k4)s - interface1: %(k5)s - composante inexistante sur 1 %(k6)s +91 : _(""" + noeud sur l'axe_z + noeud : %(k1)s """), -73: _(""" - &sous-structure incompatibles sous-structure 1:: %(k1)s macr_elem associe: %(k2)s - numero grandeur sous-jacente: %(i1)d - sous-structure 2:: %(k3)s - macr_elem associe: %(k4)s - numero grandeur sous-jacente: %(i2)d +93 : _(""" + arrêt sur dimension matrice TETA incorrecte + dimension effective : %(i1)d + dimension en argument : %(i2)d """), -74: _(""" - &arret sur incompatibilite de sous-structure +94: _(""" + erreur de repetitivite cyclique """), -75: _(""" - Erreur développement : code retour 1 dans nmcomp en calculant la matrice tangente - """), +95: _(""" + il manque un ddl sur un noeud axe type du ddl --> %(k1)s + nom du noeud --> %(k2)s +"""), -76: _(""" - Objet &FETI.MONITORING.MPI inexistant ! - """), +99 : _(""" + arrêt sur nombres de noeuds interface non identiques + nombre de noeuds interface droite: %(i1)d + nombre de noeuds interface gauche: %(i2)d +"""), } diff --git a/Aster/Cata/cataSTA9/Messages/algorith15.py b/Aster/Cata/cataSTA9/Messages/algorith15.py new file mode 100644 index 00000000..6d5fd97d --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/algorith15.py @@ -0,0 +1,420 @@ +#@ MODIF algorith15 Messages DATE 08/02/2008 AUTEUR MACOCCO K.MACOCCO +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { + +1 : _(""" + arret sur nombres de DDL interface non identiques + nombre de ddl interface droite: %(i1)d + nombre de ddl interface gauche: %(i2)d +"""), + +2 : _(""" + arret sur dimension matrice TETA incorrecte + dimension effective : %(i1)d + dimension en argument: %(i2)d +"""), + +3 : _(""" + erreur de répétitivité cyclique +"""), + +4 : _(""" + il manque un DDL sur un noeud gauche + type du DDL --> %(k1)s + nom du noeud --> %(k2)s +"""), + + + +6 : _(""" + il manque un DDL sur un noeud droite + type du ddl --> %(k1)s + nom du noeud --> %(k2)s +"""), + +7 : _(""" + arret sur problème de répétitivité cyclique +"""), + +8 : _(""" + la composante : %(k1)s est une composante indefinie +"""), + + + + +10 : _(""" + arret sur type de DDL non défini +"""), + +11 : _(""" + "NB_POIN" est inférieur au nombre de points de l'interspectre. + le spectre est tronqué à la fréquence : %(r1)f +"""), + +12 : _(""" + le "NB_POIN" donné est modifié + (en une puissance de 2 compatible avec l'interspectre) + le "NB_POIN" retenu est : %(i1)d +"""), + +13 : _(""" + la durée est trop grande ou NB_POIN et trop petit par rapport + à la fréquence max (théorème de Shannon). + on choisit NBPOIN = %(i1)d +"""), + +14 : _(""" + la durée est petite par rapport au pas de discrétisation de l'interspectre. + choisir plutot : durée > %(r1)f +"""), + +15 : _(""" + "NB_POIN" est petit par rapport au pas de discrétisation de l'interspectre. + NB_POIN = %(i1)d + il faudrait un nombre supérieur à : %(r1)f +"""), + +16 : _(""" + on n'a pas trouve le DDL pour le noeud : %(k1)s +"""), + +17 : _(""" + de la sous-structure : %(k1)s +"""), + +18 : _(""" + et sa composante : %(k1)s +"""), + +19 : _(""" + il manque le seuil pour la fonction interprétée %(k1)s +"""), + +20 : _(""" + l'abscisse lineaire est nulle pour la courbe : %(k1)s + abscisse : %(r1)f +"""), + + + + + + + +24 : _(""" + au moins un terme de ALPHA est négatif à l'abscisse : %(i1)d +"""), + +25 : _(""" + ALPHA est nul et le nombre de mesures est strictement inférieur au nombre de modes + risque de matrice singulière +"""), + +26 : _(""" + calcul moindre norme +"""), + +27 : _(""" + problème calcul valeurs singulieres + pas = %(i1)d + abscisse = %(r1)f +"""), + +28 : _(""" + la matrice (PHI)T*PHI + ALPHA n'est pas inversible + pas = %(i1)d + abscisse = %(r1)f +"""), + + + + + + + + + + + + + + + + + + + + + + +45 : _(""" + on ne trouve pas DPMAX +"""), + +46 : _(""" + nombre d'itérations insuffisant +"""), + +47 : _(""" + F(XMIN) > 0 +"""), + +48 : _(""" + maille : %(k1)s + nombre d iterations = %(i1)d + ITER_INTE_MAXI = %(i2)d +"""), + +49 : _(""" + DP actuel = %(r1)f + F(DP) actuel = %(r2)f +"""), + +50 : _(""" + DP initial = %(r1)f + F(DP) initial = %(r2)f +"""), + +51 : _(""" + DP maximum = %(r1)f + F(DP) maximum = %(r2)f +"""), + +52 : _(""" + allure de la fonction + nb points : %(i1)d +"""), + +53 : _(""" + DP = %(r1)f + F(DP) = %(r2)f +"""), + + + + +55 : _(""" + incohérence détectée +"""), + +56 : _(""" + le noeud : %(k1)s de l'interface dynamique : %(k2)s + n'appartient pas la sous-structure: %(k3)s +"""), + + + + + +58 : _(""" + le noeud : %(k1)s de l interface dynamique : %(k2)s + n'est pas correctement référencé dans le squelette : %(k3)s +"""), + +59: _(""" + Le nombre de secteur doit etre supérieur ou égal à 2 (mot clé NB_SECTEUR) +"""), + +60 : _(""" + le noeud : %(k1)s de l'interface dynamique : %(k2)s + n'appartient pas la sous-structure: %(k3)s +"""), + + + + +62 : _(""" + le noeud : %(k1)s de l'interface dynamique : %(k2)s + n'est pas correctement référencé dans le squelette : %(k3)s +"""), + +63 : _(""" + conflit mot clés TOUT et GROUP_NO dans RECO_GLOBAL +"""), + +64 : _(""" + erreur de nom + la sous-structure : %(k1)s n a pas ete trouvée +"""), + +65 : _(""" + incohérence de nom + l interface dynamique : %(k1)s + de la sous-structure : %(k2)s + a pour groupe de noeud : %(k3)s + or group_no_1 = %(k4)s +"""), + +66 : _(""" + erreur de nom + la sous-structure : %(k1)s n'a pas ete trouvée +"""), + +67 : _(""" + incohérence de nom + l interface dynamique : %(k1)s + de la sous-structure : %(k2)s + a pour groupe de noeud : %(k3)s + or group_no_2 = %(k4)s +"""), + +68 : _(""" + nombre de points pas période : %(i1)d + coefficient de remontee du pas de temps : %(r1)f + coefficient de division du pas de temps : %(r2)f + coeff déterminant DT MIN (=DT INIT*COEFF): %(r3)f + nombre maximal de réductions du pas : %(i2)d + vitesse minimale variable : %(k1)s +"""), + +69 : _(""" + nombre incorrect de sous-structures + il vaut : %(i1)d + alors que le nombre total de sous-structures vaut : %(i2)d +"""), + +70 : _(""" + nombre incorrect de sous-structures + pour le chargement numero : %(i1)d + il en faut exactement : %(i2)d + vous en avez : %(i3)d +"""), + +71 : _(""" + nombre incorrect de vecteurs chargements + pour le chargement numero : %(i1)d + il en faut exactement : %(i2)d + vous en avez : %(i3)d +"""), + +72 : _(""" + un PROF_CHNO n'est pas défini + il manque pour le chargement : %(k1)s +"""), + +73 : _(""" + on doit avoir le meme type de forces pour un meme chargement global + or, la grandeur vaut : %(i1)d + pour la sous-structure %(k1)s + et elle vaut : %(i2)d + pour la sous-structure %(k2)s +"""), + +74 : _(""" + une des bases modales a un type incorrect + elle est associée à la sous-structure %(k1)s +"""), + +75 : _(""" + les numérotations ne coincident pas pour la sous-structure : %(k1)s + le PROF_CHNO pour la base modale est : %(k2)s + et celui pour le second membre : %(k3)s +"""), + +85 : _(""" + l''interface de droite n'existe pas + interface de nom %(k1)s +"""), + +86 : _(""" + l''interface de gauche n'existe pas + interface de nom %(k1)s +"""), + +87 : _(""" + l'interface axe n'existe pas + interface de nom %(k1)s +"""), + +88 : _(""" + arret sur problème interfaces de type différents +"""), + +89 : _(""" + arret sur problème de type interface non supporté + type interface --> %(k1)s +"""), + +90 : _(""" + le nombre d'amortissements réduits est trop grand + le nombre de modes propres vaut %(i1)d + et le nombre de coefficients : %(i2)d + on ne garde donc que les %(i3)d premiers coefficients +"""), + +91 : _(""" + le nombre d'amortissements réduits est insuffisant + il en manque : %(i1)d + car le nombre de modes vaut : %(i2)d + on rajoute %(i3)d coefficients avec la valeur du dernier coefficient. +"""), + +92 : _(""" + Nombre de modes propres calculés insuffisant. +"""), + +93 : _(""" + MODE_MECA : %(k1)s +"""), + +94 : _(""" + Nombre de modes propres limités à : %(i1)d +"""), + +95 : _(""" + l'entrée d'amortissements réduits est incompatible + avec des matrices de type %(k1)s + Il faut des matrices de type MATR_ASSE_GENE_* +"""), + +96 : _(""" + le nombre d'amortissements réduits est trop grand + le nombre de modes propres vaut %(i1)d + et le nombre de coefficients : %(i2)d + on ne garde donc que les %(i3)d premiers coefficients + +"""), + +97 : _(""" + le nombre d'amortissements réduits est insuffisant + il en manque : %(i1)d + car le nombre de modes vaut : %(i2)d + on rajoute %(i3)d amortissement reduits avec la valeur du dernier mode propre. +"""), + +98 : _(""" + incohérence dans le DATASET 58 + le nombre de valeurs fournies ne correspond pas au nombre de valeurs attendues + mesure concernée : %(i1)d + +"""), + +99 : _(""" + le nombre maximum d'itérations %(i1)d est atteint sans converger + le résidu relatif final est : %(r1)f + l instant de calcul vaut : %(r2)f + +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/algorith16.py b/Aster/Cata/cataSTA9/Messages/algorith16.py new file mode 100644 index 00000000..ace805a5 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/algorith16.py @@ -0,0 +1,521 @@ +#@ MODIF algorith16 Messages DATE 02/06/2008 AUTEUR BOYERE E.BOYERE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { + +1 : _(""" + nombre de pas de calcul : %(i1)d + nombre d'itérations : %(i2)d + ---------------------------------------------- + +"""), + +2 : _(""" + infos noeuds de choc + lieu de choc : %(i1)d + noeud de choc : %(k1)s +"""), + +3 : _(""" + sous-structure : %(k1)s +"""), + +4 : _(""" + coordonnees : x : %(r1)f + y : %(r2)f + z : %(r3)f +"""), + +5 : _(""" + noeud de choc : %(k1)s +"""), + +8 : _(""" + amortissement tangent utilise : %(r1)f + + origine choc x : %(r2)f + y : %(r3)f + z : %(r4)f + + norm_obst sin(alpha) : %(r5)f + cos(alpha) : %(r6)f + sin(beta) : %(r7)f + cos(beta) : %(r8)f + + angl_vrille : sin(gamma) : %(r9)f + cos(gamma) : %(r10)f +"""), + +9 : _(""" + jeu initial : %(r1)f +"""), + +11 : _(""" + le nb max d'iterations %(i1)d est atteint sans converger + le résidu relatif final est : %(r1)f + +"""), + +12 : _(""" + le nombre d'amortissements réduits est trop grand + le nombre de modes retenus vaut %(i1)d + et le nombre de coefficients : %(i2)d + on ne garde donc que les %(i3)d + %(k1)s +"""), + +13 : _(""" + le nombre d'amortissements reduits est insuffisant + il en manque : %(i1)d + car le nombre de modes vaut : %(i2)d + on rajoute %(i3)d + %(k1)s + %(k2)s +"""), + +14 : _(""" + pas de temps utilisateur trop grand : %(r1)f + pas de temps necessaire pour le calcul: %(r2)f + risques de problemes de precision + +"""), + +15 : _(""" + pas de temps utilisateur trop grand : %(r1)f + pas de temps necessaire pour le calcul: %(r2)f + parametres de calcul dans ce cas + nb de pas de calcul : %(i1)d + +"""), + +16 : _(""" + pas de temps utilisateur trop grand : %(r1)f + pas de temps necessaire pour le calcul: %(r2)f +"""), + +17 : _(""" + parametres de calcul dans ce cas + nb de pas de calcul : %(i1)d + +"""), + +18 : _(""" + le nombre d'amortissements reduits est trop grand + le nombre de modes propres vaut %(i1)d + et le nombre de coefficients : %(i2)d + on ne garde donc que les %(i3)d + %(k1)s + +"""), + +19 : _(""" + le nombre d'amortissements reduits est insuffisantil en manque : %(i1)d + car le nombre de modes vaut : %(i2)d + on rajoute %(i3)d + %(k1)s + %(k2)s + +"""), + +20 : _(""" + mode dynamique : %(i1)d + amortissement trop grand : %(r1)f + amortissement critique : %(r2)f + problemes de convergence possibles %(k1)s + +"""), + +21 : _(""" + taux de souplesse negligée : %(r1)f +"""), + +22 : _(""" + calcul par superposition modale : + la base de projection est un %(k1)s + le nb d'équations est : %(i1)d + la methode utilisée est : %(k2)s + la base utilisée est : %(k3)s + le nb de vecteurs de base est : %(i2)d +"""), + +23 : _(""" + le pas de temps initial est : %(r1)f + le nb de pas d'archive est : %(i1)d +"""), + +24 : _(""" + NUME_VITE_FLUI : %(i1)d + vitesse gap : %(r1)f + le nb de modes de BASE_FLUI : %(i2)d + le nb total de modes de la base: %(i3)d + le pas de temps initial est : %(r2)f + durée de l'excitation : %(r3)f +"""), + +25 : _(""" + le nb de pas d'archive est : %(i1)d +"""), + +26 : _(""" + le pas de temps du calcul est : %(r1)f + le nb de pas de calcul est : %(i1)d + le nb de pas d'archive est : %(i2)d +"""), + +38 : _(""" + mode dynamique : %(i1)d + amortissement trop grand : %(r1)f + amortissement critique : %(r2)f + probleme de convergence possible %(k1)s +"""), + +39 : _(""" + sous-structuration dynamique + calcul par superposition modale + ---------------------------------------------- + ! la numerotation utilisee est : %(k1)s + ! le nb d'equations est : %(i1)d + ! la methode utilisee est : %(k2)s + ! - nb de vecteurs dynamiques : %(i2)d + ! - nb de deformees statiques : %(i3)d +"""), + +40 : _(""" + ! le pas de temps initial est : %(r1)f +"""), + +41 : _(""" + ! le pas de temps du calcul est : %(r1)f + ! le nb de pas de calcul est : %(i1)d +"""), + +42 : _(""" + ! le nb de pas d'archive est : %(i1)d +"""), + +44 : _(""" + les interfaces de la liaison n'ont pas la meme longueur + sous-structure 1 --> %(k1)s + interface 1 --> %(k2)s + sous-structure 2 --> %(k3)s + interface 2 --> %(k4)s + +"""), + +45 : _(""" + conflit dans les vis_a_vis des noeudsle noeud %(k1)s + est le vis-a-vis des noeuds %(k2)s + et %(k3)s + +"""), + +46 : _(""" + Le critère de vérification ne peut etre relatif dans votre cas, + la longueur caracteristique de l'interface de la sous-structure etant nulle. + sous-structure 1 --> %(k1)s + interface 1 --> %(k2)s + sous-structure 2 --> %(k3)s + interface 2 --> %(k4)s + +"""), + +47 : _(""" + les interfaces ne sont pas compatibles sous-structure 1 --> %(k1)s + interface 1 --> %(k2)s + sous-structure 2 --> %(k3)s + interface 2 --> %(k4)s + +"""), + +48 : _(""" + les interfaces ne sont pas compatibles sous-structure 1 --> %(k1)s + interface 1 --> %(k2)s + sous-structure 2 --> %(k3)s + interface 2 --> %(k4)s + +"""), + + +50 : _(""" + les deux interfaces ont pas meme nombre de noeuds + nombre noeuds interface droite --> %(i1)d + nombre noeuds interface gauche --> %(i2)d + +"""), + +51 : _(""" + conflit dans les vis_a_vis des noeuds + le noeud %(k1)s + est le vis-a-vis des noeuds %(k2)s et %(k3)s + +"""), + +52 : _(""" + axe de symétrie cyclique différent de Oz + numéro du couple de noeuds : %(i1)d + noeud droite --> %(k1)s + noeud gauche --> %(k2)s + +"""), + +53 : _(""" + probleme de rayon droite-gauche differents + numero du couple de noeuds : %(i1)d + noeud droite --> %(k1)s + noeud gauche --> %(k2)s + +"""), + +54 : _(""" + probleme signe angle entre droite et gauche + numero du couple de noeuds: %(i1)d + noeud droite --> %(k1)s + noeud gauche --> %(k2)s + +"""), + +55 : _(""" + probleme valeur angle répétitivité cyclique + numero du couple de noeuds: %(i1)d + noeud droite --> %(k1)s + noeud gauche --> %(k2)s + +"""), + +56 : _(""" + vérification répétitivité : aucune erreur détectée +"""), + +57 : _(""" + les noeuds des interfaces ne sont pas alignés en vis-a-vis + les noeuds ont ete réordonnés + +"""), + +58 : _(""" + arret sur probleme répétitivité cyclique + tentative de diagnostic: %(k1)s +"""), + +60 : _(""" + VISCOCHABOCHE : erreur d'intégration + - Essai d'intégration numéro : %(i1)d + - Convergence vers une solution non conforme, + - Incrément de déformation cumulée négative = %(r1)f, + - Changer la taille d'incrément. +"""), + +64 : _(""" + NADAI_B, erreur d'intégration + - Essai d'intégration numéro : %(i1)d + - Convergence vers une solution non conforme, + - Incrément de déformation cumulée négative = %(r1)f + - Changer la taille d'incrément +"""), + +65 : _(""" + NADAI_B : ERREUR + - Non convergence a itération maxi : %(i1)d + - Convergence régulière mais trop lente + - ERREUR > %(r1)f + - Diminuer la taille d'incrément + """), + +66 : _(""" + NADAI_B : ERREUR + - Non convergence à itération maxi : %(i1)d + - Convergence irrégulière & erreur > %(r1)f + - Diminuer la taille d'incrément + """), + +67 : _(""" + NADAI_B : ERREUR + - Non convergence à itération maxi : %(i1)d + - ERREUR > %(r1)f + - Diminuer la taille d'incrément + """), + +68 : _(""" + Arret par manque de temps CPU au numéro d'ordre %(i1)d + + - Temps moyen par incrément de temps : %(r1)f + - Temps CPU restant : %(r2)f + + La base globale est sauvegardée, elle contient les pas archivés avant l'arret + + """), + +69 : _(""" + %(k1)s: ERREUR + - Non convergence a itération maxi : %(i1)d + - Convergence régulière mais trop lente + - ERREUR > %(r1)f + - Diminuer la taille d'incrément + """), + +70 : _(""" + %(k1)s: ERREUR + - Non convergence à itération maxi : %(i1)d + - Convergence irrégulière & erreur > %(r1)f + - Diminuer la taille d'incrément + """), + +71 : _(""" + %(k1)s: ERREUR + - Non convergence à itération maxi : %(i1)d + - ERREUR > %(r1)f + - Diminuer la taille d'incrément + + """), + +72 : _(""" + LMARC : erreur d'intégration + - Essai d'intégration numéro : %(i1)d + - Divergence de l'intégration locale + - Diminuer la taille d'incrément + """), + +73 : _(""" + LMARC : erreur d'intégration + - Essai d'intégration numéro : %(i1)d + - Convergence vers une solution non conforme + - Incrément de déformation cumulée négative : %(r1)f + - Changer la taille d'incrément + """), + +74 : _(""" + LMARC : erreur + - Non convergence a itération maxi : %(i1)d + - Convergence régulière mais trop lente + - Diminuer la taille d'incrément + """), + +75 : _(""" + LMARC : erreur + - Non convergence a itération maxi : %(i1)d + - Convergence irrégulière & erreur > %(r1)f + - Diminuer la taille d'incrément + """), + +76 : _(""" + LMARC : erreur + - Non convergence a itération maxi : %(i1)d + - erreur > %(r1)f + - Diminuer la taille d'incrément + """), + +77 : _(""" + Arret par manque de temps CPU au numéro d'ordre : %(i1)d + - Dernier instant archivé : %(r1)f + - Numéro d'ordre correspondant : %(i2)d + - Temps moyen par pas de temps : %(r2)f + - Temps CPU restant : %(r3)f + """), + +78 : _(""" + Précision du transitoire : %(r1)f + """), + +79 : _(""" + Couplage temporel avec NB modes : %(i1)d + """), + +80 : _(""" + Le nombre de lieu(x) de choc est : %(i1)d + """), + +81 : _(""" + Le nombre de dispositifs anti-sismique est : %(i1)d + """), + +82 : _(""" + le nombre de lieu(x) de choc avec flambement est : %(i1)d + """), + +83 : _(""" + Le nombre de RELA_EFFO_DEPL est : %(i1)d + """), + +84 : _(""" + Le nombre de RELA_EFFO_VITE est : %(i1)d + """), + +87 : _(""" + Arret par manque de temps CPU + - Instant courant : %(r1)f + - Nombre d'appels à ALITMI : %(i1)d + - Temps moyen par pas de temps : %(r2)f + - Temps CPU restant : %(r3)f + """), + +88 : _(""" + Arret par manque de temps CPU au pas de temps : %(i1)d + - A l'instant : %(r1)f + - Temps moyen par pas : %(r2)f + - Temps CPU restant : %(r3)f + """), + +89 : _(""" + On passe outre car VERI_PAS = NON + """), + +92 : _(""" + Au noeud de choc %(k1)s + """), + +93 : _(""" + Pour le noeud n0 : %(i1)d + - Raideur locale DEPX : %(r1)f + - Raideur locale DEPY : %(r2)f + - Raideur locale DEPZ : %(r3)f + """), + +94 : _(""" + il manque les paramètres de Van_Genuchten + """), + +95 : _(""" + Van_Genuchten non autorisé pour ce modèle de couplage + """), + +96 : _(""" + le solveur linéaire MUMPS en mode parallèle distribué 'DISTSD' requiert un concept + produit de type SD_FETI en entrée du mot-clé PARTITION. Voir les commandes + DEFI_PART_FETI et DEFI_PART_OPS. + """), + +97 : _(""" + Attention, vous utilisez le solveur linéaire MUMPS en mode parallèle distribué, + mais vous n'avez alloué qu'un processeur MPI. Vous aurez bien les résultats + attendus mais sans doute pas les performances. Il s'agit sans doute d'un run + de test ! + """), + +99 : _(""" + Valeur du parametre SOLVEUR/DIST_PROC0 incorrecte, routine CRESOL. + Si le solveur est MUMPS distribue DISTSD, cette valeur doit laisser au moins + un SD par processeur restant (hors proc 0) ! + Si le solveur est MUMPS distribue DISTMC, cette valeur doit laisser au moins + une maille physique du modele par processeur restant (hors proc 0)! +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/algorith17.py b/Aster/Cata/cataSTA9/Messages/algorith17.py new file mode 100644 index 00000000..8cfe79e1 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/algorith17.py @@ -0,0 +1,28 @@ +#@ MODIF algorith17 Messages DATE 23/10/2007 AUTEUR BOITEAU O.BOITEAU +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== +def _(x) : return x + +cata_msg={ +1: _(""" + Solveur linéaire MUMPS distribué, routine CRESOL. + Le processeur de rang %(i1)d ne s'est vu attribuer aucune maille physique + du modèle! +"""), +} diff --git a/Aster/Cata/cataSTA9/Messages/algorith2.py b/Aster/Cata/cataSTA9/Messages/algorith2.py index 1d15e628..181f173d 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith2.py +++ b/Aster/Cata/cataSTA9/Messages/algorith2.py @@ -1,8 +1,8 @@ -#@ MODIF algorith2 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF algorith2 Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,54 +20,50 @@ def _(x) : return x -cata_msg={ +cata_msg = { - - - - - -3: _(""" - la liste des cham_no n'existe pas +3 : _(""" + la liste des CHAM_NO n'existe pas """), -4: _(""" - il n'y a aucun cham_no dans la liste +4 : _(""" + il n'y a aucun CHAM_NO dans la liste """), -5: _(""" - les cham_no n'ont pas tous la meme longueur +5 : _(""" + les CHAM_NO n'ont pas tous la meme longueur """), -6: _(""" - il faut definir nom_cmp +6 : _(""" + il faut définir NOM_CMP """), -7: _(""" - il faut definir 3 angles nautiques. +7 : _(""" + il faut définir 3 angles nautiques. """), -8: _(""" - l origine doit etre definie par 3 coordonnees. +8 : _(""" + l'origine doit etre définie par 3 coordonnées. """), -9: _(""" +9 : _(""" l axe z est obligatoire en 3d. """), -10: _(""" - pour le 2d on ne prend que 2 coordonnees pour l origine. +10 : _(""" + pour le 2d, on ne prend que 2 coordonnées pour l'origine. """), -11: _(""" - l axe z est n a pas de sens en 2d. +11 : _(""" + l axe z est n'a pas de sens en 2d. """), -12: _(""" - le noeud se trouve sur l axe du repere cylindrique. on prend le noeud moyen des centres geometriques. +12 : _(""" + le noeud se trouve sur l'axe du repère cylindrique. + on prend le noeud moyen des centres géometriques. """), -13: _(""" +13 : _(""" -> Lors du passage au repère cylindrique, un noeud a été localisé sur l'axe du repère cylindrique. Code_Aster utilise dans ce cas le centre de gravité de l'élément pour le calcul de la matrice de passage en repère cylindrique. @@ -76,356 +72,207 @@ cata_msg={ s'arrete en erreur fatale. """), -14: _(""" - charge non traitee: %(k1)s -"""), - -15: _(""" - les modelisations autorisees sont 3d et d_plan et axis -"""), - -16: _(""" - le choix des parametres ne correspond pas a l un des modeles cjs +15 : _(""" + les modélisations autorisées sont 3D et D_PLAN et AXIS """), -17: _(""" - non converg.: essai normales +16 : _(""" + le choix des paramètres ne correspond pas à l'un des modèles CJS """), -18: _(""" - non converg.: nb iter max atteint +17 : _(""" + la loi CJS ne converge pas """), -19: _(""" - les modelisations autorisees sont 3d et d-plan et axis +18 : _(""" + la loi CJS ne converge pas avec le nombre maximal d'itérations (intégration locale) """), -20: _(""" - modelisation inconnue +20 : _(""" + modélisation inconnue """), -21: _(""" - nvi > nvimax +22 : _(""" + vecteur de norme nulle """), -22: _(""" - vecteur de norme nulle +23 : _(""" + la maille doit etre de type TETRA4, TETRA10, PENTA6, PENTA15, HEXA8 ou HEXA20. + or la maille est de type : %(k1)s . """), -23: _(""" - la maille doit etre de type tetra4, tetra10, penta6, penta15, hexa8 ou hexa20. or la maille est de type : %(k1)s . +24 : _(""" + la maille doit etre de type TETRA4, TETRA10, PENTA6, PENTA15, HEXA8 ou HEXA20. + ou TRIA3-6 ou QUAD4-8 + or la maille est de type : %(k1)s . """), -24: _(""" - la maille doit etre de type tetra4, tetra10, penta6, penta15, hexa8 ou hexa20. ou tria3-6 ou quad4-8 or la maille est de type : %(k1)s . -"""), - -25: _(""" - mauvaise face -"""), - -26: _(""" +26 : _(""" %(k1)s groupe inexistant """), -27: _(""" +27 : _(""" maille %(k1)s de type %(k2)s invalide pour le contact """), -28: _(""" +28 : _(""" groupe de mailles de contact invalide """), -29: _(""" +29 : _(""" mailles de contact 2d et 3d """), -30: _(""" - trois elements -"""), - -31: _(""" - deux elements sur la meme face +30 : _(""" + trois éléments """), -32: _(""" - une reorientation a eu lieu pour le deuxieme appui +31 : _(""" + deux éléments sur la meme face """), -33: _(""" - pas de maille de reference trouvee +33 : _(""" + pas de maille de référence trouvée """), -34: _(""" - stop_singulier=decoupe necessite la subdivision automatique du pas de temps (subd_pas) +34 : _(""" + STOP_SINGULIER = DECOUPE nécessite la subdivision automatique du pas de temps (SUBD_PAS) """), -35: _(""" - la methode %(k1)s est inadequate pour une resolution de type "ldlt" +35 : _(""" + la méthode %(k1)s est inadéquate pour une résolution de type "LDLT" """), -36: _(""" - la methode %(k1)s est inadequate pour une resolution de type "gcpc" +36 : _(""" + la méthode %(k1)s est inadéquate pour une résolution de type "GCPC" """), -37: _(""" - la methode %(k1)s etant inadequate pour une resolution de type "mult_front" +37 : _(""" + la methode %(k1)s est inadéquate pour une résolution de type "MULT_FRONT" """), -38: _(""" - la methode %(k1)s etant inadequate pour une resolution de type "feti" +38 : _(""" + la méthode %(k1)s est inadéquate pour une résolution de type "FETI" """), -39: _(""" - le solveur feti requiert un concept produit de type sd_feti en entree du mot-cle partition +39 : _(""" + le solveur FETI requiert un concept produit de type SD_FETI en entrée du mot-clé PARTITION """), -40: _(""" +40 : _(""" ! nombre de sous-domaines illicite ! """), -41: _(""" - en parallele il faut au moins un sous-domaine par processeur ! -"""), - -42: _(""" - en parallele stogi=oui obligatoire pour limiter les msgs ! -"""), - -43: _(""" - pas de calcul sur le critere de rice disponible -"""), - -44: _(""" - cette commande doit necessairement avoir le type evol_ther. -"""), - -45: _(""" - seuls les champs de fonctions aux noeuds sont evaluables: %(k1)s +41 : _(""" + en parallèle, il faut au moins un sous-domaine par processeur ! """), -46: _(""" - nous traitons les champs de reels et de fonctions: . %(k1)s +42 : _(""" + en parallèle, STOGI = OUI obligatoire pour limiter les messages ! """), -47: _(""" - le nom symbolique du champ chercher n est pas licite. %(k1)s +43 : _(""" + pas de calcul sur le critère de Rice disponible """), -48: _(""" - plusieurs instants correspondent a celui specifie sous affe +44 : _(""" + cette commande doit nécessairement avoir le type EVOL_THER. """), -49: _(""" - nume_fin inferieur a nume_init +45 : _(""" + seuls les champs de fonctions aux noeuds sont évaluables: %(k1)s """), -50: _(""" - cmp non traitee +46 : _(""" + nous traitons les champs de réels et de fonctions: . %(k1)s """), -51: _(""" - il y a plusieurs charges contenant des liaisons unilaterales +47 : _(""" + le nom symbolique du champ à chercher n'est pas licite. %(k1)s """), -52: _(""" - debordement tableau (dvlp) +48 : _(""" + plusieurs instants correspondent à celui specifié sous AFFE """), -53: _(""" - erreur code dans affichage (dvlp) +49 : _(""" + NUME_FIN inférieur à NUME_INIT """), -54: _(""" - increment de deformation cumulee (dp) = - %(k1)s +50 : _(""" + CMP non traitée """), -55: _(""" - erreur d integration- essai d integration numero %(k1)s - convergence vers une solution non conforme - increment de deformation cumulee negative = - %(k2)s - redecoupage du pas de temps +54 : _(""" + increment de déformation cumulée (dp) = - %(k1)s """), -56: _(""" - erreur - non convergence a iteration maxi %(k1)s - convergence reguliere mais trop lente - erreur > %(k2)s - redecoupage du pas de temps +55 : _(""" + erreur d'intégration + - essai d(integration numero %(k1)s + - convergence vers une solution non conforme + - incrément de déformation cumulée négative = - %(k2)s + - redécoupage du pas de temps """), -57: _(""" - erreur - non convergence a iteration maxi %(k1)s - convergence irreguliere & erreur > %(k2)s - redecoupage du pas de temps +56 : _(""" + erreur + - non convergence à l'itération maxi %(k1)s + - convergence régulière mais trop lente + - erreur > %(k2)s + - redécoupage du pas de temps """), -58: _(""" - erreur - non convergence a iteration maxi %(k1)s - erreur > %(k2)s - redecoupage du pas de temps +57 : _(""" + erreur + - non convergence à l'itération maxi %(k1)s + - convergence irrégulière & erreur > %(k2)s + - redécoupage du pas de temps """), -59: _(""" - la transformation geometrique est singuliere pour la maille : %(k1)s (jacobien = 0.) +58 : _(""" + erreur + - non convergence à l'itération maxi %(k1)s + - erreur > %(k2)s + - redécoupage du pas de temps """), -60: _(""" - derivees secondes non etendues au 3d +59 : _(""" + la transformation géométrique est singulière pour la maille : %(k1)s + (jacobien = 0.) """), -61: _(""" - les listes des groupes de noeuds a fournir doivent contenir le meme nombre de groupes de noeuds +60 : _(""" + dérivées secondes non étendues au 3d """), -62: _(""" - les listes des groupes de noeuds doivent contenir le meme nombre de noeuds +61 : _(""" + les listes des groupes de noeuds à fournir doivent contenir le meme nombre de groupes de noeuds """), -63: _(""" - on imprime que des champs reels +62 : _(""" + les listes des groupes de noeuds doivent contenir le meme nombre de noeuds """), -64: _(""" - %(k1)s cham_no deja existant +63 : _(""" + on n'imprime que des champs réels """), -65: _(""" - appel errone a rsexch +64 : _(""" + %(k1)s cham_no déjà existant """), -66: _(""" - calcul du transitoire : choc en phase transitoire - pas de solution trouvee. utiliser l'option etat_stat = non. +65 : _(""" + appel erroné a RSEXCH """), -67: _(""" - modele non local : projecteur singulier +66 : _(""" + calcul du transitoire : choc en phase transitoire - pas de solution trouvée. + utiliser l'option ETAT_STAT = NON """), -68: _(""" - iter_dual_maxi trop eleve (<10000) +79 : _(""" + pas de valeurs propres trouvées """), -69: _(""" - fonction duale non convexe -"""), - -70: _(""" - probleme recherche lineaire -"""), - -71: _(""" - pas de geometrie associee au modele delocalise -"""), - -72: _(""" - erreur transfo cham_elem_s -"""), - -73: _(""" - mauvaise direction de descente -"""), - -74: _(""" - pas de borne sup -"""), - -75: _(""" - probleme recherche lineaire primal -"""), - -76: _(""" - iterations primales insuffisantes -"""), - -77: _(""" - mauvais dimensionnement de geomi -"""), - -78: _(""" - dvp : energie non convexe -"""), - -79: _(""" - pas de valeurs propres trouvees -"""), - - - - - - - - - - - -82: _(""" - nombre maximal de niveau de subdivision atteint -"""), - -83: _(""" - detection divergence, force la subdivision. -"""), - -84: _(""" - force la subdivision -"""), - -85: _(""" - pas minimal de la subdivision atteint. -"""), - -86: _(""" - il n'y a aucun instant de calcul ('list_inst') -"""), - -87: _(""" - liste d'instants non croissante -"""), - -88: _(""" - acces par instant sans evolution ordonnee interdit (increment) -"""), - -89: _(""" - instant initial introuvable dans la liste d'instants (list_inst) -"""), - -90: _(""" - instant final introuvable dans la liste d'instants (list_inst) -"""), - -91: _(""" - nume_inst_init plus petit que nume_fin avec evolution: 'retrograde' -"""), - -92: _(""" - nume_init plus grand que nume_fin -"""), - -93: _(""" - nume_inst_init n'appartient pas a la liste d'instants -"""), - -94: _(""" - -> Le numéro d'ordre correspondant à l'instant final de calcul NUME_INST_FIN - n'appartient pas à la liste des numéros d'ordre. - Dans ce cas, Aster considère pour numéro d'ordre final, le dernier de - la liste fournie. - -> Risque & Conseil : - Afin d'éviter des pertes de résultats, assurez-vous que le numéro d'ordre - associé à l'instant NUME_INST_FIN appartienne bien à la liste des numéros - d'ordre. -"""), - -95: _(""" - acces par instant sans evolution ordonnee interdit (archivage) -"""), - -96: _(""" - impossible d'archiver l'etat initial : le concept est reentrant (archivage) -"""), - -97: _(""" - l'archivage va ecraser des instants deja calcules (archivage) -"""), - -98: _(""" - l'archivage va laisser des trous dans la sd evol_noli (archivage, nume_init) -"""), - -99: _(""" - le nombre de niveau de subdivisions doit etre plus grand que 1 (subd_niveau) -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/algorith3.py b/Aster/Cata/cataSTA9/Messages/algorith3.py index 24531cb4..c4e325b6 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith3.py +++ b/Aster/Cata/cataSTA9/Messages/algorith3.py @@ -1,8 +1,8 @@ -#@ MODIF algorith3 Messages DATE 15/05/2007 AUTEUR GNICOLAS G.NICOLAS +#@ MODIF algorith3 Messages DATE 21/04/2008 AUTEUR GREFFET N.GREFFET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,46 +20,25 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - certains pas de temps de la liste (liste_inst) sont plus petits que le pas de temps minimal renseigne (subd_pas_mini) +7 : _(""" + Etant donné la présence du mot clé AMOR_ALPHA et / ou AMOR_BETA, + on va assembler la matrice d'amortissement globale de Rayleigh, + même si ces coefficients sont tous les deux nuls. + Cette opération engendre un surcoût de calcul. """), -2: _(""" - il faut donner subd_niveau et/ou subd_pas_mini +8 : _(""" + élément non traité """), -3: _(""" - le nombre de subdivisions du pas de temps doit etre plus grand que 1 (subd_pas) +9 : _(""" + utiliser la formulation en déplacement avec un schéma NEWMARK, HHT ou THETA_METHODE, + ou la formulation en accéleration avec un schéma DIFF_CENT ou TCHAMWA. """), -4: _(""" - option inconnue < %(k1)s > incoherence catalogue -"""), - -5: _(""" - methode de subdivision inconnue < %(k1)s > incoherence catalogue -"""), - -6: _(""" - valeur de subd_iter_igno incoherent avec iter_glob_maxi. augmentez iter_glob_maxi -"""), - -7: _(""" - valeur de subd_iter_fin incoherent avec iter_glob_maxi. augmentez iter_glob_maxi -"""), - -8: _(""" - element non traite -"""), - -9: _(""" - utiliser la formulation en deplacement avec un schema newmark, hht ou theta_methode, - ou la formulation en acceleration avec un schema diff_cent ou tchamwa. -"""), - -10: _(""" +10 : _(""" -> Contact avec DYNA_TRAN_MODAL : Il y a interpénétration d'une valeur supérieure à (DIST_MAIT + DIST_ESCL). -> Risque & Conseil : DIST_MAIT et DIST_ESCL permettent de tenir compte d'une épaisseur de matériau non représentée dans le maillage @@ -69,342 +48,256 @@ cata_msg={ générer des erreurs dans l'orientation des forces de contact. """), -11: _(""" - methode a pas adaptatif la donnee du pas est obligatoire +11 : _(""" + méthode à pas adaptatif : la donnée du pas est obligatoire """), -12: _(""" - methode a pas adaptatif le pas ne peut pas etre nul +12 : _(""" + méthode à pas adaptatif : le pas ne peut pas etre nul """), -13: _(""" - les matrices de masse elementaires doivent obligatoirement avoir ete calculees avec l'option mass_meca_diag +13 : _(""" + les matrices de masse élémentaires doivent obligatoirement avoir été calculées + avec l'option MASS_MECA_DIAG """), -14: _(""" +14 : _(""" on archive au moins un champ. """), -15: _(""" - champ " %(k1)s " deja existant -"""), - -16: _(""" +16 : _(""" A l'instant %(r1)f, l'erreur vaut %(r2)f Cette erreur est supérieure à 1. Le pas de temps vaut %(r3)f On arrete de le réduire, car le nombre de réductions a atteint %(i1)d, qui est le maximum possible. """), -17: _(""" - methode adapt pas de temps minimal atteint +17 : _(""" + méthode à pas adaptatif : pas de temps minimal atteint """), -18: _(""" - methode des differences centrees: la donnee du pas est obligatoire +18 : _(""" + methode des différences centrees: la donnee du pas est obligatoire """), -19: _(""" - methode des differences centrees: le pas ne peut pas etre nul +19 : _(""" + methode des différences centrees: le pas ne peut pas etre nul """), -20: _(""" - le chargement de type dirichlet necessite la resolution par le schema de newmark +20 : _(""" + le chargement de type dirichlet nécessite la résolution par le schema de NEWMARK """), -21: _(""" +21 : _(""" Nombre de pas de calcul : %(i1)d Nombre d'itérations : %(i2)d """), -23: _(""" - vous calculez une impedance absorbante +23 : _(""" + vous calculez une impédance absorbante """), -24: _(""" - on n'a pas pu trouve le dernier instant sauve. +24 : _(""" + on n'a pas pu trouver le dernier instant sauvé. """), -25: _(""" - le champ "depl" n'est pas trouve dans le concept dyna_trans %(k1)s +25 : _(""" + le champ "DEPL" n'est pas trouvé dans le concept DYNA_TRANS %(k1)s """), -26: _(""" - le champ "vite" n'est pas trouve dans le concept dyna_trans %(k1)s +26 : _(""" + le champ "VITE" n'est pas trouvé dans le concept DYNA_TRANS %(k1)s """), -27: _(""" +27 : _(""" le champ "acce" n'est pas trouve dans le concept dyna_trans %(k1)s """), -28: _(""" - deplacements initiaux nuls. +28 : _(""" + déplacements initiaux nuls. """), -29: _(""" +29 : _(""" vitesses initiales nulles. """), -30: _(""" - nume_init: on n'a pas trouver le nume_init dans le resultat %(k1)s -"""), - -31: _(""" - methode de newmark ou wilson: la donnee de list_inst ou fonc_inst est obligatoire -"""), - -32: _(""" - fonc_inst: on attend une fonction. -"""), - -33: _(""" - fonc_inst: il faut une fonction a pas constant. -"""), - -34: _(""" - fonc_inst: temps de reprise superieur a la fonction. -"""), - -35: _(""" - on n'a pas pu trouver le dernier instant sauve. -"""), - -36: _(""" - nume_init: on n'a pas trouve le nume_init dans le resultat %(k1)s -"""), - -37: _(""" - incoherence sur h, alpha, elas -"""), - -40: _(""" - le nom_cham %(k1)s n'appartient pas a la sd +30 : _(""" + NUME_INIT: on n'a pas trouvé le NUME_INIT dans le résultat %(k1)s """), -41: _(""" - erreur(s) dans les donnees +31 : _(""" + methode de NEWMARK ou WILSON: la donnée de LIST_INST ou FONC_INST est obligatoire """), -42: _(""" - critere inconnu : %(k1)s +32 : _(""" + FONC_INST: on attend une fonction. """), -45: _(""" - le champ absolu n'est accessible qu'en presence de modes statiques +33 : _(""" + fonc_inst: il faut une fonction à pas constant. """), - - - - - - - -47: _(""" - debordement tableau +34 : _(""" + fonc_inst: temps de reprise supérieur à la fonction. """), -48: _(""" - pas de list_inst dans increment !?!?! +36 : _(""" + NUME_INIT: on n'a pas trouvé le NUME_INIT dans le résultat %(k1)s """), -49: _(""" - il faut definir "list_arch" ou "list_inst" ou "inst" ou "pas_obse" au premier mot cle facteur "observation" +37 : _(""" + incohérence sur H, ALPHA, ELAS """), -50: _(""" - seule la valeur de "list_arch" ou "list_inst" ou "inst" ou "pas_obse" du premier mot cle facteur "observation" est prise en compte +40 : _(""" + le nom_cham %(k1)s n'appartient pas à la sd """), -51: _(""" - pas de modeilisation c_plan pour la plasticite a gradient +41 : _(""" + erreur(s) dans les données """), -52: _(""" - pas de modelisation c_plan pour rousselier a gradient +42 : _(""" + critère inconnu : %(k1)s """), -53: _(""" - comportement non prevu pour un algo de lagrangien augmente +43 :_(""" + PLAS=2 """), -54: _(""" - le modele explose - decouper votre pas de temps +55 : _(""" + ITER_INTE_MAXI insuffisant """), -55: _(""" - iter_inte_maxi insuffisant +56 : _(""" + la durée du transitoire est limitée par les possibilités de la transformée de Fourier rapide """), -56: _(""" - duree du transitoire limitee par les possibilites de la transformee de fourier rapide +57 : _(""" + la durée de la simulation temporelle est insuffisante pour le passage du transitoire """), -57: _(""" - duree de la simulation temporelle insuffisante pour passage du transitoire +58 : _(""" + changement de signe de la vitesse --> on prend VITG0(I) """), -58: _(""" - changement de signe de la vitesse --> on prend vitg0(i) -"""), - -59: _(""" +59 : _(""" la matrice est triangulaire superieur-inversion indice """), -60: _(""" - pivot nul. -"""), - -61: _(""" - option non prevue ! -"""), - -62: _(""" - pb 1 test spectre fi par arpack ! -"""), - -63: _(""" - pb 2 test spectre fi par arpack ! +60 : _(""" + la matrice interspectrale possède un pivot nul. """), -64: _(""" - valeur de stogi incoherente ! +61 : _(""" + option non prévue ! """), -65: _(""" - en parallele stogi=oui obligatoire pour l'instant ! +62 : _(""" + pb 1 test spectre fi par ARPACK """), -66: _(""" - option de calcul incoherente ! +63 : _(""" + pb 2 test spectre fi par ARPACK """), -67: _(""" - pb division par zerodans la construction du beta ! +64 : _(""" + valeur de STOGI incoherente """), -68: _(""" - incoherence 1 .lili et .flin ! +65 : _(""" + en parallèle STOGI=OUI obligatoire pour l'instant """), -69: _(""" - incoherence 2 .lili et .flin ! +66 : _(""" + option de calcul incohérente """), -70: _(""" - incoherence 3 .lili et .flin ! +67 : _(""" + pb division par zéro dans la construction du BETA """), -71: _(""" - incoherence .lili et .fel3 ! +72 : _(""" + donnée erronnée, multiplicité nulle """), -72: _(""" - donnee erronnee, multiplicite nulle ! +76 : _(""" + le type de concept: TABLE_SDASTER doit etre associé au mot clé NUME_VITE_FLUI """), -73: _(""" - erreur log negatif ou nul +78 : _(""" + pas de discrétisation de l'interspectre non constant. """), -74: _(""" - erreur_gamdev : alpha < 1 +79 : _(""" + discrétisations differentes selon les fonctions de l'interspectre """), -75: _(""" - unif < 0 +80 : _(""" + "NB_POIN" n est pas une puissance de 2 + on prend la puissance de 2 supérieure """), -76: _(""" - le type de concept: table_sdaster doit etre associe au mot cle nume_vite_flui +81 : _(""" + coefficient de dispersion trop grand + consulter la documentation d'utilisation """), -77: _(""" - y a un bug 4 +82 : _(""" + matrice moyenne non définie positive """), -78: _(""" - pas de discretisation de l'interspectre non constant. -"""), - -79: _(""" - discretisations differentesselon les fonctions de l'interspectre -"""), - -80: _(""" - "nb_poin" n est pas une puissance de 2,on prend la puissance de 2 superieure -"""), - -81: _(""" - coefficient de dispersion trop grand, cf. doc. u -"""), - -82: _(""" - matrice moyenne non definie positive -"""), - -83: _(""" +83 : _(""" le pas tend vers 0 ... """), -84: _(""" - erreur dans la recuperation du nume.prno . -"""), - -86: _(""" - pas d'interpolation possible pour les frequences. +86 : _(""" + pas d'interpolation possible pour les fréquences. """), -87: _(""" - derivee de f nulle +87 : _(""" + derivée de F nulle """), -88: _(""" - gm negatif +88 : _(""" + GM négatif """), -89: _(""" - valeurs propres non// ordonnees %(k1)s %(k2)s %(k3)s +89 : _(""" + valeurs propres non ordonnées : + %(k1)s %(k2)s %(k3)s """), -90: _(""" - coef paraboliques pas compatibles +90 : _(""" + coefficients paraboliques pas compatibles """), -91: _(""" - coef paraboliques pas compatibles 2 +92 : _(""" + modelisations C_PLAN et 1D pas autorisées """), -92: _(""" - modelisations c_plan et 1d pas autorisees -"""), - -93: _(""" +93 : _(""" zero elongation for hyperelastic material """), -94: _(""" - t1*c33-t3*c33 is zero for hyperelastic material +94 : _(""" + T1*C33-T3*C33 is zero for hyperelastic material """), -95: _(""" +95 : _(""" error of elongation for hyperelastic material """), -96: _(""" +96 : _(""" no material data for hyperelastic """), -97: _(""" +97 : _(""" model not supported for hyperelastic material """), -98: _(""" +98 : _(""" check your poisson ratio """), -99: _(""" - erreur numero colonne (dvlp) -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/algorith4.py b/Aster/Cata/cataSTA9/Messages/algorith4.py index 31537782..ccc2c96b 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith4.py +++ b/Aster/Cata/cataSTA9/Messages/algorith4.py @@ -1,424 +1,240 @@ -#@ MODIF algorith4 Messages DATE 23/04/2007 AUTEUR FLEJOU J-L.FLEJOU +#@ MODIF algorith4 Messages DATE 11/03/2008 AUTEUR MAHFOUZ D.MAHFOUZ # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - code-colonne inconnu (dvlp) -"""), - -2: _(""" - trop de colonnes affichees (dvlp) -"""), - -3: _(""" - trop de colonnes de suivi (limite a quatre) -"""), - -4: _(""" - mode incorrect (dvlp) -"""), - -5: _(""" - fichier doit etre defini dans la premiere occurrence -"""), - -6: _(""" - fichier sans unite -"""), - -7: _(""" - format d'affichage trop grand -"""), - -8: _(""" - longueur format excessif (dvlp) -"""), - -9: _(""" - depassement de capacite affichage (dvlp) -"""), - -10: _(""" - unite logique invalide (dvlp) -"""), - -11: _(""" - sd affichage inexistante -"""), - -12: _(""" - nombre incorrrect de colonnes (erreur interne) -"""), - -13: _(""" - option inconnue pour info_residu -"""), - -14: _(""" - trop de colonnes d'affichage (limite a quinze) -"""), - -15: _(""" - ligne trop large (dvlp) -"""), - -16: _(""" - info_residu ne correspond pas a un residu -"""), - -17: _(""" - nombre lignes titre incorrecte (dvlp) -"""), - -18: _(""" - nombre colonnes incorrecte (dvlp) -"""), - -19: _(""" - code colonne incorrect (dvlp) -"""), - -20: _(""" - erreur operation sur sd impression colonnes (dvlp) -"""), - -21: _(""" - format trop grand pour la largeur max. d'une colonne -"""), - -22: _(""" - erreur ajou sur sd impression colonnes (dvlp) -"""), - -23: _(""" - erreur sd impression colonnes pleines (dvlp) -"""), - -24: _(""" - erreur supp sur sd impression colonnes (dvlp) -"""), - -25: _(""" - erreur lire sur sd impression colonnes (dvlp) -"""), - -26: _(""" - erreur ecri sur sd impression colonnes (dvlp) -"""), - -27: _(""" - ne correspond a aucun type de colonne -"""), - -28: _(""" - marquage interdit pour des colonnes de type texte -"""), - -29: _(""" - ne correspond a aucun format de colonne -"""), - -30: _(""" - ne correspond a aucune colonne -"""), - - - - - - - - - - - - - - - - - - - - - -35: _(""" +35 : _(""" rang superieur a dimension vecteur """), -36: _(""" - erreurresistance f_c < 0 ou = 0 ! -"""), - -37: _(""" - erreurf_t < 0 ! -"""), - -38: _(""" - erreur - valeur de crit_e_c superieure a 1 -"""), - -39: _(""" - erreur - valeur de crit_e_c negative !!!! -"""), - -40: _(""" - erreur - valeur de epsp_p_c negative !!!! -"""), - -41: _(""" - erreur - valeur de epsp_r_c negative !!!! -"""), - -42: _(""" - erreur - valeur de epsi_r_t negative !!!! -"""), - -43: _(""" - erreur - valeur de fac_t_c negative ou > 1 !!!! +36 : _(""" + il faut redecouper """), - - - - -45: _(""" - la modelisation 1d n est pas autorisee +45 : _(""" + la modelisation 1d n'est pas autorisée """), -46: _(""" - element: %(k1)s non implante +48 : _(""" + élément à discontinuité avec une loi CZM_EXP : la matrice H est non inversible """), -47: _(""" - probleme sur le type d option +49 : _(""" + modélisation %(k1)s imcompatible avec la loi BETON_DOUBLE_DP. """), -48: _(""" - matrice h non inversible -"""), - -49: _(""" - modelisation %(k1)s imcompatible avec la loi beton_double_dp . -"""), - -50: _(""" +50 : _(""" comportement inattendu : %(k1)s """), -51: _(""" - syt et d_sigm_epsi doivent etre specifies sous l operande beton_ecro_line dans defi_materiau pour utiliser la loi endo_isot_beton -"""), - -52: _(""" - syc ne doit pas etre valorise pour nu nul dans defi_materiau -"""), - -53: _(""" - syc doit etre superieur a sqrt((1+nu-2*nu*nu)/(2.d0*nu*nu))*syt dans defi_materiau pour prendre en compte le confinement +51 : _(""" + SYT et D_SIGM_EPSI doivent être specifiés sous l'operande BETON_ECRO_LINE dans DEFI_MATERIAU pour utiliser la loi ENDO_ISOT_BETON """), -54: _(""" - ksi non inversible +52 : _(""" + SYC ne doit pas être valorisé pour NU nul dans DEFI_MATERIAU """), -55: _(""" - cv approche 0 impossible +53 : _(""" + SYC doit etre supérieur à SQRT((1+NU-2*NU*NU)/(2.D0*NU*NU))*SYT + dans DEFI_MATERIAU pour prendre en compte le confinement """), -56: _(""" - dvp : option %(k1)s non prevue +54 : _(""" + loi ENDO_ORTH_BETON : le paramètre KSI n'est pas inversible """), -57: _(""" - erreur: pb de convergence (dgp neg) +57 : _(""" + pb de convergence (dgp neg) """), -58: _(""" - erreur: pas de solution +58 : _(""" + pas de solution """), -59: _(""" +59 : _(""" erreur: pb de convergence """), -60: _(""" - erreur: pb de convergence 2 (dgp neg) +60 : _(""" + pb de convergence 2 (dgp neg) """), -61: _(""" +61 : _(""" erreur: pb de conv 2 """), -62: _(""" - loi beton_reglement utilisable uniquement en modelisation c_plan ou d_plan +62 : _(""" + loi BETON_REGLEMENT utilisable uniquement en modélisation C_PLAN ou D_PLAN """), -63: _(""" - la methode de localisation %(k1)s est indisponible actuellement +63 : _(""" + la méthode de localisation %(k1)s est indisponible actuellement """), -64: _(""" - interaction non disponible -"""), - -65: _(""" +65 : _(""" %(k1)s impossible actuellement """), -66: _(""" - augmenter nmat -"""), - -67: _(""" - ecou_plas1 non disponible -"""), - -68: _(""" - pyramidal1 pas encore disponible -"""), - -69: _(""" - pyramidal2 pas encore disponible +68 : _(""" + PYRAMIDAL1 pas encore disponible """), -70: _(""" - joint_grain pas encore disponible +69 : _(""" + PYRAMIDAL2 pas encore disponible """), -71: _(""" - rl pas encore disponible +70 : _(""" + JOINT_GRAIN pas encore disponible """), -72: _(""" - erreur - jacobien du systeme non lineaire a resoudre nul lors de la projection au sommet du cone de traction - les parametres materiaux sont sans doute mal definis. +71 : _(""" + RL pas encore disponible """), -73: _(""" - non convergence a iteration maxi %(k1)s - erreur calculee %(k2)s > %(k3)s mais tres faibles increments de newton pour la loi beton_double_dp - on accepte la convergence. +72 : _(""" + jacobien du systeme non lineaire à résoudre nul + lors de la projection au sommet du cone de traction + les parametres matériaux sont sans doute mal définis """), -74: _(""" - erreur - non convergence a iteration maxi %(k1)s - erreur calculee %(k2)s > %(k3)s - pour la loi beton_double_dp - redecoupage du pas de temps +73 : _(""" + non convergence à itération maxi %(k1)s + - erreur calculee %(k2)s > %(k3)s + mais tres faibles incréments de newton pour la loi BETON_DOUBLE_DP + - on accepte la convergence. """), -75: _(""" - etat converge non conforme lors de la projection au sommet du cone de traction +74 : _(""" + non convergence à itération maxi %(k1)s + - erreur calculée %(k2)s > %(k3)s + - pour la loi BETON_DOUBLE_DP + - redécoupage du pas de temps """), -76: _(""" - etat converge non conforme en compression lors de la projection au sommet du cone de traction +75 : _(""" + etat converge non conforme + lors de la projection au sommet du cone de traction """), -77: _(""" - erreur - jacobien du systeme non lineaire a resoudre nul lors de la projection au sommet des cones de compression et traction - les parametres materiaux sont sans doute mal definis. -"""), - -78: _(""" - etat converge non conforme en traction lors de la projection au sommet des deux cones -"""), - -79: _(""" - etat converge non conforme en compression lors de la projection au sommet des deux cones +76 : _(""" + etat converge non conforme en compression + lors de la projection au sommet du cone de traction """), -80: _(""" - erreur - jacobien du systeme non lineaire a resoudre nul lors de la projection au sommet du cone de compression - les parametres materiaux sont sans doute mal definis. +77 : _(""" + jacobien du systeme non linéaire à résoudre nul + lors de la projection au sommet des cones de compression et traction + - les parametres matériaux sont sans doute mal définis. """), -81: _(""" - etat converge non conforme lors de la projection au sommet du cone de compression +78 : _(""" + état convergé non conforme en traction + lors de la projection au sommet des deux cones """), -82: _(""" - etat converge non conforme en traction lors de la projection au sommet du cone de compression +79 : _(""" + état convergé non conforme en compression + lors de la projection au sommet des deux cones """), -83: _(""" - erreur - jacobien du systeme non lineaire a resoudre nul - les parametres materiaux sont sans doute mal definis. +80 : _(""" + jacobien du systeme non linéaire à résoudre nul + lors de la projection au sommet du cone de compression + - les parametres matériaux sont sans doute mal définis. """), -84: _(""" - integration elastoplastique de loi multi-critere : erreur de programmation +81 : _(""" + état convergé non conforme + lors de la projection au sommet du cone de compression """), -85: _(""" - erreur de programmation : valeur de nseuil incorrecte. +82 : _(""" + état convergé non conforme en traction + lors de la projection au sommet du cone de compression """), -86: _(""" - erreur : etat converge non conforme en traction et en compression pour la loi de comportement beton_double_dp pour les deux criteres en meme temps. il faut un saut elastique plus petit, ou redecouper le pas de temps +83 : _(""" + jacobien du système non linéaire a resoudre nul + - les parametres matériaux sont sans doute mal définis. """), -87: _(""" - erreur : etat converge non conforme en compression pour la loi de comportement beton_double_dp pour les deux criteres en meme temps. il faut un saut elastique plus petit, ou redecouper le pas de temps +84 : _(""" + intégration élastoplastique de loi multi-critere : erreur de programmation """), -88: _(""" - erreur : etat converge non conforme en traction pour la loi de comportement beton_double_dp pour les deux criteres en meme temps. il faut un saut elastique plus petit, ou redecouper le pas de temps +85 : _(""" + erreur de programmation : valeur de NSEUIL incorrecte. """), -89: _(""" - etat converge non conforme en traction +86 : _(""" + état convergé non conforme en traction et en compression + pour la loi de comportement BETON_DOUBLE_DP + pour les deux critères en meme temps. + il faut un saut élastique plus petit, ou redécouper le pas de temps """), -90: _(""" - etat converge non conforme en compression +87 : _(""" + état converge non conforme en compression + pour la loi de comportement BETON_DOUBLE_DP + pour les deux critères en meme temps. + il faut un saut élastique plus petit, ou redécouper le pas de temps """), -91: _(""" - option %(k1)s non prevue (dvlp) +88 : _(""" + état convergé non conforme en traction + pour la loi de comportement BETON_DOUBLE_DP + pour les deux critères en meme temps. + il faut un saut élastique plus petit, ou redécouper le pas de temps """), -92: _(""" - valeurs initiales non conformes : il y a probablement une erreur dans la programmation +89 : _(""" + état convergé non conforme en traction """), -93: _(""" - cet algorithme ne traite pas encore les options rigi_meca_tang et full_meca +90 : _(""" + état convergé non conforme en compression """), -94: _(""" - il faut declarer fonc_desorp sous elas_fo pour le fluage propre avec sech comme parametre +92 : _(""" + valeurs initiales non conformes : + il y a probablement une erreur dans la programmation """), -95: _(""" - division par zero dans lcumfs +94 : _(""" + il faut déclarer FONC_DESORP sous ELAS_FO pour le fluage propre avec sech comme parametre """), -96: _(""" - erreur dans lcumme : pb de dimension +97 : _(""" + on ne traite pas actuellement plusieurs NOM_CHAM simultanément, + on ne considère que le premier argument """), -97: _(""" - on ne traite pas actuellement plusieurs nom_cham simultanement, on ne considere que le premier argument +98 : _(""" + nombre de valeurs dans le fichier UNV DATASET 58 non identique """), -98: _(""" - nombre de valeurs dans le fichier unv dataset 58 non identique +99 : _(""" + nature du champ dans le fichier UNV DATASET 58 non identique """), -99: _(""" - nature du champ dans le fichier unv dataset 58 non identique -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/algorith5.py b/Aster/Cata/cataSTA9/Messages/algorith5.py index 84abd437..df98697b 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith5.py +++ b/Aster/Cata/cataSTA9/Messages/algorith5.py @@ -1,8 +1,8 @@ -#@ MODIF algorith5 Messages DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF algorith5 Messages DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,395 +20,354 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - le type de resultat dyna_trans ne supporte pas les donnees complexes +1 : _(""" + le type de résultat DYNA_TRANS ne supporte pas les données complexes """), -2: _(""" - le type de resultat dyna_harmo ne supporte pas les donnees reelles +2 : _(""" + le type de résultat DYNA_HARMO ne supporte pas les données reelles """), -3: _(""" - on ne traite pas actuellement les deformations complexes +3 : _(""" + on ne traite pas actuellement les déformations complexes """), -4: _(""" - nombre de dataset 58 superieur a nbnoeud * nbcmp +4 : _(""" + nombre de dataset 58 supérieur à NBNOEUD * NBCMP """), -5: _(""" - erreur dans la lecture du fichier ideas +5 : _(""" + erreur dans la lecture du fichier IDEAS """), -6: _(""" - seules les donnees de type deplacement, vitesse, acceleration, deformation ou contrainte sont actuellement traitees +6 : _(""" + seules les données de type déplacement, vitesse, accélération, déformation + ou contrainte sont actuellement traitées """), -7: _(""" - donnees : complexes, incompatibles avec dyna_trans +7 : _(""" + données : complexes, incompatibles avec DYNA_TRANS """), -8: _(""" - donnees : reelles, incompatibles avec dyna_harmo ou harm_gene +8 : _(""" + données : réelles, incompatibles avec DYNA_HARMO ou HARM_GENE """), -9: _(""" - on ne traite pas actuellement la redefinition des orientations pour les champs de contrainte +9 : _(""" + on ne traite pas actuellement la redéfinition des orientations + pour les champs de contrainte """), -10: _(""" - on ne traite pas actuellement la redefinition des orientations pour les champs de deformation +10 : _(""" + on ne traite pas actuellement la redéfinition des orientations + pour les champs de déformation """), -11: _(""" - la condition gamma/ksi <= 1 n est pas respectee +11 : _(""" + la condition GAMMA/KSI <= 1 n'est pas respectée """), -12: _(""" - incoherence des relations sigma_c sigma_p1 m_pic a_pic a_e et m_e +12 : _(""" + incohérence des relations SIGMA_C SIGMA_P1 M_PIC A_PIC A_E et M_E """), -13: _(""" - erreur d integration - essai d integration numero %(k1)s - divergence de l integration locale - redecoupage du pas de temps +13 : _(""" + erreur d'intégration + - essai d'intégration numéro %(k1)s + - divergence de l'intégration locale + - redécoupage du pas de temps """), -14: _(""" - increment de deformation cumulee (dv) = - %(k1)s +14 : _(""" + incrément de deformation cumulée (dv) = - %(k1)s """), -15: _(""" - type d'element fini pas traite +16 : _(""" + le profil de la matrice n est surement pas plein. + on continue mais s'il vous arrive des problèmes plus loin... """), -16: _(""" - le profil de la matrice n est surement pas plein. on continue mais s'il vous arrive des problemes plus loin... +17 : _(""" + le profil de la matrice n'est surement pas plein. + on continue mais attention .... """), -17: _(""" - le profil de la matrice n est surement pas plein. on continue mais attention .... +18 : _(""" + le profil de la matrice n'est pas plein. + on arrete tout .... """), -18: _(""" - le profil de la matrice n est pas plein. on arrete tout .... +19 : _(""" + matrice singulière """), -19: _(""" - matrice singuliere -"""), - -20: _(""" +20 : _(""" inversion seulement en dimension 3 """), -21: _(""" - type de maille inconnu (dvlp) +22 : _(""" + la matrice masse est singulière. """), -22: _(""" - la matrice masse est singuliere. -"""), - -23: _(""" +23 : _(""" pas de temps minimal atteint """), -24: _(""" - donnees erronees. +24 : _(""" + données erroneés. """), -25: _(""" - gamma = 0 : valeur par defaut +25 : _(""" + GAMMA = 0 : valeur par défaut """), -26: _(""" +26 : _(""" dispositif anti-sismique : la distance des noeuds 1 et 2 est nulle """), -27: _(""" +27 : _(""" le noeud %(k1)s n'est pas un noeud du maillage %(k2)s """), -28: _(""" - on n'a pas trouve le ddl "dx" pour le noeud %(k1)s -"""), - -29: _(""" - on n'a pas trouve le ddl "dy" pour le noeud %(k1)s +28 : _(""" + on n'a pas trouvé le ddl "DX" pour le noeud %(k1)s """), -30: _(""" - on n'a pas trouve le ddl "dz" pour le noeud %(k1)s +29 : _(""" + on n'a pas trouvé le ddl "DY" pour le noeud %(k1)s """), -31: _(""" - calcul non-lineaire par sous-structuration, le mot-cle sous_struc_1 est obligatoire +30 : _(""" + on n'a pas trouvé le ddl "DZ" pour le noeud %(k1)s """), -32: _(""" - argument du mot-cle "sous_struc_1" n'est pas un nom de sous-structure +31 : _(""" + calcul non-linéaire par sous-structuration : + le mot-cle SOUS_STRUC_1 est obligatoire """), -33: _(""" - calcul non-lineaire par sous-structuration entre 2 structures mobiles, le mot-cle sous_struc_2 est obligatoire +32 : _(""" + argument du mot-cle "SOUS_STRUC_1" n'est pas un nom de sous-structure """), -34: _(""" - argument du mot-cle "sous_struc_2" n'est pas un nom de sous-structure +33 : _(""" + calcul non-linéaire par sous-structuration entre 2 structures mobiles : + le mot-clé SOUS_STRUC_2 est obligatoire """), -35: _(""" - obstacle bi_cerc_int : dist_2 doit etre superieure ou egale a dist_1 +34 : _(""" + l'argument du mot-clé "SOUS_STRUC_2" n'est pas un nom de sous-structure """), -36: _(""" - calcul non-lineaire par sous-structuration, pas de dispositif anti-sismique ou de flambage possible +35 : _(""" + obstacle BI_CERC_INT : DIST_2 doit etre supérieur ou égal a DIST_1 """), -37: _(""" - le multi-appui + sous-structuration n'est pas developpe - bon courage +36 : _(""" + calcul non-linéaire par sous-structuration : + pas de dispositif anti-sismique ou de flambage possible """), -38: _(""" - conflit entre choc et flambage au meme lieu de choc : le calcul sera de type flambage +37 : _(""" + le multi-appui + sous-structuration n'est pas developpé - bon courage """), -39: _(""" - argument du mot-cle "repere" inconnu +38 : _(""" + conflit entre choc et flambage au meme lieu de choc : + le calcul sera de type flambage """), -40: _(""" - les rigidites de chocs doivent etre strictement positives +39 : _(""" + argument du mot-cle "REPERE" inconnu """), -41: _(""" - incoherence dans les donnees de la loi de flambage : les caracteristiques introduites peuvent induire a un ecrasement residuel negatif +40 : _(""" + les rigidités de chocs doivent etre strictement positives """), -42: _(""" - les bases utilisees pour la projection sont differentes. +41 : _(""" + incohérence dans les données de la loi de flambage : + les caractéristiques introduites peuvent conduire à + un ecrasement résiduel négatif """), -43: _(""" - les bases utilisees n'ont pas le meme nombre de vecteurs. +42 : _(""" + les bases utilisées pour la projection sont différentes. """), -44: _(""" - les numerotations des matrices sont differentes. +43 : _(""" + les bases utilisées n'ont pas le meme nombre de vecteurs. """), -45: _(""" - les numerotations des vecteurs d'excitation sont differentes. +44 : _(""" + les numérotations des matrices sont différentes. """), -46: _(""" - on n'a pas pu trouve les deplacements initiaux +45 : _(""" + les numérotations des vecteurs d'excitation sont différentes. """), -47: _(""" - on n'a pas pu trouve les vitesses initiales +46 : _(""" + on n'a pas pu trouver les déplacements initiaux """), -48: _(""" - on n'a pas pu trouve les variables internes initiales : reprise choc avec flambage +47 : _(""" + on n'a pas pu trouver les vitesses initiales """), -49: _(""" - abscence de terme de forcage externe. l'algorithme itmi n'est pas prevu pour calculer la reponse libre d'une structure. +48 : _(""" + on n'a pas pu trouver les variables internes initiales : + reprise choc avec flambage """), -50: _(""" - abscence de non-linearites de choc. pour traiter le regime lineaire, preciser une non-linearites de choc avec un jeu important. +49 : _(""" + absence de terme de forcage externe. + l'algorithme ITMI n'est pas prévu pour calculer la réponse libre + d'une structure. """), -51: _(""" - impossible de traiter le type d obstacle choisi avec methode itmi, (obstacle de type %(k1)s au noeud %(k2)s ). +50 : _(""" + abscence de non-linéarites de choc. + pour traiter le régime linéaire, préciser une non-linéarité de choc + avec un jeu important. """), -52: _(""" - duree de la simulation temporelle apres transitoire inferieure a la duree demandee (excitation temporelle trop courte) +51 : _(""" + impossible de traiter le type d'obstacle choisi avec methode ITMI + (obstacle de type %(k1)s au noeud %(k2)s ). """), -53: _(""" - variation du deplacement entre deux instants successifs superieure a la valeur de tolerance proposee +52 : _(""" + durée de la simulation temporelle après transitoire inférieure à + la durée demandée (excitation temporelle trop courte) """), -54: _(""" - le calcul de la reponse temporelle n'est pas possible pour le type de structure etudiee. +53 : _(""" + variation du déplacement entre deux instants successifs supérieure à + la valeur de tolérance proposée """), -55: _(""" - le couplage fluide-structure n'a pas ete pris en compte en amont. +54 : _(""" + le calcul de la réponse temporelle n'est pas possible pour le type + de structure etudiée. """), -56: _(""" - nb_mode est superieur au nombre de modes du concept %(k1)s . on impose donc nb_mode = %(k2)s , i.e. egal au nombre de modes du concept %(k3)s . +55 : _(""" + le couplage fluide-structure n'a pas été pris en compte en amont. """), -57: _(""" - nb_mode_diag est different de nb_mode nombre de modes de la base modale . complete l'option base reduite n'est plus disponible. +56 : _(""" + NB_MODE est superieur au nombre de modes du concept %(k1)s . + on impose donc NB_MODE = %(k2)s , + i.e. égal au nombre de modes du concept %(k3)s . """), -58: _(""" - le calcul des parametres du mode no %(k1)s par l'operateur n'a pas converge pour la vitesse no %(k2)s . le calcul de la reponse dynamique de la sructure n'est donc pas possible. +58 : _(""" + le calcul des paramètres du mode no %(k1)s par l'opérateur + n'a pas convergé pour la vitesse no %(k2)s . + le calcul de la réponse dynamique de la sructure n'est donc pas possible. """), -59: _(""" - pas de mot-cle . les %(k1)s modes du concept %(k2)s sont pris en compte pour le calcul du saut de force fluidelastique d'amortissement au cours des phases de choc. +59 : _(""" + pas de mot-cle . + les %(k1)s modes du concept %(k2)s sont pris en compte pour le calcul + du saut de force fluidelastique d'amortissement au cours des phases de choc. """), -60: _(""" - nb_mode_flui est plus grand que le nombre de modes du concept %(k1)s . %(k2)s modes sont pris en compte pour le calcul du saut de force fluidelastique d'amortissement au cours des phases de choc. +60 : _(""" + NB_MODE_FLUI est plus grand que le nombre de modes du concept %(k1)s . + %(k2)s modes sont pris en compte pour le calcul du saut de force fluidelastique + d'amortissement au cours des phases de choc. """), -61: _(""" - la matrice ktilda est singuliere. +61 : _(""" + la matrice KTILDA est singulière. """), -62: _(""" - instant initial non trouve valeur prise : 0 +62 : _(""" + instant initial non trouvé + valeur prise : 0 """), -63: _(""" - rela_effo_depl par sous-structuration, le mot-cle sous_struc est obligatoire +63 : _(""" + RELA_EFFO_DEPL par sous-structuration, le mot-cle SOUS_STRUC est obligatoire """), -64: _(""" - argument du mot-cle "sous_struc" n'est pas un nom de sous-structure +64 : _(""" + l'argument du mot-cle "SOUS_STRUC" n'est pas un nom de sous-structure """), -65: _(""" +65 : _(""" type de base inconnu. """), -66: _(""" - le taux de souplesse negligee est superieur au seuil. +66 : _(""" + le taux de souplesse negligée est supérieur au seuil. """), -67: _(""" - algorithme de devoge: developpement "amor_gene" non implante. +67 : _(""" + algorithme de DEVOGE: développement "AMOR_GENE" non implanté. """), -68: _(""" - algorithme itmi : il faut renseigner obligatoirement l'un ou l'autre des mots cles , +68 : _(""" + algorithme ITMI : + il faut renseigner obligatoirement l'un ou l'autre des mots cles : + AMOR_REDUIT, AMOR_GENE """), -69: _(""" - algorithme itmi : il faut renseigner obligatoirement les mots-cles et pour definir une base modale sous ecoulement +69 : _(""" + algorithme ITMI : + il faut renseigner obligatoirement les mots-cles + BASE_ELAS_FLUI et NUME_VITE_FLUI + pour définir une base modale sous écoulement """), -70: _(""" - algorithme itmi : il faut renseigner obligatoirement le mot cle , i.e. donner la valeur du pas de temps initial +70 : _(""" + algorithme ITMI : + il faut renseigner obligatoirement le mot cle PAS , + i.e. donner la valeur du pas de temps initial """), -71: _(""" - algorithme itmi : lorsque l on affecte "oui" a , il faut renseigner +71 : _(""" + algorithme ITMI : lorsque l'on affecte "OUI" à ETAT_STAT, + il faut renseigner TS_REG_ETAB """), -72: _(""" - calcul non-lineaire par sous-structuration, option , non implante dans la methode itmi. +72 : _(""" + calcul non-linéaire par sous-structuration : + option SOUS_STRUC_1 non implantée dans la methode ITMI. """), -73: _(""" - l'option n'est pas implantee dans la la methode itmi. +73 : _(""" + l'option NOEUD_2 n'est pas implantée dans la methode ITMI. """), -74: _(""" - calcul non-lineaire par sous-structuration, option , non implante dans la methode itmi. +74 : _(""" + calcul non-linéaire par sous-structuration : + option SOUS_STRUC_2 non implantée dans la methode ITMI. """), -75: _(""" - algorithme de NEWMARK: developpement %(k1)s non implante. +75 : _(""" + algorithme de NEWMARK: développement %(k1)s non implanté. """), -76: _(""" +76 : _(""" NUME_ORDRE plus grand que le nombre de modes de la base """), -78: _(""" - mauvaise definition de l excitation mot cle : vect_gene non autorise pour itmi . -"""), - -79: _(""" - ksib non inversible -"""), - - - - - - - - -82: _(""" - projection nulle sur la boule unite (dvlp) -"""), - -83: _(""" - etat de contact inconnu -"""), - -84: _(""" - champ de geometrie introuvable (dvlp) -"""), - -85: _(""" - echec dans le traitement du contact, augmenter iter_cont_max -"""), - -86: _(""" - -> Il y a convergence forcée sur boucle contraintes actives lors du traitement - du contact. - -> Risque & Conseil : - La convergence forcée se déclenche lorsque le problème a du mal à converger. Il y a des risques que le problème - soit un peu moins bien traité. Vérifiez bien que vous n'avez pas d'interpénétration entre les mailles. S'il y des - interpénétrations intempestives, tentez de découper plus finement en temps votre problème. -"""), - -87: _(""" - -> Il y a convergence forcée sur boucle seuil frottement lors du traitement du - contact. - -> Risque & Conseil : - La convergence forcée se déclenche lorsque le problème a du mal à converger. Il y a des risques que le problème - soit un peu moins bien traité. La condition de frottement de Coulomb est peut etre mal prise en compte. Risque de - résultats faux sur les forces d'adhérence. Essayez de découper plus finement en temps votre problème. -"""), - -88: _(""" - -> Il y a convergence forcée sur boucle de géométrie lors du traitement du - contact. - -> Risque & Conseil : - La convergence forcée se déclenche lorsque le problème a du mal à converger - lors de grands glissements relatifs entre deux surfaces de contact. - Il y a des risques que le problème soit un peu moins bien traité. - Vérifiez bien que vous n'avez pas d'interpénétration entre les mailles. - S'il y des interpénétrations intempestives, tentez de découper plus finement en temps votre problème. -"""), - -89: _(""" - element de contact inconnu (dvlp) -"""), - -90: _(""" - nom de l'element inconnu -"""), - -91: _(""" - schema integration non conforme +78 : _(""" + mauvaise définition de l'excitation + mot clé VECT_GENE non autorisé pour ITMI """), -92: _(""" - element de contact non conforme (dvlp) +79 : _(""" + KSIB non inversible """), -93: _(""" - dimension de l'espace incorrecte (dvlp) +82 : _(""" + projection nulle sur la boule unité (dvlp) """), - - - - - } diff --git a/Aster/Cata/cataSTA9/Messages/algorith6.py b/Aster/Cata/cataSTA9/Messages/algorith6.py index f4cf7ca6..5b724abf 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith6.py +++ b/Aster/Cata/cataSTA9/Messages/algorith6.py @@ -1,8 +1,8 @@ -#@ MODIF algorith6 Messages DATE 30/05/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF algorith6 Messages DATE 08/04/2008 AUTEUR MEUNIER S.MEUNIER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,380 +20,256 @@ def _(x) : return x -cata_msg={ +cata_msg = { - - -8: _(""" - erreur point integration (dvlp) -"""), - -9: _(""" - question inconnue (dvlp) -"""), - -10: _(""" - element de contact incorrect (dvlp) -"""), - -11: _(""" - pas d'elements tardifs ! (dvlp) -"""), - -12: _(""" - la methode d integration est gauss, le champ vale_cont n est pas cree -"""), - -13: _(""" - dimension du probleme inconnu +8 : _(""" + erreur point intégration (dvlp) """), -14: _(""" - erreur dans la programmation, cette routine ne doit etre appele que dans le cas de la methode continue du contact +13 : _(""" + dimension du problème inconnue """), -15: _(""" - le vecteur dire_appa est nul ! +16 : _(""" + le fond de fissure d'un maillage 2d ne peut être défini par des mailles """), -16: _(""" - le fond de fissure d'un maillage 2d ne peut etre defini par des mailles +17 : _(""" + les mailles à modifier doivent être de type "SEG3" ou "POI1" """), -17: _(""" - les mailles a modifier doivent etre de type "seg3" ou "poi1" +18 : _(""" + le fond de fissure d'un maillage 2d est défini par un noeud unique """), -18: _(""" - le fond de fissure d'un maillage 2d est defini par un noeud unique -"""), - -19: _(""" +19 : _(""" -> Code Aster a détecté des mailles de type différent lors de la correspondance entre les maillages des deux modèles (mesuré/numérique). Ce cas n'est pas prévu, Code Aster initialise la correspondance au noeud le plus proche. -> Risque & Conseil : ??? - """), -20: _(""" - nb noeuds mesure superieur nb noeuds calcul +20 : _(""" + nombre noeuds mesuré supérieur au nombre de noeuds calculé """), -21: _(""" - noeu_calcul non trouve +21 : _(""" + NOEU_CALCUL non trouvé """), -22: _(""" - noeu_mesure non trouve +22 : _(""" + NOEU_MESURE non trouvé """), -23: _(""" - nombre de noeuds different +23 : _(""" + nombre de noeuds différent """), -24: _(""" - traitement manuel correspondance : un couple a la fois +24 : _(""" + traitement manuel correspondance : un couple à la fois """), -25: _(""" - echec projection +25 : _(""" + échec projection """), -26: _(""" +26 : _(""" norme vecteur dir. nulle """), -27: _(""" - le nombre des coefficients de ponderation est superieur au nombre de vecteurs de base -"""), - -28: _(""" - le nombre des coefficients de ponderation est inferieur au nombre de vecteurs de base , le dernier coefficient est affecte aux autres -"""), - -29: _(""" - le nombre des fonctions de ponderation est superieur au nombre de vecteurs de base -"""), - -30: _(""" - le nombre des fonctions de ponderation est inferieur au nombre de vecteurs de base la derniere fonction est affectee aux autres -"""), - -31: _(""" - le nombre d abscisses d une des fonctions d interpolation n est pas identique au nombre d abscisses du premier point de mesure experimental -"""), - -32: _(""" - le critere d egalite de la liste d abscisses du premier dataset 58 et de la liste d abscisses d une des fonctions de ponderation n est pas verifie -"""), - -33: _(""" - incompatibilite nom_para et donnees mesurees +27 : _(""" + le nombre des coefficients de pondération est supérieur + au nombre de vecteurs de base """), -34: _(""" - erreur +28 : _(""" + le nombre des coefficients de pondération est inférieur + au nombre de vecteurs de base + le dernier coefficient est affecté aux autres """), -35: _(""" - surcharge d'un resultat sans definir d'etat initial : on prend un etat initial nul +29 : _(""" + le nombre des fonctions de pondération est supérieur + au nombre de vecteurs de base """), - - - - - - - -37: _(""" - pas de numero d'ordre pour le concept %(k1)s +30 : _(""" + le nombre des fonctions de pondération est inférieur + au nombre de vecteurs de base + la dernière fonction est affectée aux autres """), - - - - - - - - - - - - - - -41: _(""" - le champ de depl_r (ou derive) n'est pas trouve dans le concept %(k1)s +31 : _(""" + le nombre dabscisses d'une des fonctions d'interpolation + n'est pas identique au nombre d'abscisses du premier point + de mesure expérimental """), -42: _(""" - le champ de sief_r (ou derive) n'est pas trouve dans le concept %(k1)s +32 : _(""" + le critère d'égalite de la liste d'abscisses du premier dataset 58 + et de la liste d'abscisses d une des fonctions de pondération + n'est pas verifié """), -43: _(""" - le champ de vite n'est pas trouve dans le concept %(k1)s on cree un champ de vitesses nulles +33 : _(""" + incompatibilité NOM_PARA et données mesurées """), -44: _(""" - le champ d'acce n'est pas trouve dans le concept %(k1)s on calcule un champ d'accelerations, ce qui est possible puisque les vitesses sont nulles +37 : _(""" + pas de numéro d'ordre pour le concept %(k1)s """), -45: _(""" - le champ d'acce n'est pas trouve dans le concept %(k1)s on ne peut pas, pour l'instant, calculer le champ des accelerations car les vitesses ne sont pas nulles +52 : _(""" + itérations cycliques : + changement de configuration ou variation trop importante + du deplacement physique à l'issue de la dernière itération """), -46: _(""" - le champ de vari_r (ou derive) n'est pas trouve dans le concept %(k1)s +53 : _(""" + pas de convergence de l'algorithme de NEWTON : + - en %(k1)s iterations + - à l'instant %(k2)s + il faut réduire la rigidité normale, ou le jeu. """), -47: _(""" - le champ de vari_non_local (ou derive) n'est pas trouve dansle concept %(k1)s -"""), - -48: _(""" - le champ de lanl_elga n'est pas trouve dans le concept %(k1)s -"""), - - - - - - - - - - - - - - - -52: _(""" - iterations cycliques : changement de configuration ou variation trop importante du deplacement physique a l'issue de la derniere iteration -"""), - -53: _(""" - pas de convergence de l'algorithme de newton en %(k1)s iterations a l'instant %(k2)s . il faut reduire la rigidite normale, ou le jeu. -"""), - -54: _(""" +54 : _(""" dvp : trop de noeuds """), -55: _(""" - theta = 1 ou 0.5 +55 : _(""" + THETA = 1 ou 0.5 """), -56: _(""" - fluence commandee et flux_phi different de 1 +56 : _(""" + fluence commandée et FLUX_PHI différent de 1 """), -57: _(""" - fluence decroissante (phi<0) +57 : _(""" + fluence décroissante (PHI<0) """), -58: _(""" - relation asse_combu 1d sans loi de fluence appropriee +58 : _(""" + relation ASSE_COMBU 1d sans loi de fluence appropriée """), -59: _(""" +59 : _(""" erreur dir. grandissement """), -60: _(""" - cam_clay : la porosite donnee dans cam_clay doit etre la meme que dans thm_init -"""), - -61: _(""" - barcelone : il faut que la contrainte hydrostatique soit superieure a la pression de cohesion -kc*pc +60 : _(""" + CAM_CLAY : + la porosité donnee dans CAM_CLAY doit etre la meme que dans THM_INIT """), -62: _(""" - iter_inte_maxi insuffisant lors du calcul de la borne +61 : _(""" + BARCELONE : + il faut que la contrainte hydrostatique soit supérieure + à la pression de cohesion -KC*PC """), -63: _(""" - cam_clay : le cas des contraintes planes n est pas traite pour ce modele. +62 : _(""" + ITER_INTE_MAXI insuffisant lors du calcul de la borne """), -64: _(""" - cam_clay : il faut que la contrainte hydrostatique soit superieure a la pression initiale pa +63 : _(""" + CAM_CLAY : + le cas des contraintes planes n'est pas traité pour ce modèle. """), -65: _(""" - type de selection inconnue +64 : _(""" + CAM_CLAY : + il faut que la contrainte hydrostatique soit supérieure + a la pression initiale PA """), -66: _(""" - pour l'instant on ne traite pas le cas des contraintes planes dans le modele de chaboche a une variable cinematique. +66 : _(""" + pour l'instant, on ne traite pas le cas des contraintes planes + dans le modele de CHABOCHE à une variable cinématique. """), -67: _(""" - n doit etre strictementpositif. +67 : _(""" + N doit etre strictementpositif. """), -68: _(""" - parametre un_sur_k egal a zero cas incompatible avec visc_cinx_chab +68 : _(""" + paramètre UN_SUR_K égal à zéro cas incompatible avec VISC_CINX_CHAB """), -69: _(""" - loi visc_cinx_chab on doit obligatoirement avoir un_sur_m = zero +69 : _(""" + loi VISC_CINX_CHAB + on doit obligatoirement avoir UN_SUR_M = zéro """), -70: _(""" - macro_element statique et feti incompatibles ! +78 : _(""" + F reste toujours négative. """), -71: _(""" - chargement onde plane et feti incompatibles ! +79 : _(""" + F reste toujours positive. """), -72: _(""" - forces fluides sur les grappes et feti incompatibles ! -"""), - -73: _(""" - forces d'inertie et feti incompatibles ! -"""), - -74: _(""" - forces explicites et feti incompatibles ! -"""), - -75: _(""" - forces d'inertie derivees et feti incompatibles ! -"""), - -76: _(""" - mode %(k1)s non reconnu (dvlp) -"""), - -77: _(""" - coeff vic_cin1_chab tous nuls ? -"""), - -78: _(""" - f reste toujours negative. -"""), - -79: _(""" - f reste toujours positive. -"""), - -80: _(""" +80 : _(""" pb interp vari entiere ?? """), -81: _(""" - utiliser algo_1d="deborst" sous comp_incr pour le comportement %(k1)s -"""), - -82: _(""" - integration explicite du comportement non programmee +81 : _(""" + utiliser ALGO_1D="DEBORST" sous COMP_INCR pour le comportement %(k1)s """), -83: _(""" - rousselier à gradient sans simo miehe non programmé : utilisez la modélisation **_INCO +82 : _(""" + integration explicite du comportement non programmée """), -84: _(""" - loi non traitee pour les elemjoin : %(k1)s +84 : _(""" + loi non traitée pour les éléments de joint : %(k1)s """), -85: _(""" - integration explicite impossible +85 : _(""" + intégration explicite impossible """), -86: _(""" +86 : _(""" erreur de programmation 1 """), -87: _(""" +87 : _(""" loi de comportement inexistante """), -88: _(""" - erreur dans le type de comportment +88 : _(""" + erreur dans le type de comportement """), -89: _(""" +89 : _(""" erreur de programmation 2 """), -90: _(""" - pas de c_plan pour vmis_cineutiliser c_plan_deborst +90 : _(""" + pas de C_PLAN pour VMIS_CINE + utiliser C_PLAN_DEBORST """), -91: _(""" - pas de c_plan pour vmis_cin1utiliser c_plan_deborst +91 : _(""" + pas de c_plan pour VMIS_CIN1 + utiliser C_PLAN_DEBORST """), -92: _(""" +92 : _(""" pas de contraintes planes """), -93: _(""" - integration du comportement poly_cfc uniquement explicite +93 : _(""" + integration du comportement POLY_CFC uniquement explicite """), -94: _(""" - pas de c_plan pour bazant_fd utiliser c_plan_deborst +95 : _(""" + intégration implicite du comportement non programmée """), -95: _(""" - integration implicite du comportement non programmee +96 : _(""" + GREEN deformation required for ELAS_HYPER material """), -96: _(""" - green deformation required for elas_hyper material -"""), - - - - } diff --git a/Aster/Cata/cataSTA9/Messages/algorith7.py b/Aster/Cata/cataSTA9/Messages/algorith7.py index 2db979e2..2577a10f 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith7.py +++ b/Aster/Cata/cataSTA9/Messages/algorith7.py @@ -1,8 +1,8 @@ -#@ MODIF algorith7 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF algorith7 Messages DATE 19/05/2008 AUTEUR ABBAS M.ABBAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,427 +20,286 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - couplage fluage/fissuration : il faut definir deux lois de comportement exactement. +1 : _(""" + couplage fluage/fissuration : + il faut définir deux lois de comportement exactement. """), -2: _(""" - granger et endo_isot_betonou mazars non encore developpe +2 : _(""" + GRANGER et ENDO_ISOT_BETON ou MAZARS non encore développé """), -3: _(""" - loi de comportement non autorisee dans le couplage fluage/fissuration +3 : _(""" + loi de comportement non autorisée dans le couplage fluage/fissuration """), -4: _(""" - umlv_fp et mazars non encore developpe +4 : _(""" + UMLV_FP et MAZARS non encore developpé """), -5: _(""" - pas de c_plan pour eib utiliser c_plan_deborst +5 : _(""" + pas de C_PLAN pour ENDO_ISOT_BETON + utiliser C_PLAN_DEBORST """), -6: _(""" +6 : _(""" loi de fluage non autorisee dans le couplage fluage/fissuration """), -7: _(""" - pas d'orthotropie non line +7 : _(""" + pas d'orthotropie non linéaire """), -8: _(""" - loi de comportement hyper-elastique non prevue +8 : _(""" + loi de comportement hyper-élastique non prevue """), -9: _(""" - c_plan methode de borstet simo_miehe incompatibles +9 : _(""" + C_PLAN méthode DEBORST et SIMO_MIEHE incompatibles """), -10: _(""" - comp1det simo_miehe incompatibles +10 : _(""" + COMP1D et SIMO_MIEHE incompatibles """), -11: _(""" - couplage fluage/fissuration : la premiere loi doit etre une loi de fluage de type granger_fp ou granger_fp_v. +11 : _(""" + couplage fluage/fissuration : + la première loi doit etre une loi de fluage de type GRANGER_FP ou GRANGER_FP_V. """), -12: _(""" - couplage fluage/fissuration : nombre total de variables internes incoherent <--> erreur de programmation. +12 : _(""" + couplage fluage/fissuration : + nombre total de variables internes incohérent <--> erreur de programmation. """), -13: _(""" - f(0)= %(k1)s > 0 +15 : _(""" + le concept EVOL_CHAR : %(k1)s n'en est pas un ! """), - - - - - -15: _(""" - le concept evol_char : %(k1)s n'en est pas un ! -"""), - -16: _(""" - le concept evol_char : %(k1)s ne contient aucun champ de type evol_char. -"""), - -17: _(""" - on ne trouve pas le resultat derive associe a %(k1)s et %(k2)s -"""), - -18: _(""" - le concept evol_ther : %(k1)s ne contient aucun champ. +16 : _(""" + le concept EVOL_CHAR : %(k1)s ne contient aucun champ de type EVOL_CHAR. """), -19: _(""" - erreur de type sur la charge thermique %(k1)s +20 : _(""" + le champ de déplacement DIDI n'est pas trouvé dans le concept %(k1)s """), -20: _(""" - le champ de deplacement didi n'est pas trouve dans le concept %(k1)s +22 : _(""" + la charge %(k1)s n'est pas mécanique """), -21: _(""" - -> Critère de convergence est lache ! - -> Risque & Conseil : La valeur de RESI_GLOB_RELA est supérieure a 10-4. - Cela peut nuire à la qualité de la solution. Vous ne vérifiez pas l'équilibre de manière rigoureuse. - - - -"""), - -22: _(""" - la charge %(k1)s n'est pas mecanique -"""), - -23: _(""" +23 : _(""" la charge %(k1)s ne peut etre suiveuse """), -24: _(""" - la charge %(k1)s ne peut etre differentielle +24 : _(""" + la charge %(k1)s ne peut etre différentielle """), -25: _(""" +25 : _(""" il y a plusieurs charges thermiques """), -26: _(""" - le modele contient des elements de structure il faut renseigner le mot-cle cara_elem pour les options forc_noda et reac_noda. +27 : _(""" + la charge %(k1)s ne peut etre pilotée """), -27: _(""" - la charge %(k1)s ne peut etre pilotee -"""), - -28: _(""" +28 : _(""" on ne peut piloter une charge fonction du temps """), -29: _(""" - la charge thermique %(k1)s ne peut etre pilotee +29 : _(""" + la charge thermique %(k1)s ne peut etre pilotée """), -30: _(""" - il y a plusieurs charges sechage +30 : _(""" + il y a plusieurs charges de séchage """), -31: _(""" - la charge de sechage %(k1)s ne peut etre pilotee +31 : _(""" + la charge de séchage %(k1)s ne peut etre pilotée """), -32: _(""" - il y a plusieurs charges defo.anelastiques +32 : _(""" + il y a plusieurs charges de déformations anélastiques """), -33: _(""" - la charge defo.anelastiques %(k1)s ne peut etre pilotee +33 : _(""" + la charge de déformations anélastiques %(k1)s ne peut etre pilotée """), -34: _(""" - la charge de type evol_char %(k1)s ne peut etre pilotee +34 : _(""" + la charge de type EVOL_CHAR %(k1)s ne peut etre pilotée """), -35: _(""" - une meme charge ne peut contenir a la fois le mot-cle "liaison_unil" et le mot-cle "contact" +35 : _(""" + une meme charge ne peut contenir à la fois + le mot-cle "LIAISON_UNIL" et le mot-cle "CONTACT" """), -36: _(""" - la charge de type liaison_unilaterale %(k1)s ne peut etre pilotee +36 : _(""" + la charge de type liaison_unilatérale %(k1)s ne peut etre pilotée """), -37: _(""" - la charge de type contact %(k1)s ne peut etre pilotee +37 : _(""" + la charge de type contact %(k1)s ne peut etre pilotée """), -38: _(""" - la charge %(k1)s ne peut pas utiliser de fonction multiplicative fonc_mult car elle est pilotee +38 : _(""" + la charge %(k1)s ne peut pas utiliser de fonction multiplicative FONC_MULT + car elle est pilotée """), -39: _(""" - on ne peut pas faire de pilotage en l'absence de forces de type "fixe_pilo" +39 : _(""" + on ne peut pas faire de pilotage en l'absence de forces de type "FIXE_PILO" """), -40: _(""" +40 : _(""" il ne peut pas y avoir de contact (mot-cle "contact") dans plus d'une charge """), -41: _(""" - il y a au moins une charge non mecanique : verifier le fichier de commandes -"""), - -42: _(""" - reac_incr negatif -"""), - -43: _(""" - reac_iter negatif -"""), - -44: _(""" - reac_iter_elas negatif -"""), - -45: _(""" - il faut preciser un concept evol_noli en prediction 'depl_calcule' -"""), - -46: _(""" - -> La définition des paramètres rho_min et rho_excl est contradictoire. - On choisit de prendre rho_min à rho_excl. - -> Risque & Conseil : - RHO_MIN ne doit pas etre compris entre -RHO_EXCL et RHO_EXCL - +41 : _(""" + il y a au moins une charge non mécanique : vérifier le fichier de commandes """), -47: _(""" - les valeurs des parametres rho_max et rho_excl sont contradictoires, on prend rho_max a -rho_excl +48 : _(""" + ETA_PILO_MAX doit etre inférieur a ETA_PILO_R_MAX """), -48: _(""" - eta_pilo_max doit etre inferieur a eta_pilo_r_max +49 : _(""" + ETA_PILO_MIN doit etre supérieur à ETA_PILO_R_MIN """), -49: _(""" - eta_pilo_min doit etre superieur a eta_pilo_r_min +50 : _(""" + il faut au plus 1 noeud pour le pilotage DDL_IMPO """), -50: _(""" - il faut au plus 1 noeud pour le pilotage ddl_impo +51 : _(""" + il faut au plus 1 groupe de noeud pour le pilotage DDL_IMPO """), -51: _(""" - il faut au plus 1 groupe de noeud pour le pilotage ddl_impo +52 : _(""" + il faut au plus un noeud dans le groupe pour le pilotage DDL_IMPO """), -52: _(""" - il faut au plus un noeud dans le groupe pour le pilotage ddl_impo +53 : _(""" + il faut préciser un groupe de noeuds dans la méthode LONG_ARC """), -53: _(""" - il faut preciser un groupe de noeuds dans la methode long_arc -"""), - -54: _(""" +54 : _(""" groupe de noeud %(k1)s vide """), -55: _(""" - liste de composantes vide pour la methode long_arc +55 : _(""" + liste de composantes vide pour la methode LONG_ARC """), -56: _(""" - liste relation_kit vide +56 : _(""" + liste RELATION_KIT vide """), -57: _(""" - liste relation_kit trop longue +57 : _(""" + liste RELATION_KIT trop longue """), -58: _(""" - 1d ou c_plan ? +58 : _(""" + 1D ou C_PLAN ? """), -59: _(""" - liste relation_kit trop +59 : _(""" + liste RELATION_KIT trop +### trop quoi ? """), -60: _(""" +60 : _(""" -> Le critère de convergence pour intégrer le comportement 'RESI_INTE_RELA' est lache (très supérieur à la valeur par défaut). -> Risque & Conseil : Cela peut nuire à la qualité de la solution et à la convergence. - - """), -61: _(""" +61 : _(""" option %(k1)s non traitee """), -62: _(""" - matrice non inversible -"""), - -63: _(""" - pas existance de solution pour le saut +63 : _(""" + pas existence de solution pour le saut """), -64: _(""" - existance d'un element a discontinuite trop grand non unicite du saut +64 : _(""" + existence d'un élément à discontinuité trop grand + non unicité du saut """), -65: _(""" - non convergence du newton pour le calcul du saut no1 +65 : _(""" + non convergence du NEWTON pour le calcul du saut numéro 1 """), -66: _(""" - non convergence du newton pour le calcul du saut no2 +66 : _(""" + non convergence du NEWTON pour le calcul du saut numéro 2 """), -67: _(""" - non convergence du newton pour le calcul du saut no3 +67 : _(""" + non convergence du NEWTON pour le calcul du saut numéro 3 """), -68: _(""" +68 : _(""" erreur dans le calcul du saut """), -69: _(""" +69 : _(""" loi %(k1)s non implantee pour les elemdisc """), -70: _(""" - elements isoparametriques 2d non disponibles en grandes rotations -"""), - -71: _(""" - elements isoparametriques 3d non disponibles en grandes rotations -"""), - -72: _(""" - seule une loi de comportement elastique isotrope est valide pour le calcul de dg ! +70 : _(""" + elements isoparamétriques 2D non disponibles en grandes rotations """), -73: _(""" - le tenseur epseq=0 on a donc une derivee depseq tres grande ! +71 : _(""" + elements isoparamétriques 3D non disponibles en grandes rotations """), -74: _(""" - valeur de d_sigm_epsi non trouvee +73 : _(""" + le tenseur EPSEQ vaut 0 on a donc une derivée lagrangienne DEPSEQ très grande ! """), -75: _(""" - valeur de sy non trouvee +74 : _(""" + valeur de D_SIGM_EPSI non trouvée """), -76: _(""" - dvp : non implante +75 : _(""" + valeur de SY non trouvée """), - - - - - - - -78: _(""" - feti et frottement incompatibles ! -"""), - -79: _(""" - n doit etre > 0 -"""), - -80: _(""" - phi_zero < ou = a zero -"""), - -81: _(""" - 1/k et l doivent etre >=0 -"""), - -82: _(""" - phi/kphi0+l=0 et beta<0 -"""), - -83: _(""" - f(0) > 0 : erreur de conception -"""), - -84: _(""" - calcul flambement non lineaire hpp -"""), - -85: _(""" - flambement non lineaire green +76 : _(""" + développement non implanté """), -86: _(""" - fonctionnalite modifiee (dvlp) +79 : _(""" + loi de comportement avec irradiation, le paramètre N doit etre supérieur à 0 """), -87: _(""" - -> Pour le traitement du contact avec X-FEM, le solveur mumps est vivement - recommandé. - -> Risque & Conseil : - Pour XFEM, la matrice produite est parfois non définie positive. Seul un solveur qui pivote peut alors résoudre - le problème. Il est donc préférable d'utiliser MUMPS (mot-clef SOLVEUR) pour ne pas finir en erreur du type - "PIVOT NUL" avec le solveur MULT_FRONT ou LDLT. +80 : _(""" + loi de comportement avec irradiation, le paramètre PHI_ZERO doit etre supérieur à 0 """), - - - - - - - -89: _(""" - contact et rech. lin. peuvent poser des problemes de convergence +81 : _(""" + loi de comportement avec irradiation, le paramètre phi/K.PHI_ZERO+L doit etre supérieur ou égal à 0 """), -90: _(""" - la combinaison: contact-frottement et solveur gcpc n'est pas disponible. +82 : _(""" + loi de comportement avec irradiation, le paramètre phi/K.PHI_ZERO+L vaut 0. Dans ces conditions le paramètre BETA doit être positif ou nul """), -91: _(""" - contact continue et rech. lin. sont incompatibles +96 : _(""" + comportement ZMAT obligatoire """), -92: _(""" - contact continue et pilotage sont incompatibles +98 : _(""" + il faut déclarer FONC_DESORP sous ELAS_FO pour le fluage de dessication + intrinseque avec SECH comme paramètre """), -93: _(""" - la combinaison: methode continue en contact et solveur gcpc n'est pas disponible. -"""), - -94: _(""" - liaison_unilater et pilotage sont des fonctionnalites incompatibles -"""), - -95: _(""" - liaison_unilater et rech. lin. peuvent poser des problemes de convergence -"""), - -96: _(""" - comportement zmat obligatoire -"""), - -97: _(""" - il faut declarer lam_visc pour le fluage de dessication intrinseque -"""), - -98: _(""" - il faut declarer fonc_desorp sous elas_fo pour le fluage de dessication intrinseque avec sech comme parametre -"""), - -99: _(""" - mauvais dimensionnementde geomm et geomp -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/algorith8.py b/Aster/Cata/cataSTA9/Messages/algorith8.py index 2b914c7b..499dc1a8 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith8.py +++ b/Aster/Cata/cataSTA9/Messages/algorith8.py @@ -1,394 +1,290 @@ -#@ MODIF algorith8 Messages DATE 16/05/2007 AUTEUR BOYERE E.BOYERE +#@ MODIF algorith8 Messages DATE 18/03/2008 AUTEUR CNGUYEN C.NGUYEN # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - contraintes planes en grandes deformations non implantees +1 : _(""" + contraintes planes en grandes déformations non implantées """), -2: _(""" - caracteristique fluage incomplet +2 : _(""" + caractéristique fluage incomplet """), - - - - - - - - - - - - -6: _(""" - message d'erreur inconnu (dvlp) -"""), - -7: _(""" - incoherence de taille (dvlp) -"""), - -8: _(""" +8 : _(""" format de colonne inconnu (dvlp) """), - - -12: _(""" - f reste toujours negative -"""), - -13: _(""" - f reste toujours positive +12 : _(""" + F reste toujours négative """), -14: _(""" - signe de sigma indetermine +13 : _(""" + F reste toujours positive """), -15: _(""" - changement de signe de sigma +14 : _(""" + signe de SIGMA indeterminé """), -16: _(""" - f=0 : pas converge +15 : _(""" + changement de signe de SIGMA """), -17: _(""" - dvp : non coherent +16 : _(""" + F=0 : pas converge """), -18: _(""" - phase inconnue (dvlp) -"""), - -19: _(""" +19 : _(""" trop d'amortissements modaux """), -20: _(""" +20 : _(""" La définition du repère d'orthotropie a été mal faite. Utilisez soit ANGL_REP soit ANGL_AXE de la commande AFFE_CARA_ELEM mot clé facteur MASSIF """), -22: _(""" - type d element incompatible avec une loi elastique anisotrope +22 : _(""" + type d'élément incompatible avec une loi élastique anisotrope """), -23: _(""" - denominateur nul dans le calcul de eta_pilotage +23 : _(""" + dénominateur nul dans le calcul de ETA_PILOTAGE """), -24: _(""" - cisaillement suiveur non implante +24 : _(""" + cisaillement suiveur non implanté """), -25: _(""" - pression imposee sur l'axe des coordonnees cylindriques +25 : _(""" + pression imposée sur l'axe des coordonnées cylindriques """), -26: _(""" +26 : _(""" mode non defini """), -27: _(""" - lecture du champ depl_calcule impossible -"""), - -28: _(""" - prediction par extrapolation impossible : pas de temps nul -"""), - -29: _(""" - iter_line_maxi doit etre inferieur a 1000 -"""), - -30: _(""" - mauvaise estimation de f +28 : _(""" + prédiction par extrapolation impossible : pas de temps nul """), -31: _(""" - borne superieure pmax incorrecte +29 : _(""" + ITER_LINE_MAXI doit etre inférieur à 1000 """), -32: _(""" - viscosite n egale a zero +31 : _(""" + borne superieure PMAX incorrecte """), -33: _(""" - viscosite un_sur_k egale a zero +32 : _(""" + la viscosité N doit être différente de zéro """), -34: _(""" - g=0 : pas converge +33 : _(""" + la viscosité UN_SUR_K doit être différente de zéro """), -35: _(""" - incompatibilite entre la loi de couplage %(k1)s et la modelisation choisi %(k2)s +35 : _(""" + incompatibilité entre la loi de couplage %(k1)s et la modélisation choisie %(k2)s """), -36: _(""" +36 : _(""" il y a deja une loi de couplage """), -37: _(""" +37 : _(""" il y a deja une loi hydraulique """), -38: _(""" - il y a deja une loi de mecanique +38 : _(""" + il y a deja une loi de mécanique """), -39: _(""" +39 : _(""" il n y a pas de loi de couplage """), -40: _(""" +40 : _(""" il n y a pas de loi hydraulique """), -41: _(""" - il n y a pas de loi de mecanique -"""), - -42: _(""" - la loi de couplage est incorrecte pour une modelisation hm -"""), - -43: _(""" - incompatibilite des comportements mecanique et hydraulique +41 : _(""" + il n y a pas de loi de mécanique """), -44: _(""" - loi de mecanique incompatible avec une modelisation hm +42 : _(""" + la loi de couplage est incorrecte pour une modélisation HM """), -45: _(""" - la loi de couplage est incorrecte pour une modelisation hhm +43 : _(""" + incompatibilite des comportements mécanique et hydraulique """), -46: _(""" - loi de mecanique incompatible avec une loi hhm +44 : _(""" + loi de mécanique incompatible avec une modelisation HM """), -47: _(""" - loi de mecanique incompatible avec une modelisation hhm +45 : _(""" + la loi de couplage est incorrecte pour une modélisation HHM """), -48: _(""" - il y a une loi de mecanique dans la relation thh +47 : _(""" + loi de mécanique incompatible avec une modélisation HHM """), -49: _(""" - la loi de couplage est incorrecte pour une modelisation thh +48 : _(""" + il y a une loi de mécanique dans la relation THH """), -50: _(""" - loi de mecanique incompatible avec une loi thh +49 : _(""" + la loi de couplage est incorrecte pour une modélisation THH """), -51: _(""" - il y a une loi de mecanique dans la relation thv +50 : _(""" + loi de mécanique incompatible avec une loi THH """), -52: _(""" - la loi de couplage est incorrecte pour une modelisation thv +51 : _(""" + il y a une loi de mecanique dans la relation THV """), -53: _(""" - loi de mecanique incompatible avec une loi thv +52 : _(""" + la loi de couplage est incorrecte pour une modélisation THV """), -54: _(""" - la loi de couplage est incorrecte pour une modelisation thm +53 : _(""" + loi de mécanique incompatible avec une loi THV """), -55: _(""" - loi de mecanique incompatible avec une modelisation thm +54 : _(""" + la loi de couplage est incorrecte pour une modélisation THM """), -56: _(""" - la loi de couplage est incorrecte pour une modelisation thhm +55 : _(""" + loi de mécanique incompatible avec une modélisation THM """), -57: _(""" - Loi de mecanique incompatible avec une modelisation THHM +56 : _(""" + la loi de couplage est incorrecte pour une modélisation THHM """), -58: _(""" - Methode non implantee +57 : _(""" + Loi de mécanique incompatible avec une modélisation THHM """), -59: _(""" - Champ 'IN' inexistant +58 : _(""" + Méthode de condition unilatéral non implantée """), - - - - - -61: _(""" +61 : _(""" Il manque le séchage de référence (AFFE_MATERIAU/AFFE_VARC/VALE_REF) """), - - - -65: _(""" - echec loi de comp dans zerofo +65 : _(""" + echec loi de comportement dans ZEROFO """), -66: _(""" - convergence atteinte surapproximation lineaire tangente de l'evolution plastique- risque d'imprecision +66 : _(""" + convergence atteinte sur approximation linéaire tangente de l'évolution plastique + risque d'imprecision """), -67: _(""" +67 : _(""" endommagement maximal atteint au cours des resolutions internes """), -68: _(""" - erreur recuperation parametres materiau -"""), - -69: _(""" - type de matrice demande non disponible -"""), - -70: _(""" - erreur dans nmvecd -"""), - -71: _(""" - valo >0 -"""), - -72: _(""" - dr negatif -"""), - -73: _(""" - pb2 seq -"""), - -74: _(""" - pb4 seq -"""), - -75: _(""" - pb1 seq +77 : _(""" + le nombre de composantes dans le champ de vent est incorrect. on doit avoir : DX, DY, DZ """), -76: _(""" - pb3 seq +80 : _(""" +Pour le comportement %(k3)s, matériau %(k4)s. Incohérence dans les données matériau. + %(k1)s est >= %(k2)s cela n'est pas possible. + valeur de %(k1)s : %(r1)E + valeur de %(k2)s : %(r2)E """), -77: _(""" - le nombre de composante dans le champ de vent est incorrect. on doit avoir : dx, dy, dz +81 : _(""" +L'association comportement vs matériau est incorrecte. +Les combinaisons possibles sont : + comportement %(k1)s et matériau %(k2)s et %(k5)s + comportement %(k3)s et matériau %(k4)s et %(k5)s """), -78: _(""" - f(0)=0 -"""), - - - - - - - - -80: _(""" - sy >= su. impossible. -"""), - -81: _(""" - ep >= e. impossible. -"""), - -82: _(""" - incoherence dans les donnees materiau : mey > mpy impossible. -"""), - -83: _(""" - incoherence dans les donnees materiau : mez > mpz impossible. -"""), - -84: _(""" +84 : _(""" comportement de fluage sous irradiation inconnu """), -85: _(""" - definition multiple du comportement pour un element de poutre +85 : _(""" + definition multiple du comportement pour un élément de poutre """), -86: _(""" - porosite strictement nulle( cas non traite) +86 : _(""" + porosité strictement nulle( cas non traité) """), -87: _(""" - l'increment de temps vaut zero, verifier votre decoupage +87 : _(""" + l'incrément de temps vaut zéro, vérifiez votre découpage """), -88: _(""" - fluence decroissante (flux<0) +88 : _(""" + fluence décroissante (flux<0) """), -89: _(""" - le parametre a doit etre >=0 +89 : _(""" + le parametre A doit etre >=0 """), -90: _(""" - la loi lmarc_irran'est compatible qu'avec une modelisation poutre +90 : _(""" + la loi LMARC_IRRA n'est compatible qu'avec une modélisation poutre """), -91: _(""" - stop, rigi_meca_tang non disponible +91 : _(""" + stop, RIGI_MECA_TANG non disponible """), -92: _(""" - la maille doit etre de type tetra10,penta15,hexa20,quad8 ou tria6. or la maille est de type : %(k1)s . +92 : _(""" + la maille doit etre de type TETRA10,PENTA15,HEXA20,QUAD8 ou TRIA6. + or la maille est de type : %(k1)s . """), -93: _(""" - une maille maitre est de longueur nulle +94 : _(""" + le champ issu du concept %(k1)s n'est pas calculé à l'instant %(i3)i """), -96: _(""" - le sechage ne peut pas etre melange a un autre comportement +96 : _(""" + le séchage ne peut pas etre mélangé à un autre comportement """), -97: _(""" - evol_ther_sech est un mot-cle obligatoire pour le sechage de type sech_granger et sech_nappe +97 : _(""" + EVOL_THER_SECH est un mot-clé obligatoire pour le séchage de type SECH_GRANGER et SECH_NAPPE """), -98: _(""" - le concept : %(k1)s n'est pas un champ de temperature +98 : _(""" + le concept : %(k1)s n'est pas un champ de température """), -99: _(""" - le concept evol_ther : %(k1)s ne contient aucun champ de temperature +99 : _(""" + le concept EVOL_THER : %(k1)s ne contient aucun champ de température """), + } diff --git a/Aster/Cata/cataSTA9/Messages/algorith9.py b/Aster/Cata/cataSTA9/Messages/algorith9.py index 08d7e1b8..fd6f0309 100644 --- a/Aster/Cata/cataSTA9/Messages/algorith9.py +++ b/Aster/Cata/cataSTA9/Messages/algorith9.py @@ -1,8 +1,8 @@ -#@ MODIF algorith9 Messages DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF algorith9 Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,339 +20,285 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - le champ de temperature : temp_init(num_init) n'existe pas. +1 : _(""" + le champ de température : TEMP_INIT(NUM_INIT) n'existe pas. """), -2: _(""" - cham_no invalide +2 : _(""" + CHAM_NO invalide """), -3: _(""" - le mot cle "nume_init" est obligatoire dans ce cas. +4 : _(""" + valeur de THETA illicite """), -4: _(""" - valeur de theta illicite -"""), - -5: _(""" +5 : _(""" la charge %(k1)s n'est pas thermique """), -6: _(""" - la charge cine %(k1)s n"a pas de .defi -"""), - -7: _(""" - la charge %(k1)s n'est pas compatible avec fonc_mult -"""), - -9: _(""" - composante non trouvee dans la numerotation +7 : _(""" + la charge %(k1)s n'est pas compatible avec FONC_MULT """), -10: _(""" - nombre de vecteurs demande trop grand on prend tous les modes du concept mode_meca +9 : _(""" + composante non trouvée dans la numérotation """), -12: _(""" - borne inf incorrect +10 : _(""" + nombre de vecteurs demandé trop grand + on prend tous les modes du concept MODE_MECA """), -13: _(""" - probleme avec courbe de traction +12 : _(""" + borne inférieure incorrecte """), -14: _(""" - pente non trouvee -"""), - -15: _(""" - la norme du vecteur vect_orie est nulle -"""), - -16: _(""" +16 : _(""" le pas est nul """), -17: _(""" - le nombre de pas est negatif -"""), - -18: _(""" - les matrices assemblees generalisees doivent avoir un stockage plein (cf. nume_ddl_gene) +17 : _(""" + le nombre de pas est négatif """), -19: _(""" - coeff_var_amor non nul et amortissement non present +18 : _(""" + les matrices assemblées généralisées doivent avoir un stockage plein (cf. NUME_DDL_GENE) """), - - - - -24: _(""" - charge de contact non traitee +19 : _(""" + COEFF_VAR_AMOR non nul et amortissement non présent """), -25: _(""" - votre chargement contient plus d'une charge repartie. le calcul n'est paspossible pour les modeles de poutre +24 : _(""" + charge de contact non traitée """), -26: _(""" - le modele est obligatoire +25 : _(""" + votre chargement contient plus d'une charge répartie + le calcul n'est pas possible pour les modèles de poutre """), -27: _(""" - impossible de combiner les mots cles charge et vect_asse en dehors des ondes planes +26 : _(""" + le modèle est obligatoire """), -28: _(""" - concept reentrant : "resultat" doit porter le meme nom que la sortie +27 : _(""" + impossible de combiner les mots cles CHARGE et VECT_ASSE en dehors des ondes planes """), -29: _(""" - concept reentrant : "resultat" est d'un type different +28 : _(""" + concept réentrant : "RESULTAT" doit porter le meme nom que la sortie """), -30: _(""" - argument en double pour "nom_cham" +29 : _(""" + concept réentrant : "RESULTAT" est d'un type différent """), -31: _(""" - pour l'instant, on ne peut pas deriver sur base modale dans dyna_line_harm +30 : _(""" + argument en double pour "NOM_CHAM" """), -34: _(""" - les matrices ne possedent pas toutes la meme numerotation +31 : _(""" + pour l'instant, on ne peut pas dériver sur base modale dans DYNA_LINE_HARM """), -35: _(""" - un vect_asse n'est ni a valeurs reelles, ni a valeurs complexes. +34 : _(""" + les matrices ne possèdent pas toutes la meme numérotation """), -36: _(""" - erreur dans decoupe initiale des pas +35 : _(""" + un VECT_ASSE n'est ni à valeurs réelles, ni à valeurs complexes. """), -37: _(""" - attention, arret=non donc poursuite du calcul sans avoir eu convergence +39 : _(""" + base modale et MATR_ASSE avec numérotations différentes """), -39: _(""" - base modale et matr_asse avec numerotations differentes -"""), - -40: _(""" +40 : _(""" type de matrice inconnu: %(k1)s """), -41: _(""" - base modale et vect_asse avec numerotations differentes +41 : _(""" + base modale et VECT_ASSE avec numérotations différentes """), -42: _(""" - la base constituee ne forme pas une famille libre +42 : _(""" + la base constituée ne forme pas une famille libre """), -43: _(""" +43 : _(""" le nombre de valeurs doit etre pair. """), -44: _(""" - trop d'arguments pour "nom_cham" +44 : _(""" + trop d'arguments pour "NOM_CHAM" """), -45: _(""" - pour calculer une acce_absolu, il faut "acce_mono_appui" +45 : _(""" + pour calculer une ACCE_ABSOLU, il faut "ACCE_MONO_APPUI" """), -46: _(""" - pour restituer sur un squelette, il faut "mode_meca" +46 : _(""" + pour restituer sur un squelette, il faut "MODE_MECA" """), -47: _(""" - mots-cles'sous_struc' et'squelette'interdits +47 : _(""" + mots-cles'SOUS_STRUC' et'SQUELETTE'interdits """), -48: _(""" - mots-cle'mode_meca' doit etre present +48 : _(""" + le mot-clé 'MODE_MECA' doit etre présent """), -49: _(""" - l'instant de recuperation est en dehors du domaine de calcul. +49 : _(""" + l'instant de récuperation est en dehors du domaine de calcul. """), -50: _(""" +50 : _(""" pas de mailles fournies """), -51: _(""" - aucune maille enrichie -"""), - -55: _(""" - mauvaise definition de l'interspectre. -"""), - -56: _(""" - le "nomb_pts" doit etre une puissance de 2. +55 : _(""" + mauvaise définition de l'interspectre. """), -57: _(""" - si les mots-cles et sont utilises, il faut autant d arguments pour l un et l autre +56 : _(""" + le "NOMB_PTS" doit etre une puissance de 2. """), -58: _(""" - le concept mode_meca d entree doit etre celui correspondant a la base modale initiale pour le calcul de couplage fluide-structure +57 : _(""" + si les mots-cles NUME_ORDRE et AMOR_REDUIT sont utilisés, + il faut autant d'arguments pour l'un et l'autre """), -59: _(""" - numero de vitesse d ecoulement du fluide non valide +58 : _(""" + le concept MODE_MECA d'entrée doit etre celui correspondant à la base modale initiale + pour le calcul de couplage fluide-structure """), -60: _(""" - tous les modes non couples etant retenus, le nombre d arguments valide pour le mot-cle est la difference entre le nombre de modes de la base modale initiale et le nombre de modes pris en compte pour le couplage fluide-structure +60 : _(""" + tous les modes non couplés étant retenus, le nombre d'arguments valide + pour le mot-clé AMOR_REDUIT est la différence entre le nombre de modes + de la base modale initiale et le nombre de modes pris en compte pour + le couplage fluide-structure """), -61: _(""" - les numeros d ordre fournis ne correspondent pas a des modes non perturbes +61 : _(""" + les numéros d'ordre fournis ne correspondent pas à des modes non perturbés """), -62: _(""" - option symetrie : la dimension de point et axe_1 doit etre identique. +62 : _(""" + option symétrie : la dimension de POINT et AXE_1 doit etre identique. """), -63: _(""" - option symetrie : axe_2 est inutile en 2d, il est ignore. +63 : _(""" + option symétrie : AXE_2 est inutile en 2D, il est ignoré. """), -64: _(""" - option symetrie : la dimension de point et axe_2 doit etre identique. +64 : _(""" + option symétrie : la dimension de POINT et AXE_2 doit etre identique. """), -65: _(""" - methode: elem autorisee seulement pour les resultats evol_xxx. +65 : _(""" + méthode: ELEM autorisée seulement pour les résultats EVOL_XXX. """), -66: _(""" - methode: nuage_deg__* autorisee seulement pour les champs. +66 : _(""" + methode: NUAGE_DEG__* autorisée seulement pour les champs. """), -69: _(""" - on ne sait pas traiter le champ de type: %(k1)s champ : %(k2)s +69 : _(""" + on ne sait pas traiter le champ de type: %(k1)s + champ : %(k2)s """), -70: _(""" - le nom du champ de la variable de commande pour decoupage obligatoire +74 : _(""" + attention, mode sur-amorti """), -71: _(""" - le nom du cmp de la variable de commande pour decoupage obligatoire -"""), - -72: _(""" - critere pour decoupage obligatoire -"""), - -73: _(""" - erreur : itran = 0 ou 1 -"""), - -74: _(""" - attention, mode suramorti -"""), - -75: _(""" +75 : _(""" attention, mode instable """), - - - - - - - - - -80: _(""" - pour utiliser le comportement "hydr" il faut surcharger le code en "mode developpement" avec les routines "permea" et "satura". +80 : _(""" + pour utiliser le comportement "HYDR", il faut surcharger le code + en "mode devéloppement" avec les routines "PERMEA" et "SATURA". """), -81: _(""" +81 : _(""" le vecteur directeur est nul. """), -82: _(""" - erreur dvp -"""), - -83: _(""" - nombre max iterations atteint +83 : _(""" + nombre maximum d'itérations atteint """), -84: _(""" - precision machine depassee +84 : _(""" + précision machine depassée """), -85: _(""" - probleme pilo : 3 solutions ou plus +85 : _(""" + problème pilo : 3 solutions ou plus """), -86: _(""" +86 : _(""" matrice mat non inversible """), -87: _(""" - probleme pilo +87 : _(""" + problème pilo """), -88: _(""" - ldc non dispo pour pilotage +88 : _(""" + loi de comportement non disponible pour le pilotage """), -89: _(""" - le pilotage pred_elas necessite eta_pilo_min et eta_pilo_max pour la loi endo_isot_beton +89 : _(""" + le pilotage PRED_ELAS nécessite ETA_PILO_MIN et ETA_PILO_MAX + pour la loi ENDO_ISOT_BETON """), -90: _(""" - le pilotage pred_elas necessite eta_pilo_min et eta_pilo_max pour la loi endo_orth_beton +90 : _(""" + le pilotage PRED_ELAS nécessite ETA_PILO_MIN et ETA_PILO_MAX + pour la loi ENDO_ORTH_BETON """), -91: _(""" - nb noeuds mesure doit etre inf a nb noeuds modele +91 : _(""" + le nombre de noeuds mesuré doit etre inférieur au nombre de noeuds du modèle """), -92: _(""" - maille seg2 non trouvee +92 : _(""" + maille SEG2 non trouvée """), -93: _(""" - integration elastoplastique de loi beton_double_dp : pas de convergence lors de la projection au sommet des cones de traction et de compression --> utiliser le redecoupage automatique du pas de temps. +93 : _(""" + intégration élastoplastique de loi BETON_DOUBLE_DP : + pas de convergence lors de la projection au sommet des cones de traction et de compression + --> utiliser le redécoupage automatique du pas de temps. """), -94: _(""" - integration elastoplastique de loi beton_double_dp : pas de convergence lors de la resolution pour nseuil = %(k1)s --> utiliser le redecoupage automatique du pas de temps. +94 : _(""" + intégration élastoplastique de loi BETON_DOUBLE_DP : + pas de convergence lors de la resolution pour NSEUIL = %(k1)s + --> utiliser le redécoupage automatique du pas de temps. """), -95: _(""" - non convergence a la maille: %(k1)s +95 : _(""" + non convergence à la maille: %(k1)s """), -96: _(""" +96 : _(""" la saturation n'est pas une variable interne pour la loi de couplage %(k1)s """), -97: _(""" - la pression de vapeur n est pas une variable interne pour la loi de couplage %(k1)s +97 : _(""" + la pression de vapeur n'est pas une variable interne pour la loi de couplage %(k1)s """), - -99: _(""" - la variable %(k1)s n existe pas dans la loi cjs en 2d +99 : _(""" + la variable %(k1)s n'existe pas dans la loi CJS en 2D """), + } diff --git a/Aster/Cata/cataSTA9/Messages/appelmpi.py b/Aster/Cata/cataSTA9/Messages/appelmpi.py index 8c1bca71..e6bde501 100644 --- a/Aster/Cata/cataSTA9/Messages/appelmpi.py +++ b/Aster/Cata/cataSTA9/Messages/appelmpi.py @@ -1,21 +1,21 @@ -#@ MODIF appelmpi Messages DATE 04/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF appelmpi Messages DATE 12/11/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x @@ -23,22 +23,29 @@ def _(x) : return x cata_msg={ 1: _(""" - &feti.liste.sd.mpi existe deja ! -"""), - -2: _(""" - &feti.liste.sd.mpib existe deja ! + l'option est non prévue en non compilation MPI """), 3: _(""" - En parallèle, il faut au moins un sous-domaine par processeur ! + En parallèle, il faut au moins un sous-domaine par processeur """), 4: _(""" - Processeur %(i1)d : option FETAM %(i2)d non prevue en compile MPI ! + Processeur %(i1)d : + l'option FETAM %(i2)d est non prévue en compilation MPI """), 5: _(""" - Erreur MPI: %(k1)s ! + Erreur MPI: %(k1)s +"""), + +6: _(""" + Processeur %(i1)d : option MUMMPI %(i2)d non prevue avec MUMPS ! """), +7: _(""" + &mumps.liste.sd.mpi existe deja ! +"""), + + + } diff --git a/Aster/Cata/cataSTA9/Messages/archivage.py b/Aster/Cata/cataSTA9/Messages/archivage.py new file mode 100644 index 00000000..44a42452 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/archivage.py @@ -0,0 +1,37 @@ +#@ MODIF archivage Messages DATE 11/03/2008 AUTEUR CNGUYEN C.NGUYEN +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { + +95 : _(""" +Accès par instant sans évolution ordonnée interdit (ARCHIVAGE) +"""), + +97 : _(""" +L'archivage va écraser des instants déjà calculés (ARCHIVAGE) +"""), + +98 : _(""" +L'archivage va laisser des trous dans la sd EVOL_NOLI (ARCHIVAGE, NUME_INIT) +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/arlequin.py b/Aster/Cata/cataSTA9/Messages/arlequin.py index 667898cb..5576ba60 100644 --- a/Aster/Cata/cataSTA9/Messages/arlequin.py +++ b/Aster/Cata/cataSTA9/Messages/arlequin.py @@ -1,4 +1,4 @@ -#@ MODIF arlequin Messages DATE 28/03/2007 AUTEUR PELLET J.PELLET +#@ MODIF arlequin Messages DATE 02/06/2008 AUTEUR MEUNIER S.MEUNIER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -24,7 +24,7 @@ cata_msg={ 1: _(""" - Pour Arlequin, la dimension topologique des modelisations de GROUP_MA_1 et GROUP_MA_2 doivent etre les memes: + Pour Arlequin, la dimension topologique des modélisations de GROUP_MA_1 et GROUP_MA_2 doivent être les mêmes: - C_PLAN (2D) - ou D_PLAN (2D) - ou AXIS (2D) @@ -36,60 +36,94 @@ cata_msg={ """), 3: _(""" - Il y a plusieurs modelisations dans le meme groupe de maille + Il y a plusieurs modélisations dans le même groupe de maille """), 4: _(""" - Il y a plusieurs cinematiques (melange elements de structures/elements de milieu continu) dans le meme groupe de maille + Il y a plusieurs cinématiques dans le même groupe de maille + (mélange éléments de structures/éléments de milieu continu) """), 5: _(""" Aucune maille du groupe n'est utilisable dans Arlequin, on rappelle ce qui est utilisable: - - elements de deformations planes (D_PLAN) - - elements de contraintes planes (C_PLAN) - - elements axisymetriques (AXIS) - - elements 3D - - elements de structure de type coques et plaques (DKT/DST/COQUE_3D/Q4G) + - éléments de déformations planes (D_PLAN) + - éléments de contraintes planes (C_PLAN) + - éléments axisymétriques (AXIS) + - éléments 3D + - éléments de structure de type coques et plaques (DKT/DST/COQUE_3D/Q4G) """), 6: _(""" La normale au noeud <%(k1)s> de la maille <%(k2)s> est nulle. - Verifiez votre maillage (pas de mailles aplaties par exemple) + Vérifiez votre maillage (pas de mailles aplaties par exemple) """), 7: _(""" La normale moyenne sur la maille <%(k1)s> est nulle. - Verifiez votre maillage (orientations des mailles par exemple) + Vérifiez votre maillage (orientations des mailles par exemple) """), 8: _(""" - Il faut renseigner le mot-clef CARA_ELEM lorsqu'on utilise des elements coques + Il faut renseigner le mot-clef CARA_ELEM lorsqu'on utilise des éléments coques """), 9: _(""" - Les deux domaines ne se recouvrent pas. Verifiez vos groupes. + Les deux domaines ne se recouvrent pas. Vérifiez vos groupes. """), 10: _(""" - Le groupe de mailles de collage (GROUP_MA_COLL) doit etre un sous ensemble d'un des deux - sous domaines GROUP_MA_1 ou GROUP_MA_2 + Le groupe de mailles de collage (GROUP_MA_COLL) doit être un sous ensemble + d'un des deux sous domaines GROUP_MA_1 ou GROUP_MA_2 """), 11: _(""" - La maille <%(k1)s> est de type %(k2)s: elle ne peut etre mise en boite. + La maille <%(k1)s> est de type %(k2)s : elle ne peut être mise en boîte. Ce type de maille n'est pas pris en compte. """), 12: _(""" - Aucune maille de la zone de collage n'est appariee + Aucune maille de la zone de collage n'est appariée """), 13: _(""" - Nombre de couples apparies sous-estime - Erreur avancee: contacter le support + Nombre de couples appariés sous-estimé + - Erreur avancée : contacter le support """), 14: _(""" - La gestion des conditions limites redondantes a ete deconnectee dans Arlequin + La zone de superposition des modèles dans Arlequin ne contient aucune maille ! +"""), + +16: _(""" + Pb d'assemblage pour le couple de mailles %(i1)d et %(i2)d +"""), + +17: _(""" + Le noeud <%(i1)d> est redondant +"""), + +18: _(""" + intégration par sous-mailles - 2d : le découpage en tria6 ne marche pas encore +"""), + +19: _(""" + élément de type <%(k1)s> interdit +"""), + +20: _(""" + Mise en boîtes : il est impossible de traiter le type de maille <%(k1)s> +"""), + +21: _(""" + Pb lors de mise en boîtes. La SD boîte concernée est <%(k1)s>. Informations : + dimension de l'espace : %(i1)d + nombre de mailles : %(i2)d + nombre de pans : %(i3)d + nombre de sommets : %(i4)d +"""), + +22: _(""" + Maille inconnue : %(k1)s """), 23: _(""" @@ -97,11 +131,54 @@ cata_msg={ """), 24: _(""" - Nombre de composantes connexes maximal prevu insuffisant + Nombre de composantes connexes maximal prévu insuffisant """), 25: _(""" - Polyedre non etoile au centre de gravite + L'intersection de la maille <%(k1)s> avec la maille <%(k2)s> a donné un polyèdre + non étoilé dont la tétraédrisation a été difficile. Il y a une erreur sur le volume obtenu après tétraédrisation. + Volume initial du polyèdre de l'intersection: <%(r1)s> + Volume après découpe en tétraèdres du polyèdre de l'intersection: <%(r2)s> + Soit un écart de <%(r3)s> %% +--> Risques & conseils : +Si cet écart est trop important sur trop de mailles de l'intersection, les termes de couplage Arlequin seront faux et +pourront entraîner un résultat faux. +Vous pouvez réduire ce risque en raffinant le maillage ou en utilisant des mailles plus simples (tétraèdres) + +"""), + +26: _(""" + Dimension incorrecte : %(i1)d +"""), + +27: _(""" + Le nombre de noeuds est incohérent : %(i1)d +"""), + + + + +34: _(""" + La famille d'intégration %(i1)d n'existe pas pour les mailles de type %(k1)s. +"""), + + + + +40: _(""" + La carte d'information %(k1)s de la charge Arlequin courante n'existe pas. +"""), + +41: _(""" + On ne sait pas traiter les mailles de type %(k1)s avec la méthode Arlequin. +"""), + + + + +99 : _(""" + On a rencontré un problème dans la routine <%(k1)s>. + - Erreur avancée : contacter le support """), } diff --git a/Aster/Cata/cataSTA9/Messages/ascouf0.py b/Aster/Cata/cataSTA9/Messages/ascouf0.py new file mode 100644 index 00000000..117c1bba --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/ascouf0.py @@ -0,0 +1,337 @@ +#@ MODIF ascouf0 Messages DATE 14/04/2008 AUTEUR GALENNE E.GALENNE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +La condition aux limites sur bol à section conique +est ignorée pour un coude avec sous-épaisseurs. +"""), + +2: _(""" +Mot-clé AZIMUT non autorisé dans le cas d'un coude sain" +"""), + +3: _(""" +POSI_ANGUL POSI_CURV_LONGI est obligatoire. +"""), + +4: _(""" +Il faut renseigner : ANGLE, R_CINTR et POSI_ANGUL ou ANGLE, R_CINTR et POSI_CURV_LONGI. +"""), + +5: _(""" +ANGL_COUDE et ANGL_SOUS_EPAI sont inutiles dans ce cas. +"""), + +6: _(""" + ASCSEP valeur hors domaine + sous-epaisseur numero : %(i1)d + taille axe circonferentiel : %(r1)f + bord plaque : %(r2)f +"""), + +7: _(""" + ASCSEP cas de symetrie : + la sous-epaisseur doit etre dans la section mediane du coude ! +"""), + + +9: _(""" + Valeur hors domaine : + sous-epaisseur numero :%(i1)d + absc. curv. circonf. :%(r1)f + bord plaque :%(r2)f +"""), + +10: _(""" + Valeur hors domaine : + sous-epaisseur numero :%(i1)d + absc. curv. longit. :%(r1)f + bord plaque :%(r2)f +"""), + +11: _(""" + valeur hors domaine : + sous-epaisseur numero :%(i1)d + bord inferieur :%(r1)f + bord plaque :%(r2)f +"""), + + +13: _(""" + Les quart et demi structure ne peuvent etre réalisees + sur un modèle comportant une transition d'épaisseur. +"""), + +14: _(""" + Les deux embouts doivent etre de meme longueur pour les cas de symétrie. +"""), + +15: _(""" + Longueur d'embout P1 inférieure a la longueur d'amortissement = %(r1)f +"""), + +16: _(""" + Longueur d'embout P2 inférieure à la longueur d'amortissement = %(r1)f +"""), + +17: _(""" + La condition aux limites raccord 3d-poutre appliquée avec la macro de calcul + ascouf n'est pas licite avec un embout de type conique. +"""), + +18: _(""" + Le nombre d'elements dans l'epaisseur du coude n'est pas parametrable pour + un coude avec fissure. + Le mot-cle NB_ELEM_EPAIS est ignoré. +"""), + +19: _(""" + Pour les fissures non axisymetriques, la longueur doit etre spécifiée. +"""), + +20: _(""" + La fissure est axisymetrique : on ne tient pas compte de la longueur spécifiée. +"""), + +21: _(""" + Avec une transition d'épaisseur,la fissure doit obligatoirement etre transverse. +"""), + +23: _(""" + L'orientation de la fissure doit etre transverse (orien : 90.) pour modéliser + un quart ou une demi structure. +"""), + +24: _(""" + La fissure est axisymetrique : son orientation doit etre transverse (ORIEN : 90.) +"""), + +25: _(""" + Il ne peut pas y avoir plusieurs sous-épaisseurs en meme temps + qu'une transition d'épaisseur: + si une seule sous-épaisseur, alors utiliser SOUS_EPAIS_COUDE. +"""), + +26: _(""" + Avec une transition d'épaisseur,il doit obligatoirement y avoir un défaut, + soit une fissure soit une sous-épaisseur. +"""), + +27: _(""" + Ne modéliser qu'une seule sous-épaisseur pour un quart ou demi-coude. +"""), + +28: _(""" + Vous ne pouvez déclarer la sous-epaisseur comme axisymetrique et donner + une taille d'axe circonferentiel. +"""), + +29: _(""" + Vous devez donner une taille d'axe circonférentiel pour une sous-épaisseur + de type elliptique. +"""), + +30: _(""" + Valeur hors domaine de validité : + sous-épaisseur numéro :%(i1)d + abscisse curv. longit. :%(r1)f + valeur maximale autorisée :%(r2)f +"""), + +31: _(""" + Valeur hors domaine de validité : + sous-épaisseur numéro :%(i1)d + position angulaire centre sous-ep :%(r1)f + valeur limite autorisée :%(r2)f +"""), + +32: _(""" + Valeur hors domaine de validité : + sous-épaisseur numero :%(i1)d + abscisse curv. circonf. :%(r1)f + valeur limite autorisée :%(r2)f +"""), + +33: _(""" + Le centre d'une sous-épaisseur axisymétrique est imposé en intrados (pi*RM). +"""), + +34: _(""" + Le centre d'une sous-épaisseur axisymétrique est imposé en intrados. + L'azimut est fixé à 180 degrés. +"""), + +35: _(""" + Le nombre d'élements dans l'épaisseur du coude n'est pas parametrable pour + la version 2 de la procedure de plaque avec sous-épaisseur : + mot-cle NB_ELEM_EPAIS ignoré. +"""), + +36: _(""" + Valeur hors domaine de validité : + surépaisseur :%(i1)d + valeur limite autorisée (RM-EP1/2) :%(r1)f +"""), + +37: _(""" + Valeur hors domaine de validité : + le rayon de cintrage : %(r1)f + doit etre supérieur a (RM+EP1/2) :%(r2)f +"""), + +38: _(""" + Valeur hors domaine de validité (5,50) + rapport RM/EP1 : %(r1)f +"""), + +39: _(""" + Valeur hors domaine de validité : + abscisse curviligne centre fissure :%(r1)f + valeur limite autorisée :%(r2)f +"""), + +40: _(""" + Valeur hors domaine de validité : + nombre de tranches :%(i1)d +"""), + +41: _(""" + Valeur hors domaine de validité : + position angulaire centre fissure : %(r1)f + posi_angul doit etre >= 0 et <= %(r2)f +"""), + +42: _(""" + Valeur hors domaine de validité : + début transition d'épaisseur :%(r1)f + valeur minimale autorisée :%(r2)f + valeur maximale autorisée :%(r3)f +"""), + +43: _(""" + Valeur hors domaine de validité : + angle de transition TETA1 : %(r1)f + valeur minimale autorisée : 0. + valeur maximale autorisée : 30. +"""), + +44: _(""" + Valeur hors domaine de validité : + épaisseur avant la transition :%(r1)f + valeur minimale autorisée : 12 + valeur maximale autorisée : 80 +"""), + +45: _(""" + Valeur hors domaine de validité : + épaisseur apres la transition :%(r1)f + valeur minimale autorisée : 20 + valeur maximale autorisée : 110 +"""), + +46: _(""" + L'épaisseur avant la transition doit etre inférieure + à celle apres la transition. +"""), + +47: _(""" + Valeur hors domaine de validité : + fin transition d'épaisseur :%(r1)f + valeur limite autorisée :%(r2)f +"""), + +48: _(""" + Valeur hors domaine de validité : + diam ext du tube avant transition:%(r1)f + valeur minimum autorisée : 112. + valeur maximum autorisée : 880. +"""), + +49: _(""" + Valeur hors domaine de validité : + angle de transition TETA2: %(r1)f + valeur minimum autorisée : 0. + valeur maximum autorisée : 45. +"""), + +50: _(""" + Valeur hors domaine de validité : + epaisseur avant 1ere transition:%(r1)f + valeur minimum autorisee : 7. + valeur maximum autorisee : 35. +"""), + +51: _(""" + Valeur hors domaine de validité : + epaisseur avant 2eme transition:%(r1)f + valeur minimum autorisee : 15. + valeur maximum autorisee : 40. +"""), + +52: _(""" + Valeur hors domaine de validité : + épaisseur intermediaire:%(r1)f + valeur minimum autorisée : 15. + valeur maximum autorisée : 40. +"""), + +53: _(""" + Valeur hors domaine de validité. + L'épaisseur avant la transition doit etre inférieure + à l'épaisseur intermediaire. +"""), + +54: _(""" + Valeur hors domaine de validité. + L'épaisseur après la transition doit etre inférieure + à l'épaisseur intermediaire. +"""), + +55: _(""" + Valeur hors domaine de validité : + fin transition d'épaisseur:%(r1)f + valeur limite autorisée :%(r2)f +"""), + +56: _(""" + Valeur hors domaine de validité : + diam ext du tube avant transition:%(r1)f + valeur minimum autorisée : 77. + valeur maximum autorisée : 355. +"""), + +57: _(""" +Seuls gibi98 et gibi2000 sont appelables. +"""), + +58: _(""" +Une interpénétration des lèvres est détectée pour le numéro d'ordre %(i1)d : sur les +%(i2)d noeuds de chaque lèvre, %(i3)d noeuds s'interpénètrent. +-> Risque et Conseil : +Le contact n'est pas pris en compte dans le calcul. Le taux de restitution de l'énergie G +est donc positif y compris là où la fissure tend à se refermer, ce qui peut conduire à +des résultats trop pénalisants. +Pour prendre en compte le contact entre les lèvres, il faut lancer le calcul hors macro. +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/aspic0.py b/Aster/Cata/cataSTA9/Messages/aspic0.py new file mode 100644 index 00000000..bf00e6e5 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/aspic0.py @@ -0,0 +1,139 @@ +#@ MODIF aspic0 Messages DATE 14/04/2008 AUTEUR GALENNE E.GALENNE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +Vous affectez plus d'un materiau contenant l'option rccm. +"""), + +2: _(""" +Pour les piquages sains, TUBULURE doit etre renseigné. +"""), + +3: _(""" +EQUILIBRE[NOEUD] : on attend P1_CORP ou P2_CORP. +"""), + +4: _(""" +Il faut préciser un noeud pour EFFE_FOND. +"""), + +5: _(""" +PRES_REP[NOEUD] : on attend P1_CORP ou P2_CORP. +"""), + +6: _(""" +On ne peut appliquer un EFFE_FOND sur PRES_REP[NOEUD] car ce noeud est bloqué" +"""), + +7: _(""" +TORS_CORP[NOEUD] : on attend P1_CORP ou P2_CORP. +"""), + +8: _(""" +On ne peut appliquer un torseur sur TORS_CORP[NOEUD] car ce noeud est bloqué. +"""), + +9: _(""" +Si TYPE_MAILLAGE sain : mécanique de la rupture impossible. +"""), + +10: _(""" +Mot-clef obligatoire avec cette option. +"""), + +11: _(""" +Impression de résultats demandée sans préciser le nom des champs cf. la documentation utilisateur : U4.PC.20. +"""), + +12: _(""" +Les piquages pénetrants sont autorisés uniquement avec les soudures de type 1. +"""), + +13: _(""" + La valeur de Z_MAX (cote maximale de la tubulure) est inférieure à la longueur + d'amortissement calculée : + Z_MAX fournie : %(r1)f + Z_MAX calculee : %(r2)f +-> Risque et Conseil : + La longueur d'amortissement est liée à l'onde de flexion se propageant depuis le piquage. + Si la longueur de la tubulure est inférieure à cette longueur, le calcul des contraintes + dans le piquage ne sera pas indépendant du mode d'application des conditions aux limites. +"""), + +14: _(""" + Erreur donnees + Dans le cas de fissures inclinees debouchant en peau interne avec + piquage penetrant, le jeu doit etre nul. +"""), + +15: _(""" + Erreur donnees + Dans le cas de fissures internes (NON_DEB) le ligament inférieur est obligatoire. +"""), + +16: _(""" +Dans le cas de fissures internes (NON_DEB) le ligament est trop petit. +"""), + +17: _(""" +Dans le cas de fissures internes (NON_DEB) le ligament est trop grand. +"""), + +18: _(""" +Dans le cas de fissures courte il faut préciser la longueur. +"""), + +19: _(""" +Dans le cas de la fissure longue il faut préciser la longueur ou axis=oui. +"""), + +20: _(""" +Fissure axisymetrique : le mot clef ne doit pas etre renseigné. +"""), + +21: _(""" +Seuls gibi98 et gibi2000 sont appelables. +"""), + +22: _(""" +Une interpénétration des lèvres est détectée pour le numéro d'ordre %(i1)d : sur les +%(i2)d noeuds de chaque lèvre, %(i3)d noeuds s'interpénètrent. +-> Risque et Conseil : +Le contact n'est pas pris en compte dans le calcul. Le taux de restitution de l'énergie G +est donc positif y compris là où la fissure tend à se refermer, ce qui peut conduire à +des résultats trop pénalisants. +Pour prendre en compte le contact entre les lèvres, il faut lancer le calcul hors macro. +"""), + +23: _(""" + La valeur de X_MAX (cote maximale du corps) est inférieure à la longueur d'amortissement + calculée : + X_MAX fournie : %(r1)f + X_MAX calculee : %(r2)f +-> Risque et Conseil : + La longueur d'amortissement est liée à l'onde de flexion se propageant depuis le piquage. + Si la longueur ddu corps est inférieure à cette longueur, le calcul des contraintes + dans le piquage ne sera pas indépendant du mode d'application des conditions aux limites. +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/assembla.py b/Aster/Cata/cataSTA9/Messages/assembla.py index 73327d4b..4bc9c0cc 100644 --- a/Aster/Cata/cataSTA9/Messages/assembla.py +++ b/Aster/Cata/cataSTA9/Messages/assembla.py @@ -1,8 +1,8 @@ -#@ MODIF assembla Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF assembla Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,313 +20,246 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - le type : %(k1)s de la matrice est incorrect. on attend : "s"pour une resolution par methode iterative -"""), - -2: _(""" - matrice non symetrique pour l'instant proscrite avec feti -"""), +1 : _(""" + Erreur d'utilisation : + Pour les méthodes itératives GCPC et FETI, on ne peut pas encore utiliser + de matrice non-symétrique. -3: _(""" - le parametre : %(k1)s est incorrect. on attend : "cumu" ou "zero" + Conseil : Changer de solveur """), -4: _(""" - on ne peut assembler que des matrices reelles ou complexes +4 : _(""" + on ne peut assembler que des matrices réelles ou complexes """), -5: _(""" - modeles discordants +5 : _(""" + modèles discordants """), -6: _(""" - feti: maille positive avec ligrel de charge ! +6 : _(""" + FETI : maille positive avec LIGREL de charge ! """), -7: _(""" - feti: maille negative avec ligrel de modele ! +7 : _(""" + FETI : maille négative avec LIGREL de modele ! """), -8: _(""" - le motcle : %(k1)s est incorrect. on attend : "cumu" ou "zero" +8 : _(""" + le motcle : %(k1)s est incorrect. + on attend : "CUMU" ou "ZERO" """), -9: _(""" - on ne trouve pas le cmp "lagr" dans la grandeur +9 : _(""" + on ne trouve pas la composante "LAGR" dans la grandeur """), -10: _(""" +10 : _(""" il est imprevu d avoir le cmp "lagr" au dela de 30 """), -11: _(""" - on ne peut assembler que des vecteurs reels ou complexes -"""), - -12: _(""" - le maillage %(k1)s contient des super-mailles pour l'instant, elles sont proscrites avec feti +11 : _(""" + on ne peut assembler que des vecteurs réels ou complexes """), -13: _(""" - ichin = 0 +12 : _(""" + le maillage %(k1)s contient des super-mailles + pour l'instant, elles sont proscrites avec FETI """), -14: _(""" - ichin < -2 +13 : _(""" + ICHIN = 0 """), -15: _(""" - s => ichin=/0 +14 : _(""" + ICHIN < -2 """), -16: _(""" - action:e/l/s +15 : _(""" + S => ICHIN=/0 """), -17: _(""" - message vide +16 : _(""" + action : E/L/S """), -18: _(""" - incoherence des matr_elem +18 : _(""" + incohérence des MATR_ELEM """), -19: _(""" - matr_elem sans sss et sans liste_resu +19 : _(""" + MATR_ELEM sans SSS et sans LISTE_RESU """), -20: _(""" - - aucun ligrel dans les resuelem +20 : _(""" + - aucun LIGREL dans les RESUELEM """), -21: _(""" - modeles diff. +21 : _(""" + modèles différents """), -22: _(""" - les valeurs de la matrice %(k1)s doivent etre reelles, on ne traite pas encore les matrices non-symetriques complexes. +24 : _(""" + le nombre maximum de composante de la grandeur est nul """), -23: _(""" - la matrice %(k1)s a transformer en matrice non-symetrique doit etre symetrique. +25 : _(""" + le nombre d'entiers codes est nul """), -24: _(""" - le nombre maxi de composante de la grandeur est nul +26 : _(""" + le noeud: %(k1)s composante: %(k2)s est bloqué plusieurs fois. """), -25: _(""" - le nombre d"entiers codes est nul +27 : _(""" + l'entier décrivant la position du premier lagrange ne peut etre égal qu'à +1 ou -1 . """), -26: _(""" - le noeud: %(k1)s composante: %(k2)s est bloque plusieurs fois. +28 : _(""" + le nombre de noeuds effectivement numerotés ne correspond pas au nombre + de noeuds à numéroter """), -27: _(""" - l'entier decrivant la postion du premier lagrange ne peut etre egal qu'a +1 ou -1 . +29 : _(""" + - aucun LIGREL """), -28: _(""" - le nombre de noeuds effectivement numerotes ne correspond pas au nombre de noeuds a numeroter +30 : _(""" + plusieurs phénomènes """), -29: _(""" - - aucun ligrel +31 : _(""" + les DDL du NUME_DDL ont bougé """), -30: _(""" - plusieurs "phenomenes" stop +32 : _(""" + phénomène non prévu dans le MOLOC de NUMER2 pour DD """), -31: _(""" - les ddls du nume_ddl ont bouge. +33 : _(""" + le .PRNO est construit sur plus que le maillage """), -32: _(""" - phenomene non prevu dans le moloc de numer2 pour dd +34 : _(""" + le .PRNO est de dimension nulle """), -33: _(""" - le .prno est construit sur plus que le maillage +35 : _(""" + il n y a pas de modèle dans la liste %(k1)s .NUME.LILI """), -34: _(""" - le .prno est de dimension nulle -"""), - -35: _(""" - il n y a pas de modele dans la liste %(k1)s .nume.lili -"""), - -36: _(""" +36 : _(""" noeud inexistant """), -37: _(""" - methode : %(k1)s inconnue. +37 : _(""" + méthode : %(k1)s inconnue. """), -38: _(""" +38 : _(""" noeud incorrect """), -39: _(""" - le phenome %(k1)s n'est pas admis pour la symetrisation des matrices.seuls sont admis les phenomenes "mecanique" et "thermique" . +39 : _(""" + le phénomène %(k1)s n'est pas admis pour la symétrisation des matrices. + seuls sont admis les phénomènes "MECANIQUE" et "THERMIQUE" """), -40: _(""" - erreur programmeur : certains type_element ne savent pas calculer les options syme_m?ns_r +41 : _(""" + le noeud : %(i1)d du RESUEL : %(k1)s du VECT_ELEM : %(k2)s + n'a pas d'adresse dans : %(k3)s """), -41: _(""" - 1--- le noeud : %(i1)d du resuel : %(k1)s du vect_elem : %(k2)s - n''a pas d''adresse dans : %(k3)s +42 : _(""" + le noeud : %(i1)d du RESUEL : %(k1)s du VECT_ELEM : %(k2)s + a une adresse : %(i2)d > NEQUA : %(i3)d """), -42: _(""" - 2--- le noeud : %(i1)d du resuel : %(k1)s du vect_elem : %(k2)s - a 1 adresse : %(i2)d - > nequa : %(i3)d +43 : _(""" + NDDL : %(i1)d > NDDL_MAX : %(i2)d """), -43: _(""" - 3--- nddl : %(i1)d > nddl_max : %(i2)d +44 : _(""" + --- VECT_ELEM : %(k1)s + --- RESU : %(k2)s + --- NOMLI : %(k3)s + --- GREL numéro : %(i1)d + --- MAILLE numéro : %(i2)d + --- NNOE par NEMA : %(i3)d + --- NNOE par NODE : %(i4)d """), -44: _(""" - 4--- vect_elem : %(k1)s --- resu : %(k2)s --- nomli : %(k3)s - --- grel numero : %(i1)d - --- maille numero : %(i2)d - --- nnoe par nema : %(i3)d - --- nnoe par node : %(i4)d -"""), +45 : _(""" +Erreur Programmeur ou utilisateur : +----------------------------------- + Le sd_ligrel : %(k1)s référencé par le noeud supplém. : %(i1)d + de la maille : %(i2)d du sd_resuelem : %(k2)s du sd_vect_elem : %(k3)s + n'est pas présent dans le sd_nume_ddl : %(k4)s -45: _(""" - 5--- le ligrel : %(k1)s ref. par le noeud supl. : %(i1)d - --- de la maille : %(i2)d - du resuelem : %(k2)s - du vect_elem : %(k3)s - --- n"est pas present dans la numerotation : %(k4)s -"""), +Risques & conseils : +-------------------- + Si vous utilisez la commande MACRO_ELAS_MULT : + Si %(k5)s est une charge contenant des conditions aux limites dualisées (DDL_IMPO, ...), + Etes-vous sur d'avoir indiqué cette charge derrière le mot clé CHAR_MECA_GLOBAL ? + En effet, il faut indiquer TOUTES les charges dualisées derrière CHAR_MECA_GLOBAL. -46: _(""" - 6--- nddl : %(i1)d > nddl_max : %(i2)d + Si vous utilisez directement la commande ASSE_VECTEUR : + Si %(k5)s est une charge contenant des conditions aux limites dualisées (DDL_IMPO, ...), + Etes-vous sur d'avoir indiqué cette charge derrière le mot clé CHARGE + de la commande CALC_MATR_ELEM/OPTION='RIGI_MECA' ? """), -47: _(""" - 7--- nddl : %(i1)d > nddl_max : %(i2)d +46 : _(""" + --- NDDL : %(i1)d > NDDL_MAX : %(i2)d """), -48: _(""" - 8--- le noeud : %(i1)d du resuel : %(k1)s du vect_elem : %(k2)s - --- n''a pas d''adresse dans la numerotation : %(k3)s +47 : _(""" + --- NDDL : %(i1)d > NDDL_MAX : %(i2)d """), -49: _(""" - 9--- le noeud : %(i1)d du resuel : %(k1)s du vect_elem : %(k2)s - --- a une adresse : %(i2)d - > nequa : %(i3)d +48 : _(""" + --- le noeud : %(i1)d du RESUEL : %(k1)s du VECT_ELEM : %(k2)s + --- n'a pas d''adresse dans la numérotation : %(k3)s """), -50: _(""" - 11 nddl : %(i1)d > nddl_max : %(i2)d +49 : _(""" + --- le noeud : %(i1)d du RESUEL : %(k1)s du VECT_ELEM : %(k2)s + --- a une adresse : %(i2)d > NEQUA : %(i3)d """), - - - - - -52: _(""" - 12 nddl : %(i1)d > nddl_max : %(i2)d +63 : _(""" + erreur sur le premier lagrange d'une LIAISON_DDL + on a mis 2 fois le premier lagrange : %(i1)d + derrière le noeud : %(i2)d """), -53: _(""" - 13- nddl : %(i1)d > nddl_max : %(i2)d +64 : _(""" + erreur sur le 2ème lagrange d'une LIAISON_DDL + on a mis 2 fois le 2ème lagrange : %(i1)d + derrière le noeud : %(i2)d """), +65 : _(""" + incohérence dans le dénombrement des ddls + nombre de ddl a priori : %(i1)d + nombre de ddl a posteriori: %(i2)d +"""), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -63: _(""" - erreur sur le premier lagrange d"une liaison_ddl - on a mis 2 fois le premier lagrange : %(i1)d - derrire le noeud : %(i2)d +66 : _(""" + Problème dans NULILI.F: on a au moins deux maillages différents: + - maillage 1: %(k1)s + - maillage 2: %(k2)s """), -64: _(""" - erreur sur le 2 eme lagrange d"une liaison_ddl - on a mis 2 fois le 2eme lagrange : %(i1)d - derrire le noeud : %(i2)d +67 : _(""" + Problème dans NUMERO.F avec FETI: L'objet PROF_CHNO.NUEQ est différent de + l'identité pour i= %(i1)d on a NUEQ(i)= %(i2)d """), -65: _(""" - incoherence dans le denombrement des ddlsnbre de ddl a priori : %(i1)d - nbre de ddl a posteriori: %(i2)d +68 : _(""" + Problème dans NUMERO.F avec FETI: Incohérence entre la SD_FETI et le paramètrage + de l'opérateur. Nombre d'incohérences= %(i1)d """), } diff --git a/Aster/Cata/cataSTA9/Messages/cable0.py b/Aster/Cata/cataSTA9/Messages/cable0.py new file mode 100644 index 00000000..f0d9dce5 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/cable0.py @@ -0,0 +1,35 @@ +#@ MODIF cable0 Messages DATE 16/10/2007 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +INST_FIN plus petit que INST_INIT. +"""), + +2: _(""" + + --------------------------------------------------------------------------- + DEFI_CABLE_BP - Erreur : MAILLE INTERDIT - UTILISER GROUP_MA + --------------------------------------------------------------------------- +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/calculel.py b/Aster/Cata/cataSTA9/Messages/calculel.py index 112489b0..374146dc 100644 --- a/Aster/Cata/cataSTA9/Messages/calculel.py +++ b/Aster/Cata/cataSTA9/Messages/calculel.py @@ -1,8 +1,8 @@ -#@ MODIF calculel Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF calculel Messages DATE 19/05/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,403 +20,249 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - trop de parametres. -"""), +2 : _(""" +Erreur Utilisateur : + Quand on utilise AFFE_CHAR_CINE/EVOL_IMPO, c'est le champ de l'evol_xxx correspondant + au 1er instant qui impose sa "loi" : tous les ddls de ce champ seront imposés pour tous + les instants du calcul. + + Malheureusement, on ne trouve pas un ddl dans l'evol_xxx %(k1)s : + instant : %(r1)f noeud : %(i1)d cmp : %(k2)s -2: _(""" - stop 1 +Risques & conseils : + Assurez-vous que l'évolution imposée %(k1)s concerne les memes ddls pour tous les instants. """), -3: _(""" +3 : _(""" la grandeur : %(k1)s n existe pas dans le catalogue des grandeurs. """), -4: _(""" +4 : _(""" incoherence des maillages : %(k1)s et %(k2)s """), -5: _(""" - stop 1a +5 : _(""" + Erreur de programmation (ou d'utilisation ?) : + Le changement de discrétisation : %(k1)s n'est pas encore programmé. + Risques et conseils : + Il y a peut-etre une demande d'évolution à émettre ... """), -6: _(""" - stop 1b -"""), +6 : _(""" + Erreur d'utilisation : + On n'arrive pas à construire correctement le champ contenant le nombre de sous-points + des éléments finis (coques multi-couches, tuyaux, poutre multi-fibres, ...) du modèle %(k1)s. -7: _(""" - stop 1c + Risques & conseils : + Cette erreur intervient lorsque l'on ne définit pas TOUTES les caractéristiques élémentaires + dans le meme AFFE_CARA_ELEM. + Pour les commandes de calcul, il ne faut qu'un seul MODELE et qu'un seul CARA_ELEM. """), - -9: _(""" - stop 4 +8 : _(""" + sur la maille %(k1)s le calcul est thermo mécanique. Or il manque la température de référence. + On ne peut donc pas calculer de déformation thermique. """), -10: _(""" - stop 5 +9 : _(""" + Erreur d'utilisation dans AFFE_CHAR_CINE : + Aucun des ddls que l'on souhaite bloquer n'appartient au modèle. + La charge cinématique produite est donc vide. + + Risques & Conseils : + Vérifier le nom des ddls portés par les noeuds des éléments de votre modèle. """), -11: _(""" +11 : _(""" le mode_local: %(k1)s ne doit pas etre vecteur ou matrice. """), -12: _(""" +12 : _(""" le mode_local: %(k1)s ne doit pas etre "diff__". """), -13: _(""" - stop -"""), - -14: _(""" +14 : _(""" incompatibilite des type_champ ("elga"/"elno") pour l option : %(k1)s entre les 2 type_elem : %(k2)s et %(k3)s """), +15 : _(""" + sur la maille %(k1)s le calcul est thermo mécanique. Or il manque le parametre matériau + %(k2)s . On ne peut donc pas calculer de déformation thermique. +"""), - - - - -16: _(""" +16 : _(""" type de maille indisponible """), -17: _(""" +17 : _(""" type de champ inconnu """), -18: _(""" - la partie reelle et imaginaire du champ a assembler ne sont pas du meme type (l un est un cham_no et l autre un cham_elem -"""), - -19: _(""" - champ incompatible +18 : _(""" + les parties réelle et imaginaire du champ à assembler ne sont pas du même type + l'un est un CHAM_NO et l'autre un CHAM_ELEM """), -20: _(""" +20 : _(""" le champ de grandeur %(k1)s ne respecte pas le format xxxx_r """), -21: _(""" - les champs reel et imaginaire a assembler ne contiennent pas la meme grandeur +21 : _(""" + les champs réel et imaginaire à assembler ne contiennent pas la même grandeur """), -22: _(""" - probleme dans le catalogue des grandeurs simples, la grandeur %(k1)s ne possede pas le meme nombre de champ que son homologue complexe %(k2)s +22 : _(""" + problème dans le catalogue des grandeurs simples + la grandeur %(k1)s ne possède pas le même nombre de champs que son homologue complexe %(k2)s """), -23: _(""" - probleme dans le catalogue des grandeurs simples, la grandeur %(k1)s ne possede pas les memes champs que son homologue complexe %(k2)s +23 : _(""" + problème dans le catalogue des grandeurs simples + la grandeur %(k1)s ne possède pas les mêmes champs que son homologue complexe %(k2)s """), -24: _(""" - les champs a assembler n ont pas la meme longueur +24 : _(""" + les champs à assembler n'ont pas la même longueur """), -25: _(""" - type de champ incorrect +27 : _(""" + CHAM_ELEM à combiner incompatible """), -26: _(""" - longueurs des cham_elem incompatibles -"""), - -27: _(""" - cham_elem a combiner incompatible -"""), - -28: _(""" - %(k1)s indisponible -"""), - -29: _(""" +29 : _(""" option inconnue au catalogue : %(k1)s """), -30: _(""" +30 : _(""" -> Le TYPE_ELEMENT %(k1)s ne sait pas encore calculer l'OPTION: %(k2)s. On ne calcule donc rien sur les éléments de ce type. -> Risque & Conseil : Vérifiez que l'option incomplètement calculée est bien une option de post-traitement et que le déficit de calcul n'entraine pas de résultats faux. - """), -32: _(""" - dvp : Valeur interdite +31 : _(""" + la température n'est pas correctement renseignée """), -34: _(""" - le calcul de l'option : %(k1)s n'est possible pour aucun des types d'elements du ligrel. +34 : _(""" + le calcul de l'option : %(k1)s + n'est possible pour aucun des types d'éléments du LIGREL. """), -35: _(""" - erreur programmeur : trop de champs "in" -"""), - -36: _(""" - On ne sait pas faire. -"""), - -37: _(""" +37 : _(""" Erreur dans la lecture des CHAR_CINE ou dans les CHAR_CINE """), -38: _(""" - la carte concerne aussi des mailles tardives qui sont oubliees. -"""), - -39: _(""" - type scalaire inconnu +38 : _(""" + la carte concerne aussi des mailles tardives qui sont oubliées """), -40: _(""" - Erreur Programmeur : type_scalaire: %(k1)s non autorisé (I/R/C), -"""), - -41: _(""" - Erreur Programmeur : type_scalaire: %(k1)s non autorisé (I/R/C/K8/K16/K24), -"""), - -42: _(""" +42 : _(""" Erreur Programmeur: - Incoherence fortran/catalogue type_element: %(k1)s option: %(k2)s - La routine texxxx.f correspondant au calcul élémentaire ci-dessus est bugguée : + Incohérence fortran/catalogue + TYPE_ELEMENT : %(k1)s + OPTION : %(k2)s + La routine texxxx.f correspondant au calcul élémentaire ci-dessus est bugguée Elle écrit en dehors de la zone allouée au paramètre (OUT) %(k3)s. """), -43: _(""" - Arret du aux erreurs precedentes. -"""), - -44: _(""" - Code interdit: %(k1)s -"""), - -45: _(""" - Erreur Programmeur : - Transformation non programmée : émettre une fiche d'évolution -"""), - -46: _(""" - a faire ... : émettre une fiche d'évolution -"""), - -47: _(""" - le cham_elem: %(k1)s n'existe pas. -"""), - -48: _(""" - le cham_elem: %(k1)s n'a pas le meme nombre de cmps dynamiques sur tous ses elements. -"""), - -49: _(""" - le cham_elem : %(k1)s a des sous-points. -"""), - -50: _(""" - type de verif. inconnu. -"""), - -51: _(""" - argument prol0 invalide. -"""), - -52: _(""" - la cmp: %(k1)s n'appartient pas a la grandeur: %(k2)s -"""), - -53: _(""" - option : %(k1)s inexistante dans les catalogues. -"""), - -54: _(""" - le parametre: %(k1)s de l'option: %(k2)s n'est pas connu des type_elem du ligrel: %(k3)s +47 : _(""" + le CHAM_ELEM: %(k1)s n'existe pas. """), -55: _(""" - il manque la cmp: %(k1)s +48 : _(""" + le CHAM_ELEM: %(k1)s n'a pas le même nombre de composantes dynamiques sur tous ses éléments. """), -56: _(""" - le ligrel contient des mailles tardives, +49 : _(""" + le CHAM_ELEM : %(k1)s a des sous-points. """), -57: _(""" - nombres de points differents pour la maille: %(k1)s cham_elem de: %(k2)s +52 : _(""" + La composante: %(k1)s n'appartient pas à la grandeur: %(k2)s + Champ : %(k4)s """), -58: _(""" - il manque la cmp: %(k1)s sur la maille: %(k2)s +53 : _(""" + Option : %(k1)s inexistante dans les catalogues. + Champ : %(k4)s """), -59: _(""" - champ 1 inexistant +54 : _(""" + Le paramètre: %(k1)s de l'option: %(k2)s n'est pas connu des TYPE_ELEM du LIGREL: %(k3)s + Champ : %(k4)s """), -60: _(""" - Matrice noeud->gauss nécessaire +55 : _(""" + Erreur utilisateur : + On cherche à créer un CHAM_ELEM mais sur certains points, on ne trouve pas la composante : %(k1)s + Champ : %(k4)s + Risques & conseils : + Si la commande que vous exécutez comporte le mot clé PROL_ZERO='OUI', vous devriez peut-etre l'utiliser. """), -61: _(""" - Erreur Programmeur : - Argument cesmod obligatoire +56 : _(""" + Le LIGREL contient des mailles tardives + Champ : %(k4)s """), -62: _(""" - champ inexistant +57 : _(""" + Nombres de points différents pour la maille: %(k1)s + CHAM_ELEM de : %(k2)s + Champ : %(k4)s """), -63: _(""" - on ne traite que des champs "ELNO" +58 : _(""" + Il manque la composante : %(k1)s sur la maille : %(k2)s + Champ : %(k4)s """), -64: _(""" - le nombre de sous-points ne peut etre >1 -"""), - -65: _(""" - des reels ou des complexes svp ! -"""), - -66: _(""" - TYPCES invalide -"""), - -67: _(""" +67 : _(""" grandeur: %(k1)s inconnue au catalogue. """), -68: _(""" - numero de maille invalide: %(k1)s (<1 ou >nbma) -"""), - -69: _(""" - numero de point invalide: %(k1)s (<1 ou >nbpt) pour la maille: %(k2)s -"""), - -70: _(""" - numero de sous_point invalide: %(k1)s (<1 ou >nbspt) pour la maille: %(k2)s et pour le point: %(k3)s -"""), - -71: _(""" - numero de cmp invalide: %(k1)s (<1 ou >nbcmp) pour la maille: %(k2)s pour le point: %(k3)s et pour le sous_point: %(k4)s -"""), - -72: _(""" - nbchs >0 svp +68 : _(""" + numéro de maille invalide : %(k1)s (<1 ou >nbma) """), -73: _(""" - maillages differents. +69 : _(""" + numéro de point invalide : %(k1)s (<1 ou >nbpt) + pour la maille : %(k2)s """), -74: _(""" - grandeurs differentes. +70 : _(""" + numéro de sous_point invalide : %(k1)s (<1 ou >nbspt) + pour la maille : %(k2)s + pour le point : %(k3)s """), -75: _(""" - types differents (CART/ELNO/ELGA). +71 : _(""" + numéro de composante invalide : %(k1)s (<1 ou >nbcmp) + pour la maille : %(k2)s + pour le point : %(k3)s + pour le sous-point : %(k4)s """), -76: _(""" - nombre de points differents. +91 : _(""" + incohérence des familles de points de Gauss pour la maille %(k1)s + ( %(k2)s / %(k3)s ) """), -77: _(""" - nombre de sous-points differents. +92 : _(""" + type scalaire du CHAM_NO : %(k1)s non réel. """), -78: _(""" - cumul interdit sur ce type non-numerique +93 : _(""" + type scalaire du NUME_DDL : %(k1)s non réel. """), -79: _(""" - i/r/k8/k16 svp +99 : _(""" + melange de CHAM_ELEM_S et CHAM_NO_S """), -80: _(""" - trop de cmps (997) -"""), - -81: _(""" - maillages differents -"""), - -82: _(""" - nbcmp doit etre >=0 -"""), - -83: _(""" - nbma doit etre >=0 -"""), - -84: _(""" - stop nomgd -"""), - -85: _(""" - stop nbpt -"""), - -86: _(""" - stop nbsp -"""), - -87: _(""" - stop iad2 -"""), - -88: _(""" - caractere illicite. -"""), - -89: _(""" - on ne sait pas encore traiter les resuelem -"""), - -90: _(""" - type de champ interdit: %(k1)s -"""), - -91: _(""" - incoherence des familles de points de gauss pour la maille %(k1)s ( %(k2)s / %(k3)s ) -"""), - -92: _(""" - type scalaire du cham_no : %(k1)s non reel. -"""), - -93: _(""" - type scalaire du nume_ddl : %(k1)s non reel. -"""), - -94: _(""" - si ncorr=0, les grandeurs doivent etre identiques : %(k1)s , %(k2)s -"""), - -95: _(""" - ncorr doit etre pair. -"""), - -96: _(""" - gauss -> noeud a faire ... -"""), - -97: _(""" - il faut modele -"""), - -98: _(""" - non programme: %(k1)s -"""), - -99: _(""" - melange de cham_elem_s et cham_no_s -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/calculel2.py b/Aster/Cata/cataSTA9/Messages/calculel2.py index 27ddf62a..f46ff3d5 100644 --- a/Aster/Cata/cataSTA9/Messages/calculel2.py +++ b/Aster/Cata/cataSTA9/Messages/calculel2.py @@ -1,4 +1,4 @@ -#@ MODIF calculel2 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF calculel2 Messages DATE 19/05/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -23,86 +23,52 @@ def _(x) : return x cata_msg={ 2: _(""" - le champ_s: %(k1)s est a la fois cham_elem_s et cham_no_s. + le CHAMP_S: %(k1)s est a la fois CHAM_ELEM_S et CHAM_NO_S. """), 3: _(""" - le champ_s: %(k1)s n'existe pas. -"""), - -4: _(""" - types scalaires(i/r/c/...) differents pour : %(k1)s et %(k2)s -"""), - -5: _(""" - arret suite a l'alarme precedente. -"""), - -6: _(""" - on ne sait pas renommer la cmp: %(k1)s + le CHAMP_S: %(k1)s n'existe pas. """), 7: _(""" - trop d'antecedents. verifiez si le maillage de l'interface ne contient pas de noeuds coincidents ou diminuez dist_refe. + trop d'antécédents + vérifiez si le maillage de l'interface ne contient pas de noeuds coincidents ou diminuez DIST_REFE. """), 8: _(""" - %(k1)s valeurs de chamno de deplacement n'ont pas ete recopiees sur %(k2)s noeuds a affecter ce qui peut entrainer des erreurs de calcul sur la masse ajoutee des sous structures deduites par rotation et translation definies dans le modele generalise. augmentez dist_refe ou assurez vous de l' invariance du maillage de structure par la translation et la rotation definies dans le modele generalise. + %(k1)s valeurs de CHAMNO de deplacement n'ont pas ete recopiees sur %(k2)s noeuds + a affecter ce qui peut entrainer des erreurs de calcul sur la masse ajoutee des sous structures + deduites par rotation et translation definies dans le modele generalise. augmentez dist_refe + ou assurez vous de l' invariance du maillage de structure par la translation et la rotation + definies dans le modele generalise. """), 9: _(""" - plus de 50 pour cent des valeurs de chamno de deplacement n'ont pas ete recopiees ce qui peut entrainer des erreurs graves de calcul sur la masse ajoutee des sous structures deduites par rotation et translation definies dans le modele generalise. augmentez dist_refe!!!. + -> plus de 50 %% des valeurs de CHAM_NO de déplacement n'ont pas été recopiées + ce qui peut entrainer des erreurs graves de calcul sur la masse ajoutée des + sous structures déduites par rotation et translation définies dans le modèle généralisé + -> Risque & Conseil : + augmentez DIST_REFE """), 10: _(""" - trop de noeuds affectes + trop de noeuds affectés """), 11: _(""" - seulement reel svp + Erreur d'utilisation : + Le maillage associé au modèle : %(k1)s + n'est pas le meme que celui du champ de matériaux : %(k2)s """), 12: _(""" - le cham_no est de longueur nulle. + Le CHAM_NO %(k3)s est vide. """), 13: _(""" - il manque la cmp: %(k1)s sur le noeud: %(k2)s + Il manque la composante: %(k1)s sur le noeud: %(k2)s pour le CHAM_NO: %(k3)s """), -14: _(""" - ncmp doit etre >0 -"""), - - - - - - - - -16: _(""" - reel ou k8 svp -"""), - -17: _(""" - nbno doit etre >=0 -"""), - -18: _(""" - arret suite a l'erreur precedente. -"""), - - - - - - - - - - - 21: _(""" grandeur : %(k1)s inexistante au catalogue """), @@ -116,7 +82,8 @@ cata_msg={ """), 24: _(""" - on traite un superelement et le noeud courant n'est ni un noeud lagrange, ni un noeud physqiue du maillage. + on traite un superelement et le noeud courant n'est ni un noeud lagrange, + ni un noeud physique du maillage. """), 25: _(""" @@ -128,7 +95,9 @@ cata_msg={ """), 27: _(""" - le maillage associe au champ: %(k1)s est different de celui associe au ligrel: %(k2)s + Erreur utilisateur : + Le maillage associé au champ: %(k1)s (%(k3)s) + est different de celui associe au ligrel: %(k2)s (%(k4)s) """), 28: _(""" @@ -136,7 +105,8 @@ cata_msg={ """), 29: _(""" - la grandeur associee au champ %(k1)s : %(k2)s n est pas celle associee au parametre %(k3)s : %(k4)s (option: %(k5)s + la grandeur associée au champ %(k1)s : %(k2)s + n'est pas celle associée au paramètre %(k3)s : %(k4)s (option: %(k5)s """), 30: _(""" @@ -152,38 +122,33 @@ cata_msg={ """), 33: _(""" - pour le modele %(k1)s on ne peut pas visualiser les champs ensemble %(k2)s ... car les familles de pg sont differentes + pour le modele %(k1)s on ne peut pas visualiser les champs ensemble %(k2)s ... + car les familles de pg sont differentes """), - - - - - - - 35: _(""" - aucun element du modele n'est visualisable avec ecla_pg. + aucun élément du modèle n'est visualisable avec ECLA_PG """), 36: _(""" - on ne trouve aucun point de gauss. + on ne trouve aucun point de Gauss """), 37: _(""" - le type de resu_init est different de celui du resultat. + le type de RESU_INIT est différent de celui du résultat. """), 38: _(""" - la liste de numeros d ordre est vide. + la liste de numéros d'ordre est vide. """), 39: _(""" - les seuls champs autorises pour ecla_pg sont les champs reels. + les seuls champs autorisés pour ECLA_PG sont les champs réels. """), 40: _(""" - le champ: %(k1)s a des elements ayant des sous-points. ces elements ne seront pas traites. + le champ: %(k1)s a des éléments ayant des sous-points + ces elements ne seront pas traités """), 41: _(""" @@ -191,18 +156,14 @@ cata_msg={ """), 42: _(""" - le type_elem: %(k1)s n'a pas le nombre de points de gauss declare dans la routine eclau1. nom_cham= %(k2)s + le TYPE_ELEM: %(k1)s n'a pas le nombre de points de Gauss déclaré dans la routine ECLAU1 + nom_cham= %(k2)s """), 43: _(""" nombre de noeuds > 27 """), - - - - - 45: _(""" famille de pg "liste" interdite: %(k1)s """), @@ -223,51 +184,24 @@ cata_msg={ carte inexistante. """), -50: _(""" - 3 -"""), - 51: _(""" cham_elem etendu a faire ... """), 52: _(""" - probleme noeud tardif pour un champ a representation constante -"""), - -53: _(""" - inutile de comprimer 1 telle carte -"""), - -54: _(""" - on devrait avoir icode=3 pour des mailles tardives. + probleme noeud tardif pour un champ à représentation constante """), 55: _(""" - erreur dans l'extraction d'un resuelem pour le grel: %(k1)s le champ n'existe pas + erreur dans l'extraction d'un resuelem pour le grel : %(k1)s + le champ n'existe pas """), 56: _(""" - erreur lors d'une extraction: le champ associe au parametre : %(k1)s n'est pas dans la liste des champs parametres. -"""), - -57: _(""" - sa21 -"""), - -58: _(""" - sa22 -"""), - -59: _(""" - sa23 + erreur lors d'une extraction: + le champ associe au parametre : %(k1)s n'est pas dans la liste des champs parametres. """), - - - - - 61: _(""" Erreur développeur : L'option que l'on calcule ne connait pas le paramètre : %(k1)s @@ -298,70 +232,28 @@ cata_msg={ """), -65: _(""" - erreur programmeur 3 -"""), - -66: _(""" - type_scalaire inconnu: %(k1)s -"""), - -67: _(""" - non programme. -"""), - 68: _(""" - maille partiellement affectee. + maille partiellement affectée. """), 69: _(""" - le parametre: %(k1)s n'est pas un parametre de l'option: %(k2)s + le parametre: %(k1)s n'est pas un paramètre de l'option: %(k2)s """), 70: _(""" - le parametre: %(k1)s n'est pas un parametre de l'option: %(k2)s pour le type_element: %(k3)s + le parametre: %(k1)s n'est pas un paramètre de l'option: %(k2)s pour le type_element: %(k3)s """), 71: _(""" - erreur :on ne trouve pas dans les arguments de la routine calcul de champ a associer au parametre: %(k1)s (option: %(k2)s type_element: %(k3)s ) -"""), - -72: _(""" - impossible... + on ne trouve pas dans les arguments de la routine CALCUL de champ à associer au parametre: %(k1)s + - option: %(k2)s + - type_element: %(k3)s """), 73: _(""" - erreur :on n'a pas pu extraire toutes les cmps voulues du champ associe au parametre: %(k1)s (option: %(k2)s type_element: %(k3)s ) -"""), - -74: _(""" - objet: %(k1)s introuvable. -"""), - -75: _(""" - long=8,16 ou 24 -"""), - -76: _(""" - erreur pgmeur: lk3 pas assez grand. -"""), - - - - - - - - - - - -79: _(""" - ce chargement n est pas prevu en lagrange -"""), - -80: _(""" - le calcul lagrangien avec les temperatures n'est pas encore disponible + on n'a pas pu extraire toutes les cmps voulues du champ associé au paramètre: %(k1)s + - option: %(k2)s + - type_element: %(k3)s ) """), 81: _(""" @@ -369,23 +261,11 @@ cata_msg={ """), 82: _(""" - il faut un modele. -"""), - -83: _(""" - il n'y a pas de rigidite sur le modele. -"""), - -84: _(""" - il n'y a pas de masse sur le modele. -"""), - -85: _(""" - g_bili : champ initial impossible + il faut un MODELE """), 86: _(""" - compor svp! + il faut fournir COMPOR """), 87: _(""" @@ -393,40 +273,32 @@ cata_msg={ """), 88: _(""" - option %(k1)s non disponible sur les elements du modele- pas de champ cree + option %(k1)s non disponible sur les éléments du modèle + pas de champ créé """), - - - - - 92: _(""" - votre chargement contient plus d'une charge repartie. le calcul n'est pas possible pour les modeles de poutre. + votre chargement contient plus d'une charge répartie + le calcul n'est pas possible pour les modèles de poutre. """), 93: _(""" -> Vous avez renseigné un des mots-clés fonc_mult_*, coef_mult_*, - phas_deg, puis_puls, or votre charge ne contient pas d'effort réparti + PHAS_DEG, PUIS_PULS, or votre charge ne contient pas d'effort réparti sur des poutres. Ces mots-clés seront donc ignorés. -> Risque & Conseil : - """), 94: _(""" - pour un modele comportant des elements de plaque ou de coque, il faut le "cara_elem" + pour un modèle comportant des éléments de plaque ou de coque + il faut fournir le "CARA_ELEM" """), - - - - - 98: _(""" - erreur: la charge doit etre une charge mecanique ! + la charge doit être une charge mécanique """), 99: _(""" - option %(k1)s non licite pour un calcul non lineaire. + option %(k1)s non licite pour un calcul non linéaire. """), } diff --git a/Aster/Cata/cataSTA9/Messages/calculel3.py b/Aster/Cata/cataSTA9/Messages/calculel3.py index 1dd34176..fd0ee336 100644 --- a/Aster/Cata/cataSTA9/Messages/calculel3.py +++ b/Aster/Cata/cataSTA9/Messages/calculel3.py @@ -1,419 +1,339 @@ -#@ MODIF calculel3 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF calculel3 Messages DATE 07/04/2008 AUTEUR GALENNE E.GALENNE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - manque les accelerations +1 : _(""" + manque les accélérations """), -2: _(""" - pour une sd resultat de type dyna_trans, seuls les mots_cles fonc_mult et coef_mult sont autorises +2 : _(""" + pour une SD RESULTAT de type DYNA_TRANS, + seuls les mots-clés FONC_MULT et COEF_MULT sont autorisés """), -3: _(""" - pour un sd resultat de type evol_elas,seul le mot-cle fonc_mult est autorise +3 : _(""" + pour une SD RESULTAT de type EVOL_ELAS, + seul le mot-clé fonc_mult est autorisé """), -4: _(""" - l'utilisation d mot-cle fonc_mult n'est licite que pour les sd resultats: evol_elas, dyna_trans, dyna_harmo +4 : _(""" + l'utilisation du mot-clé FONC_MULT n'est licite que pour + les SD RESULTATS : EVOL_ELAS, DYNA_TRANS, DYNA_HARMO """), -5: _(""" - pour calculer %(k1)s il faut sief_elno_elga ou efge_elno_depl +5 : _(""" + pour calculer %(k1)s il faut SIEF_ELNO_ELGA ou EFGE_ELNO_DEPL """), -6: _(""" - option %(k1)s non traitee pour un resultat de type %(k2)s +6 : _(""" + option %(k1)s non traitée pour un résultat de type %(k2)s """), -7: _(""" +7 : _(""" calcul de %(k1)s impossible. """), -8: _(""" - attention : les champs sief_elga_depl, sief_elga, sigm_elno_coqu etsigm_elno_depl sont absents : on ne peut pas calculer l'option %(k1)s avec la sd de type %(k2)s +8 : _(""" + les champs SIEF_ELGA_DEPL, SIEF_ELGA, SIGM_ELNO_COQU et SIGM_ELNO_DEPL sont absents : + on ne peut pas calculer l'option %(k1)s avec la SD de type %(k2)s """), -9: _(""" - attention : le champ sigm_elno_depl est absent : on ne peut pas calculer l'option %(k1)s avec la sd de type %(k2)s +9 : _(""" + le champ SIGM_ELNO_DEPL est absent : + on ne peut pas calculer l'option %(k1)s avec la SD de type %(k2)s """), -10: _(""" - attention : le champ sigm_elno_coqu est absent : on ne peut pas calculer l'option %(k1)s avec la sd de type %(k2)s +10 : _(""" + le champ SIGM_ELNO_COQU est absent : + on ne peut pas calculer l'option %(k1)s avec la SD de type %(k2)s """), -11: _(""" - le resultat %(k1)s doit comporter un champ de deplacement au numero d'ordre %(k2)s . +11 : _(""" + le résultat %(k1)s doit comporter un champ de déplacement au numéro d'ordre %(k2)s . """), -12: _(""" - le mot cle prec_err est obligatoire avec l'option sing_elem +12 : _(""" + le mot cle PREC_ERR est obligatoire avec l'option SING_ELEM """), -13: _(""" - le mot cle prec_err doit etre strictement superieur a zero et inferieur ou egal a 1 +13 : _(""" + le mot cle PREC_ERR doit etre strictement superieur à zéro et inférieur ou egal à 1 """), -14: _(""" +14 : _(""" pas d indicateur d erreur- on ne calcule pas l'option sing_elem """), -15: _(""" - par defaut on utilise erre_elem_sigm +16 : _(""" + par défaut on utilise ERZ2_ELEM_SIGM """), -16: _(""" - par defaut on utilise erz2_elem_sigm +17 : _(""" + le résultat %(k1)s doit comporter un champ de contraintes au numéro d'ordre %(k2)s . """), -17: _(""" - le resultat %(k1)s doit comporter un champ de contraintes au numero d'ordre %(k2)s . +18 : _(""" + pas de champ de contraintes pour calculer %(k1)s """), -18: _(""" - pas de champ de contraintes pour calculer %(k1)s +19 : _(""" + probleme à l'appel de ALCHML pour %(k1)s """), -19: _(""" - probleme a l'appel de alchml pour %(k1)s +20 : _(""" + pas de champ d'endommagement pour calculer %(k1)s """), -20: _(""" - pas de champ endommagement pour calculer %(k1)s +21 : _(""" + le calcul avec l'option ENDO_ELNO_ELGA nécessite au préalable un calcul avec l'option ENDO_ELGA """), -21: _(""" - le calcul avec l'option endo_elno_elga necessite au prealable un calcul avec l'option endo_elga +22 : _(""" + option inexistante: %(k1)s """), -22: _(""" - option inexistante: %(k1)s +23 : _(""" + option : %(k1)s """), -23: _(""" - option : %(k1)s -"""), - -25: _(""" +25 : _(""" calcul non disponible """), -27: _(""" - type : %(k1)s incompatible avec l'option : %(k2)s -"""), - -28: _(""" - type de champ inconnue +27 : _(""" + type : %(k1)s incompatible avec l'option : %(k2)s """), -29: _(""" - erreur jacot 1 +28 : _(""" + type de champ inconnu """), -30: _(""" - il faut un modele ou des charges. +30 : _(""" + il faut un modèle ou des charges. """), -31: _(""" - la masse du macr_elem : %(k1)s n'a pas encore ete calculee. +31 : _(""" + la masse du MACR_ELEM : %(k1)s n'a pas encore ete calculée. """), -32: _(""" +32 : _(""" il manque des masses. """), -33: _(""" - la rigidite du macr_elem : %(k1)s n'a pas encore ete calculee. +33 : _(""" + la rigidité du MACR_ELEM : %(k1)s n'a pas encore été calculée. """), -34: _(""" - il manque des rigidites. +34 : _(""" + il manque des rigidités. """), -35: _(""" - le modele doit contenir des elements finis ou des sous-structures. +35 : _(""" + le modèle doit contenir des éléments finis ou des sous-structures. """), - - - - - - - - - - -38: _(""" - on ne traite pas le type_scalaire: %(k1)s +38 : _(""" + on ne traite pas le type_scalaire: %(k1)s """), -39: _(""" - le modele contient des elements de structure. il faut probablement utiliser le mot-cle cara_elem. +39 : _(""" + le modèle contient des éléments de structure + il faut probablement utiliser le mot-clé CARA_ELEM. """), -40: _(""" +40 : _(""" -> Le modèle a probablement besoin d'un champ de matériau (mot-clé CHAM_MATER). -> Risque & Conseil : Ce message peut aider à comprendre un éventuel problème ultérieur lors de calculs élémentaires nécessitant des caractéristiques matérielles. - Vérifier si votre modélisation nécessite un CHAM_MATER. + Vérifiez si votre modélisation nécessite un CHAM_MATER. """), -41: _(""" - les charges ne s'appuient pas toutes sur le meme modele. +41 : _(""" + les charges ne s'appuient pas toutes sur le meme modèle. """), -42: _(""" - les charges ne s'apuient pas sur le modele donne en argument. +42 : _(""" + les charges ne s'appuient pas sur le modèle donné en argument. """), -43: _(""" - les charges sont de type different. +43 : _(""" + les charges sont de type différent. """), -44: _(""" - les charges ne s'appuient pas toutes sur le meme modele +44 : _(""" + les charges ne s'appuient pas toutes sur le meme modèle """), -45: _(""" - donnees incorrectes. +45 : _(""" + données incorrectes. """), -46: _(""" - calc_k_g : champ initial impossible +50 : _(""" + il faut un modèle """), -47: _(""" - le fond de fissure doit contenir un noeud et un seul +51 : _(""" + il manque le modèle """), -48: _(""" - il faut definir la normale au fond de fissure +52 : _(""" + le champ doit être un CHAM_ELEM. """), -49: _(""" - on ne trouve pas le .nomo pour: %(k1)s +53 : _(""" + ne traite qu'un CHAM_ELEM réel """), -50: _(""" - il faut un modele -"""), - -51: _(""" - il manque le modele -"""), - -52: _(""" - le champ doit etre un cham_elem. -"""), - -53: _(""" - ne traite qu'un cham_elem reel -"""), - -54: _(""" +54 : _(""" longueurs des modes locaux imcompatibles entre eux. """), -55: _(""" - la longueur:long est trop petite. -"""), - -56: _(""" +56 : _(""" il n'y a pas autant de composantes """), -57: _(""" +57 : _(""" on ne sait pas moyenner cette composante negative """), -58: _(""" +58 : _(""" champs sur modeles differents """), -59: _(""" +59 : _(""" %(k1)s doit etre un cham_elem. """), -60: _(""" +60 : _(""" longueurs des modes locaux champ1 imcompatibles entre eux. """), -61: _(""" +61 : _(""" longueurs des modes locaux champ2 imcompatibles entre eux. """), -62: _(""" +62 : _(""" composante non definie """), -63: _(""" +63 : _(""" champ de geometrie non trouve """), -64: _(""" - l'instant du calcul est pris arbitrairement a 0.0 +64 : _(""" + l'instant du calcul est pris arbitrairement a 0.0 """), -65: _(""" +65 : _(""" on n'accepte un instant arbitraire que si le concept deformations anelastiques n'a qu'1 champ. """), -66: _(""" - le concept evol_noli : %(k1)s ne contient aucun champ de deformations anelastiques. -"""), - -67: _(""" - pour calculer l'option %(k1)s les parametres suivants sont obligatoires: "pgeomer" et "pcontrr". -"""), - - - - - - - - -69: _(""" - il n y a ni elements ni sous-struc +66 : _(""" + le concept evol_noli : %(k1)s ne contient aucun champ de déformations anélastiques. """), - - - - - -71: _(""" - il faut 1 chargement de rotation et un seul. +71 : _(""" + il faut 1 chargement de rotation et un seul. """), -72: _(""" - il ne faut pas definir plus d"un champ de vitesse +72 : _(""" + il ne faut pas definir plus d"un champ de vitesse """), -73: _(""" +73 : _(""" le champ: %(k1)s n'est ni un cham_elem ni un resuelem """), -74: _(""" - type scalaire interdit : %(k1)s -"""), - -75: _(""" - on n'accepte un instant arbitraire que si le concept temperature n'a qu'1 champ. -"""), - -76: _(""" - le concept evol_ther : %(k1)s ne contient aucun champ de temperature. +74 : _(""" + type scalaire interdit : %(k1)s """), -77: _(""" - le champ de temperature utilise est independant du temps. +79 : _(""" + la matrice A est singulière """), -78: _(""" - temperature de reference a probleme. -"""), - -79: _(""" - la matrice a est singuliere -"""), - -81: _(""" +81 : _(""" cette fonction ne marche que pour des modes locaux de type chno, vect, ou mat """), -82: _(""" +82 : _(""" le mode local est de type matrice non_carree """), -83: _(""" - 4 -"""), - -84: _(""" - il n y a pas de parametre %(k1)s associe a la grandeur: %(k2)s dans l option: %(k3)s -"""), - -85: _(""" - il y a plusieurs parametres %(k1)s associes a la grandeur: %(k2)s dans l option: %(k3)s -"""), - -86: _(""" - %(k1)s non prevu +84 : _(""" + il n y a pas de parametre %(k1)s associe a la grandeur: %(k2)s dans l option: %(k3)s """), -87: _(""" - elrefe inconnu %(k1)s +85 : _(""" + il y a plusieurs parametres %(k1)s associes a la grandeur: %(k2)s dans l option: %(k3)s """), -88: _(""" - les charges sont incoherentes avec le modele. +89 : _(""" + les charges ne s'appuient pas toutes sur le même modèle. """), -89: _(""" - erreur: les charges ne s appuient pas toutes sur le meme modele. +90 : _(""" + le champ de THETA est inexistant dans la structure de données %(k1)s de type THETA_GEOM . """), -90: _(""" - le champ de theta est inexistant dans la structure de donnees %(k1)s de type theta_geom . +91 : _(""" + une des charges n'est pas mécanique """), -91: _(""" - erreur: une des charges n'est pas mecanique -"""), - -92: _(""" +92 : _(""" erreur: une des charges n'est pas thermique """), -93: _(""" - erreur: une des charges n'est pas acoustique +93 : _(""" + une des charges n'est pas acoustique """), -94: _(""" - erreur: le champ doit etre un cham_elem aux points de gauss +94 : _(""" + le champ doit être un CHAM_ELEM aux points de gauss """), -95: _(""" - avec un cham_elem calcule sur une liste de maille, il faut utiliser le mot cle "modele:" +95 : _(""" + avec un CHAM_ELEM calcule sur une liste de maille, + il faut utiliser le mot cle "MODELE" """), -96: _(""" - pour prendre en compte les termes d'inertie il est preferable d'utiliser la commande "calc_elem". le mot cle "acce" n'est pas traite et les resultats risquent d'etre faux. +96 : _(""" + pour prendre en compte les termes d'inertie, + il est préférable d'utiliser la commande "CALC_ELEM". + le mot cle "ACCE" n'est pas traité et les résultats risquent d'être faux. """), -97: _(""" - le champ de nom symbolique theta existe deja dans la s.d. resultat %(k1)s -"""), +97 : _(""" + Erreur d'utilisation : + Fonctionnalité : PROJ_CHAMP + On cherche à projeter des mailles sur certains noeuds. + Mais la la liste de noeuds est vide. -98: _(""" - le champ de nom symbolique grad_noeu_theta existe deja dans la s.d. resultat %(k1)s + Conseil : + Cette erreur peut venir d'une mauvaise utilisation du mot clé + PROJ_CHAMP/DISTANCE_MAX """), -99: _(""" - il faut donner 3 composantes de la direction -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/calculel4.py b/Aster/Cata/cataSTA9/Messages/calculel4.py index 86e2709a..b5a214ee 100644 --- a/Aster/Cata/cataSTA9/Messages/calculel4.py +++ b/Aster/Cata/cataSTA9/Messages/calculel4.py @@ -1,8 +1,8 @@ -#@ MODIF calculel4 Messages DATE 23/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF calculel4 Messages DATE 06/05/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,393 +20,237 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - option non operationnelle: seule l'option couronne est a utiliserdans le cas ou on emploie le mot cle theta_3d . -"""), - -2: _(""" - il faut donner 3 composantes de la direction,la 3-eme nulle -"""), - -3: _(""" - il faut donner la direction de propagation en 2d la direction par defaut n'existe plus -"""), - -4: _(""" - option non operationnelle: seule l'option couronne est a utiliserdans le cas ou on emploie le mot cle theta_2d . -"""), - -5: _(""" - option inexistante: seule l'option bande est a utiliser dans le cas ou on emploie le mot cle theta_bande . -"""), - -6: _(""" - la normale n'est pas orthogonale a la tangente a l'origine -"""), - -7: _(""" - la normale n'est pas orthogonale a la tangente a l'extremite -"""), - -8: _(""" +8 : _(""" le resultat %(k1)s n'existe pas """), -9: _(""" - creation de la table %(k1)s -"""), - - - - - - - - - - - - - +10 : _(""" + Erreur d'utilisation : + On ne trouve pas de variables de commandes ('TEMP', 'HYDR', ...) : + Option: %(k2)s type_element: %(k3)s ) - - -13: _(""" - probleme a la recuperation d'un champ + Risques & conseils : + La cause la plus fréquente de cette erreur est d'avoir oublié de + renseigner AFFE_MATERIAU/AFFE_VARC. + (Ou de n'avoir renseigné que AFFE_VARC/VALE_REF sans avoir renseigné EVOL ou CHAMP_GD) """), - - - - - - - - - - -16: _(""" - dans le cas d'une sd resultat de type dyna_trans, le mot-cle excit est obligatoire. +11 : _(""" + Erreur d'utilisation lors de l'affectation des variables de commande (AFFE_MATERIAU/AFFE_VARC): + Pour la variable de commande %(k1)s, + Vous avez oublié d'utiliser l'un des 2 mots clés CHAMP_GD ou EVOL. + L'abscence de ces 2 mots clés n'est permise que pour NOM_VARC='TEMP' (modélisations THM) """), -17: _(""" - pour un resultat de type mode_meca l option de calcul doit etre k_g_moda. +12 : _(""" + Erreur de programmation (catalogue des éléments finis) : + Les éléments finis ayant l'attribut VOLU_FINI='OUI' ne peuvent créer que des + matrices élémentaires non-symétriques. """), - - -19: _(""" - le mot cle 'fissure' est obligatoire avec l'option %(k1)s -"""), - -20: _(""" - le mot cle 'fond_fiss' est obligatoire avec l'option %(k1)s -"""), - -21: _(""" - mot cle fond_fiss obligatoire pour l option %(k1)s -"""), - -22: _(""" - champ theta calcule automatiquement -"""), - -23: _(""" - pour l option %(k1)s (3d local) utiliser le mot cle theta_lagr -"""), - -24: _(""" - il faut donner 3 composantes de la direction %(k1)s -"""), - -25: _(""" - mot cle propagation utilise seulement pour le calcul de g avec propagation lagrangienne -"""), - -26: _(""" - cette combinaison de lissage n'est pas programmee pour l'option : %(k1)s . -"""), - -27: _(""" - le degre des polynomes de legendre doit etre inferieur ou egal au nombre de noeuds du fond de fissure avec la methode theta-lagrange -"""), - -28: _(""" - le lissage de g doit etre de type legendre si le lissage de theta est de type legendre -"""), - -29: _(""" - l'option %(k1)s n'est pas permise avec le lissage 'lagrange_regu' -"""), - -30: _(""" - si la methode 'lagrange_regu' est utilisee pour le lissage, alors le lissage de g et de theta doivent etre de type 'lagrange_regu'. -"""), - -31: _(""" - champ theta obligatoire avec %(k1)s . utiliser le mot cle theta_lagr. -"""), - -32: _(""" - fond obligatoire avec option calc_k_g -"""), - -36: _(""" - l usage des polynomes de legendre dans le cas d un fond de fissure clos est interdit. -"""), - -37: _(""" - acces impossible au deplacement -"""), - -38: _(""" - mot-clef obligatoire avec l option %(k1)s ! -"""), - -39: _(""" - acces impossible au mode propre -"""), - -40: _(""" - option non dispo actuellement -"""), - -41: _(""" +41 : _(""" erreur_01 """), -42: _(""" +42 : _(""" erreur_02 """), -43: _(""" +43 : _(""" le nom_para n'existe pas """), -44: _(""" +44 : _(""" 0 ligne trouvee pour le nom_para """), -45: _(""" +45 : _(""" plusieurs lignes trouvees """), -46: _(""" +46 : _(""" code retour de "tbliva" inconnu """), -47: _(""" +47 : _(""" type_resu inconnu: %(k1)s """), -48: _(""" +48 : _(""" erreur calcul alpha0 :champ depl elastique non trouve """), -49: _(""" +49 : _(""" erreur : le champ depl elastique n'existe pas """), -50: _(""" +50 : _(""" erreur: le champ sief_elga_depl n'existe pas """), -51: _(""" +51 : _(""" methode zac : accommodation et chargement non radial --> methode non appliquable """), - - - - - -53: _(""" +53 : _(""" longueurs des modes locaux incompatibles entre eux. """), -54: _(""" +54 : _(""" aucuns noeuds sur lesquels projeter. """), -55: _(""" +55 : _(""" pas de mailles a projeter. """), -56: _(""" +56 : _(""" %(k1)s pas trouve. """), -57: _(""" +57 : _(""" il n'y a pas de mailles a projeter. """), -58: _(""" +58 : _(""" les maillages a projeter sont ponctuels. """), -59: _(""" +59 : _(""" maillages 1 differents. """), -60: _(""" +60 : _(""" maillages 2 differents. """), -61: _(""" +61 : _(""" probleme dans l'examen de %(k1)s """), -62: _(""" +62 : _(""" aucun numero d'ordre dans %(k1)s """), -63: _(""" - on ne sait pas encore projeter les champs %(k1)s +63 : _(""" + On n'a pas pu projeter le champ %(k1)s de la sd_resultat %(k2)s + vers la sd_resultat %(k3)s pour le numéro d'ordre %(i1)d """), -64: _(""" - aucun champ projete. +64 : _(""" + Aucun champ projete. """), -65: _(""" +65 : _(""" maillages non identiques : %(k1)s et %(k2)s """), -66: _(""" +66 : _(""" pas de chmate """), -67: _(""" +67 : _(""" erreur dans etanca pour le probleme primal """), -68: _(""" +68 : _(""" erreur dans etenca pour le probleme dual """), -69: _(""" +69 : _(""" On ne trouve pas la variable de commande : %(k1)s pour la maille: %(k2)s """), - - - - -73: _(""" - ! ligrel incompatible avec modele ! -"""), - - - - - - - - -75: _(""" - ! pb acces simultane carth/t ! -"""), - -76: _(""" - ! pb etenca cartf ! -"""), - -77: _(""" - ! pb etenca carth ! -"""), - -78: _(""" - ! pb etenca cartt ! -"""), - -79: _(""" +79 : _(""" La grandeur : %(k1)s n'existe pas dans le catalogue des grandeurs. """), -80: _(""" +80 : _(""" le nom de la grandeur %(k1)s ne respecte pas le format xxxx_c """), -81: _(""" +81 : _(""" probleme dans le catalogue des grandeurs simples, la grandeur complexe %(k1)s ne possede pas le meme nombre de composantes que son homologue réelle %(k2)s """), -82: _(""" +82 : _(""" probleme dans le catalogue des grandeurs simples, la grandeur %(k1)s ne possede pas les memes champs que son homologue reelle %(k2)s """), -83: _(""" +83 : _(""" erreur: le calcul des contraintes ne fonctionne que pour le phenomene mecanique """), -84: _(""" +84 : _(""" erreur numeros des noeuds bords """), -85: _(""" +85 : _(""" erreur: les elements supportes sont tria3 ou tria6 """), -86: _(""" +86 : _(""" erreur: les elements supportes sont quad4 ou quad8 ou quad9 """), -87: _(""" +87 : _(""" maillage mixte tria-quad non supporte pour l estimateur zz2 """), -88: _(""" +88 : _(""" erreur: les mailles supportees sont tria ou quad """), -89: _(""" +89 : _(""" erreur: un element du maillage possede tous ses sommets sur une frontiere. il faut au moins un sommet interne. Pour pouvoir utiliser ZZ2 il faut remailler le coin de telle facon que tous les trg aient au moins un sommet interieur. """), -90: _(""" - erreur programmeur -"""), - -91: _(""" +91 : _(""" on ne trouve pas de routine te0npq npq doit etre compris entre 1 et 600 ici : npq = %(k1)s """), -92: _(""" +92 : _(""" relation : %(k1)s non implantee sur les poulies """), -93: _(""" +93 : _(""" deformation : %(k1)s non implantee sur les poulies """), -94: _(""" +94 : _(""" l'attribut: %(k1)s n'existe pas pour le type: %(k2)s """), -95: _(""" - erreur de programmation :on ne trouve pas dans les arguments de la routine calcul de champ a associer au parametre: %(k1)s (option: %(k2)s type_element: %(k3)s ) +95 : _(""" + Erreur de programmation ou d'utilisation : + On ne trouve pas dans les arguments de la routine calcul de champ a associer + au parametre: %(k1)s (option: %(k2)s type_element: %(k3)s ) """), -96: _(""" - erreur de programmation :on n'a pas pu extraire toutes les cmps voulues du champ global associe au parametre: %(k1)s (option: %(k2)s type_element: %(k3)s ) +96 : _(""" + Erreur de programmation : + on n'a pas pu extraire toutes les cmps voulues du champ global associe au parametre: %(k1)s (option: %(k2)s type_element: %(k3)s ) """), -97: _(""" - ! tout = oui obligatoire avec %(k1)s ! +97 : _(""" + TOUT = OUI obligatoire avec %(k1)s """), -98: _(""" - attention : on n'a pas pu recuperer le parametre theta dans le resultat %(k1)s , valeur prise pour theta: 0.57 +98 : _(""" + on n'a pas pu récupérer le paramètre THETA dans le résultat %(k1)s + valeur prise pour THETA: 0.57 """), -99: _(""" - attention : recuperation d'une valeur de theta illicite dans le resultat %(k1)s valeur prise pour theta: 1. +99 : _(""" + récupération d'une valeur de THETA illicite dans le résultat %(k1)s + valeur prise pour THETA: 1. """), + } diff --git a/Aster/Cata/cataSTA9/Messages/calculel5.py b/Aster/Cata/cataSTA9/Messages/calculel5.py index 03b895c8..d1dbf3cf 100644 --- a/Aster/Cata/cataSTA9/Messages/calculel5.py +++ b/Aster/Cata/cataSTA9/Messages/calculel5.py @@ -1,8 +1,8 @@ -#@ MODIF calculel5 Messages DATE 23/04/2007 AUTEUR GNICOLAS G.NICOLAS +#@ MODIF calculel5 Messages DATE 18/03/2008 AUTEUR CNGUYEN C.NGUYEN # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,53 +20,48 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - ! attention numeros d'ordre non contigus ! -"""), - -2: _(""" +2 : _(""" pour les options de thermique, il y a encore a travailler !! """), -4: _(""" +4 : _(""" !! probleme creation cham_elem nul dans alchml !! """), -5: _(""" - nb_ec trop grand -"""), -6: _(""" - cumul impossible avec i -"""), -7: _(""" - cumul impossible avec kn -"""), -8: _(""" - il faut donner "maille" + + + + + + + + +8 : _(""" + il faut renseigner le mot clé MAILLE """), -10: _(""" +10 : _(""" nbnocp est trop grand, contacter l'assistance """), -11: _(""" +11 : _(""" le parametre est a valeurs de type " %(k1)s " et la valeur de reference de type " %(k2)s ". """), -12: _(""" - "type_test" inconnu +12 : _(""" + TYPE_TEST inconnu """), -13: _(""" +13 : _(""" le champ %(k1)s est a valeurs de type " %(k2)s " et la valeur de reference de type " %(k3)s ". """), -14: _(""" +14 : _(""" le champ %(k1)s est de type inconnu. """), @@ -75,21 +70,17 @@ cata_msg={ -16: _(""" - ! nbnv: typelem inconnu ! -"""), - -17: _(""" - ! jac(ipg): div par zero ! -"""), - - - +20 : _(""" + le GROUP_NO %(k1)s contient %(k2)s noeuds +"""), +21 : _(""" + le GROUP_MA %(k1)s contient %(k2)s mailles +"""), @@ -97,65 +88,32 @@ cata_msg={ -20: _(""" - le group_no %(k1)s contient %(k2)s noeuds -"""), -21: _(""" - le group_ma %(k1)s contient %(k2)s mailles -"""), -22: _(""" - ! jac(1): div par zero ! -"""), -23: _(""" - ! jac(2): div par zero ! -"""), -24: _(""" - ! hf: div par zero ! -"""), -25: _(""" - ! calcul naret 2d: typelem inconnu ! -"""), -26: _(""" - ! calcul nsomm 2d: typelem inconnu ! -"""), -27: _(""" +27 : _(""" ! pas de lumpe en 3d p2: hexa20_d --> face8_d ! """), -28: _(""" +28 : _(""" ! pas de lumpe en 3d p2: hexa27 --> face9_d ! """), -29: _(""" +29 : _(""" ! pas de lumpe en 3d p2: penta15_d --> face6/8_d ! """), -30: _(""" +30 : _(""" ! pas de lumpe en 3d p2: tetra10_d --> face6_d ! """), -31: _(""" - ! calcul naret/nsomm 3d: typelem inconnu ! -"""), -32: _(""" - ! l'objet chval des segments est inexistant ! -"""), -33: _(""" - ! l'objet chval2 des segments est inexistant ! -"""), -34: _(""" - ! p2 obligeatoire avec terme source non nul ! -"""), @@ -164,321 +122,213 @@ cata_msg={ +34 : _(""" + ! p2 obligeatoire avec terme source non nul ! +"""), + -37: _(""" - programme %(k1)s -"""), -38: _(""" + +38 : _(""" il faut definir un champ de vitesse """), -39: _(""" +39 : _(""" la grandeur pour la variable: %(k1)s doit etre: %(k2)s mais elle est: %(k3)s """), -40: _(""" +40 : _(""" nombre de sous-points incoherent avec etat initial """), -41: _(""" +41 : _(""" pas de variables internes initiales pour la maille %(k1)s """), -42: _(""" +42 : _(""" comportements incompatibles : %(k1)s et %(k2)s pour la maille %(k3)s """), -43: _(""" - erreur pgmeur dans zechlo : type_scalaire: %(k1)s non autorise(r ou c), -"""), -44: _(""" + + + +44 : _(""" ! le champ doit etre un cham_elem ! """), -45: _(""" +45 : _(""" ! longueurs des modes locaux imcompatibles entre eux ! """), -46: _(""" +46 : _(""" ! terme normalisation global nul ! """), - - - - - - - -48: _(""" - PROJ_CHAMP (ou LAISON_MAIL) : - Le noeud : %(k1)s est projeté sur une maille un peu distante (%(k2)s). - distance à la maille = %(r1)g - diamètre de la maille = %(r2)g +48 : _(""" + PROJ_CHAMP (ou LIAISON_MAIL) : + Certains noeuds ont été projetés sur des mailles un peu distantes + (la distance à la maille est supérieure à 1/10ième du diamètre de la maille) + Le noeud projeté le plus loin est le noeud: %(k1)s + Il a été projeté à la distance %(r1)f """), -49: _(""" +49 : _(""" LIAISON_MAIL : La relation linéaire destinée à éliminer le noeud esclave %(k1)s est une tautologie car la maille maitre en vis à vis de ce noeud possède ce meme noeud dans sa connectivité. On ne l'écrit donc pas. """), -50: _(""" +50 : _(""" Présence de coques orthotropes, les mots clés ANGL_REP ou VECTEUR du mot clé facteur REPE_COQUE ne sont pas traités. """), -51: _(""" +51 : _(""" Le repère de post-traitement a été défini dans la commande AFFE_CARA_ELEM mot clé facteur COQUE. - Il est conseillé de définir ce repère à l'aide du mot clé ANGL_REP ou VECTEUR du mot clé + Il est conseillé de définir ce repère à l'aide du mot clé ANGL_REP ou VECTEUR du mot clé facteur REPE_COQUE de la commande CALC_ELEM. """), -52: _(""" +52 : _(""" Présence de GRILLE dans la modélisation, les mots clés ANGL_REP ou VECTEUR du mot clé facteur REPE_COQUE ne sont pas traités. """), -53: _(""" +53 : _(""" La super_maille %(k1)s n'existe pas dans le maillage %(k2)s. """), -54: _(""" +54 : _(""" La maille %(k1)s doit etre une maille de peau de type QUAD ou TRIA car on est en 3D et elle est de type %(k2)s. """), -55: _(""" +55 : _(""" L'un des mots-cles ANGL_REP ou VECTEUR est à fournir pour l'option ARCO_ELNO_SIGM. """), -56: _(""" - La combinaison 'fonction multiplicatrice' et 'chargement de type fonction' n'est pas autorisée car +56 : _(""" + La combinaison 'fonction multiplicatrice' et 'chargement de type fonction' n'est pas autorisée car votre chargement %(k1)s contient une charge exprimée par une formule. - Pour réaliser cette combinaison, vous devez transformer votre charge 'formule' en charge 'fonction' + Pour réaliser cette combinaison, vous devez transformer votre charge 'formule' en charge 'fonction' (via l'opérateur DEFI_FONCTION ou CALC_FONC_INTERP). On poursuit sans tenir compte de la fonction multiplicatrice. """), -57: _(""" - La combinaison de chargements de meme type n'est pas autorisée car l'un des chargements +57 : _(""" + La combinaison de chargements de meme type n'est pas autorisée car l'un des chargements contient une charge exprimée par une formule. - Pour réaliser cette combinaison, vous devez transformer votre charge 'formule' en charge 'fonction' - (via l'opérateur DEFI_FONCTION ou CALC_FONC_INTERP) + Pour réaliser cette combinaison, vous devez transformer votre charge 'formule' en charge 'fonction' + (via l'opérateur DEFI_FONCTION ou CALC_FONC_INTERP) """), -58: _(""" +58 : _(""" La combinaison de chargements de type 'déformation initiale' n'a aucun sens physique.' """), -59: _(""" +59 : _(""" La combinaison de chargements de type 'pesanteur' n'a aucun sens physique.' """), -60: _(""" +60 : _(""" La combinaison de chargements de type 'rotation' est déconseillée. Veuillez plutot utiliser un chargement de type 'force interne'. """), -63: _(""" +63 : _(""" Il faut au moins 2 numéros d'ordre pour traiter l'option %(k1)s """), -64: _(""" - les champs ne sont pas de la meme grandeur: type du cham_no %(k1)s - type du cham_no_affe %(k2)s +64 : _(""" + les champs ne sont pas de la meme grandeur: type du cham_no %(k1)s + type du cham_no_affe %(k2)s """), -65: _(""" - composante non definie dans la grandeur. composante: %(k1)s +65 : _(""" + composante non definie dans la grandeur. composante: %(k1)s """), -66: _(""" - +66 : _(""" + le nombre de composantes affectees n'est pas egal au nombre de composantes a affecter - occurence de affe numero %(i1)d - nbre de cmp affectees : %(i2)d - nbre de cmp a affecter : %(i3)d + occurence de affe numero %(i1)d + nbre de cmp affectees : %(i2)d + nbre de cmp a affecter : %(i3)d """), -67: _(""" - erreurs donneesle group_ma %(k1)s - n'a pas le meme nombre de mailles que le group_ma %(k2)s +67 : _(""" + erreurs donneesle GROUP_MA %(k1)s + n'a pas le meme nombre de mailles que le GROUP_MA %(k2)s """), -68: _(""" - erreurs donneesle group_ma %(k1)s - n'a pas les memes types de maille que le group_ma %(k2)s +68 : _(""" + erreurs donneesle GROUP_MA %(k1)s + n'a pas les memes types de maille que le GROUP_MA %(k2)s """), -69: _(""" - erreurs donnees : la maille %(k1)s du maillage %(k2)s - n'est pas la translation de la maille %(k3)s - du maillage %(k4)s +69 : _(""" + erreurs donnees : la maille %(k1)s du maillage %(k2)s + n'est pas la translation de la maille %(k3)s + du maillage %(k4)s vecteur translation : %(r1)f %(r2)f %(r3)f """), -70: _(""" - l'instant de calcul %(r1)f n'existe pas dans %(k1)s +70 : _(""" + l'instant de calcul %(r1)f n'existe pas dans %(k1)s """), -71: _(""" - plusieurs numeros d'ordre trouves pour l'instant %(r1)f +71 : _(""" + plusieurs numeros d'ordre trouves pour l'instant %(r1)f """), -72: _(""" - cette commande est reentrante : sd resultat en sortie %(k1)s - sd resultat "resu_final" %(k2)s +72 : _(""" + cette commande est reentrante : sd resultat en sortie %(k1)s + sd resultat "resu_final" %(k2)s """), -73: _(""" - la sd resultat en sortie %(k1)s - doit contenir qu'un seul nume_ordre %(k2)s +73 : _(""" + la sd resultat en sortie %(k1)s + doit contenir qu'un seul nume_ordre %(k2)s """), -74: _(""" - manque le champ %(k1)s dans la sd resultat %(k2)s - pour le nume_ordre %(i1)d +74 : _(""" + manque le champ %(k1)s dans la sd resultat %(k2)s + pour le nume_ordre %(i1)d """), - - - - - - - -76: _(""" - on ne sait pas encore decouper le type_element : %(k1)s en sous-elements %(k2)s - elrefa : %(k3)s - famille : %(k4)s +76 : _(""" + on ne sait pas encore decouper le type_element : %(k1)s en sous-elements %(k2)s + elrefa : %(k3)s + famille : %(k4)s """), - - - - - -78: _(""" - on ne sait pas encore decouper le type_element : %(k1)s en sous-elements %(k2)s - elrefa : %(k3)s +78 : _(""" + on ne sait pas encore decouper le type_element : %(k1)s en sous-elements %(k2)s + elrefa : %(k3)s """), - - - - - - - - - - - - - - - - - - - - - - - - -83: _(""" - ecla_pg : champ vide nom_cham: %(k1)s nume_ordre : %(i1)d +83 : _(""" + ecla_pg : champ vide nom_cham: %(k1)s nume_ordre : %(i1)d """), -84: _(""" - elrefe mal programme nom local cherche (nomte elrefe famille) %(k1)s - parmi les existants %(k2)s +84 : _(""" + elrefe mal programme nom local cherche (nomte elrefe famille) %(k1)s + parmi les existants %(k2)s """), -85: _(""" - pb liste de mailles carte : %(k1)s numero entite : %(i1)d - position ds liste : %(i2)d - numero de maille : %(i3)d +85 : _(""" + pb liste de mailles carte : %(k1)s numero entite : %(i1)d + position ds liste : %(i2)d + numero de maille : %(i3)d """), - - - - - - - -87: _(""" - famille non disponible maille de reference %(k1)s +87 : _(""" + famille non disponible + maille de reference %(k1)s """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } diff --git a/Aster/Cata/cataSTA9/Messages/calculel6.py b/Aster/Cata/cataSTA9/Messages/calculel6.py index 8361a690..a848d8b1 100644 --- a/Aster/Cata/cataSTA9/Messages/calculel6.py +++ b/Aster/Cata/cataSTA9/Messages/calculel6.py @@ -1,4 +1,4 @@ -#@ MODIF calculel6 Messages DATE 23/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF calculel6 Messages DATE 18/03/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION @@ -23,109 +23,43 @@ def _(x) : return x cata_msg={ +1: _(""" +Erreur utilisateur (dans la commande AFFE_MATERIAU) : + Dans le CHAM_MATER %(k1)s, vous avez affecté le matériau %(k2)s. + Dans ce matériau, il existe un coefficient de dilatation (ELAS/ALPHA) + qui est une fonction de la température. + Pour pouvoir utiliser cette fonction, il est nécessaire de transformer + cette fonction (changement de repère : TEMP_DEF_ALPHA -> TEMP_REF). + Pour cela, l'utilisateur doit fournir une température de référence. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Solution : + Vérifier que les mailles affectées par le matériau %(k2)s sont bien + toutes affectées par une température de référence + (AFFE/TEMP_REF ou AFFE_VARC/NOM_VARC='TEMP',VALE_REF). +"""), 10: _(""" - option inconnue %(k1)s + Option inconnue %(k1)s """), - - - - - - - - - - - - - - 13: _(""" - interpolation deformations anelastiques : evol_noli: %(k1)s instant: %(r1)f - icoret: %(i1)d + interpolation déformations anélastiques : + evol_noli: %(k1)s + instant : %(r1)f + icoret : %(i1)d """), - - - - - - - 15: _(""" l'element diagonal u( %(i1)d , %(i2)d ) de la factorisation est nul. %(k1)s - la solution et les estimations d' erreurs ne peuvent etre calculees. %(k2)s -"""), - -16: _(""" - interpolation temperature:evol_ther: %(k1)s nom symbolique: %(k2)s - instant: %(r1)f - icoret: %(i1)d + la solution et les estimations d' erreurs ne peuvent etre calculees. %(k2)s """), 17: _(""" recherche nbre de cmp: erreur: %(k1)s grandeur numero %(i1)d de nom %(k2)s """), - - - - - - - - - - - - 20: _(""" recherche nbre de cmp: erreur: grandeur ligne numero %(i1)d de nom %(k1)s grandeur colonne numero %(i2)d @@ -142,18 +76,6 @@ cata_msg={ recherche nbre d entiers codes %(k1)s grandeur numero %(i1)d de nom %(k2)s """), - - - - - - - - - - - - 25: _(""" recherche nbre d entiers codes grandeur ligne numero %(i1)d de nom %(k1)s grandeur colonne numero %(i2)d de nom %(k2)s @@ -163,92 +85,28 @@ cata_msg={ 26: _(""" recherche nbre d entiers codes grandeur %(i1)d a un code inconnu: %(i2)d """), - -27: _(""" - acces impossible champ : %(k1)s , nume_ordre : %(i1)d -"""), - -28: _(""" - acces impossible au mode propre champ : %(k1)s , nume_ordre : %(i1)d -"""), - - - - - - - - -34: _(""" - famille non disponible type de maille %(k1)s - famille d'integration %(i1)d -"""), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -41: _(""" - famille non disponible type de maille %(k1)s -"""), 42: _(""" - ! prise en compte de l'erreur ! - ! sur cl de type echange_paroi n'a ! %(i1)d - ! pas ete encore implantee ! %(i2)d + La prise en compte de l'erreur sur une condition aux limites + de type ECHANGE_PAROI n'a pas été encore implantée """), 43: _(""" - ! le mot cle excit contient !! plusieurs occurences de type flux lineaire ! %(i1)d - ! seule la derniere sera prise en compte ! %(i2)d -"""), - -44: _(""" - ! le mot cle excit contient !! plusieurs occurences de type echange ! %(i1)d - ! seule la derniere sera prise en compte ! %(i2)d -"""), - -45: _(""" - ! le mot cle excit contient !! plusieurs occurences de type source ! %(i1)d - ! seule la derniere sera prise en compte ! %(i2)d + le mot cle EXCIT contient plusieurs occurences de type %(k1)s + seule la dernière sera prise en compte """), 46: _(""" - ! champ temperature !! vide pour numero ordre ! %(i1)d + champ de température vide pour le numéro d'ordre : %(i1)d """), 47: _(""" - ! champ flux_elno_temp !! vide pour numero ordre ! %(i1)d + champ FLUX_ELNO_TEMP vide pour numéro d'ordre : %(i1)d """), 49: _(""" - erreurs donnees composante inconnue %(k1)s pour la grandeur %(k2)s + erreurs données composante inconnue %(k1)s pour la grandeur %(k2)s """), 50: _(""" @@ -262,10 +120,12 @@ cata_msg={ """), 52: _(""" + Erreur Utilisateur : - variables internes initiales non coherentes (nb sous-points) avec le comportement pour la maille nomail - nb sous-points "k-1" : %(i1)d - nb sous-points "k" : %(i2)d + Variables internes initiales non cohérentes (nb sous-points) avec le comportement choisi. + Pour la maille : %(k1)s + nb sous-points "k-1" : %(i1)d + nb sous-points "k" : %(i2)d """), 53: _(""" @@ -276,37 +136,31 @@ cata_msg={ """), 54: _(""" - Utilisation d'un mot clé obsolète : AFFE_CHAR_MECA/TEMP_CALCULEE + Problème d'utilisation du parallélisme : + Les fonctionnalités de parallélisme utilisées ici (calculs distribués) conduisent à créer + des structures de données "incomplètes" (i.e. partiellement calculées sur chaque processeur). - L'une des charges contient un chargement thermique (TEMP_CALCULEE). - L'utilisation de la température comme variable de commande en mécanique doit - maintenant se faire en utilisant AFFE_MATERIAU/AFFE_VARC/NOM_VARC='TEMP'. + Malheureusement, dans la suite des traitements, le code a besoin que les structures de données soient + "complètes". On est donc obligé d'arreter le calcul. - Néanmoins, jusqu'à la version 9.1 (incluse), les 2 syntaxes sont acceptées. - - Conseil : - Déplacer le chargement thermique de AFFE_CHAR_MECA/TEMP_CALCULEE vers - AFFE_MATERIAU/AFFE_VARC + Conseils pour l'utilisateur : + 1) Il faut émettre une demande d'évolution du code pour que le calcul demandé aille à son terme. + 2) En attendant, il ne faut pas utiliser la "distribution" des structures de donnée. + Aujourd'hui, cela veut dire : "ne pas utiliser le solveur MUMPS distribué". """), -55: _(""" - Erreur d'utilisation (préparation des variables de commande) : - Le CHAM_MATER %(k1)s contient des variables de commandes (AFFE_VARC). - Une des charges contient un chargement thermique (TEMP_CALCULEE). - Conseil : - Déplacer le chargement thermique de AFFE_CHAR_MECA/TEMP_CALCULEE vers - AFFE_MATERIAU/AFFE_VARC -"""), + + + 56: _(""" Erreur d'utilisation (rcmaco/alfint) : - Le CHAM_MATER %(k1)s contient des variables de commandes (AFFE_MATERIAU/AFFE_VARC). - Un des matériaux du CHAM_MATER contient un coefficient de dilation ALPHA=f(TEMP). - Mais la température n'est pas fournie sous AFFE_MATERIAU/AFFE_VARC + Un des matériaux du CHAM_MATER %(k1)s contient un coefficient de dilation ALPHA=f(TEMP). + Mais la température de référence n'est pas fournie sous AFFE_MATERIAU/AFFE_VARC/VALE_REF Conseil : - Renseignez le chargement thermique à l'aide de AFFE_MATERIAU/AFFE_VARC/NOM_VARC='TEMP' + Renseignez la température de référence à l'aide de AFFE_MATERIAU/AFFE_VARC/NOM_VARC='TEMP' + VALE_REF """), 57: _(""" @@ -356,10 +210,11 @@ cata_msg={ 62: _(""" Erreur de programmation (fointa) : - Pour l'interpolation de la fonction %(k1)s, + Pour l'interpolation de la fonction %(k1)s sur la maille %(k3)s, il manque le paramètre %(k2)s """), + 63: _(""" Erreur lors de l'interpolation (fointa) de la fonction %(k1)s : Code retour: %(i1)d @@ -396,5 +251,71 @@ cata_msg={ Vérifier les occurences de AFFE_MATERIAU/AFFE_VARC pour la maille concernée. """), +68: _(""" + la liste des composantes fournies à NOCART est incorrecte. + composantes dans catalogue: +"""), + +69: _(""" + %(k1)s +"""), + +70: _(""" + composantes dans EDITGD: +"""), + +71: _(""" + %(k1)s +"""), + +72: _(""" + +"""), + +73: _(""" + ! jacobien negatif en 3d ! +"""), + +74: _(""" + élément : %(i1)d + jacobien : %(r1)f + attention le calcul d'erreur est faux si la maille n est pas correctement orientée +"""), + +75: _(""" + Probleme de parallélisation des calculs élémentaires avec FETI. Imcompatiblité + entre LIGRELs dans la routine CALCUL. +--> Risques & conseils : + Essayer de passer en séquentiel ou de changer de solveur linéaire. +"""), + +76: _(""" + Problème de parallélisation des calculs élémentaires avec FETI. Imcompatiblité + LIGREL/numéro de maille dans la routine CALCUL. +--> Risques & conseils : + Essayer de passer en séquentiel ou de changer de solveur linéaire. +"""), + +77: _(""" + problème lors de l'affectation du champ: %(k1)s + des valeurs n'ont pas ete recopiées dans le CHAM_ELEM final (perte d'information ?) + ce problème peut être du a l'utilisation du mot cle TOUT='OUI'. + on peut vérifier le champ produit avec info=2 + +"""), + +78: _(""" + Lois de comportement différentes pour la maille %(k3)s : + - loi de comportement extraite de la SD Résultat : %(k1)s + - loi de comportement fournie à l'opérateur CALC_G : %(k2)s + +--> Risques & conseils : +On doit généralement utiliser la meme loi de comportement entre le calcul et le +post-traitement. On peut utiliser deux comportements différents, mais alors +l'utilisateur doit etre vigilant sur l'interprétation des résultats(cf.U2.05.01). +Si plusieurs comportements sont définis sur la structure, le comportement à +indiquer dans CALC_G est celui du matériau dans lequel la fissure se développe. +Dans ce cas, ce message d'alarme est quand meme émis mais le résultat est bien cohérent. +"""), } diff --git a/Aster/Cata/cataSTA9/Messages/cataelem.py b/Aster/Cata/cataSTA9/Messages/cataelem.py index defdd7bc..8c0c0c92 100644 --- a/Aster/Cata/cataSTA9/Messages/cataelem.py +++ b/Aster/Cata/cataSTA9/Messages/cataelem.py @@ -1,4 +1,4 @@ -#@ MODIF cataelem Messages DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF cataelem Messages DATE 18/09/2007 AUTEUR DURAND C.DURAND # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -23,31 +23,38 @@ def _(x) : return x cata_msg={ 1: _(""" - l option : %(k1)s est probablement composee (viellot) + l option : %(k1)s est probablement composée (vieillot) """), 2: _(""" - l option : %(k1)s a plusieurs parametres de memes noms. + l option : %(k1)s a plusieurs paramètres de memes noms. """), 3: _(""" - mode local incorrect pour le parametre: %(k1)s pour l option: %(k2)s pour le type: %(k3)s + mode local incorrect + pour le paramètre: %(k1)s + pour l'option : %(k2)s + pour le type : %(k3)s """), 4: _(""" - le parametre : %(k1)s pour l option : %(k2)s existe pour le type : %(k3)s mais n existe pas dans l option. + le paramètre : %(k1)s pour l'option : %(k2)s + existe pour le type : %(k3)s mais n'existe pas dans l'option. """), 5: _(""" - le parametre : %(k1)s pour l option : %(k2)s et pour le type_element : %(k3)s n est pas associe a la bonne grandeur. + le paramètre : %(k1)s pour l'option : %(k2)s et pour le TYPE_ELEMENT : %(k3)s + n'est pas associe à la bonne grandeur. """), 6: _(""" - le parametre : %(k1)s pour l option : %(k2)s et pour le type_element : %(k3)s n a pas le bon nombre de noeuds. + le paramètre : %(k1)s pour l'option : %(k2)s et pour le TYPE_ELEMENT : %(k3)s + n'a pas le bon nombre de noeuds. """), 7: _(""" - le parametre : %(k1)s pour l option : %(k2)s et pour le type_element : %(k3)s n est pas du bon type: %(k4)s + le paramètre : %(k1)s pour l option : %(k2)s et pour le TYPE_ELEMENT : %(k3)s + n'est pas du bon type: %(k4)s """), 8: _(""" @@ -55,50 +62,13 @@ cata_msg={ """), 9: _(""" - erreurs de coherence dans les catalogues d elements finis. -"""), - -10: _(""" - nb_ec > 1 -"""), - -11: _(""" - stop 6 -"""), - -12: _(""" - stop 7 -"""), - -13: _(""" - stop 8 -"""), - -14: _(""" - stop 9 -"""), - -15: _(""" - stop a -"""), - -16: _(""" - stop b -"""), - -17: _(""" - stop c -"""), - -18: _(""" - stop d + erreurs de cohérence dans les catalogues d'élements finis. """), 20: _(""" Erreur lors de l'accès à la composante %(i1)d dans le champ de nom %(k1)s et de type %(k2)s. Les arguments sont hors bornes ou la composante est déjà affectée (écrasement). - Contactez les développeurs. + Contactez le support. """), - } diff --git a/Aster/Cata/cataSTA9/Messages/compor1.py b/Aster/Cata/cataSTA9/Messages/compor1.py index 60506c83..e252890c 100644 --- a/Aster/Cata/cataSTA9/Messages/compor1.py +++ b/Aster/Cata/cataSTA9/Messages/compor1.py @@ -1,4 +1,4 @@ -#@ MODIF compor1 Messages DATE 24/04/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF compor1 Messages DATE 06/05/2008 AUTEUR MARKOVIC D.MARKOVIC # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -23,17 +23,17 @@ def _(x) : return x cata_msg={ 1: _(""" - hujpla :: nombre de variables internes incorrect: + HUJPLA :: nombre de variables internes incorrect: NVI > NVIMAX """), 2: _(""" - hujddd :: on ne calcule pas DPSIDS pour K=4. + HUJDDD :: on ne calcule pas DPSIDS pour K=4. - vérifiez la programmation - """), 3: _(""" - cam-clay :: le coefficient de poisson est négatif + CAM_CLAY :: le coefficient de poisson et ou le module d'Young ne sont pas corrects dans la maille %(k1)s *** vérifiez la cohérence des données mécaniques suivantes : @@ -42,29 +42,32 @@ cata_msg={ il faut notamment vérifier ceci: - E < 3*PO*(1+e0)/kapa *** + 0. 0 *** """), 4: _(""" - hujeux :: les modélisations autorisées sont 3D D_PLAN ou AXIS + HUJEUX :: les modélisations autorisées sont 3D D_PLAN ou AXIS """), 5: _(""" - hujeux :: K différent de NBMECA pour le mécanisme isotrope + HUJEUX :: K différent de NBMECA pour le mécanisme isotrope - vérifiez la programmation - """), 6: _(""" - hujeux :: erreur inversion par pivot de Gauss + HUJEUX :: erreur inversion par pivot de Gauss """), 7: _(""" - hujcri :: epsi_vp est trop grand: - !!! l'exponentielle explose !!! + HUJCRI :: EPSI_VP est trop grand: + l'exponentielle explose """), 8: _(""" - hujeux :: mécanisme indéterminé + HUJEUX :: mécanisme indéterminé - vérifiez la programmation - """), @@ -73,19 +76,34 @@ Arret suite """), 10: _(""" - hujksi :: mot-clé inconnu + HUJKSI :: mot-clé inconnu """), 11: _(""" - hujnvi :: modélisation inconnue + HUJNVI :: modélisation inconnue +"""), + +12: _(""" + HUJCI1 :: l'incrément de déformation est nul: + on ne peut pas trouver le zéro de la fonction. +"""), + +13: _(""" + HUJCI1 :: le critère d'existence du zéro de la fonction est violé: + on recommande soit de changer les données matériaux, + soit de raffiner le pas de temps. + + Ce critère est : + + 2 x P- < P0 * (P0 /K0 /TRACE(DEPS_ELA) /N)**(1-N) """), 14: _(""" - hujtid :: erreur dans le calcul de la matrice tangente + HUJTID :: erreur dans le calcul de la matrice tangente """), 15: _(""" - nmcomp :: la loi élastique n'est plus disponible directement avec SIMO_MIEHE : utilisez + NMCOMP :: la loi élastique n'est plus disponible directement avec SIMO_MIEHE : utilisez VMIS_ISOT_LINE avec un SY grand """), @@ -95,4 +113,112 @@ Arret suite Erreur numérique (overflow) : la plasticité cumulée devient très grande. """), +17 : _(""" + HUJCI1 :: Soit le zéro n'existe pas, soit il se trouve hors des + bornes admissibles. +"""), + +18 : _(""" + HUJCI1 :: Cas de traction à l'instant moins. +"""), + +19 : _(""" + MONOCRISTAL :: écrouissage cinematique non trouvé. +"""), + +20 : _(""" + MONOCRISTAL :: écoulement non trouvé. +"""), + +21 : _(""" + MONOCRISTAL :: écrouissage isotrope non trouvé. +"""), + +22 : _(""" + MONOCRISTAL :: nombre de matrice d'interaction trop grand. +"""), + +23 : _(""" + MONOCRISTAL :: la matrice d'interaction est définie avec + 4 coefficients. Ceci n'est applicable qu'avec 24 systèmes de + glissement (famille BCC24). +"""), + +24 : _(""" + MONOCRISTAL :: la matrice d'interaction est définie avec + 6 coefficients. Ceci n'est applicable qu'avec 12 systèmes de + glissement. +"""), + +25 : _(""" + MONOCRISTAL :: la matrice d'interaction est définie avec + un nombre de coefficients incorrect :: il en faut 1, ou 4, ou 6. +"""), + + +26: _(""" + lklmat :: paramètres de la loi LETK non cohérents +"""), +27: _(""" + lkcomp :: Réduire le pas de temps peut dans certains cas remédier au problème. + Le critère visqueux max en ce point de charge n'est + pas défini. Le calcul de la distance au critère n'est pas fait. +"""), +28: _(""" + lkcomp :: Réduire le pas de temps peut dans certains cas remédier au problème. + Le critère visqueux en ce point de charge n'est pas défini. + Le calcul de la distance au critère n'est pas fait. +"""), + +29: _(""" + lkdhds :: division par zéro - entrée rapide en plasticité avec un déviateur nul. + réduire le pas de temps. +"""), + +30: _(""" + lkds2h :: division par zéro - entrée rapide en plasticité avec un déviateur nul. + réduire le pas de temps. +"""), + +31: _(""" + lkcaln :: division par zéro - entrée rapide en plasticité avec un déviateur nul. + réduire le pas de temps. +"""), + +32: _(""" + VISC_CINx_CHAB :: pour la viscosité, renseigner le mot-clé LEMAITRE dans DEFI_MATERIAU. + Si vous voulez seulement de l'élastoplasticité, il faut utiliser VMIS_CINx_CHAB. +"""), + +33: _(""" + NMHUJ :: ELAS/ELAS_ORTH :: erreur de lecture des propriétés matériaux. +"""), + +34: _(""" + HUJTID :: ELAS/ELAS_ORTH :: cas non prévu. +"""), + +35: _(""" + HUJDP :: ELAS/ELAS_ORTH :: cas non prévu. +"""), + +36: _(""" + HUJTEL :: ELAS/ELAS_ORTH :: cas non prévu. +"""), + +37: _(""" + HUJPOT :: ELAS/ELAS_ORTH :: cas non prévu. +"""), + +38: _(""" + HUJJID :: ELAS/ELAS_ORTH :: cas non prévu. +"""), + +39: _(""" + HUJIID :: ELAS/ELAS_ORTH :: cas non prévu. +"""), + +40: _(""" + HUJELA :: ELAS/ELAS_ORTH :: cas non prévu. +"""), } diff --git a/Aster/Cata/cataSTA9/Messages/contact.py b/Aster/Cata/cataSTA9/Messages/contact.py index 272d6a81..e311743f 100644 --- a/Aster/Cata/cataSTA9/Messages/contact.py +++ b/Aster/Cata/cataSTA9/Messages/contact.py @@ -1,4 +1,4 @@ -#@ MODIF contact Messages DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF contact Messages DATE 01/04/2008 AUTEUR ABBAS M.ABBAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -16,169 +16,113 @@ # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# ====================================================================== +# ====================================================================== def _(x) : return x -cata_msg={ - -1: _(""" - La méthode de résolution du contact utilisée suppose la symétrie de la - matrice du système à résoudre. - Dans le cas où votre modélisation ferait intervenir une matrice - non-symétrique, on force sa symétrie. On émet une alarme pour vous - en avertir. - - CONSEIL : - Vous pouvez supprimer cette alarme en renseignant SYME='OUI' sous le - mot-clé facteur SOLVEUR. -"""), - -6: _(""" - Contact methode GCP. On ne peut utiliser le solveur gcpc avec le contact -"""), - -7: _(""" - Contact methode GCP. Denom est negatif : contacter les developpeurs -"""), - -8: _(""" - Contact methode GCP. Le pas d'avancement est negatif : contacter les developpeurs -"""), - -9: _(""" - Contact liaison glissiere. Des noeuds se decollent plus que la valeur d'ALARME_JEU: -"""), - -10: _(""" - Contact methodes discretes. Une maille maitre de type SEG a une longueur nulle. Verifiez votre maillage. -"""), - -11: _(""" - Contact methodes discretes. Le vecteur tangent defini par VECT_Y est colineaire au vecteur normal. -"""), +cata_msg = { -12: _(""" - Contact methodes discretes. Le vecteur normal est colineaire au plan de projection. +1 : _(""" +Contact méthodes discrètes. + -> Les méthodes de contact discrètes supposent la symétrie de la matrice obtenue après assemblage. + Si votre modélisation produit une matrice non-symétrique, on force donc sa symétrie pour résoudre + le contact. + -> Risque & Conseil : + Ce changement peut conduire à des difficultés de convergence dans le processus de Newton mais en + aucun cas il ne produit des résultats faux. + + Si la matrice de rigidité de votre structure est symétrique, vous pouvez ignorer ce qui précède. + Enfin, il est possible de supprimer l'affichage de cette alarme en renseignant SYME='OUI' + sous le mot-clé facteur SOLVEUR. """), -13: _(""" - Contact methodes discretes. Il faut reactualiser la projection : contacter les developpeurs +2 : _(""" +Contact methode GCP. Nombre d'itérations maximal (%(i1)s) dépassé pour le GCP. +Vous pouvez essayer d'augmenter ITER_GCP_MAXI. +La liste des noeuds présentant une interpénétration est donnée ci-dessous. """), -14: _(""" - Contact methodes discretes. La projection quadratique pour les triangles n'est pas disponible +3 : _(""" +Contact methode GCP. Nombre d'itérations maximal (%(i1)s) dépassé pour le préconditionneur. +Vous pouvez essayer d'augmenter ITER_PRE_MAXI """), -15: _(""" - Contact methodes discretes. Une maille maitre de type TRI a une surface nulle. Verifiez votre maillage. +6 : _(""" +Contact methode GCP. On ne peut utiliser le solveur GCPC avec le contact. """), -22: _(""" - Contact methodes discretes. Cette methode d'appariement n'existe pas : contacter les developpeurs. +7 : _(""" +Contact methode GCP. Le pas d'avancement est negatif ; risque de comportement hasardeux de l'algorithme """), -23: _(""" - Contact methodes discretes. Erreur d'appel par l'option d'appariement n'existe pas : contacter les developpeurs. +9 : _(""" +Contact liaison glissiere. Des noeuds se décollent plus que la valeur d'ALARME_JEU: """), -24: _(""" - Contact methodes discretes. Erreur de dimensionnement nombre maximal de noeuds esclaves depasse : contacter les developpeurs +11 : _(""" +Le vecteur tangent défini par VECT_Y est colinéaire au vecteur normal. """), -25: _(""" - Contact methodes discretes. Erreur de dimensionnement des tableaux apcoef et apddl : contacter les developpeurs +13 : _(""" +La normale que vous avez prédéfinie (VECT_* = 'FIXE') sur le noeud %(k1)s est colinéaire à la tangente à la maille. """), -27: _(""" - Contact methodes discretes. On n'a pas trouve de noeud maitre proche du noeud esclave : contacter les developpeurs +14 : _(""" +La normale que vous avez prédéfinie (VECT_* = 'FIXE') sur la maille %(k1)s est colinéaire à la tangente à la maille. """), -30: _(""" - Contact methodes discretes. On ne sait pas traiter ce type de maille +15 : _(""" +Le vecteur MAIT_FIXE ou ESCL_FIXE est nul ! """), -31: _(""" - Contact methodes discretes. Le noeud esclave n'a pas pu s'apparier avec la maille quadrangle : contacter les developpeurs +16 : _(""" +Le vecteur MAIT_VECT_Y ou ESCL_VECT_Y est nul ! """), -32: _(""" - Contact methodes discretes. Pas de lissage des normales possible avec l'appariement nodal : contacter les developpeurs +60 : _(""" +La maille %(k1)s est de type 'SEG' (poutres) en 3D sans donner la normale pour l'appariement. +Vous devez utilisez l'option NORMALE: +- FIXE: qui décrit une normale constante pour la poutre +- ou VECT_Y: qui décrit une normale par construction d'un repère basé sur la tangente (voir documentation) """), -38: _(""" - Contact. Erreur dans la definition symetrique : contacter les developpeurs +61 : _(""" +Le noeud %(k1)s fait partie d'une maille de type 'SEG' (poutres) en 3D sans donner la normale pour l'appariement. +Vous devez utilisez l'option NORMALE: +- FIXE: qui décrit une normale constante pour la poutre +- ou VECT_Y: qui décrit une normale par construction d'un repère basé sur la tangente (voir documentation) """), -54: _(""" - Contact. On ne peut pas utiliser une direction d'appariement fixe VECT_NORM_ESCL si l'appariement n'est pas nodal. -"""), -55: _(""" - Contact. La commande VECT_Y n'intervient pas en 2D. +83 : _(""" +Il y a plusieurs charges contenant des conditions de contact. """), -56: _(""" - Contact. La commande VECT_ORIE_POU n'intervient pas en 2D. -"""), - - -60: _(""" - Contact methodes discretes. Vous utilisez des mailles de type SEG2/SEG3 en 3D sans definir un repere pour l'appariement. Voir les mots-clefs VECT_Y et VECT_ORIE_POU. +84 : _(""" +Il ne faut pas que les surfaces de contact mélangent des mailles affectées d'une modélisations planes (D_PLAN, C_PLAN ou AXI) +avec des mailles affectées d'une modélisation 3D. """), -74: _(""" - Contact. Erreur de dimensionnement car le nombre de noeuds est superieur a 9 : contacter les developpeurs +88 : _(""" +Ne pas utiliser REAC_INCR=0 avec le frottement. """), -75: _(""" - Contact. Un POI1 ne peut pas etre une maille maitre. -"""), - -76: _(""" - Contact. On ne peut pas avoir plus de 3 ddls impliques dans la meme relation unilaterale : contacter les developpeurs -"""), - -83: _(""" - Contact. Il y a plusieurs charges contenant des conditions de contact. -"""), - -84: _(""" - Contact. Melange 2d et 3d dans le contact. -"""), - -85: _(""" - Contact. Melange dimensions maillage dans le contact. -"""), - -86: _(""" - Contact. Code methode contact incorrect : contacter les developpeurs -"""), - -87: _(""" - Contact. La norme tangentielle de frottement est negative: contacter les developpeurs -"""), - -88: _(""" - Contact. Ne pas utiliser REAC_INCR=0 avec le frottement. -"""), - -93: _(""" - Contact methode VERIF. - -> Interpénétrations des surfaces. - -> Risque & Conseil : - Vérifier si le niveau d'interpénétration des surfaces est acceptable dans - votre problème. +93 : _(""" +Contact methode VERIF. + -> Interpénétrations des surfaces. + Attention : si les mailles en contact sont quadratiques, le jeu aux noeuds milieux risque d'etre imprécis (oscillations entre noeuds sommets et milieux). + + -> Risque & Conseil : + Vérifier si le niveau d'interpénétration des surfaces est acceptable dans + votre problème. """), -94: _(""" - Operation d'appariement inconnue : contacter les developpeurs +96 : _(""" +Contact méthode continue. Pour l'option SANS_GROUP_NO_FR, il faut que le frottement soit activé. """), -97: _(""" - Contact methode CONTINUE. Pour l'option SANS_GROUP_NO, l'intégration aux noeuds est obligatoire. +97 : _(""" +Contact méthode continue. Pour l'option SANS_GROUP_NO et SANS_GROUP_NO_FR, l'intégration aux noeuds est obligatoire. """), - - } diff --git a/Aster/Cata/cataSTA9/Messages/contact2.py b/Aster/Cata/cataSTA9/Messages/contact2.py index 2a40d493..1f04f5a5 100644 --- a/Aster/Cata/cataSTA9/Messages/contact2.py +++ b/Aster/Cata/cataSTA9/Messages/contact2.py @@ -1,4 +1,4 @@ -#@ MODIF contact2 Messages DATE 24/04/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF contact2 Messages DATE 01/04/2008 AUTEUR ABBAS M.ABBAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -31,7 +31,8 @@ cata_msg={ """), 12 : _(""" -Contact méthode CONTINUE. Une zone de contact contient à la fois des éléments axisymétriques et non axisymétriques ! +Contact méthode continue. Une zone de contact contient à la fois des éléments axisymétriques et non axisymétriques. +Vérifier votre AFFE_MODELE et le type de vos mailles dans la définition des surfaces de contact. """), } diff --git a/Aster/Cata/cataSTA9/Messages/contact3.py b/Aster/Cata/cataSTA9/Messages/contact3.py index 4b788971..6a8152de 100644 --- a/Aster/Cata/cataSTA9/Messages/contact3.py +++ b/Aster/Cata/cataSTA9/Messages/contact3.py @@ -1,4 +1,4 @@ -#@ MODIF contact3 Messages DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF contact3 Messages DATE 22/04/2008 AUTEUR ABBAS M.ABBAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -17,111 +17,226 @@ # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== - def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" +1 : _(""" Le mot-clef < %(k1)s > est inconnu dans AFFE_CONTACT. Contactez les développeurs. Note DVP: erreur de cohérence fortran/catalogue. """), -2: _(""" +2 : _(""" Le mot-clef < %(k1)s > n'est pas renseigné dans AFFE_CONTACT alors qu'il est obligatoire. Contactez les développeurs. Note DVP: erreur de cohérence fortran/catalogue. """), -3: _(""" +3 : _(""" L'option < %(k1)s > ne correspond a aucune option permise par le mot-clef < %(k2)s > dans AFFE_CONTACT. Contactez les développeurs. Note DVP: erreur de cohérence fortran/catalogue. """), -4: _(""" -Les méthodes de contact doivent etre identiques pour toutes les zones de contact. + +13 : _(""" +L'algorithme de Newton a échoué lors de la projection du point de contact de coordonnées + (%(r1)s,%(r2)s,%(r3)s) +sur la maille %(k1)s. +Erreur de définition de la maille ou projection difficile. Contactez l'assistance dans ce dernier cas. """), -5: _(""" -Le type de formulation du contact doit etre le meme pour toutes les zones de contact. +14 : _(""" +Les vecteurs tangents sont nuls au niveau du projeté du point de contact de coordonnées + (%(r1)s,%(r2)s,%(r3)s) +sur la maille %(k1)s, +Erreur de définition de la maille ou projection difficile. Contactez l'assistance dans ce dernier cas. """), -10: _(""" -La matrice est singulière lors du calcul du repère local tangent au noeud maitre %(k1)s sur la maille maitre %(k2)s. -Une erreur de définition de la maille: les vecteurs tangents sont colinéaires. +15 : _(""" +La direction d'appariement fixe données par le vecteur DIRE_APPA est nulle ! """), -11: _(""" -La matrice est singulière lors de la projection du point de contact sur la maille maitre %(k1)s. -Une erreur de définition de la maille: les vecteurs tangents sont colinéaires. +16 : _(""" +Contact méthode continue. +La méthode d'intégration est GAUSS, le champ VALE_CONT n'est pas créé. """), -12: _(""" -L'algorithme de Newton a échoué lors du calcul du repère local tangent au noeud maitre %(k1)s sur la maille maitre %(k2)s. -Erreur de définition de la maille ou projection difficile. Contactez l'assistance dans ce dernier cas. +17 : _(""" +Contact méthode continue. +Avec un FOND-FISSURE, il est impossible d'utiliser les options suivantes: +- LISSAGE = 'OUI' ou/et +- NORMALE = 'ESCL' ou +- NORMALE = 'MAIT_ESCL' """), -13: _(""" -L'algorithme de Newton a échoué lors de la projection du point de contact sur la maille maitre %(k1)s. -Erreur de définition de la maille ou projection difficile. Contactez l'assistance dans ce dernier cas. + +23 : _(""" +Le vecteur normal est nul au niveau du projeté du point de contact de coordonnées + (%(r1)s,%(r2)s,%(r3)s) +sur la maille %(k1)s, +Erreur de définition de la maille ou projection difficile. Contactez l'assistance dans ce dernier cas. """), -14: _(""" -Les vecteurs tangents sont nuls au noeud maitre %(k1)s sur la maille maitre %(k2)s. -Une erreur de définition de la maille. +24 : _(""" +Il y a plus de trois noeuds exclus sur la maille esclave %(k1)s par l'option SANS_GROUP_NO ou SANS_NOEUD. +Supprimer directement la maille esclave de la définition de la surface. """), -21: _(""" -Les vecteurs tangents sont nuls lors de la projection du point de contact sur la maille maitre %(k1)s. -Une erreur de définition de la maille.s +25 : _(""" +L'élément porté par la maille esclave %(k1)s n'est pas du bon type pour un fond de fissure, elle est de type %(k2)s """), -22: _(""" -L'élement inconnu sur la maille maitre %(k1)s. -Cet élément n'est pas programmé pour le contact avec formualtion continue. -Contactez l'assistance. +26 : _(""" +Le vecteur normal est nul au niveau du noeud %(k1)s. """), -23: _(""" -Le vecteur normal est nul sur le noeud maitre %(k1)s. -Si vous avez activé le lissage, essayeé de le désactiver. +27 : _(""" +Le vecteur normal est nul au niveau de la maille %(k1)s. """), -24: _(""" -Il y a plus de trois noeuds exclus sur la maille esclave %(k1)s par l'option SANS_GROUP_NO ou SANS_NOEUD. -Supprimer directement la maille esclave de la définition de la surface. +28 : _(""" +Le statut du contact a changé %(i1)d fois au point de contact numéro %(i2)d sur la maille esclave %(k1)s +Présence de flip-flop. """), -25: _(""" -L'élément porté par la maille esclave %(k1)s n'est pas du bon type pour un fond de fissure, elle est de type %(k2)s +30 : _(""" +Le couple de surfaces de contact %(i1)s pour l'appariement nodal est mal défini. +Il faut moins de noeuds esclaves que de noeuds maitres pour respecter l'injectivité. +Or ici: +Nombre de noeuds maitres : %(i2)s +Nombre de noeuds esclaves: %(i3)s +Conseil: intervertissez les deux surfaces maitres et esclaves """), -26: _(""" -Schema d'intégration inconnu sur la maille %(k1)s. +31 : _(""" +Les vecteurs tangents sont nuls au niveau quand on projette le noeud esclave +%(k1)s sur la maille %(k2)s """), -27: _(""" -Code erreur introuvable. Contactez les développeurs. +32: _(""" + Le mot-clef DIST_POUT ne fonctionne qu'avec des sections circulaires définies dans AFFE_CARA_ELEM. + """), + +33 : _(""" +L'erreur suivante est arrivée lors du pré-calcul des normales aux noeuds activées par les options +- LISSAGE = 'OUI' ou/et +- NORMALE = 'ESCL' ou +- NORMALE = 'MAIT_ESCL' """), -28: _(""" -Le statut du contact a changé %(i1)d fois au point de contact numéro %(i2)d sur la maille esclave %(k1)s -Présence de flip-flop. +34 : _(""" +Echec de l'orthogonalisation du repère tangent construit au niveau du projeté du point de contact de coordonnées + (%(r1)s,%(r2)s,%(r3)s) +sur la maille %(k1)s, +Erreur de définition de la maille ou projection difficile. Contactez l'assistance dans ce dernier cas. +"""), + +35 : _(""" +Les vecteurs tangents sont nuls au niveau quand on projette le noeud esclave +%(k1)s sur la noeud maitre %(k2)s +"""), + +36 : _(""" +La maille %(k1)s est de type 'POI1', ce n'est pas autorisé sur une maille maitre. +"""), + + +38 : _(""" +La maille %(k1)s est de type poutre et sa tangente est nulle. +Vérifiez votre maillage. +"""), + +39: _(""" +Problème pour récupérer l'épaisseur de la coque pour la maille %(k1)s +"""), + +40: _(""" +L'excentricité de la coque pour la maille %(k1)s n'est pas traitée +"""), + +41: _(""" +Problème pour récupérer l'excentricité de la coque pour la maille %(k1)s +"""), + +42 : _(""" +Contact méthodes discrètes. Il y a mélange de mailles quadratiques (TRIA6, TRIA7 ou QUAD9) avec des mailles QUAD8 sur la surface escalve du contact. +On supprime la liaison entre les noeuds sommets et noeud milieu sur le QUAD8. +Il y a risque d'interpénétration du noeud milieu pour le QUAD8 considéré. +"""), + +43 : _(""" +La normale que vous avez prédéfinie par (VECT_* = 'VECT_Y') n'est pas utilisable en 2D. +Utilisez plutot (ou Dingo) VECT_* = 'FIXE' """), -30: _(""" -Le modèle ne comporte pas de fissure XFEM. + +50: _(""" +Avec l'option VECT_MAIT = 'FIXE', seule l'option NORMALE = 'MAIT' est possible. """), -31: _(""" -La définition du contact XFEM ne comporte pas autant de zones que de fissures XFEM dans le modèle. +51: _(""" +Avec l'option VECT_MAIT = 'VECT_Y', seule l'option NORMALE = 'MAIT' est possible. """), +52: _(""" +Avec l'option VECT_ESCL = 'FIXE', seule l'option NORMALE = 'ESCL' est possible. +"""), -99: _(""" -La SD contact < %(k1)s > est introuvable. Contactez les développeurs. +53: _(""" +Avec l'option VECT_ESCL = 'VECT_Y', seule l'option NORMALE = 'ESCL' est possible. """), +54: _(""" +Le LISSAGE n'est possible qu'avec des normales automatiques VECT_ESCL='AUTO' et/ou VECT_MAIT='AUTO'. +"""), +54: _(""" +Le LISSAGE n'est possible qu'avec des normales automatiques VECT_ESCL='AUTO' et/ou VECT_MAIT='AUTO'. +"""), + +60 : _(""" +La maille %(k1)s est de type 'POI1', elle nécessite l'utilisation de l'option +NORMALE='FIXE' avec une normale non-nulle. +"""), + +85 : _(""" +Contact méthode continue. + -> Il y a échec de la boucle contraintes actives lors du traitement + du contact + -> Risque & Conseil : + Vérifier votre maillage ou augmenter ITER_CONT_MAX. +"""), + +86 : _(""" +Contact méthode continue. + -> Il y a convergence forcée sur boucle contraintes actives lors du traitement + du contact. + -> Risque & Conseil : + La convergence forcée se déclenche lorsque le problème a du mal à converger. Il y a des risques que le problème + soit un peu moins bien traité. Vérifiez bien que vous n'avez pas d'interpénétration entre les mailles. S'il y des + interpénétrations intempestives, tentez de découper plus finement en temps votre problème. +"""), + +87 : _(""" +Contact méthode continue. + -> Il y a convergence forcée sur boucle seuil frottement lors du traitement du + contact. + -> Risque & Conseil : + La convergence forcée se déclenche lorsque le problème a du mal à converger. Il y a des risques que le problème + soit un peu moins bien traité. La condition de frottement de Coulomb est peut etre mal prise en compte. Risque de + résultats faux sur les forces d'adhérence. Essayez de découper plus finement en temps votre problème. +"""), + +88 : _(""" +Contact méthode continue. + -> Il y a convergence forcée sur boucle de géométrie lors du traitement du + contact. + -> Risque & Conseil : + La convergence forcée se déclenche lorsque le problème a du mal à converger + lors de grands glissements relatifs entre deux surfaces de contact. + Il y a des risques que le problème soit un peu moins bien traité. + Vérifiez bien que vous n'avez pas d'interpénétration entre les mailles. + S'il y des interpénétrations intempestives, tentez de découper plus finement en temps votre problème. +"""), } diff --git a/Aster/Cata/cataSTA9/Messages/contactdebg.py b/Aster/Cata/cataSTA9/Messages/contactdebg.py index 5d0447cc..f49c9cb6 100644 --- a/Aster/Cata/cataSTA9/Messages/contactdebg.py +++ b/Aster/Cata/cataSTA9/Messages/contactdebg.py @@ -1,4 +1,4 @@ -#@ MODIF contactdebg Messages DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF contactdebg Messages DATE 01/04/2008 AUTEUR ABBAS M.ABBAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -118,10 +118,6 @@ cata_msg={ Appariement de type maitre/esclave - Creation de l'objet pour appariement symetrique. """), -98: _(""" - Erreur fatale <%(i1)s> dans <%(k1)s>: contacter les developpeurs -"""), - 99: _(""" Message inconnu lors du debuggage : contacter les developpeurs """), diff --git a/Aster/Cata/cataSTA9/Messages/discretisation.py b/Aster/Cata/cataSTA9/Messages/discretisation.py new file mode 100644 index 00000000..437f2dc6 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/discretisation.py @@ -0,0 +1,97 @@ +#@ MODIF discretisation Messages DATE 19/12/2007 AUTEUR ABBAS M.ABBAS +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { + +1 : _(""" +Certains pas de temps de la liste (LISTE_INST) sont plus petits + que le pas de temps minimal renseigné (SUBD_PAS_MINI) +"""), + +2 : _(""" + il faut donner SUBD_NIVEAU et/ou SUBD_PAS_MINI +"""), + +3 : _(""" + le nombre de subdivisions du pas de temps doit etre plus grand que 1 (SUBD_PAS) +"""), + +6 : _(""" + valeur de SUBD_ITER_IGNO incoherent avec ITER_GLOB_MAXI. + augmentez ITER_GLOB_MAXI +"""), + +7 : _(""" + valeur de SUBD_ITER_FIN incoherent avec ITER_GLOB_MAXI. + augmentez ITER_GLOB_MAXI +"""), + + +86 : _(""" +Il n'y a aucun instant de calcul ('LIST_INST' absent). +"""), + +87 : _(""" +La liste d'instants n'est pas croissante. +"""), + +88 : _(""" +Vous tentez d'accéder à l'instant initial ou final, alors que vous +n'avez pas une évolution ordonnée (EVOLUTION='SANS') +"""), + +89 : _(""" +Instant initial introuvable dans la liste d'instants (LIST_INST). +"""), + +90 : _(""" +Instant final introuvable dans la liste d'instants (LIST_INST). +"""), + +91 : _(""" + NUME_INST_INIT plus petit que NUME_INST_FIN avec EVOLUTION: 'RETROGRADE' +"""), + +92 : _(""" + NUME_INST_INIT plus grand que NUME_INST_FIN +"""), + +93: _(""" + NUME_INST_INIT n'appartient pas à la liste d'instants +"""), + +94 : _(""" + -> Le numéro d'ordre correspondant à l'instant final de calcul NUME_INST_FIN + n'appartient pas à la liste des numéros d'ordre. + Dans ce cas, Aster considère pour numéro d'ordre final, le dernier de + la liste fournie. + -> Risque & Conseil : + Afin d'éviter des pertes de résultats, assurez-vous que le numéro d'ordre + associé à l'instant NUME_INST_FIN appartienne bien à la liste des numéros + d'ordre. +"""), + +99 : _(""" +Le nombre de niveau de subdivisions doit etre plus grand que 1 (SUBD_NIVEAU) +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/discrets.py b/Aster/Cata/cataSTA9/Messages/discrets.py index 0d23d4a5..6bfeeac3 100644 --- a/Aster/Cata/cataSTA9/Messages/discrets.py +++ b/Aster/Cata/cataSTA9/Messages/discrets.py @@ -1,4 +1,4 @@ -#@ MODIF discrets Messages DATE 28/03/2007 AUTEUR PELLET J.PELLET +#@ MODIF discrets Messages DATE 11/09/2007 AUTEUR DURAND C.DURAND # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -24,35 +24,35 @@ def _(x) : return x cata_msg={ 1: _(""" -element discret %(k1)s . Il n'y a pas de rotation non-lineaire possible. +élément discret %(k1)s . +Il n'y a pas de rotation non-linéaire possible. """), 2: _(""" -element discret %(k1)s . Il n'y a pas de comportement\n -non-lineaire possible suivant z ou en rotation autour de x,y en 2d. +élément discret %(k1)s . +Il n'y a pas de comportement non-lineaire possible suivant Z +ou en rotation autour de X,Y en 2D. """), 3: _(""" -element discret %(k1)s . Il n'y a pas de comportement\n -non-lineaire possible en rotation ou suivant z en 2d. +élément discret %(k1)s . +Il n'y a pas de comportement non-linéaire possible en rotation +ou suivant Z en 2D. """), 4: _(""" -element discret. Le pas de temps est devenu trop petit : %(r1)12.5E . +élément discret. +Le pas de temps est devenu trop petit : %(r1)12.5E . """), 5: _(""" -element discret %(k1)s . Les caracteristiques sont obligatoirement\n -donnees dans le repere local du discret.. +élément discret %(k1)s . +Les caractéristiques sont obligatoirement données dans le repère local du discret. """), 6: _(""" -pour les elements discrets il faut definir un repere dans affe_cara_elem\n +pour les éléments discrets il faut définir un repère dans AFFE_CARA_ELEM maille : %(k1)s """), } - - - - diff --git a/Aster/Cata/cataSTA9/Messages/dvp.py b/Aster/Cata/cataSTA9/Messages/dvp.py index 909551e8..b1b4c97f 100644 --- a/Aster/Cata/cataSTA9/Messages/dvp.py +++ b/Aster/Cata/cataSTA9/Messages/dvp.py @@ -1,4 +1,4 @@ -#@ MODIF dvp Messages DATE 20/02/2007 AUTEUR LEBOUVIER F.LEBOUVIER +#@ MODIF dvp Messages DATE 10/12/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -41,4 +41,29 @@ cata_msg={ Erreur numérique (floating point exception). """), +3 : _(""" + Erreur de programmation : Nom de grandeur inattendu : %(k1)s + Routine : %(k2)s +"""), + +4 : _(""" + On ne sait pas traiter ce type d'élément : %(k1)s +"""), + + +97 : _(""" + Erreur signalée dans la bibliothèque MED + nom de l'utilitaire : %(k1)s + code retour : %(i1)d +"""), + + +98 : _(""" + Erreur lors du traitement du contact. +"""), + +99 : _(""" + Le calcul de l'option %(k1)s n'est pas prévue avec Arlequin. +"""), + } diff --git a/Aster/Cata/cataSTA9/Messages/dynamique.py b/Aster/Cata/cataSTA9/Messages/dynamique.py index bbff4bf2..b923c176 100644 --- a/Aster/Cata/cataSTA9/Messages/dynamique.py +++ b/Aster/Cata/cataSTA9/Messages/dynamique.py @@ -1,4 +1,4 @@ -#@ MODIF dynamique Messages DATE 15/05/2007 AUTEUR GNICOLAS G.NICOLAS +#@ MODIF dynamique Messages DATE 21/02/2008 AUTEUR ANDRIAM H.ANDRIAMBOLOLONA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -94,4 +94,17 @@ cata_msg={ Avec le pas de temps maximal, le nombre de pas de calcul est %(i1)d """), +13: _(""" + Arret par manque de temps CPU à la fréquence : %(i1)d + - Temps moyen par pas fréquence : %(r1)f + - Temps cpu restant : %(r2)f + + La base globale est sauvegardée. Elle contient les pas archivés avant l'arret. +"""), + +14: _(""" + La matrice est presque singulière à la fréquence : %(r1)f + Cette fréquence est probablement une fréquence propre du système. +"""), + } diff --git a/Aster/Cata/cataSTA9/Messages/elasmult0.py b/Aster/Cata/cataSTA9/Messages/elasmult0.py new file mode 100644 index 00000000..a2641714 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/elasmult0.py @@ -0,0 +1,28 @@ +#@ MODIF elasmult0 Messages DATE 17/07/2007 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +On ne peut avoir à la fois NOM_CAS et MODE_FOURIER. +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/elements.py b/Aster/Cata/cataSTA9/Messages/elements.py index a666107f..b208166b 100644 --- a/Aster/Cata/cataSTA9/Messages/elements.py +++ b/Aster/Cata/cataSTA9/Messages/elements.py @@ -1,190 +1,177 @@ -#@ MODIF elements Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF elements Messages DATE 04/06/2008 AUTEUR PROIX J-M.PROIX # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - arret du code +1 : _(""" + AFFE_CARA_ELEM : mot clé GENE_TUYAU + problème : OMEGA est différent de OMEGA2 + omega = %(r1)f + omega2 = %(r2)f """), -2: _(""" - abs(rayon2-rayon1).gt.epsi +5 : _(""" + problème de maillage TUYAU : + pour une maille définie par les noeuds N1 N2 N3, + le noeud N3 doit etre le noeud milieu """), -3: _(""" - abs(theta2-theta1).gt.epsi +6 : _(""" + GENE_TUYAU + il faut donner un vecteur non colinéaire au tuyau """), -4: _(""" - abs(omega2-omega1).gt.epsi +7 : _(""" + -> L'angle du coude est trop grand + ANGLE = %(r1)f + ANGLE MAX = %(r2)f + -> Risque & Conseil : mailler plus fin """), -5: _(""" - probleme de maillage tuyau : pour une maille definie par les noeuds n1 n2 n3 le noeud n3 doit etre le noeud milieu +9 : _(""" + il faut renseigner le coefficient E_N dans les cas des déformations planes et de l'axisymétrie + on ne regarde donc que le cas des contraintes planes. """), -6: _(""" - gene_tuyau il faut donner un vecteur non colineaire au tuyau -"""), - -7: _(""" - angle du coude trop grand -"""), - -8: _(""" - mailler plus fin -"""), - -9: _(""" - il faut renseigner le coefficient e_n dans les cas des deformations planes et de l'axisymetrie, on ne regarde donc que le cas des contraintes planes. -"""), - -10: _(""" - Subroutine chpver : +10 : _(""" + Subroutine CHPVER : le champ %(k1)s n'a pas le bon type : type autorisé :%(k2)s type du champ :%(k3)s """), -11: _(""" - la modelisation : %(k1)s n'est pas traitee. -"""), - -12: _(""" - nombre de couches obligatoirement superieur a 0 -"""), - -13: _(""" - nombre de couches limite a 10 pour les coques 3d -"""), - -14: _(""" - le type d'element : %(k1)s n'est pas prevu. +11 : _(""" + La modélisation utilisée n'est pas traitée. """), -15: _(""" - la nature du materiau %(k1)s n'est pas traitee, seules sont considerees les natures : elas, elas_istr, elas_orth . +12 : _(""" + nombre de couches obligatoirement supérieur à 0 """), -16: _(""" - type de maille inconnu +13 : _(""" + nombre de couches limité a 10 pour les coques 3d """), -17: _(""" - noeuds confondus pour un element +14 : _(""" + le type d'élément : %(k1)s n'est pas prevu. """), -18: _(""" - nno invalide +15 : _(""" + la nature du matériau %(k1)s n'est pas traitée + seules sont considérées les natures : ELAS, ELAS_ISTR, ELAS_ORTH . """), -19: _(""" - pb1 +17 : _(""" + noeuds confondus pour un élément """), -20: _(""" - aucun type d elements necorrespond au type demande +18 : _(""" + le nombre de noeuds d'un tuyau est différent de 3 ou 4 """), -21: _(""" - predicteur elas hors champs +20 : _(""" + aucun type d'éléments ne correspond au type demandé """), -22: _(""" - irep (indicateur de changement de repere) doit etre egal a 0 ou 1 +21 : _(""" + prédicteur ELAS hors champs """), -23: _(""" - piles saturees -"""), - -24: _(""" +24 : _(""" derivatives of "mp" not defined """), -25: _(""" - on passe en mecanisme 2 +25 : _(""" + on passe en mécanisme 2 """), -26: _(""" - chargement en meca 2 trop important a verifier +26 : _(""" + chargement en mécanisme 2 trop important + à vérifier """), -27: _(""" - on poursuit en mecanisme 2 +27 : _(""" + on poursuit en mécanisme 2 """), -28: _(""" - decharge negative sans passer par meca 1 diminuer le pas de temps +28 : _(""" + décharge négative sans passer par meca 1 + diminuer le pas de temps """), -29: _(""" - on revient en mecanisme 1 +29 : _(""" + on revient en mécanisme 1 """), -30: _(""" - pas de retour dans meca 1 trop important diminuer le pas de temps +30 : _(""" + pas de retour dans meca 1 trop important + diminuer le pas de temps """), -31: _(""" - type element %(k1)s incompatible avec %(k2)s +31 : _(""" + type d'élément %(k1)s incompatible avec %(k2)s """), -32: _(""" - comportement inattendu +32 : _(""" + le comportement %(k1)s est inattendu """), -33: _(""" - nombre d iterations > 1000 . +33 : _(""" + la convergence locale de la loi GLRC_DAMAGE n'est pas atteinte en 1000 itérations : + XM1 vaut %(r1)f + XM2 vaut %(r2)f + YM1 vaut %(r3)f + YM2 vaut %(r4)f """), -34: _(""" - element non traite %(k1)s +34 : _(""" + élément non traité %(k1)s """), -35: _(""" - pas d excentrement avec stat_non_line maille %(k1)s +35 : _(""" + pas d'excentrement avec STAT_NON_LINE + maille : %(k1)s """), -36: _(""" - nombre de couches negatif ou nul : %(k1)s +36 : _(""" + nombre de couches négatif ou nul : %(k1)s """), -37: _(""" - Subroutine chpver : +37 : _(""" + Subroutine CHPVER : le champ %(k1)s n'a pas la bonne grandeur : grandeur autorisée :%(k2)s grandeur du champ :%(k3)s """), -38: _(""" - ! pb phesen.ne.phenom ! +38 : _(""" + Le phénomène sensible %(k1)s choisi ne correspond pas au phénomène %(k2)s dont il est issu """), -39: _(""" - l'axe de reference est normal a un element de plaque anisotrope +39 : _(""" + l'axe de référence est normal à un élément de plaque anisotrope """), -40: _(""" +40 : _(""" -> L'axe de référence pour le calcul du repère local est normal à un au moins un élément de plaque. -> Risque & Conseil : @@ -193,47 +180,50 @@ cata_msg={ """), -41: _(""" - impossibilite : vous avez un materiau de type "elas_coque" et vous n'avez pas defini la raideur de membrane, ni sous la forme "memb_l", ni sous la forme "m_llll". -"""), - -42: _(""" - comportement materiau non admis +41 : _(""" + impossibilité : + vous avez un materiau de type "ELAS_COQUE" et vous n'avez pas défini la raideur de membrane, + ni sous la forme "MEMB_L", ni sous la forme "M_LLLL". """), -43: _(""" - impossibilite : vous avez un materiau de type "elas_coque" et le determinant de la sous-matrice de hooke relative au cisaillement est nul. +42 : _(""" + comportement matériau non admis """), -44: _(""" - unknown option demanded +43 : _(""" + impossibilité : + vous avez un materiau de type "ELAS_COQUE" et le determinant de la sous-matrice de Hooke relative au cisaillement est nul. """), -45: _(""" - n < 0 +45 : _(""" + L'un des coefficients materiaux N_VP et M_VP de la loi de comportement VENDO_CHAB + est négatif. Or ce n'est physiquement pas possible. """), -46: _(""" - nombre de couches negatif ou nul +46 : _(""" + nombre de couches négatif ou nul """), -47: _(""" - pas d excentrement avec forc_noda maille %(k1)s +47 : _(""" + pas d'excentrement avec FORC_NODA + maille : %(k1)s """), -48: _(""" - impossibilite, la surface de l'element est nulle. +48 : _(""" + impossibilité, la surface de l'élément est nulle. """), -49: _(""" - l'axe de reference est normal a un element de plaque - calcul option impossible - orienter ces mailles +49 : _(""" + l'axe de référence est normal à un élément de plaque + calcul option impossible + orienter ces mailles """), -50: _(""" - comportement elastique inexistant +50 : _(""" + comportement élastique inexistant """), -51: _(""" +51 : _(""" -> Le type de comportement %(k1)s n'est pas prévu pour le calcul de SIGM_ELNO_DEPL. Les seuls comportements autorisés sont : ELAS, ELAS_COQUE, ou ELAS_ORTH @@ -242,198 +232,107 @@ cata_msg={ ou SIGM_ELNO_COQU (contraintes en un point de l'épaisseur). """), -52: _(""" - lorsqu'il y a variation de temperature dans l'epaisseur, utiliser "stat_non_line" -"""), - -53: _(""" - probleme: temperature sur la maille: %(k1)s : il manque la composante "temp" -"""), - -54: _(""" - element non prevu -"""), - -55: _(""" - elrefa inconnu: %(k1)s -"""), - -56: _(""" - erreur programmeur ecrasement de dff, dimf est inferieur au nb de noeuds * nb cmps -"""), - -57: _(""" - erreur programmeur: ecrasement de ff, dimf est inferieur au nb de noeuds -"""), - -58: _(""" - la nature du materiau %(k1)s necessite la definition du coefficient b_endoge dans defi_materiau. -"""), - -59: _(""" - bizarre : %(k1)s +52 : _(""" + -> Le type de comportement %(k1)s n'est pas prévu pour le calcul de + SIGM_ELNO_DEPL avec chargement thermique. Les seuls comportements autorisés sont : + ELAS, ou ELAS_ORTH """), -60: _(""" - on ne sait pas traiter : %(k1)s +53 : _(""" + problème : + température sur la maille: %(k1)s : il manque la composante "TEMP" """), -61: _(""" - axi : r=0 +55 : _(""" + ELREFA inconnu: %(k1)s """), -62: _(""" - group_ma : %(k1)s inconnu dans le maillage +58 : _(""" + la nature du matériau %(k1)s nécessite la définition du coefficient B_ENDOGE dans DEFI_MATERIAU. """), -63: _(""" - erreurs group_ma +62 : _(""" + GROUP_MA : %(k1)s inconnu dans le maillage """), -64: _(""" - le liaison_*** de %(k1)s implique les noeuds physiques %(k2)s et %(k3)s et traverse l'interface +64 : _(""" + le LIAISON_*** de %(k1)s implique les noeuds physiques %(k2)s et %(k3)s et traverse l'interface """), -65: _(""" - le liaison_*** de %(k1)s implique le noeud physique %(k2)s et touche l'interface +65 : _(""" + le LIAISON_*** de %(k1)s implique le noeud physique %(k2)s et touche l'interface """), -66: _(""" - si noeud_orig : donner un group_ma ou une liste de mailles. on ne reordonne pas les group_no et les listes de noeuds. +66 : _(""" + si NOEUD_ORIG : donner un GROUP_MA ou une liste de mailles + on ne réordonne pas les GROUP_NO et les listes de noeuds. """), -67: _(""" - le group_no : %(k1)s n'existe pas. +67 : _(""" + le GROUP_NO : %(k1)s n'existe pas. """), -68: _(""" - le noeud origine %(k1)s ne fait pas parti du chemin +68 : _(""" + le noeud origine %(k1)s ne fait pas partie du chemin """), -69: _(""" - le noeud origine %(k1)s n'est pas une extremite +69 : _(""" + le noeud origine %(k1)s n'est pas une extremité """), -70: _(""" - pas d'origine definie par noeud_orig ou group_no_orig +70 : _(""" + pas d'origine définie par NOEUD_ORIG ou GROUP_NO_ORIG """), -71: _(""" - echec dans la recherche du noeud origine +71 : _(""" + échec dans la recherche du noeud origine """), -72: _(""" - group_no oriente : noeud origine = %(k1)s +72 : _(""" + GROUP_NO orienté : noeud origine = %(k1)s """), -73: _(""" - le group_ma : %(k1)s n'existe pas. +73 : _(""" + le GROUP_MA : %(k1)s n'existe pas. """), -74: _(""" - si le fond est une courbe fermee maille_orig ou group_ma_orig doit accompagner noeud_orig +74 : _(""" + si le fond est une courbe fermée MAILLE_ORIG ou GROUP_MA_ORIG doit accompagner NOEUD_ORIG """), -75: _(""" +75 : _(""" le noeud_orig n'appartient pas a la maille_orig """), -76: _(""" +76 : _(""" la maille_orig %(k1)s n'appartient pas au fond de fissure """), -77: _(""" - le noeud extremite %(k1)s n'est pas le dernier noeud -"""), - -78: _(""" - group_no oriente : noeud extremite = %(k1)s +77 : _(""" + le noeud extremité %(k1)s n'est pas le dernier noeud """), -79: _(""" - il y a a la fois des elements volumiques de degre 1 et de degre 2 dans le modele. on a besoin de savoir si on est en lineaire ou en quadratique pour choisir la methode de lissage. +78 : _(""" + GROUP_NO orienté : noeud extremité = %(k1)s """), -80: _(""" - le concept fond_fiss est mal cree +83 : _(""" + le type des mailles des lèvres doit etre quadrangle ou triangle """), -81: _(""" - le .vale du cham_no dire_theta n'a pas la bonne taille +84 : _(""" + %(k1)s CHAM_NO inexistant """), -82: _(""" - l'option de lissage 'lagrang2' n'a pas ete developpee lorsque le nombre de noeuds d'un fond de fissure ferme est pair. +87 : _(""" + bad definition of MP1 and MP2 """), -83: _(""" - le type des mailles des levres doit etre quadrangle ou triangle +90 : _(""" +Erreur de programmation : + L'attribut NBSIGM n'est pas défini pour cette modélisation. +Solution : + Il faut modifier la catalogue phenomene_modelisation__.cata pour ajouter NBSIGM pour cette modélisation. """), -84: _(""" - %(k1)s cham_no inexistant -"""), - -85: _(""" - initial point nm out of domain -"""), - -86: _(""" - ndicho .gt. 10000 -"""), - -87: _(""" - bad definition of mp1 and mp2 -"""), - -88: _(""" - le fond de fissure ne doit etre defini que par un noeud ( revoir le group_no ) -"""), - -89: _(""" - le fond de fissure ne doit etre defini que par un noeud -"""), - - - - - - - - -91: _(""" - mot cle fond_fiss obligatoire -"""), - -92: _(""" - le fond de fissure ne doit etre defini que par un noeud ( revoir fond_fiss ) -"""), - -93: _(""" - %(k1)s n'est pas un group_no ou un group_ma -"""), - -94: _(""" - arret sur erreur(s) utilisateur. -"""), - -95: _(""" - les mailles des levres doivent etre lineiques -"""), - -96: _(""" - erreur : la levre superieure possede une maille repetee 2 fois : maille %(k1)s . revoir les donnees -"""), - -97: _(""" - erreur : la levre inferieure possede une maille repetee 2 fois : maille %(k1)s . revoir les donnees -"""), - -98: _(""" - erreur : la levre inferieure et la levre superieure ont une maille surfacique en commun. revoir les donnees -"""), - -99: _(""" - probleme dans le calcul de la normale a la fissure -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/elements2.py b/Aster/Cata/cataSTA9/Messages/elements2.py index d10730ff..bc4ba5e8 100644 --- a/Aster/Cata/cataSTA9/Messages/elements2.py +++ b/Aster/Cata/cataSTA9/Messages/elements2.py @@ -1,8 +1,8 @@ -#@ MODIF elements2 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF elements2 Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,157 +20,37 @@ def _(x) : return x -cata_msg={ +cata_msg = { -2: _(""" - le mot cle normale doit comporter 3 composantes +27 : _(""" + pas d'intersection trouvé """), -3: _(""" - le degre du polynome doit etre au plus egal a 7 -"""), - -4: _(""" - probleme dans rinf et rsup -"""), - -5: _(""" - le mot cle dtan_orig doit comporter 3 composantes -"""), - -6: _(""" - le mot cle dtan_extr doit comporter 3 composantes -"""), - -7: _(""" - le mot cle vect_grno_orig doit comporter 2 groupes de points -"""), - -8: _(""" - le mot cle vect_grno_extr doit comporter 2 groupes de points -"""), - -9: _(""" - melang1 seg2 et seg3 : les mailles du fond de fissure doivent etre du meme type -"""), - -10: _(""" - le groupe de noeuds %(k1)s definissant la fissure n'est pas ordonne -"""), - -11: _(""" - arret sur erreur utilisateur: deux group_no consecutifs incoherents -"""), - -12: _(""" - les mailles du fond de fissure doivent etre du type segment -"""), - -13: _(""" - melang2 seg2 et seg3 : les mailles du fond de fissure doivent etre du meme type -"""), - -14: _(""" - arret sur erreur utilisateur: deux mailles dufond de fissure sont non consecutives dans la numerotation des noeuds -"""), - -15: _(""" - arret sur erreur utilisateur: 2 group_ma du fond de fissure sontnon consecutifs dans la numerotation des noeuds -"""), - -16: _(""" - les mailles des levres doivent etre du type quadrangle ou triangle -"""), - -17: _(""" - melang3 seg2 et seg3 : les mailles du fond de fissure doivent etre du meme type -"""), - -18: _(""" - la liste de noeuds definissant la fissure n'est pas ordonnee -"""), - -19: _(""" - melang4 seg2 et seg3 : les mailles du fond de fissure doivent etre du meme type -"""), - -20: _(""" - arret sur erreur(s) utilisateur: deux mailles du fond de fissure sont non consecutives dans la numerotation des noeuds -"""), - -21: _(""" - erreur : le fond de fissure possede un noeud repete 2 fois : noeud %(k1)s . revoir les donnees -"""), - -22: _(""" - les mailles du fond_inf et du fond_sup sont de type different -"""), - - - - - - - - -24: _(""" - le noeud %(k1)s n appartient pas au fond de fissure -"""), - -25: _(""" - le fond de fissure n est pas complet -"""), - -26: _(""" - pb prgm -"""), - -27: _(""" - no intersection found -"""), - -28: _(""" - indc = 1 (complet : translation et rotation) ou indc = 0 (incomplet : translation seulement ) obligatoirement. -"""), - -29: _(""" +29 : _(""" element faisceau homogeneise non prevu """), - - - - - -31: _(""" +31 : _(""" elrefe non prevu """), -32: _(""" +32 : _(""" comportement non trouve: %(k1)s """), -33: _(""" +33 : _(""" pas de dilatation thermique orthotrope pour coque_3d """), -34: _(""" +34 : _(""" les vecteurs sont au nombre de 1 ou 2 """), -35: _(""" - normale nulle ! -"""), - -36: _(""" - le type d'element : %(k1)s n'est pas traite. -"""), - -37: _(""" +37 : _(""" pas de zero, convergence impossible """), -38: _(""" +38 : _(""" -> L'option ANGL_AXE n'est pas prise en compte en 2D mais seulement en 3D. -> Risque & Conseil : @@ -180,139 +60,123 @@ cata_msg={ un repère d'orthotropie via ANGL_REP. """), -39: _(""" +39 : _(""" loi lema_seuil non implemente avec les poutres multi fibres """), -40: _(""" +40 : _(""" on ne sait pas integrer avec %(k1)s caracteristiques par fibre """), -41: _(""" +41 : _(""" cas avec inerties des fibres non programme """), -42: _(""" +42 : _(""" " %(k1)s " nom d'element inconnu. """), -43: _(""" - noeuds confondus pour un element: %(k1)s +43 : _(""" + noeuds confondus pour la maille: %(k1)s """), -44: _(""" +44 : _(""" option de matrice de masse %(k1)s inconnue """), -45: _(""" - on n'a pas trouver de variable interne correspondante a la deformation plastiqueequivalente cumulee +45 : _(""" + on n'a pas trouvé de variable interne correspondante a la déformation plastique équivalente cumulée """), -46: _(""" +46 : _(""" on ne traite pas les moments """), -47: _(""" +47 : _(""" l'option " %(k1)s " est inconnue """), -48: _(""" +48 : _(""" type de poutre inconnu """), -49: _(""" - charge repartie variable non admise sur un element courbe. +49 : _(""" + charge répartie variable non admise sur un élément courbe. """), -50: _(""" - charge repartie variable non admise sur un element variable. +50 : _(""" + charge répartie variable non admise sur un élément variable. """), -51: _(""" - on ne peut pas imposer de charges reparties suiveuses de type vitesse de vent sur les poutres courbes. +51 : _(""" + on ne peut pas imposer de charges réparties suiveuses de type vitesse de vent sur les poutres courbes. """), -52: _(""" - on ne peut pas imposer de charges reparties suiveuses sur les poutres courbes. +52 : _(""" + on ne peut pas imposer de charges réparties suiveuses sur les poutres courbes. """), -53: _(""" - un champ de vitesse de vent est impose sans donner un cx dependant de la vitesse sur une des poutres. +53 : _(""" + un champ de vitesse de vent est imposé sans donner un cx dépendant de la vitesse sur une des poutres. """), -54: _(""" - g est nul mais pas e +54 : _(""" + le module de cisaillement G est nul mais pas le module d'Young E """), -55: _(""" +55 : _(""" section circulaire uniquement """), -56: _(""" +56 : _(""" pour l'instant on ne fait pas le calcul de la matrice de masse d'un element de plaque q4g excentre. """), -57: _(""" +57 : _(""" pour l'instant on ne peut pas excentrer les elements q4g . """), -58: _(""" +58 : _(""" echec de convergence dans l'inversion du systeme par newton-raphson. """), -59: _(""" - pb -"""), - -60: _(""" +60 : _(""" mauvaise orientation de l element ! """), -61: _(""" +61 : _(""" " %(k1)s " nom d'option non reconnue """), -62: _(""" +62 : _(""" ! pb rcvala rhocp ! """), -63: _(""" +63 : _(""" ! comportement non trouve ! """), -64: _(""" - ! pb rccoma rhocp ! -"""), - -65: _(""" - ! deltat: div par zero ! +66 : _(""" + la matrice gyroscopique n'est pas disponible pour l'élément %(k1)s """), -66: _(""" - ! r axi: div par zero ! -"""), - -67: _(""" +67 : _(""" option non traitee """), -68: _(""" - une deformation initiale est presente dans la charge : incompatible avec la contrainte initiale sigma_init -"""), - -69: _(""" +69 : _(""" relation de comportement non traite """), -70: _(""" +70 : _(""" option non valide """), -71: _(""" +71 : _(""" comp_elas non programme pour les modelisations dkt. il faut utiliser comp_incr. """), -72: _(""" +72 : _(""" -> La réactualisation de la géométrie (DEFORMATION='PETIT_REAC' sous le mot clé COMP_INCR) est déconseillée pour les éléments de type plaque. Les grandes rotations ne sont pas modélisées correctement. @@ -321,111 +185,80 @@ cata_msg={ d'utiliser la modélisation COQUE_3D, avec DEFORMATION='GREEN_GR' """), -73: _(""" +73 : _(""" comportement non traite: %(k1)s """), -74: _(""" +74 : _(""" %(k1)s non implante. """), -75: _(""" - option "sief_elno_elga" non implantee pour la deformation "green_gr" +75 : _(""" + option "SIEF_ELNO_ELGA" non implantée pour la déformation "GREEN_GR" """), -76: _(""" +76 : _(""" la nature du materiau %(k1)s n'est pas traitee. """), -77: _(""" +77 : _(""" option : %(k1)s interdite """), -78: _(""" - element de bord pas encore programme -"""), - -79: _(""" - probleme eventuel dans le calcul des pressions sur les faces x-fem -"""), - -80: _(""" - elements de poutre noeuds confondus pour un element: %(k1)s +80 : _(""" + éléments de poutre noeuds confondus pour un élément: %(k1)s """), -81: _(""" - elements de poutre section variable affine :seul rectangle plein disponible. +81 : _(""" + éléments de poutre section variable affine :seul une section rectangle plein est disponible. """), -82: _(""" - elements de poutre section variable homothetique : l'aire initiale est nulle. +82 : _(""" + éléments de poutre section variable homothétique : l'aire initiale est nulle. """), -83: _(""" +83 : _(""" poutre section variable/constante passage par section homothetique avec a1 = a2 """), -84: _(""" +84 : _(""" elements de poutre l'option " %(k1)s " est inconnue """), -85: _(""" +85 : _(""" non prevu pour les sections rectangulaires """), -86: _(""" +86 : _(""" non prevu pour les sections generales """), -87: _(""" +87 : _(""" " %(k1)s " : option non traitee """), -88: _(""" +88 : _(""" element discret " %(k1)s " inconnu. """), -89: _(""" +89 : _(""" element discret (te0044): l'option " %(k1)s " est inconnue pour le type " %(k2)s " """), -90: _(""" - comp_elas non valide +90 : _(""" + COMP_ELAS non valide """), -91: _(""" +91 : _(""" " %(k1)s " matrice de decharge non developpee """), -92: _(""" - la loi dis_gricra doit etre utilisee avec deselements du type meca_dis_tr_l: element seg2 + modelisation dis_tr +92 : _(""" + la loi DIS_GRICRA doit etre utilisée avec des éléments du type MECA_DIS_TR_L : élément SEG2 + modelisation DIS_TR """), -93: _(""" - longueurs diff. pour rigi et amor -"""), - -94: _(""" - longueurs diff. pour mass et amor -"""), - -95: _(""" +95 : _(""" option de calcul invalide """), -96: _(""" - erreur calcul de texnp1 -"""), - -97: _(""" - erreur calcul de texn -"""), - -98: _(""" - erreur calcul de echnp1 -"""), - -99: _(""" - erreur calcul de echn -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/elements3.py b/Aster/Cata/cataSTA9/Messages/elements3.py index 748b8726..483be10a 100644 --- a/Aster/Cata/cataSTA9/Messages/elements3.py +++ b/Aster/Cata/cataSTA9/Messages/elements3.py @@ -1,8 +1,8 @@ -#@ MODIF elements3 Messages DATE 22/05/2007 AUTEUR GALENNE E.GALENNE +#@ MODIF elements3 Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,45 +20,17 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - erreur calcul de sigm1 -"""), - -2: _(""" - erreur calcul de sigmn -"""), - -3: _(""" - erreur calcul de eps1 -"""), - -4: _(""" - erreur calcul de epsn -"""), - -5: _(""" - erreur calcul de tpf1 -"""), - -6: _(""" - erreur calcul de tpfn -"""), - -8: _(""" - erreur calcul de coenp1 -"""), - -9: _(""" +9 : _(""" erreur calcul de coen """), -10: _(""" +10 : _(""" on ne peut pas affecter la modelisation "axis_diag" aux elements de l'axe """), -11: _(""" +11 : _(""" -> Attention vous avez une loi de comportement inélastique et vous etes en contraintes planes, la composante du tenseur de déformations EPZZ que vous allez calculer n'est valable que tant que vous restez dans le @@ -68,162 +40,147 @@ cata_msg={ la valeur de EPZZ calculée par cette option. """), -12: _(""" +12 : _(""" e, nu, alpha dependent de la temperature, tgu differente de tgv """), -13: _(""" - le calcul de dg n'a pas ete etendu a la plasticite ! -"""), - - - - - - - - -15: _(""" - nom d'element illicite -"""), - -16: _(""" +16 : _(""" comportement: %(k1)s non implante """), -17: _(""" +17 : _(""" le materiau %(k1)s n'est pas connu. seuls sont admis les materiaux 'ther', 'ther_coqmu' et 'ther_coque' pour les coques thermiques . """), -18: _(""" +18 : _(""" le materiau %(k1)s n'est pas connu. seuls sont admis les materiaux 'ther' et 'ther_coqmu' pour le calcul des flux pour les coques thermiques . """), -19: _(""" +19 : _(""" l'option %(k1)s n'est disponible qu'avec des elements tetra ou hexa. or, la maille %(k2)s est de type %(k3)s . """), -20: _(""" +20 : _(""" la maille %(k1)s ne repond pas au critere geometrique sur les mailles hexa : les cotes opposes doivent etre paralleles """), -21: _(""" +21 : _(""" erreur lors de l appel a fointe """), -22: _(""" +22 : _(""" erreur dans le calcul de coef_f """), - - - - - - - -24: _(""" - matns mal dimensionnee +25 : _(""" + calcul de sensibilite : actuellement, on ne derive que les : pou_d_e """), -26: _(""" +26 : _(""" mauvaise definition des caracteristiques de la section """), -27: _(""" +27 : _(""" l'option " %(k1)s " n'est pas programmee """), -28: _(""" +28 : _(""" rigidite geometrique non definie pour les elements courbes. """), -29: _(""" +29 : _(""" force elementaire electrique non definie pourles elements courbes. """), -30: _(""" +30 : _(""" section non tubulaire pour mass_flui_stru """), -31: _(""" +31 : _(""" pas de valeur utilisateur pour rho """), -32: _(""" +32 : _(""" " %(k1)s " nom d'option inconnu. """), -33: _(""" +33 : _(""" option non disponible """), -34: _(""" +34 : _(""" seules les forces suiveuses de type vent definies par un evol_char sont autorisees """), -35: _(""" +35 : _(""" un champ de vitesse de vent est impose sans donner un cx dependant de la vitesse sur une des barres. """), -36: _(""" +36 : _(""" comp_incr non valide """), -37: _(""" +37 : _(""" relation : %(k1)s non implantee sur les cables """), -38: _(""" +38 : _(""" deformation : %(k1)s non implantee sur les cables """), -39: _(""" +39 : _(""" un champ de vitesse de vent est impose sans donner un cx dependant de la vitesse sur un des cables. """), -46: _(""" +46 : _(""" le parametre "pnosym" n'existe pas dans le catalogue de l'element %(k1)s . """), -47: _(""" +47 : _(""" la taille de la matrice non-symetrique en entree est fausse. """), -48: _(""" +48 : _(""" la taille de la matrice symetrique en sortie est fausse. """), -49: _(""" +49 : _(""" anisotropie non prevue pour coque1d """), -50: _(""" +50 : _(""" nombre de couches limite a 30 pour les coques 1d """), +51 : _(""" + Le nombre de couches défini dans DEFI_COQU_MULT et dans AFFE_CARA_ELEM dans n'est pas cohérent. + Nombre de couches dans DEFI_COQU_MULT: %(i1)d + Nombre de couches dans AFFE_CARA_ELEM: %(i2)d +"""), +52 : _(""" + L'épaisseur totale des couches definie dans DEFI_COQU_MULT et celle définie dans AFFE_CARA_ELEM ne sont pas cohérentes. + Epaisseur totale des couches dans DEFI_COQU_MULT: %(r1)f + Epaisseur dans AFFE_CARA_ELEM: %(r2)f +"""), - - - -54: _(""" +54 : _(""" la reactualisation de la geometrie (deformation : petit_reac sous le mot cle comp_incr) est deconseillee pour les elements de coque_1d. """), -55: _(""" +55 : _(""" nombre de couches limite a 10 pour les coques 1d """), -56: _(""" +56 : _(""" valeurs utilisateurs de rho ou de rof nulles """), -57: _(""" +57 : _(""" pas d elements lumpes pourhydratation """), -58: _(""" +58 : _(""" -> La réactualisation de la géométrie (DEFORMATION='PETIT_REAC' sous le mot clé COMP_INCR) est déconseillée pour les éléments POU_D_T et POU_D_E. -> Risque & Conseil : @@ -234,82 +191,55 @@ cata_msg={ DEFORMATION='GREEN_GR'. """), -59: _(""" +59 : _(""" le coefficient de poisson est non constant. la programmation actuelle n en tient pas compte. """), -60: _(""" +60 : _(""" noeuds confondus pour un element de poutre """), -61: _(""" +61 : _(""" loi %(k1)s indisponible pour les pou_d_e/d_t """), -62: _(""" +62 : _(""" noeuds confondus pour un element de barre """), -63: _(""" +63 : _(""" ne pas utiliser ther_lineaire avec des elements de fourier mais les cmdes developpees """), -64: _(""" +64 : _(""" erreur dans le calcul de coeh_f """), -65: _(""" - chargements non nuls sur l'axe -"""), - -66: _(""" +66 : _(""" option %(k1)s inattendue """), -67: _(""" +67 : _(""" element degenere:revoir le maillage """), -68: _(""" - L'option CALC_K_G est incompatible avec les comportements incrémentaux, avec les comportement non - linéaires et avec la deformation GREEN. -"""), - -69: _(""" - on a pas pu calculer les derivees des fonctions singulieres car on se trouve sur le fond de fissure -"""), - -70: _(""" - il faut affecter les elements de bord (e et nu) pour le calcul des fic -"""), - - - - - - - - - - - -73: _(""" +73 : _(""" option de calcul non valide """), -74: _(""" +74 : _(""" pour l'option "rice_tracey", la relation " %(k1)s " n'est pas admise """), -75: _(""" +75 : _(""" le materiau %(k1)s n'est pas autorise pour calculer les deformations plastiques : seuls les materiaux isotropes sont traites en plasticite. """), -76: _(""" +76 : _(""" couplage fluage/fissuration : la loi beton_double_dp ne peut etre couplee qu avec une loi de fluage de granger. """), -77: _(""" +77 : _(""" -> Attention vous etes en contraintes planes, et vous utilisez la loi de comportement %(k1)s. La composante du tenseur des déformations plastiques EPZZ est calculée en supposant l'incompressibilité des @@ -319,71 +249,63 @@ cata_msg={ """), -78: _(""" +78 : _(""" la reactualisation de la geometrie (deformation : petit_reac sous le mot cle comp_incr) est deconseillee pour les elements pou_d_tg . """), -79: _(""" +79 : _(""" tableau sous dimensionne (dvlp) """), -80: _(""" +80 : _(""" situation de contact impossible """), -81: _(""" - option inconnue -"""), - -82: _(""" +82 : _(""" vecteur sous dimensionne (dvlp) """), -83: _(""" +83 : _(""" dimension incorrecte (dvlp) """), -84: _(""" +84 : _(""" type maille inconnu """), -85: _(""" +85 : _(""" relation : %(k1)s non implantee sur les elements "pou_d_t_gd" """), -86: _(""" +86 : _(""" deformation : %(k1)s non implantee sur les elements "pou_d_t_gd" """), -87: _(""" +87 : _(""" rcvala ne trouve pas rho, qui est necessaire en dynamique """), -88: _(""" - la masse volumique rho n'a pas ete definie -"""), - -89: _(""" +89 : _(""" developpement non realise """), -90: _(""" +90 : _(""" option: %(k1)s non implante """), -91: _(""" +91 : _(""" calcul de la masse non implante pour les elements coque_3d en grandes rotations, deformation : green_gr """), -92: _(""" +92 : _(""" les comportements elastiques de type comp_elas ne sont pas disponibles pour la modelisation dktg. """), -93: _(""" +93 : _(""" deformation : %(k1)s non implantee sur les elements coque_3d en grandes rotations. deformation : green_gr obligatoirement """), -94: _(""" +94 : _(""" -> La réactualisation de la géométrie (DEFORMATION='PETIT_REAC' sous le mot clé COMP_INCR) est déconseillée pour les éléments COQUE_3D. -> Risque & Conseil : @@ -395,24 +317,16 @@ cata_msg={ """), -95: _(""" +95 : _(""" nume_couche incorrect """), -96: _(""" - l'option est incompatible avec les comportements incrementaux ainsi que la deformation green -"""), - - - - - - -98: _(""" +98 : _(""" comportement coeur homogeneise inexistant """), -99: _(""" +99 : _(""" : seule les poutres a sections constantes sont admises ! """), + } diff --git a/Aster/Cata/cataSTA9/Messages/elements4.py b/Aster/Cata/cataSTA9/Messages/elements4.py index 7723f9b8..26df5979 100644 --- a/Aster/Cata/cataSTA9/Messages/elements4.py +++ b/Aster/Cata/cataSTA9/Messages/elements4.py @@ -1,385 +1,295 @@ -#@ MODIF elements4 Messages DATE 04/06/2007 AUTEUR DURAND C.DURAND +#@ MODIF elements4 Messages DATE 11/03/2008 AUTEUR MEUNIER S.MEUNIER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - erreur dans le calcul de pres_f +1 : _(""" + erreur dans le calcul de pres_f """), -2: _(""" +2 : _(""" pour l'option "indic_ener", les seules relations admises sont "vmis_isot_line" et "vmis_isot_trac" . """), -3: _(""" +3 : _(""" pour l'option "indic_seuil", les seules relations admises sont "vmis_isot_line", "vmis_isot_trac" et "vmis_cine_line" . """), -4: _(""" - ! pb rcvala biot_coef %(k1)s +6 : _(""" + le type du champ de contraintes est incompatible avec l'option : %(k1)s """), -6: _(""" - le type du champ de contraintes est incompatible avec l'option : %(k1)s -"""), - -7: _(""" +7 : _(""" pas de contraintes dans pcontgp """), -8: _(""" +8 : _(""" pas de champ endo_elga dans ptriagp """), -9: _(""" +9 : _(""" pas de champ vari_elga dans pvarimr """), -10: _(""" +10 : _(""" pas de champ vari_elga dans pvaripr """), -11: _(""" +11 : _(""" option non traitée %(k1)s """), -12: _(""" - nombre total de sous-éléments limité a 32. -"""), - -13: _(""" - nombre total de points d'intersection limité a 11. -"""), - -14: _(""" - type de maille non valide pour le post-traitement des éléments xfem -"""), - -15: _(""" +15 : _(""" deformation : %(k1)s non implantée sur les éléments "pou_d_tgm" : utiliser PETIT ou REAC_GEOM """), -16: _(""" +16 : _(""" option "vari_elno_elga" impossible actuellement """), -17: _(""" +17 : _(""" seuls comportements autorises :"elas" et "vmis_isot_trac" """), -18: _(""" - pb de statut de contact -"""), - -19: _(""" - lsn non nul sur la surface. -"""), - -20: _(""" - pour l'élément de poutre " %(k1)s " l'option " %(k2)s " est invalide -"""), - -21: _(""" - pour un élément de poutre noeuds confondus : %(k1)s -"""), - -22: _(""" - les poutres à section variable ne sont pas traitées. -"""), - -23: _(""" +23 : _(""" comp_incr non disponible pour les elements enrichis avec x-fem. """), -30: _(""" - option refe_forc_noda plus tard... -"""), - -31: _(""" +31 : _(""" dfdi mal dimensionnée """), -32: _(""" +32 : _(""" vous utilisez le mot clé liaison_elem avec l'option coq_pou: l'épaisseur des éléments de bord de coque n'a pas été affectée. """), -33: _(""" +33 : _(""" l'epaisseur des éléments de bord de coque est negative ou nulle. """), -34: _(""" +34 : _(""" le jacobien est nul. """), -35: _(""" +35 : _(""" matns() sous-dimensionné """), -36: _(""" +36 : _(""" pr() sous-dimensionne """), -37: _(""" +37 : _(""" nive_couche ne peut etre que "moy" """), -38: _(""" - option %(k1)s non active pour un élément de type %(k2)s +38 : _(""" + option %(k1)s non active pour un élément de type %(k2)s """), -39: _(""" +39 : _(""" option %(k1)s : incompatibilité des deux champs d entrée """), -40: _(""" +40 : _(""" le nombre de ddl est trop grand """), -41: _(""" +41 : _(""" le nombre de ddl est faux """), -42: _(""" +42 : _(""" nom de type élément inattendu """), -43: _(""" +43 : _(""" comp. elastique inexistant """), -44: _(""" +44 : _(""" l'option " %(k1)s " est interdite pour les tuyaux """), -45: _(""" +45 : _(""" l'option " %(k1)s " en repère local est interdite pour les tuyaux : utiliser le repère global """), -46: _(""" +46 : _(""" le nombre de couches et de secteurs doivent etre supérieurs a 0 """), -47: _(""" +47 : _(""" composante %(k1)s non traitée, on abandonne """), -48: _(""" +48 : _(""" champ %(k1)s non traité, on abandonne """), -49: _(""" +49 : _(""" l'option " %(k1)s " est non prévue """), -50: _(""" - angle compris entre 0 et deuxpi -"""), - -51: _(""" +51 : _(""" nume_sect incorrect """), -52: _(""" +52 : _(""" mauvaise option """), -53: _(""" +53 : _(""" ep/r > 0.2 modi_metrique pas adapté """), -54: _(""" +54 : _(""" ep/r > 0.2 modi_metrique=non pas adapté """), -55: _(""" - alpha est pris egal a 0 +56 : _(""" + famille inexistante %(k1)s """), -56: _(""" - famille inexistante %(k1)s -"""), - -57: _(""" +57 : _(""" indn = 1 (intégration normale) ou indn = 0 (integration réduite) obligatoirement. """), -58: _(""" +58 : _(""" le code " %(k1)s " est non prévu. code doit etre = "gl" ou "lg" """), -59: _(""" - nom d'élément fini incompatible -"""), - -60: _(""" - pb calcul des derivées des fonctions singulières sur le fond de fissure -"""), - -61: _(""" +61 : _(""" préconditions non remplies """), -62: _(""" +62 : _(""" erreur: élément non 2d """), -63: _(""" - l'option %(k1)s n'est pas disponible pour le comportement %(k2)s +63 : _(""" + l'option %(k1)s n'est pas disponible pour le comportement %(k2)s """), -64: _(""" +64 : _(""" Il est impossible de calculer la normale au noeud %(k1)s de la maille %(k2)s. Des aretes doivent etre confondues. """), -65: _(""" +65 : _(""" Comportement inattendu : %(k1)s. """), -66: _(""" +66 : _(""" Il est impossible de calculer la contrainte d'arc. La normale à l'élément et le vecteur obtenu à partir du mot-clé ANGL_REP sont colinéaires. """), -68: _(""" + +68 : _(""" Nombre d'itérations internes insuffisant. """), -69: _(""" +69 : _(""" ! pb récuperation donnée matériau dans thm_liqu %(k1)s ! """), -72: _(""" - rcvala ne trouve pas nu, qui est nécessaire pour l'élément MECA_HEXS8 +70 : _(""" + ! pb récupération donnée matériau dans thm_init %(k1)s ! """), -73: _(""" - élément MECA_HEXS8:COMP_ELAS non implanté, utiliser COMP_INCR RELATION='ELAS' +71 : _(""" + ! pb récupération données matériau dans elas %(k1)s ! """), -74: _(""" - Attention l'élément MECA_HEXS8 ne fonctionne correctement que sur les parallélépipèdes. - Sur les elements quelconques on peut obtenir des résultats faux. +72 : _(""" + rcvala ne trouve pas nu, qui est nécessaire pour l'élément MECA_HEXS8 """), -75: _(""" - la maille de numero: %(i1)d appartient à plusieurs sous-domaines! %(i2)d +73 : _(""" + élément MECA_HEXS8:COMP_ELAS non implanté, utiliser COMP_INCR RELATION='ELAS' """), -76: _(""" - la maille du modèle de numéro: %(i1)d n appartient à aucun sous-domaine ! %(i2)d +74 : _(""" + Attention l'élément MECA_HEXS8 ne fonctionne correctement que sur les parallélépipèdes. + Sur les elements quelconques on peut obtenir des résultats faux. """), -77: _(""" - numero de couche %(i1)d - trop grand par rapport au nombre de couches autorisé pour la maille %(k1)s +75 : _(""" + la maille de numero: %(i1)d appartient à plusieurs sous-domaines! %(i2)d """), -78: _(""" - ! pb recuperation donnée matériau dans thm_diffu %(k1)s ! +76 : _(""" + la maille du modèle de numéro: %(i1)d n appartient à aucun sous-domaine ! %(i2)d """), -79: _(""" - la loi de comportement n'existe pas pour la modélisation dktg : %(k1)s +77 : _(""" + numero de couche %(i1)d + trop grand par rapport au nombre de couches autorisé pour la maille %(k1)s """), -80: _(""" - - attention : l élément de plaque quad4 défini sur la maille : %(k1)s n est pas plan et peut conduire a des résultats faux. - distance au plan : %(r1)f +78 : _(""" + ! pb recuperation donnée matériau dans thm_diffu %(k1)s ! """), -81: _(""" - manque le paramètre %(k1)s pour la maille %(k2)s +79 : _(""" + la loi de comportement n'existe pas pour la modélisation dktg : %(k1)s """), -83: _(""" - utiliser "stat_non_line" température inf: %(r1)f température moy: %(r2)f - température sup: %(r3)f -"""), +80 : _(""" -84: _(""" - famille non disponible élément de référence %(k1)s - famille %(k2)s + attention : l élément de plaque quad4 défini sur la maille : %(k1)s n est pas plan et peut conduire a des résultats faux. + distance au plan : %(r1)f """), -88: _(""" - elrefe non disponible élément de référence %(k1)s +81 : _(""" + manque le paramètre %(k1)s pour la maille %(k2)s """), -90: _(""" - elrefe mal programme maille %(k1)s type %(k2)s nb noeuds %(i1)d - nb noeuds pour le gano %(i2)d +84 : _(""" + famille non disponible élément de référence %(k1)s + famille %(k2)s """), -91: _(""" - ! le calcul de cet estimateur !! ne tient pas compte d'éventuelles ! %(i1)d - ! conditions limites non linéaires ! %(i2)d +88 : _(""" + elrefe non disponible élément de référence %(k1)s """), -92: _(""" - la pression doit etre nulle pour la maille %(k1)s +90 : _(""" + elrefe mal programme maille %(k1)s type %(k2)s nb noeuds %(i1)d + nb noeuds pour le gano %(i2)d """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -98: _(""" - la contrainte equivalente est nulle pour la maille %(k1)s +91 : _(""" + ! le calcul de cet estimateur !! ne tient pas compte d'éventuelles ! %(i1)d + ! conditions limites non linéaires ! %(i2)d """), +92 : _(""" + la pression doit etre nulle pour la maille %(k1)s +"""), - - - +98 : _(""" + la contrainte equivalente est nulle pour la maille %(k1)s +"""), } diff --git a/Aster/Cata/cataSTA9/Messages/elements5.py b/Aster/Cata/cataSTA9/Messages/elements5.py index 250a1b75..cd318eb4 100644 --- a/Aster/Cata/cataSTA9/Messages/elements5.py +++ b/Aster/Cata/cataSTA9/Messages/elements5.py @@ -1,4 +1,4 @@ -#@ MODIF elements5 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF elements5 Messages DATE 06/05/2008 AUTEUR MARKOVIC D.MARKOVIC # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -20,144 +20,171 @@ def _(x) : return x -cata_msg={ +cata_msg = { - - - - - - -2: _(""" +2 : _(""" tuyau : le nombre de couches est limite a %(i1)d """), -3: _(""" +3 : _(""" tuyau : le nombre de secteurs est limite a %(i1)d """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - -8: _(""" +8 : _(""" Vous voulez utiliser l'indicateur de convergence RESI_REFE_RELA mais vous n'avez pas renseigné le mot-clé %(k1)s . """), -9: _(""" +9 : _(""" Employez la modélisation spécifique aux grandes déformations XX_INCO_GD -"""), - -10: _(""" - La modélisation GRAD_VARI n'est plus disponible en grandes déformations. Pour Rousselier - version SIMO_MIEHE, vous pouvez faire du non-local en utilisant la modélisation XX_INCO_GD - et en définissant C_GONF<>0 sous l'opérande NON_LOCAL de DEFI_MATERIAU -"""), - -11: _(""" - Le rayon R_SUP (ou R_SUP_FO) doit obligatoirement etre supérieur au rayon R_INF - (resp. R_INF_FO). -"""), - -12: _(""" - Le noeud %(k1)s du fond de fissure n est rattaché à aucune maille surfacique - de la lèvre supérieure : vérifier les groupes de mailles. -"""), - -13: _(""" - Le noeud %(k1)s du fond de fissure n est rattaché à aucune maille surfacique - de la lèvre inférieure : vérifier les groupes de mailles. -"""), - -14: _(""" - Les noeuds %(k1)s de FOND_INF et %(k2)s de FOND_SUP ne sont pas en vis à vis. -"""), - -15: _(""" +"""), + +15 : _(""" FONFIS - occurence %(i1)s : les objets précédemment évoqués sont inexistants ou de type incompatible. -"""), +"""), -16: _(""" +16 : _(""" FONFIS - occurence %(i1)s : les mailles spécifiées ne permettent pas de définir une ligne continue. Conseil (si opérateur DEFI_FOND_FISS) : vérifier le groupe de maille du fond de fissure. -"""), +"""), -17: _(""" +17 : _(""" FONFIS - Trop de noeuds dans le groupe de noeuds %(k1)s. --> Noeud utilisé : %(k2)s -"""), +"""), -18: _(""" +18 : _(""" FONFIS - Trop de mailles dans le groupe de mailles GROUP_MA_ORIG. --> Maille utilisée : %(k1)s -"""), +"""), -19: _(""" +19 : _(""" FONFIS - Occurence %(i1)s : maille %(k1)s inexistante. -"""), +"""), -20: _(""" +20 : _(""" FONFIS - Occurence %(i1)s : maille %(k1)s non linéique. -"""), +"""), -21: _(""" +21 : _(""" FONFIS - Occurence %(i1)s : mélange de SEG2 et de SEG3 (maille %(k1)s). -"""), +"""), -22: _(""" +22 : _(""" Erreur, le nombre de noeuds d'un element de joint 3D n'est pas correct """), - -23: _(""" +23 : _(""" Erreur, le nombre de points de Gauss d'un element de joint 3D n'est pas correct """), -24: _(""" +24 : _(""" le nombre de mailles du modele %(i1)d est différent de la somme des mailles des sous-domaines %(i2)d """), -25: _(""" + +25 : _(""" le sous-domaine n %(i1)d n'est pas renseigné ou vide dans DEFI_PART_OPS """), +28 : _(""" + le modele comporte %(i1)d mailles de plus que l'ensemble des sous-domaines +"""), + +29 : _(""" + le modele comporte %(i1)d mailles de moins que l'ensemble des sous-domaines +"""), + +30 : _(""" + jacobien negatif ou nul : jacobien = %(r1)f +"""), + +32 : _(""" + Toute méthode de contact autre que la méthode continue est proscrite avec + FETI! En effet cette dernière méthode est basée sur un vision maille/calcul + élémentaire et non pas sur une approche globale discrète dont le flot de + données est plus difficilement dissociable par sous-domaine. + Merci, d'activer donc toutes les zones de contact avec ladite méthode. +"""), + +33 : _(""" + Avec FETI, on ne peut mélanger dans une seul AFFE_CHAR_MECA, du contact + avec des chargements à LIGREL tardif (Dirichlet, Force Nodale...). + Merci, de dissocier les types de chargement par AFFE_CHAR_MECA. +"""), +34 : _(""" + Contact méthode continue avec FETI: la maille %(i1)d de la zone %(i2)d + du chargement %(i3)d , semble etre à cheval entre les sous-domaines + %(i4)d et %(i5)d ! + Solution paliative: il faut forcer le partitionnement à ne pas couper + cette zone de contact ou essayer de la dédoubler en deux zones. +"""), +35 : _(""" + Contact méthode continue avec FETI: la surface %(i1)d de la zone %(i2)d + du chargement %(i3)d n'est portée par aucun sous-domaine ! +"""), +36 : _(""" + Contact méthode continue avec FETI: le noeud %(i1)d est présent plusieurs + fois dans la zone de contact %(i2)d . Cela ne devrait pas etre un problème + pour l'algorithme, mais ce n'est pas une modélisation du contact très + orthodoxe ! +"""), +37 : _(""" + Contact méthode continue avec FETI: le noeud %(i1)d est a l'intersection de + plusieurs zones de contact. Cela va probablement générer un problème dans + l'algorithme de contact (pivot nul) ! +"""), + +38 : _(""" + Contact méthode continue avec FETI: le noeud %(i1)d de la zone de contact + %(i2)d est aussi sur l'interface FETI ! Pour l'instant ce cas de figure + est proscrit. Essayer de l'enlevez de la zone de contact ou de reconfigurer + vos sous-domaines. +"""), +39 : _(""" + echec de la recherche de zero a l'iteration : %(i1)d + fonction decroissante - pour x=a: %(r1)f + / fonction(a): %(r2)f + et x=b: %(r3)f + / fonction(b): %(r4)f + fonction x=: %(r5)f %(r6)f %(r7)f %(r8)f %(r9)f %(r10)f %(r11)f %(r12)f %(r13)f %(r14)f + %(r15)f %(r16)f %(r17)f %(r18)f %(r19)f %(r20)f %(r21)f %(r22)f %(r23)f %(r24)f -28: _(""" - le modele comporte %(i1)d mailles de plus que l'ensemble des sous-domaines + fonction f=: %(r25)f %(r26)f %(r27)f %(r28)f %(r29)f %(r30)f %(r31)f %(r32)f %(r33)f %(r34)f + %(r35)f %(r36)f %(r37)f %(r38)f %(r39)f %(r40)f %(r41)f %(r42)f %(r43)f %(r44)f + """), -29: _(""" - le modele comporte %(i1)d mailles de moins que l'ensemble des sous-domaines + +40 : _(""" + echec de la recherche de zero a l'iteration : %(i1)d + fonction constante - pour x=a: %(r1)f + / fonction(a): %(r2)f + et x=b: %(r3)f + / fonction(b): %(r4)f + + fonction x=: %(r5)f %(r6)f %(r7)f %(r8)f %(r9)f %(r10)f %(r11)f %(r12)f %(r13)f %(r14)f + %(r15)f %(r16)f %(r17)f %(r18)f %(r19)f %(r20)f %(r21)f %(r22)f %(r23)f %(r24)f + + fonction f=: %(r25)f %(r26)f %(r27)f %(r28)f %(r29)f %(r30)f %(r31)f %(r32)f %(r33)f %(r34)f + %(r35)f %(r36)f %(r37)f %(r38)f %(r39)f %(r40)f %(r41)f %(r42)f %(r43)f %(r44)f + """), + +41 : _(""" + Température négative à la maille : %(k1)s +"""), + +42 : _(""" + L'épaisseur definie dans DEFI_GLRC et celle définie dans AFFE_CARA_ELEM ne sont pas cohérentes. + Epaisseur dans DEFI_GLRC: %(r1)f + Epaisseur dans AFFE_CARA_ELEM: %(r2)f +"""), + } diff --git a/Aster/Cata/cataSTA9/Messages/execlogiciel0.py b/Aster/Cata/cataSTA9/Messages/execlogiciel0.py new file mode 100644 index 00000000..f2e606de --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/execlogiciel0.py @@ -0,0 +1,56 @@ +#@ MODIF execlogiciel0 Messages DATE 19/05/2008 AUTEUR COURTOIS M.COURTOIS +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +Format Salome, l'argument 1 doit etre +le nom du fichier med produit par le script python. +"""), + +2: _(""" +On ne sait pas traiter le format %(k1)s +"""), + +3: _(""" +Code retour incorrect (MAXI %(i1)d) : %(i2)d +"""), + +4: _(""" +Le mot-cle logiciel n'est pas utilise avec ce format. +"""), + +5: _(""" +Erreurs lors de l'execution du fichier ci-dessous : +<<<<<<<<<<<<<<< DEBUT DU FICHIER >>>>>>>>>>>>>>> +%(k1)s +<<<<<<<<<<<<<<< FIN DU FICHIER >>>>>>>>>>>>>>> +"""), + +6: _(""" +Le fichier %(k1)s n'existe pas. +"""), + +7: _(""" +Mode de lancement inconnu : %(k1)s +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/factor.py b/Aster/Cata/cataSTA9/Messages/factor.py index 4b983b52..08cfacb7 100644 --- a/Aster/Cata/cataSTA9/Messages/factor.py +++ b/Aster/Cata/cataSTA9/Messages/factor.py @@ -1,4 +1,4 @@ -#@ MODIF factor Messages DATE 09/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF factor Messages DATE 11/02/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -103,20 +103,27 @@ Conseil : Il s'agit peut-etre d'un manque de conditions aux limites, ou au contraire, de redondances entre de trop nombreuses conditions. """), - +#----------------------------------------------------------------------------------------------- +50: _(""" + Solveur MUMPS : + -> Vous avez demandé comme renuméroteur RENUM = '%(k1)s', or MUMPS en a + utilisé un autre. + -> Risque & Conseil : + Il se peut que votre version de MUMPS n'ait pas été compilée avec + le support de ce renuméroteur. Dans le doute, RENUM='AUTO' permet + de laisser MUMPS faire le meilleur choix. + """), #----------------------------------------------------------------------------------------------- 51: _(""" Solveur MUMPS interdit ici. Causes possibles : - - contact/frottement discret - - STAT_NON_LINE / FLAMBEMENT + - frottement pénalisé ou lagrangien (si MUMPS distribué parallèle) """), #----------------------------------------------------------------------------------------------- 52: _(""" Solveurs LDLT et MULT_FRONT seuls permis ici. Causes possibles : - - contact/frottement discret - STAT_NON_LINE / FLAMBEMENT """), @@ -132,20 +139,17 @@ Remarque : on a le droit de d #----------------------------------------------------------------------------------------------- 54: _(""" Solveur MUMPS : - Mumps manque de mémoire lors de la factorisation de la matrice. + Le solveur Mumps manque de mémoire lors de la factorisation de la matrice. + Solution : - Il faut augmenter la mémoire donnée à Mumps. - Pour cela, il faut diminuer le pourcentage de mémoire donné à JEVEUX. - C'est à dire diminuer la valeur du paramètre "mem_aster" du menu "Options" d'ASTK. -Remarque : - On peut par exemple choisir mem_aster=50 ce qui correspond à un partage - équitable (50/50) de la mémoire entre JEVEUX et Mumps. + Il faut augmenter la mémoire accessible à Mumps (et autres programmes hors fortran d'Aster). + Pour cela, il faut diminuer la mémoire donnée à JEVEUX (ASTK : case "dont Aster (Mo)"). """), #----------------------------------------------------------------------------------------------- 55: _(""" Solveur MUMPS : - Problème dans le solveur MUMPS. + Problème ou alarme dans le solveur MUMPS. Le code retour de mumps (INFOG(1)) est : %(i1)d Solution : Consulter le manuel d'utilisation de Mumps. @@ -174,9 +178,9 @@ Solution : #----------------------------------------------------------------------------------------------- 58: _(""" Solveur MUMPS : - La matrice est singulière. + La matrice est numériquement singulière. Solution : - On peut essayer d'aller plus loin en précisant : STOP_SINGULIER='NON' + Peut être un problème de modélisation (blocages redondants...) """), #----------------------------------------------------------------------------------------------- @@ -208,5 +212,24 @@ Erreur Programmeur lors de la r """), #----------------------------------------------------------------------------------------------- +62: _(""" +Alarme Solveur MUMPS : + La procédure de raffinement itératif aurait besoin de plus que les %(i1)d d'itérations + imposées en dur dans l'appel MUMPS par Code_Aster. +Solution : + On peut essayer de corriger l'affectation de XMPSK%ICNTL(10) dans AMUMPR/C.F. + Contactez l'assistance. +"""), + +#----------------------------------------------------------------------------------------------- +63: _(""" +Information Solveur MUMPS : + Déséquilibrage de charge maximum supérieur à %(r1)g %% sur au moins une des 6 étapes profilées. +Conseils: Pour optimiser l'équilibrage de votre calcul, vous pouvez essayer + - d'enlever du modèle les mailles qui ne participent pas au calcul, + - utiliser l'option 'DISTRIBUE_SD' au lieu de 'DISTRIBUE_MAILLE' ou 'CENTRALISE', + - diminuer le nombre de processeurs utilisés. +"""), + #----------------------------------------------------------------------------------------------- } diff --git a/Aster/Cata/cataSTA9/Messages/fatigue1.py b/Aster/Cata/cataSTA9/Messages/fatigue1.py new file mode 100644 index 00000000..e694576f --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/fatigue1.py @@ -0,0 +1,289 @@ +#@ MODIF fatigue1 Messages DATE 26/11/2007 AUTEUR ANGLES J.ANGLES +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" + Aucun élément du modèle ne sait calculer l'option + de fatigue multiaxiale, ('PFACY_R'). + Il se peut que la modélisation affectée au groupe de mailles + sur lequel vous faites un calcul de fatigue ne soit pas "3D". + + Le critère de fatigue que vous utilisez n'est utilisable qu'en 3D. + +"""), + +2: _(""" + La modélisation affectée au groupe de mailles sur lequel vous + faites un calcul de fatigue n'est problament pas "3D". + La composante %(i1)d du tenseur des contraintes n'existe pas. + + Le critère de fatigue que vous utilisez n'est utilisable qu'en 3D. + +"""), + +3: _(""" + La modélisation affectée au groupe de mailles sur lequel vous + faites un calcul de fatigue n'est problament pas "3D". + La composante %(i1)d du tenseur des déformations n'existe pas. + + Le critère de fatigue que vous utilisez n'est utilisable qu'en 3D. + +"""), + +4: _(""" + le coefficient de Goodman n'est pas calculable +"""), + +5: _(""" + le coefficient de Gerber n'est pas calculable +"""), + +6: _(""" + pour calculer le dommage de Lemaitre-Sermage, + il faut définir le comportement DOMMA_LEMAITRE dans DEFI_MATERIAU +"""), + +7: _(""" + pour calculer le dommage de Lemaitre_Sermage, + il faut définir le comportement ELAS_FO dans DEFI_MATERIAU +"""), + +8: _(""" + le matériau est obligatoire pour le calcul du dommage par TAHERI_MANSON +"""), + +9: _(""" + une fonction doit être introduite sous le mot clé TAHERI_FONC +"""), + +10: _(""" + une nappe doit être introduite sous le mot clé TAHERI_NAPPE +"""), + +11: _(""" + la courbe de MANSON_COFFIN est nécessaire pour le calcul du dommage TAHERI_MANSON_COFFIN +"""), + +12: _(""" + le matériau est obligatoire pour le calcul du dommage par TAHERI_MIXTE +"""), + +13: _(""" + la courbe de MANSON_COFFIN est nécessaire pour le calcul du dommage TAHERI_MIXTE +"""), + +14: _(""" + la courbe de WOHLER est nécessaire pour le calcul du dommage TAHERI_MIXTE +"""), + +15: _(""" + méthode de comptage inconnue +"""), + +16: _(""" + nombre de cycles nul +"""), + +17: _(""" + l'utilisation de MANSON_COFFIN est réservé à des histoires de chargements en déformations +"""), + +18: _(""" + la courbe de MANSON_COFFIN doit être donnée dans DEFI_MATERIAU +"""), + +19: _(""" + les lois de TAHERI sont réservées pour des chargements en déformations +"""), + +20: _(""" + loi de dommage non compatible +"""), + +21: _(""" + l'histoire de chargement doit avoir même discrétisation pour toutes les composantes +"""), + +22: _(""" + l'histoire de la déformation plastique cumulée doit avoir même discrétisation que l'histoire des contraintes +"""), + +23: _(""" + l'histoire de la température doit avoir même discrétisation que l'histoire des contraintes +"""), + +24: _(""" + pour calculer le dommage, il faut définir le comportement "FATIGUE" dans DEFI_MATERIAU +"""), + +25: _(""" + la méthode 'TAHERI_MANSON' ne peut pas etre utilisée avec l'option %(k1)s +"""), + +26: _(""" + le nom de la fonction nappe DSIGM(DEPSI,DEPSIMAX) + doit être présent sous le mot cle 'TAHERI_NAPPE' +"""), + +27: _(""" + le nom de la fonction DSIGM(DEPSI) + doit être présent sous le mot cle 'TAHERI_FONC' +"""), + +28: _(""" + la méthode 'TAHERI_MIXTE' ne peut pas être utilisée avec l'option %(k1)s +"""), + +29: _(""" + la methode 'WOHLER' ne peut pas être utilisée avec l'option %(k1)s +"""), + +30: _(""" + une courbe de WOHLER doit être définie dans DEFI_MATERIAU +"""), + +31: _(""" + la methode 'MANSON_COFFIN' ne peut pas être utilisée avec l'option %(k1)s +"""), + +32: _(""" + une courbe de MANSON_COFFIN doit être définie dans DEFI_MATERIAU +"""), + +33: _(""" + les mailles attachées au noeud traité ne sont pas affectées du même matériau. +"""), + +34: _(""" + la donnée d'une courbe de WOHLER est obligatoire +"""), + +35: _(""" + la donnée du moment spectral d'ordre 4 est obligatoire pour le comptage des pics de contraintes +"""), + +36: _(""" + la valeur du moment spectral d'ordre 0 (lambda_0) est certainement nulle +"""), + +37: _(""" + la valeur du moment spectral d'ordre 2 (lambda_2) est nulle +"""), + +38: _(""" + la valeur du moment spectral d'ordre 4 (lambda_4) est nulle +"""), + +63: _(""" + pour calculer le dommage max, + il faut renseigner CISA_PLAN_CRIT dans la commande DEFI_MATERIAU +"""), + +64: _(""" + nous ne pouvons pas récupérer la valeur du paramètre A du critère de MATAKE + commande: DEFI_MATERIAU + opérande: CISA_PLAN_CRIT +"""), + +65: _(""" + nous ne pouvons pas récupérer la valeur du paramètre B du critère de MATAKE + commande: DEFI_MATERIAU + opérande: CISA_PLAN_CRIT +"""), + +66: _(""" + nous ne pouvons pas récupérer la valeur du coefficient de passage flexion-torsion + commande: DEFI_MATERIAU + opérande: CISA_PLAN_CRIT +"""), + +67: _(""" + nous ne pouvons pas récupérer la valeur du paramètre A du critère de DANG_VAN_MODI_AC + commande: DEFI_MATERIAU + opérande: CISA_PLAN_CRIT +"""), + +68: _(""" + nous ne pouvons pas récupérer la valeur du paramètre B du critère de DANG_VAN_MODI_AC + commande: DEFI_MATERIAU + opérande: CISA_PLAN_CRIT +"""), + +69: _(""" + nous ne pouvons pas récupérer la valeur du coefficient de passage cisaillement-traction + commande: DEFI_MATERIAU + opérande: CISA_PLAN_CRIT +"""), + +70: _(""" + nous ne pouvons pas récupérer la valeur du paramètre A du critère DOMM_MAXI + commande: DEFI_MATERIAU + opérande: CISA_PLAN_CRIT +"""), + +71: _(""" + nous ne pouvons pas récupérer la valeur du paramètre B du critère DOMM_MAXI + commande: DEFI_MATERIAU + opérande: CISA_PLAN_CRIT +"""), + +72: _(""" + nous ne pouvons pas récupérer la valeur du coefficient de passage cisaillement-traction + commande: DEFI_MATERIAU + opérande: CISA_PLAN_CRIT +"""), + +73: _(""" + nous ne pouvons pas récupérer la valeur du paramètre A du critère DANG_VAN_MODI_AV + commande: DEFI_MATERIAU + opérande: CISA_PLAN_CRIT +"""), + +74: _(""" + nous ne pouvons pas récupérer la valeur du paramètre B du critère DANG_VAN_MODI_AV + commande: DEFI_MATERIAU + opérande: CISA_PLAN_CRIT +"""), + +75: _(""" + nous ne pouvons pas récupérer la valeur du paramètre A du critère FATEMI_SOCIE + commande: DEFI_MATERIAU + opérande: CISA_PLAN_CRIT +"""), + +76: _(""" + Le nombre d'instants calculés est égal à %(i1)d. + + Il faut que l'histoire du chargement comporte au moins 2 instants + pour calculer un dommage. + +"""), + +77: _(""" + Le nombre de cycles extraits est égal à %(i1)d. + + Votre chargement est constant. + On ne peut donc pas extraire de cycles. + +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/fermetur.py b/Aster/Cata/cataSTA9/Messages/fermetur.py index 90f63d22..8b17ea79 100644 --- a/Aster/Cata/cataSTA9/Messages/fermetur.py +++ b/Aster/Cata/cataSTA9/Messages/fermetur.py @@ -1,4 +1,4 @@ -#@ MODIF fermetur Messages DATE 07/06/2007 AUTEUR PELLET J.PELLET +#@ MODIF fermetur Messages DATE 08/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -70,5 +70,11 @@ cata_msg={ qui n'est pas encore programmée. """), +10: _(""" + Erreur : + le solveur "PETSc" n'est pas installé sur cette machine. +"""), + + } diff --git a/Aster/Cata/cataSTA9/Messages/feti0.py b/Aster/Cata/cataSTA9/Messages/feti0.py new file mode 100644 index 00000000..4f08b7f8 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/feti0.py @@ -0,0 +1,33 @@ +#@ MODIF feti0 Messages DATE 17/07/2007 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +Afin de pouvoir générer les GROUP_MA, réduisez le nombre +de caractères de NOM_GROUP_MA à un maximum de : %(i1)d +"""), + +2: _(""" +Il existe déjà un GROUP_MA nommé : %(k1)s +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/fiabilite0.py b/Aster/Cata/cataSTA9/Messages/fiabilite0.py new file mode 100644 index 00000000..eac4975d --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/fiabilite0.py @@ -0,0 +1,28 @@ +#@ MODIF fiabilite0 Messages DATE 17/07/2007 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +Le nombre d'élements du mot clé MATRICE doit etre égal à : %(i1)d +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/fonct0.py b/Aster/Cata/cataSTA9/Messages/fonct0.py index 6fdb87ce..bb17648e 100644 --- a/Aster/Cata/cataSTA9/Messages/fonct0.py +++ b/Aster/Cata/cataSTA9/Messages/fonct0.py @@ -1,4 +1,4 @@ -#@ MODIF fonct0 Messages DATE 30/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF fonct0 Messages DATE 11/03/2008 AUTEUR MAZET S.MAZET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -20,7 +20,7 @@ def _(x) : return x -cata_msg={ +cata_msg = { 1 : _(""" Le fichier %(k1)s existe déjà, on écrit à la suite. @@ -59,19 +59,15 @@ ABSCISSE et ORDONNEE n'ont pas la meme taille. Format inconnu : %(k1)s """), -# le message 9 est parfois suivi du message 10 -9 : { - 'message' : _(""" +9 : _(""" Erreur lors de l'interpolation de la fonction '%(k1)s'. """), - 'context' : { 'CONCEPT' : 'k1' }, -}, -10: _(""" +10 : _(""" sur la maille '%(k1)s' """), -11: _(""" +11 : _(""" L'interpolation de la fonction '%(k1)s' n'est pas autorisée. Le type d'interpolation de la fonction vaut 'NON' @@ -79,7 +75,7 @@ Le type d'interpolation de la fonction vaut 'NON' Voir le mot-clé INTERPOL des commandes qui créent des fonctions. """), -12: _(""" +12 : _(""" Une erreur s'est produite dans la recherche de l'intervalle des abscisses contenant la valeur %(r1)s. -> Risque & Conseil : @@ -87,7 +83,7 @@ Une erreur s'est produite dans la recherche de l'intervalle des abscisses conten (mot-clé INTERPOL des commandes qui créent des fonctions). """), -13: _(""" +13 : _(""" Le type de la fonction '%(k1)s' est inconnu. Seules les fonctions, nappes, fonctions constantes peuvent etre traitées par FOINTE. @@ -95,31 +91,31 @@ Seules les fonctions, nappes, fonctions constantes peuvent etre trait le type est '%(k2)s' """), -14: _(""" +14 : _(""" Il n'y a pas assez de paramètres pour évaluer la fonction. Seulement %(i1)d paramètre(s) sont fourni(s) alors que la fonction en réclame %(i2)d. """), -15: _(""" +15 : _(""" Il y a des doublons dans la liste des paramètres fournis : %(ktout)s """), -16: _(""" +16 : _(""" Les paramètres nécessaires sont : %(ktout)s """), -17: _(""" +17 : _(""" Les paramètres fournis sont : %(ktout)s """), -18: _(""" +18 : _(""" La fonction n'a meme pas un point ! """), -19: _(""" +19 : _(""" On est hors du domaine de définition de la fonction. On ne peut pas interpoler la fonction pour cette abscisse car le prolongement à gauche est exclus. abscisse demandée : %(r1)f @@ -129,7 +125,7 @@ On ne peut pas interpoler la fonction pour cette abscisse car le prolongement Voir le mot-clé PROL_GAUCHE des commandes qui créent des fonctions. """), -20: _(""" +20 : _(""" On est hors du domaine de définition de la fonction. On ne peut pas interpoler la fonction pour cette abscisse car le prolongement à droite est exclus. abscisse demandée : %(r1)f @@ -139,14 +135,14 @@ On ne peut pas interpoler la fonction pour cette abscisse car le prolongement Voir le mot-clé PROL_DROITE des commandes qui créent des fonctions. """), -21: _(""" +21 : _(""" Erreur de programmation : type d'extrapolation inconnu. -> Debug : le type d'extrapolation est '%(k1)s' """), -22: _(""" +22 : _(""" La fonction n'est définie qu'en un point. On ne peut pas l'interpoler en plus d'un point si le prolongement n'est pas constant des deux cotés. @@ -154,7 +150,7 @@ plus d'un point si le prolongement n'est pas constant des deux cot Voir les mot-clés PROL_GAUCHE/PROL_DROITE des commandes qui créent des fonctions. """), -23: _(""" +23 : _(""" La fonction n'est définie qu'en un point. On ne peut pas l'interpoler ailleurs qu'en ce point si le prolongement n'est pas constant des deux cotés. @@ -162,12 +158,12 @@ qu'en ce point si le prolongement n'est pas constant des deux cot Voir les mot-clés PROL_GAUCHE/PROL_DROITE des commandes qui créent des fonctions. """), -24: _(""" +24 : _(""" On attend une fonction d'un seul paramètre. La fonction '%(k1)s' est une fonction de %(i1)d paramètres. """), -25: _(""" +25 : _(""" Le type de la fonction '%(k1)s' est inconnu. Seules les fonctions, nappes, fonctions constantes et formules sont traitées par FOINTR. @@ -176,12 +172,12 @@ trait le type est '%(k2)s' """), -26: _(""" +26 : _(""" abscisse demandée : %(r1)f intervalle trouvé : [%(r2)f, %(r3)f] """), -27: _(""" +27 : _(""" Un problème d'interpolation a été rencontré. %(k1)s @@ -193,7 +189,7 @@ Un probl %(k2)s """), -28: _(""" +28 : _(""" Un problème concernant le nom des abscisses ou ordonnées a été rencontré. %(k1)s @@ -205,7 +201,7 @@ Un probl %(k2)s """), -29: _(""" +29 : _(""" Un problème concernant le prolongement de la (des) fonction(s) a été rencontré. %(k1)s @@ -217,7 +213,7 @@ Un probl %(k2)s """), -30: _(""" +30 : _(""" Une erreur s'est produite lors de l'opération. %(k1)s @@ -230,4 +226,93 @@ Remont """), +31 : _(""" + Génération par défaut de 3 amortissements :[%(r1)f,%(r2)f,%(r3)f] +"""), + +32 : _(""" + Génération par défaut de 150 fréquences : + %(k1)s +"""), + +33 : _(""" + SPEC_OSCI, la norme ne peut etre nulle. +"""), + +34 : _(""" + SPEC_OSCI, le type de la fonction doit etre ACCE. +"""), + +35 : _(""" + SPEC_OSCI, seule la méthode NIGAM est codée. +"""), + +36 : _(""" + SPEC_OSCI, la méthode choisie suppose des amortissements sous-critiques, + amor<1. +"""), + +37 : _(""" + calcul du MAX, la liste de fonctions n'est pas + homogène en type (fonctions et nappes) +"""), + +38 : _(""" + Calcul du MAX, la liste de fonctions n'est pas homogène + en label NOM_PARA :%(k1)s +"""), + +39 : _(""" + Calcul du MAX, la liste de fonctions n'est pas homogène + en label NOM_RESU :%(k1)s +"""), + +40 : _(""" + Intensite spectrale, avant de calculer l'intensite spectrale, + il est prudent de verifier la norme de la nappe sur laquelle + porte le calcul, ceci peut etre une source d erreurs. +"""), + +41 : _(""" + Le fichier %(k1)s est introuvable. +"""), + +42 : _(""" +Erreur lors de la lecture des blocs de valeurs : + %(k1)s +"""), + +43 : _(""" +Les fréquences doivent etre strictement positives. +"""), + +44 : _(""" +Les abscisses de la fonction %(k1)s ne sont pas strictement croissantes. +"""), + +45 : _(""" +Les abscisses de la fonction %(k1)s ne sont pas croissantes. +"""), + +46 : _(""" +Les abscisses de la fonction %(k1)s ne sont pas décroissantes. +"""), + +47 : _(""" +Les abscisses de la fonction %(k1)s ne sont pas strictement décroissantes. +"""), + +50 : _(""" +Seules les formules à une variable peuvent être traitées directement par IMPR_FONCTION. + +La formule '%(k1)s' dépend de %(i1)d paramètres. + + -> Risque & Conseil : + - Si votre formule dépend de 2 paramètres, utilisez CALC_FONC_INTERP pour produire + une nappe puis appeler IMPR_FONCTION. + - Si votre formule dépend de 3 paramètres ou plus, vous devez d'abord créer une + nouvelle formule à un seul paramètre (et appelé IMPR_FONCTION) ou à 2 paramètres + et passer par CALC_FONC_INTERP puis IMPR_FONCTION. +"""), + } diff --git a/Aster/Cata/cataSTA9/Messages/grappefluide.py b/Aster/Cata/cataSTA9/Messages/grappefluide.py index eea65e38..863c4f7f 100644 --- a/Aster/Cata/cataSTA9/Messages/grappefluide.py +++ b/Aster/Cata/cataSTA9/Messages/grappefluide.py @@ -1,4 +1,4 @@ -#@ MODIF grappefluide Messages DATE 16/05/2007 AUTEUR BOYERE E.BOYERE +#@ MODIF grappefluide Messages DATE 06/11/2007 AUTEUR BOYERE E.BOYERE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -69,9 +69,9 @@ cata_msg={ """), 11: _(""" - Force fluide, grappe bloquée + Force fluide, arrivee de la grappe en butee, fin du calcul de chute de grappe - iteration %(i1)d , z = %(r1)f itération %(i2)d , z = %(r2)f - temps de chute compris entre %(r3)f et %(r4)f + temps de chute total T5 + T6 compris entre %(r3)f et %(r4)f """), 12: _(""" @@ -81,4 +81,23 @@ cata_msg={ 13: _(""" CALCUL GRAPPE FLUIDE : C1 nul (altitude %(r1)f m) """), + +14: _(""" + Force fluide, grappe a l'entree du retreint + - iteration %(i1)d , z = %(r1)f itération %(i2)d , z = %(r2)f + temps de chute T5 compris entre %(r3)f et %(r4)f +"""), + +15: _(""" + Force fluide, attention grappe bloquee + - iteration %(i1)d , z = %(r1)f itération %(i2)d , z = %(r2)f + attention temps de chute compris entre %(r3)f et %(r4)f +"""), + +16: _(""" + Force fluide, pression maximale dans le retreint + - iteration %(i1)d , z = %(r1)f itération %(i2)d , z = %(r2)f + pression maximale %(r4)f Pa dans le retreint +"""), + } diff --git a/Aster/Cata/cataSTA9/Messages/homard0.py b/Aster/Cata/cataSTA9/Messages/homard0.py new file mode 100644 index 00000000..56ec8fe2 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/homard0.py @@ -0,0 +1,44 @@ +#@ MODIF homard0 Messages DATE 17/07/2007 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +Cette macro commande est inconnue. +"""), + +2: _(""" +Erreur : %(k1)s +"""), + +3: _(""" +Impossible de tuer le fichier %(k1)s +"""), + +4: _(""" +Impossible de créer le répertoire de travail pour HOMARD : %(k1)s +"""), + +5: _(""" +Impossible de détruire le fichier :%(k1)s +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/indicateur.py b/Aster/Cata/cataSTA9/Messages/indicateur.py index fc66cdeb..b4e11631 100644 --- a/Aster/Cata/cataSTA9/Messages/indicateur.py +++ b/Aster/Cata/cataSTA9/Messages/indicateur.py @@ -1,35 +1,34 @@ -#@ MODIF indicateur Messages DATE 23/04/2007 AUTEUR GNICOLAS G.NICOLAS +#@ MODIF indicateur Messages DATE 11/03/2008 AUTEUR MEUNIER S.MEUNIER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE GNICOLAS G.NICOLAS def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" +1 : _(""" Le choix TOUT = 'OUI' est obligatoire avec l'option %(k1)s. On ne peut pas faire de calcul de champ d'indicateur d'erreur sur des mailles ou des groupes de mailles car on doit connaitre tous les voisins. """), -2: _(""" +2 : _(""" Le champ de contraintes n'a pas été calculé sur tout le modèle. On ne peut pas calculer l'option %(k1)s pour le numéro d'ordre %(k2)s. """), @@ -50,78 +49,84 @@ Attention : r La valeur prise par défaut pour theta est 1. """), -6: _(""" +6 : _(""" Le calcul de l'indicateur d erreur ne sait pas traiter les charges du type de %(k1)s. """), -7: _(""" +7 : _(""" Le choix %(k1)s apparait au moins dans 2 charges. """), -8: _(""" +8 : _(""" Probleme sur les charges. Consulter la documentation """), -11: _(""" +11 : _(""" Impossible de récupérer les paramètres temporels. """), -20: _(""" -perm_in: division par zéro +18 : _(""" +Impossible de récupérer la porosité """), -21: _(""" -La %(k1)s caractéristique est nulle. On risque la division par zéro. +19 : _(""" +Impossible de récupérer le coefficient de Poisson """), -31: _(""" -deltat: division par zéro +20 : _(""" +perm_in: division par zéro """), -38: _(""" -type d'element %(k1)s inconnu +21 : _(""" +La %(k1)s caractéristique est nulle. On risque la division par zéro. """), -39: _(""" -rho liquide: division par zéro +22: _(""" +rho liquide: div par zero """), -41: _(""" -Il faut renseigner le mot-clef comp_incr avec elas et liqu_satu -pour calculer l'indicateur d'erreur temporelle. +23: _(""" +Vous n'utilisez pas une modélisation hm saturée élastique. """), -42: _(""" -Vous n'utilisez pas une modélisation hm saturée élastique. +24 : _(""" + le résultat %(k1)s doit comporter un champ d'indicateurs d'erreur au numéro + d'ordre%(k2)s . """), -43: _(""" -pression caractéristique : division par zéro + +25: _(""" +Il faut renseigner le mot-clef comp_incr avec elas et liqu_satu pour calculer l' +indicateur d'erreur temporelle. """), -44: _(""" -module de Young non défini : division par zéro +28 : _(""" +Pour le calcul de l'indicateur d'erreur en HM, il faut fournir +les longueur et pression caractéristiques. +Ces valeurs doivent etre strictement positives. """), -48: _(""" -Vous utilisez une modélisation THM et vous n'avez pas renseigné -correctement le mot-clé ERRE_THM. -Conseil : Donner une longueur et une pression caractéristique +31: _(""" +deltat: division par zéro """), -90: _(""" +90 : _(""" La condition %(k1)s est bizarre. """), -91: _(""" +91 : _(""" On ne sait pas traiter la condition %(k1)s. """), -98: _(""" +92 : _(""" +L'option %(k1)s est calculable en dimension 2 uniquement. +"""), + +98 : _(""" L'option %(k1)s est invalide. """), -99: _(""" +99 : _(""" Erreur de programmation dans %(k1)s L'option %(k2)s ne correspond pas à une option de calcul d'indicateur d'erreur. """), diff --git a/Aster/Cata/cataSTA9/Messages/irrad3m.py b/Aster/Cata/cataSTA9/Messages/irrad3m.py index f0950e27..3609a602 100644 --- a/Aster/Cata/cataSTA9/Messages/irrad3m.py +++ b/Aster/Cata/cataSTA9/Messages/irrad3m.py @@ -1,21 +1,21 @@ -#@ MODIF irrad3m Messages DATE 23/04/2007 AUTEUR FLEJOU J-L.FLEJOU +#@ MODIF irrad3m Messages DATE 17/12/2007 AUTEUR FLEJOU J-L.FLEJOU # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== # RESPONSABLE FLEJOU J-L.FLEJOU @@ -27,25 +27,26 @@ cata_msg={ La <%(k1)s> dichotomie pour la loi IRRAD3M n'a pas trouvée de solution pour le nombre d'itération donné <%(i1)d>.\n Info pour le debug - Borne 0 : <%(r1)E> - Borne 1 : <%(r2)E> - Puissance N : <%(r3)E> - Pas pour la recherche : <%(r4)E> - RM : <%(r5)E> - EU : <%(r6)E> - R02 : <%(r7)E> - Précision demandée : <%(r8)E> + Borne 0 : <%(r1).15E> + Borne 1 : <%(r2).15E> + Puissance N : <%(r3).15E> + Pas pour la recherche : <%(r4).15E> + RM : <%(r5).15E> + EU : <%(r6).15E> + R02 : <%(r7).15E> + Précision demandée : <%(r8).15E> Valeurs initiales - N0 : <%(r9)E> - Borne 0 : <%(r10)E> - Borne 1 : <%(r11)E> + N0 : <%(r9).15E> + Borne 0 : <%(r10).15E> + Borne 1 : <%(r11).15E> + Borne E : <%(r12).15E> """), 2: _(""" L'irradiation diminue au cours du temps. C'EST PHYSIQUEMENT IMPOSSIBLE. -Grandeurs au point de Gauss qui pose problème : - Irradiation a t- : <%(r1)E> - Irradiation a t+ : <%(r2)E> +Grandeurs au point de Gauss : + Irradiation a t- : <%(r1).15E> + Irradiation a t+ : <%(r2).15E> """), 3: _(""" diff --git a/Aster/Cata/cataSTA9/Messages/jeveux.py b/Aster/Cata/cataSTA9/Messages/jeveux.py index 547852b3..71cf62e2 100644 --- a/Aster/Cata/cataSTA9/Messages/jeveux.py +++ b/Aster/Cata/cataSTA9/Messages/jeveux.py @@ -1,112 +1,101 @@ -#@ MODIF jeveux Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF jeveux Messages DATE 15/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" +1 : _(""" %(k1)s """), - - - - - - - - - - - - - - - - - - - - - - - - - -7: _(""" - destruction de %(k1)s +2 : _(""" + Pointeur de longueur externe interdit maintenant. """), +3 : _(""" + Pointeur de nom externe interdit maintenant. +"""), - - - - - - - - - -10: _(""" - le nom demande existe deja dans la base %(k1)s +6 : _(""" + Erreur de programmation : + + Appel invalide, la marque devient négative """), -11: _(""" - erreur lors de la fermeture de la base %(k1)s +7 : _(""" + Destruction de %(k1)s """), -12: _(""" - fichier associe a la base %(k1)s inexistant +8 : _(""" + La base %(k1)s a été constituée avec la version %(k2)s + et vous utilisez la version %(k3)s """), -13: _(""" - erreur de lecture du 1er bloc de %(k1)s +9 : _(""" + Suppression de la partition mémoire """), -14: _(""" - erreur lors de la fermeture de %(k1)s +10 : _(""" + Erreur de programmation : + + Le nom demandé existe déjà dans la base %(k1)s """), -15: _(""" - Ecrasement amont, l'objet :< %(k1)s > est peut etre écrasé +11 : _(""" + Erreur lors de la fermeture de la base %(k1)s """), -16: _(""" - Ecrasement aval, l'objet :< %(k1)s > est peut etre écrasé +12 : _(""" + Fichier associé à la base %(k1)s inexistant """), -17: _(""" - Chainage casse apres l'objet : %(k1)s +13 : _(""" + Erreur de lecture du 1er bloc de %(k1)s """), +14 : _(""" + Erreur lors de la fermeture de %(k1)s +"""), +15 : _(""" + Ecrasement amont, l'objet :< %(k1)s > est peut être écrasé"""), +16 : _(""" + Ecrasement aval, l'objet :< %(k1)s > est peut être écrasé +"""), +17 : _(""" + Chainage cassé après l'objet : %(k1)s +"""), +18 : _(""" + Le segment de valeurs associé à l'objet : %(k1)s, n'existe pas en mémoire et + l'objet ne possède pas d'image disque. +"""), -19: _(""" +19 : _(""" Le nom d'un objet JEVEUX ne doit pas commencer par un blanc. """), -21: _(""" +21 : _(""" REOUVERTURE DE LA BASE : %(k1)s CREEE AVEC LA VERSION : %(k2)s NOMBRE D'ENREGISTREMENTS UTILISES : %(i1)d @@ -117,7 +106,7 @@ cata_msg={ POURCENTAGE D'UTILISATION DU REPERTOIRE : %(i6)d %% """), -22: _(""" +22 : _(""" NOM DE LA BASE : %(k1)s NOMBRE D'ENREGISTREMENTS UTILISES : %(i1)d NOMBRE D'ENREGISTREMENTS MAXIMUM : %(i2)d @@ -128,132 +117,184 @@ cata_msg={ POURCENTAGE D'UTILISATION DU REPERTOIRE : %(i7)d %% """), -23: _(""" +23 : _(""" Nom de Collection ou de Répertoire de noms inexistant : %(k1)s """), -24: _(""" +24 : _(""" JENONU : Collection ou Répertoire de noms : %(k1)s Il faut passer par JEXNOM,JEXNUM. """), -25: _(""" +25 : _(""" Nom de collection ou de répertoire inexistant : >%(k1)s< """), -26: _(""" +26 : _(""" Objet JEVEUX inexistant dans les bases ouvertes : >%(k1)s< l'objet n'a pas été créé ou il a été détruit """), -27: _(""" +27 : _(""" Objet simple JEVEUX inexistant en mémoire et sur disque : >%(k1)s< le segment de valeurs est introuvable """), -28: _(""" +28 : _(""" Collection JEVEUX inexistant en mémoire et sur disque : >%(k1)s< le segment de valeurs est introuvable """), -29: _(""" +29 : _(""" Objet %(i1)d de collection JEVEUX inexistant en mémoire et sur disque : >%(k1)s< """), -30: _(""" +30 : _(""" Objet de collection JEVEUX inexistant : >%(k1)s< l'objet n'a pas été créé ou il a été détruit """), -31: _(""" +31 : _(""" Erreur programmeur : - La routine JUVECA n'a pas prévu de redimensionner l'objet :%(k1)s + La routine JUVECA n'a pas prévu de re-dimensionner l'objet :%(k1)s de type :%(k2)s """), -32: _(""" - Erreur allocation de segment de memoire de longueur %(i1)d (entiers). - Memoire allouee insuffisante. Fermeture des bases (glob.*) sur erreur - Il faut relancer le calcul en augmentant la limite memoire. +32 : _(""" + Erreur allocation de segment de mémoire de longueur %(i1)d (entiers). + Mémoire allouée insuffisante. Fermeture des bases (glob.*) sur erreur + Il faut relancer le calcul en augmentant la limite mémoire. """), -33: _(""" +33 : _(""" Modification de l'environnement JEVEUX. - Allocation dynamique des segments de valeurs de taille superieure + Allocation dynamique des segments de valeurs de taille supérieure a %(i1)d (entiers) """), -34: _(""" +34 : _(""" Modification de l'environnement JEVEUX. Mode debug positionne a %(i1)d """), -35: _(""" - Le nombre de bases gerables est limite a %(i1)d -"""), - -36: _(""" - Le nombre d'enregistrements maximum de la base %(k1)s sera modifie, +36 : _(""" + Le nombre d'enregistrements maximum de la base %(k1)s sera modifié de %(i1)d a %(i2)d """), -37: _(""" +37 : _(""" La valeur du rapport entre partitions ne convient pas, la longueur de la partition 1 doit etre au minimum de %(i1)d mots soit environ %(i2)d %% """), - -38: _(""" +38 : _(""" Numero d'objet invalide %(i1)d """), - -39: _(""" - Taille de repertoire demandee trop grande. +39 : _(""" + Taille de repertoire demandé trop grande. Le maximun est de %(i1)d - La valeur reclamee est de %(i2)d + La valeur reclamé est de %(i2)d """), - -40: _(""" - Erreur ecriture de l'enregistrement %(i1)s sur la base : %(k1)s %(i2)d +40 : _(""" + Erreur ériture de l'enregistrement %(i1)s sur la base : %(k1)s %(i2)d code retour WRITDR : %(i3)d - Erreur probablement provoquee par une taille trop faible du repertoire de travail. - + Erreur probablement provoquée par une taille trop faible du répertoire de travail. """), - -41: _(""" +41 : _(""" Erreur lecture de l'enregistrement %(i1)d sur la base : %(k1)s %(i2)d code retour READDR : %(i3)d - """), - -42: _(""" - Fichier sature, le nombre maximum d'enregistrement %(i1)d de la base %(k1)s - est atteint, il faut relancer le calcul en modifiant le parametre NMAX_ENRE dans DEBUT +42 : _(""" + Fichier saturé le nombre maximum d'enregistrement %(i1)d de la base %(k1)s est atteint + il faut relancer le calcul en modifiant le parametre NMAX_ENRE dans DEBUT ou en passant une taille maximum de base sur la ligne de commande argument "-max_base" suivi de la valeur en Mo. - """), - -43: _(""" +43 : _(""" Erreur d'ouverture du fichier %(k1)s , code retour OPENDR = %(i1)d - - """), -44: _(""" +44 : _(""" Taille des segments de valeurs %(i1)d """), -45: _(""" +45 : _(""" Taille de la partition principale %(r1)g """), -} +47 : _(""" + Erreur lors de la relecture d'un enregistrement sur le fichier d'accès direct. +"""), +48 : _(""" + Erreur lors de l'écriture d'un enregistrement sur le fichier d'accès direct. +"""), + +49 : _(""" + Taille de la zone à allouer invalide %(i1)d < 0 . +"""), + +50 : _(""" + Allocation dynamique impossible. +"""), + +51 : _(""" + Relecture au format HDF impossible. +"""), + +52 : _(""" + Erreur de relecture des paramètres du dataset HDF. +"""), + +53 : _(""" + Relecture au format HDF impossible. +"""), + +54 : _(""" + Impossible d'ouvrir le fichier HDF %(k1)s. +"""), + +55 : _(""" + Impossible de fermer le fichier HDF %(k1)s. +"""), + +56 : _(""" + Fermeture du fichier HDF %(k1)s. +"""), + +57 : _(""" + Longueur du segment de valeurs à allouer invalide %(i1)d. +"""), + +58 : _(""" + Le répertoire est saturé. +"""), + +59 : _(""" + Le nom demandé existe déjà dans le répertoire %(k1)s. + +"""), + +60 : _(""" + Erreur lors de l'allocation dynamique. Il n'a pas été possible d'allouer + une zone mémoire de longueur %(i1)d (octets). + La dernière opération de libération mémoire a permis de récupérer %(i2)d (octets). + +"""), + +62 : _(""" + Erreur lors de l'allocation dynamique. Il n'a pas été possible d'allouer + une zone mémoire de longueur %(i1)d (octets), on dépasse la limite maximum + fixée à %(i2)d (octets) et on occupe déjà %(i3)d (octets). + La dernière opération de libération mémoire a permis de récupérer %(i4)d (octets). + +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/maillage.py b/Aster/Cata/cataSTA9/Messages/maillage.py index b2385b5b..0ebbb675 100644 --- a/Aster/Cata/cataSTA9/Messages/maillage.py +++ b/Aster/Cata/cataSTA9/Messages/maillage.py @@ -1,8 +1,8 @@ -#@ MODIF maillage Messages DATE 30/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF maillage Messages DATE 10/12/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,60 +20,26 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - Le nom de groupe numéro %(i1)d de la famille %(k1)s - est trop long. Il sera tronqué à 8 caractères. - Le groupe "%(k2)s" est renommé en "%(k3)s". -"""), - -2: _(""" -Le nom de groupe numéro %(i1)d de la famille %(k1)s -est vide. -"""), - -3: _(""" -Famille %(k1)s : - Incohérence sur les nombres de %(k2)s, il y en a %(i1)d alors - que la fonction MED en annonce %(i2)d. +11 : _(""" +Plus de %(i1)d faces touchent le noeud %(k1)s. -Impossible de lire ce fichier. On peut utiliser mdump (utilitaire med) -pour voir si le problème vient du fichier MED ou de la lecture dans -Code_Aster. +Risque & conseils : + Vérifier la validité de votre maillage autour de ce point. + Dans une grille, un noeud est commun à 12 faces. """), -4: _(""" -La famille %(k1)s n'a ni groupe, ni attribut. +12 : _(""" + L'option HEXA20_27 ne traite pas les macros mailles """), -5: _(""" - Lecture de la famille numéro %(i1)4d de nom %(k1)s. +13 : _(""" + L'option HEXA20_27 ne traite pas les absc_curv """), -6: _(""" - Groupe numéro %(i1)6d : %(k1)s -"""), - -7: _(""" - Groupe numéro %(i1)6d : %(k1)s - renommé en : %(k2)s -"""), - -8: _(""" -Vous ne pouvez pas renommer le groupe "%(k1)s" en "%(k2)s" -car "%(k2)s" existe déjà dans le fichier MED. -"""), - -9: _(""" -Arret en raison des conflits sur les noms de groupe. -"""), - -10: _(""" - Le nom de groupe numéro %(i1)d de la famille %(k1)s - est contient des caractères interdits. - Le groupe "%(k2)s" est renommé en "%(k3)s". +14 : _(""" + Le mot-cle MAILLAGE est obligatoire avec le mot-cle HEXA20_27. """), } - diff --git a/Aster/Cata/cataSTA9/Messages/matrice0.py b/Aster/Cata/cataSTA9/Messages/matrice0.py new file mode 100644 index 00000000..0050fdeb --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/matrice0.py @@ -0,0 +1,52 @@ +#@ MODIF matrice0 Messages DATE 14/01/2008 AUTEUR DESOZA T.DESOZA +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" + Cas fluides multiples : précisez le GROUP_MA dans lequel vous affectez la masse volumique RHO. +"""), + +2: _(""" + PRES_FLUIDE obligatoire une fois. +"""), + +3: _(""" + Amortissement ajouté sur modèle generalisé non encore implanté. +"""), + +4: _(""" + Rigidité ajouté sur modele généralisé non encore implanté. +"""), + +9: _(""" + Une des options doit etre RIGI_MECA ou RIGI_THER ou RIGI_ACOU ou RIGI_MECA_LAGR. +"""), + +10: _(""" + Pour calculer RIGI_MECA_HYST, il faut avoir calculé RIGI_MECA auparavant (dans le meme appel). +"""), + +11: _(""" + Pour calculer AMOR_MECA, il faut avoir calculé RIGI_MECA et MASS_MECA auparavant (dans le meme appel). +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/mecanonline.py b/Aster/Cata/cataSTA9/Messages/mecanonline.py index 7e673c8e..55dd3da3 100644 --- a/Aster/Cata/cataSTA9/Messages/mecanonline.py +++ b/Aster/Cata/cataSTA9/Messages/mecanonline.py @@ -1,300 +1,72 @@ -#@ MODIF mecanonline Messages DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF mecanonline Messages DATE 26/05/2008 AUTEUR DESOZA T.DESOZA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# ============================ ========================================== -def _(x) : return x - -cata_msg={ - - -1: _(""" - Le champ absolu n'est accessible pour OBSERVATION qu'en presence de modes statiques -"""), - -2: _(""" - Melange de champs de nature differente dans le meme mot-clef facteur OBSERVATION -"""), - -3: _(""" - Il y a trop de colonnes d'affichage (on est limite a quinze) -"""), - -4: _(""" - Option non prevue pour la matrice de rigidite -"""), - -5: _(""" - Le type de selection du coefficient de pilotage est inconnu -"""), - -6: _(""" - Les variables de commandes initiales induisent des contraintes incompatibles -"""), - -7: _(""" - Le champ de deplacement Dirichlet differentiel n'est pas trouve dans le concept EVOL_NOLI %(k1)s -"""), - -8: _(""" - Le critere de convergence choisi est lache, risque de resultats faux -"""), - -9: _(""" - On surcharge un resultat sans definir d'etat initial (pas d'ETAT_INIT) : on suppose un etat initial nul -"""), - -10: _(""" - Le concept dans ETAT_INIT n'est du type EVOL_NOLI -"""), - -11: _(""" - Pas de numero d'ordre trouve dans le concept EVOL_NOLI nomme %(k1)s -"""), - -12: _(""" - L'instant specifie sous ETAT_INIT n'est pas trouve -"""), - -13: _(""" - Plusieurs instants correspondent a celui specifie sous ETAT_INIT -"""), - -14: _(""" - La derivee de %(k1)s par rapport a %(k2)s est introuvable -"""), - -15: _(""" - Le champ de deplacement DEPL_R (ou sa derivee) n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s -"""), - -16: _(""" - Pour faire une reprise avec un calcul de sensibilite, il faut obligatoirement renseigner EVOL_NOLI dans ETAT_INIT -"""), - -17: _(""" - Le champ de contraintes SIEF_R (ou sa derivee) n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s -"""), - -18: _(""" - Le champ de variables internes VARI_R (ou sa derivee) n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s -"""), - -19: _(""" - Le champ de variables non locales VARI_NONL (ou sa derive) n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s -"""), - -20: _(""" - Le champ de Lagrangiens non locaux LANL_ELGA n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s -"""), - -21: _(""" - Le champ de vitesses VITE n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s , on cree un champ de vitesses nulles -"""), - -22: _(""" - L'etat initial n'appartient pas a un EVOL_NOLI : on suppose qu'on part d'un etat a vitesses nulles -"""), - -23: _(""" - Le champ d'accelerations ACCE n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s on calcule un champ d'accelerations, ce qui est possible puisque les vitesses sont nulles -"""), - -24: _(""" - Le champ d'accelerations ACCE n'est pas trouve dans le concept EVOL_NOLI nomme %(k1)s on ne peut pas, pour l'instant, calculer le champ des accelerations car les vitesses ne sont pas nulles -"""), - -25: _(""" - Le parametre REAC_INCR est negatif -"""), - -26: _(""" - Le parametre REAC_ITER est negatif -"""), - -27: _(""" - Le parametre REAC_ITER_ELAS est negatif -"""), - -28: _(""" - Il faut preciser un concept de type EVOL_NOLI dans le mot-clef facteur ETAT_INIT lorsque l'on fait une prediction de type DEPL_CALCULE -"""), - -29: _(""" - La definition des parametres de recherche lineaire RHO_MIN et RHO_EXCL est contradictoire, on prend l'intervalle [RHO_MIN,RHO_EXCL] -"""), - -30: _(""" - La definition des parametres de recherche lineaire RHO_MAX et RHO_EXCL est contradictoire, on prend l'intervalle [-RHO_EXCL,RHO_MAX] -"""), - -31: _(""" - Le parametre de pilotage ETA_PILO_MAX doit etre inferieur a ETA_PILO_R_MAX -"""), - -32: _(""" - Le parametre de pilotage ETA_PILO_MIN doit etre superieur a ETA_PILO_R_MIN -"""), - -33: _(""" - Il faut _au plus_ UN noeud pour le pilotage de type DDL_IMPO -"""), - -34: _(""" - Il faut _au plus_ UN groupe de noeuds pour le pilotage de type DDL_IMPO -"""), - -35: _(""" - Il y a plus d'un noeud dans le groupe de noeuds definissant le pilotage de type DDL_IMPO -"""), - -36: _(""" - Il faut preciser un groupe de noeuds dans la methode de pilotage de type LONG_ARC -"""), - -37: _(""" - Le groupe de noeud nomme %(k1)s que l'on utilise pour le pilotage de type LONG_ARC est vide -"""), - -38: _(""" - La liste de composantes NOM_CMP que l'on utilise pour le pilotage de type LONG_ARC est vide -"""), - -39: _(""" - On fait un calcul de flambement non lineaire avec l'hypothese des petites perturbations (HPP) -"""), - -40: _(""" - On fait un calcul de flambement non lineaire avec l'hypothese des deformations de type GREEN -"""), - -41: _(""" - Les deformations de type %(k1)s sont incompatibles avec le calcul du flambement -"""), - -42: _(""" - Pour le traitement du contact avec X-FEM, le solveur MUMPS est vivement recommande -"""), - -43: _(""" - Contact et pilotage sont des fonctionnalites incompatibles -"""), - -44: _(""" - Contact et recherche lineaire peuvent poser des problemes de convergence -"""), - -45: _(""" - Contact methode continue et recherche lineaire sont incompatibles -"""), - -46: _(""" - Le contact avec le solveur GCPC n'est pas disponible. -"""), - -47: _(""" - Liaison unilaterale et pilotage sont des fonctionnalites incompatibles -"""), - -48: _(""" - Liaison unilaterale et recherche lineaire peuvent poser des problemes de convergence -"""), - -49: _(""" - Le denominateur est nul lors du calcul du parametre de pilotage -"""), +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== -50: _(""" - La lecture du champ DEPL_CALCULE est impossible -"""), +def _(x) : return x -51: _(""" - La prediction par extrapolation est impossible : l'increment de temps initial est nul -"""), +cata_msg = { -52: _(""" - Le parametre de recherche lineaire ITER_LINE_MAXI doit etre inferieur a 1000 +10 : _(""" + Le concept dans ETAT_INIT n'est pas du type EVOL_NOLI """), -53: _(""" - Le champ de temperature est une grandeur inconnue (ni reelle, ni fonction) +12 : _(""" + L'instant spécifié sous ETAT_INIT n'est pas trouvé """), -54: _(""" - Erreur dans la decoupe initiale des pas +13 : _(""" + Plusieurs instants correspondent à celui spécifié sous ETAT_INIT """), -55: _(""" - Attention, ARRET=NON donc poursuite du calcul sans avoir eu convergence, risque de resultats faux +14 : _(""" + Vous utilisez la méthode CONTINUE pour le traitement du contact et faites une reprise de calcul (mot-clé reuse). L'état initial de contact sera + non contactant sauf si vous avez utilisé le mot-clé CONTACT_INIT. + Cela peut entraîner des difficultés de convergence en présence de fortes non-linéarités. En présence de frottement, la solution peut bifurquer + différemment. + + Conseils : + Si vous le pouvez, faites votre calcul en une seule fois. """), -56: _(""" - Le nom du champ NOM_CHAMP de la variable de commande est obligatoire pour le decoupage +15 : _(""" + Vous utilisez la méthode CONTINUE pour le traitement du contact et définissez un état initial via le mot-clé ETAT_INIT. L'état initial de contact + sera non contactant sauf si vous avez utilisé le mot-clé CONTACT_INIT. """), -57: _(""" - Le nom de la composante NOM_CMP du champ NOM_CHAMP de la variable de commande est obligatoire +22 : _(""" + L'etat initial n'appartient pas à un EVOL_NOLI : + on suppose qu'on part d'un état a vitesses nulles """), -58: _(""" - La valeur VALE du critere est obligatoire pour le decoupage +43 : _(""" + Contact et pilotage sont des fonctionnalités incompatibles """), -59: _(""" +59 : _(""" Cette loi de comportement n'est pas disponible pour le pilotage de type PRED_ELAS """), -60: _(""" - Le pilotage de type PRED_ELAS necessite ETA_PILO_MIN et ETA_PILO_MAX pour la loi ENDO_ISOT_BETON +60 : _(""" + Le pilotage de type PRED_ELAS nécessite ETA_PILO_MIN et ETA_PILO_MAX pour la loi ENDO_ISOT_BETON """), -61: _(""" - Le pilotage de type PRED_ELAS necessite ETA_PILO_MIN et ETA_PILO_MAX pour la loi ENDO_ORTH_BETON -"""), - -62: _(""" - La valeur de NUME_SUIVI est incorrecte dans SUIVI_DDL -"""), - -63: _(""" - Le ddl est inconnu sur le noeud ou la maille specifiee pour SUIVI_DDL -"""), - -64: _(""" - Le parametre ITER_DUAL_MAXI est trop eleve (il doit etre inferieur a 10000) -"""), - -65: _(""" - La fonction duale dans le lagrangien non local est non convexe -"""), - -66: _(""" - Probleme lors de la recherche lineaire dans le lagrangien non local -"""), - -67: _(""" - Il y a plusieurs charges contenant un chargement de type FORCE_FLUIDE -"""), - -68: _(""" - Impossible de faire du pilotage en contraintes planes -"""), - -69: _(""" +69 : _(""" Problème rencontré : la matrice de masse est non inversible. On ne peut donc pas s'en servir pour calculer l'accélération initiale. @@ -304,41 +76,13 @@ cata_msg={ Avez-vous bien affecté une masse sur tous les éléments ? """), -70: _(""" - On detecte une divergence, on force la subdivision du pas de temps -"""), - -71: _(""" - Nombre maximum d'iterations atteint sans convergence, on force la subdivision du pas de temps -"""), - -72: _(""" - Le pas minimal de la subdivision est atteint. On ne peut diviser plus. -"""), - -73: _(""" - Le contact avec le solveur MUMPS n'est pas disponible. -"""), - -74: _(""" - Liaison unilaterale avec le solveur GCPC n'est pas disponible. -"""), - -75: _(""" - Liaison unilaterale avec le solveur MUMPS n'est pas disponible. -"""), - -76: _(""" - L'etat initial n'appartient pas a un EVOL_NOLI : on suppose qu'on part d'un etat a deplacements nuls -"""), - -77: _(""" +77 : _(""" Vous faites une reprise de calcul avec PILOTAGE en longueur d'arc et avec l'option ANGL_INCR_DEPL mais il n'y pas assez d'informations dans - la structure de donnees resultats. Il vous faut en effet au moins les deux derniers champs deplacements solutions. + la structure de donnees resultats. Il vous faut en effet au moins les deux derniers champs déplacements solutions. Changer l'option de PILOTAGE (utilisez NORM_INCR_DEPL) ou refaites le premier calcul pour enrichir la SD resultat (modifiez vos options d'ARCHIVAGE). """), -78: _(""" +78 : _(""" Problème rencontré : la matrice de masse est quasi-singulière. On se sert de cette matrice pour calculer l'accélération initiale. @@ -352,9 +96,9 @@ cata_msg={ avec, eventuellement, un schéma d'integration choisi volontairement très dissipatif (par exemple HHT avec alpha=-0.3). On peut ensuite reprendre en poursuite avec un schéma moins dissipatif si besoin est. -"""), +"""), -79: _(""" +79 : _(""" Arret par manque de temps CPU au numéro d'instant : %(i1)d lors de l'itération : %(i2)d - Temps moyen par itération : %(r1)f @@ -363,7 +107,7 @@ cata_msg={ La base globale est sauvegardée. Elle contient les pas archivés avant l'arret. """), -80: _(""" +80 : _(""" Arret par manque de temps CPU au numéro d'instant : %(i1)d - Temps moyen par %(k1)s : %(r1)f - Temps cpu restant : %(r2)f @@ -371,29 +115,37 @@ cata_msg={ La base globale est sauvegardée. Elle contient les pas archivés avant l'arret. """), -81: _(""" +81 : _(""" Echec dans la recherche linéaire. Contactez les développeurs. """), -82: _(""" +82 : _(""" Arret pour cause de matrice non inversible. """), -83: _(""" +83 : _(""" Arret : absence de convergence avec le nombre d'itérations requis. """), -84: _(""" +84 : _(""" Arret par échec dans le pilotage. """), -85: _(""" +85 : _(""" Arret : absence de convergence au numéro d'instant : %(i1)d lors de l'itération : %(i2)d """), -86: _(""" +86 : _(""" Erreur dans la gestion des erreurs. Contactez les développeurs. """), +87 : _(""" + Recherche linéaire non favorable. Rho forcé à 1. +"""), + +88 : _(""" + Echec lors de l'interpolation de la variable de commande. +"""), + } diff --git a/Aster/Cata/cataSTA9/Messages/mecanonline2.py b/Aster/Cata/cataSTA9/Messages/mecanonline2.py index 1439eb90..a6a18708 100644 --- a/Aster/Cata/cataSTA9/Messages/mecanonline2.py +++ b/Aster/Cata/cataSTA9/Messages/mecanonline2.py @@ -1,4 +1,4 @@ -#@ MODIF mecanonline2 Messages DATE 30/05/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF mecanonline2 Messages DATE 06/05/2008 AUTEUR MAHFOUZ D.MAHFOUZ # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -20,15 +20,67 @@ def _(x) : return x -cata_msg={ +cata_msg = { -67: _(""" - Le code %(i1)d retourné lors de l'intégration de la loi de comportement n'est - pas traité. +3 : _(""" + + Le résidu global converge plus vite que la condition des contraintes planes. + La convergence de la condition des contraintes planes peut être améliorée en + augmentant ITER_MAXI_DEBORST (=1 par défaut), sous le mot clef facteur COMP_INCR. + +"""), + +4 : _(""" + La charge definie dans STAT_NON_LINE en tant que une charge de type suiveuse, + sous le mot-clé TYPE_CHARGE = 'SUIV' n'est pas une Charge SUIVEUSE. """), -96: _(""" - -> Les surfaces en contact relatif ont bougé de plus de 5%. +27 : _(""" + Lecture du champ DEPL_CALCULE impossible. +"""), + +36 : _(""" + Erreur dans la découpe initiale des pas. +"""), + +37 : _(""" + Attention, ARRET=NON donc poursuite du calcul sans avoir eu convergence. +"""), + +67 : _(""" + Le code %(i1)d retourné lors de l'intégration de la loi de comportement n'est pas traité. +"""), + +93 : _(""" + -> Risque & Conseil : dans le cas d'une résolution incrémentale, + on ne considère que la variation des variables de commande entre + l'instant précédent et l'instant actuel. + On ne prend donc pas en compte d'éventuelles contraintes incompatibles + dues à ces variables de commande initiales. + Pour tenir compte de ces contraintes vous pouvez : + - partir d'un instant fictif antérieur où toutes les variables de + commande sont nulles ou égales aux valeurs de référence + - choisir des valeurs de référence adaptées + Pour plus d'informations, voir la documentation de STAT_NON_LINE + (U4.51.03) mot-clé EXCIT, et le test FORMA09 (V7.20.101). +"""), + +94 : _(""" + -> Indications supplémentaires : pour la variable de commande : %(k1)s + et la composante : %(k2)s + Valeur maximum : %(r1)f sur la maille : %(k3)s + Valeur minimum : %(r2)f sur la maille : %(k4)s +"""), + +95 : _(""" + -> Indications supplémentaires : pour la variable de commande : %(k1)s + et la composante : %(k2)s + Valeur maximum de abs( %(k2)s - %(k5)s_REF) : %(r1)f sur la maille : %(k3)s + Valeur minimum de abs( %(k2)s - %(k5)s_REF) : %(r2)f sur la maille : %(k4)s +"""), + +96 : _(""" + -> Les surfaces en contact relatif ont bougé de plus de 5%%. Or vous n'avez pas activé la réactualisation géométrique (REAC_GEOM) automatique ou vous utiliser le mode "CONTROLE" -> Risque & Conseil : Vos résultats risquent d'etre faux, les mailles ne @@ -39,18 +91,15 @@ cata_msg={ pas interpénétration. """), -97: _(""" - -> Les variables de commandes initiales induisent des contraintes - incompatibles. - -> Risque & Conseil : Ce message apparait si l'état initial - (avant le premier instant de calcul) est tel que les variables de commande - (température, hydratation, séchage...) conduisent à des contraintes - non équilibrées. Dans le cas de la température, vérifiez que la valeur - TEMP_REF correspond à la température de l'état initial. - +97 : _(""" + -> Les variables de commandes initiales induisent des contraintes + incompatibles : + l'état initial (avant le premier instant de calcul) est tel que + les variables de commande (température, hydratation, séchage...) + conduisent à des contraintes non équilibrées. """), -98: _(""" +98 : _(""" -> Le chargement extérieur est nul (à la précision près). Or vous avez demandé une convergence avec le critère relatif (RESI_GLOB_RELA). Pour éviter une division par zéro, le code est passé automatiquement en mode de convergence @@ -62,13 +111,4 @@ cata_msg={ de résidu maximum à l'instant précédent. """), -99: _(""" - -> Le chargement extérieur est nul (à la précision près). - Or vous avez demandé une convergence avec le critère relatif (RESI_GLOB_RELA). - -> Risque & Conseil : Vérifier bien que votre chargement doit etre nul à cet instant - Le chargement est "nul" dans le cas de l'utilisation d'AFFE_CHAR_CINE en particulier. - Il vous faut changer votre critère de convergence: RESI_GLOB_MAXI ou RESI_REFE_RELA -"""), - - } diff --git a/Aster/Cata/cataSTA9/Messages/mecanonline3.py b/Aster/Cata/cataSTA9/Messages/mecanonline3.py new file mode 100644 index 00000000..04d7e737 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/mecanonline3.py @@ -0,0 +1,77 @@ +#@ MODIF mecanonline3 Messages DATE 19/12/2007 AUTEUR ABBAS M.ABBAS +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { + +70 : _(""" + macro_element statique et FETI incompatibles +"""), + +71 : _(""" + chargement onde plane et FETI incompatibles +"""), + +72 : _(""" + forces fluides sur les grappes et FETI incompatibles +"""), + +73 : _(""" + forces d'inertie et FETI incompatibles +"""), + +75 : _(""" + forces d'inertie derivées et FETI incompatibles +"""), + +78 : _(""" + FETI et contact discret incompatibles ! +"""), + +89 : _(""" + contact et recherche linéaire peuvent poser des problèmes de convergence +"""), + +90 : _(""" + la combinaison: contact-frottement et solveur GCPC n'est pas disponible. +"""), + +91 : _(""" + contact méthode continue et recherche linéaire sont incompatibles +"""), + +92 : _(""" + contact méthode continue et pilotage sont incompatibles +"""), + +93 : _(""" + la combinaison: méthode continue en contact et solveur GCPC n'est pas disponible. +"""), + +94 : _(""" + LIAISON_UNILATER et PILOTAGE sont des fonctionnalités incompatibles +"""), + +95 : _(""" + LIAISON_UNILATER et recherche linéaire peuvent poser des problèmes de convergence +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/mecanonline4.py b/Aster/Cata/cataSTA9/Messages/mecanonline4.py new file mode 100644 index 00000000..f5df9811 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/mecanonline4.py @@ -0,0 +1,85 @@ +#@ MODIF mecanonline4 Messages DATE 12/02/2008 AUTEUR ABBAS M.ABBAS +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { + +3 : _(""" +Il y a trop de colonnes de SUIVI_DDL (limité à quatre) +"""), + +5 : _(""" +Le fichier pour le SUIVI_DDL doit etre défini dans la première occurrence +"""), + +6 : _(""" +Le fichier pour le SUIVI_DDL a été donné sans unité logique +"""), + +21 : _(""" +Le format est trop grand pour la largeur max. d'une colonne (16) +"""), + + +35 : _(""" + On utilise MECA_NON_LINE en enrichissant les résultats (REUSE). + Mais on ne définit pas d'état initial: on prend un état initial nul. +"""), + +37 : _(""" + On ne trouve aucun numéro d'ordre pour le concept EVOl_NOLI de nom <%(k1)s> +"""), + +41 : _(""" + Le champ des déplacements (ou sa dérivée pour la sensibilité) n'a pas été trouvé + dans le concept EVOL_NOLI de nom <%(k1)s> +"""), + +42 : _(""" + Le champ des contraintes (ou sa dérivée pour la sensibilité) n'a pas été trouvé + dans le concept EVOL_NOLI de nom <%(k1)s> +"""), + +43 : _(""" + Le champ des vitesses (ou sa dérivée pour la sensibilité) n'a pas été trouvé + dans le concept EVOL_NOLI de nom <%(k1)s> + On suppose qu'on part d'un champ de vitesses nulles. +"""), + +44 : _(""" + Le champ des accélérations (ou sa dérivée pour la sensibilité) n'a pas été trouvé + dans le concept EVOL_NOLI de nom <%(k1)s> + On calcule un champ d'accélérations initiales, ce qui est possible puisque les vitesses initiales sont nulles +"""), + +45 : _(""" + Le champ des accélérations (ou sa dérivée pour la sensibilité) n'a pas été trouvé + dans le concept EVOL_NOLI de nom <%(k1)s> + On ne peut pas calculer un champ d'accélérations initiales, car les vitesses initiales ne sont pas nulles +"""), + +46 : _(""" + Le champ des variables internes (ou sa dérivée pour la sensibilité) n'a pas été trouvé + dans le concept EVOL_NOLI de nom <%(k1)s> +"""), + + +} diff --git a/Aster/Cata/cataSTA9/Messages/mecanonline5.py b/Aster/Cata/cataSTA9/Messages/mecanonline5.py new file mode 100644 index 00000000..64fb667d --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/mecanonline5.py @@ -0,0 +1,59 @@ +#@ MODIF mecanonline5 Messages DATE 19/05/2008 AUTEUR ABBAS M.ABBAS +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2008 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { + + +21 : _(""" + -> Critère de convergence est lache ! + -> Risque & Conseil : La valeur de RESI_GLOB_RELA est supérieure à 10-4. + Cela peut nuire à la qualité de la solution. Vous ne vérifiez pas l'équilibre de + manière rigoureuse. +"""), + +44 : _(""" +Pour la prédiction de type 'DEPL_CALCULE', il faut obligatoirement: + - ITER_GLOB_MAXI = 0 + - ARRET = 'NON' +"""), + +45 : _(""" +Il faut préciser un concept EVOL_NOLI en prédiction de type 'DEPL_CALCULE' +"""), + +46 : _(""" + -> La définition des paramètres RHO_MIN et RHO_EXCL est contradictoire. + On choisit de prendre RHO_MIN à RHO_EXCL. + -> Risque & Conseil : + RHO_MIN ne doit pas etre compris entre -RHO_EXCL et RHO_EXCL + +"""), + +47 : _(""" + -> La définition des paramètres RHO_MAX et RHO_EXCL est contradictoire. + On choisit de prendre RHO_MAX à -RHO_EXCL. + -> Risque & Conseil : + RHO_MAX ne doit pas etre compris entre -RHO_EXCL et RHO_EXCL + +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/med.py b/Aster/Cata/cataSTA9/Messages/med.py new file mode 100644 index 00000000..a85f4ba5 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/med.py @@ -0,0 +1,489 @@ +#@ MODIF med Messages DATE 03/06/2008 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { + +1 : _(""" + -> Absence de localisation de points de Gauss dans le fichier MED + pour l'élément de référence %(k1)s. + On suppose que l'ordre des points de Gauss est celui d'Aster. + -> Risque & Conseil: + Risque de résultats faux. +"""), + +2 : _(""" + -> Le nombre de points de Gauss est différent entre le fichier med et Aster: + - nombre de points de Gauss contenu dans le fichier MED : %(i2)d + - nombre de points de Gauss défini dans Aster : %(i1)d + + Visiblement les éléments finis décrits dans le fichier MED ne sont pas les + mêmes que dans Code_Aster. + Si vous avez choisi PROL_ZERO='OUI', le champ sera initialisé à zéro sur + ces éléments. + Sinon, le champ ne sera pas initialisé (NaN, not a number). C'est le + comportement par défaut. + + -> Risque & Conseil : + - Choisissez des éléments finis compatibles entre Aster et le code tiers +"""), + +3 : _(""" + -> Les point de Gauss Med/Aster ne correspondent pas géométriquement. + -> Risque & Conseil: + Risque de résultats faux à cause cette incompatibilité. +"""), + +4 : _(""" + + Point De Gauss : %(i1)d MED ASTER +"""), + +5 : _(""" + %(k1)s %(r1)f %(r2)f +"""), + +6 : _(""" + -> Une ou plusieurs permutations ont été effectuées sur l'ordre des points + de Gauss pour que la localisation Med corresponde à celle d'Aster. +"""), + +7 : _(""" + -> Le nom de groupe numéro %(i1)d de la famille %(k1)s + est trop long. Il sera tronqué à 8 caractères. + Le groupe "%(k2)s" est renommé en "%(k3)s". +"""), + +8 : _(""" + -> Famille %(k1)s : + Incohérence sur les nombres de %(k2)s, il y en a %(i1)d alors + que la fonction MED en annonce %(i2)d. + -> Risque & Conseil: + Impossible de lire ce fichier. + On peut utiliser mdump (utilitaire med) pour voir si le problème + vient du fichier MED ou de la lecture dans Code_Aster. +"""), + +9 : _(""" + -> Vous ne pouvez pas renommer le groupe "%(k1)s" en "%(k2)s" + car "%(k2)s" existe déjà dans le fichier MED. +"""), + +10 : _(""" + -> Le nom de groupe numéro %(i1)d de la famille %(k1)s + est contient des caractères interdits. + Le groupe "%(k2)s" est renommé en "%(k3)s". +"""), + +11 : _(""" + -> Le nom de groupe numéro %(i1)d de la famille %(k1)s + est vide. +"""), + +12 : _(""" + -> Erreur lors de l'appel à EFNEMA, code retour = %(k1)s + -> Risque & Conseil : + Vérifier l'intégrité du fichier MED avec medconforme/mdump. + Si le maillage a été produit par un code externe, vérifier que les + noms de maillage, de groupes, de familles ne contiennent pas de + blancs à la fin. + Dans Salomé, on peut renommer ces entités et supprimer les espaces + invalides. +"""), + +13 : _(""" + -> La famille %(k1)s n'a ni groupe, ni attribut. +"""), + +14 : _(""" + -> Lecture de la famille numéro %(i1)4d de nom %(k1)s. +"""), + +15 : _(""" + Groupe numéro %(i1)6d : %(k1)s +"""), + +16 : _(""" + Groupe numéro %(i1)6d : %(k1)s + renommé en : %(k2)s +"""), + +17 : _(""" + -> Aucune famille n'est présente dans ce fichier med. + -> Risque & Conseil : + Vérifier l'intégrité du fichier MED avec medconforme/mdump. +"""), + +18 : _(""" + -> Arret en raison des conflits sur les noms de groupe. +"""), + +19 : _(""" + -> Les mailles %(k1)s ne sont pas nommées dans le fichier med. +"""), + +20 : _(""" + -> Impossible de retrouver l'adresse associée au groupe %(k1)s +"""), + +21 : _(""" + -> Il manque les coordonnées ! +"""), + +22 : _(""" + Le nom de groupe numéro %(i1)d est en double. %(k1)s + - premier nom med : %(k2)s + - second nom med : %(k3)s + - nom aster retenu : %(k4)s +"""), + +23 : _(""" + -> Mailles %(k1)s +"""), + +24 : _(""" + -> Le fichier n'a pas été construit avec la meme version de med. + -> Risque & Conseil : + La lecture du fichier peut échouer ! + +"""), + +25 : _(""" + Version de la bibliothèque med utilisee par Code_Aster: %(i1)d %(i2)d %(i3)d +"""), + +26 : _(""" + Version de la bibliothèque med qui a créé le fichier : < 2.1.5 +"""), + +27 : _(""" + Version de la bibliothèque med pour créer le fichier : %(i1)d %(i2)d %(i3)d +"""), + +28 : _(""" + + Un utilitaire vous permet peut-etre de convertir votre fichier (medimport) +"""), + +29 : _(""" + -> Il manque les mailles ! +"""), + +30 : _(""" + -> Erreur: numéro de groupe = 0 +"""), + +31 : _(""" + -> Ce champ existe déjà dans le fichier MED. + On ne peut pas le créer de nouveau. + + Nom MED du champ : "%(k1)s" + + -> Risque & Conseil : + Si vous essayez d'imprimer les différentes composantes d'un champ, + ne faites qu'un seul IMPR_RESU avec la liste des composantes à + retenir derrière le mot-clé NOM_CMP. + Pour la visualisation dans Salomé (Scalar Map par exemple), + sélectionner la composante dans Scalar Range/Scalar Mode. +"""), + +32 : _(""" + Le champ est inconnu. +"""), + +33 : _(""" + Il manque des composantes. +"""), + +34 : _(""" + Aucune valeur n'est présente à cet instant. +"""), + +35 : _(""" + Aucune valeur n'est présente à ce numéro d'ordre. +"""), + +36 : _(""" + Le nombre de valeurs n'est pas correct. +"""), + +37 : _(""" + -> La lecture est donc impossible. + -> Risque & Conseil : + Veuillez vérifier l'intégrité du fichier MED avec medconforme/mdump. +"""), + +38 : _(""" + -> Incohérence catalogue - fortran (nbtyp fortran différent de nbtyp catalogue) +"""), + +39 : _(""" + -> Incohérence catalogue - fortran (nomtyp fortran différent de nomtyp catalogue) +"""), + +40 : _(""" + -> Ouverture du fichier med en mode %(k1)s %(k2)s +"""), + +41 : _(""" + -> Incohérence de version détectée. +"""), + +42 : _(""" + -> Le type d'entité %(k1)s est inconnu. +"""), + +43 : _(""" + -> Le maillage est introuvable ! +"""), + +44 : _(""" + -> Pas d'écriture pour %(k1)s +"""), + +45 : _(""" + Issu de %(k1)s +"""), + +46 : _(""" + -> Le type de champ est inconnu : %(k1)s +"""), + +47 : _(""" + -> Création des tableaux de valeurs à écrire avec : +"""), + +48 : _(""" + -> Renumérotation impossible avec plus d'un sous-point. +"""), + +49 : _(""" + -> Veritable écriture des tableaux de valeurs +"""), + +50 : _(""" + -> Pas de maillage dans %(k1)s +"""), + +51 : _(""" + -> Maillage %(k1)s inconnu dans %(k2)s +"""), + +52 : _(""" + -> Instant inconnu pour ce champ et ces supports dans le fichier. +"""), + +53 : _(""" + -> La version de la lib med utilisée par Code-Aster est plus récente que + celle qui a produit votre fichier med. + -> Conséquence: On considère les champs aux noeuds par élément + comme des pseudo champs aux points de Gauss. + (On utilise pour la lecture du champ %(k1)s + contenu dans votre fichier med, le type d'entité MED_MAILLE au lieu + de MED_NOEUD_MAILLE). +"""), + +55 : _(""" + -> Lecture impossible pour %(k1)s au format MED +"""), + +57 : _(""" + -> Le champ %(k1)s n'existe pas dans le fichier med. + -> Risque & Conseil : + Vérifier l'intégrité du fichier MED avec medconforme/mdump. +"""), + +60 : _(""" + -> On ne traite pas les maillages distants. +"""), + +62 : _(""" + -> Impossible de déterminer un nom de maillage MED. +"""), + +63 : _(""" + -> Le mot clé "INFO_MAILLAGE" est réservé au format med. +"""), + +65 : _(""" + -> Grandeur inconnue. +"""), + +66 : _(""" + -> Composante inconnue pour la grandeur. +"""), + +67 : _(""" + -> Le maillage %(k2)s est déjà présent dans le fichier med %(k1)s. +"""), + +68 : _(""" + -> Instant voulu : %(r1)f +"""), + +69 : _(""" + -> Numéro d'ordre : %(i1)d numéro de pas de temps : %(i2)d + +"""), + +70 : _(""" + -> Trop de composantes pour la grandeur. +"""), + +71 : _(""" + -> le mot-clé MODELE est obligatoire pour lire un CHAM_ELEM +"""), + +72 : _(""" + -> Nom de composante tronqué à 8 caractères ( %(k1)s >>> %(k2)s ) +"""), + +73 : _(""" + -> Impossible de trouver la composante ASTER associée a %(k1)s +"""), + +74 : _(""" + -> Ecriture des localisations des points de gauss. +"""), + +75 : _(""" + -> Problème dans la lecture du nom du champ et de ses composantes. +"""), + +76 : _(""" + -> Problème dans le diagnostic. +"""), + +79 : _(""" + -> Attention le maillage n'est pas de type non structuré +"""), + +80 : _(""" + -> Le maillage ' %(k1)s ' est inconnu dans le fichier. +"""), + +81 : _(""" + -> Attention, il s'agit d'un maillage structuré +"""), + +82 : _(""" + -> L'objet %(k1)s n'existe pas. + -> Risque & Conseil: + Veuillez renseigner le modèle. +"""), + +83 : _(""" + - valeurs lues dans le fichier : %(i1)d + - valeurs non affectees dans le champ : %(i2)d +"""), + +84 : _(""" + -> Type incorrect %(i1)d +"""), + +85 : _(""" + -> Maillage présent : %(k1)s +"""), + +86 : _(""" + -> champ à lire : %(k1)s typent : %(i1)d typgeo : %(i2)d + instant voulu : %(r1)f + --> numéro d'ordre : %(i3)d + --> numéro de pas de temps : %(i4)d + +"""), + +87 : _(""" + Le numéro d'ordre %(i1)d que vous avez renseigné ne figure pas + dans la liste des numéros d'ordre du résultat med. + Conséquence: le champ correspondant ne figurera pas dans la + SD Résultat %(k1)s +"""), + + +88 : _(""" + -> Fichier med : %(k1)s, nombre de maillages présents : %(i1)d +"""), + +89 : _(""" + -> Ecriture impossible pour %(k1)s au format MED. +"""), + +90 : _(""" + Début de l'écriture MED de %(k1)s +"""), + +91 : _(""" + -> Impossible de déterminer un nom de champ MED. + -> Risque & Conseil: +"""), + +92 : _(""" + -> Le type de champ %(k1)s est inconnu pour med. + -> Risque & Conseil: + Veuillez vérifier la mise en données du mot-clé NOM_CHAM_MED + (LIRE_RESU) ou NOM_MED (LIRE_CHAMP). +"""), + +93 : _(""" + Fin de l'écriture MED de %(k1)s +"""), + +94 : _(""" + -> Le nom du champ med est introuvable. + -> Risque & Conseil: + Veuillez vérifier la mise en données du mot-clé NOM_CHAM_MED. +"""), + +95 : _(""" + -> Le champ med %(k1)s est introuvable. + -> Risque & Conseil: + Veuillez vérifier la mise en données du mot-clé NOM_CHAM_MED + ainsi que le fichier med fourni à l'opérateur. +"""), + +96 : _(""" + -> NOM_MED absent ! + -> Risque & Conseil: + Veuillez renseigner le mot-cle NOM_MED de l'opérateur LIRE_CHAMP. +"""), + +97 : _(""" + -> Fichier med : %(k1)s, Champ : %(k2)s, Instant voulu : %(r1)f + - typent : %(i1)d + - typgeo : %(i2)d + +"""), + +98 : _(""" + -> Fichier med : %(k1)s champ : %(k2)s +"""), + +99 : _(""" + -> Des éléments finis différents s'appuient sur un meme type de maille(%(k1)s). + Le nombre de valeurs à écrire est différent entre ces deux types + d'éléments, on ne peut pas écrire le champ complet au format med. + -> Risque & Conseil: + Veuillez utiliser la restriction géométrique GROUP_MA de l'opérateur + IMPR_RESU pour spécifier les mailles à considérer. +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/meidee0.py b/Aster/Cata/cataSTA9/Messages/meidee0.py new file mode 100644 index 00000000..5265a1cf --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/meidee0.py @@ -0,0 +1,42 @@ +#@ MODIF meidee0 Messages DATE 26/03/2008 AUTEUR BODEL C.BODEL +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +Le modèle mesuré doit etre un concept de type DYNA_HARMO ou MODE_MECA. +"""), +2: _(""" +Le maillage et les déformées ne sont pas compatibles. +"""), +3: _(""" +Calcul de MAC impossible : bases incompatibles. +"""), +4: _(""" +Problème inverse impossible : problème de cohérence entre les données. +"""), +5: _(""" +Problème de NUME_DDL dans MACRO_EXPANS : il est possible de le preciser +a l'appel de la macro. Si vous utilisez MACRO_EXPANS par l'intermediaire d'une IHM, +contactez l'assistance technique. +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/miss0.py b/Aster/Cata/cataSTA9/Messages/miss0.py new file mode 100644 index 00000000..34253ec6 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/miss0.py @@ -0,0 +1,32 @@ +#@ MODIF miss0 Messages DATE 17/07/2007 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +Longueur de LFREQ_LISTE incorrecte. +"""), + +2: _(""" +Longueur de CONTR_LISTE incorrecte. +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/modal0.py b/Aster/Cata/cataSTA9/Messages/modal0.py new file mode 100644 index 00000000..d20b51c9 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/modal0.py @@ -0,0 +1,29 @@ +#@ MODIF modal0 Messages DATE 17/07/2007 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +MATR_ASSE et MATR_ASSE_GENE absents. +"""), + + +} diff --git a/Aster/Cata/cataSTA9/Messages/modelisa.py b/Aster/Cata/cataSTA9/Messages/modelisa.py index f73644dd..1233c25d 100644 --- a/Aster/Cata/cataSTA9/Messages/modelisa.py +++ b/Aster/Cata/cataSTA9/Messages/modelisa.py @@ -1,8 +1,8 @@ -#@ MODIF modelisa Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF modelisa Messages DATE 18/03/2008 AUTEUR CNGUYEN C.NGUYEN # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,404 +20,507 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - l option de calcul d une abscisse curviligne sur un groupe de mailles n est pas implantee +1 : _(""" + l'option de calcul d'une abscisse curviligne sur un groupe de mailles + n'est pas implantée """), -2: _(""" - il est possible de definir une abscisse curviligne uniquement pour des mailles de type: poi1 ou seg2 +2 : _(""" + il est possible de définir une abscisse curviligne uniquement + pour des mailles de type: POI1 ou SEG2 """), -3: _(""" - point non trouve parmi les seg2 +3 : _(""" + point non trouvé parmi les SEG2 """), -4: _(""" - mauvaise definition pour l abs_curv. detection de plusieurs chemins. +4 : _(""" + mauvaise définition pour l'abscisse curviligne + détection de plusieurs chemins. """), -5: _(""" - le groupe de maille que vous donnez ne correspond pas au modele de structure que vous etudiez +5 : _(""" + le groupe de maille que vous donnez ne correspond pas + au modèle de structure que vous étudiez """), -6: _(""" - methode au-yang : la geometrie doit etre cylindrique +6 : _(""" + methode AU-YANG : la géometrie doit etre cylindrique """), -7: _(""" - barre : une erreur a ete detectee lors de l affectation des valeurs dans le tampon +7 : _(""" + BARRE : une erreur a été détectée lors de l'affectation des valeurs dans le tampon """), -8: _(""" - on interdit d'avoir sur un maillage 2d des elements discrets 2d et 3d . +8 : _(""" + on interdit d'avoir sur un maillage 2D des éléments discrets 2D et 3D """), -9: _(""" - on interdit d'avoir sur un maillage 3d des elements discrets 2d . +9 : _(""" + on interdit d'avoir sur un maillage 3D des éléments discrets 2D """), -10: _(""" - axe_z nul +10 : _(""" + la norme de l'axe définie sous le mot clé facteur GRILLE/AXE est nul. """), -11: _(""" +11 : _(""" noeud confondu avec l'origine """), -12: _(""" - orientation : une erreur a ete detectee lors de l affectation des orientations +12 : _(""" + orientation : une erreur a ete détectée lors de l'affectation des orientations """), -13: _(""" - erreur(s) dans les donnees. +13 : _(""" + erreur(s) dans les données. """), -14: _(""" - poutre : une erreur a ete detectee lors de l affectation des valeurs dans le tampon +14 : _(""" + POUTRE : une erreur a été détectée lors de l'affectation des valeurs dans le tampon """), -15: _(""" +15 : _(""" poutre : une erreur a ete detectee lors des verifications des valeurs entrees """), -16: _(""" - si 2 caracteristiques 1 amor et 1 rigi obligatoires +16 : _(""" + vous fournissez deux caractéristiques élémentaires. Il est obligatoire de fournir une caractéristique + relative à l'amortissement et une caractéristique relative à la rigidité """), -17: _(""" - caracteristique %(k1)s non admise actuellement +17 : _(""" + caractéristique %(k1)s non admise actuellement """), -18: _(""" - le noeud %(k1)s non modelise par un discret +18 : _(""" + le noeud %(k1)s non modelisé par un discret """), -19: _(""" - pas de noeuds du radier modelises par des discrets +19 : _(""" + pas de noeuds du Radier modélisés par des discrets """), -20: _(""" - le discret %(k1)s n a pas le bon nombre de noeuds. +20 : _(""" + le discret %(k1)s n'a pas le bon nombre de noeuds. """), -21: _(""" - le noeud %(k1)s extremite d un des discrets n existe pas dans la surface donnee par group_ma. +21 : _(""" + le noeud %(k1)s éxtremité d'un des discrets n'existe pas dans la surface donnée par GROUP_MA. """), -22: _(""" - nbext1.ne.nbext2 -"""), -23: _(""" - nbext1.ne.nbpart -"""), -24: _(""" - gene_tuyau preciser un seul noeud par tuyau + + + + + + +24 : _(""" + GENE_TUYAU : préciser un seul noeud par tuyau """), -25: _(""" - orientation : gene_tuyau le noeud doit etre une des extremites +25 : _(""" + ORIENTATION : GENE_TUYAU + le noeud doit etre une des extremités """), -26: _(""" - pb nmmt +26 : _(""" + Il y a un probleme lors de l'affectation du mot clé MODI_METRIQUE sur la maille %(k1)s """), -27: _(""" - on ne peut pas melanger des tuyaux a 3 et 4 noeuds pour le moment +27 : _(""" + on ne peut pas mélanger des tuyaux à 3 et 4 noeuds pour le moment """), -28: _(""" - orientation : gene_tuyau un seul noeud doit etre efecte +28 : _(""" + ORIENTATION : GENE_TUYAU + un seul noeud doit etre affecté """), -29: _(""" - vous ne pouvez affecter des valeurs de type "poutre" au modele %(k1)s qui ne contient pas un seul element poutre ! +29 : _(""" + vous ne pouvez affecter des valeurs de type "POUTRE" au modèle %(k1)s + qui ne contient pas un seul élément poutre """), -30: _(""" - vous ne pouvez affecter des valeurs de type "coque" au modele %(k1)s qui ne contient pas un seul element coque ! +30 : _(""" + vous ne pouvez affecter des valeurs de type "COQUE" au modèle %(k1)s + qui ne contient pas un seul élément coque """), -31: _(""" - vous ne pouvez affectee des valeurs de type "discret" au modele %(k1)s qui ne contient pas un seul element discret ! +31 : _(""" + vous ne pouvez affecter des valeurs de type "DISCRET" au modèle %(k1)s + qui ne contient pas un seul élément discret """), -32: _(""" - vous ne pouvez affecter des valeurs de type "orientation" au modele %(k1)s qui ne contient ni element poutre ni element discret ni element barre ! +32 : _(""" + vous ne pouvez affecter des valeurs de type "ORIENTATION" au modèle %(k1)s + qui ne contient ni element poutre ni élément DISCRET ni élément BARRE """), -33: _(""" - vous ne pouvez affecter des valeurs de type "cable" au modele %(k1)s qui ne contient pas un seul element cable ! +33 : _(""" + vous ne pouvez affecter des valeurs de type "CABLE" au modèle %(k1)s + qui ne contient pas un seul élément CABLE """), -34: _(""" - vous ne pouvez affecter des valeurs de type "barre" au modele %(k1)s qui ne contient pas un seul element barre ! +34 : _(""" + vous ne pouvez affecter des valeurs de type "BARRE" au modèle %(k1)s + qui ne contient pas un seul élément BARRE """), -35: _(""" - vous ne pouvez affecter des valeurs de type "massif" au modele %(k1)s qui ne contient pas un seul element thermique ou mecanique ! +35 : _(""" + vous ne pouvez affecter des valeurs de type "MASSIF" au modèle %(k1)s + qui ne contient pas un seul élément thermique ou mécanique """), -36: _(""" - vous ne pouvez affecter des valeurs de type "grille" au modele %(k1)s qui ne contient pas un seul element grille +36 : _(""" + vous ne pouvez affecter des valeurs de type "GRILLE" au modèle %(k1)s + qui ne contient pas un seul élément GRILLE """), -37: _(""" - impossible d"affecter des caracteristiques a des noeuds de ce modele car aucun noeud ne supporte un element +37 : _(""" + impossible d'affecter des caractéristiques à des noeuds de ce modèle + car aucun noeud ne supporte un élément """), -38: _(""" - la maille %(k1)s n'a pas ete affectee par des caracteristiques de poutre. +38 : _(""" + la maille %(k1)s n'a pas été affectée par des caractéristiques de poutre. """), -39: _(""" - la maille %(k1)s n'a pas ete affectee par une matrice (discret). +39 : _(""" + la maille %(k1)s n'a pas ete afféctée par une matrice (DISCRET). """), -40: _(""" - la maille %(k1)s n'a pas ete affectee par des caracteristiques de cable. +40 : _(""" + la maille %(k1)s n'a pas ete affectée par des caractéristiques de cable. """), -41: _(""" - la maille %(k1)s n'a pas ete affectee par des caracteristiques de barre. +41 : _(""" + la maille %(k1)s n'a pas ete affectée par des caractéristiques de barre. """), -42: _(""" - la maille %(k1)s n'a pas ete affectee par des caracteristiques de grille. +42 : _(""" + la maille %(k1)s n'a pas ete affectée par des caractéristiques de grille. """), -43: _(""" - le noeud %(k1)s n'a pas ete affecte par une matrice. +43 : _(""" + le noeud %(k1)s n'a pas ete affecté par une matrice. """), -44: _(""" - barre : occurence %(k1)s : "cara" : %(k2)s arguments maxi pour une section " %(k3)s " +44 : _(""" + BARRE : + occurence : %(k1)s + "CARA" : %(k2)s + arguments maximums pour une section " %(k3)s " """), -45: _(""" - barre : occurence %(k1)s : "cara" : 4 arguments maxi pour une section " %(k2)s " +45 : _(""" + BARRE : + occurence %(k1)s + "cara" : 4 + arguments maximums pour une section " %(k2)s " """), -46: _(""" - barre : occurence %(k1)s : section " %(k2)s argument "h" incompatible avec "hy" ou "hz" +46 : _(""" + BARRE : + occurence %(k1)s + section " %(k2)s + argument "h" incompatible avec "hy" ou "hz" """), -47: _(""" - barre : occurence %(k1)s : section " %(k2)s argument "hy" ou "hz" incompatible avec "h" +47 : _(""" + barre : + occurence %(k1)s + section " %(k2)s + argument "hy" ou "hz" incompatible avec "h" """), -48: _(""" - barre : occurence %(k1)s : section " %(k2)s argument "ep" incompatible avec "epy" ou "epz" +48 : _(""" + barre : + occurence %(k1)s + section " %(k2)s argument "ep" incompatible avec "epy" ou "epz" """), -49: _(""" - barre : occurence %(k1)s : section " %(k2)s argument "epy" ou "epz" incompatible avec "ep" +49 : _(""" + barre : + occurence %(k1)s + section " %(k2)s + argument "epy" ou "epz" incompatible avec "ep" """), -50: _(""" - barre : occurence %(k1)s : "cara" : nombre de valeurs entrees incorrect : il en faut %(k2)s +50 : _(""" + barre : + occurence %(k1)s + "cara" : nombre de valeurs entrees incorrect + il en faut %(k2)s """), -51: _(""" - barre : occurence %(k1)s : section " %(k2)s : valeur %(k3)s de "vale" non admise (valeur test interne) +51 : _(""" + barre : + occurence %(k1)s + section " %(k2)s + valeur %(k3)s de "vale" non admise (valeur test interne) """), -52: _(""" - cable : occurence 1 : le mot cle "section" est obligatoire. +52 : _(""" + cable : + occurence 1 + le mot cle "section" est obligatoire. """), -53: _(""" - coque : occurence 1 : le mot cle "epais" est obligatoire. +53 : _(""" + coque : + occurence 1 + le mot cle "epais" est obligatoire. """), -54: _(""" +54 : _(""" coque : avec un excentrement, la prise en compte des termes d'inertie de rotation est obligatoire. """), -55: _(""" +55 : _(""" absence d elements discrets dans le modele """), -56: _(""" +56 : _(""" impossibilite, la maille %(k1)s doit etre une maille de type %(k2)s , et elle est de type : %(k3)s pour la caracteristique %(k4)s """), -57: _(""" - orientation : occurence 1 : le mot cle "vale" est obligatoire +57 : _(""" + orientation : + occurence 1 + le mot cle "vale" est obligatoire """), -58: _(""" - orientation : occurence 1 : le mot cle "cara" est obligatoire +58 : _(""" + orientation : + occurence 1 + le mot cle "cara" est obligatoire """), -59: _(""" - orientation : occurence %(k1)s : presence de "vale" obligatoire si "cara" est present +59 : _(""" + orientation : + occurence %(k1)s + presence de "vale" obligatoire si "cara" est present """), -60: _(""" - orientation : occurence %(k1)s : val : %(k2)s : nombre de valeurs entrees incorrect +60 : _(""" + orientation : + occurence %(k1)s + val : %(k2)s + nombre de valeurs entrees incorrect """), -61: _(""" - defi_arc: le rayon de courbure doit etre positif. +61 : _(""" + defi_arc: + le rayon de courbure doit etre positif. """), -62: _(""" - defi_arc: il faut 3 reels pour definir le centre de courbure. +62 : _(""" + defi_arc: + il faut 3 reels pour definir le centre de courbure. """), -63: _(""" - defi_arc: il faut 3 reels pour definir le point de concours des tangentes. +63 : _(""" + defi_arc: + il faut 3 reels pour definir le point de concours des tangentes. """), -64: _(""" - defi_arc: le coefficient de flexibilite doit etre positif. +64 : _(""" + defi_arc: + le coefficient de flexibilite doit etre positif. """), -65: _(""" +65 : _(""" defi_arc: l'indice de contrainte doit etre positif. """), -66: _(""" - poutre : occurence %(k1)s : section "cercle", vari_sect "constant" la caracteristique "r" est obligatoire +66 : _(""" + poutre : + occurence %(k1)s + section "cercle", vari_sect "constant" la caracteristique "r" est obligatoire """), -67: _(""" +67 : _(""" erreur de programmation """), -68: _(""" - mauvais calcul de nbgrel -"""), - -69: _(""" +69 : _(""" occurence %(k1)s de "barre" (maille %(k2)s ) ecrasement d un type de geometrie de section par un autre """), -70: _(""" - barre : maille %(k1)s : section generale : il manque la caracteristique %(k2)s +70 : _(""" + barre : + maille %(k1)s + section generale + il manque la caracteristique %(k2)s """), -71: _(""" - barre : maille %(k1)s : section generale : la valeur de %(k2)s doit etre strictement positive. +71 : _(""" + barre : + maille %(k1)s + section generale + la valeur de %(k2)s doit etre strictement positive. """), -72: _(""" - barre : maille %(k1)s : section rectangle : il manque la caracteristique %(k2)s +72 : _(""" + barre : + maille %(k1)s + section rectangle + il manque la caracteristique %(k2)s """), -73: _(""" - barre : maille %(k1)s : section rectangle : la valeur de %(k2)s doit etre strictement positive. +73 : _(""" + barre : + maille %(k1)s + section rectangle + la valeur de %(k2)s doit etre strictement positive. """), -74: _(""" - barre : maille %(k1)s : section cercle : il manque la caracteristique %(k2)s +74 : _(""" + barre : + maille %(k1)s + section cercle + il manque la caracteristique %(k2)s """), -75: _(""" - barre : maille %(k1)s : section cercle : la valeur de %(k2)s doit etre strictement positive. +75 : _(""" + barre : + maille %(k1)s + section cercle + la valeur de %(k2)s doit etre strictement positive. """), -76: _(""" - barre : maille %(k1)s : section cercle : la valeur de %(k2)s doit etre positive. +76 : _(""" + barre : + maille %(k1)s + section cercle + la valeur de %(k2)s doit etre positive. """), -77: _(""" - poutre : maille %(k1)s : section generale : il manque la caracteristique %(k2)s +77 : _(""" + poutre : + maille %(k1)s + section generale + il manque la caracteristique %(k2)s """), -78: _(""" - poutre : maille %(k1)s : section generale : element poutre de timoshenko : il manque la caracteristique %(k2)s +78 : _(""" + poutre : + maille %(k1)s + section generale + element poutre de timoshenko : il manque la caracteristique %(k2)s """), -79: _(""" - poutre : maille %(k1)s : section rectangle : il manque la caracteristique %(k2)s +79 : _(""" + poutre : + maille %(k1)s + section rectangle + il manque la caracteristique %(k2)s """), -80: _(""" - poutre : maille %(k1)s : section cercle : il manque la caracteristique %(k2)s +80 : _(""" + poutre : + maille %(k1)s + section cercle + il manque la caracteristique %(k2)s """), -81: _(""" - poutre : maille %(k1)s : section generale : la valeur de %(k2)s doit etre strictement positive +81 : _(""" + poutre : + maille %(k1)s + section générale + la valeur de %(k2)s doit etre strictement positive """), -82: _(""" - poutre : maille %(k1)s : section rectangle : la valeur de %(k2)s doit etre strictement positive +82 : _(""" + poutre : + maille %(k1)s + section rectangle + la valeur de %(k2)s doit etre strictement positive """), -83: _(""" - poutre : maille %(k1)s : section cercle : la valeur de %(k2)s doit etre strictement positive +83 : _(""" + poutre : + maille %(k1)s + section cercle + la valeur de %(k2)s doit etre strictement positive """), -84: _(""" - poutre : maille %(k1)s : section rectangle : la valeur de %(k2)s ne doit pas depasser %(k3)s /2 !!! m enfin quoi ! +84 : _(""" + poutre : + maille %(k1)s + section rectangle + la valeur de %(k2)s ne doit pas dépasser %(k3)s /2 """), -85: _(""" - poutre : maille %(k1)s : section cercle : la valeur de %(k2)s ne doit pas depasser celle de %(k3)s !!! aarg !! +85 : _(""" + poutre : + maille %(k1)s + section cercle + la valeur de %(k2)s ne doit pas dépasser celle de %(k3)s """), -86: _(""" - section circulaire/rectangulaire non supportee par poutre/tuyau/faisceau +86 : _(""" + section CIRCULAIRE/RECTANGULAIRE non supportée par POUTRE/TUYAU/FAISCEAU """), -87: _(""" - orientation : pas d affectation d orientation du type %(k1)s sur la maille %(k2)s qui n est pas un seg2 +87 : _(""" + orientation : + pas d'affectation d'orientation du type %(k1)s sur la maille %(k2)s + qui n est pas un SEG2 """), -88: _(""" - orientation : pas d affectation d orientation du type %(k1)s sur la maille %(k2)s de longueur nulle +88 : _(""" + orientation : + pas d'affectation d'orientation du type %(k1)s sur la maille %(k2)s + de longueur nulle """), -89: _(""" - orientation : pas d affectation d orientation du type %(k1)s sur le noeud %(k2)s +89 : _(""" + orientation : + pas d affectation d orientation du type %(k1)s sur le noeud %(k2)s """), -90: _(""" - orientation : pas d affectation d orientation du type %(k1)s sur la maille %(k2)s de longueur non nulle +90 : _(""" + orientation : + pas d'affectation d'orientation du type %(k1)s sur la maille %(k2)s + de longueur non nulle """), -91: _(""" - orientation : pas d affectation d orientation du type %(k1)s sur la maille %(k2)s qui n est pas seg2 +91 : _(""" + orientation : + pas d affectation d orientation du type %(k1)s sur la maille %(k2)s + qui n est pas SEG2 """), -92: _(""" - occurence %(k1)s de "poutre" (maille %(k2)s ) ecrasement d un type de variation de section par un autre +92 : _(""" + occurence %(k1)s de "poutre" (maille %(k2)s ) + écrasement d'un type de variation de section par un autre """), -93: _(""" - occurence %(k1)s de "poutre" (maille %(k2)s ) ecrasement d un type de geometrie de section par un autre +93 : _(""" + occurence %(k1)s de "poutre" (maille %(k2)s ) + écrasement d'un type de géometrie de section par un autre """), -94: _(""" - le descripteur_grandeur des deplacements ne tient pas sur dix entiers codes +94 : _(""" + le DESCRIPTEUR_GRANDEUR des déplacements ne tient pas sur dix entiers codés """), -95: _(""" +95 : _(""" la carte : %(k1)s n'existe pas """), - - - - - - - -97: _(""" - tous les coef. sont nuls +97 : _(""" + tous les coefficients sont nuls """), -98: _(""" - type de coef. inconnu: %(k1)s +98 : _(""" + type de coefficient inconnu: %(k1)s """), -99: _(""" - les coef. de l equation sont tres petits ou tres grands et on ne peut la normaliser. -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/modelisa2.py b/Aster/Cata/cataSTA9/Messages/modelisa2.py index 7fb84d22..8b6798d1 100644 --- a/Aster/Cata/cataSTA9/Messages/modelisa2.py +++ b/Aster/Cata/cataSTA9/Messages/modelisa2.py @@ -1,27 +1,32 @@ -#@ MODIF modelisa2 Messages DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF modelisa2 Messages DATE 01/04/2008 AUTEUR ABBAS M.ABBAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x cata_msg={ +1: _(""" + Formule interdite pour définir ALPHA(TEMP) : la fonction soit etre tabulée. + Utilisez CALC_FONC_INTERP +"""), + 2: _(""" resserrer le mot cle precision pour le materiau elas_fo """), @@ -34,15 +39,20 @@ cata_msg={ calcul de la tension le long du cable no %(k1)s : la longueur sur laquelle on doit prendre en compte les pertes de tension par recul de l ancrage est egale a la longueur du cable """), +5: _(""" + Formule interdite pour le calcul d'intégrale : la fonction soit etre tabulée. + Utilisez CALC_FONC_INTERP pour tabuler la formule %(k1)s +"""), 9: _(""" - %(k1)s n'existe pas + Erreur utilisateur : + l'objet %(k1)s n'existe pas. On ne peut pas continuer. + Risques & conseils : + Dans ce contexte, les seuls solveurs autorisés sont MULT_FRONT et LDLT """), - - 13: _(""" - probleme pour recuperer une grandeur dans la table "cara_geom" + problème pour recuperer une grandeur dans la table "cara_geom" """), 14: _(""" @@ -50,15 +60,15 @@ cata_msg={ """), 15: _(""" - groupe de maille group_ma_1= %(k1)s inexistant dans le maillage %(k2)s + groupe de maille group_ma_1= %(k1)s inexistant dans le maillage %(k2)s """), 16: _(""" - groupe de maille group_ma_2= %(k1)s inexistant dans le maillage %(k2)s + groupe de maille group_ma_2= %(k1)s inexistant dans le maillage %(k2)s """), 17: _(""" - les groupes de mailles group_ma_1= %(k1)s et group_ma_2= %(k2)s ont des cardinaux differents + les groupes de mailles group_ma_1= %(k1)s et group_ma_2= %(k2)s ont des cardinaux différents """), 18: _(""" @@ -129,39 +139,37 @@ cata_msg={ 37: _(""" - valeur inattendue: %(k1)s + valeur inattendue: %(k1)s """), 38: _(""" les courbures ky et kz ne sont pas prises en compte pour les poutres courbes """), -39: _(""" - pb pour recuperer "epais" pour la maille %(k1)s -"""), +42: _(""" +Erreur Utilisateur : + Le paramètre ALPHA (dilatation) du matériau est une fonction de la température. + Cette fonction (%(k1)s) n'est définie que par 1 point. + TEMP_DEF_ALPHA et TEMP_REF ne sont pas identiques. + On ne peut pas faire le changement de variable TEMP_DEF_ALPHA -> TEMP_REF. + On s'arrete donc. -40: _(""" - excentricite non traitee +Risque & Conseil: + Il faut définir la fonction ALPHA avec plus d'1 point. """), -41: _(""" - pb pour recuperer "excent" pour la maille %(k1)s -"""), -42: _(""" - melange mailles quadratiques avec quad8: liaison supprimee sur noeud milieu quad8 -"""), 43: _(""" deux mailles poi1 interdit """), 44: _(""" - le mot clef evol_ther est incompatible avec: %(k1)s + le mot clef evol_ther est incompatible avec: %(k1)s """), 45: _(""" - aucun noeud ne connait le ddl: %(k1)s + aucun noeud ne connait le ddl: %(k1)s """), 46: _(""" @@ -169,7 +177,7 @@ cata_msg={ """), 47: _(""" - fonree non traite %(k1)s + fonree non traite %(k1)s """), 48: _(""" @@ -177,11 +185,11 @@ cata_msg={ """), 49: _(""" - les caracteristiques materielles n ont pas ete affectees a la maille no %(k1)s appartenant au cable no %(k2)s + les caracteristiques materielles n ont pas ete affectees a la maille no %(k1)s appartenant au cable no %(k2)s """), 50: _(""" - des materiaux differents ont ete affectes aux mailles appartenant au cable no %(k1)s + des materiaux differents ont ete affectes aux mailles appartenant au cable no %(k1)s """), 51: _(""" @@ -209,28 +217,28 @@ cata_msg={ """), 57: _(""" - les caracteristiques geometriques n ont pas ete affectees a la maille no %(k1)s appartenant au cable no %(k2)s + les caracteristiques geometriques n ont pas ete affectees a la maille no %(k1)s appartenant au cable no %(k2)s """), 58: _(""" - l aire de la section droite n a pas ete affectee a la maille no %(k1)s appartenant au cable no %(k2)s + l aire de la section droite n a pas ete affectee a la maille no %(k1)s appartenant au cable no %(k2)s """), 59: _(""" - valeur invalide pour l aire de la section droite affectee a la maille no %(k1)s appartenant au cable no %(k2)s + valeur invalide pour l aire de la section droite affectee a la maille no %(k1)s appartenant au cable no %(k2)s """), 60: _(""" - des aires de section droite differentes ont ete affectees aux mailles appartenant au cable no %(k1)s + des aires de section droite differentes ont ete affectees aux mailles appartenant au cable no %(k1)s """), 61: _(""" Le mot-clef facteur < %(k1)s > est inconnu. Contactez les développeurs. -Note DVP: erreur de cohérence fortran/catalogue. +Note DVP: erreur de cohérence fortran/catalogue. """), 62: _(""" - numero d"occurence negatif + numero d"occurence negatif """), 63: _(""" @@ -298,15 +306,15 @@ Note DVP: erreur de coh """), 79: _(""" - probleme pour recuperer le "cdg_x" dans %(k1)s + probleme pour recuperer le "cdg_x" dans %(k1)s """), 80: _(""" - probleme pour recuperer le "cdg_y" dans %(k1)s + probleme pour recuperer le "cdg_y" dans %(k1)s """), 81: _(""" - probleme pour recuperer le "cdg_z" dans %(k1)s + probleme pour recuperer le "cdg_z" dans %(k1)s """), 82: _(""" @@ -318,7 +326,7 @@ Note DVP: erreur de coh """), 84: _(""" - il faut que le cham_no dont les termes servent de seconds membres a la relation lineaire a ecrire ait ete defini. + il faut que le cham_no dont les termes servent de seconds membres a la relation lineaire a ecrire ait ete defini. """), 85: _(""" @@ -363,11 +371,11 @@ Les mots-cles admissibles pour definir la seconde liste de noeuds sous le mot-fa """), 95: _(""" - le groupe %(k1)s ne fait pas partie du maillage : %(k2)s + le groupe %(k1)s ne fait pas partie du maillage : %(k2)s """), 96: _(""" - %(k1)s %(k2)s ne fait pas partie du maillage : %(k3)s + %(k1)s %(k2)s ne fait pas partie du maillage : %(k3)s """), 98: _(""" @@ -375,6 +383,6 @@ Les mots-cles admissibles pour definir la seconde liste de noeuds sous le mot-fa """), 99: _(""" - il faut que le cham_no dont les termes servent de coefficients a la relation lineaire a ecrire ait ete defini. + il faut que le cham_no dont les termes servent de coefficients a la relation lineaire a ecrire ait ete defini. """), } diff --git a/Aster/Cata/cataSTA9/Messages/modelisa3.py b/Aster/Cata/cataSTA9/Messages/modelisa3.py index 8ca44332..9295490d 100644 --- a/Aster/Cata/cataSTA9/Messages/modelisa3.py +++ b/Aster/Cata/cataSTA9/Messages/modelisa3.py @@ -1,4 +1,4 @@ -#@ MODIF modelisa3 Messages DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF modelisa3 Messages DATE 01/04/2008 AUTEUR ABBAS M.ABBAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -70,7 +70,12 @@ cata_msg={ """), 12: _(""" - les listes de noeuds a mettre de vis-a-vis n'ont pas le meme nombre de noeuds + Mot clé LIAISON_GROUP : les mots clés %(k1)s et %(k2)s à mettre + en vis-à-vis n'ont pas le meme nombre de noeuds. + + - Nombre de noeuds présent sous le mot clé %(k1)s: %(i1)d + - Nombre de noeuds présent sous le mot clé %(k2)s: %(i2)d + """), 13: _(""" @@ -155,17 +160,6 @@ Suggestion : l'angle forme par le vecteur normal courant a 1 face et le vecteur normal moyenne, au noeud %(k1)s , est superieur a 10 degres et vaut %(k2)s degres. """), -32: _(""" - que des sections circulaires ! -"""), - -33: _(""" - pb pour recuperer "r1" pour la maille %(k1)s -"""), - -34: _(""" - pb pour recuperer "r2" pour la maille %(k1)s -"""), 35: _(""" probleme pour determiner le rang de la composante de la grandeur diff --git a/Aster/Cata/cataSTA9/Messages/modelisa4.py b/Aster/Cata/cataSTA9/Messages/modelisa4.py index 338a6043..3a840edb 100644 --- a/Aster/Cata/cataSTA9/Messages/modelisa4.py +++ b/Aster/Cata/cataSTA9/Messages/modelisa4.py @@ -1,8 +1,8 @@ -#@ MODIF modelisa4 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF modelisa4 Messages DATE 06/05/2008 AUTEUR KHAM M.KHAM # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,21 +20,23 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" +1 : _(""" arret sur erreurs """), -2: _(""" - type inconnu verifier le call a charci -"""), -3: _(""" - ddl inconnu -"""), -4: _(""" + + + + + + + + +4 : _(""" -> Le modèle contient un mélange de modélisations planes et volumiques ou bien il contient des sous-structures statiques. @@ -43,20 +45,20 @@ cata_msg={ Parfois, cela empeche de faire le "bon choix". """), -5: _(""" +5 : _(""" mot-cle %(k1)s interdit en 2d """), -6: _(""" +6 : _(""" -> Phase de vérification du maillage : présence de noeuds orphelins. Les noeuds orphelins sont des noeuds qui n'appartiennent à aucune maille. """), -7: _(""" +7 : _(""" certains noeuds connectent plus de 200 mailles. ces mailles ne sont pas verifiees. """), -8: _(""" +8 : _(""" -> Phase de vérification du maillage : présence de mailles doubles (ou triples, ...) Les mailles multiples sont des mailles de noms différents qui ont la meme connectivité (elles s'appuient sur les memes noeuds). @@ -68,7 +70,7 @@ cata_msg={ Sur ce maillage, il est imprudent d'affecter des quantités avec le mot clé TOUT='OUI'. """), -9: _(""" +9 : _(""" -> Phase de vérification du maillage : présence de mailles aplaties. -> Risque & Conseil : @@ -76,7 +78,7 @@ cata_msg={ problèmes de convergence et nuire à la qualité des résultats. """), -10: _(""" +10 : _(""" - chckma phase de verification du maillage - mailles degenerees """), @@ -85,127 +87,124 @@ cata_msg={ -12: _(""" - type de chgt de repere non prevu. -"""), - -13: _(""" +13 : _(""" seule la grandeur neut_f est traitee actuellement. """), -14: _(""" +14 : _(""" les champs de cham_f et cham_para n'ont pas la meme discretisation noeu/cart/elga/elno/elem. """), -15: _(""" - eval. carte: pas encore -"""), -16: _(""" + + + + +16 : _(""" avec "noeud_cmp", il faut donner un nom et une composante. """), -17: _(""" +17 : _(""" pour recuperer le champ de geometrie, il faut utiliser le mot cle maillage """), -18: _(""" +18 : _(""" le mot-cle type_champ = %(k1)s n'est pas coherent avec le type du champ extrait : %(k2)s _ %(k3)s """), -19: _(""" +19 : _(""" on ne peut extraire qu'1 numero d'ordre. vous en avez specifie plusieurs. """), -20: _(""" +20 : _(""" on est dans le cas d'un contact point-point et le vecteur vect_norm_escl n'a pas ete renseigne """), -21: _(""" +21 : _(""" impossibilite, la maille %(k1)s doit etre une maille de peau de type "quad" ou "tria" car on est en 3d et elle est de type : %(k2)s """), -22: _(""" +22 : _(""" impossibilite, soit la maille %(k1)s doit etre une maille de peau de type "seg" car on est en 2d et elle est de type : %(k2)s , soit il faut renseigner "vect_pou_z" en 3d """), -23: _(""" +23 : _(""" impossibilite, la maille %(k1)s doit etre une maille de peau de type "seg" car on est en 2d et elle est de type : %(k2)s """), -24: _(""" +24 : _(""" arret sur erreur(s), normale non sortante """), -25: _(""" +25 : _(""" la liste : %(k1)s a concatener avec la liste %(k2)s doit exister """), -26: _(""" +26 : _(""" on ne peut pas affecter la liste de longueur nulle %(k1)s a la liste %(k2)s qui n'existe pas """), -27: _(""" +27 : _(""" la concatenation de listes de type %(k1)s n'est pas encore prevue. """), -28: _(""" +28 : _(""" le numero de correlation et/ou le type de reseau passes dans le fichier de commande ne sont pas coherents avec le fichier .70 """), -29: _(""" +29 : _(""" le numero de correlation et/ou le type de reseau passes dans le fichier de commande ne sont pas coherents avec le fichier .70 """), -30: _(""" +30 : _(""" ce type de reseau n est pas encore implante dans le code """), -31: _(""" +31 : _(""" le numero de correlation et/ou le type de reseau passes dans le fichier de commande ne sont pas coherents avec le fichier .71 """), -32: _(""" +32 : _(""" ce type de reseau n est pas encore implante dans le code """), -33: _(""" +33 : _(""" le numero de correlation et/ou le type de reseau passes dans le fichier de commande ne sont pas coherents avec le fichier .71 """), -34: _(""" +34 : _(""" les ligrels a concatener ne referencent pas le meme maillage. """), -35: _(""" +35 : _(""" jacobien negatif """), -36: _(""" - scal nul +36 : _(""" + La normale de la maille %(k1)s est nulle """), -37: _(""" +37 : _(""" on essaie de creer ou d'agrandir le ligrel de charge avec un nombre de termes negatif ou nul """), -38: _(""" - depassement tableau (dvlp) -"""), -39: _(""" + + + +39 : _(""" probleme rencontre lors de l interpolation d une des deformees modales """), -40: _(""" +40 : _(""" probleme rencontre lors de l interpolation d une des fonctions """), -41: _(""" +41 : _(""" probleme dans le cas 3d ou les noeuds sont alignes, la distance separant 2 noeuds non-identiques de la liste est trop petite """), -42: _(""" +42 : _(""" -> Mélange de mailles quadratiques avec des QUAD8. Aster supprime la liaison sur le noeud milieu des QUAD8 -> Risque & Conseil : @@ -214,231 +213,223 @@ cata_msg={ d'utiliser des éléments linéaires. """), -43: _(""" +43 : _(""" incoherence car aucun noeud n'a de ddl drz et la routine traite le cas 2d ou il y a au-moins un ddl drz """), -44: _(""" +44 : _(""" incoherence car aucun noeud n'a de ddl derotation drx et dry et drz et la routine traite le cas 3d ou il y a au-moins un noeud ayant ces 3 ddls """), -45: _(""" - erreur sur nmaco -"""), -46: _(""" - erreur sur nnoco -"""), -47: _(""" - erreur sur nnoqua -"""), -48: _(""" + + + + + +48 : _(""" aucun noeud n est affecte par liaison_unilaterale """), -49: _(""" - depassement capacite (dvlp) -"""), -50: _(""" + + + + + +50 : _(""" la maille : %(k1)s n'est pas affectee par un element fini. """), -51: _(""" - incoherence .flii pour ligrel %(k1)s -"""), -52: _(""" - mot cle inconnu (ni maille, ni group_ma -"""), -53: _(""" + + + +53 : _(""" le noeud d application de l excitation n est pas un noeud du maillage. """), -54: _(""" +54 : _(""" le noeud d application de l excitation ne doit pas etre situe au bord du domaine de definition du maillage. """), -55: _(""" +55 : _(""" la fenetre excitee deborde du domaine de definition du maillage. """), -56: _(""" +56 : _(""" la demi-fenetre excitee en amont du noeud central d application n est pas definie. """), -57: _(""" +57 : _(""" la demi-fenetre excitee en amont du noeud central d application deborde du domaine de definition du maillage. """), -58: _(""" +58 : _(""" les demi-fenetres excitees en aval et en amont du noeud central d application ne sont pas raccordees. """), -59: _(""" +59 : _(""" la demi-fenetre excitee en aval du noeud central d application n est pas definie. """), -60: _(""" +60 : _(""" la demi-fenetre excitee en aval du noeud central d application deborde du domaine de definition du maillage. """), -61: _(""" +61 : _(""" les fonctions interpretees doivent etre tabulees auparavant """), -62: _(""" +62 : _(""" nappe interdite pour definir le flux """), -63: _(""" +63 : _(""" on deborde a gauche """), -64: _(""" +64 : _(""" prolongement gauche inconnu """), -65: _(""" +65 : _(""" on deborde a droite """), -66: _(""" +66 : _(""" prolongement droite inconnu """), -67: _(""" +67 : _(""" on est en dehors des bornes """), -68: _(""" +68 : _(""" les mailles de type %(k1)s ne sont pas traitees pour la selection des noeuds """), -69: _(""" +69 : _(""" on ne sait plus trouver de noms. """), -70: _(""" +70 : _(""" erreur : deux noeuds du cable sont confondus on ne peut pas definir le cylindre. """), -71: _(""" +71 : _(""" immersion du cable no %(k1)s dans la structure beton : le noeud %(k2)s se trouve a l'exterieur de la structure """), -72: _(""" +72 : _(""" maille degeneree """), -73: _(""" - .nommai du maillage inexistant : %(k1)s -"""), -74: _(""" - .groupema du maillage inexistant : %(k1)s -"""), -75: _(""" + + + +75 : _(""" le determinant de la matrice a inverser est nul """), -76: _(""" +76 : _(""" le vecteur normal est dans le plan tangent """), -77: _(""" +77 : _(""" %(k1)s mot cle lu " %(k2)s " incompatible avec " %(k3)s " """), -78: _(""" +78 : _(""" lecture 1 :erreur de lecture pour %(k1)s """), -79: _(""" +79 : _(""" lecture 1 :item > 24 car %(k1)s """), -80: _(""" +80 : _(""" %(k1)s le groupe %(k2)s est vide """), -81: _(""" +81 : _(""" %(k1)s erreur de syntaxe : mot cle " %(k2)s " non reconnu """), -82: _(""" +82 : _(""" %(k1)s mot cle " %(k2)s " ignore """), -83: _(""" - le ligret %(k1)s n"existe pas. +83 : _(""" + le vecteur est perpendiculaire à la poutre. """), -84: _(""" - erreur sur ipma +84 : _(""" + La poutre présente une ou plusieurs branches: cas non permis. + Essayez de créer des groupes de mailles différents pour + chaque branche et de les orienter indépendemment. """), -85: _(""" - erreur sur ipno -"""), -86: _(""" - erreur sur ipnoqu -"""), -87: _(""" - mauvaise sortie de palima -"""), -88: _(""" - pb lecture courbe de wohler -"""), -89: _(""" +89 : _(""" mot cle wohler non trouve """), -90: _(""" - pb lecture courbe de manson_coffin -"""), -91: _(""" + + +91 : _(""" mot cle manson_coffin non trouve """), -92: _(""" +92 : _(""" lecture 1 : ligne lue trop longue : %(k1)s """), -93: _(""" - %(k1)s il manque le mot fin !??! +93 : _(""" + Probleme lors de la lecture du fichier maillage + numéro de la derniere ligne traitée : %(i1)d + + -> Risque & Conseil : + Verifiez si le mot clé FIN est présent à la fin du fichier. """), -94: _(""" - lecture 1 : erreur de syntaxe detectee +94 : _(""" + Probleme lors de la lecture du fichier maillage + Le fichier à lire est vide. + + -> Risque & Conseil : + Vérifiez la valeur mise derrière le mot clé UNITE et + que cette valeur par défaut correspond au type "mail" dans ASTK """), -95: _(""" - inom a une valeur inattendue : %(k1)s -"""), -96: _(""" - "nblige=" nb lignes entete -"""), -97: _(""" + + + + + + + + +97 : _(""" le nom du groupe %(k1)s est tronque a 8 caracteres """), -98: _(""" +98 : _(""" il faut un nom apres "nom=" """), -99: _(""" - lirtet: sortie anormale -"""), + + + } diff --git a/Aster/Cata/cataSTA9/Messages/modelisa5.py b/Aster/Cata/cataSTA9/Messages/modelisa5.py index 736f1313..eec2ec43 100644 --- a/Aster/Cata/cataSTA9/Messages/modelisa5.py +++ b/Aster/Cata/cataSTA9/Messages/modelisa5.py @@ -1,8 +1,8 @@ -#@ MODIF modelisa5 Messages DATE 30/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF modelisa5 Messages DATE 10/12/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,204 +20,105 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" +1 : _(""" erreur fortran de dimensionnement de tableau (nbmmai>nbmmax) """), -2: _(""" +2 : _(""" lecture 1 : il manque les coordonnees ! """), -3: _(""" +3 : _(""" lecture 1 : il manque les mailles ! """), -4: _(""" +4 : _(""" transcodage : le noeud %(k1)s declare dans la connectivite de la maille %(k2)s n existe pas dans les coordonnees """), -5: _(""" +5 : _(""" transcodage : le noeud %(k1)s declare dans le group_no: %(k2)s n'existe pas dans les coordonnees """), -6: _(""" +6 : _(""" le noeud : %(k1)s est en double dans le group_no: %(k2)s . on elimine les doublons """), -7: _(""" +7 : _(""" transcodage : la maille %(k1)s declare dans le group_ma: %(k2)s n'existe pas dans les connectivitees """), -8: _(""" +8 : _(""" la maille : %(k1)s est en double dans le group_ma: %(k2)s . on elimine les doublons """), -9: _(""" +9 : _(""" transcodage : une incoherence a ete detectee entre les declarations de noms de noeuds ou de mailles lors du transcodage des objets groupes et connectivitees """), -10: _(""" - med: erreur eflfde numero %(k1)s -"""), - -11: _(""" - med: erreur effien numero %(k1)s -"""), - -12: _(""" - probleme a la lecture de la description -"""), - -13: _(""" - impossible de retrouver l'adresse associee au groupe %(k1)s -"""), - -14: _(""" - MED : Erreur lors de l'appel à EFNEMA, code retour = %(k1)s - - -> Risque & Conseil : - Vérifier l'intégrité du fichier MED avec medconforme/mdump. - Si le maillage a été produit par un code externe, vérifier que les - noms de maillage, de groupes, de familles ne contiennent pas de - blancs à la fin. - Dans Salomé, on peut renommer ces entités et supprimer les espaces - invalides. -"""), - -15: _(""" - il manque les coordonnees ! -"""), - -16: _(""" - mailles %(k1)s -"""), - -17: _(""" - il manque les mailles ! -"""), - -18: _(""" - med: erreur efngro numero %(k1)s -"""), - -19: _(""" - med: erreur efnatt numero %(k1)s -"""), - -20: _(""" - med: erreur effami numero %(k1)s -"""), - -23: _(""" - erreur numero de groupe = 0 -"""), - -24: _(""" - med: erreur efnfam numero %(k1)s -"""), - -25: _(""" - aucune famille dans ce fichier med -"""), - -26: _(""" - med: erreur effaml numero %(k1)s -"""), - -27: _(""" - les mailles %(k1)s ne sont pas nommees dans le fichier med -"""), - -28: _(""" - med: erreur efconl numero %(k1)s -"""), - -29: _(""" - med: erreur efcool numero %(k1)s -"""), - -30: _(""" - incoherence catalogue - fortran (nbtyp fortran different de nbtyp catalogue) -"""), - -31: _(""" - incoherence catalogue - fortran (nomtyp fortran different de nomtyp catalogue) -"""), - -32: _(""" +32 : _(""" il faut fournir des mailles """), -33: _(""" +33 : _(""" on attend 1 et 1 seule maille """), -34: _(""" +34 : _(""" on n'a pas trouve la maille """), -35: _(""" +35 : _(""" que des mailles de type "seg" """), -36: _(""" +36 : _(""" un group_ma n'a pas de nom, suppression de ce groupe. """), -37: _(""" +37 : _(""" un group_no n'a pas de nom, suppression de ce groupe. """), -38: _(""" +38 : _(""" type d extraction interdit (dvlp) """), -39: _(""" - projection quadratique interdite avec mailles linearisees -"""), - -40: _(""" +40 : _(""" absence de convergence j """), -41: _(""" +41 : _(""" absence de convergence i """), -42: _(""" +42 : _(""" pas de convergence """), -43: _(""" +43 : _(""" erreur programmeur. type de maille inconnu """), -44: _(""" +44 : _(""" parametre beta non trouve """), -45: _(""" +45 : _(""" parametre lambda non trouve """), - - - - - - - -47: _(""" +47 : _(""" parametre affinite non trouve """), -48: _(""" +48 : _(""" option calcul de l absc_curv sur un group_ma non implantee. """), -49: _(""" +49 : _(""" -> La phase de vérification du maillage a été volontairement désactivée. -> Risque & Conseil : @@ -225,19 +126,19 @@ cata_msg={ ne seront pas détectées. Cela pourra nuire à la qualité des résultats. """), -50: _(""" +50 : _(""" la grandeur associee au mot cle: %(k1)s doit etre: %(k2)s mais elle est: %(k3)s """), -51: _(""" +51 : _(""" pour affecter une liste de modelisations, il faut qu'elles soient de meme dimension topologique. """), -52: _(""" +52 : _(""" aucune maille n a ete affectee par des elements finis pour le maillage %(k1)s """), -53: _(""" +53 : _(""" -> Le maillage est 3D mais les éléments du modèle sont 2D. -> Risque & Conseil : @@ -247,187 +148,181 @@ cata_msg={ modélisation souhaitée dans la commande AFFE_MODELE. """), -54: _(""" +54 : _(""" il est interdit d'avoir ,pour un modele donne, a la fois des elements discrets 2d et 3d . """), -55: _(""" +55 : _(""" verif : 2 arguments maxi """), -56: _(""" +56 : _(""" il manque le mot cle facteurpoutre. """), -57: _(""" +57 : _(""" erreur(s) rencontree(s) lors de la verification des affectations. """), -#_VIDE 58 - -59: _(""" +59 : _(""" une erreur d affectation a ete detectee : certaines mailles demandees possedent un type element incompatible avec les donnees a affecter """), -60: _(""" +60 : _(""" des poutres ne sont pas affectees """), -61: _(""" +61 : _(""" des barres ne sont pas affectees """), -62: _(""" +62 : _(""" des cables ne sont pas affectes """), -63: _(""" +63 : _(""" le parametre "rho" n'est pas defini pour toutes les couches. """), -64: _(""" +64 : _(""" un seul elas svp """), -65: _(""" +65 : _(""" deux zones d excitation du fluide ont meme nom """), -66: _(""" +66 : _(""" spec_exci_point : si inte_spec alors autant d arguments pour nature, angl et noeud """), -67: _(""" +67 : _(""" spec_exci_point : si grappe_2 alors un seul noeud """), -68: _(""" +68 : _(""" spec_fonc_forme : le nombre de fonctions fournies doit etre egal a la dimension de la matrice interspectrale """), -69: _(""" +69 : _(""" spec_exci_point : le nombre d arguments pour nature, angl et noeud doit etre egal a la dimension de la matrice interspectrale """), -70: _(""" +70 : _(""" mauvaise definition de la plage de frequence. """), -71: _(""" +71 : _(""" mauvaise definition de la plage de frequence. les modeles ne tolerent pas des valeurs negatives ou nulles. """), -72: _(""" +72 : _(""" le nombre de points pour la discr. freq. doit etre une puissance de 2. """), -73: _(""" +73 : _(""" les spectres de type "longueur de correlation" ne peuvent etre combines avec des spectres d un autre type. """), -74: _(""" +74 : _(""" le spectre de nom %(k1)s est associe a la zone %(k2)s qui n existe pas dans le concept %(k3)s """), -75: _(""" +75 : _(""" le spectre de nom %(k1)s est associe a la zone de nom %(k2)s """), -76: _(""" +76 : _(""" deux spectres sont identiques """), -77: _(""" +77 : _(""" les spectres de noms %(k1)s et %(k2)s sont associes au meme profil de vitesse, de nom %(k3)s """), -78: _(""" +78 : _(""" pas le bon numero de mode """), -79: _(""" +79 : _(""" le calcul de tous les interspectres de reponse modale n est pas possible car seuls les autospectres d excitation ont ete calcules. """), -80: _(""" +80 : _(""" la composante selectionnee pour la restitution en base physique des interspectres est differente de celle choisie pour le couplage fluide-structure. """), -81: _(""" +81 : _(""" la tabl_intsp de reponse modale ne contient que des autospectres. le calcul demande n est donc pas realisable. """), -82: _(""" +82 : _(""" le champ des contraintes modales doit etre calcule par option . """), -83: _(""" +83 : _(""" mot-cle , occurence no %(k1)s , operande : il faut definir 2 noeuds d'ancrage """), -84: _(""" +84 : _(""" mot-cle , occurence no %(k1)s , operande : il faut definir 2 group_no d'ancrage """), -85: _(""" +85 : _(""" mot-cle , occurence no %(k1)s , operande : les 2 noeuds d'ancrage doivent etre distincts """), -86: _(""" +86 : _(""" mot-cle , occurence no %(k1)s , operande : les 2 group_no d'ancrage doivent etre distincts """), -87: _(""" +87 : _(""" mot-cle , occurence no %(k1)s , operande type ancrage : les 2 extremites sont passives -> armature passive """), -88: _(""" +88 : _(""" mot-cle , occurence no %(k1)s , operande type ancrage : les 2 extremites sont passives et la tension que vous voulezimposer est non-nulle : impossible ! """), -89: _(""" +89 : _(""" la carte des caracteristiques materielles des elements n existe pas. il faut prealablement affecter ces caracteristiques en utilisant la commande """), -90: _(""" +90 : _(""" la carte des caracteristiques geometriques des elements de barre de section generale n existe pas. il faut prealablement affecter ces caracteristiques en utilisant la commande """), -91: _(""" +91 : _(""" probleme pour determiner le rang de la composante de la grandeur """), -92: _(""" +92 : _(""" probleme sur une relation : les coefficients sont trop petits """), - - - - - -94: _(""" +94 : _(""" impossibilite, la maille %(k1)s doit etre une maille de peau, i.e. de type "quad" ou "tria" en 3d ou de type "seg" en 2d, et elle est de type : %(k2)s """), -95: _(""" +95 : _(""" vous avez utilise le mot cle orie_peau_2d alors que le probleme est 3d. utilisez orie_peau_3d """), -96: _(""" +96 : _(""" vous avez utilise le mot cle orie_peau_3d alors que le probleme est 2d. utilisez orie_peau_2d """), -97: _(""" +97 : _(""" erreur donnees : le noeud %(k1)s n'existe pas """), -98: _(""" +98 : _(""" impossibilite de melanger des "seg" et des "tria" ou "quad" ! """), -99: _(""" +99 : _(""" impossibilité de vérifier l'orientation des mailles de bord : on trouve des groupes de mailles disjoints dans la liste de mailles de bords fournie. vérifier que les groupes de mailles de bord définis forment un ensemble connexe. """), + } diff --git a/Aster/Cata/cataSTA9/Messages/modelisa6.py b/Aster/Cata/cataSTA9/Messages/modelisa6.py index 84f310bb..92d453cc 100644 --- a/Aster/Cata/cataSTA9/Messages/modelisa6.py +++ b/Aster/Cata/cataSTA9/Messages/modelisa6.py @@ -1,8 +1,8 @@ -#@ MODIF modelisa6 Messages DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF modelisa6 Messages DATE 08/04/2008 AUTEUR MEUNIER S.MEUNIER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,398 +20,343 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - probleme d'orientation: aucune maille ne touche le noeud indique. +1 : _(""" + problème d'orientation: aucune maille ne touche le noeud indiqué """), -2: _(""" - certaines mailles n'ont pas pu etre reorientees. l'ensemble des mailles n'est pas connexe. +2 : _(""" + certaines mailles n'ont pas pu être réorientées. l'ensemble des mailles n'est pas connexe """), -3: _(""" - on ne trouve pas de noeud assez pres du noeud %(k1)s +3 : _(""" + on ne trouve pas de noeud assez près du noeud %(k1)s """), -4: _(""" - erreurs dans les donnees +4 : _(""" + erreurs dans les données """), -5: _(""" - extraction de plus de noeuds que n"en contient la maille +5 : _(""" + extraction de plus de noeuds que n'en contient la maille """), -6: _(""" - nombre de noeuds negatif +6 : _(""" + nombre de noeuds négatif """), -7: _(""" - nombre de noeuds sommets non prevu +7 : _(""" + nombre de noeuds sommets non prévu """), -8: _(""" - on est sur 2 mailles orthgonales +8 : _(""" + on est sur 2 mailles orthogonales """), -9: _(""" - type de maille inconnue +9 : _(""" + le type de maille est inconnu """), -10: _(""" +10 : _(""" la maille %(k1)s ne fait pas partie du maillage %(k2)s """), -11: _(""" - pref_maille est trop long, pref_nume est trop grand. +11 : _(""" + PREF_MAILLE est trop long, PREF_NUME est trop grand """), -12: _(""" - pref_maille est trop long +12 : _(""" + PREF_MAILLE est trop long """), -13: _(""" +13 : _(""" sous %(k1)s : ( %(k2)s le groupe %(k3)s ne fait pas partie du maillage : %(k4)s """), -14: _(""" - sous %(k1)s : ( %(k2)s arret sur erreur(s) utilisateur. +14 : _(""" + sous %(k1)s : ( %(k2)s arrêt sur erreur(s) utilisateur. """), -15: _(""" +15 : _(""" sous %(k1)s : ( %(k2)s : la maille %(k3)s ne fait pas partie du maillage : %(k4)s """), -16: _(""" +16 : _(""" le noeuds : %(k1)s ne fait pas partie du maillage """), -17: _(""" - la maille %(k1)s du group_ma %(k2)s donne apres le mot cle %(k3)s n'a pas un type geometrique autorise. +17 : _(""" + la maille %(k1)s du group_ma %(k2)s donne apres le mot cle %(k3)s n'a pas un type géométrique autorisé """), -18: _(""" - la maille %(k1)s donne apres le mot cle %(k2)s n'a pas un type geometrique autorise. +18 : _(""" + la maille %(k1)s donné après le mot clé %(k2)s n'a pas un type géométrique autorisé """), -19: _(""" - mot cle non admis : %(k1)s les mots-cles admissibles sont : %(k2)s ou %(k3)s ou %(k4)s ou %(k5)s ou %(k6)s ou %(k7)s ou %(k8)s ou %(k9)s +19 : _(""" + mot cle non admis : %(k1)s les mots-clés admissibles sont : %(k2)s ou %(k3)s ou %(k4)s ou %(k5)s ou %(k6)s ou %(k7)s ou %(k8)s ou %(k9)s """), -20: _(""" - ce type de maille n"est pas encore traite : %(k1)s +20 : _(""" + ce type de maille n'est pas encore traité : %(k1)s """), -21: _(""" - le nombre toal de noeuds est /= de la somme des noeuds sommets,arretes et interieurs +21 : _(""" + le nombre total de noeuds est /= de la somme des noeuds sommets, arêtes et intérieurs """), -22: _(""" +22 : _(""" les 2 listes %(k1)s et %(k2)s ne sont pas de meme longueur """), - - - - - - - - - - - - - - - -26: _(""" - affe_fibre pour " %(k1)s ": il y a %(k2)s valeurs pour "vale", ce devrait etre un multiple de 3 +26 : _(""" + AFFE_FIBRE pour " %(k1)s ": il y a %(k2)s valeurs pour "VALE", ce devrait être un multiple de 3 """), -27: _(""" - dans le maillage " %(k1)s " la maille " %(k2)s " est de type " %(k3)s " (ni tria3 ni quad4) +27 : _(""" + dans le maillage " %(k1)s " la maille " %(k2)s " est de type " %(k3)s " (ni TRIA3 ni QUAD4) """), -28: _(""" - erreur nbzoco/symetrique +30 : _(""" + l'indicateur : %(k1)s de position des multiplicateurs de lagrange associés à une relation lineaire n'est pas correct. """), -29: _(""" - erreur nbsuco/symetrique -"""), - -30: _(""" - l'indicateur : %(k1)s de position des multiplicateurs de lagrange associes a une relation lineaire n'est pas correct. -"""), - - -33: _(""" - il faut coef_group ou fonc_group +33 : _(""" + il faut COEF_GROUP ou FONC_GROUP """), -34: _(""" - un element n'est ni tria3 ni tria6 ni quad4 ni quad8 +34 : _(""" + un element n'est ni TRIA3 ni TRIA6 ni QUAD4 ni QUAD8 """), -35: _(""" - un element n'est ni tria3 ni tria6 ni tria7 niquad4 ni quad8 ni quad9 +35 : _(""" + un element n'est ni TRIA3 ni TRIA6 ni TRIA7 ni QUAD4 ni QUAD8 ni QUAD9 """), -36: _(""" - le noeud %(k1)s doit appartenir a une seule maille +36 : _(""" + le noeud %(k1)s doit appartenir à une seule maille """), -37: _(""" - la maille a laquelle appartient le noeud %(k1)s doit etre de type seg3 +37 : _(""" + la maille à laquelle appartient le noeud %(k1)s doit etre de type SEG3 """), -38: _(""" +38 : _(""" on ne trouve pas les angles nautiques pour le tuyau """), -39: _(""" +39 : _(""" option %(k1)s invalide """), -40: _(""" - il faut indiquer le mot-cle 'noeud_2' ou 'group_no_2' apres le mot-facteur %(k1)s pour l'option '3d_pou'. +40 : _(""" + il faut indiquer le mot-cle 'NOEUD_2' ou 'GROUP_NO_2' après le mot-facteur %(k1)s pour l'option '3D_POU'. """), -41: _(""" +41 : _(""" il ne faut donner qu'un seul noeud de poutre a raccorder au massif. """), -42: _(""" - il ne faut donner qu'un un seul group_no a un noeud a raccorder au massif. +42 : _(""" + il ne faut donner qu'un un seul GROUP_NO à un noeud à raccorder au massif. """), -43: _(""" - il ne faut donner q"un seul noeud dans le group_no : %(k1)s +43 : _(""" + il ne faut donner q'un seul noeud dans le GROUP_NO : %(k1)s """), -44: _(""" - impossibilite,le noeud %(k1)s porte le ddl de rotation %(k2)s +44 : _(""" + impossibilité, le noeud %(k1)s porte le ddl de rotation %(k2)s """), -45: _(""" - impossibilite,le noeud poutre %(k1)s devrait porter le ddl %(k2)s +45 : _(""" + impossibilité, le noeud poutre %(k1)s devrait porter le ddl %(k2)s """), -46: _(""" - impossibilite, la surface de raccord du massif est nulle +46 : _(""" + impossibilité, la surface de raccord du massif est nulle """), -47: _(""" - il faut donner un cara_elem pour recuperer les caracteristiques de tuyau. +47 : _(""" + il faut donner un CARA_ELEM pour récupérer les caractéristiques de tuyau. """), -48: _(""" - il faut indiquer le mot-cle 'noeud_2' ou 'group_no_2' apres le mot-facteur %(k1)s pour l'option %(k2)s +48 : _(""" + il faut indiquer le mot-cle 'NOEUD_2' ou 'GROUP_NO_2' après le mot-facteur %(k1)s pour l'option %(k2)s """), -49: _(""" - il ne faut donner qu'un seul noeud de poutre a raccorder a la coque. +49 : _(""" + il ne faut donner qu'un seul noeud de poutre à raccorder à la coque. """), -50: _(""" - il ne faut donner qu'un un seul group_no a un noeud a raccorder a la coque. +50 : _(""" + il ne faut donner qu'un seul GROUP_NO à un noeud à raccorder à la coque. """), -51: _(""" - il faut donner un vecteur orientant l'axe de la poutre sous le mot-cle "axe_poutre". +51 : _(""" + il faut donner un vecteur orientant l'axe de la poutre sous le mot-cle "AXE_POUTRE". """), -52: _(""" - il faut donner un vecteur non nul orientant l'axe de la poutre sous le mot-cle "axe_poutre". +52 : _(""" + il faut donner un vecteur non nul orientant l'axe de la poutre sous le mot-cle "AXE_POUTRE". """), -53: _(""" - il faut donner un cara_elem pour recuperer l'epaisseur des elements de bord. +53 : _(""" + il faut donner un CARA_ELEM pour récupérer l'épaisseur des éléments de bord. """), -54: _(""" - impossibilite,le noeud %(k1)s ne porte pas le ddl de rotation %(k2)s +54 : _(""" + impossibilité, le noeud %(k1)s ne porte pas le ddl de rotation %(k2)s """), -55: _(""" - impossibilite, la surface de raccord de la coque est nulle +55 : _(""" + impossibilité, la surface de raccord de la coque est nulle """), -56: _(""" - plusieurs comportements de type %(k1)s ont ete trouves +56 : _(""" + plusieurs comportements de type %(k1)s ont ete trouvés """), -57: _(""" - comportement de type %(k1)s non trouve +57 : _(""" + comportement de type %(k1)s non trouvé """), -58: _(""" - nappe interdite pour les caracteristiques materiau +58 : _(""" + nappe interdite pour les caractéristiques matériau """), -59: _(""" - deformation plastique cumulee p < 0 +59 : _(""" + déformation plastique cumulée p < 0 """), -60: _(""" - prolongement a droite exclu pour la fonction r(p) +60 : _(""" + Le prolongement à droite étant exclu pour la fonction %(k1)s, + il n'est pas possible d'extrapoler la fonction R(p) en p = %(r1)f. """), -61: _(""" - on deborde a droite redefinissez vos nappes alpha - moment -"""), - -62: _(""" +62 : _(""" la limite d elasticite est deja renseignee dans elas_meta """), -63: _(""" +63 : _(""" objet %(k1)s .materiau.nomrc non trouve """), -64: _(""" - type sd non traite: %(k1)s -"""), - - - - - - -66: _(""" - fonction constante interdite pour la courbe mz=f(drz) -"""), - -67: _(""" - fonction nappe interdite pour la courbe mz=f(drz) -"""), - -68: _(""" - concept de type : %(k1)s interdit pour la courbe de traction -"""), - -69: _(""" - le mot cle: %(k1)s est identique (sur ses 8 1ers caracteres) a un autre. +64 : _(""" + type sd non traité: %(k1)s """), -70: _(""" - erreur lors de la definition de la courbe de traction, il manque le parametre : %(k1)s +69 : _(""" + le mot cle: %(k1)s est identique (sur ses 8 1ers caracteres) à un autre. """), -71: _(""" - erreur lors de la definition de la courbe de traction : %(k1)s nb de points < 2 ! +70 : _(""" + erreur lors de la définition de la courbe de traction, il manque le paramètre : %(k1)s """), -72: _(""" - erreur lors de la definition de la courbe de traction : %(k1)s nb de points < 1 ! +71 : _(""" + erreur lors de la définition de la courbe de traction : %(k1)s nb de points < 2 ! """), -73: _(""" - erreurs rencontrees. +72 : _(""" + erreur lors de la définition de la courbe de traction : %(k1)s nb de points < 1 ! """), -74: _(""" - erreur lors de la definition de la nappe des courbes de traction: nb de points < 2 ! +73 : _(""" + erreurs rencontrées. """), -75: _(""" - erreur lors de la definition de la nappe des courbes de traction: %(k1)s nb de points < 1 ! +74 : _(""" + erreur lors de la définition de la nappe des courbes de traction: nb de points < 2 ! """), -76: _(""" - erreur lors de la definition dela courbe de traction: fonction ou nappe ! +75 : _(""" + erreur lors de la définition de la nappe des courbes de traction: %(k1)s nb de points < 1 ! """), -77: _(""" - erreur lors de la definition de la courbe rela_mz : nb de points < 2 ! +76 : _(""" + erreur lors de la définition de la courbe de traction: fonction ou nappe ! """), -78: _(""" - abscisses non croissants. +80 : _(""" + comportement TRACTION non trouve """), -79: _(""" - erreur lors de la definition dela courbe rela_mz: fonction ! +81 : _(""" + fonction SIGM non trouvée """), -80: _(""" - comportement traction non trouve +82 : _(""" + comportement meta_traction non trouvé """), -81: _(""" - fonction sigm non trouvee +83 : _(""" + fonction SIGM_F1 non trouvée """), -82: _(""" - comportement meta_traction non trouve +84 : _(""" + fonction SIGM_F2 non trouvée """), -83: _(""" - fonction sigm_f1 non trouvee +85 : _(""" + fonction SIGM_F3 non trouvée """), -84: _(""" - fonction sigm_f2 non trouvee +86 : _(""" + fonction SIGM_F4 non trouvée """), -85: _(""" - fonction sigm_f3 non trouvee +87 : _(""" + fonction SIGM_C non trouvée """), -86: _(""" - fonction sigm_f4 non trouvee -"""), - -87: _(""" - fonction sigm_c non trouvee -"""), - -88: _(""" +88 : _(""" fonction constante interdite pour la courbe de traction %(k1)s """), -89: _(""" - prolongement a gauche exclu pour la courbe %(k1)s +89 : _(""" + prolongement à gauche EXCLU pour la courbe %(k1)s """), -90: _(""" - prolongement a droite exclu pour la courbe %(k1)s +90 : _(""" + prolongement à droite EXCLU pour la courbe %(k1)s """), -91: _(""" +91 : _(""" concept de type : %(k1)s interdit pour la courbe de traction %(k2)s """), -92: _(""" - materiau : %(k1)s non trouve +92 : _(""" + materiau : %(k1)s non trouvé """), -93: _(""" - les fonctions complexes ne sont pas implementees +93 : _(""" + les fonctions complexes ne sont pas implementées """), -94: _(""" +94 : _(""" nb param. > 30 materiau %(k1)s """), -95: _(""" +95 : _(""" mauvaise definition de la plage de frequence, aucun mode pris en compte """), -96: _(""" - les mailles imprimees ci-dessus n'appartiennent pas au modele et pourtant elles ont ete affectees dans le mot-cle facteur : %(k1)s +96 : _(""" + les mailles imprimées ci-dessus n'appartiennent pas au modèle et pourtant elles ont ete affectées dans le mot-clé facteur : %(k1)s """), -97: _(""" - freq init plus grande que freq fin +97 : _(""" + FREQ INIT plus grande que FREQ FIN """), -98: _(""" - freq init necessaire avec chamno +98 : _(""" + FREQ INIT nécessaire avec CHAMNO """), -99: _(""" - freq fin necessaire avec chamno +99 : _(""" + FREQ FIN nécessaire avec CHAMNO """), + } diff --git a/Aster/Cata/cataSTA9/Messages/modelisa7.py b/Aster/Cata/cataSTA9/Messages/modelisa7.py index a9b7a04b..57cb0dd0 100644 --- a/Aster/Cata/cataSTA9/Messages/modelisa7.py +++ b/Aster/Cata/cataSTA9/Messages/modelisa7.py @@ -1,4 +1,4 @@ -#@ MODIF modelisa7 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF modelisa7 Messages DATE 08/04/2008 AUTEUR MEUNIER S.MEUNIER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -31,15 +31,16 @@ cata_msg={ """), 3: _(""" - la method est de au-yang. on a besoin du vecteur de l axe vect_x et de l origine orig_axe du cylindre + la methode est de AU-YANG + on a besoin du vecteur de l'axe VECT_X et de l'origine ORIG_AXE du cylindre """), 4: _(""" - le type de spectre est incompatible avec la configuration etudiee + le type de spectre est incompatible avec la configuration etudiée """), 5: _(""" - probleme rencontre lors de l interpolation d un interspectre + probleme rencontré lors de l'interpolation d'un interspectre """), 6: _(""" @@ -47,15 +48,19 @@ cata_msg={ """), 7: _(""" - l integrale double pour le calcul de la longueur de correlation ne converge pas. + l'intégrale double pour le calcul de la longueur de corrélation ne converge pas. + JM,IM = %(i1)s , %(i2)s + valeur finale = %(r1)f + valeur au pas précédent = %(r2)f + erreur relative = %(r3)f """), 8: _(""" - la liste de noms doit etre de meme longueur que la liste de group_ma + la liste de noms doit etre de meme longueur que la liste de GROUP_MA """), 9: _(""" - le group_no : %(k1)s existe deja, on ne le cree donc pas. + le GROUP_NO : %(k1)s existe deja, on ne le crée donc pas. """), 10: _(""" @@ -66,48 +71,36 @@ cata_msg={ le groupe %(k1)s existe deja """), -12: _(""" - erreur programmeur sur dimension de manoco -"""), - -13: _(""" - erreur programmeur sur dimension de nomaco -"""), - -14: _(""" - erreur programmeur sur dimension de mamaco -"""), - 15: _(""" - faisceau_axial : il y a plus de types de grilles que de grilles + FAISCEAU_AXIAL : il y a plus de types de grilles que de grilles """), 16: _(""" - faisceau_axial : il faut autant d'arguments pour les operandes et + FAISCEAU_AXIAL : il faut autant d'arguments pour les operandes et """), 17: _(""" - faisceau_axial, operande : detection d'une valeur illicite + FAISCEAU_AXIAL, operande : detection d'une valeur illicite """), 18: _(""" - faisceau_axial : il faut autant d'arguments pour les operandes , , , , et + faisceau_axial : il faut autant d'arguments pour les operandes , , , , et """), 19: _(""" - le mot cle doit etre renseigne au moins une fois sous l une des occurence du mot-cle facteur + le mot cle doit etre renseigné au moins une fois sous l'une des occurence du mot-cle facteur """), 20: _(""" - : si couplage , et mots-cles obligatoires dans au moins l une des occurences du mot-cle facteur + : si couplage , et mots-cles obligatoires dans au moins l une des occurences du mot-cle facteur """), 21: _(""" - faisceau_trans : si pas de couplage mot-cle obligatoire dans au moins l une des occurences du mot cle facteur + FAISCEAU_TRANS : si pas de couplage mot-cle obligatoire dans au moins l une des occurences du mot cle facteur """), 22: _(""" - : le mot-cle doit etre renseigne au moins une fois dans l une des occurences du mot-cle facteur + : le mot-cle doit etre renseigne au moins une fois dans l une des occurences du mot-cle facteur """), 23: _(""" @@ -315,11 +308,12 @@ cata_msg={ """), 74: _(""" - les discretisations des fonctions de forme ne sont pas coherentes. les nombres de points sur 0,l et sur l,2l doivent etre communs a toutes les fonctions. + les discrétisations des fonctions de forme ne sont pas cohérentes + les nombres de points sur 0,l et sur l,2l doivent etre communs à toutes les fonctions. """), 75: _(""" - le group_no %(k1)s ne fait pas partie du maillage : %(k2)s + le GROUP_NO %(k1)s ne fait pas partie du maillage : %(k2)s """), 76: _(""" @@ -327,38 +321,32 @@ cata_msg={ """), 77: _(""" - le group_ma %(k1)s ne fait pas partie du maillage : %(k2)s + le GROUP_MA %(k1)s ne fait pas partie du maillage : %(k2)s """), - - - - - - - 79: _(""" le type %(k1)s d'objets a verifier n'est pas correct : il ne peut etre egal qu'a group_no ou noeud ou group_ma ou maille """), 80: _(""" - defaut de planeite.l angle entre les normales aux mailles: %(k1)s et %(k2)s est superieur a angl_max. + défaut de planéité + l angle entre les normales aux mailles: %(k1)s et %(k2)s est supérieur à ANGL_MAX. """), 81: _(""" - %(k1)s un identificateur est attendu : " %(k2)s " n en est pas un + %(k1)s un identificateur est attendu : " %(k2)s " n'en est pas un """), 82: _(""" - %(k1)s un identificateur depasse 8 caracteres + %(k1)s un identificateur depasse 8 caractères """), 83: _(""" - %(k1)s le mot cle fin n est pas attendu + %(k1)s le mot cle FIN n'est pas attendu """), 84: _(""" - %(k1)s le mot cle finsf n est pas attendu + %(k1)s le mot cle FINSF n est pas attendu """), 85: _(""" @@ -366,11 +354,13 @@ cata_msg={ """), 86: _(""" - la maille de nom : %(k1)s n'est pas de type segment, elle ne sera pas affectee par %(k2)s + la maille de nom : %(k1)s n'est pas de type SEGMENT + elle ne sera pas affectée par %(k2)s """), 87: _(""" - la maille de nom : %(k1)s n'est pas de type tria ou quad, elle ne sera pas affectee par %(k2)s + la maille de nom : %(k1)s n'est pas de type TRIA ou QUAD + elle ne sera pas affectee par %(k2)s """), 88: _(""" @@ -379,40 +369,32 @@ cata_msg={ """), 89: _(""" - la maille de numero : %(k1)s n'est pas de type segment, elle ne sera pas affectee par %(k2)s + la maille de numéro : %(k1)s n'est pas de type SEGMENT + elle ne sera pas affectée par %(k2)s """), 90: _(""" - la maille de numero : %(k1)s n'est pas de type tria ou quad, elle ne sera pas affectee par %(k2)s + la maille de numéro : %(k1)s n'est pas de type TRIA ou QUAD + elle ne sera pas affectée par %(k2)s """), 91: _(""" - erreur dans les noms de maille du group_ma: %(k1)s du mot-cle facteur %(k2)s : aucune n'est du bon type + erreur dans les noms de maille du GROUP_MA: %(k1)s du mot-cle facteur %(k2)s + aucune maille n'est du bon type """), 92: _(""" - la maille de nom : %(k1)s n'est pas une maille 3d, elle ne sera pas affectee par %(k2)s + la maille de nom : %(k1)s n'est pas une maille 3d, elle ne sera pas affectée par %(k2)s """), 93: _(""" - la maille de numero : %(k1)s n'est pas une maille 3d, elle ne sera pas affectee par %(k2)s -"""), - -94: _(""" - pb de statut des noeuds enrichis -"""), - -95: _(""" - pb de groupe mailles enrichies + la maille de numéro : %(k1)s n'est pas une maille 3d, elle ne sera pas affectee par %(k2)s """), - - - - - -98: _(""" - Erreur lors de la vérification des noms de groupes. +97: _(""" + -> Le group_ma %(k1)s du maillage %(k2)s se retrouve vide du fait + de l'élimination des mailles servant au collage. + Il n'est donc pas recréé dans le maillage assemblé. """), 99: _(""" diff --git a/Aster/Cata/cataSTA9/Messages/modelisa8.py b/Aster/Cata/cataSTA9/Messages/modelisa8.py index 79fee17d..abb83b1e 100644 --- a/Aster/Cata/cataSTA9/Messages/modelisa8.py +++ b/Aster/Cata/cataSTA9/Messages/modelisa8.py @@ -1,4 +1,4 @@ -#@ MODIF modelisa8 Messages DATE 29/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF modelisa8 Messages DATE 17/12/2007 AUTEUR FLEJOU J-L.FLEJOU # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -20,149 +20,119 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" +1 : _(""" la section de la poutre est nulle """), -2: _(""" + +2 : _(""" l'inertie de la poutre suivant OY est nulle """), -3: _(""" + +3 : _(""" l'inertie de la poutre suivant OZ est nulle """), -4: _(""" - La somme des aires des fibres est differente de l'aire de la section de la poutre.\n - L'erreur relative est superieure a la precision definie par le mot cle PREC_AIRE :\n - - occurence de multifire : %(r1)d \n - - aire de la poutre : %(r2)12.5E \n - - aire des fibres : %(r3)12.5E \n + +4 : _(""" + La somme des aires des fibres est differente de l'aire de la section de la poutre. + + L'erreur relative est superieure a la precision definie par le mot cle PREC_AIRE : + + - occurence de multifire : %(r1)d + + - aire de la poutre : %(r2)12.5E + + - aire des fibres : %(r3)12.5E + - erreur relative : %(r4)12.5E """), -5: _(""" - La somme des moments d'inertie des fibres par rapport a l'axe 0Y est differente du moment de la poutre.\n - L'erreur relative est superieure a la precision definie par le mot cle PREC_INERTIE :\n - - occurence de multifire : %(r1)d \n - - moment d'inertie de la poutre : %(r2)12.5E \n - - aire d'inertie des fibres : %(r3)12.5E \n + +5 : _(""" + La somme des moments d'inertie des fibres par rapport a l'axe 0Y est differente du moment de la poutre. + + L'erreur relative est superieure a la precision definie par le mot cle PREC_INERTIE : + + - occurence de multifire : %(r1)d + + - moment d'inertie de la poutre : %(r2)12.5E + + - aire d'inertie des fibres : %(r3)12.5E + - erreur relative : %(r4)12.5E """), -6: _(""" - La somme des moments d'inertie des fibres par rapport a l'axe 0Z est differente du moment de la poutre.\n - L'erreur relative est superieure a la precision definie par le mot cle PREC_INERTIE :\n - - occurence de multifire : %(r1)d \n - - moment d'inertie de la poutre : %(r2)12.5E \n - - aire d'inertie des fibres : %(r3)12.5E \n + +6 : _(""" + La somme des moments d'inertie des fibres par rapport a l'axe 0Z est differente du moment de la poutre. + + L'erreur relative est superieure a la precision definie par le mot cle PREC_INERTIE : + + - occurence de multifire : %(r1)d + + - moment d'inertie de la poutre : %(r2)12.5E + + - aire d'inertie des fibres : %(r3)12.5E + - erreur relative : %(r4)12.5E """), -7: _(""" +7 : _(""" actuellemnt on ne peut mettre que %(k1)s groupes de fibres sur un element """), -8: _(""" +8 : _(""" Le groupe de fibre %(k1)s n'a pas ete defini dans DEFI_GEOM_FIBRE """), -9: _(""" +9 : _(""" mot cle facteur "defi_arc", occurence %(i1)d , group_ma : %(k1)s le centre n'est pas vraiment le centre du cercle %(k2)s """), -10: _(""" +10 : _(""" mot cle facteur "defi_arc", occurence %(i1)d , group_ma : %(k1)s le point de tangence n est pas equidistant des points extremites %(k2)s """), -11: _(""" +11 : _(""" mot cle facteur "defi_arc", occurence %(i1)d , maille : %(k1)s le centre n'est pas vraiment le centre du cercle %(k2)s """), - - - - - -13: _(""" +13 : _(""" , maille : %(i1)d la maille n'est pas situee sur le cercle %(k1)s """), -14: _(""" +14 : _(""" , maille : %(i1)d la maille n'est pas orientee dans le meme sens que les autres sur le cercle %(k1)s """), - - - - - -16: _(""" +16 : _(""" , maille : %(i1)d pb produit scalaire %(k1)s """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -25: _(""" +25 : _(""" l'ensemble des mailles comporte plus de 2 extremites %(k1)s """), -26: _(""" +26 : _(""" defi_arcl'ensemble des mailles forme un cercle : a subdiviser %(k1)s """), -27: _(""" +27 : _(""" le ddl %(k1)s est interdit pour le noeud %(k2)s """), -28: _(""" +28 : _(""" affectation deja effectuee du ddl %(k1)s du noeud %(k2)s %(k3)s """), -29: _(""" +29 : _(""" nombre de cmps superieur au max nmaxcmp= %(i1)d ncmp = %(i2)d """), -30: _(""" +30 : _(""" Erreur utilisateur: On cherche à imposer une condition aux limites sur le ddl %(k1)s du noeud %(k2)s. @@ -174,136 +144,79 @@ cata_msg={ - le noeud porte-t-il le ddl que l'on cherche à contraindre ? """), - -31: _(""" +31 : _(""" nombre de motcles superieur au max nmaxocl= %(i1)d nmocl = %(i2)d """), - - - - - - - - - - - - - -34: _(""" +34 : _(""" erreur dans les donneesle parametre %(k1)s n existe pas dans la table %(k2)s """), -35: _(""" +35 : _(""" erreur dans les donneespas de valeur pour le parametre %(k1)s """), -36: _(""" +36 : _(""" erreur dans les donneesplusieurs valeurs pour le group_ma %(k1)s """), - - - - - - - - - - - - - - - -40: _(""" +40 : _(""" la maille de nom : %(k1)s n'est pas de type %(k2)s ou %(k3)s elle ne sera pas affectee par %(k4)s """), -41: _(""" +41 : _(""" mgrappmasse de la tige calculee: %(r1)f masse de l'araignee calculee: %(r2)f masse du crayon calculee: %(r3)f masse grappe=tige+araignee+crayon: %(r4)f """), -42: _(""" +42 : _(""" erreurs dans les donneeslongueur modelisee: %(r1)f longueur donnee : %(r2)f """), -43: _(""" +43 : _(""" le nombre de ddl_1 figurant dans la liaison n'est pas egal au nombre de coef_mult_1 : %(i1)d %(i2)d """), -44: _(""" +44 : _(""" le nombre de ddl_2 figurant dans la liaison n'est pas egal au nombre de coef_mult_2 : %(i1)d %(i2)d """), - - - - - - - -46: _(""" +46 : _(""" le nombre de ddls figurant dans la liaison n'est pas egal au nombre de coef_mult/coef_mult_fonc : %(i1)d %(i2)d """), -47: _(""" +47 : _(""" le nombre de ddls figurant dans la liaison n'est pas egal au nombre de noeuds : %(i1)d %(i2)d """), - - - - - - - -49: _(""" +49 : _(""" la direction normale est calculee sur la face esclave. il faut donner des mailles de facettes, mots cles : %(k1)s %(k2)s """), - - - - - - - - - - - - - - -52: _(""" +52 : _(""" les noeuds n1 et n2 sont confondus coor(n1): %(r1)f %(r2)f coor(n2): %(r3)f %(r4)f norme : %(r5)f """), -53: _(""" +53 : _(""" n3 colineaires coor(n1): %(r1)f %(r2)f %(r3)f coor(n2): %(r4)f %(r5)f %(r6)f coor(n3): %(r7)f @@ -312,207 +225,70 @@ cata_msg={ norme : %(r10)f """), - - - - - - - -55: _(""" - interpolation interditepour un resultat de type : %(k1)s +55 : _(""" +Interpolation interdite pour un résultat de type : %(k1)s +Seule l'extraction est possible : OPERATION='EXTR' """), -56: _(""" +56 : _(""" group_ma %(k1)s mailles mal orientees %(i1)d """), -57: _(""" +57 : _(""" maille mal orientee: %(k1)s """), -58: _(""" +58 : _(""" composante existante sur le noeud: %(k1)s composante: %(k2)s """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -66: _(""" - le nom de groupe numero %(i1)d est en double. %(k1)s - premier nom med : %(k2)s - second nom med : %(k3)s - nom aster retenu : %(k4)s -"""), - -67: _(""" - - le numero de la maille de type nomtyp(ityp) est superieur au nombre total de mailles : - numero de la maille : %(i1)d - nombre de mailles : %(i2)d -"""), - -68: _(""" +68 : _(""" la maille de num %(i1)d de nom %(k1)s """), -69: _(""" +69 : _(""" le code: %(i1)d %(k1)s """), -70: _(""" +70 : _(""" pour l'occurence de affe numero %(i1)d on n'a pas pu affecter %(i2)d mailles de dimension %(i3)d (info=2 pour details) %(i4)d """), -71: _(""" +71 : _(""" materiau non valide materiau : %(k1)s """), -72: _(""" +72 : _(""" materiaux non valideson ne peut avoir a la fois %(k1)s et %(k2)s """), - - - - - - - - - - - - - - -75: _(""" +75 : _(""" erreur donneesle group_no n'existe pas %(k1)s """), - - - - - - - -77: _(""" +77 : _(""" conflit dans les vis_a_vis des noeuds le noeud %(k1)s est le vis-a-vis des noeuds %(k2)s et %(k3)s """), - - - - - - - -79: _(""" +79 : _(""" conflit dans les vis-a-vis generes successivement le noeud %(k1)s a pour vis-a-vis le noeud %(k2)s et le noeud %(k3)s """), -80: _(""" +80 : _(""" conflit dans les vis-a-vis generes successivement le noeud de la premiere liste %(k1)s n"est l"image d"aucun %(k2)s noeud par la correspondance inverse %(k3)s """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -87: _(""" +87 : _(""" conflit dans les vis-a-vis generes successivement a partir des listes %(k1)s et %(k2)s le noeud %(k3)s @@ -520,7 +296,7 @@ cata_msg={ et le noeud %(k5)s """), -88: _(""" +88 : _(""" conflit dans les vis-a-vis generes successivement a partir des listes %(k1)s et %(k2)s le noeud de la premiere liste %(k3)s @@ -528,66 +304,52 @@ cata_msg={ noeud par la correspondance inverse %(k5)s """), -89: _(""" +89 : _(""" on ne trouve pas dans la paroi 2 de maille de type : %(i1)d """), -90: _(""" +90 : _(""" conflit dans les vis_a_vis les mailles %(k1)s et %(k2)s ont toutes les 2 comme vis_a_vis la maille %(k3)s """), - - - - - - - - - - - - - - -93: _(""" +93 : _(""" evaluation impossible d une fonction materiau - on deborde a gauche pour la temperature temp : %(r1)f """), -94: _(""" +94 : _(""" evaluation impossible d une fonction materiau - on deborde a droite pour la temperature temp : %(r1)f """), -95: _(""" +95 : _(""" erreur dans les parametres valeur de typem : %(k1)s les valeurs possibles sont no_maille, no_noeud, nu_maille et nu_noeud %(k2)s """), -96: _(""" +96 : _(""" erreur dans les parametres pour l'indice : %(i1)d la valeur de tymocl est : %(k1)s les valeurs possibles sont maille et group_ma %(k2)s car type2 vaut %(k3)s """), -97: _(""" +97 : _(""" erreur dans les parametres pour l'indice : %(i1)d la valeur de tymocl est : %(k1)s les valeurs possibles sont maille, noeud, %(k2)s group_ma,group_no et tout %(k3)s """), -98: _(""" +98 : _(""" il manque le parametre %(k1)s dans la table %(k2)s .sa presence est indispensable a la creation du champ nodal. %(k3)s """), -99: _(""" +99 : _(""" le parametre %(k1)s ne doit pas apparaitre dans la table %(k2)s pour la creation d'un champ nodal. %(k3)s """), diff --git a/Aster/Cata/cataSTA9/Messages/modelisa9.py b/Aster/Cata/cataSTA9/Messages/modelisa9.py index 2ab1839f..f98e980c 100644 --- a/Aster/Cata/cataSTA9/Messages/modelisa9.py +++ b/Aster/Cata/cataSTA9/Messages/modelisa9.py @@ -1,80 +1,78 @@ -#@ MODIF modelisa9 Messages DATE 04/06/2007 AUTEUR PELLET J.PELLET +#@ MODIF modelisa9 Messages DATE 15/04/2008 AUTEUR ZENTNER I.ZENTNER # -*- coding: iso-8859-1 -*- - # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ -1: _(""" +cata_msg = { + +1 : _(""" il manque le parametre %(k1)s dans la table %(k2)s .sa presence est indispensable a la creation d'un champ elementaire. %(k3)s """), -2: _(""" +2 : _(""" le parametre %(k1)s de la table %(k2)s est incompatible a la creation d'un champ elementaire constant. %(k3)s """), -3: _(""" +3 : _(""" il manque le parametre %(k1)s dans la table %(k2)s .sa presence est indispensable a la creation d'un champ %(k3)s """), -4: _(""" +4 : _(""" le parametre %(k1)s de la table %(k2)s n'est valable que pour la creation d'un champ %(k3)s """), -5: _(""" +5 : _(""" incoherence entre maille et point dans la table %(k1)s maille : %(k2)s point : %(i1)d nombre de points de la maille: %(i2)d """), -6: _(""" +6 : _(""" plusieurs affectations pour le meme point d'une maille dans la table %(k1)s maille: %(k2)s point : %(i1)d """), -7: _(""" +7 : _(""" plusieurs affectations pour le meme sous-point dans la table %(k1)s maille: %(k2)s point : %(i1)d sous-point : %(i2)d """), -8: _(""" +8 : _(""" plusieurs affectations pour la meme maille dans la table %(k1)s maille: %(k2)s """), - -9: _(""" +9 : _(""" Erreur utilisateur : Pour le materiau : %(k1), on cherche à redéfinir un mot clé déjà défini : %(k2) """), - -10: _(""" +10 : _(""" Erreur utilisateur : Comportement 'HUJEUX' Non convergence pour le calcul de la loi de comportement (NB_ITER_MAX atteint). @@ -84,13 +82,319 @@ Conseil : """), -11: _(""" +11 : _(""" mocle facteur non traite :mclf %(k1)s """), +15 : _(""" + pas de freq initiale definie : on prend la freq mini des modes calcules + %(r1)f +"""), + +16 : _(""" + pas de freq finale definie : on prend la freq max des modes calcules %(r1)f +"""), + +17 : _(""" + votre freq de coupure %(r1)f +"""), + +18 : _(""" + est inferieure a celle du modele de turbulence adopte : %(r1)f +"""), + +19 : _(""" + on prend la votre. +"""), + +20 : _(""" + votre freq de coupure : %(r1)f +"""), + +21 : _(""" + est superieure a celle du modele de turbulence adopte : %(r1)f +"""), + +22 : _(""" + on prend celle du modele. +"""), + +23 : _(""" + erreur dans les donnees mot cle facteur %(k1)s occurence %(i1)d +"""), + +24 : _(""" + le maillage est "plan" ou "z_cst" +"""), + +25 : _(""" + le maillage est "3d" +"""), + +26 : _(""" + il y a %(i1)d valeurs pour le mot cle %(k1)s il en faut %(i2)d +"""), + +27 : _(""" + erreur dans les donnees mot cle facteur %(k1)s occurence %(i1)d + pour le mot cle %(k2)s + le noeud n'existe pas %(k3)s +"""), + +28 : _(""" + erreur dans les donnees mot cle facteur %(k1)s occurence %(i1)d + pour le mot cle %(k2)s + le GROUP_NO n'existe pas %(k3)s +"""), + +29 : _(""" + trop de noeuds dans le GROUP_NO mot cle facteur %(k1)s occurence %(i1)d + noeud utilise: %(k2)s +"""), + +30 : _(""" + Le MODELE doit etre de type mécanique. +"""), + +31 : _(""" + poutre : occurence %(i2)d : + "cara" nombre de valeurs entrees: %(i2)d + "vale" nombre de valeurs entrees: %(i3)d + verifier vos donnees + +"""), + +32 : _(""" + erreur dans les donnees mot cle facteur %(k1)s occurence %(i1)d +"""), + +35 : _(""" + il y a %(i1)d valeurs pour le mot cle ANGL_NAUT il en faut %(i2)d +"""), + +36 : _(""" + erreur dans les donnees mot cle facteur %(k1)s occurence %(i1)d +"""), + +39 : _(""" + il y a %(i1)d valeurs pour le mot cle %(k1)s il en faut %(i2)d +"""), + +40 : _(""" + erreur dans les donnees mot cle facteur %(k1)s occurence %(i1)d +"""), + +43 : _(""" + il y a %(i1)d valeurs pour le mot cle %(k1)s il en faut %(i2)d +"""), + +53 : _(""" + + l'identifiant d'une maille depasse les 8 caracteres autorises: + %(k1)s + maille : %(k2)s + pref_maille : %(k3)s +"""), + +54 : _(""" + l'utilisation de 'pref_nume' est recommandee. +"""), + +55 : _(""" + comportement : %(k1)s non trouve +"""), + +56 : _(""" + pour la maille %(k1)s +"""), + +58 : _(""" + Le matériau ne dépend pas des bons paramètres %(k1)s + depend de %(k1)s il ne peut dependre que de %(k2)s +"""), + +59 : _(""" + erreur lors de la definition de la courbe de traction : %(k1)s + le premier point de la courbe de traction %(k2)s a pour abscisse: %(r1)f + +"""), + +60 : _(""" + erreur lors de la definition de la courbe de traction :%(k1)s + le premier point de la courbe de traction %(k2)s a pour ordonnee: %(r1)f + +"""), + +61 : _(""" + Erreur lors de la definition de la courbe de traction : %(k1)s + + la courbe de traction doit satisfaire les conditions suivantes : + - les abscisses (deformations) doivent etre strictement croissantes, + - la pente entre 2 points successifs doit etre inferieure a la pente + elastique (module d'Young) entre 0 et le premier point de la courbe. + + pente initiale (module d'Young) : %(r1)f + pente courante : %(r2)f + pour l'abscisse : %(r3)f + +"""), + +62 : _(""" + Courbe de traction : %(k1)s points presques alignés. Risque de PB dans STAT_NON_LINE + en particulier en C_PLAN + pente initiale : %(r1)f + pente courante: %(r2)f + precision relative: %(r3)f + pour l'abscisse: %(r4)f + +"""), + +63 : _(""" + erreur lors de la definition de la courbe de traction %(k1)s + le premier point de la fonction indicee par : %(i1)d de la nappe %(k2)s + a pour abscisse: %(r1)f + +"""), + +64 : _(""" + erreur lors de la definition de la courbe de traction %(k1)s + le premier point de la fonction indicee par : %(i1)d de la nappe %(k2)s + a pour ordonnee: %(r1)f + +"""), + +65 : _(""" + erreur lors de la definition de la courbe de traction %(k1)s + pente initiale : %(r1)f + pente courante: %(r2)f + pour l'abscisse: %(r3)f + +"""), + +73 : _(""" + erreur de programmation type de fonction non valide %(k1)s +"""), + +74 : _(""" + comportement :%(k1)s non trouvé +"""), + +75 : _(""" + comportement %(k1)s non trouvé pour la maille %(k2)s +"""), +77 : _(""" + manque le parametre %(k1)s +"""), +78 : _(""" + pour la maille %(k1)s +"""), +80 : _(""" + Noeud sur l'axe Z +"""), + +81 : _(""" + La maille de nom %(k1)s n'est pas de type SEG3 ou SEG4, + elle ne sera pas affectée par %(k2)s +"""), + +82 : _(""" + GROUP_MA : %(k1)s +"""), + +83 : _(""" + Erreur a l'interpolation, paramètres non trouvé. +"""), +84 : _(""" + Mots clés: CARA_HYDR, VALE_HYDR, il manque des données: + - Nombre de données recues : %(i1)d + - Nombre de données attendues : %(i2)d + - Données recues : %(k1)s %(k2)s %(k3)s, ... + + Risques & Conseils + Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE +"""), + +85 : _(""" + Mots clés: CARA_GRAPPE, VALE_GRAPPE, il manque des données: + - Nombre de données recues : %(i1)d + - Nombre de données attendues : %(i2)d + - Données recues : %(k1)s %(k2)s %(k3)s, ... + + Risques & Conseils + Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE +"""), + +86 : _(""" + Mots clés: CARA_COMMANDE, VALE_COMMANDE, il manque des données: + - Nombre de données recues : %(i1)d + - Nombre de données attendues : %(i2)d + - Données recues : %(k1)s %(k2)s %(k3)s, ... + + Risques & Conseils + Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE +"""), + +87 : _(""" + Mots clés: CARA_MANCHETTE, VALE_MANCHETTE, il manque des données: + - Nombre de données recues : %(i1)d + - Nombre de données attendues : %(i2)d + - Données recues : %(k1)s %(k2)s %(k3)s, ... + + Risques & Conseils + Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE +"""), + +88 : _(""" + Mots clés: CARA_GUIDE, VALE_GUIDE, il manque des données: + - Nombre de données recues : %(i1)d + - Nombre de données attendues : %(i2)d + - Données recues : %(k1)s %(k2)s %(k3)s, ... + + Risques & Conseils + Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE +"""), + +89 : _(""" + Mots clés: CARA_ASSEMBLAGE, VALE_ASSEMBLAGE, il manque des données: + - Nombre de données recues : %(i1)d + - Nombre de données attendues : %(i2)d + - Données recues : %(k1)s %(k2)s %(k3)s, ... + + Risques & Conseils + Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE +"""), + +90 : _(""" + Mots clés: CARA_PDC, VALE_PDC, il manque des données: + - Nombre de données recues : %(i1)d + - Nombre de données attendues : %(i2)d + - Données recues : %(k1)s %(k2)s %(k3)s, ... + + Risques & Conseils + Voir la documentation d'AFFE_CHAR_MECA / GRAPPE_FLUIDE +"""), + +91 : _(""" + depend de %(k1)s +"""), + +92 : _(""" + il ne peut dependre que de %(k1)s +"""), + +93 : _(""" + ... +"""), + +94 : _(""" + On ne peut pas appliquer un cisaillement 2d sur une modélisation 3D +"""), +95 : _(""" + ERREUR: l'auto-spectre est a valeurs négatives +"""), } diff --git a/Aster/Cata/cataSTA9/Messages/oar0.py b/Aster/Cata/cataSTA9/Messages/oar0.py new file mode 100644 index 00000000..897c64e9 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/oar0.py @@ -0,0 +1,52 @@ +#@ MODIF oar0 Messages DATE 17/07/2007 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +Les coupes mécanique et thermique doivent partager les memes abscisses. +"""), + +2: _(""" +Erreur d'interpolation: %(k1)s +"""), + +3: _(""" +Les coupes du revetement et de la structure doivent partager une abscisse commune. +"""), + +4: _(""" +Erreur d'accès aux données. +"""), + +5: _(""" +Fonction non implantée. +"""), + +6: _(""" +Mot clé facteur inconnu. +"""), + +7: _(""" +Erreur à l'ouverture du fichier. +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/observation.py b/Aster/Cata/cataSTA9/Messages/observation.py new file mode 100644 index 00000000..2c8ad16d --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/observation.py @@ -0,0 +1,92 @@ +#@ MODIF observation Messages DATE 19/12/2007 AUTEUR ABBAS M.ABBAS +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== +def _(x) : return x + +cata_msg = { + +1 : _(""" + l'entité %(k1)s n'est pas possible %(k2)s +"""), + +2 : _(""" + erreur dans les données d'observation + le noeud %(k1)s n'existe pas dans %(k2)s +"""), + +3 : _(""" + erreur dans les données d'observation + le GROUP_NO %(k1)s n'existe pas dans %(k2)s +"""), + +4 : _(""" + erreur dans les données d'observation + la maille %(k1)s n'existe pas dans %(k2)s +"""), + +5 : _(""" + erreur dans les données d'observation + le GROUP_MA %(k1)s n'existe pas dans %(k2)s +"""), + +6 : _(""" + erreur dans les données d'observation + pour "NOM_CHAM" %(k1)s , il faut renseigner %(k2)s ou %(k3)s +"""), + +7 : _(""" + erreur dans les données d'observation + pour "NOM_CHAM" %(k1)s , il faut renseigner %(k2)s et %(k3)s +"""), + +45 : _(""" + le champ absolu n'est accessible qu'en présence de modes statiques +"""), + +49 : _(""" + il faut definir "LIST_ARCH" ou "LIST_INST" ou "INST" ou "PAS_OBSE" + au premier mot cle facteur "OBSERVATION" +"""), + +50 : _(""" + seule la valeur de "LIST_ARCH" ou "LIST_INST" ou "INST" ou "PAS_OBSE" + du premier mot cle facteur "OBSERVATION" est prise en compte +"""), + +79 : _(""" + DDL inconnu sur le noeud ou la maille specifiée pour le suivi +"""), + +85 : _(""" +Le nombre de SUIVI_DDL est limité à 4. +"""), + +86 : _(""" +Mélange de champs de nature différente dans le meme mot-clé facteur SUIVI. +"""), + +87 : _(""" +Mélange de champs de nature différente dans le meme mot-clé facteur OBSERVATION +"""), + +99: _(""" + le champ %(k1)s est incompatible avec la commande %(k2)s +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/post0.py b/Aster/Cata/cataSTA9/Messages/post0.py new file mode 100644 index 00000000..155efc53 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/post0.py @@ -0,0 +1,100 @@ +#@ MODIF post0 Messages DATE 16/10/2007 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +Définition incorrecte de la ligne de coupe. +"""), + +2: _(""" +Valeurs incorrectes pour VECT_Y. +"""), + +3: _(""" +Valeurs incorrectes pour VECT_Y: x colinéaire a y. +"""), + +4: _(""" +Le vecteur Y n'est pas orthogonal a la ligne de coupe. +Le vecteur Y a ete orthonormalise pour vous. +VECT_Y=(%(r1)f,%(r2)f,%(r3)f) +"""), + +5: _(""" +Le type %(k1)s n'est pas cohérent avec le choix du repère (REPERE %(k2)s). +"""), + +6: _(""" +Définition incorrecte de COOR_ORIG et CENTRE. +"""), + +7: _(""" +Définition incorrecte de DNOR. +"""), + +8: _(""" +Attention la ligne de coupe traverse des zones sans matière : + - Les coordonnées des points sur la ligne de coupe sont : + %(k1)s + - Les coordonnées des points éliminés (car hors de la matière) sont: + %(k2)s +"""), + +9: _(""" +Nom du modèle absent dans le concept résultat %(k1)s. +"""), + +10: _(""" +Veuillez renseigner le MODELE si vous utilisez un CHAM_GD. +"""), + +11: _(""" +Dimensions de maillage et de coordonnées incohérentes. +"""), + +12: _(""" +Le mot-clé 'DNOR' est obligatoire en 3D pour le type 'ARC'. +"""), + +13: _(""" +Le group_no %(k1)s n'est pas dans le maillage %(k2)s. +"""), + +14: _(""" +Le group_ma %(k1)s n'est pas dans le maillage %(k2)s. +"""), + +15: _(""" +le group_ma %(k1)s contient la maille %(k2)s qui n'est pas de type SEG. +"""), + +16: _(""" +On ne peut pas combiner des lignes de coupes de type ARC +avec des lignes de coupes SEGMENT ou GROUP_NO. +"""), + +17: _(""" +Le champ %(k1)s n'est pas traité par macr_ligne_coupe en repère %(k2)s. +Le calcul est effectué en repère global. +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/postrccm.py b/Aster/Cata/cataSTA9/Messages/postrccm.py index 000f165c..949a4d26 100644 --- a/Aster/Cata/cataSTA9/Messages/postrccm.py +++ b/Aster/Cata/cataSTA9/Messages/postrccm.py @@ -1,4 +1,4 @@ -#@ MODIF postrccm Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF postrccm Messages DATE 19/02/2008 AUTEUR VIVAN L.VIVAN # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -84,12 +84,12 @@ cata_msg={ 13: _(""" Probleme lors du passage du CH_MATER en CARTE - Contactez l'assistance téléphonique. + Contactez le support """), 14: _(""" Probleme lors du passage du TEMPE_REF en CARTE - Contactez l'assistance téléphonique. + Contactez le support """), 15: _(""" @@ -115,7 +115,7 @@ cata_msg={ 19: _(""" si on est la, y a un bug! - Contactez l'assistance téléphonique. + Contactez le support """), 20: _(""" @@ -155,11 +155,6 @@ cata_msg={ occurence situation %(i2)d et %(i3)d """), - - - - - 28: _(""" erreur données, pour la situation numero %(i1)d on n'a pas pu récupérer le "RESU_MECA" correspondant au numéro du cas de charge %(i2)d @@ -171,13 +166,13 @@ cata_msg={ """), 30: _(""" - probleme pour recuperer ioc seisme. - Contactez l'assistance téléphonique. + probleme pour recuperer IOC SEISME. + Contactez le support """), 31: _(""" probleme avec TYPEKE. - Contactez l'assistance téléphonique. + Contactez le support """), 32: _(""" @@ -193,4 +188,77 @@ cata_msg={ D_AMORC : %(r2)12.5E """), +34: _(""" + avec une ou des situations de passage, il faut définir au plus 3 groupes +"""), + +35: _(""" + avec une ou des situations de passage, il ne faut définir qu'un seul séisme. +"""), + +36: _(""" + bug ! contactez l'assistance. +"""), + +37: _(""" + -> L'ordre des noeuds de la table %(k1)s n'est pas respecté. + Les noeuds doivent etre rangés d'une des peaux vers l'autre. + -> Risque & Conseil: + Veuillez consulter la documentation U2.09.03. +"""), + +38: _(""" + -> Les noeuds de la ligne de coupe %(k2)s (table %(k1)s) ne sont pas alignés: + - distance maximale à la ligne de coupe: %(r1)f + - longueur de la ligne de coupe : %(r2)f + -> Risque & Conseil: + Les calculs avec POST_RCCM ne sont théoriquement valides que pour des lignes + de coupe rectilignes. Vérifier les données d'entrée ou utiliser + MACR_LIGN_COUPE pour extraire le résultat sur un segment de droite. +"""), + +39: _(""" + -> Il est préférable de fournir des tables comportant les coordonnées des noeuds. +"""), + +40: _(""" + -> Pour le cas unitaire, il doit y avoir un seul ligament. + La table %(k1)s contient %(i1)d ligaments. + -> Risque & Conseil: + Veuillez revoir le contenu de votre table. + """), + +41: _(""" + -> Les tables %(k1)s et %(k2)s ont des noeuds possédant + des coordonnées différentes: + - table %(k1)s : %(k3)s = %(r1)f + - table %(k2)s : %(k3)s = %(r2)f + -> Risque & Conseil: + Veuillez revoir le contenu de vos tables +"""), + + 42: _(""" + -> Les tables %(k1)s et %(k2)s ne sont pas cohérentes en terme de nombre + de ligaments: + - table %(k1)s : %(i1)d ligaments + - table %(k2)s : %(i2)d ligaments + -> Risque & Conseil: + Veuillez revoir le contenu de vos tables +"""), + +43: _(""" + -> Les tables %(k1)s et %(k2)s ne sont pas cohérentes en terme d'instant: + Une différence a été observée entre les valeurs d'instant d'un meme point + - table %(k1)s : INST = %(r1)f + - table %(k2)s : INST = %(r2)f + -> Risque & Conseil: + Veuillez revoir le contenu de vos tables + +"""), + +44: _(""" + probleme pour récupérer dans la table %(k1)s la valeur du parametre %(k2)s + pour le parametre %(k3)s de valeur %(r1)12.5E. +"""), + } diff --git a/Aster/Cata/cataSTA9/Messages/postrele.py b/Aster/Cata/cataSTA9/Messages/postrele.py index 6ead235c..ab2e68ab 100644 --- a/Aster/Cata/cataSTA9/Messages/postrele.py +++ b/Aster/Cata/cataSTA9/Messages/postrele.py @@ -1,8 +1,8 @@ -#@ MODIF postrele Messages DATE 03/04/2007 AUTEUR VIVAN L.VIVAN +#@ MODIF postrele Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,159 +20,154 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" +1 : _(""" création/extension de la table %(k1)s """), -2: _(""" - ***************************************** - * post_traitement numéro : %(i1)d - * inexistence de champ-gd - * pas de post-traitement - ***************************************** +2 : _(""" + post_traitement numéro : %(i1)d + inexistence de CHAM_GD + pas de post-traitement """), -3: _(""" - ********************************************************** - * post_traitement numéro : %(i1)d - * aucunes mailles ne correspondent aux criteres demandés - * pas de post-traitement - ********************************************************** +3 : _(""" + post_traitement numéro : %(i1)d + aucune maille ne correspond aux critères demandés + pas de post-traitement """), -4: _(""" - on ne traite pas les multicouches -"""), - -5: _(""" +5 : _(""" il manque le vecteur des composantes "NOCP". - Contactez l'assistance téléphonique. + Contactez le support. """), -6: _(""" +6 : _(""" chemin nul ou défini en un noeud """), -7: _(""" +7 : _(""" le nombre de composantes à traiter est limité à 6 pour operation "MOYENNE". utiliser "NOM_CMP" avec au plus 6 composantes. """), -8: _(""" +8 : _(""" initialisation de la table %(k1)s """), -9: _(""" +9 : _(""" pas de champ trouvé pour l'option %(k1)s """), -10: _(""" - parametre %(k1)s de type %(k2)s +10 : _(""" + paramètre %(k1)s de type %(k2)s """), -11: _(""" +11 : _(""" on ne traite que les champs complexes """), -12: _(""" +12 : _(""" tableau de travail limité, reduire le nombre de composantes à traiter """), -13: _(""" - + de 3000 cmps! - Contactez l'assistance téléphonique. +13 : _(""" + plus de 3000 composantes. + Contactez le support """), -14: _(""" - en repere local, on ne traite pas le champ %(k1)s +14 : _(""" + en repère local, on ne traite pas le champ %(k1)s """), -15: _(""" - icoef trop grand - Contactez l'assistance téléphonique. +15 : _(""" + ICOEF trop grand + Contactez le support """), -16: _(""" - probleme maillage - Contactez l'assistance téléphonique. +16 : _(""" + problème maillage + Contactez le support """), -17: _(""" - on ne traite que des champs de type "DEPL_R" pour un changement de repere +17 : _(""" + on ne traite que des champs de type "DEPL_R" pour un changement de repère """), -18: _(""" +18 : _(""" le type de maille %(k1)s n'est pas traité """), -19: _(""" +19 : _(""" mauvaise définition du chemin, probleme de continuité du chemin sur une maille diminuer la précision dans l'opérateur INTE_MAIL_(2D/3D) """), -20: _(""" +20 : _(""" on ne traite pas ce cas - Contactez l'assistance téléphonique. + Contactez le support """), -21: _(""" +21 : _(""" avec VECT_Y, le groupe de noeuds doit contenir au moins 2 noeuds """), -22: _(""" +22 : _(""" avec VECT_Y, il faut préciser - soit un seul groupe de noeuds - soit plusieurs noeuds + - soit un seul groupe de noeuds + - soit plusieurs noeuds """), -23: _(""" +23 : _(""" on ne peut pas mélanger des arcs et des segments. """), -24: _(""" +24 : _(""" chemin de maille vide """), -25: _(""" +25 : _(""" contradiction avec INTE_MAIL_2D """), -26: _(""" - changement de repere: - champ non traité %(k1)s option de calcul %(k2)s +26 : _(""" + changement de repère: + champ non traité %(k1)s + option de calcul %(k2)s """), -27: _(""" +27 : _(""" noeud sur l'AXE_Z - maille: %(k1)s, noeud: %(k2)s, coordonnées: %(r1)f + maille : %(k1)s + noeud : %(k2)s + coordonnées : %(r1)f """), -28: _(""" - les noeuds du maillage ne sont pas tous dans un meme plan z = cst - changement de repere non traité +28 : _(""" + les noeuds du maillage ne sont pas tous dans un meme plan Z = CST + changement de repère non traité """), -29: _(""" - on ne sait pas faire ce post-traitement pour le chemin %(k1)s en repere %(k2)s +29 : _(""" + on ne sait pas faire ce post-traitement pour le chemin %(k1)s en repère %(k2)s """), -30: _(""" +30 : _(""" le noeud %(k1)s est confondu avec l'origine """), -31: _(""" +31 : _(""" le noeud %(k1)s est sur l'AXE_Z """), -32: _(""" - les noeuds du maillage ne sont pas tous dans un meme plan z = cst +32 : _(""" + les noeuds du maillage ne sont pas tous dans un meme plan Z = CST option TRAC_NOR non traitée utiliser l'option TRAC_DIR """), -33: _(""" +33 : _(""" option non traitée: %(k1)s, post-traitement: %(i1)d les invariants tensoriels sont calculés pour les options : %(k2)s @@ -196,7 +191,7 @@ cata_msg={ %(k20)s """), -34: _(""" +34 : _(""" option non traitée: %(k1)s, post-traitement: %(i1)d les traces normales sont calculées pour les options : %(k2)s @@ -220,7 +215,7 @@ cata_msg={ %(k20)s """), -35: _(""" +35 : _(""" option non traitée: %(k1)s, post-traitement: %(i1)d les traces directionnelles sont calculées pour les options : %(k2)s @@ -247,23 +242,23 @@ cata_msg={ %(k23)s """), -36: _(""" +36 : _(""" trace directionnelle, post-traitement: %(i1)d direction nulle, pas de calul """), -37: _(""" +37 : _(""" attention post-traitement %(i1)d seules les composantes du tenseur des contraintes sont traitées """), -38: _(""" +38 : _(""" post-traitement %(i1)d composante non traitée dans un changement de repere - Contactez l'assistance téléphonique. + Contactez le support """), -39: _(""" +39 : _(""" post-traitement %(i1)d grandeur %(k1)s non traitée dans un changement de repere les changements de repere sont possibles @@ -272,106 +267,125 @@ cata_msg={ pour les grandeurs %(k7)s %(k8)s """), -40: _(""" +40 : _(""" le noeud numéro %(i1)d n'est pas connecté à la maille de nom %(k1)s """), -41: _(""" +41 : _(""" champ inexistant nom_cham: %(k1)s nume_ordre: %(i1)d """), -42: _(""" +42 : _(""" occurence %(i1)d du mot clé facteur ACTION les listes arguments des mots clés RESULTANTE et MOMENT doivent etre de meme longueur cette longueur doit etre de 2 ou 3 """), -43: _(""" +43 : _(""" occurence %(i1)d du mot clé facteur ACTION la liste arguments du mot clé POINT doit etre de longueur 2 ou 3 """), -44: _(""" +44 : _(""" occurence %(i1)d du mot clé facteur ACTION on ne peut accéder au RESULTAT de nom %(k1)s et de type %(k2)s par %(k3)s ou par %(k4)s """), -45: _(""" +45 : _(""" occurence %(i1)d du mot clé facteur ACTION on ne peut accéder au RESULTAT de nom %(k1)s et de type %(k2)s par %(k3)s """), -46: _(""" +46 : _(""" occurence %(i1)d du mot clé facteur ACTION le NOM_CHAM %(k1)s n'est pas autorisé pour le RESULTAT %(k2)s de type %(k3)s ou le NOM_CHAM est autorisé mais aucun champ effectif n'existe. """), -47: _(""" +47 : _(""" occurence %(i1)d du mot clé facteur ACTION le ou les champs élémentaires mis en jeu est ou sont donnés aux pointe de gauss ce ou ces champs ne sont pas traités. """), -48: _(""" +48 : _(""" occurence %(i1)d du mot clé facteur ACTION la composante %(k1)s n'est pas présente au catalogue des grandeurs. """), -49: _(""" +49 : _(""" occurence %(i1)d du mot clé facteur ACTION le maillage de la courbe %(k1)s est différent du maillage du champ à traiter %(k2)s """), -50: _(""" +50 : _(""" occurence %(i1)d du mot clé facteur ACTION le groupe de noeuds %(k1)s ne fait pas parti du maillage sous jacent au champ à traiter. """), -51: _(""" +51 : _(""" occurence %(i1)d du mot clé facteur ACTION le noeud %(k1)s ne fait pas parti du maillage sous jacent au champ à traiter. """), -52: _(""" +52 : _(""" on ne traite pas le FORMAT_C %(k1)s """), -53: _(""" +53 : _(""" NEC trop grand - Contactez l'assistance téléphonique. + Contactez le support """), -54: _(""" +54 : _(""" occurence %(i1)d du mot clé facteur ACTION Impossible de récupérer les composantes du champ. """), -55: _(""" +55 : _(""" la composante %(k1)s est en double. """), -56: _(""" +56 : _(""" la composante %(k1)s n'est pas une composante de %(k2)s """), -57: _(""" +57 : _(""" la grandeur %(k1)s est inconnue au catalogue. """), -58: _(""" +58 : _(""" erreur de programmation - Contactez l'assistance téléphonique. + Contactez le support """), -59: _(""" +59 : _(""" Le contenu de la table n'est pas celui attendu ! - Contactez l'assistance téléphonique. + Contactez le support """), -60: _(""" +60 : _(""" arret sur erreurs - Contactez l'assistance téléphonique. + Contactez le support +"""), + +61 : _(""" + Nombre de cycles admissibles négatif, + verifier la courbe de WOLHER + contrainte calculee = %(r1)f nadm = %(r2)f + +"""), + +62 : _(""" + Attention lors de la définition de votre liste de noeuds, + %(i1)d noeud est hors de la matière + +"""), + +63 : _(""" + Attention lors de la définition de votre liste de noeuds, + %(i1)d noeuds sont hors de la matière + """), } diff --git a/Aster/Cata/cataSTA9/Messages/poutre0.py b/Aster/Cata/cataSTA9/Messages/poutre0.py new file mode 100644 index 00000000..9912e536 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/poutre0.py @@ -0,0 +1,36 @@ +#@ MODIF poutre0 Messages DATE 04/09/2007 AUTEUR DURAND C.DURAND +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +GROUP_MA et GROUP_MA_BORD incohérents. +"""), + +2: _(""" +GROUP_MA et NOEUD incohérents. +"""), + +3: _(""" +Il faut donner un noeud unique. +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/precalcul.py b/Aster/Cata/cataSTA9/Messages/precalcul.py index c95b1401..81f1549e 100644 --- a/Aster/Cata/cataSTA9/Messages/precalcul.py +++ b/Aster/Cata/cataSTA9/Messages/precalcul.py @@ -1,4 +1,4 @@ -#@ MODIF precalcul Messages DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF precalcul Messages DATE 09/10/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -18,54 +18,26 @@ # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== - def _(x) : return x -cata_msg={ - -1: _(""" -Le type du parametre CARA_ELEM nomme <%(k1)s> est inconnu. Contactez les developpeurs. -"""), - -2: _(""" -Le type du parametre XFEM nomme <%(k1)s> est inconnu. Contactez les developpeurs. -"""), - -11: _(""" -Le type de parametre pour le champ IN de temperature est inconnu (ni scalaire, ni fonction mais <%(k1)s>). Contactez les developpeurs. -"""), - -20: _(""" -Le type de calcul du chargement est invalide : %(k1)s. Contactez les developpeurs. -"""), - -50: _(""" -Depassement de la capacite pour les tableaux de champs d'entree de CALCUL. Contactez les developpeurs. -"""), - -51: _(""" -On tente d'ecraser le parametre de champ d'entree de CALCUL deja existant nomme <%(k1)s> par un autre parametre d'entree nomme <%(k2)s>. Contactez les developpeurs. -"""), - -52: _(""" -On tente d'ecraser le champ d'entree de CALCUL deja existant nomme <%(k1)s> par un autre champ d'entree nomme <%(k2)s>. Contactez les developpeurs. -"""), +cata_msg = { -60: _(""" -Appel à CALCUL. Le nom du paramètre de champ d'entree numéro %(i1)d est vide. +60 : _(""" +Appel à CALCUL +Le nom du paramètre de champ d'entree numéro %(i1)d est vide. """), -61: _(""" -Appel à CALCUL. Le champ d'entree numéro %(i1)d est vide. +61 : _(""" +Appel à CALCUL +Le champ d'entrée numéro %(i1)d est vide. """), -62: _(""" +62 : _(""" Appel à CALCUL. Le nom du paramètre de champ de sortie numéro %(i1)d est vide. """), -63: _(""" +63 : _(""" Appel à CALCUL. Le champ de sortie numéro %(i1)d est vide. """), - } diff --git a/Aster/Cata/cataSTA9/Messages/prepost.py b/Aster/Cata/cataSTA9/Messages/prepost.py index 172d9d75..9f3f2137 100644 --- a/Aster/Cata/cataSTA9/Messages/prepost.py +++ b/Aster/Cata/cataSTA9/Messages/prepost.py @@ -1,8 +1,8 @@ -#@ MODIF prepost Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF prepost Messages DATE 17/03/2008 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,406 +20,198 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - group_no : %(k1)s inconnu dans le maillage +1 : _(""" + GROUP_NO : %(k1)s inconnu dans le maillage """), -2: _(""" - pour calculer le dommage il faut definir le comportement "fatigue" dans defi_materiau +4 : _(""" + méthode %(k1)s illicite """), -3: _(""" - hors bornes definies dans cescre. +5 : _(""" + la longueur du défaut n'est pas en accord avec les tables définies + coté revetement et coté métal de base """), -4: _(""" - methode %(k1)s illicite +8 : _(""" + prolongement à gauche exclu """), -5: _(""" - la longueur du defaut n est pas en accord avec les tables definies cote revetement et cote metal de base +9 : _(""" + prolongement à droite exclu """), -6: _(""" - incoherence catalogue - fortran +10 : _(""" + phénomène non valide """), -7: _(""" - erreur_dvp +11 : _(""" + nous ne pouvons pas récupérer la valeur du module d'Young : E. """), -8: _(""" - prolongement a gauche exclu +12 : _(""" + nous ne pouvons pas récupérer la valeur du coefficient de Poisson : NU. """), -9: _(""" - prolongement a droite exclu +21 : _(""" + Intersection Droite / Cercle + pas d'intersection trouvée """), -10: _(""" - phenomene non valide +27 : _(""" + volume négatif """), -11: _(""" - nous ne pouvons pas recuperer la valeur du module d'young : e. +28 : _(""" + volume supérieur à 1.d6 """), -12: _(""" - nous ne pouvons pas recuperer la valeur du coefficient de poisson : nu. +31 : _(""" + structure de données RESULTAT inconnue %(k1)s """), -13: _(""" - le type d entite %(k1)s est inconnu. +32 : _(""" + l'impression de la SD_RESULTAT %(k1)s a déjà été effectuée + avec une liste de numéros d'ordre dont le premier numéro etait + le meme que celui de la liste actuelle. + on arrete l'impression afin d'éviter l'écrasement des fichiers écrits. """), -14: _(""" - ipoi1 et ipoi4 non traite +33 : _(""" + problème à l'ouverture du fichier résultat ENSIGHT %(k1)s + pour l'impression du CHAM_GD %(k2)s """), -15: _(""" - sprim negative bizarre +34 : _(""" + probleme à l'ouverture du fichier résultat ENSIGHT %(k1)s + pour l'impression du CONCEPT %(k2)s """), -16: _(""" - airtot ou ener nul +36 : _(""" + le champ de: %(k1)s a des éléments ayant des sous-points. + ces éléments ne seront pas traités. """), -17: _(""" - do102=0 +38 : _(""" + le vecteur défini sous le mot clé ACTION/AXE_Z a une norme nulle. """), -18: _(""" - probleme intersection cylindre tetraedre +46 : _(""" + erreur dans la création du fichier de maillage au format GIBI. + Celui-ci ne contient pas d'objet de type maillage. + + Risque & Conseil: + Assurez vous que votre procédure gibi sauvegarde bien les objets du maillage (pile 32 dans le formalisme GIBI) """), -19: _(""" - voli negative bizarre +51 : _(""" + l'option de calcul " %(k1)s " n'existe pas dans la structure de données %(k2)s """), -20: _(""" - voltot ou ener nul +52 : _(""" + le champ " %(k1)s " pour l'option de calcul " %(k2)s ", n'a pas été notée + dans la structure de données %(k3)s """), -21: _(""" - pas inters +53 : _(""" + la dimension du problème est invalide : il faut : 1d, 2d ou 3d. """), -22: _(""" - delta negatif pb lors de recherche intersection +54 : _(""" + nombre de noeuds supérieur au maximum autorisé : 27. """), -23: _(""" - pb n2+n3 +55 : _(""" + objet &&GILIRE.INDIRECT inexistant + problème à la lecture des points """), -24: _(""" - cas idiot +56 : _(""" + type de maille : %(k1)s inconnu de la commande PRE_GIBI. """), -25: _(""" - pb en dehors des 2 points +57 : _(""" + nombre d'objets supérieur au maximum autorisé : 99999. """), -26: _(""" - probleme n2+n3 +59 : _(""" + le maillage GIBI est peut etre erroné : + il est écrit : "NIVEAU RREUR N_ERR" avec N_ERR est >0 . + on continue quand meme, mais si vous avez des problèmes plus loin ... """), -27: _(""" - volume negatif -"""), - -28: _(""" - volume superieur a 1.d6 -"""), - -29: _(""" - tbelzo depassement -"""), - -30: _(""" - tbnozo depassement -"""), - -31: _(""" - sd resultat inconnue %(k1)s -"""), - -32: _(""" - l'impression de la sd_resultat %(k1)s a deja ete effectuee avec une liste de numeros d'ordre dont le premier numero etait le meme que celui de la liste actuelle. on arrete l'impression afin d'eviter l'ecrasement des fichiers ecrits. -"""), - -33: _(""" - probleme a l'ouverture du fichier resultat ensight %(k1)s pour l'impression du cham_gd %(k2)s -"""), - -34: _(""" - probleme a l'ouverture du fichier resultat ensight %(k1)s pour l'impression du concept %(k2)s -"""), - -35: _(""" - code %(k1)s inconnu -"""), - -36: _(""" - le champ de: %(k1)s a des elements ayant des sous-points. ces elements ne seront pas traites. -"""), - -37: _(""" - vraiment desole -"""), - -38: _(""" - le vecteur est "axe_z" nul. -"""), - -39: _(""" - le coefficient de goodman n'est pas calculable -"""), - -40: _(""" - le coefficient de gerber n'est pas calculable -"""), - -41: _(""" - pour calculer le dommage de lemaitre-sermage il faut definir le comportement domma_lemaitre dans defi_materiau -"""), - -42: _(""" - pour calculer le dommage de lemaitre_sermage il faut definir le comportement elas_fo dans defi_materiau -"""), - -43: _(""" - le materiau est obligatoire pour le calcul du dommage par taheri_manson -"""), - -44: _(""" - une fonction doit etre introduite sous le mot cle taheri_fonc -"""), - -45: _(""" - une nappe doit etre introduite sous le mot cle taheri_nappe -"""), - - - - - - - - -47: _(""" - la courbe de manson_coffin est necessaire pour le calcul du dommage taheri_manson_coffin -"""), - -48: _(""" - le materiau est obligatoire pour le calcul du dommage par taheri_mixte -"""), - -49: _(""" - la courbe de manson_coffin est necessaire pour le calcul du dommage taheri_mixte -"""), - -50: _(""" - la courbe de wohler est necessaire pour le calcul du dommage taheri_mixte -"""), - -51: _(""" - l'option de calcul " %(k1)s " n'existe pas dans la structure de donnees %(k2)s -"""), - -52: _(""" - le champ " %(k1)s " pour l'option de calcul " %(k2)s ", n'a pas ete notee dans la structure de donnees %(k3)s -"""), - -53: _(""" - la dimension du probleme est invalide : il faut : 1d,2d ou 3d. -"""), - -54: _(""" - nombre de noeuds superieur au maxi autorise : 27. -"""), - -55: _(""" - objet &&gilire.indirect inexistant. probleme a la lecture des points -"""), - -56: _(""" - type de maille : %(k1)s inconnu de pre_gibi. -"""), - -57: _(""" - nombre d objets superieur au maximum autorise : 99999. -"""), - -58: _(""" - bug !!! -"""), - -59: _(""" - le maillage gibi est peut etre errone : il est ecrit : "niveau rreur n_err" ou n_err est >0 .on continue quand meme, mais si vous avez des problemes plus loin ... -"""), - -60: _(""" +60 : _(""" arret sur erreur(s) """), -61: _(""" - erreur dans la recuperation du nume.prno -"""), - -62: _(""" - probleme dans la recuperation du numero de bloc auquel appartient la ligne courante. -"""), - -63: _(""" - les seuls types de valeurs acceptes pour les resu_elem sont les reels et les complexes, le descripteur de type %(k1)s est inadequat. -"""), - -64: _(""" - les seuls types de s.d. autorises sont "matr_asse" , "matr_elem" "vect_elem" et "resu_elem", le type donne %(k1)s n'est pas reconnu . -"""), - -65: _(""" - la valeur du grain d'impression est %(k1)s alors que les seules valeurs possibles sont "noeud" ou "valeur" ou "maille". -"""), - -66: _(""" - la valeur du grain d'impression est %(k1)s alors que les seules valeurs possibles sont "noeud" et "valeur" . -"""), - -67: _(""" - probleme dans le descripteur de la matrice: l'indicateur de symetrie ne correspond ni a une matrice symetrique, ni a une matrice non-symetrique . -"""), - -68: _(""" - probleme dans le descripteur de la matrice: l'indicateur type de valeur de la matrice ne correspond ni a une matrice reelle, ni a une matrice complexe . -"""), - -69: _(""" - probleme a l ouverture du fichier -"""), - -70: _(""" - probleme a la fermeture du fichier -"""), - -71: _(""" - maillage introuvable ? -"""), - -72: _(""" - med:erreur mdnoma numero %(k1)s -"""), - -73: _(""" - le champ est ecrit dans le fichier ! -"""), - -74: _(""" +74 : _(""" la variable %(k1)s n'existe pas """), -75: _(""" +75 : _(""" pas d'impression du champ """), -76: _(""" +76 : _(""" -> Il y a des groupes de noeuds dans le maillage %(k1)s. Ils n'apparaitront pas dans le fichier géométrie ENSIGHT. Seuls des groupes de mailles peuvent y etre intégrés. """), -77: _(""" - incompatibilite entre les grels +77 : _(""" + incompatibilité entre les GREL """), -78: _(""" - nec trop grand +79 : _(""" + le nombre de couches est supérieur à 1 """), -79: _(""" - nombre de couches > 1 +80 : _(""" + on traite les TRIA7 QUAD9 en oubliant le noeud centre """), -80: _(""" - on traite les tria7 quad9 en oubliant le noeud centre +84 : _(""" + élément PYRA5 non disponible dans IDEAS """), -81: _(""" - : inoa=0 +85 : _(""" + élément PYRA13 non disponible dans IDEAS """), -82: _(""" - ecriture impossible pour %(k1)s au format med +86 : _(""" + on traite les TRIA7 QUAD9 HEXA27 en oubliant le noeud centre + et les SEG4 en oubliant les 2 noeuds centraux. """), -83: _(""" - certaines composantes selectionnees ne font pas parties du ligrel +87 : _(""" + on ne sait pas imprimer le champ de type: %(k1)s + champ : %(k2)s """), -84: _(""" - element pyran5 non disponible dans ideas +88 : _(""" + on ne sait pas imprimer au format ENSIGHT le champ %(k1)s + correspondant à la grandeur : %(k2)s + il faut imprimer des champs aux noeuds à ce format. """), -85: _(""" - element pyran13 non disponible dans ideas -"""), - -86: _(""" - on traite les tria7 quad9 hexa27 en oubliant le noeud centre -"""), - -87: _(""" - on ne sait pas imprimer le champ de type: %(k1)s champ : %(k2)s -"""), - -88: _(""" - on ne sait pas imprimer au format ensight le champ %(k1)s correspondant a la grandeur : %(k2)s . il faut imprimer des champs aux noeuds a ce format. -"""), - -89: _(""" - 1 %(k1)s -"""), - -90: _(""" +90 : _(""" on ne sait pas imprimer le champ %(k1)s au format %(k2)s """), -91: _(""" - debut de l'ecriture med de %(k1)s -"""), - -92: _(""" - impossible de determiner un nom de champ med. -"""), - -93: _(""" - pas d ecriture pour %(k1)s +97 : _(""" + on ne sait pas imprimer les champs de type " %(k1)s " """), -94: _(""" - issu de %(k1)s +98 : _(""" + le champ: %(k1)s a des éléments ayant des sous-points. + il est écrit avec un format différent. """), -95: _(""" - type %(k1)s inconnu pour med. +99 : _(""" + le champ: %(k1)s a des éléments ayant des sous-points. + ces éléments ne seront pas écrits. """), -96: _(""" - fin de l'ecriture med de %(k1)s -"""), - -97: _(""" - on ne sait pas imprimer les champs de type " %(k1)s " on est vraiment desole. -"""), - -98: _(""" - le champ: %(k1)s a des elements ayant des sous-points. il est ecrit avec un format different. -"""), - -99: _(""" - le champ: %(k1)s a des elements ayant des sous-points. ces elements ne seront pas ecrits. -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/prepost2.py b/Aster/Cata/cataSTA9/Messages/prepost2.py index 729aae9a..35034486 100644 --- a/Aster/Cata/cataSTA9/Messages/prepost2.py +++ b/Aster/Cata/cataSTA9/Messages/prepost2.py @@ -1,8 +1,8 @@ -#@ MODIF prepost2 Messages DATE 30/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF prepost2 Messages DATE 10/12/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,409 +20,286 @@ def _(x) : return x -cata_msg={ +cata_msg = { -2: _(""" +2 : _(""" Modele inconnu, pas d'impression du champ %(k1)s """), -3: _(""" +3 : _(""" On ne sait pas ecrire des champs par element aux points de gauss au format CASTEM """), -4: _(""" +4 : _(""" erreur programmation """), -5: _(""" -Ce champ existe déjà dans le fichier MED. On ne peut pas le créer de nouveau. - -Nom MED du champ : "%(k1)s" - - -> Risque & Conseil : - Si vous essayez d'imprimer les différentes composantes d'un champ, - ne faites qu'un seul IMPR_RESU avec la liste des composantes à - retenir derrière le mot-clé NOM_CMP. - Pour la visualisation dans Salomé (Scalar Map par exemple), - sélectionner la composante dans Scalar Range/Scalar Mode. -"""), - -6: _(""" - med: erreur efchac numero %(k1)s -"""), - -7: _(""" - veritable ecriture des tableaux de valeurs -"""), - -8: _(""" - med: erreur efchre numero %(k1)s -"""), - -9: _(""" - med: erreur efouvr numero %(k1)s -"""), - -10: _(""" - med: erreur efnpro numero %(k1)s -"""), - -11: _(""" - probleme dans la lecture du nom du profil. -"""), - -12: _(""" - probleme dans la lecture des valeurs du profil. -"""), - -13: _(""" - med: erreur efferm numero %(k1)s -"""), - -14: _(""" - med: erreur efpfle numero %(k1)s -"""), - -15: _(""" - 1.3. type de champ inconnu : %(k1)s -"""), - -16: _(""" - creation des tableaux de valeurs a ecrire avec : -"""), - -17: _(""" - renumerotation impossible avec plus d'un sous-point -"""), - -18: _(""" +18 : _(""" la programmation ne permet pas plus de 150 cmps. """), -19: _(""" - le le nombre de cmps de la grandeur du champ depasse 500 augmenter la dimension de 4 tableaux statiques +19 : _(""" + Le nombre de cmps de la grandeur du champ dépasse 500. + Augmenter la dimension de 4 tableaux statiques """), -20: _(""" +20 : _(""" impr_resu format ensight : la composante %(k1)s du cham_gd %(k2)s n'est portee par aucun noeud du maillage et ne sera pas imprimee """), -21: _(""" +21 : _(""" impr_resu format ensight : la composante %(k1)s du champ %(k2)s du concept %(k3)s n'est portee par aucun noeud du maillage et ne sera pas imprimee """), -22: _(""" +22 : _(""" impr_resu format ensight : les trois composantes %(k1)s %(k2)s %(k3)s du cham_gd %(k4)s ne sont portees par aucun noeud du maillage et le vecteur ensight correspondant ne sera pas imprime """), -23: _(""" +23 : _(""" impr_resu format ensight : les trois composantes %(k1)s %(k2)s %(k3)s du champ %(k4)s du concept %(k5)s ne sont portees par aucun noeud du maillage et le vecteur ensight correspondant ne sera pas imprime """), -24: _(""" +24 : _(""" impression de la composante %(k1)s du champ %(k2)s sous forme d'une variable scalaire ensight %(k3)s . la composante %(k4)s n'est pas portee par certains noeuds du maillage et des valeurs nulles sont affectees a ces noeuds dans les fichiers %(k5)s """), -25: _(""" +25 : _(""" impression des 3 composantes %(k1)s %(k2)s et %(k3)s du champ %(k4)s sous forme d'une variable vectorielle ensight %(k5)s . une ou plusieurs de ces composantes ne sont pas portees par certains noeuds du maillage et des valeurs nulles sont affectees a ces noeuds pour ces composantes dans les fichiers %(k6)s """), -26: _(""" +26 : _(""" probleme a l'ouverture du fichier de valeurs ensight %(k1)s pour l'impression de la partie reelle du cham_gd %(k2)s """), -27: _(""" +27 : _(""" probleme a l'ouverture du fichier de valeurs ensight %(k1)s pour l'impression de la partie relle du champ %(k2)s du concept %(k3)s """), -28: _(""" +28 : _(""" probleme a l'ouverture du fichier de valeurs ensight %(k1)s pour l'impression de la partie imaginaire du cham_gd %(k2)s """), -29: _(""" +29 : _(""" probleme a l'ouverture du fichier de valeurs ensight %(k1)s pour l'impression de la partie imaginaire du champ %(k2)s du concept %(k3)s """), -30: _(""" +30 : _(""" probleme a l'ouverture du fichier de valeurs ensight %(k1)s .r : ce fichier existe deja !! l'impression du meme champ ouconcept resultat est demandee deux fois ou une meme composante est selectionnee 2 fois sous le mot-cle nom_cmp """), -31: _(""" +31 : _(""" probleme a l'ouverture du fichier de valeurs ensight %(k1)s pour l'impression du cham_gd %(k2)s """), -32: _(""" +32 : _(""" probleme a l'ouverture du fichier de valeurs ensight %(k1)s pour l'impression du champ %(k2)s du concept %(k3)s """), -33: _(""" +33 : _(""" probleme a l'ouverture du fichier de valeurs ensight %(k1)s : ce fichier existe deja !! l'impression du meme champ ouconcept resultat est demandee deux fois ou une meme composante est selectionnee 2 fois sous le mot-cle nom_cmp """), - - - - - - - -35: _(""" +35 : _(""" desole on ne sait pas ecrire les champs aux noeuds de representation constante et a valeurs complexes au format %(k1)s """), -36: _(""" +36 : _(""" desole on ne sait pas ecrire le champ aux noeuds %(k1)s au format %(k2)s """), -37: _(""" +37 : _(""" le maillage %(k1)s associe au cham_gd %(k2)s est different du maillage %(k3)s en operande de la commande !!!! attention !!!! """), -38: _(""" +38 : _(""" le maillage %(k1)s associe au champ %(k2)s du concept %(k3)s est different du maillage %(k4)s en operande de la commande !!!! attention !!!! """), -39: _(""" +39 : _(""" probleme a l'ouverture du fichier d'avertissement %(k1)s """), -40: _(""" +40 : _(""" aucune des composantes demandees sous le mot-cle nom_cmp pour l'impression du cham_gd %(k1)s n'est presente dans la grandeur %(k2)s """), -41: _(""" +41 : _(""" aucune des composantes demandees sous le mot-cle nom_cmp pour l'impression du champ %(k1)s du concept %(k2)s n'est presente dans la grandeur %(k3)s """), -42: _(""" +42 : _(""" impr_resu format ensight : la composante %(k1)s du cham_gd %(k2)s n'est pas portee par les noeuds du maillage et ne sera pas imprimee """), -43: _(""" +43 : _(""" impr_resu format ensight : la composante %(k1)s du champ %(k2)s du concept %(k3)s n'est pas portee par les noeuds du maillage et ne sera pas imprimee """), -44: _(""" +44 : _(""" impr_resu format ensight : aucune des trois composantes %(k1)s %(k2)s %(k3)s du cham_gd %(k4)s n'est portee par les noeuds du maillage et le vecteur ensight correspondant ne sera pas imprime """), -45: _(""" +45 : _(""" impr_resu format ensight : aucune des trois composantes %(k1)s %(k2)s %(k3)s du champ %(k4)s du concept %(k5)s n'est portee par les noeuds du maillage et le vecteur ensight correspondant ne sera pas imprime """), -46: _(""" +46 : _(""" numero d'ordre %(k1)s non licite """), -47: _(""" +47 : _(""" le numero d'ordre suivant est desormais considere comme le premier numero d'ordre demande """), -48: _(""" +48 : _(""" pour certains numeros d'ordre le champ %(k1)s n'est pas present dans la sd_resultat %(k2)s ==> des fichiers de valeurs vides seront generes afin de respecter le format ensight. """), -49: _(""" +49 : _(""" le nombre de cmps de la grandeur du champ depasse 500 augmenter la dimension du tableau ivari """), -50: _(""" +50 : _(""" une meme composante est donnee 2 fois sous le mot-cle nom_cmp lors de l'impression au format ensight par impr_resu """), -51: _(""" +51 : _(""" type de structure non traite: %(k1)s """), -52: _(""" +52 : _(""" on imprime que des champs elno """), -53: _(""" +53 : _(""" nbcmp different """), -54: _(""" +54 : _(""" composante inconnue %(k1)s """), -55: _(""" - attention, il faut specifier les noms des composantes du tenseur pour pouvoir les visualiser separement avec gmsh +55 : _(""" + L'ordre des composantes établi lorsque que vous avez renseigné le mot-clé + NOM_CMP est différent de celui du catalogue Aster: + - ordre des composantes fournies : %(k1)s %(k2)s %(k3)s %(k4)s %(k5)s %(k6)s + - ordre des composantes du catalogue : %(k7)s %(k8)s %(k9)s %(k10)s %(k11)s %(k12)s """), -56: _(""" +56 : _(""" on imprime que des champs "elga" ou "elem" """), -57: _(""" +57 : _(""" nbsp different de 1 """), -58: _(""" +58 : _(""" pas de correspondance """), -59: _(""" +59 : _(""" aucun champ trouve, pas d'impression au format "gmsh" """), -60: _(""" +60 : _(""" on ne sait pas imprimer au format "gmsh" ce type de champ: %(k1)s """), -61: _(""" +61 : _(""" erreur de programmation : nbcmp different de 1 ou 3. """), -62: _(""" +62 : _(""" on ne peut pas traiter des elements a plus de 99 noeuds ! """), -63: _(""" +63 : _(""" erreur de programation """), -64: _(""" +64 : _(""" seg4 element inexistant dans castem, converti en seg2 """), -65: _(""" +65 : _(""" tria7 element inexistant dans castem, converti en tria6 """), -66: _(""" +66 : _(""" quad9 element inexistant dans castem, converti en quad8 """), -67: _(""" +67 : _(""" les champs n'ont pas la meme grandeur """), -68: _(""" +68 : _(""" les champs n'ont pas la meme numerotation """), -69: _(""" +69 : _(""" les champs n'ont pas le meme type de valeurs """), -70: _(""" +70 : _(""" desole on ne sait pas ecrire les champs aux noeuds de representation constante au format ideas """), -71: _(""" +71 : _(""" element noeud non disponible dans ensight """), -72: _(""" +72 : _(""" element %(k1)s non disponible dans ensight """), -73: _(""" +73 : _(""" les elements tria7 seront reduits a des tria6 """), -74: _(""" +74 : _(""" les elements quad9 seront reduits a des quad8 """), -75: _(""" +75 : _(""" les elements penta15 seront reduits a des penta6 """), -76: _(""" +76 : _(""" il y a des groupes de noeuds dans le maillage %(k1)s qui n'apparaitront pas dans le fichier geometrie ensight: seuls des groupes de mailles peuvent y etre integres """), -77: _(""" +77 : _(""" la dimension du probleme est invalide : il faut : 1d, 2d, 3d. """), -78: _(""" +78 : _(""" hexa27 element inexistant dans ideas, converti en hexa20 """), -79: _(""" +79 : _(""" tria7 element inexistant dans ideas, converti en tria6 """), -80: _(""" +80 : _(""" quad9 element inexistant dans ideas, converti en quad8 """), -81: _(""" +81 : _(""" seg4 element inexistant dans ideas, converti en seg2 """), -82: _(""" +82 : _(""" element pyram5 non disponible dans ideas """), -83: _(""" +83 : _(""" element pyram13 non disponible dans ideas """), -84: _(""" - code invalide : icod2 -"""), - -85: _(""" - description du fichier med : %(k1)s -"""), - -86: _(""" - med: erreur effide numero %(k1)s -"""), - -87: _(""" - ce maillage est deja present dans le fichier. -"""), - -88: _(""" - ouverture du fichier med en mode %(k1)s %(k2)s -"""), - -89: _(""" - med: erreur efmaac numero %(k1)s -"""), - -90: _(""" - med: erreur effamc numero %(k1)s -"""), - -91: _(""" - med: erreur effame numero %(k1)s -"""), - -92: _(""" - med: famille de %(k1)s , erreur effame numero %(k2)s -"""), - -93: _(""" +93 : _(""" on ne sait pas ecrire les mailles de type %(k1)s """), -94: _(""" - med: erreur efcone numero %(k1)s -"""), - -95: _(""" - med: erreur efnome numero %(k1)s -"""), - -96: _(""" - med: erreur efnume numero %(k1)s -"""), - -97: _(""" - med: erreur efcooe numero %(k1)s -"""), - -98: _(""" - med: erreur efngau numero %(k1)s -"""), - -99: _(""" - med: erreur efgaui numero %(k1)s -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/prepost3.py b/Aster/Cata/cataSTA9/Messages/prepost3.py index b7a21448..bf2f270b 100644 --- a/Aster/Cata/cataSTA9/Messages/prepost3.py +++ b/Aster/Cata/cataSTA9/Messages/prepost3.py @@ -1,8 +1,8 @@ -#@ MODIF prepost3 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF prepost3 Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,407 +20,181 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - med: erreur efgaul numero %(k1)s -"""), - -2: _(""" - med: erreur efgaue numero %(k1)s -"""), - -3: _(""" - ecriture des localisations des points de gauss -"""), - -4: _(""" +4 : _(""" le nombre de noeuds selectionnes est superieur au nombre de noeuds du maillage. on va tronquer la liste. """), -5: _(""" +5 : _(""" chaine de caracteres trop longues : imprimer moins de champs """), -6: _(""" +6 : _(""" type inconnu" %(k1)s " """), -7: _(""" +7 : _(""" le maillage %(k1)s a deja ete ecrit au format ensight: le contenu du fichier %(k2)s sera ecrase. """), -8: _(""" +8 : _(""" probleme a l'ouverture du fichier " %(k1)s " pour impression du maillage %(k2)s au format ensight """), -9: _(""" +9 : _(""" type de base inconnu: %(k1)s """), -10: _(""" - soit le fichier n'existe pas, soit c'est une mauvaise version de hdf (utilise par med). -"""), - -11: _(""" - pas de maillage dans %(k1)s -"""), - -12: _(""" - maillage %(k1)s inconnu dans %(k2)s -"""), - -13: _(""" - instant inconnu pour ce champ et ces supports dans le fichier. -"""), - -14: _(""" - champ inconnu. -"""), - -15: _(""" - il manque des composantes. -"""), - -16: _(""" - aucune valeur a cet instant. -"""), - -17: _(""" - aucune valeur a ce nro d ordre. -"""), - -18: _(""" - mauvais nombre de valeurs. -"""), - -19: _(""" - lecture impossible. -"""), - -20: _(""" - absence de numerotation des mailles %(k1)s dans le fichier med -"""), - -21: _(""" - grandeur inconnue -"""), - -22: _(""" - composante inconnue pour la grandeur -"""), - -23: _(""" - trop de composantes pour la grandeur -"""), - -24: _(""" - lecture impossible pour %(k1)s au format med -"""), - -25: _(""" - modele obligatoire pour lire un cham_elem -"""), - -26: _(""" - med: erreur efchrl numero %(k1)s -"""), - -27: _(""" - nom de composante tronquee a 8 caracteres ( %(k1)s >>> %(k2)s ) -"""), - -28: _(""" - impossible de trouver la composante aster associee a %(k1)s -"""), - -29: _(""" - pour lire_resu / format=ideas le maillage doit normalement avoir ete lu au format ideas. -"""), - -30: _(""" - on a trouve plusieurs champs pour le meme dataset -"""), - -31: _(""" - on n'a pas trouve le numero d'ordre a l'adresse indiquee -"""), - -32: _(""" - on n'a pas trouve l'instant a l'adresse indiquee -"""), - -33: _(""" - on n'a pas trouve la frequence a l'adresse indiquee -"""), - -34: _(""" - on n'a pas trouve dans le fichier unv le type de champ -"""), - -35: _(""" - on n'pas trouve dans le fichier unv le nombre de composantes a lire -"""), - -36: _(""" - on n'pas trouve dans le fichier unv la nature du champ (reel ou complexe) -"""), - -37: _(""" - le type de champ demande est different du type de champ a lire -"""), - -38: _(""" - le champ demande n'est pas dememe nature que le champ a lire (reel/complexe) -"""), - -39: _(""" - le mot cle modele est obligatoire pour un cham_elem +29 : _(""" + pour LIRE_RESU / FORMAT=IDEAS + le maillage doit normalement avoir été lu au format IDEAS. """), -40: _(""" - pb correspondance noeud ideas +30 : _(""" + on a trouve plusieurs champs pour le même DATASET """), -41: _(""" - le champ de type elga n'est pas supporte +31 : _(""" + on n'a pas trouvé le numéro d'ordre à l'adresse indiquée """), -42: _(""" - probleme dans la lecture du nombre de champs +32 : _(""" + on n'a pas trouvé l'instant à l'adresse indiquée """), -43: _(""" - probleme dans la lecture du nombre de composantes +33 : _(""" + on n'a pas trouvé la fréquence à l'adresse indiquée """), -44: _(""" - probleme dans la lecture du nom du champ et des ses composantes +34 : _(""" + on n'a pas trouvé dans le fichier UNV le type de champ """), -45: _(""" - le champ %(k1)s n existe pas dans le fichier med +35 : _(""" + on n'a pas trouvé dans le fichier UNV le nombre de composantes à lire """), -46: _(""" - med: erreur efnpdt numero %(k1)s +36 : _(""" + on n'a pas trouvé dans le fichier UNV la nature du champ + (réel ou complexe) """), -47: _(""" - med: erreur efpdti numero %(k1)s +37 : _(""" + le type de champ demandé est différent du type de champ à lire """), -48: _(""" - med: on ne traite pas les maillages distants +38 : _(""" + le champ demande n'est pas de même nature que le champ à lire + (réel/complexe) """), -49: _(""" - probleme a la fermeture +39 : _(""" + le mot cle MODELE est obligatoire pour un CHAM_ELEM """), -50: _(""" - probleme dans le diagnostic. +40 : _(""" + pb correspondance noeud IDEAS """), -51: _(""" - med: erreur efnval numero %(k1)s +41 : _(""" + le champ de type ELGA n'est pas supporté """), -52: _(""" - probleme dans la lecture du nombre de maillages -"""), - -53: _(""" - probleme dans la lecture du nom du maillage. -"""), - -54: _(""" - attention le maillage n'est pas de type non structure -"""), - -55: _(""" - le maillage ' %(k1)s ' est inconnu dans le fichier. -"""), - -56: _(""" - attention il s'agit d'un maillage structure -"""), - -57: _(""" - ==> transfert impossible. -"""), - -58: _(""" - mauvaise definition de noresu. -"""), - -59: _(""" - mauvaise definition de nomsym. -"""), - -60: _(""" - mauvaise definition de nopase. -"""), - -61: _(""" - mauvais dimensionnement de nomast. -"""), - -62: _(""" - impossible de determiner un nom de maillage med -"""), - -63: _(""" +63 : _(""" on attend 10 ou 12 secteurs """), -64: _(""" +64 : _(""" ******* percement tube ******* """), -65: _(""" +65 : _(""" pour la variable d'acces "noeud_cmp", il faut un nombre pair de valeurs. """), -66: _(""" - le modele et le maillage introduits ne sont pas coherents -"""), - -67: _(""" - il faut donner le maillage pour une impression au format "castem". +66 : _(""" + le modèle et le maillage introduits ne sont pas cohérents """), -68: _(""" - vous voulez imprimer sur un meme fichier le maillage et un champ ce qui est incompatible avec le format gmsh +67 : _(""" + il faut donner le maillage pour une impression au format "CASTEM". """), -69: _(""" - le mot cle 'partie' est obligatoire. +68 : _(""" + vous voulez imprimer sur un même fichier le maillage et un champ + ce qui est incompatible avec le format GMSH """), -70: _(""" - le mot cle "info_maillage" est reserve au format med +69 : _(""" + L'impression d'un champ complexe nécessite l'utilisation du mot-clé PARTIE. + Ce mot-clé permet de choisir la partie du champ à imprimer (réelle ou imaginaire). """), -71: _(""" +71 : _(""" le mot cle "info_resu" est reserve au format resultat """), -72: _(""" +72 : _(""" l'impression avec selection sur des entites topologiques n'a pas de sens au format ensight : les valeurs de tous les noeuds du maillage seront donc imprimees. """), -73: _(""" +73 : _(""" l'impression avec selection sur des entites topologiques n'a pas de sens au format castem : toutes les valeurs sur tout le maillage seront donc imprimees. """), - - - - - -75: _(""" - fichier gibi cree par sort format non supporte dans cette version +75 : _(""" + fichier GIBI créé par SORT FORMAT non supporté dans cette version """), -76: _(""" - version de gibi non supporte, la lecture peut echouer ! +76 : _(""" + version de GIBI non supportée, la lecture peut échouer """), -77: _(""" - fichier gibi errone +77 : _(""" + fichier GIBI erroné """), -78: _(""" - le fichier maillage gibi est vide +78 : _(""" + le fichier maillage GIBI est vide """), -79: _(""" - cette commande ne fait que completer un resultat_compose deja existant. il faut donc que le resultat de la commande : %(k1)s soit identique a l'argument "resultat" : %(k2)s +79 : _(""" + cette commande ne fait que compléter un résultat composé déjà existant. + il faut donc que le résultat de la commande : %(k1)s + soit identique à l'argument "RESULTAT" : %(k2)s """), -80: _(""" - pour un resultat de type " %(k1)s ", on ne traite que l'option ..._noeu_... +80 : _(""" + pour un résultat de type " %(k1)s ", on ne traite que l'option ..._NOEU_... """), -81: _(""" +81 : _(""" lmat =0 """), - - - - - - - - - - - - -84: _(""" - il faut autant de cmp en i et j -"""), - -85: _(""" - il faut autant de cmp que de noeud +84 : _(""" + il faut autant de composantes en i et j """), - - - - - -87: _(""" - y a un bug 5 +85 : _(""" + il faut autant de composantes que de noeuds """), -88: _(""" - y a un bug 6 +92 : _(""" + mot clé "TEST_NOOK" non validé avec le mot clé facteur "INTE_SPEC". """), -89: _(""" - y a un bug 7 -"""), - -90: _(""" - y a un bug 8 -"""), - -91: _(""" - y a un bug 9 -"""), - -92: _(""" - mot cle "test_nook" non valide avec le mot cle facteur "inte_spec". -"""), - -93: _(""" +93 : _(""" la fonction n'existe pas. """), -94: _(""" - il faut definir deux parametres pour une nappe. +94 : _(""" + il faut définir deux paramètres pour une nappe. """), -95: _(""" - pour le parametre donne on n'a pas trouve la fonction. +95 : _(""" + pour le paramètre donné on n'a pas trouvé la fonction. """), -96: _(""" - la methode 'wohler' ne peut pas etre utilisee avec l'option %(k1)s -"""), - -97: _(""" - une courbe de wohler doit etre definie dans defi_materiau -"""), - -98: _(""" - la methode 'manson_coffin' ne peut pas etre utilisee avec l'option %(k1)s -"""), - -99: _(""" - une courbe de manson_coffin doit etre definie dans defi_materiau -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/prepost4.py b/Aster/Cata/cataSTA9/Messages/prepost4.py index 53b6f5e1..b48cbcfc 100644 --- a/Aster/Cata/cataSTA9/Messages/prepost4.py +++ b/Aster/Cata/cataSTA9/Messages/prepost4.py @@ -1,403 +1,253 @@ -#@ MODIF prepost4 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF prepost4 Messages DATE 09/10/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - la methode 'taheri_manson' ne peut pas etre utilisee avec l'option %(k1)s +5 : _(""" + l'option %(k1)s n'a pas été calculée pour la SD %(k2)s """), -2: _(""" - le nom de la fonction nappe dsigm(depsi,depsimax) doit etre present sous le mot cle 'taheri_nappe' +6 : _(""" + le champ " %(k1)s " ( %(k2)s ) n'a pas été noté dans la SD %(k3)s """), -3: _(""" - le nom de la fonctiondsigm(depsi) doit etre present sous le mot cle 'taheri_fonc' +7 : _(""" + "TUBE_NEUF" n'a de sens que pour une table d'usure existante """), -4: _(""" - la methode 'taheri_mixte' ne peut pas etre utilisee avec l'option %(k1)s +8 : _(""" + angle initial différent de -180. degrés. """), -5: _(""" - l'option %(k1)s n'a pas ete calculee dans la sd %(k2)s -"""), - -6: _(""" - le champ " %(k1)s " ( %(k2)s ) n'a pas ete note dans la sd %(k3)s -"""), - -7: _(""" - "tube_neuf" n'a de sens que pour une table d'usure existante -"""), - -8: _(""" - angle initial different de -180. degres. -"""), - -9: _(""" +9 : _(""" les angles ne sont pas croissants. """), -10: _(""" - angle final different de 180. degres. +10 : _(""" + angle final différent de 180. degrés. """), -11: _(""" - rayon mobile obligatoire avec secteur. +11 : _(""" + rayon mobile obligatoire avec secteur. """), -12: _(""" - rayon obstacle obligatoire avec secteur. +12 : _(""" + rayon obstacle obligatoire avec secteur. """), -13: _(""" +13 : _(""" la table usure en sortie est differente de celle en entree """), -14: _(""" - le nombre de secteurs en sortie est different de celui en entree +14 : _(""" + le nombre de secteurs en sortie est différent de celui en entree """), -15: _(""" +15 : _(""" probleme extraction pour la table %(k1)s """), -16: _(""" +16 : _(""" attention : le calcul du dommage n'a de sens que pour des dsp en contraintes """), -17: _(""" +17 : _(""" aucune valeur de moment presente """), -18: _(""" +18 : _(""" y a un bug: recup frequences """), -19: _(""" +19 : _(""" il faut au moins un group_ma_radier """), -20: _(""" +20 : _(""" rigidite de translation non nulle """), -21: _(""" +21 : _(""" rigidite de rotation non nulle """), -22: _(""" +22 : _(""" nombres de composantes raideurs et mode differents """), -23: _(""" +23 : _(""" nombres de group_ma et amor_interne differents """), -24: _(""" +24 : _(""" nombres de composantes amortissements et mode differents """), -25: _(""" - option sief_elga non developpee -"""), - -26: _(""" +26 : _(""" le type du concept resultat n'est ni evol_elas, ni evol_noli. """), -27: _(""" +27 : _(""" vous avez probablement archive l etat initial dans la commande stat_non_line. cela correspond au numero d ordre 0. nous ne tenons pas compte du resultat a ce numero d ordre pour le calcul de de la fatigue. """), -28: _(""" +28 : _(""" les champs de contraintes aux points de gauss sigm_noeu_depl ou sief_noeu_elga sief_noeu_elga n'ont pas ete calcules. """), -29: _(""" +29 : _(""" les champs de contraintes aux points de gauss n'existent pas. """), -30: _(""" +30 : _(""" le champ simple qui contient les valeurs des contraintes n existe pas. """), -31: _(""" +31 : _(""" le critere de fatemi et socie est prevu pour fonctionner apres un calcul elastoplastique, son utilisation apres meca_statique n'est pas prevue. """), -32: _(""" +32 : _(""" le champ de contraintes aux points de gauss sief_elga ou sief_elga_depl n'a pas ete calcule. """), -33: _(""" +33 : _(""" le champ de deformations aux points de gauss epsi_elga_depl n'a pas ete calcule. """), -34: _(""" +34 : _(""" les champs de deformations aux points de gauss n'existent pas. """), -35: _(""" +35 : _(""" le champ simple qui contient les valeurs des deformations n existe pas. """), -36: _(""" +36 : _(""" les champs de contraintes aux noeuds sigm_noeu_depl ou sief_noeu_elga n'ont pas ete calcules. """), -37: _(""" +37 : _(""" les champs de contraintes aux noeuds n'existent pas. """), -38: _(""" +38 : _(""" le champ de contraintes aux noeuds sief_noeu_elga n'a pas ete calcule. """), -39: _(""" +39 : _(""" le champ de deformations aux noeuds epsi_noeu_depl n'a pas ete calcule. """), -40: _(""" +40 : _(""" le champ de contraintes aux noeuds n'existe pas. """), -41: _(""" +41 : _(""" le champ de deformations aux noeuds n'existe pas. """), -42: _(""" - la donnee d'une courbe de wohler est obligatoire -"""), - -43: _(""" - la donnee du moment spectral d'ordre 4 est obligatoire pour le comptage des pics de contraintes -"""), - -44: _(""" - la valeur du moment spectral d'ordre 0 (lambda_0) est certainement nulle -"""), - -45: _(""" - la valeur du moment spectral d'ordre 2 (lambda_2) est nulle -"""), - -46: _(""" - la valeur du moment spectral d'ordre 4 (lambda_4) est nulle -"""), - -47: _(""" +47 : _(""" inst_init plus grand que inst_fin """), -48: _(""" - l'histoire de chargement doit avoir meme discretisation pour toutes les composantes -"""), - -49: _(""" - loi de dommage non compatible -"""), - -50: _(""" - l'histoire de la deformation plastique cumulee doit avoir meme discretisation que l'histoire des contraintes -"""), - -51: _(""" - l'histoire de la temperature doit avoir meme discretisation que l'histoire des contraintes -"""), - -52: _(""" - methode de comptage inconnue -"""), - -53: _(""" - nombre de cycles nul -"""), - -54: _(""" - l'utilisation de manson_coffin est reserve a des histoires de chargements en deformations -"""), - -55: _(""" - la courbe de manson_coffin doit etre donnee dans defi_materiau -"""), - -56: _(""" - les lois de taheri sont reservees pour des chargements en deformations -"""), - -57: _(""" +57 : _(""" erreur donnees. """), -58: _(""" - presence de point(s) que dans un secteur. -"""), - -59: _(""" - aucun cercle n'est circonscrit aux quatre points. -"""), - -60: _(""" - le decalage se trouve necessairement cote revetement. le decalage doit etre negatif -"""), - -61: _(""" - hors bornes definies dans cesmat ou cmp non affectee. -"""), - -62: _(""" - les mailles attachees au noeud traite ne sont pas affectees du meme materiau. -"""), - -63: _(""" - pour calculer le dommage max il faut renseigner cisa_plan_crit dans la commande defi_materiau -"""), - -64: _(""" - nous ne pouvons pas recuperer la valeur du parametre a du critere de matake, cf. commande: defi_materiau, operande: cisa_plan_crit. -"""), - -65: _(""" - nous ne pouvons pas recuperer la valeur du parametre b du critere de matake, cf. commande: defi_materiau, operande: cisa_plan_crit. -"""), - -66: _(""" - nous ne pouvons pas recuperer la valeur du coefficient de passage flexion-torsion, cf. commande: defi_materiau, operande: cisa_plan_crit. -"""), - -67: _(""" - nous ne pouvons pas recuperer la valeur du parametre a du critere de dang_van_modi_ac, cf. commande: defi_materiau, operande: cisa_plan_crit. -"""), - -68: _(""" - nous ne pouvons pas recuperer la valeur du parametre b du critere de dang_van_modi_ac, cf. commande: defi_materiau, operande: cisa_plan_crit. -"""), - -69: _(""" - nous ne pouvons pas recuperer la valeur du coefficient de passage cisaillement-traction, cf. commande: defi_materiau, operande: cisa_plan_crit. -"""), - -70: _(""" - nous ne pouvons pas recuperer la valeur du parametre a du critere domm_maxi, de la commande: defi_materiau, operande: cisa_plan_crit. -"""), - -71: _(""" - nous ne pouvons pas recuperer la valeur du parametre b du critere domm_maxi, de la commande: defi_materiau, operande: cisa_plan_crit. -"""), - -72: _(""" - nous ne pouvons pas recuperer la valeur du coefficient de passage cisaillement-traction, de la commande: defi_materiau, operande: cisa_plan_crit. -"""), - -73: _(""" - nous ne pouvons pas recuperer la valeur du parametre a du critere dang_van_modi_av, de la commande: defi_materiau, operande: cisa_plan_crit. +58 : _(""" + présence de point(s) que dans un secteur. """), -74: _(""" - nous ne pouvons pas recuperer la valeur du parametre b du critere dang_van_modi_av, de la commande: defi_materiau, operande: cisa_plan_crit. +59 : _(""" + aucun cercle n'est circonscrit aux quatre points. """), -75: _(""" - nous ne pouvons pas recuperer la valeur du parametre a du critere fatemi_socie, de la commande: defi_materiau, operande: cisa_plan_crit. +60 : _(""" + le décalage se trouve nécessairement coté revêtement + le décalage doit être négatif """), -76: _(""" - le champ demande n'est pas prevu +76 : _(""" + le champ demandé n'est pas prévu """), -77: _(""" +77 : _(""" nom_cham: %(k1)s interdit. """), -78: _(""" +78 : _(""" methode non programmee pour les hexa, penta et pyram """), -79: _(""" +79 : _(""" probleme de convergence pour calculer la nouvelle carte de taille """), - - - - - - - -81: _(""" - lunule, bug ! -"""), - -82: _(""" +82 : _(""" type %(k1)s non implante. """), -83: _(""" +83 : _(""" profondeur > rayon du tube """), -84: _(""" - pas d'informations dans le "resu_gene" sur l'option "choc". +84 : _(""" + pas d'informations dans le "RESU_GENE" sur l'option "choc". """), -85: _(""" +85 : _(""" modele non valide. """), -86: _(""" +86 : _(""" seuil / v0 > 1 """), -87: _(""" +87 : _(""" ***** arret du calcul ***** """), -88: _(""" - nno > 27 -"""), - -89: _(""" +89 : _(""" type non traite %(k1)s """), -90: _(""" - les tables tabl_meca_rev et tabl_meca_mdb n ont pas les memes dimensions +90 : _(""" + les tables TABL_MECA_REV et TABL_MECA_MDB n'ont pas les mêmes dimensions """), -91: _(""" - les tables n ont pas les memes instants de calculs +91 : _(""" + les tables n'ont pas les mêmes instants de calculs """), -92: _(""" - les tables n ont pas les memes dimensions +92 : _(""" + les tables n'ont pas les mêmes dimensions """), -93: _(""" - volume use trop grand pour la modelisation +93 : _(""" + volume usé trop grand pour la modélisation """), -94: _(""" +94 : _(""" Elément inconnu. Type d'élément Gibi : %(i1)d Nombre de sous-objet : %(i2)d @@ -409,30 +259,19 @@ La ligne lue dans le fichier doit ressembler %(i1)8d%(i2)8d%(i3)8d%(i4)8d%(i5)8d """), -95: _(""" +95 : _(""" On a lu un objet dit composé (car type d'élément = 0) qui serait composé de 0 sous-objet ! """), -96: _(""" +96 : _(""" Type de concept invalide. """), -97: _(""" +97 : _(""" Erreur Utilisateur : - La maille de peau : %(k1)s ne peut pas etre réorientée. + La maille de peau : %(k1)s ne peut pas être réorientée. Car elle est inserrée entre 2 mailles "support" placées de part et d'autre : %(k2)s et %(k3)s. - """), - - - - - - - - - - } diff --git a/Aster/Cata/cataSTA9/Messages/prepost5.py b/Aster/Cata/cataSTA9/Messages/prepost5.py index 46637640..b4a0c7f3 100644 --- a/Aster/Cata/cataSTA9/Messages/prepost5.py +++ b/Aster/Cata/cataSTA9/Messages/prepost5.py @@ -1,447 +1,233 @@ -#@ MODIF prepost5 Messages DATE 23/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF prepost5 Messages DATE 28/01/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" +1 : _(""" L'option %(k1)s est deja calculee pour le numero d'ordre %(k2)s. On la recalcule car les donnees peuvent etre differentes. """), -2: _(""" +2 : _(""" Champ inexistant SIEF_ELGA ou SIEF_ELGA_DEPL numero d'ordre %(k2)s pour le calcul de l'option %(k3)s """), -3: _(""" +3 : _(""" Champ inexistant DEPL numero d'ordre %(k2)s pour le calcul de l'option %(k3)s """), -4: _(""" +4 : _(""" Champ inexistant %(k1)s numero d'ordre %(k2)s pour le calcul de l'option %(k3)s """), -5: _(""" +5 : _(""" Option illicite pour le resultat %(k1)s numero d'ordre %(k2)s pour le calcul de l'option %(k3)s """), -6: _(""" +6 : _(""" Numero d'ordre trop grand %(k1)s pour le calcul de l'option %(k2)s """), -7: _(""" +7 : _(""" Option illicite pour le resultat %(k1)s numero d'ordre trop grand %(k2)s pour le calcul de l'option %(k3)s """), -8: _(""" - +8 : _(""" + la taille memoire necessaire au vecteur de travail dans lequel nous stockons les composantes u et v du vecteur tau est trop importante par rapport a la place disponible. - taille disponible : %(i1)d - taille necessaire : %(i2)d + taille disponible : %(i1)d + taille necessaire : %(i2)d """), -9: _(""" - +9 : _(""" + La commande POST_ZAC ne tolère comme variable de commande que la température. """), -10: _(""" +10 : _(""" le noeud traite n'est associe a aucune maille volumique. - numero du noeud = %(i1)d - nombre de mailles attachees au noeud = %(i2)d -"""), - -11: _(""" - Vous utilisez le mot clé TEMP_CALCULEE de la commande AFFE_CHAR_MECA - avec POST_ZAC. Utilisez AFFE_VARC dans la commande AFFE_MATERIAU à la place. -"""), - -12: _(""" - le noeud milieu : %(k1)s - n'est pas supprime car il appartient a une maille qui reste quadratique. -"""), - - - - - - - - - - - - - - - - - - - - - - -16: _(""" - appel erronenumero d'ordre %(i1)d code retour de rsexch : %(i2)d - pb cham_no %(k1)s -"""), - - - - - - - - - - - - - - - -19: _(""" - nombre de noeud(s) elimine(s) du maillage %(i1)d + numero du noeud = %(i1)d + nombre de mailles attachees au noeud = %(i2)d """), -20: _(""" - nombre de maille(s) eliminee(s) du maillage %(i1)d +12 : _(""" + le noeud milieu : %(k1)s + n'est pas supprime car il appartient a une maille qui reste quadratique. """), -21: _(""" - le numero du groupe de mailles est trop grand: %(i1)d - le numero du groupe doit etre inferieur a %(i2)d +16 : _(""" + appel erronenumero d'ordre %(i1)d code retour de rsexch : %(i2)d + pb cham_no %(k1)s """), -22: _(""" - fichier med : %(k1)s maillage : %(k2)s erreur efouvr numero %(i1)d +19 : _(""" + nombre de noeud(s) elimine(s) du maillage %(i1)d """), -23: _(""" - fichier med : %(k1)s champ : %(k2)s erreur efferm numero %(i1)d -"""), - -24: _(""" - fichier med : %(k1)s champ : %(k2)s retour de mdexch : existc = %(i1)d -"""), - -25: _(""" - on ne trouve pas la composante %(k1)s dans la grandeur %(k2)s -"""), - - - - - - - - -27: _(""" - l objet %(k1)s n existe pas. %(k2)s veuillez renseigner le modele. %(k3)s +20 : _(""" + nombre de maille(s) eliminee(s) du maillage %(i1)d """), - - - - - - - - - - - - - - -30: _(""" - on ne trouve pas la maille %(k1)s +21 : _(""" + le numero du groupe de mailles est trop grand: %(i1)d + le numero du groupe doit etre inferieur a %(i2)d """), -31: _(""" - on ne trouve pas le groupe %(k1)s +25 : _(""" + on ne trouve pas la composante %(k1)s dans la grandeur %(k2)s """), -32: _(""" - le groupe %(k1)s ne contient aucune maille %(k2)s +30 : _(""" + on ne trouve pas la maille %(k1)s """), -33: _(""" - fichier med : %(k1)s maillage : %(k2)s +31 : _(""" + on ne trouve pas le groupe %(k1)s """), - - - - - - - -35: _(""" - fichier med : %(k1)s maillage : %(k2)s erreur efferm numero %(i1)d +32 : _(""" + le groupe %(k1)s ne contient aucune maille %(k2)s """), -36: _(""" - fichier med : %(k1)s erreur efouvr numero %(i1)d +38 : _(""" + on ne trouve pas le noeud : %(k1)s """), -37: _(""" - fichier med : %(k1)s erreur efferm numero %(i1)d +40 : _(""" + le groupe %(k1)s ne contient aucun noeud %(k2)s """), -38: _(""" - on ne trouve pas le noeud : %(k1)s +41 : _(""" + le parametre %(k1)s n'existe pas %(k2)s """), - - - - - - - -40: _(""" - le groupe %(k1)s ne contient aucun noeud %(k2)s +45 : _(""" + noeud inconnu dans le fichier ideas noeud numero : %(i1)d """), -41: _(""" - le parametre %(k1)s n'existe pas %(k2)s +46 : _(""" + element inconnu dans le fichier ideas element numero : %(i1)d """), -42: _(""" - valeurs lues dans le fichier : %(i1)d - valeurs non affectees dans le champ : %(i2)d +54 : _(""" + probleme dans nomta traitement de l'instant %(r1)f + recuperation de %(k1)s + pour le secteur %(i1)d """), -43: _(""" - profil med : %(k1)s erreur efnpfl numero %(i1)d +57 : _(""" + probleme dans nomta traitement de l'instant %(r1)f + recuperation de %(k1)s """), -44: _(""" - profil med : %(k1)s erreur efpfll numero %(i1)d +58 : _(""" + probleme dans nomta traitement de l'instant %(r1)f + recuperation "numeli" pour %(k1)s """), -45: _(""" - noeud inconnu dans le fichier ideas noeud numero : %(i1)d +59 : _(""" + probleme dans nomta traitement de l'instant %(r1)f + recuperation "numeli" pour le secteur %(i1)d """), -46: _(""" - element inconnu dans le fichier ideas element numero : %(i1)d +61 : _(""" + la composante %(k1)s n'existe dans aucun des champs %(k2)s """), - - - - - - - - - - - - - - - - - - - - - -50: _(""" - fichier med : %(k1)s erreur efnmaa numero %(i1)d -"""), - -51: _(""" - fichier med : %(k1)s maillage numero %(i1)d erreur efmaai numero %(i2)d -"""), - -52: _(""" - fichier med : %(k1)s maillage numero %(i1)d nomamd est declare a %(i2)d - le nom de maillage est : %(k2)s - de longueur %(i3)d -"""), - - - - - - - - -54: _(""" - probleme dans nomta traitement de l'instant %(r1)f - recuperation de %(k1)s - pour le secteur %(i1)d -"""), - - - - - - - - - - - - - - - -57: _(""" - probleme dans nomta traitement de l'instant %(r1)f - recuperation de %(k1)s -"""), - -58: _(""" - probleme dans nomta traitement de l'instant %(r1)f - recuperation "numeli" pour %(k1)s -"""), - -59: _(""" - probleme dans nomta traitement de l'instant %(r1)f - recuperation "numeli" pour le secteur %(i1)d -"""), - - - - - - - - -61: _(""" - la composante %(k1)s n'existe dans aucun des champs %(k2)s -"""), - - - - - - - - - - - -64: _(""" +64 : _(""" la valeur d'amortissement reduit est trop grande - la valeur d'amortissement : %(r1)f - du mode propre %(i1)d - est tronquee au seuil : %(r2)f + la valeur d'amortissement : %(r1)f + du mode propre %(i1)d + est tronquee au seuil : %(r2)f """), +67 : _(""" - - - - - - - - -67: _(""" - la taille memoire necessaire au vecteur de travail est trop importante par rapport a la place disponible. - taille disponible : %(i1)d - taille necessaire : %(i2)d + taille disponible : %(i1)d + taille necessaire : %(i2)d """), -68: _(""" - +68 : _(""" + la taille du vecteur contenant les caracteristiques des paquets de mailles est trop petite. - nb de paquets maxi : %(i1)d - nb de paquets reels: %(i2)d + nb de paquets maxi : %(i1)d + nb de paquets reels: %(i2)d """), +70 : _(""" - - - - - - -70: _(""" - la taille du vecteur contenant les caracteristiques des paquets de noeuds est trop petite. - nb de paquets maxi : %(i1)d - nb de paquets reels: %(i2)d + nb de paquets maxi : %(i1)d + nb de paquets reels: %(i2)d """), - - - - - - - - - - - - -73: _(""" - appel errone resultat : %(k1)s archivage numero : %(i1)d - code retour de rsexch : %(i2)d - probleme champ : %(k2)s +73 : _(""" + appel errone resultat : %(k1)s archivage numero : %(i1)d + code retour de rsexch : %(i2)d + probleme champ : %(k2)s """), -74: _(""" - on ne trouve pas l'instant %(r1)f dans la table %(k1)s +74 : _(""" + on ne trouve pas l'instant %(r1)f dans la table %(k1)s """), -75: _(""" - on trouve plusieurs instants %(r1)f dans la table %(k1)s +75 : _(""" + on trouve plusieurs instants %(r1)f dans la table %(k1)s """), -76: _(""" +76 : _(""" noeud non contenu dans une maille sachant calculer l" option - noeud numero : %(i1)d + noeud numero : %(i1)d +"""), + +77 : _(""" + *** banque de donnees *** pour le type de geometrie %(k1)s + le couple de materiaux %(k2)s + ne se trouve pas dans la banque. %(k3)s +"""), + +78 : _(""" + le calcul du rayon n'est pas assez precis.cupn0 = %(r1)f + cvpn0 = %(r2)f + cupn1 = %(r3)f + cvpn1 = %(r4)f + cupn2 = %(r5)f + cvpn2 = %(r6)f + flag = %(i1)d + cuon1 = %(r7)f + cuon2 = %(r8)f + cuon3 = %(r9)f + cvon1 = %(r10)f + cvon2 = %(r11)f + cvon3 = %(r12)f + rayon = %(r13)f + raymin = %(r14)f + (rayon - raymin) = %(r15)f + ((rayon-raymin)/raymin) = %(r16)f +"""), + +79 : _(""" + ngr different de nbgrel ngr = %(i1)d nbgrel= %(i2)d """), -77: _(""" - *** banque de donnees *** pour le type de geometrie %(k1)s - le couple de materiaux %(k2)s - ne se trouve pas dans la banque. %(k3)s -"""), - - - - - - - - - - - - - - - - - - } diff --git a/Aster/Cata/cataSTA9/Messages/prepost6.py b/Aster/Cata/cataSTA9/Messages/prepost6.py new file mode 100644 index 00000000..bd667126 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/prepost6.py @@ -0,0 +1,120 @@ +#@ MODIF prepost6 Messages DATE 10/12/2007 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { + +3 : _(""" + le volume differe du volume use mais le nombre d'iteration + est superieur a %(i1)d + volume use: %(r1)f + volume calcule: %(r2)f +"""), + +4 : _(""" + verifier les parametres d'usure pour le secteur %(i1)d +"""), + +5 : _(""" + verifier les parametres d'usure pour le secteur %(i1)d +"""), + +6 : _(""" + composante %(k1)s / point %(i1)d +"""), + +7 : _(""" + nombre de valeurs = %(i1)d + %(r1)f, %(r2)f, ... +"""), + +8 : _(""" + nombre de pics extraits = %(i1)d + %(r1)f, %(r2)f, ... +"""), + +9 : _(""" + nombre de cycles detectes = %(i1)d +"""), + +10 : _(""" + %(i1)d / %(r1)f %(r2)f +"""), + +11 : _(""" + dommage en ce point/cmp = %(r1)f +"""), + +27 : _(""" + parametres de calcul du dommagenombre de numeros d'ordre = %(i1)d + nombre de points de calcul = %(i2)d +"""), + +28 : _(""" + calcul du dommage en %(k1)s points de calcul du dommage %(k2)s + composante(s) grandeur equivalente %(k3)s + methode d'extraction des pics %(k4)s + methode de comptage des cycles %(k5)s + methode de calcul du dommage %(k6)s + +"""), + +29 : _(""" + maille: %(k1)s +"""), + +30 : _(""" + des mailles de peau ne s'appuient sur aucune maille support + maille: %(k1)s +"""), + +31 : _(""" + + ===== GROUP_MA ASTER / PHYSICAL GMSH ===== + +"""), + +32 : _(""" + + Le GROUP_MA GMSH GM10000 contient %(i1)d éléments : +"""), + +33 : _(""" + %(i1)d éléments de type %(k1)s +"""), + +34 : _(""" + La composante %(k1)s que vous avez renseignée ne fait pas partie + des composantes du champ à imprimer. +"""), + +35 : _(""" + Le type de champ %(k1)s n'est pas autorisé avec les champs + élémentaires %(k2)s. + L'impression du champ sera effectué avec le type SCALAIRE. +"""), + +36 : _(""" + Veuillez utiliser IMPR_GENE pour l'impression + de résultats en variables généralisées. +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/proba0.py b/Aster/Cata/cataSTA9/Messages/proba0.py new file mode 100644 index 00000000..8ae42213 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/proba0.py @@ -0,0 +1,78 @@ +#@ MODIF proba0 Messages DATE 25/02/2008 AUTEUR ZENTNER I.ZENTNER +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" + Il faut BORNE_INF < BORNE_SUP + BORNE_INF = %(r1)f + BORNE_SUP = %(r2)f +"""), + +2: _(""" + VALE_MOY trop grand ou trop petit + BORNE_INF = %(r1)f + VALE_MOY = %(r2)f + BORNE_SUP = %(r3)f +"""), + +3: _(""" + BORNE SUP très grande, problème de précision possible, + vérifiez la distribution des valeurs générées. +"""), + +4: _(""" + On doit avoir : VALE_MOY > BORNE_INF + VALE_MOY = %(r1)f + BORNE_INF = %(r2)f +"""), + +5: _(""" + Erreur : ALPHA < 1 +"""), + +6: _(""" + Erreur : UNIF < 0 +"""), + +7: _(""" + Erreur : GAMDEV(ALPHA) < 0 +"""), + +8: _(""" + Il faut autant d'indices en I et J. +"""), + +9: _(""" + Il faut autant de composantes en I et J. +"""), + +10: _(""" + Il faut autant de composantes que de noeuds. +"""), + +11: _(""" + Nombre de tirages superieur a la taille de l'echantilon. +"""), + + + +} diff --git a/Aster/Cata/cataSTA9/Messages/rupture0.py b/Aster/Cata/cataSTA9/Messages/rupture0.py new file mode 100644 index 00000000..3a2fe380 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/rupture0.py @@ -0,0 +1,553 @@ +#@ MODIF rupture0 Messages DATE 18/03/2008 AUTEUR CNGUYEN C.NGUYEN +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +Interpolation hors du domaine (prolongement constant utilisé). +"""), + +2: _(""" +Le label %(k1)s doit etre présent dans la table %(k2)s. +"""), + +3: _(""" +Création de la table %(k1)s. +"""), + +5: _(""" +Il faut définir ELAS dans DEFI_MATERIAU. +"""), + +6: _(""" +La température en fond de fissure, nécessaire pour le calcul des proprietés +matériaux et donc des facteurs d'intensité des contraintes, n'est pas connue. +Le calcul se poursuite en prenant la température de réference du materiau +(TEMP = %(r1)f). +-> Risque et Conseil : +Quand les propriétés matériau dépendent de la température, il faut fournir +en entrée de POST_K1_K2_K3 le champ de température utilisé pour le calcul +mécanique, sous le mot clé EVOL_THER. +"""), + +9: _(""" +Dans le cas d'une SD RESULTAT de type DYNA_TRANS, +le mot-cle EXCIT est obligatoire. +Veuillez le renseigner. +"""), + +10: _(""" +Modélisation non implantée. +"""), + +11: _(""" +Problème à la récupération des noeuds du fond de fissure. +-> Risque et Conseil : +Vérifier que le concept %(k1)s indiqué sous le mot clé FOND_FISS a été +correctement crée par l'opérateur DEFI_FOND_FISS. +"""), + +12: _(""" +Type de mailles du fond de fissure non défini. +-> Risque et Conseil : +Pour une modélisation 3D, les mailles de votre fond de fissure +doivent etre de type SEG2 ou SEG3. +Veuillez revoir la création de votre fond de fissure +(opérateur DEFI_FOND_FISS). +"""), + +13: _(""" +Le group_no %(k1)s n'est pas dans le maillage. +-> Risque et Conseil : +Veuillez vérifier les données fournies au mot-clé GROUP_NO. +"""), + +14: _(""" +Le noeud %(k1)s n'appartient pas au maillage : %(k2)s +-> Risque et Conseil : +Veuillez vérifier les données fournies au mot-clé SANS_GROUP_NO. +"""), + +15: _(""" +Le noeud %(k1)s n'appartient pas au fond de fissure. +-> Risque et Conseil : +Veuillez vérifier les données fournies au mot-clé GROUP_NO ou NOEUD. +"""), + +16: _(""" +Le mot clé RESULTAT est obligatoire pour TYPE_MAILLAGE = LIBRE. +"""), + +17: _(""" +Le nombre de noeuds NB_NOEUD_COUPE doit etre supérieur à 3. +-> Risque et Conseil : +Le calcul s'est poursuivi avec la valeur par défaut (=5, cf doc U4.82.05) + +"""), + +18: _(""" +Problème à la récupération du modèle dans la sd résultat fournie. +-> Risque et Conseil : +Veuillez vérifier que le concept fourni au mot-clé RESULTAT correspond +au résultat à considérer. +"""), + +19: _(""" +Problème à la récupération des noeuds de la lèvre sup : +-> Risque et Conseil : +Pour un calcul avec POST_K1_K2_K3, la lèvre supérieure de la fissure doit +être obligatoirement définie dans DEFI_FOND_FISS à l'aide du mot-clé +LEVRE_SUP. Vérifier la définition du fond de fissure. +"""), + +20: _(""" +Problème à la récupération des noeuds de la lèvre inf : +-> Risque et Conseil : +Pour un calcul avec POST_K1_K2_K3, la lèvre inférieure de la fissure doit +être obligatoirement définie dans DEFI_FOND_FISS à l'aide du mot-clé +LEVRE_INF. Vérifier la définition du fond de fissure. +"""), + +21: _(""" +Les noeuds ne sont pas en vis-à-vis dans le plan perpendiculaire +au noeud %(k1)s. +-> Risque et Conseil : +Pour interpoler les sauts de déplacement, les noeuds doivent être par défaut +en vis-à-vis deux à deux sur les lèvres. Si ce n'est pas le cas, utilisez +l'option TYPE_MAILLE='LIBRE' dans POST_K1_K2_K3. +"""), + +22: _(""" +Il manque des points dans le plan défini par la lèvre +supérieure et perpendiculaire au fond %(k1)s. +-> Risque et Conseil : +"""), + +23: _(""" +Vérifier les tangentes extremités ou +"""), + +24: _(""" +Augmenter PREC_NORM dans DEFI_FOND_FISS. +"""), + +25: _(""" +Augmenter ABSC_CURV_MAXI. +"""), + +26: _(""" +Il manque des points dans le plan défini par la lèvre +inférieure et perpendiculaire au fond %(k1)s. +-> Risque et Conseil : +"""), + +27: _(""" +Pour un résultat de type MODE_MECA, +l'option de calcul doit etre K_G_MODA. +-> Risque et Conseil : +Veuillez fournir au mot-clé OPTION l'option K_G_MODA +et vérifier que le concept fourni au mot-clé RESULTAT +est de type MODE_MECA. +"""), + +28: _(""" +Le cas de charge %(k1)s n'a pas été trouvé dans la SD Résultat %(k2)s. +-> Risque et Conseil : +Veuillez vérifier les données fournies au mot-clé NOM_CAS. +"""), + +29: _(""" +Le mot-clé 'FISSURE' est obligatoire avec l'option %(k1)s. +Veuillez le renseigner. +"""), + +30: _(""" +Calcul possible pour aucun noeud du fond. +-> Risque et Conseil : +Veuillez vérifier les données, notamment celles du mot-clé DIRECTION. +"""), + +32: _(""" +Différence entre la normale au plan déduite de VECT_K1 et la normale +au plan de la fissure calculée pour le noeud %(i1)d : + VECT_K1 : (%(r4)f,%(r5)f,%(r6)f) + Vecteur normal calculé à partir de la définition de la fissure : (%(r1)f,%(r2)f,%(r3)f) +-> Risque et Conseil : +On poursuit le calcul mais si l'écart entre les deux vecteurs est trop important, +le calcul risque d'échouer ou de conduire à des résultats peu précis. +Vérifier absolument le VECT_K1 fourni ou supprimer ce mot clé pour que la normale +au plan soit calculée automatiquement. +"""), + +33: _(""" +Problème dans la récupération du saut de déplacement sur les lèvres. +-> Risque et Conseil : +Il y a plusieurs causes possibles : +- vérifiez que le résultat correspond bien à un calcul sur des éléments x-fem; +- si le calcul correspond à un calcul X-FEM avec contact sur les lèvres de la + fissure,vérifiez que le maillage fourni est bien le maillage linéaire initial; +- vérifiez que le paramètre ABSC_CURV_MAXI est cohérent avec la taille de la + fissure : les segments pour l'interpolation du déplacement des lèvres, + perpendiculaires au fond de fissure et de longueur ABSC_CURV_MAXI, ne doivent + pas "sortir" de la matière. +"""), + +34: _(""" + Le nombre de noeuds NB_NOEUD_COUPE doit etre supérieur à 3 : + on prend la valeur par défaut. +"""), + +35: _(""" +Les mots-clés TABL_DEPL_SUP et TABL_DEPL_INF sont obligatoires +si SYME_CHAR=SANS. +"""), + +37: _(""" +Le numéro d'ordre %(i1)d n'a pas été trouvé dans la table. +"""), + +38: _(""" +Pas d'instant trouvé dans la table pour l'instant %(r1)f. +"""), + +39: _(""" +Plusieurs instants trouvés dans la table pour l'instant %(r1)f. +"""), + +40: _(""" +ABSC_CURV non croissants pour %(k1)s. +"""), + +42: _(""" +Différence de points entre la lèvre supérieure et la lèvre inférieure. +"""), + +43: _(""" +Pour traiter le noeud %(k1)s: + Nombre de points - lèvre supérieure : %(i1)d + Nombre de points - lèvre inférieure : %(i2)d +"""), + +44: _(""" +Les noeuds ne sont pas en vis-à-vis. +-> Risque et Conseil : +Pour interpoler les sauts de déplacement, les noeuds doivent être par défaut en +vis-à-vis deux à deux sur les lèvres. Si ce n'est pas le cas, utilisez l'option +TYPE_MAILLE='LIBRE' dans POST_K1_K2_K3. + +"""), + +46: _(""" +Il faut au moins trois noeuds dans le plan défini par les lèvres +et perpendiculaire au fond de fissure. +-> Risque et Conseil : +"""), + +47: _(""" +Noeud %(k1)s +"""), + +48: _(""" +Le mot-clé 'FOND_FISS' est obligatoire avec l'option %(k1)s. +Veuillez le renseigner. +"""), + +49: _(""" +Déplacement normal du noeud %(k1)s non nul +et SYME_CHAR = %(k2)s. +-> Risque et Conseil : +Vérifier les conditions aux limites et VECT_K1. +"""), + +50: _(""" +Nombre de modes différent entre la base modale +et %(k1)s : on prend le minimum des deux %(i1)d. +"""), + +51: _(""" +Le numéro d'ordre %(i1)d n'appartient pas au résultat %(k1)s. +"""), + +54: _(""" +Aucun instant ou numéro d'ordre trouvé. +"""), + +55: _(""" +-> Attention: En présence d'une SD Résultat de type mult_elas, les mots-clés +EXCIT et NOM_CAS sont obligatoires. +-> Risque et Conseil : +Risque de résultats faux si un des chargements impacte le calcul de G et de K +(par exemple force de pression sur les lèvres de la fissure,force volumique...) +"""), + +56 : _(""" +CALC_G - option CALC_K_G : le calcul est impossible sur un point de rayon nul +(point sur l'axe de rotation). +-> Risque et Conseil : +Modifier les couronnes R_INF et R_SUP pour qu'elles soient toutes les deux plus +petites que le rayon du fond de fissure. De manière générale en axisymétrie, le +calcul de K est d'autant plus précis que le rayon des couronnes est petit devant +le rayon du fond de fissure. +"""), + +57 : _(""" +Pour l'option CALC_G en 3D, le champ THETA doit être calculé directement +dans l'opérateur CALC_G. +-> Risque et Conseil : +Dans le mot-clé facteur THETA, supprimez le mot-clé THETA et renseignez les +mots-clés FOND_FISS, R_SUP, R_INF, MODULE, et DIRECTION pour la détermination +automatique du champ theta. +"""), + +59 : _(""" +Le champ de THETA est inexistant dans la structure de données %(k1)s +de type THETA_GEOM. +-> Risque et Conseil : +Veuillez revoir la création du champ theta (opérateur CALC_THETA). +"""), + +60 : _(""" +Mélange de mailles de type SEG2 et SEG3 dans la définition du fond de fissure. +-> Risque et Conseil : +Les mailles du fond de fissure doivent toutes être du meme type. +Modifiez le maillage ou définissez plusieurs fonds de fissure consécutifs. +"""), + +61 : _(""" +Le groupe de noeuds %(k1)s définissant le fond de fissure n'est pas ordonné. +-> Risque et Conseil : +Il faut ordonner les noeuds du fond de fissure. +Les options SEGM_DROI_ORDO et NOEUD_ORDO de l'opérateur +DEFI_GROUP/CREA_GROUP_NO peuvent etre utilisées. +."""), + +62 : _(""" +Arret sur erreur utilisateur : deux GROUP_NO consécutifs incohérents dans la +définition du fond de fissure. +-> Risque et Conseil : +Les noeuds de chaque groupe doivent etre ordonnés et le dernier noeud d'un +groupe identique au premier noeud du groupe suivant dans la liste. +"""), + +63 : _(""" +Les mailles du fond de fissure doivent etre du type segment (SEG2 ou SEG3). +"""), + +64 : _(""" +Arret sur erreur utilisateur : deux mailles ou groupes de mailles du fond de +fissure sont non consécutives dans la numérotation des noeuds. +"""), + +65 : _(""" +Détection d'une maille de type %(k1)s dans la définition des lèvres de la +fissure (%(k2)s). +-> Risque et Conseil : +Les mailles des lèvres doivent etre du type quadrangle ou triangle. +Vérifiez que les mailles définies correspondent bien aux faces des éléments +3D qui s'appuient sur la lèvre. +"""), + +66 : _(""" +La liste de noeuds définissant le fond de fissure n'est pas ordonnée. +-> Risque et Conseil : +Veuillez vérifier l'ordre des noeuds. +"""), + +67 : _(""" +Arret sur erreur utilisateur : le fond de fissure possède un noeud +répété deux fois (noeud %(k1)s). +-> Risque et Conseil : +Veuillez revoir la définition du fond dans FOND_FISS ou FOND_FERME. +"""), + +68 : _(""" +Les mailles de FOND_INF et de FOND_SUP sont de type différent. + Type de mailles pour FOND_SUP : %(k1)s + Type de mailles pour FOND_INF : %(k2)s +"""), + +69: _(""" +Les noeuds %(k1)s de FOND_INF et %(k2)s de FOND_SUP ne sont pas en vis à vis. +-> Risque et Conseil : +Vérifiez que les deux groupes correspondent bien à des noeuds coincidents +géométriquement et que les groupes de noeuds sont ordonnés dans le meme sens. +"""), + +70 : _(""" +Erreur utilisateur : la lèvre supérieure possède une maille répétée 2 fois : +maille %(k1)s. +-> Risque et Conseil : +Veuillez revoir les données. +"""), + +71 : _(""" +Erreur utilisateur : la lèvre inférieure possède une maille répétée 2 fois : +maille %(k1)s. +-> Risque et Conseil : +Veuillez revoir les données. +"""), + +72 : _(""" +Le noeud %(k1)s du fond de fissure n'est rattaché à aucune maille surfacique +de la lèvre supérieure. +-> Risque et Conseil : +Veuillez vérifier les groupes de mailles. +"""), + +73 : _(""" +Erreur utilisateur : la lèvre inférieure et la lèvre supérieure ont une maille +surfacique en commun. Maille en commun : %(k1)s +-> Risque et Conseil : +Revoir les données. +"""), + +74: _(""" +Le noeud %(k1)s du fond de fissure n'est rattaché à aucune maille +surfacique de la lèvre inférieure. +-> Risque et Conseil : +Veuillez vérifier les groupes de mailles. +"""), + +75 : _(""" +Détection d'une maille de type %(k1)s dans la définition des lèvres de la +fissure (%(k2)s). +-> Risque et Conseil : +Les mailles des lèvres doivent etre linéiques. Vérifiez que les mailles +définies correspondent bien aux faces des éléments 2D qui s'appuient +sur la lèvre. +"""), + +76: _(""" +Le noeud %(k1)s du fond de fissure n'appartient à aucune des mailles +de la lèvre supérieure. +-> Risque et Conseil : +Veuillez revoir les données. +"""), + +77: _(""" +Le noeud %(k1)s du fond de fissure n'appartient à aucune des mailles +de la lèvre inférieure. +-> Risque et Conseil : +Veuillez revoir les données. +"""), + +78: _(""" +La tangente à l'origine n'est pas orthogonale à la normale : + Normale aux lèvres de la fissure : %(r1)f %(r2)f %(r3)f + Tangente à l'origine (= direction de propagation) : %(r4)f %(r5)f %(r6)f +-> Risque et Conseil : +La tangente à l'origine est nécessairement dans le plan de la fissure, +donc orthogonale à la normale fournie. Vérifier les données. +"""), + +79: _(""" +La tangente à l'extrémité n'est pas orthogonale à la normale : + Normale aux lèvres de la fissure : %(r1)f %(r2)f %(r3)f + Tangente à l'origine (= direction de propagation) : %(r4)f %(r5)f %(r6)f +-> Risque et Conseil : +La tangente à l'extrémité est nécessairement dans le plan de la fissure, +donc orthogonale à la normale fournie. Vérifier les données. +"""), + +81: _(""" +Il faut donner la direction de propagation en 2D +La direction par défaut n'existe plus. +-> Risque et Conseil : +Veuillez renseigner le mot-clé DIRECTION. +"""), + +83: _(""" +Cette combinaison de lissage n'est pas programmée pour l'option : %(k1)s. +-> Risque et Conseil : +Veuillez consulter la doc U4.82.03 pour déterminer une combinaison de lissage +licite avec l'option désirée. +"""), + +84: _(""" +Le degré des polynomes de Legendre doit etre inférieur ou égal au nombre +de noeuds du fond de fissure lorsque le lissage de G est de type +LEGENDRE et le lissage de THETA de type LAGRANGE. +"""), + +85: _(""" +Le lissage de G doit etre de type LEGENDRE si le lissage de THETA +est de type LEGENDRE. +-> Risque et Conseil : +Veuillez redéfinir le mot-clé LISSAGE_G. +"""), + +87: _(""" +Si la méthode LAGRANGE_REGU est utilisée pour le lissage, +alors le lissage de G et de theta doivent etre de type LAGRANGE_REGU. +"""), + +90: _(""" +L'usage des polynomes de Legendre dans le cas d'un fond de fissure clos +est interdit. +-> Risque et Conseil : +Veuillez redéfinir le mot-clé LISSAGE_THETA. +"""), + +91: _(""" +Aucune direction de propagation n'est fournie par l'utilisateur, la direction est +calculée à partir de la normale au fond de fissure. +-> Risque et Conseil : +Il n'y a aucun moyen de vérifier que la direction de propagation est dans le bon sens, ce +qui peut inverser le signe du G calculé. Il est préférable de préciser la direction de +propagation sous le mot clé DIRECTION ou de définir la fissure à partir des mailles de ses +lèvres. +"""), + +92: _(""" +Le mot-clef BORNES est obligatoire avec l'option %(k1)s ! +"""), + +93: _(""" +Accès impossible au champ : %(k1)s pour le numéro d'ordre : %(i1)d +"""), + +94: _(""" +La direction de propagation de la fissure et la normale au fond de fissure +ne sont pas orthogonales. +-> Risque et Conseil : +Si la fissure est plane, la normale et la direction de propagation sont +nécessairement orthogonales, sinon les résultats sont faux: vérifier la +mise en données dans DEFI_FOND_FISS et CALC_G. +Si la fissure n'est pas plane, on ne peut pas utiliser le mot-clé NORMALE +dans DEFI_FOND_FISS: définissez la fissure à partir des mailles de ses lèvres. +"""), + +95: _(""" +Accès impossible au mode propre champ : %(k1)s pour le numéro d'ordre : %(i1)d. +"""), + +96: _(""" +Option non disponible actuellement. +"""), + +98: _(""" +Récupération impossible de la normale dans le fond de fissure FOND_FISS. +-> Risque et Conseil : +Un problème a du se produire lors de la création de la structure de données +FOND_FISS. Vérifiez les données dans DEFI_FOND_FISS. +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/rupture1.py b/Aster/Cata/cataSTA9/Messages/rupture1.py new file mode 100644 index 00000000..b4ddcdfc --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/rupture1.py @@ -0,0 +1,233 @@ +#@ MODIF rupture1 Messages DATE 04/02/2008 AUTEUR GALENNE E.GALENNE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2008 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +L'option de lissage 'LAGRANGE_REGU' n'a pas été développée lorsque +le nombre de noeuds d'un fond de fissure fermé est pair. +-> Risque et Conseil : +Veuillez utiliser une autre option de lissage +(par exemple, le lissage 'LAGRANGE' pour le champ theta) +"""), + +2: _(""" +%(k1)s n'est pas un GROUP_NO ou un GROUP_MA. +"""), + +6: _(""" +Le rayon R_SUP (ou R_SUP_FO) doit obligatoirement etre supérieur au rayon +R_INF (resp. R_INF_FO). +-> Risque et Conseil : +Veuillez revoir votre mise en données. +"""), + +7: _(""" +Problème dans RINF et RSUP. +-> Risque et Conseil : +Veuillez revoir les valeurs fournies aux mots-clés R_INF ou R_INF_FO +ou R_SUP ou R_SUP_FO. +"""), + +8: _(""" +Le groupe %(k1)s n'appartient pas au maillage : %(k2)s +"""), + +9: _(""" +Le fond de fissure n'est pas complet. +-> Risque et Conseil : +Veuillez revoir la mise en données de l'opérateur DEFI_FOND_FISS. +"""), + +10: _(""" +Le fond de fissure ne doit etre défini que par un noeud. +-> Risque et Conseil : +Veuillez revoir le contenu du mot-clé GROUP_NO ou NOEUD ou FOND_FISS. +"""), + +11: _(""" +Il faut un mot clé parmis FOND_FISS ou FISSURE pour l'option %(k1)s +Veuillez le renseigner. +"""), + +12: _(""" +Aucun champ initial trouvé. +"""), + +13: _(""" +%(k1)s : champ initial impossible avec cette option. +"""), + +14: _(""" +Nombre de bornes erroné. +-> Risque et Conseil : +On doit en avoir autant que de numéros d'ordre. +"""), + +15: _(""" +Le résultat n'est pas un EVOL_NOLI. +"""), + +16: _(""" +Le champ %(k1)s n'a pas été trouvé. +"""), + +17: _(""" +L'association: lissage du champ THETA par les polynomes de Lagrange + lissage de G autre que par des polynomes de Lagrange +n'est pas possible. +-> Risque et Conseil : +Veuillez consulter la documentation U4.82.03 pour déterminer une +association satisfaisante. +"""), + +19: _(""" +Il faut définir la normale au fond de fissure. +-> Risque et Conseil : +Veuillez revoir la mise en données de l'opérateur DEFI_FOND_FISS +(mot-clé NORMALE). +"""), + +20: _(""" +Une déformation initiale est présente dans la charge. Ceci est incompatible +avec la contrainte initiale sigma_init. +-> Risque et Conseil : +On ne peut pas faire de calcul en introduisant simultanément une contrainte +initiale ET une déformation initiale. Veuillez revoir les données. +"""), + +21: _(""" +Seule une loi de comportement élastique isotrope est valide pour +le calcul de DG. +"""), + +22: _(""" +Le calcul de DG n'a pas été étendu à la plasticité ! +"""), + +23: _(""" +CALC_G - option CALC_G : détection de chargements non nuls sur l'axe, +le calcul est impossible. +-> Risque et Conseil : +En 2D-axi, le calcul de G n'est pas possible pour les éléments de l'axe de +symétrie si un chargement est imposé sur ceux-ci. +Modifier les couronnes R_INF et R_SUP pour qu'elles soient toutes les deux +plus petites que le rayon du fond de fissure. +"""), + +24: _(""" +L'option CALC_K_G est incompatible avec les comportements incrémentaux, +avec les comportements non linéaires et avec la déformation GREEN. +"""), + +25: _(""" +Il faut affecter les éléments de bord (E et NU) pour le calcul des fic. +-> Risque et Conseil : +Veuillez revoir la mise en données des opérateurs DEFI_MATERIAU +et AFFE_MATERIAU. +"""), + +26: _(""" +La masse volumique RHO n'a pas été définie. +-> Risque et Conseil : +Pour l'option K_G_MODA, il est indispensable de fournir la masse volumique +du matériau considéré. Veuillez revoir la mise en données de l'opérateur +DEFI_MATERIAU. +"""), + +27: _(""" +L'option est incompatible avec les comportements incrémentaux ainsi +qu'avec la déformation Green. +"""), + +28: _(""" +Le champ de nom symbolique %(k1)s existe déjà dans la SD RESULTAT %(k1)s. +"""), + +29: _(""" +Arret sur erreur(s) 'utilisateur': deux mailles du fond de fissure sont +non consécutives dans la numérotation des noeuds. +-> Risque et Conseil : +Veuillez revoir l'ordre des mailles fournies au mot-clé MAILLE. +"""), + +30: _(""" +Il faut donner 3 composantes de la direction. +-> Risque et Conseil : +Si vous utilisez CALC_THETA/THETA_2D ou CALG_G/THETA en 2d, veuillez fournir +une valeur nulle pour la 3eme composante. +"""), + +31: _(""" +Option non opérationnelle: +Seule l'option COURONNE est à utiliser dans le cas ou +on emploie le mot clé THETA_3D ou THETA_2D. +"""), + +32: _(""" +Option inexistante: +Seule l'option BANDE est à utiliser dans le cas ou on emploie +le mot clé THETA_BANDE . +"""), + +33: _(""" +La tangente à l'origine n'est pas orthogonale à la normale au plan de la fissure. +Normale au plan : (%(r1)f,%(r2)f,%(r3)f) +-> Risque et Conseil : +La tangente à l'origine DTAN_ORIG est nécessairement dans le plan de la fissure, +donc orthogonale à la normale au plan, calculée à partir des fonctions de niveaux +(level set) qui définissent la fissure. Vérifier les données. +"""), + +34: _(""" +La tangente à l'extrémité n'est pas orthogonale à la normale au plan de la fissure. +Normale au plan : (%(r1)f,%(r2)f,%(r3)f) +-> Risque et Conseil : +La tangente à l'extrémité DTAN_EXTR est nécessairement dans le plan de la fissure, +donc orthogonale à la normale au plan, calculée à partir des fonctions de niveaux +(level set) qui définissent la fissure. Vérifier les données. +"""), + +35: _(""" +Les directions normales au plan de la fissure entre les points %(i1)d et %(i2)d successifs du fond forment un angle +supérieur à 10 degrés. +-> Risque et Conseils +L'interpolation des sauts de déplacements est basée sur les champs singuliers +correspondants à une fissure plane. La fissure utilisée ici est trop irrégulière et +il y a donc un risque d'obtenir des résultats imprécis. +"""), + +36: _(""" +La tangente à l'origine n'est pas orthogonale à la normale au plan de la fissure +défini par VECT_K1. +-> Risque et Conseil : +La tangente à l'origine DTAN_ORIG est nécessairement dans le plan de la fissure, +donc orthogonale au VECT_K1 fourni. Vérifier les données. +"""), + +37: _(""" +La tangente à l'extrémité n'est pas orthogonale à la normale au plan de la fissure +défini par VECT_K1. +-> Risque et Conseil : +La tangente à l'extrémité DTAN_EXTR est nécessairement dans le plan de la fissure, +donc orthogonale au VECT_K1 fourni. Vérifier les données. +"""), +} diff --git a/Aster/Cata/cataSTA9/Messages/sdveri.py b/Aster/Cata/cataSTA9/Messages/sdveri.py index 42b56b82..0acb9c50 100644 --- a/Aster/Cata/cataSTA9/Messages/sdveri.py +++ b/Aster/Cata/cataSTA9/Messages/sdveri.py @@ -1,181 +1,75 @@ -#@ MODIF sdveri Messages DATE 09/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sdveri Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ - 1: _(""" - Impossible d'importer le catalogue de la structure de données '%(k1)s' -"""), - - -17: _(""" - Erreur de programmation : - Vérification d'une structure de donnée : - L'objet JEVEUX '%(k1)s' a un LONMAX incorrect. - LONMAX attendu : %(i1)d - LONMAX trouvé : %(i2)d -"""), - -18: _(""" - Erreur de programmation : - Vérification d'une structure de donnée : - La collection JEVEUX '%(k1)s' n'a pas le bon nombre d'objets (NUTIOC) -"""), - -19: _(""" - Erreur de programmation : - Vérification d'une structure de donnée : - Le pointeur de noms JEVEUX '%(k1)s' n'a pas la bonne longueur (NOMUTI) -"""), - -20: _(""" - Erreur de programmation : - Vérification d'une structure de donnée : - L'objet JEVEUX '%(k1)s' devrait etre de type entier -"""), - -21: _(""" - Erreur de programmation : - Vérification d'une structure de donnée : - L'objet JEVEUX '%(k1)s' devrait etre de type réel -"""), - -22: _(""" - Erreur de programmation : - Vérification d'une structure de donnée : - L'objet JEVEUX '%(k1)s' devrait etre de type complexe -"""), - - - - +cata_msg = { - -24: _(""" - Erreur de programmation : - Vérification d'une structure de donnée : - L'objet JEVEUX '%(k1)s' devrait etre de type '%(k2)s'. +1 : _(""" + Impossible d'importer le catalogue de la structure de données '%(k1)s' """), -25: _(""" - Erreur de programmation : - Vérification d'une structure de donnée : - La vérification '%(k1)s' n'est pas programmée. +2 : _(""" + Objet %(k1)s inexistant. """), -26: _(""" - Erreur de programmation : - Vérification d'une structure de donnée : - L'objet '%(k1)s' est obligatoire dans la SD mais il n'existe pas. +4 : _(""" + Arguments incohérents : + Nom des paramètres : %(k1)s + Valeur des paramètres : %(k2)s """), -27: _(""" - Erreur de programmation : - Vérification d'une structure de donnée : - L'objet JEVEUX '%(k1)s' a un champ DOCU incorrect. - Le champ DOCU attendu est : '%(k2)s' - Le champ DOCU trouvé est : '%(k3)s' +5 : _(""" + Arguments invalide : 'nomres' vide ! """), - - - -30: _(""" +30 : _(""" Erreur de programmation (catalogue des SD) : Vérification d'une structure de donnée : certains objets JEVEUX sont incorrects : """), -31: _(""" +31 : _(""" Objet : '%(k1)s' Message : %(k2)s """), -32: _(""" +32 : _(""" Fin Message 30 """), - - -40: _(""" +40 : _(""" Erreur de programmation (catalogue des SD) : Vérification d'une structure de donnée : Les objets suivants sont interdits dans les SD de type : %(k1)s """), -41: _(""" +41 : _(""" Objet '%(k1)s' INTERDIT """), -42: _(""" +42 : _(""" Fin Message 40 """), -45: _(""" - Erreur dans le Python : voir traceback ci-dessous +45 : _(""" + Erreur Python : voir traceback ci-dessous """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } diff --git a/Aster/Cata/cataSTA9/Messages/seisme.py b/Aster/Cata/cataSTA9/Messages/seisme.py new file mode 100644 index 00000000..7136efdd --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/seisme.py @@ -0,0 +1,155 @@ +#@ MODIF seisme Messages DATE 05/11/2007 AUTEUR VIVAN L.VIVAN +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ + + 1: _(""" + le noeud %(k1)s n'appartient pas au maillage: %(k2)s +"""), + + 2: _(""" + le groupe de noeuds %(k1)s n'appartient pas au maillage: %(k2)s +"""), + + 3: _(""" + le noeud %(k1)s n'est pas un noeud support. +"""), + + 4: _(""" + le vecteur directeur du spectre est nul. +"""), + + 5: _(""" + cas du MONO_APPUI: vous avez déjà donné un spectre pour cette direction. +"""), + + 6: _(""" + erreur(s) rencontrée(s) lors de la lecture des supports. +"""), + + 7: _(""" + vous avez déjà donné un spectre pour le support %(k1)s +"""), + + 8: _(""" + on ne peut pas traiter du MONO_APPUI et du MULTI_APPUI simultanément. +"""), + + 9: _(""" + on n'a pas pu extraire le premier champ des modes mécaniques. +"""), + +10: _(""" + correction statique non prise en compte pour l'option: %(k1)s +"""), + +11: _(""" + trop d'amortissements modaux + nombre d'amortissement: %(i1)d + nombre de mode : %(i2)d +"""), + +12: _(""" + amortissement non diagonal, on ne sait pas traiter. +"""), + +13: _(""" + il manque des amortissements modaux + nombre d'amortissements: %(i1)d + nombre de modes : %(i2)d +"""), + +14: _(""" + on ne peut pas demander de réponse secondaire sans la réponse primaire +"""), + +15: _(""" + analyse spectrale : + la base modale utilisée est : %(k1)s + le nombre de vecteurs de base est : %(i1)d + la règle de combinaison modale est : %(k2)s + les options de calcul demandées sont : %(k3)s """ + ), + +16: _(""" + %(k1)s """ + ), + +17: _(""" + la nature de l'excitation est : %(k1)s """ + ), + +18: _(""" + la règle de combinaison des réponses + directionnelles est : %(k1)s """ + ), + +19: _(""" + la règle de combinaison des contributions + de chaque mouvement d'appui est : %(k1)s """ + ), + +20: _(""" + erreur dans les données + la masse de la structure n'existe pas dans la table: %(k1)s +"""), + +21: _(""" + il faut au moins 2 occurences de DEPL_MULT_APPUI pour la combinaison des appuis. +"""), + +22: _(""" + COMB_DEPL_APPUI: il faut au moins définir 2 cas derrière le mot clé LIST_CAS. +"""), + +23: _(""" + données incompatibles + pour la direction : %(k1)s + nombre de blocage : %(i1)d + nombre d'excitations: %(i2)d +"""), + +24: _(""" + données incompatibles + pour les modes mécaniques : %(k1)s + il manque l'option : %(k2)s +"""), + +25: _(""" + problème stockage + option de calcul: %(k1)s + occurence : %(i1)d + nom du champ : %(k3)s +"""), + +26: _(""" + problème stockage + option de calcul: %(k1)s + direction : %(k2)s + nom du champ : %(k3)s +"""), + +27: _(""" +"""), + +} + diff --git a/Aster/Cata/cataSTA9/Messages/sensibilite.py b/Aster/Cata/cataSTA9/Messages/sensibilite.py index 36796454..26455ea9 100644 --- a/Aster/Cata/cataSTA9/Messages/sensibilite.py +++ b/Aster/Cata/cataSTA9/Messages/sensibilite.py @@ -1,4 +1,4 @@ -#@ MODIF sensibilite Messages DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF sensibilite Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -17,271 +17,177 @@ # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE ABBAS M.ABBAS def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" +1 : _(""" Type de dérivation voulu : %(i1)d Ce type n'est pas implanté. """), -2: _(""" +2 : _(""" On veut dériver %(k1)s par rapport à %(k2)s. Cela n'est pas disponible. """), -3: _(""" +3 : _(""" La dérivée de %(k1)s par rapport à %(k2)s est introuvable. """), -4: _(""" +4 : _(""" Le champ de theta sensibilité est inexistant dans la sd %(k1)s """), -5: _(""" +5 : _(""" On ne sait pas dériver ce type de structures : %(k1)s. """), -6: _(""" +6 : _(""" Le paramètre de sensibilité doit etre un champ theta. """), -7: _(""" +7 : _(""" Cette option est indisponible en sensibilité lagrangienne. """), -8: _(""" +8 : _(""" Pour l'occurrence numéro %(i1)d , la dérivée du champ %(k1)s de %(k2)s par rapport à %(k3)s est introuvable. """), -9: _(""" +9 : _(""" On ne sait pas trouver le type de la dérivation par rapport à %(k1)s. """), -10: _(""" +10 : _(""" Initialisation de la table associée à la table %(k1)s et au paramètre sensible %(k2)s connue sous le nom de concept %(k3)s """), -11: _(""" +11 : _(""" Le calcul de sensibilité n'est pas encore disponible pour les chargements de type epsi_init """), -12: _(""" +12 : _(""" Il y a vraisemblablement %(i1)d modes propres multiples. Le calcul des sensibilités se limite actuellement aux modes propres simples """), -13: _(""" +13 : _(""" On ne peut pas dériver avec une charge complexe en entrée de dyna_line_harm. """), -14: _(""" - La sensibilité en mécanique ne fonctionne pas encore avec un chargement thermique -"""), - -15: _(""" +15 : _(""" Le comportement %(k1)s n'est pas autorisé en sensibilité """), -16: _(""" +16 : _(""" EXICHA différent de 0 et 1 """), -22: _(""" - L'option sensibilité lagrangienne non opérationnelle en non lineaire +21 : _(""" + Pour faire une reprise avec un calcul de sensibilité, il faut renseigner "evol_noli" dans "etat_init" """), -21: _(""" - Pour faire une reprise avec un calcul de sensibilité, il faut renseigner "evol_noli" dans "etat_init" +22 : _(""" + L'option sensibilité lagrangienne non opérationnelle en non lineaire """), -31: _(""" +31 : _(""" L'option sensibilité n'est pas opérationnelle en séchage """), -32: _(""" +32 : _(""" L'option sensibilité n'est pas opérationnelle en hydratation """), -35: _(""" +35 : _(""" L'option sensibilité n'est pas opérationnelle pour le comportement %(k1)s """), -36: _(""" +36 : _(""" L'option sensibilité n'est pas opérationnelle pour le type d'élément %(k1)s """), -37: _(""" +37 : _(""" L'option sensibilité n'est pas opérationnelle pour la modélisation %(k1)s """), -38: _(""" +38 : _(""" pb determination sensibilité de rayonnement """), -39: _(""" +39 : _(""" pb determination sensibilité materiau ther_nl """), -41: _(""" +41 : _(""" Déplacements initiaux imposés nuls pour les calculs de sensibilité """), -42: _(""" +42 : _(""" Vitesses initiales imposées nulles pour les calculs de sensibilité """), -51: _(""" +51 : _(""" Dérivation de g : un seul paramètre sensible par appel à CALC_G. """), -52: _(""" +52 : _(""" Actuellement, on ne sait dériver que les 'POU_D_E'. """), -53: _(""" +53 : _(""" En thermoélasticité, le calcul des dérivées de g est pour le moment incorrect. """), -54: _(""" +54 : _(""" Avec un chargement en déformations (ou contraintes) initiales, le calcul des dérivées de g est pour le moment incorrect. """), -55: _(""" +55 : _(""" Le calcul de derivée n'a pas été étendu à la plasticité. """), -56: _(""" - Pas de calcul de sensibilité accessible. -"""), - -57: _(""" - Valeur incorrecte pour le nom du concept ou du paramètre sensible. - Ils doivent etre de type chaines de caractères de moins de 8 caractères. - Nom du concept : '%(k1)s' - Nom du paramètre sensible : '%(k2)s' -"""), - -58: _(""" - Nom du concept : '%(k1)s' - Nom du paramètre sensible : '%(k2)s' - - Nom composé (dérivé) : '%(k3)s' - -"""), - -59: _(""" - Liste des mots-clés : %(k1)s - Liste des valeurs : %(k2)s - Liste des mots-clés facteurs : %(k3)s - -"""), - - - - -71: _(""" +71 : _(""" Dérivation par rapport au paramètre sensible : %(k1)s """), -72: _(""" +72 : _(""" Le résultat est insensible au paramètre %(k1)s. """), -73: _(""" +73 : _(""" Le type de la dérivation est %(k1)s """), -80: _(""" - mauvaise valeur pour %(k1)s : il doit etre positif ou nul mais on a donné %(i1)d -"""), - -81: _(""" +81 : _(""" la structure nosimp est introuvable dans la memorisation inpsco """), -82: _(""" - choix=/prefixe/e/renc/remc/s svp et non pas %(k1)s. -"""), - -83: _(""" - la chaine pref passe en argument est trop courte pour mettre la chaine prefix = %(k1)s -"""), - -84: _(""" - mauvaise valeur pour %(k1)s : il faut entre %(i1)d et %(i2)d mais on a donné %(i3)d -"""), - -85: _(""" - probleme de declaration : la chaine %(k1)s est de longueur %(i1)d - on veut y mettre %(k2)s de longueur %(i2)d -"""), - -86: _(""" - choix=/e/l svp et non pas %(k1)s. -"""), - -87: _(""" - La fonction numéro %(i1)d est deja memorisee sous le nom %(k1)s -"""), - -88: _(""" - La chaine %(k1)s est de longueur %(i1)d - Pour un concept, pas plus de 8 caractères svp. -"""), - -89: _(""" - Mauvaise valeur pour choix ; il faut 1,2 ou 3, mais pas %(i1)d -"""), - -90: _(""" - La dérivée de %(k1)s par rapport à %(k2)s est déja nommée. -"""), - -91: _(""" +91 : _(""" Le pas de temps adaptatif n'est pas approprié pour le calcul de sensibilité par rapport au paramètre materiau """), -92: _(""" +92 : _(""" On ne peut pas dériver les concepts de type %(k1)s """), -93: _(""" +93 : _(""" On ne peut pas dériver avec un vect_asse en entree de dyna_line_harm. """), -94: _(""" - La structure %(k1)s apparait plusieurs fois en tant que derivée. -"""), - -95: _(""" +95 : _(""" Seuls sont possibles : """), -96: _(""" +96 : _(""" Les sous-types de sensibilité pour l'influence de %(k1)s sont %(k2)s et %(k3)s C'est incohérent. """), -97: _(""" -Mémorisation des données de la sensibilité : - - Les listes des mots-clés, des valeurs et mots-clés facteurs doivent etre de meme longueur. -"""), - -98: _(""" - Dans le programme %(k1)s, le paramètre de sensibilité %(k2)s est introuvable. -"""), - -99: _(""" - Impossible de trouver un sous-type de sensibilité pour l'influence de %(k1)s -"""), - } diff --git a/Aster/Cata/cataSTA9/Messages/soustruc.py b/Aster/Cata/cataSTA9/Messages/soustruc.py index ad62eb9a..ff49c8e8 100644 --- a/Aster/Cata/cataSTA9/Messages/soustruc.py +++ b/Aster/Cata/cataSTA9/Messages/soustruc.py @@ -1,4 +1,4 @@ -#@ MODIF soustruc Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF soustruc Messages DATE 08/04/2008 AUTEUR MEUNIER S.MEUNIER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -23,7 +23,7 @@ def _(x) : return x cata_msg={ 1: _(""" - les 2 maillages ne sont pas du meme type : 2d (ou 3d). + les 2 maillages ne sont pas du meme type : 2D (ou 3D). """), 2: _(""" @@ -35,55 +35,65 @@ cata_msg={ """), 4: _(""" - le group_ma : %(k1)s est en double. on ignore le second. + le GROUP_MA : %(k1)s est en double. on ignore le second. """), 5: _(""" - le group_no : %(k1)s est en double. on ignore le second. + le GROUP_NO : %(k1)s est en double. on ignore le second. """), 6: _(""" - le noeud: %(k1)s n'a pas les memes coordonnees dans les maillages: %(k2)s et %(k3)s + le noeud: %(k1)s n'a pas les memes coordonnées dans les maillages: %(k2)s et %(k3)s """), 7: _(""" - matrice de rigidite non inversible (modes rigides ???) - attention : criteres de choc non calcules + matrice de rigidité non inversible (modes rigides ???) + - attention : critères de choc non calculés """), 8: _(""" - matrice de rigidite : pivot quasi-nul (modes rigides ???) - attention : criteres de choc non calcules + matrice de rigidité : pivot quasi-nul (modes rigides ???) + - attention : critères de choc non calculés """), 9: _(""" - mot-clef "definition" interdit :le macr_elem: %(k1)s est deja defini. + mot-clef "DEFINITION" interdit : + le MACR_ELEM : %(k1)s est déja défini. """), 10: _(""" - mot-clef "rigi_meca" interdit :il est deja calcule. + mot-clef "RIGI_MECA" interdit : + il est deja calculé. """), 11: _(""" - mot-clef "rigi_meca" interdit :le resultat : %(k1)s existe deja. + mot-clef "RIGI_MECA" interdit : + le resultat : %(k1)s existe deja. """), 12: _(""" - mot-clef "mass_meca" interdit :il faut avoir fait "definition" et "rigi_meca". + mot-clef "MASS_MECA" interdit : + il faut avoir fait "DEFINITION" et "RIGI_MECA". """), 13: _(""" - mot-clef "mass_meca" interdit :il est deja calcule. + mot-clef "MASS_MECA" interdit : + il est deja calculé. """), 14: _(""" - mot-clef "cas_charge" interdit :il faut avoir fait "definition" et "rigi_meca". + mot-clef "CAS_CHARGE" interdit : + il faut avoir fait "DEFINITION" et "RIGI_MECA". """), 15: _(""" - cet operateur modifie un maillage existant. le resultat doit etre identique au concept donne dans l'argument maillage. + cet opérateur modifie un maillage existant + le resultat doit etre identique au concept donné dans l'argument MAILLAGE. """), 16: _(""" - maillages avec super mailles : utiliser operation : sous-stru + maillages avec super mailles : + utiliser OPERATION = SOUS-STRU """), 17: _(""" @@ -103,11 +113,12 @@ cata_msg={ """), 21: _(""" - critere inconnu + critère inconnu """), 22: _(""" - noeud eloignes a la normale au segment + noeud %(k1)s trop éloigné de la normale au segment + distance = %(r1)f """), 23: _(""" @@ -313,7 +324,7 @@ cata_msg={ """), 72: _(""" - erreur programmeur 2 + indicateur de diagonalité de la matrice spectrale : %(r1)f """), 73: _(""" @@ -364,19 +375,68 @@ cata_msg={ champ inexistant base %(k1)s nom_cham %(k2)s nume_ordre %(i1)d """), +85: _(""" + au noeud de choc: %(k1)s +"""), +86: _(""" + noeud %(k1)s en dehors du segment %(k2)s abscisse curviligne %(r1)f +"""), +87: _(""" + trop de noeuds dans le group_no noeud utilise: %(k1)s +"""), +88: _(""" + verifier votre maillage +"""), +89: _(""" + coordonnee x < 0 pour le noeud %(k1)s maille %(k2)s +"""), +90: _(""" + +"""), +91: _(""" + +"""), -86: _(""" - noeud %(k1)s en dehors du segment %(k2)s abscisse curviligne %(r1)f +92: _(""" + """), -87: _(""" - trop de noeuds dans le group_no noeud utilise: %(k1)s +93: _(""" + pour le mode no : %(i1)d taux de flexibilite locale : %(r1)f + souplesse locale : %(r2)f + taux effort tranchant local : %(r3)f + +"""), + +94: _(""" + -- bilan noeud de choc : %(k1)s taux de restit flexibilite : %(r1)f + taux de restit effort tranchant : %(r2)f +"""), + +95: _(""" + ( souplesse statique - souplesse locale )/ souplesse choc : %(r1)f +"""), + +96: _(""" + souplesse locale / souplesse choc : %(r1)f +"""), + +97: _(""" + +"""), + +98: _(""" + !! attentionplus petite val sing def stat : %(r1)f !! nous la forcons a : %(r2)f +"""), + +99: _(""" + ---- conditionnement def stat : %(r1)f """), } diff --git a/Aster/Cata/cataSTA9/Messages/soustruc2.py b/Aster/Cata/cataSTA9/Messages/soustruc2.py new file mode 100644 index 00000000..34355037 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/soustruc2.py @@ -0,0 +1,38 @@ +#@ MODIF soustruc2 Messages DATE 10/07/2007 AUTEUR PELLET J.PELLET +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" + !!! mode no : %(i1)d + lineairement dependant a def. statiqueval sing min : %(r1)f + !! nous la forcons a : %(r2)f +"""), + +2: _(""" + pour le mode no : %(i1)d participation : %(r1)f +"""), + +3: _(""" + +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/spectral0.py b/Aster/Cata/cataSTA9/Messages/spectral0.py new file mode 100644 index 00000000..493113a2 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/spectral0.py @@ -0,0 +1,73 @@ +#@ MODIF spectral0 Messages DATE 26/03/2008 AUTEUR BODEL C.BODEL +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1: _(""" +Nombre de fonctions erroné pour une matrice hermitienne. +"""), + +2: _(""" +%(k1)s: FREQ_MAX < FREQ_MIN +"""), + +3: _(""" +Erreur dans les indices. +"""), + +4: _(""" +Le fichier %(k1)s est introuvable. +"""), + +5: _(""" +La dimension DIM n est pas précisée dans le fichier lu. +"""), + +6: _(""" +Nombre de fonctions incorrect. +"""), + +7: _(""" +Erreur dans les données de fonctions. +"""), + +8: _(""" +Pas de calcul absolu avec TRAN_GENE. +"""), + +9: _(""" +Le fichier IDEAS est vide ou ne contient pas le data set demande +"""), + +10: _(""" +Un des data sets 58 contient une donnee qui n'est pas un inter-spectre +"""), + +11: _(""" +On ne traite pas les cas ou les abscisses frequentielles ne sont pas reglierement espacees +"""), + +12: _(""" +Le mot-cle format correspond au format du fichier source, qui peut etre 'ASTER' ou 'IDEAS' (pour lire les DS58) +"""), + + +} diff --git a/Aster/Cata/cataSTA9/Messages/stanley.py b/Aster/Cata/cataSTA9/Messages/stanley.py new file mode 100644 index 00000000..1f5700ab --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/stanley.py @@ -0,0 +1,208 @@ +#@ MODIF stanley Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { + +1 : _(""" +Redéfinition du DISPLAY vers %(k1)s. +"""), + +2 : _(""" +Stanley fonctionne en mode validation de non-regression. +"""), + +3 : _(""" +Aucune variable d'environnement DISPLAY définie ! +%(k1)s ne pourra pas fonctionner. On l'ignore. + +Si vous etes en Interactif, cochez le bouton Suivi Interactif +dans ASTK. + +Vous pouvez également préciser votre DISPLAY dans les arguments +de la commande STANLEY : + +STANLEY(DISPLAY='adresse_ip:0.0'); +"""), + +4 : _(""" +Une erreur est intervenue. Raison : %(k1)s +"""), + +5 : _(""" +Cette action n'est pas réalisable: %(k1)s +"""), + +6 : _(""" +En mode DISTANT, la variable %(k1)s est obligatoire. On abandonne. +"""), + +7 : _(""" +Le parametre 'machine_gmsh_exe' ou 'machine_visu' n'est pas renseigné, +il faut ouvrir le fichier manuellement. +"""), + +8 : _(""" +Lancement terminé. +"""), + +9 : _(""" +Exécution de %(k1)s +"""), + +10 : _(""" +Erreur de lancement de la commande! +"""), + +11 : _(""" +Dans le mode WINDOWS, la variable %(k1)s est obligatoire. On abandonne. +"""), + +12 : _(""" +Les fichiers de post-traitement sont copiés. +Veuillez maintenant ouvrir manuellement skin.pos avec GMSH. +"""), + +13 : _(""" +Le fichier de post-traitement est copie. +Veuillez maintenant ouvrir manuellement fort.33.pos avec GMSH. +"""), + +14 : _(""" +Impossible de contacter le serveur SALOME! Vérifier qu'il est bien lancé. +"""), + +15 : _(""" +Impossible de récupérer le nom de la machine locale! +Solution alternative : utiliser le mode DISTANT en indiquant l'adresse IP +ou le nom de la machine dans la case 'machine de salome'. +"""), + +16 : _(""" +Pour visualisation dans Salome, la variable %(k1)s est obligatoire. On abandonne. +"""), + +17 : _(""" +Pour visualisation dans Salome, la variable machine_salome_port est obligatoire. +On abandonne. +"""), + +18 : _(""" +Erreur : mode WINDOWS non implémenté +"""), + +19 : _(""" +Erreur: il est possible que Stanley ne puisse pas contacter Salome (machine salome definie : %(k1)s). +Vous pouvez modifier la machine Salome dans les parametres dans Stanley. +"""), + +20 : _(""" +Execution terminée. +"""), + +21 : _(""" +Le module python "pylotage" semble etre absent, ou mal configuré, +on désactive le mode Salome de Stanley. +"""), + +22 : _(""" +Impossible d'affecter la variable [%(k1)s / %(k2)s]. +"""), + +23 : _(""" +Lecture du fichier d'environnement : %(k1)s +"""), + +24 : _(""" +Il n'y a pas de fichier d'environnement. +On démarre avec une configuration par défaut. +"""), + +25 : _(""" +Le fichier d'environnement n'a pas la version attendue. +On continue mais en cas de problème, effacer le repertoire ~/%(k1)s et relancer. +"""), + +26 : _(""" +Le fichier d'environnement n'est pas exploitable (par exemple c'est une ancienne version). +On démarre avec une configuration par défaut. +"""), + +27 : _(""" +On initialise une configuration par défaut. +"""), + +28 : _(""" +Nouveaux paramètres sauvegardés dans : %(k1)s +"""), + +29 : _(""" +Impossible de sauvegarder les paramètres dans : %(k1)s +"""), + +30 : _(""" +La visualisation aux points de Gauss n'est pas permise avec la sensibilité. +"""), + +31 : _(""" +Problème : %(k1)s +"""), + +32 : _(""" +Impossible d'ouvrir en écriture le fichier %(k1)s +"""), + +33 : _(""" +Attention : on ne peut pas tracer un champ aux points de Gauss sur la déformée... +"""), + +34 : _(""" +Le champ est tracé avec la déformée. +"""), + +35 : _(""" +Concept ignoré : %(k1)s +"""), + +36 : _(""" +Il y a plusieurs concepts %(k1)s stockés dans la structure de donnée résultat. +"""), + +37 : _(""" +Tous les concepts Aster nécessaires à Stanley n'ont pas été calculés. +Il manque : +%(k1)s +"""), + +38 : _(""" +Stanley - Erreur lors de l'appel à la commande Aster: + +%(k1)s +Raison: +%(k2)s +"""), + +40 : _(""" +Stanley - Projection aux points de Gauss: type de résultat non développé +%(k1)s +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/stbtrias.py b/Aster/Cata/cataSTA9/Messages/stbtrias.py index 6eb72e5d..f7e6c15e 100644 --- a/Aster/Cata/cataSTA9/Messages/stbtrias.py +++ b/Aster/Cata/cataSTA9/Messages/stbtrias.py @@ -1,4 +1,4 @@ -#@ MODIF stbtrias Messages DATE 20/02/2007 AUTEUR LEBOUVIER F.LEBOUVIER +#@ MODIF stbtrias Messages DATE 11/09/2007 AUTEUR DURAND C.DURAND # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -23,46 +23,49 @@ def _(x) : return x cata_msg={ 1: _(""" - le fichier ideas est vide, ou ne contient pas de datatset traite par l'interface + le fichier IDEAS est vide + ou ne contient pas de DATASET traite par l'interface """), 2: _(""" - couleur inconnu + couleur inconnue """), 3: _(""" - attention le dataset 2420 apparait plusieurs fois. + attention le DATASET 2420 apparait plusieurs fois. """), 4: _(""" - attention le dataset 18 apparait plusieurs fois. + attention le DATASET 18 apparait plusieurs fois. """), 5: _(""" - groupe %(k1)s de longueur superieure a 8 (troncature du nom) + groupe %(k1)s de longueur supérieure à 8 (troncature du nom) """), 6: _(""" - le nom du groupe est invalide: %(k1)s : non traite + le nom du groupe est invalide: %(k1)s : non traité """), 7: _(""" - le nom du groupe %(k1)s est tronque : %(k2)s + le nom du groupe %(k1)s est tronqué : %(k2)s """), 8: _(""" - le nom du groupe ne peut commencer par coul_ : non traite + le nom du groupe ne peut commencer par COUL_ : non traité """), 9: _(""" - aucun systeme de coordonnes n'est defini + aucun système de coordonnés n'est défini """), 10: _(""" - attention systeme de coordonnes autre que cartesien non relu dans aster. + attention système de coordonnées autre que cartésien non relu dans ASTER. """), 11: _(""" - attention votre maillage utiliseplusieurs systemes de coordonnees.verifier qu'ils sont tous identiques car asterne gere qu'un systeme de coordonne cartesien unique. + attention votre maillage utilise plusieurs systèmes de coordonnées + vérifiez qu'ils sont tous identiques + ASTER ne gère qu'un système de coordonnéez cartesien unique. """), } diff --git a/Aster/Cata/cataSTA9/Messages/subdivise.py b/Aster/Cata/cataSTA9/Messages/subdivise.py new file mode 100644 index 00000000..9cffdc87 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/subdivise.py @@ -0,0 +1,103 @@ +#@ MODIF subdivise Messages DATE 19/12/2007 AUTEUR ABBAS M.ABBAS +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +# Pour la méthode de subdivision + +cata_msg={ + +# Plus de messages pour développeur ==> ASSERT + +# Messages utilisateurs +10: _("""Le nombre maximale d'itérations autorisées ITER_GLOB_* est atteint. +La méthode de subdivision ne peut pas faire d'extrapolation. +La subdivision UNIFORME est déclenchée. +Cela peut etre du à une oscillation de l'erreur ou à une divergence. + Nombre d'intervalle = <%(i1)d> + Niveau de subdivision = <%(i2)d> + Ratio sur le premier intervalle = <%(r1)E> + Pas de Temps actuel = <%(r2)E>"""), + +11: _("""La méthode de subdivision ne peut pas faire d'extrapolation. +Il n'y a pas de convergence et la méthode de subdivision trouve un nombre +d'itération à convergence < au nombre donné sous le mot clé CONVERGENCE. +La subdivision UNIFORME est déclanchée. + Nombre d'intervalle = <%(i1)d> + Niveau de subdivision = <%(i2)d> + Ratio sur le premier intervalle = <%(r1)E> + Pas de Temps actuel = <%(r2)E>"""), + +12: _("""Le nombre maximal de niveau de subdivision est atteint. + SUBD_NIVEAU doit etre >= <%(i1)d> + SUBD_NIVEAU est de = <%(i2)d> +Conseil : + Augmenter SUBD_NIVEAU. Il est également possible d'ajuster SUBD_PAS_MINI pour + imposer un incrément de temps en-dessous duquel on ne peut plus subdiviser. + Si les 2 mots clefs SUBD_NIVEAU et SUBD_PAS_MINI sont utilisés la subdivision + s'arrete dès que l'un des 2 critères est vérifié."""), + +13: _("""Méthode de subdivision : %(k1)s"""), + +14: _("""La subdivision est forcée, méthode UNIFORME. + Nombre d'intervalle = <%(i1)d> + Niveau de subdivision = <%(i2)d> + Ratio sur le premier intervalle = <%(r1)E> + Pas de Temps actuel = <%(r2)E>"""), + +15: _("""Le pas minimal de la subdivision est atteint. + Pas de Temps actuel = <%(r1)E> + Pas de Temps minimum imposé = <%(r2)E> + Niveau de subdivision = <%(i1)d> + Méthode de subdivision = <%(k1)s> +Conseil : + Diminuer SUBD_PAS_MINI. Il est également possible d'ajuster SUBD_NIVEAU pour + indiquer le nombre successif de subdivision d'un pas de temps. + Si les 2 mots clefs SUBD_NIVEAU et SUBD_PAS_MINI sont utilisés la subdivision + s'arrete dès que l'un des 2 critères est vérifié."""), + +16: _("""Méthode extrapolation, convergence prévue en %(i1)d iterations pour un maximum +d'itérations autorisé de %(i2)d."""), + +17: _("""Itération n %(i1)d, poursuite autorisée."""), + +18: _("""Subdivision du pas de temps en %(i1)d intervalles. Le ratio sur le premier +intervalle est de %(r1)e. + Niveau de subdivision = <%(i2)d> + Pas de Temps actuel = <%(r2)E>"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/supervis.py b/Aster/Cata/cataSTA9/Messages/supervis.py index 52eb45af..e3a5269c 100644 --- a/Aster/Cata/cataSTA9/Messages/supervis.py +++ b/Aster/Cata/cataSTA9/Messages/supervis.py @@ -1,4 +1,4 @@ -#@ MODIF supervis Messages DATE 07/06/2007 AUTEUR PELLET J.PELLET +#@ MODIF supervis Messages DATE 19/05/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -22,25 +22,33 @@ def _(x) : return x cata_msg={ +1 : _(""" + L'utilisation du mot-clé PAR_LOT='NON' permet d'accéder en lecture et en écriture + au contenu des concepts Aster. De ce fait, votre étude est exclue du périmètre + qualifié de Code_Aster puisque toutes ses étapes ne peuvent être certifiées. - - - + Conseils : + - Il n'y a pas particulièrement de risque de résultat faux... sauf si votre + programmation l'introduit. + - Distinguez le calcul lui-même (qui doit sans doute passer en PAR_LOT='OUI') + des post-traitements (qui nécessiteraient le mode PAR_LOT='NON') qui peuvent + être réalisés en POURSUITE. +"""), 2: _(""" Arret sur erreur(s) utilisateur """), 3: _(""" - Erreur programmeur : JEMARQ/JEDEMA non apparies. + Erreur programmeur : JEMARQ/JEDEMA non appariés. """), 4: _(""" - Commande n %(k1)s : "%(k2)s" : %(k3)s erreur(s) detectee(s) + Commande n %(k1)s : "%(k2)s" : %(k3)s erreur(s) détectée(s) """), 5: _(""" - Erreur(s) à l'exécution de "%(k1)s" : arret immediat du programme. + Erreur(s) à l'exécution de "%(k1)s" : arret immédiat du programme. """), 6: _(""" @@ -48,11 +56,12 @@ cata_msg={ """), 7: _(""" - Le concept " %(k1)s " est inconnu. Il n'est ni parmi les créés, ni parmi ceux à créer. + Le concept " %(k1)s " est inconnu. + Il n'est ni parmi les créés, ni parmi ceux à créer. """), 8: _(""" - Un nom de concept intermediaire doit commencer par '.' ou '_' et non : %(k1)s + Un nom de concept intermédiaire doit commencer par '.' ou '_' et non : %(k1)s """), 9: _(""" @@ -60,15 +69,31 @@ cata_msg={ """), 10: _(""" - - le concept "%(k1)s" est detruit des bases de donnees. + - le concept "%(k1)s" est détruit des bases de données. """), 11: _(""" - Impossible d'allouer la mémoire jeveux demandée + Impossible d'allouer la mémoire JEVEUX demandée : %(i1)d Moctets. + + En général, cette erreur se produit car la mémoire utilisée hors du fortran + (jeveux) est importante. + + Causes possibles : + - le calcul produit de gros objets Python dans une macro-commande ou + dans le jeu de commande lui-même, + - le calcul appelle un solveur (MUMPS par exemple) ou un outil externe + qui a besoin de mémoire hors jeveux, + - utilisation de jeveux dynamique, + - ... + + Solution : + - distinguer la mémoire limite du calcul (case "Mémoire totale" de astk) + de la mémoire réservée à jeveux (case "dont Aster"), le reste étant + disponible pour les allocations dynamiques. """), 12: _(""" - Exécution de jeveux en mode debug + Exécution de JEVEUX en mode DEBUG """), 13: _(""" @@ -107,10 +132,6 @@ cata_msg={ Erreur(s) fatale(s) lors de la lecture des catalogues """), -22: _(""" -L'argument du mot cle "NOM" sous le mot clé facteur "CODE" est tronqué à 8 caractères. Le nom de code est donc "%(k1)s". -"""), - 23: _(""" Debug JXVERI demandé """), @@ -121,6 +142,8 @@ L'argument du mot cle "NOM" sous le mot cl 25: _(""" Mémoire gestion : "COMPACTE" + Ce mode de gestion peut augmenter sensiblement le temps système de certaines commandes, + les lectures/écritures sur les bases Jeveux étant beaucoup plus fréquentes """), 26: _(""" @@ -136,7 +159,7 @@ L'argument du mot cle "NOM" sous le mot cl """), 29: _(""" - Trop de noms definis dans la liste argument de "FICHIER" + Trop de noms définis dans la liste argument de "FICHIER" """), 30: _(""" @@ -152,7 +175,7 @@ L'argument du mot cle "NOM" sous le mot cl """), 33: _(""" - Erreur fatale **** appel a commande "superviseur". + Erreur fatale **** appel à commande "superviseur". """), 34: _(""" @@ -167,11 +190,6 @@ L'argument du mot cle "NOM" sous le mot cl Le concept de nom '%(k1)s' n'existe pas """), - - - - - 38: _(""" Il n'y a plus de temps pour continuer """), @@ -189,8 +207,6 @@ L'argument du mot cle "NOM" sous le mot cl Le message d'alarme '%(k1)s' a été émis %(i1)d fois, il ne sera plus affiché. """), - - 43: _(""" Debug SDVERI suspendu """), @@ -203,8 +219,6 @@ Le message d'alarme '%(k1)s' a Debug JEVEUX suspendu """), - - 47: _(""" Debug JXVERI suspendu """), @@ -218,48 +232,194 @@ Le message d'alarme '%(k1)s' a """), 50: _(""" - la commande a un numero non appelable dans cette version. - le numero errone est %(i1)d + la commande a un numéro non appelable dans cette version. + le numero erroné est %(i1)d +"""), + +52: _(""" + fin de lecture (durée %(r1)f s.) %(k1)s """), +53: _(""" + vous ne pouvez utiliser plus de %(i1)d + niveaux de profondeur pour des appels par la procédure %(k1)s +"""), +55: _(""" + Appels récursifs de messages d'erreur ou d'alarme. +"""), +56: _(""" + Incohérence entre le catalogue et le corps de la macro. +"""), +57: _(""" + Impossible d'importer '%(k1)s' dans Messages. + Le fichier %(k1)s.py n'existe pas dans le répertoire 'Messages' + ou bien la syntaxe du fichier est incorrecte. + Merci de signaler cette anomalie. + Traceback : + %(k2)s +"""), +60: _(""" + la procédure a un numéro non appelable dans cette version. + le numero errone est %(i1)d +"""), -52: _(""" - fin de lecture (duree %(r1)f s.) %(k1)s +61: _(""" + La commande a un numéro non appelable dans cette version + Le numéro erroné est : %(i1)d """), -53: _(""" - vous ne pouvez utiliser plus de %(i1)d - niveaux de profondeur pour des appels par la procedure %(k1)s +62: _(""" + Les messages d'erreurs précédent concerne la commande : """), +63: _(""" + ARRET PAR MANQUE DE TEMPS CPU + Les commandes suivantes sont ignorees, on passe directement dans FIN + La base globale est sauvegardee + Temps consomme de la reserve CPU : %(r1).2f s\n +"""), +64: _(""" + Valeur initiale du temps CPU maximum = %(i1)d secondes + Valeur du temps CPU maximum passé aux commandes = %(i2)d secondes + Réserve CPU prévue = %(i3)d secondes +"""), +65: _(""" + %(k1)s %(k2)s %(k3)s %(k4)s +"""), +66: _(""" + %(k1)s %(k2)s %(k3)s %(k4)s %(k5)s +"""), +67: _(""" + Passage numéro %(i1)d +"""), -55 : _(""" - Appels récursifs de messages d'erreur ou d'alarme. +68: _(""" + information sur les concepts devant etre créés. """), -56 : _(""" - Incohérence entre le catalogue et le corps de la macro. +69: _(""" + %(k1)s %(k2)s %(k3)s %(k4)s """), -57 : _(""" - Impossible d'importer '%(k1)s' dans Messages. - Le fichier %(k1)s.py n'existe pas dans le répertoire 'Messages' - ou bien la syntaxe du fichier est incorrecte. - - Merci de signaler cette anomalie. - - Traceback : - %(k2)s +70: _(""" + %(k1)s %(k2)s %(k3)s %(k4)s %(k5)s +"""), + +71: _(""" + rappel sur les executions précédentes + - il a ete executé %(i1)d procédures et opérateurs. +"""), + +72: _(""" + - l'execution précédente s'est terminée correctement. +"""), + +73: _(""" + + - l'execution précédente s'est terminée en erreur dans la procédure %(k1)s. +"""), + +74: _(""" + + - l'execution précédente s'est terminée en erreur dans l'opérateur %(k1)s. +"""), + +75: _(""" + le concept %(k1)s de type %(k2)s est peut-etre errone. +"""), + +76: _(""" + - l'execution precedente s'est terminee prematurement dans l'operateur %(k1)s. +"""), + +77: _(""" + le concept %(k1)s de type %(k2)s a ete néanmoims validé par l'opérateur +"""), + +78: _(""" + Message attache au concept %(k1)s +"""), + +79: _(""" + Pas de message attache au concept %(k1)s +"""), + +80: _(""" + +"""), + +81: _(""" + %(k1)s nom symbolique inconnu + - nombre de valeurs attendues %(i1)d + - valeurs attendues : %(k1)s, %(k2)s,... +"""), + +82: _(""" + L'argument du mot cle "CAS" est errone. + Valeur lue %(k1)s + nombre de valeurs attendues %(i1)d + valeurs attendues : %(k1)s,%(k2)s, ... +"""), + +83: _(""" + + le nombre d'enregistrements (nmax_enre) et leurs longueurs (long_enre) conduisent a un +fichier + dont la taille maximale en octets (%(i1)d) est superieure a limite autorisee : %(i2)d + +"""), + +84: _(""" + Nom symbolique errone pour un fichier de sortie + Valeur lue %(k1)s + - nombre de valeurs attendues %(i2)d + - valeurs attendues %(k2)s, %(k3)s + +"""), + +85: _(""" + information sur les concepts existants. +"""), + +86: _(""" + Erreur a la relecture du fichier pick.1 : aucun objet sauvegardé ne sera récupéré. +"""), + +87: _(""" +Types incompatibles entre glob.1 et pick.1 pour le concept de nom %(k1)s. +"""), + +88: _(""" +Concept de nom %(k1)s et de type %(k2)s introuvable dans la base globale" +"""), + +# on ne veut pas émettre d'alarme mais que le message se voit, donc on fait la mise en forme ici ! +89 : _(""" + !-----------------------------------------------------------------------! + ! Liste des alarmes émises lors de l'exécution du calcul. ! + ! ! + ! Les alarmes que vous avez choisies d'ignorer sont précédées de (*). ! + ! Nombre d'occurrences pour chacune des alarmes : ! +"""), + +90 : _(""" ! %(k1)3s %(k2)-20s émise %(i1)4d fois ! +"""), + +91 : _(""" !-----------------------------------------------------------------------! + +"""), + +92 : _(""" ! aucune alarme ! """), } diff --git a/Aster/Cata/cataSTA9/Messages/table0.py b/Aster/Cata/cataSTA9/Messages/table0.py index 12245845..45fbb1cb 100644 --- a/Aster/Cata/cataSTA9/Messages/table0.py +++ b/Aster/Cata/cataSTA9/Messages/table0.py @@ -1,8 +1,8 @@ -#@ MODIF table0 Messages DATE 20/02/2007 AUTEUR LEBOUVIER F.LEBOUVIER +#@ MODIF table0 Messages DATE 25/02/2008 AUTEUR ZENTNER I.ZENTNER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,10 +20,62 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" +1 : _(""" Erreur dans les données. Le paramètre %(k1)s n'existe pas dans la table. """), +2 : _(""" +Paramètre %(k1)s inexistant dans la table %(k2)s. +"""), + +3 : _(""" +Opération RENOMME. Erreur : %(k1)s +"""), + +4 : _(""" +Paramètre %(k1)s inexistant dans la table %(k2)s. +"""), + +5 : _(""" +Paramètre %(k1)s inexistant dans la table %(k2)s. +"""), + +6 : _(""" +Le fichier %(k1)s existe déjà, on écrit à la suite. +"""), + +7 : _(""" +Paramètre absent de la table : %(k1)s. +"""), + +8 : _(""" +Paramètres absents de la table (ou de NOM_PARA) : %(k1)s. +"""), + +10 : _(""" +NUME_TABLE=%(i1)d incorrect : il n'y a que %(i2)d blocs de tables dans le fichier. +"""), + +11 : _(""" +Nombre de champs incorrect ligne %(i1)d. +"""), + +12 : _(""" +On attend %(i1)d paramètres. +"""), + +13 : _(""" +On a lu %(i1)d champs dans le fichier. +"""), + +14 : (""" +Les listes NOM_PARA et VALE doivent avoir le meme cardinal. +"""), + +15 : (""" +Les listes DEFA et PARA_NOCI doivent avoir le meme cardinal. +"""), + } diff --git a/Aster/Cata/cataSTA9/Messages/test0.py b/Aster/Cata/cataSTA9/Messages/test0.py new file mode 100644 index 00000000..23dc39e8 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/test0.py @@ -0,0 +1,56 @@ +#@ MODIF test0 Messages DATE 19/11/2007 AUTEUR COURTOIS M.COURTOIS +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg={ +1 : _(""" +Expression régulière invalide : %(k2)s + +Exception retournée : + %(k1)s +"""), + +2 : _(""" +Le fichier n'a pas été fermé : %(k1)s +"""), + +3 : _(""" +TEST_FICHIER impossible, fichier inexistant : %(k1)s +"""), + +4 : _(""" + + Nom du fichier : %(k3)s + + ----------------------------------------------------------------------- + | FICHIER | REFERENCE | + ------------------------------------------------------------------------------------------- + | Nombre de valeurs | %(i1)6d | %(i2)6d | + | Somme des valeurs | %(r1)20.13e | %(k4)20s | + | md5sum des textes | %(k1)-32s | %(k2)-32s | + ------------------------------------------------------------------------------------------- + +"""), + +} + + + diff --git a/Aster/Cata/cataSTA9/Messages/unilater.py b/Aster/Cata/cataSTA9/Messages/unilater.py new file mode 100644 index 00000000..07b09970 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/unilater.py @@ -0,0 +1,35 @@ +#@ MODIF unilater Messages DATE 19/12/2007 AUTEUR ABBAS M.ABBAS +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { + +51 : _(""" +Il y a plusieurs charges contenant des liaisons unilatérales. +"""), + + +75: _(""" +Pour le mot-clef LIAISON_UNILATER. +La composante %(k2)s est inexistante sur le noeud %(k1)s +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/utilifor.py b/Aster/Cata/cataSTA9/Messages/utilifor.py index b68ff17c..b6ca09f0 100644 --- a/Aster/Cata/cataSTA9/Messages/utilifor.py +++ b/Aster/Cata/cataSTA9/Messages/utilifor.py @@ -1,4 +1,4 @@ -#@ MODIF utilifor Messages DATE 20/02/2007 AUTEUR LEBOUVIER F.LEBOUVIER +#@ MODIF utilifor Messages DATE 18/09/2007 AUTEUR DURAND C.DURAND # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -22,36 +22,17 @@ def _(x) : return x cata_msg={ -1: _(""" - number of terms .le. 0 -"""), - -2: _(""" - nombre de termes .gt. 1000 -"""), - -3: _(""" - x en dehors de l'intervalle (-1,+1) -"""), - 4: _(""" - x trop grand -"""), - -5: _(""" - nombre de coefficients inferieur a 1 -"""), - -6: _(""" - serie de chebyshev trop courte pour la precision + X trop grand """), 7: _(""" - probleme dans la resolution du systeme sous contraint vsrsrr + problème dans la résolution du système sous contraint VSRSRR """), 8: _(""" - la programmation prevoit que les entiers sont codes sur plus de 32 bits. ce qui n'est pas le cas sur votre machine + la programmation prévoit que les entiers sont codés sur plus de 32 bits + ce qui n'est pas le cas sur votre machine """), 9: _(""" diff --git a/Aster/Cata/cataSTA9/Messages/utilitai.py b/Aster/Cata/cataSTA9/Messages/utilitai.py index 74461622..f19902b9 100644 --- a/Aster/Cata/cataSTA9/Messages/utilitai.py +++ b/Aster/Cata/cataSTA9/Messages/utilitai.py @@ -1,420 +1,390 @@ -#@ MODIF utilitai Messages DATE 29/09/2006 AUTEUR VABHHTS J.PELLET +#@ MODIF utilitai Messages DATE 08/02/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" +1 : _(""" le nombre de grels du ligrel du modele est nul. """), -2: _(""" +2 : _(""" il ne faut pas demander 'tr' derriere cara si le type d'element discret ne prend pas en compte la rotation """), -3: _(""" +3 : _(""" "*" est illicite dans une liste. """), -4: _(""" +4 : _(""" %(k1)s n'est pas une option reconnu. """), -5: _(""" +5 : _(""" vecteur axe de norme nulle """), -6: _(""" +6 : _(""" axe non colineaire a v1v2 """), -7: _(""" +7 : _(""" pb norme de axe """), -8: _(""" - erreur dans fointc -"""), - -9: _(""" +9 : _(""" dimension %(k1)s inconnue. """), -10: _(""" +10 : _(""" maillage obligatoire. """), -11: _(""" - on ne peut pas creer un champ de vari_r avec le mot cle facteur affe (voir u2.01.09) +11 : _(""" + on ne peut pas créer un champ de VARI_R avec le mot cle facteur AFFE + (voir u2.01.09) """), -12: _(""" - mot cle affe/noeud interdit ici. +12 : _(""" + mot clé AFFE/NOEUD interdit ici. """), -13: _(""" - mot cle affe/group_no interdit ici. +13 : _(""" + mot clé AFFE/GROUP_NO interdit ici. """), -14: _(""" - type scalaire non traite : %(k1)s +14 : _(""" + type scalaire non traité : %(k1)s """), -15: _(""" - incoherence entre nombre de composantes et nombre de valeurs +15 : _(""" + incohérence entre nombre de composantes et nombre de valeurs """), -16: _(""" - il faut champ de fonctions svp +16 : _(""" + il faut donner un champ de fonctions """), -17: _(""" - les parametres doivent etre reels +17 : _(""" + les parametres doivent être réels """), -18: _(""" - maillages diff. +18 : _(""" + maillages différents """), -19: _(""" - erreur pgmeur: augmenter nbpumx. +20 : _(""" + le champ %(k1)s n'est pas de type réel """), -20: _(""" - le champ %(k1)s n'est pas de type reel +21 : _(""" + on ne traite que des "CHAM_NO" ou des "CHAM_ELEM". """), -21: _(""" - on ne traite que des "cham_no" ou des "cham_elem". -"""), -22: _(""" - unknown parameter (dvlp) -"""), -23: _(""" + + + +23 : _(""" on ne trouve aucun champ. """), -24: _(""" - le nom symbolique: %(k1)s est illicite pour ce resultat +24 : _(""" + le nom symbolique: %(k1)s est illicite pour ce résultat """), -25: _(""" - le champ cherche n'a pas encore ete calcule. +25 : _(""" + le champ cherché n'a pas encore été calculé. """), -26: _(""" - pas la meme numerotation sur les cham_nos. +26 : _(""" + pas la meme numerotation sur les CHAM_NO. """), -27: _(""" +27 : _(""" il faut donner un maillage. """), -28: _(""" - champ non-assemblable en cham_no: %(k1)s +28 : _(""" + champ non-assemblable en CHAM_NO: %(k1)s """), -29: _(""" - champ non-assemblable en cham_elem (elga): %(k1)s +29 : _(""" + champ non-assemblable en CHAM_ELEM (ELGA): %(k1)s """), -30: _(""" - a faire ?? +30 : _(""" + Pour l'operation "ASSE", la commande ne permet pas de créer de champs CHAM_ELEM/ELEM """), -31: _(""" +31 : _(""" nom_cmp2 et nom_cmp de longueur differentes. """), 32: _(""" - grandeur incorrecte pour: %(k1)s + Grandeur incorrecte pour le champ : %(k1)s + grandeur proposée : %(k2)s + grandeur attendue : %(k3)s """), -33: _(""" +33 : _(""" le mot-cle 'coef_c' n'est applicable que pour un champ de type complexe """), -34: _(""" +34 : _(""" developpement non realise pour les champs aux elements. vraiment desole ! """), -35: _(""" +35 : _(""" le champ %(k1)s n'est pas de type complexe """), -36: _(""" +36 : _(""" on ne traite que des cham_no reels ou complexes. vraiment desole ! """), -37: _(""" +37 : _(""" acces "r8" interdit ici. """), -38: _(""" +38 : _(""" acces interdit """), -39: _(""" +39 : _(""" genre : %(k1)s non prevu. """), -40: _(""" - structure de donnees inexistante : %(k1)s +40 : _(""" + structure de donnees inexistante : %(k1)s """), -41: _(""" - duplcation "maillage" du .ltnt, objet inconnu: %(k1)s +41 : _(""" + duplcation "maillage" du .ltnt, objet inconnu: %(k1)s """), -42: _(""" - type de sd. inconnu : %(k1)s +42 : _(""" + type de sd. inconnu : %(k1)s """), -43: _(""" - numerotation absente probleme dans la matrice %(k1)s +43 : _(""" + numerotation absente probleme dans la matrice %(k1)s """), -44: _(""" +44 : _(""" erreur dans la recuperation du nombre de noeuds ! """), -45: _(""" +45 : _(""" type non connu. """), -46: _(""" +46 : _(""" la fonction doit s appuyee sur un maillage pour lequel une abscisse curviligne a ete definie. """), -47: _(""" +47 : _(""" le mot cle : %(k1)s n est pas autorise. """), -48: _(""" - erreur dans la dimension du vecteur .erre. cf diinit -"""), - -49: _(""" - la question : " %(k1)s " est inconnue +49 : _(""" + DISMOI : + la question : " %(k1)s " est inconnue """), -50: _(""" - cham_elem inexistant: %(k1)s +50 : _(""" + CHAM_ELEM inexistant: %(k1)s """), -51: _(""" - il n y a pas de nume_ddl pour ce cham_no +51 : _(""" + il n y a pas de NUME_DDL pour ce CHAM_NO """), -52: _(""" +52 : _(""" type de charge inconnu """), -53: _(""" - suffixe inconu: %(k1)s +53 : _(""" + suffixe inconu: %(k1)s """), -54: _(""" +54 : _(""" trop d objets """), -55: _(""" - champ inexistant: %(k1)s +55 : _(""" + champ inexistant: %(k1)s """), -56: _(""" +56 : _(""" le champ : " %(k1)s " n est pas un champ """), -57: _(""" - la question n'a pas de reponse sur une grandeur de type matrice gd_1 x gd_2 -"""), - -58: _(""" - situation imprevue. +57 : _(""" + DISMOI : + la question n'a pas de réponse sur une grandeur de type matrice gd_1 x gd_2 """), -59: _(""" +59 : _(""" + DISMOI : la question n'a pas de sens sur une grandeur de type matrice gd_1 x gd_2 """), -60: _(""" - la question n'a pas de sens sur une grandeur de type composee +60 : _(""" + DISMOI : + la question n'a pas de sens sur une grandeur de type composée """), -61: _(""" - imprevu +63 : _(""" + phenomene inconnu : %(k1)s """), -62: _(""" - on ne sait pas associer de phenomene a ce ligrel : %(k1)s -"""), - -63: _(""" - phenomene inconnu : %(k1)s -"""), - -64: _(""" - probleme dismoi. -"""), - -65: _(""" +65 : _(""" le type de concept : " %(k1)s " est inconnu """), -66: _(""" - le phenomene : %(k1)s est inconnu. +66 : _(""" + le phénomène : %(k1)s est inconnu. """), -67: _(""" - 2 +68 : _(""" + type de resultat inconnu: %(k1)s pour l'objet : %(k2)s """), -68: _(""" - type de resultat inconnu: %(k1)s pour l'objet : %(k2)s +69 : _(""" + le resultat composé ne contient aucun champ """), -69: _(""" - le resulat compose ne contient aucun champ +70 : _(""" + TYPE_MAILLE inconnu. """), -70: _(""" - type_maille inconnu. +71 : _(""" + mauvaise recuperation de NEMA """), -71: _(""" - mauvaise recuperation de nema -"""), - -72: _(""" +72 : _(""" on ne traite pas les noeuds tardifs """), -73: _(""" +73 : _(""" grandeur inexistante """), -74: _(""" +74 : _(""" composante de grandeur inexistante """), -75: _(""" - probleme avec la reponse %(k1)s +75 : _(""" + probleme avec la reponse %(k1)s """), -76: _(""" +76 : _(""" les conditions aux limites autres que des ddls bloques ne sont pas admises """), -77: _(""" - unite logique %(k1)s , probleme lors du close +77 : _(""" + unite logique %(k1)s , probleme lors du close """), -78: _(""" - erreur dans la recuperation du maillage! +78 : _(""" + erreur dans la recuperation du maillage """), -79: _(""" - erreur dans la recuperation du nombre de mailles ! +79 : _(""" + erreur dans la récuperation du nombre de mailles """), -80: _(""" - gruopage : groupe_ma non present ! +80 : _(""" + groupe_ma non présent """), -81: _(""" - erreur a l'appel de metis plus aucune unite logique libre ! +81 : _(""" + erreur à l'appel de METIS + plus aucune unité logique libre """), -82: _(""" +82 : _(""" methode d'integration inexistante. """), -83: _(""" +83 : _(""" interpolation par defaut "lineaire" """), -84: _(""" +84 : _(""" interpolation %(k1)s non implantee """), -85: _(""" +85 : _(""" recherche " %(k1)s " inconnue """), -86: _(""" +86 : _(""" l'intitule " %(k1)s " n'est pas correct. """), -87: _(""" +87 : _(""" le noeud " %(k1)s " n'est pas un noeud de choc. """), -88: _(""" +88 : _(""" nom de sous-structure et d'intitule incompatible """), -89: _(""" +89 : _(""" le noeud " %(k1)s " n'est pas un noeud de choc de l'intitule. """), -90: _(""" +90 : _(""" le noeud " %(k1)s " n'est pas compatible avec le nom de la sous-structure. """), -91: _(""" +91 : _(""" le parametre " %(k1)s " n'est pas un parametre de choc. """), -92: _(""" +92 : _(""" le noeud " %(k1)s " n'existe pas. """), -93: _(""" +93 : _(""" la composante " %(k1)s " du noeud " %(k2)s " n'existe pas. """), -94: _(""" - type de champ inconnu %(k1)s +94 : _(""" + type de champ inconnu %(k1)s """), -95: _(""" - "interp_nume" et ("inst" ou "list_inst") non compatibles +95 : _(""" + "INTERP_NUME" et ("INST" ou "LIST_INST") non compatibles """), -96: _(""" - "interp_nume" et ("freq" ou "list_freq") non compatibles +96 : _(""" + "INTERP_NUME" et ("FREQ" ou "LIST_FREQ") non compatibles """), -97: _(""" - erreur 0 +99 : _(""" + objet %(k1)s inexistant """), -98: _(""" - 1bis -"""), - -99: _(""" - erreur 1 -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/utilitai2.py b/Aster/Cata/cataSTA9/Messages/utilitai2.py index c600ea6a..ad392cf4 100644 --- a/Aster/Cata/cataSTA9/Messages/utilitai2.py +++ b/Aster/Cata/cataSTA9/Messages/utilitai2.py @@ -1,8 +1,8 @@ -#@ MODIF utilitai2 Messages DATE 17/04/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF utilitai2 Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,308 +20,233 @@ def _(x) : return x -cata_msg={ +cata_msg = { -2: _(""" - erreur 2 -"""), - -3: _(""" - erreur 3 -"""), - -4: _(""" +4 : _(""" probleme pour recuperer les variables d'acces """), -5: _(""" +5 : _(""" on ne traite que des variables d'acces reelles """), -6: _(""" +6 : _(""" on ne traite que des parametres reels """), -7: _(""" +7 : _(""" unite logique inexistante """), -8: _(""" +8 : _(""" fonction a une seule variable admis """), -9: _(""" - developpement non implante. -"""), - -10: _(""" +10 : _(""" on n'imprime pas encore de fonction de type " %(k1)s " desole. """), -11: _(""" +11 : _(""" on ne sait pas imprimer une fonction de type " %(k1)s " desole. """), -12: _(""" +12 : _(""" interpolation sur parametres non permise """), -13: _(""" +13 : _(""" interpolation " %(k1)s " inconnue """), -14: _(""" +14 : _(""" " %(k1)s " type de fonction inconnu """), -15: _(""" - pour l'instant, on ne traite pas les formules complexes -"""), - -16: _(""" +16 : _(""" interpolation non permise """), -17: _(""" +17 : _(""" on ne connait pas ce type d'interpolation: %(k1)s """), - - - - -29: _(""" - a faire 1 ... -"""), - -30: _(""" - a faire 2 ... -"""), - -31: _(""" +31 : _(""" on ne trouve pas l'equation %(k1)s dans le "prof_chno" """), - - - - - - - -33: _(""" - le champ nuro cree par nurota comporte d'autres valeurs que 0 ou 1 -"""), - -34: _(""" - il y a un bug angles nautiques -"""), - -35: _(""" +35 : _(""" il y a un bug """), -36: _(""" +36 : _(""" group_ma_interf: un element n'est ni tria3 ni tria6 ni quad4 ni quad8 """), -37: _(""" +37 : _(""" group_ma_flu_str: un element n'est ni tria3 ni tria6 ni quad4 ni quad8 """), -38: _(""" +38 : _(""" group_ma_flu_sol: un element n'est ni tria3 ni tria6 ni quad4 ni quad8 """), -39: _(""" +39 : _(""" group_ma_sol_sol: un element n'est ni tria3 ni tria6 ni quad4 ni quad8 """), -40: _(""" - erreur : lmat est nul. -"""), - -41: _(""" +41 : _(""" on ne traite que les matrices symetriques. """), -42: _(""" +42 : _(""" on ne traite que les matrices reelles. """), -43: _(""" - option inconnue. -"""), - -44: _(""" - il y un bug. -"""), - -45: _(""" +45 : _(""" manque une maille tardive """), -46: _(""" - developpement non realise. -"""), - -47: _(""" +47 : _(""" le fichier " %(k1)s " n'est relie a aucune unite logique. """), -48: _(""" - type base inconnu : %(k1)s -"""), - -49: _(""" - la l_table n'existe pas -"""), - -50: _(""" - nombre de bornes errone : on doit en avoir autant que de numeros d'ordre -"""), - -51: _(""" - mot-clef obligatoire avec option calc_k_max ! -"""), - -52: _(""" +52 : _(""" ajout de l'option "sief_elga_depl", les charges sont-elles correctes ? """), -53: _(""" +53 : _(""" nombre max d'iterations atteint """), -54: _(""" +54 : _(""" la dimension d'espace doit etre <= 3 """), -55: _(""" +55 : _(""" les points du nuage de depart sont tous en (0.,0.,0.). """), -56: _(""" +56 : _(""" le nuage de depart est vide. """), -57: _(""" +57 : _(""" les points du nuage de depart sont tous confondus. """), -58: _(""" +58 : _(""" les points du nuage de depart sont tous alignes. """), -59: _(""" +59 : _(""" les points du nuage de depart sont tous coplanaires. """), -60: _(""" +60 : _(""" methode inconnue : %(k1)s """), -61: _(""" +61 : _(""" le descripteur_grandeur de compor ne tient pas sur un seul entier_code """), -62: _(""" +62 : _(""" erreur dans etenca """), -63: _(""" +63 : _(""" la composante relcom n'a pas ete affectee pour la grandeur compor """), -64: _(""" +64 : _(""" le ddl : %(k1)s n'existe pas dans la grandeur : %(k2)s """), -65: _(""" +65 : _(""" incompatibilite sur la description des ddls de la grandeur """), -66: _(""" +66 : _(""" pas assez de valeurs dans la liste. """), -67: _(""" +67 : _(""" il faut des triplets de valeurs. """), -68: _(""" +68 : _(""" il n'y a pas un nombre pair de valeurs. """), -69: _(""" +69 : _(""" nombre de valeurs different pour "noeud_para" et "vale_y" """), -70: _(""" +70 : _(""" il manque des valeurs dans %(k1)s ,liste plus petite que %(k2)s """), -71: _(""" +71 : _(""" interpolation "log" et valeurs negatives sont incompatibles ! """), -72: _(""" +72 : _(""" parametres non croissants """), -73: _(""" +73 : _(""" deux fonctions differentes affectee a la meme valeur de parametre. """), -74: _(""" +74 : _(""" deux listes de valeurs differentes affectee a la meme valeur de parametre. """), -75: _(""" +75 : _(""" les listes nume_lign et liste_x doivent contenir le meme nombre de termes """), -76: _(""" +76 : _(""" les noms des paramètres doivent etre différents """), -78: _(""" +77 : _(""" + les listes d'abscisses et d'ordonnées doivent etre de memes longueurs +"""), + +78 : _(""" fonction incompatible avec %(k1)s """), -79: _(""" +79 : _(""" les noms de chaque parametre doivent etre differents """), -80: _(""" +80 : _(""" un seul nume_ordre !!! """), -81: _(""" - il faut le meme nombre. -"""), - -82: _(""" +82 : _(""" la fonction ne doit avoir qu'une ou deux variables """), -83: _(""" +83 : _(""" les noeuds debut et fin n appartiennent pas au maillage. """), -84: _(""" +84 : _(""" la fonction doit s appuyee sur un maillage pour lequel une abscisse curviligne est definie. """), -85: _(""" +85 : _(""" mauvaise definition des noeuds debut et fin """), -86: _(""" +86 : _(""" le nombre de champs a lire est superieur a 100 """), -87: _(""" +87 : _(""" -> Le maillage doit etre issu d'IDEAS pour garantir la cohérence entre le maillage et les résultats lus. @@ -332,51 +257,40 @@ cata_msg={ que celui lu par aster (LIRE_MAILLAGE). """), -88: _(""" +88 : _(""" le mot cle modele est obligatoire pour un champ de type cham_elem """), -89: _(""" +89 : _(""" le format ensight n'accepte que le champ pres """), -90: _(""" +90 : _(""" nflag etant egal a 0, on ne peut pas avoir plus d'un instant. """), -91: _(""" +91 : _(""" element non prevu %(k1)s """), -92: _(""" - nom_cham_med ? (svp) -"""), - -93: _(""" - evol_ther - champ temp uniqmt +93 : _(""" + evol_ther - champ temp uniquement """), -94: _(""" +94 : _(""" champ non prevu : %(k1)s """), -95: _(""" +95 : _(""" %(k1)s et %(k2)s : nombre de composantes incompatible. """), -96: _(""" - champ med introuvable : %(k1)s -"""), - -97: _(""" +97 : _(""" aucun champ lu. """), -98: _(""" +98 : _(""" on n'a pas lu tous les champs. """), -99: _(""" - erreur dans la donnee de la s.d. %(k1)s a imprimer, il ne s'agit ni d'un matr_elem, ni d'un vect_elem car le .liste_resu n'existe pas. -"""), } diff --git a/Aster/Cata/cataSTA9/Messages/utilitai3.py b/Aster/Cata/cataSTA9/Messages/utilitai3.py index 41d03d71..42c47d36 100644 --- a/Aster/Cata/cataSTA9/Messages/utilitai3.py +++ b/Aster/Cata/cataSTA9/Messages/utilitai3.py @@ -1,8 +1,8 @@ -#@ MODIF utilitai3 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF utilitai3 Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR @@ -20,384 +20,370 @@ def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - erreur dans la donnee de la s.d. %(k1)s a imprimer, il ne s'agit ni d'un matr_elem, ni d'un vect_elem. -"""), - -2: _(""" +2 : _(""" l utilisation de cette commande n est legitime que si la configuration etudiee est du type "faisceau_trans" """), -3: _(""" +3 : _(""" erreur dvp_1 """), -4: _(""" +4 : _(""" le nom d'un parametre ne peut pas depasser 16 caracteres """), -5: _(""" +5 : _(""" le parametre %(k1)s n 'existe pas """), -6: _(""" +6 : _(""" seuls les parametres de types reel, entier ou complexe sont traites """), -7: _(""" +7 : _(""" erreur dvp_2 """), -8: _(""" +8 : _(""" code retour non nul detecte """), -9: _(""" +9 : _(""" maillage autre que seg2 ou poi1 """), -10: _(""" +10 : _(""" mailles ponctuelles plexus poi1 ignorees """), -11: _(""" +11 : _(""" le format doit etre ideas """), -12: _(""" +12 : _(""" le maillage doit etre issu d'ideas """), -13: _(""" +13 : _(""" maillage non issu d'ideas """), -14: _(""" +14 : _(""" avec le 2414, on ne traite pas les nume_ordre """), -15: _(""" +15 : _(""" pb lecture du fichier ideas """), -16: _(""" - nom_med ? (svp) -"""), - -17: _(""" +17 : _(""" format %(k1)s inconnu. """), -18: _(""" +18 : _(""" nom_cmp_idem est curieux : %(k1)s """), -19: _(""" +19 : _(""" probleme maillage <-> modele """), -20: _(""" +20 : _(""" le champ de meta_elno_temp:etat_init(num_init) n'existe pas. """), -21: _(""" +21 : _(""" maillage et modele incoherents. """), -22: _(""" +22 : _(""" pour type_resu:'el..' il faut renseigner le mot cle modele. """), -23: _(""" +23 : _(""" option: %(k1)s non prevue pour les elements du modele. """), -24: _(""" +24 : _(""" option= %(k1)s incompatible avec type_cham= %(k2)s """), -25: _(""" +25 : _(""" operation= %(k1)s seulement type_cham= 'noeu_geom_r' """), -26: _(""" +26 : _(""" operation= %(k1)s incompatible avec type_cham= %(k2)s """), -27: _(""" +27 : _(""" grandeurs differentes pour : %(k1)s et : %(k2)s """), -28: _(""" +28 : _(""" il existe des doublons dans la liste d'instants de rupture """), -29: _(""" +29 : _(""" il faut donner plus d'un instant de rupture """), -30: _(""" +30 : _(""" il manque des temperatures associees aux bases de resultats (mot-cle tempe) """), -31: _(""" +31 : _(""" le parametre m de weibull doit etre le meme pour toutes les bases resultats ! """), -32: _(""" +32 : _(""" le parametre sigm_refe de weibull doit etre le meme pour toutes les bases resultats ! """), -33: _(""" +33 : _(""" aucun numero d'unite logique n'est associe a %(k1)s """), -34: _(""" +34 : _(""" aucun numero d'unite logique n'est disponible """), -35: _(""" +35 : _(""" action inconnue: %(k1)s """), -36: _(""" +36 : _(""" arret de la procedure de recalage : le parametre m est devenu trop petit (m<1) , verifiez vos listes d'instants de rupture """), -37: _(""" +37 : _(""" les parametres de la nappe ont ete reordonnees. """), -38: _(""" +38 : _(""" type de fonction non connu (ordonn) """), -39: _(""" +39 : _(""" points confondus. """), -40: _(""" +40 : _(""" impossibilite, la maille %(k1)s doit etre de type "seg2" ou "seg3"et elle est de type : %(k2)s """), -41: _(""" +41 : _(""" nbma different de nbel """), -42: _(""" +42 : _(""" le contour n est pas ferme """), +43 : _(""" + le mot-clé "reuse" n'existe que pour l'opération "ASSE" +"""), - - - - - - -44: _(""" +44 : _(""" nbma different de nbe """), -45: _(""" +45 : _(""" nj2 different de nj0 """), -46: _(""" +46 : _(""" le groupe de mailles " %(k1)s " n'existe pas. """), -47: _(""" +47 : _(""" le groupe %(k1)s ne contient aucune maille. """), -48: _(""" +48 : _(""" on ne traite que des problemes 2d. """), -49: _(""" +49 : _(""" la maille " %(k1)s " n'existe pas. """), -50: _(""" +50 : _(""" on doit donner un resultat de type "evol_ther" apres le mot-cle "lapl_phi" du mot-facteur "cara_poutre" dans la commande post_elem pour calculer la constante de torsion. """), -51: _(""" +51 : _(""" le nombre d'ordres du resultat %(k1)s necessaire pour calculer la constante de torsion doit etre egal a 1. """), -52: _(""" +52 : _(""" on n'arrive pas a recuperer le champ de temperatures du resultat %(k1)s """), -53: _(""" +53 : _(""" la table "cara_geom" n'existe pas. """), -54: _(""" +54 : _(""" on doit donner un resultat de type "evol_ther" apres le mot-cle "lapl_phi_y" du mot-facteur "cara_poutre" dans la commande post_elem pour calculer les coefficients de cisaillement et les coordonnees du centre de torsion. """), -55: _(""" +55 : _(""" on doit donner un resultat de type "evol_ther" apres le mot-cle "lapl_phi_z" du mot-facteur "cara_poutre" dans la commande post_elem pour calculer les coefficients de cisaillement et les coordonnees du centre de torsion. """), -56: _(""" +56 : _(""" le nombre d'ordres du resultat %(k1)s necessaire pour calculer les coefficients de cisaillement et les coordonnees du centre de torsion doit etre egal a 1. """), -57: _(""" +57 : _(""" on doit donner un resultat de type "evol_ther" apres le mot-cle "lapl_phi" du mot-facteur "cara_poutre" dans la commande post_elem pour calculer la constante de gauchissement. """), -58: _(""" +58 : _(""" le nombre d'ordres du resultat %(k1)s necessaire pour calculer la constante de gauchissement doit etre egal a 1. """), -59: _(""" +59 : _(""" il faut donner le nom d'une table issue d'un premier calcul avec l'option "cara_geom" de post_elem apres le mot-cle "cara_geom" du mot-facteur "cara_poutre". """), -60: _(""" +60 : _(""" il faut obligatoirement definir l'option de calcul des caracteristiques de poutre apres le mot-cle "option" du mot-facteur "cara_poutre" de la commande post_elem. """), -61: _(""" +61 : _(""" l'option %(k1)s n'est pas admise apres le mot-facteur "cara_poutre". """), -62: _(""" +62 : _(""" il faut donner le nom d'un resultat de type evol_ther apres le mot-cle lapl_phi du mot-facteur "cara_poutre". """), -63: _(""" +63 : _(""" il faut donner le nom d'un resultat de type evol_ther apres le mot-cle lapl_phi_y du mot-facteur "cara_poutre". """), -64: _(""" +64 : _(""" il faut donner le nom d'un resultat de type evol_ther apres le mot-cle lapl_phi_z du mot-facteur "cara_poutre". """), -65: _(""" +65 : _(""" y a un bug 12 """), -66: _(""" +66 : _(""" y a un bug 13 """), -67: _(""" +67 : _(""" y a un bug 14 """), -68: _(""" +68 : _(""" on attend un concept "mode_meca" ou "evol_elas" ou "evol_ther" ou "dyna_trans" ou "evol_noli" """), -69: _(""" +69 : _(""" champ de vitesse donne. """), -70: _(""" +70 : _(""" champ de deplacement donne. """), -71: _(""" +71 : _(""" option masse coherente. """), -72: _(""" +72 : _(""" calcul avec masse diagonale """), -73: _(""" +73 : _(""" type de champ inconnu. """), - - - - - - - -75: _(""" +75 : _(""" on attend un concept "mode_meca" ou "evol_elas" ou "mult_elas" ou "evol_ther" ou "dyna_trans" ou "evol_noli" """), -76: _(""" +76 : _(""" pour calculer les indicateurs globaux d'energie, il faut donner un resultat issu de stat_non_line . """), -77: _(""" +77 : _(""" on attend un resultat de type "evol_noli" . """), -78: _(""" +78 : _(""" le resultat %(k1)s doit comporter la relation de comportement au numero d'ordre %(k2)s . """), -79: _(""" +79 : _(""" le resultat %(k1)s doit comporter un champ de variables internes au numero d'ordre %(k2)s . """), -80: _(""" +80 : _(""" impossibilite : le volume du modele traite est nul. """), -81: _(""" +81 : _(""" impossibilite : le volume du group_ma %(k1)s est nul. """), -82: _(""" +82 : _(""" impossibilite : le volume de la maille %(k1)s est nul. """), -83: _(""" +83 : _(""" erreur: les options de calcul doivent etre identiques pour toutes les occurrences du mot clef facteur """), -84: _(""" +84 : _(""" on attend un concept "evol_noli" """), -85: _(""" +85 : _(""" erreur: le champ sief_elga n'existe pas """), -86: _(""" +86 : _(""" erreur: le champ vari_elga n'existe pas """), -87: _(""" +87 : _(""" erreur: le champ depl_elno n'existe pas """), -88: _(""" +88 : _(""" erreur: le champ epsg_elga_depl n'existe pas """), -89: _(""" +89 : _(""" les 2 nuages : %(k1)s et %(k2)s doivent avoir le meme nombre de coordonnees. """), -90: _(""" +90 : _(""" les 2 nuages : %(k1)s et %(k2)s doivent avoir la meme grandeur associee. """), -91: _(""" +91 : _(""" il manque des cmps sur : %(k1)s """), -92: _(""" +92 : _(""" l'interpolation n'est pas encore faite en complexe. """), -93: _(""" +93 : _(""" seuls les types "reel" et "complexe" sont autorises. """), +94 : _(""" + MINMAX est toujours calculé sur TOUT le modèle pour les champs aux noeuds. +"""), + } diff --git a/Aster/Cata/cataSTA9/Messages/utilitai4.py b/Aster/Cata/cataSTA9/Messages/utilitai4.py index de42b0b6..059c7f39 100644 --- a/Aster/Cata/cataSTA9/Messages/utilitai4.py +++ b/Aster/Cata/cataSTA9/Messages/utilitai4.py @@ -1,4 +1,4 @@ -#@ MODIF utilitai4 Messages DATE 04/04/2007 AUTEUR ABBAS M.ABBAS +#@ MODIF utilitai4 Messages DATE 08/02/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -349,9 +349,10 @@ cata_msg={ concept %(k1)s non existant """), -95: _(""" - l'objet de nom " %(k1)s " est inconnu. -"""), + + + + 96: _(""" expression incorrecte diff --git a/Aster/Cata/cataSTA9/Messages/utilitai5.py b/Aster/Cata/cataSTA9/Messages/utilitai5.py index 7f17be08..15827600 100644 --- a/Aster/Cata/cataSTA9/Messages/utilitai5.py +++ b/Aster/Cata/cataSTA9/Messages/utilitai5.py @@ -1,328 +1,294 @@ -#@ MODIF utilitai5 Messages DATE 06/04/2007 AUTEUR PELLET J.PELLET +#@ MODIF utilitai5 Messages DATE 02/06/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ +cata_msg = { -1: _(""" - nombre en dehors de (-1,1) -"""), - -2: _(""" +2 : _(""" asin/acos svp """), -3: _(""" +3 : _(""" selection de ddl : choix < %(k1)s > inconnu """), -4: _(""" +4 : _(""" argument d'appel invalide : typf = %(k1)s """), -5: _(""" +5 : _(""" argument d'appel invalide : acces = %(k1)s """), -6: _(""" +6 : _(""" argument d'appel invalide : autor = %(k1)s """), -7: _(""" +7 : _(""" redefinition de l'unite logique %(k1)s non autorisee """), -8: _(""" +8 : _(""" nombre maximum d'unites logiques ouvertes atteint %(k1)s """), -9: _(""" +9 : _(""" argument d'appel invalide : unit = %(k1)s """), -10: _(""" +10 : _(""" aucun numero d'unite logiquedisponible """), -11: _(""" +11 : _(""" unite logique %(k1)s associee au nom %(k2)s et au fichier %(k3)s """), -12: _(""" +12 : _(""" vous devez d'abord le fermer pour l'associer au nom %(k1)s """), -13: _(""" +13 : _(""" unite logique %(k1)s deja utilisee en acces %(k2)s par le fichier %(k3)s """), -14: _(""" +14 : _(""" vous devez d'abord le fermer """), -15: _(""" +15 : _(""" unite logique %(k1)s deja utilisee en mode binaire par le fichier %(k2)s """), -16: _(""" +16 : _(""" vous devez d'abord fermer le fichier associe """), -17: _(""" +17 : _(""" unite logique %(k1)s deja utilisee par le fichier %(k2)s associee au nom %(k3)s """), -18: _(""" +18 : _(""" unite logique %(k1)s , probleme lors de l'open %(k2)s """), -19: _(""" +19 : _(""" unite logique %(k1)s , probleme lors du positionnement """), -20: _(""" +20 : _(""" unite logique %(k1)s , probleme lors de l'inquire """), -21: _(""" +21 : _(""" nombre d'unites logiques ouvertes superieur a //k4b """), -22: _(""" +22 : _(""" unite logique %(k1)s , probleme lors du close de la reservation. """), -23: _(""" +23 : _(""" la redefinition de l'unite logique %(k1)s n'est pas autorisee """), -24: _(""" +24 : _(""" type d'acces inconnu " %(k1)s ", unite %(k2)s """), -25: _(""" +25 : _(""" fichier non nomme, unite %(k1)s """), -26: _(""" +26 : _(""" fichier non ouvert, unite %(k1)s """), -27: _(""" +27 : _(""" rewind impossible, unite %(k1)s """), -28: _(""" +28 : _(""" positionnement inconnu " %(k1)s ", unite %(k2)s """), -29: _(""" +29 : _(""" les champs de type " %(k1)s " sont interdits.(a faire ...) """), -30: _(""" +30 : _(""" composante %(k1)s inexistante pour la grandeur %(k2)s """), -31: _(""" +31 : _(""" la maille: %(k1)s n'appartient pas au maillage: %(k2)s """), -32: _(""" +32 : _(""" le champ: %(k1)s n'est pas un champ par elements aux noeuds. """), - - - - - - - -34: _(""" +34 : _(""" la maille: %(k1)s n'est pas affectee dans le ligrel: %(k2)s """), -35: _(""" +35 : _(""" la maille: %(k1)s possede un type d'element ignorant le cham_elem teste. """), -36: _(""" +36 : _(""" num. de sous-point > max """), -37: _(""" +37 : _(""" num. de point > max """), -38: _(""" +38 : _(""" l'element n'admet pas la composante %(k1)s """), -39: _(""" +39 : _(""" determination de la localisation des points de gauss """), -40: _(""" - type de donnees inconnu : %(k1)s +40 : _(""" + LIRE_RESU ne sait pas lire les structures de données de type %(k1) s """), -41: _(""" +41 : _(""" xous : %(k1)s non prevu. """), -42: _(""" +42 : _(""" chaine sch1 trop longue >24 """), -43: _(""" +43 : _(""" ipos hors de l intervalle (0 24) """), -44: _(""" +44 : _(""" longueur totale > 24 """), -45: _(""" +45 : _(""" on demande un nombre de composantes negatif pour %(k1)s """), -46: _(""" +46 : _(""" on demande des composantes inconnues pour %(k1)s """), -47: _(""" +47 : _(""" mot-clef : %(k1)s inconnu. """), -48: _(""" +48 : _(""" composante inexistante dans le champ: %(k1)s """), -49: _(""" +49 : _(""" type de champ non traite: %(k1)s """), - - - - - - - -52: _(""" +52 : _(""" mauvaise valeur pour fonree """), -53: _(""" +53 : _(""" pas de composantes """), -54: _(""" +54 : _(""" l"argument "indi" est non valide """), -55: _(""" +55 : _(""" l"appel a uttcpu ne peut etre effectue avec la valeur "debut" pour l"argument para """), -56: _(""" +56 : _(""" l"appel a uttcpu ne peut etre effectue avec la valeur "fin" pour l"argument para """), -57: _(""" +57 : _(""" l"appel a uttcpu ne peut etre effectue avec la valeur %(k1)s pour l"argument para """), -58: _(""" +58 : _(""" (uttrif) type de fonction non connu. """), -59: _(""" +59 : _(""" il existe au moins un noeud qui n appartient pas au groupe de mailles. """), -60: _(""" +60 : _(""" un sous-domaine est non-connexe """), - - - - - - -88: _(""" +88 : _(""" L'option " %(k1)s " est à recalculer """), -89: _(""" +89 : _(""" Erreur de programmation : contacter l'assistance """), -90: _(""" +90 : _(""" On ne trouve pas le VALE_PARA_FONC exact dans la liste de la nappe """), -91: _(""" +91 : _(""" %(k1)s n'est pas un champ de résultat. """), -92: _(""" +92 : _(""" Interpolation LOG et complexe en ordonnées sont incompatibles ! """), -93: _(""" +93 : _(""" Le stockage dans la SD résultat du modèle, du champ materiau et des caractéristiques élémentaires n'est pas possible pour une SD résultat de type %(k1)s. """), -94: _(""" +94 : _(""" Le stockage de la SD charge dans la SD résultat n'est pas possible pour une SD résultat de type %(k1)s. """), -95: _(""" +95 : _(""" le noeud %(k1)s ne supporte pas la composante %(k2)s """), -96: _(""" +96 : _(""" le noeud %(k1)s le noeud %(k2)s ne supporte pas la composante %(k3)s """), -97: _(""" +97 : _(""" le type de champ %(k1)s n''est pas accepte. %(k2)s veuillez consulter la %(k3)s doc u correspondante %(k4)s """), - - - - - - - - - - } diff --git a/Aster/Cata/cataSTA9/Messages/utilitai6.py b/Aster/Cata/cataSTA9/Messages/utilitai6.py index e8857d54..07864f90 100644 --- a/Aster/Cata/cataSTA9/Messages/utilitai6.py +++ b/Aster/Cata/cataSTA9/Messages/utilitai6.py @@ -1,446 +1,310 @@ -#@ MODIF utilitai6 Messages DATE 15/05/2007 AUTEUR GNICOLAS G.NICOLAS +#@ MODIF utilitai6 Messages DATE 08/02/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- - # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== def _(x) : return x -cata_msg={ -1: _(""" +cata_msg = { + +1 : _(""" - la grandeur introduite en operande ne figure pas dans le catalogue des grandeurs + la grandeur introduite en opérande ne figure pas dans le catalogue des grandeurs grandeur %(k1)s """), -2: _(""" +2 : _(""" incoherence dans les donnees: on cherche a creer un champ de valeurs fonctions alors que la grandeur n''est pas de type fonction grandeur de la commande : %(k1)s """), -3: _(""" +3 : _(""" - la liste de composantes et la liste des valeurs n''ont pas la meme dimension + la liste de composantes et la liste des valeurs n'ont pas la même dimension occurence de affe numero %(i1)d """), -4: _(""" - une composante n''appartient pas a la grandeur +4 : _(""" + une composante n'appartient pas à la grandeur occurence de affe numero %(i1)d grandeur : %(k1)s composante : %(k2)s """), -5: _(""" +5 : _(""" - le nume_ddl en entree ne s''appuie pas sur la meme grandeur que celle de la commande + le nume_ddl en entree ne s'appuie pas sur la même grandeur que celle de la commande grandeur associee au nume_ddl %(k1)s grandeur de la commande : %(k2)s """), -6: _(""" +6 : _(""" on a affecte la fonction %(k1)s pour la composante %(k2)s """), -7: _(""" +7 : _(""" on a affecte la valeur %(r1)f pour la composante %(k1)s """), -8: _(""" +8 : _(""" - on cherche a affecter sur un noeud une composante qui n''est pas dans le profil noeud d''entree + on cherche a affecter sur un noeud une composante qui n'est pas dans le profil noeud d'entree noeud : %(k1)s composante : %(k2)s """), - - - - - - - - - - - - -11: _(""" - une composante n''appartient pas a la grandeurgrandeur : %(k1)s +11 : _(""" + une composante n'appartient pas à la grandeur + grandeur : %(k1)s composante : %(k2)s """), -12: _(""" +12 : _(""" variable inconnue: variable : %(k1)s pour le resultat : %(k2)s """), -13: _(""" +13 : _(""" probleme rencontre lors de la recherche de la variable : %(k1)s debut : %(k2)s fin : %(k3)s """), -14: _(""" +14 : _(""" interpolation non permise. valeur a interpoler: %(r1)f borne inferieure: %(r2)f borne superieure: %(r3)f """), -15: _(""" - il faut donner : - une maille ou un group_ma %(k1)s - - un noeud ou un group_no ou un point. %(k2)s +15 : _(""" + il faut donner : - une maille ou un GROUP_MA %(k1)s + - un noeud ou un GROUP_NO ou un point. %(k2)s """), -16: _(""" +16 : _(""" interpolation impossible instant a interpoler: %(r1)f """), -17: _(""" +17 : _(""" interpolation impossible instant a interpoler: %(r1)f borne inferieure: %(r2)f """), -18: _(""" +18 : _(""" interpolation impossible instant a interpoler: %(r1)f borne superieure: %(r2)f """), -19: _(""" +19 : _(""" cham_no inexistant pour l''acces %(k1)s sur le resultat %(k2)s pour le nume_ordre %(i1)d instant a interpoler %(r1)f """), - - - - - -25: _(""" +25 : _(""" cham_elem inexistant pour l''acces %(k1)s sur le resultat %(k2)s pour le nume_ordre %(i1)d instant a interpoler %(r1)f """), - - - - - - - -27: _(""" +27 : _(""" il sera tronque: %(k1)s """), -36: _(""" - erreur de programmationtype de fonction inconnu %(k1)s -"""), -37: _(""" + + +37 : _(""" erreur la fonction %(k1)s a %(i1)d arguments, le maximum exploitable est %(i2)d """), -38: _(""" +38 : _(""" il y a %(i1)d parametre(s) identique(s) dans la %(k1)s definition de la nappe. %(k2)s """), -39: _(""" - erreur dans les donnees interface de type : %(k1)s non valable %(k2)s +39 : _(""" + erreur dans les données interface de type : %(k1)s non valable %(k2)s """), -40: _(""" - erreur dans les donneeson ne retrouve pas le noeud %(k1)s +40 : _(""" + erreur dans les données, on ne retrouve pas le noeud %(k1)s dans la numerotation %(k2)s """), -41: _(""" - erreur dans les donnees le noeud : %(k1)s +41 : _(""" + erreur dans les données le noeud : %(k1)s n''appartient pas au maillage %(k2)s """), - - - - - - - - - - - - -44: _(""" - trop d''amortissements modaux nombre d''amortissements : %(i1)d +44 : _(""" + trop d'amortissements modaux nombre d'amortissements : %(i1)d nombre de modes : %(i2)d """), - - - - - - - -47: _(""" +47 : _(""" erreur dans la recherche du noeud nom du noeud : %(k1)s nom du maillage : %(k2)s """), -48: _(""" - methode de newtonexposant de la loi = %(r1)f +48 : _(""" + methode de newton exposant de la loi = %(r1)f nombre d''iterations = %(i1)d residu fonction = %(r2)f residu f/df = %(r3)f precision = %(r4)f """), -49: _(""" - erreurs sur les donneesnombre de mots-cles : %(i1)d - nombre de valeurs : %(i2)d -"""), - -50: _(""" - erreurs sur les donneesnombre de mots-cles : %(i1)d - nombre de mots-cles facteurs : %(i2)d -"""), - -51: _(""" - pas de champ correspondant a l''instant demande.resultat %(k1)s - , acces "inst_init" : %(r1)f +51 : _(""" + pas de champ correspondant à l'instant demandé. + resultat %(k1)s , acces "INST_INIT" : %(r1)f """), -52: _(""" - plusieurs champs correspondant a l''instant demande.resultat %(k1)s - , acces "inst_init" : %(r1)f - , nombre : %(i1)d +52 : _(""" + plusieurs champs correspondant a l'instant demande. + resultat %(k1)s + acces "INST_INIT" : %(r1)f + nombre : %(i1)d """), -53: _(""" +53 : _(""" - le premier instant de rupture n''est pas dans la liste des instants de calcul + le premier instant de rupture n'est pas dans la liste des instants de calcul premier instant de rupture = %(r1)f premier instant de calcul = %(r2)f """), -54: _(""" +54 : _(""" le dernier instant de rupture n''est pas dans la liste des instants de calcul dernier instant de rupture = %(r1)f dernier instant de calcul = %(r2)f """), -55: _(""" - parametres initiaux de weibullexposant de la loi = %(r1)f +55 : _(""" + parametres initiaux de weibull + exposant de la loi = %(r1)f volume de reference = %(r2)f contrainte de reference = %(r3)f """), -56: _(""" - statistiques recalage :nombre d''iterations = %(i1)d +56 : _(""" + statistiques recalage :nombre d'iterations = %(i1)d convergence atteinte = %(r1)f """), -57: _(""" +57 : _(""" les abscisses %(k1)s %(k2)s ne sont pas monotones. %(k3)s """), -58: _(""" +58 : _(""" les abscisses %(k1)s %(k2)s ont ete reordonnees. %(k3)s """), -59: _(""" +59 : _(""" l'ordre des abscisses %(k1)s %(k2)s a ete inverse. %(k3)s """), -60: _(""" - homogeneite du champ de materiaux pour weibull +60 : _(""" + homogénéité du champ de matériaux pour weibull nombre de rc weibull trouvees = %(i1)d les calculs sont valables pour un seul comportement weibull %(k1)s on choisit la premiere relation du type weibull %(k2)s """), -61: _(""" - parametres de la rc weibull_foexposant de la loi = %(r1)f +61 : _(""" + paramètres de la rc weibull_fo + exposant de la loi = %(r1)f volume de reference = %(r2)f - &contrainte de reference conventionnelle - &= %(r3)f + contrainte de référence conventionnelle = %(r3)f """), -62: _(""" - parametres de la rc weibullexposant de la loi = %(r1)f +62 : _(""" + parametres de la rc weibull + exposant de la loi = %(r1)f volume de reference = %(r2)f contrainte de reference = %(r3)f """), -68: _(""" - type de numerotation non connue numerotation: %(k1)s +68 : _(""" + type de numérotation non connue numérotation: %(k1)s """), - - - - - - - - - - - - - - -71: _(""" - il faut donner : - une maille ou un group_ma %(k1)s - - un noeud ou un group_noou un point %(k2)s +71 : _(""" + il faut donner : - une maille ou un GROUP_MA %(k1)s + - un noeud, un GROUP_NO ou un point %(k2)s """), -72: _(""" - trop de mailles dans le group_ma maille utilisee: %(k1)s +72 : _(""" + trop de mailles dans le GROUP_MA maille utilisée: %(k1)s """), - - - - - - - - - - - - - - - - - - - - - - - - - - -77: _(""" +77 : _(""" Concept résultat %(k1)s : le numéro d'ordre %(i1)d est inconnu. """), -78: _(""" +78 : _(""" Concept résultat %(k1)s : le numéro d'archivage %(i1)d est supérieur au max %(i2)d. """), -79: _(""" +79 : _(""" Concept résultat %(k1)s : le numéro de rangement %(i1)d est supérieur au max %(i2)d. """), -80: _(""" +80 : _(""" Concept résultat %(k1)s : la variable %(k2)s est inconnue pour le type %(k3)s. """), -81: _(""" +81 : _(""" parametre inconnu: parametre : %(k1)s pour le resultat : %(k2)s """), -82: _(""" +82 : _(""" pas de champs trouve pour la frequence %(r1)f """), -83: _(""" +83 : _(""" plusieurs champs trouves pour la frequence %(r1)f nombre de champs trouves %(i1)d """), -84: _(""" - le "nom_para_resu" %(k1)s n''est pas un parametre du resultat %(k2)s +84 : _(""" + le "NOM_PARA_RESU" %(k1)s n'est pas un paramètre du résultat %(k2)s """), -89: _(""" - erreur dans les donneesparametre n''existe pas: %(k1)s +89 : _(""" + erreur dans les données, le paramètre %(k1)s n'existe pas """), -90: _(""" - erreur dans les donneesparametre non trouve: %(k1)s +90 : _(""" + erreur dans les donnees, le paramètre %(k1)s n'est pas trouvé """), - - - - - - - - - - - - -93: _(""" - le parametre %(k1)s n''existe pas dans la table %(k2)s +93 : _(""" + le paramètre %(k1)s n'existe pas dans la table %(k2)s .il est necessaire. %(k3)s veuillez consulter la documentaion de la commande. %(k4)s """), - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -99: _(""" - erreur dans les donneesparametre : %(k1)s plusieurs valeurs trouvees %(k2)s +99 : _(""" + erreur dans les données + parametre : %(k1)s plusieurs valeurs trouvees %(k2)s pour le parametre %(k3)s et le parametre %(k4)s """), diff --git a/Aster/Cata/cataSTA9/Messages/utilitai7.py b/Aster/Cata/cataSTA9/Messages/utilitai7.py index dc7d020e..6eff3f8c 100644 --- a/Aster/Cata/cataSTA9/Messages/utilitai7.py +++ b/Aster/Cata/cataSTA9/Messages/utilitai7.py @@ -1,4 +1,4 @@ -#@ MODIF utilitai7 Messages DATE 14/05/2007 AUTEUR BODEL C.BODEL +#@ MODIF utilitai7 Messages DATE 19/06/2007 AUTEUR VIVAN L.VIVAN # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -22,52 +22,61 @@ def _(x) : return x cata_msg={ - - - - - +1: _(""" + Erreur dans les données, le paramètre %(k1)s n'existe pas dans la table %(k2)s +"""), 2: _(""" - erreur dans les donneespas de tri sur les complexes, parametre: %(k1)s + Erreur dans les données, pas de tri sur les complexes, paramètre: %(k1)s """), - - - - - - +3: _(""" + Erreur dans les données, on n'a pas trouvé de ligne dans la table %(k1)s pour le paramètre %(k2)s +"""), 4: _(""" - numero d''occurrence invalide %(i1)d pour le mot cle facteur %(k1)s + Le numéro d'occurrence est invalide %(i1)d pour le mot clé facteur %(k1)s """), 5: _(""" - le numero de la composante (pour vari_r) est trop grand.maille: %(k1)s - num. cmp maxi: %(i1)d - num. cmp demandee: %(i2)d + Le numéro de la composante (pour VARI_R) est trop grand. + MAILLE : %(k1)s + NUME_MAXI : %(i1)d + NUME_CMP demandé : %(i2)d """), 6: _(""" - Le schéma d'intégration temporelle %(k1)s et le paramètre %(k2)s sont incompatibles. + Le schéma d'intégration temporelle %(k1)s et le paramètre %(k2)s sont incompatibles. """), 7: _(""" - Le paramètre %(k1)s ne fait pas partie des choix possibles. + Le paramètre %(k1)s ne fait pas parti des choix possibles. """), 8: _(""" - L'utilisation de la macro pour un concept de type dyna_harmo n'est pas encore prevue + L'utilisation de la macro pour un concept de type DYNA_HARMO n'est pas encore prévue """), 9: _(""" - Si on utilise l'option normale pour les changements de repere, il faut donner - une equation supplementaire avec le mot-cle VECT_X ou VECT_Y + Si on utilise l'option normale pour les changements de repère, il faut donner + une équation supplémentaire avec le mot-clé VECT_X ou VECT_Y """), +10: _(""" + Seuls les champs de type ELGA (champs par élément aux points de Gauss) + sont autorisés pour NOM_CHAM de POST_ELEM/INTEGRALE. +"""), + +11: _(""" + Erreur dans les données, problème lors du traitement du mot clé facteur FILTRE + + -> Risque & Conseil : + soit le paramètre n'existe pas + soit aucune ligne ne correspond au paramètre donné +"""), + 99: _(""" - Arret dans le programme %(k1)s. + Arret dans le programme %(k1)s. """), } diff --git a/Aster/Cata/cataSTA9/Messages/utilitai8.py b/Aster/Cata/cataSTA9/Messages/utilitai8.py new file mode 100644 index 00000000..2c929de6 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/utilitai8.py @@ -0,0 +1,246 @@ +#@ MODIF utilitai8 Messages DATE 19/02/2008 AUTEUR COURTOIS M.COURTOIS +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { + +1 : _(""" + Rien que des constantes pour une nappe. + Nombre de fonctions constantes %(i1)d +"""), + +2 : _(""" + Paramètres différents. + fonction %(k1)s de paramètre %(k2)s au lieu de %(k3)s +"""), + +3 : _(""" + Le nombre de paramètres %(i1)d est différent du nombre de fonctions %(i2)d +"""), + +4 : _(""" + Il n'y a pas un nombre pair de valeurs, "DEFI_FONCTION" occurence %(i1)d +"""), + +5 : _(""" + Les abscisses de la fonction %(k1)s ont ete réordonnées. +"""), + +6 : _(""" + L'ordre des abscisses de la fonction numéro %(i1)d a ete inversé . +"""), + +7 : _(""" + Appel erroné + archivage numéro : %(i1)d + code retour de rsexch : %(i2)d +"""), + +8 : _(""" + Lecture des champs: +"""), + +9 : _(""" + Numéro d'ordre : %(i1)d inst : %(r1)g +"""), + +14 : _(""" + Champ inexistant %(k1)s +"""), + +15 : _(""" + ou %(k1)s +"""), + +16 : _(""" + NUME_ORDRE %(i1)d on ne calcule pas l'option %(k1)s +"""), + +17 : _(""" + pas de NUME_ORDRE trouvé pour le numéro %(i1)d +"""), + +18 : _(""" + pas de champs trouvé pour l'instant %(r1)g +"""), + +19 : _(""" + Plusieurs pas de temps trouvés dans l'intervalle de précision + autour de l'instant %(r1)g + nombre de pas de temps trouvés %(i1)d + Conseil : modifier le paramètre PRECISION +"""), + +20 : _(""" + Erreur dans les données : + Le paramètre existe déja: %(k1)s dans la table: %(k2)s +"""), + +21 : _(""" + Erreur dans les données + Le type du paramètre: %(k1)s + est différent pour le paramètre: %(k2)s + et le paramètre: %(k3)s +"""), + +22 : _(""" + Valeur de M maximale atteinte pour résoudre F(M)=0, + Conseil : Vérifiez vos listes d'instants de rupture, M maximal admissible = %(r1)f +"""), + +23 : _(""" + Valeur de M minimale atteinte pour résoudre F(M)=0, + Conseil : Vérifiez vos listes d'instants de rupture, valeur de M = %(r1)f +"""), + +24 : _(""" + Le champ demandé est incompatible avec le type de résultat + type de résultat : %(k1)s + nom du champ : %(k2)s +"""), + +25 : _(""" + Le nombre d'astérisques pour les noms de fichiers ensight de pression est trop grand il est limite à 7 + nombre d'asterisques : %(i1)d +"""), + +26 : _(""" + Appel erroné résultat : %(k1)s archivage numéro : %(i1)d + code retour de rsexch : %(i2)d + problème champ : %(k2)s +"""), + +27 : _(""" + Appel erroné résultat : %(k1)s archivage numéro : %(i1)d + code retour de rsexch : %(i2)d + problème champ : %(k2)s +"""), + +28 : _(""" + Fin de fichier dans la lecture des fichiers ensight +"""), + +29 : _(""" + Erreur dans la lecture du fichier ensight +"""), + +30 : _(""" + problème pour le fichier: %(k1)s +"""), + +31 : _(""" + Option deja calculée: option %(k1)s NUME_ORDRE %(i1)d + On la recalcule car les données peuvent etre différentes + +"""), + +32 : _(""" + L'extrapolation ne peut etre faite à gauche (interdit). +"""), + +33 : _(""" + L'extrapolation ne peut etre faite à droite (interdit). +"""), + +34 : _(""" + L'interpolation ne peut etre faite car aucun champ de : %(k1)s n'est calcule. +"""), + +35 : _(""" + La variable d'accès %(k1)s est invalide pour une interpolation. +"""), + +36 : _(""" + Ce nom de champ est interdit : %(k1)s pour une interpolation. +"""), + +37 : _(""" + Résultat: %(k1)s nom_cham: %(k2)s variable d'accès: %(k3)s valeur: %(r1)g + +"""), + +38 : _(""" + Plusieurs champs correspondant à l'accès demandé pour la sd_resultat %(k1)s +"""), + +39 : _(""" + accès %(k1)s : %(i1)d +"""), + +40 : _(""" + accès %(k1)s : %(r1)g +"""), + +41 : _(""" + accès %(k1)s : %(k1)s +"""), + +46 : _(""" + nombre : %(i1)d NUME_ORDRE retenus : %(i2)d, %(i3)d, %(i4)d +"""), + +47 : _(""" + Pas de champ correspondant à un accès demandé pour la sd_resultat %(k1)s +"""), + +56 : _(""" + pas de champs pour l'accès %(k1)s de valeur %(r1)g +"""), + +57 : _(""" +Erreur utilisateur : + Plusieurs champs correspondent à l'accès demandé pour la sd_résultat %(k1)s + - accès "INST" : %(r1)19.12e + - nombre de champs trouvés : %(i1)d +Conseil: + Reserrer la précision avec le mot clé PRECISION +"""), + +58 : _(""" + Pas de champs pour l'accès %(k1)s de valeur %(r1)g +"""), + +59 : _(""" +Erreur utilisateur : + Plusieurs champs correspondent à l'accès demandé pour la sd_résultat %(k1)s + - accès "FREQ" : %(r1)19.12e + - nombre de champs trouvés : %(i1)d +Conseil: + Reserrer la précision avec le mot clé PRECISION +"""), + +60 : _(""" + Erreur dans les données pour le champ %(k1)s +"""), + +61 : _(""" + Aucun noeud ne supporte +"""), + +62 : _(""" + Aucune maille ne supporte +"""), + +63 : _(""" + les composantes %(k1)s, %(k2)s, %(k3)s, %(k4)s, ... +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/vide.py b/Aster/Cata/cataSTA9/Messages/vide.py new file mode 100644 index 00000000..9ab83a69 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/vide.py @@ -0,0 +1,26 @@ +#@ MODIF vide Messages DATE 19/11/2007 AUTEUR COURTOIS M.COURTOIS +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { +1 : _(''), +} + diff --git a/Aster/Cata/cataSTA9/Messages/volufini.py b/Aster/Cata/cataSTA9/Messages/volufini.py new file mode 100644 index 00000000..df5f4f85 --- /dev/null +++ b/Aster/Cata/cataSTA9/Messages/volufini.py @@ -0,0 +1,52 @@ +#@ MODIF volufini Messages DATE 06/05/2008 AUTEUR PELLET J.PELLET +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2008 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def _(x) : return x + +cata_msg = { + +1 : _(""" + -> type de maille %(k1)s incorrect + """), + +2 : _(""" + -> le sommet de numero global %(i1)i n appartient pas + -> a la maille %(i2)i +"""), + +3 : _(""" + -> Nombre de voisins %(i1)i trop grand +"""), + +4 : _(""" + -> Nombre de sommets communs %(i1)i trop grand +"""), + +5 : _(""" + -> Le nombre de mailles %(i1)i est inferieur a 1 +"""), +6 : _(""" + -> Le type de voisinage %(k1)s est inconnu +"""), +7 : _(""" + -> Le type de voisinage %(k1)s a une longueur %(i1)i trop grande +"""), + +} diff --git a/Aster/Cata/cataSTA9/Messages/xfem.py b/Aster/Cata/cataSTA9/Messages/xfem.py index a81d2dae..27ecb619 100644 --- a/Aster/Cata/cataSTA9/Messages/xfem.py +++ b/Aster/Cata/cataSTA9/Messages/xfem.py @@ -1,4 +1,4 @@ -#@ MODIF xfem Messages DATE 15/05/2007 AUTEUR GENIAUT S.GENIAUT +#@ MODIF xfem Messages DATE 21/04/2008 AUTEUR GENIAUT S.GENIAUT # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -24,103 +24,137 @@ def _(x) : return x cata_msg={ 1: _(""" -Pour le DVP : écrasement des valeurs nodales dans xconno.f -Pour l'utilisateur : les fissures X-FEM sont surement trop proches. - il faut au minimum 2 mailles entre les fissures. - veuillez raffiner le maillage entre les fissures (ou écarter les fissures). + -> Les fissures X-FEM sont surement trop proches. + Il faut au minimum 2 mailles entre les fissures. + -> Risque & Conseil: + Veuillez raffiner le maillage entre les fissures + (ou écarter les fissures). """), -2: _(""" - Le nombre de fissures autorisées avec X-FEM est limité à (i1)i -"""), + 3: _(""" - Le modele %(k1)s est incompatible avec la methode X-FEM. - Vérifier qu'il a bien été créé par l'opérateur MODI_MODELE_XFEM. + -> Le modèle %(k1)s est incompatible avec la méthode X-FEM. + -> Risque & Conseil: + Vérifier qu'il a bien été créé par l'opérateur MODI_MODELE_XFEM. """), 4: _(""" - Il est interdit de melanger dans un modèle les fissures X-FEM avec et sans - contact. Veuillez rajouter les mots clé CONTACT manquants - dans DEFI_FISS_XFEM. -"""), - -5: _(""" -La valeur du parametre %(k1)s (%(i1)d) de la fissure %(k2)s -a été changé à -%(i2)d (valeur maximale de toutes les fissures du modèle) + -> Il est interdit de mélanger dans un modèle les fissures X-FEM + avec et sans contact. + -> Risque & Conseil: + Veuillez rajouter les mots clés CONTACT manquants + dans DEFI_FISS_XFEM. """), 6: _(""" -DDL_IMPO sur un noeud X-FEM : %(k1)s = %(r1)f au noeud %(k2)s + DDL_IMPO sur un noeud X-FEM : %(k1)s = %(r1)f au noeud %(k2)s """), 7: _(""" -Il y a %(i1)s mailles %(k1)s + Il y a %(i1)s mailles %(k1)s """), 8: _(""" -Le nombre de %(k1)s X-FEM est limité à 10E6. Veuillez reduire la taille du maillage. + Le nombre de %(k1)s X-FEM est limité à 10E6. + Risque & Conseil: + Veuillez réduire la taille du maillage. """), 9: _(""" -erreur de dvt dans %(k2)s : on a trouvé trop de nouveaux %(k1)s à ajouter. + L'option K_G_MODA n'est pas autorisée avec une fissure définie + par la commande DEFI_FISS_XFEM (méthode X-FEM). """), 10: _(""" -On ne peut pas post-traiter de champs aux points de Gauss avec X-FEM sur des éléments -dont le nombre de points de Gauss est différent de 1. + La direction du champ theta n'a pas été donnée. La direction automatique + est une direction variable, basée sur le grandient de la level set tangente. """), 11: _(""" -On a trouvé plus de 2 points de fond de fissure, ce qui est impossible en 2d. -Veuillez revoir la définition des level sets. + -> On a trouvé plus de 2 points de fond de fissure, ce qui est impossible en 2d. + -> Risque & Conseil: + Veuillez revoir la définition des level sets. """), 12: _(""" -La prise en compte du contact sur les lèvres des fissures X-FEM n'est possible qu'avec une -approximation du champ de déplacement linéaire. -Deux solutions : -- soit passer en approximation linéaire (mot-clé DEGRE_DEPL de MODI_MODELE_XFEM) -- soit ne pas prendre en compte le contact (enlever le mot-clé CONTACT de MODI_MODELE_XFEM) + Le gradient de la level set tangente est nul au noeud %(k1)s. + Ceci est certainement du à un point singulier dans la définition de la levet set. + Il vaut veuiller à ce que ce point singulier ne soit pas inclus dans la couronne + d'intégration du champ theta. + Conseil : réduisez la taille de la couronne du champ theta : (mot-clés RSUP et RINF). """), 13: _(""" -pb fissure elliptique + Dans le modèle, des mailles SEG2 ou SEG3 possèdent des noeuds enrichis par X-FEM. + Ceci n'est pas encore possible en 3D. + Conseils : si ces mailles sont importantes pour le calcul (charge linéique...), il faut + les mettre loin de de la fissure. + Si ces mailles ne servent pas pour le calcul, il vaut mieux ne pas les affecter dans le modèle, + ou bien les supprimer du maillage. """), -18: _(""" -Dimension de l'espace incorrecte. Le modèle doit etre 2D ou 3D et ne pas comporter -de sous-structures. +14: _(""" + On ne peut pas appliquer un cisaillement 2d sur les lèvres d'une fissure X-FEM. +"""), + +15: _(""" + -> Cette option n'a pas encore été programmée. + -> Risque & Conseil: + Veuillez utiliser un autre chargement (en pression) ou contacter votre + correspondant. +"""), + +16: _(""" + -> Il n'y a aucun élément enrichi. + -> Risque & Conseil: + - Si le contact est défini sur les lèvres de la fissure, la modélisation + doit etre 3D_XFEM_CONT ou C_PLAN_XFEM_CONT ou D_PLAN_XFEM_CONT. + - Si le contact n'est pas défini sur les lèvres de la fissure, + la modélisation doit etre 3D ou C_PLAN ou D_PLAN'. """), -19: _(""" -Caractéristique de la SD inconnue. Contactez les développeurs. +18: _(""" + Dimension de l'espace incorrecte. + Le modèle doit etre 2D ou 3D et ne pas comporter de sous-structures. """), 20: _(""" -Le mot-clef ORIE_FOND est indispensable en 3D. + Le mot-clef ORIE_FOND est indispensable en 3D. """), 21: _(""" -Le mot-clef ORIE_FOND n'est pas nécessaire en 2D. + Le mot-clef ORIE_FOND n'est pas nécessaire en 2D. """), 22: _(""" -Plus d'une occurrence du mot-clef ORIE_FOND. + Plus d'une occurrence du mot-clef ORIE_FOND. """), 23: _(""" -Erreur dans le choix de la methode de calcul des level-sets: renseignez FONC_LT/LN ou GROUP_MA_FISS/FOND. + -> Erreur dans le choix de la méthode de calcul des level-sets + -> Risque & Conseil : + Veuillez renseignez FONC_LT/LN ou GROUP_MA_FISS/FOND. +"""), + +25: _(""" + Le frottement n'est pas pris en compte pour l'approche + <>. +"""), + +26: _(""" + L'approche <> fonctionne seulement pour le cas 2D. """), -50: _(""" -Le nombre d'aretes coupees par la fissure est superieur au critere de dimensionnement initialement prevu. Contactez les développeurs. -Note DVP: Il faut augmenter le parametre mxar dans la routine xlagsp. +27: _(""" + Seulement les mailles QUAD4 sont prises en compte par l'approche + <>. """), 57: _(""" -Aucune maille de fissure n'a été trouvée. Suite des calculs risquée. + -> Aucune maille de fissure n'a été trouvée. + -> Risque & Conseil : + Suite des calculs risquée. """), 58: _(""" @@ -134,11 +168,15 @@ Aucune maille de fissure n'a """), 59: _(""" -Ne pas utiliser le mot-clef RAYON_ENRI lorsque le fond de fissure est en dehors de la structure. + Ne pas utiliser le mot-clef RAYON_ENRI lorsque le fond de fissure + est en dehors de la structure. """), 60: _(""" -Le point initial de fissure n'est pas un point de bord de fissure, bien que la fissure soit débouchante. assurez-vous de la bonne définition de PFON_INI. + -> Le point initial de fissure n'est pas un point de bord de fissure, + bien que la fissure soit débouchante + -> Risque & Conseil: + Assurez-vous de la bonne définition de PFON_INI. """), diff --git a/Aster/Cata/cataSTA9/Messages/xfem2.py b/Aster/Cata/cataSTA9/Messages/xfem2.py index e68ae67c..1eabad72 100644 --- a/Aster/Cata/cataSTA9/Messages/xfem2.py +++ b/Aster/Cata/cataSTA9/Messages/xfem2.py @@ -1,4 +1,4 @@ -#@ MODIF xfem2 Messages DATE 15/05/2007 AUTEUR GENIAUT S.GENIAUT +#@ MODIF xfem2 Messages DATE 18/03/2008 AUTEUR CNGUYEN C.NGUYEN # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -18,39 +18,160 @@ # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +def _(x) : return x +cata_msg = { -def _(x) : return x +1 : _(""" + Point : %(r1)f %(r2)f + """), + +2 : _(""" + -> Seules les modélisations C_PLAN/D_PLAN sont disponibles pour XFEM. + -> Risques et conseils: + Veuillez considérer l'une des deux modélisations dans AFFE_MODELE. +"""), + +4 : _(""" + -> Le type de formulation du contact (DISCRET/CONTINUE/XFEM) doit etre le meme pour + toutes les zones de contact. + -> Risque & Conseil: + Veuillez revoir la mise en données de AFFE_CHAR_MECA/CONTACT. +"""), + +5 : _(""" + -> Le vecteur TAU1 correspondant à la première direction du frottement dans + l'élément XFEM est nul. Ceci signifie que les gradients des level sets + sont surement colinéaires en ce point. +"""), + +6 : _(""" + Multifissuration interdite avec l'opérateur PROPA_XFEM. +"""), + +7 : _(""" + -> Le contact a été activé dans XFEM (CONTACT_XFEM='OUI' dans MODI_MODELE_XFEM) + -> Risque & Conseil: + Vous devez également l'activer dans AFFE_CHAR_MECA/CONTACT_XFEM +"""), + +8 : _(""" + -> Le modèle %(k1)s transmis dans AFFE_CHAR_MECA/CONTACT n'est pas un modèle + XFEM. + -> Risque & Conseil: + Veuillez utiliser la commande MODI_MODELE_XFEM pour fournir à + AFFE_CHAR_MECA/CONTACT un modèle XFEM. +"""), + +9 : _(""" + -> Le modèle %(k1)s transmis dans AFFE_CHAR_MECA/CONTACT n'est pas un modèle + XFEM avec contact. + -> Risque & Conseil: + Veuillez activer CONTACT='OUI' dans MODI_MODELE_XFEM. +"""), -cata_msg={ +11 : _(""" + -> Le modèle %(k1)s transmis dans AFFE_CHAR_MECA/CONTACT_XFEM n'est pas + le modèle XFEM utilisé dans le AFFE_CHAR_MECA/CONTACT nommé %(k2)s. + -> Risque & Conseil: + Risques de résultats faux. +"""), + +12 : _(""" + -> Le modèle %(k1)s transmis dans AFFE_CHAR_MECA/CONTACT_XFEM n'est pas un modèle + XFEM. + -> Risque & Conseil: + Veuillez utiliser la commande MODI_MODELE_XFEM pour fournir à + AFFE_CHAR_MECA/CONTACT_XFEM un modèle XFEM. +"""), + +13 : _(""" + Point : %(r1)f %(r2)f %(r3)f + """), + +14 : _(""" + -> La discrétisation du fond de fissure est grossière par rapport à la + courbure du fond de fissure. + -> Risque & Conseil: + - possibilité de résultats faux + - il faudrait raffiner le maillage autour du fond de fissure. +"""), + +15 : _(""" + -> Point de FOND_FISS sans maille de surface rattachée. + -> Risque & Conseil: + Veuillez revoir la définition des level sets. +"""), + +16 : _(""" + -> Problème dans l'orientation des normales a fond_fiss. + -> Risque & Conseil: + Veuillez vérifier la continuité des mailles de FOND_FISS +"""), + +17 : _(""" + -> Segment de fond_fiss sans maille de surface rattachée + -> Risque & Conseil: + Veuillez revoir la définition des level sets. +"""), + +19 : _(""" + -> Lors de l'orientation des points du fond de fissure, le point du fond de + fissure initial (PFON_INI) est trop loin du fond de fissure. + -> Risque & Conseil : + Le point initial qui en résulte amène surement à une orientation du fond + de fissure erronée. + Veuillez redéfinir le point du fond de fissure initial (mot clé PFON_INI). +"""), + +20 : _(""" + -> PFON_INI = PT_ORIGINE + -> Risque & Conseil : + Veuillez définir deux points différents pour PFON_INI et PT_ORIGINE. +"""), -1: _(""" -Erreur (i1)i dvt dans la récupération de la topologie des sous-éléments pour la visu. +21 : _(""" + -> Problème dans l'orientation du fond de fissure : PT_ORIGIN mal choisi. + -> Risque & Conseil : + Veuillez redéfinir PT_ORIGIN. """), -5: _(""" -Le vecteur TAU1 correspondant la première direction du frottement dans l'élément XFEM est nul. -Ceci signifie que les gradients des level sets sont surement colinéaires en ce point. +22 : _(""" + -> Tous les points du fond de fissure sont des points de bord. + -> Risque & Conseil : + Assurez-vous du bon choix des paramètres d'orientation de fissure + et de PFON_INI. """), -6: _(""" -Multifissuration interdite avec l'opérateur PROPA_XFEM. +23 : _(""" + -> PFON_INI semble etre un point de fin de fissure selon l'orientation choisie. + -> Risque & Conseil : + Veuillez vous assurez du bon choix de PFON_INI """), -7: _(""" -La structure de données du contact liée à MODI_MODELE_XFEM n'est pas -celle transmise en argument de MECA_NON_LINE. +24 : _(""" + -> La méthode "UPWIND" est en cours d'implémentation. + -> Risque & Conseil : + Veuillez choisir une autre méthode. """), -44: _(""" -Le champ de nom %(k1)s n'a pas été créé car aucun TYPE_ELEM du LIGREL de nom %(k2)s -ne connait le paramètre de l'option %(k3)s. -Contactez les développeurs. +25 : _(""" + -> La norme du vecteur VECT_ORIE est nulle. + -> Risque & Conseil : + Veuillez redéfinir VECT_ORIE. """), -51: _(""" -Il n'y a aucune maille enrichie. +39 : _(""" + -> Deux points du fond de fissure sont très proches ou coincident. + -> Risque & Conseil : + Vérifier les définitions des level sets et la liste des points du fond + de fissure trouvés. Si c'est normal, contactez votre correspondant. """), +51 : _(""" + -> Il n'y a aucune maille enrichie. + -> Risque & Conseil: + Veuillez vérifier les définitions des level sets. + """), } diff --git a/Aster/Cata/cataSTA9/SD/__init__.py b/Aster/Cata/cataSTA9/SD/__init__.py index 1c3f94bd..f7882a1d 100644 --- a/Aster/Cata/cataSTA9/SD/__init__.py +++ b/Aster/Cata/cataSTA9/SD/__init__.py @@ -1,21 +1,21 @@ -#@ MODIF __init__ SD DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF __init__ SD DATE 10/09/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from Accas import ASSD @@ -29,5 +29,5 @@ except: from Noyau.asnom import SDNom from Noyau.ascheckers import Parmi from Noyau.asojb import AsBase, AsVK8, AsVK16, AsVK24, AsVK32, AsVK80, \ - AsVI, AsVR, AsVC, AsColl, AsObject, Facultatif, OJBVect + AsVI, AsVL, AsVR, AsVC, AsColl, AsObject, Facultatif, OJBVect, AsPn, AsVect diff --git a/Aster/Cata/cataSTA9/SD/co_cham_no.py b/Aster/Cata/cataSTA9/SD/co_cham_no.py index dacf2744..b269b8e4 100644 --- a/Aster/Cata/cataSTA9/SD/co_cham_no.py +++ b/Aster/Cata/cataSTA9/SD/co_cham_no.py @@ -1,4 +1,4 @@ -#@ MODIF co_cham_no SD DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF co_cham_no SD DATE 06/08/2007 AUTEUR TARDIEU N.TARDIEU # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -63,6 +63,38 @@ class cham_no_sdaster(cham_gd_sdaster, sd_cham_no): aster.prepcompcham("__DETR__",nchams,ncmp,"NO ",topo,lgno) return post_comp_cham_no(valeurs,noeud) + + def __add__(self, other): + from SD.sd_nume_equa import sd_nume_equa + from SD.sd_maillage import sd_maillage + from SD.co_maillage import maillage_sdaster + from Cata.cata import CREA_CHAMP,_F + from Noyau.nommage import GetNomConceptResultat + # on recupere le type + __nume_ddl=sd_nume_equa(self.REFE.get()[1]) + __gd=__nume_ddl.REFN.get()[1].strip() + __type='NOEU_'+__gd + # on recupere le nom du maillage + __nomMaillage=self.REFE.get()[0].strip() + # on recupere l'objet du maillage + __maillage=CONTEXT.get_current_step().sds_dict[__nomMaillage] + # on recupere le nom a gauche du signe "=" + toto=GetNomConceptResultat(self) + print 50*'#','\n',toto,50*'#','\n' + __CHAM = CREA_CHAMP(OPERATION='ASSE', + MAILLAGE=__maillage, + TYPE_CHAM=__type, + INFO=1, + ASSE=(_F(CHAM_GD=self, + TOUT='OUI', + CUMUL='OUI', + COEF_R=1.), + _F(CHAM_GD=other, + TOUT='OUI', + CUMUL='OUI', + COEF_R=1.), + )) + return __CHAM diff --git a/Aster/Cata/cataSTA9/SD/co_fiss_xfem.py b/Aster/Cata/cataSTA9/SD/co_fiss_xfem.py index 57d24dcb..aa819719 100644 --- a/Aster/Cata/cataSTA9/SD/co_fiss_xfem.py +++ b/Aster/Cata/cataSTA9/SD/co_fiss_xfem.py @@ -1,4 +1,4 @@ -#@ MODIF co_fiss_xfem SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF co_fiss_xfem SD DATE 15/10/2007 AUTEUR GENIAUT S.GENIAUT # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -19,7 +19,7 @@ # ====================================================================== from SD import * -from sd_fiss_xfem import sd_fiss_xfem +from sd_xfem import sd_fiss_xfem # ----------------------------------------------------------------------------- class fiss_xfem(ASSD, sd_fiss_xfem): diff --git a/Aster/Cata/cataSTA9/SD/co_fonction.py b/Aster/Cata/cataSTA9/SD/co_fonction.py index 6665f38b..f4e39ca1 100644 --- a/Aster/Cata/cataSTA9/SD/co_fonction.py +++ b/Aster/Cata/cataSTA9/SD/co_fonction.py @@ -1,27 +1,28 @@ -#@ MODIF co_fonction SD DATE 30/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF co_fonction SD DATE 22/04/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== import Accas from SD import * -from sd_fonction import sd_fonction +from sd_fonction import sd_fonction_aster +import os import Numeric from math import pi @@ -42,7 +43,7 @@ class fonction_class(ASSD): objev = '%-19s.PROL' % self.get_name() prol = aster.getvectjev(objev) if prol == None: - UTMESS('F', 'fonction.Parametres', "Objet '%s' inexistant" % objev) + UTMESS('F', 'SDVERI_2', valk=[objev]) dico={ 'INTERPOL' : [prol[1][0:3],prol[1][4:7]], 'NOM_PARA' : prol[2][0:16].strip(), @@ -74,11 +75,12 @@ class fonction_class(ASSD): from Utilitai.Graph import Graph gr=Graph() gr.AjoutCourbe(Val=self.Valeurs(), - Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU']]) + Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU']], + Leg=os.linesep.join(self.TITR.get()) ) gr.Trace(FORMAT=FORMAT,**kargs) # ----------------------------------------------------------------------------- -class fonction_sdaster(fonction_class, sd_fonction): +class fonction_sdaster(fonction_class, sd_fonction_aster): def convert(self,arg='real'): """ Retourne un objet de la classe t_fonction @@ -104,7 +106,7 @@ class fonction_sdaster(fonction_class, sd_fonction): vale = '%-19s.VALE' % self.get_name() lbl = aster.getvectjev(vale) if lbl == None: - UTMESS('F', 'fonction.Valeurs', "Objet '%s' inexistant" % vale) + UTMESS('F', 'SDVERI_2', valk=[vale]) lbl = list(lbl) dim = len(lbl)/2 lx = lbl[0:dim] @@ -143,7 +145,7 @@ class para_sensi(fonction_sdaster): pass # ----------------------------------------------------------------------------- -class fonction_c(fonction_class, sd_fonction): +class fonction_c(fonction_class, sd_fonction_aster): def convert(self,arg='real'): """ Retourne un objet de la classe t_fonction ou t_fonction_c, @@ -187,7 +189,7 @@ class fonction_c(fonction_class, sd_fonction): vale = '%-19s.VALE' % self.get_name() lbl = aster.getvectjev(vale) if lbl == None: - UTMESS('F', 'fonction.Valeurs', "Objet '%s' inexistant" % vale) + UTMESS('F', 'SDVERI_2', valk=[vale]) lbl = list(lbl) dim=len(lbl)/3 lx=lbl[0:dim] @@ -221,9 +223,11 @@ class fonction_c(fonction_class, sd_fonction): if self.par_lot() : raise Accas.AsException("Erreur dans fonction_c.Trace en PAR_LOT='OUI'") from Utilitai.Graph import Graph + para = self.Parametres() gr=Graph() gr.AjoutCourbe(Val=self.Valeurs(), - Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU'],'IMAG']) + Lab=[para['NOM_PARA'], '%s_R' % para['NOM_RESU'], '%s_I' % para['NOM_RESU']], + Leg=os.linesep.join(self.TITR.get()) ) gr.Trace(FORMAT=FORMAT,**kargs) def __call__(self,val): ### Pour EFICAS : substitution de l'instance de classe @@ -231,11 +235,11 @@ class fonction_c(fonction_class, sd_fonction): if isinstance(val, ASSD): val=val.valeur ### - __ff=self.convert() + __ff=self.convert(arg='complex') return __ff(val) # ----------------------------------------------------------------------------- -class nappe_sdaster(fonction_class, sd_fonction): +class nappe_sdaster(fonction_class, sd_fonction_aster): def convert(self): """ Retourne un objet de la classe t_nappe, représentation python de la nappe @@ -271,7 +275,7 @@ class nappe_sdaster(fonction_class, sd_fonction): # les cles de dicv sont 1,...,N (indice du parametre) lpar=aster.getvectjev(nsd+'.PARA') if lpar == None: - UTMESS('F', 'fonction.Valeurs', "Objet '%s' inexistant" % (nsd+'.PARA')) + UTMESS('F', 'SDVERI_2', valk=[nsd+'.PARA']) lval=[] for k in range(len(dicv)): lbl=dicv[k+1] @@ -292,22 +296,22 @@ class nappe_sdaster(fonction_class, sd_fonction): objev = '%-19s.PROL' % self.get_name() prol=aster.getvectjev(objev) if prol == None: - UTMESS('F', 'fonction.Parametres', "Objet '%s' inexistant" % objev) + UTMESS('F', 'SDVERI_2', valk=[objev]) dico={ 'INTERPOL' : [prol[1][0:3],prol[1][4:7]], 'NOM_PARA' : prol[2][0:16].strip(), 'NOM_RESU' : prol[3][0:16].strip(), 'PROL_DROITE' : TypeProl[prol[4][1]], 'PROL_GAUCHE' : TypeProl[prol[4][0]], - 'NOM_PARA_FONC' : prol[5][0:4].strip(), + 'NOM_PARA_FONC' : prol[6][0:4].strip(), } lparf=[] - nbf=(len(prol)-6)/2 + nbf=(len(prol)-7)/2 for i in range(nbf): dicf={ - 'INTERPOL_FONC' : [prol[6+i*2][0:3],prol[6+i*2][4:7]], - 'PROL_DROITE_FONC' : TypeProl[prol[7+i*2][1]], - 'PROL_GAUCHE_FONC' : TypeProl[prol[7+i*2][0]], + 'INTERPOL_FONC' : [prol[7+i*2][0:3],prol[7+i*2][4:7]], + 'PROL_DROITE_FONC' : TypeProl[prol[8+i*2][1]], + 'PROL_GAUCHE_FONC' : TypeProl[prol[8+i*2][0]], } lparf.append(dicf) return [dico,lparf] @@ -323,5 +327,7 @@ class nappe_sdaster(fonction_class, sd_fonction): lv=self.Valeurs()[1] dp=self.Parametres()[0] for lx,ly in lv: - gr.AjoutCourbe(Val=[lx,ly], Lab=[dp['NOM_PARA_FONC'],dp['NOM_RESU']]) + gr.AjoutCourbe(Val=[lx,ly], Lab=[dp['NOM_PARA_FONC'],dp['NOM_RESU']], + Leg=os.linesep.join(self.TITR.get()) ) gr.Trace(FORMAT=FORMAT,**kargs) + diff --git a/Aster/Cata/cataSTA9/SD/co_listr8.py b/Aster/Cata/cataSTA9/SD/co_listr8.py index 05d5cd39..0479d2e1 100644 --- a/Aster/Cata/cataSTA9/SD/co_listr8.py +++ b/Aster/Cata/cataSTA9/SD/co_listr8.py @@ -1,4 +1,4 @@ -#@ MODIF co_listr8 SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF co_listr8 SD DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -33,7 +33,7 @@ class listr8_sdaster(ASSD, sd_listr8): vale='%-19s.VALE' % self.get_name() t_vale = aster.getvectjev(vale) if t_vale == None: - UTMESS('F', 'listr8.Valeurs', "Objet '%s' inexistant" % vale) + UTMESS('F', 'SDVERI_2', valk=[vale]) return list(t_vale) else: raise Accas.AsException("Erreur dans listr8.Valeurs en PAR_LOT='OUI'") diff --git a/Aster/Cata/cataSTA9/SD/co_macr_elem_dyna.py b/Aster/Cata/cataSTA9/SD/co_macr_elem_dyna.py index 4f9c25ba..c95560a4 100644 --- a/Aster/Cata/cataSTA9/SD/co_macr_elem_dyna.py +++ b/Aster/Cata/cataSTA9/SD/co_macr_elem_dyna.py @@ -1,4 +1,4 @@ -#@ MODIF co_macr_elem_dyna SD DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF co_macr_elem_dyna SD DATE 17/01/2008 AUTEUR ZENTNER I.ZENTNER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -24,17 +24,33 @@ from sd_macr_elem_dyna import sd_macr_elem_dyna import Numeric +def VALE_triang2array(vect_VALE, dim, typ): + """Conversion (par recopie) de l'objet .VALE decrivant une matrice pleine + par sa triangulaire sup en Numeric.array plein. + """ + triang_sup = Numeric.array(vect_VALE) + assert dim*(dim+1)/2 == len(triang_sup), \ + 'Matrice non pleine : %d*(%d+1)/2 != %d' % (dim, dim, len(triang_sup)) + + valeur = Numeric.zeros([dim, dim], typ) + for i in range(1, dim+1): + for j in range(1, i+1): + k = i*(i-1)/2 + j + valeur[j-1, i-1]=triang_sup[k-1] + valeur = valeur + Numeric.transpose(valeur) + for i in range(dim): + valeur[i, i] = 0.5 * valeur[i, i] + + return valeur + # ----------------------------------------------------------------------------- class macr_elem_dyna(ASSD, sd_macr_elem_dyna): def NBRE_MODES(self) : """ retourne le nombre de modes total, dynamiques et d'interface """ if self.par_lot() : raise Accas.AsException("Erreur dans macr_elem_dyna.NBRE_MODES en PAR_LOT='OUI'") - nommacr=self.get_name() - ncham=nommacr+(8-len(nommacr))*' ' - ncham=nommacr+(8-len(nommacr))*' '+'.MAEL' - nombase=aster.getvectjev(ncham+'_REFE')[0] - nbmode=Numeric.array(aster.getvectjev(nombase[0:8]+(19-len(nombase[0:8]))*' '+'.UTIL')) + nombase = self.MAEL_REFE.get()[0] + nbmode=Numeric.array(aster.getvectjev('%-19s' % nombase[0:8] + '.UTIL')) nbmodtot=nbmode[1] nbmoddyn=nbmode[2] nbmodint=nbmode[3] @@ -51,32 +67,21 @@ class macr_elem_dyna(ASSD, sd_macr_elem_dyna): if self.par_lot() : raise Accas.AsException("Erreur dans macr_elem_dyna.EXTR_MATR_GENE en PAR_LOT='OUI'") - nommacr=self.get_name() if (typmat=='MASS_GENE') : - ext='.MAEL_MASS' + macr_elem = self.MAEL_MASS elif (typmat=='RIGI_GENE') : - ext='.MAEL_RAID' + macr_elem = self.MAEL_RAID elif (typmat=='AMOR_GENE') : - ext='.MAEL_AMOR' + macr_elem = self.MAEL_AMOR else: raise Accas.AsException("Le type de la matrice est incorrect") - ncham=nommacr+(8-len(nommacr))*' '+ext - desc=Numeric.array(aster.getvectjev(ncham+'_DESC')) + desc=Numeric.array(macr_elem.DESC.get()) # On teste si le DESC du vecteur existe if (desc==None): - raise Accas.AsException("L'objet matrice n'existe pas ou \ - est mal cree par Code Aster") + raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster") - tmp=Numeric.array(aster.getvectjev(ncham+'_VALE')) - matrice=Numeric.zeros([desc[1],desc[1]],Numeric.Float) - for j in range(desc[1]+1): - for i in range(j): - k=j*(j-1)/2+i - matrice[j-1,i]=tmp[k] - matrice=(matrice+Numeric.transpose(matrice)) - for i in range(desc[1]): - matrice[i,i]=0.5*matrice[i,i] + matrice = VALE_triang2array(macr_elem.VALE.get(), desc[1], Numeric.Float) return matrice def RECU_MATR_GENE(self,typmat,matrice) : @@ -88,46 +93,38 @@ class macr_elem_dyna(ASSD, sd_macr_elem_dyna): Attributs ne retourne rien """ if self.par_lot() : raise Accas.AsException("Erreur dans macr_elem_dyna.RECU_MATR_GENE en PAR_LOT='OUI'") - from Utilitai.Utmess import UTMESS - - # avertissement generique - UTMESS('A','RECU_MATR_GENE',' ATTENTION, VOUS ALLEZ ECRASER DES CONCEPTS EXISTANTS') nommacr=self.get_name() if (typmat=='MASS_GENE') : - ext='.MAEL_MASS' + macr_elem = self.MAEL_MASS elif (typmat=='RIGI_GENE') : - ext='.MAEL_RAID' + macr_elem = self.MAEL_RAID elif (typmat=='AMOR_GENE') : - ext='.MAEL_AMOR' + macr_elem = self.MAEL_AMOR else: - raise Accas.AsException("Le type de la matrice \ - est incorrect") - ncham=nommacr+(8-len(nommacr))*' '+ext - desc=Numeric.array(aster.getvectjev(ncham+'_DESC')) + raise Accas.AsException("Le type de la matrice est incorrect") + nom_vale = macr_elem.VALE.nomj() + desc=Numeric.array(macr_elem.DESC.get()) # On teste si le DESC de la matrice jeveux existe if (desc==None): - raise Accas.AsException("L'objet matrice n'existe pas ou \ - est mal cree par Code Aster") + raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster") Numeric.asarray(matrice) # On teste si la matrice python est de dimension 2 if (len(Numeric.shape(matrice))<>2): - raise Accas.AsException("La dimension de la matrice \ - est incorrecte") + raise Accas.AsException("La dimension de la matrice est incorrecte") # On teste si les tailles de la matrice jeveux et python sont identiques if (tuple([desc[1],desc[1]])<>Numeric.shape(matrice)) : - raise Accas.AsException("La dimension de la matrice \ - est incorrecte") + raise Accas.AsException("La dimension de la matrice est incorrecte") taille=desc[1]*desc[1]/2.0+desc[1]/2.0 tmp=Numeric.zeros([int(taille)],Numeric.Float) for j in range(desc[1]+1): for i in range(j): k=j*(j-1)/2+i tmp[k]=matrice[j-1,i] - aster.putvectjev(ncham+'_VALE',len(tmp),tuple(( - range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1) + aster.putvectjev(nom_vale,len(tmp),tuple(( + range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1) return diff --git a/Aster/Cata/cataSTA9/SD/co_mater.py b/Aster/Cata/cataSTA9/SD/co_mater.py index 68301dab..51f7d70e 100644 --- a/Aster/Cata/cataSTA9/SD/co_mater.py +++ b/Aster/Cata/cataSTA9/SD/co_mater.py @@ -1,4 +1,4 @@ -#@ MODIF co_mater SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF co_mater SD DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -42,12 +42,11 @@ class mater_sdaster(ASSD, sd_mater): valpar = tuple(valpar) nomres = tuple(nomres) if len(nompar) != len(valpar): - UTMESS('F', 'RCVALE', """Arguments incohérents : - Nom des paramètres : %s - Valeur des paramètres : %s""" \ - % (', '.join(nompar), ', '.join([repr(v) for v in valpar]))) + vk1=', '.join(nompar) + vk2=', '.join([repr(v) for v in valpar]) + UTMESS('F','SDVERI_4',valk=[vk1,vk2]) if len(nomres) < 1: - UTMESS('F', 'RCVALE', 'Argument invalide : "nomres" vide !') + UTMESS('F', 'SDVERI_5') # appel à l'interface Python/C return aster.rcvale(self.nom, phenomene, nompar, valpar, nomres, stop) diff --git a/Aster/Cata/cataSTA9/SD/co_matr_asse_gene.py b/Aster/Cata/cataSTA9/SD/co_matr_asse_gene.py index e0490b83..3d7bbb9a 100644 --- a/Aster/Cata/cataSTA9/SD/co_matr_asse_gene.py +++ b/Aster/Cata/cataSTA9/SD/co_matr_asse_gene.py @@ -1,4 +1,4 @@ -#@ MODIF co_matr_asse_gene SD DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF co_matr_asse_gene SD DATE 17/01/2008 AUTEUR ZENTNER I.ZENTNER # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -23,6 +23,39 @@ from SD import * from sd_matr_asse_gene import sd_matr_asse_gene import Numeric +import math + +def VALM_triang2array(dict_VALM, dim, typ): + """Conversion (par recopie) de l'objet .VALM decrivant une matrice pleine + par sa triangulaire inf (et parfois triang sup) en Numeric.array plein. + """ + # stockage symetrique ou non (triang inf+sup) + sym = len(dict_VALM) == 1 + triang_sup = Numeric.array(dict_VALM[1]) + assert dim*(dim+1)/2 == len(triang_sup), \ + 'Matrice non pleine : %d*(%d+1)/2 != %d' % (dim, dim, len(triang_sup)) + if sym: + triang_inf = triang_sup + else: + triang_inf = Numeric.array(dict_VALM[2]) + valeur=Numeric.zeros([dim, dim], typ) + for i in range(1, dim+1): + for j in range(1, i+1): + k = i*(i-1)/2 + j + valeur[i-1, j-1]=triang_inf[k-1] + valeur[j-1, i-1]=triang_sup[k-1] + return valeur + +def VALM_diag2array(dict_VALM, dim, typ): + """Conversion (par recopie) de l'objet .VALM decrivant une matrice + diagonale en Numeric.array plein. + """ + diag = Numeric.array(dict_VALM[1]) + assert dim == len(diag), 'Dimension incorrecte : %d != %d' % (dim, len(diag)) + valeur=Numeric.zeros([dim, dim], typ) + for i in range(dim): + valeur[i,i] = diag[i] + return valeur # ----------------------------------------------------------------------------- class matr_asse_gene(ASSD, sd_matr_asse_gene): @@ -38,30 +71,18 @@ class matr_asse_gene_r(matr_asse_gene): if self.par_lot(): raise Accas.AsException("Erreur dans matr_asse_gene.EXTR_MATR_GENE en PAR_LOT='OUI'") - ncham=self.get_name() - ncham=ncham+(8-len(ncham))*' ' - desc=Numeric.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC')) + desc=Numeric.array(self.DESC.get()) # On teste si le DESC de la matrice existe if (desc==None): - raise Accas.AsException("L'objet matrice n'existe pas ou \ - est mal cree par Code Aster") + raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster") # Si le stockage est plein if desc[2]==2 : - tmp=Numeric.array(aster.getcolljev(ncham+(19-len(ncham))*' '+'.VALM')[1]) - valeur=Numeric.zeros([desc[1],desc[1]],Numeric.Float) - for j in range(desc[1]+1): - for i in range(j): - k=j*(j-1)/2+i - valeur[j-1,i]=tmp[k] - valeur=(valeur+Numeric.transpose(valeur)) - for i in range(desc[1]): - valeur[i,i]=0.5*valeur[i,i] + valeur = VALM_triang2array(self.VALM.get(), desc[1], Numeric.Float) + # Si le stockage est diagonal elif desc[2]==1 : - tmp=Numeric.array(aster.getcolljev(ncham+(19-len(ncham))*' '+'.VALM')[1]) - valeur=Numeric.zeros([desc[1],desc[1]],Numeric.Float) - for i in range(desc[1]): - valeur[i,i]=tmp[i] + valeur = VALM_diag2array(self.VALM.get(), desc[1], Numeric.Float) + # Sinon on arrete tout else: raise KeyError @@ -73,19 +94,13 @@ class matr_asse_gene_r(matr_asse_gene): Attributs ne retourne rien """ if self.par_lot(): raise Accas.AsException("Erreur dans matr_asse_gene.RECU_MATR_GENE en PAR_LOT='OUI'") - from Utilitai.Utmess import UTMESS - - # avertissement generique - UTMESS('A','RECU_MATR_GENE',' ATTENTION, VOUS ALLEZ ECRASER DES CONCEPTS EXISTANTS') ncham=self.get_name() - ncham=ncham+(8-len(ncham))*' ' - desc=Numeric.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC')) + desc=Numeric.array(self.DESC.get()) # On teste si le DESC de la matrice existe if (desc==None): - raise Accas.AsException("L'objet matrice n'existe pas ou \ - est mal cree par Code Aster") + raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster") Numeric.asarray(matrice) # On teste si la dimension de la matrice python est 2 @@ -104,14 +119,14 @@ class matr_asse_gene_r(matr_asse_gene): for i in range(j): k=j*(j-1)/2+i tmp[k]=matrice[j-1,i] - aster.putcolljev(ncham+(19-len(ncham))*' '+'.VALM',len(tmp),tuple((\ + aster.putcolljev('%-19s.VALM' % ncham,len(tmp),tuple((\ range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1) # Si le stockage est diagonal elif desc[2]==1 : tmp=Numeric.zeros(desc[1],Numeric.Float) for j in range(desc[1]): tmp[j]=matrice[j,j] - aster.putcolljev(ncham+(19-len(ncham))*' '+'.VALM',len(tmp),tuple((\ + aster.putcolljev('%-19s.VALM' % ncham,len(tmp),tuple((\ range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1) # Sinon on arrete tout else: @@ -128,32 +143,20 @@ class matr_asse_gene_c(matr_asse_gene): if self.par_lot(): raise Accas.AsException("Erreur dans matr_asse_gene_c.EXTR_MATR_GENE en PAR_LOT='OUI'") - ncham=self.get_name() - ncham=ncham+(8-len(ncham))*' ' - desc=Numeric.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC')) - if (desc==None): - raise Accas.AsException("L'objet matrice n'existe pas ou \ - est mal cree par Code Aster ") + desc = Numeric.array(self.DESC.get()) + if desc == None: + raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster ") # Si le stockage est plein - if desc[2]==2 : - tmp=Numeric.array(aster.getcolljev(ncham+(19-len(ncham))*' '+'.VALM')[1]) - valeur=Numeric.zeros([desc[1],desc[1]],Numeric.Complex) - for j in range(desc[1]+1): - for i in range(j): - k=j*(j-1)/2+i - valeur[j-1,i]=tmp[k] - valeur=(valeur+Numeric.transpose(valeur)) - for i in range(desc[1]): - valeur[i,i]=0.5*valeur[i,i] + if desc[2] == 2 : + valeur = VALM_triang2array(self.VALM.get(), desc[1], Numeric.Complex) + # Si le stockage est diagonal elif desc[2]==1 : - tmp=Numeric.array(aster.getcolljev(ncham+(19-len(ncham))*' '+'.VALM')[1]) - valeur=Numeric.zeros([desc[1],desc[1]],Numeric.Complex) - for i in range(desc[1]): - valeur[i,i]=tmp[i] + valeur = VALM_diag2array(self.VALM.get(), desc[1], Numeric.Complex) + # Sinon on arrete tout else: - raise KeyError + raise KeyError return valeur def RECU_MATR_GENE(self,matrice) : @@ -162,20 +165,14 @@ class matr_asse_gene_c(matr_asse_gene): Attributs ne retourne rien """ if self.par_lot(): raise Accas.AsException("Erreur dans matr_asse_gene_c.RECU_MATR_GENE en PAR_LOT='OUI'") - from Utilitai.Utmess import UTMESS - - # avertissement generique - UTMESS('A','RECU_MATR_GENE',' ATTENTION, VOUS ALLEZ ECRASER DES CONCEPTS EXISTANTS') Numeric.asarray(matrice) ncham=self.get_name() - ncham=ncham+(8-len(ncham))*' ' - desc=Numeric.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC')) + desc=Numeric.array(self.DESC.get()) # On teste si le DESC de la matrice existe if (desc==None): - raise Accas.AsException("L'objet matrice n'existe pas ou \ - est mal cree par Code Aster") + raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster") Numeric.asarray(matrice) # On teste si la dimension de la matrice python est 2 @@ -196,7 +193,7 @@ class matr_asse_gene_c(matr_asse_gene): k=j*(j-1)/2+i tmpr[k]=matrice[j-1,i].real tmpc[k]=matrice[j-1,i].imag - aster.putvectjev(ncham+(19-len(ncham))*' '+'.VALM',len(tmpr),tuple((\ + aster.putvectjev('%-19s.VALM' % ncham, len(tmpr), tuple((\ range(1,len(tmpr)+1))),tuple(tmpr),tuple(tmpc),1) # Si le stockage est diagonal elif desc[2]==1 : @@ -205,7 +202,7 @@ class matr_asse_gene_c(matr_asse_gene): for j in range(desc[1]): tmpr[j]=matrice[j,j].real tmpc[j]=matrice[j,j].imag - aster.putvectjev(ncham+(19-len(ncham))*' '+'.VALM',len(tmpr),tuple((\ + aster.putvectjev('%-19s.VALM' % ncham,len(tmpr),tuple((\ range(1,len(tmpr)+1))),tuple(tmpr),tuple(tmpc),1) # Sinon on arrete tout else: diff --git a/Aster/Cata/cataSTA9/SD/co_table.py b/Aster/Cata/cataSTA9/SD/co_table.py index ee866302..584df23e 100644 --- a/Aster/Cata/cataSTA9/SD/co_table.py +++ b/Aster/Cata/cataSTA9/SD/co_table.py @@ -1,4 +1,4 @@ -#@ MODIF co_table SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF co_table SD DATE 16/10/2007 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -33,15 +33,15 @@ class table_sdaster(ASSD, sd_table): tabnom = aster.getvectjev(tblp) #tabnom = self.TBLP.get() if tabnom == None: - UTMESS('F', 'TABLE[]', "Objet '%s' inexistant" % tblp) + UTMESS('F','SDVERI_2',valk=[tblp]) for i in range(len(tabnom)) : if tabnom[i]==requete: break resu=aster.getvectjev(tabnom[i+2]) if resu == None: - UTMESS('F', 'TABLE[]', "Objet '%s' inexistant" % tabnom[i+2]) + UTMESS('F','SDVERI_2',valk=[tabnom[i+2]]) exist=aster.getvectjev(tabnom[i+3]) if exist == None: - UTMESS('F', 'TABLE[]', "Objet '%s' inexistant" % tabnom[i+3]) + UTMESS('F','SDVERI_2',valk=[tabnom[i+3]]) if key[1]>len(resu) or exist[key[1]-1]==0: raise KeyError else: diff --git a/Aster/Cata/cataSTA9/SD/co_table_container.py b/Aster/Cata/cataSTA9/SD/co_table_container.py new file mode 100644 index 00000000..71bad133 --- /dev/null +++ b/Aster/Cata/cataSTA9/SD/co_table_container.py @@ -0,0 +1,29 @@ +#@ MODIF co_table_container SD DATE 12/02/2008 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2008 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +from SD import * +from co_table import table_sdaster +from sd_table_container import sd_table_container + +# ----------------------------------------------------------------------------- +class table_container(table_sdaster,sd_table_container): + """Table contenant les colonnes NOM_OBJET, TYPE_OBJET et NOM_SD. + """ + diff --git a/Aster/Cata/cataSTA9/SD/co_vect_asse_gene.py b/Aster/Cata/cataSTA9/SD/co_vect_asse_gene.py index d57496dd..ae36e17e 100644 --- a/Aster/Cata/cataSTA9/SD/co_vect_asse_gene.py +++ b/Aster/Cata/cataSTA9/SD/co_vect_asse_gene.py @@ -1,4 +1,4 @@ -#@ MODIF co_vect_asse_gene SD DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF co_vect_asse_gene SD DATE 14/01/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -45,10 +45,6 @@ class vect_asse_gene(ASSD, sd_cham_gene): Attributs ne retourne rien """ if self.par_lot(): raise Accas.AsException("Erreur dans vect_asse_gene_r.RECU_VECT_GENE en PAR_LOT='OUI'") - from Utilitai.Utmess import UTMESS - - # avertissement generique - UTMESS('A','RECU_VECT_GENE',' ATTENTION, VOUS ALLEZ ECRASER DES CONCEPTS EXISTANTS') Numeric.asarray(vecteur) ncham=self.get_name() @@ -85,10 +81,6 @@ class vect_asse_gene(ASSD, sd_cham_gene): Attributs ne retourne rien """ if self.par_lot(): raise Accas.AsException("Erreur dans vect_asse_gene_c.RECU_VECT_GENE en PAR_LOT='OUI'") - from Utilitai.Utmess import UTMESS - - # avertissement generique - UTMESS('A','RECU_VECT_GENE',' ATTENTION, VOUS ALLEZ ECRASER DES CONCEPTS EXISTANTS') Numeric.asarray(vecteur) ncham=self.get_name() diff --git a/Aster/Cata/cataSTA9/SD/sd_carte.py b/Aster/Cata/cataSTA9/SD/sd_carte.py index b418df69..85552eb9 100644 --- a/Aster/Cata/cataSTA9/SD/sd_carte.py +++ b/Aster/Cata/cataSTA9/SD/sd_carte.py @@ -1,25 +1,26 @@ -#@ MODIF sd_carte SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_carte SD DATE 10/07/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * from SD.sd_titre import sd_titre +from SD.sd_util import * @@ -29,8 +30,51 @@ class sd_carte(sd_titre): DESC = AsVI(docu='CART', ) NOMA = AsVK8(lonmax=1, ) - NOLI = AsVK24() - VALE = AsObject(genr='V', xous='S', type=Parmi('C', 'K', 'R'), ltyp=Parmi(16, 24, 8), ) - LIMA = AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ) + VALE = AsVect(type=Parmi('C', 'K', 'R'), ltyp=Parmi(16, 24, 8), ) + + NOLI = Facultatif(AsVK24()) + LIMA = Facultatif(AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )) + + + def exists(self): + return self.NOMA.exists + + + def check_NOMA(self,checker): + if not self.exists() : return + noma=self.NOMA.get_stripped() + + # faut-il vérifier le sd_maillage de chaque sd_carte ? AJACOT_PB (meme question que pour sd_cham_no) + # - cela risque de couter cher + # - cela pose un problème "import circulaire" avec sd_maillage -> sd_carte => import ici + # from SD.sd_maillage import sd_maillage + # sd2=sd_maillage(noma[0]); sd2.check(checker) + # Rem : si on vérifie le sd_maillage, il me semble que sdll503a se plante (RuntimeError: maximum recursion depth exceeded) + + + def check_DESC(self,checker): + if not self.exists() : return + desc=self.DESC.get() + numgd =desc[0] + n_gd_max =desc[1] + n_gd_edit=desc[2] + assert numgd > 0 , desc + assert n_gd_max > 0 , desc + assert n_gd_edit >=0 , desc # AJACOT_PB : j'aurais préféré n_gd_edit > 0 + # mais acearp.f crée parfois des cartes "vides" (zzzz200a) + assert n_gd_edit <= n_gd_max , desc + for kedit in range(n_gd_edit) : + code=desc[3+2*kedit] + assert abs(code) in (1,2,3) , (code, kedit, desc) + + + def check_VALE(self,checker): + if not self.exists() : return + n1=self.VALE.lonmax + desc=self.DESC.get() + n_gd_max =desc[1] + numgd =desc[0] + ncmp_max=len(sdu_licmp_gd(numgd)) + assert n1==ncmp_max*n_gd_max , (n1, ncmp_max, n_gd_max) diff --git a/Aster/Cata/cataSTA9/SD/sd_cham_elem.py b/Aster/Cata/cataSTA9/SD/sd_cham_elem.py index ced947ab..d5fd1595 100644 --- a/Aster/Cata/cataSTA9/SD/sd_cham_elem.py +++ b/Aster/Cata/cataSTA9/SD/sd_cham_elem.py @@ -1,21 +1,21 @@ -#@ MODIF sd_cham_elem SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_cham_elem SD DATE 18/03/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * @@ -29,11 +29,21 @@ class sd_cham_elem(sd_titre): nomj = SDNom(fin=19) CELD = AsVI(docu='CHML', ) CELV = AsObject(genr='V', xous='S', type=Parmi('C', 'I', 'K', 'R'), ltyp=Parmi(4,8,16), ) - CELK = AsVK24(lonmax=6, ) + CELK = AsVK24(lonmax=7, ) + + + def exists(self): + # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée) + return self.CELK.exists + + def check_1(self, checker): + if not self.exists() : return + celk=self.CELK.get_stripped() + sd2=sd_ligrel(celk[0]); sd2.check(checker) + assert celk[1] != '' , celk + assert celk[2] in ('ELNO','ELGA','ELEM') , celk + assert celk[4] in ('','INF','MOY','SUP') , celk + assert celk[5] != '' , celk + assert celk[6] in ('MPI_COMPLET','MPI_INCOMPLET') , celk - # indirection vers le LIGREL : - def check_cham_elem_i_LIGREL(self, checker): - if not self.CELK.get() : return - nom=self.CELK.get()[0] - sd2=sd_ligrel(nom); sd2.check(checker) diff --git a/Aster/Cata/cataSTA9/SD/sd_cham_gene.py b/Aster/Cata/cataSTA9/SD/sd_cham_gene.py index 906b33b0..43cca8ee 100644 --- a/Aster/Cata/cataSTA9/SD/sd_cham_gene.py +++ b/Aster/Cata/cataSTA9/SD/sd_cham_gene.py @@ -1,24 +1,25 @@ -#@ MODIF sd_cham_gene SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_cham_gene SD DATE 27/11/2007 AUTEUR ANDRIAM H.ANDRIAMBOLOLONA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * +from SD.sd_nume_ddl_gene import sd_nume_ddl_gene class sd_cham_gene(AsBase): nomj = SDNom(fin=19) @@ -27,3 +28,18 @@ class sd_cham_gene(AsBase): DESC = AsVI(docu='VGEN', ) + def exists(self): + # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée) + return self.REFE.exists + + # indirection vers NUME_DDL_GENE: + def check_REFE(self, checker): + if not self.exists() : return + refe = self.REFE.get_stripped() + # ce test fait planter les verif de SD issues de DYNA_TRAN_MODAL + RECU_GENE + # op0037 cree un refe[1]='$TRAN_GENE' bidon + if refe[1] == '$TRAN_GENE': return + if refe[1] : + sd2 = sd_nume_ddl_gene(refe[1]) ; sd2.check(checker) + + diff --git a/Aster/Cata/cataSTA9/SD/sd_cham_mater.py b/Aster/Cata/cataSTA9/SD/sd_cham_mater.py index f99146db..42ed3f33 100644 --- a/Aster/Cata/cataSTA9/SD/sd_cham_mater.py +++ b/Aster/Cata/cataSTA9/SD/sd_cham_mater.py @@ -1,4 +1,4 @@ -#@ MODIF sd_cham_mater SD DATE 23/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_cham_mater SD DATE 28/01/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -21,11 +21,25 @@ from SD import * from SD.sd_carte import sd_carte +from SD.sd_champ import sd_champ +from SD.sd_mater import sd_mater +from SD.sd_compor import sd_compor from SD.sd_util import * +# Remarque : +#------------ +# la sd_cham_mater est produite par la seule commande AFFE_MATERIAU. +# C'est pourquoi, on fera appel parfois pour la décrire au vocabulaire de cette +# commande. + + + class sd_cham_mater_varc(AsBase): #---------------------------------- +# la sd_cham_mater_varc est la partie de la sd_cham_mater correspondant aux variables de commande +# (mot clé AFFE_VARC) + nomj = SDNom(fin=8) CVRCNOM = AsVK8() CVRCGD = AsVK8() @@ -34,7 +48,7 @@ class sd_cham_mater_varc(AsBase): CVRCCMP = AsVK8() def exists(self): - return self.CVRCVARC.get() + return self.CVRCVARC.exists # indirection via CVRCVARC: def check_cham_mater_i_CVRCVARC(self, checker): @@ -43,25 +57,41 @@ class sd_cham_mater_varc(AsBase): for nom in lnom : nom2=self.nomj()[:8]+'.'+nom+'.1' sd2=sd_carte(nom2) ; sd2.check(checker) + nom2=self.nomj()[:8]+'.'+nom+'.2' sd2=sd_carte(nom2) ; sd2.check(checker) + # dans le cas de la temperature, on cree parfois des cartes sous-terraines + # (lorsque l'on indique VALE_REF sans donner de CHAMP_GD/EVOL) : + if nom.strip()=='TEMP': + desc=sd2.DESC.get() + ngdmax=desc[1] + ngdedi=desc[2] + vale=sd2.VALE.get_stripped() + ncmp=len(vale)/ngdmax + assert len(vale)==ncmp*ngdmax, (ngdmax, ncmp, vale) + for kedit in range(ngdedi): + assert vale[ncmp*kedit+0]=='TEMP' , (vale, kedit,ncmp) + if vale[ncmp*kedit+1]=='CHAMP' : + sd3=sd_champ(vale[ncmp*kedit+2]) ; sd3.check(checker) + + # vérification des objets .CVRC* : def check_CVRC(self, checker): if not self.exists() : return - xcmp=self.CVRCCMP.get() - xnom=self.CVRCNOM.get() - xgd=self.CVRCGD.get() - xvarc=self.CVRCVARC.get() - xdef=self.CVRCDEF.get() - - # Les 5 objets ont la meme longueur > 0 : - nbcvrc=len(xnom) + cvrccmp=self.CVRCCMP.get() + cvrcnom =self.CVRCNOM.get_stripped() + cvrcgd =self.CVRCGD.get_stripped() + cvrcvarc=self.CVRCVARC.get_stripped() + cvrcdef =self.CVRCDEF.get() + + # Les 6 objets ont la meme longueur > 0 : + nbcvrc=len(cvrcnom) assert nbcvrc > 0, (self) - assert len(xcmp) == nbcvrc , (xcmp,xnom,self) - assert len(xgd) == nbcvrc , (xgd,xnom,self) - assert len(xvarc) == nbcvrc , (xvarc,xnom,self) - assert len(xdef) == nbcvrc , (xdef,xnom,self) + assert len(cvrccmp) == nbcvrc , (cvrccmp,cvrcnom,self) + assert len(cvrcgd) == nbcvrc , (cvrcgd,cvrcnom,self) + assert len(cvrcvarc) == nbcvrc , (cvrcvarc,cvrcnom,self) + assert len(cvrcdef) == nbcvrc , (cvrcdef,cvrcnom,self) # Les 4 objets sont "non blancs" : sdu_tous_non_blancs(self.CVRCCMP,checker) @@ -69,21 +99,86 @@ class sd_cham_mater_varc(AsBase): sdu_tous_non_blancs(self.CVRCGD,checker) sdu_tous_non_blancs(self.CVRCVARC,checker) - # les noms des CRVC doievent etre differents: + # les noms des CRVC doivent etre differents: sdu_tous_differents(self.CVRCNOM,checker) + + class sd_cham_mater(AsBase): -#---------------------------------- +#============================= nomj = SDNom(fin=8) - champ_mat = sd_carte(SDNom(nomj='.CHAMP_MAT', fin=19)) - # La carte TEMPE_REF n'existe pas si AFFE_VARC/NOM_VARC='TEMP' : - # (voir routine cmtref.f) - TEMPE_REF = Facultatif(sd_carte()) + # CHAMP_MAT est une carte contenant la liste des noms de matériaux + # affectées sur les mailles du maillage. + CHAMP_MAT = sd_carte() # si AFFE_VARC : varc = Facultatif(sd_cham_mater_varc(SDNom(nomj=''))) + # si AFFE_COMPOR : + # COMPOR est une carte définissant les sd_compor affectés + # sur les mailles du maillage + COMPOR = Facultatif(sd_carte()) + + + def check_CHAMP_MAT(self,checker) : + #---------------------------------- + # on vérifie que la carte .CHAMP_MAT contient bien des noms de matériau. + vale=self.CHAMP_MAT.VALE.get_stripped() + desc=self.CHAMP_MAT.DESC.get() + numgd =desc[0] + n_gd_edit=desc[2] + assert sdu_nom_gd(numgd) == 'NEUT_F', (desc,sdu_nom_gd(numgd)) + ncmp_max=len(sdu_licmp_gd(numgd)) + assert ncmp_max==30 , ncmp_max + + for kedit in range(n_gd_edit): + v1=vale[kedit*ncmp_max:(kedit+1)*ncmp_max] + ktref=None + for k1 in range(len(v1)) : + x1=v1[k1] + if x1 == '' : continue + + # cas particulier : 'TREF=>', '25.0' + if x1=='TREF=>' : + ktref=k1 + continue + if ktref : + assert k1 == ktref+1 , (k1, ktref) + # on doit retrouver la valeur de TREF : + try : + tref=float(x1) + except : + assert 0 , ' On doit trouver la valeur de TREF: '+x1 + continue + + # cas général : x1 est un nom de sd_mater + sd2=sd_mater(x1) ; sd2.check(checker) + + + def check_COMPOR(self,checker) : + #---------------------------------- + # on vérifie (un peu) la carte .COMPOR (si elle existe) + desc=self.COMPOR.DESC.get() + if not desc : return + vale=self.COMPOR.VALE.get_stripped() + numgd =desc[0] + n_gd_edit=desc[2] + assert sdu_nom_gd(numgd) == 'COMPOR', (desc,sdu_nom_gd(numgd)) + ncmp_max=len(sdu_licmp_gd(numgd)) + + for kedit in range(n_gd_edit): + v1=vale[kedit*ncmp_max:(kedit+1)*ncmp_max] + assert v1[3]=='COMP_INCR' , v1 + sd2=sd_compor(v1[5].split('.')[0].strip()) ; sd2.check(checker) + + for x1 in v1[7:] : + assert x1=='' , v1 + + + + + diff --git a/Aster/Cata/cataSTA9/SD/sd_cham_no.py b/Aster/Cata/cataSTA9/SD/sd_cham_no.py index 172d5efd..7a1333de 100644 --- a/Aster/Cata/cataSTA9/SD/sd_cham_no.py +++ b/Aster/Cata/cataSTA9/SD/sd_cham_no.py @@ -1,4 +1,4 @@ -#@ MODIF sd_cham_no SD DATE 09/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_cham_no SD DATE 28/11/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -27,7 +27,7 @@ from SD.sd_nume_equa import sd_nume_equa class sd_cham_no(sd_titre): #------------------------------------ nomj = SDNom(fin=19) - VALE = AsObject(genr='V', ltyp=Parmi(4,8,16,24), type=Parmi('C', 'I', 'K', 'R'), xous='S', docu=Parmi('', '2', '3'), ) + VALE = AsVect(ltyp=Parmi(4,8,16,24), type=Parmi('C', 'I', 'K', 'R'), docu=Parmi('', '2', '3'), ) REFE = AsVK24() DESC = AsVI(docu='CHNO', ) @@ -44,12 +44,13 @@ class sd_cham_no(sd_titre): # faut-il vérifier le sd_maillage de chaque sd_cham_no ? AJACOT_PB # - cela risque de couter cher # - cela pose un problème "import circulaire" avec sd_maillage -> sd_cham_no => import ici - # - cela pose un problème de boucle infinie : sd_maillage -> sd_cham_no -> sd_maillage -> ... - #from SD.sd_maillage import sd_maillage - #sd2 = sd_maillage(lnom[0]) ; sd2.check(checker) + from SD.sd_maillage import sd_maillage + sd2 = sd_maillage(lnom[0]) + sd2.check(checker) # j'aurai préféré : sd_prof_chno que sd_nume_equa (mais sslv111b !) AJACOT_PB : if lnom[1].strip() : + if checker.names.has_key(lnom[1][:14]+'.NUME.DEEQ'): return sd2 = sd_nume_equa(lnom[1]) ; sd2.check(checker) diff --git a/Aster/Cata/cataSTA9/SD/sd_champ.py b/Aster/Cata/cataSTA9/SD/sd_champ.py index d0b434e3..ab214a10 100644 --- a/Aster/Cata/cataSTA9/SD/sd_champ.py +++ b/Aster/Cata/cataSTA9/SD/sd_champ.py @@ -1,4 +1,4 @@ -#@ MODIF sd_champ SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_champ SD DATE 17/07/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -19,7 +19,6 @@ # ====================================================================== from SD import * -import aster from SD.sd_cham_no import sd_cham_no from SD.sd_cham_elem import sd_cham_elem diff --git a/Aster/Cata/cataSTA9/SD/sd_char_cine.py b/Aster/Cata/cataSTA9/SD/sd_char_cine.py index cc0868c8..23f6964f 100644 --- a/Aster/Cata/cataSTA9/SD/sd_char_cine.py +++ b/Aster/Cata/cataSTA9/SD/sd_char_cine.py @@ -1,32 +1,99 @@ -#@ MODIF sd_char_cine SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_char_cine SD DATE 08/10/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * +from SD.sd_modele import sd_modele +from SD.sd_fonction import sd_fonction + class sd_char_cine(AsBase): - nomj = SDNom(fin=8) - CITH_MODEL_NOMO = Facultatif(AsVK8(SDNom(nomj='.CITH.MODEL.NOMO'), lonmax=1, )) - VALF = Facultatif(AsVK8(SDNom(debut=19), )) - VALE = Facultatif(AsVR(SDNom(debut=19), )) - CIME_MODEL_NOMO = Facultatif(AsVK8(SDNom(nomj='.CIME.MODEL.NOMO'), lonmax=1, )) - DEFI = AsVI(SDNom(debut=19), ) - TYPE = AsVK8(lonmax=1, ) +#=========================== + nomj = SDNom(fin=19) + + AFCK = AsVK8(lonmax=3) + AFCI = AsVI() + AFCV = Facultatif(OJBVect(type=Parmi('C','R','K'))) + + + + def exists(self): + # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée) + return self.AFCK.exists + + + def u_veri1(self): # retourne (CIME/CITH/CIAC, RE/CX/FO/FT) + #--------------------------------------------------------------- + afck=self.AFCK.get() + l1=afck[0].strip().split('_') ; assert len(l1)==2 , afck + phen, tsca= l1[0], l1[1] + assert phen in ('CIME', 'CITH', 'CIAC'), afck + assert tsca in ('RE', 'CX', 'FO', 'FT'), tsca + return phen, tsca + + + def check_AFCK(self,checker): + #--------------------------------------------- + phen, tsca = self.u_veri1() + afck=self.AFCK.get() + nomo=afck[1].strip() + sd2=sd_modele(nomo); sd2.check(checker) + if afck[2].strip() != '' : assert phen=='CIME' and tsca=='FT', afck + + + def check_AFCI(self,checker): + #--------------------------------------------- + phen, tsca = self.u_veri1() + afci=self.AFCI.get() + nbloc=afci[0] + assert len(afci)==3*nbloc+1 , afci + for k in range(nbloc) : + nuno =afci[3*k +1] + nucmp=afci[3*k +2] + assert afci[3*k +3] == 0 , (k,afci) + assert nuno > 0 , (k,afci) + assert nucmp> 0 , (k,afci) + + + def check_AFCV(self,checker): + #------------------------------------------------- + phen, tsca = self.u_veri1() + afci=self.AFCI.get() + nbloc=afci[0] + if not self.AFCV.exists : + assert tsca=='FT',tsca + afck=self.AFCK.get() + assert afck[2].strip() != '' , afck + else : + tsca2 = self.AFCV.type.strip() + assert self.AFCV.lonmax == nbloc , (nbloc,self.AFCV.lonmax) + + if tsca == 'RE' : + assert tsca2=='R', tsca2 + if tsca in ('FO', 'FT') : + assert tsca2=='K' , tsca2 # champ de fonctions + if tsca=='CX' : + assert tsca2=='C', tsca2 + # vérification des fonctions : + if tsca in ( 'FO', 'FT') : # 'FO' : fonction ; 'FT' : il existe une fonction de 'INST' + afcv = self.AFCV.get() + for fonc in afcv : + sd2=sd_fonction(fonc); sd2.check(checker) diff --git a/Aster/Cata/cataSTA9/SD/sd_char_contact.py b/Aster/Cata/cataSTA9/SD/sd_char_contact.py index f4588c6a..d14300cf 100644 --- a/Aster/Cata/cataSTA9/SD/sd_char_contact.py +++ b/Aster/Cata/cataSTA9/SD/sd_char_contact.py @@ -1,4 +1,4 @@ -#@ MODIF sd_char_contact SD DATE 09/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_char_contact SD DATE 01/04/2008 AUTEUR ABBAS M.ABBAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -19,18 +19,38 @@ # ====================================================================== from SD import * +from SD.sd_champ import sd_champ +from SD.sd_xfem import sd_modele_xfem, sd_contact_xfem class sd_char_contact(AsBase): nomj =SDNom(fin=16) + FORMCO = Facultatif(AsVI()) + + def exists(self): + # retourne True si la SD semble exister. + return self.FORMCO.exists + + + def formulation_xfem(self): + if not self.exists() : return False + iform = self.FORMCO.get()[0] + return iform == 3 + + def contact_xfem_actif(self): + if not self.formulation_xfem() : return False + return self.XNBASC.exists + BAMACO = Facultatif(AsVI()) BANOCO = Facultatif(AsVI()) CARACF = Facultatif(AsVR()) COMAFO = Facultatif(AsVR()) + JEUSUR = Facultatif(AsVR()) CONVCO = Facultatif(AsVI()) - DIRCO = Facultatif(AsVR()) + DIRNOR = Facultatif(AsVR()) + DIRAPP = Facultatif(AsVR()) ECPDON = Facultatif(AsVI()) - FORMCO = Facultatif(AsVI()) + CARFRO = Facultatif(AsVR()) FROTE = Facultatif(AsVR()) JEUCON = Facultatif(AsVR()) JEUCOQ = Facultatif(AsVR()) @@ -60,16 +80,66 @@ class sd_char_contact(AsBase): PNOMACO = Facultatif(AsVI()) PRANOCO = Facultatif(AsVI()) PSSNOCO = Facultatif(AsVI()) + PSANOFR = Facultatif(AsVI()) PSUMACO = Facultatif(AsVI()) PSUNOCO = Facultatif(AsVI()) PZONECO = Facultatif(AsVI()) RANOCO = Facultatif(AsVI()) SANSNQ = Facultatif(AsVI()) SSNOCO = Facultatif(AsVI()) + SANOFR = Facultatif(AsVI()) SYMECO = Facultatif(AsVI()) TABFIN = Facultatif(AsVR()) TANDEF = Facultatif(AsVR()) TANPOU = Facultatif(AsVR()) TOLECO = Facultatif(AsVR()) - XFEM = Facultatif(AsVI()) + xfem = Facultatif(AsVI()) XFIMAI = Facultatif(AsVK8()) + XNBASC = Facultatif(AsVK24()) + XNRELL = Facultatif(AsVK24()) + TANINI = Facultatif(AsVR()) + NORMCO = Facultatif(AsVR()) + TANGCO = Facultatif(AsVR()) + EXCLFR = Facultatif(AsVR()) + MODELX = Facultatif(AsVK8(lonmax=1,)) + + # si contact xfem : + xfem = Facultatif(sd_contact_xfem(SDNom(nomj=''))) + + + # indirection vers les champs de .XNBASC : + # Question à Mickael : + # la fonction suivante ne serait-elle pas mieux placée dans la classe sd_contact_xfem ? + def check_char_contact_xfem_XNBASC(self, checker): + if not self.contact_xfem_actif() : return + lnom = self.XNBASC.get() + nbnom = self.XNBASC.lonuti + for k in range(nbnom) : + nom = lnom[k] + if not nom.strip(): continue + sd2 = sd_champ(nom) + sd2.check(checker) + + + # indirection vers les champs de .XNRELL : + # On ne vérifie rien pour l'instant + # Question à Mickael : + # la fonction suivante ne serait-elle pas mieux placée dans la classe sd_contact_xfem ? + def check_char_contact_xfem_XNRELL(self, checker): + if not self.contact_xfem_actif() : return + lnom = self.XNRELL.get() + nbnom = self.XNRELL.lonuti + for k in range(nbnom) : + nom = lnom[k] + oo = AsObject(SDNom(nomj=nom,debut=0),genr='V', xous='S', type=Parmi('I','R')) + oo.check(checker) + + + # Verification MODELE xfem + def check_char_contact_xfem_MODELX(self, checker): + if not self.contact_xfem_actif() : return + nom = self.MODELX.get()[0] + sd2 = sd_modele_xfem(nom) + sd2.check(checker) + + diff --git a/Aster/Cata/cataSTA9/SD/sd_char_meca.py b/Aster/Cata/cataSTA9/SD/sd_char_meca.py index c74c4a25..1048b177 100644 --- a/Aster/Cata/cataSTA9/SD/sd_char_meca.py +++ b/Aster/Cata/cataSTA9/SD/sd_char_meca.py @@ -1,21 +1,21 @@ -#@ MODIF sd_char_meca SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_char_meca SD DATE 01/04/2008 AUTEUR ABBAS M.ABBAS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * @@ -25,45 +25,82 @@ from SD.sd_carte import sd_carte from SD.sd_char_unilate import sd_char_unilate from SD.sd_char_contact import sd_char_contact + +class sd_char_gf_xx(AsBase): + nomj = SDNom(fin=19) + VALE = AsVR() + NCMP = AsVK8() + + +class sd_char_grflu(AsBase): + nomj = SDNom(fin=19) + + ABSC = AsVR() + APPL = AsVI() + GEOM = AsVR() + LIMA = AsVI() + LINO = AsVI() + NOMA = AsVK8() + VDIR = AsVR() + + +class sd_char_chme(AsBase): + nomj = SDNom(fin=13) + + MODEL_NOMO = AsVK8(SDNom(nomj='.MODEL.NOMO'), lonmax=1, ) + + LIGRE = Facultatif(sd_ligrel()) + + CIMPO = Facultatif(sd_carte()) + CMULT = Facultatif(sd_carte()) + EPSIN = Facultatif(sd_carte()) + F1D1D = Facultatif(sd_carte()) + F1D2D = Facultatif(sd_carte()) + F1D3D = Facultatif(sd_carte()) + F2D2D = Facultatif(sd_carte()) + F2D3D = Facultatif(sd_carte()) + F3D3D = Facultatif(sd_carte()) + FCO2D = Facultatif(sd_carte()) + FCO3D = Facultatif(sd_carte()) + FELEC = Facultatif(sd_carte()) + FL101 = Facultatif(sd_carte()) + FL102 = Facultatif(sd_carte()) + FLUX = Facultatif(sd_carte()) + FORNO = Facultatif(sd_carte()) + IMPE = Facultatif(sd_carte()) + ONDE = Facultatif(sd_carte()) + PESAN = Facultatif(sd_carte()) + PRESS = Facultatif(sd_carte()) + ROTAT = Facultatif(sd_carte()) + SIGIN = Facultatif(sd_carte()) + VNOR = Facultatif(sd_carte()) + + # si GRAPPE_FLUIDE : + GRFLU = Facultatif(sd_char_grflu()) + GF_AS = Facultatif(sd_char_gf_xx()) + GF_DH = Facultatif(sd_char_gf_xx()) + GF_GR = Facultatif(sd_char_gf_xx()) + GF_MA = Facultatif(sd_char_gf_xx()) + GF_MC = Facultatif(sd_char_gf_xx()) + GF_PC = Facultatif(sd_char_gf_xx()) + GF_TG = Facultatif(sd_char_gf_xx()) + + VEASS = Facultatif(AsVK8(lonmax=1, )) + EVOL_CHAR = Facultatif(AsVK8(SDNom(nomj='.EVOL.CHAR'), lonmax=1, )) + TEMPE_TEMP = Facultatif(AsVK8(SDNom(nomj='.TEMPE.TEMP'), lonmax=1, )) + + class sd_char_meca(AsBase): nomj = SDNom(fin=8) TYPE = AsVK8(lonmax=1) - CHME_MODEL_NOMO = AsVK8(SDNom(nomj='.CHME.MODEL.NOMO'), lonmax=1, ) - - chme_ligre = Facultatif(sd_ligrel(SDNom(nomj='.CHME.LIGRE'))) - - chme_cimpo = Facultatif(sd_carte(SDNom(nomj='.CHME.CIMPO'))) - chme_cmult = Facultatif(sd_carte(SDNom(nomj='.CHME.CMULT'))) - chme_epsin = Facultatif(sd_carte(SDNom(nomj='.CHME.EPSIN'))) - chme_f1d1d = Facultatif(sd_carte(SDNom(nomj='.CHME.F1D1D'))) - chme_f1d2d = Facultatif(sd_carte(SDNom(nomj='.CHME.F1D2D'))) - chme_f1d3d = Facultatif(sd_carte(SDNom(nomj='.CHME.F1D3D'))) - chme_f2d2d = Facultatif(sd_carte(SDNom(nomj='.CHME.F2D2D'))) - chme_f2d3d = Facultatif(sd_carte(SDNom(nomj='.CHME.F2D3D'))) - chme_f3d3d = Facultatif(sd_carte(SDNom(nomj='.CHME.F3D3D'))) - chme_fco2d = Facultatif(sd_carte(SDNom(nomj='.CHME.FCO2D'))) - chme_fco3d = Facultatif(sd_carte(SDNom(nomj='.CHME.FCO3D'))) - chme_felec = Facultatif(sd_carte(SDNom(nomj='.CHME.FELEC'))) - chme_fl101 = Facultatif(sd_carte(SDNom(nomj='.CHME.FL101'))) - chme_fl102 = Facultatif(sd_carte(SDNom(nomj='.CHME.FL102'))) - chme_flux = Facultatif(sd_carte(SDNom(nomj='.CHME.FLUX'))) - chme_forno = Facultatif(sd_carte(SDNom(nomj='.CHME.FORNO'))) - chme_impe = Facultatif(sd_carte(SDNom(nomj='.CHME.IMPE'))) - chme_onde = Facultatif(sd_carte(SDNom(nomj='.CHME.ONDE'))) - chme_pesan = Facultatif(sd_carte(SDNom(nomj='.CHME.PESAN'))) - chme_press = Facultatif(sd_carte(SDNom(nomj='.CHME.PRESS'))) - chme_rotat = Facultatif(sd_carte(SDNom(nomj='.CHME.ROTAT'))) - chme_sigin = Facultatif(sd_carte(SDNom(nomj='.CHME.SIGIN'))) - chme_vnor = Facultatif(sd_carte(SDNom(nomj='.CHME.VNOR'))) - - unilate = Facultatif(sd_char_unilate(SDNom(nomj='.UNILATE'))) - contact = Facultatif(sd_char_contact(SDNom(nomj='.CONTACT'))) - - CHME_EVOL_CHAR = Facultatif(AsVK8(SDNom(nomj='.CHME.EVOL.CHAR'), lonmax=1, )) - CHME_VEASS = Facultatif(AsVK8(SDNom(nomj='.CHME.VEASS'), lonmax=1, )) + + CHME = Facultatif(sd_char_chme()) + + UNILATE = Facultatif(sd_char_unilate()) + CONTACT = Facultatif(sd_char_contact()) + TRANS01 = Facultatif(AsVR(lonmax=6, )) - CHME_TEMPE_TEMP = Facultatif(AsVK8(SDNom(nomj='.CHME.TEMPE.TEMP'), lonmax=1, )) TRANS02 = Facultatif(AsVR(lonmax=6, )) LISMA01 = Facultatif(AsVI(lonmax=12, )) LISMA02 = Facultatif(AsVI(lonmax=12, )) diff --git a/Aster/Cata/cataSTA9/SD/sd_char_ther.py b/Aster/Cata/cataSTA9/SD/sd_char_ther.py index 782b9b05..37cadd6d 100644 --- a/Aster/Cata/cataSTA9/SD/sd_char_ther.py +++ b/Aster/Cata/cataSTA9/SD/sd_char_ther.py @@ -1,21 +1,21 @@ -#@ MODIF sd_char_ther SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_char_ther SD DATE 17/07/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * @@ -24,28 +24,47 @@ from SD.sd_ligrel import sd_ligrel from SD.sd_cham_elem import sd_cham_elem from SD.sd_carte import sd_carte from SD.sd_champ import sd_champ +from SD.sd_fonction import sd_fonction + + +class sd_char_chth(AsBase): +#-------------------------------- + nomj = SDNom(fin=13) + + CONVE_VALE = Facultatif(AsVK8(SDNom(nomj='.CONVE.VALE'), lonmax=1)) + MODEL_NOMO = AsVK8(SDNom(nomj='.MODEL.NOMO'), lonmax=1) + LIGRE = Facultatif(sd_ligrel()) + + SOURE = Facultatif(sd_champ(SDNom(nomj='.SOURE'))) # pour l'instant : sd_carte ou sd_cham_elem + + CIMPO = Facultatif(sd_carte()) + CMULT = Facultatif(sd_carte()) + COEFH = Facultatif(sd_carte()) + FLUNL = Facultatif(sd_carte()) + FLUR2 = Facultatif(sd_carte()) + FLURE = Facultatif(sd_carte()) + GRAIN = Facultatif(sd_carte()) + HECHP = Facultatif(sd_carte()) + RAYO = Facultatif(sd_carte()) + T_EXT = Facultatif(sd_carte()) + + + # parfois, TEMP_IMPO crée une carte de sd_fonction : + # il faut alors vérifier ces sd_fonction + def check_CIMPO_FONC(self, checker): + if self.CIMPO.VALE.ltyp != 24 : return + vale=self.CIMPO.VALE.get() + for x in vale : + if x.strip()=='' : continue + nomfon=x[:19] + sd2=sd_fonction(nomfon) ; sd2.check(checker) + class sd_char_ther(AsBase): #-------------------------------- nomj = SDNom(fin=8) - - CHTH_CONVE_VALE = Facultatif(AsVK8(SDNom(nomj='.CHTH.CONVE.VALE'), lonmax=1)) - CHTH_MODEL_NOMO = AsVK8(SDNom(nomj='.CHTH.MODEL.NOMO'), lonmax=1) - TYPE = AsVK8(lonmax=1) - chth_ligre = Facultatif(sd_ligrel(SDNom(nomj='.CHTH.LIGRE'))) - - chth_soure = Facultatif(sd_champ(SDNom(nomj='.CHTH.SOURE'))) # pour l'instant : sd_carte ou sd_cham_elem - - chth_cimpo = Facultatif(sd_carte(SDNom(nomj='.CHTH.CIMPO'))) - chth_cmult = Facultatif(sd_carte(SDNom(nomj='.CHTH.CMULT'))) - chth_coefh = Facultatif(sd_carte(SDNom(nomj='.CHTH.COEFH'))) - chth_flunl = Facultatif(sd_carte(SDNom(nomj='.CHTH.FLUNL'))) - chth_flur2 = Facultatif(sd_carte(SDNom(nomj='.CHTH.FLUR2'))) - chth_flure = Facultatif(sd_carte(SDNom(nomj='.CHTH.FLURE'))) - chth_grain = Facultatif(sd_carte(SDNom(nomj='.CHTH.GRAIN'))) - chth_hechp = Facultatif(sd_carte(SDNom(nomj='.CHTH.HECHP'))) - chth_rayo = Facultatif(sd_carte(SDNom(nomj='.CHTH.RAYO'))) - chth_t_ext = Facultatif(sd_carte(SDNom(nomj='.CHTH.T_EXT'))) + TYPE = AsVK8(lonmax=1) + CHTH = sd_char_chth() diff --git a/Aster/Cata/cataSTA9/SD/sd_char_unilate.py b/Aster/Cata/cataSTA9/SD/sd_char_unilate.py index e23f01a4..330ce996 100644 --- a/Aster/Cata/cataSTA9/SD/sd_char_unilate.py +++ b/Aster/Cata/cataSTA9/SD/sd_char_unilate.py @@ -1,34 +1,34 @@ -#@ MODIF sd_char_unilate SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_char_unilate SD DATE 22/10/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * class sd_char_unilate(AsBase): nomj = SDNom(fin=16) - COEFD = AsVR() - COEFG = AsVR() DIMECU = AsVI() LISNOE = AsVI() POINOE = AsVI() METHCU = AsVI(lonmax=1,) PARACU = AsVR(lonmax=1,) CMPGCU = AsVK8() + COEFD = AsVect(ltyp=8, type=Parmi('K','R')) + COEFG = AsVect(ltyp=8, type=Parmi('K','R')) diff --git a/Aster/Cata/cataSTA9/SD/sd_compor.py b/Aster/Cata/cataSTA9/SD/sd_compor.py index 0dd66b3c..b7ed032f 100644 --- a/Aster/Cata/cataSTA9/SD/sd_compor.py +++ b/Aster/Cata/cataSTA9/SD/sd_compor.py @@ -1,24 +1,31 @@ -#@ MODIF sd_compor SD DATE 23/04/2007 AUTEUR PROIX J-M.PROIX +#@ MODIF sd_compor SD DATE 19/11/2007 AUTEUR PROIX J-M.PROIX # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * +from SD.sd_mater import sd_mater + +# Remarque : +#------------ +# la sd_compor est produite par la seule commande DEFI_COMPOR. +# C'est pourquoi, on fera appel parfois pour la décrire au vocabulaire de cette +# commande. class sd_compor(AsBase): nomj = SDNom(fin=8) @@ -27,3 +34,154 @@ class sd_compor(AsBase): CPRR = Facultatif(AsVR()) + def check_tout(self,checker) : + #------------------------------- + cpri=self.CPRI.get() + type=cpri[0] + assert type in (1,2,3) , CPRI + if type == 1 : + self.monocristal(cpri,checker) + if type == 2 : + self.polycristal(cpri,checker) + if type == 3 : + self.multifibres(cpri,checker) + + + + def monocristal(self,cpri,checker) : + #------------------------------------ + nboccm=cpri[4] + nvi =cpri[2] + nbsys=(nvi-9)/3 + assert nvi==9+3*nbsys , (nvi, nbsys, cpri) + cprk=self.CPRK.get_stripped() + + # vérif existence et longueur + assert len(cpri)==7, cpri + assert len(cprk)==5*nboccm+1, (cpri,cprk) + assert not self.CPRR.get() + + # vérif CPRI : + #------------- + assert cpri[1] == 1 ,cpri + assert cpri[2] == nvi ,cpri + assert cpri[3] == 1 ,cpri + assert cpri[4] > 0 ,cpri + assert cpri[5] == 1 ,cpri + assert cpri[6] == nvi ,cpri + + # vérif CPRK : + #------------- + elas=cprk[5*nboccm] + assert elas in ('ELAS', 'ELAS_ORTH') ,cprk + for k in range(nboccm): + famil =cprk[5*k+0] + mater =cprk[5*k+1] + ecoul =cprk[5*k+2] + ecro_isot =cprk[5*k+3] + ecro_cine =cprk[5*k+4] + sd2=sd_mater(mater) ; sd2.check(checker) + assert famil in ('BASAL','BCC24','PRISMATIQUE','OCTAEDRIQUE','PYRAMIDAL1', + 'PYRAMIDAL2','CUBIQUE1','CUBIQUE2','MACLAGE','JOINT_GRAIN', + 'RL','UNIAXIAL') + assert ecoul in ('ECOU_VISC1','ECOU_VISC2','ECOU_VISC3') + assert ecro_isot in ('ECRO_ISOT1','ECRO_ISOT2') + assert ecro_cine in ('ECRO_CINE1','ECRO_CINE2') + + + + def polycristal(self,cpri,checker) : + #------------------------------------ + nbphases=cpri[1] + assert nbphases > 0 , cpri + lgcprk =cpri[6+3*nbphases-2] + assert lgcprk > 0 , cpri + cprk=self.CPRK.get_stripped() + cprr=self.CPRR.get() + + # vérif existence et longueur + #------------------------------ + assert len(cpri)==6+3*nbphases, (cpri,nbphases) + assert len(cprr)==2+4*nbphases, (cpri,cprr,nbphases) + assert len(cprk)==lgcprk, (cpri,cprk) + + # vérif CPRI : + #------------- + nvitot=cpri[2] + assert nvitot >= 0 ,cpri + nbmono=cpri[3] + assert nbmono > 0 ,cpri + nbpara =cpri[6+3*nbphases-1] + assert nbpara in (0,1,2) ,cpri + for k in range(nbphases): + nbfam1 = cpri[4+3*k+0] + numono = cpri[4+3*k+1] + nvi1 = cpri[4+3*k+2] + assert nbfam1 > 0 ,cpri + assert numono > 0 and numono <= nbmono ,(cpri,nbmono) + assert nvi1 >=0 ,cpri + + # vérif CPRR : + #------------- + frac_tot=0. + for k in range(nbphases): + frac =cprr[4*k+0] + assert frac >= 0. and frac <= 1. ,(cprr,k) + frac_tot=frac_tot+frac + for dir in range(1,4): + angl =cprr[4*k+dir] + assert angl >=0. and angl <=360. , (angl,dir) + assert frac_tot > 0.99 and frac_tot < 1.01 + + # vérif CPRK : + #------------- + locali =cprk[0] + assert locali in ('BZ','BETA') ,(locali,cprk) + decal=0 + for k in range(nbmono): + mono1 =cprk[0+decal+1] + sd2=sd_compor(mono1) ; sd2.check(checker) + nbfam1=int(cprk[0+decal+2]) + assert nbfam1 > 0 , (nbfam1,k,decal,cprk) + decal=decal+2+5*nbfam1+1 + # on pourrait encore vérifier que le .CPRK de mono1 a bien été recopié + # mais il faut bien s'arreter ... + + + + def multifibres(self,cpri,checker) : + #------------------------------------ + nbgmax=cpri[2] + cprk=self.CPRK.get_stripped() + + # vérif existence et longueur + assert len(cpri)==3, cpri + assert len(cprk)==6*nbgmax+1, (cpri,cprk) + assert not self.CPRR.get() + + # vérif CPRI : + #------------- + assert cpri[1] > 0, cpri + assert cpri[2] > 0, cpri + + # vérif CPRK : + #------------- + mater=cprk[6*nbgmax] + assert mater != '', cprk + sd2=sd_mater(mater) ; sd2.check(checker) + for k in range(nbgmax): + grfib1 =cprk[6*k+0] + mater1 =cprk[6*k+1] + loifib1 =cprk[6*k+2] + algo1d =cprk[6*k+3] + deform =cprk[6*k+4] + nbfib= int(cprk[6*k+5]) + assert grfib1 != '' , cprk + assert mater1 != '' , cprk + sd2=sd_mater(mater1) ; sd2.check(checker) + assert loifib1 != '' , cprk + assert algo1d in ('ANALYTIQUE','DEBORST') , cprk + assert deform in ('PETIT','PETIT_REAC','REAC_GEOM') , cprk + assert nbfib > 0 , cprk + + diff --git a/Aster/Cata/cataSTA9/SD/sd_feti.py b/Aster/Cata/cataSTA9/SD/sd_feti.py index 98f4c7bc..bacae34f 100644 --- a/Aster/Cata/cataSTA9/SD/sd_feti.py +++ b/Aster/Cata/cataSTA9/SD/sd_feti.py @@ -1,4 +1,4 @@ -#@ MODIF sd_feti SD DATE 09/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_feti SD DATE 23/10/2007 AUTEUR BOITEAU O.BOITEAU # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -36,7 +36,11 @@ class sd_feti1(AsBase): FETA = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', ) FETJ = AsVI() FETI = AsVI() - FETH = AsVI(lonmax=4, ) + FETH = AsVI() + FCFI = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', ) + FCFL = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='K', ltyp=24, ) + FCFM = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', ) + FCFN = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', ) class sd_feti(AsBase): diff --git a/Aster/Cata/cataSTA9/SD/sd_fonction.py b/Aster/Cata/cataSTA9/SD/sd_fonction.py index 4167db53..fb9c0b4f 100644 --- a/Aster/Cata/cataSTA9/SD/sd_fonction.py +++ b/Aster/Cata/cataSTA9/SD/sd_fonction.py @@ -1,4 +1,4 @@ -#@ MODIF sd_fonction SD DATE 09/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_fonction SD DATE 19/02/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -23,10 +23,26 @@ from SD.sd_titre import sd_titre from SD.sd_util import * -class sd_fonction(sd_titre): +#---------------------------------------------------------------- +# définition de 3 classes : +# sd_formule (objets python + jeveux) +# sd_fonction_aster (objets jeveux) +# sd_fonction (chapeau des 2 classes précédentes) +#---------------------------------------------------------------- + + + +class sd_formule(AsBase): #-------------------------------------- nomj = SDNom(fin=19) - PROL = AsVK16() + PROL = AsVK24(lonmax=6, ) + NOVA = AsVK8() + + +class sd_fonction_aster(sd_titre): +#-------------------------------------- + nomj = SDNom(fin=19) + PROL = AsVK24() VALE = AsObject(acces='NU', sd_stockage='CONTIG', modelong='VARIABLE', type='R', xous=Parmi('S', 'X'), genr='V', ltyp=8, ) PARA = Facultatif(AsVR()) @@ -43,14 +59,14 @@ class sd_fonction(sd_titre): assert prol , self typfon= prol[0].strip() assert typfon in ('CONSTANT', 'FONCTION', 'FONCT_C', 'NAPPE', 'INTERPRE') ,prol - #ltabul = True : la fonction est tabulée (et non interpretée) ltabul = typfon != 'INTERPRE' if typfon == 'NAPPE' : - assert len(prol) > 6 , (prol,self) + assert len(prol) > 7 , (prol,self) else : - assert len(prol) == 5 , (prol,self) + # tester que le prol[5] est bien le nom de la fonction + assert len(prol) == 6 , (prol,self) if ltabul : # type d'interpolation interp= prol[1].strip() @@ -70,14 +86,14 @@ class sd_fonction(sd_titre): assert prolgd[1] in ('E', 'C', 'L', 'I'), prol if typfon == 'NAPPE' : - nf= (len(prol) - 6)/2 - assert len(prol)==6+2*nf, prol + nf= (len(prol) - 7)/2 + assert len(prol)==7+2*nf, prol # 1er paramètre de la nappe - assert prol[5].strip() != '' , prol + assert prol[6].strip() != '' , prol for kf in range(nf): - interp= prol[5+2*kf+1].strip() - prolgd= prol[5+2*kf+2].strip() + interp= prol[6+2*kf+1].strip() + prolgd= prol[6+2*kf+2].strip() assert interp[:3] in ('NON', 'LIN', 'LOG') , prol assert interp[4:] in ('NON', 'LIN', 'LOG') , prol assert prolgd[0] in ('E', 'C', 'L', 'I'), prol @@ -131,3 +147,20 @@ class sd_fonction(sd_titre): assert sdu_monotone(para) in (1,),(para,self) vale=self.VALE.get() assert len(para)==len(vale.keys()),self + + +class sd_fonction(sd_titre): +#--------------------------- + nomj = SDNom(fin=19) + PROL = AsVK24() + NOVA = Facultatif(AsVK8()) + VALE = Facultatif(AsObject()) + PARA = Facultatif(AsVR()) + + def check_1(self,checker) : + nom=self.nomj()[:19] + if self.NOVA.exists : + sd2=sd_formule(nom) ; sd2.check() + else : + sd2=sd_fonction_aster(nom) ; sd2.check() + diff --git a/Aster/Cata/cataSTA9/SD/sd_fond_fiss.py b/Aster/Cata/cataSTA9/SD/sd_fond_fiss.py index 37aa650c..5b7a01a3 100644 --- a/Aster/Cata/cataSTA9/SD/sd_fond_fiss.py +++ b/Aster/Cata/cataSTA9/SD/sd_fond_fiss.py @@ -1,4 +1,4 @@ -#@ MODIF sd_fond_fiss SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_fond_fiss SD DATE 08/01/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -26,6 +26,8 @@ class sd_fond_fiss(AsBase): NORMALE = Facultatif(AsVR(lonmax=3, )) FOND_______TYPE = AsVK8(SDNom(nomj='.FOND .TYPE'), lonmax=1, ) FOND_______NOEU = AsVK8(SDNom(nomj='.FOND .NOEU'), ) + FONDSUP____NOEU = Facultatif(AsVK8(SDNom(nomj='.FOND_SUP .NOEU'), )) + FONDINF____NOEU = Facultatif(AsVK8(SDNom(nomj='.FOND_INF .NOEU'), )) DTAN_EXTREMITE = Facultatif(AsVR(lonmax=3, )) INFNORM____NOEU = Facultatif(AsVK8(SDNom(nomj='.INFNORM .NOEU'), )) DTAN_ORIGINE = Facultatif(AsVR(lonmax=3, )) diff --git a/Aster/Cata/cataSTA9/SD/sd_gfibre.py b/Aster/Cata/cataSTA9/SD/sd_gfibre.py index e5ae2174..e15034d9 100644 --- a/Aster/Cata/cataSTA9/SD/sd_gfibre.py +++ b/Aster/Cata/cataSTA9/SD/sd_gfibre.py @@ -1,21 +1,21 @@ -#@ MODIF sd_gfibre SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_gfibre SD DATE 10/07/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * @@ -27,6 +27,24 @@ class sd_gfibre(sd_titre): nomj = SDNom(fin=8) POINTEUR = AsVI() CARFI = AsVR() - NOMS_GROUPES = AsVK8() + NOMS_GROUPES = AsPn(ltyp=8) NB_FIBRE_GROUPE = AsVI() + + def check_dimension(self,checker) : + nbgf=self.NOMS_GROUPES.nommax + assert self.NB_FIBRE_GROUPE.lonmax == nbgf + assert self.POINTEUR.lonmax == nbgf + + + def check_CARFI(self,checker) : + nbgf=self.NOMS_GROUPES.nommax + pointeur=self.POINTEUR.get() + nb_fibre=self.NB_FIBRE_GROUPE.get() + nbfib_tot=0 + for igf in range(nbgf) : + assert pointeur[igf]==3*nbfib_tot +1 , (igf, nbfib_tot, pointeur[igf]) + nbfib=nb_fibre[igf] + nbfib_tot=nbfib_tot+nbfib + assert self.CARFI.lonmax == 3*nbfib_tot , (nbfib_tot,self.CARFI.lonmax) + diff --git a/Aster/Cata/cataSTA9/SD/sd_interf_dyna_clas.py b/Aster/Cata/cataSTA9/SD/sd_interf_dyna_clas.py index 75d5878d..1c572142 100644 --- a/Aster/Cata/cataSTA9/SD/sd_interf_dyna_clas.py +++ b/Aster/Cata/cataSTA9/SD/sd_interf_dyna_clas.py @@ -1,4 +1,4 @@ -#@ MODIF sd_interf_dyna_clas SD DATE 09/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_interf_dyna_clas SD DATE 19/06/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -27,31 +27,87 @@ from SD.sd_util import * class sd_interf_dyna_clas(AsBase): #--------------------------------------- nomj = SDNom(fin=8) - IDC_NOMS = AsObject(genr='N', xous='S', type='K', ltyp=8, ) - IDC_DDAC = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', ) + IDC_NOMS = AsObject(genr='N', xous='S', type='K', ltyp=8, ) + IDC_DDAC = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', ) IDC_DY_FREQ = AsVR(lonmax=1, ) - IDC_LINO = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', ) - IDC_TYPE = AsVK8() - IDC_DESC = AsVI(lonmax=5, ) - IDC_DEFO = AsVI() - IDC_REFE = AsVK24(lonmax=3, ) + IDC_LINO = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', ) + IDC_TYPE = AsVK8() + IDC_DESC = AsVI(lonmax=5, ) + IDC_DEFO = AsVI() + IDC_REFE = AsVK24(lonmax=3, ) - def check_interf_dyna_class_1(self,checker): - refe=self.IDC_REFE.get() - desc=self.IDC_DESC.get() + def check_coherence_longueurs(self,checker): + noms=self.IDC_NOMS.get() + type=self.IDC_TYPE.get() + lino=self.IDC_LINO.get() + ddac=self.IDC_DDAC.get() + nb_intf=len(noms) + assert nb_intf > 0 , noms + assert len(type) == nb_intf, (nb_intf,type) + assert len(lino.keys()) == nb_intf, (nb_intf,lino) + assert len(ddac.keys()) == nb_intf, (nb_intf,ddac) + + def check_REFE(self,checker): + refe=self.IDC_REFE.get() sd2=sd_maillage(refe[0]) ; sd2.check(checker) sd2=sd_nume_ddl(refe[1]) ; sd2.check(checker) - sdu_compare(self.IDC_DESC, checker, refe[2].strip(), '==', '', comment='REFE[2]') + assert refe[2].strip() == '' , refe + + + def check_DESC(self,checker): + desc=self.IDC_DESC.get() + assert desc[0] == 1 , desc + assert desc[1] >2 and desc[1] <10 , desc + assert desc[2] >60 and desc[2] <300 , desc + assert desc[3] >0 and desc[3] <500 , desc + assert desc[4] >0 , desc + nomgd=sdu_nom_gd(desc[3]).strip() + assert nomgd == 'DEPL_R', (nomgd, desc) + + + def check_NOMS(self,checker): + # il n'y a rien à vérifier : un pointeur de noms contient + # toujours des noms "non blancs" et "tous différents" + pass - nomgd=sdu_nom_gd(desc[3]) - sdu_compare(self.IDC_DESC, checker, nomgd, '==', 'DEPL_R', comment='DESC[3]') - sdu_compare(self.IDC_DESC, checker, desc[0], '==', 1, comment='DESC[0]') - sdu_compare(self.IDC_DESC, checker, desc[4], '>', 0, comment='DESC[4]') + def check_TYPE(self,checker): + type=self.IDC_TYPE.get() + for t1 in type : + assert t1.strip() in ('CRAIGB', 'MNEAL', 'CB_HARMO', 'AUCUN'), type + + def check_LINO_DDAC(self,checker): + lino=self.IDC_LINO.get() + ddac=self.IDC_DDAC.get() + desc=self.IDC_DESC.get() + nbec=desc[1] + nb_intf=len(lino.keys()) + + for kintf in range(nb_intf) : + llino=lino.values()[kintf] + lddac=ddac.values()[kintf] + nbno=len(llino) + assert len(lddac)==nbno*nbec , (lino,ddac) + for nuno in llino : + assert nuno > 0 , lino + + + def check_FREQ(self,checker): freq=self.IDC_DY_FREQ.get() - sdu_compare(self.IDC_DY_FREQ, checker, freq[0], '>', 0., comment='FREQ[0]') + assert freq[0] >=0 , freq + + + def check_DEFO(self,checker): + defo=self.IDC_DEFO.get() + desc=self.IDC_DESC.get() + nbec=desc[1] + nbnot=len(defo)/(nbec+2) + assert len(defo)==nbnot*(nbec+2), defo + for k in range(nbnot) : + assert defo[k] > 0 , defo + + assert sdu_monotone(defo[nbnot:2*nbnot]) in (1,0) , (nbnot,nbec,defo) - # nbint = ??? à finir PB_AJACOT diff --git a/Aster/Cata/cataSTA9/SD/sd_l_charges.py b/Aster/Cata/cataSTA9/SD/sd_l_charges.py index 0bf88791..f31f6526 100644 --- a/Aster/Cata/cataSTA9/SD/sd_l_charges.py +++ b/Aster/Cata/cataSTA9/SD/sd_l_charges.py @@ -1,29 +1,30 @@ -#@ MODIF sd_l_charges SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_l_charges SD DATE 17/07/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * class sd_l_charges(AsBase): nomj = SDNom(fin=19) - INFC = AsVI(SDNom(debut=19), ) - LCHA = AsVK24(SDNom(debut=19), ) - FCHA = AsVK24(SDNom(debut=19), ) + INFC = AsVI() + LCHA = AsVK24() + FCHA = AsVK24() + FCSS = Facultatif(AsVK24()) diff --git a/Aster/Cata/cataSTA9/SD/sd_ligrel.py b/Aster/Cata/cataSTA9/SD/sd_ligrel.py index 26b31e35..46a178fc 100644 --- a/Aster/Cata/cataSTA9/SD/sd_ligrel.py +++ b/Aster/Cata/cataSTA9/SD/sd_ligrel.py @@ -1,34 +1,83 @@ -#@ MODIF sd_ligrel SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_ligrel SD DATE 10/07/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * class sd_ligrel(AsBase): nomj = SDNom(fin=19) - LGNS = Facultatif(AsVI(SDNom(debut=19), )) - NOMA = AsVK8(SDNom(debut=19), lonmax=1, docu=Parmi('ACOU', 'MECA', 'THER'), ) - NEMA = Facultatif(AsColl(SDNom(debut=19), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )) - LIEL = Facultatif(AsColl(SDNom(debut=19), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )) - PRNS = Facultatif(AsVI(SDNom(debut=19), )) - PRNM = Facultatif(AsVI(SDNom(debut=19), )) - NBNO = AsVI(SDNom(debut=19), lonmax=1, ) - REPE = Facultatif(AsVI(SDNom(debut=19), )) + + LGRF = AsVK8(lonmax=1, docu=Parmi('ACOU', 'MECA', 'THER'), ) + NBNO = AsVI(lonmax=1,) + PRNM = AsVI() + + # AU_MOINS_UN : LIEL, SSSA + # LIEL : il existe des éléments finis + # SSSA : il existe des sous-structures statiques + LIEL = Facultatif(AsColl( acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )) + SSSA = Facultatif(AsVI()) + # ENSEMBLE : LIEL, REPE + REPE = Facultatif(AsVI()) + + # si mailles tardives : + NEMA = Facultatif(AsColl( acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )) + # si noeuds tardifs : + PRNS = Facultatif(AsVI()) + LGNS = Facultatif(AsVI()) + + + def exists(self): + # retourne True si la SD semble exister. + return self.LGRF.exists + + + def check_presence(self,checker): + if not self.exists() : return + exi_liel=self.LIEL.exists + exi_sssa=self.SSSA.exists + exi_repe=self.REPE.exists + exi_nema=self.NEMA.exists + exi_prns=self.PRNS.exists + exi_lgns=self.LGNS.exists + + # AU_MOINS_UN : .LIEL, .SSSA + assert exi_liel or exi_sssa + + # SI .LIEL AU_MOINS_UN : .REPE, .NEMA + if exi_liel : + assert exi_repe or exi_nema + + # .REPE => .LIEL + if exi_repe : assert exi_liel + + # .NEMA => .LIEL + if exi_nema : assert exi_liel + + # noeuds tardifs => .PRNS .LGNS et .NEMA + nb_no_tard= self.NBNO.get()[0] + if nb_no_tard > 0 : + assert exi_prns + assert exi_lgns + assert exi_nema + assert self.LGNS.lonmax >= nb_no_tard # .LGNS est surdimensionné + nbec= self.PRNS.lonmax / nb_no_tard + assert self.PRNS.lonmax == nb_no_tard * nbec , (nbec, nb_no_tard) + assert nbec >= 1 and nbec < 10 , nbec diff --git a/Aster/Cata/cataSTA9/SD/sd_listis.py b/Aster/Cata/cataSTA9/SD/sd_listis.py index 86ccd30e..a0d2f416 100644 --- a/Aster/Cata/cataSTA9/SD/sd_listis.py +++ b/Aster/Cata/cataSTA9/SD/sd_listis.py @@ -1,25 +1,26 @@ -#@ MODIF sd_listis SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_listis SD DATE 22/10/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * from SD.sd_titre import sd_titre +from SD.sd_util import * class sd_listis(sd_titre): @@ -30,3 +31,37 @@ class sd_listis(sd_titre): NBPA = AsVI() VALE = AsVI() + + def check_1(self,checker): + nbpa=self.NBPA.get() + bint=self.BINT.get() + lpas=self.LPAS.get() + vale=self.VALE.get() + + # cas général : + if len(vale) > 1 : + assert len(bint) == len(nbpa)+1 + assert len(nbpa) == len(lpas) + + n1=0 + assert vale[0] == bint[0] + for k in range(len(nbpa)) : + npas=nbpa[k] + assert npas > 0 + n1 = n1 + npas + assert vale[n1] == bint[k+1] + + assert len(vale) == n1+1 + assert sdu_monotone(vale) in (1,) , vale + + + # cas particulier : + if len(vale) == 1 : + assert len(bint) == 1 + assert len(nbpa) == 1 + assert len(lpas) == 1 + assert vale[0] == bint[0] + assert nbpa[0] == 0, nbpa + assert lpas[0] == 0, lpas + + diff --git a/Aster/Cata/cataSTA9/SD/sd_listr8.py b/Aster/Cata/cataSTA9/SD/sd_listr8.py index 3b16649c..0a31b392 100644 --- a/Aster/Cata/cataSTA9/SD/sd_listr8.py +++ b/Aster/Cata/cataSTA9/SD/sd_listr8.py @@ -1,21 +1,21 @@ -#@ MODIF sd_listr8 SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_listr8 SD DATE 10/07/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * @@ -31,3 +31,46 @@ class sd_listr8(sd_titre): VALE = AsVR() + def proche(self,a,b): + # retourne 1 si a est proche de b + # retourne -1 si a est loin de b + # retourne 0 si a = 0. (ou b = 0.) + if a != 0. and b != 0. : + erreur= abs(a-b)/(abs(a)+abs(b)) + if erreur < 1.e-12 : + return 1 + else : + return -1 + else : + return 0 + + + def check_1(self,checker): + nbpa=self.NBPA.get() + bint=self.BINT.get() + lpas=self.LPAS.get() + vale=self.VALE.get() + + # cas général : + if len(vale) > 1 : + assert len(bint) == len(nbpa)+1 + assert len(nbpa) == len(lpas) + + n1=0 + assert self.proche(vale[0], bint[0]) in (1,0) + for k in range(len(nbpa)) : + npas=nbpa[k] + assert npas > 0 + n1 = n1 + npas + assert self.proche(vale[n1],bint[k+1]) in (1,0) , (k+1,vale[n1], bint[k+1],) + + assert len(vale) == n1+1 + + # cas particulier : + if len(vale) == 1 : + assert len(bint) == 1 + assert len(nbpa) == 1 + assert len(lpas) == 1 + assert vale[0] == bint[0] + + diff --git a/Aster/Cata/cataSTA9/SD/sd_macr_elem_dyna.py b/Aster/Cata/cataSTA9/SD/sd_macr_elem_dyna.py index 7e94b733..05bbea0f 100644 --- a/Aster/Cata/cataSTA9/SD/sd_macr_elem_dyna.py +++ b/Aster/Cata/cataSTA9/SD/sd_macr_elem_dyna.py @@ -1,4 +1,4 @@ -#@ MODIF sd_macr_elem_dyna SD DATE 09/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_macr_elem_dyna SD DATE 24/09/2007 AUTEUR DEVESA G.DEVESA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -51,9 +51,6 @@ class sd_macr_elem_dyna(AsBase): # rigidité, masse, amortissement condensés : nume = sd_nume_ddl_gd(SDNom(nomj='')) - KP_EE = Facultatif(AsVR()) - MP_EE = Facultatif(AsVR()) - AP_EE = Facultatif(AsVR()) MAEL_RAID = sd_macr_elem_dyna_m() MAEL_MASS = sd_macr_elem_dyna_m() diff --git a/Aster/Cata/cataSTA9/SD/sd_macr_elem_stat.py b/Aster/Cata/cataSTA9/SD/sd_macr_elem_stat.py index d61697cf..c9020c1b 100644 --- a/Aster/Cata/cataSTA9/SD/sd_macr_elem_stat.py +++ b/Aster/Cata/cataSTA9/SD/sd_macr_elem_stat.py @@ -1,27 +1,28 @@ -#@ MODIF sd_macr_elem_stat SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_macr_elem_stat SD DATE 27/11/2007 AUTEUR ANDRIAM H.ANDRIAMBOLOLONA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * from SD.sd_matr_asse_gd import sd_matr_asse_gd from SD.sd_stoc_lciel import sd_stoc_lciel +from SD.sd_proj_mesu import sd_proj_mesu class sd_macr_elem_stat(AsBase): @@ -33,21 +34,87 @@ class sd_macr_elem_stat(AsBase): REFM = AsVK8() LINO = AsVI() VARM = AsVR(lonmax=2) - CONX = Facultatif(AsVI()) + CONX = Facultatif(AsVI()) # l'objet devient obligatoire dès l'étape de condensation de la rigidité # rigidité condensée : rigimeca = Facultatif(sd_matr_asse_gd(SDNom(nomj='.RIGIMECA', fin=19))) - KP_EE = Facultatif(AsVR()) + MAEL_RAID_VALE = Facultatif(AsVR()) PHI_IE = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type='R', ltyp=8)) # masse condensée : massmeca = Facultatif(sd_matr_asse_gd(SDNom(nomj='.MASSMECA', fin=19))) - MP_EE = Facultatif(AsVR()) + MAEL_MASS_VALE = Facultatif(AsVR()) + + # amortissement condensé : + MAEL_AMOR_VALE = Facultatif(AsVR()) # chargements condensés : LICA = Facultatif(AsColl(acces='NO', stockage='DISPERSE', modelong='CONSTANT', type='R', ltyp=8)) LICH = Facultatif(AsColl(acces='NO', stockage='CONTIG', modelong='CONSTANT', type='K', ltyp=8)) + # si utilisation de PROJ_MESU_MODAL : + PROJM = Facultatif(sd_proj_mesu()) + + + def check_longueurs(self, checker): + #------------------------------------ + # vérifs existence, longueurs, ... + + desm=self.DESM.get() + refm=self.REFM.get() + assert desm[0]==0, desm + nbnoe, nbnoi, nddle, nddli, nbchar, nbcas, nlage, nlagl, nlagi =desm[1:10] + assert nbnoe > 0 ,desm + assert nbchar >= 0 ,desm + + # si on n'a pas encore condensé la rigidité, certaines valeurs ne sont pas encore calculées : + if self.MAEL_RAID_VALE.exists : + assert nbnoi > 0 ,desm + assert nddle > 1 ,desm + assert nddli > 0 ,desm + assert nbcas >= 0 ,desm + assert nlage >= 0 ,desm + assert nlagl >= 0 ,desm + assert nlagi >= 0 ,desm + assert self.CONX.lonmax == 3*(nbnoe+nlage+nlagl) ,(desm,self.CONX.get()) + assert refm[5] == 'OUI_RIGI' + + assert self.REFM.lonmax == 9+nbchar ,(desm,self.REFM.get()) + assert self.LINO.lonmax == nbnoe ,(desm,self.LINO.get()) + + # rigidité condensée : + if self.MAEL_RAID_VALE.exists : + assert self.MAEL_RAID_VALE.lonmax == (nddle*(nddle+1))/2 + + assert self.PHI_IE.exists + phi_ie=self.PHI_IE.get() # on ne sait pas faire autrement que ramener l'objet entier ... + nlblph=len(phi_ie[1])/nddli # nombre de lignes de phi_ie par bloc + assert self.PHI_IE.nmaxoc == (nddle-1)/nlblph +1 , (nddle, self.PHI_IE.nmaxoc) + for ke in phi_ie.keys() : + assert len(phi_ie[ke]) == nddli*nlblph ,(nddli,nlblph,nddle,len(phi_ie[ke]),ke) + + # masse condensée : + if self.MAEL_MASS_VALE.exists : + assert self.MAEL_MASS_VALE.lonmax == (nddle*(nddle+1))/2 + assert refm[6] == 'OUI_MASS' + + # amortissement condensé : (JP : je ne sais pas si ca peut exister ?) + if self.MAEL_AMOR_VALE.exists : + assert self.MAEL_AMOR_VALE.lonmax == (nddle*(nddle+1))/2 + assert refm[7] == 'OUI_AMOR' + # chargements condensés : + if nbcas > 0 : + assert self.LICA.exists + assert self.LICA.nmaxoc >= nbcas + lica=self.LICA.get() + for k in lica.keys(): + assert len(lica[k]) == 2*(nddli + nddle) + assert self.LICH.exists + assert self.LICH.nmaxoc == self.LICA.nmaxoc + assert self.LICH.nutioc == self.LICA.nutioc + lich=self.LICH.get() + for k in lich.keys(): + assert len(lich[k]) >= nbchar + 1 diff --git a/Aster/Cata/cataSTA9/SD/sd_maillage.py b/Aster/Cata/cataSTA9/SD/sd_maillage.py index 71341b35..2ac6be12 100644 --- a/Aster/Cata/cataSTA9/SD/sd_maillage.py +++ b/Aster/Cata/cataSTA9/SD/sd_maillage.py @@ -1,21 +1,21 @@ -#@ MODIF sd_maillage SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_maillage SD DATE 06/05/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * @@ -26,6 +26,13 @@ from SD.sd_carte import sd_carte from SD.sd_l_table import sd_l_table +class sd_voisinage(AsBase): +#------------------------------- + nomj = SDNom(fin=12) + PTVOIS = AsVI() + ELVOIS = AsVI() + + class sd_maillage(sd_titre): #------------------------------- nomj = SDNom(fin=8) @@ -33,11 +40,11 @@ class sd_maillage(sd_titre): DIME = AsVI(lonmax=6, ) # un sd_maillage a toujours des noeuds : - NOMNOE = AsObject(genr='N', xous='S', type='K', ltyp=8, ) - coordo = sd_cham_no(SDNom(nomj='.COORDO')) + NOMNOE = AsPn(ltyp=8) + COORDO = sd_cham_no() - # normalement, un sd_maillage a toujours une "sd_l_table" mais POST_MAIL_XFEM ... - lt = Facultatif(sd_l_table(SDNom(nomj=''))) + # normalement, un sd_maillage a toujours une "sd_l_table" contenant des caractéristiques géométriques : + lt = sd_l_table(SDNom(nomj='')) # si le sd_maillage a des groupes : GROUPENO = Facultatif(AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )) @@ -46,7 +53,7 @@ class sd_maillage(sd_titre): # si le sd_maillage a des mailles : CONNEX = Facultatif(AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )) TYPMAIL = Facultatif(AsVI()) - NOMMAI = Facultatif(AsObject(genr='N', xous='S', type='K', ltyp=8, )) + NOMMAI = Facultatif(AsPn(ltyp=8)) # si le sd_maillage a des super-mailles : NOMACR = Facultatif(AsVK8()) @@ -57,6 +64,60 @@ class sd_maillage(sd_titre): # si le sd_maillage est linéique (tube_GV) : abs_curv = Facultatif(sd_carte(SDNom(nomj='.ABS_CURV'))) + # Lorsque le sd_maillage sert de support a un sd_modele contenant des volumes finis : + VGE = Facultatif(sd_voisinage()) + ADAPTATION = Facultatif(AsVI(lonmax=1, )) FORM = Facultatif(AsVK32(SDNom(debut=19), lonmax=2, )) + + def u_dime(self): + dime=self.DIME.get() + nb_no =dime[0] + nb_nl =dime[1] + nb_ma =dime[2] + nb_sm =dime[3] + nb_sm_mx =dime[4] + dim_coor =dime[5] + return nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor + +# remarque : la sd_maillage pouvant etre "volumineuse", on s'interdit (pour des raisons de temps CPU) +# de vérifier le contenu des gros objets. + + def check_DIME(self,checker): + nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime() + assert nb_sm <= nb_sm_mx , (nb_sm, nb_sm_mx) + if nb_nl > 0 : assert nb_sm > 0 + assert nb_no > 0 , nb_no + assert dim_coor in (2,3), dim_coor + + + def check_NOEUDS(self,checker): + nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime() + assert self.NOMNOE.nomuti == nb_no + nb_nl , (nb_no, nb_nl) + assert self.COORDO.VALE.lonmax == 3*nb_no , nb_no + + + def check_MAILLES(self,checker): + nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime() + if nb_ma == 0 : return + assert self.NOMMAI.nommax == nb_ma , nb_ma + assert self.TYPMAIL.lonmax == nb_ma , nb_ma + assert self.CONNEX.nmaxoc == nb_ma , nb_ma + + + def check_SSS(self,checker): + nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime() + if nb_sm == 0 : return + assert self.NOMACR.lonmax == nb_sm , nb_sm + assert self.PARA_R.lonmax == 14*nb_sm , nb_sm + assert self.SUPMAIL.nmaxoc == nb_sm , nb_sm + + def check_TYPL(self,checker): + nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime() + if nb_nl == 0 : return + assert self.TYPL.lonmax == nb_nl , nb_nl + typl=self.TYPL.get() + for k in typl : + assert k in (-1, -2) , typl + diff --git a/Aster/Cata/cataSTA9/SD/sd_mater.py b/Aster/Cata/cataSTA9/SD/sd_mater.py index db07aab8..2f5443fa 100644 --- a/Aster/Cata/cataSTA9/SD/sd_mater.py +++ b/Aster/Cata/cataSTA9/SD/sd_mater.py @@ -1,4 +1,4 @@ -#@ MODIF sd_mater SD DATE 09/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_mater SD DATE 06/05/2008 AUTEUR MARKOVIC D.MARKOVIC # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -21,27 +21,67 @@ from SD import * from SD.sd_fonction import sd_fonction -from SD.sd_compor1 import sd_compor1 -class sd_mater_RDEP(AsBase): + + +class sd_mater_XDEP(AsBase): #--------------------------- # on dirait une fonction, mais c'est plutot la concaténation de plusieurs fonctions - nomj = SDNom(fin=8) - PROL = AsVK16() + nomj = SDNom(fin=19) + PROL = AsVK24() VALE = AsVR() +class sd_compor1(AsBase): +#----------------------- + nomj = SDNom(fin=19) + VALC = AsVC(SDNom(), ) + VALK = AsVK8(SDNom(), ) + VALR = AsVR(SDNom(), ) + + + # parfois, THER_NL crée une sd_fonction pour BETA + def check_compor1_i_VALK(self, checker): + nom= self.nomj().strip() + if nom[8:16]=='.THER_NL' : + valk=list(self.VALK.get_stripped()) + if valk : + nbk2=self.VALK.lonuti + nbr=self.VALR.lonuti + nbc=self.VALC.lonuti + nbk=nbk2-nbr-nbc + k2=valk.index('BETA') + k=k2-nbr-nbc + nomfon=valk[nbr+nbc+nbk/2+k] + sd2=sd_fonction(nomfon) ; sd2.check(checker) + if nom[8:16]=='.GLRC_DA' : + valk=list(self.VALK.get_stripped()) + if valk : + nbk2=self.VALK.lonuti + nbr=self.VALR.lonuti + nbc=self.VALC.lonuti + nbk=nbk2-nbr-nbc + for fon in ('FMEX1' ,'FMEX2' ,'FMEY1' ,'FMEY2' , + 'DFMEX1' ,'DFMEX2' ,'DFMEY1' ,'DFMEY2', + 'DDFMEX1','DDFMEX2','DDFMEY1','DDFMEY2'): + k2=valk.index(fon) + k=k2-nbr-nbc + nomfon=valk[nbr+nbc+nbk/2+k] + sd2=sd_fonction(nomfon) ; sd2.check(checker) + + class sd_mater(AsBase): #---------------------- nomj = SDNom(fin=8) NOMRC = AsVK16(SDNom(nomj='.MATERIAU.NOMRC'), ) - rdep = Facultatif(sd_mater_RDEP(SDNom(nomj='.&&RDEP'))) + rdep = Facultatif(sd_mater_XDEP(SDNom(nomj='.&&RDEP'))) # à documenter + mzp = Facultatif(sd_mater_XDEP(SDNom(nomj='.&&MZP' ))) # à documenter # existence possible de la SD : def exists(self): return self.NOMRC.exists - # indirection vers les COMPOR1 de NOMRC : + # indirection vers les sd_compor1 de NOMRC : def check_mater_i_NOMRC(self, checker): lnom = self.NOMRC.get() if not lnom: return @@ -50,6 +90,6 @@ class sd_mater(AsBase): nomc1=self.nomj()[:8]+'.'+nom comp1 = sd_compor1(nomc1) - # parfois, comp1 est vide. AJACOT_PB : ssls115g/DEFI_COQU_MULT + # parfois, comp1 est vide : ssls115g/DEFI_COQU_MULT if comp1.VALK.get() : comp1.check(checker) diff --git a/Aster/Cata/cataSTA9/SD/sd_matr_asse_com.py b/Aster/Cata/cataSTA9/SD/sd_matr_asse_com.py index 5c21ea1f..9a18dfb7 100644 --- a/Aster/Cata/cataSTA9/SD/sd_matr_asse_com.py +++ b/Aster/Cata/cataSTA9/SD/sd_matr_asse_com.py @@ -1,4 +1,4 @@ -#@ MODIF sd_matr_asse_com SD DATE 09/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_matr_asse_com SD DATE 25/03/2008 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -21,6 +21,7 @@ from SD import * from SD.sd_titre import sd_titre +from SD.sd_maillage import sd_maillage from SD.sd_nume_ddl import sd_nume_ddl from SD.sd_matr_cine import sd_matr_cine @@ -29,12 +30,40 @@ class sd_matr_asse_com(sd_titre): #----------------------------- nomj = SDNom(fin=19) - REFA = AsVK24(SDNom(debut=19), lonmax=10, ) - VALM = AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type=Parmi('C', 'R'), ltyp=Parmi(16, 8), ) - UALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type=Parmi('C', 'R'), ltyp=Parmi(16, 8), )) - VALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R'), ltyp=Parmi(16, 8), )) + REFA = AsVK24(lonmax=11,) + VALM = AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type=Parmi('C', 'R')) + UALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type=Parmi('C', 'R'))) + VALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R'))) + WALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R'))) CONL = Facultatif(OJBVect(type=Parmi('C', 'R'))) - LIME = Facultatif(AsVK8(lonmax=1, )) + DIGS = Facultatif(OJBVect(type=Parmi('C', 'R'))) # seulement si solveurs LDLT et MULT_FRONT + LIME = Facultatif(AsVK24()) cine = Facultatif(sd_matr_cine(SDNom(nomj=''))) + def exists(self): + # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée) + return self.REFA.exists + + def check_REFA(self, checker): + if not self.exists() : return + refa=self.REFA.get_stripped() + assert refa[9] in ('NOEU','GENE') , refa + lgene = refa[9] == 'GENE' + # pour les matrices generalisees, on ne sait pas ce qui est stocké dans refa[0]='' : + if not lgene : + sd2=sd_maillage(refa[0]) ; sd2.check(checker) + sd2=sd_nume_ddl(refa[1]) ; sd2.check(checker) + assert refa[2] in ('ELIMF','ELIML','') , refa + assert refa[4] in ('FETI','') , refa + # pour les matrices generalisees, refa[7] n'est pas toujours rempli : + if not lgene : + # glute à résorber : j'ajoute '' à la liste permise pour le test yyyy108e : + assert refa[7] in ('ASSE','DECT','DECP','') , refa + assert refa[8] in ('MS','MR') , refa + if refa[8]=='MS' : + assert self.VALM.nmaxoc == 1 , (refa,self.VALM.nmaxoc) + elif refa[8]=='MR' : + assert self.VALM.nmaxoc == 2 , (refa,self.VALM.nmaxoc) + assert refa[10] in ('MPI_COMPLET','MPI_INCOMPLET') , refa + diff --git a/Aster/Cata/cataSTA9/SD/sd_matr_cine.py b/Aster/Cata/cataSTA9/SD/sd_matr_cine.py index 4fb519f7..2aeadcdf 100644 --- a/Aster/Cata/cataSTA9/SD/sd_matr_cine.py +++ b/Aster/Cata/cataSTA9/SD/sd_matr_cine.py @@ -1,4 +1,4 @@ -#@ MODIF sd_matr_cine SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_matr_cine SD DATE 14/01/2008 AUTEUR DESOZA T.DESOZA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -28,6 +28,6 @@ class sd_matr_cine(AsBase): CCID = AsVI() CCJJ = Facultatif(AsVI()) CCLL = Facultatif(AsVI()) - CCVA = Facultatif(AsVR()) + CCVA = Facultatif(AsObject(genr='V', xous='S', type=Parmi('R','C'))) diff --git a/Aster/Cata/cataSTA9/SD/sd_matr_elem.py b/Aster/Cata/cataSTA9/SD/sd_matr_elem.py index d1149e02..4ae31b93 100644 --- a/Aster/Cata/cataSTA9/SD/sd_matr_elem.py +++ b/Aster/Cata/cataSTA9/SD/sd_matr_elem.py @@ -1,45 +1,62 @@ -#@ MODIF sd_matr_elem SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_matr_elem SD DATE 25/03/2008 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * from SD.sd_resuelem import sd_resuelem +from SD.sd_modele import sd_modele +from SD.sd_cham_mater import sd_cham_mater +from SD.sd_cara_elem import sd_cara_elem + class sd_matr_elem(AsBase): - nomj = SDNom(fin=8) - LISTE_RESU = AsVK24() - REFE_RESU = AsVK24(lonmax=5, ) + nomj = SDNom(fin=19) + RERR = AsVK24(lonmax=5, ) + RELR = Facultatif(AsVK24()) + TITR = AsVK80(SDNom(debut=19), optional=True) + + # indirection par RELR : + def check_matr_elem_i_RELR(self, checker): + if not self.RELR.exists : return + lnom = self.RELR.get_stripped() + for nom in lnom: + if nom != '' : + sd2 = sd_resuelem(nom); sd2.check(checker) - # indirection par LISTE_RESU : - def check_matr_elem_i_LISTE_RESU(self, checker): - lnom = self.LISTE_RESU.get() - if not lnom: - checker.err(self, "sd_champ LISTE_RESU absent") - return - for nom in lnom: - if not nom.strip(): - continue - resu1 = sd_resuelem(nom) - # parfois, le nom est non ' ' et pourtant le sd_resuelem n'existe pas - # Il faudrait corriger cette anomalie. - if resu1.NOLI.exists : - resu1.check(checker) + def check_1(self, checker): + refe = self.RERR.get_stripped() + assert refe[2] in ('OUI_SOUS_STRUC', 'NON_SOUS_STRUC'), refe + + # existence de RELR : + if refe[2] == 'NON_SOUS_STRUC': + assert self.RELR.exists + + assert refe[1] != '', refe + + sd2=sd_modele(refe[0]) ; sd2.check(checker) + + if refe[3] != '' : + sd2=sd_cham_mater(refe[3]) ; sd2.check(checker) + + if refe[4] != '' : + sd2=sd_cara_elem(refe[4]) ; sd2.check(checker) + diff --git a/Aster/Cata/cataSTA9/SD/sd_melasflu.py b/Aster/Cata/cataSTA9/SD/sd_melasflu.py index eecf0741..ccad7a4e 100644 --- a/Aster/Cata/cataSTA9/SD/sd_melasflu.py +++ b/Aster/Cata/cataSTA9/SD/sd_melasflu.py @@ -1,4 +1,4 @@ -#@ MODIF sd_melasflu SD DATE 09/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_melasflu SD DATE 21/04/2008 AUTEUR MACOCCO K.MACOCCO # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -41,93 +41,110 @@ class sd_melasflu(AsBase): FACT = AsVR(SDNom(debut=19), ) DESC = AsVK16(SDNom(debut=19), lonmax=1, ) - # Critère présence VCN et VEN ???? + # si FAISCEAU_TRANS + couplage fluide-structure + BASE_MODALE/AMOR_REDUIT_CONN : VCN = Facultatif(AsVR()) VEN = Facultatif(AsVR()) + RAP = Facultatif(AsVR()) - sd_l_table = Facultatif(sd_l_table(SDNom(nomj=''))) # Si faisceau axial sd_table = sd_table(SDNom(nomj='')) + sd_l_table = Facultatif(sd_l_table(SDNom(nomj=''))) # Si FAISCEAU_AXIAL # indirections via .REMF : #---------------------------------- def check_melasflu_i_REMF(self, checker): - lnom=self.REMF.get() - sd2 = sd_type_flui_stru(lnom[0]) ; sd2.check(checker) - sd2 = sd_resultat_dyn(lnom[1]) ; sd2.check(checker) + remf=self.REMF.get_stripped() + sd2 = sd_type_flui_stru(remf[0]) ; sd2.check(checker) + sd2 = sd_resultat_dyn(remf[1]) ; sd2.check(checker) # Vérifications supplémentaires : #---------------------------------- def check_veri1(self, checker): - desc=self.DESC.get() - numo=self.NUMO.get() - fact=self.FACT.get() - freq=self.FREQ.get() - masg=self.MASG.get() - vite=self.VITE.get() - vcn=self.VCN.get() - ven=self.VEN.get() - l_table = sd_l_table(self.nomj) # Si faisceau axial + remf=self.REMF.get() + desc=self.DESC.get_stripped() # calcul de itypfl (type d'interaction fluide / structure) : - typfl = sd_type_flui_stru(self.REMF.get()[0]) - itypfl=typfl.FSIC.get()[0] + typfl = sd_type_flui_stru(remf[0]) + itypfl=typfl.FSIC.get()[0] # 1 -> FAISCEAU_TRANS + # 3 -> FAISCEAU_AXIAL + couplage=typfl.FSIC.get()[1] # 1 -> prise en compte du couplage + assert itypfl > 0 , remf # calcul de nbmode (nombre de modes) : - nbmode=len(numo) + nbmode=self.NUMO.lonmax + assert nbmode > 0 # calcul de nbvite (nombre de vitesses) : - nbvite=len(vite) + nbvite=self.VITE.lonmax + assert nbvite > 0 # vérification de l'objet .DESC : #-------------------------------- - sdu_compare(self.DESC,checker,desc[0].strip(),'==','DEPL','DESC[1]=="DEPL"') + assert len(desc)==1 , desc + assert desc[0] == 'DEPL' , desc # vérification de l'objet .NUMO : #-------------------------------- - sdu_tous_compris(self.NUMO,checker,vmin=1) + for x in self.NUMO.get() : + assert x >= 1 , numo # vérification de l'objet .FACT : #-------------------------------- if itypfl==3 : # faisceau axial - sdu_compare(self.FACT,checker,len(fact),'==',3*nbmode*nbvite,'LONMAX(FACT)==3*nbmode*nbvite') + assert self.FACT.lonmax == 3*nbmode*nbvite else : - sdu_compare(self.FACT,checker,len(fact),'==',3*nbmode,'LONMAX(FACT)==3*nbmode') + assert self.FACT.lonmax == 3*nbmode # vérification de l'objet .MASG : #-------------------------------- if itypfl==3 : # faisceau axial - sdu_compare(self.MASG,checker,len(masg),'==',nbmode*nbvite,'LONMAX(MASG)==nbmode*nbvite') + assert self.MASG.lonmax == nbmode*nbvite else : - sdu_compare(self.MASG,checker,len(masg),'==',nbmode,'LONMAX(MASG)==nbmode') + assert self.MASG.lonmax == nbmode # vérification de l'objet .FREQ : #-------------------------------- - sdu_compare(self.FREQ,checker,len(freq),'==',2*nbmode*nbvite,'LONMAX(FREQ)==2*nbmode*nbvite') + assert self.FREQ.lonmax == 2*nbmode*nbvite + + # vérification existence .VCN et .VEN: + #------------------------------------- + if self.VCN.exists : assert self.VEN.exists + if self.VEN.exists : assert self.VCN.exists + if self.VEN.exists : assert itypfl == 1 and couplage == 1 + if self.RAP.exists : assert (self.VEN.exists and self.VCN.exists) # vérification de l'objet .VCN : #-------------------------------- - if vcn : + if self.VCN.exists : fsvi=typfl.FSVI.get() - nbzex=len(fsvi) - nbval=1 - for i in range(nbzex) : - nbval=nbval+fsvi[nbzex+i] - sdu_compare(self.VCN,checker,len(vcn),'==',nbmode,'LONMAX(VCN)==nbmode*nbval') + nbzone=fsvi[1] + nbval=0 + for i in range(nbzone) : + nbval=nbval+fsvi[2+nbzone+i] + assert self.VCN.lonmax == nbmode*nbval*2 # vérification de l'objet .VEN : #-------------------------------- - if ven : - sdu_compare(self.VEN,checker,len(ven),'==',nbmode,'LONMAX(VEN)==nbmode') + if self.VEN.exists : + assert self.VEN.lonmax == nbmode*2 + # vérification de l'objet .RAP : + #-------------------------------- + if self.RAP.exists : + fsvi=typfl.FSVI.get() + nbzone=fsvi[1] + nbval=0 + for i in range(nbzone) : + nbval=nbval+fsvi[2+nbzone+i] + assert self.RAP.lonmax == nbmode*nbval*2 # vérification de la SD table contenant les cham_no : #---------------------------------------------------- - tcham=sd_table(self.nomj) - sdu_compare(None,checker,tcham.nb_column(),'==',1,"1 seule colonne dans la table") + tcham=self.sd_table + assert tcham.nb_column() == 1 , tcham col1=tcham.get_column_name('NOM_CHAM') - sdu_assert(None, checker, col1, "Manque colonne NOM_CHAM") + assert col1, "Il manque la colonne NOM_CHAM" data=col1.data.get() mask=col1.mask.get() @@ -142,12 +159,16 @@ class sd_melasflu(AsBase): if profchno == '': profchno=profchn1 else: - sdu_compare(None,checker,profchn1,'==',profchno,"Tous PROFCHNO identiques") + assert profchn1 == profchno ,(profchn1, profchno) # vérification de la SD l_table : #-------------------------------- - if itypfl==3 : # faisceau axial + if self.sd_l_table.LTNT.exists : assert itypfl == 3 # FAISCEAU_AXIAL + if itypfl == 3 : assert self.sd_l_table.LTNT.exists + + if self.sd_l_table.LTNT.exists : + l_table = self.sd_l_table l_table.check(checker) # la l_table ne contient qu'une seule table nommée 'MATR_GENE' diff --git a/Aster/Cata/cataSTA9/SD/sd_mode_cycl.py b/Aster/Cata/cataSTA9/SD/sd_mode_cycl.py index 2ffb0b0f..f89c9a75 100644 --- a/Aster/Cata/cataSTA9/SD/sd_mode_cycl.py +++ b/Aster/Cata/cataSTA9/SD/sd_mode_cycl.py @@ -1,26 +1,32 @@ -#@ MODIF sd_mode_cycl SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_mode_cycl SD DATE 23/10/2007 AUTEUR BODEL C.BODEL # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * +from SD.sd_maillage import sd_maillage +from SD.sd_interf_dyna_clas import sd_interf_dyna_clas +from SD.sd_base_modale import sd_base_modale +from SD.sd_util import * + class sd_mode_cycl(AsBase): +#-------------------------- nomj = SDNom(fin=8) CYCL_TYPE = AsVK8(lonmax=1, ) CYCL_CMODE = AsVC() @@ -32,3 +38,57 @@ class sd_mode_cycl(AsBase): CYCL_NUIN = AsVI(lonmax=3, ) + def u_dime(self) : + desc=self.CYCL_DESC.get() + nb_mod = desc[0] ; assert nb_mod > 0 + nb_ddl = desc[1] ; assert nb_ddl > 0 + nb_ddli = desc[2] ; assert nb_ddli >= 0 + nb_freq = desc[3] ; assert nb_freq > 0 + nb_diam=self.CYCL_DIAM.lonmax / 2 ; assert nb_diam > 0 + assert self.CYCL_DIAM.lonmax == 2*nb_diam + return (nb_mod, nb_ddl, nb_ddli, nb_freq, nb_diam) + + def check_REFE(self,checker) : + refe=self.CYCL_REFE.get_stripped() + sd2=sd_maillage(refe[0]); sd2.check + sd2=sd_interf_dyna_clas(refe[1]); sd2.check + sd2=sd_base_modale(refe[2]); sd2.check + + + def check_NUIN(self,checker) : + nuin=self.CYCL_NUIN.get() + assert nuin[0] > 0 , nuin + assert nuin[1] > 0 , nuin + assert nuin[2] >= 0 , nuin + + + def check_NBSC(self,checker) : + nbsc=self.CYCL_NBSC.get() + assert nbsc[0] > 0 , nbsc + + + def check_TYPE(self,checker) : + type=self.CYCL_TYPE.get_stripped() + assert type[0] in ('MNEAL', 'CRAIGB', 'CB_HARMO', 'AUCUN') ,type + + + def check_CMODE(self,checker) : + nb_mod, nb_ddl, nb_ddli, nb_freq, nb_diam = self.u_dime() + assert self.CYCL_CMODE.lonmax== nb_diam*nb_freq*(nb_mod+nb_ddl+nb_ddli) + + + def check_DIAM(self,checker) : + diam=self.CYCL_DIAM.get() + nb_diam=len(diam)/2 + for x in diam[:nb_diam] : assert x >= 0 , diam + for x in diam[nb_diam:] : assert x > 0 , diam + sdu_tous_differents(self.CYCL_DIAM,checker,diam[:nb_diam]) + + + def check_FREQ(self,checker) : + nb_mod, nb_ddl, nb_ddli, nb_freq, nb_diam = self.u_dime() + freq=self.CYCL_FREQ.get() + assert len(freq) == nb_diam*nb_freq ,(self.CYCL_DESC.get(),len(freq)) + for x in freq : assert x >= 0 , freq + + diff --git a/Aster/Cata/cataSTA9/SD/sd_modele.py b/Aster/Cata/cataSTA9/SD/sd_modele.py index 0c17ca07..05e38d86 100644 --- a/Aster/Cata/cataSTA9/SD/sd_modele.py +++ b/Aster/Cata/cataSTA9/SD/sd_modele.py @@ -1,4 +1,4 @@ -#@ MODIF sd_modele SD DATE 09/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_modele SD DATE 06/05/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -20,38 +20,12 @@ from SD import * -from SD.sd_ligrel import sd_ligrel -from SD.sd_fiss_xfem import sd_fiss_xfem, sd_xfem_com1 +from SD.sd_ligrel import sd_ligrel +from SD.sd_maillage import sd_maillage from SD.sd_prof_chno import sd_prof_chno - - -class sd_modele_XFEM(AsBase): -#----------------------------- - nomj = SDNom(fin=8) - # Questions aux responsables XFEM : - # - faut-il garder FISS et NFIS ? - # - Est-il normal de modifier les sd_fiss_xfem dans MODI_MODELE_XFEM ? - - CONT = AsVI() - SDCONT = AsVK24() - FISS = AsVK8() - NFIS = AsVI(lonmax=1,) # nombre de fissures - com1 = sd_xfem_com1(SDNom(nomj='')) - - glute_XFEM = Facultatif(sd_prof_chno(SDNom(nomj='.PRCHN00000'))) # fiche 10833 - - - if 0 : - # Questions aux responsables XFEM : - # - faut-il garder FISS et NFIS ? - # - Est-il normal de modifier les sd_fiss_xfem dans MODI_MODELE_XFEM ? - # indirection vers FISS_XFEM car MODI_MODELE_XFEM modifie FISS_XFEM - # (Damijan va corriger cela avec la multi-fissuration) - # ATTENTION : Ce bout de programme suppose que FISS est de longueur 1 ce qui contradictoire avec la multi-fissuration) - def check_modele_i_FISS(self, checker): - if not self.FISS.get() : return - nom=self.FISS.get()[0] - sd2=sd_fiss_xfem(nom) ; sd2.check(checker) +from SD.sd_carte import sd_carte +from SD.sd_xfem import sd_modele_xfem +from SD.sd_l_table import sd_l_table @@ -60,13 +34,29 @@ class sd_modele(AsBase): nomj = SDNom(fin=8) MODELE = sd_ligrel() - NOEUD_UTIL = AsVI() NOEUD = Facultatif(AsVI()) MAILLE = Facultatif(AsVI()) - # Si modèle avec sous-structures statiques : - SSSA = Facultatif(AsVI()) + # une sd_modele peut avoir une "sd_l_table" contenant des grandeurs caractéristiques de l'étude : + lt = Facultatif(sd_l_table(SDNom(nomj=''))) + + # Si le modèle vient de MODI_MODELE_XFEM : + xfem = Facultatif(sd_modele_xfem(SDNom(nomj=''))) + + + def check_existence(self,checker) : + exi_liel=self.MODELE.LIEL.exists + exi_maille=self.MAILLE.exists + exi_noeud=self.NOEUD.exists + + # si .LIEL => .MAILLE et .NOEUD + if exi_liel : + assert exi_maille + assert exi_noeud + - # Si modèle "XFEM" : - xfem = Facultatif(sd_modele_XFEM(SDNom(nomj=''))) + def check_maillage(self,checker) : + # on est obligé de checker le maillage pour permettre la creation de la sd_voisinage + lgrf=self.MODELE.LGRF.get_stripped() + sd2 = sd_maillage(lgrf[0]); sd2.check(checker) diff --git a/Aster/Cata/cataSTA9/SD/sd_modele_gene.py b/Aster/Cata/cataSTA9/SD/sd_modele_gene.py index 2ba619aa..5abb1ceb 100644 --- a/Aster/Cata/cataSTA9/SD/sd_modele_gene.py +++ b/Aster/Cata/cataSTA9/SD/sd_modele_gene.py @@ -1,34 +1,115 @@ -#@ MODIF sd_modele_gene SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_modele_gene SD DATE 10/07/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * +from SD.sd_interf_dyna_clas import sd_interf_dyna_clas +from SD.sd_base_modale import sd_base_modale +from SD.sd_macr_elem_dyna import sd_macr_elem_dyna +from SD.sd_util import * + + class sd_modele_gene(AsBase): +#----------------------------- nomj = SDNom(fin=14) MODG_LIPR = AsVI(SDNom(nomj='.MODG.LIPR'), ) MODG_LIDF = AsColl(SDNom(nomj='.MODG.LIDF'), acces='NU', stockage='DISPERSE', modelong='CONSTANT', type='K', ltyp=8, ) MODG_SSTR = AsColl(SDNom(nomj='.MODG.SSTR'), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='R', ltyp=8, ) MODG_SSOR = AsColl(SDNom(nomj='.MODG.SSOR'), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='R', ltyp=8, ) - MODG_SSNO = AsObject(SDNom(nomj='.MODG.SSNO'), genr='N', xous='S', type='K', ltyp=8, ) + MODG_SSNO = AsPn(SDNom(nomj='.MODG.SSNO'), ltyp=8, ) MODG_SSME = AsColl(SDNom(nomj='.MODG.SSME'), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='K', ltyp=8, ) MODG_DESC = AsVI(SDNom(nomj='.MODG.DESC'), lonmax=3, ) MODG_LIMA = AsColl(SDNom(nomj='.MODG.LIMA'), acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='R', ltyp=8, ) + + def check_dimensions(self,checker) : + nb_struc=self.MODG_SSME.nmaxoc + nb_liaison=self.MODG_LIDF.nmaxoc + + assert self.MODG_LIPR.lonmax == 9*nb_liaison + assert self.MODG_LIMA.nmaxoc == 3*nb_liaison + assert self.MODG_LIMA.nutioc == 3*nb_liaison + + assert self.MODG_SSNO.nomuti == nb_struc + assert self.MODG_SSNO.nommax == nb_struc + assert self.MODG_SSOR.nmaxoc == nb_struc + assert self.MODG_SSOR.nutioc == nb_struc + assert self.MODG_SSTR.nmaxoc == nb_struc + assert self.MODG_SSTR.nutioc == nb_struc + + + def check_SSME(self,checker) : + nb_struc=self.MODG_SSME.nmaxoc + ssme=self.MODG_SSME.get() + for k in range(nb_struc) : + sd2=sd_macr_elem_dyna(ssme[k+1][0].strip()); sd2.check + + + def check_DESC(self,checker) : + desc=self.MODG_DESC.get() + nomgd=sdu_nom_gd(desc[2]) + assert nomgd == 'DEPL_R', (nomgd, desc) + assert desc[0] > 2 and desc[0] < 15 , desc + assert desc[1] > 2*30 and desc[1] < 15*30 , desc + + + def check_SSOR(self,checker) : + nb_struc=self.MODG_SSME.nmaxoc + ssor=self.MODG_SSOR.get() + for k in range(nb_struc) : + assert len(ssor[k+1]) == 3 , ssor + + + def check_SSTR(self,checker) : + nb_struc=self.MODG_SSME.nmaxoc + sstr=self.MODG_SSTR.get() + for k in range(nb_struc) : + assert len(sstr[k+1]) == 3 , sstr + + + def check_LIDF(self,checker) : + lidf=self.MODG_LIDF.get() + nb_liaison=self.MODG_LIDF.nmaxoc + for k in range(nb_liaison) : + assert len(lidf[k+1]) == 5 , lidf + assert lidf[k+1][4].strip() in ('OUI', 'NON') , lidf + + + def check_LIPR_LIMA(self,checker) : + lipr=self.MODG_LIPR.get() + lima=self.MODG_LIMA.get() + nb_liaison=self.MODG_LIDF.nmaxoc + for k in range(nb_liaison) : + mat1_nlig=lipr[9*k+0] ; assert mat1_nlig > 0 + mat1_ncol=lipr[9*k+1] ; assert mat1_ncol > 0 + mat1_nume=lipr[9*k+2] ; assert mat1_nume == 3*k +1 , (mat1_nume, k) + assert len(lima[3*k+1]) == mat1_nlig*mat1_ncol + + mat2_nlig=lipr[9*k+3] ; assert mat2_nlig > 0 + mat2_ncol=lipr[9*k+4] ; assert mat2_ncol > 0 + mat2_nume=lipr[9*k+5] ; assert mat2_nume == 3*k +2 , (mat2_nume, k) + assert len(lima[3*k+2]) == mat2_nlig*mat2_ncol + + mat3_nlig=lipr[9*k+6] ; assert mat3_nlig > 0 + mat3_ncol=lipr[9*k+7] ; assert mat3_ncol > 0 + mat3_nume=lipr[9*k+8] ; assert mat3_nume == 3*k +3 , (mat3_nume, k) + assert len(lima[3*k+3]) == mat3_nlig*mat3_ncol + diff --git a/Aster/Cata/cataSTA9/SD/sd_nume_ddl.py b/Aster/Cata/cataSTA9/SD/sd_nume_ddl.py index 5261d095..8b454e0e 100644 --- a/Aster/Cata/cataSTA9/SD/sd_nume_ddl.py +++ b/Aster/Cata/cataSTA9/SD/sd_nume_ddl.py @@ -1,4 +1,4 @@ -#@ MODIF sd_nume_ddl SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_nume_ddl SD DATE 17/07/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -23,7 +23,6 @@ from SD.sd_solveur import sd_solveur from SD.sd_nume_ddl_gene import sd_nume_ddl_gene from SD.sd_nume_ddl_gd import sd_nume_ddl_gd -import aster #--------------------------------------------------------------------------------- diff --git a/Aster/Cata/cataSTA9/SD/sd_nume_eqge.py b/Aster/Cata/cataSTA9/SD/sd_nume_eqge.py index 295ae4d9..a9d5db97 100644 --- a/Aster/Cata/cataSTA9/SD/sd_nume_eqge.py +++ b/Aster/Cata/cataSTA9/SD/sd_nume_eqge.py @@ -1,21 +1,21 @@ -#@ MODIF sd_nume_eqge SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_nume_eqge SD DATE 11/02/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * @@ -23,7 +23,7 @@ from SD import * from SD.sd_prof_vgen import sd_prof_vgen class sd_nume_eqge(sd_prof_vgen): nomj = SDNom(fin=19) - REFN = AsVK24(SDNom(debut=19), lonmax=2, ) + REFN = AsVK24(SDNom(debut=19), lonmax=4, ) DESC = AsVI(SDNom(debut=19), lonmax=1, ) NEQU = AsVI(SDNom(debut=19), lonmax=1, ) ORIG = AsColl(SDNom(debut=19), acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', ) diff --git a/Aster/Cata/cataSTA9/SD/sd_nume_equa.py b/Aster/Cata/cataSTA9/SD/sd_nume_equa.py index c95a2315..42e3394a 100644 --- a/Aster/Cata/cataSTA9/SD/sd_nume_equa.py +++ b/Aster/Cata/cataSTA9/SD/sd_nume_equa.py @@ -1,21 +1,21 @@ -#@ MODIF sd_nume_equa SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_nume_equa SD DATE 11/02/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * @@ -25,6 +25,6 @@ class sd_nume_equa(sd_prof_chno): nomj = SDNom(fin=19) NEQU = Facultatif(AsVI(SDNom(debut=19), lonmax=2, )) DELG = Facultatif(AsVI(SDNom(debut=19), )) - REFN = Facultatif(AsVK24(SDNom(debut=19), )) + REFN = Facultatif(AsVK24(SDNom(debut=19),lonmax=4, )) diff --git a/Aster/Cata/cataSTA9/SD/sd_prof_vgen.py b/Aster/Cata/cataSTA9/SD/sd_prof_vgen.py index 1be3a441..17ad678e 100644 --- a/Aster/Cata/cataSTA9/SD/sd_prof_vgen.py +++ b/Aster/Cata/cataSTA9/SD/sd_prof_vgen.py @@ -1,4 +1,4 @@ -#@ MODIF sd_prof_vgen SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_prof_vgen SD DATE 21/02/2008 AUTEUR ANDRIAM H.ANDRIAMBOLOLONA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -26,5 +26,6 @@ class sd_prof_vgen(AsBase): LILI = AsObject(SDNom(debut=19), genr='N', xous='S', type='K', ltyp=8, ) NUEQ = AsVI(SDNom(debut=19), ) DEEQ = AsVI(SDNom(debut=19), ) + DELG = AsVI(SDNom(debut=19), ) diff --git a/Aster/Cata/cataSTA9/SD/sd_proj_mesu.py b/Aster/Cata/cataSTA9/SD/sd_proj_mesu.py new file mode 100644 index 00000000..eb8e7443 --- /dev/null +++ b/Aster/Cata/cataSTA9/SD/sd_proj_mesu.py @@ -0,0 +1,87 @@ +#@ MODIF sd_proj_mesu SD DATE 15/01/2008 AUTEUR PELLET J.PELLET +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +from SD import * +from sd_modele import sd_modele + + + +class sd_proj_mesu(AsBase): +#------------------------------------- + nomj = SDNom(fin=18) + PJMNO = AsVI() + PJMRG = AsVK8() + PJMBP = AsVR() + PJMRF = AsVK16(lonmax=5) + + # si PROJ_MESU_MODAL : + PJMOR = Facultatif(AsVR()) + + # si MACR_ELEM_STAT : + PJMIG = Facultatif(AsVR()) + PJMMM = Facultatif(AsObject(genr='V',type=Parmi('C', 'R'))) + + + def exists(self): + # retourne .true. si la SD semble exister + return self.PJMNO.exists + + + def check_1(self, checker): + #------------------------------------ + if not self.exists() : return + + nbutil=self.PJMNO.lonuti + assert nbutil > 0 , nbutil + + # vérifications communes : + assert self.PJMRG.lonmax >= nbutil + n1=self.PJMBP.lonmax + nbmode=n1/nbutil + assert n1==nbutil*nbmode , (nbmode,nbutil,n1) + assert self.PJMRF.exists + pjmrf=self.PJMRF.get_stripped() + sd2=sd_modele(pjmrf[0]) ; sd2.check(checker) + assert pjmrf[1] != '' , pjmrf + assert pjmrf[2] != '' , pjmrf + + # quel cas de figure : PROJ_MESU_MODAL ou MACR_ELEM_STAT ? + lproj=self.PJMOR.exists + + # si PROJ_MESU_MODAL : + if lproj : + nbcapt=nbutil + assert self.PJMOR.lonmax >= 3*nbcapt + assert not self.PJMIG.exists + assert pjmrf[3] == '' , pjmrf + assert pjmrf[4] == '' , pjmrf + + # si MACR_ELEM_STAT : + else : + nbddle=nbutil + assert self.PJMIG.exists + assert self.PJMMM.exists + n1=self.PJMIG.lonmax + nbmoid=n1/nbddle + assert n1==nbddle*nbmoid , (nbmodi,nbddle,n1) + + assert pjmrf[3] != '' , pjmrf + sd2=sd_proj_mesu(pjmrf[4]) ; sd2.check(checker) + diff --git a/Aster/Cata/cataSTA9/SD/sd_resuelem.py b/Aster/Cata/cataSTA9/SD/sd_resuelem.py index 097e1591..f2e3bd78 100644 --- a/Aster/Cata/cataSTA9/SD/sd_resuelem.py +++ b/Aster/Cata/cataSTA9/SD/sd_resuelem.py @@ -1,29 +1,52 @@ -#@ MODIF sd_resuelem SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_resuelem SD DATE 06/05/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * +from SD.sd_ligrel import sd_ligrel + class sd_resuelem(AsBase): nomj = SDNom(fin=19) - NOLI = AsVK24(SDNom(debut=19), lonmax=2, ) - RESL = AsColl(SDNom(debut=19), acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R'), ltyp=Parmi(16, 8), ) - DESC = AsVI(SDNom(debut=19), docu='RESL', ) + NOLI = AsVK24(lonmax=4, ) + DESC = AsVI(docu='RESL', ) + RESL = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R')) + RSVI = Facultatif(AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I')) + + def exists(self): + # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée) + return self.NOLI.exists + def check_1(self, checker): + if not self.exists() : return + noli = self.NOLI.get_stripped() + sd2=sd_ligrel(noli[0]) ; sd2.check(checker) + assert noli[1] != '' , noli + assert noli[2] in ('MPI_COMPLET','MPI_INCOMPLET') , noli + assert noli[3] in ('','VOISIN_VF') , noli + if noli[3]=='VOISIN_VF' : assert self.RSVI.exists + desc = self.DESC.get() + assert desc[0] > 0 and desc[0] < 1000 , desc + nbgr=desc[1] + assert nbgr > 0 , desc + assert len(desc)==nbgr+2, desc + assert self.RESL.nmaxoc == nbgr, desc + for k in desc : + assert k >= 0, desc diff --git a/Aster/Cata/cataSTA9/SD/sd_resultat.py b/Aster/Cata/cataSTA9/SD/sd_resultat.py index d936900a..565f82a4 100644 --- a/Aster/Cata/cataSTA9/SD/sd_resultat.py +++ b/Aster/Cata/cataSTA9/SD/sd_resultat.py @@ -1,4 +1,4 @@ -#@ MODIF sd_resultat SD DATE 09/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_resultat SD DATE 22/10/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -27,7 +27,6 @@ from SD.sd_l_charges import sd_l_charges from SD.sd_char_contact import sd_char_contact from sets import Set from SD.sd_util import * -import aster class sd_resultat(sd_titre): @@ -50,12 +49,6 @@ class sd_resultat(sd_titre): return self.ORDR.exists - # glute XFEM : - def check_glute_XFEM(self, checker): - sd2 = sd_char_contact('&&OP0070.DEFIC') - sd2.check(checker) - - # indirection vers les champs de .TACH : def check_resultat_i_TACH(self, checker): tach = self.TACH.get() diff --git a/Aster/Cata/cataSTA9/SD/sd_resultat_dyn.py b/Aster/Cata/cataSTA9/SD/sd_resultat_dyn.py index 51406bd5..6dab8958 100644 --- a/Aster/Cata/cataSTA9/SD/sd_resultat_dyn.py +++ b/Aster/Cata/cataSTA9/SD/sd_resultat_dyn.py @@ -1,21 +1,21 @@ -#@ MODIF sd_resultat_dyn SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_resultat_dyn SD DATE 11/02/2008 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * @@ -24,24 +24,28 @@ from SD.sd_resultat import sd_resultat from SD.sd_nume_ddl import sd_nume_ddl from SD.sd_matr_asse import sd_matr_asse from SD.sd_interf_dyna_clas import sd_interf_dyna_clas +from SD.sd_proj_mesu import sd_proj_mesu class sd_resultat_dyn(sd_resultat): #-------------------------------------------------- nomj = SDNom(fin=8) - PROFC_NUME_REFN = Facultatif(AsVK24(SDNom(nomj='.PROFC.NUME.REFN'), lonmax=2, )) + PROFC_NUME_REFN = Facultatif(AsVK24(SDNom(nomj='.PROFC.NUME.REFN'), lonmax=4, )) REFD = Facultatif(AsVK24(SDNom(debut=19), lonmax=6, )) # n'existe pas dans sdll23a + # si utilisation de PROJ_MESU_MODAL : + PROJM = Facultatif(sd_proj_mesu()) + # indirection vers les SD de .REFD : def check_resultat_dyn_i_REFD(self, checker): - lnom = self.REFD.get() - if not lnom : return + refd = self.REFD.get_stripped() + if not refd : return for k in 0,1,2 : - if lnom[k].strip() : - sd2 = sd_matr_asse(lnom[0]); sd2.check(checker) - if lnom[3].strip() : - sd2 = sd_nume_ddl(lnom[3]); sd2.check(checker) - if lnom[4].strip() : - sd2 = sd_interf_dyna_clas(lnom[4]); sd2.check(checker) + if refd[k] : + sd2 = sd_matr_asse(refd[0]); sd2.check(checker) + if refd[3] : + sd2 = sd_nume_ddl(refd[3]); sd2.check(checker) + if refd[4] : + sd2 = sd_interf_dyna_clas(refd[4]); sd2.check(checker) diff --git a/Aster/Cata/cataSTA9/SD/sd_spectre.py b/Aster/Cata/cataSTA9/SD/sd_spectre.py index e1ebe65c..cbb128f3 100644 --- a/Aster/Cata/cataSTA9/SD/sd_spectre.py +++ b/Aster/Cata/cataSTA9/SD/sd_spectre.py @@ -1,27 +1,40 @@ -#@ MODIF sd_spectre SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_spectre SD DATE 19/06/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * from SD.sd_titre import sd_titre +from SD.sd_modele import sd_modele +from SD.sd_cara_elem import sd_cara_elem +from SD.sd_fonction import sd_fonction +types_possibles=[ # liste des divers types de spectres : + 'SPEC_LONG_COR_1', + 'SPEC_LONG_COR_2', + 'SPEC_LONG_COR_3', + 'SPEC_LONG_COR_4', + 'SPEC_CORR_CONV_1', + 'SPEC_CORR_CONV_2', + 'SPEC_FONC_FORME', + 'SPEC_EXCI_POINT',] + class sd_spectre(sd_titre): #------------------------------------ nomj = SDNom(fin=19) @@ -34,4 +47,152 @@ class sd_spectre(sd_titre): NNOE = Facultatif(AsVK8()) + def u_type(self) : + vate=self.VATE.get() + type=vate[0].strip() + assert type in types_possibles + return type + + + def u_nbno(self) : + vain=self.VAIN.get() + intesp =vain[1] + nbno =vain[2] + return (intesp,nbno) + + + def check_VAIN(self,checker): + #------------------------------- + vain=self.VAIN.get() + itype=vain[0] + assert itype in (1,2,3,4,11,21) , vain + + type = self.u_type() + if itype==1 : assert type in ('SPEC_LONG_COR_1', 'SPEC_CORR_CONV_1') ,vain + if itype==2 : assert type in ('SPEC_LONG_COR_2', 'SPEC_CORR_CONV_2') ,vain + if itype==3 : assert type in ('SPEC_LONG_COR_3',) ,vain + if itype==4 : assert type in ('SPEC_LONG_COR_4',) ,vain + if itype==11 : assert type in ('SPEC_FONC_FORME',) ,vain + if itype==21 : assert type in ('SPEC_EXCI_POINT',) ,vain + + if type in ('SPEC_EXCI_POINT','SPEC_FONC_FORME') : + assert len(vain)==3, vain + assert vain[1] in (0,1) ,vain + assert vain[2] >=0 ,vain + else : + assert len(vain)==1, vain + + + + def check_VARE(self,checker): + #------------------------------- + vare=self.VARE.get() + type = self.u_type() + + if type == 'SPEC_FONC_FORME' : + assert not vare + return + + elif type == 'SPEC_EXCI_POINT' : + intesp, nbno= self.u_nbno() + if intesp==0 : + assert len(vare)==nbno, vare + else : + assert len(vare)==1, vare + + else : + assert len(vare)==12, vare + + + + def check_VATE(self,checker): + #------------------------------- + vate=self.VATE.get_stripped() + type = self.u_type() + + if type == 'SPEC_EXCI_POINT' : + #--------------------------------- + intesp, nbno= self.u_nbno() + if intesp==0 : + assert len(vate)==4+nbno, vate + else : + assert len(vate)==5, vate + sd2=sd_cara_elem(vate[1]) ; sd2.check() + sd2=sd_modele(vate[2]) ; sd2.check() + if vate[3]=='GRAPPE_2' : + assert vate[4] in ('ASC_CEN','ASC_EXC','DES_CEN','DES_EXC') + else : + for x in vate[4:] : + assert x in ('FORCE','MOMENT') + + elif type == 'SPEC_FONC_FORME' : + #--------------------------------- + intesp, nbno= self.u_nbno() + if intesp==0 : + nbfonc=len(vate)-4 + assert nbfonc>0, vate + else : + assert len(vate)==5, vate + sd2=sd_cara_elem(vate[1]) ; sd2.check() + sd2=sd_modele(vate[2]) ; sd2.check() + if vate[3]=='GRAPPE_1' : + assert vate[4] in ('DEBIT_180','DEBIT_300') + else : + for x in vate[4:] : + sd2=sd_fonction(x) ; sd2.check() + + elif type == 'SPEC_LONG_COR_1' : + #--------------------------------- + sd2=sd_fonction(vate[2]) ; sd2.check() + assert vate[3] == 'VISC_CINE' + + elif type == 'SPEC_LONG_COR_2' : + #--------------------------------- + sd2=sd_fonction(vate[2]) ; sd2.check() + assert vate[5] == 'BETA' + + elif type == 'SPEC_LONG_COR_3' : + #--------------------------------- + sd2=sd_fonction(vate[2]) ; sd2.check() + assert vate[7] == 'BETA_2' + + elif type == 'SPEC_LONG_COR_4' : + #--------------------------------- + sd2=sd_fonction(vate[2]) ; sd2.check() + assert vate[5] == 'GAMMA' + + elif type == 'SPEC_CORR_CONV_1' : + #--------------------------------- + assert vate[9] == 'COEF_VITE_FLUI_O' + assert vate[10] in ('GENERALE', 'CORCOS', 'AU_YANG') + + elif type == 'SPEC_CORR_CONV_2' : + #--------------------------------- + sd2=sd_fonction(vate[1]) ; sd2.check() + assert vate[4] in ('GENERALE', 'CORCOS', 'AU_YANG') + assert vate[6] == 'COEF_VITE_FLUI_O' + + + + def check_VAVF(self,checker): + #------------------------------- + vavf=self.VAVF.get_stripped() + type = self.u_type() + + if type in ('SPEC_FONC_FORME', 'SPEC_EXCI_POINT') : + assert not vavf + else : + sd2=sd_fonction(vavf[0]) ; sd2.check() + + + + def check_NNOE(self,checker): + #------------------------------- + nnoe=self.NNOE.get() + type = self.u_type() + if type in ('SPEC_FONC_FORME', 'SPEC_EXCI_POINT') : + intesp, nbno= self.u_nbno() + assert len(nnoe) == nbno + else : + assert not nnoe diff --git a/Aster/Cata/cataSTA9/SD/sd_squelette.py b/Aster/Cata/cataSTA9/SD/sd_squelette.py index d867b8cf..f3ba2aba 100644 --- a/Aster/Cata/cataSTA9/SD/sd_squelette.py +++ b/Aster/Cata/cataSTA9/SD/sd_squelette.py @@ -1,30 +1,60 @@ -#@ MODIF sd_squelette SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_squelette SD DATE 19/06/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * from SD.sd_maillage import sd_maillage +from SD.sd_util import * + + class sd_squelette(sd_maillage): +#------------------------------- nomj = SDNom(fin=8) - INV_SKELETON = AsVI(SDNom(nomj='.INV.SKELETON'), ) - CORRES = Facultatif(AsVI(lonmax=1271, )) - NOMSST = Facultatif(AsVK8(SDNom(debut=17), )) + inv_skeleton = AsVI(SDNom(nomj='.INV.SKELETON'), ) + + CORRES = Facultatif(AsVI()) + NOMSST = Facultatif(AsVK8(SDNom(debut=17),)) + + # ENSEMBLE__ : TRANS , ANGL_NAUT + TRANS = Facultatif(AsVK8(lonmax=3)) + ANGL_NAUT = Facultatif(AsVK8(lonmax=3)) + + + def check_SKELETON(self,checker): + dime=self.DIME.get() + skeleton=self.inv_skeleton.get() + nbno=dime[0] + assert len(skeleton)==2*nbno, (dime,len(skeleton)) + for k in skeleton : + assert k > 0 , skeleton + + + def check_TRANS_ANGL_NAUT(self,checker): + trans =self.TRANS.get() + angl_naut =self.ANGL_NAUT.get() + assert (trans and angl_naut) or ((not trans) and (not angl_naut)) + def check_CORRES(self,checker): + if not self.CORRES.exists : return + dime=self.DIME.get() + corres=self.CORRES.get() + sdu_tous_differents(self.CORRES,checker) + assert len(corres) == dime[0], (dime, len(corres)) diff --git a/Aster/Cata/cataSTA9/SD/sd_surface_1d.py b/Aster/Cata/cataSTA9/SD/sd_surface_1d.py index 96dfb7f4..b4c7ec0e 100644 --- a/Aster/Cata/cataSTA9/SD/sd_surface_1d.py +++ b/Aster/Cata/cataSTA9/SD/sd_surface_1d.py @@ -1,21 +1,21 @@ -#@ MODIF sd_surface_1d SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_surface_1d SD DATE 22/10/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * @@ -29,8 +29,8 @@ class sd_surface_1d(AsBase): nomj = SDNom(fin=13) sgtel = sd_reperage_1d(SDNom(nomj='.SGTEL')) repom = sd_reperage_omega(SDNom(nomj='')) - CONEX_ORIG = AsVI(SDNom(nomj='.CONEX.ORIG'), lonmax=1, ) - CONEX_EXTR = AsVI(SDNom(nomj='.CONEX.EXTR'), lonmax=1, ) + CONEX_ORIG = AsVI(SDNom(nomj='.CONEX.ORIG')) + CONEX_EXTR = AsVI(SDNom(nomj='.CONEX.EXTR')) DESC = AsVR(SDNom(debut=13), lonmax=6, ) diff --git a/Aster/Cata/cataSTA9/SD/sd_table_container.py b/Aster/Cata/cataSTA9/SD/sd_table_container.py new file mode 100644 index 00000000..1afe1a17 --- /dev/null +++ b/Aster/Cata/cataSTA9/SD/sd_table_container.py @@ -0,0 +1,81 @@ +#@ MODIF sd_table_container SD DATE 12/02/2008 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2008 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +from SD import * + +from SD.sd_table import sd_table, Colonne +from SD.sd_vect_elem import sd_vect_elem +from SD.sd_matr_elem import sd_matr_elem +from SD.sd_cham_elem import sd_cham_elem +# -------------------------------------------------------------------- +# sd_table contenant les colonnes nommée "NOM_OBJET","TYPE_OBJET", +# et "NOM_SD" +# -------------------------------------------------------------------- + + + +class sd_table_container(sd_table): +#------------------------------------- + nomj = SDNom(fin=19) + + def check_table_container(self, checker): + + # vérification de l'existence de la table + if not self.exists() : + checker.err(self,"La sd_table_container %s ne semble" + +"pas exister" %(nomj)) + + # on vérifie la présence des paramètres + # 'NOM_OBJET','TYPE_OBJET','NOM_SD' + param=['NOM_OBJET','TYPE_OBJET','NOM_SD'] + shape = self.TBNP.get() + assert 3,shape[0] # la table a exactement 3 paramètres + for n in param: + col=self.get_column_name(n) + if col == None: + checker.err(self,"Paramètre %s manquant!" %(n)) + + # on vérifie que les colonnes ne sont pas vides + data = col.data.get() + if data is not None: + if col.data.lonuti != shape[1]: + checker.err(self,"Taille inconsitante %d!=%d" % + (col.data.lonuti,shape[1])) + + + # on vérifie le contenu de la colonne NOM_SD + col1=self.get_column_name('TYPE_OBJET') + col2=self.get_column_name('NOM_SD') + nbli=col1.data.lonuti + lnom1=col1.data.get_stripped() + lnom2=col2.data.get_stripped() + for k in range(nbli): + if lnom1[k][:9]=='VECT_ELEM': + sd5=sd_vect_elem(lnom2[k]) + sd5.check(checker) + elif lnom1[k][:9]=='MATR_ELEM': + sd5=sd_matr_elem(lnom2[k]) + sd5.check(checker) + elif lnom1[k][:9]=='CHAM_ELEM': + sd5=sd_cham_elem(lnom2[k]) + sd5.check(checker) + else: + assert 0,lnom1[k] + diff --git a/Aster/Cata/cataSTA9/SD/sd_tran_gene.py b/Aster/Cata/cataSTA9/SD/sd_tran_gene.py index aa27bb7f..a5c682f4 100644 --- a/Aster/Cata/cataSTA9/SD/sd_tran_gene.py +++ b/Aster/Cata/cataSTA9/SD/sd_tran_gene.py @@ -1,25 +1,29 @@ -#@ MODIF sd_tran_gene SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_tran_gene SD DATE 27/11/2007 AUTEUR ANDRIAM H.ANDRIAMBOLOLONA # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * from SD.sd_titre import sd_titre +from SD.sd_nume_ddl_gene import sd_nume_ddl_gene +from SD.sd_matr_asse_gene import sd_matr_asse_gene +from SD.sd_proj_mesu import sd_proj_mesu +from SD.sd_util import * class sd_tran_gene(sd_titre) : @@ -27,35 +31,120 @@ class sd_tran_gene(sd_titre) : nomj = SDNom(fin=19) # objets commencant en 19 : - FDEP = Facultatif(AsVK8()) - ACCE = AsVR() - ICHO = Facultatif(AsVI()) - REDN = Facultatif(AsVK24(lonmax=1, )) - INST = AsVR() - IPSD = Facultatif(AsVR()) - DEPL = AsVR() - VINT = Facultatif(AsVR()) - FCHO = Facultatif(AsVR()) + ACCE = AsVR() # gros objet + VITE = AsVR() # gros objet + DEPL = AsVR() # gros objet + + INST = AsVR() # gros objet + ORDR = AsVI() # gros objet DESC = AsVI(lonmax=5, ) - INTI = Facultatif(AsVK8()) - REDC = Facultatif(AsVI()) - NCHO = Facultatif(AsVK8()) - REDD = Facultatif(AsVR()) REFD = AsVK24(lonmax=6, ) - VITE = AsVR() - FVIT = Facultatif(AsVK8()) - SST = Facultatif(AsVK8()) - DLOC = Facultatif(AsVR()) - ORDR = AsVI() PTEM = AsVR() - FACC = Facultatif(AsVK8()) + + # si CHOC : + DLOC = Facultatif(AsVR()) + ICHO = Facultatif(AsVI()) + INTI = Facultatif(AsVK8()) + FCHO = Facultatif(AsVR()) + NCHO = Facultatif(AsVK8()) + SST = Facultatif(AsVK8()) VCHO = Facultatif(AsVR()) + VINT = Facultatif(AsVR()) + + # si nbexcit > 0 : + FACC = Facultatif(AsVK8()) + FDEP = Facultatif(AsVK8()) + FVIT = Facultatif(AsVK8()) + IPSD = Facultatif(AsVR()) + + # si RELA_EFFO_DEPL : + REDN = Facultatif(AsVK24(lonmax=1, )) + REDC = Facultatif(AsVI()) + REDD = Facultatif(AsVR()) + + # si utilisation de PROJ_MESU_MODAL : + PROJM = Facultatif(sd_proj_mesu(SDNom(debut=8))) + + + + + def u_dime(self): + desc=self.DESC.get() + nbmode=desc[1] ; assert nbmode > 0 + nbchoc=desc[2] ; assert nbchoc >= 0 + nbrede=desc[3] ; assert nbmode >= 0 + nbsauv=self.ORDR.lonmax ; assert nbsauv > 0 + if self.FACC.exists : + nbexcit=self.FACC.lonmax / 2 ; assert nbexcit >= 0 + else : + nbexcit=0 + return (nbmode, nbchoc, nbsauv, nbexcit, nbrede) + + + def check_DESC(self,checker): + desc=self.DESC.get() + assert desc[0] in (1,2,3) , desc + + + def check_REFD(self,checker): + # AJACOT : j'avais cru comprendre des choses ... mais sdld104a me prouve le contraire ! + # à revoir ????? + return + refd=self.REFD.get_stripped() + assert refd[0] != '' , refd + sd2= sd_matr_asse_gene(refd[0]) ; sd2.check() + assert refd[1] != '' , refd + sd2= sd_matr_asse_gene(refd[0]) ; sd2.check() + if refd[2] != '' : + sd2= sd_matr_asse_gene(refd[2]) ; sd2.check() + assert refd[3] != '' , refd + sd2= sd_nume_ddl_gene(refd[3]) ; sd2.check() + assert refd[4] == '' , refd + # test de refd[5] trop compliqué : je craque ! + + + def check_ORDR_INST_PTEM(self,checker): + nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime() + assert self.ORDR.lonmax == nbsauv + assert self.INST.lonmax == nbsauv + assert self.PTEM.lonmax in (1, nbsauv) + # sdu_tous_differents(self.ORDR,checker) # AJACOT_PB : j'aimerais bien "tous_différents" + # sdu_tous_differents(self.INST,checker) # mais il y a sdld102a => fiche à émettre ? + + + def check_DEPL_VITE_ACCE(self,checker): + nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime() + assert self.DEPL.lonmax == nbsauv*nbmode + assert self.VITE.lonmax == nbsauv*nbmode + assert self.ACCE.lonmax == nbsauv*nbmode + + + def check_CHOC(self,checker): + nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime() + if nbchoc == 0 : return + assert self.DLOC.lonmax == 6*nbsauv*nbchoc + assert self.VCHO.lonmax == 3*nbsauv*nbchoc + assert self.FCHO.lonmax == 3*nbsauv*nbchoc + assert self.INTI.lonmax == nbchoc + assert self.ICHO.lonmax == nbsauv*nbchoc + assert self.NCHO.lonmax == 2*nbchoc + assert self.VINT.lonmax == nbsauv*nbchoc + assert self.SST.lonmax == 2*nbchoc + - # objets commencant en 8 : - BASEPR = Facultatif(AsVR(SDNom(debut=8))) - VNOEUD = Facultatif(AsVI(SDNom(debut=8))) - VORIEN = Facultatif(AsVR(SDNom(debut=8))) - VRANGE = Facultatif(AsVK8(SDNom(debut=8))) + def check_EXCIT(self,checker): + nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime() + if nbexcit == 0 : return + assert self.FACC.lonmax == 2*nbexcit + assert self.FDEP.lonmax == 2*nbexcit + assert self.FVIT.lonmax == 2*nbexcit + #assert self.IPSD.lonmax == nbexcit*neq # JP : neq != nbmode. Que vaut neq ?? + def check_RELA_DEPL(self,checker): + nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime() + if nbrede == 0 : return + assert self.REDC.lonmax == nbsauv*nbrede + assert self.REDD.lonmax == nbsauv*nbrede + assert self.REDN.lonmax == nbrede diff --git a/Aster/Cata/cataSTA9/SD/sd_util.py b/Aster/Cata/cataSTA9/SD/sd_util.py index 15bf4ffa..10ea554c 100644 --- a/Aster/Cata/cataSTA9/SD/sd_util.py +++ b/Aster/Cata/cataSTA9/SD/sd_util.py @@ -1,4 +1,4 @@ -#@ MODIF sd_util SD DATE 23/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_util SD DATE 22/10/2007 AUTEUR PELLET J.PELLET # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -141,10 +141,8 @@ def sdu_monotone(seqini) : decroiss=1 for k in range(n) : if seq[k] != seq2[k] : - if 0 : print "AJACOT non croissant ",k,seq[k],seq2[k] croiss=0 if seq[k] != seq3[k] : - if 0 : print "AJACOT non décroissant ",k,seq[k],seq2[k] decroiss=0 if croiss==1 and decroiss==1 : @@ -163,5 +161,26 @@ def sdu_monotone(seqini) : def sdu_nom_gd(numgd) : # retourne le nom de la grandeur de numéro (numgd) + assert numgd > 0 and numgd <1000 , numgd ptn=aster.getvectjev('&CATA.GD.NOMGD') return ptn[numgd-1].strip() + +def sdu_licmp_gd(numgd) : + # retourne la liste des cmps de la grandeur de numéro (numgd) + nomgd=sdu_nom_gd(numgd) + nocmp=aster.getcolljev('&CATA.GD.NOMCMP') + return nocmp[nomgd.ljust(8)] + + + +# 3) Utilitaires pour la vérification de l'existence des objets : +# ----------------------------------------------------------------------------------------- + +def sdu_ensemble(lojb) : + # vérifie que les objets JEVEUX de lojb existent simultanément : + assert len(lojb) > 1 , lojb + lexi=[] + for obj1 in lojb : + lexi.append(obj1.exists) + for x in lexi[1:] : + assert x==lexi[0] , (lojb,lexi) diff --git a/Aster/Cata/cataSTA9/SD/sd_vect_elem.py b/Aster/Cata/cataSTA9/SD/sd_vect_elem.py index bcadd9d7..0bd1afc8 100644 --- a/Aster/Cata/cataSTA9/SD/sd_vect_elem.py +++ b/Aster/Cata/cataSTA9/SD/sd_vect_elem.py @@ -1,21 +1,21 @@ -#@ MODIF sd_vect_elem SD DATE 13/02/2007 AUTEUR PELLET J.PELLET +#@ MODIF sd_vect_elem SD DATE 25/03/2008 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== from SD import * @@ -23,7 +23,14 @@ from SD.sd_resuelem import sd_resuelem from SD.sd_matr_elem import sd_matr_elem class sd_vect_elem(sd_matr_elem): - nomj = SDNom(fin=8) - LISTE_CHAR = Facultatif(AsColl(acces='NO', stockage='CONTIG', modelong='CONSTANT', type='I', )) + nomj = SDNom(fin=19) + RELC = Facultatif(AsColl(acces='NO', stockage='CONTIG', modelong='CONSTANT', type='I', )) + def check_RELC(self, checker): + if not self.RELC.exists : return + lchar = self.RELC.get() + for nochar in lchar.keys() : + for k in lchar[nochar] : + assert k in (0,1) , lchar + diff --git a/Aster/Cata/cataSTA9/SD/sd_xfem.py b/Aster/Cata/cataSTA9/SD/sd_xfem.py new file mode 100644 index 00000000..ef81e21e --- /dev/null +++ b/Aster/Cata/cataSTA9/SD/sd_xfem.py @@ -0,0 +1,141 @@ +#@ MODIF sd_xfem SD DATE 04/02/2008 AUTEUR GALENNE E.GALENNE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +from SD import * + +from SD.sd_cham_no import sd_cham_no +from SD.sd_cham_elem import sd_cham_elem +from SD.sd_carte import sd_carte +from SD.sd_util import * + + + +#------------------------------- +# I. sd fiss_xfem +#------------------------------- + +class sd_fiss_xfem(AsBase): + nomj = SDNom(fin=8) + +# I.1) objets relatifs aux level sets + + LNNO = sd_cham_no() + LTNO = sd_cham_no() + GRLNNO = sd_cham_no() + GRLTNO = sd_cham_no() + BASLOC = sd_cham_no() + FONDFISS = Facultatif(AsVR()) + BASEFOND = Facultatif(AsVR()) + FONDMULT = Facultatif(AsVI()) + CARAFOND = AsVR() + +# I.2) objets relatifs à l'enrichissement + + GROUP_MA_ENRI = AsVI() + GROUP_NO_ENRI = AsVI() + STNO = sd_cham_no() + STNOR = sd_cham_no() + + MAILFISS_CTIP = Facultatif(AsVI(SDNom(nomj='.MAILFISS .CTIP'))) + MAILFISS_HEAV = Facultatif(AsVI(SDNom(nomj='.MAILFISS .HEAV'))) + MAILFISS_HECT = Facultatif(AsVI(SDNom(nomj='.MAILFISS .HECT'))) + MAILFISS_INDIC = AsVI(SDNom(nomj='.MAILFISS .INDIC'), lonmax=6, ) + LISNOH = Facultatif(AsVI()) + +# I.3) objets relatifs à la propagation + + PRO_MES_EL = Facultatif(sd_cham_elem(SDNom(nomj='.PRO.MES_EL'))) + PRO_NORMAL = Facultatif(sd_cham_elem(SDNom(nomj='.PRO.NORMAL'))) + +# I.4) objets relatifs au contact + + BASCO = Facultatif(sd_cham_no()) + LISCO = Facultatif(AsVR(SDNom(nomj='.LISCO'))) + LISEQ = Facultatif(AsVI(SDNom(nomj='.LISEQ'))) + LISRL = Facultatif(AsVI(SDNom(nomj='.LISRL'))) + + +# 1.5) vérifications d'existence : + + def check_existence(self,checker) : + sdu_ensemble((self.FONDFISS, self.FONDMULT)) + sdu_ensemble((self.LISRL, self.LISCO)) + sdu_ensemble((self.PRO_MES_EL.CELD, self.PRO_NORMAL.CELD)) + + +#------------------------------- +# II. sd modele +#------------------------------- + +class sd_modele_xfem(AsBase): + nomj = SDNom(fin=8) + +# II.1) objets relatifs aux sous-éléments + + TOPOSE_PIN = sd_cham_elem(SDNom(nomj='.TOPOSE.PIN')) + TOPOSE_CNS = sd_cham_elem(SDNom(nomj='.TOPOSE.CNS')) + TOPOSE_HEA = sd_cham_elem(SDNom(nomj='.TOPOSE.HEA')) + TOPOSE_LON = sd_cham_elem(SDNom(nomj='.TOPOSE.LON')) + TOPOSE_CRI = Facultatif(sd_cham_elem(SDNom(nomj='.TOPOSE.CRI'))) + +# II.2) objets relatifs aux facettes de contact + + TOPOFAC_PI = sd_cham_elem(SDNom(nomj='.TOPOFAC.PI')) + TOPOFAC_AI = sd_cham_elem(SDNom(nomj='.TOPOFAC.AI')) + TOPOFAC_CF = sd_cham_elem(SDNom(nomj='.TOPOFAC.CF')) + TOPOFAC_LO = sd_cham_elem(SDNom(nomj='.TOPOFAC.LO')) + TOPOFAC_BA = sd_cham_elem(SDNom(nomj='.TOPOFAC.BA')) + + TOPOFAC_GM = sd_cham_elem(SDNom(nomj='.TOPOFAC.GM')) + TOPOFAC_GE = sd_cham_elem(SDNom(nomj='.TOPOFAC.GE')) + TOPOFAC_OE = sd_cham_elem(SDNom(nomj='.TOPOFAC.OE')) + TOPOFAC_OM = sd_cham_elem(SDNom(nomj='.TOPOFAC.OM')) + +# II.3) objets concaténés relatifs aux level sets + + LNNO = sd_cham_no() + LTNO = sd_cham_no() + BASLOC = sd_cham_no() + STNO = sd_cham_no() + +# II.4) autres objets + + XFEM_CONT = AsVI(lonmax=1) # contact ou pas + FISS = AsVK8() # noms des fissures + NFIS = AsVI(lonmax=1,) # nombre de fissures + XMAFIS = sd_carte() # pour chaque maille : nom de la fissure + + + +#---------------------------------- +# III. sd charge de contact +#---------------------------------- + +class sd_contact_xfem(AsBase): +#------------------------------- + nomj = SDNom(fin=16) + + CARACF = AsVR() + ECPDON = AsVI() + METHCO = AsVI() + + XFIMAI = AsVK8() + XNRELL = AsVK24() + XNBASC = AsVK24() diff --git a/Aster/Cata/cataSTA9/SD/utilsd.py b/Aster/Cata/cataSTA9/SD/utilsd.py index 97a69935..8e4980be 100644 --- a/Aster/Cata/cataSTA9/SD/utilsd.py +++ b/Aster/Cata/cataSTA9/SD/utilsd.py @@ -1,4 +1,4 @@ -#@ MODIF utilsd SD DATE 02/04/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF utilsd SD DATE 10/09/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -23,7 +23,7 @@ Utilitaire sur le catalogue des structures de données. """ -__revision__ = "$Id: utilsd.py,v 1.1.2.2 2007-06-08 09:15:34 pnoyret Exp $" +__revision__ = "$Id: utilsd.py,v 1.2.6.3.4.2 2008-10-10 13:32:10 pnoyret Exp $" import sys import os @@ -46,6 +46,7 @@ def import_sd(nomsd): mod = __import__('SD.%s' % nomsd, globals(), locals(), [nomsd]) klass = getattr(mod, nomsd) except (ImportError, AttributeError), msg: + print msg raise ImportError, "impossible d'importer la SD '%s'" % nomsd return klass @@ -59,7 +60,7 @@ def tree(nom, *args): l.append('-'*80) sd_class = import_sd(sd) tmpobj = sd_class(nomj=nom) - l.append(tmpobj.info()) + l.append(tmpobj.dump()) return os.linesep.join(l) # ----------------------------------------------------------------------------- diff --git a/Aster/Cata/cataSTA9/cata.py b/Aster/Cata/cataSTA9/cata.py index cd179e9a..9107d31c 100644 --- a/Aster/Cata/cataSTA9/cata.py +++ b/Aster/Cata/cataSTA9/cata.py @@ -1,4 +1,4 @@ -#& MODIF ENTETE DATE 13/02/2007 AUTEUR PELLET J.PELLET +#& MODIF ENTETE DATE 12/02/2008 AUTEUR REZETTE C.REZETTE # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -18,8 +18,11 @@ # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -__version__ = "$Name: V1_12a2 $" -__Id__ = "$Id: cata.py,v 1.1.2.4 2007-06-14 16:18:46 pnoyret Exp $" +# faire que la division soit toujours réelle +from __future__ import division + +__version__ = "$Name: $" +__Id__ = "$Id: cata.py,v 1.2.6.5.4.3 2008-10-10 13:31:49 pnoyret Exp $" import Accas from Accas import * @@ -210,6 +213,7 @@ from SD.co_matr_elem import matr_elem, \ # table : from SD.co_table import table_sdaster, table_jeveux from SD.co_table_fonction import table_fonction +from SD.co_table_container import table_container # ----------------------------------------------------------------------------- # vect_asse_gene : @@ -222,9 +226,8 @@ from SD.co_vect_elem import vect_elem, \ vect_elem_pres_r, vect_elem_pres_c, \ vect_elem_temp_r -#& MODIF COMMUN DATE 21/05/2007 AUTEUR FERNANDES R.FERNANDES +#& MODIF COMMUN DATE 06/05/2008 AUTEUR MARKOVIC D.MARKOVIC # CONFIGURATION MANAGEMENT OF EDF VERSION -# RESPONSABLE JMBHH01 J.M.PROIX # ====================================================================== # COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY @@ -241,129 +244,133 @@ from SD.co_vect_elem import vect_elem, \ # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE PROIX J.M.PROIX def C_COMP_INCR() : return FACT(statut='f',min=1,max='**', #COMMUN# RELATION =SIMP(statut='o',typ='TXM',defaut="VMIS_ISOT_TRAC", into=( "ELAS", # Spécial Discrets : début - "DIS_VISC", - "DIS_ECRO_CINE", + "DIS_VISC", # RESP. : FLEJOU J.L.FLEJOU + "DIS_ECRO_CINE", # RESP. : FLEJOU J.L.FLEJOU + "DIS_BILI_ELAS", # RESP. : FLEJOU J.L.FLEJOU # Spécial Discrets : fin - "ELAS_HYPER", - "VMIS_ISOT_TRAC", - "VISC_ISOT_TRAC", - "VMIS_ISOT_LINE", - "VISC_ISOT_LINE", - "VMIS_ISOT_PUIS", - "VMIS_ECMI_TRAC", - "VMIS_ECMI_LINE", - "LABORD_1D", - "ENDO_FRAGILE", - "ENDO_ISOT_BETON", - "ENDO_ORTH_BETON", - "BETON_REGLE_PR", - "MAZARS", - "JOINT_BA", - "RUPT_FRAG", - "CZM_EXP_REG", - "CZM_LIN_REG", - "CZM_EXP", - "META_P_IL", - "META_P_IL_PT", - "META_P_IL_RE", - "META_P_IL_PT_RE", - "META_V_IL", - "META_V_IL_PT", - "META_V_IL_RE", - "META_V_IL_PT_RE", - "META_P_INL", - "META_P_INL_PT", - "META_P_INL_RE", - "META_P_INL_PT_RE", - "META_V_INL", - "META_V_INL_PT", - "META_V_INL_RE", - "META_V_INL_PT_RE", - "META_P_CL", - "META_P_CL_PT", - "META_P_CL_RE", - "META_P_CL_PT_RE", - "META_V_CL", - "META_V_CL_PT", - "META_V_CL_RE", - "META_V_CL_PT_RE", - "VMIS_CINE_LINE", - "VISC_TAHERI", - "VISCOCHAB", - "VMIS_CIN1_CHAB", - "VMIS_CIN2_CHAB", - "VISC_CIN1_CHAB", - "VISC_CIN2_CHAB", - "LMARC", - "LMARC_IRRA", - "ROUSSELIER", - "ROUSS_PR", - "ROUSS_VISC", - "VMIS_POU_LINE", - "VMIS_POU_FLEJOU", - "ARME", - "ASSE_CORN", - "NORTON_HOFF", - "LEMAITRE", - "LEMAITRE_IRRA", - "LEMA_SEUIL", - "IRRAD3M", - "ZIRC_CYRA2", - "VISC_IRRA_LOG", - "GRAN_IRRA_LOG", - "ZIRC_EPRI", - "VENDOCHAB", - "NADAI_B", - "DIS_CONTACT", - "DIS_CHOC", - "DIS_GRICRA", - "DIS_GOUJ2E_PLAS", - "DIS_GOUJ2E_ELAS", - "GRILLE_ISOT_LINE", - "GRILLE_CINE_LINE", - "GRILLE_PINTO_MEN", - "PINTO_MENEGOTTO", - "CJS", - "HUJEUX", - "CAM_CLAY", - "BARCELONE", - "LAIGLE", - "DRUCKER_PRAGER", - "HOEK_BROWN", - "HOEK_BROWN_EFF", - "HOEK_BROWN_TOT", - "GRANGER_FP", - "GRANGER_FP_INDT", - "GRANGER_FP_V", - "BAZANT_FD", - "BETON_UMLV_FP", - "BETON_DOUBLE_DP", - "KIT_HH", - "KIT_HM", - "KIT_HHM", - "KIT_THH", - "KIT_THV", - "KIT_THM", - "KIT_THHM", - "VMIS_ASYM_LINE", - "KIT_DDI", - "GLRC_DAMAGE", - "GLRC_DM", - "SANS", - "CORR_ACIER", - "MONOCRISTAL", - "POLYCRISTAL", - "ZMAT", - "GATT_MONERIE", - "MULTIFIBRE", + "ELAS_HYPER", # RESP. : ABBAS M.ABBAS + "VMIS_ISOT_TRAC", # RESP. : PROIX J.M.PROIX + "VISC_ISOT_TRAC", # RESP. : PROIX J.M.PROIX + "VMIS_ISOT_LINE", # RESP. : PROIX J.M.PROIX + "VISC_ISOT_LINE", # RESP. : MICHEL S.MICHEL + "VMIS_ISOT_PUIS", # RESP. : PROIX J.M.PROIX + "VMIS_ECMI_TRAC", # RESP. : PROIX J.M.PROIX + "VMIS_ECMI_LINE", # RESP. : PROIX J.M.PROIX + "LABORD_1D", # RESP. : VOLDOIRE F.VOLDOIRE + "ENDO_FRAGILE", # RESP. : MICHEL S.MICHEL + "ENDO_ISOT_BETON", # RESP. : MICHEL S.MICHEL + "ENDO_ORTH_BETON", # RESP. : MICHEL S.MICHEL + "BETON_REGLE_PR", # RESP. : NECS + "MAZARS", # RESP. : MICHEL S.MICHEL + "JOINT_BA", # RESP. : MICHEL S.MICHEL + "RUPT_FRAG", # RESP. : LAVERNE J.LAVERNE + "CZM_EXP_REG", # RESP. : LAVERNE J.LAVERNE + "CZM_LIN_REG", # RESP. : LAVERNE J.LAVERNE + "CZM_EXP", # RESP. : LAVERNE J.LAVERNE + "META_P_IL", # RESP. : CANO V.CANO + "META_P_IL_PT", # RESP. : CANO V.CANO + "META_P_IL_RE", # RESP. : CANO V.CANO + "META_P_IL_PT_RE", # RESP. : CANO V.CANO + "META_V_IL", # RESP. : CANO V.CANO + "META_V_IL_PT", # RESP. : CANO V.CANO + "META_V_IL_RE", # RESP. : CANO V.CANO + "META_V_IL_PT_RE", # RESP. : CANO V.CANO + "META_P_INL", # RESP. : CANO V.CANO + "META_P_INL_PT", # RESP. : CANO V.CANO + "META_P_INL_RE", # RESP. : CANO V.CANO + "META_P_INL_PT_RE",# RESP. : CANO V.CANO + "META_V_INL", # RESP. : CANO V.CANO + "META_V_INL_PT", # RESP. : CANO V.CANO + "META_V_INL_RE", # RESP. : CANO V.CANO + "META_V_INL_PT_RE",# RESP. : CANO V.CANO + "META_P_CL", # RESP. : CANO V.CANO + "META_P_CL_PT", # RESP. : CANO V.CANO + "META_P_CL_RE", # RESP. : CANO V.CANO + "META_P_CL_PT_RE", # RESP. : CANO V.CANO + "META_V_CL", # RESP. : CANO V.CANO + "META_V_CL_PT", # RESP. : CANO V.CANO + "META_V_CL_RE", # RESP. : CANO V.CANO + "META_V_CL_PT_RE", # RESP. : CANO V.CANO + "META_LEMA_ANI", # RESP. : CANO V.CANO + "VMIS_CINE_LINE", # RESP. : PROIX J.M.PROIX + "VISC_TAHERI", # RESP. : TAHERI S.TAHERI + "VISCOCHAB", # RESP. : None + "VMIS_CIN1_CHAB", # RESP. : PROIX J.M.PROIX + "VMIS_CIN2_CHAB", # RESP. : PROIX J.M.PROIX + "VISC_CIN1_CHAB", # RESP. : PROIX J.M.PROIX + "VISC_CIN2_CHAB", # RESP. : PROIX J.M.PROIX + "VMIS_CIN2_MEMO", # RESP. : PROIX J.M.PROIX + "VISC_CIN2_MEMO", # RESP. : PROIX J.M.PROIX + "LMARC", # RESP. : None + "LMARC_IRRA", # RESP. : FERNANDES R.FERNANDES + "ROUSSELIER", # RESP. : CANO V.CANO + "ROUSS_PR", # RESP. : PARROT A.PARROT + "ROUSS_VISC", # RESP. : CANO V.CANO + "VMIS_POU_LINE", # RESP. : PROIX J.M.PROIX + "VMIS_POU_FLEJOU", # RESP. : FLEJOU J.L.FLEJOU + "ARME", # RESP. : PEYRARD C.PEYRARD + "ASSE_CORN", # RESP. : PEYRARD C.PEYRARD + "NORTON_HOFF", # RESP. : MICHEL S.MICHEL + "LEMAITRE", # RESP. : DEBONNIERES P.DEBONNIERES + "LEMAITRE_IRRA", # RESP. : FERNANDES R.FERNANDES + "LEMA_SEUIL", # RESP. : LECLERC S.LECLERC + "IRRAD3M", # RESP. : FLEJOU J.L.FLEJOU + "VISC_IRRA_LOG", # RESP. : FERNANDES R.FERNANDES + "GRAN_IRRA_LOG", # RESP. : FERNANDES R.FERNANDES + "VENDOCHAB", # RESP. : None + "NADAI_B", # RESP. : None + "DIS_CHOC", # RESP. : DEVESA G.DEVESA + "DIS_GRICRA", # RESP. : FERNANDES R.FERNANDES + "DIS_GOUJ2E_PLAS", # RESP. : ANGLES J.ANGLES + "DIS_GOUJ2E_ELAS", # RESP. : ANGLES J.ANGLES + "GRILLE_ISOT_LINE",# RESP. : ROSPARS C.ROSPARS + "GRILLE_CINE_LINE",# RESP. : ROSPARS C.ROSPARS + "GRILLE_PINTO_MEN",# RESP. : ROSPARS C.ROSPARS + "PINTO_MENEGOTTO", # RESP. : ROSPARS C.ROSPARS + "CJS", # RESP. : CHAVANT C.CHAVANT + "HUJEUX", # RESP. : FOUCAULT A.FOUCAULT + "CAM_CLAY", # RESP. : ELGHARIB J.ELGHARIB + "BARCELONE", # RESP. : ELGHARIB J.ELGHARIB + "LAIGLE", # RESP. : ELGHARIB J.ELGHARIB + "LETK", # RESP. : ELGHARIB J.ELGHARIB + "DRUCK_PRAGER", # RESP. : FERNANDES R.FERNANDES + "DRUCK_PRAG_N_A", # RESP. : FERNANDES R.FERNANDES + "HOEK_BROWN", # RESP. : CHAVANT C.CHAVANT + "HOEK_BROWN_EFF", # RESP. : CHAVANT C.CHAVANT + "HOEK_BROWN_TOT", # RESP. : CHAVANT C.CHAVANT + "GRANGER_FP", # RESP. : ROSPARS C.ROSPARS + "GRANGER_FP_INDT", # RESP. : ROSPARS C.ROSPARS + "GRANGER_FP_V", # RESP. : ROSPARS C.ROSPARS + "BETON_UMLV_FP", # RESP. : LEPAPE Y.LEPAPE + "BETON_DOUBLE_DP", # RESP. : ELGHARIB J.ELGHARIB + "KIT_HH", # RESP. : GRANET S.GRANET + "KIT_HM", # RESP. : GRANET S.GRANET + "KIT_HHM", # RESP. : GRANET S.GRANET + "KIT_THH", # RESP. : GRANET S.GRANET + "KIT_THV", # RESP. : GRANET S.GRANET + "KIT_THM", # RESP. : GRANET S.GRANET + "KIT_THHM", # RESP. : GRANET S.GRANET + "VMIS_ASYM_LINE", # RESP. : None + "KIT_DDI", # RESP. : CHAVANT C.CHAVANT + "GLRC_DAMAGE", # RESP. : MARKOVIC D.MARKOVIC + "GLRC_DM", # RESP. : MARKOVIC D.MARKOVIC + "SANS", # RESP. : None + "CORR_ACIER", # RESP. : LEPAPE Y.LEPAPE + "MONOCRISTAL", # RESP. : PROIX J.M.PROIX + "POLYCRISTAL", # RESP. : PROIX J.M.PROIX + "ZMAT", # RESP. : PROIX J.M.PROIX + "GATT_MONERIE", # RESP. : DEBONNIERES P.DEBONNIERES + "MULTIFIBRE", # RESP. : FLEJOU J.L.FLEJOU ) ), # Spécial discrets : début DIS_VISC =SIMP(statut='c',typ='I',defaut=12,into=(12,)), DIS_ECRO_CINE =SIMP(statut='c',typ='I',defaut=18,into=(18,)), + DIS_BILI_ELAS =SIMP(statut='c',typ='I',defaut= 6,into=( 6,)), # Spécial discrets : fin ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,)), ELAS_HYPER =SIMP(statut='c',typ='I',defaut=1,into=(1,)), @@ -384,39 +391,42 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**', #COMMUN# MAZARS =SIMP(statut='c',typ='I',defaut=4,into=(4,)), JOINT_BA =SIMP(statut='c',typ='I',defaut=6,into=(6,)), RUPT_FRAG =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - CZM_EXP_REG =SIMP(statut='c',typ='I',defaut=9,into=(9,)), - CZM_LIN_REG =SIMP(statut='c',typ='I',defaut=9,into=(9,)), - CZM_EXP =SIMP(statut='c',typ='I',defaut=7,into=(7,)), - META_P_IL =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_P_IL_PT =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_P_IL_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_P_IL_PT_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_V_IL =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_V_IL_PT =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_V_IL_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_V_IL_PT_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_P_INL =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_P_INL_PT =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_P_INL_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_P_INL_PT_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_V_INL =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_V_INL_PT =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_V_INL_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_V_INL_PT_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - META_P_CL =SIMP(statut='c',typ='I',defaut=6,into=(6,)), - META_P_CL_PT =SIMP(statut='c',typ='I',defaut=6,into=(6,)), - META_P_CL_RE =SIMP(statut='c',typ='I',defaut=6,into=(6,)), - META_P_CL_PT_RE =SIMP(statut='c',typ='I',defaut=6,into=(6,)), - META_V_CL =SIMP(statut='c',typ='I',defaut=6,into=(6,)), - META_V_CL_PT =SIMP(statut='c',typ='I',defaut=6,into=(6,)), - META_V_CL_RE =SIMP(statut='c',typ='I',defaut=6,into=(6,)), - META_V_CL_PT_RE =SIMP(statut='c',typ='I',defaut=6,into=(6,)), + CZM_EXP_REG =SIMP(statut='c',typ='I',defaut=9,into=(9,)), + CZM_LIN_REG =SIMP(statut='c',typ='I',defaut=9,into=(9,)), + CZM_EXP =SIMP(statut='c',typ='I',defaut=7,into=(7,)), + META_P_IL =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_P_IL_PT =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_P_IL_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_P_IL_PT_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_V_IL =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_V_IL_PT =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_V_IL_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_V_IL_PT_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_P_INL =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_P_INL_PT =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_P_INL_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_P_INL_PT_RE=SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_V_INL =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_V_INL_PT =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_V_INL_RE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_V_INL_PT_RE=SIMP(statut='c',typ='I',defaut=1,into=(1,)), + META_P_CL =SIMP(statut='c',typ='I',defaut=6,into=(6,)), + META_P_CL_PT =SIMP(statut='c',typ='I',defaut=6,into=(6,)), + META_P_CL_RE =SIMP(statut='c',typ='I',defaut=6,into=(6,)), + META_P_CL_PT_RE =SIMP(statut='c',typ='I',defaut=6,into=(6,)), + META_V_CL =SIMP(statut='c',typ='I',defaut=6,into=(6,)), + META_V_CL_PT =SIMP(statut='c',typ='I',defaut=6,into=(6,)), + META_V_CL_RE =SIMP(statut='c',typ='I',defaut=6,into=(6,)), + META_V_CL_PT_RE =SIMP(statut='c',typ='I',defaut=6,into=(6,)), + META_LEMA_ANI =SIMP(statut='c',typ='I',defaut=2,into=(2,)), VMIS_CINE_LINE =SIMP(statut='c',typ='I',defaut=7,into=(7,)), VISCOCHAB =SIMP(statut='c',typ='I',defaut=28,into=(28,)), VMIS_CIN1_CHAB =SIMP(statut='c',typ='I',defaut=8,into=(8,)), VMIS_CIN2_CHAB =SIMP(statut='c',typ='I',defaut=14,into=(14,)), VISC_CIN1_CHAB =SIMP(statut='c',typ='I',defaut=8,into=(8,)), VISC_CIN2_CHAB =SIMP(statut='c',typ='I',defaut=14,into=(14,)), + VMIS_CIN2_MEMO =SIMP(statut='c',typ='I',defaut=28,into=(28,)), + VISC_CIN2_MEMO =SIMP(statut='c',typ='I',defaut=28,into=(28,)), LMARC =SIMP(statut='c',typ='I',defaut=20,into=(20,)), LMARC_IRRA =SIMP(statut='c',typ='I',defaut=20,into=(20,)), VISC_TAHERI =SIMP(statut='c',typ='I',defaut=9,into=(9,)), @@ -432,8 +442,6 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**', #COMMUN# LEMA_SEUIL =SIMP(statut='c',typ='I',defaut=2,into=(2,)), IRRAD3M =SIMP(statut='c',typ='I',defaut=5,into=(5,)), LEMAITRE_IRRA =SIMP(statut='c',typ='I',defaut=2,into=(2,)), - ZIRC_CYRA2 =SIMP(statut='c',typ='I',defaut=2,into=(2,)), - ZIRC_EPRI =SIMP(statut='c',typ='I',defaut=2,into=(2,)), VISC_IRRA_LOG =SIMP(statut='c',typ='I',defaut=2,into=(2,)), GRAN_IRRA_LOG =SIMP(statut='c',typ='I',defaut=2,into=(2,)), NADAI_B =SIMP(statut='c',typ='I',defaut=34,into=(34,)), @@ -441,25 +449,25 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**', #COMMUN# GRILLE_ISOT_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)), GRILLE_CINE_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)), GRILLE_PINTO_MEN=SIMP(statut='c',typ='I',defaut=16,into=(16,)), - DIS_CONTACT =SIMP(statut='c',typ='I',defaut=6,into=(6,)), DIS_CHOC =SIMP(statut='c',typ='I',defaut=7,into=(7,)), - DIS_GRICRA =SIMP(statut='c',typ='I',defaut=5,into=(5,)), + DIS_GRICRA =SIMP(statut='c',typ='I',defaut=5,into=(5,)), DIS_GOUJ2E_PLAS =SIMP(statut='c',typ='I',defaut=2,into=(2,)), DIS_GOUJ2E_ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,)), PINTO_MENEGOTTO =SIMP(statut='c',typ='I',defaut=8,into=(8,)), CJS =SIMP(statut='c',typ='I',defaut=16,into=(16,)), - HUJEUX =SIMP(statut='c',typ='I',defaut=9,into=(9,)), + HUJEUX =SIMP(statut='c',typ='I',defaut=35,into=(35,)), CAM_CLAY =SIMP(statut='c',typ='I',defaut=7,into=(7,)), BARCELONE =SIMP(statut='c',typ='I',defaut=5,into=(5,)), LAIGLE =SIMP(statut='c',typ='I',defaut=4,into=(4,)), - DRUCKER_PRAGER =SIMP(statut='c',typ='I',defaut=3,into=(3,)), + LETK =SIMP(statut='c',typ='I',defaut=7,into=(7,)), + DRUCK_PRAGER =SIMP(statut='c',typ='I',defaut=3,into=(3,)), + DRUCK_PRAG_N_A =SIMP(statut='c',typ='I',defaut=3,into=(3,)), HOEK_BROWN =SIMP(statut='c',typ='I',defaut=3,into=(3,)), HOEK_BROWN_EFF =SIMP(statut='c',typ='I',defaut=3,into=(3,)), HOEK_BROWN_TOT =SIMP(statut='c',typ='I',defaut=3,into=(3,)), GRANGER_FP =SIMP(statut='c',typ='I',defaut=55,into=(55,)), GRANGER_FP_INDT =SIMP(statut='c',typ='I',defaut=55,into=(55,)), GRANGER_FP_V =SIMP(statut='c',typ='I',defaut=55,into=(55,)), - BAZANT_FD =SIMP(statut='c',typ='I',defaut=1,into=(1,)), BETON_DOUBLE_DP =SIMP(statut='c',typ='I',defaut=4,into=(4,)), KIT_HH =SIMP(statut='c',typ='I',defaut=0,into=(0,)), KIT_HM =SIMP(statut='c',typ='I',defaut=0,into=(0,)), @@ -470,7 +478,7 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**', #COMMUN# KIT_THHM =SIMP(statut='c',typ='I',defaut=0,into=(0,)), VMIS_ASYM_LINE =SIMP(statut='c',typ='I',defaut=4,into=(4,)), BETON_UMLV_FP =SIMP(statut='c',typ='I',defaut=21,into=(21,)), - GLRC_DAMAGE =SIMP(statut='c',typ='I',defaut=21,into=(21,)), + GLRC_DAMAGE =SIMP(statut='c',typ='I',defaut=19,into=(19,)), GLRC_DM =SIMP(statut='c',typ='I',defaut=4,into=(4,)), GATT_MONERIE =SIMP(statut='c',typ='I',defaut=2,into=(2,)), @@ -498,7 +506,9 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**', #COMMUN# "CAM_CLAY", "BARCELONE", "LAIGLE", - "DRUCKER_PRAGER", + "LETK", + "DRUCK_PRAGER", + "DRUCK_PRAG_N_A", "HOEK_BROWN_EFF", "HOEK_BROWN_TOT", "MAZARS", @@ -513,16 +523,19 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**', #COMMUN# "LIQU_GAZ", # HYDR "HYDR_UTIL", + "HYDR_VGM", "HYDR", "HYDR_ENDO", # MECA_META "ACIER", "ZIRC", # MECA KIT_DDI + "VMIS_CINE_LINE", "VMIS_ISOT_TRAC", "VMIS_ISOT_LINE", "VMIS_ISOT_CINE", "VMIS_ISOT_PUIS", + "GLRC_DM", "GRANGER_FP", "GRANGER_FP_INDT", "GRANGER_FP_V", @@ -533,44 +546,691 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**', #COMMUN# ),), - GAZ =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - LIQU_SATU =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - LIQU_GAZ_ATM =SIMP(statut='c',typ='I',defaut=2,into=(2,)), - LIQU_VAPE_GAZ =SIMP(statut='c',typ='I',defaut=3,into=(3,)), - LIQU_AD_GAZ_VAPE=SIMP(statut='c',typ='I',defaut=3,into=(3,)), - LIQU_VAPE =SIMP(statut='c',typ='I',defaut=3,into=(3,)), - LIQU_GAZ =SIMP(statut='c',typ='I',defaut=2,into=(2,)), - HYDR_UTIL =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - HYDR =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - HYDR_ENDO =SIMP(statut='c',typ='I',defaut=1,into=(1,)), - ACIER =SIMP(statut='c',typ='I',defaut=5,into=(5,)), - ZIRC =SIMP(statut='c',typ='I',defaut=3,into=(3,)), + GAZ =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + LIQU_SATU =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + LIQU_GAZ_ATM =SIMP(statut='c',typ='I',defaut=2,into=(2,)), + LIQU_VAPE_GAZ =SIMP(statut='c',typ='I',defaut=3,into=(3,)), + LIQU_AD_GAZ_VAPE=SIMP(statut='c',typ='I',defaut=3,into=(3,)), + LIQU_VAPE =SIMP(statut='c',typ='I',defaut=3,into=(3,)), + LIQU_GAZ =SIMP(statut='c',typ='I',defaut=2,into=(2,)), + HYDR_UTIL =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + HYDR_VGM =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + HYDR =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + HYDR_ENDO =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + ACIER =SIMP(statut='c',typ='I',defaut=5,into=(5,)), + ZIRC =SIMP(statut='c',typ='I',defaut=3,into=(3,)), + + DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT", + into=("PETIT","PETIT_REAC","SIMO_MIEHE","GREEN_GR","GREEN","COROTATIONNEL", + "REAC_GEOM","EULER_ALMANSI")), + ALGO_C_PLAN =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)), +# b_deborst = BLOC(condition = " ALGO_C_PLAN == 'DEBORST' ", +# fr="Tolérance relative sur la verification des contraintes planes", + RESI_DEBORST =SIMP(statut='f',typ='R',defaut= 1.0E-6), +# ), + ALGO_1D =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)), +# b_dbiter = BLOC(condition = " (ALGO_C_PLAN == 'DEBORST') or (ALGO_1D == 'DEBORST')", +# fr="Nombre d'iterations maximal pour la boucle pour les contraintes planes", + ITER_MAXI_DEBORST =SIMP(statut='f',typ='I',defaut= 1), +# ), + regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),), + TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), + GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), + MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + RESI_INTE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-6), + ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ), + ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ), + RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE", + into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")), + TYPE_MATR_TANG =SIMP(statut='f',typ='TXM',into=("PERTURBATION","VERIFICATION","TANGENTE_SECANTE")), + b_perturb = BLOC(condition = " (TYPE_MATR_TANG != None) and (TYPE_MATR_TANG != 'TANGENTE_SECANTE') ", + fr="Calcul de la matrice tangente par perturbation, valeur de la perturbation", + VALE_PERT_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-5), + ), + b_tangsec = BLOC(condition = " TYPE_MATR_TANG == 'TANGENTE_SECANTE' ", + fr="Modification evolutive de la matrice tangente/secante", + SEUIL =SIMP(statut='f',typ='R',defaut= 3. ), + AMPLITUDE =SIMP(statut='f',typ='R',defaut= 1.5 ), + TAUX_RETOUR =SIMP(statut='f',typ='R',defaut= 0.05 ), + ), + PARM_THETA =SIMP(statut='f',typ='R',defaut= 1. ), + ) ; +#& MODIF COMMUN DATE 06/05/2008 AUTEUR CNGUYEN C.NGUYEN +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2008 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def C_CONTACT() : return FACT(statut='f',max='**', + fr="Définit les zones soumises à des conditions de contact unilatéral avec ou sans frottement", + + + METHODE =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE", + into =("VERIF","CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE","GCP","XFEM") ), +# +# OPTIONS D'APPARIEMENT +# + + APPARIEMENT =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL", + into =("NODAL","MAIT_ESCL")), + + LISSAGE =SIMP(statut='f',typ='TXM',defaut="NON", + into =("OUI","NON")), + + NORMALE =SIMP(statut='f',typ='TXM',defaut="MAIT", + into =("MAIT","MAIT_ESCL","ESCL"),), + + VECT_MAIT =SIMP(statut='f',typ='TXM',defaut="AUTO", + into =("AUTO","FIXE","VECT_Y")), + + b_nmait_fixe =BLOC(condition = "VECT_MAIT == 'FIXE'", + MAIT_FIXE =SIMP(statut='f',typ='R',min=3,max=3), + ), + + b_nmait_vecty =BLOC(condition = "VECT_MAIT == 'VECT_Y'", + MAIT_VECT_Y =SIMP(statut='f',typ='R',min=3,max=3), + ), + + VECT_ESCL =SIMP(statut='f',typ='TXM',defaut="AUTO", + into =("AUTO","FIXE","VECT_Y")), + + b_nescl_fixe =BLOC(condition = "VECT_ESCL == 'FIXE'", + ESCL_FIXE =SIMP(statut='f',typ='R',min=3,max=3), + ), + + b_nescl_vecty =BLOC(condition = "VECT_ESCL == 'VECT_Y'", + ESCL_VECT_Y =SIMP(statut='f',typ='R',min=3,max=3), + ), + + + TYPE_APPA =SIMP(statut='f',typ='TXM',defaut="PROCHE", + into =("PROCHE","FIXE")), + + b_appa_fixe =BLOC(condition = "TYPE_APPA == 'FIXE'", + DIRE_APPA =SIMP(statut='f',typ='R',min=3,max=3), + ), + + b_dist_struct =BLOC(condition = "METHODE != 'CONTINUE' and METHODE != 'XFEM' ", + DIST_POUTRE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")), + DIST_COQUE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")), + b_cara =BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'", + CARA_ELEM =SIMP(statut='o',typ=(cara_elem) ), + ), + ), + + DIST_MAIT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + DIST_ESCL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + + + TOLE_APPA =SIMP(statut='f',typ='R' ,defaut=-1.0), + TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), + + + b_xfem =BLOC(condition = "METHODE == 'XFEM' ", + FISS_MAIT = SIMP(statut='o',typ=fiss_xfem,max=1), + FISS_ESCL = SIMP(statut='f',typ=fiss_xfem,max=1), + SIGN_MAIT = SIMP(statut='f',typ='TXM',into=("+","-",) ), + SIGN_ESCL = SIMP(statut='f',typ='TXM',into=("+","-",) ), + INTEGRATION = SIMP(statut='f',typ='TXM',defaut="FPG4",into=("GAUSS","FPG2","FPG3","FPG4","FPG6","FPG7","NOEUD",) ), + COEF_REGU_CONT = SIMP(statut='f',typ='R',defaut=100.E+0), + ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut=30), + ITER_GEOM_MAXI =SIMP(statut='f',typ='I',defaut=0), + + CONTACT_INIT = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), + ALGO_LAGR = SIMP(statut='f',typ='TXM',defaut="VERSION1",into=("NON","VERSION1","VERSION2" , ) ), + COEF_ECHELLE = SIMP(statut='f',typ='R',defaut=1.E+6), + FROTTEMENT = SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), + GLISSIERE = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), + b_frotxfem =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", + COULOMB = SIMP(statut='o',typ='R',), + ITER_FROT_MAXI = SIMP(statut='f',typ='I',defaut=2), + COEF_REGU_FROT = SIMP(statut='f',typ='R',defaut=100.E+0), + SEUIL_INIT = SIMP(statut='f',typ='R',defaut=0.E+0), + ), + ), + + b_notxfem =BLOC(condition = "METHODE != 'XFEM' ", + regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),), + GROUP_MA_MAIT =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), + MAILLE_MAIT =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + GROUP_MA_ESCL =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), + MAILLE_ESCL =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + ), + + + + b_verif =BLOC(condition = "METHODE == 'VERIF' ", + fr="Paramètres de la méthode sans calcul de contact", + STOP_INTERP =SIMP(statut='f',typ='TXM',defaut="NON", + into=("OUI","NON")), + TOLE_INTERP =SIMP(statut='f',typ='R',defaut = 0.), + + GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), + ), + + b_active =BLOC(condition = "METHODE == 'CONTRAINTE' ", + fr="Paramètres de la méthode des contraintes actives (contact uniquement)", + GLISSIERE =SIMP(statut='f',typ='TXM',defaut="NON", + into=("OUI","NON")), + b_glissiere =BLOC(condition = "GLISSIERE == 'OUI' ", + ALARME_JEU =SIMP(statut='f',typ='R',defaut=0.), + ), + + STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", + into=("OUI","NON")), + NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), + REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", + into=("AUTOMATIQUE","CONTROLE","SANS")), + + b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ", + fr="Paramètre de la réactualisation géométrique", + NB_REAC_GEOM =SIMP(statut='o',typ='I'), + ), + + SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), + + ), + b_lagrangien =BLOC(condition = "METHODE == 'LAGRANGIEN' ", + fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)", + FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), + STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", + into=("OUI","NON")), + NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), + ITER_MULT_MAXI =SIMP(statut='f',typ='I' ,defaut=4), + + REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", + into=("AUTOMATIQUE","CONTROLE","SANS")), + + b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique", + NB_REAC_GEOM =SIMP(statut='o',typ='I'), + + ), + + + SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), + + b_frottement =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", + COULOMB =SIMP(statut='o',typ='R',), + COEF_MATR_FROT =SIMP(statut='f',typ='R',defaut=0.E+0), + ),), + + b_penalisation =BLOC(condition = "METHODE == 'PENALISATION' ", + fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)", + E_N =SIMP(statut='f',typ='R'), + FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), + STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", + into=("OUI","NON")), + NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), + ITER_MULT_MAXI =SIMP(statut='f',typ='I',defaut=4), + + REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", + into=("AUTOMATIQUE","CONTROLE","SANS")), + + b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique", + NB_REAC_GEOM =SIMP(statut='o',typ='I'), + ), + + SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), + + + + b_frottement =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", + COULOMB =SIMP(statut='o',typ='R',), + E_T =SIMP(statut='f',typ='R', + fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"), + COEF_MATR_FROT =SIMP(statut='f',typ='R',defaut=0.E+0), + ),), + + b_continue =BLOC(condition = "METHODE == 'CONTINUE' ", + fr="Paramètres de la méthode continue (contact avec ou sans frottement)", +# regles=(UN_PARMI('GLISSIERE','FROTTEMENT'),), + +# -------------------------------- CHOIX DE LA FORMULATION DE LA METHODE CONTINUE + ALGO_CONT =SIMP(statut='f',typ='TXM',defaut="LAGRANGIEN",into=("LAGRANGIEN","AUGMENTE","STABILISE"),), + b_CONT_LAGR =BLOC(condition = "ALGO_CONT == 'LAGRANGIEN' ",fr="Parametres de la formulation Lagrangienne", + COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),), + b_CONT_STAB =BLOC(condition = "ALGO_CONT == 'STABILISE' ",fr="Parametres du Lagrangien stabilisé", + COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0), + COEF_STAB_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),), + b_CONT_AUGM =BLOC(condition = "ALGO_CONT == 'AUGMENTE' ",fr="Parametres du Lagrangien augmenté", + COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0), + COEF_STAB_CONT =SIMP(statut='f',typ='R',defaut=100.E+0), + COEF_PENA_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),), +# -------------------------------- + GLISSIERE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),), + b_glissiere =BLOC(condition = "GLISSIERE == 'OUI' ", + ALARME_JEU =SIMP(statut='f',typ='R',defaut=0.),), +# -------------------------------- + COMPLIANCE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), + b_compliance =BLOC(condition = "COMPLIANCE == 'OUI' ",fr="Parametres de la compliance", + ASPERITE =SIMP(statut='o',typ='R',), + E_N =SIMP(statut='o',typ='R',), + E_V =SIMP(statut='f',typ='R',defaut=0.E+0),), +# -------------------------------- + FOND_FISSURE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), + b_FOND_FISSURE =BLOC(condition = "FOND_FISSURE == 'OUI' ",fr="TRAITEMENT EN FOND DE FISSURE", + regles=(UN_PARMI('NOEUD_FOND','GROUP_NO_FOND','MAILLE_FOND','GROUP_MA_FOND'),), + NOEUD_FOND =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + GROUP_NO_FOND =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + MAILLE_FOND =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),), +# -------------------------------- + RACCORD_LINE_QUAD=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), + b_RACCORD_SURF =BLOC(condition = "RACCORD_LINE_QUAD == 'OUI' ",fr="TRAITEMENT DU RACCORD SURFACIQUE", + regles=(UN_PARMI('NOEUD_RACC','GROUP_NO_RACC'),), + NOEUD_RACC =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + GROUP_NO_RACC =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),), +# -------------------------------- MOTS-CLEF CONTACT + INTEGRATION =SIMP(statut='f',typ='TXM',defaut="NOEUD", + into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2", + "NCOTES","NCOTES1","NCOTES2"),), + FORMULATION =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE"),), + + ITER_GEOM_MAXI =SIMP(statut='f',typ='I',defaut=2), + ITER_CONT_MAXI =SIMP(statut='f',typ='I',defaut=30), + CONTACT_INIT =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),), +# -------------------------------- détection automatique et exclusion des noeuds impliqués dans le pivot nul + EXCLUSION_PIV_NUL=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),), +# -------------------------------- exclusion manuelle des noeuds impliqués dans le pivot nul; +# prévaut sur la fonctionnalité précédente sans pour autant interférer avec elle + SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + regles =(EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),), +# -------------------------------- MOTS-CLEF FROTTEMENT + FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), + b_frottement =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", + ALGO_FROT =SIMP(statut='f',typ='TXM',defaut="LAGRANGIEN", + into=("LAGRANGIEN","AUGMENTE","STABILISE") ), + b_FROT_LAGR =BLOC(condition = "ALGO_FROT == 'LAGRANGIEN' ",fr="Parametres de la formulation Lagrangienne", + COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),), + b_FROT_STAB =BLOC(condition = "ALGO_FROT == 'STABILISE' ",fr="Parametres du Lagrangien stabilisé", + COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0), + COEF_STAB_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),), + b_FROT_AUGM =BLOC(condition = "ALGO_FROT == 'AUGMENTE' ",fr="Parametres du Lagrangien augmenté", + COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0), + COEF_STAB_FROT =SIMP(statut='f',typ='R',defaut=100.E+0), + COEF_PENA_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),), + COULOMB =SIMP(statut='o',typ='R',), + SANS_NOEUD_FR =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO_FR =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + regles =(EXCLUS('SANS_NOEUD_FR','SANS_GROUP_NO_FR'),), + b_sans_group_no_frot =BLOC(condition = "SANS_GROUP_NO_FR != None or SANS_NO_FR != None", + fr="Direction(s) de frottement à exclure", + EXCL_FROT_1 =SIMP(statut='f',typ='R',min=3,max=3), + EXCL_FROT_2 =SIMP(statut='f',typ='R',min=3,max=3),), + ITER_FROT_MAXI =SIMP(statut='f',typ='I',defaut=2), + SEUIL_INIT =SIMP(statut='f',typ='R',defaut=0.E+0), + USURE =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","ARCHARD",),), + b_usure =BLOC(condition = "USURE == 'ARCHARD' ",fr="Parametres de la loi d'usure d'Archard", + K =SIMP(statut='o',typ='R',), + H =SIMP(statut='o',typ='R',),),),), + + b_gcp =BLOC(condition = "METHODE == 'GCP' ", + fr="Paramètres de la méthode du gradient conjugué projeté (contact uniquement)", + RESI_ABSO =SIMP(statut='o',typ='R', + fr="Critère de convergence (niveau d'interpénétration autorisé)"), + REAC_ITER =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"), + ITER_GCP_MAXI =SIMP(statut='f',typ='I',defaut=0, fr="Nombre d'itérations maximal pour le GCP"), + STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", + into=("OUI","NON")), + REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", + into=("AUTOMATIQUE","CONTROLE","SANS")), + + b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique", + NB_REAC_GEOM =SIMP(statut='o',typ='I'), + + ), + PRE_COND =SIMP(statut='f',typ='TXM',defaut="SANS", + into=("DIRICHLET","SANS"),fr="Choix d'un préconditionneur (accélère la convergence)"), + ITER_PRE_MAXI =SIMP(statut='f',typ='I',defaut=0, fr="Nombre d'itérations maximal pour le préconditionneur"), + COEF_RESI =SIMP(statut='f',typ='R',defaut = 1., + fr="Critère_Convergence_Préconditionneur = COEF_RESI*Critère_Convergence_GCP",), + RECH_LINEAIRE=SIMP(statut='f',typ='TXM',defaut="ADMISSIBLE",into=("ADMISSIBLE","NON_ADMISSIBLE"), + fr="Autorise-t-on de sortir du domaine admissible lors de la recherche linéaire",), + SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), + ), + ); + + + +#& MODIF COMMUN DATE 22/04/2008 AUTEUR ABBAS M.ABBAS +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2008 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +def C_CONTACT_F() : return FACT(statut='f',max='**', + fr="Définit les zones soumises à des conditions de contact unilatéral avec ou sans frottement", + + + METHODE =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE", + into =("VERIF","CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE","GCP","XFEM") ), +# +# OPTIONS D'APPARIEMENT +# + + APPARIEMENT =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL", + into =("NODAL","MAIT_ESCL")), + + LISSAGE =SIMP(statut='f',typ='TXM',defaut="NON", + into =("OUI","NON")), + + NORMALE =SIMP(statut='f',typ='TXM',defaut="MAIT", + into =("MAIT","MAIT_ESCL","ESCL"),), + + VECT_MAIT =SIMP(statut='f',typ='TXM',defaut="AUTO", + into =("AUTO","FIXE","VECT_Y")), + + b_nmait_fixe =BLOC(condition = "VECT_MAIT == 'FIXE'", + MAIT_FIXE =SIMP(statut='f',typ='R',min=3,max=3), + ), + + b_nmait_vecty =BLOC(condition = "VECT_MAIT == 'VECT_Y'", + MAIT_VECT_Y =SIMP(statut='f',typ='R',min=3,max=3), + ), + + VECT_ESCL =SIMP(statut='f',typ='TXM',defaut="AUTO", + into =("AUTO","FIXE","VECT_Y")), + + b_nescl_fixe =BLOC(condition = "VECT_ESCL == 'FIXE'", + ESCL_FIXE =SIMP(statut='f',typ='R',min=3,max=3), + ), + + b_nescl_vecty =BLOC(condition = "VECT_ESCL == 'VECT_Y'", + ESCL_VECT_Y =SIMP(statut='f',typ='R',min=3,max=3), + ), + + + TYPE_APPA =SIMP(statut='f',typ='TXM',defaut="PROCHE", + into =("PROCHE","FIXE")), + + b_appa_fixe =BLOC(condition = "TYPE_APPA == 'FIXE'", + DIRE_APPA =SIMP(statut='f',typ='R',min=3,max=3), + ), + + DIST_POUTRE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")), + DIST_COQUE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")), + DIST_MAIT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + DIST_ESCL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + + b_cara =BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'", + CARA_ELEM =SIMP(statut='o',typ=(cara_elem) ), + ), + + TOLE_APPA =SIMP(statut='f',typ='R' ,defaut=-1.0), + TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), + + + b_xfem =BLOC(condition = "METHODE == 'XFEM' ", + FISS_MAIT = SIMP(statut='o',typ=fiss_xfem,max=1), + FISS_ESCL = SIMP(statut='f',typ=fiss_xfem,max=1), + SIGN_MAIT = SIMP(statut='f',typ='TXM',into=("+","-",) ), + SIGN_ESCL = SIMP(statut='f',typ='TXM',into=("+","-",) ), + INTEGRATION = SIMP(statut='f',typ='TXM',defaut="FPG4",into=("GAUSS","FPG4","FPG6","FPG7",) ), + COEF_REGU_CONT = SIMP(statut='f',typ='R',defaut=100.E+0), + ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut=30), + ITER_GEOM_MAXI =SIMP(statut='f',typ='I',defaut=0), + + CONTACT_INIT = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), + ALGO_LAGR = SIMP(statut='f',typ='TXM',defaut="VERSION1",into=("NON","VERSION1","VERSION2" , ) ), + COEF_ECHELLE = SIMP(statut='f',typ='R',defaut=1.E+6), + FROTTEMENT = SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), + GLISSIERE = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), + b_frotxfem =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", + COULOMB = SIMP(statut='o',typ='R',), + ITER_FROT_MAXI = SIMP(statut='f',typ='I',defaut=2), + COEF_REGU_FROT = SIMP(statut='f',typ='R',defaut=100.E+0), + SEUIL_INIT = SIMP(statut='f',typ='R',defaut=0.E+0), + ), + ), + + b_notxfem =BLOC(condition = "METHODE != 'XFEM' ", + regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),), + GROUP_MA_MAIT =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), + MAILLE_MAIT =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + GROUP_MA_ESCL =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), + MAILLE_ESCL =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + ), + + + + b_verif =BLOC(condition = "METHODE == 'VERIF' ", + fr="Paramètres de la méthode sans calcul de contact", + STOP_INTERP =SIMP(statut='f',typ='TXM',defaut="NON", + into=("OUI","NON")), + TOLE_INTERP =SIMP(statut='f',typ='R',defaut = 0.), + + GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), + ), + + b_active =BLOC(condition = "METHODE == 'CONTRAINTE' ", + fr="Paramètres de la méthode des contraintes actives (contact uniquement)", + GLISSIERE =SIMP(statut='f',typ='TXM',defaut="NON", + into=("OUI","NON")), + b_glissiere =BLOC(condition = "GLISSIERE == 'OUI' ", + ALARME_JEU =SIMP(statut='f',typ='R',defaut=0.), + ), + + STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", + into=("OUI","NON")), + NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), + REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", + into=("AUTOMATIQUE","CONTROLE","SANS")), + + b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ", + fr="Paramètre de la réactualisation géométrique", + NB_REAC_GEOM =SIMP(statut='o',typ='I'), + ), + + SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), + + ), + b_lagrangien =BLOC(condition = "METHODE == 'LAGRANGIEN' ", + fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)", + FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), + STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", + into=("OUI","NON")), + NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), + ITER_MULT_MAXI =SIMP(statut='f',typ='I' ,defaut=4), + + REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", + into=("AUTOMATIQUE","CONTROLE","SANS")), + + b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique", + NB_REAC_GEOM =SIMP(statut='o',typ='I'), + + ), + + + SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), + + b_frottement =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", + COULOMB =SIMP(statut='o',typ='R',), + COEF_MATR_FROT =SIMP(statut='f',typ='R',defaut=0.E+0), + ),), + + b_penalisation =BLOC(condition = "METHODE == 'PENALISATION' ", + fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)", + E_N =SIMP(statut='f',typ='R'), + FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), + STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", + into=("OUI","NON")), + NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), + ITER_MULT_MAXI =SIMP(statut='f',typ='I',defaut=4), + + REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", + into=("AUTOMATIQUE","CONTROLE","SANS")), + + b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique", + NB_REAC_GEOM =SIMP(statut='o',typ='I'), + ), + + SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), + + + + b_frottement =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", + COULOMB =SIMP(statut='o',typ='R',), + E_T =SIMP(statut='f',typ='R', + fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"), + COEF_MATR_FROT =SIMP(statut='f',typ='R',defaut=0.E+0), + ),), + + b_continue =BLOC(condition = "METHODE == 'CONTINUE' ", + fr="Paramètres de la méthode continue (contact avec ou sans frottement)", +# regles=(UN_PARMI('GLISSIERE','FROTTEMENT'),), + +# -------------------------------- CHOIX DE LA FORMULATION DE LA METHODE CONTINUE + ALGO_CONT =SIMP(statut='f',typ='TXM',defaut="LAGRANGIEN",into=("LAGRANGIEN","AUGMENTE","STABILISE"),), + b_CONT_LAGR =BLOC(condition = "ALGO_CONT == 'LAGRANGIEN' ",fr="Parametres de la formulation Lagrangienne", + COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),), + b_CONT_STAB =BLOC(condition = "ALGO_CONT == 'STABILISE' ",fr="Parametres du Lagrangien stabilisé", + COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0), + COEF_STAB_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),), + b_CONT_AUGM =BLOC(condition = "ALGO_CONT == 'AUGMENTE' ",fr="Parametres du Lagrangien augmenté", + COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0), + COEF_STAB_CONT =SIMP(statut='f',typ='R',defaut=100.E+0), + COEF_PENA_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),), +# -------------------------------- + GLISSIERE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),), + b_glissiere =BLOC(condition = "GLISSIERE == 'OUI' ", + ALARME_JEU =SIMP(statut='f',typ='R',defaut=0.),), +# -------------------------------- + COMPLIANCE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), + b_compliance =BLOC(condition = "COMPLIANCE == 'OUI' ",fr="Parametres de la compliance", + ASPERITE =SIMP(statut='o',typ='R',), + E_N =SIMP(statut='o',typ='R',), + E_V =SIMP(statut='f',typ='R',defaut=0.E+0),), +# -------------------------------- + FOND_FISSURE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), + b_FOND_FISSURE =BLOC(condition = "FOND_FISSURE == 'OUI' ",fr="TRAITEMENT EN FOND DE FISSURE", + regles=(UN_PARMI('NOEUD_FOND','GROUP_NO_FOND','MAILLE_FOND','GROUP_MA_FOND'),), + NOEUD_FOND =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + GROUP_NO_FOND =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + MAILLE_FOND =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),), +# -------------------------------- + RACCORD_LINE_QUAD=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), + b_RACCORD_SURF =BLOC(condition = "RACCORD_LINE_QUAD == 'OUI' ",fr="TRAITEMENT DU RACCORD SURFACIQUE", + regles=(UN_PARMI('NOEUD_RACC','GROUP_NO_RACC'),), + NOEUD_RACC =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + GROUP_NO_RACC =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),), +# -------------------------------- MOTS-CLEF CONTACT + INTEGRATION =SIMP(statut='f',typ='TXM',defaut="NOEUD", + into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2", + "NCOTES","NCOTES1","NCOTES2"),), + FORMULATION =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE"),), + + ITER_GEOM_MAXI =SIMP(statut='f',typ='I',defaut=2), + ITER_CONT_MAXI =SIMP(statut='f',typ='I',defaut=30), + CONTACT_INIT =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),), +# -------------------------------- détection automatique et exclusion des noeuds impliqués dans le pivot nul + EXCLUSION_PIV_NUL=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),), +# -------------------------------- exclusion manuelle des noeuds impliqués dans le pivot nul; +# prévaut sur la fonctionnalité précédente sans pour autant interférer avec elle + SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + regles =(EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),), +# -------------------------------- MOTS-CLEF FROTTEMENT + FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), + b_frottement =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", + ALGO_FROT =SIMP(statut='f',typ='TXM',defaut="LAGRANGIEN", + into=("LAGRANGIEN","AUGMENTE","STABILISE") ), + b_FROT_LAGR =BLOC(condition = "ALGO_FROT == 'LAGRANGIEN' ",fr="Parametres de la formulation Lagrangienne", + COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),), + b_FROT_STAB =BLOC(condition = "ALGO_FROT == 'STABILISE' ",fr="Parametres du Lagrangien stabilisé", + COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0), + COEF_STAB_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),), + b_FROT_AUGM =BLOC(condition = "ALGO_FROT == 'AUGMENTE' ",fr="Parametres du Lagrangien augmenté", + COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0), + COEF_STAB_FROT =SIMP(statut='f',typ='R',defaut=100.E+0), + COEF_PENA_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),), + COULOMB =SIMP(statut='o',typ='R',), + SANS_NOEUD_FR =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO_FR =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + regles =(EXCLUS('SANS_NOEUD_FR','SANS_GROUP_NO_FR'),), + b_sans_group_no_frot =BLOC(condition = "SANS_GROUP_NO_FR != None or SANS_NO_FR != None", + fr="Direction(s) de frottement à exclure", + EXCL_FROT_1 =SIMP(statut='f',typ='R',min=3,max=3), + EXCL_FROT_2 =SIMP(statut='f',typ='R',min=3,max=3),), + ITER_FROT_MAXI =SIMP(statut='f',typ='I',defaut=2), + SEUIL_INIT =SIMP(statut='f',typ='R',defaut=0.E+0), + USURE =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","ARCHARD",),), + b_usure =BLOC(condition = "USURE == 'ARCHARD' ",fr="Parametres de la loi d'usure d'Archard", + K =SIMP(statut='o',typ='R',), + H =SIMP(statut='o',typ='R',),),),), + + b_gcp =BLOC(condition = "METHODE == 'GCP' ", + fr="Paramètres de la méthode du gradient conjugué projeté (contact uniquement)", + RESI_ABSO =SIMP(statut='o',typ='R', + fr="Critère de convergence (niveau d'interpénétration autorisé)"), + REAC_ITER =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"), + ITER_GCP_MAXI =SIMP(statut='f',typ='I',defaut=0, fr="Nombre d'itérations maximal pour le GCP"), + STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", + into=("OUI","NON")), + REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", + into=("AUTOMATIQUE","CONTROLE","SANS")), + + b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique", + NB_REAC_GEOM =SIMP(statut='o',typ='I'), - DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT", - into=("PETIT","PETIT_REAC","SIMO_MIEHE","GREEN_GR","GREEN","COROTATIONNEL","REAC_GEOM")), - ALGO_C_PLAN =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)), - b_deborst = BLOC(condition = " ALGO_C_PLAN == 'DEBORST' ", - fr="Tolérance relative sur la verification des contraintes planes", - RESI_DEBORST =SIMP(statut='f',typ='R',defaut= 1.0E-6), - ), - ALGO_1D =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)), - regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),), - TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), - GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), - MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), - RESI_INTE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-6), - ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ), - ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ), - RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE", - into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")), - TYPE_MATR_TANG =SIMP(statut='f',typ='TXM',into=("PERTURBATION","VERIFICATION")), - b_perturb = BLOC(condition = " TYPE_MATR_TANG != None ", - fr="Calcul de la matrice tangente par perturbation, valeur de la perturbation", - VALE_PERT_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-5), - ), - PARM_THETA =SIMP(statut='f',typ='R',defaut= 1. ), - ) ; -#& MODIF COMMUN DATE 07/11/2006 AUTEUR CIBHHLV L.VIVAN + ), + PRE_COND =SIMP(statut='f',typ='TXM',defaut="SANS", + into=("DIRICHLET","SANS"),fr="Choix d'un préconditionneur (accélère la convergence)"), + ITER_PRE_MAXI =SIMP(statut='f',typ='I',defaut=0, fr="Nombre d'itérations maximal pour le préconditionneur"), + COEF_RESI =SIMP(statut='f',typ='R',defaut = 1., + fr="Critère_Convergence_Préconditionneur = COEF_RESI*Critère_Convergence_GCP",), + RECH_LINEAIRE=SIMP(statut='f',typ='TXM',defaut="ADMISSIBLE",into=("ADMISSIBLE","NON_ADMISSIBLE"), + fr="Autorise-t-on de sortir du domaine admissible lors de la recherche linéaire",), + SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), + ), + ); + + + +#& MODIF COMMUN DATE 26/06/2007 AUTEUR REZETTE C.REZETTE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG @@ -759,12 +1419,11 @@ def C_NOM_CHAM_INTO() : return ("ACCE", #COMMUN# "VARI_ELNO_TUYO", "VARI_NOEU", "VARI_NOEU_ELGA", - "VARI_NON_LOCAL", "VITE", "VITE_ABSOLU", "VITE_VENT", ) -#& MODIF COMMUN DATE 04/04/2006 AUTEUR CIBHHLV L.VIVAN +#& MODIF COMMUN DATE 19/05/2008 AUTEUR DELMAS J.DELMAS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2005 EDF R&D WWW.CODE-ASTER.ORG @@ -825,7 +1484,7 @@ def C_NOM_GRANDEUR() : return ( #COMMUN# "ENER_R", "EPSI_F", "EPSI_R", -"ERREUR", +"ERRE_R", "FACY_R", "FELECR", "FISS_R", @@ -962,7 +1621,7 @@ def C_TYPE_CHAM_INTO() : #COMMUN# l.append(typ+"_"+gd) return tuple(l) -#& MODIF COMMANDE DATE 23/04/2007 AUTEUR FLEJOU J-L.FLEJOU +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -980,7 +1639,7 @@ def C_TYPE_CHAM_INTO() : #COMMUN# # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE MJBHHPE J.L.FLEJOU +# RESPONSABLE FLEJOU J-L.FLEJOU AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op= 19,sd_prod=cara_elem, fr="Affectation de caractéristiques à des éléments de structure", reentrant='n', @@ -1086,10 +1745,12 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op= 19,sd_prod=cara_elem, COQUE =FACT(statut='f',max='**', regles=(UN_PARMI('MAILLE','GROUP_MA' ), PRESENT_PRESENT( 'EXCENTREMENT','INER_ROTA' ), + AU_MOINS_UN('EPAIS','EPAIS_F',),PRESENT_ABSENT('EPAIS','EPAIS_F',), EXCLUS('ANGL_REP','VECTEUR'),), MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), - EPAIS =SIMP(statut='o',typ='R' ), + EPAIS =SIMP(statut='f',typ='R' ), + EPAIS_F =SIMP(statut='f',typ=(para_sensi,),min=1 ,max=1 ), ANGL_REP =SIMP(statut='f',typ='R',min=2,max=2), VECTEUR =SIMP(statut='f',typ='R',min=3,max=3), A_CIS =SIMP(statut='c',typ='R',defaut= 0.8333333E0), @@ -1525,7 +2186,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op= 19,sd_prod=cara_elem, ) ; -#& MODIF COMMANDE DATE 10/06/2004 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -1543,6 +2204,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op= 19,sd_prod=cara_elem, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE None AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op= 68,sd_prod=char_acou, fr="Affectation de charges et conditions aux limites acoustiques constantes", reentrant='n', @@ -1584,7 +2246,7 @@ AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op= 68,sd_prod=char_acou, DDL =SIMP(statut='o',typ='TXM',max='**'), ), ) ; -#& MODIF COMMANDE DATE 21/05/2007 AUTEUR FERNANDES R.FERNANDES +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -1602,22 +2264,30 @@ AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op= 68,sd_prod=char_acou, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET -def affe_char_cine_prod(MECA_IMPO,THER_IMPO,ACOU_IMPO,**args): +# RESPONSABLE PELLET J.PELLET +def affe_char_cine_prod(MECA_IMPO,THER_IMPO,ACOU_IMPO,EVOL_IMPO,**args): if MECA_IMPO != None : return char_cine_meca if THER_IMPO != None : return char_cine_ther if ACOU_IMPO != None : return char_cine_acou + if EVOL_IMPO != None : + if AsType(EVOL_IMPO) in (evol_elas,evol_noli) : + return char_cine_meca + elif AsType(EVOL_IMPO) in (evol_ther,) : + return char_cine_ther + else : + raise AsException("Extension à faire ...") + raise AsException("type de concept resultat non prevu") + AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod ,fr="Affectation de conditions aux limites cinématiques constantes pour un traitement sans dualisation", reentrant='n', UIinfo={"groupes":("Modélisation",)}, - regles=(AU_MOINS_UN('MECA_IMPO','THER_IMPO','ACOU_IMPO'), - EXCLUS('MECA_IMPO','THER_IMPO'), - EXCLUS('MECA_IMPO','ACOU_IMPO'), - EXCLUS('THER_IMPO','ACOU_IMPO'),), + regles=(UN_PARMI('MECA_IMPO','THER_IMPO','ACOU_IMPO','EVOL_IMPO'), + ), MODELE =SIMP(statut='o',typ=modele_sdaster ), + EVOL_IMPO =SIMP(statut='f',typ=(evol_noli,evol_elas,evol_ther),fr="Pour imposer tous les ddls d'un evol_xxx"), MECA_IMPO =FACT(statut='f',max='**', regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'), AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI', @@ -1685,19 +2355,19 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod DCZ =SIMP(statut='f',typ='R' ), H1X =SIMP(statut='f',typ='R' ), H1Y =SIMP(statut='f',typ='R' ), - H1Z =SIMP(statut='f',typ='R' ), + H1Z =SIMP(statut='f',typ='R' ), E1X =SIMP(statut='f',typ='R' ), E1Y =SIMP(statut='f',typ='R' ), - E1Z =SIMP(statut='f',typ='R' ), + E1Z =SIMP(statut='f',typ='R' ), E2X =SIMP(statut='f',typ='R' ), E2Y =SIMP(statut='f',typ='R' ), - E2Z =SIMP(statut='f',typ='R' ), + E2Z =SIMP(statut='f',typ='R' ), E3X =SIMP(statut='f',typ='R' ), E3Y =SIMP(statut='f',typ='R' ), - E3Z =SIMP(statut='f',typ='R' ), + E3Z =SIMP(statut='f',typ='R' ), E4X =SIMP(statut='f',typ='R' ), E4Y =SIMP(statut='f',typ='R' ), - E4Z =SIMP(statut='f',typ='R' ), + E4Z =SIMP(statut='f',typ='R' ), V11 =SIMP(statut='f',typ='R' ), V12 =SIMP(statut='f',typ='R' ), V13 =SIMP(statut='f',typ='R' ), @@ -1715,7 +2385,7 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod PRES23 =SIMP(statut='f',typ='R' ), PRES31 =SIMP(statut='f',typ='R' ), PRES32 =SIMP(statut='f',typ='R' ), - PRES33 =SIMP(statut='f',typ='R' ), + PRES33 =SIMP(statut='f',typ='R' ), ), THER_IMPO =FACT(statut='f',max='**', regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'), @@ -1740,7 +2410,7 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 05/09/2005 AUTEUR CIBHHLV L.VIVAN +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -1753,23 +2423,23 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU # GENERAL PUBLIC LICENSE FOR MORE DETAILS. -#fon +# # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE PELLET J.PELLET def affe_char_cine_f_prod(MECA_IMPO,THER_IMPO,**args): if MECA_IMPO != None : return char_cine_meca if THER_IMPO != None : return char_cine_ther raise AsException("type de concept resultat non prevu") -AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_prod, +AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 101,sd_prod=affe_char_cine_f_prod, fr="Affectation de conditions aux limites cinématiques fonction d'un (ou plusieurs) paramètres" +" pour un traitement sans dualisation", reentrant='n', UIinfo={"groupes":("Modélisation",)}, - regles=(AU_MOINS_UN('MECA_IMPO','THER_IMPO'), - EXCLUS('MECA_IMPO','THER_IMPO'),), + regles=(UN_PARMI('MECA_IMPO','THER_IMPO')), MODELE =SIMP(statut='o',typ=modele_sdaster ), MECA_IMPO =FACT(statut='f',max='**', regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'), @@ -1804,7 +2474,7 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_pr ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 21/05/2007 AUTEUR FERNANDES R.FERNANDES +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -1822,7 +2492,7 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_pr # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE G8BHHXD X.DESROCHES +# RESPONSABLE DESROCHES X.DESROCHES AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, fr="Affectation de charges et conditions aux limites mécaniques constantes", reentrant='n', @@ -1831,7 +2501,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, 'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE', 'PRES_REP','FORCE_POUTRE','FORCE_COQUE','LIAISON_OBLIQUE', 'FORCE_ELEC','INTE_ELEC','PESANTEUR','ROTATION','IMPE_FACE', - 'VITE_FACE','TEMP_CALCULEE','RELA_CINE_BP','EPSI_INIT','CONTACT', + 'VITE_FACE','RELA_CINE_BP','EPSI_INIT','CONTACT', 'LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP','LIAISON_SOLIDE', 'LIAISON_ELEM','ONDE_FLUI','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE', 'LIAISON_MAIL','LIAISON_CYCL','FORCE_TUYAU', @@ -1840,8 +2510,6 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, ), VERI_NORM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), MODELE =SIMP(statut='o',typ=(modele_sdaster) ), - TEMP_CALCULEE =SIMP(statut='f',fr="Champ de température issu d'un autre calcul", - typ=(evol_ther,cham_no_sdaster,carte_sdaster) ), EVOL_CHAR =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul", typ=evol_char ), @@ -1919,21 +2587,21 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, DCZ =SIMP(statut='f',typ='R' ), H1X =SIMP(statut='f',typ='R' ), H1Y =SIMP(statut='f',typ='R' ), - H1Z =SIMP(statut='f',typ='R' ), + H1Z =SIMP(statut='f',typ='R' ), E1X =SIMP(statut='f',typ='R' ), E1Y =SIMP(statut='f',typ='R' ), - E1Z =SIMP(statut='f',typ='R' ), + E1Z =SIMP(statut='f',typ='R' ), E2X =SIMP(statut='f',typ='R' ), E2Y =SIMP(statut='f',typ='R' ), - E2Z =SIMP(statut='f',typ='R' ), + E2Z =SIMP(statut='f',typ='R' ), E3X =SIMP(statut='f',typ='R' ), E3Y =SIMP(statut='f',typ='R' ), - E3Z =SIMP(statut='f',typ='R' ), + E3Z =SIMP(statut='f',typ='R' ), E4X =SIMP(statut='f',typ='R' ), E4Y =SIMP(statut='f',typ='R' ), - E4Z =SIMP(statut='f',typ='R' ), + E4Z =SIMP(statut='f',typ='R' ), LAGS_C =SIMP(statut='f',typ='R' ), - V11 =SIMP(statut='f',typ='R' ), + V11 =SIMP(statut='f',typ='R' ), V12 =SIMP(statut='f',typ='R' ), V13 =SIMP(statut='f',typ='R' ), V21 =SIMP(statut='f',typ='R' ), @@ -2000,6 +2668,8 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), SANS_GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), SANS_MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), DX =SIMP(statut='f',typ='R' ), DY =SIMP(statut='f',typ='R' ), DZ =SIMP(statut='f',typ='R' ), @@ -2131,12 +2801,19 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, ), - LIAISON_SOLIDE =FACT(statut='f',fr="Modélise une partie indéformable d'une structure",max='**', - regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),), + LIAISON_SOLIDE =FACT(statut='f',max='**', + fr="Modélise une partie indéformable d'une structure." + +" Les mots clés TRAN et ANGL_NAUT permettent d'imposer le déplacement de la partie indéformable.", + regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'), + ENSEMBLE('CENTRE','ANGL_NAUT'),), GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + TRAN =SIMP(statut='f',typ='R',max=3 ), + ANGL_NAUT =SIMP(statut='f',typ='R',max=3 ), + CENTRE =SIMP(statut='f',typ='R',max=3 ), + DIST_MIN =SIMP(statut='f',typ='R'), NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ), ), @@ -2175,322 +2852,47 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, ), LIAISON_XFEM =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ), - - CONTACT_XFEM =SIMP(statut='f',typ='TXM',defaut="NON" ), + + CONTACT_XFEM =SIMP(statut='f',typ=char_meca,min=1,max=1,), + + +# SIMP(statut='f',typ='TXM',defaut="NON" ), VECT_ASSE =SIMP(statut='f',typ=cham_no_sdaster ), # # LIAISON UNILATERALE -# +# LIAISON_UNILATER=FACT(statut='f',max='**', fr="Définit les zones soumises à des conditions de liaison unilaterale (inegalite sur un DDL)", regles=(UN_PARMI('GROUP_MA','MAILLE','GROUP_NO','NOEUD'),), - + GROUP_MA =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), GROUP_NO =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'), - NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - - NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), - - NOM_CMP =SIMP(statut='o',typ='TXM',max='**'), - - COEF_IMPO =SIMP(statut='f',typ='R'), - COEF_MULT =SIMP(statut='f',typ='R',max='**'), - - METHODE =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE", - into=("CONTRAINTE","GCPC",) ), - - - ), -# -# CONTACT -# - CONTACT =FACT(statut='f',max='**', - fr="Définit les zones soumises à des conditions de contact unilatéral avec ou sans frottement", - - - METHODE =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE", - into=("VERIF","CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE","GCP","XFEM") ), - - APPARIEMENT =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL", - into=("RIGIDE","NODAL","MAIT_ESCL","MAIT_ESCL_SYME")), - RECHERCHE =SIMP(statut='f',typ='TXM',defaut="NOEUD_BOUCLE", - into=("NOEUD_BOUCLE","NOEUD_VOISIN")), - LISSAGE =SIMP(statut='f',typ='TXM',defaut="NON", - into=("OUI","NON")), - DIST_POUTRE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")), - DIST_COQUE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")), - NORMALE =SIMP(statut='f',typ='TXM',defaut="MAIT", - into=("MAIT","MAIT_ESCL")), - - PROJECTION =SIMP(statut='f',typ='TXM',defaut="LINEAIRE", - into=("LINEAIRE","QUADRATIQUE") ), - - - b_xfem =BLOC(condition = "METHODE == 'XFEM' ", - FISS_MAIT = SIMP(statut='o',typ=fiss_xfem,max=1), - FISS_ESCL = SIMP(statut='f',typ=fiss_xfem,max=1), - SIGN_MAIT = SIMP(statut='f',typ='TXM',into=("+","-",) ), - SIGN_ESCL = SIMP(statut='f',typ='TXM',into=("+","-",) ), - INTEGRATION = SIMP(statut='f',typ='TXM',defaut="FPG4",into=("GAUSS","FPG4","FPG6","FPG7",) ), - COEF_REGU_CONT = SIMP(statut='f',typ='R',defaut=100.E+0), - ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut=30), - CONTACT_INIT = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), - ALGO_LAGR = SIMP(statut='f',typ='TXM',defaut="VERSION1",into=("NON","VERSION1","VERSION2" , ) ), - COEF_ECHELLE = SIMP(statut='f',typ='R',defaut=1.E+6), - FROTTEMENT = SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), - GLISSIERE = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), - b_frotxfem =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", - COULOMB = SIMP(statut='o',typ='R',), - ITER_FROT_MAXI = SIMP(statut='f',typ='I',defaut=2), - COEF_REGU_FROT = SIMP(statut='f',typ='R',defaut=100.E+0), - SEUIL_INIT = SIMP(statut='f',typ='R',defaut=0.E+0), - ), - ), - - b_notxfem =BLOC(condition = "METHODE != 'XFEM' ", - regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),), - GROUP_MA_MAIT =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), - MAILLE_MAIT =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), - GROUP_MA_ESCL =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), - MAILLE_ESCL =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), - ), - - b_cara =BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'", - CARA_ELEM =SIMP(statut='o',typ=(cara_elem) ), - ), - - b_verif =BLOC(condition = "METHODE == 'VERIF' ", - fr="Paramètres de la méthode sans calcul de contact", - STOP_INTERP =SIMP(statut='f',typ='TXM',defaut="NON", - into=("OUI","NON")), - TOLE_INTERP =SIMP(statut='f',typ='R',defaut = 0.), - DIST_MAIT =SIMP(statut='f',typ='R'), - DIST_ESCL =SIMP(statut='f',typ='R'), - VECT_NORM_ESCL =SIMP(statut='f',typ='R',max=3), - VECT_ORIE_POU =SIMP(statut='f',typ='R',min=3,max=3), - ), - - b_active =BLOC(condition = "METHODE == 'CONTRAINTE' ", - fr="Paramètres de la méthode des contraintes actives (contact uniquement)", - GLISSIERE =SIMP(statut='f',typ='TXM',defaut="NON", - into=("OUI","NON")), - b_glissiere =BLOC(condition = "GLISSIERE == 'OUI' ", - ALARME_JEU =SIMP(statut='f',typ='R',defaut=0.), - ), - TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), - TOLE_PROJ_INT =SIMP(statut='f',typ='R' ,defaut=0.001), - STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", - into=("OUI","NON")), - NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), - REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", - into=("AUTOMATIQUE","CONTROLE","SANS")), - - b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ", - fr="Paramètre de la réactualisation géométrique", - NB_REAC_GEOM =SIMP(statut='o',typ='I'), - ), - - SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), - VECT_NORM_ESCL =SIMP(statut='f',typ='R',max=3), - VECT_ORIE_POU =SIMP(statut='f',typ='R',min=3,max=3), - DIST_MAIT =SIMP(statut='f',typ='R'), - DIST_ESCL =SIMP(statut='f',typ='R'), - - ), - b_lagrangien =BLOC(condition = "METHODE == 'LAGRANGIEN' ", - fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)", - FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), - TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), - TOLE_PROJ_INT =SIMP(statut='f',typ='R' ,defaut=0.001), - STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", - into=("OUI","NON")), - NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), - ITER_MULT_MAXI =SIMP(statut='f',typ='I' ,defaut=4), - - REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", - into=("AUTOMATIQUE","CONTROLE","SANS")), - - b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique", - NB_REAC_GEOM =SIMP(statut='o',typ='I'), - - ), - - - SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), - DIST_MAIT =SIMP(statut='f',typ='R'), - DIST_ESCL =SIMP(statut='f',typ='R'), - - regles=(EXCLUS('VECT_Y','VECT_ORIE_POU')), - - VECT_Y =SIMP(statut='f',typ='R',min=3,max=3), - VECT_ORIE_POU =SIMP(statut='f',typ='R',min=3,max=3), - b_frottement =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", - COULOMB =SIMP(statut='o',typ='R',), - COEF_MATR_FROT =SIMP(statut='f',typ='R',defaut=0.E+0), - ),), - - b_penalisation =BLOC(condition = "METHODE == 'PENALISATION' ", - fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)", - E_N =SIMP(statut='f',typ='R'), - FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), - TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), - TOLE_PROJ_INT =SIMP(statut='f',typ='R' ,defaut=0.001), - STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", - into=("OUI","NON")), - NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), - ITER_MULT_MAXI =SIMP(statut='f',typ='I',defaut=4), - - REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", - into=("AUTOMATIQUE","CONTROLE","SANS")), - - b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique", - NB_REAC_GEOM =SIMP(statut='o',typ='I'), - ), - SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), - DIST_MAIT =SIMP(statut='f',typ='R'), - DIST_ESCL =SIMP(statut='f',typ='R'), - regles=(EXCLUS('VECT_Y','VECT_ORIE_POU')), - VECT_Y =SIMP(statut='f',typ='R',min=3,max=3), - VECT_ORIE_POU =SIMP(statut='f',typ='R',min=3,max=3), - - b_frottement =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", - COULOMB =SIMP(statut='o',typ='R',), - E_T =SIMP(statut='f',typ='R', - fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"), - COEF_MATR_FROT =SIMP(statut='f',typ='R',defaut=0.E+0), - ),), + NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), - b_continue =BLOC(condition = "METHODE == 'CONTINUE' ", - fr="Paramètres de la méthode continue (contact avec ou sans frottement)", -# regles=(UN_PARMI('GLISSIERE','FROTTEMENT'),), - ALGO_CONT =SIMP(statut='f',typ='TXM',defaut="LAGRANGIEN", - into=("LAGRANGIEN","AUGMENTE","STABILISE") ), - b_CONT_LAGR =BLOC(condition = "ALGO_CONT == 'LAGRANGIEN' ",fr="Parametres de la formulation Lagrangienne", - COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),), - b_CONT_STAB =BLOC(condition = "ALGO_CONT == 'STABILISE' ",fr="Parametres du Lagrangien stabilisé", - COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0), - COEF_STAB_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),), - b_CONT_AUGM =BLOC(condition = "ALGO_CONT == 'AUGMENTE' ",fr="Parametres du Lagrangien augmenté", - COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0), - COEF_STAB_CONT =SIMP(statut='f',typ='R',defaut=100.E+0), - COEF_PENA_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),), - GLISSIERE =SIMP(statut='f',typ='TXM',defaut="NON", - into=("OUI","NON")), - b_glissiere =BLOC(condition = "GLISSIERE == 'OUI' ", - ALARME_JEU =SIMP(statut='f',typ='R',defaut=0.), - ), - FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), - COMPLIANCE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), - FOND_FISSURE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), - RACCORD_LINE_QUAD=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), + NOM_CMP =SIMP(statut='o',typ='TXM',max='**'), - INTEGRATION =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2", - "NCOTES","NCOTES1","NCOTES2")), - FORMULATION =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE")), - DIRE_APPA =SIMP(statut='f',typ='R',max=3,defaut=(0.,0.,0.,)), - ITER_GEOM_MAXI =SIMP(statut='f',typ='I',defaut=2), - ITER_CONT_MAXI =SIMP(statut='f',typ='I',defaut=30), - DIST_MAIT =SIMP(statut='f',typ='R',defaut=0.), - DIST_ESCL =SIMP(statut='f',typ='R',defaut=0.), - VECT_ORIE_POU =SIMP(statut='f',typ='R',min=3,max=3), - TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), - CONTACT_INIT =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), - EXCLUSION_PIV_NUL=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), - b_FOND_FISSURE =BLOC(condition = "FOND_FISSURE == 'OUI' ",fr="TRAITEMENT EN FOND DE FISSURE", - regles=(UN_PARMI('NOEUD_FOND','GROUP_NO_FOND','MAILLE_FOND','GROUP_MA_FOND'),), - NOEUD_FOND =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - GROUP_NO_FOND =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - MAILLE_FOND =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), - GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),), - b_RACCORD_SURF =BLOC(condition = "RACCORD_LINE_QUAD == 'OUI' ",fr="TRAITEMENT DU RACCORD SURFACIQUE", - regles=(UN_PARMI('NOEUD_RACC','GROUP_NO_RACC'),), - NOEUD_RACC =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - GROUP_NO_RACC =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),), - - b_compliance =BLOC(condition = "COMPLIANCE == 'OUI' ",fr="Parametres de la compliance", - ASPERITE =SIMP(statut='o',typ='R',), - E_N =SIMP(statut='o',typ='R',), - E_V =SIMP(statut='f',typ='R',defaut=0.E+0),), - b_frottement =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", - ALGO_FROT =SIMP(statut='f',typ='TXM',defaut="LAGRANGIEN", - into=("LAGRANGIEN","AUGMENTE","STABILISE") ), - b_FROT_LAGR =BLOC(condition = "ALGO_FROT == 'LAGRANGIEN' ",fr="Parametres de la formulation Lagrangienne", - COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),), - b_FROT_STAB =BLOC(condition = "ALGO_FROT == 'STABILISE' ",fr="Parametres du Lagrangien stabilisé", - COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0), - COEF_STAB_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),), - b_FROT_AUGM =BLOC(condition = "ALGO_FROT == 'AUGMENTE' ",fr="Parametres du Lagrangien augmenté", - COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0), - COEF_STAB_FROT =SIMP(statut='f',typ='R',defaut=100.E+0), - COEF_PENA_FROT =SIMP(statut='f',typ='R',defaut=100.E+0),), - COULOMB =SIMP(statut='o',typ='R',), - SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - VECT_Y =SIMP(statut='f',typ='R',min=3,max=3), - VECT_Z =SIMP(statut='f',typ='R',min=3,max=3), - ITER_FROT_MAXI =SIMP(statut='f',typ='I',defaut=2), - SEUIL_INIT =SIMP(statut='f',typ='R',defaut=0.E+0), - USURE =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","ARCHARD",),), - b_usure =BLOC(condition = "USURE == 'ARCHARD' ",fr="Parametres de la loi d'usure d'Archard", - K =SIMP(statut='o',typ='R',), - H =SIMP(statut='o',typ='R',),),),), + COEF_IMPO =SIMP(statut='f',typ='R'), + COEF_MULT =SIMP(statut='f',typ='R',max='**'), - b_gcp =BLOC(condition = "METHODE == 'GCP' ", - fr="Paramètres de la méthode du gradient conjugué projeté (contact uniquement)", - RESI_ABSO =SIMP(statut='o',typ='R', - fr="Critère de convergence (niveau d'interpénétration autorisé)"), - REAC_ITER =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"), - TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), - TOLE_PROJ_INT =SIMP(statut='f',typ='R' ,defaut=0.001), - TOLE_REAC_GEOM =SIMP(statut='f',typ='R' ,defaut=0.05), - STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", - into=("OUI","NON")), - REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", - into=("AUTOMATIQUE","CONTROLE","SANS")), - b_reac_sans =BLOC(condition = "REAC_GEOM == 'SANS' ", - fr="Paramètre de la réactualisation géométrique", - STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="NON", - into=("OUI","NON")), - ), - b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ", - fr="Paramètre de la réactualisation géométrique", - NB_REAC_GEOM =SIMP(statut='o',typ='I'), - - STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="ALARME", - into=("OUI","NON")), - ), - b_reac_auto =BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ", - fr="Paramètre de la réactualisation géométrique auto", - NB_REAC_MAXI =SIMP(statut='o',typ='I',defaut = 10), - ), - PRE_COND =SIMP(statut='f',typ='TXM',defaut="SANS", - into=("DIRICHLET","SANS"),fr="Choix d'un préconditionneur (accélère la convergence)"), - COEF_RESI =SIMP(statut='f',typ='R',defaut = 1.,val_min=1., - fr="Critère_Convergence_Préconditionneur = COEF_RESI*Critère_Convergence_GCP",), - RECH_LINEAIRE=SIMP(statut='f',typ='TXM',defaut="ADMISSIBLE",into=("ADMISSIBLE","NON_ADMISSIBLE"), - fr="Autorise-t-on de sortir du domaine admissible lors de la recherche linéaire",), - SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), - VECT_NORM_ESCL =SIMP(statut='f',typ='R',max=3), - VECT_ORIE_POU =SIMP(statut='f',typ='R',min=3,max=3), - DIST_MAIT =SIMP(statut='f',typ='R'), - DIST_ESCL =SIMP(statut='f',typ='R'), - ), - ), + METHODE =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE", + into=("CONTRAINTE","GCPC",) ), + + ), +# +# CONTACT +# + CONTACT = C_CONTACT(), +# +# FORCES +# FORCE_NODALE =FACT(statut='f',fr="Applique à des noeuds des forces nodales",max='**', regles=(AU_MOINS_UN('GROUP_NO','NOEUD'), AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),), @@ -2565,12 +2967,13 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, PRES_REP =FACT(statut='f',max='**', fr="Applique une pression à un domaine de milieu continu 2D ou 3D, ou à un domaine de coques et tuyaux", - regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'), - PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'), + regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','FISSURE'), + PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','FISSURE'), AU_MOINS_UN('PRES','CISA_2D' ),), TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + FISSURE =SIMP(statut='f',typ=fiss_xfem,min=1,max=100,), PRES =SIMP(statut='f',typ='R' ), CISA_2D =SIMP(statut='f',typ='R' ), ), @@ -2622,6 +3025,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, POIDS_1 =SIMP(statut='f',typ='R'), POIDS_2 =SIMP(statut='f',typ='R'), POIDS_GROSSIER =SIMP(statut='f',typ='R'), + UNITE_GMSH =SIMP(statut='f',typ='I',defaut=0,max=1), POIDS_FIN =SIMP(statut='f',typ='R'),), FORCE_POUTRE =FACT(statut='f',max='**', @@ -2760,24 +3164,8 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, "CDI","CDG") ), VALE_PDC =SIMP(statut='f',typ='R',max='**', fr="valeurs des coefficients de perte de charge singulière",), - APPL_FORC_ARCHI =SIMP(statut='f',typ='TXM',defaut="REPARTIE" , - fr="application de la force d'archimède", - into=("REPARTIE","CDG") ), - APPL_FORC_FPLAQ =SIMP(statut='f',typ='TXM',defaut="REPARTIE" , - fr="application de la force de plaquage dans le guidage continu", - into=("REPARTIE","CDG","ZONE","MILIEU","DISTRI") ), - APPL_FORC_FMEC =SIMP(statut='f',typ='TXM',defaut="REPARTIE" , - fr="application de la force dans le mécanisme de levée", - into=("REPARTIE","CDG","ZONE","PTREP") ), - APPL_FORC_FTG =SIMP(statut='f',typ='TXM',defaut="REPARTIE" , - fr="application de la force tube_guide", - into=("REPARTIE","CDG","ZONE","PTREP") ), DIRE_FORC_FPLAQ =SIMP(statut='f',typ='R',min=3,max=3, fr="direction d'application de la force de plaquage",), - b_CDG =BLOC(condition = "(APPL_FORC_ARCHI == 'CDG') or (APPL_FORC_FPLAQ == 'CDG') or \ - (APPL_FORC_FMEC == 'CDG') or (APPL_FORC_FTG == 'CDG')", - MASS_INER =SIMP(statut='o',typ=table_sdaster ), - ), UNITE_IMPR_FORCE =SIMP(statut='f',typ='I', fr="unité d'impression des forces",), UNITE_IMPR_NOEUD =SIMP(statut='f',typ='I', @@ -2803,6 +3191,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, CABLE_BP =SIMP(statut='o',typ=cabl_precont ), SIGM_BPEL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ), RELA_CINE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), + DIST_MIN =SIMP(statut='f',typ='R'), ), FORCE_ELEC =FACT(statut='f',max='**', @@ -2898,7 +3287,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, ) ; -#& MODIF COMMANDE DATE 24/08/2005 AUTEUR MABBAS M.ABBAS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -2916,7 +3305,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op= 7,sd_prod=char_meca, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE G8BHHXD X.DESROCHES +# RESPONSABLE DESROCHES X.DESROCHES AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op= 7,sd_prod=char_meca, fr="Affectation de charges et conditions aux limites mécaniques complexes", reentrant='n', @@ -2977,25 +3366,25 @@ AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op= 7,sd_prod=char_meca, ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#& MODIF COMMANDE DATE 06/05/2008 AUTEUR CNGUYEN C.NGUYEN # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. # -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. # -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE G8BHHXD X.DESROCHES +# RESPONSABLE DESROCHES X.DESROCHES AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, fr="Affectation de charges et conditions aux limites mécaniques fonction d'un (ou plusieurs) paramètres", reentrant='n', @@ -3005,8 +3394,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, 'PRES_REP','FORCE_POUTRE','VITE_FACE','IMPE_FACE','ONDE_PLANE', 'LIAISON_OBLIQUE','EPSI_INIT','LIAISON_GROUP','LIAISON_UNIF', 'LIAISON_SOLIDE','FORCE_COQUE','LIAISON_COQUE','FORCE_TUYAU', - -'CONTACT','EFFE_FOND','FLUX_THM_REP','LIAISON_UNILATER'),), + 'EFFE_FOND','FLUX_THM_REP','LIAISON_UNILATER'),), VERI_DDL =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), VERI_NORM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), MODELE =SIMP(statut='o',typ=modele_sdaster), @@ -3024,7 +3412,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - LIAISON =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)), + LIAISON =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)), DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), @@ -3042,20 +3430,20 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, DCZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), H1X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), H1Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), - H1Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), + H1Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), E1X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), E1Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), - E1Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), + E1Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), E2X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), E2Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), - E2Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), + E2Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), E3X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), E3Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), - E3Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), + E3Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), E4X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), E4Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), - E4Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), - LAGS_C =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), + E4Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), + LAGS_C =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), ), FACE_IMPO =FACT(statut='f',max='**', @@ -3080,6 +3468,8 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), SANS_GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), SANS_MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), @@ -3095,7 +3485,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, DNOR =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), DTAN =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), ), - + LIAISON_DDL =FACT(statut='f',max='**', fr="Définit une relation linéaire entre des DDLs de deux ou plusieurs noeuds, les valeurs sont fournies par" +" l'intermediaire d'un concept de type fonction", @@ -3122,8 +3512,8 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, DRX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), DRY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), DRZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), - ), - + ), + LIAISON_GROUP =FACT(statut='f',max='**', fr="Définit la meme relation linéaire entre certains DDLs de couples de noeuds, les valeurs sont fournies par" +" l'intermédiaire de concept fonction", @@ -3160,228 +3550,32 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, ), # # LIAISON UNILATERALE -# +# LIAISON_UNILATER=FACT(statut='f',max='**', fr="Définit les zones soumises à des conditions de liaison unilaterale (inegalite sur un DDL)", regles=(UN_PARMI('GROUP_MA','MAILLE','GROUP_NO','NOEUD'),), - + GROUP_MA =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), GROUP_NO =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'), - NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - + NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), - NOM_CMP =SIMP(statut='o',typ='TXM',max='**'), - + NOM_CMP =SIMP(statut='o',typ='TXM',max='**'), + COEF_IMPO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - COEF_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'), + COEF_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'), METHODE =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE", into=("CONTRAINTE","GCPC",) ), - - - ), - CONTACT =FACT(statut='f', - fr="Définit les zones soumises à des conditions de contact unilatéral avec ou \sans frottement, certaines valeurs" - +" sont données par l'intermédiaire de concept fonction",max='**', - regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),), - APPARIEMENT =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL", - into=("NODAL","MAIT_ESCL","MAIT_ESCL_SYME")), - RECHERCHE =SIMP(statut='f',typ='TXM',defaut="NOEUD_BOUCLE",into=("NOEUD_BOUCLE","NOEUD_VOISIN")), - LISSAGE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), - DIST_POUTRE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")), - DIST_COQUE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")), - NORMALE =SIMP(statut='f',typ='TXM',defaut="MAIT",into=("MAIT","MAIT_ESCL")), - METHODE =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE", - into=("CONTRAINTE","VERIF","LAGRANGIEN","PENALISATION","CONTINUE","GCP") ), - PROJECTION =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","QUADRATIQUE") ), - GROUP_MA_MAIT =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), - MAILLE_MAIT =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), - GROUP_MA_ESCL =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), - MAILLE_ESCL =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), - b_cara =BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'", - CARA_ELEM =SIMP(statut='o',typ=(cara_elem) ), - ), - - b_verif =BLOC(condition = "METHODE == 'VERIF' ", - fr="Paramètres de la méthode sans calcul de contact", - STOP_INTERP =SIMP(statut='f',typ='TXM',defaut="NON", - into=("OUI","NON")), - TOLE_INTERP =SIMP(statut='f',typ='R',defaut = 0.), - DIST_MAIT =SIMP(statut='f',typ='R'), - DIST_ESCL =SIMP(statut='f',typ='R'), - VECT_NORM_ESCL =SIMP(statut='f',typ='R',max=3), - VECT_ORIE_POU =SIMP(statut='f',typ='R',min=3,max=3), - ), - - b_active =BLOC(condition = "METHODE == 'CONTRAINTE' ", - fr="Paramètres de la méthode des contraintes actives (contact uniquement)", - GLISSIERE =SIMP(statut='f',typ='TXM',defaut="NON", - into=("OUI","NON")), - b_glissiere =BLOC(condition = "GLISSIERE == 'OUI' ", - ALARME_JEU =SIMP(statut='f',typ='R',defaut=0.), - ), - TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), - TOLE_PROJ_INT =SIMP(statut='f',typ='R' ,defaut=0.001), - STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", - into=("OUI","NON")), - NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), - REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", - into=("AUTOMATIQUE","CONTROLE","SANS")), - - b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ", - fr="Parametre de la reactualisation geometrique", - NB_REAC_GEOM =SIMP(statut='o',typ='I'), - - ), - - SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), - VECT_NORM_ESCL =SIMP(statut='f',typ='R',max=3), - VECT_ORIE_POU =SIMP(statut='f',typ='R',min=3,max=3), - DIST_MAIT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - DIST_ESCL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - ), - b_lagrangien =BLOC(condition = "METHODE == 'LAGRANGIEN' ", - fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)", - FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), - TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), - TOLE_PROJ_INT =SIMP(statut='f',typ='R' ,defaut=0.001), - STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", - into=("OUI","NON")), - NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), - ITER_MULT_MAXI =SIMP(statut='f',typ='I' ,defaut=4), - REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", - into=("AUTOMATIQUE","CONTROLE","SANS")), - - b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Parametre de la reactualisation geometrique", - NB_REAC_GEOM =SIMP(statut='o',typ='I'), - - ), - - SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), - DIST_MAIT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - DIST_ESCL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - regles=(EXCLUS('VECT_Y','VECT_ORIE_POU')), - VECT_Y =SIMP(statut='f',typ='R',min=3,max=3), - VECT_ORIE_POU =SIMP(statut='f',typ='R',min=3,max=3), - b_frottement =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", - COULOMB =SIMP(statut='o',typ='R',), - COEF_MATR_FROT =SIMP(statut='f',typ='R',defaut=0.E+0), - ),), - b_penalisation =BLOC(condition = "METHODE == 'PENALISATION' ", - fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)", - E_N =SIMP(statut='f',typ='R'), - FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), - TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), - TOLE_PROJ_INT =SIMP(statut='f',typ='R' ,defaut=0.001), - STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", - into=("OUI","NON")), - NB_RESOL =SIMP(statut='f',typ='I', defaut=10 ), - ITER_MULT_MAXI =SIMP(statut='f',typ='I',defaut=4), - - REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", - into=("AUTOMATIQUE","CONTROLE","SANS")), - - b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",fr="Paramètre de la réactualisation géométrique", - NB_REAC_GEOM =SIMP(statut='o',typ='I'), - ), - SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), - DIST_MAIT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - DIST_ESCL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - regles=(EXCLUS('VECT_Y','VECT_ORIE_POU')), - VECT_Y =SIMP(statut='f',typ='R',min=3,max=3), - VECT_ORIE_POU =SIMP(statut='f',typ='R',min=3,max=3), - b_frottement =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", - COULOMB =SIMP(statut='o',typ='R',), - E_T =SIMP(statut='f',typ='R', - fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"), - COEF_MATR_FROT =SIMP(statut='f',typ='R',defaut=0.E+0), - ),), - b_continue =BLOC(condition = "METHODE == 'CONTINUE' ", - fr="Paramètres de la méthode continue (contact avec ou sans frottement)", -# regles=(UN_PARMI('GLISSIERE','FROTTEMENT'),), - GLISSIERE =SIMP(statut='f',typ='TXM',defaut="NON", - into=("OUI","NON")), - b_glissiere =BLOC(condition = "GLISSIERE == 'OUI' ", - ALARME_JEU =SIMP(statut='f',typ='R',defaut=0.), - ), - FROTTEMENT =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), - COMPLIANCE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), - INTEGRATION =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2", - "NCOTES","NCOTES1","NCOTES2")), - COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0), - FORMULATION =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE")), - DIRE_APPA =SIMP(statut='f',typ='R',max=3), - ITER_GEOM_MAXI =SIMP(statut='f',typ='I',defaut=2), - ITER_CONT_MAXI =SIMP(statut='f',typ='I',defaut=30), - DIST_MAIT =SIMP(statut='f',typ='R'), - DIST_ESCL =SIMP(statut='f',typ='R'), - CONTACT_INIT =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), - b_compliance =BLOC(condition = "COMPLIANCE == 'OUI' ",fr="Parametres de la compliance", - ASPERITE =SIMP(statut='o',typ='R',), - E_N =SIMP(statut='o',typ='R',), - E_V =SIMP(statut='f',typ='R',defaut=0.E+0),), - b_frottement =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb", - COULOMB =SIMP(statut='o',typ='R',), - SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - VECT_Y =SIMP(statut='f',typ='R',min=3,max=3), - VECT_Z =SIMP(statut='f',typ='R',min=3,max=3), - ITER_FROT_MAXI =SIMP(statut='f',typ='I',defaut=2), - COEF_REGU_FROT =SIMP(statut='f',typ='R',defaut=100.E+0), - SEUIL_INIT =SIMP(statut='f',typ='I',defaut=0),),), + ), - b_gcp =BLOC(condition = "METHODE == 'GCP' ", - fr="Paramètres de la méthode du gradient conjugué projeté (contact uniquement)", - RESI_ABSO =SIMP(statut='o',typ='R', - fr="Critère de convergence (niveau d'interpénétration autorisé)"), - REAC_ITER =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"), - TOLE_PROJ_EXT =SIMP(statut='f',typ='R' ,defaut=0.50), - TOLE_PROJ_INT =SIMP(statut='f',typ='R' ,defaut=0.001), - TOLE_REAC_GEOM =SIMP(statut='f',typ='R' ,defaut=0.05), - STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI", - into=("OUI","NON")), - REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE", - into=("AUTOMATIQUE","CONTROLE","SANS")), - b_reac_sans =BLOC(condition = "REAC_GEOM == 'SANS' ", - fr="Paramètre de la réactualisation géométrique", - - STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="NON", - into=("OUI","NON")), - ), - b_reac_geom =BLOC(condition = "REAC_GEOM == 'CONTROLE' ", - fr="Paramètre de la réactualisation géométrique", - NB_REAC_GEOM =SIMP(statut='o',typ='I'), - - STOP_REAC_GEOM =SIMP(statut='f',typ='TXM',defaut="ALARME", - into=("OUI","NON")), - ), - b_reac_auto =BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ", - fr="Paramètre de la réactualisation géométrique auto", - NB_REAC_MAXI =SIMP(statut='o',typ='I',defaut = 10), - ), - SANS_NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - SANS_GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - SANS_NOEUD_QUAD =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), - VECT_NORM_ESCL =SIMP(statut='f',typ='R',max=3), - VECT_ORIE_POU =SIMP(statut='f',typ='R',min=3,max=3), - DIST_MAIT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - DIST_ESCL =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - ), - ), - LIAISON_UNIF =FACT(statut='f',max='**', fr="Impose une meme valeur (inconnue) à des DDLs d'un ensemble de noeuds", regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),), @@ -3392,14 +3586,21 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, DDL =SIMP(statut='o',typ='TXM',max='**'), ), + LIAISON_SOLIDE =FACT(statut='f',max='**', - fr="Modélise une partie indéformable d'une structure", - regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),), - GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), - MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + fr="Modélise une partie indéformable d'une structure." + +" Les mots clés TRAN et ANGL_NAUT permettent d'imposer le déplacement de la partie indéformable.", + regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'), + ENSEMBLE('CENTRE','ANGL_NAUT'),), GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ), + GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), + MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + TRAN =SIMP(statut='f',typ='R',max=3 ), + ANGL_NAUT =SIMP(statut='f',typ='R',max=3 ), + CENTRE =SIMP(statut='f',typ='R',max=3 ), + DIST_MIN =SIMP(statut='f',typ='R'), + NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ), ), @@ -3473,16 +3674,17 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, FY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), FZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), ), - + PRES_REP =FACT(statut='f',max='**', fr="Applique une pression à un domaine de milieu continu 2D ou 3D ou à un domaine de coques et tuyaux, dont les" +" valeurs imposées (pression et/ou cisaillement) sont fournies par l'intermédiaire d'un concept fonction", - regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'), - PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'), + regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','FISSURE'), + PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','FISSURE'), AU_MOINS_UN('PRES','CISA_2D'),), TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + FISSURE =SIMP(statut='f',typ=fiss_xfem,min=1,max=100,), PRES =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), CISA_2D =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), ), @@ -3513,7 +3715,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, EPXZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), EPYZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), ), - + FORCE_POUTRE =FACT(statut='f',max='**', fr="Applique des forces linéiques sur des éléments de type poutre dont les valeurs sont fournies par" +" l'intermédiaire d'un concept fonction", @@ -3548,7 +3750,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), PRES =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), ), - + FORCE_COQUE =FACT(statut='f',max='**', fr="Applique des forces surfaciques sur des éléments de types coques dont les valeurs sont fournies par" +" l'intermédiaires d'un concept fonction", @@ -3598,8 +3800,8 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, GROUP_NO_2 =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), NOEUD_2 =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), NUME_LAGR =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ), - ), - + ), + VITE_FACE =FACT(statut='f',max='**', fr="Impose des vitesses normales à une face (phénomène ACOUSTIQUE) dont les valeurs sont fournies par" @@ -3648,7 +3850,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -3666,6 +3868,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE None AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther, fr="Affectation de charges et conditions limites thermiques spécifique à CARA_TORSION", reentrant='n', @@ -3681,7 +3884,7 @@ AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther, ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 16/05/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -3699,6 +3902,7 @@ AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DESROCHES X.DESROCHES AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther ,fr="Affectation de charges et conditions aux limites thermiques constantes", reentrant='n', @@ -3885,7 +4089,7 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 03/04/2007 AUTEUR DURAND C.DURAND +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -3903,6 +4107,7 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DESROCHES X.DESROCHES AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=34,sd_prod=char_ther, fr="Affectation de charges et conditions aux limites thermiques fonction d'un (ou plusieurs)" +" paramètres (temps, ...)", @@ -4080,7 +4285,7 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=34,sd_prod=char_ther, INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 28/03/2007 AUTEUR PELLET J.PELLET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -4098,7 +4303,7 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=34,sd_prod=char_ther, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater, fr="Affecter des matériaux à des zones géométriques d'un maillage", reentrant='n', @@ -4114,7 +4319,6 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater, GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), MATER =SIMP(statut='o',typ=mater_sdaster,max=30), - TEMP_REF =SIMP(statut='f',typ='R',defaut= 0.E+0 ), ), # affectation du nom du matériau (par noeuds): @@ -4147,35 +4351,26 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater, regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'), PRESENT_ABSENT('GROUP_MA','TOUT'), PRESENT_ABSENT('MAILLE','TOUT'), - UN_PARMI('EVOL','CHAMP_GD'),), + AU_MOINS_UN('EVOL','CHAMP_GD','VALE_REF'), + EXCLUS('EVOL','CHAMP_GD'), + ), TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), # [défaut] GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), - CHAMP_GD =SIMP(statut='f',typ=cham_gd_sdaster,), - B_CHAMP_GD =BLOC(condition="CHAMP_GD!=None", - NOM_VARC =SIMP(statut='o',typ='TXM', into=("TEMP","CORR","IRRA","HYDR","SECH","M_ACIER","M_ZIRC", + NOM_VARC =SIMP(statut='o',typ='TXM', into=("TEMP","CORR","IRRA","HYDR","SECH","M_ACIER","M_ZIRC", "EPSA","NEUT1","NEUT2")), - ), + CHAMP_GD =SIMP(statut='f',typ=cham_gd_sdaster,), EVOL =SIMP(statut='f',typ=evol_sdaster,), + B_EVOL =BLOC(condition="EVOL!=None", - NOM_VARC =SIMP(statut='o',typ='TXM', into=("TEMP","CORR","IRRA","HYDR","SECH","M_ACIER", - "M_ZIRC","EPSA","NEUT1","NEUT2")), - B_NOM_TEMP =BLOC(condition="NOM_VARC=='TEMP'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'TEMP',),), - B_NOM_CORR =BLOC(condition="NOM_VARC=='CORR'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'CORR',),), - B_NOM_IRRA =BLOC(condition="NOM_VARC=='IRRA'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'IRRA',),), - B_NOM_HYDR =BLOC(condition="NOM_VARC=='HYDR'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'HYDR_ELNO_ELGA',),), - B_NOM_SECH =BLOC(condition="NOM_VARC=='SECH'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'TEMP',),), - B_NOM_EPSA =BLOC(condition="NOM_VARC=='EPSA'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'EPSA_ELNO',),), - B_NOM_M_ACIER =BLOC(condition="NOM_VARC=='M_ACIER'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'META_ELNO_TEMP',),), - B_NOM_M_ZIRC =BLOC(condition="NOM_VARC=='M_ZIRC'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'META_ELNO_TEMP',),), - B_NOM_NEUT1 =BLOC(condition="NOM_VARC=='NEUT1'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'NEUT',),), - B_NOM_NEUT2 =BLOC(condition="NOM_VARC=='NEUT2'",NOM_CHAM=SIMP(statut='f',typ='TXM',defaut= 'NEUT',),), + NOM_CHAM =SIMP(statut='f',typ='TXM'), PROL_DROITE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ), PROL_GAUCHE =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ), + FONC_INST =SIMP(statut='f',typ=(fonction_sdaster,formule)), ), - VALE_REF =SIMP(statut='f',typ='R'), # defaut=0. pour TEMP (fait dans le fortran : op0006.f) + VALE_REF =SIMP(statut='f',typ='R'), ), # mots clés cachés pour les variables de commande NEUTi : @@ -4264,10 +4459,12 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater, CMP_GD =SIMP(statut='c',typ='TXM',max=3,min=3,defaut=("V1","V2","V3")), CMP_VARC =SIMP(statut='c',typ='TXM',max=3,min=3,defaut=("ALPHPUR","ALPHBETA","TZIRC",)), ), + + INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 21/05/2007 AUTEUR FERNANDES R.FERNANDES +#& MODIF COMMANDE DATE 06/05/2008 AUTEUR PELLET J.PELLET # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -4285,7 +4482,7 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE JMBHH01 J.M.PROIX +# RESPONSABLE PELLET J.PELLET AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster, UIinfo={"groupes":("Modélisation",)}, fr="Définir le phénomène physique modélisé et le type d'éléments finis sur le maillage",reentrant='n', @@ -4293,6 +4490,25 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster, MAILLAGE =SIMP(statut='o',typ=(maillage_sdaster) ), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), VERIF =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2,into=("MAILLE","NOEUD") ), +# +#==== +# Définition des grandeurs caractéristiques +#==== +# + GRANDEUR_CARA =FACT(statut='f',max=1, + fr="Grandeurs caractéristiques pour l'adimensionnement des indicateurs d'erreur HM", + ang="Characteristic data for HM error estimators adimensionalisation", +# + LONGUEUR =SIMP(statut='f',typ='R',val_min=0, + fr ="Longueur caractéristique", + ang="Characteristic length",), + PRESSION =SIMP(statut='f',typ='R',val_min=0, + fr ="Pression caractéristique", + ang="Characteristic pressure",), + TEMPERATURE =SIMP(statut='f',typ='R',val_min=0, + fr ="Température caractéristique", + ang="Characteristic temperature",),), +# AFFE_SOUS_STRUC =FACT(statut='f', regles=(UN_PARMI('TOUT','SUPER_MAILLE'),), TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), @@ -4311,190 +4527,191 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster, b_mecanique =BLOC( condition = "PHENOMENE=='MECANIQUE'", fr="modélisations mécaniques", MODELISATION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=( - "2D_DIS_T", - "2D_DIS_TR", - "2D_FLUI_ABSO", - "2D_FLUI_PESA", - "2D_FLUI_STRU", - "2D_FLUIDE", - "3D", - "3D_ABSO", - "3D_FAISCEAU", - "3D_FLUI_ABSO", - "3D_FLUIDE", - "3D_INCO", - "3D_INCO_GD", - "3D_SI", - "3D_GRAD_EPSI", - "3D_GRAD_VARI", - "3D_XFEM", - "3D_JOINT", - "AXIS", - "AXIS_FLUI_STRU", - "AXIS_FLUIDE", - "AXIS_FOURIER", - "AXIS_INCO", - "AXIS_INCO_GD", - "AXIS_NS", - "AXIS_SI", - "AXIS_GRAD_VARI", - "AXIS_JOINT", - "AXIS_ELDI", - "BARRE", - "2D_BARRE", - "C_PLAN", - "C_PLAN_XFEM", - "C_PLAN_NS", - "C_PLAN_SI", - "C_PLAN_GRAD_EPSI", - "CABLE", - "CABLE_POULIE", - "COQUE_3D", - "COQUE_AXIS", - "COQUE_C_PLAN", - "COQUE_D_PLAN", - "D_PLAN", - "D_PLAN_XFEM", - "D_PLAN_GRAD_EPSI", - "D_PLAN_GRAD_VARI", - "D_PLAN_NS", - "PLAN_JOINT", - "PLAN_ELDI", - "D_PLAN_ABSO", - "D_PLAN_INCO", - "D_PLAN_INCO_GD", - "D_PLAN_SI", - "DIS_T", - "DIS_TR", - "DKT", - "DKTG", - "DST", - "FLUI_STRU", - "GRILLE", - "GRILLE_MEMBRANE", - "POU_C_T", - "POU_D_E", - "POU_D_EM", - "POU_D_T", - "POU_D_T_GD", - "POU_D_TG", - "POU_D_TGM", - "Q4G", - "TUYAU_3M", - "TUYAU_6M", - "SHB8", - "D_PLAN_HHM", - "D_PLAN_HM", - "D_PLAN_THH", - "D_PLAN_THHM", - "D_PLAN_THM", - "D_PLAN_HHMD", - "D_PLAN_HH2MD", - "D_PLAN_HMD", - "D_PLAN_THHD", - "D_PLAN_THH2D", - "D_PLAN_THVD", - "D_PLAN_THH2MD", - "D_PLAN_THHMD", - "D_PLAN_THMD", - "D_PLAN_HHMS", - "D_PLAN_HH2MS", - "D_PLAN_HMS", - "D_PLAN_THHS", - "D_PLAN_THH2S", - "D_PLAN_THVS", - "D_PLAN_THH2MS", - "D_PLAN_THHMS", - "D_PLAN_THMS", - "D_PLAN_HM_P", - "D_PLAN_HHD", - "D_PLAN_HHS", - "D_PLAN_HH2D", - "D_PLAN_HH2S", - "AXIS_THH", - "AXIS_THHM", - "AXIS_THM", - "AXIS_HHM", - "AXIS_HM", - "AXIS_HH2MD", - "AXIS_HHMD", - "AXIS_HMD", - "AXIS_THHD", - "AXIS_THH2D", - "AXIS_THVD", - "AXIS_THHMD", - "AXIS_THH2MD", - "AXIS_THMD", - "AXIS_HH2MS", - "AXIS_HHMS", - "AXIS_HMS", - "AXIS_THHS", - "AXIS_THH2S", - "AXIS_THVS", - "AXIS_THHMS", - "AXIS_THH2MS", - "AXIS_THMS", - "AXIS_HHD", - "AXIS_HHS", - "AXIS_HH2D", - "AXIS_HH2S", - "3D_HHM" , - "3D_HM", - "3D_THH", - "3D_THV", - "3D_THHM", - "3D_THM", - "3D_HHMD", - "3D_HMD", - "3D_THHD", - "3D_THVD", - "3D_THHMD", - "3D_THMD", - "3D_HHMS", - "3D_HMS", - "3D_THHS", - "3D_THVS", - "3D_THHMS", - "3D_THMS", - "3D_THH2MD", - "3D_THH2MS", - "3D_HH2MD", - "3D_HH2MS", - "3D_THH2S", - "3D_THH2D", - "3D_HHD", - "3D_HHS", - "3D_HH2D", - "3D_HH2S", - "D_PLAN_2DG", - "D_PLAN_DIL", + "2D_DIS_T", # RESP. : FLEJOU J.L.FLEJOU + "2D_DIS_TR", # RESP. : FLEJOU J.L.FLEJOU + "2D_FLUI_ABSO", # RESP. : DEVESA G.DEVESA + "2D_FLUI_PESA", # RESP. : GREFFET N.GREFFET + "2D_FLUI_STRU", # RESP. : GREFFET N.GREFFET + "2D_FLUIDE", # RESP. : GREFFET N.GREFFET + "3D", # RESP. : DESROCHES X.DESROCHES + "3D_ABSO", # RESP. : DEVESA G.DEVESA + "3D_FAISCEAU", # RESP. : VOLDOIRE F.VOLDOIRE + "3D_FLUI_ABSO", # RESP. : DEVESA G.DEVESA + "3D_FLUIDE", # RESP. : GREFFET N.GREFFET + "3D_INCO", # RESP. : MICHEL S.MICHEL + "3D_INCO_GD", # RESP. : MICHEL S.MICHEL + "3D_SI", # RESP. : DESROCHES X.DESROCHES + "3D_GRAD_EPSI", # RESP. : MICHEL S.MICHEL + "3D_GRAD_VARI", # RESP. : MICHEL S.MICHEL + "3D_XFEM_CONT", # RESP. : GENIAUT S.GENIAUT + "3D_JOINT", # RESP. : LAVERNE J.LAVERNE + "AXIS", # RESP. : LEFEBVRE J.P.LEFEBVRE + "AXIS_FLUI_STRU", # RESP. : GREFFET N.GREFFET + "AXIS_FLUIDE", # RESP. : GREFFET N.GREFFET + "AXIS_FOURIER", # RESP. : DESROCHES X.DESROCHES + "AXIS_INCO", # RESP. : MICHEL S.MICHEL + "AXIS_INCO_GD", # RESP. : MICHEL S.MICHEL + "AXIS_NS", # RESP. : BADEL P.BADEL + "AXIS_SI", # RESP. : DESROCHES X.DESROCHES + "AXIS_GRAD_VARI", # RESP. : MICHEL S.MICHEL + "AXIS_JOINT", # RESP. : LAVERNE J.LAVERNE + "AXIS_ELDI", # RESP. : LAVERNE J.LAVERNE + "BARRE", # RESP. : FLEJOU J.L.FLEJOU + "2D_BARRE", # RESP. : FLEJOU J.L.FLEJOU + "C_PLAN", # RESP. : LEFEBVRE J.P.LEFEBVRE + "C_PLAN_XFEM_CONT",# RESP. : GENIAUT S.GENIAUT + "C_PLAN_NS", # RESP. : BADEL P.BADEL + "C_PLAN_SI", # RESP. : DESROCHES X.DESROCHES + "C_PLAN_GRAD_EPSI",# RESP. : MICHEL S.MICHEL + "CABLE", # RESP. : FLEJOU J.L.FLEJOU + "CABLE_POULIE", # RESP. : None + "COQUE_3D", # RESP. : DESROCHES X.DESROCHES + "COQUE_AXIS", # RESP. : DESROCHES X.DESROCHES + "COQUE_C_PLAN", # RESP. : DESROCHES X.DESROCHES + "COQUE_D_PLAN", # RESP. : DESROCHES X.DESROCHES + "D_PLAN", # RESP. : LEFEBVRE J.P.LEFEBVRE + "D_PLAN_XFEM_CONT",# RESP. : GENIAUT S.GENIAUT + "D_PLAN_GRAD_EPSI",# RESP. : MICHEL S.MICHEL + "D_PLAN_GRAD_VARI",# RESP. : MICHEL S.MICHEL + "D_PLAN_NS", # RESP. : BADEL P.BADEL + "PLAN_JOINT", # RESP. : LAVERNE J.LAVERNE + "PLAN_ELDI", # RESP. : LAVERNE J.LAVERNE + "D_PLAN_ABSO", # RESP. : DEVESA G.DEVESA + "D_PLAN_INCO", # RESP. : MICHEL S.MICHEL + "D_PLAN_INCO_GD", # RESP. : MICHEL S.MICHEL + "D_PLAN_SI", # RESP. : DESROCHES X.DESROCHES + "DIS_T", # RESP. : FLEJOU J.L.FLEJOU + "DIS_TR", # RESP. : FLEJOU J.L.FLEJOU + "DKT", # RESP. : DESROCHES X.DESROCHES + "DKTG", # RESP. : MARKOVIC D.MARKOVIC + "DST", # RESP. : DESROCHES X.DESROCHES + "FLUI_STRU", # RESP. : GREFFET N.GREFFET + "GRILLE_EXCENTRE", # RESP. : ROSPARS C.ROSPARS + "GRILLE_MEMBRANE", # RESP. : ROSPARS C.ROSPARS + "POU_C_T", # RESP. : FLEJOU J.L.FLEJOU + "POU_D_E", # RESP. : FLEJOU J.L.FLEJOU + "POU_D_EM", # RESP. : FLEJOU J.L.FLEJOU + "POU_D_T", # RESP. : FLEJOU J.L.FLEJOU + "POU_D_T_GD", # RESP. : FLEJOU J.L.FLEJOU + "POU_D_TG", # RESP. : FLEJOU J.L.FLEJOU + "POU_D_TGM", # RESP. : FLEJOU J.L.FLEJOU + "Q4G", # RESP. : DESROCHES X.DESROCHES + "TUYAU_3M", # RESP. : PROIX J.M.PROIX + "TUYAU_6M", # RESP. : PROIX J.M.PROIX + "SHB8", # RESP. : DESROCHES X.DESROCHES + "D_PLAN_HHM", # RESP. : GRANET S.GRANET + "D_PLAN_HM", # RESP. : GRANET S.GRANET + "D_PLAN_THH", # RESP. : GRANET S.GRANET + "D_PLAN_THHM", # RESP. : GRANET S.GRANET + "D_PLAN_THM", # RESP. : GRANET S.GRANET + "D_PLAN_HHMD", # RESP. : GRANET S.GRANET + "D_PLAN_HH2MD", # RESP. : GRANET S.GRANET + "D_PLAN_HMD", # RESP. : GRANET S.GRANET + "D_PLAN_THHD", # RESP. : GRANET S.GRANET + "D_PLAN_THH2D", # RESP. : GRANET S.GRANET + "D_PLAN_THVD", # RESP. : GRANET S.GRANET + "D_PLAN_THH2MD", # RESP. : GRANET S.GRANET + "D_PLAN_THHMD", # RESP. : GRANET S.GRANET + "D_PLAN_THMD", # RESP. : GRANET S.GRANET + "D_PLAN_HHMS", # RESP. : GRANET S.GRANET + "D_PLAN_HH2MS", # RESP. : GRANET S.GRANET + "D_PLAN_HMS", # RESP. : GRANET S.GRANET + "D_PLAN_THHS", # RESP. : GRANET S.GRANET + "D_PLAN_THH2S", # RESP. : GRANET S.GRANET + "D_PLAN_THVS", # RESP. : GRANET S.GRANET + "D_PLAN_THH2MS", # RESP. : GRANET S.GRANET + "D_PLAN_THHMS", # RESP. : GRANET S.GRANET + "D_PLAN_THMS", # RESP. : GRANET S.GRANET + "D_PLAN_HM_P", # RESP. : GRANET S.GRANET + "D_PLAN_HHD", # RESP. : GRANET S.GRANET + "D_PLAN_HHS", # RESP. : GRANET S.GRANET + "D_PLAN_HH2D", # RESP. : GRANET S.GRANET + "D_PLAN_HH2S", # RESP. : GRANET S.GRANET + "D_PLAN_2DG", # RESP. : GRANET S.GRANET + "D_PLAN_DIL", # RESP. : GRANET S.GRANET + "AXIS_THH", # RESP. : GRANET S.GRANET + "AXIS_THHM", # RESP. : GRANET S.GRANET + "AXIS_THM", # RESP. : GRANET S.GRANET + "AXIS_HHM", # RESP. : GRANET S.GRANET + "AXIS_HM", # RESP. : GRANET S.GRANET + "AXIS_HH2MD", # RESP. : GRANET S.GRANET + "AXIS_HHMD", # RESP. : GRANET S.GRANET + "AXIS_HMD", # RESP. : GRANET S.GRANET + "AXIS_THHD", # RESP. : GRANET S.GRANET + "AXIS_THH2D", # RESP. : GRANET S.GRANET + "AXIS_THVD", # RESP. : GRANET S.GRANET + "AXIS_THHMD", # RESP. : GRANET S.GRANET + "AXIS_THH2MD", # RESP. : GRANET S.GRANET + "AXIS_THMD", # RESP. : GRANET S.GRANET + "AXIS_HH2MS", # RESP. : GRANET S.GRANET + "AXIS_HHMS", # RESP. : GRANET S.GRANET + "AXIS_HMS", # RESP. : GRANET S.GRANET + "AXIS_THHS", # RESP. : GRANET S.GRANET + "AXIS_THH2S", # RESP. : GRANET S.GRANET + "AXIS_THVS", # RESP. : GRANET S.GRANET + "AXIS_THHMS", # RESP. : GRANET S.GRANET + "AXIS_THH2MS", # RESP. : GRANET S.GRANET + "AXIS_THMS", # RESP. : GRANET S.GRANET + "AXIS_HHD", # RESP. : GRANET S.GRANET + "AXIS_HHS", # RESP. : GRANET S.GRANET + "AXIS_HH2D", # RESP. : GRANET S.GRANET + "AXIS_HH2S", # RESP. : GRANET S.GRANET + "3D_HHM" , # RESP. : GRANET S.GRANET + "3D_HM", # RESP. : GRANET S.GRANET + "3D_THH", # RESP. : GRANET S.GRANET + "3D_THV", # RESP. : GRANET S.GRANET + "3D_THHM", # RESP. : GRANET S.GRANET + "3D_THM", # RESP. : GRANET S.GRANET + "3D_HHMD", # RESP. : GRANET S.GRANET + "3D_HMD", # RESP. : GRANET S.GRANET + "3D_THHD", # RESP. : GRANET S.GRANET + "3D_THVD", # RESP. : GRANET S.GRANET + "3D_THHMD", # RESP. : GRANET S.GRANET + "3D_THMD", # RESP. : GRANET S.GRANET + "3D_HHMS", # RESP. : GRANET S.GRANET + "3D_HMS", # RESP. : GRANET S.GRANET + "3D_THHS", # RESP. : GRANET S.GRANET + "3D_THVS", # RESP. : GRANET S.GRANET + "3D_THHMS", # RESP. : GRANET S.GRANET + "3D_THMS", # RESP. : GRANET S.GRANET + "3D_THH2MD", # RESP. : GRANET S.GRANET + "3D_THH2MS", # RESP. : GRANET S.GRANET + "3D_HH2MD", # RESP. : GRANET S.GRANET + "3D_HH2MS", # RESP. : GRANET S.GRANET + "3D_THH2S", # RESP. : GRANET S.GRANET + "3D_THH2D", # RESP. : GRANET S.GRANET + "3D_HHD", # RESP. : GRANET S.GRANET + "3D_HHS", # RESP. : GRANET S.GRANET + "3D_HH2D", # RESP. : GRANET S.GRANET + "3D_HH2S", # RESP. : GRANET S.GRANET + "VF1", # RESP. : GRANET S.GRANET ) ) ), b_thermique =BLOC( condition = "PHENOMENE=='THERMIQUE'", fr="modélisations thermiques", MODELISATION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=( - "3D", - "3D_DIAG", - "AXIS", - "AXIS_DIAG", - "AXIS_FOURIER", - "COQUE", - "COQUE_AXIS", - "COQUE_PLAN", - "PLAN", - "PLAN_DIAG", + "3D", # RESP. : DURAND C.DURAND + "3D_DIAG", # RESP. : DURAND C.DURAND + "AXIS", # RESP. : DURAND C.DURAND + "AXIS_DIAG", # RESP. : DURAND C.DURAND + "AXIS_FOURIER", # RESP. : DESROCHES X.DESROCHES + "COQUE", # RESP. : DESROCHES X.DESROCHES + "COQUE_AXIS", # RESP. : DESROCHES X.DESROCHES + "COQUE_PLAN", # RESP. : DESROCHES X.DESROCHES + "PLAN", # RESP. : DURAND C.DURAND + "PLAN_DIAG", # RESP. : DURAND C.DURAND ),),), b_acoustique =BLOC( condition = "PHENOMENE=='ACOUSTIQUE'", fr="modélisations acoustiques", MODELISATION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=( - "3D", - "PLAN" + "3D", # RESP. : None + "PLAN" # RESP. : None ), ),), ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -4512,6 +4729,7 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE AIDE=PROC(nom="AIDE",op=42, UIinfo={"groupes":("Modélisation",)}, fr="Interroger et imprimer une documentation partielle sur les noms des concepts déjà définis et sur les couples" @@ -4527,7 +4745,7 @@ AIDE=PROC(nom="AIDE",op=42, into=("TOUT_TYPE","CREER","A_CREER",) ), ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -4545,7 +4763,7 @@ AIDE=PROC(nom="AIDE",op=42, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage_sdaster, fr="Assembler deux maillages pour en former un nouveau", reentrant='n', @@ -4560,7 +4778,7 @@ ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage_sdaster, ), ), ) ; -#& MODIF COMMANDE DATE 18/04/2005 AUTEUR NICOLAS O.NICOLAS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -4578,17 +4796,23 @@ ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=matr_asse_gene_r, +# RESPONSABLE BODEL C.BODEL +def asse_matr_gene_prod(METHODE,**args): + if (METHODE=="INITIAL") : return matr_asse_gene_r + elif (args['OPTION']=="RIGI_GENE_C") : return matr_asse_gene_c + else : return matr_asse_gene_r + +ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=asse_matr_gene_prod, fr="Assemblage des matrices généralisées de macro éléments pour construction de la matrice globale généralisée", reentrant='n', UIinfo={"groupes":("Matrices/vecteurs",)}, NUME_DDL_GENE =SIMP(statut='o',typ=nume_ddl_gene ), METHODE =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","INITIAL") ), b_option =BLOC(condition = "METHODE == 'CLASSIQUE'", - OPTION =SIMP(statut='o',typ='TXM',into=("RIGI_GENE","MASS_GENE","AMOR_GENE") ), + OPTION =SIMP(statut='o',typ='TXM',into=("RIGI_GENE","RIGI_GENE_C","MASS_GENE","AMOR_GENE") ), ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -4606,7 +4830,7 @@ ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=matr_asse_gene_r, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET def asse_matrice_prod(MATR_ELEM,**args): if AsType(MATR_ELEM) == matr_elem_depl_r : return matr_asse_depl_r if AsType(MATR_ELEM) == matr_elem_depl_c : return matr_asse_depl_c @@ -4623,7 +4847,7 @@ ASSE_MATRICE=OPER(nom="ASSE_MATRICE",op=12,sd_prod=asse_matrice_prod, CHAR_CINE =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ), INFO =SIMP(statut='f',typ='I',into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -4641,7 +4865,7 @@ ASSE_MATRICE=OPER(nom="ASSE_MATRICE",op=12,sd_prod=asse_matrice_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=cham_no_sdaster, fr="Construire un champ aux noeuds par assemblage de vecteurs élémentaires",reentrant='n', @@ -4650,7 +4874,7 @@ ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=cham_no_sdaster, NUME_DDL =SIMP(statut='o',typ=nume_ddl_sdaster ), INFO =SIMP(statut='f',typ='I',into=(1,2,) ), ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -4668,6 +4892,7 @@ ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=cham_no_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BODEL C.BODEL ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene, fr="Projection des chargements sur la base modale d'une sous structure", reentrant='n', @@ -4681,7 +4906,7 @@ ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene, ), ), ) ; -#& MODIF COMMANDE DATE 03/01/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -4699,6 +4924,7 @@ ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DEVESA G.DEVESA CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8_sdaster, fr="Création d'une liste d'amortissements modaux calculés selon la règle du RCC-G", reentrant='n', @@ -4740,7 +4966,7 @@ CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8_sdaster, SEUIL =SIMP(statut='f',typ='R',defaut= 0.3 ), ), ) ; -#& MODIF COMMANDE DATE 16/05/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -4758,7 +4984,7 @@ CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE JMBHH01 J.M.PROIX +# RESPONSABLE ASSIRE A.ASSIRE CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=cham_elem, fr="Calculer un champ élémentaire en thermique et en accoustique à partir de champs déjà calculés", @@ -4806,7 +5032,7 @@ CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=cham_elem, MODE_FOURIER =SIMP(statut='f',typ='I',defaut= 0 ), ANGLE =SIMP(statut='f',typ='I',defaut= 0), ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -4824,7 +5050,7 @@ CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=cham_elem, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=cham_no_sdaster, fr="Calcul des seconds membres associés à des charges cinématiques (conditions aux limites non dualisées)", @@ -4835,7 +5061,7 @@ CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=cham_no_sdaster, INST =SIMP(statut='f',typ='R',defaut= 0.E+0 ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ), ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -4853,6 +5079,7 @@ CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=cham_no_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DEVESA G.DEVESA def calc_char_seisme_prod(MATR_MASS,**args ): if AsType(MATR_MASS) == matr_asse_depl_r : return cham_no_sdaster raise AsException("type de concept resultat non prevu") @@ -4872,25 +5099,25 @@ CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op= 92,sd_prod=calc_char_seisme_pr ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 09/05/2007 AUTEUR VIVAN L.VIVAN +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. # -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. # -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE JMBHH01 J.M.PROIX +# RESPONSABLE ASSIRE A.ASSIRE def calc_elem_prod(RESULTAT,**args): if AsType(RESULTAT) != None : return AsType(RESULTAT) raise AsException("type de concept resultat non prevu") @@ -4904,7 +5131,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f', RESULTAT =SIMP(statut='o',typ=resultat_sdaster, fr="Résultat d'une commande globale"), - + regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE', 'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'), CONCEPT_SENSIBLE("SEPARE"), @@ -4922,14 +5149,14 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f', PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-3 ), CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ), LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster), - + TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**', fr="le calcul ne sera effectué que sur ces mailles là"), MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**', fr="le calcul ne sera effectué que sur ces mailles là"), -# definition d'un repere local +# definition d'un repere local REPE_COQUE =FACT(statut='f',max='**', fr="définiton du lieu de post-traitement", @@ -4955,7 +5182,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f', fr="définition du repere de post-traitement, par défaut VECTEUR=(1.,0.,0.)"), ), -# options pour des resultats lineaires +# options pour des resultats lineaires b_lineaire =BLOC( condition = "AsType(RESULTAT) in (evol_elas,dyna_trans,dyna_harmo,mode_meca,\ mode_stat,mode_stat_depl,mode_stat_acce,mode_stat_forc,\ @@ -4975,27 +5202,27 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f', "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELGA_DEPL","EPSG_ELNO_DEPL", "EPME_ELNO_DEPL","EPME_ELGA_DEPL","DEGE_ELNO_DEPL","EPSI_ELNO_TUYO", "EPVC_ELNO","EPVC_ELGA", - # ENER + # ENER "EPOT_ELEM_DEPL","ECIN_ELEM_DEPL","ENEL_ELGA","ENEL_ELNO_ELGA", "ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM", - # estimateurs erreur + # estimateurs erreur "SIGM_NOZ1_ELGA","ERZ1_ELEM_SIGM","SIGM_NOZ2_ELGA","ERZ2_ELEM_SIGM", "SIRE_ELNO_DEPL","ERRE_ELEM_SIGM","ERRE_ELNO_ELEM", "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM", "SING_ELEM","SING_ELNO_ELEM", - # CRIT + # CRIT "EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","CRIT_ELNO_RUPT", "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME", "ENDO_ELGA","ENDO_ELNO_ELGA", "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO", - # derivees + # derivees "DEUL_ELGA_DEPL","DEDE_ELNO_DLDE","DESI_ELNO_DLSI", - # autres + # autres "VALE_NCOU_MAXI","PRES_DBEL_DEPL"),), NOM_CHAM =SIMP(statut='f',typ='TXM',fr="nom du champ pour VALE_NCOU_MAXI", ), NOM_CMP =SIMP(statut='f',typ='TXM',fr="nom de la composante pour VALE_NCOU_MAXI", ), - + b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \ (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \ (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \ @@ -5005,8 +5232,8 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f', b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \ (type(OPTION)==type(()) and 'SING_ELEM' in OPTION)", PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,val_max= 1., - fr="precision demandee pour calculer la carte de taille des elements"),), - + fr="precision demandee pour calculer la carte de taille des elements"),), + EXCIT =FACT(statut='f',max='**', fr="Charges contenant les températures, les efforts répartis pour les poutres...", regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),), @@ -5018,8 +5245,8 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f', PHAS_DEG =SIMP(statut='f',typ='R'), PUIS_PULS =SIMP(statut='f',typ='I'), TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),), - - + + ), # fin bloc b_toutes @@ -5028,7 +5255,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f', OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO_ELGA', fr="option de calcul des contraintes", into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",),), - + b_charge =BLOC( condition = "OPTION in ('SIGM_ELNO_DEPL','SIEF_ELGA_DEPL',) or \ (type(OPTION)==type(()) and 'SIGM_ELNO_DEPL' in OPTION ) or \ (type(OPTION)==type(()) and 'SIEF_ELGA_DEPL' in OPTION ) ", @@ -5037,7 +5264,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f', CHARGE =SIMP(statut='o',typ=char_meca ),), ), ), - + b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'", fr="options de contraintes elasticite poutres, coques, tuyaux", OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO_ELGA', @@ -5045,7 +5272,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f', into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL","SIGM_ELNO_TUYO", "SIPO_ELNO_DEPL","EFGE_ELNO_DEPL","EFGE_ELNO_CART","SIGM_ELNO_CART", "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF"),), - + b_charge =BLOC( condition = "OPTION in ('SIGM_ELNO_DEPL','SIEF_ELGA_DEPL',\ 'SIPO_ELNO_DEPL','EFGE_ELNO_DEPL',) or \ (type(OPTION)==type(()) and 'SIGM_ELNO_DEPL' in OPTION ) or \ @@ -5064,8 +5291,8 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f', PUIS_PULS =SIMP(statut='f',typ='I'), TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),), ), - - + + ), # fin bloc contraintes struct @@ -5100,7 +5327,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ CHARGE =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),), ), ), - + b_crit =BLOC( condition = "TYPE_OPTION=='CRIT'", OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**', into=("EQUI_ELNO_SIGM","EQUI_ELGA_SIGM", @@ -5111,7 +5338,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ EXCIT =FACT(statut='f',max='**',fr="charge contenant les temperatures", CHARGE =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),), ), - + b_derivees =BLOC( condition = "TYPE_OPTION=='DERIVEES'", OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**', into=("DEUL_ELGA_DEPL","DEDE_ELNO_DLDE","DESI_ELNO_DLSI", @@ -5134,7 +5361,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM", "SING_ELEM","SING_ELNO_ELEM", )), - + b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \ (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \ (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \ @@ -5144,16 +5371,15 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \ (type(OPTION)==type(()) and 'SING_ELEM' in OPTION)", PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,val_max=1., - fr="precision demandee pour calculer la carte de taille des elements" ),), + fr="precision demandee pour calculer la carte de taille des elements" ),), EXCIT =FACT(statut='f',max='**',fr="charge contenant les temperatures", CHARGE =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),), ), ), -# fin bloc lineaire - - -# statique ou dynamique non lineaire : evol_noli +# fin bloc lineaire + +# statique ou dynamique non lineaire : evol_noli b_noli =BLOC( condition = "AsType(RESULTAT) == evol_noli",fr="options mecaniques non lineaires", TYPE_OPTION =SIMP(statut='f',typ='TXM',defaut='TOUTES',fr="type d'options mecaniques non lineaires", into=("SIGM_MASSIF","SIGM_STRUCT","EPSI","ENER","CRIT", @@ -5170,7 +5396,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ "DEGE_ELNO_DEPL","EPSI_ELNO_TUYO", "EPSP_ELNO","EPSP_ELGA", "EPFD_ELNO","EPFD_ELGA","EPVC_ELNO","EPVC_ELGA", - "EPFP_ELNO","EPFP_ELGA", + "EPFP_ELNO","EPFP_ELGA", "VARI_ELNO_ELGA","VARI_ELNO_TUYO","VARI_ELNO_COQU","CRIT_ELNO_RUPT", "EXTR_ELGA_VARI","EXTR_ELNO_VARI", # CRIT @@ -5187,22 +5413,10 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ NORME =SIMP(statut='f',typ='TXM',defaut="VMIS", into=("VMIS","TOTAL","VMIS_CINE","TOTAL_CINE"), fr="Type de norme pour les options RADI_ et DCHA_"), - + NOM_CHAM =SIMP(statut='f',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI"), NOM_CMP =SIMP(statut='f',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"), - b_erreur_re=BLOC(condition ="OPTION in ('ERRE_ELEM_SIGM','ERRE_ELNO_ELEM') or \ - (type(OPTION)==type(()) and 'ERRE_ELEM_SIGM' in OPTION) or \ - (type(OPTION)==type(()) and 'ERRE_ELNO_ELEM' in OPTION)", - ERRE_THM =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON", - fr="Indicateur d'erreur spatiale pour les modélisations THM", - ang="Spatial error indicators for THM models"), - b_ERRE_THM=BLOC(condition = "ERRE_THM == 'OUI'", - regles=(ENSEMBLE('LONGUEUR','PRESSION'),), - LONGUEUR=SIMP(statut='o',typ='R',val_min=0.0,fr="Longueur caractéristique du problème"), - PRESSION=SIMP(statut='o',typ='R',val_min=0.0,fr="Pression caractéristique du problème"), - TEMPERATURE=SIMP(statut='f',typ='R',val_min=0.0,fr="Température caractéristique du problème"),),), - b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \ (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \ (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \ @@ -5212,9 +5426,9 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \ (type(OPTION)==type(()) and 'SING_ELEM' in OPTION)", PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,val_max=1., - fr="precision demandee pour calculer la carte de taille des elements" ),), + fr="precision demandee pour calculer la carte de taille des elements" ),), + - b_extr = BLOC( condition = "OPTION in ('EXTR_ELNO_VARI','EXTR_ELGA_VARI')", NOM_VARI =SIMP(statut='o',typ='TXM',min= 1,max=1,fr="nom de la variable à extraire", into=("DPORO","DRHOLQ","DPVP","SATLIQ","EVP","IND_ETA","D","IND_END","TEMP_MAX","GAMP","PCR", @@ -5233,14 +5447,14 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ PUIS_PULS =SIMP(statut='f',typ='I'), TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),), ), - + b_sigm_massif =BLOC( condition = "TYPE_OPTION == 'SIGM_MASSIF'", fr="options de contraintes non lin 2D et 3D", OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**', # contraintes into=( "SIEF_ELNO_ELGA",),), ), - + b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'", fr="options de contraintes non lin poutres, coques", OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**', @@ -5248,7 +5462,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ into=( "SIEF_ELNO_ELGA","EFGE_ELNO_CART","SIGM_ELNO_TUYO","SIGM_ELNO_COQU", "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",),), ), - + b_epsi =BLOC( condition = "TYPE_OPTION=='EPSI'", OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**', into=( "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL", @@ -5264,7 +5478,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ EXCIT =FACT(statut='f',max='**',fr="charge contenant les temperatures", CHARGE =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),), ), - + b_vari =BLOC( condition = "TYPE_OPTION=='VARI'", fr="Calcul et extraction des variables internes", OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**', @@ -5279,7 +5493,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ "RDEV_1","RDEV_2","RDEV_3","RISO","EPSIVPLA","IND_1","IND_2","IND_3","IND_4"),), ), ), - + b_ener =BLOC( condition = "TYPE_OPTION=='ENER'", OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**', into=("ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","ENEL_ELGA","ENEL_ELNO_ELGA",), @@ -5287,7 +5501,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ EXCIT =FACT(statut='f',max='**',fr="charge contenant les temperatures", CHARGE =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),), ), - + b_crit =BLOC( condition = "TYPE_OPTION=='CRIT'", OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**', into=("EQUI_ELNO_SIGM","EQUI_ELGA_SIGM", @@ -5297,7 +5511,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ "PMPB_ELNO_SIEF","PMPB_ELGA_SIEF","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO", ) ), ), - + b_autres =BLOC( condition = "TYPE_OPTION=='AUTRES'", OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**', into=("VALE_NCOU_MAXI",) ), @@ -5314,18 +5528,6 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM", "SING_ELEM","SING_ELNO_ELEM",) ), - b_erreur_re=BLOC(condition ="OPTION in ('ERRE_ELEM_SIGM','ERRE_ELNO_ELEM') or \ - (type(OPTION)==type(()) and 'ERRE_ELEM_SIGM' in OPTION) or \ - (type(OPTION)==type(()) and 'ERRE_ELNO_ELEM' in OPTION)", - ERRE_THM =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON", - fr="Indicateur d'erreur spatiale pour les modélisations THM", - ang="Spatial error indicators for THM models"), - b_ERRE_THM=BLOC(condition = "ERRE_THM == 'OUI'", - regles=(ENSEMBLE('LONGUEUR','PRESSION'),), - LONGUEUR=SIMP(statut='o',typ='R',val_min=0.0,fr="Longueur caractéristique du problème"), - PRESSION=SIMP(statut='o',typ='R',val_min=0.0,fr="Pression caractéristique du problème"), - TEMPERATURE=SIMP(statut='f',typ='R',val_min=0.0,fr="Température caractéristique du problème"),),), - b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \ (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \ (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \ @@ -5335,8 +5537,8 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \ (type(OPTION)==type(()) and 'SING_ELEM' in OPTION)", PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,val_max=1., - fr="precision demandee pour calculer la carte de taille des elements" ),), - + fr="precision demandee pour calculer la carte de taille des elements" ),), + b_indic = BLOC( condition ="OPTION in ('DCHA_ELNO_SIGM','DCHA_ELGA_SIGM','RADI_ELNO_SIGM','RADI_ELGA_SIGM') or\ (type(OPTION)==type(()) and 'DCHA_ELNO_SIGM' in OPTION) or\ (type(OPTION)==type(()) and 'DCHA_ELGA_SIGM' in OPTION) or\ @@ -5349,7 +5551,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ ), # fin bloc evol_noli -# thermique : evol_ther, fourier_ther +# thermique : evol_ther, fourier_ther b_ther =BLOC( condition = "AsType(RESULTAT) in (evol_ther,fourier_ther,)" ,fr="options thermiques", OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**', into=("DEUL_ELGA_TEMP","DETE_ELNO_DLTE","FLUX_ELGA_TEMP","FLUX_ELNO_TEMP", @@ -5367,8 +5569,8 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),), ), ), - -# acoustique + +# acoustique b_acou =BLOC( condition = "AsType(RESULTAT) in (acou_harmo,mode_acou,)",fr="options acoustiques", OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**', into=("PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG", @@ -5385,14 +5587,14 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ PUIS_PULS =SIMP(statut='f',typ='I'), TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),), ), - + SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**', fr="Liste des paramètres de sensibilité.", ang="List of sensitivity parameters"), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 16/10/2006 AUTEUR JMBHH01 J.M.PROIX +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -5410,6 +5612,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ANGLES J.ANGLES def calc_fatigue_prod(TYPE_CALCUL,OPTION,**args): if TYPE_CALCUL == "CUMUL_DOMMAGE" : return cham_elem if TYPE_CALCUL == "FATIGUE_MULTI" and OPTION == "DOMA_ELGA": return cham_elem @@ -5451,6 +5654,8 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant OPTION =SIMP(statut='o',typ='TXM',into=("DOMA_ELGA","DOMA_NOEUD") ), RESULTAT =SIMP(statut='o',typ=(evol_elas, evol_noli) ), CHAM_MATER =SIMP(statut='o',typ=(cham_mater) ), + MAILLAGE =SIMP(statut='o',typ=maillage_sdaster ), + regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),), GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**' ), MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**' ), GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**' ), @@ -5471,14 +5676,11 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant DELTA_OSCI =SIMP(statut='f',typ='R',defaut= 0.0E+0), ), ), - b_fati_grmano =BLOC(condition = "(GROUP_MA != None or MAILLE != None or GROUP_NO != None or NOEUD != None)", - MAILLAGE =SIMP(statut='o',typ=maillage_sdaster ), - ), ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -5496,6 +5698,7 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ADOBES A.ADOBES CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu_sdaster, reentrant='n', fr="Calculer les paramètres modaux d'une structure soumise à un écoulement", @@ -5522,7 +5725,7 @@ CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu_sdaster, DEFORMEE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ), ), ) ; -#& MODIF COMMANDE DATE 02/05/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -5540,6 +5743,7 @@ CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE COURTOIS M.COURTOIS def calc_fonc_interp_prod(FONCTION, NOM_PARA_FONC, **args): if AsType(FONCTION) == nappe_sdaster: return nappe_sdaster @@ -5547,6 +5751,8 @@ def calc_fonc_interp_prod(FONCTION, NOM_PARA_FONC, **args): return fonction_sdaster elif AsType(FONCTION) == fonction_c: return fonction_c + elif AsType(FONCTION) == formule_c: + return fonction_c elif AsType(FONCTION) == formule: if NOM_PARA_FONC != None: return nappe_sdaster @@ -5580,7 +5786,7 @@ CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=calc_fonc_interp_pr TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ), ) ; -#& MODIF COMMANDE DATE 09/02/2007 AUTEUR GREFFET N.GREFFET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -5598,10 +5804,10 @@ CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=calc_fonc_interp_pr # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE MCOURTOI M.COURTOIS +# RESPONSABLE COURTOIS M.COURTOIS from Macro.calc_fonction_ops import calc_fonction_ops def calc_fonction_prod(self,DERIVE,EXTRACTION,INTEGRE,INVERSE,COMB,COMB_C, - ENVELOPPE,SPEC_OSCI,ASSE,FFT,COMPOSE,CORR_ACCE,PUISSANCE, + ENVELOPPE,FRACTILE,SPEC_OSCI,ASSE,FFT,COMPOSE,CORR_ACCE,PUISSANCE, LISS_ENVELOP,ABS, **args): if (INTEGRE != None): return fonction_sdaster @@ -5626,6 +5832,7 @@ def calc_fonction_prod(self,DERIVE,EXTRACTION,INTEGRE,INVERSE,COMB,COMB_C, raise AsException("CALC_FONCTION/COMB_C : pas de types hétérogènes nappe/fonction") return fonction_c if (ENVELOPPE != None): return AsType(ENVELOPPE[0]['FONCTION']) + if (FRACTILE != None): return AsType(FRACTILE[0] ['FONCTION']) if (EXTRACTION != None): return fonction_sdaster if (SPEC_OSCI != None): return nappe_sdaster if (COMPOSE != None): return fonction_sdaster @@ -5646,7 +5853,7 @@ CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_foncti UIinfo={"groupes":("Fonction",)}, regles=(UN_PARMI('DERIVE','INTEGRE','SPEC_OSCI','COMB','COMB_C','ENVELOPPE', 'COMPOSE','EXTRACTION','ASSE','FFT','CORR_ACCE', 'PUISSANCE', - 'LISS_ENVELOP','INVERSE','ABS'),), + 'LISS_ENVELOP','INVERSE','ABS','FRACTILE'),), FFT =FACT(statut='f',fr="Transformée de Fourier ou de son inverse", FONCTION =SIMP(statut='o',typ=(fonction_sdaster,fonction_c) ), METHODE =SIMP(statut='f',typ='TXM',defaut="PROL_ZERO",into=("PROL_ZERO","TRONCATURE","COMPLET") ), @@ -5708,11 +5915,15 @@ CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_foncti FONCTION =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ), CRITERE =SIMP(statut='f',typ='TXM',defaut="SUP",into=("SUP","INF"),fr="Type de l enveloppe" ), ), + FRACTILE =FACT(statut='f',fr="Fractile d une famille de fonctions ou de nappes", + FONCTION =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ), + FRACT =SIMP(statut='o',typ='R',defaut=1.,val_min=0.,val_max=1.,fr="Valeur du fractile" ), + ), ASSE =FACT(statut='f',fr="Concatenation de fonctions", FONCTION =SIMP(statut='o',typ=fonction_sdaster,min=2,max=2 ), SURCHARGE =SIMP(statut='f',typ='TXM',defaut="DROITE",into=("DROITE","GAUCHE")), ), - CORR_ACCE =FACT(statut='f',fr="Correction d un accelerogramme reel", + CORR_ACCE =FACT(statut='f',fr="Correction d un accelerogramme reel", CORR_DEPL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), FONCTION =SIMP(statut='o',typ=fonction_sdaster ), ), @@ -5734,7 +5945,7 @@ CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_foncti PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -5752,6 +5963,7 @@ CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_foncti # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE GREFFET N.GREFFET CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene, fr="Calculer l'effet de surpression hydrodynamique due au mouvement d'entrainement de la structure" +" en analyse sismique", @@ -5807,7 +6019,7 @@ CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene, ), ) ; -#& MODIF COMMANDE DATE 31/10/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 13/05/2008 AUTEUR GALENNE E.GALENNE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG @@ -5825,6 +6037,7 @@ CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE GALENNE E.GALENNE CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster, fr="Calcul du taux de restitution d'énergie par la méthode theta en thermo-élasticité" +" et les facteurs d'intensité de contraintes.", @@ -5833,24 +6046,25 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster, regles=(EXCLUS('COMP_ELAS','COMP_INCR'), CONCEPT_SENSIBLE("ENSEMBLE"), REUSE_SENSIBLE(), - DERIVABLE('RESULTAT'), - EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST', - 'TOUT_MODE','NUME_MODE','LIST_MODE','FREQ','LIST_FREQ',),), + DERIVABLE('RESULTAT'),), THETA =FACT(statut='o', THETA =SIMP(statut='f',typ=(theta_geom,cham_no_sdaster),), FOND_FISS =SIMP(statut='f',typ=fond_fiss,max=1), FISSURE =SIMP(statut='f',typ=fiss_xfem,max=1), - regles=(EXCLUS('FOND_FISS','FISSURE'),), - b_theta =BLOC(condition="THETA == None",fr="calcul de theta", + DTAN_ORIG =SIMP(statut='f',typ='R',max='**'), + DTAN_EXTR =SIMP(statut='f',typ='R',max='**'), + regles=(EXCLUS('FOND_FISS','FISSURE'), + EXCLUS('FOND_FISS','DTAN_ORIG'), + EXCLUS('FOND_FISS','DTAN_EXTR'),), + b_theta =BLOC(condition="THETA == None",fr="calcul de theta", regles=(UN_PARMI('R_INF','R_INF_FO'), - EXCLUS('MODULE','MODULE_FO'), PRESENT_PRESENT('R_INF','R_SUP'), - PRESENT_PRESENT('R_INF_FO','R_SUP_FO'), ), + PRESENT_PRESENT('R_INF_FO','R_SUP_FO'), ), NUME_FOND =SIMP(statut='f',typ='I',defaut=1), R_INF =SIMP(statut='f',typ='R'), R_SUP =SIMP(statut='f',typ='R'), - MODULE =SIMP(statut='f',typ='R'), + MODULE =SIMP(statut='f',typ='R',defaut=1.), DIRE_THETA =SIMP(statut='f',typ=cham_no_sdaster ), DIRECTION =SIMP(statut='f',typ='R',max='**'), R_INF_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), @@ -5859,23 +6073,33 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster, ), ), - RESULTAT =SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,mode_meca),), + RESULTAT =SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,mode_meca,mult_elas),), - TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ), - NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'), - LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster), - INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'), - LIST_INST =SIMP(statut='f',typ=listr8_sdaster), - TOUT_MODE =SIMP(statut='f',typ='TXM',into=("OUI",) ), - NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'), - LIST_MODE =SIMP(statut='f',typ=listis_sdaster), - LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster), - FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'), - - b_acce_reel =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)", - PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-6), - CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ), + b_no_mult =BLOC(condition="(AsType(RESULTAT) != mult_elas)", + regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST', + 'TOUT_MODE','NUME_MODE','LIST_MODE','FREQ','LIST_FREQ'),), + + TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ), + NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'), + LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster), + INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'), + LIST_INST =SIMP(statut='f',typ=listr8_sdaster), + TOUT_MODE =SIMP(statut='f',typ='TXM',into=("OUI",) ), + NUME_MODE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'), + LIST_MODE =SIMP(statut='f',typ=listis_sdaster), + LIST_FREQ =SIMP(statut='f',typ=listr8_sdaster), + FREQ =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'), + + b_acce_reel =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)", + PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-6), + CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ), + ), + ), + + b_mult_elas =BLOC(condition="(AsType(RESULTAT) == mult_elas)", + NOM_CAS =SIMP(statut='f',typ='TXM',validators=NoRepeat() ), ), + EXCIT =FACT(statut='f',max='**', CHARGE =SIMP(statut='f',typ=(char_meca,char_cine_meca)), @@ -5886,10 +6110,11 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster, COMP_ELAS =FACT(statut='f', RELATION =SIMP(statut='f',typ='TXM',defaut="ELAS", - into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC") ), - ELAS =SIMP(statut='f',typ='I',defaut=1,into=(1,) ), - ELAS_VMIS_LINE =SIMP(statut='f',typ='I',defaut=1,into=(1,) ), - ELAS_VMIS_TRAC =SIMP(statut='f',typ='I',defaut=1,into=(1,) ), + into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS") ), + ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,) ), + ELAS_VMIS_LINE =SIMP(statut='c',typ='I',defaut=1,into=(1,) ), + ELAS_VMIS_TRAC =SIMP(statut='c',typ='I',defaut=1,into=(1,) ), + ELAS_VMIS_PUIS =SIMP(statut='c',typ='I',defaut=1,into=(1,) ), DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","GREEN") ), regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),), TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), @@ -5898,7 +6123,7 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster, ), COMP_INCR =FACT(statut='f', RELATION =SIMP(statut='f',typ='TXM',defaut="ELAS", - into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE") ), + into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE","ELAS_VMIS_PUIS") ), ELAS =SIMP(statut='f',typ='I',defaut=1,into=(1,) ), VMIS_ISOT_TRAC =SIMP(statut='f',typ='I',defaut=2,into=(2,) ), VMIS_ISOT_LINE =SIMP(statut='f',typ='I',defaut=2,into=(2,) ), @@ -5922,7 +6147,7 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster, OPTION =SIMP(statut='o',typ='TXM',max=1,defaut='CALC_G', into=("CALC_G","CALC_G_GLOB","CALC_K_G","K_G_MODA","G_MAX","G_MAX_GLOB","G_BILI", - "G_BILI_GLOB","G_LAGR","G_LAGR_GLOB","CALC_K_MAX"),), + "G_BILI_GLOB","CALC_K_MAX"),), b_g_max =BLOC(condition="(OPTION=='G_MAX') or (OPTION=='G_MAX_GLOB')", BORNES =FACT(statut='o',max='**', @@ -5938,9 +6163,6 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster, ), ), - PROPAGATION =SIMP(statut='f',typ='R'), - THETA_LAGR =SIMP(statut='f',typ=theta_geom), - DIRE_THETA_LAGR =SIMP(statut='f',typ=cham_no_sdaster), SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**', fr="Liste des paramètres de sensibilité.", ang="List of sensitivity parameters"), @@ -5948,7 +6170,7 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster, TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ); -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -5966,6 +6188,7 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ZENTNER I.ZENTNER CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=table_fonction, fr="Calcul d'une matrice interspectrale à partir d'une fonction du temps", reentrant='n', @@ -5979,7 +6202,7 @@ CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=table_fonction, TITRE =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1 , 2) ), ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -5997,6 +6220,7 @@ CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=table_fonction, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE GREFFET N.GREFFET CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r, fr="Calcul des matrices de masse, d'amortissement ou de rigidité ajoutés", reentrant='n', @@ -6042,7 +6266,7 @@ CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r, ), ), ) ; -#& MODIF COMMANDE DATE 16/05/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -6060,11 +6284,10 @@ CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET def calc_matr_elem_prod(OPTION,**args): if OPTION == "RIGI_MECA" : return matr_elem_depl_r if OPTION == "RIGI_FLUI_STRU" : return matr_elem_depl_r - if OPTION == "RIGI_MECA_LAGR" : return matr_elem_depl_r if OPTION == "MASS_ID_MDEP_R" : return matr_elem_depl_r if OPTION == "MASS_ID_MDNS_R" : return matr_elem_depl_r if OPTION == "MASS_ID_MTEM_R" : return matr_elem_temp_r @@ -6073,6 +6296,7 @@ def calc_matr_elem_prod(OPTION,**args): if OPTION == "MASS_FLUI_STRU" : return matr_elem_depl_r if OPTION == "RIGI_GEOM" : return matr_elem_depl_r if OPTION == "RIGI_ROTA" : return matr_elem_depl_r + if OPTION == "MECA_GYRO" : return matr_elem_depl_r if OPTION == "AMOR_MECA" : return matr_elem_depl_r if OPTION == "IMPE_MECA" : return matr_elem_depl_r if OPTION == "ONDE_FLUI" : return matr_elem_depl_r @@ -6094,10 +6318,9 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op= 9,sd_prod=calc_matr_elem_prod into=("RIGI_MECA","MASS_MECA","RIGI_GEOM", "AMOR_MECA","RIGI_THER","MASS_THER","IMPE_MECA", "ONDE_FLUI","AMOR_MECA_ABSO","MASS_FLUI_STRU","RIGI_FLUI_STRU", - "RIGI_ROTA","MASS_MECA_DIAG","RIGI_ACOU", + "RIGI_ROTA","MECA_GYRO","MASS_MECA_DIAG","RIGI_ACOU", "MASS_ID_MDEP_R","MASS_ID_MDNS_R","MASS_ID_MTEM_R","MASS_ID_MTNS_R", - "MASS_ACOU","AMOR_ACOU","RIGI_MECA_HYST", - "RIGI_MECA_LAGR") ), + "MASS_ACOU","AMOR_ACOU","RIGI_MECA_HYST") ), # mots clés facultatifs que l'on a du mal à mettre dans les blocs # sans gener MACRO_MATR_ASSE : @@ -6116,14 +6339,6 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op= 9,sd_prod=calc_matr_elem_prod CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ), ), - b_rigi_meca_lagr =BLOC(condition = "OPTION=='RIGI_MECA_LAGR'", - MODELE =SIMP(statut='o',typ=modele_sdaster ), - CHAM_MATER =SIMP(statut='o',typ=cham_mater ), - CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ), - THETA =SIMP(statut='o',typ=theta_geom ), - PROPAGATION =SIMP(statut='f',typ='R',defaut= 0.E+0 ), - ), - b_mass_meca =BLOC(condition = "(OPTION=='MASS_MECA') or (OPTION=='MASS_MECA_DIAG')", regles=(AU_MOINS_UN('MODELE','CHARGE'),), MODELE =SIMP(statut='f',typ=modele_sdaster ), @@ -6154,6 +6369,13 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op= 9,sd_prod=calc_matr_elem_prod CHARGE =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**' ), ), + b_meca_gyro = BLOC( condition = "OPTION=='MECA_GYRO'", + MODELE =SIMP(statut='o',typ=modele_sdaster ), + CHAM_MATER =SIMP(statut='o',typ=cham_mater ), + CARA_ELEM =SIMP(statut='o',typ=cara_elem ), + CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ), + ), + b_amor_meca =BLOC(condition = "OPTION=='AMOR_MECA'", regles=(AU_MOINS_UN('CARA_ELEM','RIGI_MECA'), ENSEMBLE('RIGI_MECA','MASS_MECA','CHAM_MATER'), ), @@ -6234,7 +6456,7 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op= 9,sd_prod=calc_matr_elem_prod CHARGE =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**' ), ), ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -6252,6 +6474,7 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op= 9,sd_prod=calc_matr_elem_prod # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE CANO V.CANO CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,reentrant='o', UIinfo={"groupes":("Post traitements",)}, fr="Calcule l'évolution métallurgique à partir du résultat d'un calcul thermique", @@ -6284,7 +6507,7 @@ CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,reentrant='o', OPTION =SIMP(statut='f',typ='TXM' ,into=("META_ELNO_TEMP",) ), ) ; -#& MODIF COMMANDE DATE 09/05/2007 AUTEUR VIVAN L.VIVAN +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -6302,7 +6525,7 @@ CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,reentrant='o', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE G8BHHXD X.DESROCHES +# RESPONSABLE DESROCHES X.DESROCHES def calc_no_prod(RESULTAT,**args): if AsType(RESULTAT) != None : return AsType(RESULTAT) raise AsException("type de concept resultat non prevu") @@ -6387,7 +6610,7 @@ CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,reentrant='o', GROUP_NO_RESU =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), NOEUD_RESU =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'), ) ; -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG @@ -6405,7 +6628,7 @@ CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,reentrant='o', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE ASSIRE A.ASSIRE +# RESPONSABLE MICHEL S.MICHEL from Macro.calc_precont_ops import calc_precont_ops @@ -6491,16 +6714,14 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli, ARRET =SIMP(statut='f',typ='TXM',defaut="OUI"), ), ETAT_INIT =FACT(statut='f', - regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI','VARI_NON_LOCAL',), + regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',), EXCLUS('EVOL_NOLI','DEPL',), EXCLUS('EVOL_NOLI','SIGM',), EXCLUS('EVOL_NOLI','VARI',), - EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',), EXCLUS('NUME_ORDRE','INST'), ), DEPL =SIMP(statut='f',typ=cham_no_sdaster), SIGM =SIMP(statut='f',typ=(carte_sdaster,cham_elem)), VARI =SIMP(statut='f',typ=cham_elem), - VARI_NON_LOCAL =SIMP(statut='f',typ=cham_no_sdaster), EVOL_NOLI =SIMP(statut='f',typ=evol_noli), NUME_ORDRE =SIMP(statut='f',typ='I'), INST =SIMP(statut='f',typ='R'), @@ -6531,34 +6752,6 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli, ), SYME =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ), ), - SOLV_NON_LOCAL =FACT(statut='f', - METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ), - b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale", - RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ), - ), - b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT", - RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ), - ), - b_ldlt_mult =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ", - fr="Paramètres relatifs à la non inversibilité de la matrice à factorise", - NPREC =SIMP(statut='f',typ='I',defaut= 8 ), - STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), - ), - b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué", - PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC",),defaut="LDLT_INC" ), - NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ), - RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ), - NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ), - ), - EPS =SIMP(statut='f',typ='R',defaut= 0.E+0 ), - ), - LAGR_NON_LOCAL =FACT(statut='f', - ITER_DUAL_MAXI =SIMP(statut='f',typ='I',defaut= 50), - RESI_DUAL_ABSO =SIMP(statut='o',typ='R'), - RESI_PRIM_ABSO =SIMP(statut='o',typ='R'), - R =SIMP(statut='f',typ='R',defaut= 1000.), - ITER_PRIM_MAXI =SIMP(statut='f',typ='I',defaut= 10), - ), INFO =SIMP(statut='f',typ='I',into=(1,2) ), TITRE =SIMP(statut='f',typ='TXM',max='**' ), @@ -6568,7 +6761,7 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli, COMP_INCR =C_COMP_INCR(), ) ; -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2005 EDF R&D WWW.CODE-ASTER.ORG @@ -6587,8 +6780,7 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== # -*- coding: iso-8859-1 -*- - -# RESPONSABLE MCOURTOI M.COURTOIS +# RESPONSABLE COURTOIS M.COURTOIS def calc_table_prod(self, TABLE, ACTION, **kargs): """Typage du concept produit. @@ -6615,7 +6807,7 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod, ACTION = FACT(statut='o', max='**', fr = "Suite des opérations à effectuer sur la table", OPERATION = SIMP(statut='o', typ='TXM', - into=('FILTRE', 'EXTR', 'RENOMME', 'TRI', 'COMB', 'OPER',)), + into=('FILTRE', 'EXTR', 'RENOMME', 'TRI', 'COMB', 'AJOUT', 'OPER',)), b_filtre = BLOC(condition="OPERATION == 'FILTRE'", fr="Sélectionne les lignes de la table vérifiant un critère", @@ -6625,13 +6817,13 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod, 'VIDE','NON_VIDE','MAXI','ABS_MAXI','MINI','ABS_MINI'),), b_vale = BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))", regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),), - VALE = SIMP(statut='f',typ='R'), - VALE_I = SIMP(statut='f',typ='I'), - VALE_C = SIMP(statut='f',typ='C'), - VALE_K = SIMP(statut='f',typ='TXM'), + VALE = SIMP(statut='f',typ='R',max='**'), + VALE_I = SIMP(statut='f',typ='I',max='**'), + VALE_C = SIMP(statut='f',typ='C',max='**'), + VALE_K = SIMP(statut='f',typ='TXM',max='**'), ), b_regexp = BLOC(condition = "CRIT_COMP == 'REGEXP'", - VALE_K = SIMP(statut='f',typ='TXM'), + VALE_K = SIMP(statut='f',typ='TXM',max='**'), ), b_crit = BLOC(condition = "CRIT_COMP in ('EQ','NE')", CRITERE = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ), @@ -6667,6 +6859,13 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod, "pour que les colonnes soient combinées"), ), + b_append = BLOC(condition="OPERATION == 'AJOUT'", + fr="Ajoute une ligne à la table initiale", + NOM_PARA = SIMP(statut='o',typ='TXM',max='**', + fr="Noms des paramètres dont les valeurs sont fournies sous VALE"), + VALE = SIMP(statut='o',typ=assd,max='**', fr='Valeurs des paramètres'), + ), + b_oper = BLOC(condition="OPERATION == 'OPER'", fr="Applique une formule dans laquelle les variables sont les paramètres de la table", FORMULE = SIMP(statut='o',typ=formule, @@ -6683,7 +6882,7 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod, fr="Titre de la table produite"), INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) -#& MODIF COMMANDE DATE 05/03/2007 AUTEUR GALENNE E.GALENNE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -6701,6 +6900,7 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE GALENNE E.GALENNE CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,reentrant='n', UIinfo={"groupes":("Post traitements",)}, fr="Définir un champ theta pour le calcul du taux de restitution d'énergie" @@ -6748,7 +6948,68 @@ CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,reentrant='n', FORMAT =SIMP(statut='f',typ='TXM',defaut="EXCEL",into=("EXCEL","AGRAF") ), ), ) ; -#& MODIF COMMANDE DATE 12/03/2007 AUTEUR DEVESA G.DEVESA +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== +# RESPONSABLE ABBAS M.ABBAS + +CALCUL=OPER(nom="CALCUL",op=26,sd_prod=table_container,reentrant='n', + UIinfo={"groupes":("Résolution",)}, + fr="Calculer des objets élémentaires comme une matrice tangente, intégrer une loi de comportement, etc...", + OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="COMPORTEMENT", + into=( "COMPORTEMENT","MATR_TANG_ELEM","FORC_INT_ELEM"),), + MODELE =SIMP(statut='o',typ=modele_sdaster), + CARA_ELEM =SIMP(statut='f',typ=cara_elem), + CHAM_MATER =SIMP(statut='o',typ=cham_mater), + EXCIT =FACT(statut='o',max='**', + CHARGE =SIMP(statut='o',typ=(char_meca,char_cine_meca)), + FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE", + into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")), + ), + DEPL =SIMP(statut='o',typ=cham_no_sdaster ), + INCR_DEPL =SIMP(statut='o',typ=cham_no_sdaster ), + SIGM =SIMP(statut='o',typ=cham_elem), + VARI =SIMP(statut='o',typ=cham_elem), + INCREMENT =FACT(statut='o', + LIST_INST =SIMP(statut='o',typ=listr8_sdaster), + NUME_ORDRE =SIMP(statut='o',typ='I'),), + COMP_INCR =C_COMP_INCR(), + COMP_ELAS =FACT(statut='f',max='**', + RESI_INTE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-6), + ITER_INTE_MAXI =SIMP(statut='f',typ='I',defaut= 10 ), + ITER_INTE_PAS =SIMP(statut='f',typ='I',defaut= 0 ), + RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE", + into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")), + RELATION =SIMP(statut='o',typ='TXM',defaut="ELAS", + into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC", + "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")), + ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + ELAS_VMIS_TRAC =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + ELAS_VMIS_LINE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + ELAS_HYPER =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + ELAS_POUTRE_GR =SIMP(statut='c',typ='I',defaut=3,into=(3,)), + CABLE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + DEFORMATION =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GREEN","GREEN_GR",) ),), + INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), +) ; + +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -6766,10 +7027,9 @@ CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,reentrant='n', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET def calc_vect_elem_prod(OPTION,**args): if OPTION == "CHAR_MECA" : return vect_elem_depl_r - if OPTION == "CHAR_MECA_LAGR" : return vect_elem_depl_r if OPTION == "CHAR_THER" : return vect_elem_temp_r if OPTION == "CHAR_ACOU" : return vect_elem_pres_c if OPTION == "FORC_NODA" : return vect_elem_depl_r @@ -6779,7 +7039,7 @@ CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,reentr UIinfo={"groupes":("Matrices/vecteurs",)}, fr="Calcul des seconds membres élémentaires", OPTION =SIMP(statut='o',typ='TXM',into=("CHAR_MECA","CHAR_THER","CHAR_ACOU", - "FORC_NODA","CHAR_MECA_LAGR") ), + "FORC_NODA") ), b_char_meca =BLOC(condition = "OPTION=='CHAR_MECA'", regles=(AU_MOINS_UN('CHARGE','MODELE'),), CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'), @@ -6814,17 +7074,9 @@ CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,reentr SIEF_ELGA =SIMP(statut='o',typ=cham_elem), CARA_ELEM =SIMP(statut='f',typ=cara_elem), MODELE =SIMP(statut='f',typ=modele_sdaster), - ), - - b_meca_lagr =BLOC(condition = "OPTION=='CHAR_MECA_LAGR'", - CHAM_MATER =SIMP(statut='o',typ=cham_mater), - THETA =SIMP(statut='o',typ=theta_geom), - PROPAGATION =SIMP(statut='f',typ='R',defaut= 0.E+0 ), - CHARGE =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'), - INST =SIMP(statut='f',typ='R',defaut= 0.E+0 ), - ), + ), ) ; -#& MODIF COMMANDE DATE 12/09/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -6842,7 +7094,7 @@ CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,reentr # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE G8BHHXD X.DESROCHES +# RESPONSABLE DESROCHES X.DESROCHES COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier, reentrant='n',fr="Recombiner les modes de Fourier d'une SD Résultat dans des directions particulières", UIinfo={"groupes":("Post traitements",)}, @@ -6851,7 +7103,7 @@ COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier, NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=6, into=("DEPL","REAC_NODA","SIEF_ELGA_DEPL","EPSI_ELNO_DEPL","SIGM_ELNO_DEPL","TEMP","FLUX_ELNO_TEMP"),), ) ; -#& MODIF COMMANDE DATE 29/01/2007 AUTEUR PELLET J.PELLET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -6869,7 +7121,7 @@ COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET def comb_matr_asse_prod(COMB_R,COMB_C,CALC_AMOR_GENE,**args): if COMB_C != None: type_mat = AsType(COMB_C[0]['MATR_ASSE']) @@ -6913,7 +7165,7 @@ COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op= 31,sd_prod=comb_matr_asse_prod, ), SANS_CMP =SIMP(statut='f',typ='TXM',into=("LAGR",) ), ) ; -#& MODIF COMMANDE DATE 03/01/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -6931,6 +7183,7 @@ COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op= 31,sd_prod=comb_matr_asse_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE AUDEBERT S.AUDEBERT COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat, fr="Réponse sismique par recombinaison modale par une méthode spectrale", reentrant='n', @@ -6959,9 +7212,13 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat, EXCIT =FACT(statut='o',max='**', regles=(UN_PARMI('MONO_APPUI','NOEUD','GROUP_NO'), - UN_PARMI('AXE','TRI_AXE','TRI_SPEC' ),), + UN_PARMI('AXE','TRI_AXE','TRI_SPEC' ), + UN_PARMI('MONO_APPUI','MULTI_APPUI' ),), - MONO_APPUI =SIMP(statut='f',typ='TXM',into=("OUI",) ), + MONO_APPUI =SIMP(statut='f',typ='TXM',into=("OUI",), + fr="excitation imposée unique" ), + MULTI_APPUI =SIMP(statut='f',typ='TXM',into=("CORRELE","DECORRELE",), + fr="excitations décorrélés en multi-appuis: cumul sur les modes puis sur les appuis" ), NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), AXE =SIMP(statut='f',typ='R',max=3,fr="Excitation suivant un seul axe",), @@ -7027,8 +7284,7 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat, ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 12/09/2006 AUTEUR REZETTE C.REZETTE -# RESPONSABLE VABHHTS J.PELLET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -7046,6 +7302,7 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE PELLET J.PELLET def crea_champ_prod(TYPE_CHAM,**args): if TYPE_CHAM[0:5] == "CART_" : return carte_sdaster @@ -7058,7 +7315,7 @@ def crea_champ_prod(TYPE_CHAM,**args): CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod, - fr="Création d'un champ ",reentrant='n', + fr="Création d'un champ ",reentrant='f', UIinfo={"groupes":("Résultats et champs",)}, TYPE_CHAM =SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO()), # TYPE_CHAM doit etre de la forme : CART_xx, NOEU_xx, ELEM_xx, ELGA_xx ou ELNO_xx @@ -7221,8 +7478,7 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod, INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ), TITRE =SIMP(statut='f',typ='TXM',max='**' ), ) ; -#& MODIF COMMANDE DATE 13/12/2006 AUTEUR PELLET J.PELLET -# RESPONSABLE MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 19/05/2008 AUTEUR PELLET J.PELLET # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -7240,32 +7496,15 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE PELLET J.PELLET CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster, reentrant='n',fr="Crée un maillage à partir d'un maillage existant", UIinfo={"groupes":("Maillage",)}, - regles=(EXCLUS('ECLA_PG','CREA_MAILLE'), - EXCLUS('ECLA_PG','CREA_GROUP_MA'), - EXCLUS('ECLA_PG','DETR_GROUP_MA'), - EXCLUS('ECLA_PG','MODI_MAILLE'), - EXCLUS('ECLA_PG','LINE_QUAD'), - EXCLUS('ECLA_PG','CREA_FISS'), - EXCLUS('ECLA_PG','COQU_VOLU'), - EXCLUS('LINE_QUAD','MODI_MAILLE'), - EXCLUS('LINE_QUAD','CREA_MAILLE'), - EXCLUS('LINE_QUAD','CREA_GROUP_MA'), - EXCLUS('LINE_QUAD','DETR_GROUP_MA'), - EXCLUS('LINE_QUAD','CREA_FISS'), - EXCLUS('LINE_QUAD','COQU_VOLU'), - EXCLUS('CREA_FISS','MODI_MAILLE'), - EXCLUS('CREA_FISS','CREA_MAILLE'), - EXCLUS('CREA_FISS','CREA_GROUP_MA'), - EXCLUS('CREA_FISS','DETR_GROUP_MA'), - EXCLUS('CREA_FISS','COQU_VOLU'), - EXCLUS('COQU_VOLU','MODI_MAILLE'), - EXCLUS('COQU_VOLU','CREA_MAILLE'), - EXCLUS('COQU_VOLU','CREA_GROUP_MA'), - EXCLUS('COQU_VOLU','DETR_GROUP_MA'), - ), + regles=(EXCLUS('COQU_VOLU', 'CREA_FISS', 'CREA_GROUP_MA', 'CREA_MAILLE', 'CREA_POI1', + 'DETR_GROUP_MA', 'ECLA_PG', 'HEXA20_27', 'LINE_QUAD', 'MODI_MAILLE', + 'QUAD_LINE', 'REPERE','RESTREINT'),), + + # le MAILLAGE est inutile si ECLA_PG MAILLAGE =SIMP(statut='f',typ=maillage_sdaster ), @@ -7301,6 +7540,12 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster, NB_MAILLE =SIMP(statut='f',typ='I',defaut= 0, fr="Nombre minimal de mailles que doit contenir le groupe pour etre détruit", ), ), + RESTREINT =FACT(statut='f',fr="Restreindre un maillage à des groupes de mailles",max=1, + GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'), + TOUT_GROUP_MA =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),), + GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + TOUT_GROUP_NO =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),), + ), COQU_VOLU =FACT(statut='f', fr="Creation de mailles volumiques à partir de mailles surfaciques", NOM =SIMP(statut='o',typ='TXM'), @@ -7345,6 +7590,14 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster, PREF_NOEUD =SIMP(statut='f',typ='TXM',defaut="NS"), PREF_NUME =SIMP(statut='f',typ='I',defaut= 1 ), ), + HEXA20_27 =FACT(statut='f',fr="Passage HEXA20 -> HEXA27", + regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),), + TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), + MAILLE =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), + GROUP_MA =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), + PREF_NOEUD =SIMP(statut='f',typ='TXM',defaut="NS"), + PREF_NUME =SIMP(statut='f',typ='I',defaut= 1 ), + ), QUAD_LINE =FACT(statut='f',fr="Passage quadratique -> linéaire", regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),), TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), @@ -7376,7 +7629,7 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster, # INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 28/03/2007 AUTEUR PELLET J.PELLET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -7394,6 +7647,7 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE def crea_resu_prod(TYPE_RESU,**args): if TYPE_RESU == "EVOL_ELAS" : return evol_elas if TYPE_RESU == "EVOL_NOLI" : return evol_noli @@ -7409,9 +7663,12 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f', UIinfo={"groupes":("Modélisation",)}, fr="Créer ou enrichir une structure de donnees resultat à partir de champs aux noeuds", - OPERATION =SIMP(statut='o',typ='TXM',into=("AFFE","ECLA_PG","PERM_CHAM","PROL_RTZ","PREP_VRC1","PREP_VRC2",), + OPERATION =SIMP(statut='o',typ='TXM',into=("AFFE","ASSE","ECLA_PG","PERM_CHAM","PROL_RTZ","PREP_VRC1","PREP_VRC2",), fr="choix de la fonction a activer",), + + # Création par affectation de champs : + #------------------------------------- b_affe =BLOC(condition = "OPERATION == 'AFFE'", TYPE_RESU =SIMP(statut='o',position='global',typ='TXM',into=("MULT_ELAS","EVOL_ELAS","EVOL_NOLI","FOURIER_ELAS", @@ -7444,6 +7701,18 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f', ), ), + + # Création par assemblage d'evol_ther : + #----------------------------------------- + b_asse =BLOC(condition = "OPERATION == 'ASSE'", + TYPE_RESU =SIMP(statut='o',position='global',typ='TXM',into=("EVOL_THER",) ), + ASSE =FACT(statut='o',max='**', + RESULTAT =SIMP(statut='o',typ=evol_ther), + TRANSLATION =SIMP(statut='f',typ='R',defaut= 0. ), + ), + ), + + b_ecla_pg =BLOC(condition = "OPERATION == 'ECLA_PG'", TYPE_RESU =SIMP(statut='o',typ='TXM',into=("EVOL_ELAS","EVOL_NOLI","EVOL_THER"), ), @@ -7467,6 +7736,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f', ), ), + b_perm_cham =BLOC(condition = "OPERATION == 'PERM_CHAM'", TYPE_RESU =SIMP(statut='o',typ='TXM',into=("EVOL_NOLI",) ), @@ -7481,7 +7751,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f', PERM_CHAM =FACT(statut='o',max='**', GROUP_MA_FINAL =SIMP(statut='o',typ=grma), GROUP_MA_INIT =SIMP(statut='o',typ=grma), - TRAN =SIMP(statut='o',typ='R',max='**'), + TRAN =SIMP(statut='o',typ='R',min=3,max=3), PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-3), ), ), @@ -7535,7 +7805,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f', ), ), ) ; -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG @@ -7553,6 +7823,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE COURTOIS M.COURTOIS def crea_table_prod(TYPE_TABLE, **args): """Typage du concept résultat @@ -7599,7 +7870,7 @@ CREA_TABLE=OPER(nom="CREA_TABLE",op=36,sd_prod=crea_table_prod, -#& MODIF COMMANDE DATE 05/02/2007 AUTEUR PELLET J.PELLET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG @@ -7617,7 +7888,8 @@ CREA_TABLE=OPER(nom="CREA_TABLE",op=36,sd_prod=crea_table_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# ====================================================================== +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE + DEBUG=PROC(nom="DEBUG",op=137, UIinfo={"groupes":("Utilitaires",)}, fr="Permettre de changer entre 2 commandes quelques variables globales de debug", @@ -7631,7 +7903,7 @@ DEBUG=PROC(nom="DEBUG",op=137, IMPR_MACRO =SIMP(fr="affichage des sous-commandes produites par les macros dans le fichier mess", statut='f',typ='TXM',into=("OUI","NON")), ); -#& MODIF COMMANDE DATE 19/02/2007 AUTEUR LEFEBVRE J-P.LEFEBVRE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -7649,6 +7921,7 @@ DEBUG=PROC(nom="DEBUG",op=137, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,repetable='n', UIinfo={"groupes":("Gestion du travail",)}, fr="Ouverture d'une étude. Allocation des ressources mémoire et disque et fichiers", @@ -7682,12 +7955,11 @@ DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,repetable='n', UNITE =SIMP(statut='f',typ='I'), ), - CODE =FACT(fr="définition d un nom pour l'ensemble d'une étude", + CODE =FACT(fr="définition d'un nom pour l'ensemble d'une étude", statut='f',min=1,max=1, NOM =SIMP(statut='o',typ='TXM'), NIV_PUB_WEB =SIMP(statut='o',typ='TXM',into=('INTERNET','INTRANET')), VISU_EFICAS =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI'), - UNITE =SIMP(statut='f',typ='I',defaut=15), ), ERREUR =FACT(fr="comportement en cas d'erreur",statut='f',min=1,max=1, @@ -7714,15 +7986,20 @@ DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,repetable='n', PARTITION =SIMP(statut='f',typ='R'), DYNAMIQUE =SIMP(statut='f',typ='I'), ), - RESERVE_CPU =FACT(fr="reserve de temps pour terminer une execution",statut='f',max=1, + + RESERVE_CPU =FACT(fr="reserve de temps pour terminer une execution",statut='d',max=1, regles=(EXCLUS('VALE','POURCENTAGE'),), - VALE =SIMP(statut='f',typ='I',val_min=0), +# par défaut VALE fixée à 10. dans le FORTRAN si CODE présent + VALE =SIMP(statut='f',typ='I',val_min=0,), +# par défaut 10% dans le FORTRAN POURCENTAGE =SIMP(statut='f',typ='R',val_min=0.,val_max=1.0), -# valeur en pourcentage du temps maximum bornée à 180 secondes - BORNE =SIMP(statut='f',typ='I',val_min=0,defaut=180) - ), - ); -#& MODIF COMMANDE DATE 03/10/2005 AUTEUR NICOLAS O.NICOLAS +# valeur en secondes de la réserve maximum bornée à 900 secondes + BORNE =SIMP(statut='f',typ='I',val_min=0,defaut=900),), + + IGNORE_ALARM = SIMP(statut='f', typ='TXM', max='**', fr="Alarmes que l'utilisateur souhaite délibérément ignorer"), + +); +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -7740,6 +8017,7 @@ DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,repetable='n', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE NISTOR I.NISTOR DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op= 99,sd_prod=base_modale, reentrant='f', fr="Définit la base d'une sous-structuration dynamique ou d'une recombinaison modale", @@ -7778,7 +8056,7 @@ DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op= 99,sd_prod=base_modale, TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 26/03/2007 AUTEUR ASSIRE A.ASSIRE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG @@ -7796,6 +8074,7 @@ DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op= 99,sd_prod=base_modale, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE MICHEL S.MICHEL from Macro.defi_cable_bp_ops import defi_cable_bp_ops @@ -7852,7 +8131,7 @@ DEFI_CABLE_BP=MACRO(nom="DEFI_CABLE_BP",op=defi_cable_bp_ops,sd_prod=cabl_precon TITRE =SIMP(statut='f',typ='TXM',max='**' ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG @@ -7870,6 +8149,7 @@ DEFI_CABLE_BP=MACRO(nom="DEFI_CABLE_BP",op=defi_cable_bp_ops,sd_prod=cabl_precon # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE MICHEL S.MICHEL DEFI_CABLE_OP=OPER(nom="DEFI_CABLE_OP",op= 180,sd_prod=cabl_precont,reentrant='n', fr="Définit les profils initiaux de tension d'une structure en béton le long des cables de précontrainte" @@ -7902,31 +8182,31 @@ DEFI_CABLE_OP=OPER(nom="DEFI_CABLE_OP",op= 180,sd_prod=cabl_precont,reentrant='n PRESENT =SIMP(statut='o',typ='TXM',min=2,max=2,into=("OUI","NON") ), ), ) ; -#& MODIF COMMANDE DATE 13/02/2007 AUTEUR PELLET J.PELLET -# RESPONSABLE JMBHH01 J.M.PROIX +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE PROIX J.M.PROIX DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster, fr="Définir le comportement d'un monocristal, d'un polycristal ou de groupes de fibres", reentrant='n', UIinfo={"groupes":("Modélisation",)}, # on exclut MULTIFBRE de MONOCRISTAL ou POLYCRISTAL car la structure de données n'est pas organisée pareil pour ces cas - regles=(EXCLUS('MONOCRISTAL','POLYCRISTAL','MULTIFIBRE'), + regles=(UN_PARMI('MONOCRISTAL','POLYCRISTAL','MULTIFIBRE'), PRESENT_PRESENT('MULTIFIBRE','GEOM_FIBRE','MATER_SECT'), ), MONOCRISTAL =FACT(statut='f', max='**', @@ -7939,12 +8219,12 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster, fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écrouissage cinématique"), ELAS =SIMP(statut='f', typ='TXM', max=1, fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le comportement élastique (un et un seul)"), - FAMI_SYST_GLIS =SIMP(statut='o',typ='TXM', max=1, + FAMI_SYST_GLIS =SIMP(statut='o',typ='TXM', max=1, into=('BASAL', 'PRISMATIQUE', 'OCTAEDRIQUE', 'PYRAMIDAL1', 'PYRAMIDAL2', 'CUBIQUE1', 'CUBIQUE2', 'MACLAGE', 'JOINT_GRAIN', 'RL', 'UNIAXIAL','BCC24'),), ), - - + + POLYCRISTAL =FACT(statut='f', max='**', regles=(UN_PARMI('ANGL_REP','ANGL_EULER'),), MONOCRISTAL =SIMP(statut='o', typ=compor_sdaster, max=1), @@ -7952,18 +8232,18 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster, ANGL_REP =SIMP(statut='f',typ='R',max=3,fr="orientation du monocristal : 3 angles nautiques en degrés"), ANGL_EULER=SIMP(statut='f',typ='R',max=3,fr="orientation du monocristal : 3 angles d'Euler en degrés"), ), - - + + b_poly =BLOC( condition = "POLYCRISTAL!='None'", LOCALISATION =SIMP(statut='f', typ='TXM', max=1, into=('BZ', 'BETA', 'RL',), fr="Donner le nom de la règle de localisation"), - + b_beta =BLOC( condition = "LOCALISATION=='BETA'", DL =SIMP(statut='o',typ='R',max=1), DA =SIMP(statut='o',typ='R',max=1), ), ), - + ##################################################################################### GEOM_FIBRE = SIMP(statut='f',max=1,typ=gfibre_sdaster, fr="Donner le nom du concept regroupant tous les groupes de fibres (issu de DEFI_GEOM_FIBRE)"), @@ -8009,11 +8289,11 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster, "NORTON_HOFF", "LEMAITRE", "VENDOCHAB", - "DRUCKER_PRAGER", + "DRUCK_PRAGER", + "DRUCK_PRAG_N_A", "GRANGER_FP", "GRANGER_FP_INDT", "GRANGER_FP_V", - "BAZANT_FD", "BETON_UMLV_FP", "BETON_DOUBLE_DP", "KIT_DDI", @@ -8058,18 +8338,18 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster, LEMAITRE =SIMP(statut='c',typ='I',defaut=2,into=(2,)), VENDOCHAB =SIMP(statut='c',typ='I',defaut=10,into=(10,)), GRILLE_ISOT_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)), - DRUCKER_PRAGER =SIMP(statut='c',typ='I',defaut=3,into=(3,)), + DRUCK_PRAGER =SIMP(statut='c',typ='I',defaut=3,into=(3,)), + DRUCK_PRAG_N_A =SIMP(statut='c',typ='I',defaut=3,into=(3,)), HOEK_BROWN =SIMP(statut='c',typ='I',defaut=3,into=(3,)), HOEK_BROWN_EFF =SIMP(statut='c',typ='I',defaut=3,into=(3,)), HOEK_BROWN_TOT =SIMP(statut='c',typ='I',defaut=3,into=(3,)), GRANGER_FP =SIMP(statut='c',typ='I',defaut=55,into=(55,)), GRANGER_FP_INDT =SIMP(statut='c',typ='I',defaut=55,into=(55,)), GRANGER_FP_V =SIMP(statut='c',typ='I',defaut=55,into=(55,)), - BAZANT_FD =SIMP(statut='c',typ='I',defaut=1,into=(1,)), BETON_DOUBLE_DP =SIMP(statut='c',typ='I',defaut=4,into=(4,)), BETON_UMLV_FP =SIMP(statut='c',typ='I',defaut=21,into=(21,)), GRAN_IRRA_LOG =SIMP(statut='c',typ='I',defaut=4,into=(4,)), - + RELATION_KIT =SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(), into=( # MECA KIT_DDI @@ -8086,11 +8366,11 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster, "BETON_DOUBLE_DP", ),), -# on pourrait ajouter TOUT_GROUP_FIBRE +# on pourrait ajouter TOUT_GROUP_FIBRE ) ); - -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE + +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -8108,6 +8388,7 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE COURTOIS M.COURTOIS DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op= 2,sd_prod=fonction_sdaster, fr="Définir la valeur d'une grandeur invariante", reentrant='n', @@ -8116,7 +8397,7 @@ DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op= 2,sd_prod=fonction_sdaster, VALE =SIMP(statut='o',typ='R',), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -8134,6 +8415,7 @@ DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op= 2,sd_prod=fonction_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DESROCHES X.DESROCHES DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater_sdaster,reentrant='n', UIinfo={"groupes":("Modélisation",)}, fr="Déterminer les caractéristiques matériaux homogénéisées d'une coque multicouche à partir" @@ -8148,7 +8430,7 @@ DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater_sdaster,reentrant=' UNITE =SIMP(statut='f',typ='I',defaut=8), ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG @@ -8166,7 +8448,7 @@ DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater_sdaster,reentrant=' # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE D6BHHJP J.P.LEFEBVRE +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE def DEFIC_prod(self,ACTION,UNITE,**args): if ACTION == "ASSOCIER" or ACTION == "RESERVER": if UNITE != None : @@ -8217,7 +8499,7 @@ DEFI_FICHIER=MACRO(nom="DEFI_FICHIER",op=ops.build_DEFI_FICHIER,sd_prod=DEFIC_pr INFO =SIMP(statut='f',typ='I',into=(1,2) ), ) -#& MODIF COMMANDE DATE 15/05/2007 AUTEUR GENIAUT S.GENIAUT +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG @@ -8235,6 +8517,7 @@ DEFI_FICHIER=MACRO(nom="DEFI_FICHIER",op=ops.build_DEFI_FICHIER,sd_prod=DEFIC_pr # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE GENIAUT S.GENIAUT DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op= 41,sd_prod=fiss_xfem,reentrant='n', UIinfo={"groupes":("Modélisation",)}, @@ -8267,7 +8550,7 @@ DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op= 41,sd_prod=fiss_xfem,reentrant='n' ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,3,) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -8285,6 +8568,7 @@ DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op= 41,sd_prod=fiss_xfem,reentrant='n' # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ADOBES A.ADOBES DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru, reentrant='n',fr="Définit les caractéristiques nécessaires à l'étude dynamique d'une structure sous écoulement", UIinfo={"groupes":("Maillage",)}, @@ -8372,7 +8656,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru, ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -8390,6 +8674,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE COURTOIS M.COURTOIS DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction_sdaster,reentrant='n', UIinfo={"groupes":("Outils métier",)}, fr="Définir une fonction du temps intervenant dans le calcul des forces de LAPLACE", @@ -8441,7 +8726,7 @@ DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction_sdaster,reentran ), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -8459,6 +8744,7 @@ DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction_sdaster,reentran # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ADOBES A.ADOBES DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction_sdaster, reentrant='n', fr="Définit un profil de vitesse d'écoulement fluide le long d'une poutre", @@ -8480,7 +8766,7 @@ DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction_sdaster, INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -8498,11 +8784,12 @@ DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE MCOURTOI M.COURTOIS -def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,**args): +# RESPONSABLE COURTOIS M.COURTOIS +def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,ABSCISSE,**args): if VALE != None : return fonction_sdaster if VALE_C != None : return fonction_c if VALE_PARA != None : return fonction_sdaster + if ABSCISSE != None : return fonction_sdaster if NOEUD_PARA != None : return fonction_sdaster raise AsException("type de concept resultat non prevu") @@ -8510,11 +8797,13 @@ DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod ,fr="Définit une fonction réelle ou complexe d'une variable réelle", reentrant='n', UIinfo={"groupes":("Fonction",)}, - regles=(UN_PARMI('VALE','VALE_C','VALE_PARA','NOEUD_PARA'),), + regles=(UN_PARMI('VALE','VALE_C','VALE_PARA','NOEUD_PARA','ABSCISSE'),), NOM_PARA =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ), NOM_RESU =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"), VALE =SIMP(statut='f',typ='R',min=2,max='**', fr ="Fonction réelle définie par une liste de couples (abscisse,ordonnée)"), + ABSCISSE =SIMP(statut='f',typ='R',min=2,max='**', + fr ="Liste d abscisses d une fonction réelle"), VALE_C =SIMP(statut='f',typ='R',min=2,max='**', fr ="Fonction complexe définie par une liste de couples"), VALE_PARA =SIMP(statut='f',typ=listr8_sdaster, @@ -8522,6 +8811,10 @@ DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod b_vale_para =BLOC(condition = "VALE_PARA != None", VALE_FONC =SIMP(statut='o',typ=listr8_sdaster ), ), + b_abscisse =BLOC(condition = "ABSCISSE != None", + ORDONNEE =SIMP(statut='o',typ='R',min=2,max='**', + fr ="Liste d ordonnées d une fonction réelle"), + ), NOEUD_PARA =SIMP(statut='f',typ=no,max='**', fr ="Fonction réelle définie par une liste de noeuds et un maillage"), b_noeud_para =BLOC(condition = "NOEUD_PARA != None", @@ -8536,7 +8829,7 @@ DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 05/03/2007 AUTEUR GALENNE E.GALENNE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -8554,6 +8847,7 @@ DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE GALENNE E.GALENNE DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,reentrant='n', UIinfo={"groupes":("Post traitements",)}, fr="Définition de lèvres et d'un fond de fissure en 3D", @@ -8636,7 +8930,7 @@ DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,reentrant='n', VECT_GRNO_EXTR =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 13/02/2007 AUTEUR PELLET J.PELLET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG @@ -8654,7 +8948,7 @@ DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,reentrant='n', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# ====================================================================== +# RESPONSABLE FLEJOU J.L.FLEJOU # DEFI_GEOM_FIBRE=OPER(nom="DEFI_GEOM_FIBRE",op= 119, sd_prod=gfibre_sdaster, fr="Definition des groupes de fibres pour les elements multifibres", @@ -8688,7 +8982,80 @@ DEFI_GEOM_FIBRE=OPER(nom="DEFI_GEOM_FIBRE",op= 119, sd_prod=gfibre_sdaster, ) ; -#& MODIF COMMANDE DATE 04/07/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 19/05/2008 AUTEUR MARKOVIC D.MARKOVIC +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2008 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== +# RESPONSABLE MARKOVIC D.MARKOVIC +DEFI_GLRC=OPER(nom="DEFI_GLRC",op=57,sd_prod=mater_sdaster,reentrant='f', + UIinfo={"groupes":("Modélisation",)}, + fr="Déterminer les caractéristiques du béton armé homogénéisées à partir des propriétés du béton et de " + +" plusieurs types d'armature", + reuse = SIMP(statut='f',typ=mater_sdaster), + BETON =FACT(statut='o',max=1, + MATER =SIMP(statut='o',typ=(mater_sdaster) ), + EPAIS =SIMP(statut='o',typ='R',val_min=0.E+0 ), + OMT =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0), + EAT =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0), + BT1 =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0), + BT2 =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0), + GAMMA =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0), + QP1 =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0), + QP2 =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0), + + C1N1 =SIMP(statut='o',typ='R',val_min=0.E+0), + C1N2 =SIMP(statut='o',typ='R',val_min=0.E+0), + C1N3 =SIMP(statut='o',typ='R',val_min=0.E+0), + C2N1 =SIMP(statut='o',typ='R',val_min=0.E+0), + C2N2 =SIMP(statut='o',typ='R',val_min=0.E+0), + C2N3 =SIMP(statut='o',typ='R',val_min=0.E+0), + C1M1 =SIMP(statut='o',typ='R',val_min=0.E+0), + C1M2 =SIMP(statut='o',typ='R',val_min=0.E+0), + C1M3 =SIMP(statut='o',typ='R',val_min=0.E+0), + C2M1 =SIMP(statut='o',typ='R',val_min=0.E+0), + C2M2 =SIMP(statut='o',typ='R',val_min=0.E+0), + C2M3 =SIMP(statut='o',typ='R',val_min=0.E+0), + ), + NAPPE =FACT(statut='o',max=10, + MATER =SIMP(statut='o',typ=(mater_sdaster) ), + OMX =SIMP(statut='o',typ='R',val_min=0.E+0), + OMY =SIMP(statut='o',typ='R',val_min=0.E+0), + RX =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0), + RY =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0), + ), + CABLE_PREC =FACT(statut='f',max=1, + MATER =SIMP(statut='o',typ=(mater_sdaster) ), + OMX =SIMP(statut='o',typ='R',val_min=0.E+0), + OMY =SIMP(statut='o',typ='R',val_min=0.E+0), + RX =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0), + RY =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0), + PREX =SIMP(statut='o',typ='R'), + PREY =SIMP(statut='o',typ='R'), + ), + LINER =FACT(statut='f',max=10, + MATER =SIMP(statut='o',typ=(mater_sdaster) ), + OML =SIMP(statut='o',typ='R',val_min=0.E+0), + RLR =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0), + ), + IMPRESSION =FACT(statut='f', + UNITE =SIMP(statut='f',typ='I',defaut=8), + ), +) ; +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -8706,7 +9073,7 @@ DEFI_GEOM_FIBRE=OPER(nom="DEFI_GEOM_FIBRE",op= 119, sd_prod=gfibre_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET def defi_group_prod(MAILLAGE,**args): if AsType(MAILLAGE) == maillage_sdaster : return maillage_sdaster if AsType(MAILLAGE) == squelette : return squelette @@ -8890,7 +9257,7 @@ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION') ALARME =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), INFO =SIMP(statut='f',typ='I',into=( 1 , 2 ) ), ) ; -#& MODIF COMMANDE DATE 26/06/2006 AUTEUR CIBHHLV L.VIVAN +#& MODIF COMMANDE DATE 06/05/2008 AUTEUR CORUS M.CORUS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -8908,6 +9275,8 @@ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION') # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE CORUS M.CORUS + DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op= 98,sd_prod=interf_dyna_clas, reentrant='n', UIinfo={"groupes":("Matrices/vecteurs",)}, @@ -8927,7 +9296,7 @@ DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op= 98,sd_prod=interf_dyna_clas, FREQ =SIMP(statut='f',typ='R',defaut= 1.), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -8945,6 +9314,7 @@ DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op= 98,sd_prod=interf_dyna_clas, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ZENTNER I.ZENTNER from Macro.defi_inte_spec_ops import defi_inte_spec_ops DEFI_INTE_SPEC=MACRO(nom="DEFI_INTE_SPEC",op= defi_inte_spec_ops,sd_prod=table_fonction, @@ -8990,43 +9360,62 @@ DEFI_INTE_SPEC=MACRO(nom="DEFI_INTE_SPEC",op= defi_inte_spec_ops,sd_prod=table_f TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. # -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. # -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE COURTOIS M.COURTOIS DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis_sdaster, - fr="Définir une liste d'entier strictement croissante", + fr="Définir une liste d'entiers strictement croissante", reentrant='n', UIinfo={"groupes":("Fonction",)}, - regles=(UN_PARMI('VALE','DEBUT'), - EXCLUS('VALE','INTERVALLE'),), - VALE =SIMP(statut='f',typ='I',max='**'), - DEBUT =SIMP(statut='f',typ='I'), - INTERVALLE =FACT(statut='f',max='**', - regles=(UN_PARMI('NOMBRE','PAS'),), - JUSQU_A =SIMP(statut='o',typ='I'), - NOMBRE =SIMP(statut='f',typ='I',val_min=1,), - PAS =SIMP(statut='f',typ='I',val_min=1,), + + OPERATION =SIMP(statut='o',typ='TXM',defaut='DEFI',into=('DEFI','NUME_ORDRE',)), + + + # définition d'une liste d'entiers + #---------------------------------- + b_defi =BLOC(condition = "OPERATION == 'DEFI'", + regles=(UN_PARMI('VALE','DEBUT'), + EXCLUS('VALE','INTERVALLE'),), + VALE =SIMP(statut='f',typ='I',max='**'), + DEBUT =SIMP(statut='f',typ='I'), + INTERVALLE =FACT(statut='f',max='**', + regles=(UN_PARMI('NOMBRE','PAS'),), + JUSQU_A =SIMP(statut='o',typ='I'), + NOMBRE =SIMP(statut='f',typ='I',val_min=1,), + PAS =SIMP(statut='f',typ='I',val_min=1,), + ), ), + + + # extraction d'une liste de nume_ordre dans une sd_resultat : + #------------------------------------------------------------ + b_extr =BLOC(condition = "OPERATION == 'NUME_ORDRE'", + RESULTAT =SIMP(statut='o',typ=resultat_sdaster), + PARAMETRE =SIMP(statut='o',typ='TXM',), + INTERV_R =SIMP(statut='o',typ='R',min=2,max=2), + ), + + INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -9044,7 +9433,7 @@ DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE COURTOIS M.COURTOIS DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8_sdaster, fr="Définir une liste de réels strictement croissante", reentrant='n', @@ -9063,7 +9452,7 @@ DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8_sdaster, INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 12/03/2007 AUTEUR DEVESA G.DEVESA +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -9081,7 +9470,7 @@ DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op= 88,sd_prod=maillage_sdaster, fr="Définition d'un nouveau maillage à partir de macro-éléments", reentrant='n', @@ -9142,7 +9531,7 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op= 88,sd_prod=maillage_sdaster, GROUP_NO_FIN =SIMP(statut='f',typ=grno), ), ) ; -#& MODIF COMMANDE DATE 21/05/2007 AUTEUR FERNANDES R.FERNANDES +#& MODIF COMMANDE DATE 06/05/2008 AUTEUR MARKOVIC D.MARKOVIC # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -9160,6 +9549,7 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op= 88,sd_prod=maillage_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, fr="Définition des paramètres décrivant le comportement d un matériau", reentrant='f', @@ -9177,24 +9567,23 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, EXCLUS('CIN1_CHAB','CIN1_CHAB_FO'), EXCLUS('CIN2_CHAB','CIN2_CHAB_FO'), EXCLUS('VISCOCHAB','VISCOCHAB_FO'), - EXCLUS('LEMAITRE','LEMAITRE_FO','ZIRC_CYRA2','ZIRC_EPRI','VISC_IRRA_LOG', + EXCLUS('LEMAITRE','LEMAITRE_FO','VISC_IRRA_LOG', 'LEMA_SEUIL','LEMA_SEUIL_FO','LEMAITRE_IRRA','LMARC_IRRA',), EXCLUS('LMARC','LMARC_FO'), + EXCLUS('META_LEMA_ANI','META_LEMA_ANI_FO'), EXCLUS('VMIS_POUTRE','VMIS_POUTRE_FO'), EXCLUS('VENDOCHAB','VENDOCHAB_FO'), PRESENT_PRESENT('BPEL_ACIER','ELAS'), EXCLUS('RCCM','RCCM_FO'), EXCLUS('WEIBULL','WEIBULL_FO'), - PRESENT_PRESENT('BARCELONE','CAM_CLAY','ELAS'), - PRESENT_PRESENT('CAM_CLAY','ELAS'), + PRESENT_PRESENT('BARCELONE','CAM_CLAY'), PRESENT_PRESENT('LAIGLE','ELAS'), + PRESENT_PRESENT('LETK','ELAS'), PRESENT_PRESENT('DRUCK_PRAGER','ELAS'), PRESENT_PRESENT('HOEK_BROWN','ELAS'), EXCLUS('MAZARS','MAZARS_FO'), - PRESENT_PRESENT('BAZANT_FD','ELAS_FO'), PRESENT_PRESENT('JOINT_BA','ELAS'), PRESENT_PRESENT('CABLE','ELAS'), - EXCLUS('GLRC_DAMAGE','GLRC_DM'), ), MATER =SIMP(statut='f',typ=mater_sdaster), # @@ -9438,10 +9827,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, A4 =SIMP(statut='f',typ='R'), A5 =SIMP(statut='f',typ='R'), ), - APPUI_ELAS =FACT(statut='f', - E_N =SIMP(statut='o',typ='R'), - E_TAN =SIMP(statut='f',typ='R',defaut= 0.E+0), - ), CABLE =FACT(statut='f', EC_SUR_E =SIMP(statut='f',typ='R',defaut= 1.E-4 ), ), @@ -9608,6 +9993,19 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, A_I =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), VERI_P =SIMP(statut='c',typ='TXM',max='**',defaut=("TEMP",) ), ), + MEMO_ECRO =FACT(statut='f', + MU =SIMP(statut='o',typ='R'), + Q_M =SIMP(statut='o',typ='R'), + Q_0 =SIMP(statut='o',typ='R'), + ETA =SIMP(statut='f',typ='R',defaut= 0.5E+0 ), + ), + MEMO_ECRO_FO =FACT(statut='f', + MU =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + Q_M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + Q_0 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + ETA =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + VERI_P =SIMP(statut='c',typ='TXM',max='**',defaut=("TEMP",) ), + ), VISCOCHAB =FACT(statut='f', K_0 =SIMP(statut='o',typ='R'), A_K =SIMP(statut='o',typ='R'), @@ -9714,12 +10112,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, GRAN_B =SIMP(statut='f',typ='R',defaut= 0.E+0 ), GRAN_S =SIMP(statut='f',typ='R',defaut= 0.E+0 ), ), - ZIRC_CYRA2 =FACT(statut='f', - EPSI_FAB =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - TEMP_RECUIT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - FLUX_PHI =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - VERI_P =SIMP(statut='c',typ='TXM',max='**',defaut=("INST",) ), - ), VISC_IRRA_LOG =FACT(statut='f', A =SIMP(statut='f',typ='R',defaut= 1.28E-1), B =SIMP(statut='f',typ='R',defaut= 0.01159), @@ -9758,14 +10150,9 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, PHI0 =SIMP(statut='o',typ='R',val_min=0.0), KAPPA =SIMP(statut='f',typ='R',val_min=0.0,defaut=0.8,val_max=1.0), ZETA_G =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - TOLER_ET =SIMP(statut='c',typ='R',val_min=0.1E-2,val_max=10.0E-02,defaut=1.0E-02 ), + TOLER_ET =SIMP(statut='c',typ='R',val_min=0.0,defaut=0.15 ), VERI_P =SIMP(statut='c',typ='TXM',max='**',defaut=("TEMP","IRRA") ), ), - ZIRC_EPRI =FACT(statut='f', - FLUX_PHI =SIMP(statut='o',typ='R'), - R_P =SIMP(statut='o',typ='R'), - THETA_MAX =SIMP(statut='o',typ='R'), - ), LEMAITRE_FO =FACT(statut='f', N =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), UN_SUR_K =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), @@ -9835,6 +10222,58 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, R66 =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), VERI_P =SIMP(statut='c',typ='TXM',max='**',defaut=("TEMP",) ), ), + META_LEMA_ANI =FACT(statut='f', + F1_A =SIMP(statut='o',typ='R'), + F2_A =SIMP(statut='o',typ='R'), + C_A =SIMP(statut='o',typ='R'), + F1_M =SIMP(statut='o',typ='R'), + F2_M =SIMP(statut='o',typ='R'), + C_M =SIMP(statut='o',typ='R'), + F1_N =SIMP(statut='o',typ='R'), + F2_N =SIMP(statut='o',typ='R'), + C_N =SIMP(statut='o',typ='R'), + F1_Q =SIMP(statut='o',typ='R'), + F2_Q =SIMP(statut='o',typ='R'), + C_Q =SIMP(statut='o',typ='R'), + F_MRR_RR =SIMP(statut='o',typ='R'), + C_MRR_RR =SIMP(statut='o',typ='R'), + F_MTT_TT =SIMP(statut='o',typ='R'), + C_MTT_TT =SIMP(statut='o',typ='R'), + F_MZZ_ZZ =SIMP(statut='o',typ='R'), + C_MZZ_ZZ =SIMP(statut='o',typ='R'), + F_MRT_RT =SIMP(statut='o',typ='R'), + C_MRT_RT =SIMP(statut='o',typ='R'), + F_MRZ_RZ =SIMP(statut='o',typ='R'), + C_MRZ_RZ =SIMP(statut='o',typ='R'), + F_MTZ_TZ =SIMP(statut='o',typ='R'), + C_MTZ_TZ =SIMP(statut='o',typ='R'), + ), + META_LEMA_ANI_FO =FACT(statut='f', + F1_A =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + F2_A =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + C_A =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + F1_M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + F2_M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + C_M =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + F1_N =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + F2_N =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + C_N =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + F1_Q =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + F2_Q =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + C_Q =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + F_MRR_RR =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + C_MRR_RR =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + F_MTT_TT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + C_MTT_TT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + F_MZZ_ZZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + C_MZZ_ZZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + F_MRT_RT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + C_MRT_RT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + F_MRZ_RZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + C_MRZ_RZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + F_MTZ_TZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + C_MTZ_TZ =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + ), VMIS_POUTRE =FACT(statut='f', NP =SIMP(statut='o',typ='R'), MEY =SIMP(statut='o',typ='R'), @@ -9886,32 +10325,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, ), DIS_CONTACT =FACT(statut='f', RIGI_NOR =SIMP(statut='f',typ='R' ), - DIST_1 =SIMP(statut='f',typ='R',defaut= 0.E+0 ), - DIST_2 =SIMP(statut='f',typ='R',defaut= 0.E+0 ), RIGI_TAN =SIMP(statut='f',typ='R',defaut= 0.E+0 ), AMOR_NOR =SIMP(statut='f',typ='R' ), AMOR_TAN =SIMP(statut='f',typ='R' ), COULOMB =SIMP(statut='f',typ='R',defaut= 0.E+0 ), + DIST_1 =SIMP(statut='f',typ='R',defaut= 0.E+0 ), + DIST_2 =SIMP(statut='f',typ='R',defaut= 0.E+0 ), JEU =SIMP(statut='f',typ='R',defaut= 0.E+0 ), - KT_ULTM =SIMP(statut='f',typ='R',defaut= 0.E+0 ), - EFFO_N_INIT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - regles=(EXCLUS('RIGI_N_FO','RIGI_N_IRRA',), - EXCLUS('RELA_MZ','ANGLE_1'), - PRESENT_PRESENT('ANGLE_1','ANGLE_2','ANGLE_3','ANGLE_4', - 'MOMENT_1','MOMENT_2','MOMENT_3','MOMENT_4'),), - RIGI_N_IRRA =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - RIGI_N_FO =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - RELA_MZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - ANGLE_1 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - ANGLE_2 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - ANGLE_3 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - ANGLE_4 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - MOMENT_1 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - MOMENT_2 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - MOMENT_3 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - MOMENT_4 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - C_PRAGER_MZ =SIMP(statut='f',typ='R',defaut= 0.E+0 ), - VERI_P =SIMP(statut='c',typ='TXM',max='**',defaut=("DRZ","INST","TEMP",) ), ), DIS_GRICRA =FACT(statut='f', KN_AX =SIMP(statut='o',typ='R' ), @@ -9941,13 +10361,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, VERI_P =SIMP(statut='c',typ='TXM',max='**',defaut=("DRZ","INST","TEMP",) ), ), NADAI_B =FACT(statut='f', - F_C =SIMP(statut='o',typ='R'), - F_T =SIMP(statut='o',typ='R'), - CRIT_E_C =SIMP(statut='o',typ='R'), - EPSP_P_C =SIMP(statut='o',typ='R'), - EPSP_R_C =SIMP(statut='o',typ='R'), - EPSI_R_T =SIMP(statut='o',typ='R'), - FAC_T_C =SIMP(statut='o',typ='R'), + F_C =SIMP(statut='o',typ='R',val_min=0.E+0), + F_T =SIMP(statut='o',typ='R',val_min=0.E+0), + CRIT_E_C =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0), + EPSP_P_C =SIMP(statut='o',typ='R',val_min=0.E+0), + EPSP_R_C =SIMP(statut='o',typ='R',val_min=0.E+0), + EPSI_R_T =SIMP(statut='o',typ='R',val_min=0.E+0), + FAC_T_C =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0), ), BETON_DOUBLE_DP =FACT(statut='f', F_C =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), @@ -9955,8 +10375,8 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, COEF_BIAX =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), ENER_COMP_RUPT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), ENER_TRAC_RUPT =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - COEF_ELAS_COMP =SIMP(statut='o',typ='R'), - LONG_CARA =SIMP(statut='f',typ='R'), + COEF_ELAS_COMP =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=100.E+0), + LONG_CARA =SIMP(statut='f',typ='R',val_min=0.E+0), ECRO_COMP_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","PARABOLE") ), ECRO_TRAC_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","EXPONENT") ), VERI_P =SIMP(statut='c',typ='TXM',max='**',defaut=("TEMP","INST","HYDR","SECH",) ), @@ -10056,6 +10476,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, FROT_LINE =SIMP(statut='f',typ='R',defaut=0.E+0), ), CAM_CLAY =FACT(statut='f', + MU =SIMP(statut='o',typ='R'), PORO =SIMP(statut='o',typ='R'), LAMBDA =SIMP(statut='o',typ='R'), KAPA =SIMP(statut='o',typ='R'), @@ -10105,7 +10526,11 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, RI_ELA =SIMP(statut='o',typ='R' ), RHYS =SIMP(statut='o',typ='R' ), RMOB =SIMP(statut='o',typ='R' ), - XM =SIMP(statut='o',typ='R'), + XM =SIMP(statut='o',typ='R' ), + RD_CYC =SIMP(statut='o',typ='R' ), + RI_CYC =SIMP(statut='o',typ='R' ), + DILA =SIMP(statut='o',typ='R' ), + PTRAC =SIMP(statut='f',typ='R',defaut= 0.E+0 ), ), ECRO_ASYM_LINE =FACT(statut='f', DC_SIGM_EPSI =SIMP(statut='o',typ='R'), @@ -10155,9 +10580,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, FONC_V =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), VERI_P =SIMP(statut='c',typ='TXM',max='**',defaut=("INST",) ), ), - BAZANT_FD =FACT(statut='f', - LAM_VISC =SIMP(statut='o',typ='R'), - ), BETON_UMLV_FP =FACT(statut='f',min=0 , K_RS =SIMP(statut='o',typ='R'), ETA_RS =SIMP(statut='o',typ='R'), @@ -10168,33 +10590,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, ETA_ID =SIMP(statut='o',typ='R'), ETA_FD =SIMP(statut='f',typ='R'), ), - GLRC_DAMAGE =FACT(statut='f',min=0,max=1, - FMEX1 =SIMP(statut='o',typ=(fonction_sdaster)), - FMEY1 =SIMP(statut='o',typ=(fonction_sdaster)), - FMEX2 =SIMP(statut='o',typ=(fonction_sdaster)), - FMEY2 =SIMP(statut='o',typ=(fonction_sdaster)), - DFMEX1 =SIMP(statut='o',typ=(fonction_sdaster)), - DFMEY1 =SIMP(statut='o',typ=(fonction_sdaster)), - DFMEX2 =SIMP(statut='o',typ=(fonction_sdaster)), - DFMEY2 =SIMP(statut='o',typ=(fonction_sdaster)), - DDFMEX1 =SIMP(statut='o',typ=(fonction_sdaster)), - DDFMEY1 =SIMP(statut='o',typ=(fonction_sdaster)), - DDFMEX2 =SIMP(statut='o',typ=(fonction_sdaster)), - DDFMEY2 =SIMP(statut='o',typ=(fonction_sdaster)), - - CX1 =SIMP(statut='o',typ='R',val_min=0.E+0), - CY1 =SIMP(statut='o',typ='R',val_min=0.E+0), - CXY1 =SIMP(statut='o',typ='R',val_min=0.E+0), - CX2 =SIMP(statut='o',typ='R',val_min=0.E+0), - CY2 =SIMP(statut='o',typ='R',val_min=0.E+0), - CXY2 =SIMP(statut='o',typ='R',val_min=0.E+0), - MF1 =SIMP(statut='o',typ='R',val_min=0.E+0), - MF2 =SIMP(statut='o',typ='R',val_max=0.E+0), - QP1 =SIMP(statut='o',typ='R',val_min=0.E+0), - QP2 =SIMP(statut='o',typ='R',val_min=0.E+0), - GAMMA =SIMP(statut='o',typ='R',val_min=0.E+0), - VERI_P =SIMP(statut='c',typ='TXM',max='**',defaut=("X ",) ), - ), GLRC_DM =FACT(statut='f',min=0,max=1, GAMMA_T =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0), GAMMA_F =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0), @@ -10203,12 +10598,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, EF =SIMP(statut='f',typ='R',val_min=0.E+0), NUF =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=0.5+0), ), - GLRC_ACIER =FACT(statut='f',min=0,max=1, - AX =SIMP(statut='o',typ='R',val_min=0.E+0), - AY =SIMP(statut='o',typ='R',val_min=0.E+0), - E =SIMP(statut='o',typ='R',val_min=0.E+0), - ENROB =SIMP(statut='o',typ='R',val_min=0.E+0), - ), GATT_MONERIE =FACT(statut='f',min=0,max=1, D_GRAIN =SIMP(statut='o',typ='R',val_min=0.E+0), PORO_INIT =SIMP(statut='o',typ='R',val_min=0.E+0), @@ -10313,6 +10702,31 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, COEF_RZ =SIMP(statut='f',typ='R',val_min = 0.0, fr="Coefficient C autour de la direction locale Rz de l'élément."), ), + DIS_BILI_ELAS =FACT(statut='f', + fr="Loi bi-linéaire pour les discrets.", + regles=(PRESENT_PRESENT('KDEB_DX','KFIN_DX','FPRE_DX',), + PRESENT_PRESENT('KDEB_DY','KFIN_DY','FPRE_DY',), + PRESENT_PRESENT('KDEB_DZ','KFIN_DZ','FPRE_DZ',),), + KDEB_DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule), + fr="Raideur début suivant l'axe local x de l'élément."), + KDEB_DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule), + fr="Raideur début suivant l'axe local y de l'élément."), + KDEB_DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule), + fr="Raideur début suivant l'axe local z de l'élément."), + KFIN_DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule), + fr="Raideur fin l'axe local x de l'élément."), + KFIN_DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule), + fr="Raideur fin l'axe local y de l'élément."), + KFIN_DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule), + fr="Raideur fin l'axe local z de l'élément."), + FPRE_DX =SIMP(statut='f',typ='R', + fr="Effort de préserrage suivant l'axe local x de l'élément."), + FPRE_DY =SIMP(statut='f',typ='R', + fr="Effort de préserrage suivant l'axe local y de l'élément."), + FPRE_DZ =SIMP(statut='f',typ='R', + fr="Effort de préserrage suivant l'axe local z de l'élément."), + VERI_P =SIMP(statut='c',typ='TXM',max='**',defaut=("TEMP",)), + ), # Discrets non-linéaires : fin # # comportement thermique @@ -10558,18 +10972,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, CELE_C =SIMP(statut='f',typ='C'), CELE_R =SIMP(statut='f',typ='R'), ), - PORO_JOINT =FACT(statut='f', - RHO_FLUI =SIMP(statut='o',typ='R'), - ENTRO_FLUI =SIMP(statut='o',typ='R'), - BIOT_M =SIMP(statut='o',typ='R'), - C_0 =SIMP(statut='o',typ='R'), - T_R =SIMP(statut='o',typ='R'), - ALPHA_M =SIMP(statut='o',typ='R'), - LAMBDA_T =SIMP(statut='o',typ='R'), - LAMBDA_H =SIMP(statut='o',typ='R'), - SOURCE_INIT =SIMP(statut='o',typ='R'), - OMEGA_0 =SIMP(statut='o',typ='R'), - ), # ================================================================================= # COMPORTEMENT THERMO_HYDRO_MECANIQUE # LES DONNEES NECESSAIRES A LA DEFINITION DU MATERIAU SONT DEPENDANTES @@ -10778,21 +11180,27 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, PESA_X = SIMP(statut='o',typ='R'), PESA_Y = SIMP(statut='o',typ='R'), PESA_Z = SIMP(statut='o',typ='R'), - SATU_PRES = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_SATU_PRES = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - PERM_LIQU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - PERM_GAZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_PERM_SATU_GAZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_PERM_PRES_GAZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + PERM_LIQU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + PERM_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_PERM_SATU_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_PERM_PRES_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), +# ---Van Genhuchten et Muallen----------------------------------------------------------------------------- + + VG_N = SIMP(statut='f',typ='R'), + VG_SR = SIMP(statut='f',typ='R'), + VG_PR = SIMP(statut='f',typ='R'), + VG_SMAX = SIMP(statut='f',typ='R'), + VG_SATUR = SIMP(statut='f',typ='R'), +# # --------------------------------------------------------------------------------- # ------------------- DONNEES NECESSAIRE SI THERMIQUE ------------------------- # --------------------------------------------------------------------------------- CP = SIMP(statut='f',typ='R'), PERM_IN = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), PERM_END = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',), - PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ), PERMIN_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), PERMIN_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), PERMIN_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), @@ -10803,6 +11211,15 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, LAMB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), D_LB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), LAMB_CT = SIMP(statut='f',typ='R'), +# + regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',), + PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), + ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU', + 'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',), + ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',), + UN_PARMI('VG_N','SATU_PRES'), + ), + # --------------------------------------------------------------------------------- # ------------------- DONNEES INUTILES ---------------------------------------- # --------------------------------------------------------------------------------- @@ -11196,13 +11613,21 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, PESA_X = SIMP(statut='o',typ='R'), PESA_Y = SIMP(statut='o',typ='R'), PESA_Z = SIMP(statut='o',typ='R'), - SATU_PRES = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_SATU_PRES = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - PERM_LIQU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - PERM_GAZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_PERM_SATU_GAZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_PERM_PRES_GAZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + PERM_LIQU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + PERM_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_PERM_SATU_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_PERM_PRES_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), +# ---Van Genhuchten et Muallen----------------------------------------------------------------------------- + + VG_N = SIMP(statut='f',typ='R'), + VG_SR = SIMP(statut='f',typ='R'), + VG_PR = SIMP(statut='f',typ='R'), + VG_SMAX = SIMP(statut='f',typ='R'), + VG_SATUR = SIMP(statut='f',typ='R'), +# FICKV_T = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), # --------------------------------------------------------------------------------- # ------------------- DONNEES NECESSAIRE SI THERMIQUE ------------------------- @@ -11210,8 +11635,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, CP = SIMP(statut='f',typ='R'), PERM_IN = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), PERM_END = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',), - PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ), PERMIN_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), PERMIN_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), PERMIN_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), @@ -11222,6 +11645,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, LAMB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), D_LB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), LAMB_CT = SIMP(statut='f',typ='R'), +# + regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',), + PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), + ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU', + 'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',), + ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',), + UN_PARMI('VG_N','SATU_PRES'), + ), # --------------------------------------------------------------------------------- # ------------------- DONNEES FACULTATIVE ---------------------------------- # --------------------------------------------------------------------------------- @@ -11351,13 +11782,20 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, PESA_X = SIMP(statut='o',typ='R'), PESA_Y = SIMP(statut='o',typ='R'), PESA_Z = SIMP(statut='o',typ='R'), - SATU_PRES = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_SATU_PRES = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - PERM_LIQU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - PERM_GAZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_PERM_SATU_GAZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_PERM_PRES_GAZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + PERM_LIQU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + PERM_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_PERM_SATU_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_PERM_PRES_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), +# ---Van Genhuchten et Muallen----------------------------------------------------------------------------- + VG_N = SIMP(statut='f',typ='R'), + VG_SR = SIMP(statut='f',typ='R'), + VG_PR = SIMP(statut='f',typ='R'), + VG_SMAX = SIMP(statut='f',typ='R'), + VG_SATUR = SIMP(statut='f',typ='R'), +# FICKV_T = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), FICKA_T = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), # --------------------------------------------------------------------------------- @@ -11366,8 +11804,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, CP = SIMP(statut='f',typ='R'), PERM_IN = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), PERM_END = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',), - PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ), PERMIN_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), PERMIN_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), PERMIN_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), @@ -11378,6 +11814,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, LAMB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), D_LB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), LAMB_CT = SIMP(statut='f',typ='R'), +# + regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',), + PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), + ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU', + 'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',), + ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',), + UN_PARMI('VG_N','SATU_PRES'), + ), # --------------------------------------------------------------------------------- # ------------------- DONNEES FACULTATIVES ------------------------------------ # --------------------------------------------------------------------------------- @@ -11520,21 +11964,26 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, PESA_X = SIMP(statut='o',typ='R'), PESA_Y = SIMP(statut='o',typ='R'), PESA_Z = SIMP(statut='o',typ='R'), - SATU_PRES = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_SATU_PRES = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - PERM_LIQU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - PERM_GAZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_PERM_SATU_GAZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), - D_PERM_PRES_GAZ = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)), + SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_SATU_PRES = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + PERM_LIQU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + PERM_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_PERM_SATU_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), + D_PERM_PRES_GAZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), +# ---Van Genhuchten et Muallen----------------------------------------------------------------------------- + + VG_N = SIMP(statut='f',typ='R'), + VG_SR = SIMP(statut='f',typ='R'), + VG_PR = SIMP(statut='f',typ='R'), + VG_SMAX = SIMP(statut='f',typ='R'), + VG_SATUR = SIMP(statut='f',typ='R'), # --------------------------------------------------------------------------------- # ------------------- DONNEES NECESSAIRE SI THERMIQUE ------------------------- # --------------------------------------------------------------------------------- CP = SIMP(statut='f',typ='R'), PERM_IN = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), PERM_END = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), - regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',), - PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ), PERMIN_X =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), PERMIN_Y =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), PERMIN_Z =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), @@ -11545,6 +11994,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, LAMB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), D_LB_S = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), LAMB_CT = SIMP(statut='f',typ='R'), +# + regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',), + PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), + ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU', + 'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',), + ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',), + UN_PARMI('VG_N','SATU_PRES'), + ), # --------------------------------------------------------------------------------- # ------------------- DONNEES INUTILES ---------------------------------------- # --------------------------------------------------------------------------------- @@ -11756,6 +12213,35 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, SIGMA_P1 =SIMP(statut='o',typ='R'), PA =SIMP(statut='o',typ='R'), ), + LETK =FACT(statut='f', + PA =SIMP(statut='o',typ='R',fr="pression atmospherique"), + NELAS =SIMP(statut='o',typ='R',fr="exposant de la loi de variation des modules K et G"), + SIGMA_C =SIMP(statut='o',typ='R',fr="résistance en compression simple "), + H0_EXT =SIMP(statut='o',typ='R',fr="parametre pilotant la résistance en extension"), + GAMMA_CJS =SIMP(statut='o',typ='R',fr="parametre de forme du critere ds le plan deviatoire entre 0 et 1."), + XAMS =SIMP(statut='o',typ='R',fr="parametre non nul intervenant dans les lois d'ecrouissage pre pic"), + ETA =SIMP(statut='o',typ='R',fr="parametre non nul intervenant dans les lois d'ecrouissage post pic"), + A_0 =SIMP(statut='o',typ='R',fr="a de la limite d'élasticité initiale"), + A_E =SIMP(statut='o',typ='R',fr="a de la limite de clivage ou seuil intermédiaire"), + A_PIC =SIMP(statut='o',typ='R',fr="a du seuil de pic"), + S_0 =SIMP(statut='o',typ='R',fr="s de la limite d'élasticité initiale"), + M_0 =SIMP(statut='o',typ='R',fr="m de la limite d'élasticité initiale"), + M_E =SIMP(statut='o',typ='R',fr="m de la limite de clivage ou seuil intermédiaire"), + M_PIC =SIMP(statut='o',typ='R',fr="m du seuil de pic"), + M_ULT =SIMP(statut='o',typ='R',fr="m du seuil residuel"), + XI_ULT =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil residuel"), + XI_E =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil de clivage"), + XI_PIC =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil de pic"), + MV_MAX =SIMP(statut='o',typ='R',fr="m du seuil viscoplastique maximal"), + XIV_MAX =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil viscoplastique maximal"), + A =SIMP(statut='o',typ='R',fr="parametre carcaterisant l amplitude de la vitesse de fluage"), + N =SIMP(statut='o',typ='R',fr="parametre intervenant dans la formule pilotant la cinetique de fluage"), + SIGMA_P1 =SIMP(statut='o',typ='R',fr="SIG min de l intersection du seuil de pic et intermediaire "), + MU0_V =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance des mecanismes pre pic et viscoplastique"), + XI0_V =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance des mecanismes pre pic et viscoplastique"), + MU1 =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance du mecanisme post pic "), + XI1 =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance du mecanisme post pic "), + ), DRUCK_PRAGER =FACT(statut='f', ALPHA =SIMP(statut='o',typ='R'), SY =SIMP(statut='o',typ='R'), @@ -11771,8 +12257,9 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, SY_ULTM =SIMP(statut='o',typ='R'), TYPE_DP =SIMP(statut='c',typ='R',defaut= 2.0,), ), - ), - HOEK_BROWN =FACT(statut='f', + DILAT =SIMP(statut='f',typ='R',defaut=0.0), + ), + HOEK_BROWN =FACT(statut='f', GAMMA_RUP =SIMP(statut='o',typ='R'), GAMMA_RES =SIMP(statut='o',typ='R'), S_END =SIMP(statut='o',typ='R'), @@ -11898,12 +12385,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, SY_ULTM =SIMP(statut='o',typ=(fonction_sdaster,formule)), TYPE_DP =SIMP(statut='c',typ='R',defaut= 2.0,), ), + DILAT =SIMP(statut='f',typ='R',defaut=0.0), ), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -11921,6 +12409,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BODEL C.BODEL DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene, reentrant='n', fr="Créer la structure globale à partir des sous-structures en sous-structuration dynamique", @@ -11952,7 +12441,7 @@ DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene, ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -11970,10 +12459,10 @@ DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op= 4,sd_prod=nappe_sdaster, +# RESPONSABLE COURTOIS M.COURTOIS +DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=4,sd_prod=nappe_sdaster, fr="Définir une fonction réelle de deux variables réelles", - reentrant='n', - UIinfo={"groupes":("Fonction",)}, + reentrant='n',UIinfo={"groupes":("Fonction",)}, regles=(UN_PARMI('FONCTION','DEFI_FONCTION'), EXCLUS('FONCTION','NOM_PARA_FONC',), ENSEMBLE('NOM_PARA_FONC','DEFI_FONCTION'),), @@ -11981,8 +12470,7 @@ DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op= 4,sd_prod=nappe_sdaster, NOM_RESU =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"), PARA =SIMP(statut='o',typ='R',max='**'), FONCTION =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ), - NOM_PARA_FONC =SIMP(statut='f',typ='TXM',into=("TEMP","INST","X","Y","Z","EPSI","FREQ", - "PULS","AMOR","EPAIS","SAT", "PGAZ","PCAP") ), + NOM_PARA_FONC =SIMP(statut='f',typ='TXM',into=C_PARA_FONCTION() ), DEFI_FONCTION =FACT(statut='f',max='**', VALE =SIMP(statut='o',typ='R',max='**'), INTERPOL =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ), @@ -11996,7 +12484,7 @@ DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op= 4,sd_prod=nappe_sdaster, VERIF =SIMP(statut='f',typ='TXM',into=("CROISSANT",) ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -12014,6 +12502,7 @@ DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op= 4,sd_prod=nappe_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE KHAM M.KHAM DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op= 73,sd_prod=table_fonction, fr="Définition d'un obstacle plan perpendiculaire à une structure filaire", reentrant='n', @@ -12049,7 +12538,7 @@ DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op= 73,sd_prod=table_fonction, VALE =SIMP(statut='f',typ='R',max='**'), VERIF =SIMP(statut='f',typ='TXM',defaut="FERME"), ) ; -#& MODIF COMMANDE DATE 10/06/2004 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -12081,7 +12570,7 @@ DEFI_PARA_SENSI=OPER(nom="DEFI_PARA_SENSI",op= 2,sd_prod=para_sensi, ang="Value of the parameter"), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 30/08/2005 AUTEUR ASSIRE A.ASSIRE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG @@ -12144,7 +12633,7 @@ DEFI_PART_FETI=MACRO(nom="DEFI_PART_FETI",op=defi_part_feti_ops,sd_prod=sd_feti_ INFO =SIMP(statut='f',typ='I',into=(1, 2), defaut=1), ); -#& MODIF COMMANDE DATE 22/02/2005 AUTEUR DURAND C.DURAND +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG @@ -12180,7 +12669,7 @@ DEFI_PART_OPS=OPER(nom="DEFI_PART_OPS",op=21,sd_prod=sd_feti_sdaster, CHARGE =SIMP(statut='f',typ=(char_meca,char_cine_meca)), ), ); -#& MODIF COMMANDE DATE 26/03/2007 AUTEUR ASSIRE A.ASSIRE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2005 EDF R&D WWW.CODE-ASTER.ORG @@ -12240,7 +12729,7 @@ DEFI_PART_PA_OPS=PROC(nom="DEFI_PART_PA_OPS",op=29, INFO =SIMP(statut='f',typ='I',into=(1, 2), defaut=1), ); -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -12258,6 +12747,7 @@ DEFI_PART_PA_OPS=PROC(nom="DEFI_PART_PA_OPS",op=29, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ADOBES A.ADOBES DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre_sdaster, fr="Définition d'un spectre d'excitation turbulente", reentrant='n', @@ -12348,7 +12838,7 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre_sdaster, ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -12366,6 +12856,7 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BODEL C.BODEL DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette, fr="Définit un maillage pour visualiser les résultats d'une sous-structuration dynamique", reentrant='n', @@ -12424,7 +12915,7 @@ DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette, ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 03/01/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -12442,6 +12933,7 @@ DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE CANO V.CANO DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=table_sdaster,reentrant='n', UIinfo={"groupes":("Modélisation",)}, fr="Définir d'un diagramme de transformations en refroidissement continu (TRC) de référence d'un acier" @@ -12460,7 +12952,7 @@ DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=table_sdaster,reentrant='n', A =SIMP(statut='f',typ='R'), ), ) ; -#& MODIF COMMANDE DATE 31/10/2006 AUTEUR A3BHHAE H.ANDRIAMBOLOLONA +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -12478,6 +12970,7 @@ DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=table_sdaster,reentrant='n', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE PELLET J.PELLET def depl_interne_prod(DEPL_GLOBAL,**args ): if AsType(DEPL_GLOBAL) == cham_no_sdaster: return cham_no_sdaster if AsType(DEPL_GLOBAL) == evol_elas : return evol_elas @@ -12494,7 +12987,7 @@ DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=depl_interne_prod,reentrant=' SUPER_MAILLE =SIMP(statut='o',typ=ma,), NOM_CAS =SIMP(statut='f',typ='TXM',defaut=" "), ) ; -#& MODIF COMMANDE DATE 10/05/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -12512,6 +13005,7 @@ DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=depl_interne_prod,reentrant=' # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE DETRUIRE=MACRO(nom="DETRUIRE",op=-7, UIinfo={"groupes":("Gestion du travail",)}, fr="Détruit des concepts utilisateurs dans la base GLOBALE ou des objets JEVEUX", @@ -12532,7 +13026,7 @@ DETRUIRE=MACRO(nom="DETRUIRE",op=-7, ALARME =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI',), INFO =SIMP(statut='f',typ='I',into=(1,2),defaut=2, ), ); -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -12550,6 +13044,7 @@ DETRUIRE=MACRO(nom="DETRUIRE",op=-7, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ZENTNER I.ZENTNER DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction, fr="Calcul de la réponse spectrale d'une structure linéaire sous une excitation connue par sa DSP", reentrant='n', @@ -12634,7 +13129,61 @@ DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction, TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 10/05/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2008 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== +# RESPONSABLE ZENTNER I.ZENTNER +from Macro.dyna_iss_vari_ops import dyna_iss_vari_ops +# +DYNA_ISS_VARI=MACRO(nom="DYNA_ISS_VARI",op=dyna_iss_vari_ops ,sd_prod=table_fonction, + fr="Calcul du spectre de réponse ou de la reponse temporelle sismique incoherente par decomposition spectrale", + reentrant='n', + UIinfo={"groupes":("Outils métier",)}, + NOM_CMP =SIMP(statut='o',typ='TXM',into=("DX","DY","DZ") ), + PRECISION =SIMP(statut='f',typ='R',defaut=0.999 ), + INTERF =FACT(statut='o', + GROUP_NO_INTERF =SIMP(statut='o',typ=grma ,max='**'), + MODE_INTERF =SIMP(statut='o',typ='TXM',into=("CORP_RIGI","TOUT")), + ), + MATR_COHE =FACT(statut='o', + VITE_ONDE =SIMP(statut='o',typ='R'), + PARA_ALPHA =SIMP(statut='f',typ='R',defaut=0.5), + ), +# FONC_MULT =SIMP(statut='f',typ='R' ), + FREQ_INIT =SIMP(statut='o',typ='R' ), + NB_FREQ =SIMP(statut='o',typ='I' ), + PAS =SIMP(statut='o',typ='R' ), +# LIST_FREQ =SIMP(statut='o',typ='liste' ), + UNITE_RESU_FORC = SIMP(statut='f',typ='I',defaut=33), + UNITE_RESU_IMPE = SIMP(statut='f',typ='I',defaut=32), + TYPE = SIMP(statut='f',typ='TXM',into=("BINAIRE","ASCII"), defaut="ASCII"), +# + MATR_GENE = FACT(statut='o', + MATR_MASS = SIMP(statut='o',typ=(matr_asse_gene_r ) ), + MATR_RIGI = SIMP(statut='o',typ=(matr_asse_gene_r,matr_asse_gene_c ) ), + MATR_AMOR = SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c ) ), + ), +# +# OPTION =SIMP(statut='f',typ='TXM',into=("TOUT","DIAG"),defaut="TOUT"), +# + INFO =SIMP(statut='f',typ='I' ,defaut=1,into=( 1 , 2)), + ) ; +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -12652,6 +13201,7 @@ DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA def dyna_line_harm_prod(MATR_RIGI,**args): if (AsType(MATR_RIGI) == matr_asse_depl_r) : return dyna_harmo elif (AsType(MATR_RIGI) == matr_asse_depl_c) : return dyna_harmo @@ -12693,13 +13243,74 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op= 60,sd_prod=dyna_line_harm_prod, VECT_ASSE =SIMP(statut='f',typ=(cham_no_sdaster,vect_asse_gene) ), CHARGE =SIMP(statut='f',typ=char_meca ), TYPE_CHARGE =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ), - FONC_MULT_C =SIMP(statut='f',typ=fonction_c ), + FONC_MULT_C =SIMP(statut='f',typ=(fonction_c,formule_c) ), COEF_MULT_C =SIMP(statut='f',typ='C' ), FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ), COEF_MULT =SIMP(statut='f',typ='R' ), PHAS_DEG =SIMP(statut='f',typ='R',defaut= 0.E+0 ), PUIS_PULS =SIMP(statut='f',typ='I',defaut= 0 ), ), + + b_matr_gene =BLOC(condition = "AsType(MATR_MASS) in (matr_asse_gene_r,)", + fr="Methode de resolution matrice generalisee", + SOLVEUR =FACT(statut='d', + METHODE =SIMP(statut='f',typ='TXM',defaut="LDLT",into=("LDLT","MUMPS",) ), + + b_ldlt_gene =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT", + RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ), + NPREC =SIMP(statut='f',typ='I',defaut=8), + STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), + ), + + b_mumps_gene =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS", + TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")), + PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), + RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")), + ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), + PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,), + RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,), + PARALLELISME =SIMP(statut='f',typ='TXM',defaut="CENTRALISE", + into=("CENTRALISE","DISTRIBUE_MAILLE","DISTRIBUE_SD")), + PARTITION =SIMP(statut='f',typ=sd_feti_sdaster), + CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=0,min=0), + CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0), + ), + ), + ), + + b_matr_phys =BLOC(condition = "AsType(MATR_MASS) in (matr_asse_depl_r,matr_asse_pres_c,)", + fr="Methode de resolution matrice sur ddl physique", + SOLVEUR =FACT(statut='d', + METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","MUMPS",) ), + + b_mult_front_phys=BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale", + RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ), + NPREC =SIMP(statut='f',typ='I',defaut=8), + STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), + ), + + b_ldlt_phys =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT", + RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ), + NPREC =SIMP(statut='f',typ='I',defaut=8), + STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), + ), + + b_mumps_phys =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS", + TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")), + PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), + RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")), + ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), + PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,), + RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,), + PARALLELISME =SIMP(statut='f',typ='TXM',defaut="CENTRALISE", + into=("CENTRALISE","DISTRIBUE_MAILLE","DISTRIBUE_SD")), + PARTITION =SIMP(statut='f',typ=sd_feti_sdaster), + CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=0,min=0), + CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0), + ), + ), + ), + TITRE =SIMP(statut='f',typ='TXM',max='**'), SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**', fr="Liste des paramètres de sensibilité.", @@ -12708,7 +13319,7 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op= 60,sd_prod=dyna_line_harm_prod, # Rajouter test icompatibilite vect_asse et sensibilite # Peut-on aussi rajouter ici le test d incompatibilite charge complexe - derivation # presents dans le Fortran -#& MODIF COMMANDE DATE 13/12/2006 AUTEUR PELLET J.PELLET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -12726,6 +13337,7 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op= 60,sd_prod=dyna_line_harm_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BOYERE E.BOYERE DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op= 48,sd_prod=dyna_trans, fr="Calcul de la réponse dynamique transitoire à une excitation temporelle quelconque", reentrant='f', @@ -12794,11 +13406,10 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op= 48,sd_prod=dyna_trans, MODE_MECA =SIMP(statut='f',typ=mode_meca ), AMOR_REDUIT =SIMP(statut='f',typ='R',max='**'), NB_MODE =SIMP(statut='f',typ='I',defaut= 9999 ), - REAC_VITE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ), ), SOLVEUR =FACT(statut='d', - METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ), + METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ), b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale", RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ), @@ -12823,12 +13434,21 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op= 48,sd_prod=dyna_trans, ), b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS", TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")), - SCALING =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), + PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")), ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,), - RESI_RELA =SIMP(statut='f',typ='R',defaut=1.E-6,), + RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,), + PARALLELISME =SIMP(statut='f',typ='TXM',defaut="CENTRALISE",into=("CENTRALISE","CENTRALISE")), ), + + b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC", + VARIANTE =SIMP(statut='f',typ='TXM',into=("GMRES","BCGS","CR","CG","BICG","CHEBYCHEV",),defaut="GMRES" ), + PRE_COND =SIMP(statut='f',typ='TXM',into=("ILU","SOR","BJACOBI"),defaut="ILU" ), + RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ), + RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-8), + NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ), + ), ), INCREMENT =FACT(statut='o',max='**', @@ -12866,7 +13486,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op= 48,sd_prod=dyna_trans, TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 30/05/2007 AUTEUR ABBAS M.ABBAS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -12884,6 +13504,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op= 48,sd_prod=dyna_trans, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE GREFFET N.GREFFET DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f', fr="Calcul de l'évolution dynamique d'une structure dont le matériau ou la géométrie ont un comportement non linéaire", UIinfo={"groupes":("Résolution",)}, @@ -12914,7 +13535,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f', EXCIT_GENE =FACT(statut='f',max='**', FONC_MULT =SIMP(statut='f',typ=fonction_sdaster,max='**' ), VECT_GENE =SIMP(statut='f',typ=vect_asse_gene,max='**' ), - ), + ), SOUS_STRUC =FACT(statut='f',min=01,max='**', regles=(UN_PARMI('TOUT','SUPER_MAILLE'),), CAS_CHARGE =SIMP(statut='o',typ='TXM' ), @@ -12937,15 +13558,16 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f', MASS_GENE =SIMP(statut='f',typ=matr_asse_gene_r), RIGI_GENE =SIMP(statut='f',typ=matr_asse_gene_r), AMOR_GENE =SIMP(statut='f',typ=matr_asse_gene_r), - ), + ), COMP_INCR =C_COMP_INCR(), COMP_ELAS =FACT(statut='f',max='**', RELATION =SIMP(statut='o',typ='TXM',defaut="ELAS", - into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC", + into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS", "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")), ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,)), ELAS_VMIS_TRAC =SIMP(statut='c',typ='I',defaut=1,into=(1,)), ELAS_VMIS_LINE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + ELAS_VMIS_PUIS =SIMP(statut='c',typ='I',defaut=1,into=(1,)), ELAS_HYPER =SIMP(statut='c',typ='I',defaut=1,into=(1,)), ELAS_POUTRE_GR =SIMP(statut='c',typ='I',defaut=3,into=(3,)), CABLE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), @@ -12963,20 +13585,18 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f', #------------------------------------------------------------------- b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire", ETAT_INIT =FACT(statut='o', - regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI','VARI_NON_LOCAL',), + regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',), EXCLUS('EVOL_NOLI','DEPL',), EXCLUS('EVOL_NOLI','VITE'), EXCLUS('EVOL_NOLI','ACCE'), EXCLUS('EVOL_NOLI','SIGM',), EXCLUS('EVOL_NOLI','VARI',), - EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',), EXCLUS('NUME_ORDRE','INST'), ), DEPL =SIMP(statut='f',typ=cham_no_sdaster), VITE =SIMP(statut='f',typ=cham_no_sdaster), ACCE =SIMP(statut='f',typ=cham_no_sdaster), SIGM =SIMP(statut='f',typ=(cham_elem,carte_sdaster)), VARI =SIMP(statut='f',typ=cham_elem), - VARI_NON_LOCAL =SIMP(statut='f',typ=cham_no_sdaster), EVOL_NOLI =SIMP(statut='f',typ=evol_noli), NUME_ORDRE =SIMP(statut='f',typ='I'), INST =SIMP(statut='f',typ='R'), @@ -12987,20 +13607,18 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f', ),), b_not_reuse =BLOC(condition = "not reuse",fr="en mode concept non reentrant : ETAT_INIT facultatif", ETAT_INIT =FACT(statut='f', - regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI','VARI_NON_LOCAL',), + regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',), EXCLUS('EVOL_NOLI','DEPL',), EXCLUS('EVOL_NOLI','VITE'), EXCLUS('EVOL_NOLI','ACCE'), EXCLUS('EVOL_NOLI','SIGM',), EXCLUS('EVOL_NOLI','VARI',), - EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',), EXCLUS('NUME_ORDRE','INST'), ), DEPL =SIMP(statut='f',typ=cham_no_sdaster), VITE =SIMP(statut='f',typ=cham_no_sdaster), ACCE =SIMP(statut='f',typ=cham_no_sdaster), SIGM =SIMP(statut='f',typ=(cham_elem,carte_sdaster)), VARI =SIMP(statut='f',typ=cham_elem), - VARI_NON_LOCAL =SIMP(statut='f',typ=cham_no_sdaster), EVOL_NOLI =SIMP(statut='f',typ=evol_noli), NUME_ORDRE =SIMP(statut='f',typ='I'), INST =SIMP(statut='f',typ='R'), @@ -13092,7 +13710,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f', PAS_MINI_ELAS =SIMP(statut='f',typ='R',defaut=0.0E+0), ), SOLVEUR =FACT(statut='d', - METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ), + METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ), b_mult_front =BLOC(condition= "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale", RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ), ), @@ -13106,11 +13724,16 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f', ), b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS", TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")), - SCALING =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), + PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")), ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,), RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,), + PARALLELISME =SIMP(statut='f',typ='TXM',defaut="CENTRALISE", + into=("CENTRALISE","DISTRIBUE_MC","DISTRIBUE_MD","DISTRIBUE_SD")), + PARTITION =SIMP(statut='f',typ=sd_feti_sdaster), + CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,min=0,max=100), + CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0), ), b_gcpc =BLOC(condition="METHODE == 'GCPC'",fr="Paramètres de la méthode du gradient conjugué", PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC",),defaut="LDLT_INC" ), @@ -13119,36 +13742,16 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f', RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ), NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ), ), + b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC", + VARIANTE =SIMP(statut='f',typ='TXM',into=("GMRES","BCGS","CR","CG","BICG","CHEBYCHEV",),defaut="GMRES" ), + PRE_COND =SIMP(statut='f',typ='TXM',into=("ILU","SOR","BJACOBI"),defaut="ILU" ), + RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ), + RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-8), + NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ), + ), SYME =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ), ), #------------------------------------------------------------------- - RECH_LINEAIRE =FACT(statut='f', - METHODE =SIMP(statut='f',typ='TXM',defaut="CORDE",into=("CORDE","MIXTE") ), - RESI_LINE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-1 ), - ITER_LINE_MAXI =SIMP(statut='f',typ='I',defaut= 3), - ITER_LINE_CRIT =SIMP(statut='f',typ='I',defaut= 20), - PAS_MINI_CRIT =SIMP(statut='f',typ='R',defaut=0.0E+0), - RHO_MIN =SIMP(statut='f',typ='R',defaut=1.0E-2), - RHO_MAX =SIMP(statut='f',typ='R',defaut=1.0E+1), - RHO_EXCL =SIMP(statut='f',typ='R',defaut=0.9E-2,val_min=0.), - ), - PILOTAGE =FACT(statut='f', - regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),), - TYPE =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","PRED_ELAS_INCR","DEFORMATION","ANA_LIM") ), - COEF_MULT =SIMP(statut='f',typ='R',defaut= 1.0E+0), - ETA_PILO_MAX =SIMP(statut='f',typ='R'), - ETA_PILO_MIN =SIMP(statut='f',typ='R'), - ETA_PILO_R_MAX =SIMP(statut='f',typ='R'), - ETA_PILO_R_MIN =SIMP(statut='f',typ='R'), - PROJ_BORNES =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), - SELECTION =SIMP(statut='f',typ='TXM',defaut="NORM_INCR_DEPL", into=("RESIDU","ANGL_INCR_DEPL","NORM_INCR_DEPL") ), - TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), - GROUP_MA =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), - MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), - NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - GROUP_NO =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'), - NOM_CMP =SIMP(statut='f',typ='TXM',max='**' ), - ), CONVERGENCE =FACT(statut='d', regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),), b_refe_rela =BLOC(condition = "RESI_REFE_RELA != None", @@ -13179,7 +13782,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f', GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), POINT =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'), MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), - NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1, + NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**', into=("DEPL","VITE","ACCE","SIEF_ELGA", "VARI_ELGA","FORC_NODA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU",)), GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), @@ -13247,7 +13850,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f', NUME_INIT =SIMP(statut='f',typ='I'), DETR_NUME_SUIV =SIMP(statut='f',typ='TXM',into=("OUI",)), CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**', - into=("DEPL","SIEF_ELGA","VARI_ELGA","ACCE","VITE","VARI_NON_LOCAL","LANL_ELGA")), + into=("DEPL","SIEF_ELGA","VARI_ELGA","ACCE","VITE","LANL_ELGA")), ), #------------------------------------------------------------------- @@ -13255,57 +13858,25 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f', NB_FREQ =SIMP(statut='f',typ='I',max=1,defaut=3), CHAR_CRIT =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10.), fr="Valeur des deux charges critiques délimitant la bande de recherche en HPP"), + INST_CALCUL =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ), ), MODE_VIBR =FACT(statut='f',min=1,max=1, - MATR_RIGI =SIMP(statut='f',typ='TXM',defaut="ELASTIQUE",into=("ELASTIQUE","TANGENTE") ), - NB_FREQ =SIMP(statut='f',typ='I',max=1,defaut=3), + MATR_RIGI =SIMP(statut='f',typ='TXM',defaut="ELASTIQUE",into=("ELASTIQUE","TANGENTE","SECANTE",) ), + NB_FREQ =SIMP(statut='f',typ='I',max=1,defaut=3, + fr="Nombre de fréquences propres à calculer"), + BANDE =SIMP(statut='f',typ='R',min=2,max=2, + fr="Valeur des deux fréquences délimitant la bande de recherche",), + INST_CALCUL =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ), ), #------------------------------------------------------------------- SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**', fr="Liste des paramètres de sensibilité", ang="List of sensitivity parameters"), -#------------------------------------------------------------------- - SOLV_NON_LOCAL =FACT(statut='f', - METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ), - b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale", - RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ), - ), - b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT", - RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ), - ), - b_ldlt_mult =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ", - fr="Paramètres relatifs à la non inversibilité de la matrice à factorise", - NPREC =SIMP(statut='f',typ='I',defaut= 8 ), - STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), - ), - b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS", - TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")), - SCALING =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), - RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")), - ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), - PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,), - RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,), - ), - b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué", - PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC",),defaut="LDLT_INC" ), - NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ), - RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ), - NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ), - ), - EPS =SIMP(statut='f',typ='R',defaut= 0.E+0 ), - ), - LAGR_NON_LOCAL =FACT(statut='f', - ITER_DUAL_MAXI =SIMP(statut='f',typ='I',defaut= 50), - RESI_DUAL_ABSO =SIMP(statut='o',typ='R'), - RESI_PRIM_ABSO =SIMP(statut='o',typ='R'), - R =SIMP(statut='f',typ='R',defaut= 1000.), - ITER_PRIM_MAXI =SIMP(statut='f',typ='I',defaut= 10), - ), #------------------------------------------------------------------- INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -13323,6 +13894,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ADOBES A.ADOBES DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=table_fonction, fr="Calcul de la réponse par recombinaison modale d'une structure linéaire pour une excitation aléatoire", reentrant='n', @@ -13334,7 +13906,7 @@ DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=table_fonction, OPTION =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -13352,6 +13924,7 @@ DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=table_fonction, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BOYERE E.BOYERE DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op= 74,sd_prod=tran_gene, fr="Calcul de la réponse dynamique transitoire d'un système amorti ou non en coordonées généralisées" +" par superposition modale ou par sous structuration", @@ -13530,7 +14103,6 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op= 74,sd_prod=tran_gene, CHOC_FLUI =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ), NB_MODE =SIMP(statut='f',typ='I' ), NB_MODE_FLUI =SIMP(statut='f',typ='I' ), - NB_MODE_DIAG =SIMP(statut='f',typ='I' ), TS_REG_ETAB =SIMP(statut='f',typ='R' ), ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), @@ -13543,29 +14115,29 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op= 74,sd_prod=tran_gene, ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 12/12/2006 AUTEUR VIVAN L.VIVAN +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. # -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. # -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178, UIinfo={"groupes":("Impression",)}, fr="Engendre des tests pour la non régression du code (pour développeurs)", - UNITE =SIMP(statut='f',typ='I',defaut=8), + UNITE =SIMP(statut='f',typ='I',defaut=8), FORMAT =SIMP(statut='f',typ='TXM',into=("OBJET",) ), FORMAT_R =SIMP(statut='f',typ='TXM',defaut="1PE20.13"), PREC_R =SIMP(statut='f',typ='TXM',defaut="1.E-10"), @@ -13580,10 +14152,10 @@ ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178, regles=(UN_PARMI('TOUT','CO'),), TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), CO =SIMP(statut='f',typ=assd,validators=NoRepeat(),max='**'), - TYPE_TEST =SIMP(statut='f',typ='TXM',defaut="SOMME",into=("SOMME","RESUME") ), + TYPE_TEST =SIMP(statut='f',typ='TXM',defaut="SOMME",into=("SOMME",) ), ), ) ; -#& MODIF COMMANDE DATE 29/08/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -13601,6 +14173,7 @@ ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE from Macro.exec_logiciel_ops import exec_logiciel_ops def exec_logiciel_prod(self, MAILLAGE, **args): @@ -13632,7 +14205,7 @@ EXEC_LOGICIEL = MACRO(nom="EXEC_LOGICIEL",op=exec_logiciel_ops, sd_prod=exec_log INFO = SIMP(statut='f', typ='I', defaut=2, into=(1,2),), ) -#& MODIF COMMANDE DATE 14/10/2005 AUTEUR CIBHHLV L.VIVAN +#& MODIF COMMANDE DATE 05/05/2008 AUTEUR NISTOR I.NISTOR # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -13650,6 +14223,8 @@ EXEC_LOGICIEL = MACRO(nom="EXEC_LOGICIEL",op=exec_logiciel_ops, sd_prod=exec_log # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE NISTOR I.NISTOR + def extr_mode_prod(FILTRE_MODE,**args): vale=FILTRE_MODE[0]['MODE'] if AsType(vale) == mode_meca : return mode_meca @@ -13687,7 +14262,7 @@ EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod, CRIT_EXTR =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",into=("MASS_EFFE_UN","MASS_GENE") ), ), ) ; -#& MODIF COMMANDE DATE 09/05/2007 AUTEUR VIVAN L.VIVAN +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -13705,6 +14280,8 @@ EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE + def extr_resu_prod(RESULTAT,**args): if AsType(RESULTAT) == evol_elas : return evol_elas if AsType(RESULTAT) == evol_noli : return evol_noli @@ -13724,7 +14301,8 @@ def extr_resu_prod(RESULTAT,**args): EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,reentrant='f', UIinfo={"groupes":("Résultats et champs",)}, fr="Extraire des champs au sein d'une SD Résultat", - regles=(CONCEPT_SENSIBLE('SEPARE'), REUSE_SENSIBLE(), + regles=(CONCEPT_SENSIBLE('SEPARE'), + #REUSE_SENSIBLE(), DERIVABLE('RESULTAT'),), RESULTAT =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,acou_harmo,mode_meca, mode_acou,mode_stat_depl,mode_stat_acce,mode_stat_forc,evol_ther,evol_noli, @@ -13758,7 +14336,7 @@ EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,reentrant='f', TITRE =SIMP(statut='f',typ='TXM',max='**' ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG @@ -13776,16 +14354,21 @@ EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,reentrant='f', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE COURTOIS M.COURTOIS + def extr_table_prod(TYPE_RESU,**args): - if TYPE_RESU == "MATR_ASSE_GENE_R" : return matr_asse_gene_r + from Cata import cata + typ = TYPE_RESU.lower() + if hasattr(cata, typ): + return getattr(cata, typ) raise AsException("type de concept resultat non prevu") EXTR_TABLE=OPER(nom="EXTR_TABLE",op=173,sd_prod=extr_table_prod,reentrant='n', UIinfo={"groupes":("Résultats et champs",)}, - fr="Extraire d'une table la matrice de masse généralisée assemblée", - TYPE_RESU =SIMP(statut='o',typ='TXM',into=("MATR_ASSE_GENE_R",) ), + fr="Extraire d'une table des concepts Code_Aster", + TYPE_RESU =SIMP(statut='o',typ='TXM',), - TABLE =SIMP(statut='o',typ=table_sdaster), + TABLE =SIMP(statut='o',typ=(table_sdaster,table_container)), NOM_PARA =SIMP(statut='o',typ='TXM'), @@ -13807,61 +14390,27 @@ EXTR_TABLE=OPER(nom="EXTR_TABLE",op=173,sd_prod=extr_table_prod,reentrant='n', TITRE =SIMP(statut='f',typ='TXM',max='**' ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -def fact_grad_prod(MATR_ASSE,**args): - if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_depl_r - if AsType(MATR_ASSE) == matr_asse_temp_r : return matr_asse_temp_r - if AsType(MATR_ASSE) == matr_asse_pres_r : return matr_asse_pres_r - raise AsException("type de concept resultat non prevu") +# RESPONSABLE PELLET J.PELLET -FACT_GRAD=OPER(nom="FACT_GRAD",op=85,sd_prod=fact_grad_prod, - UIinfo={"groupes":("Résolution",)}, - fr="Construire une matrice de préconditionnement pour une résolution par gradient conjugué", - reentrant='n', - MATR_ASSE =SIMP(statut='o', - typ=(matr_asse_depl_r,matr_asse_temp_r, - matr_asse_pres_r) ), - PRE_COND =SIMP(statut='f',typ='TXM',defaut="LDLT_INC",into=("LDLT_INC",) ), - NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ), - INFO =SIMP(statut='f',typ='I',into=(1,2) ), -) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# ====================================================================== -# RESPONSABLE VABHHTS J.PELLET -def fact_ldlt_prod(MATR_ASSE,**args): +def factoriser_prod(MATR_ASSE,**args): if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_depl_r if AsType(MATR_ASSE) == matr_asse_depl_c : return matr_asse_depl_c if AsType(MATR_ASSE) == matr_asse_temp_r : return matr_asse_temp_r @@ -13870,32 +14419,39 @@ def fact_ldlt_prod(MATR_ASSE,**args): if AsType(MATR_ASSE) == matr_asse_pres_c : return matr_asse_pres_c raise AsException("type de concept resultat non prevu") -FACT_LDLT=OPER(nom="FACT_LDLT",op=14,sd_prod=fact_ldlt_prod, - fr="Factoriser une matrice assemblée en un produit de deux matrices triangulaires", - reentrant='f', - UIinfo={"groupes":("Résolution",)}, +FACTORISER=OPER(nom="FACTORISER",op=14,sd_prod=factoriser_prod, + fr="Factoriser une matrice assemblée en un produit de deux matrices triangulaires"+ + "ou construire une matrice de préconditionnement pour une résolution par gradient conjugué", + reentrant='f', UIinfo={"groupes":("Résolution",)}, regles=(EXCLUS('BLOC_DEBUT','DDL_DEBUT'), EXCLUS('BLOC_FIN','DDL_FIN'),), MATR_ASSE =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r, matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ), + + # mots clés pour solveur LDLT et MULT_FRONT: STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), NPREC =SIMP(statut='f',typ='I',defaut=8,val_min=0,), - PRE_COND =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","DIAG") ), + + # mots clés pour solveur LDLT : BLOC_DEBUT =SIMP(statut='f',typ='I',val_min=1,), DDL_DEBUT =SIMP(statut='f',typ='I',val_min=1,), BLOC_FIN =SIMP(statut='f',typ='I',val_min=1,), DDL_FIN =SIMP(statut='f',typ='I',val_min=1,), -# - EPS =SIMP(statut='f',typ='R',defaut= 0.E+0 ), -# mots clés pour solveur MUMPS : + # mots clés pour solveur MUMPS : TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut='AUTO',into=('NONSYM','SYMGEN','SYMDEF','AUTO')), - PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=20,), + PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), + PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,), + ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), + + # mots clés pour solveur GCPC : + PRE_COND =SIMP(statut='f',typ='TXM',defaut="LDLT_INC",into=("LDLT_INC",) ), + NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ), TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -13913,6 +14469,7 @@ FACT_LDLT=OPER(nom="FACT_LDLT",op=14,sd_prod=fact_ldlt_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude, fin du travail engagé par une des commandes DEBUT ou POURSUITE", UIinfo={"groupes":("Gestion du travail",)}, FORMAT_HDF =SIMP(fr="sauvegarde de la base GLOBALE au format HDF",statut='f', @@ -13925,7 +14482,7 @@ FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ), UNITE =SIMP(statut='f',typ='I',defaut=6), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -13943,12 +14500,13 @@ FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ADOBES A.ADOBES FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction_sdaster, reentrant='n',fr="Crée une fonction constante paramètrée par l'abscisse curviligne", UIinfo={"groupes":("Fonction",)}, TYPE_FLUI_STRU =SIMP(statut='o',typ=(type_flui_stru) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -13966,23 +14524,36 @@ FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -def form_pyth_ops(self,d): - import types,string - NOM_PARA=self.etape['NOM_PARA'] - VALE =self.etape['VALE'] - if type(NOM_PARA) not in (types.ListType,types.TupleType) : NOM_PARA=[NOM_PARA,] - if self.sd==None : return - texte=string.join(VALE.splitlines()) +# RESPONSABLE DURAND C.DURAND +def formule_prod(self,VALE,VALE_C,**args): + if VALE != None: + return formule + elif VALE_C != None: + return formule_c - self.sd.setFormule(NOM_PARA,string.strip(texte)) +def form_pyth_ops(self,d): + NOM_PARA=self.etape['NOM_PARA'] + VALE =self.etape['VALE'] + VALE_C =self.etape['VALE_C'] + if type(NOM_PARA) not in (list, tuple): + NOM_PARA = [NOM_PARA,] + if self.sd == None: + return + if VALE != None : + texte = ''.join(VALE.splitlines()) + elif VALE_C != None : + texte = ''.join(VALE_C.splitlines()) + self.sd.setFormule(NOM_PARA, texte.strip()) FORMULE=FORM(nom="FORMULE",op_init=form_pyth_ops,op=-5, - sd_prod=formule,UIinfo={"groupes":("Fonction",)}, - fr="Définit une formule réelle à partir de son expression mathématique", + sd_prod=formule_prod,UIinfo={"groupes":("Fonction",)}, + fr="Définit une formule réelle ou complexe à partir de son expression mathématique", + regles=(UN_PARMI('VALE','VALE_C',),), VALE =SIMP(statut='f',typ='TXM'), + VALE_C =SIMP(statut='f',typ='TXM'), NOM_PARA =SIMP(statut='o',typ='TXM',max='**'), ); -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -14000,7 +14571,7 @@ FORMULE=FORM(nom="FORMULE",op_init=form_pyth_ops,op=-5, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE CAMBIER S.CAMBIER +# RESPONSABLE ZENTNER I.ZENTNER GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=table_fonction, fr="Génération de la fonction temporelle à partir d une matrice interspectrale", reentrant='n', @@ -14019,7 +14590,7 @@ GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=table_fonction, INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 11/07/2005 AUTEUR CAMBIER S.CAMBIER +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG @@ -14037,7 +14608,7 @@ GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=table_fonction, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE CAMBIER S.CAMBIER +# RESPONSABLE ZENTNER I.ZENTNER def gene_matr_alea_prod(MATR_MOYEN,**args ): if (AsType(MATR_MOYEN) == matr_asse_gene_r ) : return matr_asse_gene_r if (AsType(MATR_MOYEN) == macr_elem_dyna) : return macr_elem_dyna @@ -14069,7 +14640,7 @@ sd_prod=gene_matr_alea_prod, INIT_ALEA =SIMP(statut='f',typ='I'), ) ; -#& MODIF COMMANDE DATE 05/02/2007 AUTEUR ZENTNER I.ZENTNER +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG @@ -14087,7 +14658,7 @@ sd_prod=gene_matr_alea_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE CAMBIER S.CAMBIER +# RESPONSABLE ZENTNER I.ZENTNER from Macro.gene_vari_alea_ops import gene_vari_alea_ops,gene_vari_alea_init GENE_VARI_ALEA=MACRO(nom="GENE_VARI_ALEA", op_init=gene_vari_alea_init,op=gene_vari_alea_ops, @@ -14137,7 +14708,7 @@ IMPR_CHARGE=PROC(nom="IMPR_CHARGE",op= 158, VERSION =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ), CHARGE =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**', ), ) ; -#& MODIF COMMANDE DATE 10/05/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -14155,7 +14726,7 @@ IMPR_CHARGE=PROC(nom="IMPR_CHARGE",op= 158, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE IMPR_CO=PROC(nom="IMPR_CO",op=17, UIinfo={"groupes":("Impression",)}, fr="Imprimer tous les objets JEVEUX qui constituent un concept utilisateur existant (pour les développeurs)", @@ -14176,7 +14747,7 @@ IMPR_CO=PROC(nom="IMPR_CO",op=17, POSITION =SIMP(statut='f',typ='I',defaut=1), TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), ) ; -#& MODIF COMMANDE DATE 24/04/2007 AUTEUR COURTOIS M.COURTOIS +#& MODIF COMMANDE DATE 06/05/2008 AUTEUR CNGUYEN C.NGUYEN # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG @@ -14194,7 +14765,7 @@ IMPR_CO=PROC(nom="IMPR_CO",op=17, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE MCOURTOI M.COURTOIS +# RESPONSABLE COURTOIS M.COURTOIS from Macro.impr_fonction_ops import impr_fonction_ops IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None, @@ -14232,7 +14803,7 @@ IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None, b_fonction =BLOC(condition = "FONCTION != None", LIST_PARA =SIMP(statut='f',typ=listr8_sdaster ), ), - b_fonction_c =BLOC(condition = "AsType(FONCTION) == fonction_c", + b_fonction_c =BLOC(condition = "AsType(FONCTION) in (fonction_c, formule_c)", fr="Fonction complexe définie par le mot-clé fonction", PARTIE =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ), ), @@ -14281,6 +14852,8 @@ IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None, fr="Séparateur des colonnes du tableau (ex : ' ', ';'...)"), COMMENTAIRE =SIMP(statut='f',typ='TXM',defaut='#', fr="Caractère indiquant au traceur de fonction que la ligne peut etre ignorée"), + COMM_PARA =SIMP(statut='f',typ='TXM',defaut='', + fr="Caractère utilisé pour commentariser la ligne des labels de colonnes"), DEBUT_LIGNE =SIMP(statut='f',typ='TXM',defaut='', fr="Caractère de debut de ligne"), FIN_LIGNE =SIMP(statut='f',typ='TXM',defaut='\n', @@ -14311,7 +14884,7 @@ IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None, ), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -14329,6 +14902,7 @@ IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BOYERE E.BOYERE IMPR_GENE=PROC(nom="IMPR_GENE",op= 157, fr="Imprimer le résultat d'un calcul dynamique en variables généralisées au format RESULTAT", UIinfo={"groupes":("Impression",)}, @@ -14370,7 +14944,7 @@ IMPR_GENE=PROC(nom="IMPR_GENE",op= 157, INFO_GENE =SIMP(statut='f',typ='TXM',into=("OUI","NON") ), ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -14388,6 +14962,7 @@ IMPR_GENE=PROC(nom="IMPR_GENE",op= 157, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16, UIinfo={"groupes":("Impression",)}, fr="Imprimer le contenu des objets créés par JEVEUX (pour développeur)", @@ -14425,7 +15000,7 @@ IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16, ), COMMENTAIRE =SIMP(statut='f',typ='TXM' ), ) ; -#& MODIF COMMANDE DATE 29/05/2007 AUTEUR VOLDOIRE F.VOLDOIRE +#& MODIF COMMANDE DATE 06/05/2008 AUTEUR CORUS M.CORUS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -14443,6 +15018,8 @@ IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE CORUS M.CORUS + IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160, UIinfo={"groupes":("Impression",)}, fr="Impression d'une structure de données MACR_ELEM_DYNA au format IDEAS MISS3D PLEXUS ou CADYRO", @@ -14486,7 +15063,7 @@ IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160, ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -14504,60 +15081,35 @@ IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE PELLET J.PELLET IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159, - fr="Imprimer sur un fichier au format IDEAS ou RESULTAT des matrices élémentaires et assemblées", + fr="Imprimer sur un fichier au format IDEAS des matrices élémentaires et assemblées", UIinfo={"groupes":("Impression",)}, regles=(AU_MOINS_UN('MATR_ELEM','MATR_ASSE'),), # ====================================================================== MATR_ELEM =FACT(statut='f',max='**', # MATRICE =SIMP(statut='o',typ=(matr_elem, vect_elem)), - FORMAT =SIMP(statut='f',typ='TXM',defaut="IDEAS", - into=("IDEAS","RESULTAT") ), + FORMAT =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",) ), # b_format_ideas =BLOC(condition="FORMAT=='IDEAS'",fr="unité logique d'impression et version IDEAS", - UNITE =SIMP(statut='f',typ='I',defaut=30), + UNITE =SIMP(statut='f',typ='I',defaut=30), VERSION =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,), ), ), -# - b_format_resultat =BLOC(condition="FORMAT=='RESULTAT'",fr="unité logique d'impression au format RESULTAT", - regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),), - UNITE =SIMP(statut='f',typ='I',defaut=8), - TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), - NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - GROUP_NO =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'), - MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), - GROUP_MA =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), - NOM_CMP =SIMP(statut='f',typ='TXM',max='**'), - GRAIN =SIMP(statut='f',typ='TXM',defaut="VALEUR",into=("VALEUR","NOEUD","MAILLE") ), - NB_CHIFFRE =SIMP(statut='f',typ='I',defaut= 4 ), ), ), # ====================================================================== MATR_ASSE =FACT(statut='f',max='**', # MATRICE =SIMP(statut='o',typ=matr_asse_gd), - FORMAT =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS","RESULTAT") ), -# + FORMAT =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",) ), +# b_format_ideas =BLOC(condition="FORMAT=='IDEAS'",fr="unité logique d'impression et version IDEAS", - UNITE =SIMP(statut='f',typ='I',defaut=30), + UNITE =SIMP(statut='f',typ='I',defaut=30), VERSION =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,), ), ), -# - b_format_resultat =BLOC(condition="FORMAT=='RESULTAT'",fr="unité logique d'impression au format RESULTAT", - regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),), - UNITE =SIMP(statut='f',typ='I',defaut=8), - TOUT =SIMP(statut='f',typ='TXM',into=("OUI",) ), - NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), - GROUP_NO =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'), - MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), - GROUP_MA =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), - OPTION =SIMP(statut='f',typ='TXM',defaut="SOUS_MATRICE",into=("SOUS_MATRICE","LIGNE","COLONNE") ), - NOM_CMP =SIMP(statut='f',typ='TXM',max='**'), - GRAIN =SIMP(statut='f',typ='TXM',defaut="VALEUR",into=("VALEUR","NOEUD") ), - NB_CHIFFRE =SIMP(statut='f',typ='I',defaut= 4 ), - VALE_ZERO =SIMP(statut='f',typ='R',defaut= 0.E+0 ), ), +# ), # ====================================================================== ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -14575,6 +15127,7 @@ IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DEVESA G.DEVESA IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162, UIinfo={"groupes":("Impression",)}, fr="Impression des données d'entrée pour une étude sismique avec MISS3D", @@ -14603,7 +15156,7 @@ IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162, INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 07/11/2006 AUTEUR DURAND C.DURAND +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG @@ -14621,7 +15174,7 @@ IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE thomasso D.THOMASSON +# RESPONSABLE THOMASSON D.THOMASSON # from Macro.impr_oar_ops import impr_oar_ops IMPR_OAR =MACRO(nom="IMPR_OAR",op= impr_oar_ops, sd_prod=None, @@ -14673,7 +15226,7 @@ IMPR_OAR =MACRO(nom="IMPR_OAR",op= impr_oar_ops, sd_prod=None, UNITE = SIMP(statut='f',typ='I',defaut=38), AJOUT = SIMP(statut='f', typ='TXM', defaut='NON', into=('OUI', 'NON')), ); -#& MODIF COMMANDE DATE 09/05/2007 AUTEUR VIVAN L.VIVAN +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -14691,6 +15244,7 @@ IMPR_OAR =MACRO(nom="IMPR_OAR",op= impr_oar_ops, sd_prod=None, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE COURTOIS M.COURTOIS IMPR_RESU=PROC(nom="IMPR_RESU",op=39, UIinfo={"groupes":("Impression",)}, fr="Imprimer un maillage et/ou les résultats d'un calcul (différents formats)", @@ -14750,10 +15304,10 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39, fr="Liste des paramètres de sensibilité.", ang="List of sensitivity parameters"),), -# b_partie =BLOC(condition="""((AsType(RESULTAT)==dyna_harmo) or -# (AsType(CHAM_GD)!=carte_sdaster)) and ((FORMAT=='CASTEM') or (FORMAT=='GMSH'))""", + b_partie =BLOC(condition="""(AsType(RESULTAT) in (dyna_harmo, acou_harmo) or + AsType(CHAM_GD) != carte_sdaster) and FORMAT in ('CASTEM', 'GMSH', 'MED')""", PARTIE =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ), -# ), + ), b_extrac =BLOC(condition="RESULTAT != None", fr="extraction d un champ de grandeur", regles=(EXCLUS('TOUT_CHAM','NOM_CHAM'), @@ -14798,9 +15352,20 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39, ### b_gmsh=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'GMSH'))""", fr="sélection des composantes et des entités toplogiques", - NOM_CMP =SIMP(statut='f',typ='TXM',max='**'), MAILLE =SIMP(statut='f',typ=ma ,validators=NoRepeat(),max='**'), GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), + TYPE_CHAM =SIMP(statut='f',typ='TXM',defaut="SCALAIRE", + into=("VECT_2D","VECT_3D","SCALAIRE","TENS_2D","TENS_3D"),), + b_scal =BLOC(condition = "TYPE_CHAM=='SCALAIRE'", + NOM_CMP =SIMP(statut='f',typ='TXM',max='**' ),), + b_vect_2d =BLOC(condition = "TYPE_CHAM=='VECT_2D'", + NOM_CMP =SIMP(statut='o',typ='TXM',min=2,max=2 ),), + b_vect_3d =BLOC(condition = "TYPE_CHAM=='VECT_3D'", + NOM_CMP =SIMP(statut='o',typ='TXM',min=3,max=3 ),), + b_tens_2d =BLOC(condition = "TYPE_CHAM=='TENS_2D'", + NOM_CMP =SIMP(statut='o',typ='TXM',min=4,max=4 ),), + b_tens_3d =BLOC(condition = "TYPE_CHAM=='TENS_3D'", + NOM_CMP =SIMP(statut='o',typ='TXM',min=6,max=6 ),), ), ### b_topologie=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and\ @@ -14827,7 +15392,7 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39, ), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 23/08/2004 AUTEUR CIBHHLV L.VIVAN +#& MODIF COMMANDE DATE 05/05/2008 AUTEUR NISTOR I.NISTOR # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -14845,6 +15410,8 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE NISTOR I.NISTOR + IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de valeurs propres dans un intervalle donné", UIinfo={"groupes":("Résolution",)}, MATR_A =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ), @@ -14867,7 +15434,7 @@ IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de val PREC_SHIFT =SIMP(statut='f',typ='R',defaut= 1.E-2 ), SEUIL_FREQ =SIMP(statut='f',typ='R',defaut= 1.E-2 ), ) ; -#& MODIF COMMANDE DATE 10/05/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 06/05/2008 AUTEUR CNGUYEN C.NGUYEN # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -14885,7 +15452,7 @@ IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de val # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE MCOURTOI M.COURTOIS +# RESPONSABLE COURTOIS M.COURTOIS from Macro.impr_table_ops import impr_table_ops IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None, @@ -14917,10 +15484,10 @@ IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None, "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI"),), b_vale =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))", regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),), - VALE =SIMP(statut='f',typ='R'), - VALE_I =SIMP(statut='f',typ='I'), - VALE_C =SIMP(statut='f',typ='C'), - VALE_K =SIMP(statut='f',typ='TXM'), + VALE =SIMP(statut='f',typ='R',max='**'), + VALE_I =SIMP(statut='f',typ='I',max='**'), + VALE_C =SIMP(statut='f',typ='C',max='**'), + VALE_K =SIMP(statut='f',typ='TXM',max='**'), ), b_crit =BLOC(condition = "CRIT_COMP in ('EQ','NE')", CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ), @@ -14939,6 +15506,21 @@ IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None, NOM_PARA =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'), IMPR_FONCTION =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ), + # Mise en page du tableau ou du graphique + b_tableau = BLOC(condition = "FORMAT == 'TABLEAU'", + fr="Mots-clés propres au format Tableau", + SEPARATEUR =SIMP(statut='f',typ='TXM',defaut=' ', + fr="Séparateur des colonnes du tableau (ex : ' ', ';'...)"), + COMMENTAIRE =SIMP(statut='f',typ='TXM',defaut='#', + fr="Caractère indiquant au traceur de fonction que la ligne peut etre ignorée"), + COMM_PARA =SIMP(statut='f',typ='TXM',defaut='', + fr="Caractère utilisé pour commentariser la ligne des labels de colonnes"), + DEBUT_LIGNE =SIMP(statut='f',typ='TXM',defaut='', + fr="Caractère de debut de ligne"), + FIN_LIGNE =SIMP(statut='f',typ='TXM',defaut='\n', + fr="Caractère de fin de ligne"), + ), + # mise en forme pour les formats qui passent par Graph b_forme =BLOC(condition = "FORMAT == 'XMGRACE'", fr="Données de mise en forme du graphique", @@ -14975,7 +15557,7 @@ IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None, TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) -#& MODIF COMMANDE DATE 10/06/2004 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -14993,6 +15575,7 @@ IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DURAND C.DURAND INCLUDE=MACRO(nom="INCLUDE",op=ops.build_include, UIinfo={"groupes":("Gestion du travail",)}, fr="Débranchement vers un fichier de commandes secondaires", @@ -15000,7 +15583,7 @@ INCLUDE=MACRO(nom="INCLUDE",op=ops.build_include, UNITE = SIMP(statut='o',typ='I'), INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2)), ); -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -15018,6 +15601,7 @@ INCLUDE=MACRO(nom="INCLUDE",op=ops.build_include, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DURAND C.DURAND INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14, UIinfo={"groupes":("Modélisation",)}, fr="Récupérer les caractéristiques d'un matériau dans le Catalogue Materiaux d'Aster ", @@ -15038,7 +15622,7 @@ INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14, UNITE_LONGUEUR =SIMP(statut='f',typ='TXM',into=("M","MM"),defaut="M" ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG @@ -15056,7 +15640,7 @@ INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE D6BHHJP J.P.LEFEBVRE +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE INFO_EXEC_ASTER=OPER(nom="INFO_EXEC_ASTER",op=35,sd_prod=table_sdaster, fr="Récupère différentes informations propres à l'exécution en cours", reentrant='n', @@ -15075,7 +15659,7 @@ INFO_EXEC_ASTER=OPER(nom="INFO_EXEC_ASTER",op=35,sd_prod=table_sdaster, TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 30/05/2007 AUTEUR COURTOIS M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2005 EDF R&D WWW.CODE-ASTER.ORG @@ -15093,6 +15677,7 @@ INFO_EXEC_ASTER=OPER(nom="INFO_EXEC_ASTER",op=35,sd_prod=table_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE COURTOIS M.COURTOIS from Macro.info_fonction_ops import info_fonction_ops def info_fonction_prod(self,ECART_TYPE,RMS,NOCI_SEISME,MAX,NORME, **args): if (RMS != None): return table_sdaster @@ -15163,7 +15748,7 @@ INFO_FONCTION=MACRO(nom="INFO_FONCTION",op=info_fonction_ops,sd_prod=info_foncti ), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -15181,7 +15766,7 @@ INFO_FONCTION=MACRO(nom="INFO_FONCTION",op=info_fonction_ops,sd_prod=info_foncti # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE G8BHHXD X.DESROCHES +# RESPONSABLE DESROCHES X.DESROCHES INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe_sdaster, UIinfo={"groupes":("Post traitements",)}, fr="Définition d'une courbe dans un maillage 2D",reentrant='n', @@ -15245,7 +15830,7 @@ INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe_sdaster, PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-3), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -15263,7 +15848,7 @@ INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE G8BHHXD X.DESROCHES +# RESPONSABLE DESROCHES X.DESROCHES INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface_sdaster, UIinfo={"groupes":("Post traitements",)}, fr="Définir un chemin de type segment de droite dans un maillage 3D",reentrant='n', @@ -15284,7 +15869,7 @@ INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface_sdaster, PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-6), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), ) ; -#& MODIF COMMANDE DATE 16/05/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -15302,6 +15887,7 @@ INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE COURTOIS M.COURTOIS def lire_champ_prod(TYPE_CHAM=None,**args): # Remarque : si cette liste évolue, il faut penser à mettre à jour son # homologue dans macr_adap_mail @@ -15326,6 +15912,8 @@ LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod, NOM_CMP_IDEM =SIMP(statut='f',typ='TXM',into=("OUI",), ), NOM_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',), NOM_CMP_MED =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',), + PROL_ZERO =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",), + fr="Affecte des valeurs nulles la ou le champ n'est pas defini (sinon il y a NaN)"), NUME_PT =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**',), NUME_ORDRE =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**', fr="Numero d ordre du champ à lire",ang="Rank of the field to be read" ), @@ -15348,7 +15936,7 @@ LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod, ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -15366,6 +15954,7 @@ LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE COURTOIS M.COURTOIS from Macro.lire_fonction_ops import lire_fonction_ops @@ -15412,7 +16001,7 @@ LIRE_FONCTION=MACRO(nom="LIRE_FONCTION",op=lire_fonction_ops,sd_prod=lire_foncti INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2005 EDF R&D WWW.CODE-ASTER.ORG @@ -15430,6 +16019,7 @@ LIRE_FONCTION=MACRO(nom="LIRE_FONCTION",op=lire_fonction_ops,sd_prod=lire_foncti # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DEVESA G.DEVESA LIRE_FORC_MISS=OPER(nom="LIRE_FORC_MISS",op= 179,sd_prod=vect_asse_gene, fr="Création d un vecteur assemblé à partir de base modale", reentrant='n', @@ -15442,7 +16032,7 @@ LIRE_FORC_MISS=OPER(nom="LIRE_FORC_MISS",op= 179,sd_prod=vect_asse_gene, UNITE_RESU_FORC =SIMP(statut='f',typ='I',defaut=30), ) ; -#& MODIF COMMANDE DATE 19/09/2006 AUTEUR ACBHHCD G.DEVESA +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2005 EDF R&D WWW.CODE-ASTER.ORG @@ -15460,6 +16050,7 @@ LIRE_FORC_MISS=OPER(nom="LIRE_FORC_MISS",op= 179,sd_prod=vect_asse_gene, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DEVESA G.DEVESA LIRE_IMPE_MISS=OPER(nom="LIRE_IMPE_MISS",op= 164,sd_prod=matr_asse_gene_c, fr="Création d une matrice assemblée à partir de base modale", reentrant='n', @@ -15471,7 +16062,7 @@ LIRE_IMPE_MISS=OPER(nom="LIRE_IMPE_MISS",op= 164,sd_prod=matr_asse_gene_c, TYPE =SIMP(statut='f',typ='TXM',defaut="ASCII",into=("BINAIRE","ASCII") ), ) ; -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -15489,6 +16080,7 @@ LIRE_IMPE_MISS=OPER(nom="LIRE_IMPE_MISS",op= 164,sd_prod=matr_asse_gene_c, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ZENTNER I.ZENTNER from Macro.lire_inte_spec_ops import lire_inte_spec_ops @@ -15497,7 +16089,8 @@ LIRE_INTE_SPEC=MACRO(nom="LIRE_INTE_SPEC",op=lire_inte_spec_ops,sd_prod=table_fo reentrant='n', UIinfo={"groupes":("Fonction",)}, UNITE =SIMP(statut='o',typ='I' ), - FORMAT =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",into=("REEL_IMAG","MODULE_PHASE") ), + FORMAT_C =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",into=("REEL_IMAG","MODULE_PHASE") ), + FORMAT =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","IDEAS") ), NOM_PARA =SIMP(statut='f',typ='TXM',defaut="FREQ", into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP", "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ), @@ -15508,7 +16101,7 @@ LIRE_INTE_SPEC=MACRO(nom="LIRE_INTE_SPEC",op=lire_inte_spec_ops,sd_prod=table_fo TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 21/11/2006 AUTEUR COURTOIS M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -15526,7 +16119,7 @@ LIRE_INTE_SPEC=MACRO(nom="LIRE_INTE_SPEC",op=lire_inte_spec_ops,sd_prod=table_fo # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op= 1,sd_prod=maillage_sdaster, fr="Crée un maillage par lecture d'un fichier au format Aster ou Med", ang="Readings of a mesh file", @@ -15571,7 +16164,7 @@ LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op= 1,sd_prod=maillage_sdaster, INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), # ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -15589,6 +16182,7 @@ LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op= 1,sd_prod=maillage_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DEVESA G.DEVESA def lire_miss_3d_prod(TYPE_RESU,**args): if TYPE_RESU == "TRANS" : return dyna_trans if TYPE_RESU == "HARMO" : return dyna_harmo @@ -15604,7 +16198,7 @@ LIRE_MISS_3D=OPER(nom="LIRE_MISS_3D",op= 163,sd_prod=lire_miss_3d_prod, TYPE_RESU =SIMP(statut='f',typ='TXM',defaut="TRANS",into=("TRANS","HARMO") ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -15622,6 +16216,8 @@ LIRE_MISS_3D=OPER(nom="LIRE_MISS_3D",op= 163,sd_prod=lire_miss_3d_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE POTAPOV S.POTAPOV + LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char, fr="Lire le fichier de résultats au format IDEAS produit par le logiciel EUROPLEXUS", reentrant='n', @@ -15644,7 +16240,7 @@ LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char, ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 13/02/2007 AUTEUR PELLET J.PELLET +#& MODIF COMMANDE DATE 02/06/2008 AUTEUR PELLET J.PELLET # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -15662,7 +16258,7 @@ LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE def lire_resu_prod(TYPE_RESU,**args): if TYPE_RESU == "EVOL_CHAR" : return evol_char @@ -15674,6 +16270,7 @@ def lire_resu_prod(TYPE_RESU,**args): if TYPE_RESU == "HARM_GENE" : return harm_gene if TYPE_RESU == "MODE_MECA" : return mode_meca if TYPE_RESU == "MODE_MECA_C" : return mode_meca_c + if TYPE_RESU == "EVOL_VARC" : return evol_varc raise AsException("type de concept resultat non prevu") # pour éviter d'écrire 3 fois cette liste : @@ -15703,7 +16300,7 @@ def l_nom_cham_pas_elga(): return ( "SIGM_NOZ2_ELGA", "SIPO_ELNO_DEPL", "SIPO_ELNO_SIEF", "SIPO_NOEU_DEPL", "SIPO_NOEU_SIEF", "SIRE_ELNO_DEPL", "SIRE_NOEU_DEPL", "TEMP", "THETA", "VALE_CONT", "VALE_NCOU_MAXI", "VARI_ELNO", "VARI_ELNO_COQU", - "VARI_ELNO_ELGA", "VARI_ELNO_TUYO", "VARI_NOEU", "VARI_NOEU_ELGA", "VARI_NON_LOCAL", + "VARI_ELNO_ELGA", "VARI_ELNO_TUYO", "VARI_NOEU", "VARI_NOEU_ELGA", "VITE", "VITE_ABSOLU", "VITE_VENT", ) @@ -15717,7 +16314,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n', #---------------------- TYPE_RESU =SIMP(statut='o',typ='TXM',into=("EVOL_THER","EVOL_ELAS","EVOL_NOLI","MODE_MECA", "MODE_MECA_C","DYNA_TRANS","DYNA_HARMO","HARM_GENE", - "EVOL_CHAR") ), + "EVOL_CHAR","EVOL_VARC") ), FORMAT =SIMP(statut='o',typ='TXM',into=("IDEAS","IDEAS_DS58","ENSIGHT","MED") ), @@ -15727,7 +16324,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n', regles=(UN_PARMI('MAILLAGE','MODELE'),), MAILLAGE =SIMP(statut='f',typ=maillage_sdaster), MODELE =SIMP(statut='f',typ=modele_sdaster), - + COMP_INCR =C_COMP_INCR(), NB_VARI =SIMP(statut='f',typ='I' ), CHAM_MATER =SIMP(statut='f',typ=cham_mater,), @@ -15816,12 +16413,14 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n', UNITE =SIMP(statut='f',typ='I',defaut= 81, fr="Le fichier est : fort.n.",), FORMAT_MED =FACT(statut='f',max='**', regles=(ENSEMBLE('NOM_CMP','NOM_CMP_MED'),), - NOM_CHAM =SIMP(statut='o',typ='TXM',into=l_nom_cham_pas_elga()), + NOM_CHAM =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO(),), NOM_CHAM_MED =SIMP(statut='o',typ='TXM', fr="Nom du champ dans le fichier MED.", ), NOM_CMP =SIMP(statut='f',typ='TXM',max='**', fr="Nom des composantes dans ASTER.", ), NOM_CMP_MED =SIMP(statut='f',typ='TXM',max='**', fr="Nom des composantes dans MED.", ), ), - ), + PROL_ZERO =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",), + fr="Affecte des valeurs nulles la ou le champ n'est pas defini (sinon il y a NaN)"), + ), # 2) blocs selon le type du résultat : #--------------------------------- @@ -15849,7 +16448,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n', ), ), ) ; -#& MODIF COMMANDE DATE 03/04/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG @@ -15867,6 +16466,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE COURTOIS M.COURTOIS from Macro.lire_table_ops import lire_table_ops @@ -15881,7 +16481,7 @@ LIRE_TABLE=MACRO(nom="LIRE_TABLE",op=lire_table_ops,sd_prod=table_sdaster, TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 13/02/2006 AUTEUR DURAND C.DURAND +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2005 EDF R&D WWW.CODE-ASTER.ORG @@ -15899,7 +16499,7 @@ LIRE_TABLE=MACRO(nom="LIRE_TABLE",op=lire_table_ops,sd_prod=table_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# ====================================================================== +# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA MAC_MODES=OPER(nom="MAC_MODES",op= 141,sd_prod=table_sdaster, fr="Normalisation de modes propres", @@ -15911,7 +16511,7 @@ MAC_MODES=OPER(nom="MAC_MODES",op= 141,sd_prod=table_sdaster, TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 15/05/2007 AUTEUR GNICOLAS G.NICOLAS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -15965,8 +16565,8 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada # # 2. Version de HOMARD # - VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V8_7", - into=("V8_7", "V8_N", "V8_N_PERSO"), + VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V8_11", + into=("V8_11", "V8_N", "V8_N_PERSO"), fr="Version de HOMARD", ang="HOMARD release"), # @@ -16113,6 +16713,18 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada ang="Absolute or relative value for error indicator" ), # ), +# +# 6.1.7. Type d'opération sur l'indicateur : la valeur par maille ou le max du saut entre mailles +# + b_usage_indicateur = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ", + fr="Usage de l'indicateur : direct ou saut", + ang="Use type for error indicator : direct or jump", +# + TYPE_OPER_INDICA = SIMP(statut='f',typ='TXM',defaut="MAILLE",into=("MAILLE","SAUT"), + fr="Usage de l'indicateur : la valeur par maille ou le saut entre mailles voisines", + ang="Use of indicator : value over every mesh or jump between neighbour" ), +# + ), # ) , # @@ -16244,7 +16856,27 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada ang="Minimum level for unrefinement"), ) , # -# 10. Suivi d'une frontiere +# 10. Filtrage de l'adaptation par des groupes +# + b_filtrage_par_des_groupes = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \ + (ADAPTATION == 'RAFFINEMENT') or \ + (ADAPTATION == 'RAFFINEMENT_UNIFORME') or \ + (ADAPTATION == 'RAFFINEMENT_ZONE') or \ + (ADAPTATION == 'DERAFFINEMENT') or \ + (ADAPTATION == 'DERAFFINEMENT_UNIFORME') " , + fr="Filtrage de l'adaptation par des groupes.", + ang="Filtering of adaptation by groups.", +# + GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**', + fr="Liste des groupes de mailles pour le filtrage de l'adaptation.", + ang="List of groups of meshes for filtering of adaptation." ), +# + GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**', + fr="Liste des groupes de noeuds pour le filtrage de l'adaptation.", + ang="List of groups of nodes for filtering of adaptation." ), + ) , +# +# 11. Suivi d'une frontiere # MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage_sdaster, fr="Maillage de la frontiere à suivre", @@ -16254,41 +16886,41 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada fr="Information complémentaire sur la frontière", ang="Further information about boundary", # - GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**', - fr="Liste des groupes de mailles définissant la frontière", - ang="Mesh groups which define the boundary" ), + GROUP_MA_FRONT = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**', + fr="Liste des groupes de mailles définissant la frontière", + ang="Mesh groups which define the boundary" ), # ) , # -# 11. Mise à jour de champs sur le nouveau maillage +# 12. Mise à jour de champs sur le nouveau maillage # MAJ_CHAM = FACT(statut='f',max='**', fr="Mise à jour de champs sur le nouveau maillage.", ang="Updating of fields over the new mesh.", # -# 11.1. Le nom du champ de grandeur qui contiendra le resultat de la mise a jour +# 12.1. Le nom du champ de grandeur qui contiendra le resultat de la mise a jour # CHAM_MAJ = SIMP(statut='o',typ=CO, fr="Nom du champ de grandeur qui contiendra le champ mis à jour", ang="Name of the field for the updated field"), # -# 11.2. Le type du champ qui contiendra le resultat de la mise a jour +# 12.2. Le type du champ qui contiendra le resultat de la mise a jour # TYPE_CHAM = SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO(), fr="Type du champ qui contiendra le champ mis à jour", ang="Type of the field for the updated field" ), # -# 11.3. Le champ a interpoler +# 12.3. Le champ a interpoler # regles=(UN_PARMI('CHAM_GD','RESULTAT')), # -# 11.3.1. Sous forme de champ de grandeur +# 12.3.1. Sous forme de champ de grandeur # CHAM_GD = SIMP(statut='f',typ=cham_gd_sdaster, fr="Champ de grandeur Code_Aster contenant le champ à mettre à jour", ang="Champ de grandeur with field to be updated" ), # -# 11.3.2. Sous forme de champ dans un resultat +# 12.3.2. Sous forme de champ dans un resultat # RESULTAT = SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther), fr="Resultat contenant le champ à mettre à jour", @@ -16304,13 +16936,13 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada # ), # -# 11.4. Est-ce un champ dérivé +# 12.4. Est-ce un champ dérivé # SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom), fr="Paramètre de sensibilité.", ang="Sensitivity parameter"), # -# 11.5. Le paramètre temporel pour le champ a interpoler +# 12.5. Le paramètre temporel pour le champ a interpoler # b_parametre_temporel = BLOC(condition="(RESULTAT != None)", fr="Choix éventuel du paramètre temporel pour le champ à interpoler", @@ -16318,20 +16950,20 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada # regles=(EXCLUS('NUME_ORDRE','INST'),), # -# 11.5.1. Soit le numero d'ordre +# 12.5.1. Soit le numero d'ordre # NUME_ORDRE = SIMP(statut='f',typ='I', fr="Numero d ordre du champ à mettre à jour", ang="Rank of the field to be updated" ), # -# 11.5.2. Soit l'instant -# 11.5.2.1. Sa valeur +# 12.5.2. Soit l'instant +# 12.5.2.1. Sa valeur # INST = SIMP(statut='f',typ='R', fr="Instant associé", ang="Instant" ), # -# 11.5.2.2. La précision du choix de l'instant +# 12.5.2.2. La précision du choix de l'instant # b_precision = BLOC(condition="(INST != None)", fr="Choix de la précision du choix de l'instant", @@ -16350,38 +16982,38 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada ), ), # -# 12. Les options d'analyse de maillage ; par defaut, on ne fait que les nombres -# 12.1. Nombre de noeuds et éléments +# 13. Les options d'analyse de maillage ; par defaut, on ne fait que les nombres +# 13.1. Nombre de noeuds et éléments # NOMBRE = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"), fr="Nombre de noeuds et éléments du maillage", ang="Number of nodes and éléments in the mesh" ), # -# 12.2. Determination de la qualité des éléments du maillage +# 13.2. Determination de la qualité des éléments du maillage # QUALITE = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"), fr="Qualité du maillage", ang="Mesh quality" ), # -# 12.3. Connexite du maillage +# 13.3. Connexite du maillage # CONNEXITE = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"), fr="Connexité du maillage.", ang="Mesh connexity." ), # -# 12.4. Taille des sous-domaines du maillage +# 13.4. Taille des sous-domaines du maillage # TAILLE = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"), fr="Tailles des sous-domaines du maillage.", ang="Sizes of mesh sub-domains." ), # -# 12.5. Controle de la non-interpenetration des éléments +# 13.5. Controle de la non-interpenetration des éléments # INTERPENETRATION= SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"), fr="Controle de la non interpénétration des éléments.", ang="Overlapping checking." ), # -# 13. Gestion des éléments autres que ceux compatibles avec HOMARD +# 14. Gestion des éléments autres que ceux compatibles avec HOMARD # "REFUSER" : ils sont refuses (defaut) # "IGNORER" : ils sont ignorés # @@ -16390,7 +17022,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada ang="Incompatible elements for HOMARD" ), # ) ; -#& MODIF COMMANDE DATE 25/09/2006 AUTEUR MJBHHPE J.L.FLEJOU +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -16408,7 +17040,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE F1BHHAJ J.ANGLES +# RESPONSABLE GALENNE E.GALENNE from Macro.macr_ascouf_calc_ops import macr_ascouf_calc_ops def macr_ascouf_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS,CHARGE,RESU_THER,**args): self.type_sdprod(MODELE,modele_sdaster) @@ -16635,7 +17267,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op=macr_ascouf_calc_ops,sd_prod=ma INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -16653,7 +17285,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op=macr_ascouf_calc_ops,sd_prod=ma # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE F1BHHAJ J.ANGLES +# RESPONSABLE GALENNE E.GALENNE from Macro.macr_ascouf_mail_ops import macr_ascouf_mail_ops MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op=macr_ascouf_mail_ops,sd_prod=maillage_sdaster, fr="Engendre le maillage d'un coude sain ou comportant une fissure ou une (ou plusieurs) sous-épaisseur(s)", @@ -16783,7 +17415,7 @@ MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op=macr_ascouf_mail_ops,sd_prod=ma INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 25/09/2006 AUTEUR MJBHHPE J.L.FLEJOU +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -16801,7 +17433,7 @@ MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op=macr_ascouf_mail_ops,sd_prod=ma # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE F1BHHAJ J.ANGLES +# RESPONSABLE GALENNE E.GALENNE from Macro.macr_aspic_calc_ops import macr_aspic_calc_ops def macr_aspic_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS_1,FOND_FISS_2,CHARGE,RESU_THER,**args): @@ -17040,7 +17672,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=macr_aspic_calc_ops,sd_prod=macr_ TITRE =SIMP(statut='f',typ='TXM'), ) -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -17058,7 +17690,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=macr_aspic_calc_ops,sd_prod=macr_ # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE F1BHHAJ J.ANGLES +# RESPONSABLE GALENNE E.GALENNE from Macro.macr_aspic_mail_ops import macr_aspic_mail_ops @@ -17137,287 +17769,7 @@ MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= macr_aspic_mail_ops,sd_prod=mail INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), ) ; -#& MODIF COMMANDE DATE 25/09/2006 AUTEUR MJBHHPE J.L.FLEJOU -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# ====================================================================== - -from Macro.macr_cabri_calc_ops import macr_cabri_calc_ops - -def macr_cabri_calc_prod(self,MODELE_THER,MODELE_MECA,CHAM_MATER, - CHAR_THER,CHAR_MECA,RESU_THER,**args): - if MODELE_THER != None: - self.type_sdprod(MODELE_THER,modele_sdaster) - if MODELE_MECA != None: - self.type_sdprod(MODELE_MECA,modele_sdaster) - if RESU_THER != None: - self.type_sdprod(RESU_THER,evol_ther) - if CHAM_MATER != None: - self.type_sdprod(CHAM_MATER,cham_mater) - if CHAR_THER != None: - for m in CHAR_THER: - self.type_sdprod(m['CHARGE'],char_ther) - if CHAR_MECA != None: - for m in CHAR_MECA: - self.type_sdprod(m['CHARGE'],char_meca) - return evol_noli - - -MACR_CABRI_CALC=MACRO(nom="MACR_CABRI_CALC", - op=macr_cabri_calc_ops, - sd_prod=macr_cabri_calc_prod, - fr="Calcul thermo-mécanique d'une jonction boulonnée de tuyauterie", - reentrant='n', - UIinfo={"groupes":("Outils métier",)}, - MAILLAGE = SIMP(statut='o',typ=maillage_sdaster,), - AFFE_MATERIAU = FACT(statut='o',max='**', - regles=(UN_PARMI('TOUT','GROUP_MA',),), - TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ), - GROUP_MA = SIMP(statut='f',typ='TXM',into=( - "BRIDE", - "GOUJON", - "ROND", - "ECROU", - "JOINT",) ), - MATER = SIMP(statut='o',typ=mater_sdaster), - TEMP_REF = SIMP(statut='d',typ='R',defaut= 25. ), - ), - CHAM_MATER = SIMP(statut = 'f',typ=CO,), - MODELE_THER= SIMP(statut = 'f',typ=CO,), - - DEFI_CHAR_THER = FACT(statut ='d', - TEMP_INIT = SIMP(statut='d',typ='R',defaut= 25.,), - COEF_H_FLUI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),), - TEMP_EXT_FLUI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),), - COEF_H_AIR = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),), - TEMP_EXT_AIR = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),), - LIST_INST = SIMP(statut='f',typ=listr8_sdaster), - ), - - CHAR_THER = FACT(statut = 'f',max=4, - CHARGE = SIMP(statut='o',typ=CO), - TYPE = SIMP(statut='o',typ='TXM', - into=("BRIDE_FLUIDE","BRIDE_AIR","ECROU_GOUJON", - "BRIDE_JOINT"),) - ), - - RESU_THER = SIMP(statut = 'f',typ=CO,), - - - MODELE_MECA= SIMP(statut = 'f',typ=CO,), - - DEFI_CHAR_MECA = FACT(statut='o', - PRETENS = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),), - PRES_REP = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),), - EFFE_FOND = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster),), - ), - - CHAR_MECA = FACT(statut = 'f',max=11, - CHARGE = SIMP(statut='o',typ=CO), - TYPE = SIMP(statut='o',typ='TXM', - into=("BLOC_BAS_GOUJ","BLOC_BAS_JOINT", - "BLOC_LAT_ALES","BLOC_LAT_NALES", - "PLAN_TUBE", - "PRES_FLU","EFFET_FOND", - "CONT_JOINT", - "DEFO_THER", - "SERR_ECROU_1","SERR_ECROU_2",),) - ), - - RELATION = SIMP(statut='f',typ='TXM', - into=('VMIS_ISOT_TRAC','ELAS','ELAS_VMIS_TRAC',),), - - SOLVEUR = FACT(statut='d', - METHODE = SIMP(statut='d',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT",) ), - b_mult_front = BLOC(condition = "METHODE == 'MULT_FRONT' ", - fr="Paramètres de la méthode multi frontale", - RENUM = SIMP(statut='d',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ), - NPREC = SIMP(statut='d',typ='I',defaut=8), - STOP_SINGULIER = SIMP(statut='d',typ='TXM',defaut="OUI",into=("OUI","NON") ), - ), - ), - INCREMENT = FACT(statut='f', - regles=(EXCLUS('NUME_INST_INIT','INST_INIT'), - EXCLUS('NUME_INST_FIN','INST_FIN'),), - LIST_INST =SIMP(statut='f',typ=listr8_sdaster), - EVOLUTION =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE", - into=("CHRONOLOGIQUE",) ), - NUME_INST_INIT =SIMP(statut='f',typ='I'), - INST_INIT =SIMP(statut='f',typ='R'), - NUME_INST_FIN =SIMP(statut='f',typ='I'), - INST_FIN =SIMP(statut='f',typ='R'), - PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-3 ), - # DEBUT DE BLOC POUR LA SUBDIVISION DES PAS DE TEMPS - SUBD_METHODE =SIMP( statut='f',typ='TXM', - into =("AUCUNE","UNIFORME","EXTRAPOLE"), - defaut="AUCUNE", - fr="Méthode de subdivision des pas de temps en cas de non-convergence" - ), - b_subd_unif=BLOC(condition = "SUBD_METHODE == 'UNIFORME'", - regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),), - SUBD_COEF_PAS_1=SIMP(statut='f',typ='R',defaut=1.0,val_min=0.0, - fr="Coefficient multiplicateur de la 1ère subdivision"), - SUBD_PAS =SIMP(statut='f',typ='I',defaut=4,val_min=2, - fr="Nombre de subdivision d'un pas de temps"), - SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2, - fr="Nombre maximum de niveau de subdivision d'un pas de temps"), - SUBD_PAS_MINI=SIMP(statut='f',typ='R',val_min=0.0, - fr="Pas de temps en dessous duquel on ne subdivise plus"), - ), - b_subd_extr=BLOC(condition = "SUBD_METHODE == 'EXTRAPOLE'", - regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),), - SUBD_OPTION =SIMP(statut='f',typ='TXM', - into =("IGNORE_PREMIERES","GARDE_DERNIERES",), - defaut="IGNORE_PREMIERES", - fr="Technique d'extrapolation : les 1ere itérations sont ignorées ou les dernières sont gardées"), - SUBD_ITER_IGNO =SIMP(statut='c',typ='I',defaut=3,val_min=0, - fr="Les n premières itérations sont ignorées pour l'extrapolation"), - SUBD_ITER_FIN =SIMP(statut='c',typ='I',defaut=8,val_min=3, - fr="Seules les n dernières itérations sont prises pour l'extrapolation"), - SUBD_PAS =SIMP(statut='c',typ='I',defaut=4,val_min=2, - fr="Nombre de subdivision d'un pas de temps en cas divergence"), - SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2, - fr="Nombre maximum de niveau de subdivision d'un pas de temps"), - SUBD_PAS_MINI=SIMP(statut='f',typ='R',val_min=0.0, - fr="Pas de temps en dessous duquel on ne subdivise plus"), - SUBD_ITER_PLUS =SIMP(statut='c',typ='I',defaut=50,val_min=20, - fr="% itération autorisée en plus"), - ), - # FIN DE BLOC POUR LA SUBDIVISION DES PAS DE TEMPS - OPTI_LIST_INST =SIMP(statut='f',typ='TXM',into=("INCR_MAXI",),), - NOM_CHAM =SIMP(statut='f',typ='TXM',), - NOM_CMP =SIMP(statut='f',typ='TXM',), - VALE =SIMP(statut='f',typ='R'), - ), - NEWTON =FACT(statut='d', - REAC_INCR =SIMP(statut='f',typ='I',defaut= 1 ), - PREDICTION =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE","EXTRAPOL") ), - MATRICE =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ), - PAS_MINI_ELAS =SIMP(statut='f',typ='R',defaut=0.0E+0), - REAC_ITER =SIMP(statut='f',typ='I',defaut=0), - EVOL_NOLI =SIMP(statut='f',typ=evol_noli), - ), - RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE", - into=("IMPLICITE",)), - CONVERGENCE =FACT(statut='d', - regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),), - SIGM_REFE =SIMP(statut='f',typ='R'), - EPSI_REFE =SIMP(statut='f',typ='R'), - FLUX_THER_REFE =SIMP(statut='f',typ='R'), - RESI_REFE_RELA =SIMP(statut='f',typ='R'), - RESI_GLOB_MAXI =SIMP(statut='f',typ='R'), - RESI_GLOB_RELA =SIMP(statut='f',typ='R'), - ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut=10), - ITER_GLOB_ELAS =SIMP(statut='f',typ='I',defaut=25), - ), - ); - -#& MODIF COMMANDE DATE 07/02/2005 AUTEUR MABBAS M.ABBAS -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# ====================================================================== - -from Macro.macr_cabri_mail_ops import macr_cabri_mail_ops - -MACR_CABRI_MAIL=MACRO(nom="MACR_CABRI_MAIL", - op=macr_cabri_mail_ops, - sd_prod=maillage_sdaster, - fr="maillage d'une jonction boulonnée de tuyauterie", - reentrant='n', - UIinfo={"groupes":("Outils métier",)}, - EXEC_MAILLAGE = FACT(statut='o', - LOGICIEL = SIMP(statut = 'o',typ='TXM',into=("GIBI2000",),), - UNITE_DATG = SIMP(statut = 'f',typ='I',defaut=70,), - UNITE_MGIB = SIMP(statut = 'f',typ='I',defaut=19,), - NIVE_GIBI = SIMP(statut = 'f',typ='I',defaut=10, - into = (3,4,5,6,7,8,9,10,11), - ), - ), - RAFF_MAILLAGE = FACT(statut = 'd', - NB_RADIAL = SIMP(statut = 'f',typ='I',defaut=2,), - NB_CIRCONF = SIMP(statut = 'f',typ='I',defaut=3,), - NB_VERTICAL = SIMP(statut = 'f',typ='I',defaut=6,), - NB_ALESAGE = SIMP(statut = 'f',typ='I',defaut=5,), - ), - VERI_MAIL = FACT(statut='d', - VERIF = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), - APLAT = SIMP(statut='f',typ='R',defaut= 1.0E-3 ), - ), - GEOM_BRID = FACT(statut = 'o', - NORME = SIMP(statut = 'o',typ='TXM',into=("OUI","NON"),), - b_bride_iso = BLOC(condition = "NORME == 'OUI'", - TYPE = SIMP(statut='o',typ='TXM', - into=('A','AA','B','B1','C','D','D1','E','F', - 'FF','G','GG','H','H1','I','J','J1', - 'K','L','L1','M','N','O','P','S','T','W'), - ), - ), - b_bride_niso = BLOC(condition = "NORME == 'NON'", - TUBU_D_EXT = SIMP(statut='o',typ='R',), - TUBU_H = SIMP(statut='o',typ='R',), - BRID_D_EXT = SIMP(statut='o',typ='R',), - BRID_D_INT = SIMP(statut='o',typ='R',), - BRID_H = SIMP(statut='o',typ='R',), - BRID_D_CONGE = SIMP(statut='o',typ='R',), - BRID_R_CONGE = SIMP(statut='o',typ='R',), - BRID_D_EPAUL = SIMP(statut='o',typ='R',), - BRID_H_EPAUL = SIMP(statut='o',typ='R',), - BRID_D_ALESAG = SIMP(statut='o',typ='R',), - BRID_P_ALESAG = SIMP(statut='o',typ='R',), - BRID_H_ALESAG = SIMP(statut='o',typ='R',), - GOUJ_N_GOUJON = SIMP(statut='o',typ='I',), - GOUJ_D_GOUJON = SIMP(statut='o',typ='R',), - GOUJ_E_FILET = SIMP(statut='o',typ='R',), - GOUJ_D_RONDEL = SIMP(statut='o',typ='R',), - GOUJ_E_RONDEL = SIMP(statut='o',typ='R',), - GOUJ_D_ECROU = SIMP(statut='o',typ='R',), - GOUJ_E_ECROU = SIMP(statut='o',typ='R',), - ETAN_E_JOINT = SIMP(statut='o',typ='R',), - ), - ), - IMPRESSION = FACT(statut='d', - UNITE = SIMP(statut='f',typ='I'), - FORMAT = SIMP(statut='f',typ='TXM',defaut="ASTER", - into=("ASTER","CASTEM","IDEAS"), - ), - b_impr_castem = BLOC(condition = "FORMAT == 'CASTEM'", - NIVE_GIBI = SIMP(statut='f',typ='I',defaut=10,into=(3,10),), - ), - b_impr_ideas = BLOC(condition = "FORMAT == 'IDEAS'", - VERSION = SIMP(statut='f',typ='I',defaut=5,into=(4,5),), - ), - ), - ); - -#& MODIF COMMANDE DATE 03/01/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2003 EDF R&D WWW.CODE-ASTER.ORG @@ -17435,7 +17787,7 @@ MACR_CABRI_MAIL=MACRO(nom="MACR_CABRI_MAIL", # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE JMBHH01 J.M.PROIX +# RESPONSABLE FLEJOU J.L.FLEJOU from Macro.macr_cara_poutre_ops import macr_cara_poutre_ops @@ -17462,8 +17814,11 @@ MACR_CARA_POUTRE=MACRO(nom="MACR_CARA_POUTRE",op=macr_cara_poutre_ops,sd_prod=ta b_gma_bord = BLOC( condition = "GROUP_MA_BORD != None", fr=" calcul des carac. mecaniques", + regles=(UN_PARMI('NOEUD','GROUP_NO')), - NOEUD =SIMP(statut='f',typ=no,max='**', + NOEUD =SIMP(statut='f',typ=no, max='**', + fr="Simplement pour empecher des pivots nuls le cas echeant. Fournir un noeud quelconque"), + GROUP_NO =SIMP(statut='f',typ=grno,max='**', fr="Simplement pour empecher des pivots nuls le cas echeant. Fournir un noeud quelconque"), GROUP_MA_INTE =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**', fr="groupes de mailles linéiques bordant des trous dans la section"), @@ -17478,7 +17833,7 @@ MACR_CARA_POUTRE=MACRO(nom="MACR_CARA_POUTRE",op=macr_cara_poutre_ops,sd_prod=ta fr="type de conditions aux limites sur le plancher supérieur" ), ), ) -#& MODIF COMMANDE DATE 13/12/2006 AUTEUR PELLET J.PELLET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG @@ -17496,7 +17851,7 @@ MACR_CARA_POUTRE=MACRO(nom="MACR_CARA_POUTRE",op=macr_cara_poutre_ops,sd_prod=ta # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== - +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE from Macro.macr_ecla_pg_ops import macr_ecla_pg_ops @@ -17539,7 +17894,7 @@ MACR_ECLA_PG=MACRO(nom="MACR_ECLA_PG",op=macr_ecla_pg_ops,sd_prod=macr_ecla_pg_p PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3), CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ), ) -#& MODIF COMMANDE DATE 12/03/2007 AUTEUR DEVESA G.DEVESA +#& MODIF COMMANDE DATE 06/05/2008 AUTEUR CORUS M.CORUS # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -17557,6 +17912,8 @@ MACR_ECLA_PG=MACRO(nom="MACR_ECLA_PG",op=macr_ecla_pg_ops,sd_prod=macr_ecla_pg_p # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE CORUS M.CORUS + MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op= 81,sd_prod=macr_elem_dyna, fr="Définition d'un macro élément pour analyse modale ou harmonique par sous structuration dynamique", reentrant='n', @@ -17564,12 +17921,11 @@ MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op= 81,sd_prod=macr_elem_dyna, regles=(EXCLUS('MATR_AMOR','AMOR_REDUIT' ), PRESENT_ABSENT('MATR_IMPE','MATR_RIGI','MATR_MASS'),), BASE_MODALE =SIMP(statut='o',typ=base_modale ), - MATR_RIGI =SIMP(statut='f',typ=matr_asse_depl_r ), + MATR_RIGI =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c),), MATR_MASS =SIMP(statut='f',typ=matr_asse_depl_r ), MATR_AMOR =SIMP(statut='f',typ=matr_asse_depl_r ), - AMOR_REDUIT =SIMP(statut='f',typ='R',max='**'), - OPTION =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","RITZ", - "DIAG_MASS") ), + AMOR_REDUIT =SIMP(statut='f',typ='R',max='**'), + SANS_GROUP_NO =SIMP(statut='f',typ=grno ), MATR_IMPE =SIMP(statut='f',typ=matr_asse_gene_c ), b_matr_impe =BLOC(condition = "MATR_IMPE != None", FREQ_EXTR =SIMP(statut='o',typ='R' ), @@ -17580,7 +17936,7 @@ MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op= 81,sd_prod=macr_elem_dyna, VECT_ASSE_GENE =SIMP(statut='o',typ=vect_asse_gene ), ), ) ; -#& MODIF COMMANDE DATE 31/10/2006 AUTEUR A3BHHAE H.ANDRIAMBOLOLONA +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -17598,6 +17954,7 @@ MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op= 81,sd_prod=macr_elem_dyna, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE PELLET J.PELLET MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,reentrant='f', UIinfo={"groupes":("Matrices/vecteurs",)}, fr="Définition d'un macro-élément pour l'analyse statique par sous-structuration", @@ -17632,7 +17989,7 @@ MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,reentrant= ), ) ; -#& MODIF COMMANDE DATE 27/11/2006 AUTEUR GNICOLAS G.NICOLAS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG @@ -18011,7 +18368,7 @@ MACR_FIABILITE = MACRO ( nom="MACR_FIABILITE",op=macr_fiabilite_ops, ), # ); -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG @@ -18081,7 +18438,7 @@ MACR_FIAB_IMPR=MACRO(nom="MACR_FIAB_IMPR",op=macr_fiab_impr_ops, ), # ); -#& MODIF COMMANDE DATE 15/05/2007 AUTEUR GNICOLAS G.NICOLAS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -18114,8 +18471,8 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops, # # 2. Version de HOMARD # - VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V8_7", - into=("V8_7", "V8_N", "V8_N_PERSO"), + VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V8_11", + into=("V8_11", "V8_N", "V8_N_PERSO"), fr="Version de HOMARD", ang="HOMARD release"), # @@ -18187,24 +18544,25 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops, fr="Acceptation d'éléments incompatibles avec HOMARD", ang="Incompatible elements for HOMARD" ), ) ; -#& MODIF COMMANDE DATE 22/05/2007 AUTEUR GALENNE E.GALENNE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DURAND C.DURAND from Macro.macr_lign_coupe_ops import macr_lign_coupe_ops @@ -18214,26 +18572,26 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table fr="Extraction des valeurs d'un résultat dans une ou plusieurs tables sur des lignes de coupe définies" +" par deux points et un intervalle", regles=(UN_PARMI("RESULTAT","CHAM_GD"),), - + RESULTAT =SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther) ), CHAM_GD =SIMP(statut='f',typ=(cham_gd_sdaster)), b_extrac =BLOC(condition = "RESULTAT != None",fr="extraction des résultats", - regles=(EXCLUS('NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',), ), - NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'), + regles=(EXCLUS('NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',), ), + NUME_ORDRE =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'), LIST_ORDRE =SIMP(statut='f',typ=listis_sdaster), - INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'), + INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'), LIST_INST =SIMP(statut='f',typ=listr8_sdaster), - PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-6), + PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-6), CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")), ), # extraction des résultats b_meca =BLOC(condition = "AsType(RESULTAT) in (evol_elas,evol_noli)",fr="résultat mécanique", - NOM_CHAM =SIMP(statut='f',typ='TXM',defaut='SIGM_NOEU_DEPL' ), + NOM_CHAM =SIMP(statut='f',typ='TXM',defaut='SIGM_NOEU_DEPL' ), ), b_ther =BLOC(condition = "AsType(RESULTAT) in (evol_ther,)",fr="résultat thermique", - NOM_CHAM =SIMP(statut='f',typ='TXM',defaut='TEMP' ), + NOM_CHAM =SIMP(statut='f',typ='TXM',defaut='TEMP' ), ), b_cham =BLOC(condition = "CHAM_GD!=None", NOM_CHAM =SIMP(statut='f',typ='TXM',),), @@ -18245,11 +18603,11 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table regles=(EXCLUS('GROUP_MA_1','MAILLE_1'),), GROUP_MA_1 =SIMP(statut='f',typ=grma), MAILLE_1 =SIMP(statut='f',typ=ma,max='**'),), - + LIGN_COUPE =FACT(statut='o',max='**', regles=(EXCLUS("NOM_CMP","INVARIANT","ELEM_PRINCIPAUX","RESULTANTE"), PRESENT_PRESENT("TRAC_DIR","DIRECTION"), - EXCLUS("TRAC_DIR","TRAC_NOR"), + EXCLUS("TRAC_DIR","TRAC_NOR"), PRESENT_PRESENT("TRAC_DIR","NOM_CMP"), PRESENT_PRESENT("TRAC_NOR","NOM_CMP"),), @@ -18266,7 +18624,7 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table RESULTANTE =SIMP(statut='f',typ='TXM',max='**'), TRAC_NOR =SIMP(statut='f',typ='TXM',into=("OUI",)), TRAC_DIR =SIMP(statut='f',typ='TXM',into=("OUI",)), - DIRECTION =SIMP(statut='f',typ='R',max='**'), + DIRECTION =SIMP(statut='f',typ='R',max='**'), b_local =BLOC(condition = "REPERE=='LOCAL' ", @@ -18275,34 +18633,42 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table b_utili =BLOC(condition = "REPERE=='UTILISATEUR'", ANGL_NAUT =SIMP(statut='o',typ='R',min=3,max=3),), - b_grno =BLOC(condition = "TYPE=='GROUP_NO'", + b_grno =BLOC(condition = "TYPE=='GROUP_NO'", GROUP_NO =SIMP(statut='o',typ=grno, max=1),), - b_grma =BLOC(condition = "TYPE=='GROUP_MA'", + b_grma =BLOC(condition = "TYPE=='GROUP_MA'", GROUP_MA =SIMP(statut='o',typ=grma, max=1), MAILLAGE =SIMP(statut='o',typ=maillage_sdaster),), - b_segment =BLOC(condition = "TYPE=='SEGMENT'", + b_segment =BLOC(condition = "TYPE=='SEGMENT'", NB_POINTS =SIMP(statut='o',typ='I',max=1), - COOR_ORIG =SIMP(statut='o',typ='R',min=2,max=3), + COOR_ORIG =SIMP(statut='o',typ='R',min=2,max=3), COOR_EXTR =SIMP(statut='o',typ='R',min=2,max=3),), - b_arc =BLOC(condition = "TYPE=='ARC'", + b_arc =BLOC(condition = "TYPE=='ARC'", NB_POINTS =SIMP(statut='o',typ='I',max=1), - COOR_ORIG =SIMP(statut='o',typ='R',min=2,max=3), + COOR_ORIG =SIMP(statut='o',typ='R',min=2,max=3), CENTRE =SIMP(statut='o',typ='R',min=2,max=3), ANGLE =SIMP(statut='o',typ='R',max=1), DNOR =SIMP(statut='f',typ='R',min=2,max=3),), b_cylind =BLOC(condition = ("REPERE=='CYLINDRIQUE' and TYPE!='ARC'"), - ORIGINE =SIMP(statut='f',typ='R',min=2,max=3), + ORIGINE =SIMP(statut='f',typ='R',min=2,max=3), AXE_Z =SIMP(statut='f',typ='R',min=3,max=3),), - + + DISTANCE_MAX =SIMP(statut='f',typ='R',defaut=0., + fr="Si la distance entre un noeud de la ligne de coupe et le maillage coupé " + +"est > DISTANCE_MAX, ce noeud sera ignoré."), + ), ) ; -#& MODIF COMMANDE DATE 04/04/2006 AUTEUR CIBHHLV L.VIVAN +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE +#MACRO_BASCULE_SCHEMA = MACRO(nom="MACRO_BASCULE_SCHEMA", op=macro_bascule_schema_ops, sd_prod=evol_noli,reentrant='f', + + +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -18320,7 +18686,7 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE G8BHHXD X.DESROCHES +# RESPONSABLE DESROCHES X.DESROCHES from Macro.macro_elas_mult_ops import macro_elas_mult_ops @@ -18387,7 +18753,7 @@ MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2)), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 22/12/2006 AUTEUR BODEL C.BODEL +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG @@ -18405,7 +18771,7 @@ MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== - +# RESPONSABLE BODEL C.BODEL from Macro.macro_expans_ops import macro_expans_ops @@ -18457,7 +18823,7 @@ MACRO_EXPANS=MACRO(nom="MACRO_EXPANS", ), ), ) -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -18475,6 +18841,7 @@ MACRO_EXPANS=MACRO(nom="MACRO_EXPANS", # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE GREFFET N.GREFFET from Macro.macro_matr_ajou_ops import macro_matr_ajou_ops @@ -18563,7 +18930,7 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=macro_matr_ajou_ops,sd_prod=macro NOEUD_DOUBLE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")), AVEC_MODE_STAT =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), ) -#& MODIF COMMANDE DATE 12/06/2006 AUTEUR CIBHHLV L.VIVAN +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -18581,6 +18948,7 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=macro_matr_ajou_ops,sd_prod=macro # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE PELLET J.PELLET from Macro.macro_matr_asse_ops import macro_matr_asse_ops @@ -18597,7 +18965,7 @@ def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args): if opti in ( "RIGI_MECA","RIGI_FLUI_STRU","RIGI_MECA_LAGR" , "MASS_MECA" , "MASS_FLUI_STRU" ,"RIGI_GEOM" ,"RIGI_ROTA", "AMOR_MECA","IMPE_MECA","MASS_ID_MDEP_R","MASS_ID_MDNS_R", - "ONDE_FLUI","MASS_MECA_DIAG" ) : t=matr_asse_depl_r + "ONDE_FLUI","MASS_MECA_DIAG","MECA_GYRO" ) : t=matr_asse_depl_r if opti in ( "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",) : t=matr_asse_pres_c @@ -18621,9 +18989,19 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops, CHAR_CINE =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ), NUME_DDL =SIMP(statut='o',typ=(nume_ddl_sdaster,CO)), SOLVEUR =FACT(statut='d', - METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT", - into=("LDLT","MULT_FRONT","GCPC","MUMPS")), - RENUM =SIMP(statut='f',typ='TXM',into=("SANS","RCMK","MD","MDA","METIS")), + METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ), + b_mult_front =BLOC(condition="METHODE=='MULT_FRONT'",fr="Paramètres associés à la méthode multifrontale", + RENUM =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ), + ), + b_ldlt =BLOC(condition="METHODE=='LDLT'",fr="Paramètres associés à la méthode LDLT", + RENUM =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK" ), + ), + b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS", + RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")), + ), + b_gcpc =BLOC(condition="METHODE=='GCPC'",fr="Paramètres associés à la méthode gradient conjugué", + RENUM =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK" ), + ), ), MATR_ASSE =FACT(statut='o',max='**', @@ -18632,7 +19010,7 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops, into=("RIGI_MECA","MASS_MECA","MASS_MECA_DIAG", "AMOR_MECA","RIGI_MECA_HYST","IMPE_MECA", "ONDE_FLUI","RIGI_FLUI_STRU","MASS_FLUI_STRU", - "RIGI_ROTA","RIGI_GEOM","RIGI_MECA_LAGR", + "RIGI_ROTA","RIGI_GEOM","RIGI_MECA_LAGR","MECA_GYRO", "RIGI_THER","MASS_THER", "RIGI_ACOU","MASS_ACOU","AMOR_ACOU", "MASS_ID_MTEM_R","MASS_ID_MTNS_R","MASS_ID_MDEP_R","MASS_ID_MDNS_R",) @@ -18661,7 +19039,7 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops, TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), ) ; -#& MODIF COMMANDE DATE 29/05/2007 AUTEUR VOLDOIRE F.VOLDOIRE +#& MODIF COMMANDE DATE 02/06/2008 AUTEUR GREFFET N.GREFFET # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -18679,6 +19057,7 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DEVESA G.DEVESA from Macro.macro_miss_3d_ops import macro_miss_3d_ops @@ -18692,7 +19071,7 @@ MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops, ), PROJET =SIMP(statut='o',typ='TXM'), REPERTOIRE =SIMP(statut='f',typ='TXM'), - VERSION =SIMP(statut='f',typ='TXM',into=("V1_3","V1_4",),defaut="V1_3"), + VERSION =SIMP(statut='f',typ='TXM',into=("V1_3","V1_4",),defaut="V1_4"), UNITE_IMPR_ASTER=SIMP(statut='f',typ='I',defaut=25), UNITE_OPTI_MISS =SIMP(statut='f',typ='I',defaut=26), UNITE_MODELE_SOL=SIMP(statut='f',typ='I',defaut=27), @@ -18725,9 +19104,10 @@ MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops, CONTR_LISTE =SIMP(statut='f',typ='R',max='**'), LFREQ_NB =SIMP(statut='f',typ='I'), LFREQ_LISTE =SIMP(statut='f',typ='R',max='**'), + DIRE_ONDE =SIMP(statut='f',typ='R',max='**'), ), ) ; -#& MODIF COMMANDE DATE 27/03/2007 AUTEUR BOYERE E.BOYERE +#& MODIF COMMANDE DATE 05/05/2008 AUTEUR NISTOR I.NISTOR # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -18745,6 +19125,7 @@ MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE NISTOR I.NISTOR from Macro.macro_mode_meca_ops import macro_mode_meca_ops @@ -18800,7 +19181,6 @@ MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=mode_ STURM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), ), NORM_MODE =FACT(statut='o',max='**', - MASS_INER =SIMP(statut='o',typ=table_sdaster), NORME =SIMP(statut='f',typ='TXM',defaut="TRAN_ROTA", into=("MASS_GENE","RIGI_GENE","EUCL", "EUCL_TRAN","TRAN","TRAN_ROTA") ), @@ -18818,7 +19198,7 @@ MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=mode_ into=("MASS_EFFE_UN","MASS_GENE",) ), ), ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -18836,6 +19216,7 @@ MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=mode_ # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BOYERE E.BOYERE from Macro.macro_proj_base_ops import macro_proj_base_ops @@ -18871,7 +19252,7 @@ MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops, ), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), ) ; -#& MODIF COMMANDE DATE 02/04/2007 AUTEUR BODEL C.BODEL +#& MODIF COMMANDE DATE 03/06/2008 AUTEUR BODEL C.BODEL # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG @@ -18889,20 +19270,38 @@ MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BODEL C.BODEL from Macro.macro_visu_meidee_ops import macro_visu_meidee_ops -def macro_visu_meidee_prod(self,RESULTATS,**args): - if RESULTATS != None: - for res in RESULTATS: - if isinstance(res['TABLE'],CO) : - if res['TYPE_TABLE'] == 'TABLE': - self.type_sdprod(res['TABLE'],table_sdaster) - else: - self.type_sdprod(res['TABLE'],table_fonction) - +def macro_visu_meidee_prod(self,RESU_FLUDELA,RESU_TURBULENT,RESU_MODIFSTRU,**args): + + if RESU_FLUDELA != None: + for res in RESU_FLUDELA: + self.type_sdprod(res['TABLE'],table_sdaster) + if RESU_TURBULENT != None: + for res in RESU_TURBULENT: + self.type_sdprod(res['TABLE'],table_fonction) + + MTYPES = { + 'MODELE' : modele_sdaster, + 'MODE_MECA' : mode_meca, + 'NUME_DDL' : nume_ddl_sdaster, + 'MAILLAGE' : maillage_sdaster, + 'MASS_MECA' : matr_asse_depl_r, + 'RIGI_MECA' : matr_asse_depl_r, + 'AMOR_MECA' : matr_asse_depl_r, + 'MACR_ELEM' : macr_elem_stat, + 'PROJ_MESU' : mode_gene, + } + if RESU_MODIFSTRU != None: + for res in RESU_MODIFSTRU: + for mc, typ in MTYPES.items(): + if res[mc]: + self.type_sdprod(res[mc], typ) return None + MACRO_VISU_MEIDEE=MACRO(nom = 'MACRO_VISU_MEIDEE', op = macro_visu_meidee_ops, sd_prod = macro_visu_meidee_prod, @@ -18911,20 +19310,37 @@ MACRO_VISU_MEIDEE=MACRO(nom = 'MACRO_VISU_MEIDEE', fr = "Outil de post-traitement interactif pour Meidee ", UNITE_FIMEN = SIMP( statut='f',typ='I',max='**' ), INTERACTIF = SIMP( statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI' ), - RESULTATS = FACT( statut='f',max='**', - TABLE = SIMP(statut='o',typ=(table_sdaster,table_fonction,CO)), - TYPE_TABLE = SIMP(statut='f',typ='TXM',defaut='TABLE', into=('TABLE','TABLE_FONCTION')), - ), - UNITE_RESU = SIMP( statut='f',typ='I',defaut=6), + RESU_FLUDELA = FACT( statut='f',max='**', + TABLE = SIMP(statut='f', typ=CO), + ), + RESU_TURBULENT = FACT( statut='f',max='**', + TABLE = SIMP(statut='f', typ=CO), + ), + RESU_MODIFSTRU = FACT( statut='f', max=1, + MODELE=SIMP(statut='f',typ=CO,defaut=None), + MODE_MECA=SIMP(statut='f',typ=CO,defaut=None), + MAILLAGE=SIMP(statut='f',typ=CO,defaut=None), + NUME_DDL=SIMP(statut='f',typ=CO,defaut=None), + MASS_MECA=SIMP(statut='f',typ=CO,defaut=None), + RIGI_MECA=SIMP(statut='f',typ=CO,defaut=None), + AMOR_MECA=SIMP(statut='f',typ=CO,defaut=None), + MACR_ELEM=SIMP(statut='f',typ=CO,defaut=None), + PROJ_MESU=SIMP(statut='f',typ=CO,defaut=None), + ), + UNITE_RESU = SIMP( statut='f',typ='I'), b_inter = BLOC( condition="INTERACTIF=='NON'", EXPANSION = FACT( statut='f',max='**', - CALCUL = SIMP(statut='o',typ=mode_meca), - MESURE = SIMP(statut='o',typ=mode_meca), - RESOLUTION = SIMP(statut='f',typ='TXM',defaut='SVD',into=('SVD','LU')), - b_reso = BLOC(condition = "RESOLUTION=='SVD'", - EPS = SIMP(statut='f',typ='R', defaut = 0.) + CALCUL = SIMP(statut='o',typ=mode_meca), + NUME_MODE_CALCUL = SIMP(statut='f',typ='I',validators=NoRepeat(), + max='**',defaut=0), + MESURE = SIMP(statut='o',typ=mode_meca), + NUME_MODE_MESURE = SIMP(statut='f',typ='I',validators=NoRepeat(), + max='**',defaut=0), + RESOLUTION = SIMP(statut='f',typ='TXM',defaut='SVD',into=('SVD','LU')), + b_reso = BLOC(condition = "RESOLUTION=='SVD'", + EPS = SIMP(statut='f',typ='R', defaut = 0.) ) ), FLUIDE_ELASTIQUE = FACT( statut='f', max='**', @@ -18939,20 +19355,44 @@ MACRO_VISU_MEIDEE=MACRO(nom = 'MACRO_VISU_MEIDEE', TURBULENT = FACT( statut='f',max='**', ALPHA = SIMP(statut='f',typ='R', defaut = 0.), EPS = SIMP(statut='f',typ='R', defaut = 0.), - IDENTIFICATION_MOMENTS = SIMP(statut='f',typ='TXM',defaut='NON', - into=('OUI','NON')), - OBSERVABILITE = SIMP(statut='o',typ=mode_meca), - COMMANDABILITE = SIMP(statut='o',typ=mode_meca), + OBSERVABILITE = SIMP(statut='o',typ=(mode_meca, base_modale)), + COMMANDABILITE = SIMP(statut='o',typ=(mode_meca, base_modale)), INTE_SPEC = SIMP(statut='o',typ=table_sdaster), RESU_EXPANSION = SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON')), b_base = BLOC(condition = "RESU_EXPANSION=='NON'", BASE = SIMP(statut='o',typ=mode_meca), ), - ) - ) - ) + ), + MODIFSTRUCT = FACT( statut='f', max=1, + MESURE = SIMP(statut='o', typ=mode_meca), + MODELE_SUP = SIMP(statut='o', typ=modele_sdaster), + MATR_RIGI = SIMP(statut='o', typ=matr_asse_depl_r), + RESOLUTION = SIMP(statut='o', typ='TXM', + into=('ES', 'LMME')), + b_resol = BLOC( condition = "RESOLUTION=='LMME'", + MATR_MASS = SIMP(statut='o', typ=matr_asse_depl_r), + ), + NUME_MODE_MESU = SIMP(statut='o', typ='I',max='**'), + NUME_MODE_CALCUL = SIMP(statut='o', typ='I',max='**'), + MAILLE_MODIF = SIMP(statut='o', typ=maillage_sdaster), + MODELE_MODIF = SIMP(statut='o', typ=modele_sdaster), + ), + + # Si on realise une modification structurale, on donne les DDL capteurs et interface + b_inter = BLOC( condition="MODIFSTRUCT!=None", + GROUP_NO_CAPTEURS = FACT( statut='f', max='**', + GROUP_NO = SIMP(statut='f',typ='TXM', max='**'), + NOM_CMP = SIMP(statut='f',typ='TXM', max='**'), + ), + GROUP_NO_EXTERIEUR = FACT( statut='f', max='**', + GROUP_NO = SIMP(statut='f',typ='TXM', max='**'), + NOM_CMP = SIMP(statut='f',typ='TXM', max='**'), + ), + ), + ), + ); -#& MODIF COMMANDE DATE 15/05/2007 AUTEUR ASSIRE A.ASSIRE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG @@ -18970,7 +19410,8 @@ MACRO_VISU_MEIDEE=MACRO(nom = 'MACRO_VISU_MEIDEE', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== - +# RESPONSABLE ASSIRE A.ASSIRE + from Macro.macr_recal_ops import macr_recal_ops def macr_recal_prod(self,**args ): @@ -19022,7 +19463,7 @@ MACR_RECAL = MACRO(nom="MACR_RECAL",op=macr_recal_ops, INFO =SIMP(statut='f',typ='I',defaut=2,into=( 1, 2 ) ), ); -#& MODIF COMMANDE DATE 09/01/2007 AUTEUR ABBAS M.ABBAS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG @@ -19040,6 +19481,7 @@ MACR_RECAL = MACRO(nom="MACR_RECAL",op=macr_recal_ops, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE VOLDOIRE F.VOLDOIRE from Macro.macr_spectre_ops import macr_spectre_ops @@ -19092,7 +19534,7 @@ MACR_SPECTRE=MACRO(nom="MACR_SPECTRE",op=macr_spectre_ops,sd_prod=table_sdaster, DEPL_Z =SIMP(statut='o',typ=fonction_sdaster),),), ), ) -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -19110,6 +19552,7 @@ MACR_SPECTRE=MACRO(nom="MACR_SPECTRE",op=macr_spectre_ops,sd_prod=table_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE MAJ_CATA=PROC(nom="MAJ_CATA",op=20, UIinfo={"groupes":("Gestion du travail",)}, fr="Compilation des catalogues de commandes et d'éléments", @@ -19117,7 +19560,7 @@ MAJ_CATA=PROC(nom="MAJ_CATA",op=20, ELEMENT =FACT(statut='f',), ) ; -#& MODIF COMMANDE DATE 04/04/2007 AUTEUR ABBAS M.ABBAS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -19135,7 +19578,7 @@ MAJ_CATA=PROC(nom="MAJ_CATA",op=20, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas, fr="Résoudre un problème de mécanique statique linéaire",reentrant='f', UIinfo={"groupes":("Résolution",)}, @@ -19166,7 +19609,7 @@ MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas, ang="List of sensitivity parameters"), SOLVEUR =FACT(statut='d', - METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","FETI","MUMPS") ), + METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","FETI","MUMPS","PETSC") ), b_feti =BLOC(condition = "METHODE == 'FETI' ",fr="Paramètres de la méthode FETI 1", PARTITION =SIMP(statut='o',typ=sd_feti_sdaster), @@ -19211,71 +19654,29 @@ MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas, b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS", TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")), - SCALING =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), + PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")), ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,), - RESI_RELA =SIMP(statut='f',typ='R',defaut=1.E-6,), + RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,), + PARALLELISME =SIMP(statut='f',typ='TXM',defaut="CENTRALISE", + into=("CENTRALISE","DISTRIBUE_MC","DISTRIBUE_MD","DISTRIBUE_SD")), + PARTITION =SIMP(statut='f',typ=sd_feti_sdaster), + CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,min=0,max=100), + CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0), ), + + b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC", + VARIANTE =SIMP(statut='f',typ='TXM',into=("GMRES","BCGS","CR","CG","BICG","CHEBYCHEV",),defaut="GMRES" ), + PRE_COND =SIMP(statut='f',typ='TXM',into=("ILU","SOR","BJACOBI"),defaut="ILU" ), + RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ), + RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-8), + NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ), + ), ), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# ====================================================================== -# RESPONSABLE GNICOLAS G.NICOLAS -from Macro.Sensibilite import memo_nom_sensi_ops - -MEMO_NOM_SENSI=MACRO(nom="MEMO_NOM_SENSI",op=memo_nom_sensi_ops, - UIinfo={"groupes":("Fonction",)}, - fr="Mémorisation des noms des concepts dérivés.", - ang="Memorisation of the names of the sensitive concepts.", - - NOM=FACT(statut='o',max='**', - regles=(PRESENT_PRESENT('MOT_CLE','VALEUR','MOT_FACT' ),), - - NOM_SD=SIMP(statut='o',typ='TXM', - fr="Nom de la structure de base", - ang="Name of the basic structure"), - - PARA_SENSI=SIMP(statut='o',typ=(para_sensi,theta_geom), - fr="Nom du paramètre sensible", - ang="Name of the sensitive parameter"), - - NOM_COMPOSE=SIMP(statut='f',typ='TXM',defaut=" ", - fr="Nom de la structure composée", - ang="Name of the built structure"), - - MOT_FACT=SIMP(statut='f',typ='TXM',max='**', - fr="Liste des mots clés facteurs concernés par la dérivation", - ang="Factor keyword list involved in derivation"), - - MOT_CLE=SIMP(statut='f',typ='TXM',max='**', - fr="Liste des mots clés concernés par la dérivation", - ang="Keyword list involved in derivation"), - - VALEUR=SIMP(statut='f',typ='TXM',max='**', - fr="Liste des objets concernés par la dérivation", - ang="Object list involved in derivation"), - - ), -) -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -19293,6 +19694,7 @@ MEMO_NOM_SENSI=MACRO(nom="MEMO_NOM_SENSI",op=memo_nom_sensi_ops, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BODEL C.BODEL MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op= 80,sd_prod=mode_cycl, fr="Calcul des modes propres d'une structure à répétitivité cyclique à partir" +" d'une base de modes propres réels", @@ -19312,6 +19714,7 @@ MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op= 80,sd_prod=mode_cycl, DIST_REFE =SIMP(statut='f',typ='R' ), ), CALCUL =FACT(statut='o', + regles=(UN_PARMI('TOUT_DIAM','NB_DIAM'),), TOUT_DIAM =SIMP(statut='f',typ='TXM',into=("OUI",) ), NB_DIAM =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'), OPTION =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE" @@ -19330,7 +19733,7 @@ MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op= 80,sd_prod=mode_cycl, ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 10/05/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 05/05/2008 AUTEUR NISTOR I.NISTOR # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -19348,6 +19751,8 @@ MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op= 80,sd_prod=mode_cycl, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE NISTOR I.NISTOR + def mode_iter_inv_prod(MATR_A,MATR_C,TYPE_RESU,**args ): if TYPE_RESU == "MODE_FLAMB" : return mode_flamb if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c @@ -19425,7 +19830,7 @@ MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op= 44,sd_prod=mode_iter_inv_prod INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), TITRE =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'), ) ; -#& MODIF COMMANDE DATE 13/03/2007 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 05/05/2008 AUTEUR NISTOR I.NISTOR # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -19443,6 +19848,8 @@ MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op= 44,sd_prod=mode_iter_inv_prod # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE NISTOR I.NISTOR + def mode_iter_simult_prod(MATR_A,MATR_C,TYPE_RESU,**args ): if TYPE_RESU == "MODE_FLAMB" : return mode_flamb if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c @@ -19465,7 +19872,7 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op= 45,sd_prod=mode_iter_simult_pr MATR_B =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ), MATR_C =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ), METHODE =SIMP(statut='f',typ='TXM',defaut="SORENSEN", - into=("TRI_DIAG","JACOBI","SORENSEN") ), + into=("TRI_DIAG","JACOBI","SORENSEN","QZ") ), b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'", PREC_ORTHO =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ), NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ), @@ -19483,6 +19890,9 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op= 45,sd_prod=mode_iter_simult_pr NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ), PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ), ), + b_qz =BLOC(condition = "METHODE == 'QZ'", + TYPE_QZ =SIMP(statut='f',typ='TXM',defaut="QZ_SIMPLE",into=("QZ_QR","QZ_SIMPLE","QZ_EQUI") ), + ), TYPE_RESU =SIMP(statut='f',typ='TXM',defaut="DYNAMIQUE", into=("MODE_FLAMB","DYNAMIQUE"), fr="Type d analyse" ), @@ -19491,7 +19901,7 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op= 45,sd_prod=mode_iter_simult_pr b_flamb =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'", CALC_FREQ =FACT(statut='d',min=0, - OPTION =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"), + OPTION =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","TOUT"), fr="Choix de l option et par conséquent du shift du problème modal" ), b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres", NMAX_FREQ =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ), @@ -19521,7 +19931,7 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op= 45,sd_prod=mode_iter_simult_pr b_dynam =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'", CALC_FREQ =FACT(statut='d',min=0, - OPTION =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"), + OPTION =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","TOUT"), fr="Choix de l option et par conséquent du shift du problème modal" ), b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres", NMAX_FREQ =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ), @@ -19570,7 +19980,7 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op= 45,sd_prod=mode_iter_simult_pr INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 05/05/2008 AUTEUR NISTOR I.NISTOR # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -19588,6 +19998,8 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op= 45,sd_prod=mode_iter_simult_pr # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE NISTOR I.NISTOR + def mode_stat_prod(MODE_STAT,FORCE_NODALE,PSEUDO_MODE,**args): if (MODE_STAT != None) : return mode_stat_depl if (PSEUDO_MODE !=None) : return mode_stat_acce @@ -19639,7 +20051,7 @@ MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod, TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -19657,6 +20069,7 @@ MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ADOBES A.ADOBES MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca, reentrant='f', fr="Définir la base modale d'une structure sous écoulement", @@ -19672,7 +20085,7 @@ MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca, INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 10/07/2006 AUTEUR LEBOUVIE F.LEBOUVIER +#& MODIF COMMANDE DATE 06/05/2008 AUTEUR KHAM M.KHAM # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -19690,7 +20103,7 @@ MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE G8BHHXD X.DESROCHES +# RESPONSABLE PELLET J.PELLET MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster, fr="Effectuer des modifications sur un maillage existant: réorienter des mailles servant," +" à l'application d'une pression, à la modélisation du contact,...", @@ -19699,23 +20112,27 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster, regles=(AU_MOINS_UN('ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D', 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE', 'TRANSLATION','ROTATION','MODI_BASE','ECHELLE','ORIE_SHB8','SYMETRIE', - ), + 'ORIE_LIGNE',), PRESENT_ABSENT('ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D', - 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',), + 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE', + 'ORIE_LIGNE'), PRESENT_ABSENT('DEFORME','ORIE_FISSURE','EQUE_PIQUA','ORIE_PEAU_2D', - 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',), + 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE', + 'ORIE_LIGNE'), PRESENT_ABSENT('EQUE_PIQUA','ORIE_FISSURE','DEFORME','ORIE_PEAU_2D', - 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',), + 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE', + 'ORIE_LIGNE'), PRESENT_ABSENT('ORIE_PEAU_2D','ORIE_FISSURE','DEFORME','EQUE_PIQUA', - 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',), + 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE', + 'ORIE_LIGNE'), PRESENT_ABSENT('ORIE_PEAU_3D','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D', 'PLAQ_TUBE','MODI_MAILLE',), PRESENT_ABSENT('ORIE_NORM_COQUE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D', - 'PLAQ_TUBE','MODI_MAILLE',), + 'PLAQ_TUBE','MODI_MAILLE','ORIE_LIGNE'), PRESENT_ABSENT('PLAQ_TUBE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D', - 'ORIE_PEAU_3D','ORIE_NORM_COQUE','MODI_MAILLE',), + 'ORIE_PEAU_3D','ORIE_NORM_COQUE','MODI_MAILLE','ORIE_LIGNE'), PRESENT_ABSENT('MODI_MAILLE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D', - 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE',), + 'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','ORIE_LIGNE'), EXCLUS('EQUE_PIQUA','PLAQ_TUBE'), EXCLUS('EQUE_PIQUA','TUBE_COUDE'), EXCLUS('ROTATION','MODI_BASE'), @@ -19759,6 +20176,7 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster, ), ORIE_PEAU_3D =FACT(statut='f',max='**', GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'), + GROUP_MA_VOLU =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), ), ORIE_SHB8 =FACT(statut='f',max=1, GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'), @@ -19772,6 +20190,15 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster, NOEUD =SIMP(statut='f',typ=no), GROUP_NO =SIMP(statut='f',typ=grno), ), + ORIE_LIGNE =FACT(statut='f',max='**', + regles=(EXCLUS('NOEUD','GROUP_NO'), + PRESENT_PRESENT('NOEUD','VECT_TANG'), + PRESENT_PRESENT('GROUP_NO','VECT_TANG'),), + GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'), + VECT_TANG =SIMP(statut='f',typ='R',max=3), + NOEUD =SIMP(statut='f',typ=no), + GROUP_NO =SIMP(statut='f',typ=grno), + ), PLAQ_TUBE =FACT(statut='f', DEXT =SIMP(statut='o',typ='R' ), EPAIS =SIMP(statut='o',typ='R' ), @@ -19816,7 +20243,7 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster, ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR GENIAUT S.GENIAUT # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG @@ -19834,18 +20261,19 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE GENIAUT S.GENIAUT MODI_MODELE_XFEM=OPER(nom="MODI_MODELE_XFEM",op= 113,sd_prod=modele_sdaster,docu="U4.44.12-e",reentrant='f', UIinfo={"groupes":("Modélisation",)}, fr="Engendrer ou enrichir une structure de donnees en affectant les cham_gd associes", MODELE_IN =SIMP(statut='o',typ=modele_sdaster,min=1,max=1,), - FISSURE =SIMP(statut='o',typ=fiss_xfem,min=1,max=100,), + FISSURE =SIMP(statut='o',typ=fiss_xfem,min=1,max='**',), CRITERE =SIMP(statut='f',typ='R',defaut=1.67E-8), INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,)), - CONTACT =SIMP(statut='f',typ=char_meca,min=1,max=1,), + CONTACT =SIMP(statut='f',typ='TXM',defaut='NON',into=("OUI","NON"),min=1,max=1,), ) ; -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -19863,6 +20291,7 @@ MODI_MODELE_XFEM=OPER(nom="MODI_MODELE_XFEM",op= 113,sd_prod=modele_sdaster,docu # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE KHAM M.KHAM MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=table_fonction, fr="Calculer les obstacles dans les systèmes guidage-tube après usure", reentrant='f', @@ -19880,7 +20309,7 @@ MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=table_fonction, V_USUR_OBST =SIMP(statut='f',typ='R',max='**'), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), ) ; -#& MODIF COMMANDE DATE 09/05/2007 AUTEUR VIVAN L.VIVAN +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -19898,7 +20327,7 @@ MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=table_fonction, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE JMBHH01 J.M.PROIX +# RESPONSABLE DESROCHES X.DESROCHES def modi_repere_prod(RESULTAT,**args): if AsType(RESULTAT) != None : return AsType(RESULTAT) @@ -19953,7 +20382,7 @@ MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,reentrant='n' TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), ) ; -#& MODIF COMMANDE DATE 31/10/2006 AUTEUR A3BHHAE H.ANDRIAMBOLOLONA +#& MODIF COMMANDE DATE 05/05/2008 AUTEUR NISTOR I.NISTOR # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -19971,6 +20400,8 @@ MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,reentrant='n' # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE NISTOR I.NISTOR + def norm_mode_prod(MODE,**args ): if AsType(MODE) == mode_meca : return mode_meca if AsType(MODE) == mode_meca_c : return mode_meca_c @@ -19994,7 +20425,6 @@ NORM_MODE=OPER(nom="NORM_MODE",op= 37,sd_prod=norm_mode_prod, ), AVEC_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'), SANS_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'), - MASS_INER =SIMP(statut='f',typ=table_sdaster), MODE_SIGNE =FACT(statut='f',fr="Imposer un signe sur une des composantes des modes", NOEUD =SIMP(statut='o',typ=no,fr="Noeud ou sera imposé le signe"), NOM_CMP =SIMP(statut='o',typ='TXM',fr="Composante du noeud ou sera imposé le signe" ), @@ -20013,7 +20443,7 @@ NORM_MODE=OPER(nom="NORM_MODE",op= 37,sd_prod=norm_mode_prod, TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), ) ; -#& MODIF COMMANDE DATE 13/12/2006 AUTEUR PELLET J.PELLET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -20031,7 +20461,7 @@ NORM_MODE=OPER(nom="NORM_MODE",op= 37,sd_prod=norm_mode_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl_sdaster,reentrant='n', UIinfo={"groupes":("Matrices/vecteurs",)}, fr="Etablissement de la numérotation des ddl avec ou sans renumérotation et du stockage de la matrice", @@ -20051,14 +20481,13 @@ NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl_sdaster,reentrant='n', ), b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS", RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")), - ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), ), b_gcpc =BLOC(condition="METHODE=='GCPC'",fr="paramètres associés à la méthode gradient conjugué", RENUM =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK" ), ), INFO =SIMP(statut='f',typ='I',into=(1,2)), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -20076,6 +20505,7 @@ NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl_sdaster,reentrant='n', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BODEL C.BODEL NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene, fr="Etablissement de la numérotation des ddl d'un modèle établi en coordonnées généralisées", reentrant='n', @@ -20092,7 +20522,7 @@ NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene, NB_VECT =SIMP(statut='f',typ='I',defaut= 9999 ), ), ) ; -#& MODIF COMMANDE DATE 22/05/2007 AUTEUR BODEL C.BODEL +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG @@ -20110,6 +20540,7 @@ NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BODEL C.BODEL from Macro.observation_ops import observation_ops @@ -20241,7 +20672,7 @@ OBSERVATION=MACRO(nom="OBSERVATION",op=observation_ops, TITRE =SIMP(statut='f',typ='TXM',max='**' ), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), ) ; -#& MODIF COMMANDE DATE 15/05/2007 AUTEUR GENIAUT S.GENIAUT +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2005 EDF R&D WWW.CODE-ASTER.ORG @@ -20259,21 +20690,23 @@ OBSERVATION=MACRO(nom="OBSERVATION",op=observation_ops, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE GENIAUT S.GENIAUT POST_CHAM_XFEM=OPER(nom="POST_CHAM_XFEM",op= 196,sd_prod=evol_noli, reentrant='n',UIinfo={"groupes":("Post traitements",)}, fr="Calcul des champs DEPL et SIEF_ELGA sur le maillage fissuré", MAILLAGE_SAIN = SIMP(statut='o',typ=maillage_sdaster), MAILLAGE_FISS = SIMP(statut='o',typ=maillage_sdaster), - NOM_CHAM = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","SIEF_ELGA"),), + NOM_CHAM = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","SIEF_ELGA","VARI_ELGA"),), MODELE = SIMP(statut='o',typ=modele_sdaster,), RESULTAT = SIMP(statut='o',typ=resultat_sdaster), - b_elga = BLOC(condition = "NOM_CHAM == 'SIEF_ELGA' or \ - (type(NOM_CHAM)==type(()) and 'SIEF_ELGA' in NOM_CHAM)", + b_elga = BLOC(condition = "NOM_CHAM in ('SIEF_ELGA','VARI_ELGA') or \ + (type(NOM_CHAM)==type(()) and 'SIEF_ELGA' in NOM_CHAM) or \ + (type(NOM_CHAM)==type(()) and 'VARI_ELGA' in NOM_CHAM)", MODELE_VISU = SIMP(statut='o',typ=modele_sdaster,), ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ), ); -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -20291,32 +20724,46 @@ POST_CHAM_XFEM=OPER(nom="POST_CHAM_XFEM",op= 196,sd_prod=evol_noli, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ZENTNER I.ZENTNER from Macro.post_dyna_alea_ops import post_dyna_alea_ops - POST_DYNA_ALEA=MACRO(nom="POST_DYNA_ALEA",op= post_dyna_alea_ops,sd_prod=table_sdaster, fr="Traitements statistiques de résultats de type interspectre et impression sur fichiers", reentrant='n', UIinfo={"groupes":("Post traitements",)}, - regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I','OPTION'),), - INTE_SPEC =SIMP(statut='o',typ=table_fonction), - NUME_VITE_FLUI =SIMP(statut='f',typ='I' ), - TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ), - NUME_ORDRE_I =SIMP(statut='f',typ='I',max='**' ), - NOEUD_I =SIMP(statut='f',typ=no,max='**'), - OPTION =SIMP(statut='f',typ='TXM',into=("DIAG",) ), - b_nume_ordre_i =BLOC(condition = "NUME_ORDRE_I != None", - NUME_ORDRE_J =SIMP(statut='o',typ='I',max='**' ), - ), - b_noeud_i =BLOC(condition = "NOEUD_I != None", - NOEUD_J =SIMP(statut='o',typ=no,max='**'), - NOM_CMP_I =SIMP(statut='o',typ='TXM',max='**' ), - NOM_CMP_J =SIMP(statut='o',typ='TXM',max='**' ), - ), - MOMENT =SIMP(statut='f',typ='I',max='**',fr="Moments spectraux en complément des cinq premiers" ), + regles=(UN_PARMI('FRAGILITE','INTE_SPEC'),), + FRAGILITE =FACT(statut='f',fr="donnees pour courbe de fragilite",max='**', + TABL_RESU =SIMP(statut='o',typ=table_sdaster), + regles=(UN_PARMI('VALE','LIST_PARA'),), + VALE = SIMP(statut='f',typ='R', min=1,validators=NoRepeat(),max='**' ), + LIST_PARA = SIMP(statut='f',typ=listr8_sdaster), + AM_INI = SIMP(statut='f',typ='R',defaut= 0.4 ), + BETA_INI = SIMP(statut='f',typ='R',defaut= 0.3 ), + FRACTILE = SIMP(statut='f',typ='R', min=1,validators=NoRepeat(),max='**'), + b_inte_spec_f = BLOC(condition="""FRACTILE !=None""", + NB_TIRAGE =SIMP(statut='f',typ='I' ),), + ), + INTE_SPEC =SIMP(statut='f',typ=table_fonction), + b_inte_spec_f =BLOC(condition="""INTE_SPEC !=None""", + regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I','OPTION'),), + NUME_VITE_FLUI =SIMP(statut='f',typ='I' ), + TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ), + NUME_ORDRE_I =SIMP(statut='f',typ='I',max='**' ), + NOEUD_I =SIMP(statut='f',typ=no,max='**'), + OPTION =SIMP(statut='f',typ='TXM',into=("DIAG",) ), + b_nume_ordre_i =BLOC(condition = "NUME_ORDRE_I != None", + NUME_ORDRE_J =SIMP(statut='o',typ='I',max='**' ), + ), + b_noeud_i =BLOC(condition = "NOEUD_I != None", + NOEUD_J =SIMP(statut='o',typ=no,max='**'), + NOM_CMP_I =SIMP(statut='o',typ='TXM',max='**' ), + NOM_CMP_J =SIMP(statut='o',typ='TXM',max='**' ), + ), + MOMENT =SIMP(statut='f',typ='I',max='**',fr="Moments spectraux en complément des cinq premiers" ), + ), TITRE =SIMP(statut='f',typ='TXM',max='**' ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 03/01/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -20334,6 +20781,7 @@ POST_DYNA_ALEA=MACRO(nom="POST_DYNA_ALEA",op= post_dyna_alea_ops,sd_prod=table_s # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BOYERE E.BOYERE POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=table_sdaster, fr="Post-traiter les résultats en coordonnées généralisées produit par DYNA_TRAN_MODAL", reentrant='n', @@ -20358,7 +20806,7 @@ POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=table_sdaster, INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), TITRE =SIMP(statut='f',typ='TXM',max='**' ), ) ; -#& MODIF COMMANDE DATE 12/09/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 20/05/2008 AUTEUR MAHFOUZ D.MAHFOUZ # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -20376,12 +20824,12 @@ POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=table_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE G8BHHXD X.DESROCHES +# RESPONSABLE DESROCHES X.DESROCHES POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', UIinfo={"groupes":("Post traitements",)}, fr="Calcul de quantités globales (masse, inerties, énergie, ...) sur tout ou partie du modèle", - regles=(UN_PARMI('MASS_INER', 'ENER_POT', 'ENER_CIN','TRAV_EXT', + regles=(UN_PARMI('MASS_INER', 'ENER_POT', 'ENER_CIN','TRAV_EXT','MINMAX', 'WEIBULL', 'RICE_TRACEY', 'CARA_GEOM','CHAR_LIMITE', 'CARA_POUTRE', 'INDIC_ENER', 'INDIC_SEUIL', 'AIRE_INTERNE','ENER_ELAS','ENER_TOTALE','INTEGRALE'), @@ -20402,7 +20850,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', MODELE = SIMP(statut='f',typ=modele_sdaster), CHAM_MATER = SIMP(statut='f',typ=cham_mater), CARA_ELEM = SIMP(statut='f',typ=cara_elem), - CHARGE = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ), + CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca, + char_ther,char_acou),validators=NoRepeat(),max='**' ), NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1), NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),), MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0), @@ -20438,7 +20887,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', MODELE = SIMP(statut='f',typ=modele_sdaster), CHAM_MATER = SIMP(statut='f',typ=cham_mater), CARA_ELEM = SIMP(statut='f',typ=cara_elem), - CHARGE = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ), + CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca, + char_ther,char_acou),validators=NoRepeat(),max='**' ), NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1), NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),), ANGLE = SIMP(statut='f',typ='I',defaut=0), @@ -20476,7 +20926,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', MODELE = SIMP(statut='f',typ=modele_sdaster), CHAM_MATER = SIMP(statut='f',typ=cham_mater), CARA_ELEM = SIMP(statut='f',typ=cara_elem), - CHARGE = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ), + CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca, + char_ther,char_acou),validators=NoRepeat(),max='**' ), NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1), NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),), ANGLE = SIMP(statut='f',typ='I',defaut=0), @@ -20508,7 +20959,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', MODELE = SIMP(statut='f',typ=modele_sdaster), CHAM_MATER = SIMP(statut='f',typ=cham_mater), CARA_ELEM = SIMP(statut='f',typ=cara_elem), - CHARGE = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ), + CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca, + char_ther,char_acou),validators=NoRepeat(),max='**' ), NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1), NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),), MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0), @@ -20534,7 +20986,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', MODELE = SIMP(statut='f',typ=modele_sdaster), CHAM_MATER = SIMP(statut='f',typ=cham_mater), CARA_ELEM = SIMP(statut='f',typ=cara_elem), - CHARGE = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ), + CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca, + char_ther,char_acou),validators=NoRepeat(),max='**' ), NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1), NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),), MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0), @@ -20571,6 +21024,32 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', LIST_INST = SIMP(statut='f',typ=listr8_sdaster), ), + + MINMAX = FACT(statut='f',max=1, + fr="calcul des extrema en espace d'une CMP d'un champ, pour tous les instants spécifiés", + regles=(UN_PARMI('CHAM_GD','RESULTAT'), + PRESENT_PRESENT('CHAM_GD','MODELE'), + PRESENT_PRESENT('RESULTAT','NOM_CHAM'), + AU_MOINS_UN('TOUT','GROUP_MA'),), + TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ), + GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'), + RESULTAT = SIMP(statut='f',typ=(evol_noli,evol_ther,evol_elas) ), + NOM_CHAM = SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()), + CHAM_GD = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ), + MODELE = SIMP(statut='f',typ=modele_sdaster), + NOM_CMP = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'), + b_minmax = BLOC(condition = "( RESULTAT != None )", + regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),), + PRECISION = SIMP(statut='f',typ='R',defaut= 1.0E-3), + CRITERE = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")), + TOUT_ORDRE = SIMP(statut='f',typ='TXM',into=("OUI",) ), + NUME_ORDRE = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'), + LIST_ORDRE = SIMP(statut='f',typ=listis_sdaster), + INST = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'), + LIST_INST = SIMP(statut='f',typ=listr8_sdaster), + ), + ), + WEIBULL = FACT(statut='f',max='**', regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),), TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ), @@ -20589,7 +21068,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', MODELE = SIMP(statut='f',typ=modele_sdaster), CHAM_MATER = SIMP(statut='f',typ=cham_mater), CARA_ELEM = SIMP(statut='f',typ=cara_elem), - CHARGE = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ), + CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca, + char_ther,char_acou),validators=NoRepeat(),max='**' ), NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1), NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),), MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0), @@ -20621,7 +21101,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', MODELE = SIMP(statut='f',typ=modele_sdaster), CHAM_MATER = SIMP(statut='f',typ=cham_mater), CARA_ELEM = SIMP(statut='f',typ=cara_elem), - CHARGE = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ), + CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca, + char_ther,char_acou),validators=NoRepeat(),max='**' ), NUME_COUCHE = SIMP(statut='f',typ='I',defaut=1), NIVE_COUCHE = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),), MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0), @@ -20646,7 +21127,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', fr="calcul un indicateur global de perte de proportionnalité du chargement", MODELE = SIMP(statut='f',typ=modele_sdaster), CHAM_MATER = SIMP(statut='f',typ=cham_mater), - CHARGE = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ), + CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca, + char_ther,char_acou),validators=NoRepeat(),max='**' ), MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0), RESULTAT = SIMP(statut='o',typ=(evol_noli) ), regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),), @@ -20669,7 +21151,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', fr="calcul un indicateur global de perte de proportionnalité du chargement", MODELE = SIMP(statut='f',typ=modele_sdaster), CHAM_MATER = SIMP(statut='f',typ=cham_mater), - CHARGE = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ), + CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca, + char_ther,char_acou),validators=NoRepeat(),max='**' ), MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0), RESULTAT = SIMP(statut='o',typ=(evol_noli) ), regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),), @@ -20690,7 +21173,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', MODELE = SIMP(statut='f',typ=modele_sdaster), CHAM_MATER = SIMP(statut='f',typ=cham_mater), CARA_ELEM = SIMP(statut='f',typ=cara_elem), - CHARGE = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ), + CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca, + char_ther,char_acou),validators=NoRepeat(),max='**' ), MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0), RESULTAT = SIMP(statut='o',typ=(evol_noli) ), regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),), @@ -20716,7 +21200,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', fr="calcul des caractéristiques géométriques d'un section de poutre", MODELE = SIMP(statut='f',typ=modele_sdaster), CHAM_MATER = SIMP(statut='f',typ=cham_mater), - CHARGE = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ), + CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca, + char_ther,char_acou),validators=NoRepeat(),max='**' ), MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0), ), @@ -20741,7 +21226,8 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', fr="calcul des caractéristiques mécaniques d'un section de poutre", MODELE = SIMP(statut='f',typ=modele_sdaster), CHAM_MATER = SIMP(statut='f',typ=cham_mater), - CHARGE = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ), + CHARGE = SIMP(statut='f',typ=(char_meca,char_cine_meca, + char_ther,char_acou),validators=NoRepeat(),max='**' ), MODE_FOURIER = SIMP(statut='f',typ='I',defaut=0), ), @@ -20766,7 +21252,7 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), ) ; -#& MODIF COMMANDE DATE 03/01/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -20784,6 +21270,7 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ZENTNER I.ZENTNER POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=table_sdaster,reentrant='n', UIinfo={"groupes":("Post traitements",)}, fr="Calculer le dommage de fatigue subi par une structure soumise à une sollicitation de type aléatoire", @@ -20801,7 +21288,7 @@ POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=table_sdaster,reentrant= MATER =SIMP(statut='o',typ=mater_sdaster), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 03/01/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -20819,6 +21306,7 @@ POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=table_sdaster,reentrant= # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ANGLES J.ANGLES POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=table_sdaster,reentrant='n', UIinfo={"groupes":("Post traitements",)}, fr="Calculer en un point, le dommage de fatigue subi par une structure soumise à une histoire de chargement", @@ -20879,7 +21367,7 @@ POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=table_sdaster,reentrant='n', INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 31/10/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG @@ -20897,6 +21385,7 @@ POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=table_sdaster,reentrant='n', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE WADIER Y.WADIER from Macro.post_gp_ops import post_gp_ops def post_gp_prod(self, TABL_RESU, **kargs): @@ -20910,7 +21399,10 @@ POST_GP=MACRO(nom="POST_GP", op=post_gp_ops, sd_prod=post_gp_prod, fr="Calcul du critère énergétique Gp suite à un calcul thermo-mécanique", reentrant='n', UIinfo={"groupes":("Post traitements",)}, - regles=(AU_MOINS_UN('IDENTIFICATION', 'PREDICTION'),), + regles=(UN_PARMI('IDENTIFICATION', 'PREDICTION'), + UN_PARMI('THETA_2D','THETA_3D'), + UN_PARMI('PAS_ENTAILLE','LIST_EP_COPEAUX'), + PRESENT_PRESENT('THETA_2D','DIRECTION'),), # Résultat, modèle, comportement, chargement RESULTAT = SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,mode_meca),), @@ -20931,17 +21423,44 @@ POST_GP=MACRO(nom="POST_GP", op=post_gp_ops, sd_prod=post_gp_prod, ), SYME_CHAR = SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS")), - DIRECTION = SIMP(statut='o', typ='R', max=3), - THETA_2D = FACT(statut='o', max='**', + DIRECTION = SIMP(statut='f', typ='R', max=3), + + THETA_2D = FACT(statut='f', max='**', fr="paramètres de définition des champs theta", GROUP_NO = SIMP(statut='o', typ=grno, validators=NoRepeat(), max='**'), R_INF = SIMP(statut='o', typ='R'), R_SUP = SIMP(statut='o', typ='R'), ), - + + + THETA_3D =FACT(statut='f',max='**', + GROUP_MA =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'), + R_INF =SIMP(statut='o',typ='R'), + R_SUP =SIMP(statut='o',typ='R'), + ), + b_theta_3d =BLOC(condition="THETA_3D != None", + LISSAGE =FACT(statut='d', + DEGRE =SIMP(statut='f',typ='I',defaut=5,into=(0,1,2,3,4,5,6,7) ), + LISSAGE_THETA =SIMP(statut='f',typ='TXM',defaut="LEGENDRE", + into=("LEGENDRE","LAGRANGE","LAGRANGE_REGU"),), + LISSAGE_G =SIMP(statut='f',typ='TXM',defaut="LEGENDRE", + into=("LEGENDRE","LAGRANGE","LAGRANGE_NO_NO","LAGRANGE_REGU"),), + ), + + FOND_FISS =SIMP(statut='o',typ=fond_fiss,max=1,), + NB_TRANCHES =SIMP(statut='o',typ='I',max=1, + fr="nombre de tranches: nombre de segments maillant le fond de fissure",), + ), + + # prise en compte de la traction compression + TRAC_COMP = SIMP(statut='f',typ='TXM',into=("OUI",), + fr="prise en compte de la traction-compression (plus lent)", + ), + # copeaux - GROUP_MA = SIMP(statut='o', typ=grma, validators=NoRepeat(), max='**'), - PAS_ENTAILLE = SIMP(statut='o', typ='R', val_min=0.), + GROUP_MA = SIMP(statut='o', typ=grma, validators=NoRepeat(), max='**'), + PAS_ENTAILLE = SIMP(statut='f', typ='R', val_min=0.), + LIST_EP_COPEAUX = SIMP(statut='f', typ='R', max='**'), # critère sur Gp CRIT_MAXI_GP = SIMP(statut='f', typ='TXM', defaut="ABSOLU", @@ -20967,7 +21486,7 @@ POST_GP=MACRO(nom="POST_GP", op=post_gp_ops, sd_prod=post_gp_prod, INFO = SIMP(statut='f', typ='I', defaut=1, into=(1, 2),), ) -#& MODIF COMMANDE DATE 05/03/2007 AUTEUR GALENNE E.GALENNE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -20996,6 +21515,8 @@ POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdast regles=(UN_PARMI('RESULTAT','TABL_DEPL_SUP'), EXCLUS('FISSURE','FOND_FISS'), PRESENT_PRESENT('FISSURE','RESULTAT'), + PRESENT_PRESENT('FOND_FISS','VECT_K1'), + PRESENT_PRESENT('TABL_DEPL_SUP','VECT_K1'), #PRESENT_PRESENT('RESULTAT','FOND_FISS'), ), @@ -21012,7 +21533,8 @@ POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdast GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), SANS_NOEUD = SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), SANS_GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), - TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ) + TOUT = SIMP(statut='f',typ='TXM',into=("OUI",) ), + EVOL_THER = SIMP(statut='f',typ=(evol_ther),fr="Température sur le fond de fissure") ), b_fissure =BLOC (condition="(FISSURE!= None)", MAILLAGE = SIMP(statut='o',typ=maillage_sdaster), @@ -21042,11 +21564,11 @@ POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdast ), SYME_CHAR =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","SANS") ), INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), - VECT_K1 =SIMP(statut='o',typ='R',max=3, + VECT_K1 =SIMP(statut='f',typ='R',max=3, fr="Vecteur normal au plan de fissure, orienté de la lèvre inférieure vers la lèvre supérieure"), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 03/01/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 03/06/2008 AUTEUR DURAND C.DURAND # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG @@ -21063,9 +21585,8 @@ POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdast # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# # ====================================================================== +# RESPONSABLE C.MESSELIER-GOUZE # POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=table_sdaster, fr="Calcul des facteurs d'intensité de contraintes par la méthode K_BETA", @@ -21089,7 +21610,7 @@ POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=table_sdaster, ), TITRE = SIMP(statut='f',typ='TXM',max='**'), ); -#& MODIF COMMANDE DATE 31/10/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG @@ -21107,6 +21628,7 @@ POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=table_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE GALENNE E.GALENNE from Macro.post_k_trans_ops import post_k_trans_ops @@ -21152,7 +21674,7 @@ POST_K_TRANS=MACRO(nom="POST_K_TRANS",op=post_k_trans_ops,sd_prod=table_sdaster, TITRE =SIMP(statut='f',typ='TXM'), ) -#& MODIF COMMANDE DATE 15/05/2007 AUTEUR GENIAUT S.GENIAUT +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2005 EDF R&D WWW.CODE-ASTER.ORG @@ -21170,16 +21692,21 @@ POST_K_TRANS=MACRO(nom="POST_K_TRANS",op=post_k_trans_ops,sd_prod=table_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE GENIAUT S.GENIAUT POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster, reentrant='n',UIinfo={"groupes":("Maillage",)}, fr="Crée un maillage se conformant à la fissure pour le post-traitement des éléments XFEM", MODELE = SIMP(statut='o',typ=modele_sdaster), MAILLAGE_SAIN = SIMP(statut='o',typ=maillage_sdaster), + PREF_NOEUD_X =SIMP(statut='f',typ='TXM',defaut="NX",validators=LongStr(1,2),), + PREF_NOEUD_M =SIMP(statut='f',typ='TXM',defaut="NM",validators=LongStr(1,2),), + PREF_NOEUD_P =SIMP(statut='f',typ='TXM',defaut="NP",validators=LongStr(1,2),), + PREF_MAILLE_X =SIMP(statut='f',typ='TXM',defaut="MX",validators=LongStr(1,2),), TITRE = SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ), ); -#& MODIF COMMANDE DATE 03/04/2007 AUTEUR VIVAN L.VIVAN +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -21196,7 +21723,7 @@ POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE JMBHH01 J.M.PROIX +# RESPONSABLE GALENNE E.GALENNE POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster, fr="Vérification des critères de niveau 0 et certains critères de niveau A du RCC-M-B3200 (Edition 1991)", reentrant='n', @@ -21334,8 +21861,8 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster, NUME_SITU =SIMP(statut='o',typ='I',fr="numéro de la situation" ), NOM_SITU =SIMP(statut='f',typ='TXM',fr="nom de la situation" ), COMBINABLE =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ), - NUME_GROUPE =SIMP(statut='o',typ='I',fr="numéro du groupe de la situation" ), - NUME_PASSAGE =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ), + NUME_GROUPE =SIMP(statut='f',typ='I',max=2, + fr="numéro du groupe de la situation,si 2 numéros cette situation est une situation de passage" ), NUME_RESU_THER =SIMP(statut='f',typ='I',max='**',fr="numeros de transitoires thermiques" ), CHAR_ETAT_A =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ), CHAR_ETAT_B =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ), @@ -21422,8 +21949,8 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster, NUME_SITU =SIMP(statut='o',typ='I',fr="numéro de la situation" ), NOM_SITU =SIMP(statut='f',typ='TXM',fr="nom de la situation" ), COMBINABLE =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ), - NUME_GROUPE =SIMP(statut='o',typ='I',fr="numéro du groupe de la situation" ), - NUME_PASSAGE =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ), + NUME_GROUPE =SIMP(statut='f',typ='I',max=2, + fr="numéro du groupe de la situation,si 2 numéros cette situation est une situation de passage" ), NUME_RESU_THER =SIMP(statut='f',typ='I',max='**',fr="numeros de transitoires thermiques" ), CHAR_ETAT_A =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ), CHAR_ETAT_B =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ), @@ -21434,7 +21961,7 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster, ), ), ) ; -#& MODIF COMMANDE DATE 09/05/2007 AUTEUR VIVAN L.VIVAN +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # ====================================================================== # CONFIGURATION MANAGEMENT OF EDF VERSION # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -21452,7 +21979,7 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE G8BHHXD X.DESROCHES +# RESPONSABLE DESROCHES X.DESROCHES POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=table_sdaster,reentrant='f', fr="Extraire des valeurs de composantes de champs de grandeurs pour y effectuer des calculs (moyenne,invariants,..)" +" ou pour les exprimer dans d'autres repères", @@ -21588,7 +22115,7 @@ POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=table_sdaster,reentrant='f' INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 03/01/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -21606,6 +22133,7 @@ POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=table_sdaster,reentrant='f' # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ZENTNER I.ZENTNER POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=table_sdaster,reentrant='f', UIinfo={"groupes":("Post traitements",)}, fr="Calcul des volumes d'usure et des profondeurs d'usure d'après la puissance d'usure", @@ -21707,7 +22235,7 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=table_sdaster,reentrant='f', INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), TITRE =SIMP(statut='f',typ='TXM',max='**' ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -21725,6 +22253,7 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=table_sdaster,reentrant='f', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE TAHERI S.TAHERI POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,reentrant='n', UIinfo={"groupes":("Post traitements",)}, fr="Déterminer l'état adapté ou accommodé par la méthode de Zarka-Casier d'une structure sous" @@ -21752,7 +22281,7 @@ POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,reentrant='n', CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")), ) ; -#& MODIF COMMANDE DATE 19/02/2007 AUTEUR LEFEBVRE J-P.LEFEBVRE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -21770,6 +22299,8 @@ POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,reentrant='n', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE + POURSUITE=MACRO(nom="POURSUITE",op=ops.build_poursuite,repetable='n', fr="Poursuite d'une étude à partir de la sauvegarde au format JEVEUX ou HDF de sa base globale", sd_prod = ops.POURSUITE, @@ -21821,20 +22352,26 @@ POURSUITE=MACRO(nom="POURSUITE",op=ops.build_poursuite,repetable='n', PARTITION =SIMP(statut='f',typ='R' ), DYNAMIQUE =SIMP(statut='f',typ='I'), ), - RESERVE_CPU =FACT(fr="reserve de temps pour terminer une execution",statut='f',max=1, + + RESERVE_CPU =FACT(fr="reserve de temps pour terminer une execution",statut='d',max=1, regles=(EXCLUS('VALE','POURCENTAGE'),), VALE =SIMP(statut='f',typ='I',val_min=0), +# valeur par défaut fixée à 10. dans le FORTRAN si CODE présent POURCENTAGE =SIMP(statut='f',typ='R',val_min=0.,val_max=1.0), -# valeur en pourcentage du temps maximum bornée à 180 secondes - BORNE =SIMP(statut='f',typ='I',val_min=0,defaut=180) - ), - CODE =FACT("définition d un nom pour l'esemble d'une étude", +# valeur par défaut fixée à 10% dans le FORTRAN + BORNE =SIMP(statut='f',typ='I',val_min=0,defaut=900) ), +# valeur en pourcentage du temps maximum bornée à 900 secondes + + CODE =FACT("définition d'un nom pour l'ensemble d'une étude", statut='f',min=1,max=1, NOM =SIMP(statut='o',typ='TXM'), - UNITE =SIMP(statut='f',typ='I',defaut=15), ), + + + IGNORE_ALARM = SIMP(statut='f', typ='TXM', max='**', fr="Alarmes que l'utilisateur souhaite délibérément ignorer"), + ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -21852,13 +22389,15 @@ POURSUITE=MACRO(nom="POURSUITE",op=ops.build_poursuite,repetable='n', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE COURTOIS M.COURTOIS + PRE_GIBI=PROC(nom="PRE_GIBI",op=49, UIinfo={"groupes":("Gestion du travail",)}, fr="Conversion d'un fichier de maillage GIBI au format Aster", UNITE_GIBI =SIMP(statut='f',typ='I',defaut=19), UNITE_MAILLAGE =SIMP(statut='f',typ='I',defaut=20), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -21876,6 +22415,7 @@ PRE_GIBI=PROC(nom="PRE_GIBI",op=49, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE COURTOIS M.COURTOIS PRE_GMSH=PROC(nom="PRE_GMSH",op=47, UIinfo={"groupes":("Gestion du travail",)}, @@ -21883,7 +22423,7 @@ PRE_GMSH=PROC(nom="PRE_GMSH",op=47, UNITE_GMSH =SIMP(statut='f',typ='I',defaut=19), UNITE_MAILLAGE =SIMP(statut='f',typ='I',defaut=20), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -21901,6 +22441,7 @@ PRE_GMSH=PROC(nom="PRE_GMSH",op=47, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE MIKCHEVITCH A.MIKCHEVITCH PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47, UIinfo={"groupes":("Gestion du travail",)}, fr="Conversion d'un fichier universel IDEAS-SUPERTAB au format Aster", @@ -21908,7 +22449,7 @@ PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47, UNITE_MAILLAGE =SIMP(statut='f',typ='I',defaut=20), CREA_GROUP_COUL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ), ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -21926,6 +22467,7 @@ PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE PELLET J.PELLET PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=cham_no_sdaster, fr="Effectuer le produit d'une matrice par un vecteur", @@ -21935,7 +22477,7 @@ PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=cham_no_sdaster, CHAM_NO =SIMP(statut='o',typ=cham_no_sdaster), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 09/05/2007 AUTEUR VIVAN L.VIVAN +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -21953,23 +22495,34 @@ PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=cham_no_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE PELLET J.PELLET def proj_champ_prod(RESULTAT=None,CHAM_NO_REFE=None,**args ): if AsType(RESULTAT) != None : return AsType(RESULTAT) if CHAM_NO_REFE != None : return cham_no_sdaster raise AsException("type de concept resultat non prevu") + PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f', UIinfo={"groupes":("Résultats et champs",)}, fr="Projeter les champs aux noeuds d'une SD résultat de type evol_xxx sur un autre maillage", -# + + METHODE =SIMP(statut='f',typ='TXM',defaut="ELEM", into=("NUAGE_DEG_0","NUAGE_DEG_1","ELEM",) ), + + + # Méthode NUAGE_xxx : + #-------------------- b_nuage =BLOC(condition="(METHODE=='NUAGE_DEG_1') or (METHODE=='NUAGE_DEG_0')", fr="Lissage d'un nuage de points", CHAM_NO =SIMP(statut='o',typ=cham_no_sdaster), CHAM_NO_REFE =SIMP(statut='o',typ=cham_no_sdaster), ), + + + + # Méthode ELEM : + #-------------------- b_elem =BLOC(condition="METHODE=='ELEM'", fr="Utilisation des fonctions de forme du maillage initial", regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','LIST_INST','LIST_FREQ','LIST_ORDRE'), @@ -21988,9 +22541,8 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f', TOUT_CHAM =SIMP(statut='f',typ='TXM',into=("OUI",) ), NOM_CHAM =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'), -# POUR IMPOSER LA NUMEROTATION DES DDLS : -# ------------------------------------------------------------------ - NUME_DDL =SIMP(statut='f',typ=(nume_ddl_sdaster) ), + NUME_DDL =SIMP(statut='f',typ=(nume_ddl_sdaster), + fr="Utile en dynamique pour pouvoir imoser la numérotation des cham_no."), TOUT_ORDRE =SIMP(statut='f',typ='TXM',into=("OUI",) ), @@ -22004,7 +22556,8 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f', NOEUD_CMP =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'), - CAS_FIGURE =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ), + CAS_FIGURE =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",), + fr="Pour indiquer au programme le type de projection souhaité"), DISTANCE_MAX =SIMP(statut='f',typ='R', fr="Distance maximale entre le noeud et l'élément le plus proche, lorsque le noeud n'est dans aucun élément."), TRANSF_GEOM_2 =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3, @@ -22017,11 +22570,17 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f', fr="Pour forcer le type des champs projetés. NOEU -> cham_no"), PROL_ZERO =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON", - fr="Si le résultat est un mode_xxx ou une base_xxx, on peut prolonger" - +" les champs par zéro la ou la projection ne donne pas de valeurs."), + fr="Pour prolonger les champs par zéro là ou la projection ne donne pas de valeurs."), ), + + + # Mots clés utilisables avec les 2 méthodes : + #--------------------------------------------- + TITRE =SIMP(statut='f',typ='TXM',max='**' ), + INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), + VIS_A_VIS =FACT(statut='f',max='**', regles=(AU_MOINS_UN('TOUT_1','GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'), AU_MOINS_UN('TOUT_2','GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),), @@ -22040,11 +22599,8 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f', fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+ " aux noeuds du MODELE_2 avant la projection."), ), - - TITRE =SIMP(statut='f',typ='TXM',max='**' ), - INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -22062,6 +22618,7 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BOYERE E.BOYERE def matr_asse_gene_prod(MATR_ASSE,MATR_ASSE_GENE,**args): if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_gene_r if AsType(MATR_ASSE_GENE) == matr_asse_gene_r : return matr_asse_gene_r @@ -22080,7 +22637,7 @@ PROJ_MATR_BASE=OPER(nom="PROJ_MATR_BASE",op= 71,sd_prod=matr_asse_gene_prod, MATR_ASSE_GENE =SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c) ), ) ; -#& MODIF COMMANDE DATE 19/06/2006 AUTEUR VABHHTS J.PELLET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -22098,6 +22655,7 @@ PROJ_MATR_BASE=OPER(nom="PROJ_MATR_BASE",op= 71,sd_prod=matr_asse_gene_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA def proj_mesu_modal_prod(MODELE_MESURE,**args): vale=MODELE_MESURE['MESURE'] if AsType(vale) == dyna_trans : return tran_gene @@ -22142,7 +22700,7 @@ PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193, ), ); -#& MODIF COMMANDE DATE 30/05/2007 AUTEUR ADOBES A.ADOBES +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -22160,6 +22718,7 @@ PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ADOBES A.ADOBES PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=table_fonction,reentrant='n', UIinfo={"groupes":("Matrices/vecteurs",)}, fr="Projecter un ou plusieurs spectres de turbulence sur une (ou plusieurs) base(s) modale(s) ", @@ -22181,7 +22740,7 @@ PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=table_fonction,reentran ORIG_AXE =SIMP(statut='f',typ='R',min=3,max=3 ), TITRE =SIMP(statut='f',typ='TXM',max='**' ), ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -22199,6 +22758,7 @@ PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=table_fonction,reentran # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BOYERE E.BOYERE PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op= 72,sd_prod=vect_asse_gene, fr="Projection d'un vecteur assemblé sur une base (modale ou de RITZ)", @@ -22211,7 +22771,7 @@ PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op= 72,sd_prod=vect_asse_gene, VECT_ASSE =SIMP(statut='f',typ=cham_no_sdaster), VECT_ASSE_GENE =SIMP(statut='f',typ=vect_asse_gene ), ) ; -#& MODIF COMMANDE DATE 30/04/2007 AUTEUR ABBAS M.ABBAS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG @@ -22229,6 +22789,7 @@ PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op= 72,sd_prod=vect_asse_gene, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE GENIAUT S.GENIAUT PROPA_XFEM=OPER(nom="PROPA_XFEM",op=10,sd_prod=fiss_xfem,reentrant='n', UIinfo={"groupes":("Modélisation",)}, @@ -22253,7 +22814,7 @@ PROPA_XFEM=OPER(nom="PROPA_XFEM",op=10,sd_prod=fiss_xfem,reentrant='n', INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 03/01/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -22271,6 +22832,7 @@ PROPA_XFEM=OPER(nom="PROPA_XFEM",op=10,sd_prod=fiss_xfem,reentrant='n', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE PARROT A.PARROT RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=table_sdaster, fr="Recaler les paramètres du modèle de WEIBULL sur des données expérimentales",reentrant='n', UIinfo={"groupes":("Post traitements",)}, @@ -22299,7 +22861,7 @@ RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=table_sdaster, ITER_GLOB_MAXI =SIMP(statut='f',typ='I',defaut= 10 ), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ), ) ; -#& MODIF COMMANDE DATE 09/05/2007 AUTEUR VIVAN L.VIVAN +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -22317,7 +22879,7 @@ RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=table_sdaster, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE MCOURTOI M.COURTOIS +# RESPONSABLE COURTOIS M.COURTOIS def recu_fonction_prod(RESULTAT=None,TABLE=None,RESU_GENE=None, BASE_ELAS_FLUI=None,CHAM_GD=None,NAPPE=None, NOM_PARA_TABL=None,**args): @@ -22529,7 +23091,7 @@ RECU_FONCTION=OPER(nom="RECU_FONCTION",op=90,sd_prod=recu_fonction_prod, TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ), ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -22547,6 +23109,7 @@ RECU_FONCTION=OPER(nom="RECU_FONCTION",op=90,sd_prod=recu_fonction_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE BOYERE E.BOYERE RECU_GENE=OPER(nom="RECU_GENE",op= 76,sd_prod=vect_asse_gene,reentrant='n', UIinfo={"groupes":("Résultats et champs",)}, fr="Extraire d'un champ de grandeur (déplacements, vitesses ou accélérations) à partir de résultats" @@ -22558,7 +23121,7 @@ RECU_GENE=OPER(nom="RECU_GENE",op= 76,sd_prod=vect_asse_gene,reentrant='n', CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF" ,into=("ABSOLU","RELATIF") ), PRECISION =SIMP(statut='f',typ='R',defaut= 1.E-3 ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -22576,7 +23139,7 @@ RECU_GENE=OPER(nom="RECU_GENE",op= 76,sd_prod=vect_asse_gene,reentrant='n', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE COURTOIS M.COURTOIS RECU_TABLE=OPER(nom="RECU_TABLE",op= 174,sd_prod=table_sdaster, fr="Récupérer dans une table les valeurs d'un paramètre d'une SD Résultat ou d'extraire une table contenue" +" dans une autre SD pour celles qui le permettent", @@ -22587,71 +23150,47 @@ RECU_TABLE=OPER(nom="RECU_TABLE",op= 174,sd_prod=table_sdaster, NOM_PARA =SIMP(statut='f',typ='TXM',max='**'), TITRE =SIMP(statut='f',typ='TXM',max='**'), ) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE PELLET J.PELLET -RESO_GRAD=OPER(nom="RESO_GRAD",op= 84,sd_prod=cham_no_sdaster, - fr="Résolution d'un système linéaire par la méthode du gradient conjugué préconditionné", - reentrant='f', - UIinfo={"groupes":("Résolution",)}, - MATR_ASSE =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ), +RESOUDRE=OPER(nom="RESOUDRE",op=15,sd_prod=cham_no_sdaster,reentrant='f', + fr="Résolution par méthode directe un système d'équations linéaires préalablement factorisé par FACT_LDLT"+ + "ou Résolution d'un système linéaire par la méthode du gradient conjugué préconditionné", + UIinfo={"groupes":("Résolution",)}, + MATR =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r, + matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ), CHAM_NO =SIMP(statut='o',typ=cham_no_sdaster), CHAM_CINE =SIMP(statut='f',typ=cham_no_sdaster), - MATR_FACT =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ), + + # mot-clé commun aux solveurs MUMPS et GCPC: + RESI_RELA =SIMP(statut='f',typ='R',defaut=1.E-6), + + # mots-clés pour solver GCPC: + MATR_PREC =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ), NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ), REPRISE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ), - RESI_RELA =SIMP(statut='f',typ='R',defaut= 1E-6 ), - INFO =SIMP(statut='f',typ='I',into=(1,2) ), -) ; -#& MODIF COMMANDE DATE 21/02/2006 AUTEUR REZETTE C.REZETTE -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# ====================================================================== -# RESPONSABLE VABHHTS J.PELLET -RESO_LDLT=OPER(nom="RESO_LDLT",op=15,sd_prod=cham_no_sdaster,reentrant='f', - fr="Résoudre par méthode directe un système d'équations linéaires préalablement factorisé par FACT_LDLT", - UIinfo={"groupes":("Résolution",)}, - MATR_FACT =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r, - matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ), - CHAM_NO =SIMP(statut='o',typ=cham_no_sdaster), - CHAM_CINE =SIMP(statut='f',typ=cham_no_sdaster), - # RESI_RELA : précision utilisée si SOLVEUR=MUMPS - RESI_RELA =SIMP(statut='f',typ='R',defaut=1.e-6), TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 12/03/2007 AUTEUR DEVESA G.DEVESA +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -22746,7 +23285,7 @@ REST_BASE_PHYS=OPER(nom="REST_BASE_PHYS",op= 75,sd_prod=rest_base_phys_prod, SECTEUR =SIMP(statut='f',typ='I',defaut= 1 ), TITRE =SIMP(statut='f',typ='TXM',max='**' ), ) ; -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -22764,15 +23303,17 @@ REST_BASE_PHYS=OPER(nom="REST_BASE_PHYS",op= 75,sd_prod=rest_base_phys_prod, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ADOBES A.ADOBES REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction, reentrant='n', fr="Calculer la réponse d'une structure dans la base physique", UIinfo={"groupes":("Matrices/vecteurs",)}, - regles=(AU_MOINS_UN('BASE_ELAS_FLUI','MODE_MECA'),), + regles=(AU_MOINS_UN('BASE_ELAS_FLUI','MODE_MECA'),), BASE_ELAS_FLUI =SIMP(statut='f',typ=melasflu_sdaster ), - MODE_MECA =SIMP(statut='f',typ=mode_meca ), + MODE_MECA =SIMP(statut='f',typ=(mode_meca, base_modale ),), BANDE =SIMP(statut='f',typ='R',min=2,validators=NoRepeat(),max=2 ), - NUME_ORDRE =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**' ), + NUME_ORDRE =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**' ), + TOUT_ORDRE =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON") ), INTE_SPEC_GENE =SIMP(statut='o',typ=table_fonction), NOEUD =SIMP(statut='o',typ=no ,max='**'), MAILLE =SIMP(statut='f',typ=ma ,max='**'), @@ -22790,7 +23331,7 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction, into=("DIAG_TOUT","DIAG_DIAG","TOUT_TOUT","TOUT_DIAG") ), TITRE =SIMP(statut='f',typ='TXM',max='**' ), ) ; -#& MODIF COMMANDE DATE 23/04/2007 AUTEUR PROIX J-M.PROIX +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2006 EDF R&D WWW.CODE-ASTER.ORG @@ -22808,6 +23349,7 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE PROIX J.M.PROIX # -*- coding: iso-8859-1 -*- from Macro.simu_point_mat_ops import simu_point_mat_ops @@ -22919,7 +23461,7 @@ SIMU_POINT_MAT=MACRO(nom="SIMU_POINT_MAT", op=simu_point_mat_ops,sd_prod=table_s NUME_INIT =SIMP(statut='f',typ='I'), DETR_NUME_SUIV =SIMP(statut='f',typ='TXM',into=("OUI",)), CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**', - into=("DEPL","SIEF_ELGA","VARI_ELGA","VARI_NON_LOCAL","LANL_ELGA")), + into=("DEPL","SIEF_ELGA","VARI_ELGA","LANL_ELGA")), ), MODELISATION =SIMP(statut='f',typ='TXM',defaut="3D",validators=NoRepeat(),max=1, into=("3D","C_PLAN","D_PLAN",)), @@ -23001,7 +23543,7 @@ SIMU_POINT_MAT=MACRO(nom="SIMU_POINT_MAT", op=simu_point_mat_ops,sd_prod=table_s INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) -#& MODIF COMMANDE DATE 15/05/2006 AUTEUR ASSIRE A.ASSIRE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG @@ -23019,6 +23561,7 @@ SIMU_POINT_MAT=MACRO(nom="SIMU_POINT_MAT", op=simu_point_mat_ops,sd_prod=table_s # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE ASSIRE A.ASSIRE from Macro.stanley_ops import stanley_ops @@ -23035,7 +23578,7 @@ STANLEY=MACRO(nom="STANLEY",op=stanley_ops,sd_prod=None, fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit les md5"), ) ; -#& MODIF COMMANDE DATE 30/05/2007 AUTEUR ABBAS M.ABBAS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -23053,7 +23596,7 @@ STANLEY=MACRO(nom="STANLEY",op=stanley_ops,sd_prod=None, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE MABBAS M.ABBAS +# RESPONSABLE ABBAS M.ABBAS STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli, fr="Calcul de l'évolution mécanique ou thermo-hydro-mécanique couplée, en quasi-statique," +" d'une structure en non linéaire", @@ -23085,11 +23628,12 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli, RESO_INTE =SIMP(statut='f',typ='TXM',defaut="IMPLICITE", into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")), RELATION =SIMP(statut='o',typ='TXM',defaut="ELAS", - into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC", + into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS", "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")), ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,)), ELAS_VMIS_TRAC =SIMP(statut='c',typ='I',defaut=1,into=(1,)), ELAS_VMIS_LINE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), + ELAS_VMIS_PUIS =SIMP(statut='c',typ='I',defaut=1,into=(1,)), ELAS_HYPER =SIMP(statut='c',typ='I',defaut=1,into=(1,)), ELAS_POUTRE_GR =SIMP(statut='c',typ='I',defaut=3,into=(3,)), CABLE =SIMP(statut='c',typ='I',defaut=1,into=(1,)), @@ -23101,16 +23645,14 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli, ), b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire", ETAT_INIT =FACT(statut='o', - regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI','VARI_NON_LOCAL',), + regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',), EXCLUS('EVOL_NOLI','DEPL',), EXCLUS('EVOL_NOLI','SIGM',), EXCLUS('EVOL_NOLI','VARI',), - EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',), EXCLUS('NUME_ORDRE','INST'), ), DEPL =SIMP(statut='f',typ=cham_no_sdaster), SIGM =SIMP(statut='f',typ=(cham_elem,carte_sdaster)), VARI =SIMP(statut='f',typ=cham_elem), - VARI_NON_LOCAL =SIMP(statut='f',typ=cham_no_sdaster), EVOL_NOLI =SIMP(statut='f',typ=evol_noli), NUME_ORDRE =SIMP(statut='f',typ='I'), INST =SIMP(statut='f',typ='R'), @@ -23121,16 +23663,14 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli, ),), b_not_reuse =BLOC(condition = "not reuse",fr="en mode concept non reentrant : ETAT_INIT facultatif", ETAT_INIT =FACT(statut='f', - regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI','VARI_NON_LOCAL',), + regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',), EXCLUS('EVOL_NOLI','DEPL',), EXCLUS('EVOL_NOLI','SIGM',), EXCLUS('EVOL_NOLI','VARI',), - EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',), EXCLUS('NUME_ORDRE','INST'), ), DEPL =SIMP(statut='f',typ=cham_no_sdaster), SIGM =SIMP(statut='f',typ=(cham_elem,carte_sdaster)), VARI =SIMP(statut='f',typ=cham_elem), - VARI_NON_LOCAL =SIMP(statut='f',typ=cham_no_sdaster), EVOL_NOLI =SIMP(statut='f',typ=evol_noli), NUME_ORDRE =SIMP(statut='f',typ='I'), INST =SIMP(statut='f',typ='R'), @@ -23149,6 +23689,9 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli, INST_INIT =SIMP(statut='f',typ='R'), NUME_INST_FIN =SIMP(statut='f',typ='I'), INST_FIN =SIMP(statut='f',typ='R'), + ERRE_TEMPS =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON", + fr="Adaptation temporelle pour les modélisations HM instationnaires", + ang="Time adaptation for unstationary HM models"), PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-3 ), # DEBUT DE BLOC POUR LA SUBDIVISION DES PAS DE TEMPS SUBD_METHODE =SIMP( statut='f',typ='TXM', @@ -23202,7 +23745,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli, EVOL_NOLI =SIMP(statut='f',typ=evol_noli), ), RECH_LINEAIRE =FACT(statut='f', - METHODE =SIMP(statut='f',typ='TXM',defaut="CORDE",into=("CORDE","MIXTE") ), + METHODE =SIMP(statut='f',typ='TXM',defaut="CORDE",into=("CORDE","MIXTE") ), RESI_LINE_RELA =SIMP(statut='f',typ='R',defaut= 1.0E-1 ), ITER_LINE_MAXI =SIMP(statut='f',typ='I',defaut= 3), ITER_LINE_CRIT =SIMP(statut='f',typ='I',defaut= 20), @@ -23231,18 +23774,20 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli, CONVERGENCE =FACT(statut='d', regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),), b_refe_rela =BLOC(condition = "RESI_REFE_RELA != None", - regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE', + regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE','FORC_REFE', 'FLUX_HYD1_REFE','FLUX_HYD2_REFE','VARI_REFE'),), + FORC_REFE =SIMP(statut='f',typ='R',min=2,max=2, + fr="Force et Moment de référence pour les éléments de structure."), SIGM_REFE =SIMP(statut='f',typ='R'), EPSI_REFE =SIMP(statut='f',typ='R'), FLUX_THER_REFE =SIMP(statut='f',typ='R'), FLUX_HYD1_REFE =SIMP(statut='f',typ='R'), FLUX_HYD2_REFE =SIMP(statut='f',typ='R'), - VARI_REFE =SIMP(statut='f',typ='R'), + VARI_REFE =SIMP(statut='f',typ='R'), ), - - - + + + RESI_REFE_RELA =SIMP(statut='f',typ='R'), RESI_GLOB_MAXI =SIMP(statut='f',typ='R'), RESI_GLOB_RELA =SIMP(statut='f',typ='R'), @@ -23251,15 +23796,16 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli, ARRET =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), ), SOLVEUR =FACT(statut='d', - METHODE=SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","FETI") ), + METHODE=SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","FETI","PETSC") ), + b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale", RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ), ), b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT", RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ), ), - b_ldlt_mult =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ", - fr="Paramètres relatifs à la non inversibilité de la matrice à factorise", + b_ldlt_mult =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' or METHODE == 'FETI'", + fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser", NPREC =SIMP(statut='f',typ='I',defaut= 8 ), STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","DECOUPE") ), ), @@ -23272,12 +23818,24 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli, ), b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS", TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")), - SCALING =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), + PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")), ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,), RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,), + PARALLELISME =SIMP(statut='f',typ='TXM',defaut="CENTRALISE", + into=("CENTRALISE","DISTRIBUE_MC","DISTRIBUE_MD","DISTRIBUE_SD")), + PARTITION =SIMP(statut='f',typ=sd_feti_sdaster), + CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,min=0,max=100), + CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0), ), + b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC", + VARIANTE =SIMP(statut='f',typ='TXM',into=("GMRES","BCGS","CR","CG","BICG","CHEBYCHEV",),defaut="GMRES" ), + PRE_COND =SIMP(statut='f',typ='TXM',into=("ILU","SOR","BJACOBI"),defaut="ILU" ), + RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ), + RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-8), + NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ), + ), b_feti =BLOC(condition = "METHODE == 'FETI' ",fr="Paramètres de la méthode FETI 1", PARTITION =SIMP(statut='o',typ=sd_feti_sdaster), RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ), @@ -23308,8 +23866,8 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli, ARCH_ETAT_INIT =SIMP(statut='f',typ='TXM',into=("OUI",)), NUME_INIT =SIMP(statut='f',typ='I'), DETR_NUME_SUIV =SIMP(statut='f',typ='TXM',into=("OUI",)), - CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","SIEF_ELGA","VARI_ELGA", - "VARI_NON_LOCAL","LANL_ELGA")), + CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**', + into=("DEPL","SIEF_ELGA","VARI_ELGA","LANL_ELGA")), ), OBSERVATION =FACT(statut='f',max='**', NOM_CMP =SIMP(statut='o',typ='TXM',max='**' ), @@ -23384,51 +23942,16 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli, NB_FREQ =SIMP(statut='f',typ='I',max=1,defaut=3), CHAR_CRIT =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10), fr="Valeur des deux charges critiques délimitant la bande de recherche en HPP"), + INST_CALCUL =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ), ), SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**', fr="Liste des paramètres de sensibilité", ang="List of sensitivity parameters"), - SOLV_NON_LOCAL =FACT(statut='f', - METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ), - b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale", - RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ), - ), - b_ldlt =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT", - RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ), - ), - b_ldlt_mult =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ", - fr="Paramètres relatifs à la non inversibilité de la matrice à factorise", - NPREC =SIMP(statut='f',typ='I',defaut= 8 ), - STOP_SINGULIER =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ), - ), - b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS", - TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")), - SCALING =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), - RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")), - ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), - PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,), - RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,), - ), - b_gcpc =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué", - PRE_COND =SIMP(statut='f',typ='TXM',into=("LDLT_INC",),defaut="LDLT_INC" ), - NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ), - RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-6 ), - NMAX_ITER =SIMP(statut='f',typ='I',defaut= 0 ), - ), - EPS =SIMP(statut='f',typ='R',defaut= 0.E+0 ), - ), - LAGR_NON_LOCAL =FACT(statut='f', - ITER_DUAL_MAXI =SIMP(statut='f',typ='I',defaut= 50), - RESI_DUAL_ABSO =SIMP(statut='o',typ='R'), - RESI_PRIM_ABSO =SIMP(statut='o',typ='R'), - R =SIMP(statut='f',typ='R',defaut= 1000.), - ITER_PRIM_MAXI =SIMP(statut='f',typ='I',defaut= 10), - ), INFO =SIMP(statut='f',typ='I',into=(1,2) ), TITRE =SIMP(statut='f',typ='TXM',max='**' ), ) -#& MODIF COMMANDE DATE 22/05/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG @@ -23446,8 +23969,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== - -# RESPONSABLE MCOURTOI M.COURTOIS +# RESPONSABLE COURTOIS M.COURTOIS from Macro.test_fichier_ops import test_fichier_ops @@ -23455,11 +23977,17 @@ TEST_FICHIER=MACRO(nom="TEST_FICHIER", op=test_fichier_ops, UIinfo={"groupes":("Impression",)}, fr="Tester la non régression de fichiers produits par des commandes aster", FICHIER =SIMP(statut='o',typ='TXM',validators=LongStr(1,255)), - NB_CHIFFRE =SIMP(statut='o',typ='I',), # defaut=6 pas de defaut, il faut - EPSILON =SIMP(statut='o',typ='R',), # defaut=1.E-12 se poser la question ! - EXPR_IGNORE =SIMP(statut='f',typ='TXM',max='**', - fr="Liste d'expressions régulières permettant d'ignorer certaines lignes"), - VALE_K =SIMP(statut='o',typ='TXM' ), + EXPR_IGNORE =SIMP(statut='f',typ='TXM',max='**', + fr="Liste d'expressions régulières permettant d'ignorer certaines lignes"), + + TYPE_TEST =SIMP(statut='f',typ='TXM',defaut='SOMM',into=("SOMM_ABS","SOMM","MAXI","MINI","MAXI_ABS","MINI_ABS")), + NB_VALE =SIMP(statut='o',typ='I',), + VALE =SIMP(statut='f',typ='R',max='**'), + VALE_K =SIMP(statut='f',typ='TXM'), + + CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")), + PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3), + REFERENCE =SIMP(statut='f',typ='TXM', into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ), @@ -23469,7 +23997,7 @@ TEST_FICHIER=MACRO(nom="TEST_FICHIER", op=test_fichier_ops, INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ) -#& MODIF COMMANDE DATE 17/10/2006 AUTEUR MCOURTOI M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -23487,7 +24015,7 @@ TEST_FICHIER=MACRO(nom="TEST_FICHIER", op=test_fichier_ops, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE MCOURTOI M.COURTOIS +# RESPONSABLE COURTOIS M.COURTOIS TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135, fr="Extraction d'une valeur numérique ou d'un attribut de fonction pour comparaison à une valeur de référence", UIinfo={"groupes":("Impression",)}, @@ -23559,8 +24087,7 @@ TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135, ), ), ) ; -#& MODIF COMMANDE DATE 10/10/2006 AUTEUR REZETTE C.REZETTE -# RESPONSABLE VABHHTS J.PELLET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -23580,6 +24107,7 @@ TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135, # # # ====================================================================== +# RESPONSABLE LEFEBVRE J.P.LEFEBVRE TEST_RESU=PROC(nom="TEST_RESU",op=23, UIinfo={"groupes":("Impression",)}, fr="Extraction d'une valeur d'une structure de donnée et comparaison à une valeur de référence", @@ -23711,12 +24239,11 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23, ), OBJET =FACT(statut='f',max='**', - regles=(UN_PARMI('S_I','S_R','RESUME',), - UN_PARMI('VALE','VALE_I','VALE_C','RESUME','S_R','S_I'),), + regles=(UN_PARMI('S_I','S_R',), + UN_PARMI('VALE','VALE_I','VALE_C','S_R','S_I'),), NOM =SIMP(statut='o',typ='TXM'), S_R =SIMP(statut='f',typ='R'), S_I =SIMP(statut='f',typ='I'), - RESUME =SIMP(statut='f',typ='I'), VALE =SIMP(statut='f',typ='R'), VALE_I =SIMP(statut='f',typ='I'), VALE_C =SIMP(statut='f',typ='C'), @@ -23728,7 +24255,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23, VERSION =SIMP(statut='f',typ='TXM' ), ), ) ; -#& MODIF COMMANDE DATE 17/04/2007 AUTEUR COURTOIS M.COURTOIS +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -23746,7 +24273,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== -# RESPONSABLE VABHHTS J.PELLET +# RESPONSABLE COURTOIS M.COURTOIS TEST_TABLE=PROC(nom="TEST_TABLE",op= 177, UIinfo={"groupes":("Impression",)}, fr="Tester une cellule ou une colonne d'une table", @@ -23788,7 +24315,7 @@ TEST_TABLE=PROC(nom="TEST_TABLE",op= 177, INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), ), ) ; -#& MODIF COMMANDE DATE 13/12/2006 AUTEUR PELLET J.PELLET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -23806,6 +24333,7 @@ TEST_TABLE=PROC(nom="TEST_TABLE",op= 177, # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DURAND C.DURAND THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f', UIinfo={"groupes":("Résolution",)}, fr="Résoudre un problème thermique linéaire stationnaire ou transitoire", @@ -23818,17 +24346,28 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f', FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), ), INCREMENT =FACT(statut='f', - LIST_INST =SIMP(statut='o',typ=listr8_sdaster ), - NUME_INIT =SIMP(statut='f',typ='I'), - NUME_FIN =SIMP(statut='f',typ='I'), + regles=(EXCLUS('NUME_INST_INIT','INST_INIT'), + EXCLUS('NUME_INST_FIN','INST_FIN'),), + LIST_INST =SIMP(statut='o',typ=listr8_sdaster), + EVOLUTION =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE", + into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ), + NUME_INST_INIT =SIMP(statut='f',typ='I'), + INST_INIT =SIMP(statut='f',typ='R'), + NUME_INST_FIN =SIMP(statut='f',typ='I'), + INST_FIN =SIMP(statut='f',typ='R'), + PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-3 ), ), - TEMP_INIT =FACT(statut='f', + ETAT_INIT =FACT(statut='f', regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),), - STATIONNAIRE =SIMP(statut='f',typ='TXM',into=("OUI",) ), + STATIONNAIRE =SIMP(statut='f',typ='TXM',into=("OUI",)), EVOL_THER =SIMP(statut='f',typ=evol_ther), CHAM_NO =SIMP(statut='f',typ=cham_no_sdaster), VALE =SIMP(statut='f',typ='R'), - NUME_INIT =SIMP(statut='f',typ='I'), + NUME_ORDRE =SIMP(statut='f',typ='I'), + INST =SIMP(statut='f',typ='R'), + PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3 ), + CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ), + INST_ETAT_INIT =SIMP(statut='f',typ='R'), ), SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**', fr="Liste des paramètres de sensibilité.", @@ -23841,7 +24380,7 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f', NUME_INIT =SIMP(statut='f',typ='I'), ), SOLVEUR =FACT(statut='d', - METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ), + METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ), b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale", RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ), ), @@ -23862,29 +24401,44 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f', ), b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS", TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")), - SCALING =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), + PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")), ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,), - RESI_RELA =SIMP(statut='f',typ='R',defaut=1.E-6,), + RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,), + PARALLELISME =SIMP(statut='f',typ='TXM',defaut="CENTRALISE", + into=("CENTRALISE","DISTRIBUE_MC","DISTRIBUE_MD","DISTRIBUE_SD")), + PARTITION =SIMP(statut='f',typ=sd_feti_sdaster), + CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,min=0,max=100), + CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0), ), + + b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC", + VARIANTE =SIMP(statut='f',typ='TXM',into=("GMRES","BCGS","CR","CG","BICG","CHEBYCHEV",),defaut="GMRES" ), + PRE_COND =SIMP(statut='f',typ='TXM',into=("ILU","SOR","BJACOBI"),defaut="ILU" ), + RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ), + RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-8), + NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ), + ), ), PARM_THETA =SIMP(statut='f',typ='R',defaut= 0.57), ARCHIVAGE =FACT(statut='f', - regles=(UN_PARMI('LIST_ARCH','PAS_ARCH','LIST_INST','INST'),), - LIST_ARCH =SIMP(statut='f',typ=listis_sdaster), - LIST_INST =SIMP(statut='f',typ=listr8_sdaster), - INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'), - PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3 ), - CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF", - into=("RELATIF","ABSOLU")), - PAS_ARCH =SIMP(statut='f',typ='I'), - CHAM_EXCLU =SIMP(statut='f',typ='TXM',into=("VARI",)), + regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'), + EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ), + LIST_INST =SIMP(statut='f',typ=(listr8_sdaster) ), + INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ), + PAS_ARCH =SIMP(statut='f',typ='I' ), + PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3), + ARCH_ETAT_INIT =SIMP(statut='f',typ='TXM',into=("OUI",)), + NUME_INIT =SIMP(statut='f',typ='I'), + DETR_NUME_SUIV =SIMP(statut='f',typ='TXM',into=("OUI",)), + CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**', + into=("VARI",)), ), TITRE =SIMP(statut='f',typ='TXM',max='**'), INFO =SIMP(statut='f',typ='I',into=(1,2)), ) ; -#& MODIF COMMANDE DATE 13/12/2006 AUTEUR PELLET J.PELLET +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -23902,6 +24456,7 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DURAND C.DURAND THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f', UIinfo={"groupes":("Résolution",)}, fr="Résoudre un problème thermique non linéaire (conditions limites ou comportement matériau)" @@ -23930,17 +24485,65 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f', FONC_MULT =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)), ), INCREMENT =FACT(statut='f', + regles=(EXCLUS('NUME_INST_INIT','INST_INIT'), + EXCLUS('NUME_INST_FIN','INST_FIN'),), LIST_INST =SIMP(statut='o',typ=listr8_sdaster), - NUME_INIT =SIMP(statut='f',typ='I'), - NUME_FIN =SIMP(statut='f',typ='I'), + EVOLUTION =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE", + into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ), + NUME_INST_INIT =SIMP(statut='f',typ='I'), + INST_INIT =SIMP(statut='f',typ='R'), + NUME_INST_FIN =SIMP(statut='f',typ='I'), + INST_FIN =SIMP(statut='f',typ='R'), + PRECISION =SIMP(statut='f',typ='R',defaut=1.0E-3 ), + # DEBUT DE BLOC POUR LA SUBDIVISION DES PAS DE TEMPS + SUBD_METHODE =SIMP( statut='f',typ='TXM', + into =("AUCUNE","UNIFORME","EXTRAPOLE"), + defaut="AUCUNE", + fr="Méthode de subdivision des pas de temps en cas de non-convergence" + ), + b_subd_unif=BLOC(condition = "SUBD_METHODE == 'UNIFORME'", + regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),), + SUBD_COEF_PAS_1=SIMP(statut='f',typ='R',defaut=1.0,val_min=0.0, + fr="Coefficient multiplicateur de la 1ère subdivision"), + SUBD_PAS =SIMP(statut='f',typ='I',defaut=4,val_min=2, + fr="Nombre de subdivision d'un pas de temps"), + SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2, + fr="Nombre maximum de niveau de subdivision d'un pas de temps"), + SUBD_PAS_MINI=SIMP(statut='f',typ='R',val_min=0.0, + fr="Pas de temps en dessous duquel on ne subdivise plus"), + ), + b_subd_extr=BLOC(condition = "SUBD_METHODE == 'EXTRAPOLE'", + regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),), + SUBD_OPTION =SIMP(statut='f',typ='TXM', + into =("IGNORE_PREMIERES","GARDE_DERNIERES",), + defaut="IGNORE_PREMIERES", + fr="Technique d'extrapolation : les 1ere itérations sont ignorées ou les dernières sont gardées"), + SUBD_ITER_IGNO =SIMP(statut='c',typ='I',defaut=3,val_min=0, + fr="Les n premières itérations sont ignorées pour l'extrapolation"), + SUBD_ITER_FIN =SIMP(statut='c',typ='I',defaut=8,val_min=3, + fr="Seules les n dernières itérations sont prises pour l'extrapolation"), + SUBD_PAS =SIMP(statut='c',typ='I',defaut=4,val_min=2, + fr="Nombre de subdivision d'un pas de temps en cas divergence"), + SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2, + fr="Nombre maximum de niveau de subdivision d'un pas de temps"), + SUBD_PAS_MINI=SIMP(statut='f',typ='R',val_min=0.0, + fr="Pas de temps en dessous duquel on ne subdivise plus"), + SUBD_ITER_PLUS =SIMP(statut='c',typ='I',defaut=50,val_min=20, + fr="% itération autorisée en plus"), + ), + # FIN DE BLOC POUR LA SUBDIVISION DES PAS DE TEMPS ), - TEMP_INIT =FACT(statut='f', + ETAT_INIT =FACT(statut='f', regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),), STATIONNAIRE =SIMP(statut='f',typ='TXM',into=("OUI",)), EVOL_THER =SIMP(statut='f',typ=evol_ther), CHAM_NO =SIMP(statut='f',typ=cham_no_sdaster), VALE =SIMP(statut='f',typ='R'), - NUME_INIT =SIMP(statut='f',typ='I'), + NUME_ORDRE =SIMP(statut='f',typ='I'), + INST =SIMP(statut='f',typ='R'), + PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3 ), + CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ), + INST_ETAT_INIT =SIMP(statut='f',typ='R'), ), NEWTON =FACT(statut='d', REAC_ITER =SIMP(statut='f',typ='I',defaut= 0 ), @@ -23957,7 +24560,7 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f', ang="List of sensitivity parameters", ), SOLVEUR =FACT(statut='d', - METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ), + METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ), b_mult_front =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Parametres de la méthode multi frontale", RENUM =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ), ), @@ -23978,24 +24581,55 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f', ), b_mumps =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS", TYPE_RESOL =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")), - SCALING =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), + PRETRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")), RENUM =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")), ELIM_LAGR2 =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")), PCENT_PIVOT =SIMP(statut='f',typ='I',defaut=10,), RESI_RELA =SIMP(statut='f',typ='R',defaut=-1.0,), + PARALLELISME =SIMP(statut='f',typ='TXM',defaut="CENTRALISE", + into=("CENTRALISE","DISTRIBUE_MC","DISTRIBUE_MD","DISTRIBUE_SD")), + PARTITION =SIMP(statut='f',typ=sd_feti_sdaster), + CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,min=0,max=100), + CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,min=0), ), + + b_petsc =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC", + VARIANTE =SIMP(statut='f',typ='TXM',into=("GMRES","BCGS","CR","CG","BICG","CHEBYCHEV",),defaut="GMRES" ), + PRE_COND =SIMP(statut='f',typ='TXM',into=("ILU","SOR","BJACOBI"),defaut="ILU" ), + RENUM =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ), + RESI_RELA =SIMP(statut='f',typ='R',defaut= 1.E-8), + NMAX_ITER =SIMP(statut='f',typ='I',defaut= -1 ), + ), SYME =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), ), PARM_THETA =SIMP(statut='f',typ='R',defaut= 0.57 ), ARCHIVAGE =FACT(statut='f', - regles=(UN_PARMI('LIST_ARCH','PAS_ARCH','LIST_INST','INST', ),), - LIST_ARCH =SIMP(statut='f',typ=(listis_sdaster) ), + regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'), + EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ), LIST_INST =SIMP(statut='f',typ=(listr8_sdaster) ), - INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'), - PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3 ), - CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ), - PAS_ARCH =SIMP(statut='f',typ='I'), - CHAM_EXCLU =SIMP(statut='f',typ='TXM',into=("VARI",)), + INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ), + PAS_ARCH =SIMP(statut='f',typ='I' ), + PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3), + ARCH_ETAT_INIT =SIMP(statut='f',typ='TXM',into=("OUI",)), + NUME_INIT =SIMP(statut='f',typ='I'), + DETR_NUME_SUIV =SIMP(statut='f',typ='TXM',into=("OUI",)), + CHAM_EXCLU =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**', + into=("VARI",)), + ), + OBSERVATION =FACT(statut='f',max='**', + NOM_CMP =SIMP(statut='o',typ='TXM',max='**' ), + SUIVI_DDL =SIMP(statut='c',typ='TXM',defaut="NON",max=1,into=("NON",)), + b_non_suivi =BLOC(condition = "SUIVI_DDL == 'NON' ", + regles=(UN_PARMI('NOEUD','GROUP_NO')), + NOEUD =SIMP(statut='f',typ=no ,validators=NoRepeat(),max='**'), + GROUP_NO =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), + NOM_CHAM =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("TEMP",)), + INST =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ), + LIST_INST =SIMP(statut='f',typ=listr8_sdaster), + PAS_OBSE =SIMP(statut='f',typ='I'), + LIST_ARCH =SIMP(statut='f',typ=listis_sdaster), + PRECISION =SIMP(statut='f',typ='R',defaut= 1.0E-3 ), + CRITERE =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),), ), TITRE =SIMP(statut='f',typ='TXM',max='**'), OPTION =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2, @@ -24003,7 +24637,7 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f', INFO =SIMP(statut='f',typ='I',into=(1,2) ), ) ; -#& MODIF COMMANDE DATE 22/06/2005 AUTEUR REZETTE C.REZETTE +#& MODIF COMMANDE DATE 21/04/2008 AUTEUR LEFEBVRE J-P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG @@ -24021,6 +24655,7 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f', # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== +# RESPONSABLE DURAND C.DURAND THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther, fr="Résoudre un problème thermique non linéaire (conditions limites ou comportement matériau)" +" stationnaire avec chargement mobile", @@ -24033,9 +24668,9 @@ THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther, CHARGE =SIMP(statut='o',typ=char_ther ), FONC_MULT =SIMP(statut='c',typ=(fonction_sdaster,nappe_sdaster,formule) ), ), - TEMP_INIT =FACT(statut='f', + ETAT_INIT =FACT(statut='f', EVOL_THER =SIMP(statut='f',typ=evol_ther ), - NUME_INIT =SIMP(statut='f',typ='I',defaut= 0 ), + NUME_ORDRE =SIMP(statut='f',typ='I',defaut= 0 ), ), CONVERGENCE =FACT(statut='d', CRIT_TEMP_RELA =SIMP(statut='f',typ='R',defaut= 1.E-3 ), diff --git a/Aster/Cata/cataSTA9/ops.py b/Aster/Cata/cataSTA9/ops.py index 16a3f8c6..90a38f53 100644 --- a/Aster/Cata/cataSTA9/ops.py +++ b/Aster/Cata/cataSTA9/ops.py @@ -1,4 +1,4 @@ -#@ MODIF ops Cata DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF ops Cata DATE 02/06/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -38,13 +38,13 @@ try: Build.B_CODE.CODE.codex=aster from Utilitai.Utmess import UTMESS - from Utilitai.as_timer import ASTER_TIMER - from Macro.Sensibilite import MEMORISATION_SENSIBILITE + from Build.B_SENSIBILITE_MEMO_NOM_SENSI import MEMORISATION_SENSIBILITE + from Execution.E_Global import MessageLog except: aster_exists = False -def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG): +def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM): """Fonction sdprod partie commune à DEBUT et POURSUITE. (on stocke un entier au lieu du logique) """ @@ -57,13 +57,22 @@ def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG): if CODE != None: jdc.fico = CODE['NOM'] if aster_exists: - jdc.timer = ASTER_TIMER(format='aster') # en POURSUITE, ne pas écraser la mémorisation existante. if not hasattr(jdc, 'memo_sensi'): jdc.memo_sensi = MEMORISATION_SENSIBILITE() + jdc.memo_sensi.reparent(jdc) + if hasattr(jdc, 'msg_init') and jdc.msg_init == 1: + # messages d'alarmes désactivés + if IGNORE_ALARM: + if not type(IGNORE_ALARM) in (list, tuple): + IGNORE_ALARM = [IGNORE_ALARM] + for idmess in IGNORE_ALARM: + MessageLog.disable_alarm(idmess) + jdc.msg_init = True -def DEBUT(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args): + +def DEBUT(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, **args): """ Fonction sdprod de la macro DEBUT """ @@ -71,7 +80,7 @@ def DEBUT(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args): if self.jdc is not self.parent : raise Accas.AsException("La commande DEBUT ne peut exister qu'au niveau jdc") - commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG) + commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM) def build_debut(self,**args): @@ -94,7 +103,7 @@ def build_debut(self,**args): self.definition.op=None return ier -def POURSUITE(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args): +def POURSUITE(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, **args): """ Fonction sdprod de la macro POURSUITE """ @@ -102,7 +111,7 @@ def POURSUITE(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args): if self.jdc is not self.parent : raise Accas.AsException("La commande POURSUITE ne peut exister qu'au niveau jdc") - commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG) + commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM) if (self.codex and os.path.isfile("glob.1") or os.path.isfile("bhdf.1")): # Le module d'execution est accessible et glob.1 est present @@ -150,10 +159,10 @@ def POURSUITE(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args): # On supprime du pickle_context les concepts valant None, ca peut # etre le cas des concepts non executés, placés après FIN. pickle_context=get_pickled_context() - self.jdc.restore_pickled_attrs(pickle_context) if pickle_context==None : - UTMESS('F','Poursuite',"Erreur a la relecture du fichier pick.1 : aucun objet sauvegardé ne sera récupéré") + UTMESS('F','SUPERVIS_86') return + self.jdc.restore_pickled_attrs(pickle_context) from Cata.cata import ASSD,entier from Noyau.N_CO import CO for elem in pickle_context.keys(): @@ -162,18 +171,21 @@ def POURSUITE(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args): # on rattache chaque assd au nouveau jdc courant (en poursuite) pickle_context[elem].jdc=self.jdc pickle_context[elem].parent=self.jdc + # pour que sds_dict soit cohérent avec g_context + self.jdc.sds_dict[elem] = pickle_context[elem] + assert elem == pickle_context[elem].nom # rétablir le parent pour les attributs de la SD pickle_context[elem].reparent_sd() if elem in self.g_context.keys(): poursu_class=self.g_context[elem].__class__ if poursu_class!=pickle_class : - UTMESS('F','Poursuite',"Types incompatibles entre glob.1 et pick.1 pour concept de nom "+elem) + UTMESS('F','SUPERVIS_87',valk=[elem]) return elif isinstance(pickle_context[elem],ASSD) and pickle_class not in (CO,entier) : # on n'a pas trouvé le concept dans la base et sa classe est ASSD : ce n'est pas normal # sauf dans le cas de CO : il n'a alors pas été typé et c'est normal qu'il soit absent de la base # meme situation pour le type 'entier' produit uniquement par DEFI_FICHIER - UTMESS('F','Poursuite',"Concept de nom "+elem+" et de type "+str(pickle_class)+" introuvable dans la base globale") + UTMESS('F','SUPERVIS_88',valk=[elem,str(pickle_class)]) return if pickle_context[elem]==None : del pickle_context[elem] self.g_context.update(pickle_context) @@ -194,14 +206,14 @@ def get_pickled_context(): les objets python qui auraient été sauvegardés, sous forme pickled, lors d'une précédente étude. Un fichier pick.1 doit etre présent dans le répertoire de travail """ - if os.path.isfile("pick.1"): - file="pick.1" - else: return None + fpick = 'pick.1' + if not os.path.isfile(fpick): + return None # Le fichier pick.1 est présent. On essaie de récupérer les objets python sauvegardés context={} try: - file=open(file,'r') + file=open(fpick,'r') # Le contexte sauvegardé a été picklé en une seule fois. Il est seulement # possible de le récupérer en bloc. Si cette opération echoue, on ne récupère # aucun objet. @@ -209,7 +221,7 @@ def get_pickled_context(): file.close() except: # En cas d'erreur on ignore le contenu du fichier - # traceback.print_exc() + traceback.print_exc() return None return context @@ -224,7 +236,8 @@ def POURSUITE_context(self,d): # On ajoute directement les concepts dans le contexte du jdc # XXX est ce que les concepts ne sont pas ajoutés plusieurs fois ?? for v in self.g_context.values(): - if isinstance(v,ASSD) : self.jdc.sds.append(v) + if isinstance(v,ASSD) : + self.jdc.sds.append(v) def build_poursuite(self,**args): """ @@ -276,49 +289,42 @@ def detruire(self,d): """ Cette fonction est la fonction op_init de la PROC DETRUIRE """ + if hasattr(self,"executed") and self.executed == 1: + return if self["CONCEPT"]!=None: - sd=[] - for mc in self["CONCEPT"]: - mcs=mc["NOM"] - if mcs is None:continue - if type(mcs) == types.ListType or type(mcs) == types.TupleType: - for e in mcs: - if isinstance(e,ASSD): - sd.append(e) - e=e.nom - # traitement particulier pour les listes de concepts, on va mettre à None - # le terme de l'indice demandé dans la liste : - # nomconcept_i est supprimé, nomconcept[i]=None - indice=e[e.rfind('_')+1:] - concept_racine=e[:e.rfind('_')] - if indice!='' and d.has_key(concept_racine) and type(d[concept_racine])==types.ListType: - try : - indici=int(indice) - d[concept_racine][indici]=None - except ValueError : pass - # pour tous les concepts : - if d.has_key(e):del d[e] - if self.jdc.sds_dict.has_key(e):del self.jdc.sds_dict[e] - else: - if isinstance(mcs,ASSD): - sd.append(mcs) - mcs=mcs.nom - # traitement particulier pour les listes de concepts, on va mettre à None - # le terme de l'indice demandé dans la liste : - # nomconcept_i est supprimé, nomconcept[i]=None - indice=mcs[mcs.rfind('_')+1:] - concept_racine=mcs[:mcs.rfind('_')] - if indice!='' and d.has_key(concept_racine) and type(d[concept_racine])==types.ListType: - try : - indici=int(indice) - d[concept_racine][indici]=None - except ValueError : pass - # pour tous les concepts : - if d.has_key(mcs):del d[mcs] - if self.jdc.sds_dict.has_key(mcs):del self.jdc.sds_dict[mcs] - for s in sd: - # On signale au parent que le concept s n'existe plus apres l'étape self - self.parent.delete_concept_after_etape(self,s) + sd = [] + for mc in self["CONCEPT"]: + mcs = mc["NOM"] + if mcs is None: + continue + if type(mcs) not in (list, tuple): + mcs = [mcs] + + for co in mcs: + if isinstance(co, ASSD): + sd.append(co) + co = co.nom + # traitement particulier pour les listes de concepts, on va mettre à None + # le terme de l'indice demandé dans la liste : + # nomconcept_i est supprimé, nomconcept[i]=None + i = co.rfind('_') + if i > 0 and not co.endswith('_'): + concept_racine = co[:i] + if d.has_key(concept_racine) and type(d[concept_racine]) is list: + try: + num = int(co[i+1:]) + d[concept_racine][num] = None + except (ValueError, IndexError): + # cas : RESU_aaa ou (RESU_8 avec RESU[8] non initialisé) + pass + # pour tous les concepts : + if d.has_key(co): + del d[co] + if self.jdc.sds_dict.has_key(co): + del self.jdc.sds_dict[co] + for s in sd: + # On signale au parent que le concept s n'existe plus apres l'étape self + self.parent.delete_concept_after_etape(self,s) def subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR): """ diff --git a/Aster/Cata/petitcata/ops.py b/Aster/Cata/petitcata/ops.py new file mode 100644 index 00000000..c8163ee5 --- /dev/null +++ b/Aster/Cata/petitcata/ops.py @@ -0,0 +1,469 @@ +#@ MODIF ops Cata DATE 16/10/2007 AUTEUR REZETTE C.REZETTE +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + + +# Modules Python +import types +import string,linecache,os,traceback,re +import pickle + +# Modules Eficas +import Accas +from Accas import ASSD +from Noyau.ascheckers import CheckLog + +try: + import aster + aster_exists = True + # Si le module aster est présent, on le connecte + # au JDC + import Build.B_CODE + Build.B_CODE.CODE.codex=aster + + from Utilitai.Utmess import UTMESS + from Macro.Sensibilite import MEMORISATION_SENSIBILITE +except: + aster_exists = False + + +def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG): + """Fonction sdprod partie commune à DEBUT et POURSUITE. + (on stocke un entier au lieu du logique) + """ + jdc.par_lot = PAR_LOT + jdc.impr_macro = int(IMPR_MACRO == 'OUI') + jdc.jxveri = int(DEBUG != None and DEBUG['JXVERI'] == 'OUI') + jdc.sdveri = int(DEBUG != None and DEBUG['SDVERI'] == 'OUI') + jdc.fico = None + jdc.sd_checker = CheckLog() + if CODE != None: + jdc.fico = CODE['NOM'] + if aster_exists: + # on commence l'execution proprement dite, fin des initialisations + jdc.timer.Stop('JDC init') + # en POURSUITE, ne pas écraser la mémorisation existante. + if not hasattr(jdc, 'memo_sensi'): + jdc.memo_sensi = MEMORISATION_SENSIBILITE() + + +def DEBUT(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args): + """ + Fonction sdprod de la macro DEBUT + """ + # La commande DEBUT ne peut exister qu'au niveau jdc + if self.jdc is not self.parent : + raise Accas.AsException("La commande DEBUT ne peut exister qu'au niveau jdc") + + commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG) + + +def build_debut(self,**args): + """ + Fonction ops pour la macro DEBUT + """ + self.jdc.UserError=self.codex.error + + if self.jdc.par_lot == 'NON' : + self.jdc._Build() + # On execute la fonction debut pour initialiser les bases + # Cette execution est indispensable avant toute autre action sur ASTER + # op doit etre un entier car la fonction debut appelle GCECDU qui demande + # le numero de l'operateur associé (getoper) + self.definition.op=0 + self.set_icmd(1) + lot,ier=self.codex.debut(self,1) + # On remet op a None juste apres pour eviter que la commande DEBUT + # ne soit executée dans la phase d'execution + self.definition.op=None + return ier + +def POURSUITE(self,PAR_LOT,IMPR_MACRO,CODE,DEBUG,**args): + """ + Fonction sdprod de la macro POURSUITE + """ + # La commande POURSUITE ne peut exister qu'au niveau jdc + if self.jdc is not self.parent : + raise Accas.AsException("La commande POURSUITE ne peut exister qu'au niveau jdc") + + commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG) + + if (self.codex and os.path.isfile("glob.1") or os.path.isfile("bhdf.1")): + # Le module d'execution est accessible et glob.1 est present + # Pour eviter de rappeler plusieurs fois la sequence d'initialisation + # on memorise avec l'attribut fichier_init que l'initialisation + # est réalisée + if hasattr(self,'fichier_init'):return + self.fichier_init='glob.1' + self.jdc.initexec() + # le sous programme fortran appelé par self.codex.poursu demande le numero + # de l'operateur (GCECDU->getoper), on lui donne la valeur 0 + self.definition.op=0 + lot,ier,lonuti,concepts=self.codex.poursu(self,1) + # Par la suite pour ne pas executer la commande pendant la phase + # d'execution on le remet à None + self.definition.op=None + # On demande la numerotation de la commande POURSUITE avec l'incrément + # lonuti pour qu'elle soit numérotée à la suite des commandes existantes. +####CD self.set_icmd(lonuti) Non : on repart à zéro + pos=0 + d={} + while pos+80 < len(concepts)+1: + nomres=concepts[pos:pos+8] + concep=concepts[pos+8:pos+24] + nomcmd=concepts[pos+24:pos+40] + statut=concepts[pos+40:pos+48] + print nomres,concep,nomcmd,statut + if nomres[0] not in (' ','.','&') and statut != '&DETRUIT': + exec nomres+'='+string.lower(concep)+'()' in self.parent.g_context,d + elif statut == '&DETRUIT' : self.jdc.nsd = self.jdc.nsd+1 + pos=pos+80 + # ces ASSD seront écrasées par le pick.1, + # on vérifiera la cohérence de type entre glob.1 et pick.1 + for k,v in d.items(): + self.parent.NommerSdprod(v,k) + self.g_context=d + + # Il peut exister un contexte python sauvegardé sous forme pickled + # On récupère ces objets après la restauration des concepts pour que + # la récupération des objets pickled soit prioritaire. + # On vérifie que les concepts relus dans glob.1 sont bien tous + # presents sous le meme nom et du meme type dans pick.1 + # Le contexte est ensuite updaté (surcharge) et donc enrichi des + # variables qui ne sont pas des concepts. + # On supprime du pickle_context les concepts valant None, ca peut + # etre le cas des concepts non executés, placés après FIN. + pickle_context=get_pickled_context() + self.jdc.restore_pickled_attrs(pickle_context) + if pickle_context==None : + UTMESS('F','SUPERVIS_86') + return + from Cata.cata import ASSD,entier + from Noyau.N_CO import CO + for elem in pickle_context.keys(): + if isinstance(pickle_context[elem], ASSD): + pickle_class=pickle_context[elem].__class__ + # on rattache chaque assd au nouveau jdc courant (en poursuite) + pickle_context[elem].jdc=self.jdc + pickle_context[elem].parent=self.jdc + # rétablir le parent pour les attributs de la SD + pickle_context[elem].reparent_sd() + if elem in self.g_context.keys(): + poursu_class=self.g_context[elem].__class__ + if poursu_class!=pickle_class : + UTMESS('F','SUPERVIS_87',valk=[elem]) + return + elif isinstance(pickle_context[elem],ASSD) and pickle_class not in (CO,entier) : + # on n'a pas trouvé le concept dans la base et sa classe est ASSD : ce n'est pas normal + # sauf dans le cas de CO : il n'a alors pas été typé et c'est normal qu'il soit absent de la base + # meme situation pour le type 'entier' produit uniquement par DEFI_FICHIER + UTMESS('F','SUPERVIS_88',valk=[elem,str(pickle_class)]) + return + if pickle_context[elem]==None : del pickle_context[elem] + self.g_context.update(pickle_context) + return + + else: + # Si le module d'execution n est pas accessible ou glob.1 absent on + # demande un fichier (EFICAS) + # Il faut éviter de réinterpréter le fichier à chaque appel de + # POURSUITE + if hasattr(self,'fichier_init'): + return + self.make_poursuite() + +def get_pickled_context(): + """ + Cette fonction permet de réimporter dans le contexte courant du jdc (jdc.g_context) + les objets python qui auraient été sauvegardés, sous forme pickled, lors d'une + précédente étude. Un fichier pick.1 doit etre présent dans le répertoire de travail + """ + if os.path.isfile("pick.1"): + file="pick.1" + else: return None + + # Le fichier pick.1 est présent. On essaie de récupérer les objets python sauvegardés + context={} + try: + file=open(file,'r') + # Le contexte sauvegardé a été picklé en une seule fois. Il est seulement + # possible de le récupérer en bloc. Si cette opération echoue, on ne récupère + # aucun objet. + context=pickle.load(file) + file.close() + except: + # En cas d'erreur on ignore le contenu du fichier + # traceback.print_exc() + return None + + return context + +def POURSUITE_context(self,d): + """ + Fonction op_init de la macro POURSUITE + """ + # self représente la macro POURSUITE ... + d.update(self.g_context) + # Une commande POURSUITE n'est possible qu'au niveau le plus haut + # On ajoute directement les concepts dans le contexte du jdc + # XXX est ce que les concepts ne sont pas ajoutés plusieurs fois ?? + for v in self.g_context.values(): + if isinstance(v,ASSD) : self.jdc.sds.append(v) + +def build_poursuite(self,**args): + """ + Fonction ops pour la macro POURSUITE + """ + # Pour POURSUITE on ne modifie pas la valeur initialisee dans ops.POURSUITE + # Il n y a pas besoin d executer self.codex.poursu (c'est deja fait dans + # la fonction sdprod de la commande (ops.POURSUITE)) + self.set_icmd(1) + self.jdc.UserError=self.codex.error + return 0 + +def INCLUDE(self,UNITE,**args): + """ + Fonction sd_prod pour la macro INCLUDE + """ + if not UNITE : return + if hasattr(self,'unite'):return + self.unite=UNITE + + if self.jdc and self.jdc.par_lot == 'NON': + # On est en mode commande par commande, on appelle la methode speciale + self.Execute_alone() + + self.make_include(unite=UNITE) + +def INCLUDE_context(self,d): + """ + Fonction op_init pour macro INCLUDE + """ + for k,v in self.g_context.items(): + d[k]=v + +def build_include(self,**args): + """ + Fonction ops de la macro INCLUDE appelée lors de la phase de Build + """ + # Pour presque toutes les commandes (sauf FORMULE et POURSUITE) + # le numero de la commande n est pas utile en phase de construction + # La macro INCLUDE ne sera pas numérotée (incrément=None) + ier=0 + self.set_icmd(None) + icmd=0 + # On n'execute pas l'ops d'include en phase BUILD car il ne sert a rien. + #ier=self.codex.opsexe(self,icmd,-1,1) + return ier + +def detruire(self,d): + """ + Cette fonction est la fonction op_init de la PROC DETRUIRE + """ + if hasattr(self,"executed") and self.executed == 1: + return + if self["CONCEPT"]!=None: + sd=[] + for mc in self["CONCEPT"]: + mcs=mc["NOM"] + if mcs is None:continue + if type(mcs) == types.ListType or type(mcs) == types.TupleType: + for e in mcs: + if isinstance(e,ASSD): + sd.append(e) + e=e.nom + # traitement particulier pour les listes de concepts, on va mettre à None + # le terme de l'indice demandé dans la liste : + # nomconcept_i est supprimé, nomconcept[i]=None + indice=e[e.rfind('_')+1:] + concept_racine=e[:e.rfind('_')] + if indice!='' and d.has_key(concept_racine) and type(d[concept_racine])==types.ListType: + try : + indici=int(indice) + d[concept_racine][indici]=None + except ValueError : pass + # pour tous les concepts : + if d.has_key(e):del d[e] + if self.jdc.sds_dict.has_key(e):del self.jdc.sds_dict[e] + else: + if isinstance(mcs,ASSD): + sd.append(mcs) + mcs=mcs.nom + # traitement particulier pour les listes de concepts, on va mettre à None + # le terme de l'indice demandé dans la liste : + # nomconcept_i est supprimé, nomconcept[i]=None + indice=mcs[mcs.rfind('_')+1:] + concept_racine=mcs[:mcs.rfind('_')] + if indice!='' and d.has_key(concept_racine) and type(d[concept_racine])==types.ListType: + try : + indici=int(indice) + d[concept_racine][indici]=None + except ValueError : pass + # pour tous les concepts : + if d.has_key(mcs):del d[mcs] + if self.jdc.sds_dict.has_key(mcs):del self.jdc.sds_dict[mcs] + for s in sd: + # On signale au parent que le concept s n'existe plus apres l'étape self + self.parent.delete_concept_after_etape(self,s) + +def subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR): + """ + Cette fonction retourne un texte obtenu à partir du texte passé en argument (text) + en substituant le nom du materiau par NOM_MATER + et en réalisant les extractions spéciifées dans EXTRACTION + """ + lines=string.split(text,'\n') + +##### traitement de UNIT : facteur multiplicatif puissance de 10 + regmcsu=re.compile(r" *(.*) *= *([^ ,]*) *## +([^ ]*) *([^ ]*)") + ll_u=[] + for l in lines: + m=regmcsu.match(l) + if m: + if m.group(3) == "UNIT": + if UNITE_LONGUEUR=='M' : coef = '0' + elif UNITE_LONGUEUR=='MM' : coef = m.group(4) + ll_u.append(m.group(1)+" = "+m.group(2)+coef) + else : ll_u.append(l) + else : ll_u.append(l) + +##### traitement de EXTRACTION + if EXTRACTION: + regmcf=re.compile(r" *(.*) *= *_F\( *## +(.*) +(.*)") + regmcs=re.compile(r" *(.*) *= *([^ ,]*) *, *## +([^ ]*) *([^ ]*)") + regfin=re.compile(r" *\) *") + ll=[] + temps={};lmcf=[] + for e in EXTRACTION: + mcf=e['COMPOR'] + lmcf.append(mcf) + temps[mcf]=e['TEMP_EVAL'] + FLAG=0 + for l in ll_u: + m=regmcf.match(l) + if m: # On a trouve un mot cle facteur "commentarise" + if m.group(2) == "SUBST": # il est de plus substituable + if temps.has_key(m.group(3)): # Il est a substituer + ll.append(" "+m.group(3)+"=_F(") + mcf=m.group(3) + TEMP=temps[mcf] + FLAG=1 # Indique que l'on est en cours de substitution + else: # Il n est pas a substituer car il n est pas dans la liste demandee + ll.append(l) + else: # Mot cle facteur commentarise non substituable + ll.append(l) + else: # La ligne ne contient pas un mot cle facteur commentarise + if FLAG == 0: # On n est pas en cours de substitution + ll.append(l) + else: # On est en cours de substitution. On cherche les mots cles simples commentarises + m=regmcs.match(l) + if m: # On a trouve un mot cle simple commentarise + if m.group(3) == "EVAL": + ll.append(" "+m.group(1)+' = '+m.group(4)+"("+str(TEMP)+'),') + elif m.group(3) == "SUPPR": + pass + else: + ll.append(l) + else: # On cherche la fin du mot cle facteur en cours de substitution + m=regfin.match(l) + if m: # On l a trouve. On le supprime de la liste + FLAG=0 + del temps[mcf] + ll.append(l) + else: + ll=ll_u + + lines=ll + ll=[] + for l in lines: + l=re.sub(" *MAT *= *",NOM_MATER+" = ",l,1) + ll.append(l) + text=string.join(ll,'\n') + return text + +def post_INCLUDE(self): + """ + Cette fonction est executée apres toutes les commandes d'un INCLUDE (RETOUR) + Elle sert principalement pour les INCLUDE_MATERIAU : remise a blanc du prefixe Fortran + """ + self.codex.opsexe(self,0,-1,2) + +def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER, + EXTRACTION,UNITE_LONGUEUR,INFO,**args): + """ + Fonction sd_prod pour la macro INCLUDE_MATERIAU + """ + mat=string.join((NOM_AFNOR,'_',TYPE_MODELE,'_',VARIANTE,'.',TYPE_VALE),'') + if not hasattr(self,'mat') or self.mat != mat or self.nom_mater != NOM_MATER : + # On récupère le répertoire des matériaux dans les arguments + # supplémentaires du JDC + rep_mat=self.jdc.args.get("rep_mat","NOrep_mat") + f=os.path.join(rep_mat,mat) + self.mat=mat + self.nom_mater=NOM_MATER + if not os.path.isfile(f): + del self.mat + self.make_contexte(f,"#Texte sans effet pour reinitialiser le contexte a vide\n") + raise "Erreur sur le fichier materiau: "+f + # Les materiaux sont uniquement disponibles en syntaxe Python + # On lit le fichier et on supprime les éventuels \r + text=string.replace(open(f).read(),'\r\n','\n') + # On effectue les substitutions necessaires + self.text= subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR) + if INFO == 2: + print "INCLUDE_MATERIAU: ", self.mat,' ',NOM_MATER,'\n' + print self.text + # on execute le texte fourni dans le contexte forme par + # le contexte de l etape pere (global au sens Python) + # et le contexte de l etape (local au sens Python) + # Il faut auparavant l'enregistrer aupres du module linecache (utile pour nommage.py) + linecache.cache[f]=0,0,string.split(self.text,'\n'),f + + self.postexec=post_INCLUDE + + if self.jdc.par_lot == 'NON': + # On est en mode commande par commande, on appelle la methode speciale + self.Execute_alone() + + self.make_contexte(f,self.text) + for k,v in self.g_context.items() : + if isinstance(v,ASSD) and k!=v.nom : del self.g_context[k] + +def build_procedure(self,**args): + """ + Fonction ops de la macro PROCEDURE appelée lors de la phase de Build + """ + ier=0 + # Pour presque toutes les commandes (sauf FORMULE et POURSUITE) + # le numero de la commande n est pas utile en phase de construction + # On ne numérote pas une macro PROCEDURE (incrément=None) + self.set_icmd(None) + icmd=0 + #ier=self.codex.opsexe(self,icmd,-1,3) + return ier + +def build_DEFI_FICHIER(self,**args): + """ + Fonction ops de la macro DEFI_FICHIER + """ + ier=0 + self.set_icmd(1) + icmd=0 + ier=self.codex.opsexe(self,icmd,-1,26) + return ier diff --git a/Aster/Tests/err2.comm b/Aster/Tests/err2.comm index 1f14ec0e..485c0f77 100644 --- a/Aster/Tests/err2.comm +++ b/Aster/Tests/err2.comm @@ -1,5 +1,4 @@ - DEBUT(); MA=LIRE_MAILLAGE(); @@ -10,10 +9,10 @@ kk=DEFI_MATERIAU(ELAS=_F(E=56.24, uu=DEFI_MATERIAU(ELAS=_F(E=56.24, NU=0.3,),); -sansnom=DEFI_MATERIAU(ELAS=_F(E=56.24, - NU=0.3,),); +zezea=DEFI_MATERIAU(ELAS=_F(E=56.24, + NU=0.3,),); -sansnom=DEFI_MATERIAU(ELAS=_F(E=56.24, +SD_5=DEFI_MATERIAU(ELAS=_F(E=56.24, NU=0.3,),); FIN(); diff --git a/Aster/Tests/j0.comm b/Aster/Tests/j0.comm index 1b55b9f8..7aa78c2f 100644 --- a/Aster/Tests/j0.comm +++ b/Aster/Tests/j0.comm @@ -1,3 +1,6 @@ -DEBUT(); -INCLUDE(UNITE=11) + +DEBUT(PAR_LOT='OUI',); + +INCLUDE(UNITE=11,); + FIN(); diff --git a/Aster/Tests/p0.comm b/Aster/Tests/p0.comm index cf00cf86..35190d65 100644 --- a/Aster/Tests/p0.comm +++ b/Aster/Tests/p0.comm @@ -1,3 +1,2 @@ POURSUITE() -INCLUDE(UNITE=11) FIN() diff --git a/Aster/editeur.ini b/Aster/editeur.ini index de8d11dd..5f497917 100644 --- a/Aster/editeur.ini +++ b/Aster/editeur.ini @@ -20,7 +20,7 @@ import os -import prefs +from Aster import prefs rep_cata = os.path.join(prefs.REPINI,'Cata') rep_Pmw = os.path.join(prefs.REPINI,'../Pmw') @@ -37,11 +37,12 @@ rep_travail = "/tmp" initialdir=os.curdir # Choix des catalogues -rep_mat=os.path.join(rep_cata,'..','materiau') +rep_mat_v85=os.path.join(rep_cata,'cataSTA8','materiau') +rep_mat_v91=os.path.join(rep_cata,'cataSTA9','materiau') catalogues = ( ('ASTER','v7.8',os.path.join(rep_cata,'cataSTA7'),'python'), - ('ASTER','v8.5',os.path.join(rep_cata,'cataSTA8'),'python'), - ('ASTER','v9.1',os.path.join(rep_cata,'cataSTA9'),'python','defaut'), + ('ASTER','v8.7',os.path.join(rep_cata,'cataSTA8'),'python'), + ('ASTER','v9.3',os.path.join(rep_cata,'cataSTA9'),'python','defaut'), ) diff --git a/Aster/editeur.ini.pn b/Aster/editeur.ini.pn index ea7a0f7f..ba90991e 100644 --- a/Aster/editeur.ini.pn +++ b/Aster/editeur.ini.pn @@ -20,15 +20,14 @@ import os -import prefs +from Aster import prefs rep_cata = os.path.join(prefs.REPINI,'Cata') -rep_homard = os.path.join(prefs.REPINI,'../Homard') rep_Pmw = os.path.join(prefs.REPINI,'../Pmw') # Accès à la documentation Aster path_doc = os.path.join(rep_cata,'..','Doc') -exec_acrobat = "/usr/bin/acroread" +exec_acrobat = "acroread" # Utilisateur/Développeur isdeveloppeur = "NON" path_cata_dev = "/tmp/cata" @@ -38,17 +37,11 @@ rep_travail = "/tmp" initialdir=os.curdir # Choix des catalogues -rep_mat="//home/noyret/Install_Eficas/materiau" +rep_mat=os.path.join(rep_cata,'..','materiau') catalogues = ( - #('ASTER','v5',os.path.join(rep_cata,'cataSTA5'),'asterv5'), - #('ASTER','v6',os.path.join(rep_cata,'cataSTA6'),'python6'), - #('ASTER','v73',os.path.join(rep_cata,'cataSTA73'),'python','defaut'), - #('ASTER','v74',os.path.join(rep_cata,'cataSTA74'),'python'), - ('ASTER','v7.6',os.path.join(rep_cata,'cataSTA76'),'python'), - #('ASTER','v8',os.path.join(rep_cata,'cataSTA8'),'python','defaut'), - ('ASTER','v8.3',os.path.join(rep_cata,'cataSTA8'),'python','defaut'), - #('ASTER','v75',os.path.join(rep_cata,'cataSTA75'),'python','defaut'), - ('HOMARD','v1',os.path.join(rep_homard,'homard_cata_V73.py'),'homard'), +# ('ASTER','v7.8',os.path.join(rep_cata,'cataSTA7'),'python'), +# ('ASTER','v8.5',os.path.join(rep_cata,'cataSTA8'),'python'), + ('ASTER','v9.1',os.path.join(rep_cata,'cataSTA9'),'python','defaut'), ) diff --git a/Aster/editeur_salome.ini b/Aster/editeur_salome.ini new file mode 100644 index 00000000..d0881d54 --- /dev/null +++ b/Aster/editeur_salome.ini @@ -0,0 +1,48 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +import os + +from Aster import prefs + +rep_cata = os.path.join(prefs.REPINI,'Cata') +rep_Pmw = os.path.join(prefs.REPINI,'../Pmw') + +# Accès à la documentation Aster +path_doc = os.path.join(rep_cata,'..','Doc') +exec_acrobat = "acroread" +# Utilisateur/Développeur +isdeveloppeur = "NON" +path_cata_dev = "/tmp/cata" +# Répertoire temporaire +rep_travail = "/tmp" +# Répertoire initial +initialdir=os.curdir + +# Choix des catalogues +rep_mat_v85=os.path.join(rep_cata,'cataSTA8','materiau') +rep_mat_v91=os.path.join(rep_cata,'cataSTA9','materiau') + +catalogues = ( + ('ASTER','v7.8',os.path.join(rep_cata,'cataSTA7'),'python'), + ('ASTER','v8.5',os.path.join(rep_cata,'cataSTA8'),'python'), + ('ASTER','v9.1',os.path.join(rep_cata,'cataSTA9'),'python','defaut'), + ) + diff --git a/Aster/eficas_aster.py b/Aster/eficas_aster.py index 1d298b58..a13a68ce 100755 --- a/Aster/eficas_aster.py +++ b/Aster/eficas_aster.py @@ -27,6 +27,6 @@ # Modules Eficas import prefs -from Editeur import eficas_go +from InterfaceTK import eficas_go -eficas_go.lance_eficas() +eficas_go.lance_eficas(code=prefs.code) diff --git a/Aster/lance_test.sh b/Aster/lance_test.sh index 5eb25ff9..743c70be 100755 --- a/Aster/lance_test.sh +++ b/Aster/lance_test.sh @@ -1,14 +1,14 @@ #unalias do #set -x -version=NEW82 -passe=2 +version=NEW9 +passe=1 rm -rf ./Batch/${version}/ok_${passe} rm -rf ./Batch/${version}/bad_${passe} rm -rf ./Batch/${version}/badfile_${passe} rm -rf ./Batch/${version}/nt_${passe} for file in `cat ./Batch/${version}/aTester` do - #echo $file + echo $file grep "VISU_EFICAS='NON'" $file > /dev/null 2>/dev/null rc=$? if [ "$rc" != "0" ] diff --git a/Aster/prefs.py b/Aster/prefs.py index 13b16d0d..5fc73e58 100644 --- a/Aster/prefs.py +++ b/Aster/prefs.py @@ -34,21 +34,39 @@ INSTALLDIR=os.path.join(REPINI,'..') # Par défaut on utilise les modules de INSTALLDIR # Peut valoir None (defaut) CODE_PATH = None -#CODE_PATH = os.path.join(REPINI,'../../Superv') # la variable code donne le nom du code a selectionner code="ASTER" -# ICONDIR sert à localiser le répertoire contenant les icones -# Par défaut on utilise le répertoire icons dans Editeur -ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons') - # lang indique la langue utilisée pour les chaines d'aide : fr ou ang lang='fr' # Codage des strings qui accepte les accents (en remplacement de 'ascii') encoding='iso-8859-1' + +EditeurDir=INSTALLDIR+"/Editeur" +sys.path[:0]=[INSTALLDIR] + +ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons') + +# Preference +if os.name == 'nt': + userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ]) +else : + userprefs=os.path.expanduser("~/Eficas_install/prefs.py") + +if os.path.isfile(userprefs): + try: + execfile(userprefs) + except: + pass + + +#------------------------------------------------------------------- +# Partie pour TK +#------------------------------------------------------------------- + labels= ('Fichier','Edition','Jeu de commandes', 'Options', 'Aide', @@ -56,7 +74,6 @@ labels= ('Fichier','Edition','Jeu de commandes', ) appli_composants=['readercata','bureau', -# 'browser', 'options', ] @@ -94,15 +111,3 @@ menu_defs={ 'bureau': [ ), ] } - -if os.name == 'nt': - userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ]) -else : - userprefs=os.path.expanduser("~/Eficas_install/prefs.py") -if os.path.isfile(userprefs): - try: - execfile(userprefs) - except: - pass - -sys.path[:0]=[INSTALLDIR] diff --git a/Aster/properties.py b/Aster/properties.py index 582b2427..72607722 100644 --- a/Aster/properties.py +++ b/Aster/properties.py @@ -20,6 +20,6 @@ # IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR # DE LA VERSION DU CODE_ASTER ASSOCIE #---------------------------------------------------------------------- -version = "9.0.30" -date = "08/06/2007" +version = "9.1.15" +date = "17/10/2007" exploit = False diff --git a/Aster/qtEficas_aster.py b/Aster/qtEficas_aster.py new file mode 100755 index 00000000..e3736bd6 --- /dev/null +++ b/Aster/qtEficas_aster.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +""" + Ce module sert à lancer EFICAS configuré pour Code_Aster +""" +# Modules Python + +# Modules Eficas +import prefs +from InterfaceQT import eficas_go + +eficas_go.lance_eficas(code=prefs.code) diff --git a/Aster/sdist.py b/Aster/sdist.py index c9c481c3..9b0f3af7 100644 --- a/Aster/sdist.py +++ b/Aster/sdist.py @@ -37,6 +37,9 @@ def main(): copyfiles('.',path_distrib,['LICENSE.TERMS','INSTALL','NEWS']) copyfiles('../Editeur',os.path.join(path_distrib,'Editeur'),['*.py','faqs.txt']) + copyfiles('../InterfaceTK',os.path.join(path_distrib,'InterfaceTK'),['*.py','faqs.txt']) + copyfiles('../InterfaceQT',os.path.join(path_distrib,'InterfaceQT'),['*.py']) + copyfiles('../Ui',os.path.join(path_distrib,'Ui'),['*.ui','makefile']) copyfiles('../Traducteur',os.path.join(path_distrib,'Traducteur'),['*.py']) copyfiles('../Ihm',os.path.join(path_distrib,'Ihm'),['*.py']) copyfiles('../Extensions',os.path.join(path_distrib,'Extensions'),['*.py']) @@ -50,9 +53,11 @@ def main(): # Code_Aster copyfiles('../Aster',os.path.join(path_distrib,'Aster'),['prefs.py', 'editeur.ini', + 'editeur_salome.ini', 'eficas_aster.py', 'test_eficas.py', - 'style.py' + 'style.py', + '__init__.py' ]) # Les Catalogues, Macros, Materiaux et SD @@ -86,6 +91,7 @@ def main(): copyfiles('../generator',os.path.join(path_distrib,'generator'),['*.py']) copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif']) copyfiles('../Editeur/Patrons',os.path.join(path_distrib,'Editeur','Patrons'),['*.com*']) + copyfiles('../Editeur/Patrons/ASTER',os.path.join(path_distrib,'Editeur','Patrons','ASTER'),['*.com*']) copyfiles(os.path.join(path_Noyau,'Noyau'),os.path.join(path_distrib,'Noyau'),['*.py']) copyfiles(os.path.join(path_Noyau,'Validation'),os.path.join(path_distrib,'Validation'),['*.py']) diff --git a/Aster/test_eficas.py b/Aster/test_eficas.py index 5529fe6a..4576e99d 100755 --- a/Aster/test_eficas.py +++ b/Aster/test_eficas.py @@ -38,8 +38,8 @@ if hasattr(prefs,'encoding'): sys.path[:0]=[prefs.INSTALLDIR] -import Editeur -from Editeur import eficas_test +import InterfaceTK +from InterfaceTK import eficas_test if len(sys.argv) > 1 : # on veut ouvrir un fichier directement au lancement d'Eficas diff --git a/Editeur/Interp.py b/Editeur/Interp.py deleted file mode 100644 index 8fb95820..00000000 --- a/Editeur/Interp.py +++ /dev/null @@ -1,153 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== - -import Tkinter,ScrolledText -import os, sys, string, traceback -import code - -sys.ps1 = ">>> " -sys.ps2 = "... " - -class PythonInterpreter( code.InteractiveConsole): - def __init__( self, text, namespace = None): - code.InteractiveConsole.__init__( self, namespace) - self.text = text - - def showtraceback( self): - start = self.text.pos + " - 1 lines" - code.InteractiveConsole.showtraceback( self) - end = self.text.pos - self.text.tag_add( "exception", start, end) - -class InterpWindow(Tkinter.Toplevel): - def __init__(self,namespace, parent=None): - Tkinter.Toplevel.__init__(self,parent) - self._initTkWidgets() - self.stdout = self.stderr = self - self.pos = '1.0' - self.history = [ '' ] - self.hpos = 0 - self.tabCount = 0 - self.shell = PythonInterpreter( self,namespace) - self.write("Python %s on %s\n%s\n(%s)\n" % - (sys.version, sys.platform, sys.copyright, - self.__class__.__name__)) - self.write( sys.ps1) - self.text.focus_set() - - def _initTkWidgets( self): - self.text = ScrolledText.ScrolledText( self, bg = "white",fg="black", wrap="word") - self.text.pack( fill='both', expand = 1) - self.text.bind( '', self.clearMsg) - self.text.bind( '', self.inputhandler) - self.text.bind( '', self.inputhandler) - self.text.bind( '', self.uphistory) - self.text.bind( '', self.downhistory) - self.text.bind( '', self.goto_sol) - self.text.bind( '', self.sendeof) - self.text.tag_config("exception", foreground = "red") - - def swapStdFiles(self): - sys.stdout,self.stdout = self.stdout,sys.stdout - sys.stderr,self.stderr = self.stderr,sys.stderr - - def write(self, data): - self.text.insert("end", data) - self.pos = self.text.index("end - 1 char") - self.text.yview_pickplace("end") - - def tag_add( self, tag, start, end): - self.text.tag_add( tag, start, end) - - def inputhandler(self, *args): - # Remove any extraneous stuff - self.text.delete( self.pos + " lineend", "end") - # Now get the line - line = self.text.get(self.pos, "end - 1 char") - self.text.insert("end", "\n") - self.pos = self.text.index("end") - self.addHistory( line) - self.swapStdFiles() - if self.shell.push( line): - self.write(sys.ps2) - else: - self.write(sys.ps1) - self.swapStdFiles() - self.text.mark_set("insert", "end") - return "break" - - def addHistory( self, line): - if line: - self.history.insert( len( self.history) - 1, line) - self.hpos = len( self.history) - 1 - - def sendeof(self, *args): - self.destroy() - return "break" - - def uphistory(self, event=None): - if not self.history: return "break" - - if self.hpos > 0: - self.hpos = self.hpos - 1 - - line = self.history[ self.hpos] - self.text.delete( self.pos, "end") - self.text.insert( self.pos, line) - - return "break" - - def downhistory( self, event=None): - if not self.history: return "break" - - if self.hpos < (len( self.history) - 1): - self.hpos = self.hpos + 1 - - line = self.history[ self.hpos] - self.text.delete( self.pos, "end") - self.text.insert( self.pos, line) - - return "break" - - def goto_sol( self, event=None): - """ - Met en mode edition la ligne courante - """ - self.text.mark_set( 'insert', 'insert linestart + 4 chars') - return "break" - - def clearMsg( self, event=None): - index = self.text.index( "insert") - self.text.delete( "insert lineend", "end") - self.tabCount = 0 - -if __name__ == "__main__": - app = Tkinter.Tk() - d={'a':1} - - def go(): - InterpWindow(d,parent=app) - - Tkinter.Button(app,text="Interp",command=go).pack() - Tkinter.Button(app,text="Quit",command=app.destroy).pack() - - app.mainloop() - diff --git a/Editeur/Objecttreeitem.py b/Editeur/Objecttreeitem.py index 21998b57..0882abb5 100644 --- a/Editeur/Objecttreeitem.py +++ b/Editeur/Objecttreeitem.py @@ -27,7 +27,6 @@ from copy import copy,deepcopy # import du chargeur de composants from comploader import make_objecttreeitem -import treewidget from Ihm import CONNECTOR myrepr = Repr() @@ -51,7 +50,7 @@ class TreeItem: # ou treeOrNode est le noeud parent, item est l'item associé # command est une fonction python appelée sur sélection graphique # du noeud et rmenu est une fonction python appelée sur click droit sur le noeud - itemNode=treewidget.Node + itemNode=None def __init__(self): """Constructor. Do whatever you need to do.""" @@ -130,7 +129,7 @@ class Delegate: def cachereport(self): keys = self.__cache.keys() keys.sort() - print keys + #print keys class ObjectTreeItem(TreeItem,Delegate): diff --git a/Editeur/Patrons/ASTER/AnalyseModale.salome.comm b/Editeur/Patrons/ASTER/AnalyseModale.salome.comm new file mode 100644 index 00000000..898d5715 --- /dev/null +++ b/Editeur/Patrons/ASTER/AnalyseModale.salome.comm @@ -0,0 +1,64 @@ +DEBUT(); + +# 1 - MISE EN DONNEES : +# LECTURE DU MAILLAGE MED + +MAIL=LIRE_MAILLAGE(UNITE=21, + FORMAT='MED',); +# +# DEFINITION DES ELEMENTS FINIS UTILISES + +MODELE=AFFE_MODELE(MAILLAGE=MAIL, + AFFE=_F(TOUT='OUI', + PHENOMENE='MECANIQUE', + MODELISATION='3D',),); +# +# DEFINITION DU MATERIAU UTILISE + +ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11, + NU=0.3, + RHO=7800.0,),); + +CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, + AFFE=_F(TOUT='OUI', + MATER=ACIER,),); + +# +# DEFINITION DES CONDITIONS AUX LIMITES + +BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE, + DDL_IMPO=_F(GROUP_MA='ABB1A1', + DX=0.0, + DY=0.0, + DZ=0.0,),); + +# 2 - CALCUL DES CINQ PREMIERS MODES PROPRES +# +# CALCUL DES MATRICES ASSEMBLEES K ET M + +MACRO_MATR_ASSE(MODELE=MODELE, + CHAM_MATER=CHMAT, + CHARGE=BLOQUAGE, + NUME_DDL=CO('NUMEDDL'), + MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'), + OPTION='RIGI_MECA',), + _F(MATRICE=CO('MASSE'), + OPTION='MASS_MECA',),),); +# + +MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE, + MATR_B=MASSE, + CALC_FREQ=_F( + OPTION='PLUS_PETITE', + NMAX_FREQ=5,),); +# +# ECRITURE DES MODES AU FORMAT MED + +IMPR_RESU(MODELE=MODELE, + FORMAT='MED', + RESU=_F(MAILLAGE=MAIL, + RESULTAT=MODES, + NOM_CHAM='DEPL',),); + +FIN(); +# diff --git a/Editeur/Patrons/ASTER/elasticite.salome.comm b/Editeur/Patrons/ASTER/elasticite.salome.comm new file mode 100644 index 00000000..454762be --- /dev/null +++ b/Editeur/Patrons/ASTER/elasticite.salome.comm @@ -0,0 +1,55 @@ +DEBUT(); + +MA=DEFI_MATERIAU(ELAS=_F(E=210000000000, + NU=0.3,),); + + + +MAIL=LIRE_MAILLAGE(UNITE=21, + FORMAT='MED', + INFO_MED=2,); + +MODE=AFFE_MODELE(MAILLAGE=MAIL, + AFFE=_F(TOUT='OUI', + PHENOMENE='MECANIQUE', + MODELISATION= '3D',),); + + + +MATE=AFFE_MATERIAU(MAILLAGE=MAIL, + AFFE=_F(TOUT='OUI', + MATER=MA,),); + +CHAR=AFFE_CHAR_MECA(MODELE=MODE, + FACE_IMPO=( + _F(GROUP_MA='ABB1A1', + DX=0, + DY=0, + DZ=0,),), + PRES_REP=( + _F(GROUP_MA='CDD1C1', + PRES=10000,),),); + +RESU=MECA_STATIQUE(MODELE=MODE, + CHAM_MATER=MATE, + EXCIT=_F(CHARGE=CHAR,),); + +RESU=CALC_ELEM(reuse =RESU, + MODELE=MODE, + CHAM_MATER=MATE, + RESULTAT=RESU, + OPTION=('SIGM_ELNO_DEPL','EQUI_ELNO_SIGM',), + EXCIT=_F( + CHARGE=CHAR,),); + +RESU=CALC_NO(reuse =RESU, + RESULTAT=RESU, + OPTION=('SIGM_NOEU_DEPL', 'EQUI_NOEU_SIGM', ),); + +IMPR_RESU(FORMAT='MED', + UNITE=80, + RESU=_F(MAILLAGE=MAIL, + RESULTAT=RESU, + NOM_CHAM=('SIGM_NOEU_DEPL','EQUI_NOEU_SIGM','DEPL',),),); + +FIN(); \ No newline at end of file diff --git a/Editeur/Patrons/ASTER/limaillage.comm b/Editeur/Patrons/ASTER/limaillage.comm new file mode 100644 index 00000000..bb12c443 --- /dev/null +++ b/Editeur/Patrons/ASTER/limaillage.comm @@ -0,0 +1,11 @@ + + +DEBUT(CODE=_F(NOM='VIDE', + NIV_PUB_WEB='INTERNET',),); +# + +MA=LIRE_MAILLAGE(); + + +FIN(); +# diff --git a/Editeur/Patrons/ASTER/modes_3D.comm b/Editeur/Patrons/ASTER/modes_3D.comm new file mode 100644 index 00000000..aafe1f2a --- /dev/null +++ b/Editeur/Patrons/ASTER/modes_3D.comm @@ -0,0 +1,57 @@ + +# PATRON +# ANALYSE MODALE +# 3D + +DEBUT(); +# MISE EN DONNEES + +MAIL=LIRE_MAILLAGE(); + +MODELE=AFFE_MODELE(MAILLAGE=MAIL, + AFFE=_F(GROUP_MA='OBJET', + PHENOMENE='MECANIQUE', + MODELISATION='3D',),); +# MATERIAU + +ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11, + NU=0.3, + RHO=7800.0,),); + +CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, + AFFE=_F(GROUP_MA='OBJET', + MATER=ACIER,),); + +# CONDITIONS AUX LIMITES ET CHARGEMENT +# CONDITIONS AUX LIMITES + +BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE, + DDL_IMPO=_F(GROUP_MA='ENCAST', + LIAISON='ENCASTRE',),); +# CALCUL DES MATRICES ASSEMBLEES K ET M + +MACRO_MATR_ASSE(MODELE=MODELE, + CHAM_MATER=CHMAT, + CHARGE=BLOQUAGE, + NUME_DDL=CO('NUMEDDL'), + MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'), + OPTION='RIGI_MECA',), + _F(MATRICE=CO('MASSE'), + OPTION='MASS_MECA',),),); +# CALCUL DES CINQ PREMIERS MODES + +MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE, + MATR_B=MASSE, + CALC_FREQ=_F( + OPTION='PLUS_PETITE', + NMAX_FREQ=5,),); +# ECRITURE DES MODES AU FORMAT GMSH + +IMPR_RESU(MODELE=MODELE, + FORMAT='GMSH', + UNITE=19, + RESU=_F(MAILLAGE=MAIL, + RESULTAT=MODES, + NOM_CHAM='DEPL',),); + +FIN(); diff --git a/Editeur/Patrons/ASTER/modes_pou.comm b/Editeur/Patrons/ASTER/modes_pou.comm new file mode 100644 index 00000000..fc72e239 --- /dev/null +++ b/Editeur/Patrons/ASTER/modes_pou.comm @@ -0,0 +1,63 @@ + +# PATRON +# ANALYSE MODALE +# POUTRE + +DEBUT(); +# MISE EN DONNEES + +MAIL=LIRE_MAILLAGE(); + +MODELE=AFFE_MODELE(MAILLAGE=MAIL, + AFFE=_F(GROUP_MA='OBJET', + PHENOMENE='MECANIQUE', + MODELISATION='3D',),); +# MATERIAU + +ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11, + NU=0.3, + RHO=7800.0,),); + +CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, + AFFE=_F(GROUP_MA='OBJET', + MATER=ACIER,),); + +CARELEM=AFFE_CARA_ELEM(MODELE=MODELE, + POUTRE=_F(GROUP_MA='OBJET', + SECTION='CERCLE', + CARA=('R','EP',), + VALE=(1.0,0.01,),),); +# CONDITIONS AUX LIMITES + +BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE, + DDL_IMPO=_F(GROUP_MA='ENCAST', + LIAISON='ENCASTRE',),); +#MATRICES ASSEMBLEES K, M +# + +MACRO_MATR_ASSE(MODELE=MODELE, + CHAM_MATER=CHMAT, + CARA_ELEM=CARELEM, + CHARGE=BLOQUAGE, + NUME_DDL=CO('NUMEDDL'), + MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'), + OPTION='RIGI_MECA',), + _F(MATRICE=CO('MASSE'), + OPTION='MASS_MECA',),),); +#5 PREMIERS MODES + +MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE, + MATR_B=MASSE, + CALC_FREQ=_F( + OPTION='PLUS_PETITE', + NMAX_FREQ=5,),); +# MODES AU FORMAT GMSH + +IMPR_RESU(MODELE=MODELE, + FORMAT='GMSH', + UNITE=19, + RESU=_F(MAILLAGE=MAIL, + RESULTAT=MODES, + NOM_CHAM='DEPL',),); + +FIN(); diff --git a/Editeur/Patrons/ASTER/statlin_3D.comm b/Editeur/Patrons/ASTER/statlin_3D.comm new file mode 100644 index 00000000..39f7057f --- /dev/null +++ b/Editeur/Patrons/ASTER/statlin_3D.comm @@ -0,0 +1,57 @@ + +# PATRON +# ANALYSE STATIQUE +# 3D + +DEBUT(); +# MISE EN DONNEES + +MAIL=LIRE_MAILLAGE(); + +MAIL=DEFI_GROUP(reuse =MAIL, + MAILLAGE=MAIL, + CREA_GROUP_MA=_F(NOM='TOUT', + TOUT='OUI',),); + +MODMECA=AFFE_MODELE(MAILLAGE=MAIL, + AFFE=_F(GROUP_MA='TOUT', + PHENOMENE='MECANIQUE', + MODELISATION='3D',),); + +ACIER=DEFI_MATERIAU(ELAS=_F(E=2.E11, + NU=0.3,),); + +CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, + AFFE=_F(TOUT='OUI', + MATER=ACIER,),); +# CONDITIONS AUX LIMITES ET CHARGEMENT +#POINT A : ENCASTREMENT + +BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODMECA, + DDL_IMPO=_F(GROUP_MA='ENCAST', + LIAISON='ENCASTRE',),); +#POINT B : FORCE IMPOSEE + +CHARGT=AFFE_CHAR_MECA(MODELE=MODMECA, + FORCE_NODALE=_F(GROUP_NO='PB', + FY=1000.0,),); +# RESOLUTION DU PROBLEME ELASTIQUE + +RESU1=MECA_STATIQUE(MODELE=MODMECA, + CHAM_MATER=CHMAT, + EXCIT=(_F(CHARGE=BLOQUAGE,), + _F(CHARGE=CHARGT,),),); +# CALCUL DES EFFORTS + +RESU1=CALC_ELEM(reuse =RESU1, + RESULTAT=RESU1, + OPTION='EFGE_ELNO_DEPL',); +# RESULTATS FORMAT GMSH + +IMPR_RESU(MODELE=MODMECA, + FORMAT='GMSH', + RESU=_F(MAILLAGE=MAIL, + RESULTAT=RESU1, + NOM_CHAM=('DEPL','EFGE_ELNO_DEPL',),),); + +FIN(); diff --git a/Editeur/Patrons/ASTER/statlin_pou.comm b/Editeur/Patrons/ASTER/statlin_pou.comm new file mode 100644 index 00000000..0dd06eb4 --- /dev/null +++ b/Editeur/Patrons/ASTER/statlin_pou.comm @@ -0,0 +1,70 @@ + +# PATRON +# ANALYSE STATIQUE +# POUTRE + +DEBUT(); +# MISE EN DONNEES + +MAIL=LIRE_MAILLAGE(); + +MAIL=DEFI_GROUP(reuse =MAIL, + MAILLAGE=MAIL, + CREA_GROUP_MA=_F(NOM='TOUT', + TOUT='OUI',),); + +MODMECA=AFFE_MODELE(MAILLAGE=MAIL, + AFFE=_F(GROUP_MA='TOUT', + PHENOMENE='MECANIQUE', + MODELISATION='POU_D_T',),); + +ACIER=DEFI_MATERIAU(ELAS=_F(E=2.E10, + NU=0.3,),); + +CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, + AFFE=_F(TOUT='OUI', + MATER=ACIER,),); +R1 = 1.0; + +EP1 = 0.001; + + +CARA_POU=AFFE_CARA_ELEM(MODELE=MODMECA, + POUTRE=_F(GROUP_MA='TOUT', + SECTION='CERCLE', + CARA=('R','EP',), + VALE=(R1,EP1,),),); + +# CONDITIONS AUX LIMITES ET CHARGEMENT + +#POINT A : ENCASTREMENT + +BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODMECA, + DDL_IMPO=_F(GROUP_NO='PA', + LIAISON='ENCASTRE',),); +#POINT B : FORCE IMPOSEE + +CHARGT=AFFE_CHAR_MECA(MODELE=MODMECA, + FORCE_NODALE=_F(GROUP_NO='PB', + FY=1000.0,),); +# RESOLUTION DU PROBLEME ELASTIQUE + +RESU1=MECA_STATIQUE(MODELE=MODMECA, + CHAM_MATER=CHMAT, + CARA_ELEM=CARA_POU, + EXCIT=(_F(CHARGE=BLOQUAGE,), + _F(CHARGE=CHARGT,),),); +# CALCUL DES EFFORTS + +RESU1=CALC_ELEM(reuse =RESU1, + RESULTAT=RESU1, + OPTION='EFGE_ELNO_DEPL',); +# RESULTATS FORMAT GMSH + +IMPR_RESU(MODELE=MODMECA, + FORMAT='GMSH', + RESU=_F(MAILLAGE=MAIL, + RESULTAT=RESU1, + NOM_CHAM=('DEPL','EFGE_ELNO_DEPL',),),); + +FIN(); diff --git a/Editeur/Patrons/ASTER/thermique.salome.comm b/Editeur/Patrons/ASTER/thermique.salome.comm new file mode 100644 index 00000000..61c6fa16 --- /dev/null +++ b/Editeur/Patrons/ASTER/thermique.salome.comm @@ -0,0 +1,34 @@ + + +DEBUT(); + +MESH=LIRE_MAILLAGE(UNITE=21, + FORMAT='MED',); + +MATER=DEFI_MATERIAU(THER=_F(LAMBDA=1.2,),); + +MODEL=AFFE_MODELE(MAILLAGE=MESH, + AFFE=_F(TOUT='OUI', + PHENOMENE='THERMIQUE', + MODELISATION='3D',),); + +MATFIELD=AFFE_MATERIAU(MAILLAGE=MESH, + AFFE=_F(TOUT='OUI', + MATER=MATER,),); + +LOADING=AFFE_CHAR_THER(MODELE=MODEL, + TEMP_IMPO=_F(GROUP_MA='Bloq', + TEMP=23.,), + FLUX_REP=_F(GROUP_MA='Press', + FLUN=2.,), + SOURCE=_F(GROUP_MA='Source', + SOUR=2.,),); + +TEMP=THER_LINEAIRE(MODELE=MODEL, + CHAM_MATER=MATFIELD, + EXCIT=_F(CHARGE=LOADING,),); + +IMPR_RESU(FORMAT='MED', + RESU=_F(RESULTAT=TEMP,),); + +FIN(); diff --git a/Editeur/Patrons/ASTER/tradir_3D.comm b/Editeur/Patrons/ASTER/tradir_3D.comm new file mode 100644 index 00000000..41d17e57 --- /dev/null +++ b/Editeur/Patrons/ASTER/tradir_3D.comm @@ -0,0 +1,72 @@ + +# PATRON +# ANALYSE MODALE +# 3D + +DEBUT(); +# MISE EN DONNEES + +MAIL=LIRE_MAILLAGE(); + +MODELE=AFFE_MODELE(MAILLAGE=MAIL, + AFFE=_F(GROUP_MA='OBJET', + PHENOMENE='MECANIQUE', + MODELISATION='3D',),); +# MATERIAU + +ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11, + NU=0.3, + RHO=7800.0,),); + +CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, + AFFE=_F(GROUP_MA='OBJET', + MATER=ACIER,),); +# CONDITIONS AUX LIMITES ET CHARGEMENT +# CONDITIONS AUX LIMITES + +BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE, + DDL_IMPO=_F(GROUP_MA='ENCAST', + LIAISON='ENCASTRE',),); +# CALCUL DES MATRICES ASSEMBLEES K ET M + +MACRO_MATR_ASSE(MODELE=MODELE, + CHAM_MATER=CHMAT, + CHARGE=BLOQUAGE, + NUME_DDL=CO('NUMEDDL'), + MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'), + OPTION='RIGI_MECA',), + _F(MATRICE=CO('MASSE'), + OPTION='MASS_MECA',),),); +# CALCUL DES CINQ PREMIERS MODES + +MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE, + MATR_B=MASSE, + CALC_FREQ=_F( + OPTION='PLUS_PETITE', + NMAX_FREQ=5,),); +#CHARGEMENT + +EXCIT=AFFE_CHAR_MECA(MODELE=MODELE, + PRES_REP=_F(GROUP_MA='PRESSE', + PRES=100.e5,),); + +EXCEL=CALC_VECT_ELEM(OPTION='CHAR_MECA', + CHARGE=EXCIT,); + +EXCASS=ASSE_VECTEUR(VECT_ELEM=EXCEL, + NUME_DDL=NUMEDDL,); +OMEGA = 10.0; + + +SINU = FORMULE(VALE='sin(OMEGA*INST)', + NOM_PARA='INST',); +#CALCUL TRANSITOIRE + +TRADIR=DYNA_LINE_TRAN(MATR_MASS=MASSE, + MATR_RIGI=RIGIDITE, + NEWMARK=_F(), + EXCIT=_F(VECT_ASSE=EXCASS,), + INCREMENT=_F(PAS=.01, + INST_FIN=10.,),); + +FIN(); diff --git a/Editeur/Patrons/ASTER/tramod_3D.comm b/Editeur/Patrons/ASTER/tramod_3D.comm new file mode 100644 index 00000000..9a68bc5d --- /dev/null +++ b/Editeur/Patrons/ASTER/tramod_3D.comm @@ -0,0 +1,86 @@ + +# PATRON +# ANALYSE MODALE +# 3D + +DEBUT(); +# MISE EN DONNEES + +MAIL=LIRE_MAILLAGE(); + +MODELE=AFFE_MODELE(MAILLAGE=MAIL, + AFFE=_F(GROUP_MA='OBJET', + PHENOMENE='MECANIQUE', + MODELISATION='3D',),); +# MATERIAU + +ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11, + NU=0.3, + RHO=7800.0,),); + +CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, + AFFE=_F(GROUP_MA='OBJET', + MATER=ACIER,),); +# CONDITIONS AUX LIMITES ET CHARGEMENT +# CONDITIONS AUX LIMITES + +BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE, + DDL_IMPO=_F(GROUP_MA='ENCAST', + LIAISON='ENCASTRE',),); +# CALCUL DES MATRICES ASSEMBLEES K ET M + +MACRO_MATR_ASSE(MODELE=MODELE, + CHAM_MATER=CHMAT, + CHARGE=BLOQUAGE, + NUME_DDL=CO('NUMEDDL'), + MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'), + OPTION='RIGI_MECA',), + _F(MATRICE=CO('MASSE'), + OPTION='MASS_MECA',),),); + +P=POST_ELEM(MASS_INER=_F(TOUT='OUI', + GROUP_MA='M',),); +# CALCUL DES CINQ PREMIERS MODES + +MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE, + MATR_B=MASSE, + CALC_FREQ=_F( + OPTION='PLUS_PETITE', + NMAX_FREQ=5,),); +#CHARGEMENT + +EXCIT=AFFE_CHAR_MECA(MODELE=MODELE, + PRES_REP=_F(GROUP_MA='PRESSE', + PRES=100.e5,),); + +EXCEL=CALC_VECT_ELEM(OPTION='CHAR_MECA', + CHARGE=EXCIT,); + +EXCASS=ASSE_VECTEUR(VECT_ELEM=EXCEL, + NUME_DDL=NUMEDDL,); +OMEGA = 10.0; + + +SINU = FORMULE(VALE='sin(OMEGA*INST)', + NOM_PARA='INST',); +#PROJECTION + +MACRO_PROJ_BASE(BASE=MODES, + MATR_ASSE_GENE=(_F(MATRICE=CO('MASSPROJ'), + MATR_ASSE=MASSE,), + _F(MATRICE=CO('RIGIPROJ'), + MATR_ASSE=RIGIDITE,),), + VECT_ASSE_GENE=_F(VECTEUR=CO('EXCPROJ'), + VECT_ASSE=EXCASS,),); +#CALCUL TRANSITOIRE + +TRAMOD=DYNA_TRAN_MODAL(MASS_GENE=MASSPROJ, + RIGI_GENE=RIGIPROJ, + AMOR_REDUIT=(.02,.01,), + INCREMENT=_F(INST_INIT=0.0, + INST_FIN=10.0, + PAS=.001,), + EXCIT=_F(VECT_GENE=EXCPROJ, + FONC_MULT=SINU,),); + +FIN(); diff --git a/Editeur/Patrons/AnalyseModale.salome.comm b/Editeur/Patrons/AnalyseModale.salome.comm deleted file mode 100644 index 898d5715..00000000 --- a/Editeur/Patrons/AnalyseModale.salome.comm +++ /dev/null @@ -1,64 +0,0 @@ -DEBUT(); - -# 1 - MISE EN DONNEES : -# LECTURE DU MAILLAGE MED - -MAIL=LIRE_MAILLAGE(UNITE=21, - FORMAT='MED',); -# -# DEFINITION DES ELEMENTS FINIS UTILISES - -MODELE=AFFE_MODELE(MAILLAGE=MAIL, - AFFE=_F(TOUT='OUI', - PHENOMENE='MECANIQUE', - MODELISATION='3D',),); -# -# DEFINITION DU MATERIAU UTILISE - -ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11, - NU=0.3, - RHO=7800.0,),); - -CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, - AFFE=_F(TOUT='OUI', - MATER=ACIER,),); - -# -# DEFINITION DES CONDITIONS AUX LIMITES - -BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE, - DDL_IMPO=_F(GROUP_MA='ABB1A1', - DX=0.0, - DY=0.0, - DZ=0.0,),); - -# 2 - CALCUL DES CINQ PREMIERS MODES PROPRES -# -# CALCUL DES MATRICES ASSEMBLEES K ET M - -MACRO_MATR_ASSE(MODELE=MODELE, - CHAM_MATER=CHMAT, - CHARGE=BLOQUAGE, - NUME_DDL=CO('NUMEDDL'), - MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'), - OPTION='RIGI_MECA',), - _F(MATRICE=CO('MASSE'), - OPTION='MASS_MECA',),),); -# - -MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE, - MATR_B=MASSE, - CALC_FREQ=_F( - OPTION='PLUS_PETITE', - NMAX_FREQ=5,),); -# -# ECRITURE DES MODES AU FORMAT MED - -IMPR_RESU(MODELE=MODELE, - FORMAT='MED', - RESU=_F(MAILLAGE=MAIL, - RESULTAT=MODES, - NOM_CHAM='DEPL',),); - -FIN(); -# diff --git a/Editeur/Patrons/elasticite.salome.comm b/Editeur/Patrons/elasticite.salome.comm deleted file mode 100644 index 454762be..00000000 --- a/Editeur/Patrons/elasticite.salome.comm +++ /dev/null @@ -1,55 +0,0 @@ -DEBUT(); - -MA=DEFI_MATERIAU(ELAS=_F(E=210000000000, - NU=0.3,),); - - - -MAIL=LIRE_MAILLAGE(UNITE=21, - FORMAT='MED', - INFO_MED=2,); - -MODE=AFFE_MODELE(MAILLAGE=MAIL, - AFFE=_F(TOUT='OUI', - PHENOMENE='MECANIQUE', - MODELISATION= '3D',),); - - - -MATE=AFFE_MATERIAU(MAILLAGE=MAIL, - AFFE=_F(TOUT='OUI', - MATER=MA,),); - -CHAR=AFFE_CHAR_MECA(MODELE=MODE, - FACE_IMPO=( - _F(GROUP_MA='ABB1A1', - DX=0, - DY=0, - DZ=0,),), - PRES_REP=( - _F(GROUP_MA='CDD1C1', - PRES=10000,),),); - -RESU=MECA_STATIQUE(MODELE=MODE, - CHAM_MATER=MATE, - EXCIT=_F(CHARGE=CHAR,),); - -RESU=CALC_ELEM(reuse =RESU, - MODELE=MODE, - CHAM_MATER=MATE, - RESULTAT=RESU, - OPTION=('SIGM_ELNO_DEPL','EQUI_ELNO_SIGM',), - EXCIT=_F( - CHARGE=CHAR,),); - -RESU=CALC_NO(reuse =RESU, - RESULTAT=RESU, - OPTION=('SIGM_NOEU_DEPL', 'EQUI_NOEU_SIGM', ),); - -IMPR_RESU(FORMAT='MED', - UNITE=80, - RESU=_F(MAILLAGE=MAIL, - RESULTAT=RESU, - NOM_CHAM=('SIGM_NOEU_DEPL','EQUI_NOEU_SIGM','DEPL',),),); - -FIN(); \ No newline at end of file diff --git a/Editeur/Patrons/limaillage.comm b/Editeur/Patrons/limaillage.comm deleted file mode 100644 index bb12c443..00000000 --- a/Editeur/Patrons/limaillage.comm +++ /dev/null @@ -1,11 +0,0 @@ - - -DEBUT(CODE=_F(NOM='VIDE', - NIV_PUB_WEB='INTERNET',),); -# - -MA=LIRE_MAILLAGE(); - - -FIN(); -# diff --git a/Editeur/Patrons/modes_3D.comm b/Editeur/Patrons/modes_3D.comm deleted file mode 100644 index aafe1f2a..00000000 --- a/Editeur/Patrons/modes_3D.comm +++ /dev/null @@ -1,57 +0,0 @@ - -# PATRON -# ANALYSE MODALE -# 3D - -DEBUT(); -# MISE EN DONNEES - -MAIL=LIRE_MAILLAGE(); - -MODELE=AFFE_MODELE(MAILLAGE=MAIL, - AFFE=_F(GROUP_MA='OBJET', - PHENOMENE='MECANIQUE', - MODELISATION='3D',),); -# MATERIAU - -ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11, - NU=0.3, - RHO=7800.0,),); - -CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, - AFFE=_F(GROUP_MA='OBJET', - MATER=ACIER,),); - -# CONDITIONS AUX LIMITES ET CHARGEMENT -# CONDITIONS AUX LIMITES - -BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE, - DDL_IMPO=_F(GROUP_MA='ENCAST', - LIAISON='ENCASTRE',),); -# CALCUL DES MATRICES ASSEMBLEES K ET M - -MACRO_MATR_ASSE(MODELE=MODELE, - CHAM_MATER=CHMAT, - CHARGE=BLOQUAGE, - NUME_DDL=CO('NUMEDDL'), - MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'), - OPTION='RIGI_MECA',), - _F(MATRICE=CO('MASSE'), - OPTION='MASS_MECA',),),); -# CALCUL DES CINQ PREMIERS MODES - -MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE, - MATR_B=MASSE, - CALC_FREQ=_F( - OPTION='PLUS_PETITE', - NMAX_FREQ=5,),); -# ECRITURE DES MODES AU FORMAT GMSH - -IMPR_RESU(MODELE=MODELE, - FORMAT='GMSH', - UNITE=19, - RESU=_F(MAILLAGE=MAIL, - RESULTAT=MODES, - NOM_CHAM='DEPL',),); - -FIN(); diff --git a/Editeur/Patrons/modes_pou.comm b/Editeur/Patrons/modes_pou.comm deleted file mode 100644 index fc72e239..00000000 --- a/Editeur/Patrons/modes_pou.comm +++ /dev/null @@ -1,63 +0,0 @@ - -# PATRON -# ANALYSE MODALE -# POUTRE - -DEBUT(); -# MISE EN DONNEES - -MAIL=LIRE_MAILLAGE(); - -MODELE=AFFE_MODELE(MAILLAGE=MAIL, - AFFE=_F(GROUP_MA='OBJET', - PHENOMENE='MECANIQUE', - MODELISATION='3D',),); -# MATERIAU - -ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11, - NU=0.3, - RHO=7800.0,),); - -CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, - AFFE=_F(GROUP_MA='OBJET', - MATER=ACIER,),); - -CARELEM=AFFE_CARA_ELEM(MODELE=MODELE, - POUTRE=_F(GROUP_MA='OBJET', - SECTION='CERCLE', - CARA=('R','EP',), - VALE=(1.0,0.01,),),); -# CONDITIONS AUX LIMITES - -BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE, - DDL_IMPO=_F(GROUP_MA='ENCAST', - LIAISON='ENCASTRE',),); -#MATRICES ASSEMBLEES K, M -# - -MACRO_MATR_ASSE(MODELE=MODELE, - CHAM_MATER=CHMAT, - CARA_ELEM=CARELEM, - CHARGE=BLOQUAGE, - NUME_DDL=CO('NUMEDDL'), - MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'), - OPTION='RIGI_MECA',), - _F(MATRICE=CO('MASSE'), - OPTION='MASS_MECA',),),); -#5 PREMIERS MODES - -MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE, - MATR_B=MASSE, - CALC_FREQ=_F( - OPTION='PLUS_PETITE', - NMAX_FREQ=5,),); -# MODES AU FORMAT GMSH - -IMPR_RESU(MODELE=MODELE, - FORMAT='GMSH', - UNITE=19, - RESU=_F(MAILLAGE=MAIL, - RESULTAT=MODES, - NOM_CHAM='DEPL',),); - -FIN(); diff --git a/Editeur/Patrons/statlin_3D.comm b/Editeur/Patrons/statlin_3D.comm deleted file mode 100644 index 39f7057f..00000000 --- a/Editeur/Patrons/statlin_3D.comm +++ /dev/null @@ -1,57 +0,0 @@ - -# PATRON -# ANALYSE STATIQUE -# 3D - -DEBUT(); -# MISE EN DONNEES - -MAIL=LIRE_MAILLAGE(); - -MAIL=DEFI_GROUP(reuse =MAIL, - MAILLAGE=MAIL, - CREA_GROUP_MA=_F(NOM='TOUT', - TOUT='OUI',),); - -MODMECA=AFFE_MODELE(MAILLAGE=MAIL, - AFFE=_F(GROUP_MA='TOUT', - PHENOMENE='MECANIQUE', - MODELISATION='3D',),); - -ACIER=DEFI_MATERIAU(ELAS=_F(E=2.E11, - NU=0.3,),); - -CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, - AFFE=_F(TOUT='OUI', - MATER=ACIER,),); -# CONDITIONS AUX LIMITES ET CHARGEMENT -#POINT A : ENCASTREMENT - -BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODMECA, - DDL_IMPO=_F(GROUP_MA='ENCAST', - LIAISON='ENCASTRE',),); -#POINT B : FORCE IMPOSEE - -CHARGT=AFFE_CHAR_MECA(MODELE=MODMECA, - FORCE_NODALE=_F(GROUP_NO='PB', - FY=1000.0,),); -# RESOLUTION DU PROBLEME ELASTIQUE - -RESU1=MECA_STATIQUE(MODELE=MODMECA, - CHAM_MATER=CHMAT, - EXCIT=(_F(CHARGE=BLOQUAGE,), - _F(CHARGE=CHARGT,),),); -# CALCUL DES EFFORTS - -RESU1=CALC_ELEM(reuse =RESU1, - RESULTAT=RESU1, - OPTION='EFGE_ELNO_DEPL',); -# RESULTATS FORMAT GMSH - -IMPR_RESU(MODELE=MODMECA, - FORMAT='GMSH', - RESU=_F(MAILLAGE=MAIL, - RESULTAT=RESU1, - NOM_CHAM=('DEPL','EFGE_ELNO_DEPL',),),); - -FIN(); diff --git a/Editeur/Patrons/statlin_pou.comm b/Editeur/Patrons/statlin_pou.comm deleted file mode 100644 index 0dd06eb4..00000000 --- a/Editeur/Patrons/statlin_pou.comm +++ /dev/null @@ -1,70 +0,0 @@ - -# PATRON -# ANALYSE STATIQUE -# POUTRE - -DEBUT(); -# MISE EN DONNEES - -MAIL=LIRE_MAILLAGE(); - -MAIL=DEFI_GROUP(reuse =MAIL, - MAILLAGE=MAIL, - CREA_GROUP_MA=_F(NOM='TOUT', - TOUT='OUI',),); - -MODMECA=AFFE_MODELE(MAILLAGE=MAIL, - AFFE=_F(GROUP_MA='TOUT', - PHENOMENE='MECANIQUE', - MODELISATION='POU_D_T',),); - -ACIER=DEFI_MATERIAU(ELAS=_F(E=2.E10, - NU=0.3,),); - -CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, - AFFE=_F(TOUT='OUI', - MATER=ACIER,),); -R1 = 1.0; - -EP1 = 0.001; - - -CARA_POU=AFFE_CARA_ELEM(MODELE=MODMECA, - POUTRE=_F(GROUP_MA='TOUT', - SECTION='CERCLE', - CARA=('R','EP',), - VALE=(R1,EP1,),),); - -# CONDITIONS AUX LIMITES ET CHARGEMENT - -#POINT A : ENCASTREMENT - -BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODMECA, - DDL_IMPO=_F(GROUP_NO='PA', - LIAISON='ENCASTRE',),); -#POINT B : FORCE IMPOSEE - -CHARGT=AFFE_CHAR_MECA(MODELE=MODMECA, - FORCE_NODALE=_F(GROUP_NO='PB', - FY=1000.0,),); -# RESOLUTION DU PROBLEME ELASTIQUE - -RESU1=MECA_STATIQUE(MODELE=MODMECA, - CHAM_MATER=CHMAT, - CARA_ELEM=CARA_POU, - EXCIT=(_F(CHARGE=BLOQUAGE,), - _F(CHARGE=CHARGT,),),); -# CALCUL DES EFFORTS - -RESU1=CALC_ELEM(reuse =RESU1, - RESULTAT=RESU1, - OPTION='EFGE_ELNO_DEPL',); -# RESULTATS FORMAT GMSH - -IMPR_RESU(MODELE=MODMECA, - FORMAT='GMSH', - RESU=_F(MAILLAGE=MAIL, - RESULTAT=RESU1, - NOM_CHAM=('DEPL','EFGE_ELNO_DEPL',),),); - -FIN(); diff --git a/Editeur/Patrons/thermique.salome.comm b/Editeur/Patrons/thermique.salome.comm deleted file mode 100644 index 61c6fa16..00000000 --- a/Editeur/Patrons/thermique.salome.comm +++ /dev/null @@ -1,34 +0,0 @@ - - -DEBUT(); - -MESH=LIRE_MAILLAGE(UNITE=21, - FORMAT='MED',); - -MATER=DEFI_MATERIAU(THER=_F(LAMBDA=1.2,),); - -MODEL=AFFE_MODELE(MAILLAGE=MESH, - AFFE=_F(TOUT='OUI', - PHENOMENE='THERMIQUE', - MODELISATION='3D',),); - -MATFIELD=AFFE_MATERIAU(MAILLAGE=MESH, - AFFE=_F(TOUT='OUI', - MATER=MATER,),); - -LOADING=AFFE_CHAR_THER(MODELE=MODEL, - TEMP_IMPO=_F(GROUP_MA='Bloq', - TEMP=23.,), - FLUX_REP=_F(GROUP_MA='Press', - FLUN=2.,), - SOURCE=_F(GROUP_MA='Source', - SOUR=2.,),); - -TEMP=THER_LINEAIRE(MODELE=MODEL, - CHAM_MATER=MATFIELD, - EXCIT=_F(CHARGE=LOADING,),); - -IMPR_RESU(FORMAT='MED', - RESU=_F(RESULTAT=TEMP,),); - -FIN(); diff --git a/Editeur/Patrons/tradir_3D.comm b/Editeur/Patrons/tradir_3D.comm deleted file mode 100644 index 41d17e57..00000000 --- a/Editeur/Patrons/tradir_3D.comm +++ /dev/null @@ -1,72 +0,0 @@ - -# PATRON -# ANALYSE MODALE -# 3D - -DEBUT(); -# MISE EN DONNEES - -MAIL=LIRE_MAILLAGE(); - -MODELE=AFFE_MODELE(MAILLAGE=MAIL, - AFFE=_F(GROUP_MA='OBJET', - PHENOMENE='MECANIQUE', - MODELISATION='3D',),); -# MATERIAU - -ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11, - NU=0.3, - RHO=7800.0,),); - -CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, - AFFE=_F(GROUP_MA='OBJET', - MATER=ACIER,),); -# CONDITIONS AUX LIMITES ET CHARGEMENT -# CONDITIONS AUX LIMITES - -BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE, - DDL_IMPO=_F(GROUP_MA='ENCAST', - LIAISON='ENCASTRE',),); -# CALCUL DES MATRICES ASSEMBLEES K ET M - -MACRO_MATR_ASSE(MODELE=MODELE, - CHAM_MATER=CHMAT, - CHARGE=BLOQUAGE, - NUME_DDL=CO('NUMEDDL'), - MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'), - OPTION='RIGI_MECA',), - _F(MATRICE=CO('MASSE'), - OPTION='MASS_MECA',),),); -# CALCUL DES CINQ PREMIERS MODES - -MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE, - MATR_B=MASSE, - CALC_FREQ=_F( - OPTION='PLUS_PETITE', - NMAX_FREQ=5,),); -#CHARGEMENT - -EXCIT=AFFE_CHAR_MECA(MODELE=MODELE, - PRES_REP=_F(GROUP_MA='PRESSE', - PRES=100.e5,),); - -EXCEL=CALC_VECT_ELEM(OPTION='CHAR_MECA', - CHARGE=EXCIT,); - -EXCASS=ASSE_VECTEUR(VECT_ELEM=EXCEL, - NUME_DDL=NUMEDDL,); -OMEGA = 10.0; - - -SINU = FORMULE(VALE='sin(OMEGA*INST)', - NOM_PARA='INST',); -#CALCUL TRANSITOIRE - -TRADIR=DYNA_LINE_TRAN(MATR_MASS=MASSE, - MATR_RIGI=RIGIDITE, - NEWMARK=_F(), - EXCIT=_F(VECT_ASSE=EXCASS,), - INCREMENT=_F(PAS=.01, - INST_FIN=10.,),); - -FIN(); diff --git a/Editeur/Patrons/tramod_3D.comm b/Editeur/Patrons/tramod_3D.comm deleted file mode 100644 index 9a68bc5d..00000000 --- a/Editeur/Patrons/tramod_3D.comm +++ /dev/null @@ -1,86 +0,0 @@ - -# PATRON -# ANALYSE MODALE -# 3D - -DEBUT(); -# MISE EN DONNEES - -MAIL=LIRE_MAILLAGE(); - -MODELE=AFFE_MODELE(MAILLAGE=MAIL, - AFFE=_F(GROUP_MA='OBJET', - PHENOMENE='MECANIQUE', - MODELISATION='3D',),); -# MATERIAU - -ACIER=DEFI_MATERIAU(ELAS=_F(E=2.1E11, - NU=0.3, - RHO=7800.0,),); - -CHMAT=AFFE_MATERIAU(MAILLAGE=MAIL, - AFFE=_F(GROUP_MA='OBJET', - MATER=ACIER,),); -# CONDITIONS AUX LIMITES ET CHARGEMENT -# CONDITIONS AUX LIMITES - -BLOQUAGE=AFFE_CHAR_MECA(MODELE=MODELE, - DDL_IMPO=_F(GROUP_MA='ENCAST', - LIAISON='ENCASTRE',),); -# CALCUL DES MATRICES ASSEMBLEES K ET M - -MACRO_MATR_ASSE(MODELE=MODELE, - CHAM_MATER=CHMAT, - CHARGE=BLOQUAGE, - NUME_DDL=CO('NUMEDDL'), - MATR_ASSE=(_F(MATRICE=CO('RIGIDITE'), - OPTION='RIGI_MECA',), - _F(MATRICE=CO('MASSE'), - OPTION='MASS_MECA',),),); - -P=POST_ELEM(MASS_INER=_F(TOUT='OUI', - GROUP_MA='M',),); -# CALCUL DES CINQ PREMIERS MODES - -MODES=MODE_ITER_SIMULT(MATR_A=RIGIDITE, - MATR_B=MASSE, - CALC_FREQ=_F( - OPTION='PLUS_PETITE', - NMAX_FREQ=5,),); -#CHARGEMENT - -EXCIT=AFFE_CHAR_MECA(MODELE=MODELE, - PRES_REP=_F(GROUP_MA='PRESSE', - PRES=100.e5,),); - -EXCEL=CALC_VECT_ELEM(OPTION='CHAR_MECA', - CHARGE=EXCIT,); - -EXCASS=ASSE_VECTEUR(VECT_ELEM=EXCEL, - NUME_DDL=NUMEDDL,); -OMEGA = 10.0; - - -SINU = FORMULE(VALE='sin(OMEGA*INST)', - NOM_PARA='INST',); -#PROJECTION - -MACRO_PROJ_BASE(BASE=MODES, - MATR_ASSE_GENE=(_F(MATRICE=CO('MASSPROJ'), - MATR_ASSE=MASSE,), - _F(MATRICE=CO('RIGIPROJ'), - MATR_ASSE=RIGIDITE,),), - VECT_ASSE_GENE=_F(VECTEUR=CO('EXCPROJ'), - VECT_ASSE=EXCASS,),); -#CALCUL TRANSITOIRE - -TRAMOD=DYNA_TRAN_MODAL(MASS_GENE=MASSPROJ, - RIGI_GENE=RIGIPROJ, - AMOR_REDUIT=(.02,.01,), - INCREMENT=_F(INST_INIT=0.0, - INST_FIN=10.0, - PAS=.001,), - EXCIT=_F(VECT_GENE=EXCPROJ, - FONC_MULT=SINU,),); - -FIN(); diff --git a/Editeur/TroisDPal.py b/Editeur/TroisDPal.py index c0cc0d07..7fa4ee85 100644 --- a/Editeur/TroisDPal.py +++ b/Editeur/TroisDPal.py @@ -26,10 +26,9 @@ import generator class TroisDPilote: - def __init__(self,node,appli,parent): + def __init__(self,node,appli): self.node=node self.appli=appli - self.parent=parent def envoievisu(self): """ diff --git a/Editeur/__init__.py b/Editeur/__init__.py index 28da2d3d..1260b69a 100644 --- a/Editeur/__init__.py +++ b/Editeur/__init__.py @@ -18,3 +18,7 @@ # # # ====================================================================== +""" + Ce package contient les fonctionnalités COMMUNES nécessaires + aux deux éditeurs graphiques QT et TK +""" diff --git a/Editeur/analyse_catalogue.py b/Editeur/analyse_catalogue.py index c0947560..70d449bb 100644 --- a/Editeur/analyse_catalogue.py +++ b/Editeur/analyse_catalogue.py @@ -24,7 +24,7 @@ import re,string,cPickle,os from Noyau.N_CR import CR # -__Id__="$Id: analyse_catalogue.py,v 1.5.12.1 2007-04-26 07:56:07 cchris Exp $" +__Id__="$Id: analyse_catalogue.py,v 1.6.6.1.4.1 2008-10-10 13:22:15 pnoyret Exp $" __version__="$Name: $" # l_noms_commandes = ['OPER','PROC','MACRO','FORM'] diff --git a/Editeur/appli.py b/Editeur/appli.py deleted file mode 100644 index 140d4493..00000000 --- a/Editeur/appli.py +++ /dev/null @@ -1,447 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module contient la classe APPLI qui est la classe mère de - l'application EFICAS. Elle prend en charge l'organisation générale - des composants graphiques et l'initialisation Tk - L'aspect applicatif doit etre pris en charge par la classe dérivée -""" -# Modules Python -import os -import string -import sys -import types -import Pmw -import Tkinter -from widgets import showerror - -# Modules Eficas -import splash -import prefs -import styles -from styles import style -import fontes -import tooltip -import properties -import convert,generator -import comploader -from utils import extension_fichier,stripPath - -from widgets import Fenetre -from Misc import MakeNomComplet -import session -import listeFichiers -import listePatrons - -VERSION="EFICAS v1.12" - -class APPLI: - def __init__ (self,master,code=prefs.code,fichier=None,test=0) : - self.code=code - self.top=master - self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS) - - #dimensionnement de la fenetre principale - #aspect ratio de l'ecran - aspect=float(self.top.winfo_screenwidth())/float(self.top.winfo_screenheight()) - #resolution (pixels par point). On utilise le fait qu'on a "normalement" 72 points par inch - resolution= self.top.winfo_screenwidth()/(self.top.winfo_screenmmwidth()/25.4*72) - DDY=max(20,resolution*(fontes.standard[1]+4)) #largeur d'un caractere fonte standard en pixel - x=int(45*DDY) #largeur d'ouverture de 45 caracteres de fonte standard - y=int(25*DDY) #hauteur d'ouverture de 25 caracteres de fonte standard - minx=x*8/10 #largeur min (80 pour cent de largeur) - miny=y*8/10 #hauteur min (80 pour cent de hauteur) - self.top.minsize(minx,miny) - self.top.geometry('%dx%d' % (x,y)) - - self.top.title(VERSION + ' pour '+self.code) - self.titre=VERSION + ' pour '+self.code - self.top.withdraw() - self.initializeTk(master) - Pmw.initialise(master) - - self.dict_reels={} - self.liste_simp_reel=[] - # L'attribut test permet d'activer les panneaux de splash et d'erreur (test=0) - # Si test est different de 0, les panneaux ne sont pas activés - self.test=test - - # Lecture des parametres de configuration (fichier global editeur.ini - # et utilisateur eficas.ini) - self.lecture_parametres() - - self.format_fichier = Tkinter.StringVar() - self.message='' - # Avant la creation du bureau qui lit le catalogue - self.version_code=session.d_env.cata - - # Creation de la menubar, toolbar, messagebar - self.cree_composants_graphiques() - # Creation des autres composants graphiques dont le bureau (parametrable par prefs.py) - self.load_appli_composants() - self.listeFichiers=listeFichiers.listeFichiers(self) - self.listePatrons=listePatrons.listePatrons(self) - self.dir=None - - # Fermer le splash et deiconifier la fenetre principale si on n'est pas en test - if (self.test == 0): - splash.fini_splash() - #self.affiche_FAQ() - - # Ouverture des fichiers de commandes donnes sur la ligne de commande - cwd=os.getcwd() - self.dir=cwd - for study in session.d_env.studies: - os.chdir(cwd) - d=session.get_unit(study,self) - self.bureau.openJDC(file=study["comm"],units=d) - - - def send_message(self,message): - self.message=message - - def exitEFICAS(self): - self.quit() - - def quit(self): - self.top.quit() - - def lecture_parametres(self): - """ - Active la lecture des paramètres standards et utilisateur - """ - if (self.test == 0): - splash._splash.configure(text = "Chargement des paramètres utilisateur") - import configuration - self.CONFIGURATION = configuration.make_config(self,prefs.REPINI) - self.CONFIGStyle = configuration.make_config_style(self,prefs.REPINI) - - def cree_composants_graphiques(self): - """ - Cree les constituants graphiques fixes de l'application : - - menubar - - toolbar - - statusbar - """ - if (self.test == 0): - splash._splash.configure(text = "Chargement de l'IHM") - splash._splash.configure(text = "Chargement de la menubar") - import menubar - self.menubar=menubar.MENUBAR(self,self.top) - if (self.test == 0): - splash._splash.configure(text = "Chargement de la toolbar") - import toolbar - self.toolbar=toolbar.TOOLBAR(self,self.top) - if (self.test == 0): - splash._splash.configure(text = "Chargement de la statusbar") - import statusbar - self.statusbar=statusbar.STATUSBAR(self.top,styles.style.statusfont) - - def load_appli_composants(self): - """ - Cree les autres constituants graphiques de l'application : - - bureau - - readercata - - ... - Cette creation est parametrable par fichier prefs.py - """ - if (self.test == 0): - splash._splash.configure(text = "Chargement des appli_composants") - for mname in self.appli_composants: - self.load_appli_composant(mname) - - def load_appli_composant(self,mname): - module=__import__(mname,globals(),locals()) - factory=getattr(module,mname.upper()) - appli_composant=factory(self,self.top) - setattr(self,mname,appli_composant) - self.fill_menus(appli_composant,appli_composant.menu_defs) - self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant) - - def affiche_FAQ(self): - import faq - faq.affiche(self.top) - - def affiche_infos(self,message): - self.statusbar.affiche_infos(message) - return - - def initializeTk(self, root): - """ - Initialize platform specific options - """ - if sys.platform == 'mac': - self.initializeTk_mac(root) - elif sys.platform == 'win32': - self.initializeTk_win32(root) - else: - self.initializeTk_unix(root) - - def initializeTk_win32(self, root): - root.option_add('*Font', fontes.standard) - root.option_add('*EntryField.Entry.Font', fontes.standard) - root.option_add('*Listbox*Font',fontes.standard) - - def initializeTk_colors_common(self, root): - root.option_add('*background', style.background) - root.option_add('*foreground', style.foreground) - root.option_add('*EntryField.Entry.background', style.entry_background) - root.option_add('*Entry*background', style.entry_background) - root.option_add('*Listbox*background', style.list_background) - root.option_add('*Listbox*selectBackground', style.list_select_background) - root.option_add('*Listbox*selectForeground', style.list_select_foreground) - - def initializeTk_mac(self, root): - self.initializeTk_colors_common(root) - - def initializeTk_unix(self, root): - root.option_add('*Font', fontes.standard) - root.option_add('*EntryField.Entry.Font',fontes.standard ) - root.option_add('*Listbox*Font', fontes.standard) - self.initializeTk_colors_common(root) - - def get_texte_infos(self): - """ - Retourne un texte d'informations sur la session courante d'EFICAS - """ - texte = VERSION + '\n\n' - texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n' - texte = texte + 'Equipe : SINETICS\n\n' - texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version) - return texte - - def efface_aide(self,event): - """ - Efface la bulle d'aide d'un panneau - """ - try: - self.aide.destroy() - except: - pass - return - - def affiche_aide(self,event,aide): - """ - Affiche l'aide concernant un panneau - """ - x=event.x - y=event.y - widget=event.widget - self.aide=tooltip.TOOLTIP(widget) - self.aide.xoffset = 10 - self.aide.yoffset = - widget.winfo_height()/2 - self.aide.setText(aide) - self.aide._showTip() - return - - def cree_menu(self,menu,itemlist,appli_composant): - """ - Ajoute les items du tuple itemlist - dans le menu menu - """ - number_item=0 - radio=None - for item in itemlist: - number_item=number_item + 1 - raccourci_label="" - if not item : - #menu.add_separator() - pass - else: - if len(item)==3: - raccourci=item[2] - raccourci_label=" "+raccourci - newitem=(item[0],item[1]) - else : - if len(item)==4: - raccourci=item[2] - raccourci_label=" "+item[3] - newitem=(item[0],item[1]) - else : - raccourci="" - newitem=item - item=newitem - label,method=item - if type(method) == types.TupleType: - # On a un tuple => on cree une cascade - menu_cascade=Tkinter.Menu(menu) - menu.add_cascade(label=label,menu=menu_cascade) - self.cree_menu(menu_cascade,method,appli_composant) - elif method[0] == '&': - # On a une chaine avec & en tete => on cree un radiobouton - command=getattr(appli_composant,method[1:]) - menu.add_radiobutton(label=label,command=command) - if radio == None:radio=number_item - else: - command=getattr(appli_composant,method) - menu.add_command(label=label,accelerator=raccourci_label,command=command) - if raccourci != "" : - self.top.bind(raccourci,command) - # Si au moins un radiobouton existe on invoke le premier - if radio:menu.invoke(radio) - - def fill_menus(self,appli_composant,defs): - menudict=self.menubar.menudict - for mname,itemlist in defs: - menu=menudict.get(mname) - if not menu:continue - self.cree_menu(menu,itemlist,appli_composant) - - def update_jdc_courant(self): - self.bureau.update_jdc_courant() - - def affiche_alerte(self,titre,message): - f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message) - f.wait() - - -class valeur: - def __init__(self,v=None): - self.v=v - def set(self,v): - self.v=v - def get(self): - return self.v - -class STANDALONE(APPLI): - def __init__ (self,code=prefs.code,fichier=None,version='v8.2') : - self.code=code - self.top=None - self.format_fichier=valeur() - - self.dict_reels={} - self.liste_simp_reel=[] - # L'attribut test doit valoir 1 si on ne veut pas creer les fenetres - self.test=1 - self.titre="STANDALONE POUR TEST" - - # Lecture des parametres de configuration (fichier global editeur.ini - # et utilisateur eficas.ini) - self.lecture_parametres() - - self.message='' - # Avant la creation du bureau qui lit le catalogue - self.version_code=version - import readercata - self.readercata=readercata.READERCATA(self,None) - - self.dir=None - - def affiche_infos(self,message): - return - - def get_text_JDC(self,JDC,format): - if generator.plugins.has_key(format): - # Le generateur existe on l'utilise - g=generator.plugins[format]() - jdc_formate=g.gener(JDC,format='beautifie') - return jdc_formate - else: - # Il n'existe pas c'est une erreur - return - - def newJDC(self): - CONTEXT.unset_current_step() - J=self.readercata.cata[0].JdC(procedure="", - appli=self, - cata=self.readercata.cata, - cata_ord_dico=self.readercata.cata_ordonne_dico, - rep_mat=self.CONFIGURATION.rep_mat, - ) - J.analyse() - return J - - def openJDC(self,file): - self.fileName = file - e=extension_fichier(file) - self.JDCName=stripPath(file) - self.initialdir = os.path.dirname(os.path.abspath(file)) - format=self.format_fichier.get() - # Il faut convertir le contenu du fichier en fonction du format - if convert.plugins.has_key(format): - # Le convertisseur existe on l'utilise - p=convert.plugins[format]() - p.readfile(file) - text=p.convert('exec',self) - if not p.cr.estvide(): - raise ValueError(str(p.cr)) - - # On se met dans le repertoire ou se trouve le fichier de commandes - # pour trouver les eventuels fichiers include ou autres - # localises a cote du fichier de commandes - os.chdir(self.initialdir) - CONTEXT.unset_current_step() - J=self.readercata.cata[0].JdC(procedure=text, - appli=self, - cata=self.readercata.cata, - cata_ord_dico=self.readercata.cata_ordonne_dico, - nom=self.JDCName, - rep_mat=self.CONFIGURATION.rep_mat, - ) - J.analyse() - txt= J.cr.get_mess_exception() - if txt:raise ValueError(txt) - return J - - def openTXT(self,text): - self.JDCName="TEXT" - CONTEXT.unset_current_step() - J=self.readercata.cata[0].JdC(procedure=text, - appli=self, - cata=self.readercata.cata, - cata_ord_dico=self.readercata.cata_ordonne_dico, - nom=self.JDCName, - rep_mat=self.CONFIGURATION.rep_mat, - ) - J.analyse() - txt= J.cr.get_mess_exception() - if txt:raise ValueError(txt) - return J - - def create_item(self,obj): - return comploader.make_objecttreeitem(self,getattr(obj,"nom","item"),obj) - - def get_file(self,unite=None,fic_origine = ''): - """ - Retourne le nom du fichier correspondant a l unite logique unite (entier) - ou d'un fichier poursuite - """ - f,ext=os.path.splitext(fic_origine) - if unite : - #include - finclude=f+".%d" % unite - else: - #poursuite - n=ext[-1] - if n == '0': - ext=".comm" - else: - ext=".com%d" % (string.atoi(n)-1) - if ext == '.com0' and not os.path.isfile(f+".com0"): - ext=".comm" - finclude=f+ext - ff=open(finclude) - text=ff.read() - ff.close() - return finclude,text - - def affiche_alerte(self,titre,message): - print titre+ "\n\n" + message diff --git a/Editeur/basestyle.py b/Editeur/basestyle.py deleted file mode 100644 index e4287b75..00000000 --- a/Editeur/basestyle.py +++ /dev/null @@ -1,27 +0,0 @@ -class STYLE: - background='gray90' - foreground='black' - entry_background='white' - list_background='white' - list_select_background='#00008b' - list_select_foreground='grey' - tooltip_background="yellow" - - standard = ("Helvetica",12) - standard_italique = ("Helvetica",12,'italic') - standard_gras = ("Helvetica",12,'bold') - standard_gras_souligne = ("Helvetica",12,'bold','underline') - - canvas = ('Helvetica',10) - canvas_italique = ('Helvetica',10,'italic') - canvas_gras = ("Helvetica",10,'bold') - canvas_gras_italique = ("Helvetica",12,'bold','italic') - - standard12 = ("Helvetica",14) - standard12_gras = ("Helvetica",14,'bold') - standard12_gras_italique = ( "Helvetica",14,'bold','italic') - - standardcourier10 = ("Courier",14) - statusfont = ("Helvetica",16) - -style=STYLE() diff --git a/Editeur/browser.py b/Editeur/browser.py deleted file mode 100644 index 51c4e3a4..00000000 --- a/Editeur/browser.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" -""" -# Modules Python -import os,string - -# Modules Eficas -import Interp -import catabrowser -import cataediteur - -class BROWSER: - - menu_defs=[ - ('Browsers',[ - ('Browser catalogue','browser_catalogue'), - ('Editeur catalogue','edite_catalogue'), - ('Shell','shell'), - ] - ) - ] - - button_defs=[] - - def __init__(self,appli,parent): - self.appli=appli - self.parent=parent - self.cataitem = catabrowser.CATAItem(self,"Catalogue "+self.appli.readercata.code, - self.appli.readercata.cata, - objet_cata_ordonne = self.appli.readercata.cata_ordonne_dico) - - def shell(self,event=None): - if not hasattr(self.appli.bureau.JDCDisplay_courant,'jdc'):return - d={'j':self.appli.bureau.JDCDisplay_courant.jdc} - Interp.InterpWindow(d,parent=self.parent) - - def browser_catalogue(self,event=None): - catabrowser.CataBrowser(parent=self.parent,appli=self.appli, - cata = self.appli.readercata.cata, - item = self.cataitem) - - def edite_catalogue(self,event=None): - cataediteur.CataEditeur(parent=self.parent,appli=self.appli,cata=self.appli.readercata.cata) - - - diff --git a/Editeur/bureau.py b/Editeur/bureau.py deleted file mode 100644 index b1a408d5..00000000 --- a/Editeur/bureau.py +++ /dev/null @@ -1,768 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module contient la classe BUREAU qui gere les JDC ouverts -""" -# Modules Python -import os,string,sys -import traceback -import Pmw -from widgets import askopenfilename,asksaveasfilename -from widgets import showinfo,askyesno,showerror - -# Modules Eficas -import splash -import prefs -import convert -import generator -import AIDE -import os -from jdcdisplay import JDCDISPLAY -from utils import extension_fichier,stripPath,save_in_file -from widgets import Fenetre,Ask_Format_Fichier,FenetreSurLigneWarning -from fenetre_mc_inconnus import fenetre_mc_inconnus -from Ihm import CONNECTOR -from Traducteur import traduitV7V8 - -import comploader - -class BUREAU: - menu_defs=[ - ('Fichier',[ - ('Nouveau','newJDC',''), - ('Ouvrir','openJDC',''), - ('Enregistrer','saveJDC',''), - ('Enregistrer sous','saveasJDC',''), - None, - ('Fermer','closeJDC',''), - ('Quitter','exitEFICAS',''), - ] - ), - ('Edition',[ - ('Copier','copy',''), - ('Couper','cut',''), - ('Coller','paste',''), - ] - ), - ('Jeu de commandes',[ - ('Rapport de validation','visuCRJDC',''), - ('Fichier à plat','visu_a_plat',''), - ('Fichier .py','visuJDC_py'), - ('Fichier source','visu_txt_brut_JDC',''), - ('Paramètres Eficas','affichage_fichier_ini'), - ('Mots-clés inconnus','mc_inconnus'), - ] - ), - ('Traduction',[ - ('Traduction v7 en v8','TraduitFichier','','Ctrl+T') - ] - ), - ('Aide',[ - ('Aide EFICAS','aideEFICAS'), - ] - ), - ] - - button_defs = (('New24',"newJDC","Création d'un nouveau fichier",'always'), - ('Open24',"openJDC","Ouverture d'un fichier existant",'always'), - ('Save24',"saveJDC","Sauvegarde du fichier courant",'always'), - ('Fermer24',"closeJDC","Fermeture du fichier courant",'always'), - ('Zoom24',"visuJDC","Visualisation du fichier de commandes",'always'), - None, - ('Copy24',"copy","Copie l'objet courant",'jdc'), - ('Cut24',"cut","Coupe l'objet courant",'jdc'), - ('Paste24',"paste","Colle l'objet copié après l'objet courant",'jdc'), - None, - ('Delete24',"delete","Supprime l'objet courant",'jdc'), - ('Help24',"view_doc","Documentation de l'objet courant",'jdc') - ) - try: - menu_defs=prefs.menu_defs['bureau'] - except: - pass - try: - button_defs=prefs.button_defs['bureau'] - except: - pass - - def __init__(self,appli,parent): - self.parent=parent - self.appli=appli - if self.appli.test == 0 : - splash._splash.configure(text = "Création du bureau") - self.nb = Pmw.NoteBook(self.parent,raisecommand=self.selectJDC) - self.nb.pack(fill='both',expand=1) - self.JDCDisplay_courant=None - self.fileName=None - self.liste_JDCDisplay=[] - comploader.charger_composants() - self.cree_cataitem() - self.text_reel="" - self.initialdir = self.appli.CONFIGURATION.initialdir - - def cree_cataitem(self): - """ - On récupère dans l'appli_composant readercata les variables - qui servent par la suite pour la création des JDC - """ - self.cataitem=self.appli.readercata.cataitem - self.cata=self.appli.readercata.cata - self.cata_ordonne_dico=self.appli.readercata.cata_ordonne_dico - self.code=self.appli.readercata.code - self.version_code=self.appli.readercata.version_code - self.fic_cata=self.appli.readercata.fic_cata - - def selectJDC(self,event=None): - """ - Cette méthode est appelée chaque fois que l'on sélectionne - l'onglet d'un JDC dans le NoteBook des JDC. - Elle permet de stocker dans les variable self.JDC et - self.JDCDisplay_courant les valeurs concernant le JDC courant - """ - if len(self.liste_JDCDisplay) == 0 : return - #if self.JDCDisplay_courant : self.JDCDisplay_courant.jdc.unset_context() - numero_jdc = self.nb.index(self.nb.getcurselection()) - self.JDCDisplay_courant.unselect() - self.JDCDisplay_courant = self.liste_JDCDisplay[numero_jdc] - self.JDC = self.JDCDisplay_courant.jdc - self.JDCName = self.JDC.nom - self.JDCDisplay_courant.select() - #print "selectJDC",numero_jdc,self.JDCDisplay_courant,self.JDCName - - - def newJDC_include(self,event=None): - """ - Initialise un nouveau JDC include vierge - """ - import Extensions.jdc_include - JdC_aux=Extensions.jdc_include.JdC_include - - self.appli.statusbar.reset_affichage_infos() - - CONTEXT.unset_current_step() - jaux=self.cata[0].JdC(procedure="",appli=self.appli, - cata=self.cata,cata_ord_dico=self.cata_ordonne_dico, - rep_mat=self.appli.CONFIGURATION.rep_mat, - ) - jaux.analyse() - - J=JdC_aux(procedure="",appli=self.appli, - cata=self.cata,cata_ord_dico=self.cata_ordonne_dico, - jdc_pere=jaux, - rep_mat=self.appli.CONFIGURATION.rep_mat, - ) - J.analyse() - self.JDCName=J.nom - self.fileName=None - self.ShowJDC(J,self.JDCName) - self.appli.toolbar.active_boutons() - return J - - def newJDC(self,event=None): - """ - Initialise un nouveau JDC vierge - """ - self.appli.statusbar.reset_affichage_infos() - - CONTEXT.unset_current_step() - J=self.cata[0].JdC(procedure="",appli=self.appli, - cata=self.cata,cata_ord_dico=self.cata_ordonne_dico, - rep_mat=self.appli.CONFIGURATION.rep_mat, - ) - J.analyse() - self.JDCName=J.nom - self.fileName=None - self.ShowJDC(J,self.JDCName) - self.appli.toolbar.active_boutons() - return J - - def ShowJDC(self,JDC,nom,label_onglet=None,JDCDISPLAY=JDCDISPLAY,enregistre="non"): - """ - Lance l'affichage du JDC cad création du JDCDisplay - Rajoute le JDCDisplay à la liste des JDCDisplay si label_onglet == None cad si on crée - bien un nouveau JDCDisplay et non si on remplace (renommage de l'onglet) - """ - self.JDC=JDC - self.JDCName = self.JDC.nom = nom - if label_onglet == None : - # On veut un nouvel onglet - label_onglet = self.GetLabelJDC() - self.nb.add(label_onglet,tab_text = nom,tab_width=20) - new = 'oui' - else : - new = 'non' - self.JDCDisplay_courant=JDCDISPLAY(self.JDC,nom,appli=self.appli,parent=self.nb.page(label_onglet)) - if new == 'oui': - self.liste_JDCDisplay.append(self.JDCDisplay_courant) - self.JDCDisplay_courant.modified='n' - if enregistre != "non" : - self.JDCDisplay_courant.fichier=self.fileName - else : - self.initialdir = self.appli.CONFIGURATION.rep_user - self.nb.selectpage(label_onglet) - self.nb.setnaturalsize() - self.nb.bind_all("",lambda e,s=self:s.selectArbreDown()) - self.nb.bind_all("",lambda e,s=self:s.selectArbreUp()) - self.nb.bind_all("",lambda e,s=self:s.deplieReplieNode()) - texte = "Jeu de commandes :" + self.JDCName+" ouvert" - CONNECTOR.Connect(JDC,"close",self.onClose,(self.JDCDisplay_courant,)) - self.appli.affiche_infos(texte) - - def onClose(self,jdcdisplay): - #print "onClose",jdcdisplay - self.closeJDCDISPLAY(jdcdisplay) - - def closeJDCDISPLAY(self,jdc): - """ - Ferme le jdcdisplay spécifié par l'argument jdc - """ - if jdc is self.JDCDisplay_courant: - # on ferme le jdcdisplay courant - self.closeSelectedJDC() - else: - # on ferme un autre jdcdisplay que le courant - old_JDCDisplay=self.JDCDisplay_courant - old_page=self.nb.getcurselection() - - self.JDCDisplay_courant=jdc - self.JDC=jdc.jdc - numero_jdc=self.liste_JDCDisplay.index(jdc) - self.nb.selectpage(numero_jdc) - #print numero_jdc - - self.closeSelectedJDC() - self.JDCDisplay_courant=old_JDCDisplay - self.JDC=old_JDCDisplay.jdc - self.nb.selectpage(old_page) - - def closeJDC (self,event=None) : - """ - Ferme le JDC associé au JDCDISPLAY selectionné - """ - if self.JDCDisplay_courant : - self.JDCDisplay_courant.jdc.close() - - def closeSelectedJDC (self) : - """ - Ferme le JDC courant et détruit l'onglet associé dans le notebook self.nb - """ - if self.JDCDisplay_courant.modified == 'o' : - message = "Voulez-vous sauvegarder le jeu de commandes "+self.JDC.nom+" courant ?" - reponse = askyesno(title="Sauvegarde du jdc courant", - message=message) - if reponse : - test = self.saveJDC() - if test == 0 : - self.appli.affiche_infos("Sauvegarde impossible") - return - - CONNECTOR.Disconnect(self.JDCDisplay_courant.jdc,"close",self.onClose,(self.JDCDisplay_courant,)) - self.JDCDisplay_courant.supprime() - self.JDCDisplay_courant.jdc.supprime() - self.liste_JDCDisplay.remove(self.JDCDisplay_courant) - # Active le mecanisme de selection du notebook (selectJDC) - self.nb.delete(self.nb.getcurselection()) - - try: - index = self.nb.index(self.nb.getcurselection()) - self.JDCDisplay_courant = self.liste_JDCDisplay[index] - self.JDC = self.JDCDisplay_courant.jdc - except: - self.JDC = None - self.JDCDisplay_courant = None - self.appli.toolbar.inactive_boutons() - - def visuCRJDC(self,event=None): - return self.visuCR(mode='JDC') - - def visuCR(self,mode): - """ - Méthode permettant l'affichage du rapport de validation - """ - if mode == 'JDC': - if not hasattr(self,'JDC') : return - if self.JDC == None : return - titre="rapport de validation du jeu de commandes courant" - cr = self.JDC.report() - #self.update_jdc_courant() - elif mode == 'CATA': - from Noyau.N_CR import CR - cr = CR() - cr.debut = "Début rapport de validation du catalogue" - cr.fin = "Fin rapport de validation du catalogue" - titre="rapport de validation du catalogue" - if hasattr(self,'cata_ordonne_cr') : - cr.add(self.cata_ordonne_cr) - if hasattr(self,'cata_dev_ordonne_cr') : - cr.add(self.cata_dev_ordonne_cr) - for cata in self.cata: - if hasattr(cata,'JdC'): - cr.add(cata.JdC.report()) - texte_cr = str(cr) - self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr) - - def openJDC(self,event=None,file=None,units=None,enregistre="oui"): - """ - Demande à l'utilisateur quel JDC existant il veut ouvrir - """ - if self.code == 'ASTER': - filetypes = ( ("format "+self.appli.format_fichier.get(), ".com*"),("Tous",'*')) - elif self.code == 'HOMARD' : - filetypes = ( ("format "+self.appli.format_fichier.get(), ".py"),("Tous",'*')) - else: - filetypes = ( ("format "+self.appli.format_fichier.get(), ".py"),) - if not hasattr(self,'initialdir'): - self.initialdir = self.appli.CONFIGURATION.initialdir - - if not file : - file = askopenfilename(title="Ouverture d'un fichier de commandes Aster", - defaultextension=".comm", - filetypes = filetypes, - initialdir = self.initialdir) - if file : - self.fileName = file - e=extension_fichier(file) - self.JDCName=stripPath(file) - self.initialdir = os.path.dirname(os.path.abspath(file)) - else : - return - - format=self.appli.format_fichier.get() - # Il faut convertir le contenu du fichier en fonction du format - if convert.plugins.has_key(format): - # Le convertisseur existe on l'utilise - p=convert.plugins[format]() - p.readfile(file) - text=p.convert('exec',self.appli) - if not p.cr.estvide(): - self.appli.affiche_infos("Erreur à la conversion") - Fenetre(self.appli, - titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier", - texte = str(p.cr)).wait() - return - if enregistre == "oui" : - self.appli.listeFichiers.aOuvert(file) - else: - # Il n'existe pas c'est une erreur - self.appli.affiche_infos("Type de fichier non reconnu") - showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier") - return - - # On se met dans le repertoire ou se trouve le fichier de commandes - # pour trouver les eventuels fichiers include ou autres - # localises a cote du fichier de commandes - os.chdir(self.initialdir) - CONTEXT.unset_current_step() - J=self.cata[0].JdC(procedure=text,appli=self.appli, - cata=self.cata,cata_ord_dico=self.cata_ordonne_dico, - nom = self.JDCName, - rep_mat=self.appli.CONFIGURATION.rep_mat, - ) - if units is not None: - J.recorded_units=units - J.old_recorded_units=units - - J.analyse() - txt_exception = J.cr.get_mess_exception() - if txt_exception : - # des exceptions ont été levées à la création du JDC - # --> on affiche les erreurs mais pas le JDC - self.JDC=J - self.appli.affiche_infos("Erreur fatale au chargement de %s" %file) - if self.appli.test == 0 : - showerror("Erreur fatale au chargement d'un fichier",txt_exception) - else: - self.ShowJDC(J,self.JDCName,enregistre=enregistre) - self.appli.toolbar.active_boutons() - # si le JDC ne contient rien (vide), on retourne ici - if len(self.JDC.etapes) == 0 : return - # dans le cas où le JDC est invalide, on affiche son CR - if not self.JDC.isvalid(): - self.appli.top.update() - self.visuCR(mode='JDC') - return J - - def deplieReplieNode(self): - self.JDCDisplay_courant.tree.tree.deplieReplieNode() - - def selectArbreDown(self): - self.JDCDisplay_courant.tree.tree.canvas.focus_set() - self.JDCDisplay_courant.tree.tree.mot_down_force() - - def selectArbreUp(self): - self.JDCDisplay_courant.tree.tree.canvas.focus_set() - self.JDCDisplay_courant.tree.tree.mot_up_force() - - def GetLabelJDC(self,nb_jdc = 'absent'): - """ - Retourne le label de l'onglet du NoteBook associé au JDC à afficher - """ - if nb_jdc == 'absent': - nb_jdc = len(self.nb.pagenames()) - nb_jdc = nb_jdc+1 - label_onglet = 'JDC'+`nb_jdc` - if label_onglet not in self.nb.pagenames() : - return label_onglet - else : - return self.GetLabelJDC(nb_jdc) - - def saveasJDC(self,event=None): - """ - Sauvegarde le JDC courant en demandant impérativement à l'utilisateur de - donner le nom du fichier de sauvegarde - """ - self.saveJDC(echo='oui') - - def saveJDC(self,echo='non'): - """ - Sauvegarde le JDC courant. - Retourne 1 si la sauvegarde s'est bien faite, 0 sinon. - - - Si echo = 'oui' : interactif (l'utilisateur donne le nom sous lequel il - veut sauver le JDC - - Si echo = 'non' : muet (sauvegarde le JDC dans JDC.procedure) - """ - ok = 0 - if not hasattr(self,'JDC') : return 0 - format=self.appli.format_fichier.get() - if generator.plugins.has_key(format): - # Le generateur existe on l'utilise - g=generator.plugins[format]() - jdc_formate=g.gener(self.JDC,format='beautifie') - if format == 'homard': - self.jdc_homard=g.get_homard() - if not g.cr.estvide(): - self.appli.affiche_infos("Erreur à la generation") - showerror("Erreur à la generation","EFICAS ne sait pas convertir ce JDC") - return - else: - # Il n'existe pas c'est une erreur - self.appli.affiche_infos("Format %s non reconnu" % format) - showerror("Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC") - return - self.jdc_fini = string.replace(jdc_formate,'\r\n','\n') - - if echo =='oui' or self.JDCDisplay_courant.fichier == None: - ok = self.asknomsauvegardeJDC() - elif self.JDCDisplay_courant.fichier != None : - # le JDC a déjà un nom : on sauvegarde directement sans demander - # un autre nom au développeur - if not save_in_file(self.JDCDisplay_courant.fichier,self.jdc_fini,self.appli.dir) : - showinfo("Erreur","Problème à la sauvegarde du fichier :" + `self.JDCDisplay_courant.fichier`) - #return 0 - ok = 0 - else : - if self.appli.format_fichier.get() == 'homard': - self.save_homard(self.JDCDisplay_courant.fichier,self.jdc_homard) - self.JDCDisplay_courant.stop_modif() - self.appli.affiche_infos("sauvegarde de "+`self.JDCDisplay_courant.fichier`+" effectuée") - ok = 1 - - if ok and hasattr( self.appli, 'salome'): - # eficas a été lancé à partir deSalome - #1)ajout dans l'arbre d'étude du nom du jdc - ok, msg = self.appli.addJdcInSalome( self.JDCDisplay_courant.fichier ) - - #2)CS_pbruno ?? - from panelsSalome import SALOME_UNIQUE_BASE_Panel - if len(SALOME_UNIQUE_BASE_Panel.dict_fichier_unite) > 0 : - print 'CS_pbruno if len(SALOMchier_unite) > 0 :???????' - self.appli.creeConfigTxt( self.appli.CONFIGURATION.initialdir, SALOME_UNIQUE_BASE_Panel.dict_fichier_unite ) - - #3)création/mise à jours d'un maillage dans Salome - self.appli.createOrUpdateMesh() - return ok - - def asknomsauvegardeJDC(self): - """ Demande à l'utilsateur le nom sous lequel il veut sauvegarder le JDC courant """ - titre = "Sauvegarde d'un fichier de commandes "+self.code - if self.code == 'ASTER': - defext = ".comm" - filtyp = ( ("ASTER", ".comm"),) - else : - defext = ".py" - filtyp = ( (self.code, ".py"),) - sauvegarde = asksaveasfilename(title=titre, - defaultextension=defext, - filetypes = filtyp, - initialdir = self.initialdir) - #initialdir = self.appli.CONFIGURATION.initialdir) - #initialdir = self.appli.CONFIGURATION.rep_user) - if sauvegarde : - if not save_in_file(sauvegarde,self.jdc_fini,None) : - showinfo("Erreur","Problème à la sauvegarde du fichier "+`sauvegarde`) - return 0 - else : - if self.appli.format_fichier.get() == 'homard': - self.save_homard(sauvegarde,self.jdc_homard) - self.JDCDisplay_courant.stop_modif() - self.appli.affiche_infos("Sauvegarde effectuée") - if sauvegarde != self.JDCDisplay_courant.fichier : - # l'utilisateur a sauvegardé le JDC sous un autre nom - self.JDCDisplay_courant.fichier = sauvegarde - self.JDCName = self.JDC.nom = stripPath(sauvegarde) - self.JDC.changefichier(sauvegarde) - self.changeNomPage() - return 1 - else : - return 0 - - def changeNomPage(self): - """ Change le nom de l'onglet contenant le JDC courant : en fait détruit l'actuel - et recrée un autre onglet à la même place avec le bon nom - """ - nom = self.JDCName - self.JDCDisplay_courant.jdc.nom = nom - nom_page = self.nb.getcurselection() - num_page = self.nb.index(nom_page) - tab = self.nb.tab(num_page) - tab.configure(text = nom) - - def exitEFICAS(self,event=None): - """ - Permet de sortir d'EFICAS en demandant à l'utilisateur - s'il veut sauvegarder les modifications en cours - """ - liste = self.GetListeJDCaSauvegarder() - if liste != [] : - # Certains fichiers n'ont pas été sauvegardés ... - if askyesno("Enregistrer modifications","Enregistrer les modifications ?") : - test = self.saveall(liste) - if test != 1 : - return - if askyesno ("Quitter","Voulez-vous vraiment quitter l'application ?") : - for JDCDisplay in self.liste_JDCDisplay: - JDCDisplay.jdc.supprime() - self.appli.quit() - return - - def GetListeJDCaSauvegarder(self) : - """ Retourne parmi la liste de tous les JDC ouverts la liste de ceux qui ont été modifiés """ - if not self.JDCDisplay_courant : return [] - if len(self.liste_JDCDisplay) == 0 : return l - l = [] - for JDCDisplay in self.liste_JDCDisplay: - if JDCDisplay.modified == 'o' : - l.append(JDCDisplay) - return l - - def copy(self,event=None): - """ - Lance la copie sur le JDC courant - """ - if self.JDCDisplay_courant : self.JDCDisplay_courant.doCopy() - - def paste(self,event=None): - """ - Lance le collage sur le JDC courant - """ - if self.JDCDisplay_courant : self.JDCDisplay_courant.doPaste() - - def cut(self,event=None): - """ - Lance le cut sur le JDC courant - """ - if self.JDCDisplay_courant: self.JDCDisplay_courant.doCut() - - def delete(self): - """ - Lance la suppression du noeud courant - """ - if not self.JDCDisplay_courant : return - self.JDCDisplay_courant.init_modif() - self.JDCDisplay_courant.node_selected.delete() - - def visuJDC_py(self,event=None): - """ - Méthode permettant d'afficher dans une fenêtre à part l'écho au - format python du jdc courant - """ - if not hasattr(self,'JDC') : return - jdc_fini = self.get_text_JDC('python') - if jdc_fini == None : return - Fenetre(self.appli, - titre = 'fichier '+ self.JDCName + ' à la syntaxe Python', - texte = jdc_fini) - - def visuJDC(self): - """ - Méthode permettant d'afficher dans une fenêtre à part l'écho au - format .comm ou .py du jdc courant - """ - if not hasattr(self,'JDC') : return - titre = 'fichier '+ self.JDCName + ' à la syntaxe '+ self.code - format=self.appli.format_fichier.get() - self.jdc_fini = self.get_text_JDC(format) - if self.jdc_fini == None : return - self.visu_fichier_cmd = Fenetre(self.appli,titre=titre,texte = self.jdc_fini) - - def get_text_JDC(self,format): - if generator.plugins.has_key(format): - # Le generateur existe on l'utilise - g=generator.plugins[format]() - jdc_formate=g.gener(self.JDC,format='beautifie') - if not g.cr.estvide(): - self.appli.affiche_infos("Erreur à la generation") - showerror("Erreur à la generation","EFICAS ne sait pas convertir ce JDC") - return - else: - return jdc_formate - else: - # Il n'existe pas c'est une erreur - self.appli.affiche_infos("Format %s non reconnu" % format) - showerror("Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC en format %s "% format) - return - - def view_doc(self): - """ - Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader - - Ne fonctionne pas sous UNIX (chemin d'accès Acrobat Reader) - - indication du chemin d'accès aux fichiers pdf à revoir : trop statique - """ - if not self.JDCDisplay_courant : return - try: - cle_doc = self.JDCDisplay_courant.node_selected.item.get_docu() - if cle_doc == None : return - cle_doc = string.replace(cle_doc,'.','') - cle_doc = string.replace(cle_doc,'-','') - commande = self.appli.CONFIGURATION.exec_acrobat - nom_fichier = cle_doc+".pdf" - fichier = os.path.abspath(os.path.join(self.appli.CONFIGURATION.path_doc,nom_fichier)) - if os.name == 'nt': - os.spawnv(os.P_NOWAIT,commande,(commande,fichier,)) - elif os.name == 'posix': - script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier) - pid = os.system(script) - except AttributeError: - traceback.print_exc() - pass - - def visu_a_plat(self,event=None): - """ - Méthode permettant d'afficher dans une fenêtre à part l'écho 'à plat' du jdc courant - """ - if not hasattr(self,'JDC') : return - titre = 'fichier '+ self.JDCName + ' à plat ' - self.jdc_fini = self.get_text_JDC('aplat') - if self.jdc_fini == None : return - self.visu_fichier_cmd = Fenetre(self.appli,titre=titre,texte = self.jdc_fini) - - def visu_txt_brut_JDC(self,event=None): - """ - Méthode permettant d'afficher le jeu de commandes tel qu'il a été passé au JDC - """ - if not hasattr(self,'JDC') : return - titre = "fichier de commandes utilisateur" - #texte = self.JDC.procedure - #if texte == None: - if self.JDCDisplay_courant.fichier == None: - self.appli.affiche_infos("Pas de fichier initial") - showerror("Impossible de visualiser le fichier initial", - "EFICAS ne peut visualiser le fichier initial.\nIl s'agit d'un nouveau JDC") - return - os.chdir(self.appli.dir) - f=open(self.JDCDisplay_courant.fichier,'r') - texte=f.read() - f.close() - self.visu_texte_JDC = Fenetre(self.appli,titre=titre,texte=texte) - - def affichage_fichier_ini(self): - """ - Affichage des valeurs des paramètres relus par Eficas - """ - self.appli.CONFIGURATION.affichage_fichier_ini() - - def saveall(self,liste): - """ - Sauvegarde tous les JDC contenus dans liste - """ - test = 1 - for JDCDisplay in liste : - self.JDCDisplay_courant=JDCDisplay - self.JDC = JDCDisplay.jdc - test = test * self.saveJDC(echo = 'non') - return test - - def save_homard(self,nom,texte): - file_homard=nom+'.conf_homard' - try: - f=open(file_homard,'w') - for ligne in texte: - f.write(ligne) - f.write('\n') - f.close() - except: - print "Pb a la sauvegarde sous le format homard" - if hasattr( self.appli, 'salome'): - import eficasEtude - self.appli.salome.rangeInStudy(file_homard,"_CONF") - -# --------------------------------------------------------------------------- -# Méthodes liées aux mots-clés inconnus -# --------------------------------------------------------------------------- - - def mc_inconnus(self): - l_mc = self.JDCDisplay_courant.jdc.get_liste_mc_inconnus() - o = fenetre_mc_inconnus(l_mc) - l = o.wait_new_list() - #print "mc_inconnus_new_list: ",l - #CCAR: Il n' y a pas de retour vers le JDC - - def aideEFICAS(self,event=None): - AIDE.go(master=self.parent) - - def update_jdc_courant(self): - self.JDCDisplay_courant.update() - - def TraduitFichier(self): - directory = self.appli.CONFIGURATION.rep_user - FichieraTraduire = askopenfilename(title="Nom du Fichier à Traduire", - defaultextension=".comm", - initialdir = directory - ) - if (FichieraTraduire == "" or FichieraTraduire == () ) : return - i=FichieraTraduire.rfind(".") - Feuille=FichieraTraduire[0:i] - FichierTraduit=Feuille+"v8.comm" - log=self.initialdir+"/convert.log" - os.system("rm -rf "+log) - os.system("rm -rf "+FichierTraduit) - Pmw.showbusycursor() - traduitV7V8.traduc(FichieraTraduire,FichierTraduit,log) - Pmw.hidebusycursor() - Entete="Fichier Traduit : "+FichierTraduit +"\n\n" - titre = "conversion de "+ FichieraTraduire - - if os.stat(log)[6] != 0L : - f=open(log) - texte_cr= f.read() - f.close() - else : - texte_cr = Entete - commande="diff "+FichieraTraduire+" "+FichierTraduit+" >/dev/null" - try : - if os.system(commande) == 0 : - texte_cr = texte_cr + "Pas de difference entre le fichier V7 et le fichier traduit" - except : - pass - - cptrendu = FenetreSurLigneWarning(self.appli,titre=titre,texte=texte_cr) - diff --git a/Editeur/catabrowser.py b/Editeur/catabrowser.py deleted file mode 100644 index e1ed7fcc..00000000 --- a/Editeur/catabrowser.py +++ /dev/null @@ -1,398 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import os -import sys -import types -import string -import Pmw -from Tkinter import * - -# Modules Eficas -import fontes -from treewidget import Tree -from Objecttreeitem import TreeItem -from Accas import AsException -from Noyau.N_CR import justify_text -from Accas import OPER,PROC,MACRO,FORM -from Accas import FACT,BLOC,SIMP - -# -__version__="$Name: $" -__Id__="$Id: catabrowser.py,v 1.3 2002/09/10 15:59:37 eficas Exp $" -# -class Tableau: - incr = 10 - def __init__(self,parent,colonnes): - self.parent = parent - self.colonnes = colonnes - self.init() - - def init(self): - # recherche du nombre maxi de lignes et de colonnes.... - for col in self.colonnes : - nb_l = 0 - if len(col) > nb_l : nb_l = len(col) - self.nb_lignes = nb_l - self.nb_colonnes = len(self.colonnes) - # initialisation des coordonnées dans le canvas - self.x0 = self.incr - self.y0 = self.incr - self.x = self.x0 + self.incr - self.y = self.y0 + self.incr - - def affiche(self): - self.scrolledcanvas=Pmw.ScrolledCanvas(self.parent, - hull_width=1., - hull_height=1., - borderframe=1) - Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95') - self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both") - self.canvas = self.scrolledcanvas.component('canvas') - self.affiche_colonnes() - - def affiche_colonnes(self): - for i in range(self.nb_lignes): - self.affiche_ligne(i) - self.aligne_colonnes() - self.trace_traits() - self.scrolledcanvas.resizescrollregion() - - def get_xy_max(self): - try: - x0,y0,xmax,ymax = self.canvas.bbox(ALL) - return xmax,ymax - except: - return None,None - - def trace_traits(self): - xmax,ymax = self.get_xy_max() - if not xmax : return - xmax = xmax+self.incr - ymax = ymax+self.incr - # trace les traits horizontaux - for i in range(self.nb_lignes): - tag_lig = 'ligne_'+`i` - l_id = self.canvas.find_withtag(tag_lig) - x0,y0,x1,y1 = self.bbox(l_id) - self.canvas.create_line(x0-self.incr,y0-self.incr,xmax,y0-self.incr) - self.canvas.create_line(self.x0,ymax,xmax,ymax) - # trace les traits verticaux - for j in range(self.nb_colonnes): - tag_col = 'colonne_'+`j` - l_id = self.canvas.find_withtag(tag_col) - x0,y0,x1,y1 = self.bbox(l_id) - self.canvas.create_line(x0-self.incr,y0-self.incr,x0-self.incr,ymax) - self.canvas.create_line(xmax,self.y0,xmax,ymax) - - def bbox(self,l_id): - x0,y0,x1,y1 = self.canvas.bbox(l_id[0]) - for id in l_id[1:]: - x2,y2,x3,y3 = self.canvas.bbox(id) - x0 = min(x2,x0) - y0 = min(y2,y0) - x1 = max(x3,x1) - y1 = max(y3,y1) - return x0,y0,x1,y1 - - def affiche_ligne(self,num_lig): - tag_lig = 'ligne_'+`num_lig` - num_col = 0 - for col in self.colonnes: - tag_col = 'colonne_'+`num_col` - x = 100*num_col+self.x - id = self.canvas.create_text(x,self.y, - text = justify_text(col[num_lig],cesure=60), - tag=(tag_lig,tag_col), - anchor='nw', - font = fontes.canvas) - x0,y0,x1,y1 = self.canvas.bbox(id) - num_col = num_col+1 - l_id = self.canvas.find_withtag(tag_lig) - x0,y0,x1,y1 = self.bbox(l_id) - self.y = y1 + 2*self.incr - - def aligne_colonnes(self): - num_col = 0 - for col in self.colonnes: - tag_col = 'colonne_'+`num_col` - l_id = self.canvas.find_withtag(tag_col) - if not l_id : continue - x0,y0,x1,y1 = self.bbox(l_id) - self.move(x1+self.incr,self.colonnes[num_col+1:],num_col+1) - num_col = num_col+1 - - def move(self,x,colonnes,num): - num_col = num - for col in colonnes: - tag_col = 'colonne_'+`num_col` - l_id = self.canvas.find_withtag(tag_col) - if not l_id : continue - x0,y0,x1,y1 = self.canvas.bbox(l_id[0]) - self.canvas.move(tag_col,x+self.incr-x0,0) - num_col = num_col+1 - -class CATAPanel(Frame) : - """ Classe servant à créer le panneau représentant l'objet sélectionné dans l'arbre""" - def __init__(self,parent,panneau,node) : - self.parent=parent - self.panneau = panneau - self.node=node - Frame.__init__(self,self.panneau) - self.place(x=0,y=0,relheight=1,relwidth=1) - self.init() - - def init(self): - # création du label initial - label = Label(self, - text = 'Attributs de '+self.node.item.labeltext, - font = fontes.standard_gras_souligne) - label.pack(side='top',pady=10) - # création des listes correspondant aux colonnes du tableau à afficher - colonne1,colonne2 = self.get_listes() - # affichage du tableau - self.tableau = Tableau(self,(colonne1,colonne2)) - self.tableau.affiche() - - def get_listes(self): - self.node.item.get_dico_attributs() - l_cles_attributs = self.node.item.d_attributs.keys() - l_cles_attributs.sort() - ind=0 - liste1 = [] - liste2=[] - for nom_attr in l_cles_attributs : - valeur = self.node.item.d_attributs[nom_attr] - if type(valeur) == types.TupleType: - texte ='' - for elem in valeur: - if type(elem) == types.ClassType: - texte = texte + elem.__name__ - else: - texte = texte + str(elem) - elif type(valeur) == types.ClassType : - texte = valeur.__name__ - else: - texte = str(valeur) - liste1.append(nom_attr) - liste2.append(texte) - return liste1,liste2 - -class CATAItem(TreeItem): - panel = CATAPanel - def __init__(self,appli,labeltext,object,setfunction=None,objet_cata_ordonne = None): - self.appli = appli - self.labeltext = labeltext - self.object=object - self.setfunction = setfunction - self.objet_cata_ordonne = objet_cata_ordonne - - def get_dico_fils(self): - d_fils = {} - if type(self.object) != types.TupleType: - for e in dir(self.object): - cmd = getattr(self.object,e) - if isCMD(cmd) : - d_fils[string.strip(cmd.nom)] = cmd - else: - for obj in self.object : - for e in dir(obj): - cmd = getattr(obj,e) - if isCMD(cmd) : - d_fils[string.strip(cmd.nom)] = cmd - self.d_fils = d_fils - - def get_dico_attributs(self): - d_attributs ={} - if type(self.object) == types.TupleType : - self.d_attributs = d_attributs - return - l_noms_attributs = ['nom','op','sd_prod','reentrant','repetable','fr','docu','into','valide_vide','actif', - 'regles','op_init','niveau','definition','code','niveaux','statut', - 'defaut','min','max','homo','position','val_min','val_max','condition'] - for nom_attribut in l_noms_attributs : - if hasattr(self.object,nom_attribut): - attr = getattr(self.object,nom_attribut) - d_attributs[nom_attribut] = attr - self.d_attributs = d_attributs - - def get_liste_mc_ordonnee(self): - """ Retourne la liste ordonnée (suivant le catalogue) brute des fils - de l'entite courante """ - if hasattr(self.objet_cata_ordonne,'ordre_mc'): - return self.objet_cata_ordonne.ordre_mc - else : - l=self.objet_cata_ordonne.keys() - l.sort() - return l - - def GetLabelText(self): - return self.labeltext,None,None - - def get_fr(self): - return '' - - def isMCList(self): - return 0 - - def GetSubList(self): - sublist=[] - if not hasattr(self,'d_fils'): - self.get_dico_fils() - # on classe les fils dans l'odre du catalogue ... - l_cles_fils = self.get_liste_mc_ordonnee() - for k in l_cles_fils : - if type(self.objet_cata_ordonne) == types.InstanceType : - objet_cata = self.objet_cata_ordonne.entites[k] - else : - objet_cata = self.objet_cata_ordonne.get(k,None) - item = make_objecttreeitem(self.appli,k + " : ",self.d_fils[k], - objet_cata_ordonne = objet_cata) - sublist.append(item) - return sublist - - def GetIconName(self): - return 'ast-green-square' - - def isactif(self): - return 1 - -class CMDItem(CATAItem): - - def get_dico_fils(self): - self.d_fils = self.object.entites - -class SIMPItem(CATAItem): - d_fils={} - d_attributs={} - - def GetIconName(self): - return 'ast-green-ball' - - def IsExpandable(self): - return 0 - -class FACTItem(CMDItem): - def GetIconName(self): - return 'ast-green-los' - -class BLOCItem(FACTItem): pass - -class ATTRIBUTItem(SIMPItem): - def get_dico_attributs(self): - self.d_attributs = {} - - def GetSubList(self): - return [] - - def IsExpandable(self): - return 0 - - def GetText(self): - return self.object - - def GetIconName(self): - return 'aucune' - -class CataBrowser: - def __init__(self,parent,appli,cata,item = None): - self.parent = parent - self.cata = cata - self.appli = appli - self.item = item - self.init() - - def close(self): - self.top.destroy() - - def init(self): - self.nodes={} - self.top = Pmw.Dialog(self.parent, - title = "Visualisation d'un catalogue", - buttons=('OK',), - command = self.quit) - self.pane = Pmw.PanedWidget(self.top.component('dialogchildsite'), - hull_width = 800, - hull_height = 500, - orient = 'horizontal') - self.pane.add('canvas',min = 0.4, max = 0.6, size = 0.5) - self.pane.add('panel',min = 0.4, max = 0.6, size = 0.5) - self.pane.pack(expand =1, fill = 'both') - self.scrolledcanvas = Pmw.ScrolledCanvas(self.pane.pane('canvas'), - hull_width=1., - hull_height=1., - borderframe=1) - Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95') - self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both") - if self.item == None : - self.item = CATAItem(self.appli,"Catalogue",self.cata) - self.tree = Tree(self.appli,self.item,self.scrolledcanvas,command = self.select_node) - self.tree.draw() - self.node = self.tree.node_selected - - def select_node(self,node): - self.nodes[node]=self.create_panel(node) - - def create_panel(self,node): - if hasattr(node.item,"panel"): - return getattr(node.item,"panel")(self,self.pane.pane('panel'),node) - - def quit(self,nom_bouton) : - self.top.destroy() - - def settitle(self): - self.top.wm_title("Browser de catalogue " ) - self.top.wm_iconname("CataBrowser") - - -dispatch = { - OPER : CMDItem, - PROC : CMDItem, - MACRO : CMDItem, - SIMP : SIMPItem, - FACT : FACTItem, - BLOC : BLOCItem, -} - -def TYPE(o): - if isinstance(o,OPER):return OPER - elif isinstance(o,PROC):return PROC - elif isinstance(o,MACRO):return MACRO - elif isinstance(o,FORM):return MACRO - elif isinstance(o,SIMP):return SIMP - elif isinstance(o,FACT):return FACT - elif isinstance(o,BLOC):return BLOC - else:return type(o) - -def make_objecttreeitem(appli,labeltext, object, setfunction=None,objet_cata_ordonne=None): - t = TYPE(object) - if dispatch.has_key(t): - c = dispatch[t] - else: - #print 'on a un objet de type :',t,' ',object - c = ATTRIBUTItem - return c(appli,labeltext, object, setfunction = setfunction,objet_cata_ordonne=objet_cata_ordonne) - -def isCMD(cmd): - return isinstance(cmd,OPER) or isinstance(cmd,PROC) or isinstance(cmd,MACRO) or isinstance(cmd,FORM) - - - diff --git a/Editeur/cataediteur.py b/Editeur/cataediteur.py deleted file mode 100644 index cac0254d..00000000 --- a/Editeur/cataediteur.py +++ /dev/null @@ -1,975 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import os -import sys -import types -import string -import Pmw -from widgets import showinfo -from Tkinter import * - -# Modules Eficas -import fontes -from widgets import * -from treewidget import Tree -from Objecttreeitem import TreeItem -from Accas import AsException -from Noyau.N_CR import justify_text - -from Accas import ASSD,GEOM -import definition_cata - -# -__version__="$Name: $" -__Id__="$Id: cataediteur.py,v 1.8 2005/11/29 11:14:14 eficas Exp $" -# - -Fonte_Niveau = fontes.canvas_gras_italique - -class Panel(Frame) : - """ Classe servant de classe mère à toutes celles représentant les - panneaux à afficher en fonction de la nature de l'objet en cours - Elle est toujours dérivée.""" - def __init__(self,parent,panneau,node) : - self.parent=parent - self.panneau = panneau - self.node=node - Frame.__init__(self,self.panneau) - self.place(x=0,y=0,relheight=1,relwidth=1) - #self.creer_boutons() - self.init() - - def creer_boutons(self): - """ Méthode créant les boutons se trouvant dans la partie contextuelle d'EFICAS - (à droite sous les onglets ) """ - self.fr_but = Frame(self,height=30) - self.fr_but.pack(side='bottom',fill='x') - self.bouton_com = Button(self.fr_but, - text = 'Commentaire', - command = self.ajout_commentaire, - width=14) - self.bouton_sup = Button(self.fr_but, - text = "Supprimer", - command=self.supprimer, - width=14) - self.bouton_doc = Button(self.fr_but, - text="Documentation", - command=self.visu_doc, - width=14) - self.bouton_cata = Button(self.fr_but, - text = "Catalogue", - command = self.show_catalogue, - width=14) - if self.parent.appli.CONFIGURATION.isdeveloppeur == 'OUI': - self.bouton_sup.place(relx=0.25,rely = 0.5,relheight = 0.8,anchor='w') - self.bouton_cata.place(relx=0.5,rely = 0.5,relheight = 0.8,anchor='w') - self.bouton_doc.place(relx=0.75,rely = 0.5,relheight = 0.8,anchor='w') - else: - self.bouton_sup.place(relx=0.3,rely = 0.5,relheight = 0.8,anchor='w') - self.bouton_doc.place(relx=0.7,rely = 0.5,relheight = 0.8,anchor='w') - - def show_catalogue(self): - try: - genea = self.node.item.get_genealogie() - self.parent.appli.browser_catalogue_objet(genea) - except Exception,e: - traceback.print_exc() - - def efface(self): - self.node.efface() - - def ajout_commentaire(self,ind='after'): - """ Ajoute un commentaire à l'intérieur du JDC, par défaut après le noeud en cours""" - if self.parent.modified == 'n' : self.parent.init_modif() - return self.node.append_brother("COMMENTAIRE",ind) - - def ajout_commentaire_first(self): - """ Ajoute un commentaire en début de JDC""" - if self.parent.modified == 'n' : self.parent.init_modif() - return self.node.append_child("COMMENTAIRE",'first') - - def visu_doc(self): - """ Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader - - Ne fonctionne pas sous UNIX (chemin d'accès Acrobat Reader) - - indication du chemin d'accès aux fichiers pdf à revoir : trop statique""" - cle_doc = self.parent.appli.get_docu(self.node) - if cle_doc == None : return - cle_doc = string.replace(cle_doc,'.','') - commande = self.parent.appli.CONFIGURATION.exec_acrobat - nom_fichier = cle_doc+".doc" - rep_fichier = cle_doc[0:2] - fichier = os.path.abspath(os.path.join(self.parent.appli.CONFIGURATION.path_doc,rep_fichier,nom_fichier)) - print 'commande =',commande - print 'fichier =',fichier - print 'existe =',os.path.isfile(fichier) - if os.name == 'nt': - os.spawnv(os.P_NOWAIT,commande,(commande,fichier)) - elif os.name == 'posix': - script ="#!/usr/bin/sh \n%s %s" %(commande,nom_fichier) - pid = os.system(script) - - def supprimer(self): - """ Suppression du noeud courant """ - if self.parent.modified == 'n' : self.parent.init_modif() - pere = self.node.parent - self.node.delete() - pere.select() - - def affiche(self): - """ Force l'affichage des fenêtres en cours """ - self.tkraise() - - def selectMC(self,name): - """ On retrouve le mot-clé sous le curseur pour affichage du fr """ - cmd=self.node.item.get_definition() - texte_infos = '' - for e in cmd.entites.keys() : - if e == name : - texte_infos=getattr(cmd.entites[e],'fr') - break - if texte_infos == '' : texte_infos="Pas d'infos disponibles" - self.parent.appli.affiche_infos(texte_infos) - - def defMC(self,name): - """ On ajoute un mot-clé à la commande : subnode """ - if name == SEPARATEUR:return - if self.parent.modified == 'n' : self.parent.init_modif() - if name != "COMMENTAIRE": - self.node.append_child(name) - else : - self.ajout_commentaire() - - def selectFilsCmd(self,name): - pass - - def defFilsCmd(self,name): - pass - - def defCmdFirst(self,name): - """ On ajoute une commande ou un commentaire au début du fichier de commandes """ - if name == SEPARATEUR:return - if self.parent.modified == 'n' : self.parent.init_modif() - if name != "COMMENTAIRE": - new_node = self.node.append_child(name,'first') - else : - new_node = self.ajout_commentaire_first() - - def add_commande_avant(self,event=None): - pass - - def add_commande_apres(self,event=None): - pass - -class OngletPanel(Panel) : - """ Cette classe est virtuelle et doit être dérivée - Elle contient les principales méthodes d'affichage des différents onglets""" - - def raisecmd(self,page): - self.nb.page(page).focus_set() - if page == 'Concept': self._any.focus() - - def affiche(self): - page=self.nb.getcurselection() - self.nb.page(page).focus_set() - if page == 'Concept':self._any.component('entry').focus_set() - self.tkraise() - - def makeConceptPage(self,page): - """ Crée la page de saisie du nom du concept """ - self.label = Label(page,text='Nom du concept :') - self.label.place(relx=0.1,rely=0.4) - self._any = Entry(page,relief='sunken') - self._any.place(relx=0.35,rely=0.4,relwidth=0.5) - self._any.bind("",lambda e,s=self:s.execConcept()) - self._any.bind("",lambda e,s=self:s.execConcept()) - self._any.insert(0,self.node.item.GetText()) - type_sd = self.node.item.object.get_type_sd_prod() - if type_sd : - txt = "L'opérateur courant retourne un objet de type %s" %type_sd - self.label = Label(page, text = txt) - self.label.place(relx=0.5,rely=0.55,anchor='n') - self._any.focus() - - def makeCommandePage(self,page): - """ Affiche la page d'ajout d'une commande relativement à l'objet commande sélectionné """ - titre = "Où voulez-vous insérer une commande par rapport à %s" %self.node.item.object.nom - Label(page,text=titre).place(relx=0.5,rely=0.2,anchor='w') - b_avant = Button(page,text='AVANT', - command = self.node.item.add_commande_avant) - b_apres = Button(page,text='APRES', - command = self.node.item.add_commande_apres) - b_avant.place(relx=0.35,rely=0.5,anchor='w') - b_apres.place(relx=0.65,rely=0.5,anchor='w') - - def deselectMC(self,name): - self.parent.appli.affiche_infos('') - - def get_liste_cmd(self): - listeCmd = self.node.item.object.niveau.definition.get_liste_cmd() - return listeCmd - - def get_liste_fils_cmd(self): - return ['Mot-clé simple','Mot-clé facteur','Bloc'] - - def makeMoclesPage(self,page): - frame1 = Frame(page,height = 20) - frame1.pack(side='top',fill='x') - label = Label(frame1,text ="Le mot-clé choisi sera ajouté à la fin du catalogue") - label.pack(side='top') - frame2 = Frame(page) - frame2.pack(side='top',fill='both',expand=1) - liste_cmd = self.get_liste_fils_cmd() - liste_commandes = (("",self.selectFilsCmd), - ("",self.deselectFilsCmd), - ("",self.defFilsCmd)) - Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes,titre = "Mots-clés") - Liste.affiche_liste() - - def deselectFilsCmd(self,name): - pass - - def makeJDCPage(self,page): - liste_cmd = self.get_liste_cmd() - liste_commandes = (("",self.selectCmd), - ("",self.deselectCmd), - ("",self.defCmdFirst)) - Liste = ListeChoix(self,page,liste_cmd,liste_commandes = liste_commandes,filtre='oui',titre = "Commandes") - Liste.affiche_liste() - - def makeReglesPage(self,page) : - regles = [] - regles = self.node.item.get_regles() - dictionnaire = self.node.item.get_mc_presents() - texte_regles = [] - l_regles_en_defaut=[] - if len(regles) > 0: - i = 0 - for regle in regles : - texte_regles.append(regle.gettext()) - texte,test = regle.verif(dictionnaire) - if test == 0 : l_regles_en_defaut.append(i) - i = i+1 - Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles") - Liste.affiche_liste() - #self.afficheListe(page,texte_regles,self.selectRegle,self.execRegle) - - def execConcept(self): - """ Nomme le concept SD retourné par l'étape """ - if self.parent.modified == 'n' : self.parent.init_modif() - nom = self._any.get() - # Pourquoi node.etape ??? - #test,mess = self.node.etape.item.nomme_sd(nom) - test,mess = self.node.item.nomme_sd(nom) - self.parent.appli.affiche_infos(mess) - self.node.racine.update() - - def changed(self): - pass - - def makeAttributsPage(self,page): - l_attributs=self.node.item.object.attributs - d_defauts = self.node.item.object.attributs_defauts - for attribut in l_attributs : - attr = self.node.item.object.entites_attributs.get(attribut,None) - if attr.valeur is d_defauts[attribut] : - texte = attribut+' = '+repr(attr.valeur)+' (defaut)' - else: - texte = attribut+' = '+repr(attr.valeur) - Label(page,text=texte).pack(side='top') - - def makeSimpPage(self,page): - texte = "Où voulez-vous ajouter un mot-clé simple ?" - Label(page,text=texte).place(relx=0.5,rely=0.3,anchor='center') - b1 = Button(page,text='AVANT '+self.node.item.object.nom,command=self.add_simp_avant) - b2 = Button(page,text='APRES '+self.node.item.object.nom,command=self.add_simp_apres) - b1.place(relx=0.5,rely=0.5,anchor='center') - b2.place(relx=0.5,rely=0.6,anchor='center') - - def add_simp_avant(self,event=None): - """ - Ajoute un mot-clé simple avant celui courant - """ - self.node.append_brother('new_simp','before') - self.node.update() - - def add_simp_apres(self,event=None): - """ - Ajoute un mot-clé simple après celui courant - """ - self.node.append_brother('new_simp','after') - self.node.update() - -class TYPEPanel(Frame): - def __init__(self,parent,panneau,node) : - self.parent=parent - self.panneau = panneau - self.node=node - Frame.__init__(self,self.panneau) - self.place(x=0,y=0,relheight=1,relwidth=1) - self.creer_texte() - - def creer_texte(self): - texte = "Le noeud sélectionné correspond à un type\n" - self.label = Label(self,text=texte) - self.label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center') - -class OPERPanel(OngletPanel): - def init(self): - nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) - - nb.pack(fill = 'both', expand = 1) - self.nb=nb - nb.add('Mocles', tab_text='Ajouter mots-clés') - nb.add('Commandes',tab_text='Ajouter une commande') - self.makeMoclesPage(nb.page("Mocles")) - self.makeCommandePage(nb.page("Commandes")) - nb.tab('Mocles').focus_set() - nb.setnaturalsize() - self.affiche() - -class SIMPPanel(OngletPanel): - def init(self): - nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) - nb.pack(fill = 'both', expand = 1) - self.nb=nb - nb.add('generaux', tab_text='Données générales') - nb.add('ihm',tab_text='Données IHM') - nb.add('mocle',tab_text='Ajouter un mot-cle simple') - self.makeAttributsGenerauxPage(nb.page("generaux")) - self.makeAttributsIHMPage(nb.page("ihm")) - self.makeSimpPage(nb.page('mocle')) - nb.tab('generaux').focus_set() - nb.setnaturalsize() - self.affiche() - - def makeAttributsGenerauxPage(self,page): - fr1 = Frame(page,bd=1,relief='raised') - fr2 = Frame(page,bd=1,relief='raised') - fr3 = Frame(page,bd=1,relief='raised') - fr4 = Frame(page,bd=1,relief='raised') - fr5 = Frame(page,bd=1,relief='raised') - fr1.place(relheight=0.14,relwidth=1,rely=0) - fr2.place(relheight=0.14,relwidth=1,rely=0.14) - fr3.place(relheight=0.29,relwidth=1,rely=0.28) - fr4.place(relheight=0.14,relwidth=1,rely=0.57) - fr5.place(relheight=0.28,relwidth=1,rely=0.71) - # nom du mot-clé - Label(fr1,text = 'Nom :').place(relx=0.05,rely=0.3,anchor='w') - self.e_nom = Entry(fr1) - self.e_nom.place(relx=0.35,rely=0.3,relwidth=0.3,anchor='w') - self.e_nom.bind("",lambda e,s=self : s.set_valeur_attribut('nom',None)) - self.e_nom.bind("",lambda e,s=self : s.set_valeur_attribut('nom',None)) - self.e_nom.insert(0,self.get_valeur_attribut('nom')) - # Statut - Label(fr1,text='Statut : ').place(relx=0.05,rely=0.7,anchor='w') - self.statut=StringVar() - valeurs_statut=[('obligatoire','o'), - ('facultatif','f'), - ('caché','c') - ] - self.statut.set(self.node.item.object.get_valeur_attribut('statut')) - i=0 - for text,mode in valeurs_statut: - b=Radiobutton(fr1,text=text,variable=self.statut,value=mode, - command = lambda s=self,m=mode : s.set_valeur_attribut('statut',m)) - b.place(relx=0.25+i*0.25,rely=0.7,anchor='w') - i=i+1 - # Type ... - Label(fr2,text='Type de la valeur : ').place(relx=0.05,rely=0.5,anchor='w') - self.e_type = Entry(fr2) - self.e_type.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w') - self.e_type.insert(0,self.node.item.object.get_valeur_attribut('type')) - # Domaine de validité - Label(fr3,text='Domaine de validité : ').place(relx=0.05,rely=0.2,anchor='w') - self.domaine = StringVar() - self.domaine.set(self.node.item.object.get_valeur_attribut('domaine_validité')) - b1=Radiobutton(fr3,text='continu',variable=self.domaine,value='continu', - command=lambda s=self,f=fr3 :s.change_domaine(f)) - b2=Radiobutton(fr3,text='discret',variable=self.domaine,value='discret', - command=lambda s=self,f=fr3 :s.change_domaine(f)) - b1.place(relx=0.35,rely=0.2,anchor='w') - b2.place(relx=0.65,rely=0.2,anchor='w') - self.change_domaine(fr3) - # Défaut ... - if self.domaine.get() == 'continu': - # le développeur peut donner la valeur qu'il souhaite, moyennant la vérification de type... - Label(fr4,text='Valeur par défaut : ').place(relx=0.05,rely=0.5,anchor='w') - self.e_defaut = Entry(fr4) - self.e_defaut.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w') - if self.node.item.object.get_valeur_attribut('defaut') : - self.e_defaut.insert(0,self.node.item.object.get_valeur_attribut('defaut')) - self.e_defaut.bind("",lambda e,s=self : s.set_valeur_attribut('defaut',None)) - self.e_defaut.bind("",lambda e,s=self : s.set_valeur_attribut('defaut',None)) - else : - # dans le cas discret, la valeur par défaut doit être dans l'ensemble des valeurs possibles (into) - liste = self.node.item.object.get_valeur_attribut('into') - if self.node.item.object.get_valeur_attribut('defaut') : - self.set_valeur_attribut('defaut',self.node.item.object.get_valeur_attribut('defaut')) - if liste == None : liste = [] - self.e_defaut = Pmw.OptionMenu(fr4,labelpos='w',label_text = "Valeur par défaut : ", - items = self.node.item.object.get_valeur_attribut('into'), - menubutton_width=30) - self.e_defaut.configure(command = lambda e,s=self : s.set_valeur_attribut('defaut',None)) - self.e_defaut.place(relx=0.05,rely=0.5,anchor='w') - # Liste de valeurs ? - Label(fr5,text='Liste de valeurs : ').place(relx=0.05,rely=0.2,anchor='w') - self.liste_valeurs = BooleanVar() - liste_valeurs = [('OUI',1),('NON',0)] - self.liste_valeurs.set(0) - i=0 - for text,mode in liste_valeurs: - b=Radiobutton(fr5,text=text,variable=self.liste_valeurs,value=mode, - command=lambda s=self,f=fr5 :s.change_liste_valeurs(f)) - b.place(relx=0.35+i*0.2,rely=0.2,anchor='w') - i=i+1 - self.change_liste_valeurs(fr5) - - def makeAttributsIHMPage(self,page): - fr1 = Frame(page,height=100,bd=1,relief='raised') - fr2 = Frame(page,height=50,bd=1,relief='raised') - fr1.pack(side='top',fill='x') - fr2.pack(side='top',fill='x') - # Champ fr ... - Label(fr1,text='Champ fr : ').place(relx=0.05,rely=0.35,anchor='w') - self.e_fr = Entry(fr1) - self.e_fr.place(relx=0.35,rely=0.35,relwidth=0.6,anchor='w') - self.e_fr.insert(0,self.node.item.object.get_valeur_attribut('fr')) - # Champ ang ... - Label(fr1,text='Champ ang : ').place(relx=0.05,rely=0.70,anchor='w') - self.e_ang = Entry(fr1) - self.e_ang.place(relx=0.35,rely=0.70,relwidth=0.6,anchor='w') - self.e_ang.insert(0,self.node.item.object.get_valeur_attribut('ang')) - # Clé documentaire ... - Label(fr2,text='Clé documentaire : ').place(relx=0.05,rely=0.50,anchor='w') - self.e_docu = Entry(fr2) - self.e_docu.place(relx=0.35,rely=0.50,relwidth=0.6,anchor='w') - self.e_docu.insert(0,self.node.item.object.get_valeur_attribut('docu')) - - def detruit_widgets(self,l_widgets): - for nom_widg in l_widgets : - try: - widg = getattr(self,nom_widg) - widg.place_forget() - delattr(self,nom_widg) - except: - pass - - def change_liste_valeurs(self,fr5): - valeur = self.liste_valeurs.get() - if valeur == 0 : - # pas de liste de valeurs - l_widgets=['l_homo','b1_homo','b2_homo','l_min','e_min','l_max','e_max'] - self.detruit_widgets(l_widgets) - elif valeur == 1: - # pas de widgets à détruire ... - if hasattr(self,'l_homo') : - # on est déjà en mode 'liste' --> rien à faire - return - # homo - self.l_homo = Label(fr5,text='Liste homogène : ') - self.l_homo.place(relx=0.05,rely=0.4,anchor='w') - self.homo = BooleanVar() - self.homo.set(self.node.item.object.get_valeur_attribut('homo')) - self.b1_homo=Radiobutton(fr5,text='OUI',variable=self.homo,value=1) - self.b2_homo=Radiobutton(fr5,text='NON',variable=self.homo,value=0) - self.b1_homo.place(relx=0.35,rely=0.4,anchor='w') - self.b2_homo.place(relx=0.65,rely=0.4,anchor='w') - # min ... - self.l_min = Label(fr5,text='Longueur minimale : ') - self.l_min.place(relx=0.05,rely=0.6,anchor='w') - self.e_min = Entry(fr5) - self.e_min.place(relx=0.4,rely=0.6,relwidth=0.3,anchor='w') - self.e_min.insert(0,self.node.item.object.get_valeur_attribut('min')) - # max ... - self.l_max = Label(fr5,text='Longueur maximale : ') - self.l_max.place(relx=0.05,rely=0.8,anchor='w') - self.e_max = Entry(fr5) - self.e_max.place(relx=0.4,rely=0.8,relwidth=0.3,anchor='w') - self.e_max.insert(0,self.node.item.object.get_valeur_attribut('max')) - - def change_domaine(self,fr3): - valeur = self.domaine.get() - if valeur == 'discret' : - l_widgets = ['l_val_min','l_val_max','e_val_min','e_val_max'] - self.detruit_widgets(l_widgets) - # into - #self.l_into = Label(fr3,text='Ensemble de valeurs : ') - #self.l_into.place(relx=0.2,rely=0.5,anchor='w') - self.e_into = Pmw.ScrolledListBox(fr3, - items=self.node.item.object.get_valeur_attribut('into'), - labelpos='w', - label_text= 'Ensemble de valeurs : ', - listbox_height = 3, - dblclickcommand = self.change_into) - self.e_into.place(relx=0.05,rely=0.6,relwidth=0.9,anchor='w') - #self.e_into.insert(0,self.node.item.object.get_valeur_attribut('into')) - elif valeur == 'continu': - l_widgets = ['l_into','e_into'] - self.detruit_widgets(l_widgets) - if hasattr(self,'l_val_min'): - # on est déjà en mode 'continu' --> rien à faire - return - # val_min - self.l_val_min = Label(fr3,text='Valeur minimale : ') - self.l_val_min.place(relx=0.05,rely=0.5,anchor='w') - self.e_val_min = Entry(fr3) - self.e_val_min.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w') - self.e_val_min.bind("",lambda e,s=self : s.set_valeur_attribut('val_min',None)) - self.e_val_min.bind("",lambda e,s=self : s.set_valeur_attribut('val_min',None)) - self.set_valeur_attribut('val_min',self.get_valeur_attribut('val_min')) - # val_max - self.l_val_max = Label(fr3,text='Valeur maximale : ') - self.l_val_max.place(relx=0.05,rely=0.8,anchor='w') - self.e_val_max = Entry(fr3) - self.e_val_max.place(relx=0.35,rely=0.8,relwidth=0.5,anchor='w') - self.e_val_max.bind("",lambda e,s=self : s.set_valeur_attribut('val_max',None)) - self.e_val_max.bind("",lambda e,s=self : s.set_valeur_attribut('val_max',None)) - self.set_valeur_attribut('val_max',self.get_valeur_attribut('val_max')) - -# ------------------------------------------------------------------ -# Méthodes de validation des entrées faites par l'utilisateur -# ------------------------------------------------------------------ - - def get_valeur_attribut(self,nom_attr): - """ - Demande à l'item de retourner la valeur de l'attribut nom_attr - """ - return self.node.item.get_valeur_attribut(nom_attr) - - def set_valeur_attribut(self,nom_attr,new_valeur): - """ - Affecte la valeur new_valeur à l'attribut nom_attr - Vérifie si celle-ci est valide, sinon restaure l'ancienne - """ - if new_valeur is None : - widget = getattr(self,'e_'+nom_attr) - if hasattr(widget,'getcurselection'): - new_valeur = widget.getcurselection() - else: - new_valeur = widget.get() - print "on affecte %s a %s" %(str(new_valeur),nom_attr) - self.node.item.set_valeur_attribut(nom_attr,new_valeur) - self.node.update() - - def change_into(self): - """ - Méthode activée par double clic sur la ListBox d'affichage des valeurs discrètes possibles : - permet de changer la liste de ces valeurs - """ - showinfo("Fonction non encore disponible", - "Vous ne pouvez pas encore modifier la liste into par cette IHM") - -class OBJECTItem(TreeItem): - def __init__(self,appli,labeltext,object,setfunction=None,objet_cata_ordonne = None): - self.appli = appli - self.labeltext = labeltext - self.object=object - self.setfunction = setfunction - self.objet_cata_ordonne = objet_cata_ordonne - - def GetLabelText(self): - return self.labeltext,None,None - - def get_fr(self): - return '' - - def isMCList(self): - return 0 - - def isactif(self): - return 1 - - def add_commande_avant(self): - pass - - def add_commande_apres(self): - pass - - def set_valeur_attribut(self,nom_attr,new_valeur): - """ - Affecte la valeur new_valeur à l'attribut nom_attr - Vérifie si celle-ci est valide, sinon restaure l'ancienne - """ - old_valeur = self.object.get_valeur_attribut(nom_attr) - self.object.set_valeur_attribut(nom_attr,new_valeur) - verificateur = 'verif_'+nom_attr - if hasattr(self.object,verificateur): - if not getattr(self.object,verificateur)(): - # la nouvelle valeur de nom_attr n'est pas valide : on restaure l'ancienne (sans vérification) - self.object.set_valeur_attribut(nom_attr,old_valeur) - print 'changement de valeur refuse' - return - print 'changement de valeur accepte' - self.object.init_modif() - - def get_valeur_attribut(self,nom_attr): - """ - Retourne la valeur de l'attribut nom_attr - """ - return self.object.get_valeur_attribut(nom_attr) - -class CATAItem(OBJECTItem): - def GetSubList(self): - sublist=[] - for fils in self.object.entites_fils: - item = make_objecttreeitem(self.appli,fils.objet.label + " : ",fils,objet_cata_ordonne=self.objet_cata_ordonne) - sublist.append(item) - return sublist - - def GetIconName(self): - if self.object.isvalid(): - return 'ast-green-square' - else: - return 'ast-red-square' - - def GetText(self): - return "Catalogue %s" %self.appli.code - - def add_commande_avant(self): - pass - - def add_commande_apres(self): - pass - - -def transforme_liste_dico(liste): - d={} - for item in liste : - d[item.nom]=item - return d - -class OPERItem(OBJECTItem): - panel = OPERPanel - def GetSubList(self): - sublist=[] - # on classe les fils dans l'ordre du catalogue ... - l_cles_fils = self.get_liste_mc_ordonnee() - # on crée les items fils ... - dico_fils = transforme_liste_dico(self.object.entites_fils) - for k in l_cles_fils : - typ = TYPE_COMPLET(dico_fils[k]) - if type(self.objet_cata_ordonne) == types.InstanceType : - objet_cata = self.objet_cata_ordonne.entites[k] - else : - objet_cata = self.objet_cata_ordonne.get(k,None) - item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata) - sublist.append(item) - return sublist - - def GetText(self): - #return self.object.nom - return self.object.get_valeur_attribut('nom') - - def get_liste_mc_ordonnee(self): - return self.objet_cata_ordonne.ordre_mc - - def GetIconName(self): - if self.object.isvalid(): - return 'ast-green-square' - else: - return 'ast-red-square' - - def additem(self,name,pos): - if isinstance(name,TreeItem) : - cmd=self.object.addentite(name.getObject(),pos) - else : - cmd = self.object.addentite(name,pos) - typ = TYPE_COMPLET(cmd) - item = make_objecttreeitem(self.appli,typ + " : ", cmd) - return item - - def get_attribut(self,nom): - if nom == 'nature': return 'OPERATEUR' - - def get_liste_mc_presents(self): - return [] - - def verif_condition_regles(self,liste): - return [] - -class PROCItem(OPERItem): - panel = OPERPanel - -class MACROItem(OPERItem): - panel = OPERPanel - -class SIMPItem(OPERItem): - panel = SIMPPanel - - def GetIconName(self): - if self.object.isvalid(): - return 'ast-green-ball' - else: - return 'ast-red-ball' - - def IsExpandable(self): - return 0 - - def GetSubList(self): - return [] - -class FACTItem(OPERItem): - def GetIconName(self): - if self.object.isvalid(): - return 'ast-green-los' - else: - return 'ast-red-los' - -class BLOCItem(FACTItem): pass - -class TYPEItem(SIMPItem): - panel = TYPEPanel - def get_dico_attributs(self): - self.d_attributs = {} - - def GetSubList(self): - return [] - - def IsExpandable(self): - return 0 - - def GetText(self): - return self.object.nom - -class NIVEAUItem(OPERItem): - def IsExpandable(self): - return 1 - - def get_liste_mc_ordonnee(self): - l=[] - for fils in self.object.entites_fils: - l.append(fils.nom) - return l - - def GetSubList(self): - sublist=[] - # on classe les fils dans l'ordre du catalogue ... - l_cles_fils = self.get_liste_mc_ordonnee() - # on crꥠles items fils ... - dico_fils = transforme_liste_dico(self.object.entites_fils) - for k in l_cles_fils : - typ = TYPE_COMPLET(dico_fils[k]) - if type(self.objet_cata_ordonne) == types.InstanceType : - objet_cata = self.objet_cata_ordonne.entites[k] - else : - objet_cata = self.objet_cata_ordonne.get(k,None) - item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata) - sublist.append(item) - return sublist - - def GetLabelText(self): - """ Retourne 3 valeurs : - - le texte à afficher dans le noeud représentant l'item - - la fonte dans laquelle afficher ce texte - - la couleur du texte - """ - return self.labeltext,Fonte_Niveau,'#00008b' - - def GetIconName(self): - if self.object.isvalid(): - return "ast-green-text" - else: - return 'ast-red-text' - - def additem(self,name,pos): - if isinstance(name,TreeItem) : - cmd=self.object.addentite(name.getObject(),pos) - else : - cmd = self.object.addentite(name,pos) - typ = TYPE_COMPLET(obj) - item = make_objecttreeitem(self.appli,typ+ " : ", cmd) - return item - - def suppitem(self,item) : - # item = item de l'ETAPE à supprimer du JDC - # item.getObject() = ETAPE ou _C - # self.object = JDC - itemobject=item.getObject() - if self.object.suppentite(itemobject): - if isinstance(itemobject,_C): - message = "Commentaire supprimé" - else : - message = "Commande " + itemobject.nom + " supprimée" - self.appli.affiche_infos(message) - return 1 - else: - self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet") - return 0 - - def GetText(self): - return '' - -class ATTRIBUTItem(SIMPItem): - def get_dico_attributs(self): - self.d_attributs = {} - - def GetSubList(self): - return [] - - def IsExpandable(self): - return 0 - - def GetText(self): - return self.object - - def GetIconName(self): - return 'aucune' - -class CataEditeur: - def __init__(self,parent,appli,cata): - self.parent = parent - self.cata = definition_cata.CATALOGUE(cata) - self.appli = appli - self.top = Toplevel() - self.top.geometry("800x500") - self.top.title("Edition d'un catalogue") - self.init() - - def close(self): - self.top.destroy() - - def init(self): - self.nodes={} - self.creerbarremenus() - self.pane = Pmw.PanedWidget(self.top, - hull_width = 800, - hull_height = 500, - orient = 'horizontal') - self.pane.add('canvas',min = 0.4, max = 0.6, size = 0.45) - self.pane.add('panel',min = 0.4, max = 0.6, size = 0.55) - self.pane.pack(expand =1, fill = 'both') - self.scrolledcanvas = Pmw.ScrolledCanvas(self.pane.pane('canvas'), - hull_width=1., - hull_height=1., - borderframe=1) - Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95') - self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both") - self.item = CATAItem(self.appli,"Catalogue", - self.cata, - objet_cata_ordonne = self.appli.readercata.cata_ordonne_dico) - - self.tree = Tree(self.appli,self.item,self.scrolledcanvas,command = self.select_node) - self.tree.draw() - self.node = self.tree.node_selected - - def creerbarremenus(self) : - self.menubar=Menu(self.top) - self.filemenu=Menu(self.menubar,tearoff=0) - self.filemenu.add_command(label='Quitter',command=self.quit) - - self.editmenu=Menu(self.menubar,tearoff=0) - #self.editmenu.add_command(label='Copier',command=self.copy) - #self.editmenu.add_command(label='Couper',command=self.cut) - #self.editmenu.add_command(label='Coller',command=self.paste) - - self.affichagemenu=Menu(self.menubar,tearoff=0) - self.affichagemenu.add_command(label='Rapport de validation', - command = self.visuCR) - self.affichagemenu.add_command(label='shell',command = self.shell) - #self.affichagemenu.add_command(label='Fichier à¡°lat',command=self.visu_a_plat) - #self.affichagemenu.add_command(label='Fichier .py',command =self.visuJDC_py) - #self.affichagemenu.add_command(label='Fichier source',command = self.visu_txt_brut_JDC) - #self.affichagemenu.add_command(label='Paraméµ²es Eficas',command=self.affichage_fichier_ini) - - #self.optionmenu=Menu(self.menubar,tearoff=0) - #self.optionmenu.add_command(label='Catalogue dê·¥loppeur',command=self.choix_cata_developpeur) - - self.menubar.add_cascade(label='Fichier',menu=self.filemenu) - self.menubar.add_cascade(label='Edition',menu=self.editmenu) - self.menubar.add_cascade(label='Jeu de commandes',menu=self.affichagemenu) - #self.menubar.add_cascade(label='Browsers',menu=self.browsermenu) - #self.menubar.add_cascade(label='Catalogue',menu=self.cataloguemenu) - #self.menubar.add_cascade(label='Options',menu=self.optionmenu) - self.top.configure(menu=self.menubar) - self.top.protocol("WM_DELETE_WINDOW",self.quit) - self.top.minsize(900,500) - self.top.geometry("900x500") - - def shell(self,event=None): - import Interp - d={'j':self.tree.item.getObject()} - Interp.InterpWindow(d,parent=self.parent) - - def visuCR(self,mode='Cata'): - txt = str(self.cata.report()) - titre="Rapport de validation du catalogue" - Fenetre(self.appli,titre=titre,texte=txt) - - def select_node(self,node): - self.nodes[node]=self.create_panel(node) - - def create_panel(self,node): - if hasattr(node.item,"panel"): - return getattr(node.item,"panel")(self,self.pane.pane('panel'),node) - - def quit(self) : - self.top.destroy() - - def settitle(self): - self.top.wm_title("Browser de catalogue " ) - self.top.wm_iconname("CataBrowser") - - -dispatch = { - 'OPER' : OPERItem, - 'PROC' : PROCItem, - 'MACRO' : MACROItem, - 'SIMP' : SIMPItem, - 'FACT' : FACTItem, - 'BLOC' : BLOCItem, - 'TYPE' : TYPEItem, - 'NIVEAU' : NIVEAUItem -} - -def TYPE(o): - if isinstance(o,definition_cata.OPER_CATA):return 'OPER' - elif isinstance(o,definition_cata.PROC_CATA):return 'PROC' - elif isinstance(o,definition_cata.MACRO_CATA):return 'MACRO' - elif isinstance(o,definition_cata.SIMP_CATA):return 'SIMP' - elif isinstance(o,definition_cata.FACT_CATA):return 'FACT' - elif isinstance(o,definition_cata.BLOC_CATA):return 'BLOC' - elif isinstance(o,definition_cata.TYPE_CATA):return 'TYPE' - elif isinstance(o,definition_cata.NIVEAU_CATA) : return 'NIVEAU' - else:return type(o) - -def TYPE_COMPLET(o): - if isinstance(o,definition_cata.OPER_CATA):return "OPERATEUR" - elif isinstance(o,definition_cata.PROC_CATA):return "PROCEDURE" - elif isinstance(o,definition_cata.MACRO_CATA):return "MACRO" - elif isinstance(o,definition_cata.SIMP_CATA):return "Mot-clé SIMPLE" - elif isinstance(o,definition_cata.FACT_CATA):return "Mot-clé FACTEUR" - elif isinstance(o,definition_cata.BLOC_CATA):return "BLOC" - elif isinstance(o,definition_cata.TYPE_CATA):return "Type" - elif isinstance(o,definition_cata.NIVEAU_CATA):return "Niveau" - else: return "Inconnu ("+`type(o)`+")" - -def make_objecttreeitem(appli,labeltext, object, setfunction=None,objet_cata_ordonne=None): - t = TYPE(object) - if dispatch.has_key(t): - c = dispatch[t] - else: - print 'on a un objet de type :',type(object),' ',object - c = ATTRIBUTItem - return c(appli,labeltext, object, setfunction = setfunction,objet_cata_ordonne=objet_cata_ordonne) - - - diff --git a/Editeur/centerwindow.py b/Editeur/centerwindow.py deleted file mode 100644 index 4acca2e4..00000000 --- a/Editeur/centerwindow.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module contient la fonction utilitaire centerwindow - qui sert à centrer une fenetre -""" -import types - -def centerwindow(window,parent = 'avec'): - if parent =='avec': - parent = window.winfo_parent() - if type(parent) == types.StringType: - parent = window._nametowidget(parent) - # Find size of window. - window.update_idletasks() - width = window.winfo_width() - height = window.winfo_height() - if width == 1 and height == 1: - # If the window has not yet been displayed, its size is - # reported as 1x1, so use requested size. - width = window.winfo_reqwidth() - height = window.winfo_reqheight() - # Place in centre of screen: - if parent =='avec' : - x = (window.winfo_screenwidth() - width) / 2 - parent.winfo_vrootx() - y = (window.winfo_screenheight() - height) / 3 - parent.winfo_vrooty() - else: - x = (window.winfo_screenwidth() - width) / 2 - y = (window.winfo_screenheight() - height) / 3 - if x < 0: - x = 0 - if y < 0: - y = 0 - window.geometry('+%d+%d' % (x, y)) - diff --git a/Editeur/change_comm.py b/Editeur/change_comm.py deleted file mode 100755 index 8b0a4bca..00000000 --- a/Editeur/change_comm.py +++ /dev/null @@ -1,167 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module permet de lancer l'application EFICAS en affichant - un ecran Splash pour faire patentier l'utilisateur -""" -# Modules Python -import sys -import os - -# Modules Eficas -import import_code -import session -import prefs -import convert -import generator -import string -from utils import extension_fichier,stripPath, save_in_file - -class DUP : - - def __init__(self,code): - """ - """ - self.format_fichier="python" - self.version_code=None - self.code=code - - self.top=None - self.test=2 - import configuration - self.CONFIGURATION=configuration.make_config(self,prefs.REPINI) - - self.load_readercata() - self.cata=self.readercata.cata - - self.JDC=None - self.JDCName="" - self.J2=None - - def load_readercata(self): - mname='readercata' - module=__import__(mname,globals(),locals()) - factory=getattr(module,mname.upper()) - appli_composant=factory(self,self.top) - setattr(self,mname,appli_composant) - - - def openJDC(self,fichier): - if fichier : - self.fichier = fichier - e=extension_fichier(fichier) - self.JDCName=stripPath(fichier) - self.initialdir = os.path.dirname(os.path.abspath(fichier)) - else : - return - - format=self.format_fichier - # Il faut convertir le contenu du fichier en fonction du format - if convert.plugins.has_key(format): - # Le convertisseur existe on l'utilise - p=convert.plugins[format]() - p.readfile(fichier) - text=p.convert('exec',self) - if not p.cr.estvide(): - print ("Erreur à la conversion") - print str(p.cr) - return - - # On se met dans le repertoire ou se trouve le fichier de commandes - # pour trouver les eventuels fichiers include ou autres - # localises a cote du fichier de commandes - os.chdir(self.initialdir) - CONTEXT.unset_current_step() - J=self.cata[0].JdC(procedure=text,appli=self, - cata=self.cata,cata_ord_dico=self.readercata.cata_ordonne_dico, - nom = self.JDCName, - rep_mat=self.CONFIGURATION.rep_mat, - ) - - J.analyse() - - txt_exception = J.cr.get_mess_exception() - if txt_exception : - # des exceptions ont été levées à la création du JDC - # --> on affiche les erreurs mais pas le JDC - self.JDC=J - print("Erreur fatale au chargement de %s" %file) - else : - self.JDC=J - - def modifieJDC(self,texte): - if texte == None or texte == "" : return - format="python" - lignes=string.split(texte,";") - textedecoup="" - for l in lignes : - textedecoup=textedecoup+l+'\n' - if convert.plugins.has_key(format): - p=convert.plugins[format]() - p.settext(textedecoup) - text=p.convert('exec',self) - print text - if not p.cr.estvide(): - print ("Erreur à la conversion") - print str(p.cr) - return - self.J2=self.cata[0].JdC(procedure=text,appli=self, - cata=self.cata, - cata_ord_dico=self.readercata.cata_ordonne_dico, - nom = self.JDCName+"2", - rep_mat=self.CONFIGURATION.rep_mat, - ) - self.J2.definition.code = "MODIF" - self.J2.analyse() - - - def saveJDC(self,fichierSortie): - """ - Sauvegarde le JDC courant. - Retourne 1 si la sauvegarde s'est bien faite, 0 sinon. - """ - if not hasattr(self,'JDC') : return 0 - - format="Modif" - - if generator.plugins.has_key(format): - g=generator.plugins[format]() - jdc_formate=g.genermodifparam(self.JDC,self.J2) - if not g.cr.estvide(): - self.affiche_infos("Erreur à la generation") - return 0 - else: - self.affiche_infos("Format %s non reconnu" % format) - return 0 - - self.jdc_fini = string.replace(jdc_formate,'\r\n','\n') - - if not save_in_file(fichierSortie,self.jdc_fini) : - self.affiche_infos("Problème à la sauvegarde du fichier") - return 0 - else : - self.affiche_infos("sauvegarde effectuée") - return 1 - - - def affiche_infos(self,mess): - print mess - diff --git a/Editeur/comploader.py b/Editeur/comploader.py index c5a7c846..b20bfa9f 100644 --- a/Editeur/comploader.py +++ b/Editeur/comploader.py @@ -38,17 +38,24 @@ import os,glob,types # Ce dictionnaire est renseigné par la méthode charger_composants composants = {} -def charger_composants(): +def charger_composants(Ihm="TK"): """ Cette fonction a pour but de charger tous les modules composants graphiques (fichiers compo*.py dans le même répertoire que ce module ) et de remplir le dictionnaire composants utilisé par make_objecttreeitem """ - repertoire=os.path.dirname(__file__) + reper=os.path.dirname(__file__) + if Ihm == "TK" : + repertoire=reper+"/../InterfaceTK" + package="InterfaceTK" + else : + repertoire=reper+"/../InterfaceQT" + package="InterfaceQT" listfich=glob.glob(os.path.join(repertoire, "compo*.py")) for fichier in listfich: m= os.path.basename(fichier)[:-3] - module=__import__(m,globals(),locals()) + module=__import__(package,globals(),locals(),[m]) + module = getattr(module, m) composants[module.objet]=module.treeitem return composants diff --git a/Editeur/compobase.py b/Editeur/compobase.py deleted file mode 100644 index df539df0..00000000 --- a/Editeur/compobase.py +++ /dev/null @@ -1,3 +0,0 @@ -import Objecttreeitem -treeitem = Objecttreeitem.ObjectTreeItem -objet = None diff --git a/Editeur/compobloc.py b/Editeur/compobloc.py deleted file mode 100644 index d2f2f3ac..00000000 --- a/Editeur/compobloc.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -from Tkinter import * -import Pmw - -import Objecttreeitem -import compofact - - -class BLOCTreeItem(compofact.FACTTreeItem): - panel = compofact.FACTPanel - - def get_objet(self,name) : - for v in self.object.mc_liste: - if v.nom == name : return v - return None - - def iscopiable(self): - return 0 - - -import Accas -treeitem = BLOCTreeItem -objet = Accas.MCBLOC diff --git a/Editeur/compocomm.py b/Editeur/compocomm.py deleted file mode 100644 index f0fdca5c..00000000 --- a/Editeur/compocomm.py +++ /dev/null @@ -1,169 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -from Tkinter import * -import Pmw -import string - -import Objecttreeitem -import panels -import fontes - -Fonte_Commentaire = fontes.standard_italique - -class COMMPanel(panels.OngletPanel): - - def init(self): - """ - Initialise les frame des panneaux contextuels relatifs à un COMMENTAIRE - """ - nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) - nb.pack(fill = 'both', expand = 1) - self.nb=nb - nb.add('TexteComm', tab_text='Texte Commentaire') - nb.add('Commande', tab_text='Nouvelle Commande') - nb.add('Commentaire',tab_text='Paramètre/Commentaire') - self.makeCOMMPage(nb.page("TexteComm")) - self.makeCommandePage(nb.page("Commande")) - self.makeParamCommentPage_for_etape(nb.page("Commentaire")) - nb.tab('TexteComm').focus_set() - self.enlevebind() - self.creebind() - nb.setnaturalsize() - - def makeCOMMPage(self,page): - """ - Crée la page qui permet d'afficher et d'éditer le texte du commentaire - """ - self.frame_valeur = Frame(page) - self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw') - self.widget_text = Pmw.ScrolledText(self.frame_valeur, - borderframe=1, - labelpos='n', - label_text = 'Texte du commentaire\n ') - self.widget_text.pack(side='top',expand=1,fill='both') - self.widget_text.configure(hscrollmode='dynamic', - vscrollmode='dynamic') - self.make_buttons() - self.display_valeur() - - def make_buttons(self): - """ - Crée les boutons du panneau - """ - #self.bouton_sup.place_forget() - #self.bouton_doc.place_forget() - #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14) - #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14) - - #self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center') - #self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center') - #self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center') - - self.bouton_sup.pack_forget() - self.bouton_doc.pack_forget() - self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur) - self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur) - - self.bouton_val.pack(side='left',padx=5, pady=5) - self.bouton_ann.pack(side='left',padx=5, pady=5) - self.bouton_sup.pack(side='right',padx=5, pady=5) - - def change_valeur(self): - """ - Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du commentaire - """ - if self.parent.modified == 'n' : self.parent.init_modif() - new_valeur = self.widget_text.get() - self.node.item.set_valeur(new_valeur) - self.node.update() - - def display_valeur(self): - """ - Affiche dans self.widget_text la valeur de l'objet commentaire - (annule d'éventuelles modifications faite par l'utilisateur) - """ - t=self.node.item.get_valeur() - try: - self.widget_text.settext(unicode(t)) - except: - # Si probleme avec unicode - self.widget_text.settext(t) - -class COMMTreeItem(Objecttreeitem.ObjectTreeItem): - panel = COMMPanel - - def init(self): - self.setfunction = self.set_valeur - - def GetIconName(self): - """ - Retourne le nom de l'icône associée au noeud qui porte self, - dépendant de la validité de l'objet - NB : un commentaire est toujours valide ... - """ - return "ast-white-percent" - - def GetLabelText(self): - """ Retourne 3 valeurs : - - le texte à afficher dans le noeud représentant l'item - - la fonte dans laquelle afficher ce texte - - la couleur du texte - """ - return 'commentaire',Fonte_Commentaire,None - - def get_valeur(self): - """ - Retourne la valeur de l'objet Commentaire cad son texte - """ - return self.object.get_valeur() or '' - - def GetText(self): - texte = self.object.valeur - texte = string.split(texte,'\n')[0] - if len(texte) < 25 : - return texte - else : - return texte[0:24] - - def set_valeur(self,valeur): - """ - Afefcte valeur à l'objet COMMENTAIRE - """ - self.object.set_valeur(valeur) - - def GetSubList(self): - """ - Retourne la liste des fils de self - """ - return [] - - - def get_objet_commentarise(self): - """ - La méthode get_objet_commentarise() de la classe compocomm.COMMTreeItem - surcharge la méthode get_objet_commentarise de la classe Objecttreeitem.ObjectTreeItem - elle a pour but d'empecher l'utilisateur final de commentariser un commentaire. - """ - raise Exception( 'Citoyen : tu peux "commentariser" une commande MAIS PAS UN COMMENTAIRE' ) - -import Extensions -treeitem =COMMTreeItem -objet = Extensions.commentaire.COMMENTAIRE diff --git a/Editeur/compocommandecomm.py b/Editeur/compocommandecomm.py deleted file mode 100644 index bbc3a47a..00000000 --- a/Editeur/compocommandecomm.py +++ /dev/null @@ -1,182 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -import traceback -from Tkinter import * -import Pmw -import string -from widgets import showerror - -import Objecttreeitem -import panels -import fontes - -Fonte_Commentaire = fontes.standard_italique - -class COMMANDE_COMMPanel(panels.OngletPanel): - """ - Classe servant à définir le panel associé à une commande commentarisée - """ - def init(self): - """ - Initialise les frame des panneaux contextuels relatifs à une commande commentarisée - """ - panneau=Frame(self) - panneau.pack(expand=1,fill='both') - self.make_buttons() - self.makeCOMMPage(panneau) - self.enlevebind() - - def makeCOMMPage(self,page): - """ - Crée la page qui permet d'afficher et d'éditer le texte de la commande commentarisée - """ - self.frame_valeur = Frame(page) - self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw') - self.widget_text = Pmw.ScrolledText(self.frame_valeur, - borderframe=1, - labelpos='n', - label_text = 'Texte de la commande\n ') - self.widget_text.pack(side='top',expand=1,fill='both') - self.widget_text.configure(hscrollmode='dynamic', - vscrollmode='dynamic') - self.display_valeur() - - def make_buttons(self): - """ - Crée les boutons du panneau - """ - #self.bouton_sup.place_forget() - #self.bouton_doc.place_forget() - #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14) - #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14) - #self.bouton_unc = Button(self.fr_but,text='Décommentariser',command=self.uncomment,width=14) - - #self.bouton_val.place(relx=0.1,rely=0.5,relheight=1,relwidth=0.20,anchor='center') - #self.bouton_ann.place(relx=0.30,rely=0.5,relheight=1,relwidth=0.20,anchor='center') - #self.bouton_sup.place(relx=0.50,rely=0.5,relheight=1,relwidth=0.20,anchor='center') - #self.bouton_unc.place(relx=0.75,rely=0.5,relheight=1,relwidth=0.25,anchor='center') - - self.bouton_sup.pack_forget() - self.bouton_doc.pack_forget() - self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur) - self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur) - self.bouton_unc = Button(self.fr_but,text='Décommentariser',command=self.uncomment) - self.bouton_val.pack(side='left',padx=5, pady=5) - self.bouton_ann.pack(side='left',padx=5, pady=5) - self.bouton_sup.pack(side='left',padx=5, pady=5) - self.bouton_unc.pack(side='right',padx=5, pady=5) - - def change_valeur(self): - """ - Stocke la nouvelle valeur donnée par l'utilisateur comme valeur de la commande commentarisée - """ - if self.parent.modified == 'n' : self.parent.init_modif() - new_valeur = self.widget_text.get() - self.node.item.set_valeur(new_valeur) - self.node.update() - - def display_valeur(self): - """ - Affiche dans self.widget_text la valeur de la commande commentarisée - (annule d'éventuelles modifications faite par l'utilisateur) - """ - self.widget_text.settext(self.node.item.get_valeur()) - - def uncomment(self): - """ - Réalise la décommentarisation de self - """ - try: - pos=self.node.parent.children.index(self.node) - commande,nom = self.node.item.uncomment() - self.node.parent.children[pos].select() - except Exception,e: - showerror("Erreur !",str(e)) - return - #self.parent.appli.bureau.JDCDisplay_courant.ReplaceObjectNode(self.node,commande,nom) - -class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem): - panel = COMMANDE_COMMPanel - - def init(self): - self.setfunction = self.set_valeur - - def GetIconName(self): - """ - Retourne le nom de l'icône associée au noeud qui porte self, - dépendant de la validité de l'objet - NB : une commande commentarisée est toujours valide ... - """ - if self.isvalid(): - return "ast-green-percent" - else: - return "ast-red-percent" - - def GetLabelText(self): - """ Retourne 3 valeurs : - - le texte à afficher dans le noeud représentant l'item - - la fonte dans laquelle afficher ce texte - - la couleur du texte - """ - return 'commande commentarisée',Fonte_Commentaire,None - - def get_valeur(self): - """ - Retourne la valeur de la commande commentarisée cad son texte - """ - return self.object.get_valeur() or '' - - def GetText(self): - texte = self.object.valeur - texte = string.split(texte,'\n')[0] - if len(texte) < 25 : - return texte - else : - return texte[0:24] - - def set_valeur(self,valeur): - """ - Afefcte valeur à l'objet commande commentarisée - """ - self.object.set_valeur(valeur) - - def GetSubList(self): - """ - Retourne la liste des fils de self - """ - return [] - - def uncomment(self): - """ - Demande à l'objet commande commentarisée de se décommentariser. - Si l'opération s'effectue correctement, retourne l'objet commande - et éventuellement le nom de la sd produite, sinon lève une exception - """ - try: - commande,nom = self.object.uncomment() - except Exception,e: - traceback.print_exc() - raise e - return commande,nom - -import Accas -treeitem =COMMANDE_COMMTreeItem -objet = Accas.COMMANDE_COMM diff --git a/Editeur/compoerror.py b/Editeur/compoerror.py deleted file mode 100644 index 814782c8..00000000 --- a/Editeur/compoerror.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -from Tkinter import Label,Button - -#Modules Eficas -from Noyau.N_OBJECT import ErrorObj -import Objecttreeitem -import panels - -class ERRORPanel(panels.Panel_Inactif): - def creer_texte(self): - texte = """Le noeud sélectionné correspond à un objet erroné """ - label = Label(self,text=texte,justify='center') - label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center') - bouton = Button(self,text = "Supprimer", command=self.supprimer) - bouton.place(relx=0.5,rely=0.5,anchor='center') - -class ERRORTreeItem(Objecttreeitem.AtomicObjectTreeItem): - panel = ERRORPanel - def GetIconName(self): - return "ast-red-ball" - - -treeitem =ERRORTreeItem -objet = ErrorObj - diff --git a/Editeur/compofact.py b/Editeur/compofact.py deleted file mode 100644 index 51b36738..00000000 --- a/Editeur/compofact.py +++ /dev/null @@ -1,150 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -import Pmw -import Objecttreeitem -import panels - -class FACTPanel(panels.OngletPanel) : - def init(self) : - nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) - nb.pack(fill = 'both', expand = 1) - self.nb=nb - nb.add('Mocles', tab_text='Ajouter mots-clés') - panneau=Pmw.PanedWidget(nb.page("Mocles"), - orient='horizontal') - panneau.add('left',min=0.4,max=0.6,size=0.5) - panneau.add('right',min=0.4,max=0.6,size=0.5) - panneau.pack(expand=1,fill='both') - self.makeMoclesPage(panneau.pane('left')) - self.makeReglesPage(panneau.pane('right')) - nb.tab('Mocles').focus_set() - nb.setnaturalsize() - self.enlevebind() - self.creebind() - self.affiche() - -import treewidget -class Node(treewidget.Node): - def doPaste(self,node_selected): - objet_a_copier = self.item.get_copie_objet() - child=node_selected.doPaste_MCF(objet_a_copier) - return child - - def doPaste_MCF(self,objet_a_copier): - child = self.parent.append_child(objet_a_copier, - pos=self.item, - retour='oui') - return child - - -class FACTTreeItem(Objecttreeitem.ObjectTreeItem): - panel = FACTPanel - itemNode=Node - - def IsExpandable(self): - return 1 - - def GetText(self): - return '' - - def GetLabelText(self): - """ Retourne 3 valeurs : - - le texte à afficher dans le noeud représentant l'item - - la fonte dans laquelle afficher ce texte - - la couleur du texte - """ - # None --> fonte et couleur par défaut - return self.object.getlabeltext(),None,None - - def isvalid(self): - return self.object.isvalid() - - def iscopiable(self): - return 1 - - def GetIconName(self): - if self.object.isvalid(): - return "ast-green-los" - elif self.object.isoblig(): - return "ast-red-los" - else: - return "ast-yel-los" - - def keys(self): - keys=self.object.mc_dict.keys() - return keys - - def GetSubList(self): - """ - Reactualise la liste des items fils stockes dans self.sublist - """ - liste=self.object.mc_liste - sublist=[None]*len(liste) - # suppression des items lies aux objets disparus - for item in self.sublist: - old_obj=item.getObject() - if old_obj in liste: - pos=liste.index(old_obj) - sublist[pos]=item - else: - pass # objets supprimes ignores - # ajout des items lies aux nouveaux objets - pos=0 - for obj in liste: - if sublist[pos] is None: - # nouvel objet : on cree un nouvel item - def setfunction(value, object=obj): - object.setval(value) - item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction) - sublist[pos]=item - pos=pos+1 - - self.sublist=sublist - return self.sublist - - def additem(self,name,pos): - #print "compofact.additem",name,pos - objet = self.object.addentite(name,pos) - return objet - - def suppitem(self,item) : - """ - Cette methode a pour fonction de supprimer l'item passé en argument - des fils de l'item FACT qui est son pere - - item = item du MOCLE à supprimer du MOCLE père - - item.getObject() = MCSIMP ou MCBLOC - """ - itemobject=item.getObject() - if itemobject.isoblig() : - self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ') - return 0 - - if self.object.suppentite(itemobject): - message = "Mot-clé " + itemobject.nom + " supprimé" - self.appli.affiche_infos(message) - return 1 - else: - self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé') - return 0 - -import Accas -objet = Accas.MCFACT -treeitem = FACTTreeItem diff --git a/Editeur/compoformule.py b/Editeur/compoformule.py deleted file mode 100644 index d134713b..00000000 --- a/Editeur/compoformule.py +++ /dev/null @@ -1,411 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" -Ce module contient les classes permettant de définir les objets graphiques -représentant un objet de type FORMULE, cad le panneau et l'item de l'arbre -d'EFICAS -""" - -# import modules Python -from Tkinter import * -import Pmw -import string - -# import modules EFICAS -import widgets -import panels -import fontes -import compooper - -Fonte_TITRE = fontes.standard_gras_souligne - - -class FORMULEPanel(panels.OngletPanel): - """ - Classe servant à construire le panneau associé à un paramètre. - C'est au moyen de ce panneau que l'utilisateur peut accéder - aux nom et valeur du paramètre en vue éventuellement de les - modifier. - """ - - def init(self): - nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) - nb.pack(fill = 'both', expand = 1) - self.nb=nb - nb.add('Formule', tab_text='Définition Formule') - nb.add('Commande', tab_text='Nouvelle Commande') - nb.add('Commentaire',tab_text='Paramètre/Commentaire') - self.makeFormulePage(nb.page("Formule")) - self.makeCommandePage(nb.page("Commande")) - self.makeParamCommentPage_for_etape(nb.page("Commentaire")) - nb.tab('Formule').focus_set() - self.enlevebind() - self.creebind() - nb.setnaturalsize() - - def makeFormulePage(self,page): - """ - Crée la page qui permet d'afficher et d'éditer le texte de la FORMULE - """ - self.frame_valeur = Frame(page) - self.frame_valeur.pack(fill='both',expand=1) - #self.frame_valeur.place(relwidth=0.95,relheight=0.95,relx=0.05,rely=0.05,anchor='nw') - #self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw') - # affichage du titre du panneau - self.titre = StringVar() - self.titre.set("FORMULE "+self.node.item.get_nom()) - - self.entry_nom = Entry(self.frame_valeur) - #Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.,anchor='n') - Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).grid(row=0,columnspan=2,padx=5,pady=5) - # création des labels et entries associés aux nom, type retourné, arguments et corps de la FORMULE - - #Label(self.frame_valeur,text= 'Nom de la formule : ').place(relx=0.,rely=0.1) - Label(self.frame_valeur,text= 'Nom de la formule : ').grid(row=1,sticky=W,padx=5,pady=5) - #Label(self.frame_valeur,text= 'Arguments : ').place(relx=0.,rely=0.40) - Label(self.frame_valeur,text= 'Arguments : ').grid(row=2,sticky=W,padx=5,pady=5) - self.entry_arg = Entry(self.frame_valeur) - #Label(self.frame_valeur,text= 'Expression : ').place(relx=0.,rely=0.65) - Label(self.frame_valeur,text= 'Expression : ').grid(row=4,sticky=W,padx=5,pady=5) - self.entry_exp = Entry(self.frame_valeur) - - # binding sur les entries - self.entry_nom.bind("",self.verif_nom) - self.entry_nom.bind("",self.verif_nom) - self.entry_arg.bind("",self.verif_arguments) - self.entry_arg.bind("",self.verif_arguments) - self.entry_exp.bind("",self.verif_corps) - self.entry_exp.bind("",self.verif_corps) - # affichage des entries - #self.entry_nom.place(relx=0.35,rely=0.10,relwidth=0.2) - self.entry_nom.grid(row=1,column=1,sticky=W,padx=5,pady=5) - #self.entry_arg.place(relx=0.35,rely=0.40,relwidth=0.4) - self.entry_arg.grid(row=2,column=1,sticky=W,padx=5,pady=5) - - # affichage d'une phrase d'aide pour les arguments - aide = """Entrer les arguments sous la forme -de VARIABLES séparées par des virgules (,) -Exemple X,Y,Z """ - #Label(self.frame_valeur,text=aide, justify="l").place(relx=0.5,rely=0.47,anchor='n') - Label(self.frame_valeur,text=aide, justify="l").grid(row=3,columnspan=2,padx=5,pady=5) - - #self.entry_exp.place(relx=0.35,rely=0.65,relwidth=0.60) - self.entry_exp.grid(row=4,column=1,sticky=W,padx=5,pady=5) - # affichage d'une phrase d'aide pour l'expression - aide = """Un retour de chariot dans une zone de saisie vous permet de vérifier si -la valeur que vous avez entrée est valide. -Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles -valeurs seront effectivement prises en compte.""" - #Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.75,anchor='n') - Label(self.frame_valeur,text=aide).grid(row=5,columnspan=2,padx=5,pady=5) - self.frame_valeur.columnconfigure(1,weight=1) - - # affichage des nom, type retourné, arguments et corps de la FORMULE - self.display_valeur() - # affichage des boutons - self.make_buttons() - # entry_nom prend le focus - self.entry_nom.focus() - - def make_buttons(self): - """ - Crée les boutons du panneau - """ - #self.bouton_sup.place_forget() - #self.bouton_doc.place_forget() - #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14) - #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14) - - #self.bouton_val.place(relx=0.15,rely=0.5,relheight=0.8,anchor='center') - #self.bouton_ann.place(relx=0.40,rely=0.5,relheight=0.8,anchor='center') - #self.bouton_sup.place(relx=0.65,rely=0.5,relheight=0.8,anchor='center') - #self.bouton_doc.place(relx=0.90,rely=0.5,relheight=0.8,anchor='center') - - self.bouton_sup.pack_forget() - self.bouton_doc.pack_forget() - self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur) - self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur) - - self.bouton_val.pack(side='left',padx=5, pady=5) - self.bouton_ann.pack(side='left',padx=5, pady=5) - self.bouton_sup.pack(side='left',padx=5, pady=5) - self.bouton_doc.pack(side='right',padx=5, pady=5) - - def change_valeur(self): - """ - Stocke la nouvelle FORMULE décrite par l'utilisateur - """ - if self.parent.modified == 'n' : self.parent.init_modif() - # on récupère les nouveaux nom, type retourné, arguments et corps de la FORMULE - new_nom = self.entry_nom.get() - new_typ="REEL" - new_arg = self.entry_arg.get() - new_exp = self.entry_exp.get() - self.verif_arguments() - self.verif_corps() - # on essaie de les stocker - test,erreur = self.node.item.save_formule(new_nom,new_typ,new_arg,new_exp) - if test : - # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage - self.node.update() - self.display_valeur() - self.parent.appli.affiche_infos("FORMULE %s modifiée" %self.node.item.get_nom()) - else: - # la formule est incorrecte : on affiche les erreurs - widgets.showerror("Formule incorrecte",erreur) - self.parent.appli.affiche_infos("FORMULE %s non modifiée" %self.node.item.get_nom()) - - def display_valeur(self): - """ - Affiche dans self.widget_text de la valeur de l'objet FORMULE - (annule d'éventuelles modifications faite par l'utilisateur) - """ - # on efface tout texte affiché dans les entries - self.entry_nom.delete(0,END) - self.entry_arg.delete(0,END) - self.entry_exp.delete(0,END) - # on rafraîchit le titre du panneau - self.titre.set('FORMULE '+self.node.item.get_nom()) - # on insére les nouveaux nom, type retourné, arguments et corps de la FORMULE - nom = self.node.item.get_nom() - if nom != '': - self.entry_nom.insert(END,nom) - args = self.node.item.get_args() - if args: - texte_args="" - for i in args : - if texte_args != "" : - texte_args = texte_args +"," - texte_args=texte_args + i - self.entry_arg.insert(END,texte_args) - corps = self.node.item.get_corps() - if corps : - self.entry_exp.insert(END,self.node.item.get_corps()) - - def verif_nom(self,event=None): - """ - Lance la vérification du nom présent dans entry_nom - """ - nom = self.entry_nom.get() - if nom == '': - test,erreur = 0,"Aucun nom fourni !" - else: - test,erreur = self.node.item.verif_nom(nom) - if not test: - widgets.showerror("Nom invalide",erreur) - self.entry_nom.focus() - self.entry_nom.selection_range(0,END) - self.parent.appli.affiche_infos("%s n'est pas un nom valide pour une FORMULE" %nom) - else: - self.parent.appli.affiche_infos("%s est un nom valide pour une FORMULE" %nom) - self.entry_arg.focus() - - def verif_arguments(self,event=None): - """ - Lance la vérification des arguments présents dans entry_arg - """ - arguments = self.entry_arg.get() - if arguments == '' : - test,erreur = 0,"Aucun argument fourni" - else: - test,erreur = self.node.item.verif_arguments(arguments) - if not test: - widgets.showerror("Argument(s) invalide(s)",erreur) - self.entry_arg.focus() - self.entry_arg.selection_range(0,END) - self.parent.appli.affiche_infos("Argument(s) invalide(s) pour une FORMULE") - else: - self.parent.appli.affiche_infos("Argument(s) valide(s) pour une FORMULE") - self.entry_exp.focus() - - def verif_corps(self,event=None): - """ - Lance la vérification du corps de formule présent dans entry_exp - """ - new_nom = self.entry_nom.get() - new_typ="REEL" - new_arg = self.entry_arg.get() - new_exp = self.entry_exp.get() - if new_exp == '': - test,erreur = 0,"Aucune expression fournie !" - else: - test,erreur = self.node.item.verif_formule_python((new_nom,new_typ,new_arg,new_exp)) - - if not test: - widgets.showerror("Corps de FORMULE invalide",erreur) - self.entry_exp.focus() - self.entry_exp.selection_range(0,END) - self.parent.appli.affiche_infos("Corps de FORMULE invalide") - else: - self.parent.appli.affiche_infos("Corps de FORMULE valide") - -class FORMULETreeItem(compooper.EtapeTreeItem): - """ - Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS - qui représente la FORMULE - """ - panel = FORMULEPanel - - def init(self): - self.setfunction = self.set_valeur - -# --------------------------------------------------------------------------- -# API de FORMULE pour l'arbre -# --------------------------------------------------------------------------- - def GetSubList(self): - """ - Retourne la liste des fils de self - On considère que FORMULE n'a pas de fils - --> modification par rapport à MACRO classique - """ - # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE - # de façon traditionnelle - return [] - - def GetIconName(self): - """ - Retourne le nom de l'icône à afficher dans l'arbre - Ce nom dépend de la validité de l'objet - """ - if self.object.isactif(): - self.object.state="modified" - if self.object.isvalid(): - return "ast-green-square" - else: - return "ast-red-square" - else: - return "ast-white-text" - - def GetLabelText(self): - """ Retourne 3 valeurs : - - le texte à afficher dans le noeud représentant l'item - - la fonte dans laquelle afficher ce texte - - la couleur du texte - """ - if self.object.isactif(): - # None --> fonte et couleur par défaut - return self.labeltext,None,None - else: - return self.labeltext,fontes.standard_italique,None - -# --------------------------------------------------------------------------- -# Méthodes permettant la modification et la lecture des attributs -# du paramètre = API graphique de la FORMULE pour Panel et EFICAS -# --------------------------------------------------------------------------- - - def get_nom(self): - """ - Retourne le nom de la FORMULE - """ - return self.object.get_nom() - - def get_type(self): - """ - Retourne le type de la valeur retournée par la FORMULE - """ - return self.object.type_retourne - - def get_args(self): - """ - Retourne les arguments de la FORMULE - """ - args="" - for mot in self.object.mc_liste: - if mot.nom == 'NOM_PARA': - args=mot.valeur - break - if args : - if args[0] == "(" and args[-1] ==")": - args=args[1:-1] - # transforme en tuple si ce n est pas déjà le casa - try : - args=string.split(args,',') - except : - pass - return args - - def get_corps(self): - """ - Retourne le corps de la FORMULE - """ - corps="" - for mot in self.object.mc_liste: - if mot.nom == 'VALE': - corps=mot.valeur - break - return corps - - - def get_liste_types_autorises(self): - """ - Retourne la liste des types autorises pour les valeurs de sortie - d'une FORMULE - """ - return self.object.l_types_autorises - - def save_formule(self,new_nom,new_typ,new_arg,new_exp): - """ - Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE - licite : - - si oui, stocke ces paramètres comme nouveaux paramètres de la - FORMULE courante et retourne 1 - - si non, laisse les paramètres anciens de la FORMULE inchangés et - retourne 0 - """ - test,erreur = self.object.verif_formule_python(formule=(new_nom,new_typ,new_arg, - new_exp)) - if test : - # la formule est bien correcte : on sauve les nouveaux paramètres - test=self.object.update_formule_python(formule=(new_nom,new_typ,new_exp,new_arg)) - return test,erreur - -# --------------------------------------------------------------------------- -# Accès aux méthodes de vérification de l'objet FORM_ETAPE -# --------------------------------------------------------------------------- - - def verif_nom(self,nom): - """ - Lance la vérification du nom passé en argument - """ - return self.object.verif_nom(nom) - - def verif_arguments(self,arguments): - """ - Lance la vérification des arguments passés en argument - """ - return self.object.verif_arguments('('+arguments+')') - - def verif_formule(self,formule): - """ - Lance la vérification de FORMULE passée en argument - """ - return self.object.verif_formule(formule=formule) - - - def verif_formule_python(self,formule): - """ - Lance la vérification de FORMULE passée en argument - """ - return self.object.verif_formule_python(formule=formule) - -import Accas -treeitem =FORMULETreeItem -objet = Accas.FORM_ETAPE diff --git a/Editeur/compojdc.py b/Editeur/compojdc.py deleted file mode 100644 index 8572c13f..00000000 --- a/Editeur/compojdc.py +++ /dev/null @@ -1,168 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -import Pmw -import Objecttreeitem -import panels - -from widgets import ListeChoix - -class JDCPanel(panels.OngletPanel): - def init(self): - """ Initialise les frame des panneaux contextuels relatifs à un JDC """ - panneau=Pmw.PanedWidget(self,orient='horizontal') - panneau.add('left',min=0.4,max=0.6,size=0.5) - panneau.add('right',min=0.4,max=0.6,size=0.5) - panneau.pack(expand=1,fill='both') - self.bouton_com.pack_forget() - self.makeJDCPage(panneau.pane('left')) - self.makeReglesPage(panneau.pane('right')) - self.enlevebind() - - def makeReglesPage(self,page) : - regles = [] - regles = self.node.item.get_regles() - texte_regles = [] - l_regles_en_defaut=[] - if len(regles) > 0: - l_noms_etapes = self.node.item.get_l_noms_etapes() - i = 0 - for regle in regles : - texte_regles.append(regle.gettext()) - texte,test = regle.verif(l_noms_etapes) - if test == 0 : l_regles_en_defaut.append(i) - i = i+1 - Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles") - Liste.affiche_liste() - # aide associée au panneau - bulle_aide="""Ce panneau contient la liste des règles qui s'appliquent à l'objet - en cours d'édition. - - en noir : règles valides - - en rouge : règles violées""" - Liste.MCbox.bind("", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - Liste.MCbox.bind("",self.parent.appli.efface_aide) - -import treewidget -class Node(treewidget.Node): - def doPaste_Commande(self,objet_a_copier): - """ - Réalise la copie de l'objet passé en argument qui est nécessairement - une commande - """ - #child = self.item.append_child(objet_a_copier,pos='first') - child = self.append_child(objet_a_copier,pos='first',retour='oui') - #if child is None : return 0 - return child - - -class JDCTreeItem(Objecttreeitem.ObjectTreeItem): - panel = JDCPanel - itemNode=Node - - def IsExpandable(self): - return 1 - - def GetText(self): - return " " - - def GetLabelText(self): - # None --> fonte et couleur par défaut - return self.object.nom,None,None - - def get_jdc(self): - """ - Retourne l'objet pointé par self - """ - return self.object - - def GetIconName(self): - if self.object.isvalid(): - return "ast-green-square" - else: - return "ast-red-square" - - def keys(self): - if self.object.etapes_niveaux != []: - return range(len(self.object.etapes_niveaux)) - else: - return range(len(self.object.etapes)) - - def additem(self,name,pos): - cmd = self._object.addentite(name,pos) - return cmd - - def suppitem(self,item) : - # item = item de l'ETAPE à supprimer du JDC - # item.getObject() = ETAPE ou COMMENTAIRE - # self.object = JDC - itemobject=item.getObject() - if self.object.suppentite(itemobject): - if itemobject.nature == "COMMENTAIRE" : - message = "Commentaire supprimé" - else : - message = "Commande " + itemobject.nom + " supprimée" - self.appli.affiche_infos(message) - return 1 - else: - self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet") - return 0 - - def GetSubList(self): - """ - Retourne la liste des items fils de l'item jdc. - Cette liste est conservee et mise a jour a chaque appel - """ - if self.object.etapes_niveaux != []: - liste = self.object.etapes_niveaux - else: - liste = self.object.etapes - sublist=[None]*len(liste) - # suppression des items lies aux objets disparus - for item in self.sublist: - old_obj=item.getObject() - if old_obj in liste: - pos=liste.index(old_obj) - sublist[pos]=item - else: - pass # objets supprimes ignores - # ajout des items lies aux nouveaux objets - pos=0 - for obj in liste: - if sublist[pos] is None: - # nouvel objet : on cree un nouvel item - item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj) - sublist[pos]=item - pos=pos+1 - - self.sublist=sublist - return self.sublist - - def get_l_noms_etapes(self): - """ Retourne la liste des noms des étapes de self.object""" - return self.object.get_l_noms_etapes() - - def get_liste_cmd(self): - #print "get_liste_cmd",self.object.niveau.definition - listeCmd = self.object.niveau.definition.get_liste_cmd() - return listeCmd - -import Accas -treeitem =JDCTreeItem -objet = Accas.JDC diff --git a/Editeur/compomacro.py b/Editeur/compomacro.py deleted file mode 100644 index ba423070..00000000 --- a/Editeur/compomacro.py +++ /dev/null @@ -1,311 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import os,sys,string -import types -import Tkinter -import Pmw -import traceback - -# Modules Eficas -import Objecttreeitem -import panels -import fontes -import compooper -import convert -from widgets import askopenfilename -from widgets import Fenetre,FenetreYesNo -from widgets import showinfo,showerror - -# -__version__="$Name: $" -__Id__="$Id: compomacro.py,v 1.25.10.1 2006/11/15 17:59:30 cchris Exp $" -# - -class MACROPanel(panels.OngletPanel): - def init(self): - nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) - nb.pack(fill = 'both', expand = 1) - self.nb=nb - nb.add('Mocles', tab_text='Ajouter mots-clés') - typsd=self.node.item.object.get_type_produit() - ficini = self.node.item.wait_fichier_init() - if typsd != None: - nb.add('Concept', tab_text='Nommer concept') - if ficini == 1: - nb.add('Fichierinit',tab_text = 'Fichier %s' %self.node.item.get_nom()) - nb.add('Commande', tab_text='Nouvelle Commande') - nb.add('Commentaire',tab_text='Paramètre/Commentaire') - panneau=Pmw.PanedWidget(nb.page("Mocles"), - orient='horizontal') - panneau.add('left',min=0.4,max=0.6,size=0.5) - panneau.add('right',min=0.4,max=0.6,size=0.5) - panneau.pack(expand=1,fill='both') - self.makeCommandePage(nb.page("Commande")) - if typsd != None: - self.makeConceptPage(nb.page("Concept")) - if ficini == 1 : - self.makeFichierPage(nb.page('Fichierinit')) - self.makeMoclesPage(panneau.pane('left')) - self.makeReglesPage(panneau.pane('right')) - self.makeParamCommentPage_for_etape(nb.page("Commentaire")) - nb.tab('Mocles').focus_set() - nb.setnaturalsize() - self.enlevebind() - self.creebind() - self.affiche() - - def makeFichierPage(self,page): - """ - Affiche la page d'onglet correspondant au changement du fichier - dont a besoin la macro - """ - titre = Tkinter.Label(page,text="La commande %s requiert un fichier " %self.node.item.get_nom()) - titre.place(relx=0.5,rely=0.2,anchor='center') - frameMain=Tkinter.Frame(page) - frameMain.place(relx=0.5,rely=0.4,anchor='center',relwidth=1.) - Tkinter.Label(frameMain,text="Fichier :").pack(side='left',padx=5) - self.entry = Tkinter.Entry(frameMain,relief='sunken',bg='white') - self.entry.pack(side='left',padx=5,fill='x',expand=1) - frameButtons=Tkinter.Frame(page) - but1=Tkinter.Button(frameButtons,text='Valider',command = self.change_fichier_init) - but2=Tkinter.Button(frameButtons,text='Browse',command = self.browse_fichier_init) - but3=Tkinter.Button(frameButtons,text='Annuler',command = self.annule_fichier_init) - but1.grid(row=0,column=0,padx=5,pady=5) - but2.grid(row=0,column=1,padx=5,pady=5) - but3.grid(row=0,column=2,padx=5,pady=5) - frameButtons.place(relx=0.5,rely=0.6,anchor='center') - - if hasattr(self.node.item.object,'fichier_ini'): - if self.node.item.object.fichier_ini : - self.entry.insert(0,self.node.item.object.fichier_ini) - self.entry.focus() - - def convert_file(self,file): - """ - Methode pour convertir le fichier file dans le format courant - """ - format=self.parent.appli.format_fichier.get() - if convert.plugins.has_key(format): - # Le convertisseur existe on l'utilise - p=convert.plugins[format]() - p.readfile(file) - text=p.convert('execnoparseur') - if not p.cr.estvide(): - self.parent.appli.affiche_infos("Erreur à la conversion") - Fenetre(self, - titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier", - texte = str(p.cr)) - return None - return text - else: - # Il n'existe pas c'est une erreur - self.parent.appli.affiche_infos("Type de fichier non reconnu") - showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier") - return None - - def change_fichier_init(self,event=None): - """ - Effectue le changement de fichier d'initialisation s'il est valide - """ - new_fic = self.entry.get() - if not os.path.isfile(new_fic) : - showinfo("Fichier introuvable","Le fichier que vous avez saisi\n"+ - "n'est pas un nom de fichier valide !") - self.parent.appli.affiche_infos("Fichier introuvable") - return - # On convertit le fichier - text=self.convert_file(new_fic) - # Si probleme a la lecture-conversion on arrete le traitement - if not text: - return - - try: - self.node.item.object.change_fichier_init(new_fic,text) - self.parent.appli.affiche_infos("Fichier %s modifié" %self.node.item.get_nom()) - except: - # Erreurs lors de l'evaluation de text dans un JDC auxiliaire - self.parent.appli.affiche_infos("Fichier invalide") - l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1]) - f=FenetreYesNo(self.parent.appli,titre="Fichier invalide : voulez vous retablir l ancien fichier ?", - texte="Erreur dans l'interprétation du nouveau fichier ...\n\n"+string.join(l), - yes="Retablir",no="Changer") - f.wait() - reponse=f.result - if reponse: - # On retablit l'ancien fichier - self.entry.delete(0,Tkinter.END) - self.node.item.object.restore_fichier_init() - self.parent.appli.affiche_infos("Fichier invalide ... Ancien fichier restauré") - fic=self.node.item.object.fichier_ini - if fic: - self.entry.insert(0,fic) - else: - self.node.item.object.force_fichier_init() - self.parent.appli.affiche_infos("Fichier invalide ... Nouveau fichier mémorisé") - - def annule_fichier_init(self,event=None): - """ Restaure dans self.entry le nom de fichier_init""" - self.entry.delete(0,Tkinter.END) - if self.node.item.object.fichier_ini: - self.entry.insert(0,self.node.item.object.fichier_ini) - - def browse_fichier_init(self,event=None): - """ - Propose à l'utilisateur une Bsf et retourne le fichier - sélectionné dans self.entry - """ - file = askopenfilename(title="Choix du fichier %s" %self.node.item.get_nom()) - if file : - self.entry.delete(0,Tkinter.END) - self.entry.insert(0,file) - - def update_panel(self): - if hasattr(self,"entry"): - self.annule_fichier_init() - -class MACROTreeItem(compooper.EtapeTreeItem): - """ Cette classe hérite d'une grande partie des comportements - de la classe compooper.EtapeTreeItem - """ - panel=MACROPanel - -class INCLUDETreeItemBase(MACROTreeItem): - rmenu_specs=[("View","makeView"), - ("Edit","makeEdit"), - ] - - def __init__(self,appli, labeltext, object, setfunction): - MACROTreeItem.__init__(self,appli, labeltext, object, setfunction) - - def iscopiable(self): - """ - Retourne 1 si l'objet est copiable, 0 sinon - """ - return 0 - - def makeEdit(self,appli,node): - #print "makeEdit",self.object,self.object.nom - #print "makeEdit",self.object.jdc_aux,self.object.jdc_aux.nom - #print "makeEdit",self.object.jdc_aux.context_ini - if self.object.text_converted == 0: - # Le texte du fichier inclus n'a pas pu etre converti par le module convert - msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n" - msg=msg+self.object.text_error - Fenetre(self,titre="Include non editable",texte=msg,wrap='none') - return - - if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None: - #L'include n'est pas initialise - self.object.build_include(None,"") - - # On cree un nouvel onglet dans le bureau - appli.bureau.ShowJDC(self.object.jdc_aux,self.object.jdc_aux.nom, - label_onglet=None, - JDCDISPLAY=macrodisplay.MACRODISPLAY) - - def makeView(self,appli,node): - if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None: - showerror("Include vide", - "L'include doit etre correctement initialisé pour etre visualisé") - return - - nom=self.object.nom - if hasattr(self.object,'fichier_ini'): - if self.object.fichier_ini is None: - nom=nom+' '+"Fichier non défini" - else: - nom=nom+' '+self.object.fichier_ini - macdisp=macrodisplay.makeMacroDisplay(appli,self,nom) - -class INCLUDEPanel(MACROPanel): - def makeFichierPage(self,page): - """ - Affiche la page d'onglet correspondant au changement du fichier INCLUDE - """ - if not hasattr(self.node.item.object,'fichier_ini'): - titre = Tkinter.Label(page,text="L'INCLUDE n'a pas de fichier associé\nIl faut d'abord choisir un numero d'unité " ) - titre.place(relx=0.5,rely=0.5,anchor='center') - else: - MACROPanel.makeFichierPage(self,page) - -class INCLUDETreeItem(INCLUDETreeItemBase): - panel=INCLUDEPanel - -class POURSUITETreeItem(INCLUDETreeItemBase): - def makeEdit(self,appli,node): - if self.object.text_converted == 0: - # Le texte du fichier inclus n'a pas pu etre converti par le module convert - msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n" - msg=msg+self.object.text_error - Fenetre(self,titre="Poursuite non editable",texte=msg,wrap='none') - return - - if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None: - #La poursuite n'est pas initialisee - text="""DEBUT() -FIN()""" - self.object.build_poursuite(None,text) - - # On cree un nouvel onglet dans le bureau - appli.bureau.ShowJDC(self.object.jdc_aux,self.object.jdc_aux.nom, - label_onglet=None, - JDCDISPLAY=macrodisplay.MACRODISPLAY) - - def makeView(self,appli,node): - if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None: - showerror("Poursuite vide","Une POURSUITE doit etre correctement initialisée pour etre visualisée") - return - nom=self.object.nom - if hasattr(self.object,'fichier_ini'): - if self.object.fichier_ini is None: - nom=nom+' '+"Fichier non défini" - else: - nom=nom+' '+self.object.fichier_ini - macdisp=macrodisplay.makeMacroDisplay(appli,self,nom) - -class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase): - rmenu_specs=[("View","makeView"), - ] - def iscopiable(self): - """ - Retourne 1 si l'objet est copiable, 0 sinon - """ - return 1 - - -def treeitem(appli, labeltext, object, setfunction=None): - """ Factory qui retourne l'item adapté au type de macro : - INCLUDE, POURSUITE, MACRO - """ - if object.nom == "INCLUDE_MATERIAU": - return INCLUDE_MATERIAUTreeItem(appli, labeltext, object, setfunction) - elif object.nom == "INCLUDE": - return INCLUDETreeItem(appli, labeltext, object, setfunction) - elif object.nom == "POURSUITE": - return POURSUITETreeItem(appli, labeltext, object, setfunction) - else: - return MACROTreeItem(appli, labeltext, object, setfunction) - -import Accas -objet=Accas.MACRO_ETAPE - -import macrodisplay diff --git a/Editeur/compomclist.py b/Editeur/compomclist.py deleted file mode 100644 index ae92e03a..00000000 --- a/Editeur/compomclist.py +++ /dev/null @@ -1,225 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -import types -from Tkinter import * -import Pmw - -from Noyau.N_OBJECT import ErrorObj -import Objecttreeitem -import panels -import traceback - -class MCLISTPanel(panels.Panel): - def init(self): - test_ajout = self.node.item.ajout_possible() - nom_mcfact = self.node.item.get_nom() - if test_ajout: - texte = "Pour ajouter une autre occurrence du mot-clé facteur %s, cliquez ci-dessous" %nom_mcfact - else: - texte = "Vous ne pouvez pas ajouter une autre occurrence du mot-clé facteur %s ?" %nom_mcfact - self.label = Label(self,text = texte) - self.label.place(relx=0.5,rely=0.4,anchor='center') - if test_ajout: - self.but=Button(self,text="AJOUTER",command=self.ajout_occurrence) - self.but.place(relx=0.5,rely=0.6,anchor='center') - #Button(self,text="NON",command=None).place(relx=0.6,rely=0.6,anchor='center') - - def ajout_occurrence(self,event=None): - self.node.parent.append_child(self.node.item.get_nom()) - -import compofact -import compoerror -import treewidget - -class Node(treewidget.Node): - def doPaste(self,node_selected): - objet_a_copier = self.item.get_copie_objet() - child=node_selected.doPaste_MCF(objet_a_copier) - #print "doPaste",child - return child - - def doPaste_MCF(self,objet_a_copier): - if self.item.isMCList() : - # le noeud courant est une MCList - child = self.append_child(objet_a_copier,pos='first',retour='oui') - #child = self.parent.append_child(objet_a_copier,pos='first',retour='oui') - elif self.item.isMCFact() : - # le noeud courant est un MCFACT - if self.parent.item.isMCList(): - # le noeud selectionne est un MCFACT dans une MCList - child = self.parent.append_child(objet_a_copier, - pos=self.item, - retour='oui') - else: - # le noeud MCFACT selectionne n'est pas dans une MCList - child = self.parent.append_child(objet_a_copier,retour='oui') - else: - showinfo("Copie impossible", - "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !") - self.appli.affiche_infos("Copie refusée") - child=None - #print "doPaste_MCF",child - return child - -class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem): - """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets - du noyau Accas instances de la classe MCLIST. - Elle adapte ces objets pour leur permettre d'etre intégrés en tant que - noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py). - Cette classe délègue les appels de méthode et les accès - aux attributs à l'objet du noyau soit manuellement soit - automatiquement (voir classe Delegate et attribut object). - """ - itemNode=Node - - def init(self): - # Si l'objet Accas (MCList) a moins d'un mot cle facteur - # on utilise directement ce mot cle facteur comme delegue - self.updateDelegate() - - def updateDelegate(self): - if len(self._object) > 1: - self.setdelegate(self._object) - else: - self.setdelegate(self._object.data[0]) - - def panel(self,jdcdisplay,pane,node): - """ Retourne une instance de l'objet panneau associe a l'item (self) - Si la liste ne contient qu'un mot clé facteur, on utilise le panneau - FACTPanel. - Si la liste est plus longue on utilise le panneau MCLISTPanel. - """ - if len(self._object) > 1: - return MCLISTPanel(jdcdisplay,pane,node) - elif isinstance(self._object.data[0],ErrorObj): - return compoerror.ERRORPanel(jdcdisplay,pane,node) - else: - return compofact.FACTPanel(jdcdisplay,pane,node) - - def IsExpandable(self): - if len(self._object) > 1: - return Objecttreeitem.SequenceTreeItem.IsExpandable(self) - else: - return compofact.FACTTreeItem.IsExpandable(self) - - def GetSubList(self): - self.updateDelegate() - if len(self._object) <= 1: - self._object.data[0].alt_parent=self._object - return compofact.FACTTreeItem.GetSubList(self) - - liste=self._object.data - sublist=[None]*len(liste) - # suppression des items lies aux objets disparus - for item in self.sublist: - old_obj=item.getObject() - if old_obj in liste: - pos=liste.index(old_obj) - sublist[pos]=item - else: - pass # objets supprimes ignores - # ajout des items lies aux nouveaux objets - pos=0 - for obj in liste: - if sublist[pos] is None: - # nouvel objet : on cree un nouvel item - def setfunction(value, object=obj): - object=value - item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction) - sublist[pos]=item - #Attention : on ajoute une information supplementaire pour l'actualisation de - # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE - # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des - # informations de validite. alt_parent permet de remedier a ce defaut. - obj.alt_parent=self._object - pos=pos+1 - - self.sublist=sublist - return self.sublist - - def GetIconName(self): - if self._object.isvalid(): - return "ast-green-los" - elif self._object.isoblig(): - return "ast-red-los" - else: - return "ast-yel-los" - - def get_docu(self): - """ Retourne la clé de doc de l'objet pointé par self """ - return self.object.get_docu() - - def iscopiable(self): - if len(self._object) > 1: - return Objecttreeitem.SequenceTreeItem.iscopiable(self) - else: - return compofact.FACTTreeItem.iscopiable(self) - - def isMCFact(self): - """ - Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon - """ - return len(self._object) <= 1 - - def isMCList(self): - """ - Retourne 1 si l'objet pointé par self est une MCList, 0 sinon - """ - return len(self._object) > 1 - - def get_copie_objet(self): - return self._object.data[0].copy() - - def additem(self,obj,pos): - #print "compomclist.additem",obj,pos - if len(self._object) <= 1: - return compofact.FACTTreeItem.additem(self,obj,pos) - - o= self.object.addentite(obj,pos) - return o - - def suppitem(self,item): - """ - Retire un objet MCFACT de la MCList (self.object) - """ - #print "compomclist.suppitem",item - obj=item.getObject() - if len(self._object) <= 1: - return compofact.FACTTreeItem.suppitem(self,item) - - if self.object.suppentite(obj): - if len(self._object) == 1: self.updateDelegate() - message = "Mot-clé " + obj.nom + " supprimé" - self.appli.affiche_infos(message) - return 1 - else: - self.appli.affiche_infos('Impossible de supprimer ce mot-clé') - return 0 - - -import Accas -objet = Accas.MCList - -def treeitem(appli,labeltext,object,setfunction): - """ Factory qui produit un objet treeitem adapte a un objet - Accas.MCList (attribut objet de ce module) - """ - return MCListTreeItem(appli,labeltext,object,setfunction) diff --git a/Editeur/componiveau.py b/Editeur/componiveau.py deleted file mode 100644 index 0a74d55c..00000000 --- a/Editeur/componiveau.py +++ /dev/null @@ -1,133 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== - -from Tkinter import * -import Pmw - -import Objecttreeitem -import panels -import fontes -from Extensions import commentaire - -Fonte_Niveau = fontes.canvas_gras_italique -Fonte_Niveau_inactif = fontes.canvas_italique - -class NIVEAUPanel(panels.OngletPanel): - def init(self): - """ Initialise les frame des panneaux contextuels relatifs à un JDC """ - panneau=Pmw.PanedWidget(self,orient='horizontal') - panneau.add('left',min=0.4,max=0.6,size=0.5) - panneau.add('right',min=0.4,max=0.6,size=0.5) - panneau.pack(expand=1,fill='both') - self.bouton_com.pack_forget() - self.makeJDCPage(panneau.pane('left')) - self.enlevebind() - - -import treewidget -class Node(treewidget.Node):pass - - -class NIVEAUTreeItem(Objecttreeitem.ObjectTreeItem): - panel = NIVEAUPanel - itemNode=Node - - def isactif(self): - return self.object.isactif() - - def IsExpandable(self): - return 1 - - def GetLabelText(self): - """ Retourne 3 valeurs : - - le texte à afficher dans le noeud représentant l'item - - la fonte dans laquelle afficher ce texte - - la couleur du texte - """ - if self.isactif(): - fonte = Fonte_Niveau - else : - fonte = Fonte_Niveau_inactif - return self.labeltext,fonte,'#00008b' - - def GetIconName(self): - if self.isactif(): - if self.object.isvalid(): - return "ast-green-text" - else: - return "ast-red-text" - else: - return "ast-white-text" - - def keys(self): - if self.object.etapes_niveaux != []: - return range(len(self.object.etapes_niveaux)) - else: - return range(len(self.object.etapes)) - - def GetSubList(self): - sublist=[] - for key in self.keys(): - if self.object.etapes_niveaux != []: - liste = self.object.etapes_niveaux - else: - liste = self.object.etapes - try: - value = liste[key] - except KeyError: - continue - def setfunction(value, key=key, object=liste): - object[key] = value - item =self.make_objecttreeitem(self.appli,value.ident() + " : ", value, setfunction) - sublist.append(item) - return sublist - - def additem(self,name,pos): - if isinstance(name,Objecttreeitem.TreeItem) : - cmd=self.object.addentite(name.getObject(),pos) - else : - cmd = self.object.addentite(name,pos) - item = self.make_objecttreeitem(self.appli,cmd.nom + " : ", cmd) - return item - - def suppitem(self,item) : - # item = item de l'ETAPE à supprimer du JDC - # item.getObject() = ETAPE ou COMMENTAIRE - # self.object = JDC - itemobject=item.getObject() - if self.object.suppentite(itemobject): - if isinstance(item.object,commentaire.COMMENTAIRE): - message = "Commentaire supprimé" - else : - message = "Commande " + itemobject.nom + " supprimée" - self.appli.affiche_infos(message) - return 1 - else: - self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet") - return 0 - - def GetText(self): - return '' - - -import Accas -treeitem = NIVEAUTreeItem -objet = Accas.ETAPE_NIVEAU diff --git a/Editeur/componuplet.py b/Editeur/componuplet.py deleted file mode 100644 index 5098b97c..00000000 --- a/Editeur/componuplet.py +++ /dev/null @@ -1,175 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import types -import Tkinter -import Pmw -from repr import Repr -from copy import copy,deepcopy - -# Modules Eficas -import Objecttreeitem -import panels - -# -__version__="$Name: $" -__Id__="$Id: componuplet.py,v 1.8 2005/11/03 09:03:48 eficas Exp $" -# - -myrepr = Repr() -myrepr.maxstring = 100 -myrepr.maxother = 100 - -# Si Expandable vaut 1 les éléments du nuplet apparaissent dans l'arbre -# Si Expandable vaut 0 les éléments n'apparaissent pas -Expandable=1 - -class NUPLETPanel(panels.OngletPanel): - def init(self): - """ Initialise les frame des panneaux contextuels relatifs \340 un NUPLET """ - self.nb=Pmw.NoteBook(self,raisecommand=self.raisecmd) - self.nb.pack(fill = 'both', expand = 1) - self.nb.add("Valeurs",tab_text="Saisir valeurs") - self.makeValeurPage(self.nb.page('Valeurs')) - self.enlevebind() - self.creebind() - self.nb.setnaturalsize() - - def makeValeurPage(self,page): - label = Tkinter.Label(page,text='Valeurs :').pack(side=Tkinter.LEFT) - i=0 - for obj in self.node.item.object.mc_liste: - frame_valeur=Tkinter.Frame(page) - frame_valeur.pack(side=Tkinter.LEFT) - if hasattr(obj,'definition'): - objet_mc=obj.definition - else: - objet_mc=None - valeur=obj.valeur - if type(valeur) == types.InstanceType : - valeur=obj.getval() - aide=self.gen_aide(obj) - if objet_mc.into != None : - l_choix=list(objet_mc.into) - #obj.set_valeur(l_choix[0],evaluation='non') - obj.set_valeur(l_choix[0]) - option=Pmw.OptionMenu (frame_valeur, - items = l_choix, - menubutton_width = 10, - command = lambda e,obj=obj,s=self:s.record_valeur(val=e,obj=obj), - ) - option.pack(side=Tkinter.LEFT,padx=1) - else : - entry = Tkinter.Entry(frame_valeur,relief='sunken',width=10) - entry.pack(side=Tkinter.LEFT,padx=1) - entry.bind("", - lambda e,obj=obj,s=self:s.valid_valeur(e,obj=obj)) - entry.bind("", - lambda e,obj=obj,s=self:s.valid_valeur(e,obj=obj)) - if i==0:entry.focus_set() - #aide = Tkinter.Label(frame_valeur, text = aide) - #aide.place(relx=0.5,rely=0.55,anchor='n') - if valeur != None : - entry.delete(0,Tkinter.END) - entry.insert(0,obj.getval()) - i=i+1 - - def record_valeur(self,val=None,obj=None,mess='Valeur du mot-cl\351 enregistr\351e'): - """ - Enregistre val comme valeur de self.node.item.object SANS faire de - test de validité - """ - #obj.set_valeur(val,evaluation='non') - obj.set_valeur(val) - self.parent.appli.affiche_infos(mess) - #self.node.parent.verif() - #self.node.update() - - def valid_valeur(self,e,obj=None,mess='Valeur du mot-cl\351 enregistr\351e'): - """ - Enregistre val comme valeur de self.node.item.object avec - test de validité - """ - valeur=e.widget.get() - e.widget.delete(0,Tkinter.END) - anc_val=obj.getval() - if anc_val == None:anc_val='' - test=obj.set_valeur(valeur) - if test: - if obj.isvalid(): - self.parent.appli.affiche_infos('Valeur du mot-cl\351 enregistr\351e') - e.widget.insert(0,obj.getval()) - else: - #obj.set_valeur(anc_val,evaluation='non') - obj.set_valeur(anc_val) - self.parent.appli.affiche_infos("valeur du mot-cl\351 non autoris\351e") - e.widget.insert(0,anc_val) - else: - print "impossible d'\351valuer : %s " %valeur - print "test =",test - self.parent.appli.affiche_infos("valeur du mot-cl\351 non autoris\351e") - e.widget.delete(0,Tkinter.END) - e.widget.insert(0,anc_val) - - #self.node.parent.verif() - #self.node.update() - - def gen_aide(self,obj): - return "" - - -class NUPLETTreeItem(Objecttreeitem.ObjectTreeItem): - panel=NUPLETPanel - - def IsExpandable(self): - return Expandable - - def GetText(self): - return '' - - def isvalid(self): - return self.object.isvalid() - - def GetIconName(self): - if self.object.isvalid(): - return "ast-green-los" - elif self.object.isoblig(): - return "ast-red-los" - else: - return "ast-yel-los" - - def GetSubList(self): - if not Expandable:return [] - sublist=[] - for obj in self.object.mc_liste: - item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, None) - sublist.append(item) - return sublist - - def additem(self,name,pos): - raise "NUPLET" - - def suppitem(self,item) : - raise "NUPLET" - -import Accas -treeitem=NUPLETTreeItem -objet=Accas.MCNUPLET diff --git a/Editeur/compooper.py b/Editeur/compooper.py deleted file mode 100644 index 2fcbfff9..00000000 --- a/Editeur/compooper.py +++ /dev/null @@ -1,325 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -from Tkinter import * -import Pmw -import traceback -import Objecttreeitem -import panels -import fontes - -class OPERPanel(panels.OngletPanel): - - def init(self): - nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) - nb.pack(fill = 'both', expand = 1) - self.nb=nb - nb.add('Mocles', tab_text='Nouveau mot-clé') - nb.add('Concept', tab_text='Nommer concept') - nb.add('Commande', tab_text='Nouvelle Commande') - nb.add('Commentaire',tab_text='Paramètre/Commentaire') - panneau=Pmw.PanedWidget(nb.page("Mocles"), - orient='horizontal') - panneau.add('left',min=0.4,max=0.60,size=0.50) - panneau.add('right',min=0.4,max=0.60,size=0.50) - panneau.pack(expand=1,fill='both') - panneau.setnaturalsize() - self.makeCommandePage(nb.page("Commande")) - self.makeConceptPage_oper(nb.page("Concept")) - self.makeMoclesPage(panneau.pane('left')) - self.makeReglesPage(panneau.pane('right')) - #self.makeCommentairePage(nb.page("Commentaire")) - self.makeParamCommentPage_for_etape(nb.page("Commentaire")) - nb.tab('Mocles').focus_set() - self.nb.setnaturalsize() - self.enlevebind() - self.creebind() - self.affiche() - - def makeConceptPage_oper(self,page): - """ Crée la page de saisie du nom du concept """ - if self.node.item.is_reentrant(): - # commande obligatoirement reentrante - self.makeConceptPage_reentrant(page) - else: - # commande non reentrante ou facultativement reentrante - self.makeConceptPage(page) - - def makeConceptPage_reentrant(self,page): - """ Crée la page de saisie du nom de concept pour un opérateur reentrant - cad propose dans la liste des SD utilisées dans la commande celle(s) dont le - type est compatible avec celui que retourne l'opérateur """ - liste_noms_sd = self.node.item.get_noms_sd_oper_reentrant() - self.listbox = Pmw.ScrolledListBox(page, - items=liste_noms_sd, - labelpos='n', - label_text="Structure(s) de données à enrichir par l'opérateur courant :", - listbox_height = 6, - selectioncommand=self.select_valeur_from_list, - dblclickcommand=lambda s=self,c=self.execConcept : s.choose_valeur_from_list(c)) - self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center') - Label(page,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6) - self.valeur_choisie = StringVar() - self.label_valeur = Label(page,textvariable=self.valeur_choisie) - self.label_valeur.place(relx=0.45,rely=0.6) - if len(liste_noms_sd) == 1 : - self.valeur_choisie.set(liste_noms_sd[0]) - - def select_valeur_from_list(self): - try: - choix = self.listbox.getcurselection()[0] - self.valeur_choisie.set(choix) - except: - traceback.print_exc() - - - def choose_valeur_from_list(self,command): - try: - choix = self.listbox.getcurselection()[0] - self.valeur_choisie.set(choix) - apply(command,(),{}) - except: - traceback.print_exc() - -import treewidget -class Node(treewidget.Node): - def doPaste(self,node_selected): - """ - Déclenche la copie de l'objet item avec pour cible - l'objet passé en argument : node_selected - """ - objet_a_copier = self.item.get_copie_objet() - child=node_selected.doPaste_Commande(objet_a_copier) - return child - - def doPaste_Commande(self,objet_a_copier): - """ - Réalise la copie de l'objet passé en argument qui est nécessairement - une commande - """ - parent=self.parent - #child = parent.item.append_child(objet_a_copier,self.item.getObject()) - child = self.append_brother(objet_a_copier,retour='oui') - #if child is None:return 0 - return child - - def doPaste_MCF(self,objet_a_copier): - """ - Réalise la copie de l'objet passé en argument (objet_a_copier) - Il s'agit forcément d'un mot clé facteur - """ - child = self.append_child(objet_a_copier,pos='first',retour='oui') - return child - - -class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): - """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau - Accas. Elle leur permet d'etre affichés comme des noeuds - d'un arbre graphique. - Cette classe a entre autres deux attributs importants : - - _object qui est un pointeur vers l'objet du noyau - - object qui pointe vers l'objet auquel sont délégués les - appels de méthode et les accès aux attributs - Dans le cas d'une ETAPE, _object et object pointent vers le - meme objet. - """ - panel = OPERPanel - itemNode=Node - - def IsExpandable(self): - return 1 - - def GetIconName(self): - """ - Retourne le nom de l'icône à afficher dans l'arbre - Ce nom dépend de la validité de l'objet - """ - if not self.object.isactif(): - return "ast-white-square" - elif self.object.isvalid(): - return "ast-green-square" - else: - return "ast-red-square" - - def GetLabelText(self): - """ Retourne 3 valeurs : - - le texte à afficher dans le noeud représentant l'item - - la fonte dans laquelle afficher ce texte - - la couleur du texte - """ - if self.object.isactif(): - # None --> fonte et couleur par défaut - return self.labeltext,None,None - else: - return self.labeltext,fontes.standard_italique,None - - def get_objet(self,name) : - for v in self.object.mc_liste: - if v.nom == name : return v - return None - - def get_type_sd_prod(self): - """ - Retourne le nom du type du concept résultat de l'étape - """ - sd_prod=self.object.get_type_produit() - if sd_prod: - return sd_prod.__name__ - else: - return "" - - def additem(self,name,pos): - #print "compooper.additem",name,pos - mcent = self._object.addentite(name,pos) - return mcent - - def suppitem(self,item) : - # item : item du MOCLE de l'ETAPE à supprimer - # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList - itemobject=item.getObject() - if itemobject.isoblig() : - self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ') - return 0 - if self.object.suppentite(itemobject): - message = "Mot-clé " + itemobject.nom + " supprimé" - self.appli.affiche_infos(message) - return 1 - else : - self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé') - return 0 - - def GetText(self): - try: - return self.object.get_sdname() - except: - return '' - - def keys(self): - keys=self.object.mc_dict.keys() - return keys - - def GetSubList(self): - """ - Reactualise la liste des items fils stockes dans self.sublist - """ - if self.isactif(): - liste=self.object.mc_liste - else: - liste=[] - - sublist=[None]*len(liste) - # suppression des items lies aux objets disparus - for item in self.sublist: - old_obj=item.getObject() - if old_obj in liste: - pos=liste.index(old_obj) - sublist[pos]=item - else: - pass # objets supprimes ignores - - # ajout des items lies aux nouveaux objets - pos=0 - for obj in liste: - if sublist[pos] is None: - # nouvel objet : on cree un nouvel item - def setfunction(value, object=obj): - object.setval(value) - item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction) - sublist[pos]=item - pos=pos+1 - - self.sublist=sublist - return self.sublist - - def isvalid(self): - return self.object.isvalid() - - def iscopiable(self): - """ - Retourne 1 si l'objet est copiable, 0 sinon - """ - return 1 - - def update(self,item): - if item.sd and item.sd.nom: - self.nomme_sd(item.sd.nom) - - def nomme_sd(self,nom): - """ Lance la méthode de nommage de la SD """ - oldnom="" - if self.object.sd != None : - oldnom=self.object.sd.nom - test,mess= self.object.nomme_sd(nom) - if test:self.object.parent.reset_context() - if (test and self.appli.dict_reels.has_key(oldnom) ): - self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom] - return test,mess - - def is_reentrant(self): - return self.object.is_reentrant() - - def get_noms_sd_oper_reentrant(self): - return self.object.get_noms_sd_oper_reentrant() - - def get_objet_commentarise(self): - """ - Cette méthode retourne un objet commentarisé - représentatif de self.object - """ - # Format de fichier utilisé - format=self.appli.format_fichier.get() - return self.object.get_objet_commentarise(format) - - def get_objet_commentarise_BAK(self): - """ - Cette méthode retourne un objet commentarisé - représentatif de self.object - """ - import generator,string,Accas - # Format de fichier utilisé - format=self.appli.format_fichier.get() - g=generator.plugins[format]() - texte_commande = g.gener(self.object,format='beautifie') - # Il faut enlever la première ligne vide de texte_commande que - # rajoute le generator - rebut,texte_commande = string.split(texte_commande,'\n',1) - # on construit l'objet COMMANDE_COMM repésentatif de self mais non - # enregistré dans le jdc - commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non', - parent=self.object.parent) - commande_comment.niveau = self.object.niveau - commande_comment.jdc = commande_comment.parent = self.object.jdc - - pos=self.object.parent.etapes.index(self.object) - parent=self.object.parent - self.object.parent.suppentite(self.object) - parent.addentite(commande_comment,pos) - - return commande_comment - - def visu_3D(self,appli,node) : - import TroisDPal - troisD=TroisDPal.TroisDPilote(node.item,appli,node.parent) - troisD.envoievisu() - -import Accas -treeitem = EtapeTreeItem -objet = Accas.ETAPE - diff --git a/Editeur/compoparam.py b/Editeur/compoparam.py deleted file mode 100644 index 98f7a7c1..00000000 --- a/Editeur/compoparam.py +++ /dev/null @@ -1,248 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module contient les classes permettant de définir les objets graphiques - représentant un objet de type PARAMETRE, cad le panneau et l'item de l'arbre - d'EFICAS -""" - -# import modules Python -from Tkinter import * -import Pmw -import string - -# import modules EFICAS -import Objecttreeitem -import panels -import fontes - - -Fonte_PARAMETRE = fontes.standard_italique -Fonte_TITRE = fontes.standard_gras_souligne - - -class PARAMPanel(panels.OngletPanel): - """ - Classe servant à construire le panneau associé à un paramètre. - C'est au moyen de ce panneau que l'utilisateur peut accéder - aux nom et valeur du paramètre en vue éventuellement de les - modifier. - """ - - def init(self): - """ - Initialise les frame des panneaux contextuels relatifs à un PARAMETRE - """ - nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) - nb.pack(fill = 'both', expand = 1) - self.nb=nb - nb.add('Parametre', tab_text='Valeur Paramètre') - nb.add('Commande', tab_text='Nouvelle Commande') - nb.add('Commentaire',tab_text='Paramètre/Commentaire') - self.makeParametrePage(nb.page("Parametre")) - self.makeCommandePage(nb.page("Commande")) - self.makeParamCommentPage_for_etape(nb.page("Commentaire")) - nb.tab('Parametre').focus_set() - nb.setnaturalsize() - self.make_buttons() - self.enlevebind() - self.creebind() - - def makeParametrePage(self,page): - """ - Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE - """ - self.frame_valeur = Frame(page) - #self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw') - self.frame_valeur.pack(expand=1) - # affichage du titre du panneau - self.titre = StringVar() - self.titre.set("PARAMETRE "+self.node.item.get_nom()) - #Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n') - Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).grid(row=0,columnspan=2,padx=5,pady=5) - # création des labels et entries associés aux nom et valeur du paramètre - #Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3) - Label(self.frame_valeur,text= 'Nom du paramètre : ').grid(row=1,sticky=W,padx=5,pady=5) - self.entry_nom = Entry(self.frame_valeur) - #Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5) - Label(self.frame_valeur,text= 'Valeur du paramètre : ').grid(row=2,sticky=W,padx=5,pady=5) - self.entry_val = Entry(self.frame_valeur) - # binding sur entry_nom - self.entry_nom.bind("",lambda e,s=self : s.entry_val.focus()) - self.entry_val.bind("",lambda e,s=self : s.change_valeur()) - self.entry_nom.bind("",lambda e,s=self : s.entry_val.focus()) - self.entry_val.bind("",lambda e,s=self : s.change_valeur()) - # affichage des entries - #self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3) - self.entry_nom.grid(row=1,column=1,sticky=W,padx=5,pady=5) - #self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5) - self.entry_val.grid(row=2,column=1,sticky=W,padx=5,pady=5) - # affichage d'une phrase d'aide - aide = """ - Un retour de chariot dans une zone de saisie vous permet de vérifier si - la valeur que vous avez entrée est valide. - Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles - valeurs seront effectivement prises en compte - """ - #Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n') - Label(self.frame_valeur,text=aide).grid(row=3,columnspan=2,padx=5,pady=5) - self.frame_valeur.columnconfigure(1,weight=1) - # affichage des nom et valeur du paramètre - self.display_valeur() - self.entry_nom.focus() - - def make_buttons(self): - """ - Crée les boutons du panneau - """ - #self.bouton_sup.place_forget() - #self.bouton_doc.place_forget() - #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14) - #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14) - #self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center') - #self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center') - #self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center') - - self.bouton_sup.pack_forget() - self.bouton_doc.pack_forget() - self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur) - self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur) - self.bouton_val.pack(side='left',padx=5, pady=5) - self.bouton_ann.pack(side='left',padx=5, pady=5) - self.bouton_sup.pack(side='right',padx=5, pady=5) - - def change_valeur(self): - """ - Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE - """ - if self.parent.modified == 'n' : self.parent.init_modif() - new_nom = self.entry_nom.get() - new_val = self.entry_val.get() - self.node.item.set_nom(new_nom) - self.node.item.set_valeur(new_val) - self.node.update() - self.display_valeur() - - def display_valeur(self): - """ - Affiche dans self.widget_text la valeur de l'objet PARAMETRE - (annule d'éventuelles modifications faite par l'utilisateur) - """ - self.entry_nom.delete(0,END) - self.entry_val.delete(0,END) - self.titre.set('PARAMETRE '+self.node.item.get_nom()) - self.entry_nom.insert(END,self.node.item.get_nom()) - self.entry_val.insert(END,self.node.item.get_valeur()) - -class PARAMTreeItem(Objecttreeitem.ObjectTreeItem): - """ - Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS - qui représente le PARAMETRE - """ - panel = PARAMPanel - - def init(self): - self.setfunction = self.set_valeur - -# --------------------------------------------------------------------------- -# API du PARAMETRE pour l'arbre -# --------------------------------------------------------------------------- - - def GetIconName(self): - """ - Retourne le nom de l'icône associée au noeud qui porte self, - dépendant de la validité de l'objet - NB : un PARAMETRE est toujours valide ... - """ - if self.isactif(): - if self.isvalid(): - return "ast-green-square" - else: - return "ast-red-square" - else: - return "ast-white-square" - - def GetLabelText(self): - """ Retourne 3 valeurs : - - le texte à afficher dans le noeud représentant l'item - - la fonte dans laquelle afficher ce texte - - la couleur du texte - """ - return 'Paramètre',Fonte_PARAMETRE,None - - def GetText(self): - """ - Retourne le texte à afficher après le nom de la commande (ici après 'paramètre') - Ce texte est tronqué à 25 caractères - """ - texte = repr(self.object) - texte = string.split(texte,'\n')[0] - if len(texte) < 25 : - return texte - else : - return texte[0:24]+'...' - - def GetSubList(self): - """ - Retourne la liste des fils de self - """ - return [] - -# --------------------------------------------------------------------------- -# Méthodes permettant la modification et la lecture des attributs -# du paramètre = API graphique du PARAMETRE pour Panel et EFICAS -# --------------------------------------------------------------------------- - - def get_valeur(self): - """ - Retourne la valeur de l'objet PARAMETRE cad son texte - """ - if self.object.valeur is None: return '' - else: return self.object.valeur - - def get_nom(self): - """ - Retourne le nom du paramètre - """ - return self.object.nom - - def set_valeur(self,new_valeur): - """ - Affecte valeur à l'objet PARAMETRE - """ - self.object.set_valeur(new_valeur) - - def set_nom(self,new_nom): - """ - Renomme le paramètre - """ - self.object.set_nom(new_nom) - #self.object.set_attribut('nom',new_nom) - - def get_fr(self): - """ - Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS - """ - return "Définition d'un paramètre" - -import Extensions.parametre -treeitem =PARAMTreeItem -objet = Extensions.parametre.PARAMETRE diff --git a/Editeur/compoparameval.py b/Editeur/compoparameval.py deleted file mode 100644 index 41c6e291..00000000 --- a/Editeur/compoparameval.py +++ /dev/null @@ -1,311 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" -Ce module contient les classes permettant de définir les objets graphiques -représentant un objet de type PARAMETRE_EVAL, cad le panneau et l'item de l'arbre -d'EFICAS -""" - -# import modules Python -from Tkinter import * -import Pmw -import string - -# import modules EFICAS -import widgets -import Objecttreeitem -import panels -import fontes - - -Fonte_PARAMETRE = fontes.standard_italique -Fonte_TITRE = fontes.standard_gras_souligne - - -class PARAM_EVALPanel(panels.OngletPanel): - """ - Classe servant à construire le panneau associé à un paramètre. - C'est au moyen de ce panneau que l'utilisateur peut accéder - aux nom et valeur du paramètre en vue éventuellement de les - modifier. - """ - - def init(self): - """ - Initialise les frame des panneaux contextuels relatifs à un PARAMETRE - """ - nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) - nb.pack(fill = 'both', expand = 1) - self.nb=nb - nb.add('Parametre', tab_text='Paramètre EVAL') - nb.add('Commande', tab_text='Nouvelle Commande') - nb.add('Commentaire',tab_text='Paramètre/Commentaire') - self.makeParametrePage(nb.page("Parametre")) - self.makeCommandePage(nb.page("Commande")) - self.makeParamCommentPage_for_etape(nb.page("Commentaire")) - nb.tab('Parametre').focus_set() - nb.setnaturalsize() - self.make_buttons() - - def makeParametrePage(self,page): - """ - Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE - """ - self.frame_valeur = Frame(page) - self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw') - # affichage du titre du panneau - self.titre = StringVar() - self.titre.set("PARAMETRE EVAL "+self.node.item.get_nom()) - Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n') - # création des labels et entries associés aux nom et valeur du paramètre - Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3) - self.entry_nom = Entry(self.frame_valeur) - Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5) - self.entry_val = Entry(self.frame_valeur) - # binding sur entry_nom - self.entry_nom.bind("",lambda e,s=self : s.verif_nom()) - self.entry_val.bind("",lambda e,s=self : s.verif_eval()) - self.entry_nom.bind("",lambda e,s=self : s.verif_nom()) - self.entry_val.bind("",lambda e,s=self : s.verif_eval()) - # affichage des entries - self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3) - self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5) - # affichage d'une phrase d'aide - aide = """ - Un retour de chariot dans une zone de saisie vous permet de vérifier si - la valeur que vous avez entrée est valide. - Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles - valeurs seront effectivement prises en compte - """ - Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n') - # affichage des nom et valeur du paramètre - self.display_valeur() - self.entry_nom.focus() - - def make_buttons(self): - """ - Crée les boutons du panneau - """ - #self.bouton_sup.place_forget() - #self.bouton_doc.place_forget() - self.bouton_sup.pack_forget() - self.bouton_doc.pack_forget() - #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14) - #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14) - self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur) - self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur) - self.bouton_val.bind("",lambda e,s=self : s.bouton_val.invoke()) - self.bouton_val.bind("",lambda e,s=self : s.bouton_val.invoke()) - #self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center') - #self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center') - #self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center') - self.bouton_val.pack(side='left',padx=5, pady=5) - self.bouton_ann.pack(side='left',padx=5, pady=5) - self.bouton_sup.pack(side='left',padx=5, pady=5) - - def change_valeur(self): - """ - Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE - """ - if self.parent.modified == 'n' : self.parent.init_modif() - new_nom = self.entry_nom.get() - new_val = self.entry_val.get() - #self.node.item.set_nom(new_nom) - #self.node.item.set_valeur(new_val) - #self.node.update() - #self.display_valeur() - # on essaie de stocker les noms et valeurs - test,erreur = self.node.item.save_parametre_eval(new_nom,new_val) - if test : - # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage - self.node.update() - self.display_valeur() - self.parent.appli.affiche_infos("Expression EVAL %s modifiée" %self.node.item.get_nom()) - else: - # la formule est incorrecte : on affiche les erreurs - widgets.showerror("Expression EVAL incorrecte",erreur) - self.parent.appli.affiche_infos("Expression EVAL %s non modifiée" %self.node.item.get_nom()) - - def display_valeur(self): - """ - Affiche dans self.widget_text la valeur de l'objet PARAMETRE - (annule d'éventuelles modifications faite par l'utilisateur) - """ - self.entry_nom.delete(0,END) - self.entry_val.delete(0,END) - self.titre.set('PARAMETRE '+self.node.item.get_nom()) - self.entry_nom.insert(END,self.node.item.get_nom()) - self.entry_val.insert(END,self.node.item.get_valeur()) - - def verif_nom(self): - """ - Lance la vérification du nom donné par l'utilisateur dans entry_nom - """ - nom = self.entry_nom.get() - test,erreur = self.node.item.verif_nom(nom) - if not test : - widgets.showerror("Nom invalide",erreur) - self.entry_nom.focus() - self.entry_nom.selection_range(0,END) - self.parent.appli.affiche_infos("Nom du paramètre refusé") - else: - self.parent.appli.affiche_infos("Nom du paramètre accepté") - - def verif_eval(self,event=None): - """ - Lance la vérification de l'expression EVAL présente dans entry_val - """ - exp_eval = self.entry_val.get() - test,erreur = self.node.item.verif_eval(exp_eval) - if not test: - widgets.showerror("Expression EVAL invalide",erreur) - self.entry_val.focus() - self.entry_val.selection_range(0,END) - self.parent.appli.affiche_infos("Expression EVAL refusée") - else: - self.parent.appli.affiche_infos("Expression EVAL acceptée") - -class PARAM_EVALTreeItem(Objecttreeitem.ObjectTreeItem): - """ - Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS - qui représente le PARAMETRE - """ - panel = PARAM_EVALPanel - - def init(self): - self.setfunction = self.set_valeur - -# --------------------------------------------------------------------------- -# API du PARAMETRE pour l'arbre -# --------------------------------------------------------------------------- - - def GetIconName(self): - """ - Retourne le nom de l'icône associée au noeud qui porte self, - dépendant de la validité de l'objet - NB : un PARAMETRE est toujours valide ... - """ - if self.isactif(): - if self.isvalid(): - return "ast-green-square" - else: - return "ast-red-square" - else: - return "ast-white-square" - - def GetLabelText(self): - """ Retourne 3 valeurs : - - le texte à afficher dans le noeud représentant l'item - - la fonte dans laquelle afficher ce texte - - la couleur du texte - """ - return 'EVAL',Fonte_PARAMETRE,None - - def GetText(self): - """ - Retourne le texte à afficher après le nom de la commande (ici après 'paramètre') - Ce texte est tronqué à 25 caractères - """ - texte = repr(self.object) - texte = string.split(texte,'\n')[0] - if len(texte) < 25 : - return texte - else : - return texte[0:24]+'...' - - def GetSubList(self): - """ - Retourne la liste des fils de self - """ - return [] - -# --------------------------------------------------------------------------- -# Méthodes permettant la modification et la lecture des attributs -# du paramètre = API graphique du PARAMETRE pour Panel et EFICAS -# --------------------------------------------------------------------------- - - def isvalid(self): - """ - Indique si l'objet pointé par self est valide - """ - return self.object.isvalid() - - def get_valeur(self): - """ - Retourne une chaîne représentant la valeur de l'objet PARAMETRE - cad de l'objet class_eval.EVAL - """ - return self.object.get_valeur() or '' - - def get_nom(self): - """ - Retourne le nom du paramètre - """ - return self.object.get_nom() - - def set_valeur(self,new_valeur): - """ - Affecte new_valeur à l'objet PARAMETRE_EVAL - """ - # on construit le texte de la nouvelle valeur - new_valeur = 'EVAL("""'+new_valeur+'""")' - # on affecte la nouvelle valeur à self.object - self.object.set_valeur(new_valeur) - - def set_nom(self,new_nom): - """ - Renomme le paramètre - """ - self.object.set_nom(new_nom) - - def get_fr(self): - """ - Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS - """ - return "Définition d'un paramètre de type EVAL" - - def verif_nom(self,nom): - """ - Lance la vérification de validité du nom passé en argument - """ - return self.object.verif_nom(nom = nom) - - def verif_eval(self,valeur): - """ - Lance la vérification de validité de l'expression EVAL passée en argument - """ - return self.object.verif_eval(exp_eval = valeur) - - def save_parametre_eval(self,new_nom,new_val): - """ - Vérifie si (new_nom,new_val) définit bien un EVAL licite : - - si oui, stocke ces paramètres comme nouveaux paramètres de l'EVAL courant et retourne 1 - - si non, laisse les paramètres anciens de EVAL inchangés et retourne 0 - """ - test,erreur = self.object.verif_parametre_eval(param=(new_nom,new_val)) - if test : - # la formule est bien correcte : on sauve les nouveaux paramètres - self.object.update(param=(new_nom,new_val)) - return test,erreur - -import Extensions.parametre_eval -treeitem =PARAM_EVALTreeItem -objet = Extensions.parametre_eval.PARAMETRE_EVAL diff --git a/Editeur/compoproc.py b/Editeur/compoproc.py deleted file mode 100644 index cb24795a..00000000 --- a/Editeur/compoproc.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -from Tkinter import * -import Pmw - -import Objecttreeitem -import panels -import fontes -import compooper - -class PROCPanel(panels.OngletPanel): - def init(self): - nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) - self.nb=nb - nb.pack(fill = 'both', expand = 1) - nb.add('Mocles', tab_text='Ajouter mots-clés') - nb.add('Commande', tab_text='Nouvelle Commande') - nb.add('Commentaire',tab_text='Paramètre/Commentaire') - panneau=Pmw.PanedWidget(nb.page("Mocles"), - orient='horizontal') - panneau.add('left',min=0.4,max=0.6,size=0.5) - panneau.add('right',min=0.4,max=0.6,size=0.5) - panneau.pack(expand=1,fill='both') - self.makeCommandePage(nb.page("Commande")) - self.makeMoclesPage(panneau.pane('left')) - self.makeReglesPage(panneau.pane('right')) - self.makeParamCommentPage_for_etape(nb.page("Commentaire")) - nb.setnaturalsize() - self.enlevebind() - self.creebind() - self.affiche() - -class ProcEtapeTreeItem(compooper.EtapeTreeItem): - panel = PROCPanel - -import Accas -treeitem = ProcEtapeTreeItem -objet = Accas.PROC_ETAPE - diff --git a/Editeur/composimp.py b/Editeur/composimp.py deleted file mode 100644 index 7be5ba46..00000000 --- a/Editeur/composimp.py +++ /dev/null @@ -1,652 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -import prefs -import panels -import images -from widgets import ListeChoix -from widgets import FenetreDeSelection - -from Noyau.N_CR import justify_text -from utils import substract_list - - -class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): - from newsimppanel import newSIMPPanel - panel = newSIMPPanel - - def init(self) : - self.expandable = 0 - self.affect_panel() - - - def affect_panel(self): - """ - Cette méthode attribue le panel à l'objet pointé par self en fonction de la - nature de la valeur demandée pour cet objet - """ - from uniquepanel import UNIQUE_Panel - from plusieurspanel import PLUSIEURS_Panel - - #print "affect_panel : ",self.nom,self.is_list(),self.has_into() - # Attention l ordre des if est important - - if self.wait_shell(): - # l'objet attend un shell - from shellpanel import SHELLPanel - self.panel = SHELLPanel - elif self.has_into(): - # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs - if self.is_list() : - from plusieursintopanel import PLUSIEURS_INTO_Panel - self.panel = PLUSIEURS_INTO_Panel - else: - from uniqueintopanel import UNIQUE_INTO_Panel - self.panel = UNIQUE_INTO_Panel - else: - # l'objet prend une ou des valeurs à priori quelconques - if self.is_list() : - # on attend une liste de valeurs mais de quel type ? - if self.wait_assd(): - # on attend une liste de SD - from plusieursassdpanel import PLUSIEURS_ASSD_Panel - self.panel = PLUSIEURS_ASSD_Panel - else: - # on attend une liste de valeurs de types debase (entiers, réels,...) - #from plusieursbasepanel import PLUSIEURS_BASE_OR_UNELISTE_Panel - #self.panel = PLUSIEURS_BASE_OR_UNELISTE_Panel - from plusieursbasepanel import PLUSIEURS_BASE_Panel - self.panel = PLUSIEURS_BASE_Panel - else: - # on n'attend qu'une seule valeur mais de quel type ? - if self.wait_co(): - # on attend une SD ou un objet de la classe CO (qui n'existe pas encore) - from uniquesdcopanel import UNIQUE_SDCO_Panel - self.panel = UNIQUE_SDCO_Panel - elif self.wait_assd(): - # on attend une SD - from uniqueassdpanel import UNIQUE_ASSD_Panel - from uniqueassdpanel import UNIQUE_ASSD_Panel_Reel - if 'R' in self.GetType(): - self.panel = UNIQUE_ASSD_Panel_Reel - else : - self.panel = UNIQUE_ASSD_Panel - else: - # on attend une valeur d'un type de base (entier,réel,...) - if self.wait_complex(): - # on attend un complexe - from uniquecomppanel import UNIQUE_COMP_Panel - self.panel = UNIQUE_COMP_Panel - else: - # on attend un entier, un réel ou une string - from uniquebasepanel import UNIQUE_BASE_Panel - self.panel = UNIQUE_BASE_Panel - # cas particulier des fonctions - genea = self.get_genealogie() - if "VALE" in genea or "VALE_C" in genea: - if "DEFI_FONCTION" in genea : - from fonctionpanel import FONCTION_Panel - self.panel=FONCTION_Panel - #--------------------------------------------------------- - # PN ajout pour lancement de Salome - #--------------------------------------------------------- - if hasattr( self.appli, 'salome' ): - import panelsSalome - - self.select_noeud_maille=0 - self.clef_fonction="SALOME" - for i in range(0,len( genea )) : - self.clef_fonction=self.clef_fonction+"_"+ genea[i] - #if genea[i] == "GROUP_NO" or genea[i] == "GROUP_MA": - if "GROUP_NO" in genea[len(genea)-1] or "GROUP_MA" in genea[len(genea)-1]: - self.select_noeud_maille=1 - - recherche=panelsSalome.dict_classes_salome[self.panel] - if hasattr(recherche,self.clef_fonction): - self.panel=recherche - if self.select_noeud_maille==1 : - self.panel=recherche - - - #----------------------------------------------- - # - # Methodes liees aux informations sur le Panel - # ou au mot-clef simple - # - #----------------------------------------------- - # is_list - # get_into a priori inutile --> commentee - # has_into - # wait_into a priori inutile --> commentee - # GetMinMax - # GetMultiplicite - # GetIntervalle - # GetListeValeurs - # get_liste_possible - - def is_list(self): - """ - Cette méthode indique si le mot cle simple attend une liste (valeur de retour 1) - ou s'il n'en attend pas (valeur de retour 0) - - Deux cas principaux peuvent se presenter : avec validateurs ou bien sans. - Dans le cas sans validateur, l'information est donnée par l'attribut max - de la definition du mot cle. - Dans le cas avec validateur, il faut combiner l'information précédente avec - celle issue de l'appel de la méthode is_list sur le validateur.On utilisera - l'operateur ET pour effectuer cette combinaison (AndVal). - """ - is_a_list=0 - min,max = self.GetMinMax() - assert (min <= max) - if max > 1 : - is_a_list=1 - # Dans le cas avec validateurs, pour que le mot cle soit considéré - # comme acceptant une liste, il faut que max soit supérieur a 1 - # ET que la méthode is_list du validateur retourne 1. Dans les autres cas - # on retournera 0 (n'attend pas de liste) - if self.definition.validators : - is_a_list= self.definition.validators.is_list() * is_a_list - return is_a_list - - #def get_into(self,liste_courante=None): - # """ - # Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose - # pas de liste de choix, la méthode retourne None. - # L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déjà - # effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix - # en en tenant compte. - # Cette méthode part du principe que la relation entre into du mot clé et les validateurs est - # une relation de type ET (AndVal). - # """ - # if not self.object.definition.validators : - # return self.object.definition.into - # else: - # return self.object.definition.validators.get_into(liste_courante,self.definition.into) - - def has_into(self): - """ - Cette méthode indique si le mot cle simple propose un choix (valeur de retour 1) - ou s'il n'en propose pas (valeur de retour 0) - - Deux cas principaux peuvent se presenter : avec validateurs ou bien sans. - Dans le cas sans validateur, l'information est donnée par l'attribut into - de la definition du mot cle. - Dans le cas avec validateurs, pour que le mot cle soit considéré - comme proposant un choix, il faut que into soit présent OU - que la méthode has_into du validateur retourne 1. Dans les autres cas - on retournera 0 (ne propose pas de choix) - """ - has_an_into=0 - if self.definition.into: - has_an_into=1 - elif self.definition.validators : - has_an_into= self.definition.validators.has_into() - return has_an_into - -# def wait_into(self): -# """ Méthode booléenne qui retourne 1 si l'objet pointé par self -# prend ses valeurs dans un ensemble discret (into), 0 sinon """ -# if self.object.definition.into != None : -# return 1 -# else: -# return 0 - - def GetMinMax(self): - """ Retourne les valeurs min et max de la définition de object """ - return self.object.get_min_max() - - def GetMultiplicite(self): - """ A préciser. - Retourne la multiplicité des valeurs affectées à l'objet - représenté par l'item. Pour le moment retourne invariablement 1. - """ - return 1 - - def GetIntervalle(self): - """ - Retourne le domaine de valeur attendu par l'objet représenté - par l'item. - """ - return self.object.getintervalle() - - def GetListeValeurs(self) : - """ Retourne la liste des valeurs de object """ - valeurs=self.object.get_liste_valeurs() - try : - if "R" in self.object.definition.type: - clef=self.object.GetNomConcept() - if self.appli.dict_reels.has_key(clef): - if type(valeurs) == types.TupleType: - valeurs_reelles=[] - for val in valeurs : - if self.appli.dict_reels[clef].has_key(val) : - valeurs_reelles.append(self.appli.dict_reels[clef][val]) - else : - valeurs_reelles.append(val) - else : - if self.appli.dict_reels[clef].has_key(valeurs): - valeurs_reelles=self.appli.dict_reels[clef][valeurs] - valeurs=valeurs_reelles - except : - pass - return valeurs - - def get_liste_possible(self,listeActuelle=[]): - if hasattr(self.definition.validators,'into'): - valeurspossibles = self.definition.validators.into - else: - valeurspossibles = self.get_definition().into - - #On ne garde que les items valides - listevalideitem=[] - for item in valeurspossibles: - encorevalide=self.valide_item(item) - if encorevalide : - listevalideitem.append(item) - - #on ne garde que les choix possibles qui passent le test de valide_liste_partielle - listevalideliste=[] - for item in listevalideitem: - encorevalide=self.valide_liste_partielle(item,listeActuelle) - if encorevalide : - listevalideliste.append(item) - return listevalideliste - - def get_liste_param_possible(self): - liste_param=[] - for param in self.object.jdc.params: - encorevalide=self.valide_item(param.valeur) - if encorevalide: - type_param=param.valeur.__class__.__name__ - for typ in self.definition.type: - if typ=='R': - liste_param.append(param) - if typ=='I' and type_param=='int': - liste_param.append(param) - if typ=='TXM' and type_param=='str': - liste_param.append(repr(param)) - return liste_param - - #-------------------------------------------------- - # - # Methodes liees a la validite des valeurs saisies - # - #--------------------------------------------------- - # valide_item - # valide_liste_partielle - # valide_liste_complete - # info_erreur_item - # info_erreur_liste - # IsInIntervalle - # isvalid - - def valide_item(self,item): - """ - La validation est réalisée directement par l'objet - """ - return self.object.valide_item(item) - - def valide_liste_partielle(self,item,listecourante): - #On protege la liste en entree en la copiant - valeur=listecourante[:] - valeur.append(item) - return self.object.valid_valeur_partielle(valeur) - - def valide_liste_complete (self,valeur): - return self.object.valid_valeur(valeur) - - def valide_val (self,valeur): - return self.object.valid_val(valeur) - - def info_erreur_item(self) : - commentaire="" - if self.definition.validators : - commentaire=self.definition.validators.info_erreur_item() - return commentaire - - def aide(self) : - commentaire="" - if self.definition.validators : - commentaire=self.definition.validators.aide() - return commentaire - - def info_erreur_liste(self) : - commentaire="" - if self.definition.validators : - commentaire=self.definition.validators.info_erreur_liste() - return commentaire - - def IsInIntervalle(self,valeur): - """ - Retourne 1 si la valeur est dans l'intervalle permis par - l'objet représenté par l'item. - """ - return self.valide_item(valeur) - - def isvalid(self): - valide=self.object.isvalid() - return valide - - #-------------------------------------------------- - # - # Autres ... - # - #--------------------------------------------------- - # SetText a priori inutilisee --> commentee - # GetIconName - # GetText - # getval a priori inutilisee --> commentee - # set_valeur_co - # get_sd_avant_du_bon_type - # verif a priori inutilisee --> commentee - # delete_valeur_co - - #def SetText(self, text): - # try: - # value = eval(text) - # self.object.setval(value) - # except: - # pass - - def GetIconName(self): - if self.isvalid(): - return "ast-green-ball" - elif self.object.isoblig(): - return "ast-red-ball" - else: - return "ast-yel-ball" - - def GetText(self): - """ - Classe SIMPTreeItem - Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet - pointé par self - """ - text= self.object.GetText() - return text - - #def getval(self): - # return self.object.getval() - - def set_valeur_co(self,nom_co): - """ - Affecte au MCS pointé par self l'objet de type CO et de nom nom_co - """ - ret = self.object.set_valeur_co(nom_co) - #print "set_valeur_co",ret - return ret - - def get_sd_avant_du_bon_type(self): - """ - Retourne la liste des noms des SD présentes avant l'étape qui contient - le MCS pointé par self et du type requis par ce MCS - """ - a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type) - return a - - def get_sd_avant_du_bon_type_pour_type_de_base(self): - a=self.object.jdc.get_sd_avant_du_bon_type_pour_type_de_base(self.object.etape,"LASSD") - return a - - - - #def verif(self): - # pass - - def delete_valeur_co(self,valeur=None): - """ - Supprime la valeur du mot cle (de type CO) - il faut propager la destruction aux autres etapes - """ - if not valeur : valeur=self.object.valeur - # XXX faut il vraiment appeler del_sdprod ??? - #self.object.etape.parent.del_sdprod(valeur) - self.object.etape.parent.delete_concept(valeur) - - #----------------------------------------------- - # - # Methodes liees au type de l objet attendu - # - #----------------------------------------------- - # wait_co - # wait_geom - # wait_complex - # wait_reel - # wait_shell - # wait_assd - # GetType - - def wait_co(self): - """ - Méthode booléenne qui retourne 1 si l'objet pointé par self - attend un objet de type ASSD qui n'existe pas encore (type CO()), - 0 sinon - """ - return self.object.wait_co() - - def wait_geom(self): - """ - Méthode booléenne qui retourne 1 si l'objet pointé par self - attend un objet GEOM, 0 sinon - """ - return self.object.wait_geom() - - def wait_complex(self): - """ Méthode booléenne qui retourne 1 si l'objet pointé par self - attend un complexe, 0 sinon """ - if 'C' in self.object.definition.type: - return 1 - else: - return 0 - - def wait_reel(self): - """ Méthode booléenne qui retourne 1 si l'objet pointé par self - attend un réel, 0 sinon """ - if 'R' in self.object.definition.type: - return 1 - else: - return 0 - - def wait_shell(self): - """ Méthode booléenne qui retourne 1 si l'objet pointé par self - attend un shell, 0 sinon """ - if 'shell' in self.object.definition.type: - return 1 - else: - return 0 - - def wait_assd(self): - """Méthode booléenne qui retourne 1 si l'objet pointé par self - attend un objet de type ASSD ou dérivé, 0 sinon """ - return self.object.wait_assd() - - def wait_assd_or_type_base(self) : - boo=0 - if len(self.object.definition.type) > 1 : - if self.wait_reel() : - boo = 1 - if 'I' in self.object.definition.type : - boo = 1 - return boo - - - def GetType(self): - """ - Retourne le type de valeur attendu par l'objet représenté par l'item. - """ - return self.object.get_type() - - #----------------------------------------------------- - # - # Methodes liees a l evaluation de la valeur saisie - # - #----------------------------------------------------- - # eval_valeur - # eval_valeur_item - # is_CO - # traite_reel - - def eval_valeur(self,valeur): - """ Lance l'interprétation de 'valeur' (chaîne de caractères) comme valeur de self : - - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...) - - retourne 'valeur' (chaîne de caractères) sinon - """ - newvaleur=self.eval_val(valeur) - return newvaleur,1 - - def eval_valeur_BAK(self,valeur): - """ Lance l'interprétation de 'valeur' (chaîne de caractères) comme valeur - de l'objet pointé par self : - - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...) - - retourne 'valeur' (chaîne de caractères) sinon - - retourne None en cas d invalidite - - retourne invalide si 1 des objets du tuple l est - """ - validite=1 - if type(valeur) in (types.ListType,types.TupleType) : - valeurretour=[] - for item in valeur : - newvaleur,validiteitem=self.eval_valeur_item(item) - valeurretour.append(newvaleur) - if validiteitem == 0: - validite=0 - else : - valeurretour,validite= self.eval_valeur_item(valeur) - if validite == 0 : - valeurretour = None - return valeurretour,validite - - def eval_valeur_item(self,valeur): - """ Lance l'interprétation de 'valeur' qui doit ne pas etre un tuple - - va retourner la valeur de retour et la validite - selon le type de l objet attendu - - traite les reels et les parametres - """ - #print "eval_valeur_item",valeur - if valeur==None or valeur == "" : - return None,0 - validite=1 - if self.wait_reel(): - valeurinter = self.traite_reel(valeur) - if valeurinter != None : - valeurretour,validite= self.object.eval_valeur(valeurinter) - else: - valeurretour,validite= self.object.eval_valeur(valeur) - elif self.wait_geom(): - valeurretour,validite = valeur,1 - else : - valeurretour,validite= self.object.eval_valeur(valeur) - #print "eval_valeur_item",valeurretour,validite - - if validite == 0: - if type(valeur) == types.StringType and self.object.wait_TXM(): - essai_valeur="'" + valeur + "'" - valeurretour,validite= self.object.eval_valeur(essai_valeur) - - if hasattr(valeurretour,'__class__'): - #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'): - if valeurretour.__class__.__name__ in ('PARAMETRE',): - validite=1 - - #if self.wait_co(): - # CCAR : il ne faut pas essayer de creer un concept - # il faut simplement en chercher un existant ce qui a du etre fait par self.object.eval_valeur(valeur) - #try: - #valeurretour=Accas.CO(valeur) - #except: - #valeurretour=None - #validite=0 - # on est dans le cas où on a évalué et où on n'aurait pas du - if self.object.wait_TXM() : - if type(valeurretour) != types.StringType: - valeurretour=str(valeur) - validite=1 - return valeurretour,validite - - def is_CO(self,valeur=None): - """ - Indique si valeur est un concept produit de la macro - Cette méthode n'a de sens que pour un MCSIMP d'une MACRO - Si valeur vaut None on teste la valeur du mot cle - """ - # Pour savoir si un concept est un nouveau concept de macro - # on regarde s'il est présent dans l'attribut sdprods de l'étape - # ou si son nom de classe est CO. - # Il faut faire les 2 tests car une macro non valide peut etre - # dans un etat pas tres catholique avec des CO pas encore types - # et donc pas dans sdprods (resultat d'une exception dans type_sdprod) - if not valeur:valeur=self.object.valeur - if valeur in self.object.etape.sdprods:return 1 - if type(valeur) is not types.InstanceType:return 0 - if valeur.__class__.__name__ == 'CO':return 1 - return 0 - - def is_param(self,valeur) : - for param in self.jdc.params: - if (repr(param) == valeur): - return 1 - return 0 - - def traite_reel(self,valeur): - """ - Cette fonction a pour but de rajouter le '.' en fin de chaîne pour un réel - ou de détecter si on fait référence à un concept produit par DEFI_VALEUR - ou un EVAL ... - """ - valeur = string.strip(valeur) - liste_reels = self.get_sd_avant_du_bon_type() - if valeur in liste_reels: - return valeur - if len(valeur) >= 3 : - if valeur[0:4] == 'EVAL' : - # on a trouvé un EVAL --> on retourne directement la valeur - return valeur - if string.find(valeur,'.') == -1 : - # aucun '.' n'a été trouvé dans valeur --> on en rajoute un à la fin - if (self.is_param(valeur)): - return valeur - else: - if string.find(valeur,'e') != -1: - # Notation scientifique ? - try : - r=eval(valeur) - return valeur - except : - return None - else : - return valeur+'.' - else: - return valeur - - -import Accas -treeitem = SIMPTreeItem -objet = Accas.MCSIMP - diff --git a/Editeur/configuration.py b/Editeur/configuration.py index 91697925..f0cd647c 100644 --- a/Editeur/configuration.py +++ b/Editeur/configuration.py @@ -22,12 +22,11 @@ Ce module sert pour charger les paramètres de configuration d'EFICAS """ # Modules Python -import os,sys,string,types +import os, sys, string, types, re import traceback # Modules Eficas -from widgets import showinfo,showerror,askretrycancel -import utils +from Editeur import utils class CONFIGbase: @@ -42,6 +41,7 @@ class CONFIGbase: # class CONFIGStyle(CONFIGbase): self.appli = appli + self.salome = appli.salome self.dRepMat={} if self.appli: self.parent=appli.top @@ -52,16 +52,16 @@ class CONFIGbase: self.lecture_catalogues_standard() self.lecture_fichier_ini_utilisateur() self.init_liste_param() - - + #-------------------------------------- def lecture_fichier_ini_standard(self): #-------------------------------------- # Verifie l'existence du fichier "standard" # appelle la lecture de ce fichier if not os.path.isfile(self.fic_ini): - print self.fic_ini - showerror("Erreur","Pas de fichier de configuration" + self.fic_ini+"\n") + if self.appli.ihm=="TK" : + from widgets import showerror + showerror("Erreur","Pas de fichier de configuration" + self.fic_ini+"\n") print "Erreur à la lecture du fichier de configuration : %s" % self.fic_ini sys.exit(0) self.lecture_fichier(self.fic_ini) @@ -73,13 +73,15 @@ class CONFIGbase: # les transforme en attribut de l 'objet # utilisation du dictionnaire local pour récuperer style txt = utils.read_file(fic) - from styles import style + from InterfaceTK.styles import style d=locals() try: exec txt in d except: l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]) - showerror("Erreur","Une erreur s'est produite lors de la lecture du fichier : " + fic + "\n") + if self.appli.ihm=="TK" : + from widgets import showerror + showerror("Erreur","Une erreur s'est produite lors de la lecture du fichier : " + fic + "\n") print "Erreur à la lecture du fichier de configuration : %s" % fic sys.exit() @@ -93,6 +95,15 @@ class CONFIGbase: for k in d['style'].__dict__.keys() : setattr(self,k,d['style'].__dict__[k]) + if hasattr(self,"catalogues") : + for ligne in self.catalogues : + version=ligne[1] + codeSansPoint=re.sub("\.","",version) + chaine="rep_mat_"+codeSansPoint + if hasattr(self,chaine): + rep_mat=getattr(self,chaine) + self.dRepMat[version]=str(rep_mat) + #-------------------------------------- def lecture_fichier_ini_utilisateur(self): #-------------------------------------- @@ -176,7 +187,10 @@ class CONFIGbase: mode='query') if not result.resultat : if mode == 'considerer_annuler': - test = askretrycancel("Erreur","Données incorrectes !") + test=0 + if self.appli.ihm=="TK" : + from widgets import showerror,askretrycancel + test = askretrycancel("Erreur","Données incorrectes !") if not test: # XXX On sort d'EFICAS, je suppose self.appli.exitEFICAS() @@ -213,13 +227,17 @@ class CONFIG(CONFIGbase): self.texte = "EFICAS a besoin de certains renseignements pour se configurer\n"+\ "Veuillez remplir TOUS les champs ci-dessous et appuyer sur 'Valider'\n"+\ "Si vous annulez, EFICAS ne se lancera pas !!" - self.fichier="editeur.ini" + self.salome=appli.salome + self.code=appli.code + if self.salome == 0 : + self.fichier="editeur.ini" + else : + self.fichier="editeur_salome.ini" self.rep_ini = rep_ini self.fic_ini = os.path.join(self.rep_ini,self.fichier) self.titre = "Paramètres nécessaires à la configuration d'EFICAS" self.texte_ini = "Voici les paramètres que requiert Eficas" self.commande = self.creation_fichier_ini_si_possible - self.pref="" self.labels={"initialdir" : "Répertoire initial pour Open/Save des fichiers", "rep_travail" : "Répertoire de travail", "rep_mat" : "Répertoire materiaux", @@ -228,10 +246,14 @@ class CONFIG(CONFIGbase): "catalogues" : "Versions du code ", "isdeveloppeur" : "Niveau de message ", "path_cata_dev" : "Chemin d'accès aux catalogues développeurs"} + + if self.code == "OPENTURNS" : + self.labels["DTDDirectory"]="Chemin d'accès au wraper" self.types ={"initialdir":"rep", "rep_travail":"rep","rep_mat":"rep", "path_doc": "rep","exec_acrobat":"file","exec_acrobat":"file", - "catalogues" :"cata","isdeveloppeur":"YesNo","path_cata_dev":"rep"} + "catalogues" :"cata","isdeveloppeur":"YesNo","path_cata_dev":"rep", + "DTDDirectory":"rep"} self.YesNo={} self.YesNo['isdeveloppeur']=('Deboggage','Utilisation') @@ -246,12 +268,46 @@ class CONFIG(CONFIGbase): self.catalogues= os.path.join(self.rep_ini,'..','Cata/cata.py') self.isdeveloppeur='NON' self.path_cata_dev=os.path.join(self.rep_user,'cata') - CONFIGbase.__init__ (self,appli) + self.pref="" + + #-------------------------------------- + def save_params(self): + #-------------------------------------- + # sauvegarde + # les nouveaux paramètres dans le fichier de configuration utilisateur + # + l_param=('exec_acrobat', 'rep_ini','catalogues','rep_travail','rep_mat','path_doc') + texte="" + for clef in l_param : + if hasattr(self,clef): + valeur=getattr(self,clef) + texte= texte + clef+" = " + repr(valeur) +"\n" + + + # recuperation des repertoires materiaux + try : + for item in self.catalogues : + try : + (code,version,cata,format,defaut)=item + except : + (code,version,cata,format)=item + codeSansPoint=re.sub("\.","",version) + chaine="rep_mat_"+codeSansPoint + if hasattr(self,chaine): + valeur=getattr(self,chaine) + texte= texte + chaine+" = '" + str(valeur) +"'\n" + except : + pass + + f=open(self.fic_ini_utilisateur,'w+') + f.write(texte) + f.close() class CONFIGStyle(CONFIGbase): def __init__(self,appli,rep_ini): + self.salome=appli.salome self.texte = "Pour prendre en compte les modifications \n"+\ " RELANCER EFICAS" self.fichier="style.py" @@ -260,7 +316,6 @@ class CONFIGStyle(CONFIGbase): self.titre = "Paramètres d affichage" self.texte_ini = "Voici les paramètres configurables : " self.commande = self.creation_fichier_ini_si_possible - self.pref="style." self.labels={"background":"couleur du fonds", "foreground":"couleur de la police standard" , "standard":" police et taille standard", @@ -295,6 +350,7 @@ class CONFIGStyle(CONFIGbase): self.YesNo={} self.l_param=[] CONFIGbase.__init__ (self,appli) + self.pref="style." def affichage_style_ini(self): self.affichage_fichier_ini() diff --git a/Editeur/definition_cata.py b/Editeur/definition_cata.py deleted file mode 100644 index 156ea489..00000000 --- a/Editeur/definition_cata.py +++ /dev/null @@ -1,462 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import types - -# Modules Eficas -import Accas -from Noyau.N_CR import CR - -class CATALOGUE: - def __init__(self,modules_cata): - self.modules_cata = modules_cata # tuple de modules... - self.cr = CR() - self.state='undetermined' - self.entites_attributs = {} - self.entites_fils = [] - self.build_entites_attributs() - self.build_entites_fils() - - def build_entites_attributs(self): - pass - - def build_entites_fils(self): - niv_types = Accas.NIVEAU(nom="types",label="Liste des types") - niv_commandes = Accas.NIVEAU(nom="commandes",label="Liste des commandes") - self.entites_fils.append(make_commande_cata(niv_types,self)) - self.entites_fils.append(make_commande_cata(niv_commandes,self)) - for module_cata in self.modules_cata: - for e in dir(module_cata): - obj = getattr(module_cata,e) - if isCMD(obj): - self.entites_fils[1].register(make_commande_cata(obj,self.entites_fils[1])) - elif type(obj) == types.ClassType: - if issubclass(obj,Accas.ASSD): - self.entites_fils[0].register(TYPE_CATA(obj)) - - def init_modif(self): - self.state = 'modified' - - def report(self): - """ Classe CATALOGUE - Methode pour generation d un rapport de validite - """ - self.cr.purge() - self.cr.debut="DEBUT CR validation : " - self.cr.fin="FIN CR validation :" - self.state = 'modified' - self.isvalid(cr='oui') - for fils in self.entites_fils[1].entites : - self.cr.add(fils.report()) - return self.cr - - def isvalid(self,cr='non'): - if self.state != 'unchanged': - valid=1 - for fils in self.entites_fils[1].entites_fils: - if not fils.isvalid(): - valid=0 - break - self.valid = valid - self.state='unchanged' - return self.valid - -def make_commande_cata(objet,pere): - if isinstance(objet,Accas.OPER): - return OPER_CATA(objet,pere,objet.nom) - elif isinstance(objet,Accas.PROC): - return PROC_CATA(objet,pere,objet.nom) - elif isinstance(objet,Accas.MACRO): - return MACRO_CATA(objet,pere,objet.nom) - elif isinstance(objet,Accas.FORM): - return MACRO_CATA(objet,pere,objet.nom) - elif isinstance(objet,Accas.NIVEAU): - return NIVEAU_CATA(objet,pere,objet.nom) - else: - print "Erreur dans make_commande_cata : on cherche à évaluer un objet non référencé ",objet - -def make_mc_cata(objet,pere,nom=''): - if isinstance(objet,Accas.BLOC): - return BLOC_CATA(objet,pere,nom) - elif isinstance(objet,Accas.FACT): - return FACT_CATA(objet,pere,nom) - elif isinstance(objet,Accas.SIMP): - return SIMP_CATA(objet,pere,nom) - else: - print "Erreur dans make_mc_cata : on cherche à évaluer un objet non référencé ",objet - -class TYPE_CATA: - def __init__(self,objet): - self.objet = objet - self.nom = objet.__name__ - - def isvalid(self,cr='non'): - return 1 - - def get_valeur_attribut(self,nom_attr): - if nom_attr == 'nom':return self.nom - return None - -class OBJET_CATA: - attributs=[] - attributs_defauts={} - def __init__(self,objet,pere,nom): - self.objet = objet - self.nom = nom - self.pere = pere - self.cr = CR() - self.state='undetermined' - self.entites_fils = [] - self.entites_attributs = {} - self.build_entites_attributs() - self.build_entites_fils() - - def __str__(self): - s='' - s=self.__class__.__name__+' : '+self.nom - return s - - def build_entites_attributs(self): - for attribut in self.attributs: - if hasattr(self.objet,attribut): - self.entites_attributs[attribut]=ATTR_CATA(attribut,getattr(self.objet,attribut)) - else: - if self.attributs_defauts.has_key(attribut): - self.entites_attributs[attribut]=ATTR_CATA(attribut,self.attributs_defauts[attribut]) - else: - self.entites_attributs[attribut]=ATTR_CATA(attribut,None) - - def build_entites_fils(self): - for k,v in self.objet.entites.items(): - self.entites_fils.append(make_mc_cata(v,self,nom=k)) - - def get_valeur_attribut(self,nom_attr): - if nom_attr in self.entites_attributs.keys(): - return self.entites_attributs[nom_attr].valeur - elif nom_attr in self.attributs_defauts.keys(): - return self.attributs_defauts[nom_attr] - elif nom_attr == 'domaine_validité': - if self.entites_attributs['into'].valeur != None : - return 'discret' - else: - return 'continu' - - def isvalid(self,cr='non'): - if self.state =='unchanged': - return self.valid - else: - valid = 1 - if hasattr(self,'valid'): - old_valid = self.valid - else: - old_valid = None - # on teste self lui-meme - if self.nom == '' or self.nom == None : valid=0 - # on teste les attributs - for attribut in self.entites_attributs.values(): - if not attribut.isvalid() : valid =0 - break - # on teste les fils - for fils in self.entites_fils: - if not fils.isvalid(): valid = 0 - break - self.valid = valid - self.state = 'unchanged' - if old_valid: - if old_valid != self.valid : self.init_modif_up() - return self.valid - - def init_modif_up(self): - self.pere.state='modified' - - def report(self): - self.cr.purge() - self.cr.debut="Debut "+self.__class__.__name__+' : '+self.nom - self.cr.fin = "Fin "+self.__class__.__name__+' : '+self.nom - self.isvalid(cr='oui') - for attribut in self.entites_attributs.values(): - self.cr.add(attribut.report()) - for fils in self.entites_fils : - self.cr.add(fils.report()) - return self.cr - - def set_valeur_attribut(self,nom_attr,valeur): - """ - Affecte la valeur 'valeur' à l'attribut de nom 'nom-attr' - """ - # il faudra être prudent sur les changements de nom : interdire de changer - # le nom d'un mot-clé qui serait utilisé dans une règle ??? - self.entites_attributs[nom_attr].valeur = valeur - - def addentite(self,name,pos): - """ - Permet d'ajouter un nouveau fils a self - """ - self.init_modif() - if name == 'new_simp': - objet = Accas.SIMP(typ=('bidon',)) - objet_cata = make_mc_cata(objet,self) - self.entites_fils.insert(pos,objet_cata) - return objet_cata - - def init_modif(self): - self.state = 'modified' - if hasattr(self,'pere'): - self.pere.init_modif() - - def verif_nom(self,cr='non'): - """ - Méthode appelée par EFICAS et ACCAS - Booléenne : retourne 1 si l'attribut nom est valide, 0 sinon - """ - if self.entites_attributs['nom'].valeur == '': - if cr == 'oui' : self.cr.fatal("L'objet de type %s n'est pas nommé" %self.__class__.__name__) - return 0 - return 1 - - def verif_defaut(self,cr='non'): - """ - Méthode de vérification de validité du défaut - """ - defaut = self.get_valeur_attribut('defaut') - if self.get_valeur_attribut('domaine_validite') == 'discret' : - if defaut not in self.get_valeur_attribut('into'): - if cr == 'oui' : self.cr.fatal("La valeur %s n'est pas autorisée" %str(defaut)) - return 0 - return 1 - else: - if defaut == None : return 1 - typ = self.get_valeur_attribut('type') - # on attend un TXM ? - if 'TXM' in typ : - if type(defaut) == types.StringType : return 1 - val_min = self.get_valeur_attribut('val_min') - val_max = self.get_valeur_attribut('val_max') - # on attend un reel ? - if 'R' in typ : - if type(defaut) == types.StringType: - try : - nb = string.atof(defaut) - except: - nb=None - else: - nb = defaut - if nb != None : - test = 1 - if val_min != '**' : test = (nb >= val_min) - if val_max != '**' : test = test*(nb <= val_max) - if test : return 1 - # on attend un entier ? - if 'I' in typ : - if type(defaut)==types.StringType: - try: - nb = string.atoi(defaut) - except: - pass - else: - nb = defaut - if nb != None : - test = 1 - if val_min != '**' : test = (nb >= val_min) - if val_max != '**' : test = test*(nb <= val_max) - if test : return 1 - # si on passe par là, c'est que l'on n'a pas su évaluer defaut - if cr == 'oui' : self.cr.fatal("La valeur %s n'est pas une valeur permise" %str(defaut)) - return 0 - - def verif_val_min(self,cr='non'): - """ - Méthode de vérification de val_min. - Booléenne : retourne 1 si val_min est valide, 0 sinon - """ - val_min = self.get_valeur_attribut('val_min') - if not val_min : - if cr == 'oui' : self.cr.fatal('val_min ne peut valoir None') - return 0 - if val_min == '**': return 1 - # val_min doit à ce stade être : - # - soit un entier ou un réel - # - soit une chaîne de caractères représentant un entier ou un réel (provient d'EFICAS) - if type(val_min) == types.StringType : - try : - val_min = string.atoi(val_min) - except: - try: - val_min = string.atof(val_min) - except: - if cr == 'oui' : self.cr.fatal("%s n'est ni un entier ni un réel" %str(val_min)) - return 0 - # A ce stade, val_min doit être un entier ou un réel : on vérifie ... - if type(val_min) not in (types.IntType,types.FloatType) : - if cr == 'oui' : self.cr.fatal("%s n'est pas d'un type autorisé" %str(val_min)) - return 0 - # A ce stade valeur est un entier ou un réel : on peut comparer à val_max - val_max = self.get_valeur_attribut('val_max') - if val_max == '**' or val_min < val_max : return 1 - # erreur : val_min est supérieur à val_max !!! - if cr == 'oui' : self.cr.fatal("%s n'est pas inférieur à %s" %(str(val_min),str(val_max))) - return 0 - - def verif_val_max(self,cr='non'): - """ - Méthode de vérification de val_max. - Booléenne : retourne 1 si val_max est valide, 0 sinon - """ - val_max = self.get_valeur_attribut('val_max') - if not val_max : - if cr == 'oui' : self.cr.fatal('val_max ne peut valoir None') - return 0 - if val_max == '**': return 1 - # val_max doit à ce stade être : - # - soit un entier ou un réel - # - soit une chaîne de caractères représentant un entier ou un réel (provient d'EFICAS) - if type(val_max) == types.StringType : - try : - val_max = string.atoi(val_max) - except: - try: - val_max = string.atof(val_max) - except: - if cr == 'oui' : self.cr.fatal("%s n'est ni un entier ni un réel" %str(val_max)) - return 0 - # A ce stade, val_max doit être un entier ou un réel : on vérifie ... - if type(val_max) not in (types.IntType,types.FloatType) : - if cr == 'oui' : self.cr.fatal("%s n'est pas d'un type autorisé" %str(val_max)) - return 0 - # A ce stade valeur est un entier ou un réel : on peut comparer à val_max - val_min = self.get_valeur_attribut('val_min') - if val_min == '**' or val_min < val_max : return 1 - # erreur : val_min est supérieur à val_max !!! - if cr == 'oui' : self.cr.fatal("%s n'est pas supérieur à %s" %(str(val_max),str(val_min))) - return 0 - -class OPER_CATA(OBJET_CATA): - attributs = ['ang','docu','fr','niveau','nom','op','op_init','reentrant','regles','repetable','sd_prod'] - -class PROC_CATA(OBJET_CATA): - attributs = ['ang','docu','fr','niveau','nom','op','op_init','regles','repetable'] - -class MACRO_CATA(OBJET_CATA): - attributs = ['ang','docu','fr','niveau','nom','op','op_init','reentrant','regles','repetable','sd_prod'] - -class BLOC_CATA(OBJET_CATA): - attributs = ['ang','condition','docu','fr','nom','regles'] - -class FACT_CATA(OBJET_CATA): - attributs=['ang','defaut','docu','fr','max','min','nom','regles','statut'] - -class SIMP_CATA(OBJET_CATA): - attributs=['ang','defaut','docu','fr','homo','into','max','min','nom','position','statut','type','val_min','val_max'] - attributs_defauts={'ang':'','defaut':None,'fr':'','homo':1,'into':None,'max':1,'min':1,'nom' : '','position':'local', - 'regles':None,'statut':'f','type':None,'val_min':'**','val_max':'**','docu':''} - - def build_entites_fils(self): - pass - - def isvalid(self,cr='non'): - """ - Mde appelpar l'externe (EFICAS et ACCAS). - Boolne : retourne 1 si l'objet est valide, 0 sinon - """ - if self.state == 'unchanged': - return self.valid - else: - valid = 1 - valid = valid*self.verif_nom(cr=cr) - valid = valid*self.verif_defaut(cr=cr) - valid = valid*self.verif_val_min(cr=cr)*self.verif_val_max(cr=cr) - if hasattr(self,'valid'): - old_valid = self.valid - else: - old_valid = None - self.valid = valid - self.state='unchanged' - if old_valid : - if old_valid != self.valid : self.init_modif_up() - return self.valid - -class NIVEAU_CATA(OBJET_CATA): - def __init__(self,objet,pere,nom): - self.pere = pere - self.nom = nom - self.state = 'undetermined' - self.cr = CR() - self.objet = objet - self.entites_fils=[] - self.entites_attributs = {} - - def register(self,fils): - """ - Enregistre la commande 굡pe : - - si editmode = 0 : on est en mode relecture d'un fichier de commandes - auquel cas on ajoute etape ࡬a fin de la liste self.etapes - - si editmode = 1 : on est en mode ajout d'굡pe depuis eficas auquel cas - cette mode ne fait rien, c'est addentité enregistre etape ࡬a bonne place - dans self.etapes - """ - self.entites_fils.append(fils) - - def unregister(self,etape): - self.entites_fils.remove(etape) - - def isvalid(self,cr='non'): - """ Mode boolne qui retourne 0 si le niveau est invalide, 1 sinon """ - if self.state == 'unchanged': - return self.valid - else: - valid = 1 - if len(self.entites_fils) == 0: - #valid = self.Accas.valide_vide - valid = 1 - else: - for commande in self.entites_fils : - if hasattr(commande,'isvalid'): - if not commande.isvalid() : - valid = 0 - break - else: - print str(commande)," n'a pas de methode isvalid" - if hasattr(self,'valid'): - old_valid = self.valid - else: - old_valid = None - self.valid = valid - self.state='unchanged' - if old_valid: - if old_valid != self.valid : self.init_modif_up() - return self.valid - - -class ATTR_CATA(OBJET_CATA): - def __init__(self,nom,valeur=None): - self.nom = nom - self.valeur = valeur - self.cr = CR() - self.state='undetermined' - self.entites_attributs={} - self.entites_fils=() - - def isvalid(self,cr='non'): - return 1 - -def isCMD(cmd): - return isinstance(cmd,Accas.OPER) or isinstance(cmd,Accas.PROC) or isinstance(cmd,Accas.MACRO) or isinstance(cmd,Accas.FORM) - diff --git a/Editeur/eficas.py b/Editeur/eficas.py deleted file mode 100644 index caf47fb8..00000000 --- a/Editeur/eficas.py +++ /dev/null @@ -1,143 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module contient la classe EFICAS qui est l'application - proprement dite. Elle est dérivée de la classe APPLI -""" -# Modules Python -import string -from Tkinter import Label -import Pmw -import traceback - -# Modules Eficas -from widgets import showerror -from widgets import askopenfilename -import patches -import appli -from widgets import Fenetre - -class EFICAS(appli.APPLI): - - try: - from prefs import appli_composants - except: - appli_composants=['readercata','bureau','browser','options'] - - def get_texte_infos(self): - texte=appli.APPLI.get_texte_infos(self) - texte = texte + 'Catalogue utilisé : %s\n' % self.bureau.fic_cata - return texte - - def exitEFICAS(self): - self.bureau.exitEFICAS() - - def getBureau(self): - return self.bureau - - def browse(self,result): - if result == 'Browse': - self.ulfile = askopenfilename(parent=self.dialog.component('hull'),title="Choix fichier :") - self._ulfile.setentry(self.ulfile) - elif result == 'OK': - self.ulfile = self._ulfile.get() - # On utilise le convertisseur défini par format_fichier - source=self.get_source(self.ulfile) - if source: - # On a réussi à convertir le fichier self.ulfile - self.dialog.deactivate(result) - self.text=source - else: - # Une erreur a été rencontrée - self.text='' - elif result == 'Cancel': - self._ulfile.setentry('') - self.dialog.deactivate(result) - self.ulfile = None - self.text="" - - def get_file(self,unite=None,fic_origine = ''): - """ - Retourne le nom du fichier correspondant a l unite logique unite (entier) - """ - if unite : - titre = "Choix unite %d " %unite - else: - titre = "Choix d'un fichier de poursuite" - self.dialog=Pmw.Dialog(self.top, - title = titre, - buttons = ('OK', 'Browse','Cancel'), - defaultbutton='OK', - command=self.browse, - ) - self.dialog.withdraw() - if unite : - texte = "Le fichier %s contient une commande INCLUDE \n" % fic_origine - texte = texte+'Donnez le nom du fichier correspondant\n à l unité logique %d' % unite - else: - texte="Le fichier %s contient une commande %s\n" %(fic_origine,'POURSUITE') - texte = texte+'Donnez le nom du fichier dont vous \n voulez faire une poursuite' - if self.test == 1: raise Exception("Erreur: "+texte) - w = Label(self.dialog.interior(), - text = texte) - w.pack(padx = 10, pady = 10) - if unite != None : - labeltexte = 'Fichier pour unite %d :' % unite - else: - labeltexte = 'Fichier à poursuivre :' - self._ulfile=Pmw.EntryField(self.dialog.interior(), - labelpos = 'w', - label_text = labeltexte, - ) - self._ulfile.pack(fill='x', expand=1, padx=10, pady=5) - self._ulfile.component('entry').focus_set() - self.dialog.activate(geometry='centerscreenalways') - return self.ulfile,self.text - - def get_source(self,file): - import convert - format=self.format_fichier.get() - # Il faut convertir le contenu du fichier en fonction du format - if convert.plugins.has_key(format): - # Le convertisseur existe on l'utilise - p=convert.plugins[format]() - p.readfile(file) - text=p.convert('execnoparseur') - if not p.cr.estvide(): - self.affiche_infos("Erreur à la conversion") - Fenetre(self, - titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier", - texte = str(p.cr)).wait() - return text - return text - else: - # Il n'existe pas c'est une erreur - self.affiche_infos("Type de fichier non reconnu") - showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier") - return None - - def affiche_texte(self,entete,texte): - """Cette methode ouvre une fenetre modale dans laquelle on affiche un texte - """ - self.affiche_infos(entete) - f=Fenetre(self, titre=entete, texte = texte) - f.wait() - diff --git a/Editeur/eficas_go.py b/Editeur/eficas_go.py deleted file mode 100644 index 84e8e7a2..00000000 --- a/Editeur/eficas_go.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module permet de lancer l'application EFICAS en affichant - un ecran Splash pour faire patienter l'utilisateur -""" -# Modules Python -import sys -import Tkinter - -# Modules Eficas -import prefs -if hasattr(prefs,'encoding'): - # Hack pour changer le codage par defaut des strings - import sys - reload(sys) - sys.setdefaultencoding(prefs.encoding) - del sys.setdefaultencoding - # Fin hack - -import styles -import import_code -import splash -import session - -def lance_eficas(code=None,fichier=None): - """ - Lance l'appli EFICAS - """ - # Analyse des arguments de la ligne de commande - options=session.parse(sys.argv) - code=options.code - - root = Tkinter.Tk() - splash.init_splash(root,code=code,titre="Lancement d'EFICAS pour %s" %code) - splash._splash.configure(text="Chargement d'EFICAS en cours.\n Veuillez patienter ...") - import eficas - eficas.EFICAS(root,code=code) - - root.mainloop() - diff --git a/Editeur/eficas_test.py b/Editeur/eficas_test.py deleted file mode 100644 index 6ff3db51..00000000 --- a/Editeur/eficas_test.py +++ /dev/null @@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module permet de lancer l'application EFICAS en affichant - un ecran Splash pour faire patentier l'utilisateur -""" -# Modules Python -import sys -import Tkinter - -# Modules Eficas -import import_code -import session - -def lance_eficas(code,fichier=None): - """ - Lance l'appli EFICAS - """ - options=session.parse(sys.argv) - root = Tkinter.Tk() - import eficas - if fichier : - a=eficas.EFICAS(root,code=code,fichier = fichier,test=1) - bureau=a.getBureau() - else: - eficas.EFICAS(root,code=code) - - print bureau.JDC.report() - bureau.closeJDC() - -def duplique_fichier(code,fichier=None,root=None): - print code - print fichier - if root == None : - root = Tkinter.Tk() - import eficas - import convert - import generator - import utils - import string - - from Editeur import session - if fichier != None : - options=session.parse(sys.argv+[fichier]) - else : - options=session.parse(sys.argv) - - appli=eficas.EFICAS(root,code=code,fichier = fichier,test=1) - format='homard' - if convert.plugins.has_key(format): - p=convert.plugins[format]() - p.readfile(fichier) - text=p.convert('exec',appli) - print text - text2=convertir(text) - print text2 - cata=appli.readercata.cata - J=cata[0].JdC(procedure=text2,cata=cata) - J.analyse() - fileName=fichier+"_init" - if generator.plugins.has_key(format): - g=generator.plugins[format]() - jdc_formate=g.gener(J,format='beautifie') - jdc_fini = string.replace(jdc_formate,'\r\n','\n') - utils.save_in_file(fileName+".comm",jdc_fini,None) - -def convertir(texte): - import re - dict_change={"FICHIER_MED_MAILLAGE_N=":"FICHIER_MED_MAILLAGE_NP1","NOM_MED_MAILLAGE_N=":"NOM_MED_MAILLAGE_NP1"} - for mot in dict_change.keys(): - if( re.search(mot,texte)): - indicenouveau=re.search(mot,texte).end() - indicefinnouveau= texte.find(",",indicenouveau) - avant=dict_change[mot] - if( re.search(avant,texte)): - indiceancien=re.search(avant,texte).end()+1 - indicefinancien= texte.find(",",indiceancien) - valeur=texte[indiceancien:indicefinancien] - texte=texte[0:indicenouveau]+valeur+texte[indicefinnouveau:] - liste_mot_clef_None=['CRIT_RAFF_ABS','CRIT_RAFF_REL','CRIT_RAFF_PE','CRIT_DERA_ABS','CRIT_DERA_REL','CRIT_DERA_PE','NITER','NOM_MED_MAILLAGE_NP1','FICHIER_MED_MAILLAGE_NP1'] - - for mot in liste_mot_clef_None: - if( re.search(mot,texte)): - indice=re.search(mot,texte).end()+1 - indicefin= texte.find(",",indice) - texte=texte[0:indice]+"None"+texte[indicefin:] - return texte - diff --git a/Editeur/faq.py b/Editeur/faq.py deleted file mode 100644 index 30764b53..00000000 --- a/Editeur/faq.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module sert a afficher le texte du FAQ EFICAS - et à attendre l'acquittement par l'utilisateur -""" -# Modules Python -import os -import Pmw -from Tkinter import END - -# Modules Eficas -import prefs -import fontes - -class FAQ: - def __init__(self,parent): - self.parent=parent - self.Dialog = Pmw.Dialog(parent, - buttons=('Lu',), - title="FAQs et limitations d'EFICAS", - command = self.lu_FAQ) - txt = open(os.path.join(prefs.INSTALLDIR,'Editeur','faqs.txt'),'r').read() - Texte = Pmw.ScrolledText(self.Dialog.interior(), - text_font=fontes.standard) - Texte.insert(END,txt) - Texte.pack(expand=1,fill='both') - self.Dialog.activate(geometry = 'centerscreenalways') - - def lu_FAQ(self,event=None): - self.Dialog.destroy() - -def affiche(parent): - FAQ(parent) diff --git a/Editeur/fenetre_mc_inconnus.py b/Editeur/fenetre_mc_inconnus.py deleted file mode 100644 index 35b118ac..00000000 --- a/Editeur/fenetre_mc_inconnus.py +++ /dev/null @@ -1,223 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" -""" -# Modules Python -from Tkinter import * -import copy - -# Modules Eficas -from centerwindow import centerwindow - -class fenetre_mc_inconnus : - """ - Cette classe sert à construire la fenêtre qui apparaît dans EFICAS - lorsque des mots-clés inconnus ont été trouvés dans le fichier de - commandes que l'on est en train de lire - """ - def __init__(self,l_mc): - self.l_mc = l_mc - self.fenetre = Toplevel() - self.fenetre.withdraw() - self.fenetre.geometry("400x400+0+0") - self.fenetre.title("Mots-clés inconnus dans le fichier de commandes") - self.init() - self.init_frames() - self.init_label() - self.init_liste_mc() - self.init_boutons() - centerwindow(self.fenetre) - self.fenetre.deiconify() - - def init(self) : - """ - Initialise les structures de données - """ - self.new_l_mc = [] - for mc in self.l_mc : - self.new_l_mc.append(copy.copy(mc)) - self.mc_courant = None - self.var_quit = IntVar(0) - self.entry_courante = None - - def init_frames(self): - """ - Création des 2 frames devant contenir le label et la liste des MC inconnus - """ - self.frame1 = Frame(self.fenetre) - self.frame2 = Frame(self.fenetre) - self.frame3 = Frame(self.fenetre) - self.frame1.place(relx=0,rely=0,relheight=0.2,relwidth=1) - self.frame2.place(relx=0,rely=0.2,relheight=0.6,relwidth=1) - self.frame3.place(relx=0,rely=0.8,relheight=0.2,relwidth=1) - - def init_label(self): - """ - Affichage du label dans la zone concernée - """ - txt = " Un ou plusieurs mots-clés inconnus ont été trouvés dans le fichier de commandes." - #txt = txt + "En cliquant sur leur nom, vous pourrez soit corriger l'orthographe soit supprimer ce mot-clé" - self.fenetre.update_idletasks() - Label(self.frame1, - text = txt, - wraplength = int(self.frame1.winfo_width()*0.8), - justify = 'center').place(relx=0.5,rely=0.5,anchor='center') - - - def init_liste_mc(self): - """ - Affiche les mots-clés à modifier ou supprimer - """ - i=0 - self.widgets=[] - for mc in self.l_mc : - # mc est une liste : - # mc contient comme premiers arguments l'étape et éventuellement les blocs, mcfact ... - # et contient comme 2 derniers éléments le nom du mot-clé et sa valeur - path_mc = self.get_path(mc[0:-2]) - nom_mc = mc[-2] - lab=Label(self.frame2,text = path_mc) - lab.grid(row=i,column=1,sticky=W) - e = Entry(self.frame2) - e.grid(row=i,column=0,sticky=W) - e.insert(END,nom_mc) - #e.bind("",lambda event,en=e,m=mc,s=self : s.select_mc(m,en)) - #e.bind("",lambda e,s=self : s.modifie_mc()) - e.configure(relief='flat',state='disabled') - self.widgets.append((e,lab)) - i=i+1 - - def init_boutons(self): - """ - Construit les boutons Modifier,Supprimer et Fermer - Les deux premiers sont inactifs tant qu'aucun mot-clé n'est sélectionné - """ - self.b_mod = Button(self.frame3, - text = "Modifier", - disabledforeground = 'grey35', - state='disabled', - command = self.modifie_mc) - self.b_sup = Button(self.frame3, - text = "Supprimer", - disabledforeground = 'grey35', - state='disabled', - command = self.supprime_mc) - self.b_quit = Button(self.frame3, - text = "Fermer", - command = self.quit) - #self.b_mod.place(relx=0.25,rely=0.5,anchor='center') - #self.b_sup.place(relx=0.50,rely=0.5,anchor='center') - #self.b_quit.place(relx=0.75,rely=0.5,anchor='center') - self.b_quit.place(relx=0.50,rely=0.5,anchor='center') - - def wait_new_list(self): - """ - Cette méthode rend cette toplevel bloquante. - Dès que la variable var_quit est modifiée, on continue l'exécution de cette - méthode (et on quitte) - """ - self.fenetre.wait_variable(self.var_quit) - self.fenetre.destroy() - return self.new_l_mc - - def get_path(self,l_o): - """ - Construit la chaîne de caractère contenant le chemin d'accès complet du mot-clé - """ - txt = '' - for o in l_o : - txt = txt + o.nom+'/' - # on enlève le dernier slash en trop - txt = txt[0:-1] - return txt - - def select_mc(self,mc,entry): - """ - Enregistre le mot-clé passé en argument comme mot-clé courant - Active les boutons Modifier et Supprimer - """ - self.desactive_entry() - self.mc_courant = mc - self.entry_courante = entry - self.active_boutons() - self.active_entry() - - def modifie_mc(self): - """ - Modifie le nom du mot-clé en prenant la nouvelle valeur lue dans entry_courante - """ - new_nom_mc = self.entry_courante.get() - index = self.l_mc.index(self.mc_courant) - new_mc = self.new_l_mc[index] - new_mc[-2] = new_nom_mc - objet_pere = self.mc_courant[-3] - - self.desactive_boutons() - self.desactive_entry() - - def supprime_mc(self): - """ - Supprime le mot-clé courant de la liste - """ - index = self.l_mc.index(self.mc_courant) - self.new_l_mc[index] = None - e,lab=self.widgets[index] - e.grid_remove() - lab.grid_remove() - self.desactive_boutons() - self.desactive_entry() - - def desactive_boutons(self): - """ - Désactive les boutons Modifier et Supprimer - """ - self.b_mod.configure(state='disabled') - self.b_sup.configure(state='disabled') - - def active_boutons(self): - """ - Active les boutons Modifier et Supprimer - """ - self.b_mod.configure(state='normal') - self.b_sup.configure(state='normal') - - def desactive_entry(self): - """ - Désactive l'entry courante si elle existe - """ - if self.entry_courante : - self.entry_courante.configure(state='disabled',relief='flat') - - def active_entry(self): - """ - Active l'entry courante si elle existe - """ - if self.entry_courante : - self.entry_courante.configure(state='normal',relief='sunken') - - def quit(self): - """ - Permet de fermer la fenêtre - """ - self.var_quit.set(1) - -if __name__ == '__main__': - fenetre_mc_inconnus(('toto','titi')) diff --git a/Editeur/fonctionpanel.py b/Editeur/fonctionpanel.py deleted file mode 100644 index a5661581..00000000 --- a/Editeur/fonctionpanel.py +++ /dev/null @@ -1,293 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -import prefs -import panels -import images -from widgets import ListeChoix -from widgets import FenetreDeSelection -from widgets import askopenfilename -from widgets import showinfo - -from Noyau.N_CR import justify_text -from utils import substract_list -from plusieursbasepanel import PLUSIEURS_BASE_Panel - - -class FONCTION_Panel(PLUSIEURS_BASE_Panel): - def makeValeurPage(self,page): - """ - Crée la page de saisie d'une liste de valeurs à priori quelconques, - cad qui ne sont pas à choisir dans une liste prédéfinie - """ - genea=self.node.item.get_genealogie() - if "VALE" in genea: - self.nb_valeurs=2 - if "VALE_C" in genea: - self.nb_valeurs=3 - # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste), - # et la liste des valeurs déjà affectées à l'objet courant - bulle_aide=self.get_bulle_aide() - objet_mc = self.node.item.get_definition() - aide = self.get_aide() - aide = justify_text(texte=aide) - min,max = self.node.item.GetMinMax() - l_valeurs = self.node.item.GetListeValeurs() - l2_valeurs=self.decoupeListeValeurs(l_valeurs) - - # création des frames globales - self.frame1 = Frame(page,relief='groove',bd=2) - self.frame2 = Frame(page) - self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85) - self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15) - self.frame_right = Frame(self.frame1) - self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.) - - # création des frames internes - self.frame_valeurs = Frame(self.frame1) - self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95) - self.frame_boutons_fleches = Frame(self.frame_right) - self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5) - self.frame_choix = Frame(self.frame_right) - self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.5) - self.frame_aide = Frame(self.frame_right) - self.frame_aide.place(relx=0.1,rely=0.7,relwidth=0.8,relheight=0.3) - self.frame_boutons = Frame(self.frame2) - self.frame_boutons.place(relx=0.35,rely=0.,relwidth=0.5,relheight=1.) - for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs, - self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons): - fram.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - fram.bind("",self.parent.appli.efface_aide) - - # création des objets dans les frames - liste_commandes_valeurs = (("",self.selectValeur), - ("",self.deselectValeur), - ("",self.afficheValeurListe)) - self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l2_valeurs,liste_commandes = liste_commandes_valeurs, - titre="Valeur(s) actuelle(s)") - - # Création de l'entry ou de la liste des SD - self.label = Label(self.frame_choix,text="Valeur :") - self.make_entry(frame = self.frame_choix,command = self.add_double_valeur_plusieurs_base) - self.label.place(relx=0.05,rely=0.5) - - # Création d'un bouton "Importer ..." sur le panel. - bouton_valeurs_fichier = Button(self.frame_choix, - text="Importer ...", - command=self.select_in_file) - bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6) - self.ajout_valeurs = None - - # boutons Ajouter et Supprimer - self.bouton_add = Button(self.frame_boutons_fleches, - image = images.get_image('arrow_left'), - command = self.add_double_valeur_plusieurs_base) - self.bouton_sup = Button(self.frame_boutons_fleches, - image = images.get_image('arrow_right'), - command = self.sup_valeur_sans_into) - self.bouton_add.place(relx=0.3,rely=0.35) - self.bouton_sup.place(relx=0.3,rely=0.65) - # affichage de l'aide - self.frame_aide.update() - self.aide = Label(self.frame_aide, - text = aide, - justify='center', - anchor='center', - wraplength=int(self.frame_aide.winfo_width()*0.8)) - self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1) - self.Liste_valeurs.affiche_liste() - # boutons Accepter et Annuler - self.bouton_accepter = Button(self.frame_boutons, - text='Valider', - command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur_recolle(m,M)) - self.bouton_annuler = Button(self.frame_boutons, - text = 'Annuler', - command = self.annule_modifs_valeur) - for but in (self.bouton_accepter,self.bouton_annuler): - but.pack(side='left',padx=4) - - - def afficheValeurListe(self,name): - self.display_valeur(name) - - def decoupeListeValeurs(self,liste): - #decoupe la liste des valeurs en n ( les x puis les y) - nb=self.nb_valeurs - l_valeurs=[] - if (len(liste)%nb != 0): - message="La cardinalité n'est pas correcte, la dernière valeur est ignorée" - showinfo("Problème",message) - for i in range(len(liste)/nb) : - if (nb==2): - t=(liste[i*nb], liste[i*nb+1]) - else: - t=(liste[i*nb], liste[i*nb+1], liste[i*nb+2]) - l_valeurs.append(t) - return l_valeurs - - - def accepte_modifs_valeur_recolle(self,min,max): - l_valeurs=[] - l1_valeurs = self.Liste_valeurs.get_liste() - for val in l1_valeurs : - for item in val : - l_valeurs.append(item) - self.accepte_modifs_valeur(min,max,l_valeurs) - - - def add_double_valeur_plusieurs_base(self): - # on verifie qu'il s agit bien d un tuple - # on enleve les parentheses eventuelles - #doublevaleur_entree,validite,commentaire=self.get_valeur_double() - doublevaleur_entree= self.entry.get() - try: - if doublevaleur_entree[0]=='(' : - doublevaleur_entree=doublevaleur_entree[1:-1] - if doublevaleur_entree[-1]==')' : - doublevaleur_entree=doublevaleur_entree[0:-2] - val1=doublevaleur_entree.split(',')[0] - val2=doublevaleur_entree.split(',')[1] - saisie=(val1,val2) - if (self.nb_valeurs==3): - val3=doublevaleur_entree.split(',')[2] - saisie=(val1,val2,val3) - self.entry.delete(0,END) - except : - commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree` - if (self.nb_valeurs==3): - commentaire = "%s n est pas un tuple de la forme (x,y,z)" %`doublevaleur_entree` - self.parent.appli.affiche_infos(commentaire) - return - - # et seulement d un tuple - try: - val=doublevaleur_entree.split(',')[self.nb_valeurs] - commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree` - if (self.nb_valeurs==3): - commentaire = "%s n est pas un tuple de la forme (x,y,z)" %`doublevaleur_entree` - self.parent.appli.affiche_infos(commentaire) - self.parent.appli.affiche_infos(commentaire) - return - except : - # c est la le cas normal - pass - - # on verifie la validite des valeurs sont correctes - valeur,validite=self.node.item.eval_valeur(saisie) - if not validite : - commentaire = "impossible d'évaluer : %s " %`doublevaleur_entree` - self.parent.appli.affiche_infos(commentaire) - return - - # on verifie la validite de la liste - liste=[] - l1_valeurs = self.Liste_valeurs.get_liste() - for val in l1_valeurs : - for item in val : - liste.append(item) - validite_liste=self.node.item.valide_liste_partielle(valeur[0],liste) - if not validite_liste: - commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree` - self.parent.appli.affiche_infos(commentaire) - return - # liste a deja ete modifiee par l appel precedent a valide_liste_partielle - # et contient deja valeur[0] - validite_liste=self.node.item.valide_liste_partielle(valeur[1],liste) - if not validite_liste: - commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree` - self.parent.appli.affiche_infos(commentaire) - return - - # si une valeur est selectionnee on insere apres - # sinon on ajoute la valeur à la fin - if (self.Liste_valeurs.selection != None): - ligne=self.Liste_valeurs.cherche_selected_item() - if self.nb_valeurs==2: - l1_valeurs.insert(ligne,(valeur[0],valeur[1])) - else : - l1_valeurs.insert(ligne,(valeur[0],valeur[1],valeur[2])) - else : - if self.nb_valeurs==2: - l1_valeurs.append((valeur[0],valeur[1])) - else : - l1_valeurs.append((valeur[0],valeur[1],valeur[2])) - i = 0 - while i < self.nb_valeurs : - self.set_valeur_texte(saisie[i]) - i=i+1 - self.Liste_valeurs.put_liste(l1_valeurs) - self.Liste_valeurs.affiche_liste() - - - def display_valeur(self,val=None): - """ - Affiche la valeur passée en argument dans l'entry de saisie. - Par défaut affiche la valeur du mot-clé simple - Doit être redéfinie pour un pb avec les parametres dans un tuple - """ - if not val : - valeur = self.node.item.object.getval() - else: - valeur = val - if not valeur : return - - try: - affiche="(" - separe="" - for val in valeur: - affiche=affiche+separe+str(val) - separe="," - affiche=affiche+")" - self.entry.delete(0,END) - self.entry.insert(0,affiche) - except : - self.entry.delete(0,END) - -# Surcharge de select in file pour prendre en compte la saisie de tuple - def select_in_file(self): - """ Permet d'ouvrir un fichier choisi par l'utilisateur. """ - nom_fichier = askopenfilename(title="Choix fichier :") - - if not nom_fichier: - return - - try: - f = open(nom_fichier, "rb") - selection_texte = f.read() - f.close() - self.add_double_valeur_plusieurs_base = FenetreDeSelection(self, - self.node.item, - self.parent.appli, - titre="Sélection de valeurs", - texte=selection_texte, - cardinal = self.nb_valeurs) - except: - traceback.print_exc() - showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier) - diff --git a/Editeur/fontes.py b/Editeur/fontes.py deleted file mode 100644 index 8e158927..00000000 --- a/Editeur/fontes.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -standard = ("Times",10) -standard_italique = ("Times",10,'italic') -standard_gras = ("Times",10,'bold') -standard_gras_souligne = ("Times",10,'bold','underline') - -canvas = ('times',8) -canvas_italique = ('times',8,'italic') -canvas_gras = ("Times",8,'bold') -canvas_gras_italique = ("Times",10,'bold','italic') - -standard12 = ("Times",12) -standard12_gras = ("Times",12,'bold') -standard12_gras_italique = ( "times",12,'bold','italic') - -standardcourier10 = ("Courier",10) - diff --git a/Editeur/icons/ast-yellow-square.gif b/Editeur/icons/ast-yellow-square.gif new file mode 100755 index 00000000..5f9ec19b Binary files /dev/null and b/Editeur/icons/ast-yellow-square.gif differ diff --git a/Editeur/icons/empty.png b/Editeur/icons/empty.png new file mode 100644 index 00000000..ff59051f Binary files /dev/null and b/Editeur/icons/empty.png differ diff --git a/Editeur/images.py b/Editeur/images.py deleted file mode 100644 index 9cdfa19a..00000000 --- a/Editeur/images.py +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module joue le role de cache pour les images stockées - dans le repertoire ICONDIR -""" - -import os -import Tkinter - -if __name__ == '__main__': - # Programme de test - import sys - import images - root=Tkinter.Tk() - frame = Tkinter.Frame(root) - frame.pack(expand=1,fill='both') - - for name in ('About24','Save24'): - Tkinter.Label(frame, image=images.get_image(name)).pack(side=Tkinter.TOP) - - root.mainloop() - sys.exit() - -try: - import prefs - ICONDIR=prefs.ICONDIR -except: - # Par defaut on utilise le repertoire local icons - ICONDIR=os.path.join(os.path.abspath(os.path.dirname(__file__)),'icons') - -dico_images={} - -def get_image(name): - if dico_images.has_key(name): - return dico_images[name] - else : - fic_image = os.path.join(ICONDIR,name) - if not os.path.isfile(fic_image): - file, ext = os.path.splitext(fic_image) - fic_image = file + '.gif' - image = Tkinter.PhotoImage(file=fic_image) - dico_images[name]=image - return image - -def update_cache(): - global dico_images - dico_images={} - diff --git a/Editeur/import_code.py b/Editeur/import_code.py index 942c6b4a..9dec4a20 100644 --- a/Editeur/import_code.py +++ b/Editeur/import_code.py @@ -24,6 +24,7 @@ """ import sys import prefs + # Ce chemin permet d'importer les modules Noyau et Validation # représentant le code utilisé (si fourni) if prefs.CODE_PATH: diff --git a/Editeur/jdcdisplay.py b/Editeur/jdcdisplay.py deleted file mode 100644 index c5a3eeba..00000000 --- a/Editeur/jdcdisplay.py +++ /dev/null @@ -1,285 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module contient la classe JDCDISPLAY qui réalise l'affichage - du jeu de commandes sous la forme d'un arbre et de panneaux qui portent - les informations attachées au noeud de l'arbre sélectionné -""" -# Modules Python -import types,sys -import traceback -import Tkinter -import Pmw - -# Modules Eficas -import panels -from treeitemincanvas import TREEITEMINCANVAS -from widgets import showinfo,showerror - -class CONFIG: - isdeveloppeur='NON' - -class JDCDISPLAY: - """ - Cette classe ajoute à la class TREEITEMINCANVAS l'affichage des infos - attachées au noeud sélectionné dans un notebook - L'objet item associé au jdc est créé par la classe TREEITEMINCANVAS - """ - def __init__(self,jdc,nom_jdc,appli=None,parent=None): - self.jdc=jdc - self.nom_jdc=nom_jdc - self.fichier=None - self.panel_courant=None - - if not appli: - class Appli: - def __init__(self): - self.CONFIGURATION=CONFIG() - def affiche_infos(self,message): - print message - return - - def efface_aide(self,event): - return - - def affiche_aide(self,event,aide): - print aide - return - - appli=Appli() - self.appli=appli - - if not parent: - parent=Tkinter.Tk() - Pmw.initialise(parent) - self.parent=parent - self.node_selected = None - self.modified='n' - - self.pane=Pmw.PanedWidget(self.parent,orient='horizontal') - self.pane.add('treebrowser',min=0.4,size=0.5) - self.pane.add('selected',min=0.4) - self.pane.pack(expand=1,fill='both') - self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'), - self.appli,self.select_node,self.make_rmenu) - - def make_rmenu(self,node,event): - if hasattr(node.item,'rmenu_specs'): - rmenu = Tkinter.Menu(self.pane.pane('treebrowser'), tearoff=0) - #node.select() - self.cree_menu(rmenu,node.item.rmenu_specs,node) - rmenu.tk_popup(event.x_root,event.y_root) - - def cree_menu(self,menu,itemlist,node): - """ - Ajoute les items du tuple itemlist - dans le menu menu - """ - number_item=0 - radio=None - for item in itemlist: - number_item=number_item + 1 - if not item : - menu.add_separator() - else: - label,method=item - if type(method) == types.TupleType: - # On a un tuple => on cree une cascade - menu_cascade=Tkinter.Menu(menu) - menu.add_cascade(label=label,menu=menu_cascade) - self.cree_menu(menu_cascade,method,node) - elif method[0] == '&': - # On a une chaine avec & en tete => on cree un radiobouton - try: - command=getattr(node.item,method[1:]) - menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n)) - if radio == None:radio=number_item - except:pass - else: - try: - command=getattr(node.item,method) - menu.add_command(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n)) - except:pass - # Si au moins un radiobouton existe on invoke le premier - if radio:menu.invoke(radio) - - def select(self): - return - - def unselect(self): - return - - def select_node(self,node): - """ - Cette méthode est appelée à chaque fois qu'un noeud est sélectionné - dans l'arbre. - Elle permet l'affichage du panneau correspondant au noeud sélectionné - """ - if node is not self.node_selected : - #ATTENTION: il faut affecter l'attribut node_selected avant d'appeler - # create_panel pour eviter une recursion infinie entre create_panel, - # Emit, onValid, select_node - self.node_selected = node - self.create_panel(node) - elif self.panel_courant: - self.panel_courant.update_panel() - - def create_panel(self,node): - """ - Lance la génération du panneau contextuel de l'objet sélectionné - dans l'arbre - """ - if self.panel_courant: - # On detruit le panneau - self.panel_courant.destroy() - o=self.panel_courant - self.panel_courant=None - # Mettre à 1 pour verifier les cycles entre objets - # pour les panneaux - withCyclops=0 - if withCyclops: - from Misc import Cyclops - z = Cyclops.CycleFinder() - z.register(o) - del o - z.find_cycles() - z.show_stats() - z.show_cycles() - - if node is None: - self.panel_courant=None - return self.panel_courant - - if node.item.isactif(): - if hasattr(node.item,"panel"): - self.panel_courant=node.item.panel(self,self.pane.pane('selected'),node) - else: - raise Exception("Le noeud sélectionné n'a pas de panel associé") - else: - self.panel_courant = panels.Panel_Inactif(self,self.pane.pane('selected'),node) - return self.panel_courant - - def init_modif(self): - """ - Met l'attribut modified à 'o' : utilisé par Eficas pour savoir - si un JDC doit être sauvegardé avant destruction ou non - """ - self.modified = 'o' - - def stop_modif(self): - """ - Met l'attribut modified à 'n' : utilisé par Eficas pour savoir - si un JDC doit être sauvegardé avant destruction ou non - """ - self.modified = 'n' - - def mainloop(self): - self.parent.mainloop() - - def ReplaceObjectNode(self,node,new_object,nom_sd=None): - """ - Cette méthode sert à remplacer l'objet pointé par node par - new_object. - Si nom_sd : on remplace un OPER et on essaie de renommer la - nouvelle sd par nom_sd - """ - child = node.append_brother(new_object,retour='oui') - if child == 0: - self.appli.affiche_infos("Impossible de remplacer l'objet du noeud courant") - else: - self.init_modif() - node.delete() - #if nom_sd: - #child.item.nomme_sd(nom_sd) - child.select() - #child.update() - - def doCut(self): - """ - Stocke dans Eficas.noeud_a_editer le noeud à couper - """ - if not self.node_selected.item.iscopiable(): - showinfo("Copie impossible", - "Cette version d'EFICAS ne permet que la copie d'objets de type 'Commande' ou mot-clé facteur") - return - self.appli.edit="couper" - self.appli.noeud_a_editer = self.node_selected - - def doCopy(self): - """ - Stocke dans Eficas.noeud_a_editer le noeud à copier - """ - if not self.node_selected.item.iscopiable(): - showinfo("Copie impossible", - "La copie d'un tel objet n'est pas permise") - return - self.appli.edit="copier" - self.appli.noeud_a_editer = self.node_selected - - def doPaste(self): - """ - Lance la copie de l'objet placé dans self.appli.noeud_a_editer - Ne permet que la copie d'objets de type Commande ou MCF - """ - try: - child=self.appli.noeud_a_editer.doPaste(self.node_selected) - except: - traceback.print_exc() - showinfo("Action de coller impossible", - "L'action de coller apres un tel objet n'est pas permise") - return - - if child == 0: - if self.appli.message != '': - showerror("Copie refusée",self.appli.message) - self.appli.message = '' - self.appli.affiche_infos("Copie refusée") - return - - # il faut déclarer le JDCDisplay_courant modifié - self.init_modif() - # suppression éventuelle du noeud sélectionné - # si possible on renomme l objet comme le noeud couper - if self.appli.edit == "couper": - #nom = self.appli.noeud_a_editer.item.object.sd.nom - item=self.appli.noeud_a_editer.item - self.appli.noeud_a_editer.delete() - child.item.update(item) - #test,mess = child.item.nomme_sd(nom) - child.select() - # on rend la copie à nouveau possible en libérant le flag edit - self.appli.edit="copier" - - def update(self): - """Cette methode est utilisee par le JDC associe pour - signaler des modifications globales du JDC - """ - self.tree.update() - - def supprime(self): - #print "supprime",self - self.select_node(None) - self.tree.supprime() - self.tree=None - self.pane.destroy() - - #def __del__(self): - # print "__del__",self diff --git a/Editeur/listeFichiers.py b/Editeur/listeFichiers.py deleted file mode 100644 index 9a9843f8..00000000 --- a/Editeur/listeFichiers.py +++ /dev/null @@ -1,81 +0,0 @@ -import string - -class listeFichiers : - - def __init__(self,appli): - self.appli=appli - self.premiere=1 - self.nbfich=0 - self.rep=self.appli.CONFIGURATION.rep_user - self.menuFichier=self.appli.menubar.menudict['Fichier'] - self.monFichier=self.rep+"/listefichiers" - self.liste_Fichiers=[] - self.init_Fichier() - self.traite_liste() - - def init_Fichier(self): - index=0 - try : - f=open(self.monFichier) - while ( index < 5) : - ligne=f.readline() - if ligne != "" : - l=(ligne.split("\n"))[0] - self.liste_Fichiers.append(l) - index=index+1 - except : - pass - try : - f.close() - except : - pass - - def sauve_Fichier(self): - try : - if len(self.liste_Fichiers) == 0 : - return - f=open(self.monFichier,'w') - index=0 - while ( index < len(self.liste_Fichiers)): - ligne=self.liste_Fichiers[index]+"\n" - f.write(ligne) - index=index+1 - except : - pass - try : - f.close() - except : - pass - - def traite_liste(self): - index=0 - for index in range(self.nbfich): - self.menuFichier.delete(9) - self.nbfich = 0 - index = 0 - while( index < len(self.liste_Fichiers)) : - self.ajout_item(index) - index=index+1 - - def ajout_item(self,index): - if self.premiere and (len(self.liste_Fichiers)!=0): - self.premiere=0 - self.menuFichier.add_separator() - label=self.liste_Fichiers[index] - self.menuFichier.insert_command(8,label=label,command= lambda self=self, l=label:self.coucou (l)); - self.nbfich=self.nbfich+1 - - def coucou(self,label): - self.appli.bureau.openJDC(file=label) - - def aOuvert(self,file): - if file not in self.liste_Fichiers : - if (len(self.liste_Fichiers) > 4) : - f=self.liste_Fichiers[0] - self.liste_Fichiers.remove(f) - self.liste_Fichiers.insert(len(self.liste_Fichiers),file) - else: - self.liste_Fichiers.remove(file) - self.liste_Fichiers.insert(len(self.liste_Fichiers),file) - self.traite_liste() - self.sauve_Fichier() diff --git a/Editeur/listePatrons.py b/Editeur/listePatrons.py index 307abbbe..fe54d854 100644 --- a/Editeur/listePatrons.py +++ b/Editeur/listePatrons.py @@ -1,47 +1,28 @@ import os import re -import Tkinter -# le dictionnaire sous menu est indexe parceque l'ordre des -# recherches est important - -sous_menu={0:{"3D":"3D.comm"},1:{"poutre":"pou.comm"},2:{"salome":"salome.comm"},3:{"divers":"comm"}} +sous_menus={"ASTER" : {0:{"3D":"3D.comm"},1:{"poutre":"pou.comm"},2:{"salome":"salome.comm"},3:{"divers":"comm"}}, + "OPENTURNS" : {0:{"Anne":"Anne.comm"}} + } class listePatrons : - def __init__(self,appli): - self.appli=appli - rep_ini=self.appli.CONFIGURATION.rep_ini - if self.appli.code != "ASTER" : - return - self.rep_patrons=rep_ini+"/../Editeur/Patrons" + def __init__(self,code = "ASTER"): + repIni=os.path.dirname(os.path.abspath(__file__)) + self.rep_patrons=repIni+"/Patrons/"+code + self.sous_menu=sous_menus[code] + self.code=code self.liste={} self.traite_liste() - self.ajout_menu() - def traite_liste(self): for file in os.listdir(self.rep_patrons): - for i in range(len(sous_menu)): - clef=sous_menu[i].keys()[0] - chaine=sous_menu[i][clef] + for i in range(len(self.sous_menu)): + clef=self.sous_menu[i].keys()[0] + chaine=self.sous_menu[i][clef] if re.search(chaine,file) : if clef in self.liste.keys(): self.liste[clef].append(file) else : self.liste[clef]=[file] break - - def ajout_menu(self): - menuFichier=self.appli.menubar.menubar - menu_cascade=Tkinter.Menu(menuFichier,tearoff=0) - menuFichier.add_cascade(label="Patrons",menu=menu_cascade) - for ss_menu in self.liste.keys(): - ssmenu=Tkinter.Menu(menu_cascade,tearoff=0) - menu_cascade.add_cascade(label=ss_menu,menu=ssmenu) - for fichier in self.liste[ss_menu]: - ssmenu.add_command(label=fichier,command= lambda self=self, l=fichier:self.ouvre(l)); - - def ouvre(self,label): - fichier=self.rep_patrons+"/"+label - self.appli.bureau.openJDC(file=fichier,enregistre="non") diff --git a/Editeur/macrodisplay.py b/Editeur/macrodisplay.py deleted file mode 100644 index 464d59a8..00000000 --- a/Editeur/macrodisplay.py +++ /dev/null @@ -1,165 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module contient la classe MacroDisplay qui realise l'affichage - des sous commandes d'une macro sous forme d'arbre -""" -# Modules Python -import types,sys -import Tkinter,Pmw - -# Modules EFICAS -import images -import tooltip -import Objecttreeitem -import compojdc -import treewidget -from widgets import Fenetre -from Ihm import CONNECTOR - -class MACRO2TreeItem(compojdc.JDCTreeItem): - pass - -class MacroDisplay: - def __init__(self,appli,macroitem,nom_jdc): - self.fenetre = Tkinter.Toplevel() - self.fenetre.configure(width = 800,height=500) - self.fenetre.protocol("WM_DELETE_WINDOW", self.quit) - self.fenetre.title("Visualisation Macro_Etape") - self.macroitem=macroitem - self.jdc=macroitem.object.jdc_aux - self.nom_jdc=nom_jdc - self.appli=appli - self.barre=Tkinter.Frame(self.fenetre,relief="ridge",bd=2) - self.barre.pack(expand=0,fill=Tkinter.X) - if self.macroitem.object.fichier_text is not None: - b=Tkinter.Button(self.barre,image=images.get_image("Zoom24"),command=self.visufile) - b.pack(side='left') - tp=tooltip.TOOLTIP(b,"View file") - self.mainPart=Pmw.ScrolledCanvas(self.fenetre, - hull_width=600, - hull_height=500, - borderframe=1) - self.canvas=self.mainPart.component('canvas') - Pmw.Color.changecolor(self.canvas,background='gray95') - self.mainPart.pack(padx=10,pady=10,fill = 'both', expand = 1) - self.item=MACRO2TreeItem(self.appli,nom_jdc,self.jdc) - self.tree = treewidget.Tree(self.appli,self.item,self.mainPart,command=None,rmenu=self.make_rmenu) - self.tree.draw() - CONNECTOR.Connect(self.jdc,"close",self.onCloseView,()) - - def onCloseView(self): - self.quit() - - def visufile(self): - Fenetre(self.appli,titre="Source du fichier inclus",texte=self.macroitem.object.fichier_text) - - def make_rmenu(self,node,event): - if hasattr(node.item,'rmenu_specs'): - rmenu = Tkinter.Menu(self.canvas, tearoff=0) - self.cree_menu(rmenu,node.item.rmenu_specs,node) - rmenu.tk_popup(event.x_root,event.y_root) - - def cree_menu(self,menu,itemlist,node): - """ - Ajoute les items du tuple itemlist - dans le menu menu - """ - number_item=0 - radio=None - for item in itemlist: - number_item=number_item + 1 - if not item : - menu.add_separator() - else: - label,method=item - if type(method) == types.TupleType: - # On a un tuple => on cree une cascade - menu_cascade=Tkinter.Menu(menu) - menu.add_cascade(label=label,menu=menu_cascade) - self.cree_menu(menu_cascade,method,node) - elif method[0] == '&': - # On a une chaine avec & en tete => on cree un radiobouton - try: - command=getattr(node.item,method[1:]) - menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n)) - if radio == None:radio=number_item - except:pass - else: - try: - command=getattr(node.item,method) - menu.add_command(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n)) - except:pass - # Si au moins un radiobouton existe on invoke le premier - if radio:menu.invoke(radio) - - def quit(self): - #print "quit",self - self.tree.supprime() - self.tree=None - self.fenetre.destroy() - - #def __del__(self): - # print "__del__",self - -def makeMacroDisplay(appli,macroitem,nom_item): - return MacroDisplay(appli,macroitem,nom_item) - -import treeitemincanvas - -class TREEITEMINCANVAS(treeitemincanvas.TREEITEMINCANVAS): - def __init__(self,object,nom="",parent=None,appli=None,sel=None,rmenu=None): - #print "TREEITEMINCANVAS",object - self.object=object - self.nom=nom - self.appli=appli - self.parent=parent - - self.item=MACRO2TreeItem(self.appli,self.nom,self.object) - self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1,canvas_background='gray95') - self.canvas.pack(padx=10,pady=10,fill = 'both', expand = 1) - if not sel: - def sel(event=None): - return - self.tree=treewidget.Tree(self.appli,self.item,self.canvas,command=sel,rmenu=rmenu) - self.tree.draw() - -import jdcdisplay - -class MACRODISPLAY(jdcdisplay.JDCDISPLAY): - def __init__(self,jdc,nom_jdc,appli=None,parent=None): - #print "MACRODISPLAY",jdc - self.jdc=jdc - self.nom_jdc=nom_jdc - self.fichier=None - self.panel_courant=None - self.appli=appli - self.parent=parent - self.node_selected = None - self.modified='n' - - self.pane=Pmw.PanedWidget(self.parent,orient='horizontal') - self.pane.add('treebrowser',min=0.4,size=0.5) - self.pane.add('selected',min=0.4) - self.pane.pack(expand=1,fill='both') - self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'), - self.appli,self.select_node,self.make_rmenu) - diff --git a/Editeur/menubar.py b/Editeur/menubar.py deleted file mode 100644 index b1aea087..00000000 --- a/Editeur/menubar.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" -""" -from Tkinter import Menu - -class MENUBAR: - def __init__(self,appli,parent): - # L'attribut appli pointe vers l'objet application qui détient la menubar et les autres composants - self.appli=appli - # L'attribut parent pointe vers l'objet graphique parent de la menubar - self.parent=parent - self.menubar=Menu(self.parent) - self.parent.configure(menu=self.menubar) - self.init() - - try: - from prefs import labels - except: - labels= ('Fichier','Edition','Jeu de commandes','Catalogue','Options','Aide','Traducteur') - - def init(self): - self.menudict={} - for label in self.labels: - menu=Menu(self.menubar,tearoff=0) - self.menudict[label]=menu - self.menubar.add_cascade(label=label,menu=menu) - diff --git a/Editeur/newsimppanel.py b/Editeur/newsimppanel.py deleted file mode 100644 index ea414a03..00000000 --- a/Editeur/newsimppanel.py +++ /dev/null @@ -1,196 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -import prefs -import panels -import images -import composimp -from widgets import ListeChoix -from widgets import FenetreDeSelection - -from Noyau.N_CR import justify_text -from utils import substract_list - - -class newSIMPPanel(panels.OngletPanel): - """ - Classe virtuelle servant de classe mère à toutes les classes Panel - servant à afficher et récupérer la valeur d'un mot-clé simple. - Le panel est différent suivant le type de la valeur attendu - """ - def init(self): - """ - Méthode appelée par le constructeur de OngletPanel : - construit le notebook à 2 onglets utilisé par tous les panels de - tous les mots-clés simples - """ - nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) - nb.pack(fill = 'both', expand = 1) - self.nb=nb - nb.add('Valeur', tab_text='Saisir valeur') - self.makeValeurPage(nb.page('Valeur')) - self.enlevebind() - self.creebind() - nb.setnaturalsize() - -# ---------------------------------------------------------------------------------------- -# Méthodes utilisées pour l'affectation de la valeur donnée par l'utilisateur -# au mot-clé courant -# ---------------------------------------------------------------------------------------- - - def reset_old_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'): - """ - Enregistre val comme valeur de self.node.item.object SANS - faire de test de validité ni ré-évaluer l'ancienne valeur - permet de rester avec des valeurs non entrees et de ne pas - ré-évaluer des entiers par exemple - """ - if self.parent.modified == 'n' : self.parent.init_modif() - self.node.item.set_valeur(name) - self.parent.appli.affiche_infos(mess) - - def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'): - """ - Enregistre val comme valeur de self.node.item.object - en evaluant l item et en le validant - Si name n'est pas renseigné, la valeur - """ - if self.parent.modified == 'n' : self.parent.init_modif() - if name != None: - valeur = name - validite = 1 - else : - valeurentree= self.entry.get() - self.entry.delete(0,END) - if valeurentree == '': valeurentree=None - valeur,validite=self.node.item.eval_valeur(valeurentree) - if not validite : - valeur= self.entry.get() - commentaire = "impossible d'évaluer : %s " %`valeurentree` - self.parent.appli.affiche_infos(commentaire) - - if validite : - validite,commentaire=self.node.item.valide_val(valeur) - - if validite : - self.node.item.set_valeur(valeur) - self.parent.appli.affiche_infos(mess) - else : - self.parent.appli.affiche_infos(commentaire) - -# ---------------------------------------------------------------------------------------- -# Méthodes utilisées pour la manipulation des items dans les listes de choix -# ---------------------------------------------------------------------------------------- - def selectValeur(self,name): - self.selected_valeur = name - - def deselectValeur(self,name): - self.selectValeur = None - - def sup_valeur(self,name=None): - """ - Supprime la valeur selectionnée de la liste des valeurs et la rajoute - à la liste des choix possibles - """ - if hasattr(self,'selected_valeur') : - if ( self.selected_valeur != None and self.selected_valeur != ''): - liste_valeurs = self.Liste_valeurs.get_liste() - liste_valeurs.remove(self.selected_valeur) - self.Liste_valeurs.put_liste(liste_valeurs) - listeActuelle=self.Liste_valeurs.get_liste() - liste_choix=self.node.item.get_liste_possible(listeActuelle) - self.Liste_choix.put_liste(liste_choix) - self.selected_valeur = None - - def add_choix(self,name=None): - """ - Ajoute le choix selectionné à la liste des valeurs et le retire - de la liste des choix possibles - """ - - if hasattr(self,'selected_choix') : - if (self.selected_choix != None and self.selected_choix != ''): - min,max = self.node.item.GetMinMax() - liste_valeurs = self.Liste_valeurs.get_liste() - if len(liste_valeurs) >= max : - self.parent.appli.affiche_infos("La liste ne peut pas avoir plus de %d éléments" %max) - return - if (self.Liste_valeurs.selection != None): - ligne=self.Liste_valeurs.cherche_selected_item() - liste_valeurs.insert(ligne,self.selected_choix) - else : - liste_valeurs.append(self.selected_choix) - self.Liste_valeurs.put_liste(liste_valeurs) - listeActuelle=self.Liste_valeurs.get_liste() - liste_choix=self.node.item.get_liste_possible(listeActuelle) - self.Liste_choix.put_liste(liste_choix) - self.selected_choix = None - - def selectChoix(self,name): - self.selected_choix = name - - def deselectChoix(self,name): - self.selectChoix = None - - def raisecmd(self,page): - try: - self.entry.focus() - except: - pass - -# ---------------------------------------------------------------------------------------- -# Méthodes utilisées pour la manipulation des items en notation scientifique -# ---------------------------------------------------------------------------------------- - def set_valeur_texte(self,texte_valeur) : - """ Sert à mettre à jour la notation scientifique""" - try : - if "R" in self.node.item.object.definition.type: - if texte_valeur[0] != "'": - clef=eval(texte_valeur) - if str(clef) != str(texte_valeur) : - self.node.item.object.init_modif() - clefobj=self.node.item.object.GetNomConcept() - if not self.parent.appli.dict_reels.has_key(clefobj): - self.parent.appli.dict_reels[clefobj] = {} - self.parent.appli.dict_reels[clefobj][clef]=texte_valeur - self.parent.appli.dict_reels[clefobj] - self.node.item.object.fin_modif() - except: - pass - - - def get_valeur_texte(self,valeur) : - valeur_texte="" - if "R" in self.node.item.object.definition.type: - clefobj=self.node.item.object.GetNomConcept() - if self.parent.appli.dict_reels.has_key(clefobj): - if self.parent.appli.dict_reels[clefobj].has_key(valeur): - valeur_texte=self.parent.appli.dict_reels[clefobj][valeur] - return valeur_texte - diff --git a/Editeur/options.py b/Editeur/options.py deleted file mode 100644 index 9d0da1e4..00000000 --- a/Editeur/options.py +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" -""" -# Modules Python -import os,string - -# Modules Eficas -from widgets import askopenfilename -import panels - -# l'option affichage_commandes peut prendre les valeurs "groupes" ou "alphabetic" -affichage_commandes="alphabetic" - -class OPTIONS: - - menu_defs=[ - ('Options',[ - ("Affichage commandes",(("alphabétique",'&affichage_alpha'),("groupes",'&affichage_grp'))), - #("Couleur",(("fond",'change_fond'),("barre",'change_barre'))), - # ("Catalogue développeur",'choix_cata_developpeur'), - ('Paramètres Eficas','affichage_fichier_ini'), - ('Paramètres Affichage','affichage_style_ini'), - - ] - ) - ] - - button_defs=[] - - def __init__(self,appli,parent): - self.appli=appli - self.parent=parent - - - def affichage_grp(self): - global affichage_commandes - affichage_commandes="groupes" - if hasattr(panels,'panneauCommande'): - panel=panels.panneauCommande - parent=panel.parent - if parent != None : - parent.create_panel(parent.node_selected) - # si on a un panel avec plusieurs onglets - # on affiche Commande - try : - parent.panel_courant.nb.selectpage("Commande") - except : - pass - - def affichage_alpha(self): - - global affichage_commandes - affichage_commandes="alphabetic" - if hasattr(panels,'panneauCommande'): - panel=panels.panneauCommande - parent=panel.parent - if parent != None : - parent.create_panel(parent.node_selected) - # si on a un panel avec plusieurs onglets - # on affiche Commande - try : - parent.panel_courant.nb.selectpage("Commande") - except : - pass - - def change_fond(self): - from tkColorChooser import askcolor - #nouvelle=askcolor(self.appli.background) - nouvelle=askcolor('grey') - - def change_barre(self): - pass - - def choix_cata_developpeur(self): - """ - Cette méthode demande à l'utilisateur-développeur d'indiquer quel catalogue - il veut utiliser en remplacement du catalogue standard du code - NB : il faut que le développeur ait les droits d'écriture dans le répertoire où - se trouve le catalogue - """ - file = askopenfilename(title="Choix d'un catalogue personnel", - defaultextension=".py", - filetypes = ( ("Catalogue", "cata*.py"),)) - if file : - self.parent.update_idletasks() - self.appli.reset_affichage_infos() - rep_fic = os.path.dirname(file) - nom_fic = string.split(os.path.basename(file),'.')[0] - rep_courant = os.getcwd() - os.chdir(rep_fic) - self.cata = __import__(nom_fic) - self.code = self.cata.CODE - os.chdir(rep_courant) - self.fic_cata = file - fic_cata_p = nom_fic+'_pickled.py' - self.fic_cata_p = os.path.join(rep_fic,fic_cata_p) - pile_erreurs = self.cata.erreurs_cata - if pile_erreurs.existe_message() : - messages = pile_erreurs.retourne_messages() - print messages - else : - # XXX ne doit pas fonctionner - self.catalo = catabrowser.CataItem(cata=self.cata) - self.Retrouve_Ordre_Cata('personnel') - pile_erreurs.efface() - - - def affichage_fichier_ini(self): - self.appli.CONFIGURATION.affichage_fichier_ini() - - - def affichage_style_ini(self): - self.appli.CONFIGStyle.affichage_style_ini() diff --git a/Editeur/panels.py b/Editeur/panels.py deleted file mode 100644 index 636473a1..00000000 --- a/Editeur/panels.py +++ /dev/null @@ -1,592 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -import string -import os -from Tkinter import * -import Pmw -import time -import traceback - -import widgets -from widgets import ListeChoix -from widgets import ListeChoixParGroupes -import prefs -import options - -SEPARATEUR = '-'*30 - - -class Panel(Frame) : - """ - Classe servant de classe mère à toutes celles représentant les - panneaux à afficher en fonction de la nature de l'objet en cours - Elle est toujours dérivée. - """ - def __init__(self,parent,panneau,node) : - # Le parent d'un panel est un objet de la classe JDCDISPLAY ou derivee - # ou un objet qui a les attributs : appli (de classe APPLI ou derivee), - # modified et la methode init_modif - self.parent=parent - self.panneau = panneau - self.node=node - Frame.__init__(self,self.panneau) - self.place(x=0,y=0,relheight=1,relwidth=1) - self.creer_boutons() - self.init() - global panneauCommande - panneauCommande=self - - #def __del__(self): - # print "__del__",self - - def update_panel(self): - """Methode appele pour demander une mise a jour du panneau""" - - def destroy(self): - Frame.destroy(self) - self.panneau=None - self.parent=None - # Because on herite de Frame - self.master=None - # On supprime explicitement les references aux objets Tk - self.nb=None - self.fr_but=None - self.bouton_cata=None - self.bouton_doc=None - self.bouton_com=None - self.bouton_sup=None - #self.frame_eval=None - self.label=None - self.frame_boutons=None - self.frame_comment=None - self.frame_param=None - # On termine la suppression de facon brutale (objets Tk et non Tk) - for k in self.__dict__.keys(): - # il est plus prudent de ne pas détruire le lien sur le Node - # si on voulait mettre l'attribut node à None, il faudrait - # que tous les appels à node.parent.select() apparaissent après - # toutes les autres actions liées au panel (node.item.isglobal(), ...) - if k != 'node' : setattr(self,k,None) - - def creer_boutons(self): - """ - Méthode créant les boutons se trouvant dans la partie contextuelle d'EFICAS - (à droite sous les onglets ) - """ - self.fr_but = Frame(self,height=30) - self.fr_but.pack(side='bottom') - #self.fr_but.pack(side='bottom',fill='x') - #self.bouton_com = Button(self.fr_but, text = 'Commentariser', command = self.ajout_commentaire, width=14) - #self.bouton_sup = Button(self.fr_but, text = "Supprimer", command=self.supprimer, width=14) - #self.bouton_doc = Button(self.fr_but, text="Documentation", command=self.visu_doc, width=14) - #self.bouton_cata = Button(self.fr_but, text = "Catalogue", command = self.show_catalogue, width=14) - self.bouton_com = Button(self.fr_but, text = 'Commentariser', command = self.ajout_commentaire) - self.bouton_sup = Button(self.fr_but, text = "Supprimer", command=self.supprimer) - self.bouton_doc = Button(self.fr_but, text="Documentation", command=self.visu_doc) - self.bouton_cata = Button(self.fr_but, text = "Catalogue", command = self.show_catalogue) - - if self.parent.appli.CONFIGURATION.isdeveloppeur == 'OUI': - self.bouton_sup.pack(side='left',padx=5, pady=5) - self.bouton_cata.pack(side='left',padx=5, pady=5) - self.bouton_doc.pack(side='right',padx=5, pady=5) - #self.bouton_sup.place(relx=0.25,rely = 0.5,relheight = 0.8,anchor='center') - #self.bouton_cata.place(relx=0.5,rely = 0.5,relheight = 0.8,anchor='center') - #self.bouton_doc.place(relx=0.75,rely = 0.5,relheight = 0.8,anchor='center') - else: - self.bouton_sup.pack(side='left',padx=5, pady=5) - self.bouton_doc.pack(side='right',padx=5, pady=5) - #self.bouton_sup.place(relx=0.3,rely = 0.5,relheight = 0.8,anchor='center') - #self.bouton_doc.place(relx=0.7,rely = 0.5,relheight = 0.8,anchor='center') - - def show_catalogue(self): - try: - genea = self.node.item.get_genealogie() - self.parent.appli.browser_catalogue_objet(genea) - except Exception,e: - traceback.print_exc() - - def efface(self): - self.node.efface() - -# ------------------------------------------------------------------------ -# Méthodes permettant d'ajouter des commentaires, des paramètres -# et des objets EVAL. -# Ces méthodes sont utilisées par les panneaux des JDC,ETAPE, -# COMMENTAIRE et PARAMETRE -# ------------------------------------------------------------------------ - - def ajout_commentaire(self,ind='after'): - """ - Ajoute un commentaire à l'intérieur du JDC : - - si ind='after' : l'ajoute après l'objet courant - - si ind='before' : l'ajoute avant. - """ - if self.parent.modified == 'n' : self.parent.init_modif() - return self.node.append_brother("COMMENTAIRE",ind) - - def ajout_commentaire_first(self): - """ - Ajoute un commentaire en début de JDC - """ - if self.parent.modified == 'n' : self.parent.init_modif() - return self.node.append_child("COMMENTAIRE",'first') - - def ajout_parametre(self,ind='after'): - """ - Ajoute un parametre à l'intérieur du JDC : - - si ind='after' : l'ajoute après l'objet courant - - si ind='before' : l'ajoute avant. - """ - if self.parent.modified == 'n' : self.parent.init_modif() - return self.node.append_brother("PARAMETRE",ind) - - def ajout_parametre_first(self): - """ - Ajoute un parametre en début de JDC - """ - if self.parent.modified == 'n' : self.parent.init_modif() - return self.node.append_child("PARAMETRE",'first') - -# def ajout_parametre_eval(self,ind='after'): -# """ -# Ajoute un paramètre EVAL à l'intérieur du JDC : -# - si ind='after' : l'ajoute après l'objet courant -# - si ind='before' : l'ajoute avant. -# """ -# if self.parent.modified == 'n' : self.parent.init_modif() -# return self.node.append_brother("PARAMETRE_EVAL",ind) - -# def ajout_parametre_eval_first(self): -# """ -# Ajoute un paramètre EVAL en début de JDC -# """ -# if self.parent.modified == 'n' : self.parent.init_modif() -# return self.node.append_child("PARAMETRE_EVAL",'first') - -# ------------------------------------------------------------------------ - - def visu_doc(self): - """ Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader - - Ne fonctionne pas sous UNIX (chemin d'accès Acrobat Reader) - - indication du chemin d'accès aux fichiers pdf à revoir : trop statique""" - cle_doc = self.node.item.get_docu() - if cle_doc == None : return - cle_doc = string.replace(cle_doc,'.','') - cle_doc = string.replace(cle_doc,'-','') - commande = self.parent.appli.CONFIGURATION.exec_acrobat - nom_fichier = cle_doc+".pdf" - fichier = os.path.abspath(os.path.join(self.parent.appli.CONFIGURATION.path_doc, - nom_fichier)) - if os.name == 'nt': - os.spawnv(os.P_NOWAIT,commande,(commande,fichier,)) - elif os.name == 'posix': - script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier) - pid = os.system(script) - - def supprimer(self): - """ - Suppression du noeud courant - """ - # On signale au parent du panel (le JDCDisplay) une modification - self.parent.init_modif() - self.node.delete() - - def affiche(self): - """ Force l'affichage des fenêtres en cours """ - self.tkraise() - - def selectMC(self,name): - """ On retrouve le mot-clé sous le curseur pour affichage du fr """ - cmd=self.node.item.get_definition() - texte_infos = '' - for e in cmd.entites.keys() : - if e == name : - texte_infos=getattr(cmd.entites[e],prefs.lang) - break - if texte_infos == '' : texte_infos="Pas d'infos disponibles" - self.parent.appli.affiche_infos(texte_infos) - - def defMC(self,name): - """ On ajoute un mot-clé à la commande : subnode """ - if name == SEPARATEUR:return - if self.parent.modified == 'n' : self.parent.init_modif() - if name != "COMMENTAIRE": - self.node.append_child(name) - else : - self.ajout_commentaire() - - def selectCmd(self,name): - """ On retrouve la commande sous le curseur pour affichage du fr """ - if name != 'COMMENTAIRE' and name != SEPARATEUR: - texte_infos=getattr(self.parent.jdc.get_cmd(name),prefs.lang) - self.parent.appli.affiche_infos(texte_infos) - - def defCmd(self,name): - """ - On ajoute une commande après la commande selectionnée : after - ou bien on ajoute un commentaire - """ - if name == SEPARATEUR:return - if self.parent.modified == 'n' : self.parent.init_modif() - if name != "COMMENTAIRE": - #parent=self.node.parent - #new_obj = parent.item.append_child(name,self.node.item.getObject()) - #parent.children[parent.children.index(self.node)+1].select() - new_node = self.node.append_brother(name,'after') - else : - new_node = self.ajout_commentaire() - - def defCmdFirst(self,name): - """ On ajoute une commande ou un commentaire au début du fichier de commandes """ - if name == SEPARATEUR:return - if self.parent.modified == 'n' : self.parent.init_modif() - if name != "COMMENTAIRE": - #new_obj = self.node.item.append_child(name,'first') - #self.node.children[0].select() - new_node = self.node.append_child(name,'first') - else : - new_node = self.ajout_commentaire_first() - -class OngletPanel(Panel) : - """ Cette classe est virtuelle et doit être dérivée - Elle contient les principales méthodes d'affichage des différents onglets""" - - global panelbind - - def raisecmd(self,page): - self.nb.page(page).focus_set() - if page == 'Concept': - try: - self._any.focus() - except: - pass - elif page == 'Commande': - try: - self.command_entry.component('entry').focus() - except: - pass - - def creebind(self): - self.nb.bind_all("",lambda e,s=self,num=0:s.commande_up(num)) - self.nb.bind_all("",lambda e,s=self,num=1:s.commande_up(num)) - self.nb.bind_all("",lambda e,s=self,num=2:s.commande_up(num)) - self.nb.bind_all("",lambda e,s=self,num=3:s.commande_up(num)) - OngletPanel.panelbind=self.nb - - def enlevebind(self): - if not hasattr(OngletPanel,"panelbind"): - return - if OngletPanel.panelbind == None: - return - try: - OngletPanel.panelbind.unbind_all("") - OngletPanel.panelbind.unbind_all("") - OngletPanel.panelbind.unbind_all("") - OngletPanel.panelbind.unbind_all("") - except: - pass - OngletPanel.panelbind = None - - def commande_up(self,num): - #print "commande_up de panels pour ", num - try : - OngletPanel.panelbind.selectpage(num) - pageNew=OngletPanel.panelbind.page(num) - pageNew.focus_set() - except : - pass - - def affiche(self): - page=self.nb.getcurselection() - self.nb.page(page).focus_set() - if page == 'Concept': - try: -# _any est un pointeur sur entry -# component est une methode de pmw -# a priori, jamais ok - self._any.component('entry').focus_set() - except: - pass - self.tkraise() - -# ------------------------------------------------------------------------ -# Méthodes permettant d'afficher des pages partagées par différents -# types d'objets (règles,mots-clés,concept,...) -# ------------------------------------------------------------------------ - - def makeConceptPage(self,page): - """ - Crée la page de saisie du nom du concept - """ - self.label = Label(page,text='Nom du concept :') - self.label.place(relx=0.1,rely=0.4) - self._any = Entry(page,relief='sunken') - self._any.place(relx=0.35,rely=0.4,relwidth=0.5) - self._any.bind("",lambda e,s=self:s.execConcept()) - self._any.bind("",lambda e,s=self:s.execConcept()) - self._any.insert(0,self.node.item.GetText()) - self.but_ok=Button(page,text = "Valider",command=self.execConcept) - self.but_ok.place(relx=0.35,rely=0.8, relwidth=0.35) - type_sd = self.node.item.get_type_sd_prod() - if type_sd : - txt = "L'opérateur courant retourne un objet de type %s" %type_sd - self.label = Label(page, text = txt) - self.label.place(relx=0.5,rely=0.55,anchor='n') - self._any.focus() - # aide associée au panneau - bulle_aide="""Tapez dans la zone de saisie le nom que vous voulez donner - au concept retounré par l'opérateur courant et pressez pour valider""" - page.bind("", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - page.bind("",self.parent.appli.efface_aide) - - - def makeMoclesPage(self,page): - """ - Crée la page qui affiche la liste des mots-clés que l'on peut - encore ajouter - """ - genea =self.node.item.get_genealogie() - jdc = self.node.item.get_jdc() - liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico) - liste_commandes = (("",self.selectMC), - ("",self.deselectMC), - ("",self.defMC)) - Liste = ListeChoix(self,page,liste_mc,liste_commandes = liste_commandes,titre = "Mots-clés permis",optionReturn="oui") - Liste.affiche_liste() - # aide associée au panneau - bulle_aide="""Double-cliquez sur le mot-clé que vous voulez ajouter à - la commande en cours d'édition""" - Liste.MCbox.bind("", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - Liste.MCbox.bind("",self.parent.appli.efface_aide) - if len(liste_mc) > 0 : - Liste.surligne(liste_mc[0]) - self.Liste=Liste - - def makeCommentairePage(self,page): - label = Label(page,text = "Insérer un commentaire :") - label.grid(column = 0, row = 2) - but_avant = Button(page,text = "AVANT",command = lambda s=self :s.ajout_commentaire(ind = 'before')) - but_apres = Button(page,text = "APRES",command = self.ajout_commentaire) - but_avant.grid(column = 1,row =2) - but_apres.grid(column = 1,row =3) - - def makeCommandePage(self,page): - """ - Cree l'onglet - """ - frame1 = Frame(page,height = 20) - frame1.pack(side='top',fill='x') - label = Label(frame1,text ="La commande choisie sera ajoutée\n APRES la commande courante") - label.pack(side='top') - frame2 = Frame(page) - frame2.pack(side='top',fill='both',expand=1) - liste_commandes = (("",self.selectCmd), - ("",self.deselectCmd), - ("",self.defCmd)) - if options.affichage_commandes == "alphabetic": - liste_cmd = self.get_liste_cmd() - Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes, - filtre='oui',titre = "Commandes",optionReturn="oui") - else: - liste_commandes=liste_commandes+(("",self.defCmd),) - liste_groupes,dict_groupes=self.get_groups() - Liste = ListeChoixParGroupes(self,frame2,liste_groupes,dict_groupes, - liste_commandes = liste_commandes, - filtre='oui',titre = "Commandes",optionReturn="oui") - Liste.affiche_liste() - self.command_entry=Liste.entry - # aide associée au panneau - bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes""" - Liste.MCbox.bind("", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - Liste.MCbox.bind("",self.parent.appli.efface_aide) - self.liste_command=Liste - global panneauCommande - panneauCommande=self - - def makeJDCPage(self,page): - """ - Crée la page correspondant à un objet de type JDC - """ - liste_commandes = (("",self.selectCmd), - ("",self.deselectCmd), - ("",self.defCmdFirst)) - if options.affichage_commandes == "alphabetic": - liste_cmd = self.get_liste_cmd() - Liste = ListeChoix(self,page,liste_cmd,liste_commandes = liste_commandes, - filtre='oui',titre = "Commandes",optionReturn="oui") - else: - liste_commandes=liste_commandes+(("",self.defCmdFirst),) - liste_groupes,dict_groupes=self.get_groups() - Liste = ListeChoixParGroupes(self,page,liste_groupes,dict_groupes, - liste_commandes = liste_commandes, - filtre='oui',titre = "Commandes",optionReturn="oui") - Liste.affiche_liste() - # aide associée au panneau - bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes""" - Liste.MCbox.bind("", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - Liste.MCbox.bind("",self.parent.appli.efface_aide) - - def makeReglesPage(self,page) : - """ - Crée la page qui affiche la liste des règles avec celle qui ne sont - pas respectées en rouge - """ - regles = [] - regles = self.node.item.get_regles() - dictionnaire = self.node.item.get_mc_presents() - texte_regles = [] - l_regles_en_defaut=[] - if len(regles) > 0: - i = 0 - for regle in regles : - texte_regles.append(regle.gettext()) - texte,test = regle.verif(dictionnaire) - if test == 0 : l_regles_en_defaut.append(i) - i = i+1 - Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles") - Liste.affiche_liste() - # aide associée au panneau - bulle_aide="""Ce panneau contient la liste des règles qui s'appliquent à l'objet - en cours d'édition. - - en noir : règles valides - - en rouge : règles violées""" - Liste.MCbox.bind("", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - Liste.MCbox.bind("",self.parent.appli.efface_aide) - - def makeParamCommentPage_for_etape(self,page): - """ - Crée la page qui offre le choix à l'utilisateur d'ajouter un commentaire - ou un paramètre, avant ou après le noeud courant dans l'arbre. - Cette page est destinée aux objets de niveau ETAPE cad à toutes les CMD, - les commentaires inter commandes et les paramètres - """ - # les frame ... - self.frame_comment = Frame(page,bd=1,relief='raised') - self.frame_param = Frame(page,bd=1,relief='raised') - self.frame_boutons = Frame(page,bd=1,relief='raised') - self.frame_comment.place(relx=0,rely=0,relwidth=1,relheight=0.40) - self.frame_param.place(relx=0,rely=0.40,relwidth=1,relheight=0.40) - self.frame_boutons.place(relx=0,rely=0.84,relwidth=1,relheight=0.16) - # remplissage de la frame commentaire - Label(self.frame_comment,text = "Insérer un commentaire :").place(relx=0.1,rely=0.5,anchor='w') - but_comment_avant = Button(self.frame_comment, - text = "AVANT "+self.node.item.get_nom(), - command = lambda s=self :s.ajout_commentaire(ind = 'before')) - but_comment_apres = Button(self.frame_comment, - text = "APRES "+self.node.item.get_nom(), - command = self.ajout_commentaire) - but_comment_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45) - but_comment_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45) - # remplissage de la frame paramètre - Label(self.frame_param,text = "Insérer un paramètre :").place(relx=0.1,rely=0.5,anchor='w') - but_param_avant = Button(self.frame_param, - text = "AVANT "+self.node.item.get_nom(), - command = lambda s=self :s.ajout_parametre(ind = 'before')) - but_param_apres = Button(self.frame_param, - text = "APRES "+self.node.item.get_nom(), - command = self.ajout_parametre) - but_param_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45) - but_param_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45) - # remplissage de la frame boutons - Button(self.frame_boutons, - text="Commentariser toute la commande", - command = self.comment_commande).place(relx=0.5,rely=0.5,anchor='center') - - def deselectMC(self,name): - self.parent.appli.affiche_infos('') - - def get_groups(self): - jdc=self.node.item.object.get_jdc_root() - return jdc.get_groups() - - def get_liste_cmd(self): - #print "get_liste_cmd",self.node.item.object - jdc=self.node.item.object.get_jdc_root() - listeCmd = jdc.get_liste_cmd() - return listeCmd - - def deselectCmd(self,name): - self.parent.appli.affiche_infos('') - - def execConcept(self): - """ - Nomme le concept SD retourné par l'étape - """ - if not hasattr(self,'valeur_choisie'): - nom = self._any.get() - else: - nom = self.valeur_choisie.get() - nom = string.strip(nom) - if nom == '' : return # si pas de nom, on ressort sans rien faire ... - if self.parent.modified == 'n' : self.parent.init_modif() - test,mess = self.node.item.nomme_sd(nom) - #self.node.verif() - #self.node.racine.update() - self.parent.appli.affiche_infos(mess) - - def changed(self): - pass - - def comment_commande(self): - """ - Cette méthode a pour but de commentariser la commande pointée par self.node - """ - # On traite par une exception le cas où l'utilisateur final cherche à désactiver - # (commentariser) un commentaire. - try : - pos=self.node.parent.children.index(self.node) - commande_comment = self.node.item.get_objet_commentarise() - # On signale au parent du panel (le JDCDisplay) une modification - self.parent.init_modif() - self.node.parent.children[pos].select() - except Exception,e: - traceback.print_exc() - widgets.showerror("TOO BAD",str(e)) - return - - -class Panel_Inactif(Panel): - """ - Cette classe sert à définir un panneau dans lequel on dit que le noeud - sélectionné n'est pas actif - """ - def __init__(self,parent,panneau,node) : - self.parent=parent - self.panneau = panneau - self.node=node - Frame.__init__(self,self.panneau) - self.place(x=0,y=0,relheight=1,relwidth=1) - self.creer_texte() - - def creer_texte(self): - texte = "Le noeud sélectionné ne correspond pas à un objet actif\n" - texte = texte + "Seules les commandes placées entre \nDEBUT/POURSUITE et FIN sont actives" - longueur = int(self.panneau.winfo_width()*0.8) - self.label = Label(self,text=texte,wraplength=longueur,justify='center') - self.label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center') - self.bouton_sup = Button(self, - text = "Supprimer", - command=self.supprimer, - width=14) - self.bouton_sup.place(relx=0.5,rely=0.8,anchor='center') - - -if __name__ == "__main__" : pass diff --git a/Editeur/panelsSalome.py b/Editeur/panelsSalome.py deleted file mode 100644 index 6381ba7e..00000000 --- a/Editeur/panelsSalome.py +++ /dev/null @@ -1,286 +0,0 @@ -# -*- coding: utf-8 -*- -print "Import de panelsSalome" - -from Tkinter import * -from widgets import ListeChoix -from widgets import showerror - -from fonctionpanel import FONCTION_Panel -from shellpanel import SHELLPanel -from plusieursintopanel import PLUSIEURS_INTO_Panel -from plusieursassdpanel import PLUSIEURS_ASSD_Panel -from plusieursbasepanel import PLUSIEURS_BASE_Panel -from plusieursbasepanel import PLUSIEURS_BASE_OR_UNELISTE_Panel -from uniquesdcopanel import UNIQUE_SDCO_Panel -from uniqueassdpanel import UNIQUE_ASSD_Panel -from uniqueintopanel import UNIQUE_INTO_Panel -from uniquecomppanel import UNIQUE_COMP_Panel -from uniquebasepanel import UNIQUE_BASE_Panel -from uniqueassdpanel import UNIQUE_ASSD_Panel_Reel - -from Noyau.N_CR import justify_text - -import traceback -import salome # CS_pbruno à poubelliser -import images - - - -# 2 types de commandes vont etre particularisees dans Salome -# -# - un cas general : -# Toutes les commandes possedant GROUP_NO ou GROUP_MA -# seront surchargees d office -# pour cela on va utiliser le dictionnaire dict_classes_salome -# qui va permettre de changer la classe de la commande -# ainsi si un panel en dehors de salome a pour classe PLUSIEURS_BASE_Panel -# la classe de ce panel devient alors SALOME_PLUSIEURS_BASE_Panel -# (pour cela voir composimp) - -# des commandes "autres" ne pouvant pas etre identifiées par leur nom -# il suffit de creer dans la classe SALOME de la commande -# une fonction portant son nom -# Exemple de particularisation d un panel : -# Supposons que l on veuille particulariser la commande -# - LIRE_MAILLAGE_UNITE -# le panel initial a pour classe UNIQUE_BASE_Panel -# il suffit d'ajouter dans la classe derivée SALOME_UNIQUE_BASE_Panel -# une fonction SALOME_LIRE_MAILLAGE_UNITE -# la classe de ce panel devient alors SALOME_UNIQUE_BASE_Panel -# on peut surcharger les methodes nécessaires (affichage par exemple) - - -class SALOME_SHELLPanel (SHELLPanel): - "" - -class SALOME_FONCTION_Panel (FONCTION_Panel): - "" - -class SALOME_PLUSIEURS_INTO_Panel (PLUSIEURS_INTO_Panel): - "" - -class SALOME_PLUSIEURS_ASSD_Panel (PLUSIEURS_ASSD_Panel): - "" - -class SALOME_UNIQUE_INTO_Panel (UNIQUE_INTO_Panel): - "" - -class SALOME_UNIQUE_SDCO_Panel (UNIQUE_SDCO_Panel): - "" - -class SALOME_UNIQUE_ASSD_Panel (UNIQUE_ASSD_Panel): - "" - -class SALOME_UNIQUE_COMP_Panel (UNIQUE_COMP_Panel): - "" - -class SALOME_UNIQUE_ASSD_Panel_Reel (UNIQUE_ASSD_Panel_Reel): - "" - -# ------------------------------------------------------------------------------# -# classe SALOME_PLUSIEURS_BASE_Panel -# -# Commandes modifiées : -# - AFFE_CHAR_MECA_DDL_IMPO_GROUP_NO -# Methodes surchargées : -# - makeValeurPage(self,page) -# -# ------------------------------------------------------------------------------# - -class SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel(PLUSIEURS_BASE_OR_UNELISTE_Panel): - "" - -class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel): - - def __init__(self,parent,panneau,node): - PLUSIEURS_BASE_Panel.__init__( self, parent, panneau, node ) - #self.selected_valeur = None - - def add_valeur_plusieurs_base(self,name=None): - try: - valeur,validite,commentaire=self.get_valeur() - if not valeur: # sélection dans salome - strSelection = '' - - genea=self.node.item.get_genealogie() - kwType = None - for e in genea: - if "GROUP_NO" in e: - kwType = "GROUP_NO" - if "GROUP_MA" in e: - kwType = "GROUP_MA" - - selection, msg = self.parent.appli.selectGroupFromSalome(kwType) - if selection: - for oneSelection in selection: - strSelection +=str( oneSelection ) - strSelection +=',' - - strSelection = strSelection.rstrip(',') - self.display_valeur( strSelection ) - - PLUSIEURS_BASE_Panel.add_valeur_plusieurs_base( self, name ) - if msg: - self.parent.appli.affiche_infos(msg) - self.erase_valeur() - except: - print ' erreur add_valeur_plusieurs_base' #CS_pbruno : afficher boite de dialogue ici ? - - def makeValeurPage(self,page): - """ - Crée la page de saisie d'une liste de valeurs à priori quelconques, - cad qui ne sont pas à choisir dans une liste prédéfinie - """ - PLUSIEURS_BASE_Panel.makeValeurPage(self,page) - self.c = Button( self.frame_choix, text='Visualiser',command=self.displayInSalomeGeom ) - self.c.place( relx=0.3, rely=0.0,relwidth=0.55) - - - def displayInSalomeGeom( self ): - if self.selected_valeur: - ok, msgError = self.parent.appli.displayShape( self.selected_valeur ) - if not ok: - self.parent.appli.affiche_infos(msgError) - - - - -# ------------------------------------------------------------------------------# -# classe SALOME_UNIQUE_BASE_Panel -# -# Commandes modifiées : -# - LIRE_MAILLAGE_UNITE -# Methodes surchargées : -# - makeValeurPage(self,page) -# -# ------------------------------------------------------------------------------# - -class SALOME_UNIQUE_BASE_Panel(UNIQUE_BASE_Panel): - -# ce dictionnaire va servir lors de la sortie d efficas -# a creer le fichier qui sera integre au config.txt -# pour relier une unite logique et un nom de fichier - - dict_fichier_unite={} - - - def SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_N(self): - entrychaine=salome.sg.getAllSelected() - if entrychaine != '': - self.entry2.delete(0,END) - try: - SO = salome.myStudy.FindObjectID(entrychaine[0]) - except: - boo = 0 - SO = None - - FileName='' - if SO != None: - myBuilder = salome.myStudy.NewBuilder() - boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeFileType") - if boo: - val=FileAttr.Value() - if (val !="FICHIERMED" and val != "FICHIER_RESU_MED"): - boo=0 - showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9") - else: - boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeExternalFileDef") - if boo : - FileName=FileAttr.Value() - else: - showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9") - if FileName != '' : - self.entry.delete(0,END) - self.entry2.delete(0,END) - self.entry.insert(0,FileName) - self.entry2.insert(0,FileName) - self.valid_valeur() - - - def SALOME_DONNEES_HOMARD_TRAITEMENT_NOM_MED_MAILLAGE_N(self): - EntryName='' - entrychaine=salome.sg.getAllSelected() - if entrychaine != '': - self.entry2.delete(0,END) - try: - SO = salome.myStudy.FindObjectID(entrychaine[0]) - except: - boo = 0 - SO = None - - if SO is not None: - myBuilder = salome.myStudy.NewBuilder() - ok, AtName = myBuilder.FindAttribute(SO,"AttributeName") - if ok: - EntryName=AtName.Value() - - if EntryName != '': - self.entry.delete(0,END) - self.entry2.delete(0,END) - self.entry.insert(0,EntryName) - self.entry2.insert(0,EntryName) - self.valid_valeur() - - def SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_NP1(self): - self.SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_N() - - def SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA(self): - #try: - if ( 1 == 1 ) : - selection, msg = self.parent.appli.selectGroupFromSalome() - if selection: - strSelection =str( selection ) - UNIQUE_BASE_Panel.valid_valeur(self,strSelection) - if msg: - self.parent.appli.affiche_infos(msg) - self.erase_valeur() - #except: - else : - print ' erreur ' - - - def redistribue_selon_simp(self): - genea = self.node.item.get_genealogie() - commande="SALOME" - for i in range(0,len( genea )) : - commande=commande+"_"+ genea[i] - # -------------------------------------------------------------- - # on verifie que la methode n est pas particularise - # sinon on appelle SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA qui - # sert comme methode par defaut - # -------------------------------------------------------------- - try : - SALOME_UNIQUE_BASE_Panel.__dict__[commande](self) - except : - SALOME_UNIQUE_BASE_Panel.SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA(self) - - - - def makeValeurPage(self,page): - """ - Crée la page de saisie d'une valeur à priori quelconque, - cad qui ne sont pas à choisir dans une liste prédéfinie - Ajout d'un bouton pour selectionner à partir de Salome - """ - UNIQUE_BASE_Panel.makeValeurPage(self,page) - self.b = Button(self.frame_valeur,text='Relier selection',command=self.redistribue_selon_simp) - self.b.place(relx=0.28,rely=0.4,relwidth=0.4) - -#--------------------------------------------------------------------------------------- -# Correspondances entre les classes eficas et les classes salome_eficas -#______________________________________________________________________________________ -dict_classes_salome = { SHELLPanel : SALOME_SHELLPanel, - FONCTION_Panel : SALOME_FONCTION_Panel, - PLUSIEURS_INTO_Panel : SALOME_PLUSIEURS_INTO_Panel, - PLUSIEURS_ASSD_Panel : SALOME_PLUSIEURS_ASSD_Panel, - PLUSIEURS_BASE_Panel : SALOME_PLUSIEURS_BASE_Panel, - PLUSIEURS_BASE_OR_UNELISTE_Panel : SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel, - UNIQUE_INTO_Panel : SALOME_UNIQUE_INTO_Panel, - UNIQUE_SDCO_Panel : SALOME_UNIQUE_SDCO_Panel, - UNIQUE_ASSD_Panel : SALOME_UNIQUE_ASSD_Panel, - UNIQUE_ASSD_Panel_Reel : SALOME_UNIQUE_ASSD_Panel_Reel, - UNIQUE_COMP_Panel : SALOME_UNIQUE_COMP_Panel, - UNIQUE_BASE_Panel : SALOME_UNIQUE_BASE_Panel} - -dict_geom_numgroupe = { } -dict_geom_numface = { } diff --git a/Editeur/patches.py b/Editeur/patches.py deleted file mode 100644 index 0bd2fc4c..00000000 --- a/Editeur/patches.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== - -""" - Ce module contient des modifications mineures du comportement - du noyau ou de validation -""" -import string - -if __name__ == "__main__": - import Noyau.N_CR - print Noyau.N_CR.encadre_message(motif='!', -texte="""- Il faut au moins un mot-clé parmi : ('DEBUT', 'POURSUITE') -- Il faut au moins un mot-clé parmi : ('FIN',) -- Il faut qu'au moins un objet de la liste : ('DEBUT', 'POURSUITE') soit suivi d'au moins un objet de la liste : ('FIN',) -ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,yyyyyyyyyyyyyyyy -""") - - - diff --git a/Editeur/plusieursassdpanel.py b/Editeur/plusieursassdpanel.py deleted file mode 100644 index 88eea05d..00000000 --- a/Editeur/plusieursassdpanel.py +++ /dev/null @@ -1,183 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -import prefs -import panels -import images -from widgets import ListeChoix -from widgets import FenetreDeSelection - -from Noyau.N_CR import justify_text -from utils import substract_list - -# Import des panels -from plusieurspanel import PLUSIEURS_Panel - -class PLUSIEURS_ASSD_Panel(PLUSIEURS_Panel): - """ - Classe définissant le panel associé aux mots-clés qui demandent - à l'utilisateur de donner une liste de valeurs qui ne sont pas - à choisir dans une liste discrètes et qui sont de type dérivé d'ASSD - """ - def makeValeurPage(self,page): - """ - Génère la page de saisie de plusieurs noms de SD parmi un ensemble discret - de SD possibles, cad d'un type cohérent avec les types attendus par le mot-clé simple - """ - # On récupère la bulle d'aide du panneau, l'objet, l'aide, min et max (cardinalité de la liste), - # la liste des valeurs déjà affectées à l'objet courant et la liste des SD du bon type - bulle_aide=self.get_bulle_aide() - self.ajout_valeurs=None - objet_mc = self.node.item.get_definition() - aide = self.get_aide() - aide = justify_text(texte=aide) - min,max = self.node.item.GetMinMax() - l_valeurs = self.node.item.GetListeValeurs() - l_choix=self.node.item.get_sd_avant_du_bon_type() - l_choix.sort() - # remplissage du panneau - self.frame_valeurs = Frame(page) - self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7) - self.frame_boutons_fleches = Frame(page) - self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7) - self.frame_choix = Frame(page) - self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7) - self.frame_boutons = Frame(page) - self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.5,relheight=0.1) - liste_commandes_valeurs = (("",self.selectValeur), - ("",self.deselectValeur), - ("",self.sup_valeur_sans_into)) - liste_commandes_choix = (("",self.selectChoix), - ("",self.deselectChoix), - ("",self.add_eval_valeur_sans_into)) - self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs, - titre="Valeur(s) actuelle(s)") - self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,liste_commandes = liste_commandes_choix, - titre= "Valeurs possibles") - self.bouton_add = Button(self.frame_boutons_fleches, - image = images.get_image('arrow_left'), - command = self.add_eval_valeur_sans_into) - self.bouton_sup = Button(self.frame_boutons_fleches, - image = images.get_image('arrow_right'), - command = self.sup_valeur_sans_into) - self.bouton_accepter = Button(self.frame_boutons, - text='Valider', - command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M)) - self.bouton_annuler = Button(self.frame_boutons, - text = 'Annuler', - command = self.annule_modifs_valeur) - self.bouton_add.place(relx=0.3,rely=0.35) - self.bouton_sup.place(relx=0.3,rely=0.65) - for but in (self.bouton_accepter,self.bouton_annuler): - but.pack(side='left',padx=4) - self.Liste_valeurs.affiche_liste() - if len(l_valeurs) > 0 : - liste_marque=l_valeurs[-1] - self.Liste_valeurs.surligne(liste_marque) - self.Liste_choix.affiche_liste() - for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons): - fram.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - fram.bind("",self.parent.appli.efface_aide) - - def add_eval_valeur_sans_into(self,valeurentree=None): - if valeurentree == None: - valeurentree = self.get_valeur() - valeur,validite=self.node.item.eval_valeur(valeurentree) - if not validite : - commentaire = "impossible d'évaluer : %s " %`valeurentree` - self.parent.appli.affiche_infos(commentaire) - return - self.add_valeur_sans_into(valeur) - - def get_bulle_aide(self): - """ - Retourne la bulle d'aide associée au panneau - """ - return """Un clic sur une valeur des deux listes la sélectionne. - - Un clic sur la flèche gauche stocke la valeur possible sélectionnée - dans la liste des valeurs que vous voulez affecter au mot-clé simple - - Un clic sur la flèche droite déstocke la valeur du mot-clé simple - sélectionnée (elle apparaît alors à nouveau comme choix possible - dans la liste des choix à droite) - - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées - au mot-clé simple courant - - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple - avant toute modification depuis le dernier 'Valider'""" - - def get_aide(self): - """ - Retourne la phrase d'aide indiquant de quel type doivent être les - valeurs que doit entrer l'utilisateur - """ - commentaire="" - mc = self.node.item.get_definition() - type = mc.type[0].__name__ - if len(mc.type)>1 : - for typ in mc.type[1:] : - type = type + ' ou '+typ.__name__ - if mc.min == mc.max: - commentaire="Une liste de "+`mc.min`+" objets de type "+type+" est attendue" - else : - commentaire="Une liste d'objets de type "+type+" est attendue (min="+`mc.min`+",max="+`mc.max`+')' - aideval=self.node.item.aide() - commentaire=commentaire +"\n"+ aideval - return commentaire - - - def sup_valeur(self,name=None): - """ - Supprime la valeur selectionnée de la liste des valeurs et la rajoute - à la liste des choix possibles - """ - liste_valeurs = self.Liste_valeurs.get_liste() - liste_valeurs.remove(self.selected_valeur) - liste_choix = self.node.item.get_definition().into - liste_choix = substract_list(liste_choix,liste_valeurs) - self.Liste_valeurs.put_liste(liste_valeurs) - self.Liste_choix.put_liste(liste_choix) - self.selected_valeur = None - - def erase_valeur(self): - pass - - def get_valeur(self): - """ - Retourne la valeur sélectionnée dans la liste des choix - """ - return self.selected_choix - - def display_valeur(self,val=None): - """ - Affiche la valeur passée en argument dans l'entry de saisie. - Par défaut affiche la valeur du mot-clé simple - """ - # Il n'y a pas d'entry pour ce type de panneau - return - - diff --git a/Editeur/plusieursbasepanel.py b/Editeur/plusieursbasepanel.py deleted file mode 100644 index 38831dc1..00000000 --- a/Editeur/plusieursbasepanel.py +++ /dev/null @@ -1,542 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -import prefs -import panels -import images -from widgets import showinfo -from widgets import askopenfilename -from widgets import ListeChoix -from widgets import FenetreDeSelection -from widgets import FenetreDeParametre - -from Noyau.N_CR import justify_text -from Ihm.I_LASSD import LASSD -from Extensions.parametre import PARAMETRE - -from utils import substract_list -from plusieurspanel import PLUSIEURS_Panel -from uniqueassdpanel import UNIQUE_ASSD_Panel - -import fontes -import math - -class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel): - """ - Classe définissant le panel associé aux mots-clés qui demandent - à l'utilisateur de donner une liste de valeurs qui ne sont pas - à choisir dans une liste discrètes et qui sont de type de base : - entier, réel, string,... - """ - def makeValeurPage(self,page): - """ - Crée la page de saisie d'une liste de valeurs à priori quelconques, - cad qui ne sont pas à choisir dans une liste prédéfinie - """ - #print "Methode Utilisée par Salome" - # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste), - # et la liste des valeurs déjà affectées à l'objet courant - bulle_aide=self.get_bulle_aide() - objet_mc = self.node.item.get_definition() - aide = self.get_aide() - aide = justify_text(texte=aide) - min,max = self.node.item.GetMinMax() - l_valeurs = self.node.item.GetListeValeurs() - - # création des frames globales - self.frame1 = Frame(page,relief='groove',bd=2) - self.frame2 = Frame(page) - self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85) - self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15) - self.frame_right = Frame(self.frame1) - self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.) - - # création des frames internes - self.frame_valeurs = Frame(self.frame1) - self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95) - self.frame_boutons_fleches = Frame(self.frame_right) - self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5) - self.frame_choix = Frame(self.frame_right) - self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.8) - self.frame_aide = Frame(self.frame_right) - self.frame_aide.place(relx=0.1,rely=0.8,relwidth=0.8,relheight=0.2) - self.frame_boutons = Frame(self.frame2) - self.frame_boutons.place(relx=0.2,rely=0.,relwidth=1,relheight=1.) - for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs, - self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons): - fram.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - fram.bind("",self.parent.appli.efface_aide) - - # création des objets dans les frames - liste_commandes_valeurs = (("",self.selectValeur), - ("",self.deselectValeur), - ("",self.sup_valeur_sans_into)) - self.Liste_valeurs=ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs, - titre="Valeur(s) actuelle(s)") - - # Création de l'entry ou de la liste des SD - # PN : pour ajouter les validators - self.label = Label(self.frame_choix,text="Valeur :") - self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base) - self.label.place(relx=0.05,rely=0.2) - - # Création d'un bouton "Importer ..." et d'un bouton "Paramatres" sur le panel. - bouton_valeurs_fichier = Button(self.frame_choix, - text="Importer", - command=self.select_in_file) - bouton_valeurs_fichier.place(relx=0.28,rely=0.4,relwidth=0.6) - bouton_parametres = Button(self.frame_choix, text="Parametres", command=self.affiche_parametre) - bouton_parametres.place(relx=0.28,rely=0.6,relwidth=0.6) - self.ajout_valeurs = None - - # boutons Ajouter et Supprimer - self.bouton_add = Button(self.frame_boutons_fleches, - image = images.get_image('arrow_left'), - command = self.add_valeur_plusieurs_base) - self.bouton_sup = Button(self.frame_boutons_fleches, - image = images.get_image('arrow_right'), - command = self.sup_valeur_sans_into) - self.bouton_add.place(relx=0.3,rely=0.35) - self.bouton_sup.place(relx=0.3,rely=0.65) - # affichage de l'aide - self.frame_aide.update() - self.aide = Label(self.frame_aide, - text = aide, - justify='center', - anchor='center', - wraplength=int(self.frame_aide.winfo_width()*0.8)) - self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1) - self.Liste_valeurs.affiche_liste() - if len(l_valeurs) > 0 : - liste_marque=l_valeurs[-1] - self.Liste_valeurs.surligne(liste_marque) - self.selectValeur(liste_marque) - # boutons Accepter et Annuler - self.bouton_accepter = Button(self.frame_boutons, - text='Valider', - command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M)) - self.bouton_annuler = Button(self.frame_boutons, - text = 'Annuler', - command = self.annule_modifs_valeur) - self.bouton_accepter.place(relx=0.2, rely=0.2,relwidth=0.25) - self.bouton_annuler.place(relx=0.5, rely=0.2,relwidth=0.25) - - def affiche_parametre(self) : - if self.node.item.get_liste_param_possible() != [ ]: - txtparam="" - for param in self.node.item.get_liste_param_possible(): - txtparam=txtparam+repr(param)+"\n" - if txtparam=="": - showerror("Aucun parametre ","Pas de parametre de ce type") - else : - try : - self.self.fenetreparam.destroy() - except: - pass - self.fenetreparam=FenetreDeParametre( self, self.node.item, self.parent.appli, txtparam) - - def valid_valeur(self): - self.add_valeur_plusieurs_base() - - def add_valeur_plusieurs_base(self,name=None): - if name != None : - valeur = name - else: - valeur,validite,commentaire=self.get_valeur() - if not validite : - self.parent.appli.affiche_infos(commentaire) - return - - atraiter=[] - if type(valeur) in (types.ListType,types.TupleType) : - indice = 0 - while (indice < len(valeur)): - v=valeur[indice] - if self.node.item.wait_complex : - if (v== 'RI' or v == 'MP'): - try : - t=tuple([v,valeur[indice+1],valeur[indice+2]]) - atraiter.append(t) - indice=indice+3 - except : - validite=0 - commentaire = "Veuillez entrer le complexe sous forme aster ou sous forme python" - self.parent.appli.affiche_infos(commentaire) - return - else : # ce n'est pas un tuple à la mode aster - atraiter.append(v) - indice = indice + 1 - else: # on n'attend pas un complexe - atraiter.append(v) - indice=indice+1 - else: - atraiter.append(valeur) - - for valeur in atraiter : - encorevalide=self.node.item.valide_item(valeur) - if encorevalide : - listecourante=self.Liste_valeurs.get_liste() - encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante) - if not encorevalide : encorevalide = -1 - self.add_valeur_sans_into(valeur,encorevalide) - - def select_in_file(self): - """ Permet d'ouvrir un fichier choisi par l'utilisateur. """ - nom_fichier = askopenfilename(title="Choix fichier :") - - if not nom_fichier: - return - - try: - f = open(nom_fichier, "rb") - selection_texte = f.read() - f.close() - self.ajout_valeurs = FenetreDeSelection(self, - self.node.item, - self.parent.appli, - titre="Sélection de valeurs", - texte=selection_texte) - except: - traceback.print_exc() - showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier) - - def get_bulle_aide(self): - """ - Retourne l'aide associée au panneau courant - """ - return """Taper dans la boîte de saisie de droite la valeur que - vous voulez affecter au mot-clé simple. - - Cliquez sur la flèche gauche ou pressez pour la faire glisser - dans la liste des valeurs que vous voulez affecter au mot-clé simple - - Un clic sur une valeur de la liste la sélectionne - - Un clic sur la flèche droite ou un double-clic retire la valeur - sélectionnée de la liste - - Cliquez sur 'Valider' pour que la nouvelle valeur désirée soit affectée - au mot-clé simple - - Cliquez sur 'Annuler' pour annuler toutes les modifications faites - depuis le dernier clic sur 'Valider'""" - - def get_aide(self): - """ - Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs - que saisit l'utilisateur - """ - commentaire="" - mc = self.node.item.get_definition() - d_aides = { 'TXM' : 'chaînes de caractères', - 'R' : 'réels', - 'I' : 'entiers', - 'C' : 'complexes'} - type = mc.type[0] - if not d_aides.has_key(type) : return 'Type de base inconnu' - if mc.min == mc.max: - commentaire="Une liste de "+d_aides[type]+" de longueur " + `mc.min` + " est attendue" - else : - commentaire="Une liste de "+d_aides[type]+" est attendue (min="+`mc.min`+",max="+`mc.max`+')' - - aideval=self.node.item.aide() - commentaire=commentaire +"\n"+aideval - return commentaire - - def make_entry(self,frame,command,x=0.28,y=0.2): - self.entry = Entry(frame,relief='sunken') - self.entry.place(relx=0.28,rely=y,relwidth=0.6) - self.entry.bind("",lambda e,c=command:c()) - self.entry.bind("",lambda e,c=command:c()) - self.entry.focus() - - def get_valeur(self): - """ - Retourne la valeur saisie par l'utilisateur dans self.entry - """ - commentaire = "" - if hasattr(self,'entry'): - # Traitement d'une entree unique - valeurentree = self.entry.get() - if (valeurentree == None or valeurentree ==""): - return None,0,"" - - #On tente une evaluation globale (ne fait pas de vérification de validité - #seulement une transformation de la chaine en objet équivalent) - valeur,validite=self.node.item.eval_valeur(valeurentree) - if valeur == valeurentree: - #L'evaluation n'a rien donné : on a toujours la string - #on découpe la string sur le séparateur , si c'est possible - if valeurentree.find(',') != -1: - valeur=[] - for v in valeurentree.split(','): - vsimple,validite=self.node.item.eval_valeur(v) - valeur.append(vsimple) - - return valeur,validite,commentaire - - - # if (valeurentree[0] != "(") and (valeurentree.find(',') < len(valeurentree)): - # valeurs=[] - # for v in valeurentree.split(','): - # vsimple,validite=self.node.item.eval_valeur(v) - # Pn If ajoute pour le panneau "double" - #if isinstance(vsimple,LASSD) : - # commentaire = "impossible de mélanger reels et liste prédéfinie" - # validite = 0 - # break - # if validite : - # valeurs.append(vsimple) - # else: - # commentaire = "impossible d'évaluer : %s " %`valeurentree` - # break - # valeur=valeurs - # else: - # valeur,validite=self.node.item.eval_valeur(valeurentree) - # if not validite and commentaire == "": - # commentaire = "impossible d'évaluer : %s " %`valeurentree` - # return valeur,validite,commentaire - #else: - # # Traitement d'une entree de type complexe - # try: - # valeur= (self.typ_cplx.get(), - # string.atof(self.entry1.get()), - # string.atof(self.entry2.get())) - # return valeur,1,"" - # except: - # #traceback.print_exc() - # return None,0,"impossible d'évaluer la valeur d'entree" - - def erase_valeur(self): - """ - Efface la valeur donnée par l'utilisateur dans l'entry - """ - if hasattr(self,'entry'): - self.entry.delete(0,END) - else: - self.typ_cplx.set('RI') - self.entry1.delete(0,END) - self.entry2.delete(0,END) - - - def display_valeur(self,val=None): - """ - Affiche la valeur passée en argument dans l'entry de saisie. - Par défaut affiche la valeur du mot-clé simple - """ - if not val : - valeur = self.node.item.object.getval() - else: - valeur = val - if not valeur : return - - if hasattr(self,'entry'): - # Traitement d'une entree unique - self.entry.delete(0,END) - self.entry.insert(0,str(valeur)) - else: - # Traitement d'une entree de type complexe - typ_cplx,x1,x2=valeur - self.entry1.delete(0,END) - self.entry2.delete(0,END) - self.typ_cplx.set(typ_cplx) - self.entry1.setentry(x1) - self.entry2.setentry(x2) - -class PLUSIEURS_BASE_OR_UNELISTE_Panel(PLUSIEURS_BASE_Panel,UNIQUE_ASSD_Panel): - - def makeValeurPage(self,page): - """ - Crée la page de saisie d'une liste de valeurs à priori quelconques, - cad qui ne sont pas à choisir dans une liste prédéfinie - """ - # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste), - # et la liste des valeurs déjà affectées à l'objet courant - bulle_aide=self.get_bulle_aide() - objet_mc = self.node.item.get_definition() - aide = self.get_aide() - aide = justify_text(texte=aide) - aide2 = self.get_aide2() - aide2 = justify_text(texte=aide2) - min,max = self.node.item.GetMinMax() - l_valeurs = self.node.item.GetListeValeurs() - for i in l_valeurs: - if isinstance(i,LASSD) : - affiche_entry=l_valeurs - l_valeurs=() - - # Il faut traiter ici pour avoir le choix entre une liste - # deja constituee (listr8aster) ou manuelle - - # création des frames globales - self.frame1 = Frame(page,relief='groove',bd=2) - self.frame2 = Frame(page) - self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.9) - self.frame2.place(relx=0.,rely=0.9,relwidth=1,relheight=0.1) - - # création des frames internes dans frame1 - self.frame_valeurs = Frame(self.frame1) - self.frame_valeurs.place(relx=0.02,rely=0.55,relwidth=0.35,relheight=0.45) - self.frame_haut = Frame(self.frame1) - self.frame_haut.place(relx=0.02,rely=0.02,relwidth=0.98,relheight=0.45) - self.frame_bas = Frame(self.frame1) - self.frame_bas.place(relx=0.37,rely=0.55,relwidth=0.63,relheight=0.45) - - # création des frames internes dans frame_right - self.frame_fleches = Frame(self.frame_bas) - self.frame_fleches.place(relx=0.,rely=0.4,relwidth=0.2,relheight=0.5) - self.frame_choix = Frame(self.frame_bas) - self.frame_choix.place(relx=0.2,rely=0.1,relwidth=0.75,relheight=1) - - # affichage de l'aide - self.aide = Label(self.frame_haut, text = aide, justify='center', anchor='center',) - self.aide.place(relx=0.72,rely=0.25,anchor='center',relwidth=1) - self.aide2 = Label(self.frame2, text = aide2,) - self.aide2.place(relx=0.4,rely=0.01,relwidth=0.6) - - # Création d'un bouton "Importer ..." et d'un bouton "Parametres" sur le panel. - bouton_valeurs_fichier = Button(self.frame_choix, - text="Importer", - command=self.select_in_file) - bouton_valeurs_fichier.place(relx=0.28,rely=0.0,relwidth=0.6) - bouton_parametres = Button(self.frame_choix, text="Parametres", command=self.affiche_parametre) - bouton_parametres.place(relx=0.28,rely=0.25,relwidth=0.6) - self.ajout_valeurs = None - - - # Création de la liste des SD - liste_noms_sd = self.node.item.get_sd_avant_du_bon_type_pour_type_de_base() - liste_noms_sd = self.tri(liste_noms_sd) - self.listbox = Pmw.ScrolledListBox(self.frame_haut, - items=liste_noms_sd, - labelpos='n', - #label_text="Structures de données du type\n requis parl'objet courant :", - label_text="Listes du type\n requis parl'objet courant :", - listbox_height = 6, - dblclickcommand=lambda s=self,c=UNIQUE_ASSD_Panel.valid_valeur : s.choose_valeur_from_list(c)) - self.listbox.place(relx=0.00,rely=0.00,relwidth=0.4) - - # On eneleve le label pour gagner de la place - #self.label = Label(self.frame_choix,text="Valeur :") - #self.label.place(relx=0.05,rely=0.85) - self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base,x=0.28,y=0.55) - - # boutons Ajouter et Supprimer - bouton_add = Button(self.frame_fleches, image = images.get_image('arrow_left'), - command = self.add_valeur_plusieurs_base) - bouton_sup = Button(self.frame_fleches, image = images.get_image('arrow_right'), - command = self.sup_valeur_sans_into) - bouton_add.place(relx=0.2,rely=0.25) - bouton_sup.place(relx=0.2,rely=0.70) - - - # boutons Accepter et Annuler dans frame2 - bouton_accepter = Button(self.frame2, text='Valider', - command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M)) - bouton_annuler = Button(self.frame2, text = 'Annuler', - command = self.annule_modifs_valeur) - for but in (bouton_accepter,bouton_annuler): - but.pack(side='left',padx=5) - - # création des objets dans les frames - liste_commandes_valeurs = (("",self.selectValeur), - ("",self.deselectValeur), - ("",self.sup_valeur_sans_into)) - self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs, - liste_commandes = liste_commandes_valeurs, - titre="Valeur(s) non-prédéfinies(s)", - fonte_titre=None - ) - - for fram in (self.frame1,self.frame2,self.frame_bas,self.frame_haut,self.frame_valeurs, - self.frame_fleches,self.frame_choix): - fram.bind("",lambda e,s=self,a=bulle_aide: s.parent.appli.affiche_aide(e,a)) - fram.bind("",self.parent.appli.efface_aide) - - self.Liste_valeurs.affiche_liste() - if len(l_valeurs) > 0 : - liste_marque=l_valeurs[-1] - self.Liste_valeurs.surligne(liste_marque) - - def get_aide(self): - """ - Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs - saisies par l'utilisateur - """ - commentaire="Ce motclef accepte soit un nom de liste déja définie soit une liste manuelle de valeurs" - return commentaire - - def get_aide2(self): - min,max = self.node.item.GetMinMax() - aideval=self.node.item.aide() - commentaire="min : " + str(min) + ", max : " + str(max) - aideval=commentaire + aideval - return aideval - - def choose_valeur_from_list(self,command): - """ - Affecte à valeur choisie la sélection courante dans la liste des choix proposés - Exécute command - """ - self.Liste_valeurs.liste=[] - self.Liste_valeurs.affiche_liste() - if len(self.listbox.get()) == 0 : return - choix = self.listbox.getcurselection()[0] - d={} - d["valeurentree"]=choix - apply(command,(self,),d) - - - - def tri(self,liste_noms_sd): - a=(3+8j) - d_types = { 'TXM' : type('A'), - 'R' : type(3.), - 'I' : type(0), - 'C' : type(a)} - - # On enleve seulement ceux qu'on peut - # Sur certaines listes, il est possible qu'on ne - # sache pas déterminer le type - listefinale=[] - typespossibles=self.node.item.object.definition.type - typecherche = None - for t in typespossibles: - if t in d_types.keys() : - typecherche = d_types[t] - break - for liste in liste_noms_sd: - valeur,validite=self.node.item.eval_valeur(liste) - for mc in valeur.etape.mc_liste : - try : - if type(mc.valeur) in (types.ListType,types.TupleType) : - typeliste=type(mc.valeur[0]) - else : - typeliste=type(mc.valeur) - if type(mc.valeur[0]) == typecherche: - listefinale.append(liste) - except: - listefinale.append(liste) - return listefinale - diff --git a/Editeur/plusieursintopanel.py b/Editeur/plusieursintopanel.py deleted file mode 100644 index 1854e865..00000000 --- a/Editeur/plusieursintopanel.py +++ /dev/null @@ -1,163 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -import prefs -import panels -import images -from widgets import ListeChoix -from widgets import FenetreDeSelection - -from Noyau.N_CR import justify_text -from utils import substract_list - -# Import des panels -from plusieurspanel import PLUSIEURS_Panel - -class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel): - """ - Classe servant à définir le panneau permettant d'afficher et de saisir une - liste de valeurs à choisir parmi une liste discrètes de valeurs possibles - """ - def makeValeurPage(self,page): - """ - Génère la page de saisie de plusieurs valeurs parmi un ensemble discret - de possibles - """ - self.ajout_valeurs = None - # On récupère la bulle d'aide du panneau, l'objet, min et max (cardinalité de la liste), - # la liste des choix et la liste des valeurs - aide = self.get_aide() - aide = justify_text(texte=aide) - bulle_aide=self.get_bulle_aide() - objet_mc = self.node.item.get_definition() - min,max = self.node.item.GetMinMax() - #l_choix=list(objet_mc.into) - l_valeurs = self.node.item.GetListeValeurs() - l_choix= self.node.item.get_liste_possible(l_valeurs) - # reinitialisation de l_valeurs - l_valeurs = self.node.item.GetListeValeurs() - - # remplissage du panneau - self.frame_valeurs = Frame(page) - self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7) - self.frame_boutons_fleches = Frame(page) - self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7) - self.frame_choix = Frame(page) - self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7) - self.frame_boutons = Frame(page) - self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=1,relheight=0.1) - self.frame_aide = Frame(page) - self.frame_aide.place(relx=0.1,rely=0.75,relwidth=1,relheight=0.15) - liste_commandes_valeurs = (("",self.selectValeur), - ("",self.deselectValeur), - ("",self.sup_valeur)) - liste_commandes_choix = (("",self.selectChoix), - ("",self.deselectChoix), - ("",self.add_choix)) - self.Liste_valeurs = ListeChoix(self,self.frame_valeurs, - l_valeurs,liste_commandes = liste_commandes_valeurs, - titre="Valeur(s) actuelle(s)") - self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix, - liste_commandes = liste_commandes_choix, - titre= "Valeurs possibles") - self.bouton_add = Button(self.frame_boutons_fleches, - #text="<--", - image = images.get_image('arrow_left'), - command = self.add_choix) - self.bouton_sup = Button(self.frame_boutons_fleches, - #text="-->", - image = images.get_image('arrow_right'), - command = self.sup_valeur) - self.bouton_accepter = Button(self.frame_boutons, - text='Valider', - command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M)) - self.bouton_annuler = Button(self.frame_boutons, - text = 'Annuler', - command = self.annule_modifs_valeur) - self.bouton_add.place(relx=0.3,rely=0.35) - self.bouton_sup.place(relx=0.3,rely=0.65) - for but in (self.bouton_accepter,self.bouton_annuler): - but.pack(side='left',padx=3) - self.Liste_valeurs.affiche_liste() - if len(l_valeurs) > 0 : - liste_marque=l_valeurs[-1] - self.Liste_valeurs.surligne(liste_marque) - self.selectValeur(l_valeurs[-1]) - self.Liste_choix.affiche_liste() - for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons): - fram.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - fram.bind("",self.parent.appli.efface_aide) - self.frame_aide.update() - self.aide = Label(self.frame_aide, - text = aide, - justify='center', - anchor='center') - #wraplength=int(self.frame_aide.winfo_width()*0.8)) - self.aide.place(relx=0.3,rely=0.5,anchor='center',relwidth=1) - - def get_aide(self): - """ - Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs - que saisit l'utilisateur - """ - commentaire="" - mc = self.node.item.get_definition() - d_aides = { 'TXM' : 'chaînes de caractères', - 'R' : 'réels', - 'I' : 'entiers', - 'C' : 'complexes'} - type = mc.type[0] - if not d_aides.has_key(type) : - if mc.min == mc.max: - return str(mc.min)+" valeur(s) est(sont) attendue(s)" - else : - return "entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs" - if mc.min == mc.max: - commentaire="Une liste de "+str(mc.min)+" "+d_aides[type]+" est attendue" - else : - commentaire="Entre "+str(mc.min)+" et "+str(mc.max)+" valeurs de type "+d_aides[type]+" sont attendues" - aideval=self.node.item.aide() - commentaire=commentaire + "\n" + aideval - return commentaire - - def get_bulle_aide(self): - """ - Retourne la bulle d'aide du panneau (affichée par clic droit) - """ - return """Un clic sur une valeur des deux listes la sélectionne. - - Un clic sur la flèche gauche stocke la valeur possible sélectionnée - dans la liste des valeurs que vous voulez affecter au mot-clé simple - - Un clic sur la flèche droite déstocke la valeur du mot-clé simple - sélectionnée (elle apparaît alors à nouveau comme choix possible - dans la liste des choix à droite) - - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées - au mot-clé simple courant - - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple - avant toute modification depuis le dernier 'Valider'""" - diff --git a/Editeur/plusieurspanel.py b/Editeur/plusieurspanel.py deleted file mode 100644 index ba641445..00000000 --- a/Editeur/plusieurspanel.py +++ /dev/null @@ -1,177 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -import prefs -import panels -import images -from widgets import ListeChoix -from widgets import FenetreDeSelection - -from Noyau.N_CR import justify_text -from utils import substract_list - -# Import des panels -from newsimppanel import newSIMPPanel - - -class PLUSIEURS_Panel(newSIMPPanel): - """ - Classe virtuelle servant de classe mère à toutes celles définissant - un panneau pour un mot-clé simple qui attend une liste de valeurs - """ - def accepte_modifs_valeur(self,min,max,liste=None): - """ - Méthode qui récupère la liste des valeurs donnée par l'utilisateur - et l'affecte au mot-clé courant. - le parametre None n'est pas rempli sauf par l appel a partir de fonctionpanel - """ - if liste==None: - l1_valeurs = self.Liste_valeurs.get_liste() - else: - l1_valeurs = liste - - #nettoyage de la liste - l_valeurs=[] - for val in l1_valeurs : - if val != '' and val != None : - l_valeurs.append(val) - - longueur = len(l_valeurs) - if longueur < min or longueur > max : - self.parent.appli.affiche_infos("Valeur refusée : nombre d'éléments incorrect dans la liste") - return - if longueur > 1: - valeur = tuple(l_valeurs) - elif longueur == 1: - valeur = l_valeurs[0] - else: - valeur = None - - self.parent.appli.affiche_infos("Valeur acceptée") - self.record_valeur(valeur) - # fermeture de la fenêtre de sélection - if self.ajout_valeurs: - self.ajout_valeurs.quit() - - def annule_modifs_valeur(self): - """ - RAZ de la liste des valeurs (annule toutes les valeurs saisies par l'utilisateur) - """ - self.node.select() - # fermeture de la fenêtre de sélection - if self.ajout_valeurs: - self.ajout_valeurs.quit() - - def add_valeur_sans_into(self,name=None,encorevalide=1): - """ - Tente d'ajouter la valeur fournie (name) à la liste courante : - - si la valeur est acceptable, elle est ajoutée dans la liste des valeurs - - sinon elle est refusée - - encorevalide peut prendre les valeurs suivantes : - - - valeur 1 si le validateur trouve l item et la liste correctes - - valeur 0 si le validateur trouve la valeur de l item incorrecte - - valeur -1 si le validateur trouve la liste incorrecte - """ - valeur = name - commentaire="Valeur incorrecte : ajout à la liste refusé" - testvalide=1 - - # Pas de traitement des valeurs nulles ( a priori clic involontaire - if (valeur == None or valeur =="") : - commentaire = "Pas de saisie des valeurs nulles" - encorevalide = -2 - testtype=0 - else : - testtype,comment = self.node.item.object.verif_type(valeur) - if not testtype : - commentaire =comment - encorevalide=-2 - - if (encorevalide ==0) : - commentaire=self.node.item.info_erreur_item() - if (encorevalide == -1) : - commentaire=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() - if len(self.Liste_valeurs.get_liste()) >= max : - commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé" - - if testvalide and (encorevalide == 1): - min,max = self.node.item.GetMinMax() - - if testtype : - liste_valeurs = self.Liste_valeurs.get_liste() - if len(liste_valeurs) >= max : - commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé" - else : - if (self.Liste_valeurs.selection != None): - ligne=self.Liste_valeurs.cherche_selected_item() - liste_valeurs.insert(ligne,valeur) - else : - liste_valeurs.append(valeur) - try : - self.set_valeur_texte(str(self.entry.get())) - except : - pass - self.Liste_valeurs.put_liste(liste_valeurs) - self.erase_valeur() - commentaire="Nouvelle valeur acceptée" - else : - commentaire ="Type de la valeur incorrecte" - - self.parent.appli.affiche_infos(commentaire) - - def sup_valeur_sans_into(self,name=None): - """ - Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée - """ - try: - self.Liste_valeurs.remove_selected_item() - self.display_valeur(self.selected_valeur) - self.selected_valeur = None - except: - # la valeur sélectionnée n'est pas dans la liste - return - - def display_valeur(self,val=None): - """ - Affiche la valeur passée en argument dans l'entry de saisie. - Par défaut affiche la valeur du mot-clé simple - """ - if not val : - #valeur = self.node.item.getval() - valeur = self.node.item.object.getval() - else: - valeur = val - self.entry.delete(0,END) - if not valeur : return - self.entry.insert(0,str(valeur)) - diff --git a/Editeur/readercata.py b/Editeur/readercata.py deleted file mode 100644 index 1555f388..00000000 --- a/Editeur/readercata.py +++ /dev/null @@ -1,450 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module sert à lire un catalogue et à construire - un objet CataItem pour Eficas. - Il s'appuie sur la classe READERCATA -""" -# Modules Python -import time -import os,sys,py_compile -import traceback -import cPickle -import Pmw - -# Modules Eficas -import prefs -import splash -import fontes -import analyse_catalogue -from Noyau.N_CR import CR -from widgets import showinfo,showerror -from widgets import Fenetre -from utils import init_rep_cata_dev - -#import catabrowser -import autre_analyse_cata -import uiinfo -import re - -class READERCATA: - - menu_defs=[ - ('Catalogue',[ - ("Rapport de validation catalogue",'visuCRCATA'), - ] - ) - ] - - button_defs=[] - - def __init__(self,appli,parent): - self.appli=appli - self.parent=parent - self.code=self.appli.code - self.appli.format_fichier.set('python') - self.version_code=self.appli.version_code - self.fic_cata=None - self.OpenCata() - self.cataitem=None - - def OpenCata(self): - """ - Ouvre le catalogue standard du code courant, cad le catalogue présent - dans le répertoire Cata - """ - message1 = "Compilation des fichiers Eficas \n\n Veuillez patienter ..." - if self.appli.test == 0 : - splash._splash.configure(text = message1) - self.configure_barre(4) - - liste_cata_possibles=[] - for catalogue in self.appli.CONFIGURATION.catalogues: - if catalogue[0] == self.code : - liste_cata_possibles.append(catalogue) - - if len(liste_cata_possibles)==0: - showerror("Import du catalogue","Pas de catalogue defini pour le code %s" % self.code) - self.appli.quit() - sys.exit(1) - - if self.version_code is not None: - # La version a ete fixee - for cata in liste_cata_possibles: - if self.version_code == cata[1]: - self.fic_cata = cata[2] - self.appli.format_fichier.set(cata[3]) - elif len(liste_cata_possibles)==1: - self.fic_cata = liste_cata_possibles[0][2] - self.code = self.appli.CONFIGURATION.catalogues[0][0] - self.version_code = liste_cata_possibles[0][1] - self.appli.format_fichier.set(liste_cata_possibles[0][3]) - else: - # plusieurs catalogues sont disponibles : il faut demander à l'utilisateur - # lequel il veut utiliser ... - self.ask_choix_catalogue() - - if self.fic_cata == None : - print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code) - sys.exit(0) - - # Determinination du repertoire materiau - v_codeSansPoint=self.version_code - v_codeSansPoint=re.sub("\.","",v_codeSansPoint) - chaine="rep_mat_"+v_codeSansPoint - if hasattr(self.appli.CONFIGURATION,chaine): - a=getattr(self.appli.CONFIGURATION,chaine) - else : - try : - a=self.appli.CONFIGURATION.dRepMat[self.version_code] - except : - print "Probleme avec le repertoire materiau" - a='.' - self.appli.CONFIGURATION.rep_mat=a - - # détermination de fic_cata_c et fic_cata_p - self.fic_cata_c = self.fic_cata + 'c' - self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py' - - #if self.appli.test == 0 : - # splash._splash.configure(text = "Debut compil cata: %d s" % time.clock()) - # compilation éventuelle du catalogue - #test = self.compile_cata(self.fic_cata,self.fic_cata_c) - #self.update_barre() - #if self.appli.test == 0 : - # splash._splash.configure(text = "Fin compil cata: %d s" % time.clock()) - #if not test : showerror("Compilation catalogue","Impossible de compiler le catalogue %s" %self.fic_cata) - - # import du catalogue - if self.appli.test == 0 : - splash._splash.configure(text = "Debut import_cata: %d s" % time.clock()) - self.cata = self.import_cata(self.fic_cata) - self.update_barre() - if self.appli.test == 0 : - splash._splash.configure(text = "Fin import_cata: %d s" % time.clock()) - if not self.cata : - showerror("Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata) - self.appli.quit() - sys.exit(1) - # - # analyse du catalogue (ordre des mots-clés) - # - if self.appli.test == 0 : - splash._splash.configure(text = "Debut Retrouve_Ordre: %d s" % time.clock()) - # Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue - # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation - # des mots clés à la création - #self.Retrouve_Ordre_Cata_Standard() - self.Retrouve_Ordre_Cata_Standard_autre() - self.update_barre() - if self.appli.test == 0 : - splash._splash.configure(text = "Fin Retrouve_Ordre: %d s" % time.clock()) - # - # analyse des données liées à l'IHM : UIinfo - # - uiinfo.traite_UIinfo(self.cata) - self.update_barre() - - # - # traitement des clefs documentaires - # - self.traite_clefs_documentaires() - - # chargement et analyse des catalogues développeur (le cas échéant) - # - if self.appli.CONFIGURATION.isdeveloppeur == 'OUI' : - init_rep_cata_dev(self.fic_cata,self.appli.CONFIGURATION.path_cata_dev) - fic_cata_dev = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py') - if os.path.isfile(fic_cata_dev): - # il y a bien un catalogue développeur : il faut récupérer le module_object associé ... - test = self.compile_cata(fic_cata_dev,fic_cata_dev+'c') - if not test : - showinfo("Compilation catalogue développeur", - "Erreur dans la compilation du catalogue développeur") - self.cata = (self.cata,) - else: - self.cata_dev =self.import_cata(fic_cata_dev) - #self.Retrouve_Ordre_Cata_Developpeur() - self.Retrouve_Ordre_Cata_Developpeur_autre() - self.cata = (self.cata,self.cata_dev) - else: - self.cata = (self.cata,) - else: - self.cata = (self.cata,) - titreSuite=" avec le catalogue " + os.path.basename(self.fic_cata) - titre=self.appli.titre+titreSuite - if self.appli.top: - self.appli.top.title(titre) - self.appli.titre=titre - - - def import_cata(self,cata): - """ - Réalise l'import du catalogue dont le chemin d'accès est donné par cata - """ - if self.appli.test == 0 : - splash._splash.configure(text = "Chargement du catalogue") - nom_cata = os.path.splitext(os.path.basename(cata))[0] - rep_cata = os.path.dirname(cata) - sys.path[:0] = [rep_cata] - try : - o=__import__(nom_cata) - return o - except Exception,e: - traceback.print_exc() - return 0 - - def Retrouve_Ordre_Cata_Standard_autre(self): - """ - Construit une structure de données dans le catalogue qui permet - à EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue. - Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui - contient le nom des mots clés dans le bon ordre - """ - self.cata_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata) - - def Retrouve_Ordre_Cata_Standard(self): - """ - Retrouve l'ordre des mots-clés dans le catalogue, cad : - - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer - l'ordre des mots-clés dans le catalogue - - s'il n'a pas été modifié, relie le fichier pickle - """ - time1 = os.path.getmtime(self.fic_cata) - try : - time2 = os.path.getmtime(self.fic_cata_p) - except: - time2 = 0 - if time2 > time1 : - # l'objet catalogue n'a pas été modifié depuis le dernier "pickle" - self.Get_Ordre_Cata() - else : - # le catalogue a été modifié depuis le dernier "pickle" : - # il faut retrouver l'ordre du catalogue et refaire pickle - self.Get_Ordre_Cata(mode='cata') - self.appli.affiche_infos("Catalogue standard chargé") - - def Retrouve_Ordre_Cata_Developpeur(self): - """ - Retrouve l'ordre des mots-clés dans le catalogue, cad : - - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer - l'ordre des mots-clés dans le catalogue - - s'il n'a pas été modifié, relie le fichier pickle - """ - if self.code != 'ASTER' : return - fic_cata = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py') - message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev - if self.appli.test == 0 : - splash._splash.configure(text = message,barre='oui') - cata_dev_ordonne = analyse_cata.analyse_catalogue(self,self.fic_cata) - self.cata_dev_ordonne_cr = cata_dev_ordonne.cr - cata_dev_ordonne_dico = cata_dev_ordonne.entites - self.cata_ordonne_dico.update(cata_dev_ordonne_dico) - self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) - - def Retrouve_Ordre_Cata_Developpeur_autre(self): - """ - Retrouve l'ordre des mots-clés dans le catalogue, cad : - - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer - l'ordre des mots-clés dans le catalogue - - s'il n'a pas été modifié, relie le fichier pickle - """ - if self.code != 'ASTER' : return - message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev - if self.appli.test == 0 : - splash._splash.configure(text = message,barre='oui') - cata_dev_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata) - self.cata_ordonne_dico.update(cata_dev_ordonne_dico) - self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) - - def Get_Ordre_Cata(self,mode='pickle'): - """ - Retrouve l'ordre du catalogue : - - mode='pickle ': tente de relire le fichier pickle et sinon lance l'analyse du catalogue - - mode='cata' : force l'analyse du catalogue directement sans relire le pickle - """ - if mode == 'pickle' : - try: - f = open(self.fic_cata_p) - u = cPickle.Unpickler(f) - if self.appli.test == 0 : - splash._splash.configure(text = "Analyse du catalogue") - self.cata_ordonne_dico = u.load() - f.close() - except : - # on peut ne pas arriver à relire le fichier pickle s'il a été altéré - # ou (le plus probable) s'il a été créé sous un autre OS - self.Get_Ordre_Cata(mode='cata') - elif mode == 'cata': - if self.appli.test == 0 : - splash._splash.configure(text = "Analyse du catalogue",barre='oui') - cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata) - self.cata_ordonne_cr = cata_ordonne.cr - self.cata_ordonne_dico = cata_ordonne.entites - splash._splash.configure(text = "Sauvegarde des informations sur le catalogue") - f = open(self.fic_cata_p,'w+') - p = cPickle.Pickler(f) - p.dump(self.cata_ordonne_dico) - f.close() - else : - raise Exception("Appel à un mode inconnu de Get_Ordre_Cata : %s" % mode) - return - - def ask_choix_catalogue(self): - """ - Ouvre une fenêtre de sélection du catalogue dans le cas où plusieurs - ont été définis dans Accas/editeur.ini - """ - # construction du dictionnaire et de la liste des catalogues - self.dico_catalogues = {} - defaut = None - for catalogue in self.appli.CONFIGURATION.catalogues: - if catalogue[0] == self.code : - self.dico_catalogues[catalogue[1]] = catalogue - if len(catalogue) == 5 : - if catalogue[4]=='defaut' : defaut = catalogue[1] - liste_choix = self.dico_catalogues.keys() - liste_choix.sort() - # test si plusieurs catalogues ou non - if len(liste_choix) == 0: - showerror("Aucun catalogue déclaré pour %s" %self.code) - self.appli.quit() - sys.exit(1) - elif len(liste_choix) == 1: - self.fic_cata = self.dico_catalogues[liste_choix[0]][2] - self.version_code = liste_choix[0] - return - # création d'une boîte de dialogue modale - self.fenetre_choix_cata = Pmw.Dialog(splash._splash, #avec self.parent, ne marche pas sous Windows - buttons=('OK','ANNULER'), - defaultbutton = 'OK', - title = "Choix d'une version du code %s" %self.code, - command = self.chooseCata) - # construction des radioboutons - label = `len(liste_choix)`+' versions du code %s sont disponibles\n' %self.code - label = label + 'Veuillez choisir celle avec laquelle vous souhaitez travailler :' - self.radiobutton = Pmw.RadioSelect(self.fenetre_choix_cata.interior(), - buttontype='radiobutton', - labelpos = 'w', - label_text = label, - label_font = fontes.standard, - orient='vertical') - for choix in liste_choix : - self.radiobutton.add(choix) - if defaut == None : - # aucun catalogue par défaut n'a été spécifié dans Accas/editeur.ini - defaut = liste_choix[0] - self.radiobutton.invoke(defaut) - self.radiobutton.pack(fill='x',padx=10,pady=10) - # centrage de la fenêtre - self.fenetre_choix_cata.activate(geometry='centerscreenalways') - - def chooseCata(self,txt): - """ - Méthode activée lorsque l'utilisateur a fait son choix et cliqué sur 'OK' ou sur 'ANNULER' - """ - if txt == 'OK' : - version_cata = self.radiobutton.getcurselection() - self.fic_cata = self.dico_catalogues[version_cata][2] - self.version_code = version_cata - self.appli.format_fichier.set(self.dico_catalogues[version_cata][3]) - self.fenetre_choix_cata.destroy() - else: - self.parent.destroy() - - def compile_cata(self,cata,catac): - """ - Teste si le catalogue a bien besoin d'être recompilé et si oui, le compile et - affiche un message dans le splash . Retourne 1 si la compilation s'est bien déroulée, - 0 sinon. - """ - time1 = os.path.getmtime(cata) - try: - time2 = os.path.getmtime(catac) - except: - time2 = 0 - if time1 > time2: - try: - # le catalogue doit être recompilé avant d'être importé - if self.appli.test == 0 : - splash._splash.configure(text="Compilation du catalogue\nCela peut prendre plusieurs secondes ...") - py_compile.compile(cata) - except: - return 0 - return 1 - - -#-------------------------------------------------------------------------------- -# Méthodes concernant la barre de progression lors de l'analyse du catalogue -#-------------------------------------------------------------------------------- - - def configure_barre(self,nbcommandes): - """ Configure la barre de progression en lui passant comme paramètre le - nombre de commandes du catalogue qui lui sert à déterminer la longueur de son incrément """ - try: - if self.appli.test == 0 : - splash._splash.configure(barre='oui',ratio = nbcommandes) - except: - pass - - def update_barre(self): - """ Update la position de la barre de progression : la fait progresser de son incrément """ - try: - if self.appli.test == 0 : - splash._splash.update_barre() - except: - pass - - def visuCRCATA(self): - """ - Méthode permettant l'affichage du rapport de validation - """ - cr = CR( debut = "Début rapport de validation du catalogue", - fin = "Fin rapport de validation du catalogue") - titre="rapport de validation du catalogue" - if hasattr(self,'cata_ordonne_cr') : - cr.add(self.cata_ordonne_cr) - if hasattr(self,'cata_dev_ordonne_cr') : - cr.add(self.cata_dev_ordonne_cr) - for cata in self.cata: - if hasattr(cata,'JdC'): - cr.add(cata.JdC.report()) - texte_cr = str(cr) - self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr) - - - def traite_clefs_documentaires(self): - try: - self.fic_cata_clef=os.path.splitext(self.fic_cata_c)[0]+'_clefs_docu' - f=open(self.fic_cata_clef) - except: - #print "Pas de fichier associé contenant des clefs documentaires" - return - - dict_clef_docu={} - for l in f.readlines(): - clef=l.split(':')[0] - docu=l.split(':')[1] - docu=docu[0:-1] - dict_clef_docu[clef]=docu - for oper in self.cata.JdC.commandes: - if dict_clef_docu.has_key(oper.nom): - oper.docu=dict_clef_docu[oper.nom] diff --git a/Editeur/session.py b/Editeur/session.py index 421584a5..235e9a4d 100644 --- a/Editeur/session.py +++ b/Editeur/session.py @@ -46,7 +46,6 @@ except: import os,traceback import ConfigParser -import prefs import re # Les valeurs decodees par optparse sont mises dans un objet dictionnaire-like. @@ -204,7 +203,8 @@ def print_d_env(): def create_parser(): # creation du parser des options de la ligne de commande - parser=optparse.OptionParser(usage="usage: %prog [options]",version="%prog 1.9") + import prefs + parser=optparse.OptionParser(usage="usage: %prog [options]",version="%prog 1.13") parser.add_option("-j","--jdc",dest="comm",type='string', action="callback",callback=check_comm, diff --git a/Editeur/shellpanel.py b/Editeur/shellpanel.py deleted file mode 100644 index 0f929484..00000000 --- a/Editeur/shellpanel.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -#import prefs -#import panels -#import images -#from widgets import ListeChoix -#from widgets import FenetreDeSelection - -from Noyau.N_CR import justify_text -from utils import substract_list -from newsimppanel import newSIMPPanel - - -class SHELLPanel(newSIMPPanel): - """ - Classe Panel utilisé pour les mots-clés simples qui attendent un shell pour valeur - """ - - def makeValeurPage(self,page): - """ - Affiche la page concernant l'objet pointé par self qui attend un shell - """ - objet_mc = self.node.item.get_definition() - aide = self.gen_aide() - aide = justify_text(texte=aide) - self.frame = Frame(page) - self.frame.place(relx=0,rely=0,relwidth=1,relheight=1) - label_aide = Label(self.frame,text = aide) - label_aide.place(relx=0.5,rely=0.1,anchor='center') - self.text = Text(self.frame,bg='gray95') - self.text.place(relx=0.2,rely=0.2,relwidth=0.6,relheight=0.6) - but_val = Button(self.frame,text='Valider',command = self.valide_shell) - but_ann = Button(self.frame,text='Annuler',command = self.annule_shell) - but_val.place(relx=0.35,rely=0.9,anchor='center') - but_ann.place(relx=0.65,rely=0.9,anchor='center') - self.display_valeur() - - def gen_aide(self): - """ - Retourne une chaîne de caractères d'aide sur la valeur qu'attend l'objet - pointé par self - """ - return "Un shell est attendu" - - def valide_shell(self,event=None): - """ - Récupère la valeur saisie par l'utilisateur dans self.text - et la stocke dans l'objet MCSIMP courant - """ - texte = self.text.get(1.0,END) - self.record_valeur(texte) - - def annule_shell(self,event=None): - """ - Annule toute saisie dans self.text - """ - self.text.delete(0,END) - - def display_valeur(self,val=None): - """ - Affiche la valeur de l'objet pointé par self - """ - if val != None : - valeur = val - else: - valeur = self.node.item.get_valeur() - if valeur == None or valeur == '': return - self.text.insert(END,valeur) - diff --git a/Editeur/splash.py b/Editeur/splash.py deleted file mode 100644 index 2918ddfe..00000000 --- a/Editeur/splash.py +++ /dev/null @@ -1,150 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module permet de créer, mettre à jour et détruire - un écran Splash -""" -from Tkinter import * - -from centerwindow import centerwindow -from Tools.foztools.foztools import Slider -import fontes -import images - -_splash=None - -def init_splash(*pos,**args): - global _splash - _splash=SplashScreen(*pos,**args) - -def fini_splash(): - global _splash - _splash.quit() - _splash=None - -class SplashScreen(Toplevel): - """ - Provides a splash screen. Usage: - Subclass and override 'CreateWidgets()' - In constructor of main window/application call - - S = SplashScreen(main=self) (if caller is Toplevel) - - S = SplashScreen(main=self.master) (if caller is Frame) - - S.quit() after you are done creating your widgets etc. - """ - def __init__(self, master=None,**args): - Toplevel.__init__(self, master, relief='groove', - borderwidth=5) - self.main = master - if self.main != None : - self.main.iconify() - self.withdraw() - self.frame = Frame(self) - self.frame.pack(expand=1,fill='both') - self.init(args) - self.geometry("300x200") - self.resizable(0,0) - centerwindow(self) - self.CreateWidgets() - self.deiconify() - - def init(self,args={}): - self.text = StringVar() - self.text.set('') - self.text2 = StringVar() - self.text2.set('') - self.icone = 'logo_edf.gif' - self.barre = 'non' - if args == {} : return - if args.has_key('text'): - self.text.set(args['text']) - if args.has_key('info'): - self.text2.set(args['info']) - if args.has_key('titre'): - self.title(args['titre']) - if args.has_key('code'): - self.code = args['code'] - else: - self.code = 'inconnu' - if args.has_key('icone'): - self.icone = args['icone'] - if self.code == 'ASTER' : - self.icone = 'code_aster.gif' - elif self.code == 'SATURNE': - self.icone = 'code_saturne.gif' - elif self.code == 'DESCARTES': - self.icone = 'code_descartes.gif' - - def CreateWidgets(self): - self.catIcon = images.get_image(self.icone) - self.label = Label(self.frame, image=self.catIcon) - self.label.pack(side=TOP) - self.label = Label(self.frame, textvariable=self.text,font = fontes.standard_gras) - self.label.pack(side=TOP,expand=1,fill='both') - self.label2 = Label(self.frame, textvariable=self.text2,font = fontes.standard_italique) - self.label2.pack(side=TOP,expand=1,fill='both') - self.progress = Slider(self.frame,value=0,max=100,orientation='horizontal', - fillColor='#00008b',width=200,height=30, - background='white',labelColor='red') - centerwindow(self) - - def update_barre(self,event=None): - """ Permet de faire avancer la barre de progression """ - try: - self.progress.value = self.progress.value+self.increment - self.progress.update() - except: - pass - - def configure_barre(self): - """ - Calcule l'incrément de progression de la barre en fonction - du nombre d'opérations à effectuer afin que le compteur - soit à 100% à la fin des opérations - """ - self.increment = 100./self.ratio - self.progress.update() - - def configure(self,**args): - if args.has_key('text'): - self.text.set(args['text']) - if args.has_key('info'): - self.text2.set(args['info']) - if args.has_key('titre'): - self.title(args['titre']) - if args.has_key('barre'): - old = self.barre - self.barre = args['barre'] - if self.barre == 'oui' and old == 'non': - self.progress.frame.pack(in_=self.frame,side='top') - elif self.barre == 'non' and old == 'oui': - self.progress.frame.pack_forget() - if args.has_key('ratio'): - self.ratio = args['ratio'] - self.configure_barre() - self.update() - - def quit(self): - self.progress = None - self.destroy() - if self.main: - centerwindow(self.main,parent='sans') - self.main.deiconify() - diff --git a/Editeur/statusbar.py b/Editeur/statusbar.py deleted file mode 100644 index e3b809b8..00000000 --- a/Editeur/statusbar.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" -""" -# Modules Python -import Tkinter -import types - -class STATUSBAR: - def __init__(self,parent,police): - self.parent=parent - self.police=police - self.frame = Tkinter.Frame(parent,bd=1, relief=Tkinter.RAISED) - self.frame.pack(side=Tkinter.BOTTOM, fill=Tkinter.X) - self.label = Tkinter.Label (self.frame, - fg='black', - text='', - justify='left', - relief='sunken', - height=3, - bg='gray95') - self.label.pack(side='left',expand=1,fill='both') - - def affiche_infos(self,texte): - if len(texte)>150 : - texte_infos=texte[0:150] - else : - texte_infos=texte - self.label.configure(text=texte_infos,font=self.police) - - def reset_affichage_infos(self): - """ Efface tout message présent dans le panneau en bas d'EFICAS """ - self.affiche_infos('') - diff --git a/Editeur/styles.py b/Editeur/styles.py deleted file mode 100644 index dd90ee60..00000000 --- a/Editeur/styles.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -import os -import prefs -import basestyle -from basestyle import STYLE,style - -inistylefile=os.path.join(prefs.REPINI,"style.py") -if os.path.isfile(inistylefile): - execfile(inistylefile) - -userstylefile=os.path.expanduser("~/Eficas_install/style.py") -if os.path.isfile(userstylefile): - execfile(userstylefile) - -import fontes -for attr in dir(style): - if attr[0]=='_':continue - if not hasattr(fontes,attr):continue - setattr(fontes,attr,getattr(style,attr)) diff --git a/Editeur/toolbar.py b/Editeur/toolbar.py deleted file mode 100644 index 74248a09..00000000 --- a/Editeur/toolbar.py +++ /dev/null @@ -1,145 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" -""" -# Modules Python -import string -from Tkinter import * -import Pmw - -# Modules Eficas -import images - -class TOOLBAR: - def __init__(self,appli,parent): - # parent représente l'objet graphique parent - self.parent=parent - # appli représente l'objet application parent - self.appli=appli - self.balloon = None - self.l_boutons_a_activer = [] - self.barreboutons=Frame(self.parent,relief='ridge',bd=2) - self.barreboutons.pack(anchor='nw',expand=0,fill=X) - # bouton Infos à l'extrême droite de la barre des boutons - b = Button(self.barreboutons, - image = images.get_image('About24'), - command = self.view_infos) - b.pack(side='right') - texte = "Infos EFICAS" - b.bind("",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t,pos='right')) - b.bind("", self.efface_balloon) - - def appelle_commande(self,e,b,c): - try : - c() - except : - pass - - def inactive_boutons(self): - """ - Inactive les boutons de la liste self.l_boutons_a_activer - --> cette méthode est appelée dès qu'il n'y a pas de JDC courant - """ - for but in self.l_boutons_a_activer: - but.configure(state='disabled') - - def active_boutons(self): - """ - Active les boutons de la liste self.l_boutons_a_activer - --> cette méthode est appelée dès qu'il y a un JDC courant - """ - for but in self.l_boutons_a_activer: - but.configure(state='normal') - - def affiche_balloon(self,event,bouton,bulle,pos='left'): - """ - Affiche le balloon bulle associé au bouton bouton - """ - etat = bouton.cget('state') - if etat != 'normal' : return - geom = bouton.winfo_geometry() - l_args = string.split(geom,'+') - x = eval(l_args[1])+event.x+10 - self.balloon = Label(self.parent, - text = bulle, - background="yellow", - borderwidth=2, - relief='ridge') - if pos == 'left': - self.balloon.place(in_=self.parent,x=x,y=32) - else: - self.balloon.place(in_=self.parent,x=x,y=32,anchor='ne') - - def efface_balloon(self,event=None): - """ - Efface le balloon courant - """ - if self.balloon : - self.balloon.destroy() - self.balloon = None - - def view_infos(self): - """ - Permet d'afficher des infos sur la session courante d'EFICAS - """ - self.fen_infos = Pmw.Dialog(self.parent, - title = 'Informations session EFICAS', - buttons = ('Fermer',), - command = self.close_infos) - self.fen_infos.withdraw() - texte_infos = self.appli.get_texte_infos() - Label(self.fen_infos.interior(), - text = texte_infos, - anchor='center').pack(side='top',anchor='center') - self.fen_infos.activate(geometry = 'centerscreenalways') - - def close_infos(self,lbl): - """ - Ferme la fenêtre des infos - """ - self.fen_infos.destroy() - - def creer_boutons_appli_composant(self,l_boutons,appli_composant): - for bouton in l_boutons : - if not bouton : - # on veut afficher un bouton vide (=espace entre boutons) - Button(self.barreboutons, - image = images.get_image('Sep'), - state='disabled', - relief = 'flat').pack(side='left') - continue - nom_fic,commande,texte,statut = bouton - commande=getattr(appli_composant,commande) - b = Button(self.barreboutons, - image = images.get_image(nom_fic), - command = commande, - relief='flat') - b.pack(side='left') - b.bind("",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t)) - b.bind("", self.efface_balloon) - b.bind("", lambda e,s=self,but=b,c=commande:s.appelle_commande(e,but,c)) - if statut != 'always': - self.l_boutons_a_activer.append(b) - - # inactive les boutons qui doivent l'être tant qu'aucun JDC courant - self.inactive_boutons() - - diff --git a/Editeur/tooltip.py b/Editeur/tooltip.py deleted file mode 100644 index 18fbabb5..00000000 --- a/Editeur/tooltip.py +++ /dev/null @@ -1,127 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - Ce module propose la classe TOOLTIP pour - mettre en oeuvre les bulles d'aide -""" - -import Tkinter -import types - -def destruct(obj): - # assist in breaking circular references - if obj is not None: - assert type(obj) is types.InstanceType - for k in obj.__dict__.keys(): - obj.__dict__[k] = None - ##del obj.__dict__[k] - -def after(widget, ms, func, *args): - timer = apply(widget.after, (ms, func) + args) - command = widget._tclCommands[-1] - return (timer, command, widget) - -def after_cancel(t): - if t is not None: - t[2].after_cancel(t[0]) - try: - t[2].deletecommand(t[1]) - except Tkinter.TclError: - pass - -class TOOLTIP: - def __init__(self,widget,text=None): - self.widget=widget - self.text = text - self.timer = None - self.tooltip = None - self.label = None - self.bindings = [] - self.bindings.append(self.widget.bind("", self._enter)) - self.bindings.append(self.widget.bind("", self._leave)) - self.bindings.append(self.widget.bind("", self._leave)) - # user overrideable settings - self.time = 1000 # milliseconds - self.relief = Tkinter.SOLID - self.justify = Tkinter.LEFT - self.fg = "#000000" - self.bg = "#ffffe0" - self.xoffset = 20 - self.yoffset = 1 - - def setText(self, text): - self.text = text - - def _unbind(self): - if self.bindings and self.widget: - self.widget.unbind("", self.bindings[0]) - self.widget.unbind("", self.bindings[1]) - self.widget.unbind("", self.bindings[2]) - self.bindings = [] - - def destroy(self): - self._unbind() - self._leave() - - def _enter(self, *event): - after_cancel(self.timer) - self.timer = after(self.widget, self.time, self._showTip) - - def _leave(self, *event): - after_cancel(self.timer) - self.timer = None - if self.tooltip: - self.label.destroy() - destruct(self.label) - self.label = None - self.tooltip.destroy() - destruct(self.tooltip) - self.tooltip = None - - def _showTip(self): - if self.tooltip or not self.text: - return - c = self.widget.__class__ - if c in (Tkinter.Button,): - if self.widget["state"] == Tkinter.DISABLED: - return - x = self.widget.winfo_rootx() - y = self.widget.winfo_rooty() + self.widget.winfo_height() - x = x + self.xoffset - y = y + self.yoffset - self.tooltip = Tkinter.Toplevel() - self.tooltip.wm_iconify() - self.tooltip.wm_overrideredirect(1) - self.tooltip.wm_protocol("WM_DELETE_WINDOW", self.destroy) - self.label = Tkinter.Label(self.tooltip, text=self.text, - relief=self.relief, justify=self.justify, - fg=self.fg, bg=self.bg, bd=1, takefocus=0) - self.label.pack(ipadx=1, ipady=1) - self.tooltip.wm_geometry("%+d%+d" % (x, y)) - self.tooltip.wm_deiconify() - -if __name__ == "__main__": - root=Tkinter.Tk() - label = Tkinter.Label(root, text="coucou") - label.pack() - tp=TOOLTIP(label,"texte d'aide") - root.mainloop() - diff --git a/Editeur/treeitemincanvas.py b/Editeur/treeitemincanvas.py deleted file mode 100644 index f007f450..00000000 --- a/Editeur/treeitemincanvas.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" -""" -# Modules Python -import Tkinter,Pmw - -# Modules Eficas -import Objecttreeitem -import treewidget - -class TREEITEMINCANVAS: - def __init__(self,object,nom="",parent=None,appli=None,sel=None,rmenu=None): - self.object=object - self.nom=nom - - if not appli: - class Appli: - def affiche_infos(self,message): - pass - appli=Appli() - self.appli=appli - - if not parent: - parent=Tkinter.Tk() - Pmw.initialise(parent) - self.parent=parent - - self.item=Objecttreeitem.make_objecttreeitem(self.appli,self.nom,self.object) - self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1,canvas_background='gray95') - self.canvas.pack(padx=10,pady=10,fill = 'both', expand = 1) - if not sel: - def sel(event=None): - return - self.tree=treewidget.Tree(self.appli,self.item,self.canvas,command=sel,rmenu=rmenu) - self.tree.draw() - - def mainloop(self): - self.parent.mainloop() - - def update(self): - """Cette methode est utilisee pour signaler une mise a jour des objets associes""" - self.tree.update() - - def supprime(self): - #print "supprime",self - self.tree.supprime() - self.tree=None - self.canvas.destroy() - self.canvas=None - - #def __del__(self): - # print "__del__",self - diff --git a/Editeur/treewidget.py b/Editeur/treewidget.py deleted file mode 100644 index c86d898c..00000000 --- a/Editeur/treewidget.py +++ /dev/null @@ -1,945 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -import os,sys,string,re,types,traceback -from Tkinter import * - - -import fontes -import images -from Ihm import CONNECTOR - -# -__version__="$Name: $" -__Id__="$Id: treewidget.py,v 1.32.2.1 2007-06-15 16:23:33 cchris Exp $" -# - -Fonte_Standard = fontes.standard - -class Tree : - def __init__(self,appli,jdc_item,scrolledcanvas,command = None,rmenu=None): - self.item = jdc_item - self.scrolledcanvas = scrolledcanvas - self.canvas = self.scrolledcanvas.component('canvas') - #resolution - resolution= self.canvas.winfo_screenwidth()/(self.canvas.winfo_screenmmwidth()/25.4*72) - self.DDY=max(20,resolution*(Fonte_Standard[1]+4)) - self.id_up=self.canvas.bind("", self.page_up) - self.id_down=self.canvas.bind("", self.page_down) - self.id_um=self.canvas.bind("", self.mot_up) - self.id_dm=self.canvas.bind("", self.mot_down) - self.id_s=self.canvas.bind("<1>", self.canvas_select) - self.tree = self - self.command = command - self.rmenu=rmenu - self.appli = appli - self.parent = None - self.racine = self - self.node_selected = None - self.build_children() - - def canvas_select(self,event): - self.canvas.focus_set() - - def page_up(self,event): - event.widget.yview_scroll(-1, "page") - - def page_down(self,event): - event.widget.yview_scroll(1, "page") - - def unit_up(self,event): - event.widget.yview_scroll(-1, "unit") - - def unit_down(self,event): - event.widget.yview_scroll(1, "unit") - - def mot_down(self,event): - self.select_next(None) - self.canvas.focus_set() - - def mot_down_force(self): - self.select_next(None) - self.canvas.focus_set() - - def mot_up(self,event): - self.node_selected.select_mot_previous() - self.canvas.focus_set() - - def mot_up_force(self): - self.node_selected.select_mot_prev() - self.canvas.focus_set() - - def deplieReplieNode(self): - self.node_selected.deplieReplieNode() - - def build_children(self): - """ Construit la liste des enfants de self """ - self.children = [] - child = self.item.itemNode(self,self.item,self.command,self.rmenu) - self.children.append(child) - child.state='expanded' - - def draw(self): - """ Dessine l'arbre """ - lasty = 8 - x = 5 - for child in self.children: - child.draw(x,lasty) - lasty = child.lasty + 15 - self.children[0].select() - self.resizescrollregion() - - def deselectall(self): - """ déselectionne tous les éléments de l'arbre """ - if self.node_selected : - self.node_selected.deselect() - - def update(self): - """ Update tous les éléments de l'arbre """ - for child in self.children: - child.update() - - def supprime(self): - """ supprime tous les éléments de l'arbre """ - #print "supprime",self - self.canvas.unbind("",self.id_up) - self.canvas.unbind("",self.id_down) - self.canvas.unbind("",self.id_um) - self.canvas.unbind("",self.id_dm) - self.canvas.unbind("<1>",self.id_s) - self.tree = None - self.racine = None - self.node_selected = None - self.item = None - self.scrolledcanvas = None - self.canvas = None - self.command = None - self.rmenu=None - for child in self.children: - child.supprime() - self.children=[] - - def update_valid(self) : - """Cette methode a pour but de mettre a jour la validite du noeud - et de propager la demande de mise à jour à son parent - """ - pass - - def resizescrollregion(self): - x0,y0,x1,y1=self.canvas.bbox(ALL) - # On ajoute une marge approximativement de la moitié du canvas - y1=y1+self.canvas.winfo_height()/2 - self.canvas.configure(scrollregion = (x0,y0,x1,y1)) - - def select_next(self,event): - self.node_selected.select_next() - self.canvas.focus_set() - - def select_previous(self,event): - self.node_selected.select_previous() - - def see(self,items): - x1, y1, x2, y2=apply(self.canvas.bbox, items) - while x2 > self.canvas.canvasx(0)+self.canvas.winfo_width(): - old=self.canvas.canvasx(0) - self.canvas.xview_scroll( 1, 'units') - # avoid endless loop if we can't scroll - if old == self.canvas.canvasx(0): - break - while y2 > self.canvas.canvasy(0)+self.canvas.winfo_height(): - old=self.canvas.canvasy(0) - self.canvas.yview_scroll( 1, 'units') - if old == self.canvas.canvasy(0): - break - # done in this order to ensure upper-left of object is visible - while x1 < self.canvas.canvasx(0): - old=self.canvas.canvasx(0) - self.canvas.xview_scroll( -1, 'units') - if old == self.canvas.canvasx(0): - break - while y1 < self.canvas.canvasy(0): - old=self.canvas.canvasy(0) - self.canvas.yview_scroll( -1, 'units') - if old == self.canvas.canvasy(0): - break - - #def __del__(self): - # print "__del__",self - - -class Node : - def __init__(self,parent,item,command=None,rmenu=None): - self.parent = parent - self.item = item - self.command = command - self.rmenu=rmenu - self.tree = self.parent.tree - self.appli = self.parent.appli - self.canvas = self.parent.canvas - self.init() - self.connect() - - def init(self): - self.state='collapsed' - self.displayed = 0 - self.selected = 0 - self.x = self.y =None - self.lasty = 0 - self.children = None - self.id = [] - if self.parent is self.tree: - self.racine=self - else: - self.racine = self.parent.racine - - def connect(self): - self.item.connect("add",self.onAdd,()) - self.item.connect("supp",self.onSupp,()) - self.item.connect("valid",self.onValid,()) - - #def __del__(self): - # print "__del__",self - - def force_select(self): - if self.selected: - # le noeud est selectionné. On force la reconstruction du panel associé - if self.command:apply(self.command,(None,)) - self.select() - - def onValid(self): - #print "onValid : l'item a changé de validité ",self.item,self.item.object,self.item.object.isvalid() - self.update_node_valid() - self.update_node_label() - self.update_node_texte() - if self.selected and self.command: - self.command(self) - - def onAdd(self,objet): - #print "onAdd : un objet a été ajouté aux fils de l'item ",self.item.object,objet - self.expand_node() - old_nodes=self.children - self.update_nodes() - self.redraw_children(old_nodes) - self.force_select() - - def onSupp(self,objet): - #print "onSupp : un objet a été supprimé des fils de l'item ",self.item.object,objet - self.expand_node() - old_nodes=self.children - self.update_nodes() - self.redraw_children(old_nodes) - self.force_select() - - def update_nodes(self): - #print "update_nodes",self - newnodes=[] - inodes=iter(self.children) - sublist=self.item._GetSubList() - iliste=iter(sublist) - - while(1): - old_item=item=None - for node in inodes: - old_item=node.item - if old_item in sublist:break - #print "item supprime",old_item - for item in iliste: - if item is old_item:break - #print "item ajoute",item - child = item.itemNode(self,item,self.command,self.rmenu) - newnodes.append(child) - - if old_item is None and item is None:break - if old_item is item: - #print "item conserve",item - newnodes.append(node) - - self.children=newnodes - self.connect() - - def supprime(self): - #print "supprime",self - self.efface_node() - self.racine = None - self.command = None - self.rmenu=None - if not self.children : return - for child in self.children: - child.supprime() - self.children=None - - def redraw_children(self,old_nodes): - #print "redraw_children",old_nodes - #print self.children - y = self.y + self.tree.DDY - x = self.x + 15 - supp_nodes=[] - - inodes=iter(old_nodes) - iliste=iter(self.children) - # on parcourt la liste des anciens noeuds (node) - # et la liste des nouveaux noeuds (new_node) en parallele (iterateurs) - - while(1): - new_node=node=None - for node in inodes: - #print "ancien noeud",node - if node in self.children:break # ancien noeud toujours present - #print "noeud supprime",node,node.item.GetLabelText()[0] - dy=node.y-node.lasty -self.tree.DDY - #print "deplacer noeuds",y,dy - node.move_nodes(y,dy) - node.supprime() - #supp_nodes.append(node) - - for new_node in iliste: - #print "nouveau noeud",new_node - if new_node in old_nodes: break # nouveau noeud deja present - #print "noeud ajoute",new_node,new_node.item.GetLabelText()[0] - y=self.draw_node(new_node,x,y) - - if node is None and new_node is None : break - - if node is new_node: # ancien noeud - #print "noeud conserve",node - node.update_node_label() - y=y+node.lasty-node.y +self.tree.DDY - - self.racine.update_coords() - self.canvas.delete('line') - self.racine.trace_ligne() - self.tree.resizescrollregion() - # Mettre à 1 pour verifier les cycles entre objets node - #withCyclops=0 - #if withCyclops: - #from Misc import Cyclops - #z = Cyclops.CycleFinder() - #print supp_nodes - #for o in supp_nodes: - #z.register(o) - #del supp_nodes - #del o - #z.find_cycles() - #z.show_stats() - #z.show_cycles() - - def tag_move_nodes(self,y): - """ Marque pour deplacement tous les noeuds au dela de l'ordonnée y """ - #print "tag_move_nodes",y - self.canvas.dtag(ALL,'move') - # on marque tous les ids au dela de y - x0, y0, x1, y1 = self.canvas.bbox(ALL) - if y > y1: # pas d'objet a deplacer - return - self.canvas.addtag_overlapping('move',x0,y,x1,y1) - - def move_nodes(self,y,dy): - """ Déplace de l'incrément dy les noeuds au dela de l'ordonnée y """ - #print "move_nodes",y,dy - self.tag_move_nodes(y) - # on déplace tous les items de dy - self.canvas.move('move',0,dy) - - def draw_node(self,new_node,x,y): - """ Dessine le noeud new_node en x,y en deplacant les noeuds existants - en y et au dela - Retourne la position du premier des noeuds deplaces - """ - #print "draw_node",new_node,x,y - self.tag_move_nodes(y) - #if new_node.item.isactif(): - #new_node.state = 'expanded' - new_node.state = 'expanded' - new_node.draw(x,y) - dy=(new_node.get_nb_children()+1)*self.tree.DDY - #print "deplacer noeuds",y,dy - self.canvas.move('move',0,dy) - return new_node.lasty+self.tree.DDY - - def build_children(self): - """ Construit la liste des enfants de self """ - self.children = [] - sublist = self.item._GetSubList() - if not sublist : return - for item in sublist : - child = item.itemNode(self,item,self.command,self.rmenu) - self.children.append(child) - - #----------------------------------------------- - # Méthodes de sélection/déselection d'un noeud - #----------------------------------------------- - - def select(self, event=None): - """ - Rend le noeud courant (self) sélectionné et déselectionne - tous les autres - """ - #print "SELECT",self - if not self.children : self.build_children() - self.tree.deselectall() - self.selected = 1 - self.tree.node_selected = self - if self.command:apply(self.command,(self,)) - self.highlight() - self.make_visible() - - def deselect(self, event=None): - """ Déselectionne self """ - self.selected = 0 - if self.displayed == 1 : self.dehighlight() - - def make_visible(self): - """ Rend l'objet self visible cad déplace le scroll pour que self - soit dans la fenêtre de visu - """ - lchild=self.last_child() - self.tree.see((self.image_id,lchild.image_id)) - - def select_next(self,ind=0): - """ on doit chercher à sélectionner dans l'ordre: - - son premier fils s'il est affiché - - son frère cadet s'il existe - - son oncle (benjamin de son père) - - ... appel récursif ... - """ - if self.state=='expanded' and len(self.children) > ind: - self.children[ind].select() - else : - index = self.parent.children.index(self) + 1 - try : - if isinstance(self.parent,TREE) : - try: - self.children[ind].select() - except: - self.children[0].select() - except : - if self.parent is self.tree: - pass - else : - self.parent.select_next(index) - - def select_mot_prev(self): - index = self.parent.children.index(self) - 1 - try : - if index > -1 : - self.parent.children[index].select() - if self.parent.children[index].state=="expanded": - print len(self.parent.children[index].children) - if len(self.parent.children[index].children)!=0 : - max=len(self.parent.children[index].children) - 1 - self.parent.children[index].children[max].select() - else : - self.parent.children[index].select() - else : - self.parent.children[index].select() - elif self.parent is self.tree: - pass - else : - self.parent.select() - except: - if self.parent is self.tree: - pass - else : - self.parent.select_previous() - - - def select_mot_previous(self): - index = self.parent.children.index(self) - 1 - try : - if index > -1 : - self.parent.children[index].select() - elif self.parent is self.tree: - pass - else : - self.parent.select() - except: - if self.parent is self.tree: - pass - else : - self.parent.select_previous() - - def select_previous(self): - """ on doit d'abord sélectionner(dans l'ordre) : - - son frère aîné - - son père - """ - index = self.parent.children.index(self) - 1 - try : - self.parent.children[index].select() - except: - #self.parent.select() - if self.parent is self.tree: - pass - else : - self.parent.select_previous() - - def popup(self,event=None): - """ - Declenche le traitement associé au clic droit de la souris - sur l'icone du Node - """ - if not self.rmenu:return - apply(self.rmenu,(self,event)) - - #----------------------------------------------- - # Méthodes de recherche d'informations - #----------------------------------------------- - def geticonimage(self,name=None): - """ - Retourne l'image qui doit être associée à self - """ - if not name : - name = self.item.GetIconName() - if not name or name == 'aucune' : - return None - return images.get_image(name) - - def get_nb_children(self): - """ Retourne le nombre d'enfants affichés de self """ - nb = 0 - if self.state =='collapsed' : return nb - for child in self.children : - nb = nb + 1 + child.get_nb_children() - return nb - - def get_liste_id(self): - """ Retourne la liste de tous les id (filiation comprise) de self """ - liste = self.id - for child in self.children: - liste.extend(child.get_liste_id()) - return liste - - def get_node_fils(self,name) : - """ Retourne le fils de self de nom name s'il existe""" - for child in self.children: - if child.item.get_nom() == name: return child - return None - - #----------------------------------------------- - # Méthodes d'affichage d'un noeud - #----------------------------------------------- - def draw(self,x,y): - """ Permet de tracer le noeud self """ - # le début du noeud est en x,y - self.x = x - self.y = y - self.lasty = y - self.id=[] - # choix de l'icone à afficher : + ou - - if self.item.IsExpandable(): - if self.state == 'expanded': - iconname = "minusnode" - callback = self.collapse - else: - iconname = "plusnode" - callback = self.expand - image = self.geticonimage(name=iconname) - self.icone_id = self.canvas.create_image(self.x, self.y, image=image) - self.callback_id=self.canvas.tag_bind(self.icone_id, "<1>", callback) - self.id.append(self.icone_id) - # création de la ligne horizontale - self.ligne_id = self.canvas.create_line(self.x,self.y,self.x+10,self.y) - self.id.append(self.ligne_id) - self.canvas.tag_lower(self.ligne_id) - # affichage de l'icone (carre ,rond, ovale ...) de couleur - image = self.geticonimage() - if image != None : - self.image_id = self.canvas.create_image(self.x+15,self.y,image = image) - self.select_id2=self.canvas.tag_bind(self.image_id,"<1>",self.select) - self.popup_id2=self.canvas.tag_bind(self.image_id,"<3>",self.popup) - self.id.append(self.image_id) - else: - self.image_id = None - # affichage du texte : nom de l'objet (ETAPE ou MOT-CLE) et sa valeur - self.drawtext() - self.displayed = 1 - if self.state == 'expanded' : - if not self.children : self.build_children() - if len(self.children) > 0: - self.drawchildren() - self.lasty = self.children[-1].lasty - - def drawchildren(self): - """ Dessine les enfants de self """ - y = self.y + self.tree.DDY - x = self.x + 15 - for child in self.children: - child.draw(x,y) - nb = child.get_nb_children() - y = y + self.tree.DDY*(nb+1) - self.trace_ligne() - - def drawtext(self): - """ Affiche les deux zones de texte après l'icône de couleur de l'objet """ - if self.image_id != None : - textx = self.x + 30 - else: - textx = self.x + 15 - texty = self.y - # nom,fonte et couleur de l'objet du noeud à afficher - labeltext,fonte,couleur = self.item.GetLabelText() - if labeltext == '' : labeltext = ' ' - if fonte == None : fonte = Fonte_Standard - if couleur == None : couleur = 'black' - # création du widget label - self.label = Label(self.canvas, - text = labeltext, - fg = couleur, - bg = 'gray95', - font=fonte) - self.label_id = self.canvas.create_window(textx,texty,window=self.label,anchor='w') - self.id.append(self.label_id) - # bindings sur le widget label - self.select_id=self.label.bind("<1>", self.select) - self.popup_id=self.label.bind("<3>", self.popup) - self.enter_id=self.label.bind("",self.enter) - self.leave_id=self.label.bind("",self.leave) - # valeur de cet objet à afficher - x0, y0, x1, y1 = self.canvas.bbox(self.label_id) - textx = max(x1, 200) + 10 - text = self.item.GetText() or " " - self.text = Label(self.canvas, text=text, - bd=0, padx=2, pady=2,background='gray95', - font=fonte) - if self.selected: - self.highlight() - else: - self.dehighlight() - self.text_id = self.canvas.create_window(textx, texty,anchor="w", window=self.text) - self.id.append(self.text_id) - - def highlight(self,event=None): - """ Met en surbrillance self""" - if hasattr(self,'label'): - self.label.configure(fg='white',bg='#00008b') - if (hasattr(self.item,'get_nom') and hasattr( self.appli, 'salome')) : - if self.item.get_nom() == "AFFE_CARA_ELEM": - self.item.rmenu_specs=[("View3D", "visu_3D")] - self.tree.rmenu - - - def dehighlight(self,event=None): - """ Rétablit l'affichage normal de self""" - if hasattr(self,'label'): - self.label.configure(fg='black',bg='gray95') - - def enter(self,event=None): - """ Met en surbrillance self et affiche le fr de l'objet """ - self.highlight() - fr = self.item.get_fr() - self.appli.affiche_infos(fr) - - def leave(self,event=None): - """ Rétablit l'affichage normal de self et efface le fr de l'objet """ - if not self.selected : - self.dehighlight() - self.appli.affiche_infos('') - - def collapse_children(self): - """ Collapse récursivement tous les descendants de self """ - if not self.children : return - for child in self.children: - child.state='collapsed' - child.collapse_children() - - def deplieReplieNode(self): - if self.state == 'expanded': - self.collapse() - else : - self.expand_node() - - def collapse(self,event = None): - """ Collapse self et descendants et retrace self """ - nb = self.get_nb_children() - self.state = 'collapsed' - self.collapse_children() - self.redraw(-nb) - self.select() - - def expand_node(self,event = None): - """ Expanse self et le retrace """ - if self.state == 'expanded':return - #if not self.item.isactif() : return - if not self.children : self.build_children() - self.state = 'expanded' - nb = self.get_nb_children() - self.redraw(nb) - - def expand(self,event = None): - """ Expanse self et le retrace """ - self.expand_node() - self.select() - - def redraw(self,nb): - """ Redessine self : nb est le décalage à introduire - en dessous de self pour le redessiner """ - # nb = nombre d'items de décalage - self.move(self.tree.DDY*nb) - # on efface self et on le redessine - self.efface() - self.draw(self.x,self.y) - # Il n'est pas nécessaire d'appeler update - # il suffit d'updater les coordonnees et de retracer les lignes - self.racine.update_coords() - self.racine.trace_ligne() - self.update_valid() - self.tree.resizescrollregion() - - def update_coords(self): - """ Permet d'updater les coordonnes de self et de tous ses enfants""" - if self.displayed == 0 : return - if self.image_id != None : - coords = self.canvas.coords(self.image_id) - self.x = coords[0]-15 - else: - coords = self.canvas.coords(self.label_id) - self.x = coords[0]-15 - self.y = coords[1] - self.lasty = self.y - if self.state == 'expanded' : - for child in self.children: - if child.displayed != 0: - child.update_coords() - self.lasty = child.lasty - - def update_icone(self): - """ Met à jour les icônes de tous les noeuds : teste la validité de l'objet - Cette méthode est très lente, trop !!""" - if self.image_id != None : - image = self.geticonimage() - self.canvas.itemconfig(self.image_id,image=image) - if self.state == 'expanded': - for child in self.children: - if child.displayed != 0: - child.update_icone() - - def update_label_texte(self): - """ Met a jour le label du noeud et celui de tous ses fils ouverts """ - self.update_node_label() - if self.state == 'expanded' : - for child in self.children: - if child.displayed != 0 : child.update_label_texte() - - def update_texte(self): - """ Met à jour les noms des SD et valeurs des mots-clés """ - self.update_node_texte() - if self.state == 'expanded' : - for child in self.children: - if child.displayed != 0 : child.update_texte() - - def update_node_label(self): - """ Met a jour le label du noeud """ - if self.displayed == 0 : return - # nom,fonte et couleur de l'objet du noeud à afficher - labeltext,fonte,couleur = self.item.GetLabelText() - if labeltext == '' : labeltext = ' ' - if fonte == None : fonte = Fonte_Standard - if couleur == None : couleur = 'black' - self.label.configure(text=labeltext,font=fonte) - - def update_node_texte(self): - """ Met à jour les noms des SD et valeurs des mots-clés """ - if self.displayed == 0 : return - text = self.item.GetText() - if text == None : text = '' - self.text.configure(text=text) - - def update_node_valid(self) : - """Cette methode remet a jour la validite du noeud (icone) - Elle appelle isvalid - """ - if self.displayed == 0 : return - if self.image_id != None : - image = self.geticonimage() - self.canvas.itemconfig(self.image_id,image=image) - - def update_valid(self) : - """Cette methode a pour but de mettre a jour la validite du noeud - et de propager la demande de mise à jour à son parent - """ - self.update_node_valid() - self.parent.update_valid() - - def update(self,event=None) : - """ Classe Node : - Cette méthode est appelée pour demander l update d un noeud - d'un jeu de commandes - Cette demande est transmise au noeud racine (le JDC) qui update - tout l arbre représentant le jeu de commandes - Pendant cette mise à jour, on appelle la méthode isvalid qui - fera l update de tous les objets déclarés modifiés lors des - actions précédentes - La métode isvalid est en général appelée par l intermédiaire de - update_icone -> geticonimage -> GetIconName - """ - #print "update",self - #traceback.print_stack() - self.racine.update_coords() - self.racine.trace_ligne() - self.racine.update_icone() - self.racine.update_texte() - self.racine.update_label_texte() - self.tree.resizescrollregion() - - def efface_node(self): - if self.displayed != 0: - self.label.unbind("<1>", self.select_id) - self.label.unbind("<3>", self.popup_id) - self.label.unbind("",self.enter_id) - self.label.unbind("",self.leave_id) - self.canvas.tag_unbind(self.image_id,"<1>",self.select_id2) - self.canvas.tag_unbind(self.image_id,"<3>",self.popup_id2) - if self.item.IsExpandable(): - self.canvas.tag_unbind(self.icone_id, "<1>", self.callback_id) - self.label.destroy() - self.text.destroy() - - for id in self.id : - self.canvas.delete(id) - self.id=[] - self.label_id=None - self.text_id=None - self.image_id=None - self.icone_id=None - self.label=None - self.text=None - self.displayed=0 - - def efface(self): - """ Efface du canvas les id associés à self : cad les siens et ceux - de ses enfants """ - self.efface_node() - if not self.children : return - for child in self.children: - child.efface() - - def move(self,dy): - """ Déplace de l'incrément dy tous les id en dessous de self """ - # il faut marquer tous les suivants de self - bbox1 = self.canvas.bbox(ALL) - self.canvas.dtag(ALL,'move') - self.canvas.delete('line') - try: - self.canvas.addtag_overlapping('move',bbox1[0],self.y +10,bbox1[2],bbox1[3]) - except: - print "Erreur dans move :" - print self - print self.item - print self.item.getObject() - print self.item.getObject().definition.label - print 'y=',self.y - print 'dy=',dy - # on déplace tous les items de dy - self.canvas.move('move',0,dy) - - def trace_ligne(self): - """ Dessine les lignes verticales entre frères et entre père et premier fils""" - if self.state=='collapsed' : return - if len(self.children)==0 : return - # on est bien dans le cas d'un noeud expansé avec enfants ... - # il faut rechercher l'ordonnée du dernier fils de self - y_end = self.children[-1].y - ligne = self.canvas.create_line(self.x+15,self.y,self.x+15,y_end,tags='line') - self.canvas.tag_lower(ligne) - for child in self.children : - try: - child.trace_ligne() - except: - print "Erreur dans trace_ligne :" - print child - print child.item.getObject() - - def last_child(self): - lchild=self - if self.state == 'expanded' and self.children: - lchild= self.children[-1].last_child() - return lchild - - #------------------------------------------------------------------ - # Méthodes de création et destruction de noeuds - # Certaines de ces méthodes peuvent être appelées depuis l'externe - #------------------------------------------------------------------ - def append_brother(self,name,pos='after',retour='non'): - """ - Permet d'ajouter un objet frère à l'objet associé au noeud self - par défaut on l'ajoute immédiatement après - Méthode externe - """ - # on veut ajouter le frère de nom name directement avant ou après self - index = self.parent.children.index(self) - if pos == 'before': - index = index - elif pos == 'after': - index = index +1 - else: - print str(pos)," n'est pas un index valide pour append_brother" - return 0 - return self.parent.append_child(name,pos=index) - - def append_child(self,name,pos=None,verif='oui',retour='non'): - """ - Methode pour ajouter un objet fils à l'objet associé au noeud self. - On peut l'ajouter en début de liste (pos='first'), en fin (pos='last') - ou en position intermédiaire. - Si pos vaut None, on le place à la position du catalogue. - """ - #print "append_child",self,self.children - if pos == 'first': - index = 0 - elif pos == 'last': - index = len(self.children) - elif type(pos) == types.IntType : - # position fixee - index = pos - elif type(pos) == types.InstanceType: - # pos est un item. Il faut inserer name apres pos - index = self.item.get_index(pos) +1 - elif type(name) == types.InstanceType: - index = self.item.get_index_child(name.nom) - else: - index = self.item.get_index_child(name) - obj=self.item.additem(name,index) - #print obj - if obj is None:obj=0 - if obj == 0:return 0 - #print "append_child",index,self.children - child=self.children[index] - child.select() - return child - - def delete(self): - """ - Méthode externe pour la destruction de l'objet associé au noeud - La mise à jour des noeuds est faite par onSupp sur notification - """ - index = self.parent.children.index(self) - 1 - if index < 0 : index =0 - - parent=self.parent - ret=parent.item.suppitem(self.item) - if ret == 0:return - - brothers=parent.children - if brothers: - toselect=brothers[index] - else: - toselect=parent - toselect.select() - diff --git a/Editeur/uniqueassdpanel.py b/Editeur/uniqueassdpanel.py deleted file mode 100644 index bc777b76..00000000 --- a/Editeur/uniqueassdpanel.py +++ /dev/null @@ -1,219 +0,0 @@ -# -*- coding: utf-8 -*- -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -import prefs -import panels -import images -from widgets import ListeChoix -from widgets import FenetreDeSelection - -from Noyau.N_CR import justify_text -from utils import substract_list - -# Import des panels -from uniquepanel import UNIQUE_Panel - - -class UNIQUE_ASSD_Panel(UNIQUE_Panel): - """ - Classe servant à définir le panneau associé aux objets qui attendent une valeur unique - d'un type dérivé d'ASSD - """ - def valid_valeur_automatique(self): - """ - Réalise la validation d'un concept sans remonter dans le - node parent dans le cas ou il n'y a qu'un concept possible (liste de longueur 1) - Identique à valid_valeur moins appel de self.node.parent.select() - On pourrait supposer que le seul concept présent est valide et donc ne pas - réaliser tous les tests de vérification. - """ - if self.parent.modified == 'n' : self.parent.init_modif() - valeur = self.get_valeur() - self.erase_valeur() - anc_val = self.node.item.get_valeur() - valeur,validite=self.node.item.eval_valeur_item(valeur) - test = self.node.item.set_valeur(valeur) - if not test : - mess = "impossible d'évaluer : %s " %`valeur` - self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess) - elif self.node.item.isvalid() : - self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée') - #if self.node.item.get_position()=='global': - #self.node.etape.verif_all() - #elif self.node.item.get_position()=='global_jdc': - #self.node.racine.verif_all() - #else : - #self.node.parent.verif() - #self.node.update() - else : - cr = self.node.item.get_cr() - mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal() - self.reset_old_valeur(anc_val,mess=mess) - - def makeValeurPage(self,page,reel="non"): - """ - Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une - SD de type dérivé d'ASSD - """ - # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur, - # et de la liste des SD du bon type (constituant la liste des choix) - bulle_aide=self.get_bulle_aide() - aide=self.get_aide() - aide= justify_text(texte=aide) - liste_noms_sd = self.node.item.get_sd_avant_du_bon_type() - - # Remplissage du panneau - self.valeur_choisie = StringVar() - self.valeur_choisie.set('') - min,max = self.node.item.GetMinMax() - if (min == 1 and min == max and len(liste_noms_sd)==1 ): - if self.valeur_choisie.get() != liste_noms_sd[0]: - if ('R' not in self.node.item.get_type()) : - self.valeur_choisie.set(liste_noms_sd[0]) - self.valid_valeur_automatique() - - self.frame_valeur = Frame(page) - self.frame_valeur.pack(fill='both',expand=1) - self.frame_valeur.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - self.frame_valeur.bind("",self.parent.appli.efface_aide) - self.listbox = Pmw.ScrolledListBox(self.frame_valeur, - items=liste_noms_sd, - labelpos='n', - label_text="Structures de données du type\n requis par l'objet courant :", - listbox_height = 6, - selectioncommand=self.select_valeur_from_list, - dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c)) - self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center') - Label(self.frame_valeur,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6) - Label(self.frame_valeur,textvariable=self.valeur_choisie).place(relx=0.5,rely=0.6) - self.but_val = Button(self.frame_valeur,text = "Valider",command= self.Choisir) - self.but_val.place(relx=0.3,rely=0.8,relwidth=0.35) - - # affichage de la valeur courante - self.display_valeur() - if self.__class__.__name__ == 'UNIQUE_ASSD_Panel_Reel' : - Label(self.frame_valeur,text='Valeur Réelle').place(relx=0.1,rely=0.9) - self.entry = Entry(self.frame_valeur,relief='sunken') - self.entry.place(relx=0.28,rely=0.9,relwidth=0.6) - self.entry.bind("",lambda e,c=self.valid_valeur_reel:c()) - self.entry.bind("",lambda e,c=self.valid_valeur_reel:c()) - - - - def get_bulle_aide(self): - """ - Retourne l'aide associée au panneau - """ - return "Double-cliquez sur la structure de donnée désirée pour valoriser le mot-clé simple courant" - - def get_aide(self): - """ - Retourne la phrase d'aide indiquant de quel type doit être la valeur à donner par l'utilisateur - """ - mc = self.node.item.get_definition() - try : - type = mc.type[0].__name__ - except : - type = str(mc.type[0]) - if len(mc.type)>1 : - for typ in mc.type[1:] : - try : - l=typ.__name__ - except: - l=str(typ) - type = type + ' ou '+l - commentaire="Un objet de type "+type+" est attendu" - aideval=self.node.item.aide() - commentaire=commentaire +"\n"+ aideval - return commentaire - - - def select_valeur_from_list(self): - """ - Affecte à valeur choisie la sélection courante dans la liste des choix proposée - """ - if len(self.listbox.get()) == 0 : return - if len(self.listbox.getcurselection()) == 0 : return - choix = self.listbox.getcurselection()[0] - self.valeur_choisie.set(choix) - self.listbox.component("listbox").focus_set() - - def choose_valeur_from_list(self,command): - """ - Affecte à valeur choisie la sélection courante dans la liste des choix proposée - Exécute command - """ - if len(self.listbox.get()) == 0 : return - if len(self.listbox.getcurselection()) == 0 : return - choix = self.listbox.getcurselection()[0] - self.valeur_choisie.set(choix) - apply(command,(),{}) - - def Choisir(self) : - #Appeler par le bouton Valider - self.choose_valeur_from_list(self.valid_valeur) - - def get_valeur(self): - """ - Retourne la valeur donnée par l'utilisateur au MCS - """ - return self.valeur_choisie.get() - - def display_valeur(self): - """ - Affiche la valeur de l'objet pointé par self - """ - valeur = self.node.item.get_valeur() - if valeur == None or valeur == '' : return # pas de valeur à afficher ... - self.valeur_choisie.set(getattr(valeur,"nom","unknown")) - - def erase_valeur(self): - pass - - def appel_make(self,page): - self.makeValeurPage(page,reel="oui") - -class UNIQUE_ASSD_Panel_Reel(UNIQUE_ASSD_Panel): - - def valid_valeur_reel(self): - if self.parent.modified == 'n' : self.parent.init_modif() - anc_val = self.node.item.get_valeur() - valeurentree = self.entry.get() - self.valeur_choisie.set(valeurentree) - self.valid_valeur() - - def display_valeur(self): - valeur = self.node.item.get_valeur() - if valeur == None or valeur == '' : return # pas de valeur à afficher ... - if type(valeur) == types.FloatType : - self.valeur_choisie.set(valeur) - else : - self.valeur_choisie.set(valeur.nom) - - - diff --git a/Editeur/uniquebasepanel.py b/Editeur/uniquebasepanel.py deleted file mode 100644 index 5517defa..00000000 --- a/Editeur/uniquebasepanel.py +++ /dev/null @@ -1,153 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -from Tkinter import Widget -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -import prefs -import panels -import images -from widgets import FenetreDeParametre -from widgets import showerror - -from Noyau.N_CR import justify_text -from utils import substract_list - -# Import des panels -from uniquepanel import UNIQUE_Panel - - -class UNIQUE_BASE_Panel(UNIQUE_Panel): - """ - Classe servant à définir le panneau associé aux mots-clés simples qui attendent - une valeur d'un type de base (entier, réel ou string). - """ - def makeValeurPage(self,page): - """ - Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type - de base cad entier, réel, string ou complexe - """ - # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur, - # et de la liste des SD du bon type (constituant la liste des choix) - bulle_aide=self.get_bulle_aide() - aide=self.get_aide() - aide= justify_text(texte=aide) - liste_noms_sd = self.node.item.get_sd_avant_du_bon_type() - # Remplissage du panneau - self.frame_valeur = Frame(page) - self.frame_valeur.pack(fill='both',expand=1) - self.frame_valeur.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - self.frame_valeur.bind("",self.parent.appli.efface_aide) - self.label = Label(self.frame_valeur,text='Valeur :') - #self.label.place(relx=0.1,rely=0.2) - self.label.grid(row=0,padx=5,pady=5) - self.entry = Entry(self.frame_valeur,relief='sunken') - #self.entry.place(relx=0.28,rely=0.2,relwidth=0.6) - self.entry.grid(row=0,column=1,padx=5,pady=5) - self.entry.bind("",lambda e,c=self.valid_valeur:c()) - self.entry.bind("",lambda e,c=self.valid_valeur:c()) - # aide associée au panneau - self.frame_valeur.update() - self.aide = Label(self.frame_valeur, - text = aide, - wraplength=int(self.frame_valeur.winfo_width()*0.8), - justify='center') - #self.aide.place(relx=0.5,rely=0.9,anchor='n') - self.aide.grid(row=4,columnspan=2,padx=5,pady=5) - # bouton parametre - bouton_parametres = Button(self.frame_valeur, text="Parametres", command=self.affiche_parametre) - #bouton_parametres.place(relx=0.28,rely=0.5,relwidth=0.4) - bouton_parametres.grid(row=2,columnspan=2,padx=5,pady=5) - bouton_val = Button(self.frame_valeur, text="Valider", command=self.valide) - #bouton_val.place(relx=0.28,rely=0.6,relwidth=0.4) - bouton_val.grid(row=3,columnspan=2,padx=5,pady=5) - # affichage de la valeur du MCS - self.display_valeur() - - def valide(self): - self.valid_valeur() - - def affiche_parametre(self) : - if self.node.item.get_liste_param_possible() != [ ]: - txtparam="" - for param in self.node.item.get_liste_param_possible(): - txtparam=txtparam+repr(param)+"\n" - if txtparam=="": - showerror("Aucun parametre ","Pas de parametre de ce type") - else : - try : - self.fenetreparam.destroy() - except : - pass - self.fenetreparam=FenetreDeParametre( self, self.node.item, self.parent.appli, txtparam) - - def destroy(self): - try : - self.fenetreparam.destroy() - except : - pass - Widget.destroy(self) - - def get_aide(self): - """ - Retourne la phrase d'aide indiquant de quel type doit être la valeur - du mot-clé simple fournie par l'utilisateur - """ - mc = self.node.item.get_definition() - d_aides = { 'TXM' : "Une chaîne de caractères est attendue", - 'R' : "Un réel est attendu", - 'I' : "Un entier est attendu"} - type = mc.type[0] - commentaire=d_aides.get(type,"Type de base inconnu") - aideval=self.node.item.aide() - commentaire=commentaire +"\n"+ aideval - return commentaire - - def get_bulle_aide(self): - """ - Retourne la bulle d'aide associée au panneau et affichée par clic droit - """ - return """Saisissez la valeur que vous voulez affecter au mot-clé simple - dans la zone de saisie et pressez """ - - def display_valeur(self): - """ - Affiche la valeur de l'objet pointé par self - """ - valeur = self.node.item.get_valeur() - if valeur == None or valeur == '' : # pas de valeur à afficher ... - self.entry.delete(0,END) - self.entry.focus() - return - - valeur_texte=self.get_valeur_texte(valeur) - if valeur_texte != "": - valeur=valeur_texte - self.entry.delete(0,END) - self.entry.insert(0,valeur) - self.entry.focus() - diff --git a/Editeur/uniquecomppanel.py b/Editeur/uniquecomppanel.py deleted file mode 100644 index 3aa09074..00000000 --- a/Editeur/uniquecomppanel.py +++ /dev/null @@ -1,171 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -import prefs -import panels -import images -from widgets import ListeChoix -from widgets import FenetreDeSelection - -from Noyau.N_CR import justify_text -from utils import substract_list - -# Import des panels -from uniquepanel import UNIQUE_Panel - - -class UNIQUE_COMP_Panel(UNIQUE_Panel): - """ - Classe servant à définir le panneau associé aux mots-clés simples - qui attendent une valeur de type complexe - """ - def makeValeurPage(self,page): - """ - Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type - de base cad entier, réel, string ou complexe - """ - # Récupération de l'aide associée au panneau et de l'aide destinée à l'utilisateur - bulle_aide=self.get_bulle_aide() - aide=self.get_aide() - aide= justify_text(texte=aide) - # Remplissage du panneau - self.frame_valeur = Frame(page) - self.frame_valeur.pack(fill='both',expand=1) - self.frame_valeur.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - self.frame_valeur.bind("",self.parent.appli.efface_aide) - self.label = Label(self.frame_valeur,text='Complexe de la forme : a+bj') - self.label1 = Label(self.frame_valeur,text='Imaginaire') - self.label2 = Label(self.frame_valeur,text='Phase') - self.label3 = Label(self.frame_valeur,text='OU') - self.label.place (relx=0.15,rely=0.1) - self.label1.place(relx=0.6,rely=0.50) - self.label2.place(relx=0.6,rely=0.57) - self.label3.place(relx=0.15,rely=0.4) - self.typ_cplx=StringVar() - self.typ_cplx.set('RI') - rb1 = Radiobutton(self.frame_valeur, text='RI : Réel',variable=self.typ_cplx,value='RI') - rb2 = Radiobutton(self.frame_valeur, text='MP : Module',variable=self.typ_cplx,value='MP') - rb1.place(relx=0.15,rely = 0.50) - rb2.place(relx=0.15,rely = 0.57) - self.entry1 = Pmw.EntryField(self.frame_valeur,validate='real') - self.entry2 = Pmw.EntryField(self.frame_valeur,validate='real') - self.entry3 = Pmw.EntryField(self.frame_valeur) - self.entry1.component('entry').bind("",lambda e,s=self:s.entry2.component('entry').focus()) - self.entry1.component('entry').bind("",lambda e,s=self:s.entry2.component('entry').focus()) - self.entry2.component('entry').bind("",lambda e,c=self.valid_valeur:c()) - self.entry2.component('entry').bind("",lambda e,c=self.valid_valeur:c()) - self.entry3.component('entry').bind("",lambda e,c=self.valid_complexe:c()) - self.entry3.component('entry').bind("",lambda e,c=self.valid_complexe:c()) - self.entry1.place(relx=0.15,rely = 0.65,relwidth=0.35) - self.entry2.place(relx=0.60,rely = 0.65,relwidth=0.35) - self.entry3.place(relx=0.15,rely = 0.20,relwidth=0.60) - self.entry1.focus() - self.bouton_val=Button(self.frame_valeur,text="Valider",command=self.valider,width=14) - self.bouton_val.place(relx=0.4,rely=0.8) - self.frame_valeur.update() - self.aide = Label(self.frame_valeur, - text = aide, - wraplength=int(self.frame_valeur.winfo_width()*0.8), - justify='center') - self.aide.place(relx=0.5,rely=0.9,anchor='n') - # affichage de la valeur du MCS - self.display_valeur() - - def valider(self): - if ((self.entry3.get() != None) and (self.entry3.get() != "" )): - self.erase_valeur() - self.valid_complexe() - else : - self.valid_valeur() - - - def display_valeur(self): - """ - Affiche la valeur de l'objet pointé par self - """ - valeur = self.node.item.get_valeur() - if valeur == None or valeur == '' : return # pas de valeur à afficher ... - self.entry1.delete(0,END) - self.entry2.delete(0,END) - self.entry3.delete(0,END) - if type(valeur) not in (types.ListType,types.TupleType) : - self.display_complexe() - else: - typ_cplx,x1,x2=valeur - self.typ_cplx.set(typ_cplx) - self.entry1.setentry(x1) - self.entry2.setentry(x2) - - def display_complexe(self): - valeur = self.node.item.get_valeur() - self.entry3.setentry(valeur) - - def get_bulle_aide(self): - """ - Retourne la bulle d'aide du panneau - """ - return """-Choisissez votre format de saisie du complexe : - \t 'RI' = parties réelle et imaginaire - \t 'MP' = module/phase (en degrés) - - Saisissez ensuite dans les deux zones de saisie les deux nombres attendus""" - - def get_aide(self): - """ - Retourne la phrase d'aide décrivant le type de la valeur que peut prendre - le mot-clé simple courant - """ - commentaire='Un complexe est attendu' - aideval=self.node.item.aide() - commentaire=commentaire +"\n"+ aideval - return commentaire - - def get_valeur(self): - """ - Retourne le complexe saisi par l'utilisateur - """ - l=[] - l.append(self.typ_cplx.get()) - try : - l.append(string.atof(self.entry1.get())) - l.append(string.atof(self.entry2.get())) - except : - return None - return `tuple(l)` - - def erase_valeur(self): - """ - Efface les entries de saisie - """ - self.typ_cplx.set('RI') - self.entry1.delete(0,END) - self.entry2.delete(0,END) - - def valid_complexe(self): - valeurentree=self.entry3.get() - self.valid_valeur(valeurentree=valeurentree) diff --git a/Editeur/uniqueintopanel.py b/Editeur/uniqueintopanel.py deleted file mode 100644 index 6532e3fa..00000000 --- a/Editeur/uniqueintopanel.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -import prefs -import panels -import images -from widgets import ListeChoix -from widgets import FenetreDeSelection - -from Noyau.N_CR import justify_text -from utils import substract_list - -# Import des panels -from uniquepanel import UNIQUE_Panel - -class UNIQUE_INTO_Panel(UNIQUE_Panel): - """ - Classe définissant le panel associé aux mots-clés qui demandent - à l'utilisateur de choisir une seule valeur parmi une liste de valeurs - discrètes - """ - def makeValeurPage(self,page): - """ - Génère la page de saisie d'une seule valeur parmi un ensemble - discret de possibles - """ - # récupération de la bulle d'aide et de l'objet mc - bulle_aide=self.get_bulle_aide() - objet_mc = self.node.item.get_definition() - # remplissage du panel - self.frame_valeur = Frame(page) - self.frame_valeur.pack(fill='both',expand=1) - self.frame_valeur.bind("",lambda e,s=self,a=bulle_aide : - s.parent.appli.affiche_aide(e,a)) - self.frame_valeur.bind("",self.parent.appli.efface_aide) - #l_choix=list(objet_mc.into) - #l_choix.sort() - l_choix=self.node.item.get_liste_possible([]) - self.label = Label(self.frame_valeur,text='Choisir une valeur :') - self.label.pack(side='top') - self.frame = Frame(page) - self.frame.place(relx=0.33,rely=0.2,relwidth=0.33,relheight=0.6) - - - liste_commandes = (("",self.selectChoix), - ("",self.deselectChoix), - ("",self.record_valeur)) - self.Liste_choix = ListeChoix(self,self.frame,l_choix, - liste_commandes = liste_commandes, - titre="Valeurs possibles",optionReturn="oui") - self.Liste_choix.affiche_liste() - self.bouton_val = Button(self.frame_valeur, - text = "Valider", - command=self.record_valeur_ligne, - width=14) - self.bouton_val.place(relx=0.33,rely=0.85) - - def record_valeur_ligne(self): - valeur=self.Liste_choix.arg_selected - self.record_valeur(valeur) - - def get_bulle_aide(self): - """ - Retourne la bulle d'aide affectée au panneau courant (affichée par clic droit) - """ - return """Double-cliquez sur la valeur désirée - pour valoriser le mot-clé simple courant""" - diff --git a/Editeur/uniquepanel.py b/Editeur/uniquepanel.py deleted file mode 100644 index a622b8a6..00000000 --- a/Editeur/uniquepanel.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -import prefs -import panels -import images -from widgets import ListeChoix -from widgets import FenetreDeSelection - -from Noyau.N_CR import justify_text -from utils import substract_list - -# Import des panels -from newsimppanel import newSIMPPanel - - -class UNIQUE_Panel(newSIMPPanel): - """ - Classe virtuelle servant de classe mère à toutes celles définissant un panneau - permettant l'affichage et la saisie d'une valeur unique pour le mot-clé simple - """ - - def erase_valeur(self): - """ - Efface l'entry de saisie - """ - self.entry.delete(0,END) - - def get_valeur(self): - """ - Retourne la valeur donnée par l'utilisateur - """ - return self.entry.get() - - - def valid_valeur(self,valeurentree=None): - """ - Teste si la valeur fournie par l'utilisateur est une valeur permise : - - si oui, l'enregistre - - si non, restaure l'ancienne valeur - """ - if self.parent.modified == 'n' : self.parent.init_modif() - anc_val = self.node.item.get_valeur() - if valeurentree== None : - valeurentree = self.get_valeur() - valeur,validite=self.node.item.eval_valeur(valeurentree) - if not validite : - commentaire = "impossible d'évaluer : %s " %`valeurentree` - self.display_valeur() - self.parent.appli.affiche_infos(commentaire) - return - - test = self.node.item.set_valeur(valeur) - if test : - self.set_valeur_texte(str(valeurentree)) - - if not test : - mess = "impossible d'évaluer : %s " %`valeur` - self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée : "+mess) - elif self.node.item.isvalid() : - self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée') - else : - cr = self.node.item.get_cr() - mess = "Valeur du mot-clé non autorisée "+cr.get_mess_fatal() - self.reset_old_valeur(anc_val,mess=mess) - - self.display_valeur() diff --git a/Editeur/uniquesdcopanel.py b/Editeur/uniquesdcopanel.py deleted file mode 100644 index 6c3f1fc4..00000000 --- a/Editeur/uniquesdcopanel.py +++ /dev/null @@ -1,246 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# Modules Python -import string,types,os -from Tkinter import * -import Pmw -from copy import copy,deepcopy -import traceback - -# Modules Eficas -import Objecttreeitem -import prefs -import panels -import images -from widgets import ListeChoix -from widgets import FenetreDeSelection - -from Noyau.N_CR import justify_text -from utils import substract_list - -# Import des panels -from uniqueassdpanel import UNIQUE_ASSD_Panel - - -class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel): - """ - Classe servant à définir le panneau correspondant à un mot-clé simple - qui attend une valeur unique de type dérivé d'ASSD ou non encore - existante (type CO(...) utilisé dans les macros uniquement) - """ - def makeValeurPage(self,page): - """ - Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une SD de type dérivé - d'ASSD - """ - # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur, - # et de la liste des SD du bon type (constituant la liste des choix) - bulle_aide=self.get_bulle_aide() - aide=self.get_aide() - aide= justify_text(texte=aide) - liste_noms_sd = self.node.item.get_sd_avant_du_bon_type() - # Remplissage du panneau - self.frame_valeur = Frame(page) - self.frame_valeur.pack(fill='both',expand=1) - self.frame_valeur.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) - self.frame_valeur.bind("",self.parent.appli.efface_aide) - # affichage de la liste des SD existantes et du bon type - self.listbox = Pmw.ScrolledListBox(self.frame_valeur, - items=liste_noms_sd, - labelpos='n', - label_text="Structures de données du type\n requis par l'objet courant :", - listbox_height = 6, - selectioncommand=self.select_valeur_from_list, - dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c)) - self.listbox.component("listbox").bind("",lambda e,s=self,c=self.valid_valeur : s.choose_valeur_from_list(c)) - if liste_noms_sd != [] : - self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center') - self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ", items = ('NON','OUI'), - menubutton_width=10) - else : - self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ", items = ('OUI',), - menubutton_width=10) - # affichage du bouton 'Nouveau concept' - self.b_co.configure(command = self.ask_new_concept) - if liste_noms_sd != [] : - self.b_co.place(relx=0.05,rely=0.6,anchor='w') - else : - self.b_co.place(relx=0.05,rely=0.3,anchor='w') - self.label_co = Label(self.frame_valeur,text='Nom du nouveau concept :') - self.entry_co = Entry(self.frame_valeur) - self.entry_co.bind('',self.valid_nom_concept_co) - self.entry_co.bind('',self.valid_nom_concept_co) - # affichage du label de la structure de donnée choisie - self.l_resu = Label(self.frame_valeur,text='Structure de donnée choisie :') - self.valeur_choisie = StringVar() - self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie) - self.frame_valeur.update() - self.aide = Label(self.frame_valeur, - text = aide, - wraplength=int(self.frame_valeur.winfo_width()*0.8), - justify='center') - self.aide.place(relx=0.5,rely=0.85,anchor='n') - - self.but_val = Button(self.fr_but,text = "Valider",command= self.valid_nom_concept_co) - self.but_val.pack(side='right',padx=5, pady=5) - - # affichage de la valeur courante - self.display_valeur() - if liste_noms_sd == [] : - self.b_co.invoke('OUI') - - def get_bulle_aide(self): - """ - Retourne la bulle d'aide du panneau - """ - return """Double-cliquez sur la structure de donnée désirée - pour valoriser le mot-clé simple courant ou cliquez sur NOUVEAU CONCEPT pour - entrer le nom d'un concept non encore existant""" - - def valid_valeur(self): - """ - Teste si la valeur fournie par l'utilisateur est une valeur permise : - - si oui, l'enregistre - - si non, restaure l'ancienne valeur - """ - if self.parent.modified == 'n' : self.parent.init_modif() - valeur = self.get_valeur() - #print "valid_valeur",valeur - - self.erase_valeur() - anc_val = self.node.item.get_valeur() - test_CO=self.node.item.is_CO(anc_val) - #PN essai pour bug dans MACRO_PROJ_BASE - valeur,validite=self.node.item.eval_valeur(valeur) - test = self.node.item.set_valeur(valeur) - if not test : - mess = "impossible d'évaluer : %s " %`valeur` - self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess) - return - #PN essai pour bug dans MACRO_PROJ_BASE - #elif self.node.item.isvalid() : - elif validite: - self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée') - if test_CO: - # il faut egalement propager la destruction de l'ancien concept - self.node.item.delete_valeur_co(valeur=anc_val) - # et on force le recalcul des concepts de sortie de l'etape - self.node.item.object.etape.get_type_produit(force=1) - # et le recalcul du contexte - self.node.item.object.etape.parent.reset_context() - self.node.parent.select() - else : - cr = self.node.item.get_cr() - mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal() - self.reset_old_valeur(anc_val,mess=mess) - return - - def valid_nom_concept_co(self,event=None): - """ - Lit le nom donné par l'utilisateur au concept de type CO qui doit être - la valeur du MCS courant et stocke cette valeur - """ - #print "valid_nom_concept_co" - if self.parent.modified == 'n' : self.parent.init_modif() - anc_val = self.node.item.get_valeur() - if anc_val != None: - # il faut egalement propager la destruction de l'ancien concept - self.node.item.delete_valeur_co(valeur=anc_val) - # et on force le recalcul des concepts de sortie de l'etape - self.node.item.object.etape.get_type_produit(force=1) - # et le recalcul du contexte - self.node.item.object.etape.parent.reset_context() - nom_concept = self.entry_co.get() - #print "valid_nom_concept_co",nom_concept - test,mess=self.node.item.set_valeur_co(nom_concept) - if not test: - # On n'a pas pu créer le concept - self.parent.appli.affiche_infos(mess) - return - elif self.node.item.isvalid() : - self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée') - self.node.parent.select() - else : - cr = self.node.item.get_cr() - mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal() - self.reset_old_valeur(anc_val,mess=mess) - return - - def ask_new_concept(self,tag): - """ - Crée une entry dans le panneau d'un MCS qui attend un concept OU un CO() afin de - permettre à l'utilisateur de donner le nom du nouveau concept - """ - new_concept = self.b_co.getcurselection() - if new_concept == 'OUI': - self.label_co.place(relx=0.05,rely=0.7) - self.entry_co.place(relx=0.45,rely=0.7,relwidth=0.25) - self.l_resu.place_forget() - self.label_valeur.place_forget() - self.entry_co.focus() - elif new_concept == 'NON': - # On est passe de OUI à NON, on supprime la valeur -# PN correction de bug (on passe de non a non et cela supprime la valeur) -# ajout du if de le ligne suivane - if self.node.item.is_CO(): - self.node.item.delete_valeur_co() - self.record_valeur(name=None,mess="Suppression CO enregistrée") - self.label_co.place_forget() - self.entry_co.place_forget() - self.l_resu.place(relx=0.05,rely=0.7) - self.label_valeur.place(relx=0.45,rely=0.7) - - def display_valeur(self): - """ - Affiche la valeur de l'objet pointé par self - """ - valeur = self.node.item.get_valeur() - #print "display_valeur",valeur - if valeur == None or valeur == '': - self.valeur_choisie.set('') - return # pas de valeur à afficher ... - # il faut configurer le bouton si la valeur est un objet CO - # sinon afficher le nom du concept dans self.valeur_choisie - if self.node.item.is_CO(): - #print "display_valeur.is_CO" - self.b_co.invoke('OUI') - self.entry_co.insert(0,valeur.nom) - else: - self.valeur_choisie.set(valeur.nom) - - def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'): - """ - Enregistre val comme valeur de self.node.item.object SANS faire de test de validité - """ - if self.parent.modified == 'n' : self.parent.init_modif() - if name != None: - valeur =name - else : - self.entry_co.delete(0,END) - valeur= self.entry_co.get() - self.node.item.set_valeur_co(valeur) - self.parent.appli.affiche_infos(mess) - # On met a jour le display dans le panneau - self.display_valeur() - if self.node.item.isvalid(): - self.node.parent.select() - - diff --git a/Editeur/widgets.py b/Editeur/widgets.py deleted file mode 100644 index 11551db6..00000000 --- a/Editeur/widgets.py +++ /dev/null @@ -1,1387 +0,0 @@ -# -*- coding: utf-8 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -# ---------------------------------------------------------- -# Cette classe sert à définir les widgets utilisés par -# EFICAS -# ---------------------------------------------------------- - -import Tkinter -from Tkinter import * -import Pmw -import os,sys,re,string -import types,fnmatch -import traceback -from tkFileDialog import * -from tkMessageBox import showinfo,askyesno,showerror,askretrycancel - -import fontes -import prefs -from utils import save_in_file -from centerwindow import centerwindow - -from Noyau.N_utils import repr_float -from Accas import AsException - -# Surcharge de la fonction askyesno qui retourne un resultat errone en Python 2.3 avec Tk 8.4 -# et Tkinter.wantobject==1 -import tkMessageBox -def askyesno(title=None, message=None, **options): - "Ask a question; return true if the answer is yes" - s = tkMessageBox._show(title, message, tkMessageBox.QUESTION, tkMessageBox.YESNO, **options) - if s == tkMessageBox.YES:return 1 - if s == tkMessageBox.NO:return 0 - if s:return 1 - return 0 - - -class Fenetre : - """ Cette classe permet de créer une fenêtre Toplevel dans laquelle - on peut afficher un texte et qui permet de le sauver""" - def __init__(self,appli,titre="",texte="",wrap=WORD,width=100,height=30): - self.appli=appli - if self.appli.test==1 : return - self.fenetre = Toplevel() - self.fenetre.withdraw() - #self.fenetre.configure(width = 800,height=500) - self.fenetre.protocol("WM_DELETE_WINDOW", self.quit) - self.fenetre.title("Visualisation du "+titre) - self.texte = string.replace(texte,'\r\n','\n') - self.titre = titre - fonte=fontes.standardcourier10 - # définition des frames - self.frame_texte = Frame(self.fenetre) - self.frame_boutons = Frame(self.fenetre) - #self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.9) - #self.frame_boutons.place(relheight=0.1,relx=0,rely=0.9,relwidth=1.) - # définition de la zone texte et du scrollbar - self.zone_texte = Text(self.frame_texte,font=fonte,wrap=wrap, - height=height,width=width) - self.zone_texte.bind("", self.page_up) - self.zone_texte.bind("", self.page_down) - self.zone_texte.bind("", self.unit_up) - self.zone_texte.bind("", self.unit_down) - self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview) - #self.scroll_h = Scrollbar (self.frame_texte,command = self.zone_texte.xview) - self.scroll_v.pack(side='right',fill ='y') - #self.scroll_h.pack(side='bottom',fill ='x') - self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10) - self.zone_texte.configure(yscrollcommand=self.scroll_v.set) - # définition des boutons - self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit, - default='active') - self.but_save = Button(self.frame_boutons,text = "Sauver",command = self.save) - #self.but_quit.place(relx=0.4,rely=0.5,anchor='center') - #self.but_save.place(relx=0.6,rely=0.5,anchor='center') - self.but_quit.pack(side='left',padx=25, pady=5) - self.but_save.pack(side='right',padx=25, pady=5) - self.frame_texte.pack(side='top',fill='both',expand=1) - self.frame_boutons.pack(side='bottom') - self.zone_texte.focus_set() - self.fenetre.bind('',self.quit) #dismiss window - - # affichage du texte - self.affiche_texte(self.texte) - self.zone_texte.config(state=DISABLED) - centerwindow(self.fenetre) - self.fenetre.deiconify() - - def page_up(self,event): - event.widget.yview_scroll(-1, "page") - return "break" #Pour eviter la propagation de l'evenement a la fenetre principale - def page_down(self,event): - event.widget.yview_scroll(1, "page") - return "break" #Pour eviter la propagation de l'evenement a la fenetre principale - def unit_up(self,event): - event.widget.yview_scroll(-1, "unit") - return "break" #Pour eviter la propagation de l'evenement a la fenetre principale - def unit_down(self,event): - event.widget.yview_scroll(1, "unit") - return "break" #Pour eviter la propagation de l'evenement a la fenetre principale - - def wait(self): - self.fenetre.grab_set() - self.zone_texte.focus_set() - self.fenetre.wait_window(self.fenetre) - - def quit(self,event=None): - self.fenetre.destroy() - return "break" #Pour eviter la propagation de l'evenement a la fenetre principale - - def efface_scroll(self): - """ Efface le scroll lorsqu'il n'est pas nécessaire : ne marche pas""" - self.scroll_v.pack_forget() - #self.scroll_h.pack_forget() - - def affiche_texte(self,texte): - """ Affiche le texte dans la fenêtre """ - if texte != "" : - self.zone_texte.insert(END,texte) - try: - self.fenetre.update_idletasks() - x0,y0,x1,y1 = self.zone_texte.bbox(END) - if (y1-y0) < 300 : self.efface_scroll() - except: - pass - - def save(self): - """ Permet de sauvegarder le texte dans un fichier dont on a demandé le nom - à l'utilisateur """ - file = asksaveasfilename(parent=self.fenetre,defaultextension = '.comm', - #initialdir = self.appli.CONFIGURATION.rep_user, - initialdir = self.appli.CONFIGURATION.initialdir, - title="Sauvegarde du "+self.titre) - if file : - if not save_in_file(file,self.texte,None) : - showerror("Sauvegarde impossible", - "Impossible de sauvegarder le texte dans le fichier spécifié\n"+ - "Vérifiez les droits d'écriture",parent=self.fenetre) - else: - showinfo("Sauvegarde effectuée","Sauvegarde effectuée dans le fichier %s" %file,parent=self.fenetre) - - def destroy(self): - try : - self.fenetre.destroy() - except : - pass - -class FenetreSurLigneWarning(Fenetre): - - def affiche_texte(self,texte): - """ Affiche le texte dans la fenêtre """ - ligne=0 - if texte != "" : - texte_cr=texte.splitlines() - for l in texte_cr: - ligne=ligne+1 - l=l+"\n" - self.zone_texte.insert(END,l) - if (l.find("WARNING") > -1) or (l.find("ERROR") > -1) : - self.zone_texte.tag_add( "Rouge", str(ligne)+".0", "end-1c" ) - self.zone_texte.tag_config("Rouge", foreground='red') - try: - self.fenetre.update_idletasks() - x0,y0,x1,y1 = self.zone_texte.bbox(END) - if (y1-y0) < 300 : self.efface_scroll() - except: - pass - -class FenetreYesNo(Fenetre): - def __init__(self,appli,titre="",texte="",yes="Yes",no="No"): - self.appli=appli - self.fenetre = Toplevel() - self.fenetre.configure(width = 800,height=500) - self.fenetre.protocol("WM_DELETE_WINDOW", self.quit) - self.fenetre.title(titre) - self.texte = string.replace(texte,'\r\n','\n') - self.titre = titre - fonte=fontes.standardcourier10 - # définition des frames - self.frame_texte = Frame(self.fenetre) - self.frame_boutons = Frame(self.fenetre) - self.frame_boutons.place(relx=0,rely=0, relwidth=1.,relheight=0.1) - self.frame_texte.place( relx=0,rely=0.1, relwidth=1, relheight=0.9) - # définition de la zone texte et du scrollbar - self.zone_texte = Text(self.frame_texte,font=fonte) - self.zone_texte.bind("", self.page_up) - self.zone_texte.bind("", self.page_down) - self.zone_texte.bind("", self.unit_up) - self.zone_texte.bind("", self.unit_down) - self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview) - #self.scroll_h = Scrollbar (self.frame_texte,command = self.zone_texte.xview) - self.scroll_v.pack(side='right',fill ='y') - #self.scroll_h.pack(side='bottom',fill ='x') - self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10) - self.zone_texte.configure(yscrollcommand=self.scroll_v.set) - # définition des boutons - self.but_yes = Button(self.frame_boutons,text = yes,command=self.yes) - self.but_no = Button(self.frame_boutons,text = no,command = self.no) - self.but_yes.place(relx=0.4,rely=0.5,anchor='center') - self.but_no.place(relx=0.6,rely=0.5,anchor='center') - # affichage du texte - self.affiche_texte(self.texte) - centerwindow(self.fenetre) - - def yes(self): - self.result=1 - self.quit() - - def no(self): - self.result=0 - self.quit() - -class FenetreDeSelection(Fenetre): - """ Classe dérivée de Fenêtre permettant la récupération d'une zone de texte sélectionnée. - Cette classe est utilisée pour affecter une liste de valeurs à un mot-clé. - """ - def __init__(self,panel,item,appli,titre="",texte="",cardinal=1): - Fenetre.__init__(self,appli,titre=titre,texte=texte) - self.frame_boutons.place_forget() - self.frame_texte.place_forget() - self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.8) - self.frame_boutons.place(relheight=0.2,relx=0,rely=0.8,relwidth=1.) - - self.cardinal=cardinal - self.fenetre.configure(width = 320,height=400) - centerwindow(self.fenetre) - self.panel = panel - self.item = item - self.fenetre.title(titre) - self.but_save.configure(text="Ajouter",command=self.traite_selection) - # séparateur par défaut - self.separateur = ';' - # création de la zone de saisie du séparateur - l_separateurs_autorises = self.get_separateurs_autorises() - self.choix_sep = Pmw.ComboBox(self.frame_boutons, - label_text = "Séparateur :", - labelpos = 'w', - listheight = 100, - selectioncommand = self.choose_separateur, - scrolledlist_items = l_separateurs_autorises) - self.choix_sep.component('entry').configure(width=6) - self.choix_sep.place(relx=0.01,rely=0.5,anchor='w') - self.choix_sep.selectitem(self.separateur) - # Replacement - self.but_quit.place_forget() - self.but_save.place_forget() - self.but_all = Button(self.frame_boutons,text = "Tout Sélectionner", command=self.tout) - self.but_save.place(relx=0.6,rely=0.6,anchor='center') - self.but_quit.place(relx=0.8,rely=0.6,anchor='center') - self.but_all.place(relx=0.7,rely=0.2,anchor='center') - self.choose_separateur('espace') - - - def get_separateurs_autorises(self): - """ - Retourne la liste des séparateurs autorisés - """ - return ['espace',';',','] - - def choose_separateur(self,nom_sep): - """ - Affecte à self.separateur le caractère séparateur correspondant à nom_sep - """ - if nom_sep == 'espace' : - self.separateur = ' ' - else: - self.separateur = nom_sep - - def tout(self): - liste=[] - texte=self.texte.splitlines() - for l in texte : - for mot in string.split(l,self.separateur): - if mot != '' and mot != ' ' and mot != self.separateur : - liste.append(mot) - self.traite_selection(liste) - - def traite_selection(self,liste=None): - """ Cette méthode effectue tous les traitements nécessaires pour vérifier - et affecter la liste de valeurs à l'objet réprésenté par self.item - """ - # Récupère la liste des chaines de caractères de la zone sélectionnée - message="" - if liste == None: - message,liste = self.recupere_liste() - if self.test_probleme(message,"Sélectionnez des données") == 0: - return - # Vérifie que le nombre de données est dans les limites attendues - message = self.verif_liste(liste) - if self.test_probleme(message,"Vérifiez le nombre de données") == 0: - return - # Crée une liste de valeurs du type attendu - message,liste_valeurs = self.creation_liste_valeurs(liste) - if self.test_probleme(message,"Vérifiez le type des données") == 0: - return - # Vérifie que chaque valeur est dans le domaine exigé - message = self.verif_valeurs(liste_valeurs) - if self.test_probleme(message,"Vérifiez le domaine des valeurs") == 0: - return - # Ajoute les valeurs dans la liste de valeurs du mot-clé - if self.cardinal != 1 : - nb=self.cardinal - l_valeurs=[] - # a ameliorer - if (len(liste_valeurs)%nb != 0): - message="La cardinalité n'est pas correcte" - self.test_probleme(message,"On attend des tuples") - return - for i in range(len(liste_valeurs)/nb) : - if (nb==2): - t=(liste_valeurs[i*nb], liste_valeurs[i*nb+1]) - elif (nb ==3): - t=(liste_valeurs[i*nb], liste_valeurs[i*nb+1], liste_valeurs[i*nb+2]) - else : - print "probleme : prevenir la maintenance Eficas" - return - l_valeurs.append(t) - liste_valeurs=l_valeurs - self.ajouter_valeurs(liste_valeurs) - self.appli.affiche_infos("Liste de valeurs acceptée") - - def test_probleme(self, message, message_eficas): - """ Cette méthode affiche un message d'erreur si message != '' - et retourne 0, sinon retourne 1 sans rien afficher. - """ - if message != "": - showinfo("Problème",message,parent=self.fenetre) - self.fenetre.tkraise() - self.appli.affiche_infos(message_eficas) - return 0 - else: - return 1 - - def recupere_liste(self): - """ Cette méthode récupère le texte de la zone sélectionnée, construit et - retourne une liste avec les chaines qui se trouvent entre les séparateurs. - S'il n'y a pas de données selectionnées, elle retourne un message d'erreur - et une liste vide. - """ - message = "" - try: - selection=self.fenetre.selection_get() - except: - message = "Pas de donnée sélectionnée" - return message,None - # les retours chariots doivent être interprétés comme des séparateurs - selection = string.replace(selection,'\n',self.separateur) - # on splitte la sélection suivant le caractère séparateur - liste_chaines = string.split(selection,self.separateur) - l_chaines = [] - for chaine in liste_chaines: - chaine = string.strip(chaine) - if chaine != '' : l_chaines.append(chaine) - return message,l_chaines - - def verif_liste(self, liste): - """ Cette méthode effectue des tests sur le nombre d'éléments de la liste - et retourne 1 si la liste est correcte, sinon 0 et le message d'erreur - correspondant. - """ - message = "" - # nombre d'éléments sélectionnés - nombre_elements = len(liste) - # nombre d'éléments déja dans la liste du panel - nombre_in_liste = len(self.panel.Liste_valeurs.get_liste()) - multiplicite = self.item.GetMultiplicite() - if (nombre_elements % multiplicite) != 0: - message = "Vous devez sélectionner "+str(multiplicite)+" * n données" - return message - nombre_valeurs = nombre_elements / multiplicite - cardinalite = self.item.GetMinMax() - if nombre_valeurs < cardinalite[0]: - message = "Vous devez sélectionner au moins "+str(cardinalite[0])+" valeurs" - return message - if cardinalite[1] != "**" and nombre_valeurs > (long(cardinalite[1])-nombre_in_liste): - message = "La liste ne peut avoir plus de "+str(cardinalite[1])+" valeurs" - return message - - return message - - def creation_liste_valeurs(self, liste): - """ Cette méthode crée et retourne une liste de valeurs du type attendu - par le mot-clé. La liste de valeurs est créée à partir de la liste - de chaines de caractères transmise. - """ - type_attendu = self.item.GetType()[0] - if type_attendu == 'R': - return self.convertir(liste, f_conversion= float) - elif type_attendu == 'I': - return self.convertir(liste, f_conversion= int) - elif type_attendu == 'TXM': - return self.convertir(liste) - else: - message = "Seuls les entiers, les réels et les chaines de caractères sont convertis" - return message,None - - def convertir(self, liste, f_conversion=None): - """ Cette méthode essaie de convertir les éléments de la liste avec la - fonction f_conversion si elle existe, et retourne la liste des - éléments dans le type voulu en cas de succès, sinon retourne None. - """ - liste_valeurs = [] - message = "" - for chaine in liste: - if f_conversion: - try: - liste_valeurs.append(f_conversion(chaine)) - except: - message = "Impossible de convertir "+chaine+" dans le type attendu" - return message,None - else: - liste_valeurs.append(chaine) - return message,liste_valeurs - - def verif_valeurs(self, liste_valeurs): - """ Cette méthode teste la validité de tous les éléments de la liste, - retourne un message vide s'ils sont valides - ou un message non vide au premier élément non valide rencontré - """ - message = "" - for valeur in liste_valeurs: - test,message = self.item.object.verif_type(valeur) - if test == 0: return message - return message - - def ajouter_valeurs(self, liste_valeurs): - """ Cette méthode ajoute les nouvelles valeurs à la liste existante.""" - liste = self.panel.Liste_valeurs.get_liste() - liste.extend(liste_valeurs) - self.panel.Liste_valeurs.put_liste(liste) - -class FenetreDeParametre(Fenetre) : - def __init__(self,parent,item,appli,texte): - self.parent=parent - self.appli=appli - self.fenetre = Toplevel() - self.fenetre.configure(width = 250,height=100) - self.fenetre.protocol("WM_DELETE_WINDOW", self.quit) - self.fenetre.title("Parametres") - self.titre = "Parametres" - self.texte = string.replace(texte,'\r\n','\n') - fonte=fontes.standardcourier10 - - # définition des frames - self.frame_texte = Frame(self.fenetre) - self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.7) - # définition de la zone texte et du scrollbar - self.zone_texte = Text(self.frame_texte,font=fonte) - self.zone_texte.bind("", self.page_up) - self.zone_texte.bind("", self.page_down) - self.zone_texte.bind("", self.unit_up) - self.zone_texte.bind("", self.unit_down) - self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview) - self.scroll_v.pack(side='right',fill ='y') - self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10) - self.zone_texte.configure(yscrollcommand=self.scroll_v.set) - # affichage du texte - self.affiche_texte(self.texte) - self.zone_texte.config(state="disabled") - - # définition des boutons - self.frame_boutons = Frame(self.fenetre) - self.frame_boutons.place(relheight=0.3,relx=0,rely=0.65,relwidth=1.) - self.label1 = Label(self.frame_boutons,text="surligner la") - self.label2 = Label(self.frame_boutons,text="ligne entière") - self.label1.place(relx=0.1,rely=0) - self.label2.place(relx=0.1,rely=0.5) - self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit) - self.but_save = Button(self.frame_boutons,text = "Choisir",command = self.Choisir) - self.but_save.place(relx=0.6,rely=0,relheight=1) - self.but_quit.place(relx=0.8,rely=0,relheight=1) - - - def Choisir(self): - try: - selection=self.zone_texte.selection_get() - except: - showerror("Pas de donnée sélectionnée", - "Selectionner un parametre") - l_param = "" - for param in selection.splitlines(): - nomparam=param[0:param.find("=")-1] - if nomparam != '' : - l_param=l_param+nomparam+',' - self.parent.entry.delete(0,Tkinter.END) - self.parent.entry.insert(0,l_param[0:-1]) - self.parent.valid_valeur() - self.quit() - -class Formulaire: - """ - Cette classe permet de créer une boîte Dialog dans laquelle - on affiche un formulaire à remplir par l'utilisateur - """ - def __init__(self,fen_pere,obj_pere=None,titre="",texte="",items=(),mode='query',commande=None): - self.resultat=0 - if items in ((),[]) : return - self.items = items - self.titre = titre - self.texte = texte - self.fen_pere = fen_pere - self.obj_pere = obj_pere - self.mode= mode - self.command = commande - self.display() - - def display(self): - self.init_validateurs() - self.init_fenetre() - self.init_texte() - self.init_items_formulaire() - self.fenetre.activate(geometry='centerscreenalways') - - def init_validateurs(self): - """ - Crée le dictionnaire des validateurs des objets reconnus par le formulaire - """ - self.d_validateurs = {} - self.d_validateurs['rep'] = self.repvalidator - self.d_validateurs['file'] = self.filevalidator - self.d_validateurs['cata']= self.catavalidator - self.d_validateurs['mot']= self.motvalidator - self.d_validateurs['mot2']= self.mot2validator - self.d_validateurs['mot3']= self.mot3validator - self.d_validateurs['mot4']= self.mot4validator - - def init_fenetre(self): - """ - Crée la fenêtre Dialog - """ - if self.mode == 'query': - buttons=('Valider','Annuler') - defaultbutton = 'Valider' - elif self.mode == 'display': - if self.command : - buttons=(self.command[0],'OK') - defaultbutton = 'OK' - else: - buttons=('OK') - defaultbutton = 'OK' - self.fenetre = Pmw.Dialog(self.fen_pere, - buttons=buttons, - defaultbutton = defaultbutton, - title = self.titre, - command = self.execute) - self.fenetre.withdraw() - - def init_texte(self): - """ - Crée le label qui affiche le texte à l'intérieur du panneau - """ - fonte=fontes.standard - fr_texte = Frame(self.fenetre.interior(),height=60) - fr_texte.pack(side='top',fill='x',expand=1) - Label(fr_texte,text = self.texte, font=fonte).place(relx=0.5,rely=0.5,anchor='center') - - def init_items_formulaire(self): - """ - Crée et affiche les items dans la boîte de dialogue - """ - self.radiobut = 0 - self.widgets = [] - self.item_widgets = {} - length_maxi = 0 - for item in self.items: - if len(item[0])>length_maxi : length_maxi = len(item[0]) - window = self.fenetre.interior() - for item in self.items : - if len(item) == 4 : - label,nature,nom_var,defaut = item - chaine="Yes" - chaine2="No" - else : - label,nature,nom_var,defaut,chaine,chaine2 = item - - # création de la frame - fr_item = Frame(window,height=40,width=700) - fr_item.pack(side='top',fill='x',expand=1) - # création du label - Label(fr_item,text = label).place(relx=0.05,rely=0.4) - if nature in ('rep','file','cata','mot','mot2','mot3','mot4'): - # création de l'entry - e_item = Entry(fr_item) - e_item.place(relx=0.5,rely=0.4,relwidth=0.45) - self.widgets.append(e_item) - self.item_widgets[item] = e_item - if defaut : e_item.insert(0,str(defaut)) - elif nature == 'YesNo': - # création de la StringVar - var = StringVar() - setattr(self,'item_'+nom_var,var) - var.set(defaut) - # création du radiobouton - rb1 = Radiobutton(fr_item,text=chaine,variable=var,value='OUI') - rb2 = Radiobutton(fr_item,text=chaine2,variable=var,value='NON') - rb1.place(relx=0.65,rely=0.5,anchor='center') - rb2.place(relx=0.80,rely=0.5,anchor='center') - self.widgets.append((rb1,rb2)) - self.item_widgets[item] = var - # détermination de la méthode à appliquer sur les boutons - if self.mode == 'query': - function = self.active - elif self.mode == 'display': - function = self.inactive - else: - return - # on applique la méthode sur les boutons (activation ou désactivation) - for widget in self.widgets : - if type(widget) == types.TupleType: - for widg in widget : - apply(function,(widg,),{}) - else: - apply(function,(widget,),{}) - - def active(self,widget): - """ - Active le widget passé en argument - """ - widget.configure(state='normal',bg='white') - - def inactive(self,widget): - """ - Inactive le widget passé en argument - """ - if not isinstance(widget,Radiobutton) : - widget.configure(state='disabled',bg='gray95') - else : - widget.configure(state='disabled') - -# -------------------------------------------------------------------------------- -# Validateurs des noms de répertoire, de fichiers et de catalogues -# ------------------------------------------------------------------------------- - - def motvalidator(self,text): - text2="("+text+")" - return self.motlongueurvalidator(text2,1) - - def mot2validator(self,text): - return self.motlongueurvalidator(text,2) - - def mot3validator(self,text): - return self.motlongueurvalidator(text,3) - - def mot4validator(self,text): - return self.motlongueurvalidator(text,4) - - def motlongueurvalidator(self,text,longueur): - try : - if ((text[0] != "(") or (text[-1] != ")")) : return 0 - if len(text.split(",")) != longueur : return 0 - return 1 - except : - return 0 - - def repvalidator(self,text): - """ - Teste si text peut faire référence à un répertoire ou non - Retourne 1 si valide, 0 sinon - """ - return os.path.isdir(text),'Répertoire introuvable : %s' %text - - def filevalidator(self,text): - """ - Teste si text peut faire référence à un fichier ou non - Retourne 1 si valide, 0 sinon - """ - return os.path.isfile(text),'Fichier introuvable : %s' %text - - def catavalidator(self,text): - """ - Teste si text est un chemin d'accès valide à un catalogue - Retourne 1 si valide, 0 sinon - """ - return os.path.isfile(text),"Catalogue introuvable : %s" %text - -# -------------------------------------------------------------------------------- -# Méthodes callbacks des boutons et de fin -# -------------------------------------------------------------------------------- - - def execute(self,txt): - """ - Cette commande est activée à chaque clic sur un bouton. - Redirige l'action sur la bonne méthode en fonction du bouton activé - """ - if txt == 'Valider': - self.fini() - elif txt in ('OK','Annuler'): - self.quit() - elif txt == 'Modifier': - self.resultat = apply(self.command[1],(),{}) - self.fenetre.destroy() - else : - print "Nom de bouton inconnu" - self.quit() - - def fini(self): - """ - Commande qui termine le panneau et sauvegarde les nouvelles options - dans l'objet resultat (dictionnaire) - """ - dico={} - for item,widget in self.item_widgets.items(): - nom_var = item[2] - type_var = item[1] - valeur = widget.get() - if self.d_validateurs.has_key(type_var): - test = self.d_validateurs[type_var](valeur) - if not test : - # une entrée n'est pas valide --> on la met en surbrillance et on quitte la méthode - # sans tuer la fenêtre bien sûr - widget.selection_range(0,END) - return - dico[nom_var] = valeur - self.fenetre.destroy() - self.resultat=dico - - def quit(self): - self.fenetre.destroy() - self.resultat=None - -class ListeChoix : - """ Cette classe est utilisée pour afficher une liste de choix passée en paramètre - en passant les commandes à lancer suivant différents bindings """ - def __init__(self,parent,page,liste,liste_commandes=[],liste_marques =[],active ='oui',filtre='non',titre='', - optionReturn=None, fonte_titre=fontes.standard_gras_souligne): - self.parent = parent - self.page = page - self.liste = liste - self.dico_labels={} - self.dico_mots={} - self.nBlabel = 0 - self.dico_place={} - self.dico_mots={} - self.selection = None - self.liste_commandes = liste_commandes - self.liste_marques = liste_marques - self.arg_selected='' - self.active = active - self.titre = titre - self.filtre = filtre - self.optionReturn = optionReturn - self.fonte_titre=fonte_titre - self.init() - - def init(self): - self.make_label_titre() - self.make_entry_filtre() - self.make_text_box() - try: - self.entry.component('entry').focus() - except: - pass - - def make_label_titre(self): - """ Crée le label correspondant au titre """ - if self.titre == '' : return - self.label = Label(self.page, - text = self.titre, - font = self.fonte_titre) - self.label.pack(side='top',pady=2) - - def make_entry_filtre(self): - """ Crée l'entry permettant à l'utilisateur d'entrer un filtre de sélection dans la liste """ - if self.filtre != 'oui' : return - self.entry = Pmw.EntryField(self.page,labelpos='w', - label_text="Filtre :", - command=self.entry_changed) - self.entry.pack(side='top',pady=2) - - def make_text_box(self): - """ Crée la fenêtre texte dans laquelle sera affichée la liste """ - self.MCbox = Text (self.page,relief='sunken',bg='gray95',bd=2) - self.MCscroll = Scrollbar (self.page,command = self.MCbox.yview) - self.MCscroll.pack(side='right',fill ='y',pady=2) - self.MCbox.pack(fill='y',expand=1,padx=2,pady=2) - self.MCbox.configure(yscrollcommand=self.MCscroll.set) - - - def affiche_liste(self): - """ Affiche la liste dans la fenêtre""" - liste_labels=[] - self.MCbox.config(state=NORMAL) - self.MCbox.delete(1.0,END) - self.nBlabel = 0 - self.dico_place={} - for objet in self.liste : - if type(objet) == types.InstanceType or isinstance(objet,object): - #instance ancienne mode ou nouvelle mode - try: - mot = objet.nom - except: - mot = str(objet) - elif type(objet) in (types.StringType,types.IntType): - mot = objet - elif type(objet) == types.FloatType : - mot = self.parent.get_valeur_texte(objet) - if mot == "" : - mot = str(objet) - elif type(objet) == types.TupleType : - mot="(" - premier=1 - for val in objet: - if (not premier): - mot=mot+"," - else: - premier=0 - valtexte = self.parent.get_valeur_texte(val) - if valtexte != "" : - mot=mot+valtexte - else: - mot=mot+str(val) - mot=mot+")" - else: - mot=`objet` - label = Label(self.MCbox, - text = mot, - fg = 'black',bg = 'gray95',justify = 'left') - self.dico_labels[mot]=label - self.dico_place[mot]=self.nBlabel - self.dico_mots[label]=mot - self.nBlabel=self.nBlabel+1 - liste_labels.append(label) - self.MCbox.window_create(END, - window=label, - stretch = 1) - self.MCbox.insert(END,'\n') - if self.optionReturn != None : - label.bind("",lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitemsurligne(x,l,c)) - label.bind("",lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitemsurligne(x,l,c)) - label.bind("",lambda e,s=self,x=objet,l=label : s.selectNextItem(x,l)) - label.bind("",lambda e, s=self,x=objet,l=label : s.selectNextItem(x,l)) - label.bind("" ,lambda e,s=self,x=objet,l=label : s.selectPrevItem(x,l)) - label.bind("" ,lambda e,s=self,x=objet,l=label : s.selectPrevItem(x,l)) - if self.active == 'oui': - label.bind(self.liste_commandes[0][0],lambda e,s=self,c=self.liste_commandes[0][1],x=objet,l=label : s.selectitem(x,l,c)) - label.bind(self.liste_commandes[1][0],lambda e,s=self,c=self.liste_commandes[1][1],x=objet,l=label : s.deselectitem(l,x,c)) - label.bind(self.liste_commandes[2][0],lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitem(x,l,c)) - - for marque in self.liste_marques: - try: - self.markitem(liste_labels[marque]) - except: - pass - - self.MCbox.config(state=DISABLED) - self.selection = None - self.dontselect=0 - for event,callback in self.liste_commandes: - if event == "": - self.selection=None,None,callback - break - - def clear_marque(self): - try: - self.dico_labels[self.arg_selected].configure(bg='gray95',fg='black') - self.arg_selected = '' - except : - pass - - def surligne(self,marque): - try : - self.highlightitem(self.dico_labels[marque]) - self.arg_selected = marque - except: - pass - - def chooseitemsurligne(self,mot,label,commande): - """ Active la méthode de choix passée en argument""" - try: - mot=self.arg_selected - commande(mot) - except AsException,e: - raison=str(e) - showerror(raison.split('\n')[0],raison) - - def chooseitem(self,mot,label,commande): - """ Active la méthode de choix passée en argument""" - try: - commande(mot) - except AsException,e: - raison=str(e) - showerror(raison.split('\n')[0],raison) - - def afficheMot(self,mot): - """ Pour contourner le bug sur l index - on commence par la methode dite normale - puis par la methode de contournement - puis rien du tout - """ - try: - labelsuivant=self.dico_labels[mot] - index = self.MCbox.index(labelsuivant) - self.MCbox.see(index) - except : - posmot=self.dico_place[mot] - totale=self.nBlabel + 0.0 - self.MCbox.yview_moveto(posmot/totale) - - def selectNextItem(self,mot,label): - index=self.liste.index(mot) - indexsuivant=index+1 - if indexsuivant > len(self.liste) -1: - indexsuivant=0 - motsuivant=self.liste[indexsuivant] - labelsuivant=self.dico_labels[motsuivant] - self.afficheMot(motsuivant) - self.selectthis(motsuivant,labelsuivant,self.selection[2],) - self.dontselect=1 - - def selectPrevItem(self,mot,label): - index=self.liste.index(mot) - indexprec=index-1 - motprec=self.liste[indexprec] - labelprec=self.dico_labels[motprec] - self.afficheMot(motprec) - self.selectthis(motprec,labelprec,self.selection[2],) - self.dontselect=1 - - def selectthis(self,mot,label,commande) : - self.clear_marque() - if self.selection != None : - self.deselectitem(self.selection[1],self.selection[0],self.selection[2],) - self.highlightitem(label) - self.selection = (mot,label,commande) - self.arg_selected = mot - if commande : commande(mot) - - def selectitem(self,mot,label,commande) : - """ Met l'item sélectionné (représenté par son label) en surbrillance - et lance la commande associée au double-clic""" - if self.dontselect: - self.dontselect=0 - return - self.selectthis(mot,label,commande) - - def highlightitem(self,label) : - """ Met l'item représenté par son label en surbrillance """ - label.focus_set() - label.configure(bg='#00008b',fg='white') - - def markitem(self,label): - """ Met l'item (représenté par son label) en rouge """ - label.configure(bg='gray95',fg='red') - - def deselectitem(self,label,mot='',commande=None) : - """ Remet l'item (représenté par son label) en noir""" - if label:label.configure(bg='gray95',fg='black') - self.arg_selected = '' - if commande and mot : commande(mot) - - def cherche_selected_item(self): - try : - index=self.MCbox.index(self.selection[1]) - lign,col=map(int,string.split(index,'.')) - except : - label=self.dico_labels[self.arg_selected] - mot=self.dico_mots[label] - lign=self.dico_place[mot]+1 - return lign - - def remove_selected_item(self): - try : - index=self.MCbox.index(self.selection[1]) - lign,col=map(int,string.split(index,'.')) - except : - label=self.dico_labels[self.arg_selected] - mot=self.dico_mots[label] - lign=self.dico_place[mot]+1 - del self.liste[lign-1] - self.affiche_liste() - - def entry_changed(self,event=None): - """ Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu - de l'entry et frappe """ - if self.arg_selected != '' : self.deselectitem(self.dico_labels[self.arg_selected]) - filtre = self.entry.get()+"*" - FILTRE = string.upper(filtre) - self.dontselect=0 - for arg in self.liste : - if fnmatch.fnmatch(arg,filtre) or fnmatch.fnmatch(arg,FILTRE) : - label=self.dico_labels[arg] - self.afficheMot(arg) - self.selectitem(arg,label,self.selection[2]) - break - - #try : - #self.dico_labels[self.arg_selected].focus_set() - #except : - #pass - - - # PN attention à la gestion des paramétres - # cela retourne H = 1 , et ni H, ni 1 - # print repr(val) - # print val.__class__.__name__ - def get_liste(self): - l=[] - for val in self.liste: -# try: -# v = eval(val) -# l.append(v) -# except: - l.append(val) - return l - - def put_liste(self,liste): - self.liste = liste - self.affiche_liste() - -class Affichage : - """ Cette classe permet d'afficher au lancement d'EFICAS le message - d'attente et la barre de progression""" - def __init__(self,master,message,barre ='oui'): - from Tools.foztools.foztools import Slider - fonte=fontes.standard12_gras - self.master=master - self.frame = Frame(self.master) - self.frame.pack(expand=1,fill='both') - self.mess = Label(self.frame,text=message,justify='center', - bd=2,relief='groove',font=fonte) - self.mess.pack(in_ = self.frame,side='top',expand=1,fill='both') - self.progress = Slider(self.frame,value=0,max=100,orientation='horizontal', - fillColor='#00008b',width=200,height=30, - background='white',labelColor='red') - if barre == 'oui': - self.progress.frame.pack(in_=self.frame,side='top') - self.master.update() - if barre == 'oui': - self.progress.frame.after(1000,self.update) - - def configure(self,**options): - if options.has_key('message'): - self.mess.configure(text=options['message']) - if options.has_key('barre'): - if options['barre'] == 'oui' : - self.progress.frame.pack(in_=self.frame,side='top') - elif options['barre'] == 'non' : - self.progress.frame.pack_forget() - self.master.update_idletasks() - - def quit(self): - self.frame.destroy() - self.master.update() - - def update(self,event=None): - """ Permet de faire avancer la barre de progression """ - try : - bar=self.progress - bar.value = bar.value+self.increment - bar.update() - self.master.after(100,self.update) - except: - pass - - def configure_barre(self,nb): - """ Calcule l'incrément de progression de la barre en fonction - du nombre d'opérations à effectuer afin que le compteur - soit à 100% à la fin des opérations""" - self.increment = 100./nb - self.progress.update() - -class Ask_Format_Fichier : - """ - Cette classe permet de créer une fenêtre Toplevel dans laquelle - on propose le choix du format de fichier de commandes à ouvrir - """ - def __init__(self,appli): - self.fenetre = Toplevel() - self.fenetre.configure(width = 250,height=150) - self.fenetre.protocol("WM_DELETE_WINDOW", self.quit) - self.fenetre.title("Choix du format du fichier de commandes") - # définition des frames - self.frame_texte = Frame(self.fenetre) - self.frame_radioboutons = Frame(self.fenetre) - self.frame_bouton_ok = Frame(self.fenetre) - self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.3) - self.frame_radioboutons.place(relheight=0.5,relx=0,rely=0.3,relwidth=1.) - self.frame_bouton_ok.place(relheight=0.2,relx=0,rely=0.8,relwidth=1.) - # définition de la zone texte et du scrollbar - zone_texte = Label(self.frame_texte,text = "Format du fichier à ouvrir :") - zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10) - # définition des radioboutons - Radiobutton(self.frame_radioboutons,text='Format Aster (Code_Aster --> v5)', - variable=appli.format_fichier,value='Aster').pack(anchor='n') - Radiobutton(self.frame_radioboutons,text='Format Python (Code_Aster v6-->)', - variable=appli.format_fichier,value='Python').pack(anchor='n') - # création du bouton OK - Button(self.frame_bouton_ok,text='OK',command=self.quit).pack(anchor='n') - # centrage de la fenêtre - centerwindow(self.fenetre) - - def quit(self): - self.fenetre.destroy() - -class BARRE_K2000(Toplevel): - def __init__(self,master=None,text = ""): - Toplevel.__init__(self,master,relief='groove') - self.master.iconify() - self.geometry("250x100+0+0") - self.protocol("WM_DELETE_WINDOW",self.quit) - # frame principale dans self (= Toplevel) - self.frame = Frame(self) - self.frame.place(relwidth=1,relheight=1) - # frame contenant le texte à afficher - self.frame_text = Frame(self.frame) - self.frame_text.place(relwidth=1,relheight=0.75,rely=0) - # frame contenant le canvas de la barre - self.frame_canv = Frame(self.frame) - self.frame_canv.place(relwidth=1,relheight=0.25,rely=0.75) - # canvas dans lequel sera affichée la barre K2000 - self.canvas = Canvas(self.frame_canv) - self.canvas.place(relx=0.5,rely=0.5,relheight=0.8,relwidth=0.8,anchor='center') - # on affiche le texte et la barre - self.build_text(text) - self.build_batons() - #self.overrideredirect(1) - # on active la barre ... - self.master.after(1000,self.launch) - # on centre la fenêtre - centerwindow(self) - self.focus() - - def build_text(self,text): - """ - Affichage de text dans frame_text - """ - self.texte_var = StringVar() - self.texte_var.set(text) - Label(self.frame_text,textvariable=self.texte_var).place(relx=0.5,rely=0.5,anchor='center') - - def build_batons(self): - """ - Construit la suite de bâtons dans le canvas - """ - self.l_batons=[] - self.black = -1 - self.sens = 'D' - self.quit = 0 - for i in range(0,40): - id = self.canvas.create_rectangle(i*5,0,(i+1)*5,20,fill='gray90',outline='') - self.l_batons.append(id) - - def launch(self): - """ - Active la barre K2000 en affichant les bâtons avec des couleurs en dégradé - """ - if self.quit == 1 : - self.destroy() - self.master.deiconify() - return - if self.sens == 'D': - self.black = self.black+1 - l_bat = self.l_batons[0:self.black+1] - l_bat.reverse() - elif self.sens == 'G': - self.black = self.black-1 - l_bat = self.l_batons[self.black:] - i=0 - for bat in l_bat : - num_color = 5+i*10 - if num_color < 10 : color = 'black' - elif num_color > 90 : color = 'white' - else: color = 'gray'+`num_color` - self.canvas.itemconfigure(bat,fill=color) - i=i+1 - if self.black == len(self.l_batons) : - self.sens = 'G' - if self.black == 0 and self.sens == 'G':self.sens = 'D' - self.after(80,self.launch) - - def update_text(self,new_text): - """ - Remplace le texte affiché par new_text - """ - self.texte_var.set(new_text) - - def quit(self): - self.quit = 1 - -class ListeChoixParGroupes(ListeChoix) : - """ - Cette classe est utilisée pour afficher une liste de commandes classées par - groupes. L'utilisateur peut réaliser des actions de selection - qui déclenchent des actions spécifiées par les bindings contenus dans liste_commandes - Exemple de binding: - liste_commandes = (("",self.selectCmd), - ("",self.deselectCmd), - ("",self.defCmd)) - Il s'agit d'une liste de doublets dont le premier element est un evenement et le - deuxieme un callback a appeler sur l'evenement en question. - - """ - def __init__(self,parent,page,liste_groupes,dict_groupes,liste_commandes=[],liste_marques =[], - active ='oui',filtre='non',titre='',optionReturn=None,fonte_titre=fontes.standard_gras_souligne): - self.parent = parent - self.page = page - self.liste_groupes = liste_groupes - self.dict_groupes = dict_groupes - self.dico_labels={} - self.selection = None - self.liste_commandes = liste_commandes - self.liste_marques = liste_marques - self.arg_selected='' - self.active = active - self.titre = titre - self.filtre = filtre - self.optionReturn = optionReturn - self.fonte_titre=fonte_titre - self.init() - - def affiche_liste(self): - """ Affiche la liste dans la fenêtre""" - liste_labels=[] - self.dico_mots={} - self.MCbox.config(state=NORMAL) - self.MCbox.delete(1.0,END) - for grp in self.liste_groupes: - # On itère sur les groupes - if grp == "CACHE":continue - liste_commandes=self.dict_groupes[grp] - text="GROUPE<<<<<<<< "+grp+" " - text=text+">"*max(0,30-len(text)) - label = Label(self.MCbox, - text = text, - fg = 'black',bg = 'gray95',justify = 'left') - # On stocke la relation entre le nom de la commande et le label - self.dico_labels[grp]=label - liste_labels.append(label) - self.MCbox.window_create(END, - window=label, - stretch = 1) - self.MCbox.insert(END,'\n') - for cmd in liste_commandes: - label = Label(self.MCbox, - text = cmd, - fg = 'black',bg = 'gray95',justify = 'left') - # On stocke la relation entre le nom de la commande et le label - self.dico_labels[cmd]=label - self.dico_mots[label]=cmd - self.MCbox.window_create(END, - window=label, - stretch = 1) - self.MCbox.insert(END,'\n') - - def null(*tp,**args): return - - if self.active == 'oui': - # Traitement par defaut des evenements - label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.selectitem(x,l,c)) - label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.deselectitem(l,x,c)) - label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c)) - label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c)) - label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c)) - label.bind("",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectNextItem(x,l,c,gr,x)) - label.bind("",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectNextItem(x,l,c,gr,x)) - label.bind("",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectPrevItem(x,l,c,gr,x)) - label.bind("",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectPrevItem(x,l,c,gr,x)) - - # Si des callbacks sont definis on les utilise - for event,callback in self.liste_commandes: - if event == "": - label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.selectitem(x,l,c)) - elif event == "": - label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.deselectitem(l,x,c)) - elif event == "": - label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c)) - elif event == "": - label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c)) - elif event == "": - label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c)) - elif event == "": - label.bind("",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectNextItem(x,l,c,gr,x)) - elif event == "": - label.bind("",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectNextItem(x,l,c,gr,x)) - elif event == "": - label.bind("",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectPrevItem(x,l,c,gr,x)) - elif event == "": - label.bind("",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectPrevItem(x,l,c,gr,x)) - else: - label.bind(event,lambda e,s=self,c=callback,x=cmd,l=label: c()) - - for marque in self.liste_marques: - try: - self.markitem(liste_labels[marque]) - except: - pass - - self.MCbox.config(state=DISABLED) - self.selection = None - self.dontselect=0 - for event,callback in self.liste_commandes: - if event == "": - self.selection=None,None,callback - break - - def selectPrevItem(self,mot,label,callback,group,cmd): - g=self.liste_groupes.index(group) - liste_commandes=self.dict_groupes[group] - c=liste_commandes.index(cmd) - if c > 0: - co=liste_commandes[c-1] - else: - # debut de liste. On passe au groupe precedent - if g > 0: - gr=self.liste_groupes[g-1] - co=self.dict_groupes[gr][-1] - else: - # debut des groupes. On ne fait rien - return - # On a trouve l'item precedent - labelsuivant=self.dico_labels[co] - index = self.MCbox.index(labelsuivant) - self.MCbox.see(index) - self.selectthis(co,labelsuivant,self.selection[2],) - self.dontselect=1 - - def selectNextItem(self,mot,label,callback,group,cmd): - g=self.liste_groupes.index(group) - liste_commandes=self.dict_groupes[group] - c=liste_commandes.index(cmd) - try: - co=liste_commandes[c+1] - except: - # fin de liste. On passe au groupe suivant - try: - gr=self.liste_groupes[g+1] - co=self.dict_groupes[gr][0] - except: - # fin des groupes. On ne fait rien - return - # On a trouve l'item suivant - labelsuivant=self.dico_labels[co] - index = self.MCbox.index(labelsuivant) - self.MCbox.see(index) - self.selectthis(co,labelsuivant,self.selection[2],) - self.dontselect=1 - - def entry_changed(self,event=None): - """ - Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu - de l'entry et frappe - """ - if self.arg_selected != '' : self.deselectitem(self.dico_labels[self.arg_selected]) - - filtre = self.entry.get()+"*" - FILTRE = string.upper(filtre) - # - # On cherche d'abord dans les noms de groupe - # puis dans les noms de commande groupe par groupe - # - for grp in self.liste_groupes: - if fnmatch.fnmatch(grp,filtre) or fnmatch.fnmatch(grp,FILTRE) : - cmd=self.dict_groupes[grp][0] - label=self.dico_labels[cmd] - index = self.MCbox.index(label) - self.MCbox.see(index) - self.selectitem(cmd,label,self.selection[2]) - # On a trouve un groupe on arrete la recherche - return - - for grp in self.liste_groupes: - for cmd in self.dict_groupes[grp] : - if fnmatch.fnmatch(cmd,filtre) or fnmatch.fnmatch(cmd,FILTRE) : - label=self.dico_labels[cmd] - index = self.MCbox.index(label) - self.MCbox.see(index) - self.selectitem(cmd,label,self.selection[2]) - # On a trouve une commande on arrete la recherche - return - diff --git a/Exemples/ex21/check.py b/Exemples/ex21/check.py index 3d3239cd..21d9e374 100644 --- a/Exemples/ex21/check.py +++ b/Exemples/ex21/check.py @@ -5,7 +5,7 @@ """ import sys -sys.path[:0]=['../..','../../Editeur','../../..'] +sys.path[:0]=['../..','../../..'] from Accas import * #from Cata.cata import * diff --git a/Extensions/param2.py b/Extensions/param2.py index 89f6464b..e91e3e1b 100644 --- a/Extensions/param2.py +++ b/Extensions/param2.py @@ -38,17 +38,39 @@ class Formula: def __mul__(self, other): return Binop('*', self, other) def __rmul__(self, other): return Binop('*', other, self) def __div__(self, other): return Binop('/', self, other) - def __truediv__(self, other): return Binop('/', self, other) def __rdiv__(self, other): return Binop('/', other, self) + def __truediv__(self, other): return Binop('/', self, other) + def __rtruediv__(self, other): return Binop('/', other, self) + def __floordiv__(self, other): return Binop('//', self, other) + def __rfloordiv__(self, other): return Binop('//', other, self) def __pow__(self, other): return Binop('**', self, other) def __rpow__(self, other): return Binop('**', other, self) def __getitem__(self,i):return Binop('[]',self,i) + def __cmp__( self, other ): return self.eval().__cmp__(other) + def __eq__( self, other ): return self.eval() == other + def __ne__( self, other ): return self.eval() != other + def __lt__( self, other ): return self.eval() < other + def __le__( self, other ): return self.eval() <= other + def __gt__( self, other ): return self.eval() > other + def __ge__( self, other ): return self.eval() >= other + def __hash__(self):return id(self) + +def _div(a,b): + if isinstance(a,(int,long)) and isinstance(b,(int,long)): + if a%b: + return a/b + else: + return a//b + else: + return a/b + class Binop(Formula): opmap = { '+': lambda a, b: a + b, '*': lambda a, b: a * b, '-': lambda a, b: a - b, - '/': lambda a, b: a / b, + '/': _div, + '//': lambda a, b: a // b, '**': lambda a, b: a ** b, '[]': lambda a, b: a[b] , } diff --git a/Extensions/parametre.py b/Extensions/parametre.py index 54025443..58ceefa2 100644 --- a/Extensions/parametre.py +++ b/Extensions/parametre.py @@ -36,6 +36,7 @@ from Noyau.N_CR import CR from Noyau import N_OBJECT from Ihm import I_OBJECT from param2 import * +from Ihm import CONNECTOR class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) : """ @@ -214,6 +215,8 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) : self.jdc.append_param(self) except: pass + CONNECTOR.Emit(self,"add",None) + CONNECTOR.Emit(self,"valid") def inactive(self): """ @@ -223,6 +226,8 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) : self.actif = 0 self.jdc.del_param(self) self.jdc.delete_concept_after_etape(self,self) + CONNECTOR.Emit(self,"supp",None) + CONNECTOR.Emit(self,"valid") def isactif(self): """ diff --git a/Ihm/I_FORM_ETAPE.py b/Ihm/I_FORM_ETAPE.py index d228980c..ef1c5099 100644 --- a/Ihm/I_FORM_ETAPE.py +++ b/Ihm/I_FORM_ETAPE.py @@ -110,21 +110,6 @@ class FORM_ETAPE(MACRO_ETAPE): test = 1 arguments = arguments[1:-1] # on enlève les parenthèses ouvrante et fermante l_arguments = string.split(arguments,',') - #for argument in l_arguments: - # argument = string.strip(argument) - # try: - # nom=argument - # typ,nom = string.split(argument,':') - # #pas de vérification sur le nom de l'argument - # #vérification du type de l'argument - # typ = string.strip(typ) - # if typ not in self.l_types_autorises : - # test = 0 - # erreur = erreur + "Le type "+typ+" n'est pas un type permis pour "+nom+'\n' - # except: - # # l'argument ne respecte pas la syntaxe : typ_arg : nom_arg - # test = 0 - # erreur = erreur+"Syntaxe argument non valide : "+argument+'\n' return test,erreur def verif_corps(self,corps=None,arguments=None): @@ -279,7 +264,7 @@ class FORM_ETAPE(MACRO_ETAPE): self.build_mc() self.mc_liste=[] if len(formule) < 4 : - return O + return 0 arguments=formule[3] if arguments[0] == '(' : arguments=arguments[1:] @@ -287,17 +272,18 @@ class FORM_ETAPE(MACRO_ETAPE): arguments=arguments[:-1] self.arguments=tuple(arguments.split(',')) - i=1 + mocles={"NOM_PARA":self.arguments} + if formule[1] == "REEL": + mocles["VALE"]=formule[2] + if formule[1] == "COMPLEXE": + mocles["VALE_C"]=formule[2] + for k,v in self.definition.entites.items(): + if not mocles.has_key(k):continue child=self.definition.entites[k](None,nom=k,parent=self) - new_valeur=formule[i+1] - if i+1 == 3 : - child.valeur = self.arguments - else : - child.valeur = new_valeur + child.valeur=mocles[k] child.state = 'modified' self.mc_liste.append(child) - i=i+1 self.corps = formule[2] self.type_retourne = formule[1] diff --git a/Ihm/I_JDC.py b/Ihm/I_JDC.py index 11379dd8..70b26efd 100644 --- a/Ihm/I_JDC.py +++ b/Ihm/I_JDC.py @@ -140,6 +140,7 @@ class JDC(I_OBJECT.OBJECT): objet.nom = "_comm_"+`ind` if pos == None : pos = 0 self.etapes.insert(pos,objet) + self.reset_context() self.editmode=0 self.active_etapes() CONNECTOR.Emit(self,"add",objet) @@ -152,8 +153,8 @@ class JDC(I_OBJECT.OBJECT): objet = parametre.PARAMETRE(nom=nom_param) if pos == None : pos = 0 self.etapes.insert(pos,objet) - self.editmode=0 self.reset_context() + self.editmode=0 self.active_etapes() CONNECTOR.Emit(self,"add",objet) self.fin_modif() @@ -165,8 +166,8 @@ class JDC(I_OBJECT.OBJECT): objet = parametre_eval.PARAMETRE_EVAL(nom=nom_param) if pos == None : pos = 0 self.etapes.insert(pos,objet) - self.editmode=0 self.reset_context() + self.editmode=0 self.active_etapes() CONNECTOR.Emit(self,"add",objet) self.fin_modif() @@ -189,13 +190,13 @@ class JDC(I_OBJECT.OBJECT): objet.parent.dict_niveaux[objet.nom_niveau_definition].register(objet) objet.niveau = objet.parent.dict_niveaux[objet.nom_niveau_definition] self.etapes.insert(pos,objet) + self.reset_context() # il faut vérifier que les concepts utilisés par objet existent bien # à ce niveau d'arborescence objet.verif_existence_sd() objet.update_mc_global() - self.active_etapes() self.editmode=0 - self.reset_context() + self.active_etapes() CONNECTOR.Emit(self,"add",objet) self.fin_modif() return objet @@ -211,8 +212,8 @@ class JDC(I_OBJECT.OBJECT): if pos == None : pos = 0 self.etapes.insert(pos,e) self.reset_current_step() - self.editmode=0 self.reset_context() + self.editmode=0 self.active_etapes() CONNECTOR.Emit(self,"add",e) self.fin_modif() @@ -568,6 +569,11 @@ class JDC(I_OBJECT.OBJECT): #print "reset_context",self,self.nom self.current_context={} self.index_etape_courante=0 + ind={} + for i,etape in enumerate(self.etapes): + ind[etape]=i + self.index_etapes=ind + # for etape in self.etapes: # etape.reset_context() @@ -752,6 +758,7 @@ class JDC(I_OBJECT.OBJECT): """ if not self.editmode: self.etapes.append(etape) + self.index_etapes[etape] = len(self.etapes) - 1 else: pass return self.g_register(etape) diff --git a/Ihm/I_MACRO_ETAPE.py b/Ihm/I_MACRO_ETAPE.py index 0ab72b58..7e58aa03 100644 --- a/Ihm/I_MACRO_ETAPE.py +++ b/Ihm/I_MACRO_ETAPE.py @@ -110,7 +110,10 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.text_converted=0 self.text_error="" if self.nom != "INCLUDE_MATERIAU": - format=self.jdc.appli.format_fichier.get() + if self.parent.appli.ihm == "QT" : + format=self.jdc.appli.format_fichier + else : + format=self.jdc.appli.format_fichier.get() if convert.plugins.has_key(format): # Le convertisseur existe on l'utilise p=convert.plugins[format]() @@ -767,7 +770,6 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): #print "make_include",unite # On supprime l'attribut unite qui bloque l'evaluation du source de l'INCLUDE # car on ne s'appuie pas sur lui dans EFICAS mais sur l'attribut fichier_ini - del self.unite # Si unite n'a pas de valeur, l'etape est forcement invalide. On peut retourner None if not unite : return diff --git a/InterfaceQT/__init__.py b/InterfaceQT/__init__.py new file mode 100644 index 00000000..21d22fbc --- /dev/null +++ b/InterfaceQT/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce package contient les fonctionnalités nécessaires + pour l'éditeur graphique QT +""" diff --git a/InterfaceQT/browser.py b/InterfaceQT/browser.py new file mode 100644 index 00000000..e149adc5 --- /dev/null +++ b/InterfaceQT/browser.py @@ -0,0 +1,510 @@ +# -*- coding: utf-8 -*- +import os,sys,string,re,types,traceback + +from qt import * +import utilIcons + + +class JDCTree( QListView ): + def __init__( self, jdc_item, parent = None ): + QListView.__init__( self, parent ) + + self.item = jdc_item + self.tree = self + self.editor = parent + self.racine = self + self.node_selected = None + self.children = self.build_children() + + self.setCaption(self.trUtf8('Browser')) + self.setRootIsDecorated(1) + self.setSorting(-1) + self.addColumn(self.trUtf8('Commande')) + self.addColumn(self.trUtf8('Concept/Valeur')) + + self.setMinimumSize(QSize(400,500)) + self.connect(self,SIGNAL('contextMenuRequested(QListViewItem *, const QPoint &, int)'), + self.handleContextMenu) + + #self.connect(self, SIGNAL("onItem ( QListViewItem * ) "), self.handleOnItem) + self.connect(self, SIGNAL("clicked ( QListViewItem * ) "), self.handleOnItem) + self.connect(self, SIGNAL('mouseButtonPressed(int, QListViewItem*, const QPoint&, int)'), + self.handleNommeItem) + + + def handleContextMenu(self,itm,coord,col): + """ + Private slot to show the context menu of the listview. + + @param itm the selected listview item (QListViewItem) + @param coord the position of the mouse pointer (QPoint) + @param col the column of the mouse pointer (int) + """ + try: + if itm.menu: + itm.menu.popup(coord) + except: + pass + + def handleNommeItem(self,bouton,itm,coord,col): + """ + PN --> a finir eventuellement pour nommer + le concept dans l arbre + """ + try : + if itm : + panel=itm.getPanel() + if panel.node.item.object.get_type_produit() != None : + pass + except: + pass + + def handleOnItem(self, item ): + try : + fr = item.item.get_fr() + if self.editor: + self.editor.affiche_infos(fr) + except: + pass + + def build_children(self): + """ Construit la liste des enfants de self """ + children = [] + child = self.item.itemNode(self,self.item) + children.append(child) + child.state='expanded' + return children + + def supprime(self): + """ supprime tous les elements de l'arbre """ + raise RuntimeError, 'Not implemented' + self.tree = None + self.racine = None + self.node_selected = None + self.item = None + self.scrolledcanvas = None + for child in self.children: + child.supprime() + self.children=[] + + def showEvent(self, event): + """ QT : pour afficher le 1er niveau d'arborescence de l''arbre""" + self.children[0].select() + + def update(self): + """ Update tous les elements de l'arbre """ + for child in self.children: + child.update() + +# type de noeud +COMMENT = "COMMENTAIRE" +PARAMETERS = "PARAMETRE" + + +class JDCNode(QListViewItem): + def __init__( self, parent, item, after=None, bold=0): + """ + Constructor + + @param parent parent Browser or BrowserNode + @param text text to be displayed by this node (string or QString) + @param after sibling this node is positioned after + @param bold flag indicating a highlighted font + """ + self.item = item + self.parent = parent + self.tree = self.parent.tree + self.editor = self.parent.tree.editor + self.bold = bold + + name = self.tree.trUtf8( str( item.GetLabelText()[0] ) ) + value = self.tree.trUtf8( str( item.GetText() ) ) + + if after is None: + QListViewItem.__init__(self,parent) + self.setText(0, name ) + self.setText(1, value ) + else: + QListViewItem.__init__(self,parent, after) + self.setText(0, name ) + self.setText(1, value) + + p = utilIcons.getPixmap(item.GetIconName() + ".gif") + self.setPixmap(0,p) + self.setExpandable(item.IsExpandable()) + + self.connect() + self.init() + self.createPopUpMenu() + + + def paintCell(self, p, cg, column, width, alignment): + """ + Overwritten class to set a different text color, if bold is true. + + @param p the painter (QPainter) + @param cg the color group (QColorGroup) + @param column the column (int) + @param width width of the cell (int) + @param alignment alignment of the cell (int) + """ + _cg = QColorGroup(cg) + c = _cg.text() + + if self.bold and column == 0: + _cg.setColor(QColorGroup.Text, Qt.red) + + QListViewItem.paintCell(self, p, _cg, column, width, alignment) + + _cg.setColor(QColorGroup.Text, c) + + + def setOpen(self, o): + """ + Public slot to set/reset the open state. + + @param o flag indicating the open state + """ + if o: + if not self.children : + self.build_children() + self.selected = 1 + self.tree.node_selected = self + else: + + for child in self.children: + self.takeItem(child) + del child + self.children = [] + QListViewItem.setOpen(self,o) + self.tree.setSelected(self,o) + + + #---------------------------------------------------------- + # interface a implementer par les noeuds derives (debut) + #---------------------------------------------------------- + def getPanel(self): + print self.__class__ + return None + + def createPopUpMenu(self): + pass + + #---------------------------------------------------- + # interface a implementer par les noeuds derives (fin) + #---------------------------------------------------- + + def init(self): #CS_pbruno toclean + self.state='collapsed' + self.displayed = 0 + self.selected = 0 + self.x = self.y =None + self.lasty = 0 + self.children = [] + self.id = [] + if self.parent is self.tree: + self.racine=self + else: + self.racine = self.parent.racine + + def connect(self): + self.item.connect("add",self.onAdd,()) + self.item.connect("supp",self.onSupp,()) + self.item.connect("valid",self.onValid,()) + + + def commentIt(self): + """ + Cette methode a pour but de commentariser la commande pointee par self + """ + # On traite par une exception le cas ou l'utilisateur final cherche a désactiver + # (commentariser) un commentaire. + try : + pos=self.parent.children.index(self) + commande_comment = self.item.get_objet_commentarise() + # On signale au parent du panel (le JDCDisplay) une modification + self.editor.init_modif() + self.parent.children[pos].select() + except Exception,e: + traceback.print_exc() + QMessageBox.critical( self.parent, "TOO BAD",str(e)) + return + + def unCommentIt(self): + """ + Realise la decommentarisation de self + """ + try : + pos=self.parent.children.index(self) + commande,nom = self.item.uncomment() + self.editor.init_modif() + self.parent.children[pos].select() + except Exception,e: + QMessageBox.critical( self.editor, "Erreur !",str(e)) + return + + def addComment( self, after=True ): + """ + Ajoute un commentaire a l'interieur du JDC : + """ + self.editor.init_modif() + if after: + pos = 'after' + else: + pos = 'before' + return self.append_brother( COMMENT, pos ) + + def addParameters( self, after=True ): + """ + Ajoute un parametre a l'interieur du JDC : + """ + self.editor.init_modif() + if after: + pos = 'after' + else: + pos = 'before' + return self.append_brother( PARAMETERS, pos ) + + + + def select( self ): + """ + Rend le noeud courant (self) selectionne et deselectionne + tous les autres + """ + self.setOpen( True ) + + #------------------------------------------------------------------ + # Methodes de creation et destruction de noeuds + # Certaines de ces methodes peuvent etre appelees depuis l'externe + #------------------------------------------------------------------ + def append_brother(self,name,pos='after',retour='non'): + """ + Permet d'ajouter un objet frere a l'objet associe au noeud self + par defaut on l'ajoute immediatement apres + Methode externe + """ + # on veut ajouter le frere de nom name directement avant ou apres self +## print "*********** append_brother ", self.item.GetLabelText() + index = self.parent.children.index(self) + if pos == 'before': + index = index + elif pos == 'after': + index = index +1 + else: + print str(pos)," n'est pas un index valide pour append_brother" + return 0 + return self.parent.append_child(name,pos=index) + + def append_child(self,name,pos=None,verif='oui',retour='non'): + """ + Methode pour ajouter un objet fils a l'objet associe au noeud self. + On peut l'ajouter en debut de liste (pos='first'), en fin (pos='last') + ou en position intermediaire. + Si pos vaut None, on le place a la position du catalogue. + """ +## print "************** append_child ",self.item.GetLabelText() + if pos == 'first': + index = 0 + elif pos == 'last': + index = len(self.children) + elif type(pos) == types.IntType : + # position fixee + index = pos + elif type(pos) == types.InstanceType: + # pos est un item. Il faut inserer name apres pos + index = self.item.get_index(pos) +1 + elif type(name) == types.InstanceType: + index = self.item.get_index_child(name.nom) + else: + index = self.item.get_index_child(name) + obj=self.item.additem(name,index) #CS_pbruno emet le signal 'add' + #print obj + if obj is None:obj=0 + if obj == 0:return 0 + #print "append_child",index,self.children + child=self.children[index] + child.select() + return child + + def delete(self): + """ + Methode externe pour la destruction de l'objet associe au noeud + La mise a jour des noeuds est faite par onSupp sur notification + """ + self.editor.init_modif() + index = self.parent.children.index(self) - 1 + if index < 0 : index =0 + + parent=self.parent + ret=parent.item.suppitem(self.item) + if ret == 0:return + + brothers=parent.children + if brothers: + toselect=brothers[index] + else: + toselect=parent + toselect.select() + + #------------------------------------------------------------------ + def onValid(self): + self.update_node_valid() + self.update_node_label() + self.update_node_texte() + + + def onAdd(self,objet): + #print "NODE onAdd : un objet a ete ajoute aux fils de l'item ",self.item.GetLabelText() + old_nodes=self.children + self.update_nodes() + #self.select() + + def onSupp(self,objet): + #print "NODE onSupp : un objet a ete supprime des fils de l'item ",self.item.object,objet + old_nodes=self.children + self.update_nodes() + #self.select() + + def update_node_valid(self): + """Cette methode remet a jour la validite du noeud (icone) + Elle appelle isvalid + """ + #print 'NODE update_node_valid', self.item.GetLabelText() + p = utilIcons.getPixmap(self.item.GetIconName() + ".gif") + self.setPixmap(0,p) + + def update_node_label(self): #CS_pbruno todo + """ Met a jour le label du noeud """ + #print "NODE update_node_label", self.item.GetLabelText() + labeltext,fonte,couleur = self.item.GetLabelText() + self.setText(0, labeltext) + + def update_node_texte(self): + """ Met a jour les noms des SD et valeurs des mots-cles """ + #print "NODE update_node_texte", self.item.GetLabelText() + value = self.item.GetText() + self.setText(1, value) + + def update_nodes(self): + #print "NODE update_nodes ", self.item.GetLabelText() + self.setOpen( False ) + self.setOpen( True ) + #self.select() + + def update_texte(self): + """ Met a jour les noms des SD et valeurs des mots-cles """ + #print "NODE update_texte", self.item.GetLabelText() + self.update_node_texte() + if self.state == 'expanded' : + for child in self.children: + if child.displayed != 0 : child.update_texte() + + def update_valid(self) : + """Cette methode a pour but de mettre a jour la validite du noeud + et de propager la demande de mise a jour a son parent + """ + #print "NODE update_valid", self.item.GetLabelText() + #PN a reverifier SVP parent + self.update_node_valid() + try : + self.parent.update_valid() + except: + pass + + def supprime(self): + #print "NODE supprime",self.item.GetLabelText() + self.efface_node() + self.racine = None + if not self.children : return + for child in self.children: + child.supprime() + self.children=None + + def build_children(self): + """ Construit la liste des enfants de self """ + #print "NODE : Construit la liste des enfants de", self.item.GetLabelText() + self.children = [] + sublist = self.item._GetSubList() + if sublist : + last = None + for item in sublist : + child = item.itemNode(self, item, last) + last = child + self.children.append(child) + + + def doPasteCommande(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument qui est nécessairement + une commande + """ + parent=self.parent + #child = parent.item.append_child(objet_a_copier,self.item.getObject()) + child = self.append_brother(objet_a_copier,retour='oui') + #if child is None:return 0 + return child + + def doPasteMCF(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument (objet_a_copier) + Il s'agit forcément d'un mot clé facteur + """ + child = self.append_child(objet_a_copier,pos='first',retour='oui') + return child + + + + +if __name__=='__main__': + from qt import * + + + sys.path[:0]=['..','../Aster','../Aster/Cata' ] + + app = QApplication(sys.argv) + + fn = 'azAster.comm' + jdcName = os.path.basename(fn) + f=open(fn,'r') + text=f.read() + f.close() + print 'text',text + + from autre_analyse_cata import analyse_catalogue + from Cata import cataSTA8 + cata=cataSTA8 + fic_cata="../../Aster/Cata/cataSTA8/cata.py" + cata_ordonne ,list_simp_reel = analyse_catalogue(cata) + + + + j=cata.JdC( procedure=text, cata=cata, nom=jdcName, + cata_ord_dico=cata_ordonne ) + + j.compile() + if not j.cr.estvide(): + print j.cr + sys.exit() + + j.exec_compile() + if not j.cr.estvide(): + print j.cr + sys.exit() + + from Editeur import comploader + comploader.charger_composants(QT) + from Editeur import Objecttreeitem + jdc_item=Objecttreeitem.make_objecttreeitem( app, "nom", j) + + if jdc_item: + tree = JDCTree( jdc_item, None ) + + app.setMainWidget(tree) + app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + tree.show() + + res = app.exec_loop() + sys.exit(res) + + diff --git a/InterfaceQT/compobase.py b/InterfaceQT/compobase.py new file mode 100644 index 00000000..a287b7d2 --- /dev/null +++ b/InterfaceQT/compobase.py @@ -0,0 +1,3 @@ +from Editeur import Objecttreeitem +treeitem = Objecttreeitem.ObjectTreeItem +objet = None diff --git a/InterfaceQT/compobloc.py b/InterfaceQT/compobloc.py new file mode 100644 index 00000000..7c8b844d --- /dev/null +++ b/InterfaceQT/compobloc.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- + +from qt import * +from Editeur import Objecttreeitem + +import compofact +import browser + + +class Node(browser.JDCNode): + def getPanel(self): + """ + """ + from monMCFactPanel import MonMCFactPanel + return MonMCFactPanel(self,parent=self.editor) + + +class BLOCTreeItem(compofact.FACTTreeItem): + itemNode=Node + + def get_objet(self,name) : + for v in self.object.mc_liste: + if v.nom == name : return v + return None + + def iscopiable(self): + return 0 + + +import Accas +treeitem = BLOCTreeItem +objet = Accas.MCBLOC diff --git a/InterfaceQT/compocomm.py b/InterfaceQT/compocomm.py new file mode 100644 index 00000000..0656c95a --- /dev/null +++ b/InterfaceQT/compocomm.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +import string +from qt import * + +from Editeur import Objecttreeitem +import browser +import typeNode + + +class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel): + def getPanel( self ): + """ + """ + from monCommentairePanel import MonCommentairePanel + return MonCommentairePanel(self,parent=self.editor) + + def createPopUpMenu(self): + typeNode.PopUpMenuNodePartiel.createPopUpMenu(self) + if hasattr(self.item,'uncomment'): + self.menu.insertItem( qApp.translate('Browser','Decommenter'), self.unCommentIt ) + + def update_node_label(self) : + """ + """ + debComm=self.item.GetText() + self.setText(1,debComm) + + +class COMMTreeItem(Objecttreeitem.ObjectTreeItem): + itemNode=Node + + def init(self): + self.setfunction = self.set_valeur + + def GetIconName(self): + """ + Retourne le nom de l'icône associée au noeud qui porte self, + dépendant de la validité de l'objet + NB : un commentaire est toujours valide ... + """ + return "ast-white-percent" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + return 'commentaire' #CS_pbruno,Fonte_Commentaire,None + + def get_valeur(self): + """ + Retourne la valeur de l'objet Commentaire cad son texte + """ + return self.object.get_valeur() or '' + + def GetText(self): + texte = self.object.valeur + texte = string.split(texte,'\n')[0] + if len(texte) < 25 : + return texte + else : + return texte[0:24] + + def set_valeur(self,valeur): + """ + Afecte valeur à l'objet COMMENTAIRE + """ + self.object.set_valeur(valeur) + + def GetSubList(self): + """ + Retourne la liste des fils de self + """ + return [] + + + def get_objet_commentarise(self): + """ + La méthode get_objet_commentarise() de la classe compocomm.COMMTreeItem + surcharge la méthode get_objet_commentarise de la classe Objecttreeitem.ObjectTreeItem + elle a pour but d'empecher l'utilisateur final de commentariser un commentaire. + """ + raise Exception( 'Impossible de commentariser un commentaire' ) + +import Extensions +treeitem =COMMTreeItem +objet = Extensions.commentaire.COMMENTAIRE diff --git a/InterfaceQT/compocommandecomm.py b/InterfaceQT/compocommandecomm.py new file mode 100644 index 00000000..153f2b71 --- /dev/null +++ b/InterfaceQT/compocommandecomm.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +import traceback +import string + +from Editeur import Objecttreeitem +import compocomm + +class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem): + itemNode=compocomm.Node + + def init(self): + self.setfunction = self.set_valeur + + def GetIconName(self): + """ + Retourne le nom de l'icône associée au noeud qui porte self, + dépendant de la validité de l'objet + NB : une commande commentarisée est toujours valide ... + """ + if self.isvalid(): + return "ast-green-percent" + else: + return "ast-red-percent" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + return 'commentaire' + + def get_valeur(self): + """ + Retourne la valeur de la commande commentarisée cad son texte + """ + return self.object.get_valeur() or '' + + def GetText(self): + texte = self.object.valeur + texte = string.split(texte,'\n')[0] + if len(texte) < 25 : + return texte + else : + return texte[0:24] + + def set_valeur(self,valeur): + """ + Afefcte valeur à l'objet commande commentarisée + """ + self.object.set_valeur(valeur) + + def GetSubList(self): + """ + Retourne la liste des fils de self + """ + return [] + + def uncomment(self): + """ + Demande à l'objet commande commentarisée de se décommentariser. + Si l'opération s'effectue correctement, retourne l'objet commande + et éventuellement le nom de la sd produite, sinon lève une exception + """ + try: + commande,nom = self.object.uncomment() + #self.parent.children[pos].select() + except Exception,e: + traceback.print_exc() + raise e + return commande,nom + +import Accas +treeitem =COMMANDE_COMMTreeItem +objet = Accas.COMMANDE_COMM diff --git a/InterfaceQT/compoerror.py b/InterfaceQT/compoerror.py new file mode 100644 index 00000000..2f1821dc --- /dev/null +++ b/InterfaceQT/compoerror.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +from Tkinter import Label,Button + +#Modules Eficas +from Noyau.N_OBJECT import ErrorObj +from Editeur import Objecttreeitem +from desError import DError + +class ERRORTreeItem(Objecttreeitem.AtomicObjectTreeItem): + + panel = DError + def GetIconName(self): + return "ast-red-ball" + + +treeitem =ERRORTreeItem +objet = ErrorObj + diff --git a/InterfaceQT/compofact.py b/InterfaceQT/compofact.py new file mode 100644 index 00000000..7739e04a --- /dev/null +++ b/InterfaceQT/compofact.py @@ -0,0 +1,136 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +from qt import * +from Editeur import Objecttreeitem +import browser + + +class Node(browser.JDCNode): + def getPanel(self): + """ + """ + from monMCFactPanel import MonMCFactPanel + return MonMCFactPanel(self,parent=self.editor) + + def doPaste(self,node_selected): + objetACopier = self.item.get_copie_objet() + child=node_selected.doPasteMCF(objetACopier) + return child + + def doPasteMCF(self,objetACopier): + child = self.parent.append_child(objetACopier, + pos=self.item, + retour='oui') + return child + + +class FACTTreeItem(Objecttreeitem.ObjectTreeItem): + itemNode=Node + + def IsExpandable(self): + return 1 + + def GetText(self): + return '' + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + # None --> fonte et couleur par défaut + return self.object.getlabeltext(),None,None + + def isvalid(self): + return self.object.isvalid() + + def iscopiable(self): + return 1 + + def GetIconName(self): + if self.object.isvalid(): + return "ast-green-los" + elif self.object.isoblig(): + return "ast-red-los" + else: + return "ast-yel-los" + + def keys(self): + keys=self.object.mc_dict.keys() + return keys + + def GetSubList(self): + """ + Reactualise la liste des items fils stockes dans self.sublist + """ + liste=self.object.mc_liste + sublist=[None]*len(liste) + # suppression des items lies aux objets disparus + for item in self.sublist: + old_obj=item.getObject() + if old_obj in liste: + pos=liste.index(old_obj) + sublist[pos]=item + else: + pass # objets supprimes ignores + # ajout des items lies aux nouveaux objets + pos=0 + for obj in liste: + if sublist[pos] is None: + # nouvel objet : on cree un nouvel item + def setfunction(value, object=obj): + object.setval(value) + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction) + sublist[pos]=item + pos=pos+1 + + self.sublist=sublist + return self.sublist + + def additem(self,name,pos): + objet = self.object.addentite(name,pos) + return objet + + def suppitem(self,item) : + """ + Cette methode a pour fonction de supprimer l'item passee en argument + des fils de l'item FACT qui est son pere + - item = item du MOCLE a supprimer du MOCLE pere + - item.getObject() = MCSIMP ou MCBLOC + """ + itemobject=item.getObject() + if itemobject.isoblig() : + self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ') + return 0 + + if self.object.suppentite(itemobject): + message = "Mot-clé " + itemobject.nom + " supprimé" + self.appli.affiche_infos(message) + return 1 + else: + self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé') + return 0 + +import Accas +objet = Accas.MCFACT +treeitem = FACTTreeItem diff --git a/InterfaceQT/compoformule.py b/InterfaceQT/compoformule.py new file mode 100644 index 00000000..02dcdc0d --- /dev/null +++ b/InterfaceQT/compoformule.py @@ -0,0 +1,180 @@ +# -*- coding: utf-8 -*- + +""" +Ce module contient les classes permettant de définir les objets graphiques +représentant un objet de type FORMULE, cad le panneau et l'item de l'arbre +d'EFICAS +""" + +import string +from qt import * +import compooper +import browser +import typeNode + + +class FormuleNode(browser.JDCNode,typeNode.PopUpMenuNode): + + def getPanel(self): + + from monFormulePanel import MonFormulePanel + return MonFormulePanel(self,parent=self.editor) + + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + + +class FORMULETreeItem(compooper.EtapeTreeItem): + """ + Classe servant a définir l'item porté par le noeud de l'arbre d'EFICAS + qui représente la FORMULE + """ + itemNode=FormuleNode + + def init(self): + self.setfunction = self.set_valeur + +# --------------------------------------------------------------------------- +# API de FORMULE pour l'arbre +# --------------------------------------------------------------------------- + def GetSubList(self): + """ + Retourne la liste des fils de self + On considére que FORMULE n'a pas de fils + --> modification par rapport a MACRO classique + """ + # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE + # de façon traditionnelle + return [] + + def GetIconName(self): + """ + Retourne le nom de l'icone à afficher dans l'arbre + Ce nom dépend de la validité de l'objet + """ + if self.object.isactif(): + self.object.state="modified" + if self.object.isvalid(): + return "ast-green-square" + else: + return "ast-red-square" + else: + return "ast-white-text" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte a afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + if self.object.isactif(): + # None --> fonte et couleur par défaut + return self.labeltext,None,None + else: + return self.labeltext,None,None + #return self.labeltext,fontes.standard_italique,None + +# --------------------------------------------------------------------------- +# Méthodes permettant la modification et la lecture des attributs +# du paramètre = API graphique de la FORMULE pour Panel et EFICAS +# --------------------------------------------------------------------------- + + def get_nom(self): + """ + Retourne le nom de la FORMULE + """ + return self.object.get_nom() + + def get_type(self): + """ + Retourne le type de la valeur retournée par la FORMULE + """ + return self.object.type_retourne + + def get_args(self): + """ + Retourne les arguments de la FORMULE + """ + args="" + for mot in self.object.mc_liste: + if mot.nom == 'NOM_PARA': + args=mot.valeur + break + if args : + if args[0] == "(" and args[-1] ==")": + args=args[1:-1] + # transforme en tuple si ce n est pas déja le casa + try : + args=string.split(args,',') + except : + pass + return args + + def get_corps(self): + """ + Retourne le corps de la FORMULE + """ + corps="" + for mot in self.object.mc_liste: + if mot.nom == 'VALE': + corps=mot.valeur + break + return corps + + + def get_liste_types_autorises(self): + """ + Retourne la liste des types autorises pour les valeurs de sortie + d'une FORMULE + """ + return self.object.l_types_autorises + + def save_formule(self,new_nom,new_typ,new_arg,new_exp): + """ + Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE + licite : + - si oui, stocke ces paramètres comme nouveaux paramètres de la + FORMULE courante et retourne 1 + - si non, laisse les paramètres anciens de la FORMULE inchangés et + retourne 0 + """ + test,erreur = self.object.verif_formule_python(formule=(new_nom,new_typ,new_arg, + new_exp)) + if test : + # la formule est bien correcte : on sauve les nouveaux paramètres + test=self.object.update_formule_python(formule=(new_nom,new_typ,new_exp,new_arg)) + return test,erreur + +# --------------------------------------------------------------------------- +# Accès aux méthodes de vérification de l'objet FORM_ETAPE +# --------------------------------------------------------------------------- + + def verif_nom(self,nom): + """ + Lance la vérification du nom passé en argument + """ + return self.object.verif_nom(nom) + + def verif_arguments(self,arguments): + """ + Lance la vérification des arguments passés en argument + """ + return self.object.verif_arguments('('+arguments+')') + + def verif_formule(self,formule): + """ + Lance la vérification de FORMULE passée en argument + """ + return self.object.verif_formule(formule=formule) + + + def verif_formule_python(self,formule): + """ + Lance la vérification de FORMULE passée en argument + """ + return self.object.verif_formule_python(formule=formule) + +import Accas +treeitem =FORMULETreeItem +objet = Accas.FORM_ETAPE diff --git a/InterfaceQT/compojdc.py b/InterfaceQT/compojdc.py new file mode 100644 index 00000000..1cd49081 --- /dev/null +++ b/InterfaceQT/compojdc.py @@ -0,0 +1,116 @@ +# -*- coding: utf-8 -*- + +from qt import * +from Editeur import Objecttreeitem +import browser + + +class Node(browser.JDCNode): + def getPanel(self): + """ + """ + from monRacinePanel import MonRacinePanel + return MonRacinePanel(self,parent=self.editor) + + def doPasteCommande(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument qui est nécessairement + une commande + """ + child = self.append_child(objet_a_copier,pos='first',retour='oui') + return child + + +class JDCTreeItem(Objecttreeitem.ObjectTreeItem): + itemNode=Node + + def IsExpandable(self): + return 1 + + def GetText(self): + return " " + + def GetLabelText(self): + # None --> fonte et couleur par défaut + return self.object.nom,None,None + + def get_jdc(self): + """ + Retourne l'objet pointé par self + """ + return self.object + + def GetIconName(self): + if self.object.isvalid(): + return "ast-green-square" + else: + return "ast-red-square" + + def keys(self): + if self.object.etapes_niveaux != []: + return range(len(self.object.etapes_niveaux)) + else: + return range(len(self.object.etapes)) + + def additem(self,name,pos): + cmd = self._object.addentite(name,pos) + return cmd + + def suppitem(self,item) : + # item = item de l'ETAPE à supprimer du JDC + # item.getObject() = ETAPE ou COMMENTAIRE + # self.object = JDC + + itemobject=item.getObject() + if self.object.suppentite(itemobject): + if itemobject.nature == "COMMENTAIRE" : + message = "Commentaire supprimé" + else : + message = "Commande " + itemobject.nom + " supprimée" + self.appli.affiche_infos(message) + return 1 + else: + self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet") + return 0 + + def GetSubList(self): + """ + Retourne la liste des items fils de l'item jdc. + Cette liste est conservee et mise a jour a chaque appel + """ + if self.object.etapes_niveaux != []: + liste = self.object.etapes_niveaux + else: + liste = self.object.etapes + sublist=[None]*len(liste) + # suppression des items lies aux objets disparus + for item in self.sublist: + old_obj=item.getObject() + if old_obj in liste: + pos=liste.index(old_obj) + sublist[pos]=item + else: + pass # objets supprimes ignores + # ajout des items lies aux nouveaux objets + pos=0 + for obj in liste: + if sublist[pos] is None: + # nouvel objet : on cree un nouvel item + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj) + sublist[pos]=item + pos=pos+1 + + self.sublist=sublist + return self.sublist + + def get_l_noms_etapes(self): + """ Retourne la liste des noms des étapes de self.object""" + return self.object.get_l_noms_etapes() + + def get_liste_cmd(self): + listeCmd = self.object.niveau.definition.get_liste_cmd() + return listeCmd + +import Accas +treeitem =JDCTreeItem +objet = Accas.JDC diff --git a/InterfaceQT/compomacro.py b/InterfaceQT/compomacro.py new file mode 100644 index 00000000..74e2f59a --- /dev/null +++ b/InterfaceQT/compomacro.py @@ -0,0 +1,154 @@ +# -*- coding: utf-8 -*- + +# Modules Python +import os,sys,string +import types +import traceback +from qt import * + +# Modules Eficas +from Editeur import Objecttreeitem +import compooper +import browser +import typeNode + + +class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode): + def getPanel(self): + from monMacroPanel import MonMacroPanel + return MonMacroPanel (self,parent=self.editor ) + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + + +class MACROTreeItem(compooper.EtapeTreeItem): +# """ Cette classe hérite d'une grande partie des comportements +# de la classe compooper.EtapeTreeItem +# """ + itemNode=MACRONode + +# ------------------------------------ +# Classes necessaires à INCLUDE +# ------------------------------------ + +class INCLUDETreeItemBase(MACROTreeItem): + + def __init__(self,appli, labeltext, object, setfunction): + MACROTreeItem.__init__(self,appli, labeltext, object, setfunction) + + def iscopiable(self): + return 0 + + +class INCLUDENode(browser.JDCNode,typeNode.PopUpMenuNode): + def getPanel(self): + from monIncludePanel import MonIncludePanel + return MonIncludePanel (self,parent=self.editor ) + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + self.menu.insertItem( qApp.translate('Browser','Edit'), self.makeEdit ) + + def makeEdit(self): #,appli,node + if self.item.object.text_converted == 0: + # Le texte du fichier inclus n'a pas pu etre converti par le module convert + msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n" + msg=msg+self.item.object.text_error + return + + if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None: + #L'include n'est pas initialise + self.item.object.build_include(None,"") + + # On cree un nouvel onglet dans le bureau + self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom ) + + +class INCLUDETreeItem(INCLUDETreeItemBase): + itemNode=INCLUDENode + + +# ------------------------------------ +# Classes necessaires à POURSUITE +# ------------------------------------ + +class POURSUITENode(browser.JDCNode, typeNode.PopUpMenuNode): + def getPanel(self): + from monPoursuitePanel import MonPoursuitePanel + return MonPoursuitePanel (self,parent=self.editor ) + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + self.menu.insertItem( qApp.translate('Browser','Edit'), self.makeEdit ) + + def makeEdit(self): #,appli,node + if self.item.object.text_converted == 0: + msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n" + msg=msg+self.item.object.text_error + return + + if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None: + text="""DEBUT() + FIN()""" + self.object.build_poursuite(None,text) + + # On cree un nouvel onglet dans le bureau + self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom) + +class POURSUITETreeItem(INCLUDETreeItemBase): + itemNode=POURSUITENode + + +# ---------------------------------------- +# Classes necessaires à INCLUDE MATERIAU +# ---------------------------------------- + + +class MATERIAUNode(MACRONode): + + def getPanel(self): + from monMacroPanel import MonMacroPanel + return MonMacroPanel (self,parent=self.editor ) + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + self.menu.insertItem( qApp.translate('Browser','View'), self.makeView ) + + def makeView(self) : + if hasattr(self.item.object,'fichier_ini') and self.item.object.fichier_ini==None: + QMessageBox.information( self, "Include vide","L'include doit etre correctement initialisé pour etre visualisé") + return + f = open(self.item.object.fichier_ini, "rb") + texte = f.read() + f.close() + from desVisu import DVisu + monVisu=DVisu(parent=self.editor,fl=Qt.WType_Dialog) + monVisu.TB.setText(texte) + monVisu.show() + +class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase): + itemNode=MATERIAUNode + +# ------------------------------------ +# TreeItem +# ------------------------------------ + + +def treeitem(appli, labeltext, object, setfunction=None): + """ Factory qui retourne l'item adapte au type de macro : + INCLUDE, POURSUITE, MACRO + """ + if object.nom == "INCLUDE_MATERIAU": + return INCLUDE_MATERIAUTreeItem(appli, labeltext, object, setfunction) + elif object.nom == "INCLUDE": + return INCLUDETreeItem(appli, labeltext, object, setfunction) + elif object.nom == "POURSUITE": + return POURSUITETreeItem(appli, labeltext, object, setfunction) + else: + return MACROTreeItem(appli, labeltext, object, setfunction) + +import Accas +objet=Accas.MACRO_ETAPE + + diff --git a/InterfaceQT/compomclist.py b/InterfaceQT/compomclist.py new file mode 100644 index 00000000..65bdad03 --- /dev/null +++ b/InterfaceQT/compomclist.py @@ -0,0 +1,205 @@ +# -*- coding: utf-8 -*- + +import types +import traceback + +from qt import * + +import compofact +import browser +from Editeur import Objecttreeitem +from Noyau.N_OBJECT import ErrorObj +#import compoerror + + +class Node(browser.JDCNode): + def getPanel(self): + """ + """ + if self.item.isMCList() : + if self.item.ajout_possible(): + from monMCListAjoutPanel import MonMCListAjoutPanel + return MonMCListAjoutPanel(self,parent=self.editor) + else : + print "MCList" + elif self.item.isMCFact() : + from monMCFactPanel import MonMCFactPanel + return MonMCFactPanel(self,parent=self.editor) + else : + print "MCList" + + def doPaste(self,node_selected): + objet_a_copier = self.item.get_copie_objet() + child=node_selected.doPasteMCF(objet_a_copier) + #print "doPaste",child + return child + + def doPasteMCF(self,objet_a_copier): + child=None + # le noeud courant est une MCList + if self.item.isMCList() : + child = self.append_child(objet_a_copier,pos='first',retour='oui') + + # le noeud courant est un MCFACT + elif self.item.isMCFact() : + # le noeud selectionne est un MCFACT dans une MCList + if self.parent.item.isMCList(): + child = self.parent.append_child(objet_a_copier, + pos=self.item, + retour='oui') + + # le noeud MCFACT selectionne n'est pas dans une MCList + else: + child = self.parent.append_child(objet_a_copier,retour='oui') + + else: + QMessageBox.information( self, "Copie impossible", + "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !") + self.editor.affiche_infos("Copie refusée") + + return child + +class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem): + """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets + du noyau Accas instances de la classe MCLIST. + Elle adapte ces objets pour leur permettre d'etre intégrés en tant que + noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py). + Cette classe délègue les appels de méthode et les accès + aux attributs à l'objet du noyau soit manuellement soit + automatiquement (voir classe Delegate et attribut object). + """ + itemNode=Node + + def init(self): + # Si l'objet Accas (MCList) a moins d'un mot cle facteur + # on utilise directement ce mot cle facteur comme delegue + self.updateDelegate() + + def updateDelegate(self): + if len(self._object) > 1: + self.setdelegate(self._object) + else: + self.setdelegate(self._object.data[0]) + + def panel(self,jdcdisplay,pane,node): + """ Retourne une instance de l'objet panneau associe a l'item (self) + Si la liste ne contient qu'un mot clé facteur, on utilise le panneau + FACTPanel. + Si la liste est plus longue on utilise le panneau MCLISTPanel. + """ + if len(self._object) > 1: + return MCLISTPanel(jdcdisplay,pane,node) + elif isinstance(self._object.data[0],ErrorObj): + return compoerror.ERRORPanel(jdcdisplay,pane,node) + else: + return compofact.FACTPanel(jdcdisplay,pane,node) + + def IsExpandable(self): + if len(self._object) > 1: + return Objecttreeitem.SequenceTreeItem.IsExpandable(self) + else: + return compofact.FACTTreeItem.IsExpandable(self) + + def GetSubList(self): + self.updateDelegate() + if len(self._object) <= 1: + self._object.data[0].alt_parent=self._object + return compofact.FACTTreeItem.GetSubList(self) + + liste=self._object.data + sublist=[None]*len(liste) + # suppression des items lies aux objets disparus + for item in self.sublist: + old_obj=item.getObject() + if old_obj in liste: + pos=liste.index(old_obj) + sublist[pos]=item + else: + pass # objets supprimes ignores + # ajout des items lies aux nouveaux objets + pos=0 + for obj in liste: + if sublist[pos] is None: + # nouvel objet : on cree un nouvel item + def setfunction(value, object=obj): + object=value + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction) + sublist[pos]=item + #Attention : on ajoute une information supplementaire pour l'actualisation de + # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE + # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des + # informations de validite. alt_parent permet de remedier a ce defaut. + obj.alt_parent=self._object + pos=pos+1 + + self.sublist=sublist + return self.sublist + + def GetIconName(self): + if self._object.isvalid(): + return "ast-green-los" + elif self._object.isoblig(): + return "ast-red-los" + else: + return "ast-yel-los" + + def get_docu(self): + """ Retourne la clef de doc de l'objet pointé par self """ + return self.object.get_docu() + + def iscopiable(self): + if len(self._object) > 1: + return Objecttreeitem.SequenceTreeItem.iscopiable(self) + else: + return compofact.FACTTreeItem.iscopiable(self) + + def isMCFact(self): + """ + Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon + """ + return len(self._object) <= 1 + + def isMCList(self): + """ + Retourne 1 si l'objet pointé par self est une MCList, 0 sinon + """ + return len(self._object) > 1 + + def get_copie_objet(self): + return self._object.data[0].copy() + + def additem(self,obj,pos): + #print "compomclist.additem",obj,pos + if len(self._object) <= 1: + return compofact.FACTTreeItem.additem(self,obj,pos) + + o= self.object.addentite(obj,pos) + return o + + def suppitem(self,item): + """ + Retire un objet MCFACT de la MCList (self.object) + """ + #print "compomclist.suppitem",item + obj=item.getObject() + if len(self._object) <= 1: + return compofact.FACTTreeItem.suppitem(self,item) + + if self.object.suppentite(obj): + if len(self._object) == 1: self.updateDelegate() + message = "Mot-clef " + obj.nom + " supprimé" + self.appli.affiche_infos(message) + return 1 + else: + self.appli.affiche_infos('Impossible de supprimer ce mot-clef') + return 0 + + +import Accas +objet = Accas.MCList + +def treeitem(appli,labeltext,object,setfunction): + """ Factory qui produit un objet treeitem adapte a un objet + Accas.MCList (attribut objet de ce module) + """ + return MCListTreeItem(appli,labeltext,object,setfunction) diff --git a/InterfaceQT/componiveau.py b/InterfaceQT/componiveau.py new file mode 100644 index 00000000..866d585e --- /dev/null +++ b/InterfaceQT/componiveau.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- + +from qt import * +from Editeur import Objecttreeitem +from Extensions import commentaire +import browser + +class Node(browser.JDCNode): + pass + +class NIVEAUTreeItem(Objecttreeitem.ObjectTreeItem): + itemNode=Node + + def isactif(self): + return self.object.isactif() + + def IsExpandable(self): + return 1 + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + if self.isactif(): + fonte = Fonte_Niveau + else : + fonte = Fonte_Niveau_inactif + return self.labeltext,fonte,'#00008b' + + def GetIconName(self): + if self.isactif(): + if self.object.isvalid(): + return "ast-green-text" + else: + return "ast-red-text" + else: + return "ast-white-text" + + def keys(self): + if self.object.etapes_niveaux != []: + return range(len(self.object.etapes_niveaux)) + else: + return range(len(self.object.etapes)) + + def GetSubList(self): + sublist=[] + for key in self.keys(): + if self.object.etapes_niveaux != []: + liste = self.object.etapes_niveaux + else: + liste = self.object.etapes + try: + value = liste[key] + except KeyError: + continue + def setfunction(value, key=key, object=liste): + object[key] = value + item =self.make_objecttreeitem(self.appli,value.ident() + " : ", value, setfunction) + sublist.append(item) + return sublist + + def additem(self,name,pos): + if isinstance(name,Objecttreeitem.TreeItem) : + cmd=self.object.addentite(name.getObject(),pos) + else : + cmd = self.object.addentite(name,pos) + item = self.make_objecttreeitem(self.appli,cmd.nom + " : ", cmd) + return item + + def suppitem(self,item) : + # item = item de l'ETAPE à supprimer du JDC + # item.getObject() = ETAPE ou COMMENTAIRE + # self.object = JDC + itemobject=item.getObject() + if self.object.suppentite(itemobject): + if isinstance(item.object,commentaire.COMMENTAIRE): + message = "Commentaire supprimé" + else : + message = "Commande " + itemobject.nom + " supprimée" + self.appli.affiche_infos(message) + return 1 + else: + self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet") + return 0 + + def GetText(self): + return '' + + +import Accas +treeitem = NIVEAUTreeItem +objet = Accas.ETAPE_NIVEAU diff --git a/InterfaceQT/componuplet.py b/InterfaceQT/componuplet.py new file mode 100644 index 00000000..649ce0e2 --- /dev/null +++ b/InterfaceQT/componuplet.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import types +from repr import Repr +from copy import copy,deepcopy + +# Modules Eficas +from Editeur import Objecttreeitem + +myrepr = Repr() +myrepr.maxstring = 100 +myrepr.maxother = 100 + +# Si Expandable vaut 1 les éléments du nuplet apparaissent dans l'arbre +# Si Expandable vaut 0 les éléments n'apparaissent pas +Expandable=1 + + +import browser +from qt import * + +class Node(browser.JDCNode): pass +## def getPanel(self): +## """ +## """ +## return NUPLETPanel( self, self.editor ) + + +class NUPLETTreeItem(Objecttreeitem.ObjectTreeItem): +## panel=NUPLETPanel + itemNode=Node + + def IsExpandable(self): + return Expandable + + def GetText(self): + return '' + + def isvalid(self): + return self.object.isvalid() + + def GetIconName(self): + if self.object.isvalid(): + return "ast-green-los" + elif self.object.isoblig(): + return "ast-red-los" + else: + return "ast-yel-los" + + def GetSubList(self): + if not Expandable:return [] + sublist=[] + for obj in self.object.mc_liste: + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, None) + sublist.append(item) + return sublist + + def additem(self,name,pos): + raise "NUPLET" + + def suppitem(self,item) : + raise "NUPLET" + +import Accas +treeitem=NUPLETTreeItem +objet=Accas.MCNUPLET diff --git a/InterfaceQT/compooper.py b/InterfaceQT/compooper.py new file mode 100644 index 00000000..9112f96b --- /dev/null +++ b/InterfaceQT/compooper.py @@ -0,0 +1,260 @@ +# -*- coding: utf-8 -*- + +import traceback +import string + +from qt import * + +from Editeur import Objecttreeitem +import browser +import typeNode + +class Node(browser.JDCNode, typeNode.PopUpMenuNode): + def getPanel( self ): + """ + """ + from monCommandePanel import MonCommandePanel + return MonCommandePanel(self,parent=self.editor) + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + if ("AFFE_CARA_ELEM" in self.item.get_genealogie()) and self.editor.salome: + self.menu.insertItem( 'View3D', self.view3D ) + + def doPaste(self,node_selected): + """ + Déclenche la copie de l'objet item avec pour cible + l'objet passé en argument : node_selected + """ + objet_a_copier = self.item.get_copie_objet() + child=node_selected.doPasteCommande(objet_a_copier) + return child + + def doPasteCommande(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument qui est nécessairement + une commande + """ + parent=self.parent + #child = parent.item.append_child(objet_a_copier,self.item.getObject()) + child = self.append_brother(objet_a_copier,retour='oui') + #if child is None:return 0 + return child + + def doPasteMCF(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument (objet_a_copier) + Il s'agit forcément d'un mot clé facteur + """ + child = self.append_child(objet_a_copier,pos='first',retour='oui') + return child + + def view3D(self) : + from Editeur import TroisDPal + troisD=TroisDPal.TroisDPilote(self.item,self.editor.parent.appliEficas) + troisD.envoievisu() + + +class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): + """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau + Accas. Elle leur permet d'etre affichés comme des noeuds + d'un arbre graphique. + Cette classe a entre autres deux attributs importants : + - _object qui est un pointeur vers l'objet du noyau + - object qui pointe vers l'objet auquel sont délégués les + appels de méthode et les acces aux attributs + Dans le cas d'une ETAPE, _object et object pointent vers le + meme objet. + """ + itemNode=Node + + def IsExpandable(self): + return 1 + + def GetIconName(self): + """ + Retourne le nom de l'icone a afficher dans l'arbre + Ce nom dépend de la validité de l'objet + """ + if not self.object.isactif(): + return "ast-white-square" + elif self.object.isvalid(): + return "ast-green-square" + else: + valid=self.valid_child() + valid=valid * self.valid_regles("non") + if self.reste_val != {}: + valid=0 + if valid==0 : + return "ast-red-square" + else : + try : + # on traite ici le cas d include materiau + # print self.object.definition.nom + if self.object.fichier_ini != self.object.nom_mater : + return "ast-red-square" + except : + pass + return "ast-yellow-square" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte a afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + if self.object.isactif(): + # None --> fonte et couleur par défaut + return self.labeltext,None,None + else: + return self.labeltext, None, None #CS_pbruno todo + + def get_objet(self,name) : + for v in self.object.mc_liste: + if v.nom == name : return v + return None + + def get_type_sd_prod(self): + """ + Retourne le nom du type du concept résultat de l'étape + """ + sd_prod=self.object.get_type_produit() + if sd_prod: + return sd_prod.__name__ + else: + return "" + + def additem(self,name,pos): + mcent = self._object.addentite(name,pos) + return mcent + + + def suppitem(self,item) : + # item : item du MOCLE de l'ETAPE a supprimer + # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList + itemobject=item.getObject() + if itemobject.isoblig() : + self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ') + return 0 + if self.object.suppentite(itemobject): + message = "Mot-clé " + itemobject.nom + " supprimé" + self.appli.affiche_infos(message) + return 1 + else : + self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé') + return 0 + + def GetText(self): + try: + return self.object.get_sdname() + except: + return '' + + def keys(self): + keys=self.object.mc_dict.keys() + return keys + + def GetSubList(self): + """ + Reactualise la liste des items fils stockes dans self.sublist + """ + if self.isactif(): + liste=self.object.mc_liste + else: + liste=[] + + sublist=[None]*len(liste) + # suppression des items lies aux objets disparus + for item in self.sublist: + old_obj=item.getObject() + if old_obj in liste: + pos=liste.index(old_obj) + sublist[pos]=item + else: + pass # objets supprimes ignores + + # ajout des items lies aux nouveaux objets + pos=0 + for obj in liste: + if sublist[pos] is None: + # nouvel objet : on cree un nouvel item + def setfunction(value, object=obj): + object.setval(value) + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction) + sublist[pos]=item + pos=pos+1 + + self.sublist=sublist + return self.sublist + + def isvalid(self): + return self.object.isvalid() + + def iscopiable(self): + """ + Retourne 1 si l'objet est copiable, 0 sinon + """ + return 1 + + def update(self,item): + if item.sd and item.sd.nom: + self.nomme_sd(item.sd.nom) + + def nomme_sd(self,nom): + """ Lance la méthode de nommage de la SD """ + oldnom="" + if self.object.sd != None : + oldnom=self.object.sd.nom + test,mess= self.object.nomme_sd(nom) + if test:self.object.parent.reset_context() + if (test and self.appli.dict_reels.has_key(oldnom) ): + self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom] + return test,mess + + def is_reentrant(self): + return self.object.is_reentrant() + + def get_noms_sd_oper_reentrant(self): + return self.object.get_noms_sd_oper_reentrant() + + def get_objet_commentarise(self): + """ + Cette méthode retourne un objet commentarisé + représentatif de self.object + """ + # Format de fichier utilisé + format=self.appli.format_fichier + return self.object.get_objet_commentarise(format) + + def get_objet_commentarise_BAK(self): + """ + Cette méthode retourne un objet commentarisé + représentatif de self.object + """ + import generator,string,Accas + # Format de fichier utilisé + format=self.appli.format_fichier + g=generator.plugins[format]() + texte_commande = g.gener(self.object,format='beautifie') + # Il faut enlever la premiere ligne vide de texte_commande que + # rajoute le generator + rebut,texte_commande = string.split(texte_commande,'\n',1) + # on construit l'objet COMMANDE_COMM repésentatif de self mais non + # enregistré dans le jdc + commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non', + parent=self.object.parent) + commande_comment.niveau = self.object.niveau + commande_comment.jdc = commande_comment.parent = self.object.jdc + + pos=self.object.parent.etapes.index(self.object) + parent=self.object.parent + self.object.parent.suppentite(self.object) + parent.addentite(commande_comment,pos) + + return commande_comment + + +import Accas +treeitem = EtapeTreeItem +objet = Accas.ETAPE + diff --git a/InterfaceQT/compoparam.py b/InterfaceQT/compoparam.py new file mode 100644 index 00000000..4c3fb26b --- /dev/null +++ b/InterfaceQT/compoparam.py @@ -0,0 +1,123 @@ +# -*- coding: utf-8 -*- +""" + Ce module contient les classes permettant de définir les objets graphiques + représentant un objet de type PARAMETRE, cad le panneau et l'item de l'arbre + d'EFICAS +""" + +# import modules Python +import string +from qt import * + +# import modules EFICAS +from Editeur import Objecttreeitem +import browser +import typeNode + + +class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel): + def getPanel(self): + """ + """ + from monParamPanel import MonParamPanel + return MonParamPanel(self, parent=self.editor ) + + def createPopUpMenu(self): + typeNode.PopUpMenuNodePartiel.createPopUpMenu(self) + + + +class PARAMTreeItem(Objecttreeitem.ObjectTreeItem): + """ + Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS + qui représente le PARAMETRE + """ + itemNode=Node + + def init(self): + self.setfunction = self.set_valeur + +# --------------------------------------------------------------------------- +# API du PARAMETRE pour l'arbre +# --------------------------------------------------------------------------- + + def GetIconName(self): + """ + Retourne le nom de l'icone associée au noeud qui porte self, + dépendant de la validité de l'objet + NB : un PARAMETRE est toujours valide ... + """ + if self.isactif(): + if self.isvalid(): + return "ast-green-square" + else: + return "ast-red-square" + else: + return "ast-white-square" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + return 'PARAMETRE',None,None + + def GetText(self): + """ + Retourne le texte à afficher aprês le nom de la commande (ici apres 'paramêtre') + Ce texte est tronqué à 25 caractêres + """ + texte=self.object.nom+"="+str(self.object.valeur) + texte = string.split(texte,'\n')[0] + if len(texte) < 25 : + return texte + else : + return texte[0:24]+'...' + + def GetSubList(self): + """ + Retourne la liste des fils de self + """ + return [] + +# --------------------------------------------------------------------------- +# Méthodes permettant la modification et la lecture des attributs +# du paramêtre = API graphique du PARAMETRE pour Panel et EFICAS +# --------------------------------------------------------------------------- + + def get_valeur(self): + """ + Retourne la valeur de l'objet PARAMETRE cad son texte + """ + if self.object.valeur is None: return '' + else: return self.object.valeur + + def get_nom(self): + """ + Retourne le nom du paramêtre + """ + return self.object.nom + + def set_valeur(self,new_valeur): + """ + Affecte valeur à l'objet PARAMETRE + """ + self.object.set_valeur(new_valeur) + + def set_nom(self,new_nom): + """ + Renomme le paramêtre + """ + self.object.set_nom(new_nom) + #self.object.set_attribut('nom',new_nom) + + def get_fr(self): + """ + Retourne le fr associé au paramêtre, cad la bulle d'aide pour EFICAS + """ + return "Définition d'un paramêtre" + +import Extensions.parametre +treeitem =PARAMTreeItem +objet = Extensions.parametre.PARAMETRE diff --git a/InterfaceQT/compoparameval.py b/InterfaceQT/compoparameval.py new file mode 100644 index 00000000..09a54c6d --- /dev/null +++ b/InterfaceQT/compoparameval.py @@ -0,0 +1,153 @@ +# -*- coding: utf-8 -*- + +""" +Ce module contient les classes permettant de définir les objets graphiques +représentant un objet de type PARAMETRE_EVAL, cad le panneau et l'item de l'arbre +d'EFICAS +""" + +# import modules Python +import string + +# import modules EFICAS + +from Editeur import Objecttreeitem + + +import browser +from qt import * + +class Node(browser.JDCNode): pass +## def getPanel(self): +## """ +## """ +## return PARAM_EVALPanel( self, self.editor ) + + +class PARAM_EVALTreeItem(Objecttreeitem.ObjectTreeItem): + """ + Classe servant a définir l'item porté par le noeud de l'arbre d'EFICAS + qui représente le PARAMETRE + """ + itemNode=Node +## panel = PARAM_EVALPanel + + def init(self): + self.setfunction = self.set_valeur + +# --------------------------------------------------------------------------- +# API du PARAMETRE pour l'arbre +# --------------------------------------------------------------------------- + + def GetIconName(self): + """ + Retourne le nom de l'icone associée au noeud qui porte self, + dépendant de la validité de l'objet + NB : un PARAMETRE est toujours valide ... + """ + if self.isactif(): + if self.isvalid(): + return "ast-green-square" + else: + return "ast-red-square" + else: + return "ast-white-square" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte a afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + return 'EVAL',Fonte_PARAMETRE,None + + def GetText(self): + """ + Retourne le texte a afficher apres le nom de la commande (ici apres 'parametre') + Ce texte est tronqué a 25 caracteres + """ + texte = repr(self.object) + texte = string.split(texte,'\n')[0] + if len(texte) < 25 : + return texte + else : + return texte[0:24]+'...' + + def GetSubList(self): + """ + Retourne la liste des fils de self + """ + return [] + +# --------------------------------------------------------------------------- +# Méthodes permettant la modification et la lecture des attributs +# du parametre = API graphique du PARAMETRE pour Panel et EFICAS +# --------------------------------------------------------------------------- + + def isvalid(self): + """ + Indique si l'objet pointé par self est valide + """ + return self.object.isvalid() + + def get_valeur(self): + """ + Retourne une chaine représentant la valeur de l'objet PARAMETRE + cad de l'objet class_eval.EVAL + """ + return self.object.get_valeur() or '' + + def get_nom(self): + """ + Retourne le nom du parametre + """ + return self.object.get_nom() + + def set_valeur(self,new_valeur): + """ + Affecte new_valeur a l'objet PARAMETRE_EVAL + """ + # on construit le texte de la nouvelle valeur + new_valeur = 'EVAL("""'+new_valeur+'""")' + # on affecte la nouvelle valeur a self.object + self.object.set_valeur(new_valeur) + + def set_nom(self,new_nom): + """ + Renomme le parametre + """ + self.object.set_nom(new_nom) + + def get_fr(self): + """ + Retourne le fr associé au parametre, cad la bulle d'aide pour EFICAS + """ + return "Définition d'un parametre de type EVAL" + + def verif_nom(self,nom): + """ + Lance la vérification de validité du nom passé en argument + """ + return self.object.verif_nom(nom = nom) + + def verif_eval(self,valeur): + """ + Lance la vérification de validité de l'expression EVAL passée en argument + """ + return self.object.verif_eval(exp_eval = valeur) + + def save_parametre_eval(self,new_nom,new_val): + """ + Vérifie si (new_nom,new_val) définit bien un EVAL licite : + - si oui, stocke ces parametres comme nouveaux parametres de l'EVAL courant et retourne 1 + - si non, laisse les parametres anciens de EVAL inchangés et retourne 0 + """ + test,erreur = self.object.verif_parametre_eval(param=(new_nom,new_val)) + if test : + # la formule est bien correcte : on sauve les nouveaux parametres + self.object.update(param=(new_nom,new_val)) + return test,erreur + +import Extensions.parametre_eval +treeitem =PARAM_EVALTreeItem +objet = Extensions.parametre_eval.PARAMETRE_EVAL diff --git a/InterfaceQT/compoproc.py b/InterfaceQT/compoproc.py new file mode 100644 index 00000000..ffbfdf03 --- /dev/null +++ b/InterfaceQT/compoproc.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from Editeur import Objecttreeitem +import compooper +import browser +import typeNode + +from qt import * + +class Node(browser.JDCNode,typeNode.PopUpMenuNode): + def getPanel(self): + from monMacroPanel import MonMacroPanel + return MonMacroPanel(self,parent=self.editor) + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + + +class ProcEtapeTreeItem(compooper.EtapeTreeItem): + itemNode=Node + +import Accas +treeitem = ProcEtapeTreeItem +objet = Accas.PROC_ETAPE + diff --git a/InterfaceQT/composimp.py b/InterfaceQT/composimp.py new file mode 100644 index 00000000..3e636ef5 --- /dev/null +++ b/InterfaceQT/composimp.py @@ -0,0 +1,605 @@ +# -*- coding: utf-8 -*- +# Modules Python +import string,types,os + +from copy import copy,deepcopy +import traceback +from qt import * + +# Modules Eficas +from Editeur import Objecttreeitem +import browser +from Noyau.N_CR import justify_text + +import prefs + +class Node(browser.JDCNode): + def getPanel(self): + """ + """ + klass = None + + # Attention l ordre des if est important + if self.item.wait_shell(): + # l'objet attend un shell + # a priori jamais + print "Pb : Panneau Shell attendu" + print "Pb : Prevenir la maintenance" + klass = None #CS_pbruno todo + return None + + # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs + if self.item.has_into(): + if self.item.is_list() : + from monPlusieursIntoPanel import MonPlusieursIntoPanel + klass = MonPlusieursIntoPanel + else: + from monUniqueIntoPanel import MonUniqueIntoPanel + klass = MonUniqueIntoPanel + + # l'objet prend une ou des valeurs a priori quelconques + else: + # on attend une liste de valeurs + if self.item.is_list() : + # on attend une liste de SD + if self.item.wait_assd(): + from monPlusieursASSDPanel import MonPlusieursASSDPanel + klass = MonPlusieursASSDPanel + else: + # on attend une liste de valeurs de types debase (entiers, réels,...) + from monPlusieursBasePanel import MonPlusieursBasePanel + klass = MonPlusieursBasePanel + # on n'attend qu'une seule valeur + else: + # on attend une SD ou un objet de la classe CO (qui n'existe pas encore) + if self.item.wait_co(): + if len(self.item.get_sd_avant_du_bon_type()) != 0 : + from monUniqueSDCOIntoPanel import MonUniqueSDCOIntoPanel + klass = MonUniqueSDCOIntoPanel + else : + from monUniqueSDCOPanel import MonUniqueSDCOPanel + klass = MonUniqueSDCOPanel + + # on attend une SD + elif self.item.wait_assd(): + if 'R' in self.item.GetType(): + from monUniqueASSDPanel import MonUniqueASSDReelPanel + klass = MonUniqueASSDReelPanel + else : + from monUniqueASSDPanel import MonUniqueASSDPanel + klass = MonUniqueASSDPanel + + # on attend une valeur d'un type de base (entier,reel,...) + else: + # on attend un complexe + if self.item.wait_complex(): + from monUniqueCompPanel import MonUniqueCompPanel + klass = MonUniqueCompPanel + else: + # on attend un entier, un réel ou une string + from monUniqueBasePanel import MonUniqueBasePanel + klass = MonUniqueBasePanel + + # cas particulier des fonctions + genea = self.item.get_genealogie() + if "VALE" in genea or "VALE_C" in genea: + if "DEFI_FONCTION" in genea : + from monFonctionPanel import MonFonctionPanel + klass = MonFonctionPanel + + if not klass: + return None + return klass( self, self.editor ) + + + +class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): + itemNode=Node + + def init(self) : + self.expandable = 0 + + + #----------------------------------------------- + # + # Methodes liees aux informations sur le Panel + # ou au mot-clef simple + # + #----------------------------------------------- + # is_list + # get_into a priori inutile --> commentee + # has_into + # wait_into a priori inutile --> commentee + # GetMinMax + # GetMultiplicite + # GetIntervalle + # GetListeValeurs + # get_liste_possible + + def is_list(self): + """ + Cette méthode indique si le mot cle simple attend une liste (valeur de retour 1) + ou s'il n'en attend pas (valeur de retour 0) + + Deux cas principaux peuvent se presenter : avec validateurs ou bien sans. + Dans le cas sans validateur, l'information est donnée par l'attribut max + de la definition du mot cle. + Dans le cas avec validateur, il faut combiner l'information précédente avec + celle issue de l'appel de la méthode is_list sur le validateur.On utilisera + l'operateur ET pour effectuer cette combinaison (AndVal). + """ + is_a_list=0 + min,max = self.GetMinMax() + assert (min <= max) + if max > 1 : + is_a_list=1 + # Dans le cas avec validateurs, pour que le mot cle soit considéré + # comme acceptant une liste, il faut que max soit supérieur a 1 + # ET que la méthode is_list du validateur retourne 1. Dans les autres cas + # on retournera 0 (n'attend pas de liste) + if self.definition.validators : + is_a_list= self.definition.validators.is_list() * is_a_list + return is_a_list + + #def get_into(self,liste_courante=None): + # """ + # Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose + # pas de liste de choix, la méthode retourne None. + # L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déja + # effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix + # en en tenant compte. + # Cette méthode part du principe que la relation entre into du mot clé et les validateurs est + # une relation de type ET (AndVal). + # """ + # if not self.object.definition.validators : + # return self.object.definition.into + # else: + # return self.object.definition.validators.get_into(liste_courante,self.definition.into) + + def has_into(self): + """ + Cette méthode indique si le mot cle simple propose un choix (valeur de retour 1) + ou s'il n'en propose pas (valeur de retour 0) + + Deux cas principaux peuvent se presenter : avec validateurs ou bien sans. + Dans le cas sans validateur, l'information est donnée par l'attribut into + de la definition du mot cle. + Dans le cas avec validateurs, pour que le mot cle soit considéré + comme proposant un choix, il faut que into soit présent OU + que la méthode has_into du validateur retourne 1. Dans les autres cas + on retournera 0 (ne propose pas de choix) + """ + has_an_into=0 + if self.definition.into: + has_an_into=1 + elif self.definition.validators : + has_an_into= self.definition.validators.has_into() + return has_an_into + + + def GetMinMax(self): + """ Retourne les valeurs min et max de la définition de object """ + return self.object.get_min_max() + + def GetMultiplicite(self): + """ A préciser. + Retourne la multiplicité des valeurs affectées a l'objet + représenté par l'item. Pour le moment retourne invariablement 1. + """ + return 1 + + def GetIntervalle(self): + """ + Retourne le domaine de valeur attendu par l'objet représenté + par l'item. + """ + return self.object.getintervalle() + + def GetListeValeurs(self) : + """ Retourne la liste des valeurs de object """ + valeurs=self.object.get_liste_valeurs() + try : + if "R" in self.object.definition.type: + clef=self.object.GetNomConcept() + if self.appli.dict_reels.has_key(clef): + if type(valeurs) == types.TupleType: + valeurs_reelles=[] + for val in valeurs : + if self.appli.dict_reels[clef].has_key(val) : + valeurs_reelles.append(self.appli.dict_reels[clef][val]) + else : + valeurs_reelles.append(val) + else : + if self.appli.dict_reels[clef].has_key(valeurs): + valeurs_reelles=self.appli.dict_reels[clef][valeurs] + valeurs=valeurs_reelles + except : + pass + return valeurs + + def get_liste_possible(self,listeActuelle=[]): + if hasattr(self.definition.validators,'into'): + valeurspossibles = self.definition.validators.into + else: + valeurspossibles = self.get_definition().into + + #On ne garde que les items valides + listevalideitem=[] + if type(valeurspossibles) in (types.ListType,types.TupleType) : + pass + else : + valeurspossibles=(valeurspossibles,) + for item in valeurspossibles: + encorevalide=self.valide_item(item) + if encorevalide : + listevalideitem.append(item) + + #on ne garde que les choix possibles qui passent le test de valide_liste_partielle + listevalideliste=[] + for item in listevalideitem: + encorevalide=self.valide_liste_partielle(item,listeActuelle) + if encorevalide : + listevalideliste.append(item) + return listevalideliste + + def get_liste_param_possible(self): + liste_param=[] + for param in self.object.jdc.params: + encorevalide=self.valide_item(param.valeur) + if encorevalide: + type_param=param.valeur.__class__.__name__ + for typ in self.definition.type: + if typ=='R': + liste_param.append(param) + if typ=='I' and type_param=='int': + liste_param.append(param) + if typ=='TXM' and type_param=='str': + liste_param.append(repr(param)) + if ('grma' in repr(typ)) and type_param=='str': + liste_param.append(param.nom) + return liste_param + + #-------------------------------------------------- + # + # Methodes liees a la validite des valeurs saisies + # + #--------------------------------------------------- + # valide_item + # valide_liste_partielle + # valide_liste_complete + # info_erreur_item + # info_erreur_liste + # IsInIntervalle + # isvalid + + def valide_item(self,item): + """ + La validation est réalisée directement par l'objet + """ + return self.object.valide_item(item) + + def valide_liste_partielle(self,item,listecourante): + #On protege la liste en entree en la copiant + valeur=listecourante[:] + valeur.append(item) + return self.object.valid_valeur_partielle(valeur) + + def valide_liste_complete (self,valeur): + return self.object.valid_valeur(valeur) + + def valide_val (self,valeur): + return self.object.valid_val(valeur) + + def info_erreur_item(self) : + commentaire="" + if self.definition.validators : + commentaire=self.definition.validators.info_erreur_item() + return commentaire + + def aide(self) : + commentaire="" + if self.definition.validators : + commentaire=self.definition.validators.aide() + return commentaire + + def info_erreur_liste(self) : + commentaire="" + if self.definition.validators : + commentaire=self.definition.validators.info_erreur_liste() + return commentaire + + def IsInIntervalle(self,valeur): + """ + Retourne 1 si la valeur est dans l'intervalle permis par + l'objet représenté par l'item. + """ + return self.valide_item(valeur) + + def isvalid(self): + valide=self.object.isvalid() + return valide + + #-------------------------------------------------- + # + # Autres ... + # + #--------------------------------------------------- + # GetIconName + # GetText + # set_valeur_co + # get_sd_avant_du_bon_type + # delete_valeur_co + + + def GetIconName(self): + if self.isvalid(): + return "ast-green-ball" + elif self.object.isoblig(): + return "ast-red-ball" + else: + return "ast-yel-ball" + + def GetText(self): + """ + Classe SIMPTreeItem + Retourne le texte a afficher dans l'arbre représentant la valeur de l'objet + pointé par self + """ + text= self.object.GetText() + if text == None : text="" + return text + + + def set_valeur_co(self,nom_co): + """ + Affecte au MCS pointé par self l'objet de type CO et de nom nom_co + """ + ret = self.object.set_valeur_co(nom_co) + #print "set_valeur_co",ret + return ret + + def get_sd_avant_du_bon_type(self): + """ + Retourne la liste des noms des SD présentes avant l'étape qui contient + le MCS pointé par self et du type requis par ce MCS + """ + a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type) + return a + + def get_sd_avant_du_bon_type_pour_type_de_base(self): + a=self.object.jdc.get_sd_avant_du_bon_type_pour_type_de_base(self.object.etape,"LASSD") + return a + + + + + def delete_valeur_co(self,valeur=None): + """ + Supprime la valeur du mot cle (de type CO) + il faut propager la destruction aux autres etapes + """ + if not valeur : valeur=self.object.valeur + # XXX faut il vraiment appeler del_sdprod ??? + #self.object.etape.parent.del_sdprod(valeur) + self.object.etape.parent.delete_concept(valeur) + + #----------------------------------------------- + # + # Methodes liees au type de l objet attendu + # + #----------------------------------------------- + # wait_co + # wait_geom + # wait_complex + # wait_reel + # wait_shell + # wait_assd + # GetType + + def wait_co(self): + """ + Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un objet de type ASSD qui n'existe pas encore (type CO()), + 0 sinon + """ + return self.object.wait_co() + + def wait_geom(self): + """ + Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un objet GEOM, 0 sinon + """ + return self.object.wait_geom() + + def wait_complex(self): + """ Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un complexe, 0 sinon """ + if 'C' in self.object.definition.type: + return 1 + else: + return 0 + + def wait_reel(self): + """ Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un réel, 0 sinon """ + if 'R' in self.object.definition.type: + return 1 + else: + return 0 + + def wait_shell(self): + """ Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un shell, 0 sinon """ + if 'shell' in self.object.definition.type: + return 1 + else: + return 0 + + def wait_assd(self): + """Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un objet de type ASSD ou dérivé, 0 sinon """ + return self.object.wait_assd() + + def wait_assd_or_type_base(self) : + boo=0 + if len(self.object.definition.type) > 1 : + if self.wait_reel() : + boo = 1 + if 'I' in self.object.definition.type : + boo = 1 + return boo + + + def GetType(self): + """ + Retourne le type de valeur attendu par l'objet représenté par l'item. + """ + return self.object.get_type() + + #----------------------------------------------------- + # + # Methodes liees a l evaluation de la valeur saisie + # + #----------------------------------------------------- + # eval_valeur + # eval_valeur_item + # is_CO + # traite_reel + + def eval_valeur(self,valeur): + """ Lance l'interprétation de 'valeur' (chaine de caractéres) comme valeur de self : + - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...) + - retourne 'valeur' (chaine de caractéres) sinon + """ + newvaleur=self.eval_val(valeur) + return newvaleur,1 + + def eval_valeur_BAK(self,valeur): + """ Lance l'interprétation de 'valeur' (chaine de caractéres) comme valeur + de l'objet pointé par self : + - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...) + - retourne 'valeur' (chaine de caractéres) sinon + - retourne None en cas d invalidite + - retourne invalide si 1 des objets du tuple l est + """ + validite=1 + if type(valeur) in (types.ListType,types.TupleType) : + valeurretour=[] + for item in valeur : + newvaleur,validiteitem=self.eval_valeur_item(item) + valeurretour.append(newvaleur) + if validiteitem == 0: + validite=0 + else : + valeurretour,validite= self.eval_valeur_item(valeur) + if validite == 0 : + valeurretour = None + return valeurretour,validite + + def eval_valeur_item(self,valeur): + """ Lance l'interprétation de 'valeur' qui doit ne pas etre un tuple + - va retourner la valeur de retour et la validite + selon le type de l objet attendu + - traite les reels et les parametres + """ + #print "eval_valeur_item",valeur + if valeur==None or valeur == "" : + return None,0 + validite=1 + if self.wait_reel(): + valeurinter = self.traite_reel(valeur) + if valeurinter != None : + valeurretour,validite= self.object.eval_valeur(valeurinter) + else: + valeurretour,validite= self.object.eval_valeur(valeur) + elif self.wait_geom(): + valeurretour,validite = valeur,1 + else : + valeurretour,validite= self.object.eval_valeur(valeur) + #print "eval_valeur_item",valeurretour,validite + + if validite == 0: + if type(valeur) == types.StringType and self.object.wait_TXM(): + essai_valeur="'" + valeur + "'" + valeurretour,validite= self.object.eval_valeur(essai_valeur) + + if hasattr(valeurretour,'__class__'): + #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'): + if valeurretour.__class__.__name__ in ('PARAMETRE',): + validite=1 + + #if self.wait_co(): + # CCAR : il ne faut pas essayer de creer un concept + # il faut simplement en chercher un existant ce qui a du etre fait par self.object.eval_valeur(valeur) + #try: + #valeurretour=Accas.CO(valeur) + #except: + #valeurretour=None + #validite=0 + # on est dans le cas ou on a évalué et ou on n'aurait pas du + if self.object.wait_TXM() : + if type(valeurretour) != types.StringType: + valeurretour=str(valeur) + validite=1 + return valeurretour,validite + + def is_CO(self,valeur=None): + """ + Indique si valeur est un concept produit de la macro + Cette méthode n'a de sens que pour un MCSIMP d'une MACRO + Si valeur vaut None on teste la valeur du mot cle + """ + # Pour savoir si un concept est un nouveau concept de macro + # on regarde s'il est présent dans l'attribut sdprods de l'étape + # ou si son nom de classe est CO. + # Il faut faire les 2 tests car une macro non valide peut etre + # dans un etat pas tres catholique avec des CO pas encore types + # et donc pas dans sdprods (resultat d'une exception dans type_sdprod) + if not valeur:valeur=self.object.valeur + if valeur in self.object.etape.sdprods:return 1 + if type(valeur) is not types.InstanceType:return 0 + if valeur.__class__.__name__ == 'CO':return 1 + return 0 + + def is_param(self,valeur) : + for param in self.jdc.params: + if (repr(param) == valeur): + return 1 + return 0 + + def traite_reel(self,valeur): + """ + Cette fonction a pour but de rajouter le '.' en fin de chaine pour un réel + ou de détecter si on fait référence a un concept produit par DEFI_VALEUR + ou un EVAL ... + """ + valeur = string.strip(valeur) + liste_reels = self.get_sd_avant_du_bon_type() + if valeur in liste_reels: + return valeur + if len(valeur) >= 3 : + if valeur[0:4] == 'EVAL' : + # on a trouvé un EVAL --> on retourne directement la valeur + return valeur + if string.find(valeur,'.') == -1 : + # aucun '.' n'a été trouvé dans valeur --> on en rajoute un a la fin + if (self.is_param(valeur)): + return valeur + else: + if string.find(valeur,'e') != -1: + # Notation scientifique ? + try : + r=eval(valeur) + return valeur + except : + return None + else : + return valeur+'.' + else: + return valeur + + +import Accas +treeitem = SIMPTreeItem +objet = Accas.MCSIMP + diff --git a/InterfaceQT/editor.py b/InterfaceQT/editor.py new file mode 100644 index 00000000..3e282300 --- /dev/null +++ b/InterfaceQT/editor.py @@ -0,0 +1,740 @@ +#i -*- coding: iso-8859-1 -*- + +# Modules Python +import types,sys,os +import traceback +from qt import * + +# Modules Eficas + +import convert,generator +from Editeur import session +from Editeur import comploader +from Editeur import Objecttreeitem +import panelsQT +import browser +import readercata + +import prefs +import qtCommun + +VERSION_EFICAS = "EFICAS v1.14" + + +# -------------------------- # +# # +class JDCEditor(QSplitter): +# # +# -------------------------- # + """ + Editeur de jdc + """ + + def __init__(self,fn = None, jdc = None ,parent=None, editor = None, units = None, include=0): + #-------------------------------------------------------------------------------------------# + + QSplitter.__init__(self, parent,'') + + VERSION_CODE = session.d_env.cata + self.salome=0 + self.parent = parent + if parent != None : + self.salome = self.parent.salome + self.appliEficas = self.parent.appliEficas + self.top = None + self.code = prefs.code + self.version_code = VERSION_CODE + self.titre=VERSION_EFICAS + ' pour '+ self.code + self.dict_reels={} + self.liste_simp_reel=[] + self.format_fichier='python' # par defaut + self.jdc_openturn_xml="" + self.jdc_openturn_std="" + self.ihm="QT" + + from Editeur import configuration + self.CONFIGURATION = self.appliEficas.CONFIGURATION + self.CONFIGStyle = self.appliEficas.CONFIGStyle + self.test=0 + self.sb = None + if hasattr(qApp.mainWidget(),"statusBar"): + self.sb = qApp.mainWidget().statusBar() + + self.vm = parent #viewManager + self.fileName = fn + self.fileInfo = None + self.lastModified = 0 + self.jdc = jdc + + self.fichier=None + self.panel_courant=None + self.node_selected = None + self.modified = False + self.isReadOnly = False + + if not hasattr( readercata, 'reader' ) : + readercata.reader = readercata.READERCATA( self, self ) + self.readercata = readercata.reader + + #------- construction du jdc -------------- + + jdc_item = None + + nouveau=0 + if self.fileName is not None: # fichier jdc fourni + self.fileInfo = QFileInfo(self.fileName) + self.fileInfo.setCaching(0) + if editor is None: + self.jdc = self.readFile(self.fileName) + if units is not None: + self.jdc.recorded_units=units + self.jdc.old_recorded_units=units + else: + self.top = editor.top + self.code = editor.code + self.version_code = editor.version_code + self.titre = editor.titre + self.dict_reels = editor.dict_reels + self.liste_simp_reel= editor.liste_simp_reel + self.format_fichier = editor.format_fichier + self.CONFIGURATION = editor.CONFIGURATION + self.CONFIGStyle = editor.CONFIGStyle + self.jdc = editor.jdc + + self.lastModified = self.fileInfo.lastModified() + elif editor is not None: + self.jdc = editor.jdc + else: + if not self.jdc: # nouveau jdc + if not include : + self.jdc = self._newJDC(units=units) + else : + self.jdc = self._newJDCInclude(units=units) + nouveau=1 + + if self.jdc: + self.jdc.appli = self + txt_exception = None + if not jdc: + self.jdc.analyse() + txt_exception = self.jdc.cr.get_mess_exception() + if txt_exception: + self.jdc = None + qApp.restoreOverrideCursor() + self.affiche_infos("Erreur fatale au chargement de %s" %fn) + QMessageBox.critical( self, "Erreur fatale au chargement d'un fichier", txt_exception) + else: + comploader.charger_composants("QT") + jdc_item=Objecttreeitem.make_objecttreeitem( self, "nom", self.jdc ) + + if (not self.jdc.isvalid()) and (not nouveau) : + self.viewJdcRapport() + + #------- config widget -------------- + + if jdc_item: + self.tree = browser.JDCTree( jdc_item, self ) + self.connect(self.tree,SIGNAL('selectionChanged(QListViewItem *)'),self.updatePanel) + + sh = self.sizeHint() + if sh.height() < 300: + sh.setHeight(300) + self.resize(sh) + + # Make sure tabbing through a QWorkspace works. + self.setFocusPolicy(QWidget.StrongFocus) + self._updateReadOnly(1) + + # Set the editors size if it is too big for the parent. + if parent is not None: + req = self.size() + bnd = req.boundedTo(parent.size()) + + if bnd.width() < req.width() or bnd.height() < req.height(): + self.resize(bnd) + + self.panel = QWidget(self) + #self.connect(self, SIGNAL('modificationChanged(bool)'), self.handleModificationChanged) + + + #-------------------------------------------------------------------# + def _updateReadOnly(self, bForce=1): + #-------------------------------------------------------------------# + """ + Private method to update the readOnly information for this editor. + + If bForce is True, then updates everything regardless if + the attributes have actually changed, such as during + initialization time. A signal is emitted after the + caption change. + + @param bForce 1 to force change, 0 to only update and emit + signal if there was an attribute change. + """ + + if self.fileName is None: + return + readOnly = not QFileInfo(self.fileName).isWritable() and 1 or 0 + if not bForce and (readOnly == self.isReadOnly): + return + cap = self.fileName + if readOnly: + cap = "%s (ro)" % unicode(cap) + self.isReadOnly = readOnly + self.setCaption(cap) + self.emit(PYSIGNAL('captionChanged'), (cap, self)) + + #--------------------------------# + def _newJDC( self ,units = None): + #--------------------------------# + """ + Initialise un nouveau JDC vierge + """ + CONTEXT.unset_current_step() + jdc=self.readercata.cata[0].JdC( procedure="", + appli=self, + cata=self.readercata.cata, + cata_ord_dico=self.readercata.cata_ordonne_dico, + rep_mat=self.CONFIGURATION.rep_mat + ) + if units is not None: + jdc.recorded_units=units + jdc.old_recorded_units=units + jdc.analyse() + return jdc + + #--------------------------------# + def _newJDCInclude( self ,units = None): + #--------------------------------# + """ + Initialise un nouveau JDC vierge + """ + import Extensions.jdc_include + JdC_aux=Extensions.jdc_include.JdC_include + CONTEXT.unset_current_step() + + jaux=self.readercata.cata[0].JdC( procedure="", + appli=self, + cata=self.readercata.cata, + cata_ord_dico=self.readercata.cata_ordonne_dico, + rep_mat=self.CONFIGURATION.rep_mat, + ) + jaux.analyse() + + J=JdC_aux( procedure="", + appli=self, + cata=self.readercata.cata, + cata_ord_dico=self.readercata.cata_ordonne_dico, + jdc_pere=jaux, + rep_mat=self.CONFIGURATION.rep_mat, + ) + J.analyse() + if units is not None: + J.recorded_units=units + J.old_recorded_units=units + return J + + + #-----------------------# + def get_source(self,file): + #-----------------------# + import convert + format=self.format_fichier + + # Il faut convertir le contenu du fichier en fonction du format + if convert.plugins.has_key(format): + # Le convertisseur existe on l'utilise + p=convert.plugins[format]() + p.readfile(file) + text=p.convert('execnoparseur') + if not p.cr.estvide(): + self.affiche_infos("Erreur a la conversion") + return text + else: + # Il n'existe pas c'est une erreur + self.affiche_infos("Type de fichier non reconnu") + QMessageBox.critical( self, "Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier") + return None + + #---------------------------------------------# + def get_file(self,unite=None,fic_origine = ''): + #---------------------------------------------# + ulfile = None + jdcText = "" + + titre = "" + + if unite : + titre = "Choix unite %d " %unite + texte = "Le fichier %s contient une commande INCLUDE \n" % fic_origine + texte = texte+'Donnez le nom du fichier correspondant\n à l unité logique %d' % unite + labeltexte = 'Fichier pour unite %d :' % unite + else: + titre = "Choix d'un fichier de poursuite" + texte = "Le fichier %s contient une commande %s\n" %(fic_origine,'POURSUITE') + texte = texte+'Donnez le nom du fichier dont vous \n voulez faire une poursuite' + + QMessageBox.information( self, titre,texte) + fn = QFileDialog.getOpenFileName( None, "", self, None, titre ) + + if fn.isNull(): + return + + ulfile = os.path.abspath(unicode(fn)) + # On utilise le convertisseur défini par format_fichier + source=self.get_source(ulfile) + if source: + # On a réussi à convertir le fichier self.ulfile + jdcText = source + else: + # Une erreur a été rencontrée + jdcText = '' + return ulfile, jdcText + + + #-----------------------# + def readFile(self, fn): + #-----------------------# + """ + Public slot to read the text from a file. + + @param fn filename to read from (string or QString) + """ + fn = unicode(fn) + + qApp.setOverrideCursor(Qt.waitCursor) + + # ------------------------------------------------------------------------------------ + # charge le JDC + # ------------------------------------------------------------------------------------ + + jdcName=os.path.basename(fn) + # Il faut convertir le contenu du fichier en fonction du format + if convert.plugins.has_key( self.format_fichier ): + # Le convertisseur existe on l'utilise + appli = self # CS_pbruno compatiblity parseur_python: self.appli.liste_simp_reel, self.appli.dict_reels + p=convert.plugins[self.format_fichier]() + p.readfile(fn) + text=p.convert('exec',appli) + if not p.cr.estvide(): + self.affiche_infos("Erreur à la conversion") + + CONTEXT.unset_current_step() + ## os.chdir(self.initialdir) + jdc=self.readercata.cata[0].JdC(procedure=text, + appli=self, + cata=self.readercata.cata, + cata_ord_dico=self.readercata.cata_ordonne_dico, + nom=jdcName, + rep_mat=self.CONFIGURATION.rep_mat + ) + # ---------------------------------------------------- + # charge le JDC fin + # ---------------------------------------------------- + self.modified = False + + qApp.restoreOverrideCursor() + if self.fileInfo!= None : + self.lastModified = self.fileInfo.lastModified() + else : + self.lastModified = 1 + return jdc + + #----------------------------------------------# + def _viewText(self, txt, caption = "FILE_VIEWER"): + #----------------------------------------------# + w = qtCommun.ViewText( self.parent ) + w.setCaption( caption ) + w.setText(txt) + w.show() + + #-----------------------# + def viewJdcSource(self): + #-----------------------# + format = self.format_fichier + f=open(self.fileName,'r') + texteSource=f.read() + f.close() + self._viewText(texteSource, "JDC_SOURCE") + + #-----------------------# + def viewJdcPy(self): + #-----------------------# + format = self.format_fichier + strSource = str( self.get_text_JDC(format) ) + self._viewText(strSource, "JDC_RESULTAT") + + #-----------------------# + def viewJdcRapport(self): + #-----------------------# + strRapport = str( self.jdc.report() ) + self._viewText(strRapport, "JDC_RAPPORT") + + #-----------------------# + def handleRenamed(self, fn): + #-----------------------# + """ + Public slot to handle the editorRenamed signal. + + @param fn filename to be set for the editor (QString or string). + """ + self.fileName = unicode(fn) + self.setCaption(self.fileName) + + if self.fileInfo is None: + self.fileInfo = QFileInfo(self.fileName) + self.fileInfo.setCaching(0) + + self.lastModified = self.fileInfo.lastModified() + self.vm.setEditorName(self, self.fileName) + self._updateReadOnly(1) + + #-----------------------# + def handleNewView(self): + #-----------------------# + """ + Private slot to create a new view to an open document. + """ + self.vm.newEditorView(self.fileName, self)#, self.isPythonFile) + + #------------------------------------# + def handleModificationChanged(self, m): + #------------------------------------# + """ + Private slot to handle the modificationChanged signal. + + It emits the signal modificationStatusChanged with parameters + m and self. + + @param m modification status + """ + if not m and self.fileInfo is not None: + self.lastModified = self.fileInfo.lastModified() + self.emit(PYSIGNAL('modificationStatusChanged'), (m, self)) + + #------------------------# + def hasSyntaxErrors(self): + #------------------------# + return False #CS_pbruno todo + + #----------------# + def closeIt(self): + #----------------# + """ + Public method called by the viewmanager to finally get rid of us. + """ + + if self.jdc: + self.jdc.supprime() + self.close() + + + #------------------------------# + def affiche_infos(self,message): + #------------------------------# + if self.salome : + if not hasattr(self.appliEficas,'MessageLabel') : + self.appliEficas.leLayout=QDockWindow(self.appliEficas) + self.appliEficas.MessageLabel = QLabel(self.appliEficas.leLayout,"MessageLabel") + self.appliEficas.MessageLabel.setAlignment(Qt.AlignBottom) + self.appliEficas.leLayout.setWidget(self.appliEficas.MessageLabel) + self.appliEficas.moveDockWindow(self.appliEficas.leLayout,Qt.DockBottom) + self.appliEficas.MessageLabel.setText(message) + self.appliEficas.MessageLabel.show() + self.appliEficas.leLayout.show() + if self.sb: + self.sb.message(message)#,2000) + + #------------------------------# + def updatePanel(self, jdcNode): + #------------------------------# + """ + Appele a chaque changement de noeud + """ + self.node_selected = jdcNode + if self.panel: + self.panel.close() + del self.panel + self.panel = None + + if jdcNode.item.isactif(): + self.panel = jdcNode.getPanel() + #print self.panel.__class__ + else: + self.panel = panelsQT.PanelInactif(self.node_selected,self) + + if not self.panel: + self.panel = panelsQT.NoPanel(self) + + self.panel.show() + + + #-------------------# + def init_modif(self): + #-------------------# + """ + Met l'attribut modified a 'o' : utilise par Eficas pour savoir + si un JDC doit etre sauvegarde avant destruction ou non + """ + self.modified = True + self.emit(PYSIGNAL('modificationStatusChanged'), (True, self)) + + #-------------------# + def stop_modif(self): + #-------------------# + """ + Met l'attribut modified à 'n' : utilisé par Eficas pour savoir + si un JDC doit etre sauvegardé avant destruction ou non + """ + self.modified = False + self.emit(PYSIGNAL('modificationStatusChanged'), (False, self)) + + + #-------------------# + def cut(self): + #-------------------# + """ + Stocke dans Eficas.noeud_a_editer le noeud à couper + """ + if not self.node_selected.item.iscopiable(): + QMessageBox.information( self, "Copie impossible", + "Cette version d'EFICAS ne permet que la copie d'objets de type 'Commande' ou mot-clé facteur") + return + self.parent.edit="couper" + self.parent.noeud_a_editer = self.node_selected + + #-------------------# + def copy(self): + #-------------------# + """ + Stocke dans Eficas.noeud_a_editer le noeud a copier + """ + if not self.node_selected.item.iscopiable(): + QMessageBox.information( self, "Copie impossible", + "La copie d'un tel objet n'est pas permise") + return + self.parent.edit="copier" + self.parent.noeud_a_editer = self.node_selected + + #-------------------# + def paste(self): + #-------------------# + """ + Lance la copie de l'objet place dans self.parent.noeud_a_editer + Ne permet que la copie d'objets de type Commande ou MCF + """ + try: + child=self.parent.noeud_a_editer.doPaste(self.node_selected) + except: + traceback.print_exc() + QMessageBox.information( self, "Copie impossible", + "L'action de coller apres un tel objet n'est pas permise") + return + + if child == 0: + if self.message != '': + QMessageBox.critical( self, "Copie refusee", self.message) + self.message = '' + self.affiche_infos("Copie refusée") + return + + # il faut declarer le JDCDisplay_courant modifie + self.init_modif() + # suppression eventuelle du noeud selectionne + # si possible on renomme l objet comme le noeud couper + + if self.parent.edit == "couper": + #nom = self.parent.noeud_a_editer.item.object.sd.nom + item=self.parent.noeud_a_editer.item + self.parent.noeud_a_editer.delete() + child.item.update(item) + #test,mess = child.item.nomme_sd(nom) + child.select() + + # on rend la copie a nouveau possible en liberant le flag edit + self.parent.edit="copier" + + #---------------------# + def getFileName(self): + #---------------------# + return self.fileName + + #---------------------------# + def writeFile(self, fn, txt = None): + #------------------------------# + """ + Public slot to write the text to a file. + + @param fn filename to write to (string or QString) + @return flag indicating success + """ + + fn = unicode(fn) + + if txt == None : + txt = self.get_text_JDC(self.format_fichier) + eol = '\n' + if len(txt) >= len(eol): + if txt[-len(eol):] != eol: + txt += eol + else: + txt += eol + + try: + f = open(fn, 'wb') + f.write(txt) + f.close() + return 1 + except IOError, why: + QMessageBox.critical(self, self.trUtf8('Save File'), + self.trUtf8('The file %1 could not be saved.
Reason: %2') + .arg(unicode(fn)).arg(str(why))) + return 0 + + #------------------------------------ + def writeFilesOpenturns(self,fn) : + #------------------------------------ + base=fn[:fn.rfind(".")] + fileXML=base + '.xml' + fileSTD=base + '_std.py' + self.writeFile(fileXML,self.jdc_openturn_xml) + self.writeFile(fileSTD,self.jdc_openturn_std) + + + #-----------------------------# + def get_text_JDC(self,format): + #-----------------------------# + if generator.plugins.has_key(format): + # Le generateur existe on l'utilise + g=generator.plugins[format]() + jdc_formate=g.gener(self.jdc,format='beautifie') + if format == "openturns" : + self.jdc_openturn_xml=g.getOpenturnsXML() + self.jdc_openturn_std=g.getOpenturnsSTD() + if not g.cr.estvide(): + self.affiche_infos("Erreur à la generation") + QMessageBox.critical( self, "Erreur a la generation","EFICAS ne sait pas convertir ce JDC") + return + else: + return jdc_formate + else: + # Il n'existe pas c'est une erreur + self.affiche_infos("Format %s non reconnu" % format) + QMessageBox.critical( self, "Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC en format %s "% format) + return + + + #-------------------------------------------# + def saveFile(self, saveas = 0, path = None): + #-------------------------------------------# + """ + Public slot to save the text to a file. + + @param saveas flag indicating a 'save as' action + @param path directory to save the file in (string or QString) + @return tuple of two values (boolean, string) giving a success indicator and + the name of the saved file + """ + self.modified = True #CS_pbruno test + + if not saveas and not self.modified:#self.isModified(): + return (0, None) # do nothing if text wasn't changed + + newName = None + if saveas or self.fileName is None: + if path is None and self.fileName is not None: + path = os.path.dirname(unicode(self.fileName)) + selectedFilter = QString('') + fn = QFileDialog.getSaveFileName(path, + self.trUtf8("JDC (*.comm);;" + "All Files (*)"), self, None, + self.trUtf8("Save File"), selectedFilter, 0) + + if not fn.isNull(): + ext = QFileInfo(fn).extension() + if ext.isEmpty(): + ex = selectedFilter.section('(*',1,1).section(')',0,0) + if not ex.isEmpty(): + fn.append(ex) + if QFileInfo(fn).exists(): + abort = QMessageBox.warning(self, + self.trUtf8("Save File"), + self.trUtf8("The file %1 already exists.") + .arg(fn), + self.trUtf8("&Overwrite"), + self.trUtf8("&Abort"), None, 1) + if abort: + return (0, None) + fn = unicode(QDir.convertSeparators(fn)) + newName = fn + else: + return (0, None) + else: + fn = self.fileName + + if self.writeFile(fn): + self.fileName = fn + self.modified = False + self.setCaption(self.fileName) + if self.fileInfo is None or saveas: + self.fileInfo = QFileInfo(self.fileName) + self.fileInfo.setCaching(0) + self.emit(PYSIGNAL('editorRenamed'), (self.fileName,)) + self.lastModified = self.fileInfo.lastModified() + if newName is not None: + self.vm.addToRecentList(newName) + self.emit(PYSIGNAL('editorSaved'), (self.fileName,)) + self.stop_modif() + if self.code == "OPENTURNS" : + self.writeFilesOpenturns(fn) + if self.salome : + self.parent.appli.addJdcInSalome( self.fileName) + if self.code == 'ASTER': + self.parent.appli.createOrUpdateMesh(self) + #PN ; TODO + + + return (1, self.fileName) + else: + return (0, None) + + #---------------------------------# + def saveFileAs(self, path = None): + #---------------------------------# + """ + Public slot to save a file with a new name. + + @param path directory to save the file in (string or QString) + @return tuple of two values (boolean, string) giving a success indicator and + the name of the saved file + """ + return self.saveFile(1, path) + + +if __name__=='__main__': + if hasattr(prefs,'encoding'): + # Hack pour changer le codage par defaut des strings + import sys + reload(sys) + sys.setdefaultencoding(prefs.encoding) + del sys.setdefaultencoding + # Fin hack + + #CS_pbruno note: fait implicitement des trucs ces imports (grr) + import styles + import import_code + import session + + # Analyse des arguments de la ligne de commande + options=session.parse(sys.argv) + code=options.code + + app = QApplication(sys.argv) + mw = JDCEditor('azAster.comm') + app.setMainWidget(mw) + app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + mw.show() + + res = app.exec_loop() + sys.exit(res) + diff --git a/InterfaceQT/eficas_go.py b/InterfaceQT/eficas_go.py new file mode 100644 index 00000000..daaf8bf7 --- /dev/null +++ b/InterfaceQT/eficas_go.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module permet de lancer l'application EFICAS en affichant + un ecran Splash pour faire patienter l'utilisateur +""" +# Modules Python +import sys +from qt import * + +# Modules Eficas +import prefs +if hasattr(prefs,'encoding'): + # Hack pour changer le codage par defaut des strings + import sys + reload(sys) + sys.setdefaultencoding(prefs.encoding) + del sys.setdefaultencoding + # Fin hack + +from Editeur import import_code +from Editeur import session + +def lance_eficas(code=None,fichier=None): + """ + Lance l'appli EFICAS + """ + # Analyse des arguments de la ligne de commande + if code !=None : prefs.code=code + import qtEficas + options=session.parse(sys.argv) + code=options.code + + app = QApplication(sys.argv) + mw = qtEficas.Appli(code=code) + app.setMainWidget(mw) + app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + mw.show() + mw.ouvreFichiers() + res = app.exec_loop() + sys.exit(res) + + diff --git a/InterfaceQT/gereTraduction.py b/InterfaceQT/gereTraduction.py new file mode 100644 index 00000000..8756200f --- /dev/null +++ b/InterfaceQT/gereTraduction.py @@ -0,0 +1,51 @@ +from qt import * +import os + + +def traduction(directPath,editor,version): + if version == "V7V8" : + from Traducteur import traduitV7V8 + suffixe="v8.comm" + if version == "V8V9" : + from Traducteur import traduitV8V9 + suffixe="v9.comm" + fn = QFileDialog.getOpenFileName( QString(directPath) , "") + + FichieraTraduire=str(fn) + if (FichieraTraduire == "" or FichieraTraduire == () ) : return + i=FichieraTraduire.rfind(".") + Feuille=FichieraTraduire[0:i] + FichierTraduit=Feuille+suffixe + + i=Feuille.rfind("/") + directLog=Feuille[0:i] + log=directLog+"/convert.log" + os.system("rm -rf "+log) + os.system("rm -rf "+FichierTraduit) + + qApp.setOverrideCursor(QCursor(Qt.WaitCursor)) + if version == "V7V8" : traduitV7V8.traduc(FichieraTraduire,FichierTraduit,log) + if version == "V8V9" : traduitV8V9.traduc(FichieraTraduire,FichierTraduit,log) + qApp.setOverrideCursor(QCursor(Qt.ArrowCursor)) + + Entete="Fichier Traduit : "+FichierTraduit +"\n\n" + if os.stat(log)[6] != 0L : + f=open(log) + texte= f.read() + f.close() + else : + texte = Entete + commande="diff "+FichieraTraduire+" "+FichierTraduit+" >/dev/null" + try : + if os.system(commande) == 0 : + texte = texte + "Pas de difference entre le fichier origine et le fichier traduit" + except : + pass + + from desVisu import DVisu + titre = "conversion de "+ FichieraTraduire + monVisu=DVisu(parent=editor,fl=Qt.WType_Dialog) + monVisu.setCaption(titre) + monVisu.TB.setText(texte) + monVisu.show() + diff --git a/InterfaceQT/monChoixCata.py b/InterfaceQT/monChoixCata.py new file mode 100644 index 00000000..f21aaa14 --- /dev/null +++ b/InterfaceQT/monChoixCata.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desChoixCata import DChoixCata +from qt import * + + +# Import des panels + +class MonChoixCata(DChoixCata): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,listeCata,readercata, parent = None,name = None,fl = 0): + DChoixCata.__init__(self,parent,name,fl) + self.listeCata=listeCata + self.readercata=readercata + for cata in self.listeCata : + self.CBChoixCata.insertItem(cata,0) + lab = QString(repr(len(listeCata))) + lab += QString(" versions du catalogue sont disponibles") + self.TLNb.setText(lab) + self.readercata.version_cata=self.CBChoixCata.currentText() + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def CataChoisi(self): + self.readercata.version_cata=self.CBChoixCata.currentText() + + def BOkPressed(self): + QDialog.accept(self) + + def BCancelPressed(self): + QDialog.reject(self) diff --git a/InterfaceQT/monCommandePanel.py b/InterfaceQT/monCommandePanel.py new file mode 100644 index 00000000..16962da8 --- /dev/null +++ b/InterfaceQT/monCommandePanel.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desCommande import DComm +from qtCommun import QTPanel +from qtCommun import QTPanelTBW1 +from qtCommun import QTPanelTBW2 +from qtCommun import QTPanelTBW3 +from qt import * + + +# Import des panels + +class MonCommandePanel(DComm,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + DComm.__init__(self,parent,name,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW1.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent) + QTPanelTBW3.__init__(self,node,parent) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def BNextPressed(self): + QTPanelTBW2.BNextPressed(self) + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def LENomConceptReturnPressed(self): + QTPanelTBW3.LENomConceptReturnPressed(self) diff --git a/InterfaceQT/monCommentairePanel.py b/InterfaceQT/monCommentairePanel.py new file mode 100644 index 00000000..4a983a46 --- /dev/null +++ b/InterfaceQT/monCommentairePanel.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas + +from qt import * + +from desCommentaire import DComment +from qtCommun import QTPanel +from qtCommun import QTPanelTBW2 + +import prefs + +# Import des panels + +class MonCommentairePanel(DComment,QTPanelTBW2,QTPanel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + DComment.__init__(self,parent,name,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent) + self.RemplitPanel() + + def RemplitPanel(self): + texte=self.node.item.get_valeur() + self.textCommentaire.setText(texte) + + def TexteCommentaireEntre(self): + texte=self.textCommentaire.text().latin1() + self.editor.init_modif() + self.node.item.set_valeur(texte) + self.node.onValid() + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def BNextPressed(self) : + QTPanelTBW2.BNextPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT/monFonctionPanel.py b/InterfaceQT/monFonctionPanel.py new file mode 100644 index 00000000..b69d3819 --- /dev/null +++ b/InterfaceQT/monFonctionPanel.py @@ -0,0 +1,141 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from qt import * + +# Modules Eficas +from qtSaisie import SaisieValeur +from monPlusieursBasePanel import MonPlusieursBasePanel + +# Import des panels + +class MonFonctionPanel(MonPlusieursBasePanel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + self.node=node + self.SetNbValeurs() + MonPlusieursBasePanel.__init__(self,node,parent,name,fl) + + def SetNbValeurs(self): + genea=self.node.item.get_genealogie() + if "VALE" in genea: + self.nbValeurs=2 + if "VALE_C" in genea: + self.nbValeurs=3 + + + def DecoupeListeValeurs(self,liste): + #decoupe la liste des valeurs en n ( les x puis les y) + l_valeurs=[] + if (len(liste)% self.nbValeurs != 0): + message="La cardinalité n'est pas correcte, la dernière valeur est ignorée" + #self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + for i in range(len(liste)/ self.nbValeurs) : + if (self.nbValeurs==2): + t=(liste[i*self.nbValeurs], liste[i*self.nbValeurs+1]) + else: + t=(liste[i*self.nbValeurs], liste[i*self.nbValeurs+1], liste[i*self.nbValeurs+2]) + l_valeurs.append(t) + return l_valeurs + + def BuildLBValeurs(self): + self.LBValeurs.clear() + listeValeurs=self.node.item.GetListeValeurs() + for valeur in self.DecoupeListeValeurs(listeValeurs): + self.LBValeurs.insertItem(str(valeur)) + + def Ajout1Valeur(self,liste=[]): + # Pour être appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur) + if liste == [] : + liste,validite=SaisieValeur.TraiteLEValeur(self) + else : + validite=1 + if validite == 0 : return + if liste ==[] : return + + if len(liste) != self.nbValeurs : + commentaire = QString(str(liste)) + commentaire += QString(" n est pas un tuple de ") + commentaire += QString(str(self.nbValeurs)) + commentaire += QString(" valeurs") + #self.Commentaire.setText(commentaire) + self.LEValeur.setText(QString(str(liste))) + self.editor.affiche_infos(commentaire) + return + + index=self.LBValeurs.currentItem() +1 + indexListe=index*self.nbValeurs + if index == 0 : + index = -1 + indexListe=len(self.listeValeursCourantes) + listeVal=[] + for valeur in self.listeValeursCourantes : + listeVal.append(valeur) + validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) + self.Commentaire.setText(comm2) + if not validite : + self.editor.affiche_infos(comm) + else: + self.LEValeur.setText(QString("")) + l1=self.listeValeursCourantes[:indexListe] + l3=self.listeValeursCourantes[indexListe:] + for valeur in self.DecoupeListeValeurs(listeRetour): + self.LBValeurs.insertItem(QString(str(valeur)),index) + index=index+1 + self.listeValeursCourantes=l1+listeRetour+l3 + + + def AjoutNValeur(self,liste) : + if len(liste)%self.nbValeurs != 0 : + texte="Nombre de valeur incorrecte" + #self.Commentaire.setText(texte) + self.editor.affiche_infos(texte) + return + listeDecoupee=self.DecoupeListeValeurs(liste) + for vals in listeDecoupee : + self.Ajout1Valeur(vals) + + + def Sup1Valeur(self): + index=self.LBValeurs.currentItem() + self.LBValeurs.removeItem(self.LBValeurs.currentItem()) + listeVal=[] + i=0 + for valeur in self.listeValeursCourantes : + if self.nbValeurs == 2 : + if (i != index*2 and i != index*2+1 ) : listeVal.append(valeur) + elif self.nbValeurs == 3 : + if (i != index*3 and i != index*3+1 and i != index*3 +2) : listeVal.append(valeur) + else : + print "aiiiiiiiiiiiiiiiiiieeee" + i = i+1 + self.listeValeursCourantes=listeVal + listeValeurs=self.listeValeursCourantes + self.LBValeurs.clear() + for valeur in self.DecoupeListeValeurs(listeValeurs): + self.LBValeurs.insertItem(str(valeur)) + diff --git a/InterfaceQT/monFormulePanel.py b/InterfaceQT/monFormulePanel.py new file mode 100644 index 00000000..e691082e --- /dev/null +++ b/InterfaceQT/monFormulePanel.py @@ -0,0 +1,147 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desFormule import DFormule +from qtCommun import QTPanel +from qtCommun import QTPanelTBW2 +from qt import * + + +# Import des panels + +class MonFormulePanel(DFormule,QTPanelTBW2): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + DFormule.__init__(self,parent,name,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent) + self.LENomFormule.setText(node.item.get_nom()) + self.LECorpsFormule.setText(node.item.get_corps()) + texte_args="" + if node.item.get_args() != None : + for i in node.item.get_args() : + if texte_args != "" : + texte_args = texte_args +"," + texte_args=texte_args + i + self.LENomsArgs.setText(texte_args) + + + self.parent=parent + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def BNextPressed(self): + QTPanelTBW2.BNextPressed(self) + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def NomFormuleSaisi(self): + nomFormule = self.LENomFormule.text().latin1() + if nomFormule == '' : return + test,erreur = self.node.item.verif_nom(nomFormule) + if test : + commentaire=nomFormule+" est un nom valide pour une FORMULE" + else : + commentaire=nomFormule+" n'est pas un nom valide pour une FORMULE" + self.editor.affiche_infos(commentaire) + + def argsSaisis(self): + arguments = self.LENomsArgs.text().latin1() + if arguments == '' : return + + test,erreur = self.node.item.verif_arguments(arguments) + if test: + commentaire="Argument(s) valide(s) pour une FORMULE" + else: + commentaire="Argument(s) invalide(s) pour une FORMULE" + self.editor.affiche_infos(commentaire) + + def FormuleSaisie(self): + nomFormule = self.LENomFormule.text().latin1() + arguments = self.LENomsArgs.text().latin1() + expression = self.LECorpsFormule.text().latin1() + if expression == '' : return + test,erreur = self.node.item.verif_formule_python((nomFormule,"REEL",arguments,expression)) + + if test: + commentaire="Corps de FORMULE valide" + else: + commentaire="Corps de FORMULE invalide" + self.editor.affiche_infos(commentaire) + + + def BOkPressedFormule(self): + if self.parent.modified == 'n' : self.parent.init_modif() + + nomFormule = self.LENomFormule.text().latin1() + test,erreur = self.node.item.verif_nom(nomFormule) + if not test : + self.editor.affiche_infos(erreur) + return + + arguments = self.LENomsArgs.text().latin1() + test,erreur = self.node.item.verif_arguments(arguments) + if not test : + self.editor.affiche_infos(erreur) + return + + expression = self.LECorpsFormule.text().latin1() + test,erreur = self.node.item.verif_formule_python((nomFormule,"REEL",arguments,expression)) + if not test : + self.editor.affiche_infos(erreur) + return + + test=self.node.item.object.update_formule_python(formule=(nomFormule,"REEL",arguments,expression)) + test,erreur = self.node.item.save_formule(nomFormule,"REEL",arguments,expression) + if test : + #self.node.update_texte() + #self.node.update_label() + #self.node.update_node() + self.node.onValid() + self.node.update_valid() + commentaire = "Formule modifiée" + else: + commentaire ="Formule incorrecte : " + erreur + self.editor.init_modif() + self.editor.affiche_infos(commentaire) diff --git a/InterfaceQT/monIncludePanel.py b/InterfaceQT/monIncludePanel.py new file mode 100644 index 00000000..b2e925bd --- /dev/null +++ b/InterfaceQT/monIncludePanel.py @@ -0,0 +1,154 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +import os,traceback,sys +from qt import * +from desMacro import DMacro + +from monMacroPanel import MonMacroPanel +import convert + + +# Import des panels + +class MonIncludePanel(MonMacroPanel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + MonMacroPanel.__init__(self,node,parent,name,fl) + #Version TK ?? + #if not hasattr(self.node.item.object,'fichier_ini'): + if not hasattr(self.node.item.object,'fichier_unite'): + self.ajoutPageBad() + else: + self.ajoutPageOk() + + def ajoutPageOk(self): + self.TabPage = QWidget(self.TWChoix,"TabPage") + self.LENomFichier = QLineEdit(self.TabPage,"LENomFichier") + self.LENomFichier.setGeometry(QRect(18,127,450,30)) + self.textLabel1_3 = QLabel(self.TabPage,"textLabel1_3") + self.textLabel1_3.setGeometry(QRect(70,50,350,41)) + self.BBrowse = QPushButton(self.TabPage,"BBrowse") + self.BBrowse.setGeometry(QRect(288,306,161,41)) + self.TWChoix.insertTab(self.TabPage,QString("")) + self.textLabel1_3.setText(self._DMacro__tr("La commande INCLUDE requiert un nom de Fichier :")) + self.BBrowse.setText(self._DMacro__tr("Edit")) + self.TWChoix.changeTab(self.TabPage,self._DMacro__tr("Fichier Include")) + self.TWChoix.setCurrentPage(2) + if hasattr(self.node.item.object,'fichier_ini'): + self.LENomFichier.setText(self.node.item.object.fichier_ini) + else : + self.LENomFichier.setText("") + self.LENomFichier.setText(self.node.item.object.fichier_ini) + + + self.BChangeFile = QPushButton(self.TabPage,"BChangeFile") + self.BChangeFile.setGeometry(QRect(290,350,161,41)) + self.BChangeFile.setSizePolicy(QSizePolicy(0,0,0,0,self.BChangeFile.sizePolicy().hasHeightForWidth())) + self.BChangeFile.setText(self._DMacro__tr("Autre Fichier")) + + self.connect(self.BBrowse,SIGNAL("clicked()"),self.BBrowsePressed) + self.connect(self.BChangeFile,SIGNAL("clicked()"),self.BChangeFilePressed) + self.connect(self.LENomFichier,SIGNAL("returnPressed()"),self.LENomFichReturnPressed) + + + def ajoutPageBad(self) : + self.TabPage = QWidget(self.TWChoix,"TabPage") + self.textLabel1_5 = QLabel(self.TabPage,"textLabel1_5") + TabPageLayout = QGridLayout(self.TabPage,1,1,11,6,"TabPageLayout") + TabPageLayout.addWidget(self.textLabel1_5,0,0) + self.TWChoix.insertTab(self.TabPage,QString("")) + self.resize(QSize(521,499).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + self.textLabel1_5.setText(self._DMacro__trUtf8("\x3c\x66\x6f\x6e\x74\x20\x73\x69\x7a\x65\x3d\x22\x2b\x31\x22\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x49\x4e\x43\x4c\x55\x44\x45\x20\x6e\x27\x61\x20\x70\x61\x73\x20\x64\x65\x20\x66\x69\x63\x68\x69\x65\x72\x20\x61\x73\x73\x6f\x63\x69\xc3\xa9\x2e\x0a\x49\x6c\x20\x66\x61\x75\x74\x20\x64\x27\x61\x62\x6f\x72\x64\x20\x63\x68\x6f\x69\x73\x69\x72\x20\x75\x6e\x20\x6e\x75\x6d\xc3\xa9\x72\x6f\x20\x64\x27\x75\x6e\x69\x74\xc3\xa9\x3c\x2f\x70\x3e\x3c\x2f\x66\x6f\x6e\x74\x3e")) + self.TWChoix.changeTab(self.TabPage,self._DMacro__tr("Fichier Include")) + self.TWChoix.setCurrentPage(2) + + + def BBrowsePressed(self): + self.node.makeEdit() + + def BOkIncPressed (self): + self.LENomFichReturnPressed() + + def LENomFichReturnPressed(self): + nomFichier=str(self.LENomFichier.text()) + if not os.path.isfile(nomFichier) : + commentaire = "Fichier introuvable" + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + return + + text=self.convert_file(nomFichier) + + # Si probleme a la lecture-conversion on arrete le traitement + if not text: + return + + try : + self.node.item.object.change_fichier_init(nomFichier,text) + commentaire = "Fichier modifie : " + self.node.item.get_nom() + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + except: + l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1]) + QMessageBox.critical( self, "Erreur fatale au chargement du fichier Include", l[0]) + commentaire = "Fichier invalide" + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + return + + + def convert_file(self,file): + """ + Methode pour convertir le fichier file dans le format courant + """ + format=self.editor.format_fichier + text=None + if convert.plugins.has_key(format): + # Le convertisseur existe on l'utilise + p=convert.plugins[format]() + p.readfile(file) + text=p.convert('execnoparseur') + else : + commentaire = "Impossible de lire le fichier : Format inconnu" + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + return text + + + def BChangeFilePressed(self): + userDir=os.path.expanduser("~/Eficas_install/") + fn = QFileDialog.getOpenFileName(userDir, + self.trUtf8('All Files (*);;''JDC Files (*.comm);;'), self.editor) + + if fn.isNull(): + return + + fn = os.path.abspath((unicode(fn))) + self.LENomFichier.setText(fn) + self.LENomFichReturnPressed() diff --git a/InterfaceQT/monListeParamPanel.py b/InterfaceQT/monListeParamPanel.py new file mode 100644 index 00000000..68c4bada --- /dev/null +++ b/InterfaceQT/monListeParamPanel.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desListeParam import DLisParam +from qt import * + +# Import des panels + +class MonListeParamPanel(DLisParam): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,liste,parent,name = None,fl = 0): + self.panel=parent + DLisParam.__init__(self,parent,name,Qt.WType_Dialog) + self.liste=liste + self.initVal() + + def initVal(self): + self.LBParam.clear() + for param in self.liste : + self.LBParam.insertItem(QString(repr(param))) + + def LBParamItemPressed(self): + i=self.LBParam.index(self.LBParam.selectedItem()) + self.panel.Ajout1Valeur(self.liste[i]) diff --git a/InterfaceQT/monMCFactPanel.py b/InterfaceQT/monMCFactPanel.py new file mode 100644 index 00000000..fc806931 --- /dev/null +++ b/InterfaceQT/monMCFactPanel.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desMCFact import DMCFact +from qtCommun import QTPanel +from qtCommun import QTPanelTBW1 +from qt import * + + +# Import des panels + +class MonMCFactPanel(DMCFact,QTPanelTBW1): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + DMCFact.__init__(self,parent,name,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW1.__init__(self,node,parent) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT/monMCListAjoutPanel.py b/InterfaceQT/monMCListAjoutPanel.py new file mode 100644 index 00000000..8cb0eb37 --- /dev/null +++ b/InterfaceQT/monMCListAjoutPanel.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desMCListAjout import DMCListAjout +from qtCommun import QTPanel +from qt import * + + +# Import des panels + +class MonMCListAjoutPanel(DMCListAjout,QTPanel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node,parent = None,name = None,fl = 0): + DMCListAjout.__init__(self,parent,name,fl) + QTPanel.__init__(self,node,parent) + monMCFact=self.node.item.get_nom() + self.MCFacteur.setText(QString(monMCFact)) + self.MCFacteur.setAlignment(Qt.AlignHCenter) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BAjoutClicked(self): + self.node.parent.append_child(self.node.item.get_nom()) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT/monMacroPanel.py b/InterfaceQT/monMacroPanel.py new file mode 100644 index 00000000..bb2d8036 --- /dev/null +++ b/InterfaceQT/monMacroPanel.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desMacro import DMacro +from qtCommun import QTPanel +from qtCommun import QTPanelTBW1 +from qtCommun import QTPanelTBW2 +from qtCommun import QTPanelTBW3 +from qt import * + + +# Import des panels + +class MonMacroPanel(DMacro,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + DMacro.__init__(self,parent,name,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent) + QTPanelTBW1.__init__(self,node,parent) + if self.node.item.object.get_type_produit() != None : + QTPanelTBW3.__init__(self,node,parent) + else : + self.TWChoix.removePage(self.TWChoix.page(2)) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def BNextPressed(self): + QTPanelTBW2.BNextPressed(self) + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def LENomConceptReturnPressed(self): + QTPanelTBW3.LENomConceptReturnPressed(self) + diff --git a/InterfaceQT/monOptionsEditeur.py b/InterfaceQT/monOptionsEditeur.py new file mode 100644 index 00000000..89c4510c --- /dev/null +++ b/InterfaceQT/monOptionsEditeur.py @@ -0,0 +1,145 @@ +# -*- coding: utf-8 -*- + +from OptionsEditeur import desOptions +from qt import * +import os, re + +class Options(desOptions): + def __init__(self,parent = None,name = None,modal = 0,fl = 0,configuration=None): + desOptions.__init__(self,parent,name,modal,fl) + self.configuration=configuration + self.viewMan=parent + self.dVersion={} + self.dRepMat={} + self.dRepCat={} + self.initAll() + + + def initAll(self): + self.CBVersions.clear() + for item in self.configuration.catalogues : + try : + (code,version,cata,format,defaut)=item + except : + (code,version,cata,format)=item + self.dVersion[version]=(item) + self.dRepCat[version]=str(cata) + self.CBVersions.insertItem(QString(version),0) + + codeSansPoint=re.sub("\.","",version) + chaine="rep_mat_"+codeSansPoint + if hasattr(self.configuration,chaine): + rep_mat=getattr(self.configuration,chaine) + self.dRepMat[version]=str(rep_mat) + else : + self.dRepMat[version]="" + self.LERepMat.setText(self.dRepMat[version]) + self.LERepCata.setText(self.dRepCat[version]) + if hasattr(self.configuration,"path_doc"): + self.LERepDoc.setText(self.configuration.path_doc) + + + def VersionChoisie(self): + version=str(self.CBVersions.currentText()) + if self.dRepMat.has_key(version): + self.LERepMat.setText(self.dRepMat[version]) + if self.dRepCat.has_key(version): + self.LERepCata.setText(self.dRepCat[version]) + + def BokClicked(self): + version=str(self.CBVersions.currentText()) + if self.LERepCata.text() == "" : + QMessageBox.critical( self, "Champ non rempli","Le champs Catalogue doit etre rempli" ) + return + + self.dRepMat[version]=self.LERepMat.text() + if str(self.dRepMat[version] != "") != "" : + codeSansPoint=re.sub("\.","",version) + chaine="rep_mat_"+codeSansPoint + setattr(self.configuration,chaine,self.dRepMat[version]) + + self.dRepCat[version]=str(self.LERepCata.text()) + if version in self.dVersion.keys(): + item=list(self.dVersion[version]) + item[2]=self.dRepCat[version] + self.dVersion[version]=tuple(item) + else : + self.dVersion[version]=('ASTER',version,self.dRepCat[version],'python') + + lItem=[] + for version in self.dVersion.keys() : + lItem.append(self.dVersion[version]) + self.configuration.catalogues=lItem + self.configuration.save_params() + + def AjoutVersion(self): + version=self.LEVersionAjout.text() + if str(version) == "" : return + self.CBVersions.insertItem(version,0) + self.LERepMat.setText("") + self.LERepCata.setText("") + self.LEVersionAjout.setText("") + + def SupVersion(self): + version=str(self.LEVersionSup.text()) + if version == "" : return + i =0 + while i < self.CBVersions.count() : + if self.CBVersions.text(i) == version : + self.CBVersions.removeItem(i) + break + i=i+1 + try : + del self.dVersion[version] + del self.dRepMat[version] + del self.dRepCat[version] + except : + self.LEVersionSup.setText("") + return + codeSansPoint=re.sub("\.","",version) + chaine="rep_mat_"+codeSansPoint + if hasattr(self.configuration,chaine): + delattr(self.configuration,chaine) + self.LEVersionSup.setText("") + + lItem=[] + for version in self.dVersion.keys() : + lItem.append(self.dVersion[version]) + self.LERepMat.setText("") + self.LERepCata.setText("") + self.configuration.catalogues=lItem + self.configuration.save_params() + self.CBVersions.setCurrentItem(0) + self.VersionChoisie() + + + def BdefautChecked(self): + res = QMessageBox.warning( + None, + self.trUtf8("Restauration des parametres par defaut "), + self.trUtf8("Votre fichier editeur sera ecrase."), + self.trUtf8("&Ok"), + self.trUtf8("&Abandonner")) + self.Bdefaut.setState(QButton.Off) + if res == 1 : return + + appli=self.configuration.appli + rep_ini=self.configuration.rep_ini + fic_ini_util=self.configuration.fic_ini_utilisateur + old_fic_ini_util=fic_ini_util+"_old" + commande="mv "+fic_ini_util+" "+old_fic_ini_util + os.system(commande) + from Editeur import configuration + configNew=configuration.CONFIG(appli,rep_ini) + self.configuration=configNew + appli.CONFIGURATION=configNew + self.configuration.save_params() + self.dVersion={} + self.dRepMat={} + self.dRepCat={} + self.initAll() + + def ChangePathDoc(self): + self.configuration.path_doc=str(self.LERepDoc.text()) + self.configuration.save_params() + diff --git a/InterfaceQT/monOptionsPdf.py b/InterfaceQT/monOptionsPdf.py new file mode 100644 index 00000000..a7c81d29 --- /dev/null +++ b/InterfaceQT/monOptionsPdf.py @@ -0,0 +1,22 @@ +from OptionsPdf import desPdf + +class OptionPdf(desPdf): + def __init__(self,parent = None,name = None,modal = 0,fl = 0,configuration=None): + desPdf.__init__(self,parent,name,modal,fl) + self.configuration=configuration + self.initVal() + + def initVal(self): + if hasattr(self.configuration,'exec_acrobat'): + self.LERepPdf.setText(self.configuration.exec_acrobat) + else : + self.LERepPdf.clear() + + def LeRepPdfPressed(self): + nouveau=str(self.LERepPdf.text()) + self.configuration.exec_acrobat=nouveau + self.configuration.save_params() + + def BokClicked(self): + self.LeRepPdfPressed() + self.close() diff --git a/InterfaceQT/monParamPanel.py b/InterfaceQT/monParamPanel.py new file mode 100644 index 00000000..84472fcd --- /dev/null +++ b/InterfaceQT/monParamPanel.py @@ -0,0 +1,138 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os,re + +# Modules Eficas +import prefs + +from qt import * + +from desParam import DParam +from qtCommun import QTPanel +from qtCommun import QTPanelTBW2 + +# Import des panels + +class MonParamPanel(DParam,QTPanelTBW2,QTPanel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + DParam.__init__(self,parent,name,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent) + self.InitLEs() + + def InitLEs(self): + nom=self.node.item.get_nom() + self.lineEditNom.setText(nom) + valeur=self.node.item.get_valeur() + if valeur != None: + #str=QString("").setNum(valeur) + self.lineEditVal.setText(str(valeur)) + else : + self.lineEditVal.clear() + + def BOkParamPressed(self): + val=self.LEValeurPressed() + nom=self.LENomPressed() + if not nom : + commentaire="Entrer un nom de parametre" + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + return + self.node.item.set_nom(nom) + self.node.item.set_valeur(val) + self.node.update_texte() + self.node.update_valid() + self.editor.init_modif() + self.InitLEs() + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def LEValeurPressed(self): + self.Commentaire.setText(QString("")) + commentaire="Valeur incorrecte" + qtVal=self.lineEditVal.text() + boul=2 + try : + val,boul=QString.toInt(qtVal) + except : + pass + if boul == 0 : + try : + val,boul=QString.toDouble(qtVal) + except : + pass + if boul == 0 : + try : + val=str(qtVal) + boul=1 + except : + pass + if boul: commentaire="Valeur correcte" + self.Commentaire.setText(QString(commentaire)) + valString=str(self.lineEditVal.text()) + return valString + + def LENomPressed(self): + self.Commentaire.setText(QString("")) + qtNom=self.lineEditNom.text() + nom=str(qtNom) + numDebutPattern=re.compile('[a-zA-Z]') + if numDebutPattern.match(nom) : + return nom + else : + commentaire="Les noms de parametre doivent commencer par une lettre" + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + return None + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def AppelleBuildLBRegles(self): + listeRegles=self.node.item.get_regles() + listeNomsEtapes = self.node.item.get_l_noms_etapes() + self.BuildLBRegles(listeRegles,listeNomsEtapes) + + def BNextPressed(self) : + QTPanelTBW2.BNextPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT/monPlusieursASSDPanel.py b/InterfaceQT/monPlusieursASSDPanel.py new file mode 100644 index 00000000..5cc6b305 --- /dev/null +++ b/InterfaceQT/monPlusieursASSDPanel.py @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +import prefs + +from qt import * +from monPlusieursIntoPanel import MonPlusieursIntoPanel +from desPlusieursInto import DPlusInto +from qtCommun import QTPanel +from politiquesValidation import PolitiquePlusieurs +# Import des panels + +class MonPlusieursASSDPanel(MonPlusieursIntoPanel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + QTPanel.__init__(self,node,parent) + DPlusInto.__init__(self,parent,name,fl) + + self.listeValeursCourantes=self.node.item.GetListeValeurs() + self.InitValeursCourantes() + self.DisplayListBoxCourantes() + self.DisplayListBoxPossibles() + + self.politique=PolitiquePlusieurs(node,parent) + #QObject.connect(self.listBoxVal, SIGNAL("doubleClicked(QListBoxItem*)" ), self.Ajout1Valeur ) + # QObject.connect(self.listBoxVal, SIGNAL("doubleClicked(QListBoxItem*)" ), self.ClicASSD ) + + def DisplayListBoxPossibles(self): + listeNomsSD = self.node.item.get_sd_avant_du_bon_type() + self.listBoxVal.clear() + for aSD in listeNomsSD: + self.listBoxVal.insertItem( aSD) + if len(listeNomsSD) == 1 : + self.listBoxVal.setSelected(0,1) + + def DisplayListBoxCourantes(self): + self.LBValeurs.clear() + for aSD in self.listNomsValeurs : + self.LBValeurs.insertItem( aSD) + + def InitValeursCourantes(self): + self.listNomsValeurs=[] + for i in self.listeValeursCourantes : + self.listNomsValeurs.append(i.get_name()) + + def BOkPourListePressed(self): + if self.listeValeursCourantes == [] : + self.editor.affiche_infos("Pas de Validation d un groupe vide") + return + self.node.item.set_valeur(self.listeValeursCourantes) + self.editor.affiche_infos("Valeur Acceptée") + pass + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def Sup1Valeur(self): + index=self.LBValeurs.currentItem() + self.LBValeurs.removeItem(self.LBValeurs.currentItem()) + listeVal=[] + i=0 + for valeur in self.listeValeursCourantes : + if i != index : listeVal.append(valeur) + i = i+1 + self.listeValeursCourantes=listeVal + self.InitValeursCourantes() + self.DisplayListBoxCourantes() + self.DisplayListBoxPossibles() + + def Ajout1Valeur(self): + liste=[] + if self.listBoxVal.currentText().latin1() == None : return + liste.append(self.listBoxVal.currentText().latin1()) + index=self.LBValeurs.currentItem() + 1 + if index==0 : index = -1 + listeVal=[] + for valeur in self.listeValeursCourantes : + valeurSD,validite=self.node.item.eval_valeur(valeur) + if validite : listeVal.append(valeur) + validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) + self.Commentaire.setText(comm2) + if not validite : + self.editor.affiche_infos(comm) + else: + l1=self.listeValeursCourantes[:index] + l3=self.listeValeursCourantes[index:] + for valeur in listeRetour: + self.LBValeurs.insertItem(QString(str(valeur)),index) + index=index+1 + self.listeValeursCourantes=l1+listeRetour+l3 + self.InitValeursCourantes() + self.DisplayListBoxCourantes() + self.DisplayListBoxPossibles() diff --git a/InterfaceQT/monPlusieursBasePanel.py b/InterfaceQT/monPlusieursBasePanel.py new file mode 100644 index 00000000..0907cbed --- /dev/null +++ b/InterfaceQT/monPlusieursBasePanel.py @@ -0,0 +1,176 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +import prefs + +from qt import * + +from desPlusieursBase import DPlusBase +from qtCommun import QTPanel +from qtSaisie import SaisieValeur +from politiquesValidation import PolitiquePlusieurs + +# Import des panels + +class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + QTPanel.__init__(self,node,parent) + DPlusBase.__init__(self,parent,name,fl) + self.politique=PolitiquePlusieurs(node,parent) + self.BuildLBValeurs() + self.listeValeursCourantes=self.node.item.GetListeValeurs() + self.InitCommentaire() + self.detruitBouton() + + def detruitBouton(self): + mc = self.node.item.get_definition() + type = mc.type[0] + print self.editor.salome + if not(('grma' in repr(type)) or ('grno' in repr(type))) or not(self.editor.salome) : + self.BSalome.close() + self.BView2D.close() + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def BuildLBValeurs(self): + # redefinit en raison de l heritage par monFonctionPanel + SaisieValeur.BuildLBValeurs(self) + + def BOkPourListePressed(self): + if self.listeValeursCourantes == [] : + self.editor.affiche_infos("Pas de validation d un groupe vide") + return + self.node.item.set_valeur(self.listeValeursCourantes) + self.editor.affiche_infos("Valeur Acceptée") + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BParametresPressed(self): + QTPanel.BParametresPressed(self) + + def LEValeurPressed(self): + self.Ajout1Valeur() + + def Sup1Valeur(self): + index=self.LBValeurs.currentItem() + self.LEValeur.setText(self.LBValeurs.currentText()) + self.LBValeurs.removeItem(self.LBValeurs.currentItem()) + listeVal=[] + i=0 + for valeur in self.listeValeursCourantes : + if i != index : listeVal.append(valeur) + i = i+1 + self.listeValeursCourantes=listeVal + + + def Ajout1Valeur(self,valeur=None): + liste,validite=SaisieValeur.TraiteLEValeur(self,valeur) + if validite == 0 : return + if liste ==[] : return + + index=self.LBValeurs.currentItem() + 1 + listeVal=[] + for valeur in self.listeValeursCourantes : + listeVal.append(valeur) + validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) + self.Commentaire.setText(comm2) + if not validite : + self.editor.affiche_infos(comm) + else: + self.LEValeur.setText(QString("")) + l1=self.listeValeursCourantes[:index] + l3=self.listeValeursCourantes[index:] + for valeur in listeRetour: + self.LBValeurs.insertItem(QString(str(valeur)),index) + index=index+1 + self.listeValeursCourantes=l1+listeRetour+l3 + + def BImportPressed(self): + init=QString( self.editor.CONFIGURATION.rep_user) + fn = QFileDialog.getOpenFileName(init, self.trUtf8('All Files (*)',)) + if fn == None : return + if fn == "" : return + from monSelectVal import MonSelectVal + MonSelectVal(file=fn,parent=self).show() + + def InitCommentaire(self): + commentaire="" + mc = self.node.item.get_definition() + d_aides = { 'TXM' : 'chaînes de caractères', + 'R' : 'réels', + 'I' : 'entiers', + 'C' : 'complexes'} + type = mc.type[0] + if not d_aides.has_key(type) : + if mc.min == mc.max: + commentaire="Entrez "+str(mc.min)+" valeurs " + else : + commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs " + else : + if mc.min == mc.max: + commentaire="Entrez "+str(mc.min)+" "+d_aides[type] + else : + commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max) +" " + d_aides[type] + aideval=self.node.item.aide() + commentaire=commentaire + "\n" + aideval + self.Commentaire.setText(QString(commentaire)) + + def BSalomePressed(self): + + genea=self.node.item.get_genealogie() + kwType = None + for e in genea: + if "GROUP_NO" in e: kwType = "GROUP_NO" + if "GROUP_MA" in e: kwType = "GROUP_MA" + + #print "BkwType",kwType + #print "editor", self.editor + selection, commentaire = self.editor.parent.appliEficas.selectGroupFromSalome(kwType,editor=self.editor) + if commentaire !="" : + self.Commentaire.setText(QString(commentaire)) + monTexte="" + if selection == [] : return + for geomElt in selection: + monTexte=geomElt+"," + monTexte= monTexte[0:-1] + self.LEValeur.setText(QString(monTexte)) + + def BView2DPressed(self): + valeur=self.LEValeur.text() + if valeur == QString("") : + valeur=self.LBValeurs.currentText() + if valeur == QString("") : return + valeur = str(valeur) + if valeur : + ok, msgError = self.editor.parent.appliEficas.displayShape(valeur) + if not ok: + self.editor.parent.appli.affiche_infos(msgError) + diff --git a/InterfaceQT/monPlusieursIntoPanel.py b/InterfaceQT/monPlusieursIntoPanel.py new file mode 100644 index 00000000..80fa4235 --- /dev/null +++ b/InterfaceQT/monPlusieursIntoPanel.py @@ -0,0 +1,119 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +import prefs + +from qt import * + +from desPlusieursInto import DPlusInto +from qtCommun import QTPanel +from qtSaisie import SaisieValeur +from politiquesValidation import PolitiquePlusieurs + +# Import des panels + +class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + QTPanel.__init__(self,node,parent) + DPlusInto.__init__(self,parent,name,fl) + self.politique=PolitiquePlusieurs(node,parent) + SaisieValeur.BuildLBValeurs(self) + self.listeValeursCourantes=self.node.item.GetListeValeurs() + SaisieValeur.RemplitPanel(self,self.listeValeursCourantes) + QObject.connect(self.listBoxVal, SIGNAL("doubleClicked(QListBoxItem*)" ), self.Ajout1Valeur ) + self.InitCommentaire() + + def BOkPourListePressed(self): + if self.listeValeursCourantes == [] : + self.editor.affiche_infos("Pas de validation d un groupe vide") + return + self.node.item.set_valeur(self.listeValeursCourantes) + self.editor.affiche_infos("Valeur Acceptée") + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def Sup1Valeur(self): + index=self.LBValeurs.currentItem() + self.LBValeurs.removeItem(self.LBValeurs.currentItem()) + listeVal=[] + i=0 + for valeur in self.listeValeursCourantes : + if i != index : listeVal.append(valeur) + i = i+1 + self.listeValeursCourantes=listeVal + SaisieValeur.RemplitPanel(self,self.listeValeursCourantes) + + def Ajout1Valeur(self): + liste=[] + if self.listBoxVal.currentText().latin1() == None : return + liste.append(self.listBoxVal.currentText().latin1()) + index=self.LBValeurs.currentItem() + 1 + if index==0 : index = -1 + listeVal=[] + for valeur in self.listeValeursCourantes : + listeVal.append(valeur) + validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) + self.Commentaire.setText(comm2) + if not validite : + self.editor.affiche_infos(comm) + else: + l1=self.listeValeursCourantes[:index] + l3=self.listeValeursCourantes[index:] + for valeur in listeRetour: + self.LBValeurs.insertItem(QString(str(valeur)),index) + index=index+1 + self.listeValeursCourantes=l1+listeRetour+l3 + SaisieValeur.RemplitPanel(self,self.listeValeursCourantes) + + def InitCommentaire(self): + commentaire="" + mc = self.node.item.get_definition() + d_aides = { 'TXM' : 'chaînes de caractères', + 'R' : 'réels', + 'I' : 'entiers', + 'C' : 'complexes'} + type = mc.type[0] + if not d_aides.has_key(type) : + if mc.min == mc.max: + commentaire="Entrez "+str(mc.min)+" valeurs " + else : + commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs " + else : + if mc.min == mc.max: + commentaire="Entrez "+str(mc.min)+" "+d_aides[type] + else : + commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" "+d_aides[type] + aideval=self.node.item.aide() + commentaire=commentaire + "\n" + aideval + self.Commentaire.setText(QString(commentaire)) + diff --git a/InterfaceQT/monPoursuitePanel.py b/InterfaceQT/monPoursuitePanel.py new file mode 100644 index 00000000..3ba31b20 --- /dev/null +++ b/InterfaceQT/monPoursuitePanel.py @@ -0,0 +1,115 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +import os,traceback,sys +from qt import * +from desMacro import DMacro + +from monMacroPanel import MonMacroPanel +import convert + + +# Import des panels + +class MonPoursuitePanel(MonMacroPanel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + MonMacroPanel.__init__(self,node,parent,name,fl) + #Version TK ?? + self.ajoutPageOk() + + def ajoutPageOk(self) : + self.TabPage = QWidget(self.TWChoix,"TabPage") + self.LENomFichier = QLineEdit(self.TabPage,"LENomFichier") + self.LENomFichier.setGeometry(QRect(18,127,450,30)) + self.textLabel1_3 = QLabel(self.TabPage,"textLabel1_3") + self.textLabel1_3.setGeometry(QRect(70,50,350,41)) + self.BBrowse = QPushButton(self.TabPage,"BBrowse") + self.BBrowse.setGeometry(QRect(288,306,161,41)) + self.TWChoix.insertTab(self.TabPage,QString("")) + self.textLabel1_3.setText(self._DMacro__tr("La commande POURSUITE requiert un nom de Fichier :")) + self.BBrowse.setText(self._DMacro__tr("Edit")) + self.TWChoix.changeTab(self.TabPage,self._DMacro__tr("Fichier Poursuite")) + self.TWChoix.setCurrentPage(2) + if hasattr(self.node.item.object,'fichier_ini'): + self.LENomFichier.setText(self.node.item.object.fichier_ini) + else : + self.LENomFichier.setText("") + self.connect(self.BBrowse,SIGNAL("clicked()"),self.BBrowsePressed) + self.connect(self.LENomFichier,SIGNAL("returnPressed()"),self.LENomFichReturnPressed) + + + def BBrowsePressed(self): + self.node.makeEdit() + + def BOkIncPressed (self): + self.LENomFichReturnPressed() + + def LENomFichReturnPressed(self): + nomFichier=str(self.LENomFichier.text()) + if not os.path.isfile(nomFichier) : + commentaire = "Fichier introuvable" + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + return + + text=self.convert_file(nomFichier) + + # Si probleme a la lecture-conversion on arrete le traitement + if not text: + return + + try : + self.node.item.object.change_fichier_init(nomFichier,text) + commentaire = "Fichier modifie : " + self.node.item.get_nom() + self.Commentaire.setText(QString(commentaire)) + except: + l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1]) + QMessageBox.critical( self, "Erreur fatale au chargement du fichier Include", l[0]) + commentaire = "Fichier invalide" + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + return + + + def convert_file(self,file): + """ + Methode pour convertir le fichier file dans le format courant + """ + format=self.editor.format_fichier + text=None + if convert.plugins.has_key(format): + # Le convertisseur existe on l'utilise + p=convert.plugins[format]() + p.readfile(file) + text=p.convert('execnoparseur') + else : + commentaire = "Impossible de lire le fichier : Format inconnu" + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + return text + diff --git a/InterfaceQT/monRacinePanel.py b/InterfaceQT/monRacinePanel.py new file mode 100644 index 00000000..bf8f3a8e --- /dev/null +++ b/InterfaceQT/monRacinePanel.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desRacine import DRac +from qtCommun import QTPanel +from qtCommun import QTPanelTBW2 +from qtCommun import itemColore +from qt import * + + +# Import des panels + +class MonRacinePanel(DRac,QTPanelTBW2): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + DRac.__init__(self,parent,name,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent,racine=1) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOkPressed(self): + self.DefCmd() + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def BNextPressed(self): + QTPanelTBW2.BNextPressed(self) + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def AppelleBuildLBRegles(self): + listeRegles=self.node.item.get_regles() + listeNomsEtapes = self.node.item.get_l_noms_etapes() + self.BuildLBRegles(listeRegles,listeNomsEtapes) + + def DefCmd(self): + if self.LBNouvCommande.selectedItem()== None : return + name=str(self.LBNouvCommande.selectedItem().text()) + if name==QString(" "): return + if name.find("GROUPE :")==0 : return + self.editor.init_modif() + new_node = self.node.append_child(name,'first') diff --git a/InterfaceQT/monSelectVal.py b/InterfaceQT/monSelectVal.py new file mode 100644 index 00000000..c3c64148 --- /dev/null +++ b/InterfaceQT/monSelectVal.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desSelectVal import DSelVal +from qt import * + +# Import des panels + +class MonSelectVal(DSelVal): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,file,parent,name = None,fl = 0): + self.FonctPanel=parent + DSelVal.__init__(self,parent,name,Qt.WType_Dialog) + self.dictSepar={} + self.separateur=" " + self.texte=" " + self.textTraite="" + self.file=str(file) + self.readVal() + self.initVal() + + def readVal(self): + f = open(self.file, "rb") + self.texte = f.read() + f.close() + + def initVal(self): + self.TBtext.clear() + self.TBtext.setText(self.texte) + self.dictSepar["virgule"]="," + self.dictSepar["point-virgule"]=";" + self.dictSepar["espace"]=" " + + def SeparateurSelect(self,numero): + monBouton=self.BGSeparateur.find(numero) + self.separateur=self.dictSepar[str(monBouton.text())] + + def BImportSelPressed(self): + text=str(self.TBtext.selectedText()) + self.textTraite=text + self.Traitement() + + def BImportToutPressed(self): + self.textTraite=self.texte + self.Traitement() + + def Traitement(self): + import string + if self.textTraite[-1]=="\n" : self.textTraite=self.textTraite[0:-1] + self.textTraite=string.replace(self.textTraite,"\n",self.separateur) + liste1=self.textTraite.split(self.separateur) + liste=[] + for val in liste1 : + val=str(val) + try : + val=eval(val,{}) + except : + pass + liste.append(val) + self.FonctPanel.AjoutNValeur(liste) diff --git a/InterfaceQT/monUniqueASSDPanel.py b/InterfaceQT/monUniqueASSDPanel.py new file mode 100644 index 00000000..a2280be3 --- /dev/null +++ b/InterfaceQT/monUniqueASSDPanel.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +import prefs + +from qt import * + +from desUniqueASSD import DUnASSD +from qtCommun import QTPanel +from qtSaisie import SaisieValeur +from politiquesValidation import PolitiqueUnique + +# Import des panels + +class MonUniqueASSDPanel(DUnASSD,QTPanel,SaisieValeur): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + self.editor=parent + QTPanel.__init__(self,node,parent) + DUnASSD.__init__(self,parent,name,fl) + self.politique=PolitiqueUnique(node,parent) + self.InitListBoxASSD() + self.InitCommentaire() + + def BOkPressed(self): + self.ClicASSD() + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def InitCommentaire(self): + mc = self.node.item.get_definition() + try : + type = mc.type[0].__name__ + except : + type = str(mc.type[0]) + if len(mc.type)>1 : + for typ in mc.type[1:] : + try : + l=typ.__name__ + except: + l=str(typ) + type = type + ' ou '+l + commentaire="Un objet de type "+type+" est attendu" + aideval=self.node.item.aide() + commentaire=commentaire +"\n"+ aideval + self.Commentaire.setText(QString(commentaire)) diff --git a/InterfaceQT/monUniqueBasePanel.py b/InterfaceQT/monUniqueBasePanel.py new file mode 100644 index 00000000..435e5590 --- /dev/null +++ b/InterfaceQT/monUniqueBasePanel.py @@ -0,0 +1,125 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +import prefs + +from qt import * + +from desUniqueBase import DUnBase +from qtCommun import QTPanel +from qtSaisie import SaisieValeur +from politiquesValidation import PolitiqueUnique + +# Import des panels + +class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + self.editor=parent + QTPanel.__init__(self,node,parent) + DUnBase.__init__(self,parent,name,fl) + self.politique=PolitiqueUnique(node,parent) + self.InitLineEditVal() + self.InitCommentaire() + self.detruitBouton() + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def detruitBouton(self): + mc = self.node.item.get_definition() + type = mc.type[0] + #if not('grma' in repr(type)): + #if not('grma' in repr(type)) or not(self.editor.salome) : + if not(('grma' in repr(type)) or ('grno' in repr(type))) or not(self.editor.salome) : + self.BSalome.close() + self.BView2D.close() + + def InitLineEditVal(self): + valeur=self.node.item.get_valeur() + valeurTexte=self.politique.GetValeurTexte(valeur) + if valeurTexte != None: + try : + str=QString("").setNum(valeurTexte) + except : + str=QString(valeurTexte) + self.lineEditVal.setText(str) + + + def InitCommentaire(self): + mc = self.node.item.get_definition() + d_aides = { 'TXM' : "Une chaîne de caractères est attendue", + 'R' : "Un réel est attendu", + 'I' : "Un entier est attendu"} + type = mc.type[0] + commentaire=d_aides.get(type,"Type de base inconnu") + aideval=self.node.item.aide() + commentaire=commentaire +"\n"+ aideval + self.Commentaire.setText(QString(commentaire)) + + def BOk2Pressed(self): + SaisieValeur.BOk2Pressed(self) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def LEValeurPressed(self): + SaisieValeur.LEValeurPressed(self) + + def BParametresPressed(self): + QTPanel.BParametresPressed(self) + + def Ajout1Valeur(self,valeur): + SaisieValeur.LEValeurPressed(self,valeur) + + def BSalomePressed(self): + genea=self.node.item.get_genealogie() + kwType = None + for e in genea: + if "GROUP_NO" in e: kwType = "GROUP_NO" + if "GROUP_MA" in e: kwType = "GROUP_MA" + + selection, commentaire = self.editor.parent.appliEficas.selectGroupFromSalome(kwType,editor=self.editor) + if commentaire !="" : + self.Commentaire.setText(QString(commentaire)) + monTexte="" + if selection == [] : return + for geomElt in selection: + monTexte=geomElt+"," + monTexte= monTexte[0:-1] + self.LEValeur.setText(QString(monTexte)) + + def BView2DPressed(self): + valeur=self.LEValeur.text() + if valeur == QString("") : return + valeur = str(valeur) + if valeur : + ok, msgError = self.editor.parent.appliEficas.displayShape(valeur) + if not ok: + self.editor.parent.appli.affiche_infos(msgError) + diff --git a/InterfaceQT/monUniqueCompPanel.py b/InterfaceQT/monUniqueCompPanel.py new file mode 100644 index 00000000..46a85338 --- /dev/null +++ b/InterfaceQT/monUniqueCompPanel.py @@ -0,0 +1,163 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os,re + +# Modules Eficas +import prefs + +from qt import * + +from desUniqueComp import DUnComp +from qtCommun import QTPanel +from politiquesValidation import PolitiqueUnique + +# Import des panels + +#class MonUniqueCompPanel(DUnComp,QTPanel,SaisieValeur): +class MonUniqueCompPanel(DUnComp,QTPanel,PolitiqueUnique): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + QTPanel.__init__(self,node,parent) + DUnComp.__init__(self,parent,name,fl) + self.politique=PolitiqueUnique(node,parent) + self.InitLinesVal() + self.InitCommentaire() + + def InitLinesVal(self): + valeur=self.node.item.get_valeur() + if valeur == None or valeur == '' : return + if type(valeur) not in (types.ListType,types.TupleType) : + self.LEcomp.setText(str(valeur)) + else : + typ_cplx,x1,x2=valeur + self.LEReel.setText(str(x1)) + self.LEImag.setText(str(x2)) + if typ_cplx == "RI" : + self.buttonGroup1.setButton(1) + else : + self.buttonGroup1.setButton(0) + + + def LEcompRPressed(self) : + self.LEReel.clear() + self.LEImag.clear() + commentaire="expression valide" + valeur = str(self.LEcomp.text()) + d={} + try : + v=eval(valeur,d) + except : + commentaire="expression invalide" + self.editor.affiche_infos(commentaire) + return + try : + i=v.imag + except : + commentaire="expression n est pas de la forme a+bj" + self.editor.affiche_infos(commentaire) + + def LEReelRPressed(self): + self.LEcomp.clear() + commentaire="expression valide" + valeur = str(self.LEReel.text()) + try : + a=string.atof(valeur) + except : + commentaire="expression invalide" + self.editor.affiche_infos(commentaire) + + def LEImagRPressed(self): + self.LEcomp.clear() + commentaire="expression valide" + valeur = str(self.LEImag.text()) + try : + a=string.atof(valeur) + except : + commentaire="expression invalide" + self.editor.affiche_infos(commentaire) + + def BOkPressed(self): + if self.LEcomp.text()== "" : + valeur = self.getValeurAster() + else : + if self.LEReel.text() != "" or self.LEImag.text() != "" : + commentaire="entrer une seule valeur SVP" + self.editor.affiche_infos(commentaire) + return + valeur= self.getValeurComp() + self.politique.RecordValeur(valeur) + + def getValeurAster(self): + """ + Retourne le complexe saisi par l'utilisateur + """ + l=[] + if (self.buttonGroup1.selectedId() == 1 ) : + l.append("MP") + elif (self.buttonGroup1.selectedId() == 0) : + l.append("RI") + else : + commentaire="saisir le type de complexe" + self.editor.affiche_infos(commentaire) + return None + try : + l.append(string.atof(str(self.LEReel.text()))) + l.append(string.atof(str(self.LEImag.text()))) + except : + return None + return `tuple(l)` + + def getValeurComp(self): + commentaire="expression valide" + valeur = str(self.LEcomp.text()) + d={} + try : + v=eval(valeur,d) + except : + commentaire="expression invalide" + self.editor.affiche_infos(commentaire) + return None + try : + i=v.imag + except : + commentaire="expression n est pas de la forme a+bj" + self.editor.affiche_infos(commentaire) + return None + return v + + def InitCommentaire(self): + commentaire='Un complexe est attendu' + aideval=self.node.item.aide() + commentaire=commentaire +"\n"+ aideval + self.Commentaire.setText(QString(commentaire)) + + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT/monUniqueIntoPanel.py b/InterfaceQT/monUniqueIntoPanel.py new file mode 100644 index 00000000..568410e2 --- /dev/null +++ b/InterfaceQT/monUniqueIntoPanel.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +import prefs + +from qt import * + +from desUniqueInto import DUnIn +from qtCommun import QTPanel +from qtSaisie import SaisieValeur +from politiquesValidation import PolitiqueUnique + +# Import des panels + +class MonUniqueIntoPanel(DUnIn,QTPanel,SaisieValeur): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + QTPanel.__init__(self,node,parent) + DUnIn.__init__(self,parent,name,fl) + SaisieValeur.RemplitPanel(self) + self.politique=PolitiqueUnique(node,parent) + QObject.connect(self.listBoxVal, SIGNAL("doubleClicked(QListBoxItem*)" ), self.ClicValeur ) + + def ClicValeur(self): + SaisieValeur.ClicValeur(self) + + def BOkPressed(self): + SaisieValeur.BOkPressed(self) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT/monUniqueSDCOIntoPanel.py b/InterfaceQT/monUniqueSDCOIntoPanel.py new file mode 100644 index 00000000..0a54315b --- /dev/null +++ b/InterfaceQT/monUniqueSDCOIntoPanel.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +import prefs + +from qt import * + +from desUniqueSDCOInto import DUnSDCOInto +from qtCommun import QTPanel +from qtSaisie import SaisieSDCO +from politiquesValidation import PolitiqueUnique + +# Import des panels + +class MonUniqueSDCOIntoPanel(DUnSDCOInto,QTPanel,SaisieSDCO): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + QTPanel.__init__(self,node,parent) + DUnSDCOInto.__init__(self,parent,name,fl) + self.initLBSDCO() + + def initLBSDCO(self): + listeNomsSDCO = self.node.item.get_sd_avant_du_bon_type() + for aSDCO in listeNomsSDCO: + self.LBSDCO.insertItem( aSDCO) + valeur = self.node.item.get_valeur() + if valeur != "" and valeur != None : + self.LESDCO.setText(QString(valeur.nom)) + + + def LBSDCOReturnPressed(self): + """ + Teste si la valeur fournie par l'utilisateur est une valeur permise : + - si oui, l'enregistre + - si non, restaure l'ancienne valeur + """ + nomConcept=str(self.LBSDCO.currentText()) + self.LESDCO.clear() + self.editor.init_modif() + anc_val = self.node.item.get_valeur() + test_CO=self.node.item.is_CO(anc_val) + + valeur,validite=self.node.item.eval_valeur(nomConcept) + test = self.node.item.set_valeur(valeur) + if not test : + commentaire = "impossible d'évaluer : %s " %`valeur` + elif validite: + commentaire = "Valeur du mot-clé enregistrée" + if test_CO: + # il faut egalement propager la destruction de l'ancien concept + self.node.item.delete_valeur_co(valeur=anc_val) + self.node.item.object.etape.get_type_produit(force=1) + self.node.item.object.etape.parent.reset_context() + else : + commentaire = self.node.item.get_cr() + self.reset_old_valeur(anc_val,mess=mess) + self.editor.affiche_infos(commentaire) + self.Commentaire.setText(commentaire) + + def LESDCOReturnPressed(self) : + self.LBSDCO.clearSelection() + SaisieSDCO.LESDCOReturnPressed(self) + + def BOkPressed(self): + self.LESDCOReturnPressed() + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT/monUniqueSDCOPanel.py b/InterfaceQT/monUniqueSDCOPanel.py new file mode 100644 index 00000000..f2247ed1 --- /dev/null +++ b/InterfaceQT/monUniqueSDCOPanel.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +import prefs + +from qt import * + +from desUniqueSDCO import DUnSDCO +from qtCommun import QTPanel +from qtSaisie import SaisieSDCO + +# Import des panels + +class MonUniqueSDCOPanel(DUnSDCO,QTPanel,SaisieSDCO): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + QTPanel.__init__(self,node,parent) + DUnSDCO.__init__(self,parent,name,fl) + valeur = self.node.item.get_valeur() + if valeur != "" and valeur != None : + self.LESDCO.setText(QString(valeur.nom)) + + def BOkPressed(self): + SaisieSDCO.LESDCOReturnPressed(self) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOuiPressed(self): + self.Commentaire.setText("Aucun Objet de ce type n'est defini") + self.rbOui.setChecked(1) + + def LESDCOReturnPressed(self): + """ + Lit le nom donné par l'utilisateur au concept de type CO qui doit être + la valeur du MCS courant et stocke cette valeur + """ + SaisieSDCO.LESDCOReturnPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT/panelsQT.py b/InterfaceQT/panelsQT.py new file mode 100644 index 00000000..cc2125fe --- /dev/null +++ b/InterfaceQT/panelsQT.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +import string +import os + +import traceback + +from qt import * +from qtCommun import QTPanel +from desInactif import DInactif + + +SEPARATEUR = '-'*30 + + +class PanelInactif( QTPanel, DInactif ): + def __init__(self,node,parent=None ): + DInactif.__init__(self,parent) + QTPanel.__init__(self,node,parent) + + +class NoPanel( QWidget ): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + self.textLabel = QLabel(self) + self.textLabel.setText(QString("PANNEAU A IMPLEMENTER")) + self.textLabel.setGeometry(QRect(130,150,219,17)) + self.resize(QSize(600,480).expandedTo(self.minimumSizeHint())) + diff --git a/InterfaceQT/politiquesValidation.py b/InterfaceQT/politiquesValidation.py new file mode 100644 index 00000000..539f6113 --- /dev/null +++ b/InterfaceQT/politiquesValidation.py @@ -0,0 +1,162 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import types + +from qt import * + + +#------------------ +class Validation : +#------------------ + def __init__(self,node,parent) : + self.node=node + self.parent=parent + + def TesteUneValeur(self,valeurentree): + valeur,validite=self.node.item.eval_valeur(valeurentree) + if not validite : + commentaire = "impossible d'évaluer : %s " %`valeurentree` + return valeur,validite,commentaire + + testtype,commentaire = self.node.item.object.verif_type(valeur) + if not testtype : + return valeur,0,commentaire + + valide=self.node.item.valide_item(valeur) + if type(valide) == types.TupleType: + validite,commentaire=valide + else : + validite=valide + commentaire=" " + + if not validite : + commentaire = "impossible d'évaluer : %s " %`valeurentree` + return valeur, validite, commentaire + +# ---------------------------------------------------------------------------------------- +# Méthodes utilisées pour la manipulation des items en notation scientifique +# a mettre au point +# ---------------------------------------------------------------------------------------- + def SetValeurTexte(self,texteValeur) : + try : + if "R" in self.node.item.object.definition.type: + if texteValeur[0] != "'": + clef=eval(texteValeur) + if str(clef) != str(texteValeur) : + self.node.item.object.init_modif() + clefobj=self.node.item.object.GetNomConcept() + if not self.parent.dict_reels.has_key(clefobj): + self.parent.dict_reels[clefobj] = {} + self.parent.dict_reels[clefobj][clef]=texteValeur + self.parent.dict_reels[clefobj] + self.node.item.object.fin_modif() + except: + pass + + def GetValeurTexte(self,valeur) : + valeurTexte=valeur + if "R" in self.node.item.object.definition.type: + clefobj=self.node.item.object.GetNomConcept() + if self.parent.dict_reels.has_key(clefobj): + if self.parent.dict_reels[clefobj].has_key(valeur): + valeurTexte=self.parent.dict_reels[clefobj][valeur] + return valeurTexte + +#------------------------------------ +class PolitiqueUnique(Validation) : +#------------------------------------ + """ + classe servant pour les entrees ne demandant qu un mot clef + """ + def __init__(self,node,parent): + Validation.__init__(self,node,parent) + + def RecordValeur(self,valeurentree): + if self.parent.modified == 'n' : self.parent.init_modif() + ancienne_val = self.node.item.get_valeur() + valeur,validite,commentaire =self.TesteUneValeur(valeurentree) + if validite : + validite=self.node.item.set_valeur(valeur) + if self.node.item.isvalid(): + commentaire = "Valeur du mot-clé enregistrée" + self.SetValeurTexte(str(valeurentree)) + else: + cr = self.node.item.get_cr() + commentaire = "Valeur du mot-clé non autorisée "+cr.get_mess_fatal() + self.node.item.set_valeur(ancienne_val) + return validite, commentaire + + +#------------------------ +class PolitiquePlusieurs: +#------------------------ + """ + classe servant pour les entrees ne demandant qu un mot clef + """ + def __init__(self,node,parent) : + self.node=node + self.parent=parent + + + def AjoutValeurs(self,listevaleur,index,listecourante): + listeRetour=[] + commentaire="Nouvelle valeur acceptée" + commentaire2="" + valide=1 + if listevaleur==None: return + if listevaleur=="": return + if not( type(listevaleur) in (types.ListType,types.TupleType)) : + listevaleur=tuple(listevaleur) + for valeur in listevaleur : + # On teste le type de la valeur + valide=self.node.item.valide_item(valeur) + if not valide : + #print self.__class__ + #if not testtype : + try : + valeur,valide=self.node.item.eval_valeur(valeur) + valide,commentaire = self.node.item.object.verif_type(valeur) + except : + #return testtype,commentaire,"",listeRetour + pass + if not valide: + commentaire="Valeur "+str(valeur)+ " incorrecte : ajout à la liste refusé" + commentaire2=self.node.item.info_erreur_item() + return valide,commentaire,commentaire2,listeRetour + + # On valide la liste obtenue + encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante) + if not encorevalide : + 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() + if len(listecourante) + 1 >= max : + commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé" + return valide,commentaire,commentaire2,listeRetour + if len(listecourante) + 1 > min : + return valide,commentaire,commentaire2,listeRetour + # On ajoute la valeur testee a la liste courante et a la liste acceptee + listecourante.insert(index,valeur) + index=index+1 + listeRetour.append(valeur) + + return valide,commentaire,commentaire2,listeRetour diff --git a/InterfaceQT/prefsQT.py b/InterfaceQT/prefsQT.py new file mode 100644 index 00000000..ef1aa899 --- /dev/null +++ b/InterfaceQT/prefsQT.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- + +# ====================================================================== +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +lang='fr' + diff --git a/InterfaceQT/qtCommun.py b/InterfaceQT/qtCommun.py new file mode 100644 index 00000000..e89ffc22 --- /dev/null +++ b/InterfaceQT/qtCommun.py @@ -0,0 +1,349 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +import traceback + +from qt import * +import prefsQT + +# Import des panels + +# ---------- # +class QTPanel: +# ---------- # + """ + Classe contenant les méthodes Qt communes a tous les panneaux droits + Tous les panneaux Mon...Panel héritent de cette classe + Gére plus précisement : + - l affichage de la doc + - le bouton Suppression (BSupPressed) + - la mutualisation de l affichage des regles + """ + def __init__(self,node, parent = None): + self.editor = parent + self.node = node + + def BSupPressed(self): + self.editor.init_modif() + self.node.delete() + + def ViewDoc(self) : + cle_doc = self.node.item.get_docu() + if cle_doc == None : + QMessageBox.information( self.editor, "Documentation Vide", \ + "Aucune documentation Aster n'est associée à ce noeud") + return + cle_doc = string.replace(cle_doc,'.','') + cle_doc = string.replace(cle_doc,'-','') + commande = self.editor.appliEficas.CONFIGURATION.exec_acrobat + try : + f=open(commande,"rb") + except : + texte="impossible de trouver la commande " + commande + QMessageBox.information( self.editor, "Lecteur PDF", texte) + return + nom_fichier = cle_doc+".pdf" + fichier = os.path.abspath(os.path.join(self.editor.CONFIGURATION.path_doc, + nom_fichier)) + try : + f=open(fichier,"rb") + except : + texte="impossible d'ouvrir " + fichier + QMessageBox.information( self.editor, "Documentation Vide", texte) + return + if os.name == 'nt': + os.spawnv(os.P_NOWAIT,commande,(commande,fichier,)) + elif os.name == 'posix': + script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier) + pid = os.system(script) + + def BOkPressed(self): + """ Impossible d utiliser les vrais labels avec designer ?? """ + label=self.TWChoix.tabLabel(self.TWChoix.currentPage()) + if label==QString("Nouvelle Commande"): + self.DefCmd() + if label==QString("Nommer Concept"): + self.LENomConceptReturnPressed() + if label==QString("Ajouter Mot-Clef"): + self.DefMC() + if label==QString("Définition Formule"): + self.BOkPressedFormule() + if label==QString("Valeur Parametre"): + self.BOkParamPressed() + if label==QString("Fichier Include"): + self.BOkIncPressed() + if label==QString("Commentaire"): + self.TexteCommentaireEntre() + + def BParametresPressed(self): + liste=self.node.item.get_liste_param_possible() + from monListeParamPanel import MonListeParamPanel + MonListeParamPanel(liste=liste,parent=self).show() + + def AppelleBuildLBRegles(self): + listeRegles = self.node.item.get_regles() + listeNomsEtapes = self.node.item.get_mc_presents() + self.BuildLBRegles(listeRegles,listeNomsEtapes) + + + def BuildLBRegles(self,listeRegles,listeNomsEtapes): + if len(listeRegles) > 0: + for regle in listeRegles : + texteRegle=regle.gettext() + texteMauvais,test = regle.verif(listeNomsEtapes) + for ligne in texteRegle.split("\n") : + if ligne == "" : + self.LBRegles.insertItem(ligne) + continue + if ligne[0]=="\t" : + ligne=" "+ligne[1:] + if test : + self.LBRegles.insertItem(ligne) + else : + self.LBRegles.insertItem(itemColore(ligne)) + + +# ----------------------- # +class QTPanelTBW1(QTPanel): +# ----------------------- # + """ + Classe contenant les méthodes nécessaires a l onglet "Ajouter Mot-Clef" + hérite de QTPanel # Attention n appelle pas le __init__ + Gére plus précisement : + """ + def __init__(self,node, parent = None): + self.editor = parent + self.node = node + self.BuildLBMCPermis() + self.AppelleBuildLBRegles() + + def BuildLBMCPermis(self): + self.LBMCPermis.clear() + try : + QObject.disconnect(self.LBMCPermis,SIGNAL("doubleClicked(QListBoxItem*)"),self.DefMC) + except : + # normal pour la première fois qu on passe + # peut-etre inutile selon le connect ?? + pass + QObject.connect(self.LBMCPermis,SIGNAL("doubleClicked(QListBoxItem*)"),self.DefMC) + + jdc = self.node.item.get_jdc() + genea =self.node.item.get_genealogie() + liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico) + for aMc in liste_mc: + self.LBMCPermis.insertItem( aMc) + + + def DefMC(self): + """ On ajoute un mot-clé à la commande : subnode """ + if self.LBMCPermis.selectedItem() == None : return + name=str(self.LBMCPermis.selectedItem().text()) + self.editor.init_modif() + self.node.append_child(name) + +# ---------------------------- # +class QTPanelTBW2(QTPanel): +# ---------------------------- # + """ + Classe contenant les méthodes nécessaires a l onglet "Nouvelle Commande" + hérite de QTPanel # Attention n appelle pas le __init__ + Gére plus précisement : + """ + + def __init__(self,node, parent = None, racine = 0): + self.editor = parent + self.node = node + self.BuildLBNouvCommande() + if racine == 1 : self.AppelleBuildLBRegles() + + + def BuildLBNouvCommande(self): + self.LBNouvCommande.clear() + try : + QObject.disconnect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.DefCmd) + except : + # normal pour la première fois qu on passe + # peut-etre inutile selon le connect ?? + pass + + jdc=self.node.item.object.get_jdc_root() + if self.RBalpha.isOn(): + listeCmd = jdc.get_liste_cmd() + for aCmd in listeCmd: + self.LBNouvCommande.insertItem( aCmd ) + else : + listeGroupes,dictGroupes=jdc.get_groups() + for grp in listeGroupes: + if grp == "CACHE":continue + listeCmd=dictGroupes[grp] + texte="GROUPE : "+grp + self.LBNouvCommande.insertItem( texte ) + self.LBNouvCommande.insertItem( " " ) + for aCmd in listeCmd: + self.LBNouvCommande.insertItem( aCmd) + self.LBNouvCommande.insertItem( " " ) + QObject.connect( self.LBNouvCommande, SIGNAL("doubleClicked(QListBoxItem*)"),self.DefCmd ) + QObject.connect( self.LBNouvCommande, SIGNAL("returnPressed(QListBoxItem*)"),self.DefCmd ) + + def DefCmd(self): + if (self.editor.focusWidget())!=self.LBNouvCommande : + return + if self.LBNouvCommande.selectedItem()== 0 : return + if self.LBNouvCommande.selectedItem()== None : return + name=str(self.LBNouvCommande.selectedItem().text()) + if name==QString(" "): + return + if name.find("GROUPE :")==0 : + return + self.editor.init_modif() + new_node = self.node.append_brother(name,'after') + + + def LEFiltreTextChanged(self): + MonItem=self.LBNouvCommande.findItem(self.LEFiltre.text().upper(),Qt.Contains) + if MonItem != None : + self.LBNouvCommande.setCurrentItem(MonItem) + self.LBNouvCommande.setSelected(MonItem,1) + try : + QObject.disconnect(self.LBNouvCommande,SIGNAL("returnPressed(QListBoxItem*)"),self.DefCmd) + except : + pass + + def LEfiltreReturnPressed(self): + self.DefCmd() + + def BNextPressed(self): + MonItem=self.LBNouvCommande.findItem(self.LEFiltre.text().upper(),Qt.Contains) + if MonItem != None : + self.LBNouvCommande.setCurrentItem(self.LBNouvCommande.currentItem()+1) + self.LEFiltreTextChanged() + + def LBNouvCommandeClicked(self): + name=str(self.LBNouvCommande.currentText()) + + +# ---------------------------- # +class QTPanelTBW3(QTPanel): +# ---------------------------- # + + """ + Classe contenant les méthodes nécessaires a l onglet "Nommer Concept" + si non réentrant + hérite de QTPanel # Attention n appelle pas le __init__ + Gére plus précisement : + """ + + def __init__(self,node, parent = None): + self.editor = parent + self.node = node + type_sd = self.node.item.get_type_sd_prod() + nomConcept = self.node.item.GetText() + self.typeConcept.setText(type_sd) + self.LENomConcept.setText("") + self.LENomConcept.setText(nomConcept) + + + + def LENomConceptReturnPressed(self): + """ + Nomme le concept SD retourne par l'etape + """ + nom = str(self.LENomConcept.text()) + nom = string.strip(nom) + + if nom == '' : return # si pas de nom, on ressort sans rien faire + + self.editor.init_modif() + test,mess = self.node.item.nomme_sd(nom) + self.editor.affiche_infos(mess) + +# ----------------------- # +class ViewText(QDialog): +# ----------------------- # + """ + Classe permettant la visualisation de texte + """ + def __init__(self,parent = None,name = None,modal = 0,fl = 0): + QDialog.__init__(self,parent,name,modal,fl) + + l1 = QVBoxLayout(self,11,6,) + self.view = QTextEdit(self) + self.view.setReadOnly(True) + + l2 = QHBoxLayout(None,0,6) + Horizontal_Spacing2 = QSpacerItem(220,20,QSizePolicy.Expanding,QSizePolicy.Minimum) + bclose= QPushButton(self) + bclose.setText(self.trUtf8( "Fermer")) + bsave= QPushButton(self) + bsave.setText(self.trUtf8( "Sauver")) + l2.addItem(Horizontal_Spacing2) + l2.addWidget(bsave) + l2.addWidget(bclose) + + l1.addWidget(self.view) + l1.addLayout(l2) + + self.resize( QSize(600,507).expandedTo(self.minimumSizeHint()) ) + self.connect( bclose,SIGNAL("clicked()"), self, SLOT("close()") ) + self.connect( bsave,SIGNAL("clicked()"), self.saveFile ) + + def setText(self, txt ): + self.view.setText(txt) + + def saveFile(self): + #recuperation du nom du fichier + fn = QFileDialog.getSaveFileName(None, + self.trUtf8("All Files (*)"), self, None, + self.trUtf8("Save File"), '', 0) + if not fn.isNull(): + if QFileInfo(fn).exists(): + abort = QMessageBox.warning(self, + self.trUtf8("Save File"), + self.trUtf8("The file %1 already exists.") + .arg(fn), + self.trUtf8("&Overwrite"), + self.trUtf8("&Abort"), None, 1) + if abort: + return + fn = unicode(QDir.convertSeparators(fn)) + else: + return + + #ecriture du fichier + try: + f = open(fn, 'wb') + f.write(str(self.view.text())) + f.close() + return 1 + except IOError, why: + QMessageBox.critical(self, self.trUtf8('Save File'), + self.trUtf8('The file %1 could not be saved.
Reason: %2') + .arg(unicode(fn)).arg(str(why))) + return + + +#------------------------------- +class itemColore(QListBoxText): +#------------------------------- + def paint(self,p): + p.setPen(Qt.red) + QListBoxText.paint(self,p); diff --git a/InterfaceQT/qtEficas.py b/InterfaceQT/qtEficas.py new file mode 100644 index 00000000..0e537d87 --- /dev/null +++ b/InterfaceQT/qtEficas.py @@ -0,0 +1,295 @@ +# -*- coding: iso-8859-1 -*- + +import os, sys +REPINI=os.path.dirname(os.path.abspath(__file__)) +INSTALLDIR=os.path.join(REPINI,'..') +sys.path.append(INSTALLDIR) +sys.path.append(INSTALLDIR+"/Ui") +sys.path.append(INSTALLDIR+"/InterfaceQT") + +from qt import * +from myMain import Eficas +from viewManager import MyTabview + +from Editeur import configuration +from Editeur import session + +import utilIcons +utilIcons.initializeMimeSourceFactory() + + +class Appli(Eficas): + """ + Class implementing the main user interface. + """ + def __init__(self,code="ASTER",salome=0,parent=None): + """ + Constructor + + @param loc locale to be used by the UI (string) + @param splash reference to the splashscreen (UI.SplashScreen.SplashScreen) + """ + self.ihm="QT" + self.code=code + self.salome=salome + Eficas.__init__(self,parent,fl=Qt.WType_Dialog) + #Eficas.__init__(self,parent) + + if code == "ASTER" : + from Aster import prefs + import sys + sys.path.append(INSTALLDIR+"/Aster") + else : + import prefs + #try : + if 1 : + apply(Appli.__dict__[code],(self,)) + #except : + else: + pass + if hasattr(prefs,'encoding'): + import sys + reload(sys) + sys.setdefaultencoding(prefs.encoding) + del sys.setdefaultencoding + + self.top=self + self.CONFIGURATION = configuration.make_config(self,prefs.REPINI) + self.CONFIGStyle = configuration.make_config_style(self,prefs.REPINI) + + self.viewmanager = MyTabview(self, self) #MyTabview, MyWorkspace, Listspace + self.setCentralWidget(self.viewmanager) + + self.recentMenu = QPopupMenu(self.Fichier) + self.Fichier.insertItem(self.trUtf8('&Recents'), self.recentMenu,99,8) + self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu) + self.connect(self,PYSIGNAL('preferencesChanged'), + self.viewmanager.handlePreferencesChanged) + + self.connect(self.viewmanager,PYSIGNAL('lastEditorClosed'), + self.handleLastEditorClosed) + + self.connect(self.viewmanager,PYSIGNAL('editorOpened'), + self.handleEditorOpened) + + # Initialise the instance variables. + self.currentProg = None + self.isProg = 0 + self.utEditorOpen = 0 + self.utProjectOpen = 0 + + self.inDragDrop = 0 + self.setAcceptDrops(1) + self.ficPatrons={} + self.initPatrons() + self.monAssistant=QAssistantClient(QString(""), self.viewmanager) + + if self.salome : + from Editeur import session + self.ouvreFichiers() + + def OPENTURNS(self) : + self.MenuBar.removeItem(5) + self.MenuBar.removeItem(6) + self.MenuBar.removeItem(7) + + + def ouvreFichiers(self) : + # Ouverture des fichiers de commandes donnes sur la ligne de commande + cwd=os.getcwd() + self.dir=cwd + for study in session.d_env.studies: + os.chdir(cwd) + d=session.get_unit(study,self) + #print study["comm"] + self.viewmanager.handleOpen(fn=study["comm"],units=d) + + + def initPatrons(self) : + # Mise à jour du menu des fichiers recemment ouverts + from Editeur import listePatrons + self.listePatrons = listePatrons.listePatrons(self.code) + idx = 0 + for nomSsMenu in self.listePatrons.liste.keys(): + ssmenu = QPopupMenu(self.Patrons) + self.Patrons.insertItem(nomSsMenu, ssmenu) + for fichier in self.listePatrons.liste[nomSsMenu]: + id = ssmenu.insertItem(fichier, self.handleOpenPatrons) + self.ficPatrons[idx]=fichier + self.Patrons.setItemParameter(id,idx) + idx=idx+1 + + def traductionV7V8(self): + from gereTraduction import traduction + traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V7V8") + + def traductionV8V9(self): + from gereTraduction import traduction + traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V8V9") + + def version(self) : + from desVisu import DVisu + titre = "version " + monVisu=DVisu(parent=self.viewmanager,fl=Qt.WType_Dialog) + monVisu.setCaption(titre) + monVisu.TB.setText("Eficas V1.14") + monVisu.adjustSize() + monVisu.show() + + def aidePPal(self) : + maD=INSTALLDIR+"/AIDE/fichiers" + docsPath = QDir(maD).absPath() + self.monAssistant.showPage( QString("%1/index.html").arg(docsPath) ) + + def optionEditeur(self) : + from monOptionsEditeur import Options + monOption=Options(parent=self.viewmanager,fl=Qt.WType_Dialog,configuration=self.CONFIGURATION) + monOption.show() + + def optionPdf(self) : + from monOptionsPdf import OptionPdf + monOption=OptionPdf(parent=self.viewmanager,fl=Qt.WType_Dialog,configuration=self.CONFIGURATION) + monOption.show() + + def handleShowRecentMenu(self): + """ + Private method to set up recent files menu. + """ + idx = 0 + self.recentMenu.clear() + + for rp in self.viewmanager.recent: + id = self.recentMenu.insertItem('&%d. %s' % (idx+1, unicode(rp)), + self.handleOpenRecent) + self.recentMenu.setItemParameter(id,idx) + + idx = idx + 1 + + self.recentMenu.insertSeparator() + self.recentMenu.insertItem(self.trUtf8('&Clear'), self.handleClearRecent) + + def handleOpenPatrons(self, idx): + fichier=REPINI+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx] + self.viewmanager.handleOpen(fn=fichier, patron = 1) + + + def handleOpenRecent(self, idx): + """ + Private method to open a file from the list of rencently opened files. + + @param idx index of the selected entry (int) + """ + self.viewmanager.handleOpen(unicode(self.viewmanager.recent[idx])) + + def handleClearRecent(self): + """ + Private method to clear the recent files menu. + """ + self.viewmanager.recent = QStringList() + + + def handleLastEditorClosed(self): + """ + Public slot to handle the lastEditorClosed signal. + """ + pass # CS_pbruno todo griser les parties k'il faut + + def handleEditorOpened(self, fn): + """ + Public slot to handle the editorOpened signal. + + @param fn filename of the opened editor (string) + """ + pass # CS_pbruno todo degriser les parties k'il faut + + + def fileNew(self): + self.viewmanager.newEditor() + + def fileOpen(self, prog=None): + self.viewmanager.handleOpen(prog) + + def fileNewView(self): + self.viewmanager.handleNewView() + + def fileSave(self): + self.viewmanager.saveCurrentEditor() + + def fileSaveAs(self): + self.viewmanager.saveAsCurrentEditor() + + def fileClose(self): + self.viewmanager.handleClose() + + def fileCloseAll(self): + self.viewmanager.handleCloseAll() + + def fileExit(self): + # On peut sortir sur Abort + if self.viewmanager.handleCloseAll() ==0 : + return + if self.salome : + self.close() + else : + qApp.closeAllWindows() + + def editCopy(self): + self.viewmanager.handleEditCopy() + + def editCut(self): + self.viewmanager.handleEditCut() + + def editPaste(self): + self.viewmanager.handleEditPaste() + + def jdcFichierSource(self): + self.viewmanager.handleViewJdcFichierSource() + + def jdcRapport(self): + self.viewmanager.handleViewJdcRapport() + + def visuJdcPy(self): + self.viewmanager.handlevisuJdcPy() + + def get_source(self,file): + from editor import JDCEditor + monEditeur=JDCEditor() + texte=monEditeur.get_source(file) + return texte + + def helpAbout(self): + import AIDE + AIDE.go3(parent=self) + + def NewInclude(self): + self.viewmanager.newIncludeEditor() + +if __name__=='__main__': + + # Modules Eficas + sys.path.append(INSTALLDIR+"/Aster") + from Aster import prefs + if hasattr(prefs,'encoding'): + # Hack pour changer le codage par defaut des strings + import sys + reload(sys) + sys.setdefaultencoding(prefs.encoding) + del sys.setdefaultencoding + # Fin hack + + from Editeur import import_code + from Editeur import session + + # Analyse des arguments de la ligne de commande + options=session.parse(sys.argv) + code=options.code + + app = QApplication(sys.argv) + mw = Appli() + app.setMainWidget(mw) + app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + mw.ouvreFichiers() + mw.show() + + res = app.exec_loop() + sys.exit(res) diff --git a/InterfaceQT/qtSaisie.py b/InterfaceQT/qtSaisie.py new file mode 100644 index 00000000..7c3c86e6 --- /dev/null +++ b/InterfaceQT/qtSaisie.py @@ -0,0 +1,185 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from qt import * + +# Import des panels + +class SaisieValeur: + """ + Classe contenant les méthodes communes aux panels + permettant de choisir des valeurs + """ + def __init__(self): + pass + + def InitListBoxASSD(self): + listeNomsSD = self.node.item.get_sd_avant_du_bon_type() + for aSD in listeNomsSD: + self.listBoxASSD.insertItem( aSD) + QObject.connect(self.listBoxASSD, SIGNAL("doubleClicked(QListBoxItem*)" ), self.ClicASSD ) + min,max = self.node.item.GetMinMax() + l= self.node.item.GetListeValeurs() + + if (min == 1 and min == max and len(listeNomsSD)==1 and (l==[] or l==None)): + if ('R' not in self.node.item.get_type()) : + self.listBoxASSD.setCurrentItem(0) + + + def BuildLBValeurs(self): + self.LBValeurs.clear() + listeValeurs=self.node.item.GetListeValeurs() + for valeur in listeValeurs: + self.LBValeurs.insertItem(str(valeur)) + if listeValeurs != None and listeValeurs != [] : + self.LBValeurs.setCurrentItem(len(listeValeurs) - 1) + + + def RemplitPanel(self,listeDejaLa=[]): + self.listBoxVal.clear() + lChoix=self.node.item.get_liste_possible(listeDejaLa) + for valeur in lChoix : + self.listBoxVal.insertItem( str(valeur) ) + if len(lChoix) == 1 : + self.listBoxVal.setSelected(0,1) + + def ClicASSD(self): + if self.listBoxASSD.selectedItem()== None : return + valeurQstring=self.listBoxASSD.selectedItem().text() + commentaire = QString("Valeur selectionnée : ") + commentaire.append(valeurQstring) + self.Commentaire.setText(commentaire) + valeur=valeurQstring.latin1() + validite,commentaire=self.politique.RecordValeur(valeur) + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + + def ClicValeur(self): + if self.listBoxVal.selectedItem()== None : return + valeurQstring=self.listBoxVal.selectedItem().text() + valeur=valeurQstring.latin1() + validite,commentaire=self.politique.RecordValeur(valeur) + #self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + + def BOkPressed(self): + if self.listBoxVal.selectedItem()==None : + commentaire = "Pas de valeur selectionnée" + self.Commentaire.setText(QString(commentaire)) + else : + self.ClicValeur() + + def BOk2Pressed(self): + if str(self.lineEditVal.text())== "" : + commentaire = "Pas de valeur entrée " + self.Commentaire.setText(QString(commentaire)) + else : + self.LEValeurPressed() + + def LEValeurPressed(self,valeur=None): + if valeur == None : + nouvelleValeur=str(self.lineEditVal.text()) + else : + self.lineEditVal.setText(QString(valeur.nom)) + nouvelleValeur=valeur + validite,commentaire=self.politique.RecordValeur(nouvelleValeur) + if commentaire != "" : + #self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + + + def TraiteLEValeur(self,valeurTraitee=None) : + # lit la chaine entree dans le line edit + # et la tranforme en chaine de valeurs + # a traiter. renvoie eventuellement des complexes + listeValeurs=[] + if valeurTraitee == None : + valeurBrute=str(self.LEValeur.text()) + else : + valeurBrute=valeurTraitee + if valeurBrute == str("") : return 1, listeValeurs + try : + valeur=eval(valeurBrute,{}) + except : + valeur=valeurBrute + if type(valeur) in (types.ListType,types.TupleType) : + indice = 0 + while (indice < len(valeur)): + v=valeur[indice] + if self.node.item.wait_complex() : + if (v== 'RI' or v == 'MP'): + try : + t=tuple([v,valeur[indice+1],valeur[indice+2]]) + listeValeurs.append(t) + indice=indice+3 + except : + commentaire = "Veuillez entrer le complexe sous forme aster ou sous forme python" + self.editor.affiche_infos(commentaire) + return listeValeurs,0 + + + else : # ce n'est pas un tuple à la mode aster + + listeValeurs.append(v) + indice = indice + 1 + + else: # on n'attend pas un complexe + listeValeurs.append(v) + indice=indice+1 + elif type(valeur) == types.StringType: + listeValeurs=valeur.split(',') + else: + listeValeurs.append(valeur) + + return listeValeurs,1 + + +class SaisieSDCO : + def __init__(self): + pass + + def LESDCOReturnPressed(self): + """ + Lit le nom donné par l'utilisateur au concept de type CO qui doit être + la valeur du MCS courant et stocke cette valeur + """ + self.editor.init_modif() + anc_val = self.node.item.get_valeur() + if anc_val != None: + # il faut egalement propager la destruction de l'ancien concept + self.node.item.delete_valeur_co(valeur=anc_val) + # et on force le recalcul des concepts de sortie de l'etape + self.node.item.object.etape.get_type_produit(force=1) + # et le recalcul du contexte + self.node.item.object.etape.parent.reset_context() + nomConcept = str(self.LESDCO.text()) + if nomConcept == "" : return + + test,commentaire=self.node.item.set_valeur_co(nomConcept) + if test: + commentaire="Valeur du mot-clé enregistree" + self.node.update_node_valid() + else : + cr = self.node.item.get_cr() + commentaire = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal() + self.node.item.set_valeur_co(anc_val) + self.Commentaire.setText(QString(commentaire)) diff --git a/InterfaceQT/readercata.py b/InterfaceQT/readercata.py new file mode 100644 index 00000000..1f2dac87 --- /dev/null +++ b/InterfaceQT/readercata.py @@ -0,0 +1,413 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module sert a lire un catalogue et a construire + un objet CataItem pour Eficas. + Il s'appuie sur la classe READERCATA +""" +# Modules Python +import time +import os,sys,py_compile +import traceback +import cPickle +import re + +# Modules Eficas +import prefs +from Noyau.N_CR import CR +from Editeur.utils import init_rep_cata_dev + +from Editeur import analyse_catalogue +from Editeur import autre_analyse_cata +from Editeur import uiinfo +from monChoixCata import MonChoixCata + +from qt import * + +version="14" + +class READERCATA: + + def __init__(self,appli,parent): + self.appli=appli + self.parent=parent + self.code=self.appli.code + self.appli.format_fichier='python' + self.version_code=self.appli.version_code + self.version_cata=None + self.fic_cata=None + self.OpenCata() + self.cataitem=None + + def OpenCata(self): + """ + Ouvre le catalogue standard du code courant, cad le catalogue présent + dans le répertoire Cata + """ + message1 = "Compilation des fichiers Eficas \n\n Veuillez patienter ..." + self.configure_barre(4) + + liste_cata_possibles=[] + for catalogue in self.appli.CONFIGURATION.catalogues: + if catalogue[0] == self.code : + liste_cata_possibles.append(catalogue) + + if len(liste_cata_possibles)==0: + QMessageBox.critical( self.parent, "Import du catalogue","Pas de catalogue defini pour le code %s" % self.code) + self.appli.parent.ui.close() + sys.exit(1) + + if self.version_code is not None: + # La version a ete fixee + for cata in liste_cata_possibles: + if self.version_code == cata[1]: + self.fic_cata = cata[2] + self.appli.format_fichier=cata[3] + elif len(liste_cata_possibles)==1: + self.fic_cata = liste_cata_possibles[0][2] + self.version_code = liste_cata_possibles[0][1] + self.appli.format_fichier=liste_cata_possibles[0][3] + lab=QString("Eficas V1.") + lab+=QString(version) + lab+=QString(" pour ") + lab+=QString(self.code) + lab+=QString(" avec le catalogue ") + lab+=self.version_code + try : + # souci pour les includes + self.appli.parent.ui.setCaption(lab) + except : + pass + #qApp.mainWidget().setCaption(lab) + else: + # plusieurs catalogues sont disponibles : il faut demander a l'utilisateur + # lequel il veut utiliser ... + self.ask_choix_catalogue() + + if self.fic_cata == None : + print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code) + sys.exit(0) + + self.determineMater() + + + # détermination de fic_cata_c et fic_cata_p + self.fic_cata_c = self.fic_cata + 'c' + self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py' + + # import du catalogue + self.cata = self.import_cata(self.fic_cata) + self.update_barre() + if not self.cata : + QMessageBox.critical( self.parent, "Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata) + self.appli.parent.ui.close() + sys.exit(1) + # + # analyse du catalogue (ordre des mots-clés) + # + # Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue + # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation + # des mots clés a la création + self.Retrouve_Ordre_Cata_Standard_autre() + self.update_barre() + + # + # analyse des données liées a  l'IHM : UIinfo + # + uiinfo.traite_UIinfo(self.cata) + self.update_barre() + + # + # traitement des clefs documentaires + # + self.traite_clefs_documentaires() + + # chargement et analyse des catalogues développeur (le cas échéant) + # + if self.appli.CONFIGURATION.isdeveloppeur == 'OUI' : + init_rep_cata_dev(self.fic_cata,self.appli.CONFIGURATION.path_cata_dev) + fic_cata_dev = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py') + if os.path.isfile(fic_cata_dev): + # il y a bien un catalogue développeur : il faut récupérer le module_object associé ... + test = self.compile_cata(fic_cata_dev,fic_cata_dev+'c') + if not test : + showinfo("Compilation catalogue développeur", + "Erreur dans la compilation du catalogue développeur") + self.cata = (self.cata,) + else: + self.cata_dev =self.import_cata(fic_cata_dev) + #self.Retrouve_Ordre_Cata_Developpeur() + self.Retrouve_Ordre_Cata_Developpeur_autre() + self.cata = (self.cata,self.cata_dev) + else: + self.cata = (self.cata,) + else: + self.cata = (self.cata,) + titreSuite=" avec le catalogue " + os.path.basename(self.fic_cata) + titre=self.appli.titre+titreSuite + if self.appli.top: + self.appli.top.title(titre) + self.appli.titre=titre + + def determineMater(self) : + # Determinination du repertoire materiau + v_codeSansPoint=self.version_code + v_codeSansPoint=re.sub("\.","",v_codeSansPoint) + chaine="rep_mat_"+v_codeSansPoint + if hasattr(self.appli.CONFIGURATION,chaine): + a=getattr(self.appli.CONFIGURATION,chaine) + else : + try : + a=self.appli.CONFIGURATION.dRepMat[self.version_code] + except : + if self.code == "ASTER" : + print "Probleme avec le repertoire materiau" + a='.' + self.appli.CONFIGURATION.rep_mat=a + + def import_cata(self,cata): + """ + Réalise l'import du catalogue dont le chemin d'acca¨s est donné par cata + """ + nom_cata = os.path.splitext(os.path.basename(cata))[0] + rep_cata = os.path.dirname(cata) + sys.path[:0] = [rep_cata] + try : + o=__import__(nom_cata) + return o + except Exception,e: + traceback.print_exc() + return 0 + + def Retrouve_Ordre_Cata_Standard_autre(self): + """ + Construit une structure de données dans le catalogue qui permet + a  EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue. + Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui + contient le nom des mots clés dans le bon ordre + """ + self.cata_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata) + + def Retrouve_Ordre_Cata_Standard(self): + """ + Retrouve l'ordre des mots-clés dans le catalogue, cad : + - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer + l'ordre des mots-clés dans le catalogue + - s'il n'a pas été modifié, relie le fichier pickle + """ + time1 = os.path.getmtime(self.fic_cata) + try : + time2 = os.path.getmtime(self.fic_cata_p) + except: + time2 = 0 + if time2 > time1 : + # l'objet catalogue n'a pas été modifié depuis le dernier "pickle" + self.Get_Ordre_Cata() + else : + # le catalogue a été modifié depuis le dernier "pickle" : + # il faut retrouver l'ordre du catalogue et refaire pickle + self.Get_Ordre_Cata(mode='cata') + self.appli.affiche_infos("Catalogue standard chargé") + + def Retrouve_Ordre_Cata_Developpeur(self): + """ + Retrouve l'ordre des mots-clés dans le catalogue, cad : + - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer + l'ordre des mots-clés dans le catalogue + - s'il n'a pas été modifié, relie le fichier pickle + """ + if self.code != 'ASTER' : return + fic_cata = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py') + message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev + cata_dev_ordonne = analyse_cata.analyse_catalogue(self,self.fic_cata) + self.cata_dev_ordonne_cr = cata_dev_ordonne.cr + cata_dev_ordonne_dico = cata_dev_ordonne.entites + self.cata_ordonne_dico.update(cata_dev_ordonne_dico) + self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) + + def Retrouve_Ordre_Cata_Developpeur_autre(self): + """ + Retrouve l'ordre des mots-clés dans le catalogue, cad : + - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer + l'ordre des mots-clés dans le catalogue + - s'il n'a pas été modifié, relie le fichier pickle + """ + if self.code != 'ASTER' : return + message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev + cata_dev_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata) + self.cata_ordonne_dico.update(cata_dev_ordonne_dico) + self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) + + def Get_Ordre_Cata(self,mode='pickle'): + """ + Retrouve l'ordre du catalogue : + - mode='pickle ': tente de relire le fichier pickle et sinon lance l'analyse du catalogue + - mode='cata' : force l'analyse du catalogue directement sans relire le pickle + """ + if mode == 'pickle' : + try: + f = open(self.fic_cata_p) + u = cPickle.Unpickler(f) + self.cata_ordonne_dico = u.load() + f.close() + except : + # on peut ne pas arriver a  relire le fichier pickle s'il a été altéré + # ou (le plus probable) s'il a été créé sous un autre OS + self.Get_Ordre_Cata(mode='cata') + elif mode == 'cata': + cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata) + self.cata_ordonne_cr = cata_ordonne.cr + self.cata_ordonne_dico = cata_ordonne.entites + f = open(self.fic_cata_p,'w+') + p = cPickle.Pickler(f) + p.dump(self.cata_ordonne_dico) + f.close() + else : + raise Exception("Appel a  un mode inconnu de Get_Ordre_Cata : %s" % mode) + return + + def ask_choix_catalogue(self): + """ + Ouvre une fenetre de sélection du catalogue dans le cas oa¹ plusieurs + ont été définis dans Accas/editeur.ini + """ + # construction du dictionnaire et de la liste des catalogues + self.dico_catalogues = {} + defaut = None + for catalogue in self.appli.CONFIGURATION.catalogues: + if catalogue[0] == self.code : + self.dico_catalogues[catalogue[1]] = catalogue + if len(catalogue) == 5 : + if catalogue[4]=='defaut' : defaut = catalogue[1] + liste_choix = self.dico_catalogues.keys() + liste_choix.sort() + + lab=QString("Eficas V1.") + lab+=QString(version) + lab+=QString(" pour ") + lab+=QString(self.code) + lab+=QString(" avec le catalogue ") + + # teste si plusieurs catalogues ou non + if len(liste_choix) == 0: + QMessageBox.critical( self.parent, "", "Aucun catalogue déclaré pour %s" %self.code) + self.appli.parent.ui.close() + sys.exit(1) + + # création d'une boite de dialogue modale + widgetChoix=MonChoixCata(liste_choix,self, self.parent, "", True ) + ret=widgetChoix.exec_loop() + + lab=QString("Eficas V1.") + lab+=QString(version) + lab+=QString(" pour ") + lab+=QString(self.code) + lab+=QString(" avec le catalogue ") + if ret == QDialog.Accepted: + self.version_cata=str(self.version_cata) + self.fic_cata = self.dico_catalogues[self.version_cata][2] + self.version_code = self.version_cata + self.appli.format_fichier = self.dico_catalogues[self.version_cata][3] + lab+=self.version_cata + self.appli.parent.ui.setCaption(lab) + #qApp.mainWidget().setCaption(lab) + else : + sys.exit(0) + + + def compile_cata(self,cata,catac): + """ + Teste si le catalogue a bien besoin d'etre recompilé et si oui, le compile et + affiche un message dans le splash . Retourne 1 si la compilation s'est bien déroulée, + 0 sinon. + """ + time1 = os.path.getmtime(cata) + try: + time2 = os.path.getmtime(catac) + except: + time2 = 0 + if time1 > time2: + try: + # le catalogue doit etre recompilé avant d'etre importé + if self.appli.test == 0 : + splash._splash.configure(text="Compilation du catalogue\nCela peut prendre plusieurs secondes ...") + py_compile.compile(cata) + except: + return 0 + return 1 + + +#-------------------------------------------------------------------------------- +# Méthodes concernant la barre de progression lors de l'analyse du catalogue +#-------------------------------------------------------------------------------- + + def configure_barre(self,nbcommandes): + """ Configure la barre de progression en lui passant comme parama¨tre le + nombre de commandes du catalogue qui lui sert a  déterminer la longueur de son incrément """ + try: + if self.appli.test == 0 : + splash._splash.configure(barre='oui',ratio = nbcommandes) + except: + pass + + def update_barre(self): + """ Update la position de la barre de progression : la fait progresser de son incrément """ + try: + if self.appli.test == 0 : + splash._splash.update_barre() + except: + pass + + def visuCRCATA(self): + """ + Méthode permettant l'affichage du rapport de validation + """ + cr = CR( debut = "Début rapport de validation du catalogue", + fin = "Fin rapport de validation du catalogue") + titre="rapport de validation du catalogue" + if hasattr(self,'cata_ordonne_cr') : + cr.add(self.cata_ordonne_cr) + if hasattr(self,'cata_dev_ordonne_cr') : + cr.add(self.cata_dev_ordonne_cr) + for cata in self.cata: + if hasattr(cata,'JdC'): + cr.add(cata.JdC.report()) + texte_cr = str(cr) + self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr) + + + def traite_clefs_documentaires(self): + try: + self.fic_cata_clef=os.path.splitext(self.fic_cata_c)[0]+'_clefs_docu' + f=open(self.fic_cata_clef) + except: + #print "Pas de fichier associé contenant des clefs documentaires" + return + + dict_clef_docu={} + for l in f.readlines(): + clef=l.split(':')[0] + docu=l.split(':')[1] + docu=docu[0:-1] + dict_clef_docu[clef]=docu + for oper in self.cata.JdC.commandes: + if dict_clef_docu.has_key(oper.nom): + oper.docu=dict_clef_docu[oper.nom] diff --git a/InterfaceQT/typeNode.py b/InterfaceQT/typeNode.py new file mode 100644 index 00000000..53d3f54c --- /dev/null +++ b/InterfaceQT/typeNode.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +from qt import * + +#---------------------------# +class PopUpMenuNodePartiel : +#---------------------------# + def createPopUpMenu(self): + #menu + self.menu = QPopupMenu(self.tree) + + #ss-menu Comment: + self.commentMenu = QPopupMenu( self.menu ) + self.menu.insertItem( qApp.translate('Browser','Commentaire'), self.commentMenu ) + self.commentMenu.insertItem( 'après', self.addCommentAfter ) + self.commentMenu.insertItem( 'avant', self.addCommentBefore ) + + #ss-menu Parameters: + self.parametersMenu = QPopupMenu( self.menu ) + self.parametersMenu.insertItem( 'après', self.addParametersAfter ) + self.parametersMenu.insertItem( 'avant', self.addParametersBefore ) + + #items du menu + self.menu.insertItem( qApp.translate('Browser','Supprimer'), self.delete ) + self.menu.insertItem( qApp.translate('Browser','Parametres'), self.parametersMenu ) + + + def addCommentAfter(self): + """ + """ + self.addComment() + + def addCommentBefore(self): + """ + """ + self.addComment(False) + + def addParametersAfter(self): + """ + """ + self.addParameters() + + def addParametersBefore(self): + """ + """ + self.addParameters(False) + + +#-----------------------------------------# +class PopUpMenuNode(PopUpMenuNodePartiel) : +#-----------------------------------------# + def createPopUpMenu(self): + PopUpMenuNodePartiel.createPopUpMenu(self) + self.commentMenu.insertItem( 'ce noeud', self.commentIt ) diff --git a/InterfaceQT/utilIcons.py b/InterfaceQT/utilIcons.py new file mode 100644 index 00000000..d52fbc50 --- /dev/null +++ b/InterfaceQT/utilIcons.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- + +from qt import QPixmap +import os + +class PixmapCache: + """ + Class implementing a pixmap cache for icons. + """ + def __init__(self): + """ + Constructor + """ + self.pixmapCache = {} + + def getPixmap(self, key): + """ + Public method to retrieve a pixmap. + + @param key name of the wanted pixmap (string) + @return the requested pixmap (QPixmap) + """ + try: + return self.pixmapCache[key] + except KeyError: + self.pixmapCache[key] = QPixmap.fromMimeSource(key) + return self.pixmapCache[key] + +pixCache = PixmapCache() + +def getPixmap(key, cache = pixCache): + """ + Module function to retrieve a pixmap. + + @param key name of the wanted pixmap (string) + @return the requested pixmap (QPixmap) + """ + return cache.getPixmap(key) + + + +from qt import QMimeSourceFactory + +def initializeMimeSourceFactory(): + """ + Function to initialize the default mime source factory. + + """ + defaultFactory = QMimeSourceFactory.defaultFactory() + repini=os.path.dirname(os.path.abspath(__file__)) + defaultFactory.addFilePath(repini+"/../Editeur/icons") #CS_pbruno todo (config) + diff --git a/InterfaceQT/viewManager.py b/InterfaceQT/viewManager.py new file mode 100644 index 00000000..c4542f10 --- /dev/null +++ b/InterfaceQT/viewManager.py @@ -0,0 +1,2550 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +import os +from InterfaceQT import utilIcons +from qt import * + + +##fonctions utilitaires +def normabspath(path): + """ + Function returning a normalized, absolute path. + + @param path file path (string) + @return absolute, normalized path (string) + """ + return os.path.abspath(path) + + +def samepath(f1, f2): + """ + Function to compare two paths. + + @param f1 first path for the compare (string) + @param f2 second path for the compare (string) + @return flag indicating whether the two paths represent the + same path on disk. + """ + if f1 is None or f2 is None: + return 0 + + if normcasepath(f1) == normcasepath(f2): + return 1 + + return 0 + +def normcasepath(path): + """ + Function returning a path, that is normalized with respect to its case and references. + + @param path file path (string) + @return case normalized path (string) + """ + return os.path.normcase(os.path.normpath(path)) + + + + +class ViewManager: + """ + Base class inherited by all specific viewmanager classes. + + It defines the interface to be implemented by specific + viewmanager classes and all common methods. + + @signal lastEditorClosed emitted after the last editor window was closed + @signal editorOpened(string) emitted after an editor window was opened + @signal editorSaved(string) emitted after an editor window was saved + @signal checkActions(editor) emitted when some actions should be checked + for their status + @signal cursorChanged(editor) emitted after the cursor position of the active + window has changed + @signal breakpointToggled(editor) emitted when a breakpoint is toggled. + @signal bookmarkToggled(editor) emitted when a bookmark is toggled. + """ + def __init__(self, ui ): + """ + Constructor + + @param ui reference to the main user interface + @param dbs reference to the debug server object + """ + # initialize the instance variables + self.ui = ui + self.appliEficas = ui + self.editors = [] + self.doubles = {} + self.currentEditor = None + self.untitledCount = 0 + self.srHistory = {"search" : QStringList(), "replace" : QStringList()} + self.editorsCheckFocusIn = 1 + self.recent = QStringList() + + + # initialize the central store for api information (used by + # autocompletion and calltips) + self.apis = {} + self.initFileFilters() + + + def initFileFilters(self): + """ + Private method to initialize the lists of supported filename filters. + """ + self.fileFiltersString = self.trUtf8(\ + 'Python Files (*.py);;' + 'Aster Files (*.com*);;' + 'Pyrex Files (*.pyx);;' + 'Quixote Template Files (*.ptl);;' + 'IDL Files (*.idl);;' + 'C Files (*.h *.c);;' + 'C++ Files (*.h *.hpp *.hh *.cxx *.cpp *.cc);;' + 'C# Files (*.cs);;' + 'HTML Files (*.html *.htm *.asp *.shtml *.css);;' + 'PHP Files (*.php *.php3 *.php4 *.php5 *.phtml);;' + 'XML Files (*.xml *.xsl *.xslt *.dtd);;' + 'Java Files (*.java);;' + 'JavaScript Files (*.js);;' + 'SQL Files (*.sql);;' + 'Docbook Files (*.docbook);;' + 'Perl Files (*.pl *.pm *.ph);;' + 'Shell Files (*.sh);;' + 'Aster Files (*.com*);;' + 'All Files (*)') + + fileFilters = QStringList.split(';;', self.fileFiltersString) + + self.ext2Filter = {} + for fileFilter in fileFilters: + extensions = QStringList.split('*', fileFilter) + for extension in extensions[1:]: + extension = unicode(extension).strip().replace(')', '') + if extension: + self.ext2Filter[extension] = unicode(fileFilter) + + + + ##################################################################### + ## methods above need to be implemented by a subclass + ##################################################################### + + def canSplit(self): + """ + public method to signal if splitting of the view is available. + + @return flag indicating splitting of the view is available. + """ + return 0 + + def addSplit(self): + """ + Public method used to split the current view. + """ + pass + + def removeSplit(self): + """ + Public method used to remove the current split view. + + @return Flag indicating successful deletion + """ + return 0 + + def setSplitOrientation(self, orientation): + """ + Public method used to set the orientation of the split view. + + @param orientation orientation of the split + (QSplitter.Horizontal or QSplitter.Vertical) + """ + pass + + def eventFilter(self, object, event): + """ + Private method called to filter an event. + + @param object object, that generated the event (QObject) + @param event the event, that was generated by object (QEvent) + @return flag indicating if event was filtered out + """ + return 0 + + def focusInEvent(self, event): + """ + Public method called when the viewmanager receives focus. + + @param event the event object (QFocusEvent) + """ + self.editorActGrp.setEnabled(1) + + def focusOutEvent(self, event): + """ + Public method called when the viewmanager loses focus. + + @param event the event object (QFocusEvent) + """ + self.editorActGrp.setEnabled(0) + + + def initEditMenu(self): + """ + Public method to create the Edit menu + + @return the generated menu + """ + menu = QPopupMenu(self.ui) + menu.insertTearOffHandle() + self.undoAct.addTo(menu) + self.redoAct.addTo(menu) + self.revertAct.addTo(menu) + menu.insertSeparator() + self.cutAct.addTo(menu) + self.copyAct.addTo(menu) + self.pasteAct.addTo(menu) + self.deleteAct.addTo(menu) + menu.insertSeparator() + self.indentAct.addTo(menu) + self.unindentAct.addTo(menu) + menu.insertSeparator() + self.commentAct.addTo(menu) + self.uncommentAct.addTo(menu) + self.streamCommentAct.addTo(menu) + self.boxCommentAct.addTo(menu) + menu.insertSeparator() + self.autoCompleteAct.addTo(menu) + self.autoCompleteFromDocAct.addTo(menu) + self.autoCompleteFromAPIsAct.addTo(menu) + menu.insertSeparator() + self.searchAct.addTo(menu) + self.searchAgainAct.addTo(menu) + self.replaceAct.addTo(menu) + menu.insertSeparator() + self.searchFilesAct.addTo(menu) + menu.insertSeparator() + self.gotoAct.addTo(menu) + self.gotoBraceAct.addTo(menu) + menu.insertSeparator() + self.selectBraceAct.addTo(menu) + self.selectAllAct.addTo(menu) + self.deselectAllAct.addTo(menu) + menu.insertSeparator() + self.shortenEmptyAct.addTo(menu) + self.convertEOLAct.addTo(menu) + + return menu + + def initEditToolbar(self): + """ + Public method to create the Edit toolbar + + @return the generated toolbar + """ + tb = QToolBar(self.ui) + self.undoAct.addTo(tb) + self.redoAct.addTo(tb) + tb.addSeparator() + self.cutAct.addTo(tb) + self.copyAct.addTo(tb) + self.pasteAct.addTo(tb) + self.deleteAct.addTo(tb) + tb.addSeparator() + self.indentAct.addTo(tb) + self.unindentAct.addTo(tb) + tb.addSeparator() + self.commentAct.addTo(tb) + self.uncommentAct.addTo(tb) + + return tb + + ################################################################## + ## Initialize the search related actions, search menu and toolbar + ################################################################## + + def initSearchActions(self): + """ + Private method defining the user interface actions for the search commands. + """ + self.searchActGrp = QActionGroup(self) + + self.searchAct = QAction(self.trUtf8('Search'), + QIconSet(utilIcons.getPixmap("find.png")), + self.trUtf8('&Search...'), + QKeySequence(self.trUtf8("CTRL+F","Search|Search")), + self.searchActGrp) + self.searchAct.setStatusTip(self.trUtf8('Search for a text')) + self.searchAct.setWhatsThis(self.trUtf8( + """Search""" + """

Search for some text in the current editor. A""" + """ dialog is shown to enter the searchtext and options""" + """ for the search.

""" + )) + self.connect(self.searchAct,SIGNAL('activated()'),self.handleSearch) + self.searchActions.append(self.searchAct) + + self.searchAgainAct = QAction(self.trUtf8('Search again'), + QIconSet(utilIcons.getPixmap("findNext.png")), + self.trUtf8('Search &again'), + Qt.Key_F3,self.searchActGrp) + self.searchAgainAct.setStatusTip(self.trUtf8('Search again for text')) + self.searchAgainAct.setWhatsThis(self.trUtf8( + """Search again""" + """

Search again for some text in the current editor.""" + """ The previously entered searchtext and options are reused.

""" + )) + self.connect(self.searchAgainAct,SIGNAL('activated()'),self.searchDlg.handleFindNext) + self.searchActions.append(self.searchAgainAct) + + self.replaceAct = QAction(self.trUtf8('Replace'), + self.trUtf8('&Replace...'), + QKeySequence(self.trUtf8("CTRL+R","Search|Replace")), + self.searchActGrp) + self.replaceAct.setStatusTip(self.trUtf8('Replace some text')) + self.replaceAct.setWhatsThis(self.trUtf8( + """Replace""" + """

Search for some text in the current editor and replace it. A""" + """ dialog is shown to enter the searchtext, the replacement text""" + """ and options for the search and replace.

""" + )) + self.connect(self.replaceAct,SIGNAL('activated()'),self.handleReplace) + self.searchActions.append(self.replaceAct) + + self.gotoAct = QAction(self.trUtf8('Goto Line'), + QIconSet(utilIcons.getPixmap("goto.png")), + self.trUtf8('&Goto Line...'), + QKeySequence(self.trUtf8("CTRL+G","Search|Goto Line")), + self.searchActGrp) + self.gotoAct.setStatusTip(self.trUtf8('Goto Line')) + self.gotoAct.setWhatsThis(self.trUtf8( + """Goto Line""" + """

Go to a specific line of text in the current editor.""" + """ A dialog is shown to enter the linenumber.

""" + )) + self.connect(self.gotoAct,SIGNAL('activated()'),self.handleGoto) + self.searchActions.append(self.gotoAct) + + self.gotoBraceAct = QAction(self.trUtf8('Goto Brace'), + QIconSet(utilIcons.getPixmap("gotoBrace.png")), + self.trUtf8('Goto &Brace'), + QKeySequence(self.trUtf8("CTRL+L","Search|Goto Brace")), + self.searchActGrp) + self.gotoBraceAct.setStatusTip(self.trUtf8('Goto Brace')) + self.gotoBraceAct.setWhatsThis(self.trUtf8( + """Goto Brace""" + """

Go to the matching brace in the current editor.

""" + )) + self.connect(self.gotoBraceAct,SIGNAL('activated()'),self.handleGotoBrace) + self.searchActions.append(self.gotoBraceAct) + + self.searchActGrp.setEnabled(0) + + self.searchFilesAct = QAction(self.trUtf8('Search in Files'), + QIconSet(utilIcons.getPixmap("projectFind.png")), + self.trUtf8('Search in &Files...'), + QKeySequence(self.trUtf8("SHIFT+CTRL+F","Search|Search Files")), + self) + self.searchFilesAct.setStatusTip(self.trUtf8('Search for a text in files')) + self.searchFilesAct.setWhatsThis(self.trUtf8( + """Search in Files""" + """

Search for some text in the files of a directory tree""" + """ or the project. A dialog is shown to enter the searchtext""" + """ and options for the search and to display the result.

""" + )) + self.connect(self.searchFilesAct,SIGNAL('activated()'),self.handleSearchFiles) + self.searchActions.append(self.searchFilesAct) + + + ################################################################## + ## Initialize the view related actions, view menu and toolbar + ################################################################## + + def initViewActions(self): + """ + Protected method defining the user interface actions for the view commands. + """ + self.viewActGrp = QActionGroup(self) + self.viewFoldActGrp = QActionGroup(self) + + self.zoomInAct = QAction(self.trUtf8('Zoom in'), + QIconSet(utilIcons.getPixmap("zoomIn.png")), + self.trUtf8('Zoom &in'), + Qt.CTRL+Qt.Key_Plus, self.viewActGrp) + self.zoomInAct.setStatusTip(self.trUtf8('Zoom in on the text')) + self.zoomInAct.setWhatsThis(self.trUtf8( + """Zoom in""" + """

Zoom in on the text. This makes the text bigger.

""" + )) + self.connect(self.zoomInAct,SIGNAL('activated()'),self.handleZoomIn) + self.viewActions.append(self.zoomInAct) + + self.zoomOutAct = QAction(self.trUtf8('Zoom out'), + QIconSet(utilIcons.getPixmap("zoomOut.png")), + self.trUtf8('Zoom &out'), + Qt.CTRL+Qt.Key_Minus, self.viewActGrp) + self.zoomOutAct.setStatusTip(self.trUtf8('Zoom out on the text')) + self.zoomOutAct.setWhatsThis(self.trUtf8( + """Zoom out""" + """

Zoom out on the text. This makes the text smaller.

""" + )) + self.connect(self.zoomOutAct,SIGNAL('activated()'),self.handleZoomOut) + self.viewActions.append(self.zoomOutAct) + + self.zoomToAct = QAction(self.trUtf8('Zoom'), + QIconSet(utilIcons.getPixmap("zoomTo.png")), + self.trUtf8('&Zoom'), + 0, self.viewActGrp) + self.zoomToAct.setStatusTip(self.trUtf8('Zoom the text')) + self.zoomToAct.setWhatsThis(self.trUtf8( + """Zoom""" + """

Zoom the text. This opens a dialog where the""" + """ desired size can be entered.

""" + )) + self.connect(self.zoomToAct,SIGNAL('activated()'),self.handleZoom) + self.viewActions.append(self.zoomToAct) + + self.toggleAllAct = QAction(self.trUtf8('Toggle all folds'), + self.trUtf8('Toggle &all folds'), + 0, self.viewFoldActGrp) + self.toggleAllAct.setStatusTip(self.trUtf8('Toggle all folds')) + self.toggleAllAct.setWhatsThis(self.trUtf8( + """Toggle all folds""" + """

Toggle all folds of the current editor.

""" + )) + self.connect(self.toggleAllAct,SIGNAL('activated()'),self.handleToggleAll) + self.viewActions.append(self.toggleAllAct) + + self.toggleCurrentAct = QAction(self.trUtf8('Toggle current fold'), + self.trUtf8('Toggle ¤t fold'), + 0, self.viewFoldActGrp) + self.toggleCurrentAct.setStatusTip(self.trUtf8('Toggle current fold')) + self.toggleCurrentAct.setWhatsThis(self.trUtf8( + """Toggle current fold""" + """

Toggle the folds of the current line of the current editor.

""" + )) + self.connect(self.toggleCurrentAct,SIGNAL('activated()'),self.handleToggleCurrent) + self.viewActions.append(self.toggleCurrentAct) + + self.unhighlightAct = QAction(self.trUtf8('Remove all highlights'), + QIconSet(utilIcons.getPixmap("unhighlight.png")), + self.trUtf8('Remove all highlights'), + 0, self) + self.unhighlightAct.setStatusTip(self.trUtf8('Remove all highlights')) + self.unhighlightAct.setWhatsThis(self.trUtf8( + """Remove all highlights""" + """

Remove the highlights of all editors.

""" + )) + self.connect(self.unhighlightAct,SIGNAL('activated()'),self.unhighlight) + self.viewActions.append(self.unhighlightAct) + + self.splitViewAct = QAction(self.trUtf8('Split view'), + QIconSet(utilIcons.getPixmap("splitVertical.png")), + self.trUtf8('&Split view'), + 0, self) + self.splitViewAct.setStatusTip(self.trUtf8('Add a split to the view')) + self.splitViewAct.setWhatsThis(self.trUtf8( + """Split view""" + """

Add a split to the view.

""" + )) + self.connect(self.splitViewAct,SIGNAL('activated()'),self.handleSplitView) + self.viewActions.append(self.splitViewAct) + + self.splitOrientationAct = QAction(self.trUtf8('Arrange horizontally'), + self.trUtf8('Arrange &horizontally'), + 0, self, None, 1) + self.splitOrientationAct.setStatusTip(self.trUtf8('Arrange the splitted views horizontally')) + self.splitOrientationAct.setWhatsThis(self.trUtf8( + """Arrange horizontally""" + """

Arrange the splitted views horizontally.

""" + )) + self.splitOrientationAct.setOn(0) + self.connect(self.splitOrientationAct,SIGNAL('activated()'),self.handleSplitOrientation) + self.viewActions.append(self.splitOrientationAct) + + self.splitRemoveAct = QAction(self.trUtf8('Remove split'), + QIconSet(utilIcons.getPixmap("remsplitVertical.png")), + self.trUtf8('&Remove split'), + 0, self) + self.splitRemoveAct.setStatusTip(self.trUtf8('Remove the current split')) + self.splitRemoveAct.setWhatsThis(self.trUtf8( + """Remove split""" + """

Remove the current split.

""" + )) + self.connect(self.splitRemoveAct,SIGNAL('activated()'),self.removeSplit) + self.viewActions.append(self.splitRemoveAct) + + self.viewActGrp.setEnabled(0) + self.viewFoldActGrp.setEnabled(0) + self.unhighlightAct.setEnabled(0) + self.splitViewAct.setEnabled(0) + self.splitOrientationAct.setEnabled(0) + self.splitRemoveAct.setEnabled(0) + + def initViewMenu(self): + """ + Public method to create the View menu + + @return the generated menu + """ + menu = QPopupMenu(self.ui) + menu.insertTearOffHandle() + self.viewActGrp.addTo(menu) + menu.insertSeparator() + self.viewFoldActGrp.addTo(menu) + menu.insertSeparator() + self.unhighlightAct.addTo(menu) + if self.canSplit(): + menu.insertSeparator() + self.splitViewAct.addTo(menu) + self.splitOrientationAct.addTo(menu) + self.splitRemoveAct.addTo(menu) + return menu + + def initViewToolbar(self): + """ + Public method to create the View toolbar + + @return the generated toolbar + """ + tb = QToolBar(self.ui) + self.viewActGrp.addTo(tb) + tb.addSeparator() + self.unhighlightAct.addTo(tb) + if self.canSplit(): + tb.addSeparator() + self.splitViewAct.addTo(tb) + self.splitRemoveAct.addTo(tb) + + return tb + + ################################################################## + ## Initialize the macro related actions and macro menu + ################################################################## + + def initMacroActions(self): + """ + Private method defining the user interface actions for the macro commands. + """ + self.macroActGrp = QActionGroup(self) + + self.macroStartRecAct = QAction(self.trUtf8('Start Macro Recording'), + self.trUtf8('S&tart Macro Recording'), + 0, self.macroActGrp) + self.macroStartRecAct.setStatusTip(self.trUtf8('Start Macro Recording')) + self.macroStartRecAct.setWhatsThis(self.trUtf8( + """Start Macro Recording""" + """

Start recording editor commands into a new macro.

""" + )) + self.connect(self.macroStartRecAct,SIGNAL('activated()'),self.handleMacroStartRecording) + self.macroActions.append(self.macroStartRecAct) + + self.macroStopRecAct = QAction(self.trUtf8('Stop Macro Recording'), + self.trUtf8('Sto&p Macro Recording'), + 0, self.macroActGrp) + self.macroStopRecAct.setStatusTip(self.trUtf8('Stop Macro Recording')) + self.macroStopRecAct.setWhatsThis(self.trUtf8( + """Stop Macro Recording""" + """

Stop recording editor commands into a new macro.

""" + )) + self.connect(self.macroStopRecAct,SIGNAL('activated()'),self.handleMacroStopRecording) + self.macroActions.append(self.macroStopRecAct) + + self.macroRunAct = QAction(self.trUtf8('Run Macro'), + self.trUtf8('&Run Macro'), + 0, self.macroActGrp) + self.macroRunAct.setStatusTip(self.trUtf8('Run Macro')) + self.macroRunAct.setWhatsThis(self.trUtf8( + """Run Macro""" + """

Run a previously recorded editor macro.

""" + )) + self.connect(self.macroRunAct,SIGNAL('activated()'),self.handleMacroRun) + self.macroActions.append(self.macroRunAct) + + self.macroDeleteAct = QAction(self.trUtf8('Delete Macro'), + self.trUtf8('&Delete Macro'), + 0, self.macroActGrp) + self.macroDeleteAct.setStatusTip(self.trUtf8('Delete Macro')) + self.macroDeleteAct.setWhatsThis(self.trUtf8( + """Delete Macro""" + """

Delete a previously recorded editor macro.

""" + )) + self.connect(self.macroDeleteAct,SIGNAL('activated()'),self.handleMacroDelete) + self.macroActions.append(self.macroDeleteAct) + + self.macroLoadAct = QAction(self.trUtf8('Load Macro'), + self.trUtf8('&Load Macro'), + 0, self.macroActGrp) + self.macroLoadAct.setStatusTip(self.trUtf8('Load Macro')) + self.macroLoadAct.setWhatsThis(self.trUtf8( + """Load Macro""" + """

Load an editor macro from a file.

""" + )) + self.connect(self.macroLoadAct,SIGNAL('activated()'),self.handleMacroLoad) + self.macroActions.append(self.macroLoadAct) + + self.macroSaveAct = QAction(self.trUtf8('Save Macro'), + self.trUtf8('&Save Macro'), + 0, self.macroActGrp) + self.macroSaveAct.setStatusTip(self.trUtf8('Save Macro')) + self.macroSaveAct.setWhatsThis(self.trUtf8( + """Save Macro""" + """

Save a previously recorded editor macro to a file.

""" + )) + self.connect(self.macroSaveAct,SIGNAL('activated()'),self.handleMacroSave) + self.macroActions.append(self.macroSaveAct) + + self.macroActGrp.setEnabled(0) + + def initMacroMenu(self): + """ + Public method to create the Macro menu + + @return the generated menu + """ + menu = QPopupMenu(self.ui) + menu.insertTearOffHandle() + self.macroActGrp.addTo(menu) + return menu + + + def checkDirty(self, editor): + """ + Private method to check dirty status and open a message window. + + @param editor editor window to check + @return flag indicating successful reset of the dirty flag (boolean) + """ + + if (editor.modified) and (editor in self.doubles.keys()) : + res = QMessageBox.warning( + None, + self.trUtf8("Fichier Duplique"), + self.trUtf8("Le fichier ne sera pas sauvegarde."), + self.trUtf8("&Quitter"), + self.trUtf8("&Annuler")) + if res == 0 : return 1 + return 0 + if editor.modified: + fn = editor.getFileName() + if fn is None: + fn = self.trUtf8('Noname') + res = QMessageBox.warning(self.parent(), + self.trUtf8("Fichier Modifie"), + self.trUtf8("Le fichier %1 n a pas ete sauvegarde.") + .arg(fn), + self.trUtf8("&Sauvegarder"), self.trUtf8("&Quitter "), + self.trUtf8("&Annuler"), 0, 2) + if res == 0: + (ok, newName) = editor.saveFile() + if ok: + self.setEditorName(editor, newName) + return ok + elif res == 2: + return 0 + return 1 + + def checkAllDirty(self): + """ + Public method to check the dirty status of all editors. + + @return flag indicating successful reset of all dirty flags (boolean) + """ + for editor in self.editors: + if not self.checkDirty(editor): + return 0 + + return 1 + + def closeEditor(self, editor): + """ + Private method to close an editor window. + + @param editor editor window to be closed + @return flag indicating success (boolean) + """ + # save file if necessary + if not self.checkDirty(editor): + return 0 + + # remove the window + self.removeView(editor) + self.editors.remove(editor) + if not len(self.editors): + self.handleLastEditorClosed() + self.emit(PYSIGNAL('lastEditorClosed'), ()) #CS_pbruno connecter signal avec l'appli + return 1 + + def handleClose(self): + """ + Public method to close the current window. + + @return flag indicating success (boolean) + """ + aw = self.activeWindow() + if aw is None: + return 0 + + res = self.closeEditor(aw) + if res and aw == self.currentEditor: + self.currentEditor = None + + return res + + def handleNewView(self): + """ + Public method to close the current window. + + @return flag indicating success (boolean) + """ + aw = self.activeWindow() + if aw is None: + return 0 + + aw.handleNewView() + + + def handleCloseAll(self): + """ + Private method to close all editor windows via file menu. + """ + savedEditors = self.editors[:] + retour=1 + for editor in savedEditors: + retour=retour*self.closeEditor(editor) + return retour + + def handleCloseWindow(self, fn): + """ + Public method to close an arbitrary source editor. + + @param fn filename of editor to be closed + @return flag indicating success (boolean) + """ + for editor in self.editors: + if samepath(fn, editor.getFileName()): + break + else: + return 1 + + res = self.closeEditor(editor) + if res and editor == self.currentEditor: + self.currentEditor = None + + return res + + def handleExit(self): + """ + Public method to handle the debugged program terminating. + """ + if self.currentEditor is not None: + self.currentEditor.highlight() + self.currentEditor = None + + self.setSbFile() + + def handlePythonFile(self,pyfn,lineno=None): + """ + Public method to handle the user selecting a file for display. + + @param pyfn name of file to be opened + @param lineno line number to place the cursor at + """ + try: + self.displayPythonFile(pyfn,lineno) + except IOError: + pass + + + def displayJDC(self,jdc,fn=None): + """ + Public slot to display a file in an editor. + + @param fn name of file to be opened + @param lineno line number to place the cursor at + """ + titre=None + if fn != None : titre=fn.split("/")[-1] + newWin, editor = self.getEditor(None, jdc, title = titre ) + + if newWin: + editor.fileName=fn + self.handleModificationStatusChanged(editor.modified, editor) + self.checkActions(editor) + + # insert filename into list of recently opened files + self.addToRecentList(editor.getFileName()) + + + + def newEditorView(self, fn, caller): + """ + Public method to create a new editor displaying the given document. + + @param fn filename of this view + @param caller reference to the editor calling this method + """ + from editor import JDCEditor + editor = JDCEditor(fn, None, self, editor=caller) + self.editors.append(editor) + self.connect(editor, PYSIGNAL('modificationStatusChanged'), + self.handleModificationStatusChanged) + self.connect(editor, PYSIGNAL('cursorChanged'), self.handleCursorChanged) + self.connect(editor, PYSIGNAL('editorSaved'), self.handleEditorSaved) + self.connect(editor, PYSIGNAL('breakpointToggled'), self.handleBreakpointToggled) + self.connect(editor, PYSIGNAL('bookmarkToggled'), self.handleBookmarkToggled) + self.connect(editor, PYSIGNAL('syntaxerrorToggled'), self.handleSyntaxErrorToggled) + self.connect(editor, PYSIGNAL('autoCompletionAPIsAvailable'), + self.handleEditoracAPIsAvailable) + self.handleEditorOpened() + self.emit(PYSIGNAL('editorOpened'), (fn,)) + + self.connect(caller, PYSIGNAL('editorRenamed'), editor.handleRenamed) + self.connect(editor, PYSIGNAL('editorRenamed'), caller.handleRenamed) + + self.addView(editor, fn) + self.handleModificationStatusChanged(editor.modified, editor) + self.checkActions(editor) + + def addToRecentList(self, fn): + """ + Public slot to add a filename to the list of recently opened files. + + @param fn name of the file to be added + """ + self.recent.remove(fn) + self.recent.prepend(fn) + if len(self.recent) > 9: + self.recent = self.recent[:9] + + def toggleWindow(self,w): + """ + Private method to toggle a workspace window. + + @param w editor window to be toggled + """ + if w.isHidden(): + w.show() + else: + w.hide() + + def setFileLine(self,fn,line,error=0,syntaxError=0): + """ + Public method to update the user interface when the current program or line changes. + + @param fn filename of editor to update (string) + @param line line number to highlight (int) + @param error flag indicating an error highlight (boolean) + @param syntaxError flag indicating a syntax error + """ + self.setSbFile(fn,line) + + try: + newWin, self.currentEditor = self.getEditor(fn) + except IOError: + return + + # Change the highlighted line. + self.currentEditor.highlight(line,error,syntaxError) + + self.currentEditor.highlightVisible() + self.checkActions(self.currentEditor, 0) + + def setSbFile(self,fn=None,line=None,pos=None): + """ + Private method to set the file info in the status bar. + + @param fn filename to display (string) + @param line line number to display (int) + @param pos character position to display (int) + """ + if fn is None: + fn = '' + writ = ' ' + else: + if QFileInfo(fn).isWritable(): + writ = ' rw' + else: + writ = ' ro' + + self.sbWritable.setText(writ) + self.sbFile.setText(self.trUtf8('File: %1').arg(fn,-50)) + + if line is None: + line = '' + + self.sbLine.setText(self.trUtf8('Line: %1').arg(line,5)) + + if pos is None: + pos = '' + + self.sbPos.setText(self.trUtf8('Pos: %1').arg(pos, 5)) + + def unhighlight(self, current=0): + """ + Public method to switch off all highlights. + + @param current flag indicating only the current editor should be unhighlighted + (boolean) + """ + if current: + if self.currentEditor is not None: + self.currentEditor.highlight() + else: + for editor in self.editors: + editor.highlight() + + def getOpenFilenames(self): + """ + Public method returning a list of the filenames of all editors. + + @return list of all opened filenames (list of strings) + """ + filenames = [] + for editor in self.editors: + fn = editor.getFileName() + if fn is not None: + filenames.append(fn) + + return filenames + + def getEditor(self, fn, jdc = None, title = None, units = None): + """ + Private method to return the editor displaying the given file. + + If there is no editor with the given file, a new editor window is + created. + + @param fn filename to look for + @param isPythonFile flag indicating that this is a Python file + even if it doesn't have the .py extension (boolean) + @return tuple of two values giving a flag indicating a new window creation and + a reference to the editor displaying this file + """ + newWin = 0 + double=None + for editor in self.editors: + if samepath(fn, editor.getFileName()): + abort = QMessageBox.warning(self, + self.trUtf8("Fichier"), + self.trUtf8("Le fichier %1 est deja ouvert.Voulez-vous l ouvrir tel qu'il etait lors du dernier enregistrement") .arg(fn), + self.trUtf8("&Duplication"), + self.trUtf8("&Annuler"), None, 1) + if abort: + break + double=editor + else: + from editor import JDCEditor + editor = JDCEditor(fn, jdc, self,units=units) + if double != None : + self.doubles[editor]=double + #self.doubles[double]=editor + if editor.jdc: # le fichier est bien un jdc + self.editors.append(editor) + self.connect(editor, PYSIGNAL('modificationStatusChanged'), + self.handleModificationStatusChanged) + self.connect(editor, PYSIGNAL('cursorChanged'), self.handleCursorChanged) + self.connect(editor, PYSIGNAL('editorSaved'), self.handleEditorSaved) + self.connect(editor, PYSIGNAL('breakpointToggled'), self.handleBreakpointToggled) + self.connect(editor, PYSIGNAL('bookmarkToggled'), self.handleBookmarkToggled) + self.connect(editor, PYSIGNAL('syntaxerrorToggled'), self.handleSyntaxErrorToggled) + self.connect(editor, PYSIGNAL('autoCompletionAPIsAvailable'), + self.handleEditoracAPIsAvailable) + self.handleEditorOpened() + self.emit(PYSIGNAL('editorOpened'), (fn,)) + newWin = 1 + else: + editor.closeIt() + + if newWin: + self.addView(editor, fn , title) + elif editor.jdc: + self.showView(editor, fn) + + return (newWin, editor) + + + def getOpenEditor(self, fn): + """ + Public method to return the editor displaying the given file. + + @param fn filename to look for + @return a reference to the editor displaying this file or None, if + no editor was found + """ + for editor in self.editors: + if samepath(fn, editor.getFileName()): + return editor + + return None + + def getActiveName(self): + """ + Public method to retrieve the filename of the active window. + + @return filename of active window (string) + """ + aw = self.activeWindow() + if aw: + return aw.getFileName() + else: + return None + + def saveEditor(self, fn): + """ + Public method to save a named editor file. + + @param fn filename of editor to be saved (string) + @return flag indicating success (boolean) + """ + for editor in self.editors: + if samepath(fn, editor.getFileName()): + break + else: + return 1 + + if not editor.modified: + return 1 + else: + ok, dummy = editor.saveFile() + return ok + + def saveCurrentEditor(self): + """ + Public slot to save the contents of the current editor. + """ + aw = self.activeWindow() + if aw in self.doubles.keys() : + QMessageBox.warning( + None, + self.trUtf8("Fichier Duplique"), + self.trUtf8("Le fichier ne sera pas sauvegarde."), + self.trUtf8("&Annuler")) + return + if aw: + ok, newName = aw.saveFile() + if ok: + self.setEditorName(aw, newName) + else: + return + + def saveAsCurrentEditor(self): + """ + Public slot to save the contents of the current editor to a new file. + """ + aw = self.activeWindow() + if aw: + ok, newName = aw.saveFileAs() + if ok: + self.setEditorName(aw, newName) + else: + return + + def saveAllEditors(self): + """ + Public slot to save the contents of all editors. + """ + for editor in self.editors: + ok, newName = editor.saveFile() + if ok: + self.setEditorName(editor, newName) + + # restart autosave timer + if self.autosaveInterval > 0: + self.autosaveTimer.start(self.autosaveInterval * 60000, 1) + + def saveCurrentEditorToProject(self): + """ + Public slot to save the contents of the current editor to the current project. + """ + pro = self.ui.getProject() + path = pro.ppath + aw = self.activeWindow() + if aw: + ok, newName = aw.saveFileAs(path) + if ok: + self.setEditorName(aw, newName) + pro.appendFile(newName) + else: + return + + def newIncludeEditor(self) : + self.newEditor(include=1) + + def newEditor(self,include=0): + """ + Public slot to generate a new empty editor. + """ + from editor import JDCEditor + editor = JDCEditor(None,None,self,include=include) + + self.editors.append(editor) + self.connect(editor, PYSIGNAL('modificationStatusChanged'), + self.handleModificationStatusChanged) + self.connect(editor, PYSIGNAL('cursorChanged'), self.handleCursorChanged) + self.connect(editor, PYSIGNAL('editorSaved'), self.handleEditorSaved) + self.connect(editor, PYSIGNAL('breakpointToggled'), self.handleBreakpointToggled) + self.connect(editor, PYSIGNAL('bookmarkToggled'), self.handleBookmarkToggled) + self.connect(editor, PYSIGNAL('syntaxerrorToggled'), self.handleSyntaxErrorToggled) + self.connect(editor, PYSIGNAL('autoCompletionAPIsAvailable'), + self.handleEditoracAPIsAvailable) + self.addView(editor, None) + self.handleEditorOpened() + self.checkActions(editor) + self.emit(PYSIGNAL('editorOpened'), (None,)) + + def printCurrentEditor(self): + """ + Public slot to print the contents of the current editor. + """ + aw = self.activeWindow() + if aw: + aw.printFile() + else: + return + + def printCurrentEditorSel(self): + """ + Public slot to print the selection of the current editor. + """ + aw = self.activeWindow() + if aw: + aw.printSelection() + else: + return + + def handlevisuJdcPy(self): + if self.activeWindow()== None : return + self.activeWindow().viewJdcPy() + + def handleViewJdcFichierSource(self): + if self.activeWindow()== None : return + self.activeWindow().viewJdcSource() + + def handleViewJdcRapport(self): + if self.activeWindow()== None : return + self.activeWindow().viewJdcRapport() + + def handleNewProject(self): + """ + Public slot to handle the NewProject signal. + """ + self.saveToProjectAct.setEnabled(1) + + def handleProjectOpened(self): + """ + Public slot to handle the projectOpened signal. + """ + self.saveToProjectAct.setEnabled(1) + + def handleProjectClosed(self): + """ + Public slot to handle the projectClosed signal. + """ + self.saveToProjectAct.setEnabled(0) + + def handleProjectFileRenamed(self, oldfn, newfn): + """ + Public slot to handle the projectFileRenamed signal. + + @param oldfn old filename of the file (string) + @param newfn new filename of the file (string) + """ + editor = self.getOpenEditor(oldfn) + if editor: + editor.fileRenamed(newfn) + + def enableEditorsCheckFocusIn(self, enabled): + """ + Public method to set a flag enabling the editors to perform focus in checks. + + @param enabled flag indicating focus in checks should be performed (boolean) + """ + self.editorsCheckFocusIn = enabled + + def editorsCheckFocusInEnabled(self): + """ + Public method returning the flag indicating editors should perform focus in checks. + + @return flag indicating focus in checks should be performed (boolean) + """ + return self.editorsCheckFocusIn + + def handleFindFileName(self): + """ + Private method to handle the search for file action. + """ + self.ui.findFileNameDialog.show() + self.ui.findFileNameDialog.raiseW() + self.ui.findFileNameDialog.setActiveWindow() + + ################################################################## + ## Below are the action methods for the edit menu + ################################################################## + + def handleEditUndo(self): + """ + Private method to handle the undo action. + """ + self.activeWindow().undo() + + def handleEditRedo(self): + """ + Private method to handle the redo action. + """ + self.activeWindow().redo() + + def handleEditRevert(self): + """ + Private method to handle the revert action. + """ + self.activeWindow().revertToUnmodified() + + def handleEditCut(self): + """ + Private method to handle the cut action. + """ + self.activeWindow().cut() + + def handleEditCopy(self): + """ + Private method to handle the copy action. + """ + self.activeWindow().copy() + + def handleEditPaste(self): + """ + Private method to handle the paste action. + """ + self.activeWindow().paste() + + def handleEditDelete(self): + """ + Private method to handle the delete action. + """ + self.activeWindow().clear() + + def handleEditIndent(self): + """ + Private method to handle the indent action. + """ + self.activeWindow().indentLineOrSelection() + + def handleEditUnindent(self): + """ + Private method to handle the unindent action. + """ + self.activeWindow().unindentLineOrSelection() + + def handleEditComment(self): + """ + Private method to handle the comment action. + """ + self.activeWindow().commentLineOrSelection() + + def handleEditUncomment(self): + """ + Private method to handle the uncomment action. + """ + self.activeWindow().uncommentLineOrSelection() + + def handleEditStreamComment(self): + """ + Private method to handle the stream comment action. + """ + self.activeWindow().streamCommentLineOrSelection() + + def handleEditBoxComment(self): + """ + Private method to handle the box comment action. + """ + self.activeWindow().boxCommentLineOrSelection() + + def handleEditSelectBrace(self): + """ + Private method to handle the select to brace action. + """ + self.activeWindow().selectToMatchingBrace() + + def handleEditSelectAll(self): + """ + Private method to handle the select all action. + """ + self.activeWindow().selectAll(1) + + def handleEditDeselectAll(self): + """ + Private method to handle the select all action. + """ + self.activeWindow().selectAll(0) + + def handleConvertEOL(self): + """ + Private method to handle the convert line end characters action. + """ + aw = self.activeWindow() + aw.convertEols(aw.eolMode()) + + def handleShortenEmptyLines(self): + """ + Private method to handle the shorten empty lines action. + """ + self.activeWindow().handleShortenEmptyLines() + + def handleEditAutoComplete(self): + """ + Private method to handle the autocomplete action. + """ + aw = self.activeWindow() + aw.autoComplete() + + def handleEditAutoCompleteFromDoc(self): + """ + Private method to handle the autocomplete from document action. + """ + aw = self.activeWindow() + aw.autoCompleteFromDocument() + + def handleEditAutoCompleteFromAPIs(self): + """ + Private method to handle the autocomplete from APIs action. + """ + aw = self.activeWindow() + aw.autoCompleteFromAPIs() + + def handleEditoracAPIsAvailable(self, available): + """ + Private method to handle the availability of API autocompletion signal. + """ + self.autoCompleteFromAPIsAct.setEnabled(available) + + ################################################################## + ## Below are the action and utility methods for the search menu + ################################################################## + + def getWord(self, text, index): + """ + Private method to get the word at a position. + + @param text text to look at (string or QString) + @param index position to look at (int) + @return the word at that position + """ + re = QRegExp('[^\w_]') + start = text.findRev(re, index) + 1 + end = text.find(re, index) + if end > start: + word = text.mid(start, end-start) + else: + word = QString('') + return word + + def textForFind(self): + """ + Private method to determine the selection or the current word for the next find operation. + + @return selection or current word (QString) + """ + aw = self.activeWindow() + if aw is None: + return '' + + if aw.hasSelectedText(): + text = aw.selectedText() + if text.contains('\r') or text.contains('\n'): + # the selection contains at least a newline, it is + # unlikely to be the expression to search for + return '' + + return text + + # no selected text, determine the word at the current position + line, index = aw.getCursorPosition() + return self.getWord(aw.text(line), index) + + def getSRHistory(self, key): + """ + Private method to get the search or replace history list. + + @param key list to return (must be 'search' or 'replace') + @return the requested history list (QStringList) + """ + return self.srHistory[key] + + def handleSearch(self): + """ + Private method to handle the search action. + """ + self.searchDlg.showFind(self.textForFind()) + + def handleReplace(self): + """ + Private method to handle the replace action. + """ + self.replaceDlg.showReplace(self.textForFind()) + + def handleGoto(self): + """ + Private method to handle the goto action. + """ + aw = self.activeWindow() + dlg = GotoDialog(self.ui, None, 1) + dlg.selectAll() + if dlg.exec_loop() == QDialog.Accepted: + aw.gotoLine(min(dlg.getLinenumber(), aw.lines())) + + def handleGotoBrace(self): + """ + Private method to handle the goto brace action. + """ + self.activeWindow().moveToMatchingBrace() + + def handleSearchFiles(self): + """ + Private method to handle the search in files action. + """ + self.ui.findFilesDialog.show(self.textForFind()) + self.ui.findFilesDialog.raiseW() + self.ui.findFilesDialog.setActiveWindow() + + ################################################################## + ## Below are the action methods for the view menu + ################################################################## + + def handleZoomIn(self): + """ + Private method to handle the zoom in action. + """ + self.activeWindow().zoomIn() + + def handleZoomOut(self): + """ + Private method to handle the zoom out action. + """ + self.activeWindow().zoomOut() + + def handleZoom(self): + """ + Private method to handle the zoom action. + """ + aw = self.activeWindow() + dlg = ZoomDialog(aw.getZoom(), self.ui, None, 1) + if dlg.exec_loop() == QDialog.Accepted: + aw.zoomTo(dlg.getZoomSize()) + + def handleToggleAll(self): + """ + Private method to handle the toggle all folds action. + """ + self.activeWindow().foldAll() + + def handleToggleCurrent(self): + """ + Private method to handle the toggle current fold action. + """ + aw = self.activeWindow() + line, index = aw.getCursorPosition() + aw.foldLine(line) + + def handleSplitView(self): + """ + Private method to handle the split view action. + """ + self.addSplit() + + def handleSplitOrientation(self): + """ + Private method to handle the split orientation action. + """ + if self.splitOrientationAct.isOn(): + self.setSplitOrientation(QSplitter.Horizontal) + self.splitViewAct.setIconSet(\ + QIconSet(utilIcons.getPixmap("splitHorizontal.png"))) + self.splitRemoveAct.setIconSet(\ + QIconSet(utilIcons.getPixmap("remsplitHorizontal.png"))) + else: + self.setSplitOrientation(QSplitter.Vertical) + self.splitViewAct.setIconSet(\ + QIconSet(utilIcons.getPixmap("splitVertical.png"))) + self.splitRemoveAct.setIconSet(\ + QIconSet(utilIcons.getPixmap("remsplitVertical.png"))) + + ################################################################## + ## Below are the action methods for the macro menu + ################################################################## + + def handleMacroStartRecording(self): + """ + Private method to handle the start macro recording action. + """ + self.activeWindow().handleStartMacroRecording() + + def handleMacroStopRecording(self): + """ + Private method to handle the stop macro recording action. + """ + self.activeWindow().handleStopMacroRecording() + + def handleMacroRun(self): + """ + Private method to handle the run macro action. + """ + self.activeWindow().handleRunMacro() + + def handleMacroDelete(self): + """ + Private method to handle the delete macro action. + """ + self.activeWindow().handleDeleteMacro() + + def handleMacroLoad(self): + """ + Private method to handle the load macro action. + """ + self.activeWindow().handleLoadMacro() + + def handleMacroSave(self): + """ + Private method to handle the save macro action. + """ + self.activeWindow().handleSaveMacro() + + ################################################################## + ## Below are the action methods for the bookmarks menu + ################################################################## + + def handleToggleBookmark(self): + """ + Private method to handle the toggle bookmark action. + """ + self.activeWindow().handleToggleBookmark() + + def handleNextBookmark(self): + """ + Private method to handle the next bookmark action. + """ + self.activeWindow().handleNextBookmark() + + def handlePreviousBookmark(self): + """ + Private method to handle the previous bookmark action. + """ + self.activeWindow().handlePreviousBookmark() + + def handleClearAllBookmarks(self): + """ + Private method to handle the clear all bookmarks action. + """ + for editor in self.editors: + editor.handleClearBookmarks() + + self.bookmarkNextAct.setEnabled(0) + self.bookmarkPreviousAct.setEnabled(0) + self.bookmarkClearAct.setEnabled(0) + + def handleShowBookmarksMenu(self): + """ + Private method to handle the show bookmarks menu signal. + """ + self.bookmarks = {} + self.bookmarksMenu.clear() + + filenames = self.getOpenFilenames() + filenames.sort() + for filename in filenames: + editor = self.getOpenEditor(filename) + for bookmark in editor.getBookmarks(): + if len(filename) > 50: + dots = "..." + else: + dots = "" + id = self.bookmarksMenu.insertItem(\ + "%s%s : %d" % (dots, filename[-50:], bookmark)) + self.bookmarks[id] = (filename, bookmark) + + def handleBookmarkSelected(self, id): + """ + Private method to handle the bookmark selected signal. + + @param id index of the selected menu entry + This acts as an index into the list of bookmarks + that was created, when the bookmarks menu was built. + """ + self.displayPythonFile(self.bookmarks[id][0], self.bookmarks[id][1]) + + def handleBookmarkToggled(self, editor): + """ + Private slot to handle the bookmarkToggled signal. + + It checks some bookmark actions and reemits the signal. + + @param editor editor that sent the signal + """ + if editor.hasBookmarks(): + self.bookmarkNextAct.setEnabled(1) + self.bookmarkPreviousAct.setEnabled(1) + self.bookmarkClearAct.setEnabled(1) + else: + self.bookmarkNextAct.setEnabled(0) + self.bookmarkPreviousAct.setEnabled(0) + self.bookmarkClearAct.setEnabled(0) + self.emit(PYSIGNAL('bookmarkToggled'), (editor,)) + + def handleGotoSyntaxError(self): + """ + Private method to handle the goto syntax error action. + """ + self.activeWindow().handleGotoSyntaxError() + + def handleClearAllSyntaxErrors(self): + """ + Private method to handle the clear all syntax errors action. + """ + for editor in self.editors: + editor.handleClearSyntaxError() + + def handleSyntaxErrorToggled(self, editor): + """ + Private slot to handle the syntaxerrorToggled signal. + + It checks some syntax error actions and reemits the signal. + + @param editor editor that sent the signal + """ + if editor.hasSyntaxErrors(): + self.syntaxErrorGotoAct.setEnabled(1) + self.syntaxErrorClearAct.setEnabled(1) + else: + self.syntaxErrorGotoAct.setEnabled(0) + self.syntaxErrorClearAct.setEnabled(0) + self.emit(PYSIGNAL('syntaxerrorToggled'), (editor,)) + + ################################################################## + ## Below are general utility methods + ################################################################## + + def handleResetUI(self): + """ + Public slot to handle the resetUI signal. + """ + editor = self.activeWindow() + if editor is None: + self.setSbFile() + else: + line, pos = editor.getCursorPosition() + self.setSbFile(editor.getFileName(), line+1, pos) + + def closeViewManager(self): + """ + Public method to shutdown the viewmanager. + + If it cannot close all editor windows, it aborts the shutdown process. + + @return flag indicating success (boolean) + """ + self.handleCloseAll() + if len(self.editors): + return 0 + else: + return 1 + + def handleLastEditorClosed(self): + """ + Private slot to handle the lastEditorClosed signal. + """ + self.SauveRecents() + + + def handleEditorOpened(self): + """ + Private slot to handle the editorOpened signal. + """ + self.closeActGrp.setEnabled(1) + self.saveActGrp.setEnabled(1) + self.printAct.setEnabled(1) + self.printSelAct.setEnabled(1) + self.editActGrp.setEnabled(1) + self.searchActGrp.setEnabled(1) + self.viewActGrp.setEnabled(1) + self.viewFoldActGrp.setEnabled(1) + self.unhighlightAct.setEnabled(1) + self.splitViewAct.setEnabled(1) + self.splitOrientationAct.setEnabled(1) + self.macroActGrp.setEnabled(1) + self.bookmarkActGrp.setEnabled(1) + + # activate the autosave timer + if not self.autosaveTimer.isActive() and \ + self.autosaveInterval > 0: + self.autosaveTimer.start(self.autosaveInterval * 60000, 1) + + + def checkActions(self, editor, setSb=1): + """ + Private slot to check some actions for their enable/disable status and set the statusbar info. + + @param editor editor window + @param setSb flag indicating an update of the status bar is wanted (boolean) + """ + if editor is not None: + self.saveAct.setEnabled(editor.modified) + self.revertAct.setEnabled(editor.modified) + + lex = editor.getLexer() + if lex is not None: + self.commentAct.setEnabled(lex.canBlockComment()) + self.uncommentAct.setEnabled(lex.canBlockComment()) + self.streamCommentAct.setEnabled(lex.canStreamComment()) + self.boxCommentAct.setEnabled(lex.canBoxComment()) + else: + self.commentAct.setEnabled(0) + self.uncommentAct.setEnabled(0) + self.streamCommentAct.setEnabled(0) + self.boxCommentAct.setEnabled(0) + + if editor.hasBookmarks(): + self.bookmarkNextAct.setEnabled(1) + self.bookmarkPreviousAct.setEnabled(1) + self.bookmarkClearAct.setEnabled(1) + else: + self.bookmarkNextAct.setEnabled(0) + self.bookmarkPreviousAct.setEnabled(0) + self.bookmarkClearAct.setEnabled(0) + + if editor.hasSyntaxErrors(): + self.syntaxErrorGotoAct.setEnabled(1) + self.syntaxErrorClearAct.setEnabled(1) + else: + self.syntaxErrorGotoAct.setEnabled(0) + self.syntaxErrorClearAct.setEnabled(0) + + if editor.canAutoCompleteFromAPIs(): + self.autoCompleteFromAPIsAct.setEnabled(1) + else: + self.autoCompleteFromAPIsAct.setEnabled(0) + + if setSb: + line, pos = editor.getCursorPosition() + self.setSbFile(editor.getFileName(), line+1, pos) + + self.emit(PYSIGNAL('checkActions'), (editor,)) + + def handlePreferencesChanged(self): + """ + Public slot to handle the preferencesChanged signal. + + This method performs the following actions +
    +
  • reread the colours for the syntax highlighting
  • +
  • reloads the already created API objetcs
  • +
  • starts or stops the autosave timer
  • +
  • Note: changes in viewmanager type are activated + on an application restart.
  • +
+ """ + # reload api information + for language, api in self.apis.items(): + if api is not None: + apifiles = Preferences.getEditorAPI(language) + if len(apifiles): + api.clear() + for apifile in apifiles: + api.load(apifile) + else: + self.apis[language] = None + + # reload editor settings + for editor in self.editors: + editor.readSettings() + + # reload the autosave timer setting + self.autosaveInterval = Preferences.getEditor("AutosaveInterval") + if len(self.editors): + if self.autosaveTimer.isActive() and \ + self.autosaveInterval == 0: + self.autosaveTimer.stop() + elif not self.autosaveTimer.isActive() and \ + self.autosaveInterval > 0: + self.autosaveTimer.start(self.autosaveInterval * 60000, 1) + + def handleEditorSaved(self, fn): + """ + Public slot to handle the editorSaved signal. + + It simply reemits the signal. + + @param fn filename of the saved editor + """ + self.emit(PYSIGNAL('editorSaved'), (fn,)) + + def handleCursorChanged(self, fn, line, pos): + """ + Private slot to handle the cursorChanged signal. + + It emits the signal cursorChanged with parameter editor. + + @param fn filename (string) + @param line line number of the cursor (int) + @param pos position in line of the cursor (int) + """ + self.setSbFile(fn, line, pos) + self.emit(PYSIGNAL('cursorChanged'), (self.getOpenEditor(fn),)) + + def handleBreakpointToggled(self, editor): + """ + Private slot to handle the breakpointToggled signal. + + It simply reemits the signal. + + @param editor editor that sent the signal + """ + self.emit(PYSIGNAL('breakpointToggled'), (editor,)) + + + def getProject(self): + """ + Public method to get a reference to the Project object. + + @return Reference to the Project object (Project.Project) + """ + return self.ui.getProject() + + def getActions(self, type): + """ + Public method to get a list of all actions. + + @param type string denoting the action set to get. + It must be one of "edit", "file", "search", + "view" or "window" + @return list of all actions (list of QAction) + """ + try: + exec 'actionList = self.%sActions[:]' % type + except: + actionList = [] + + return actionList + + def editorCommand(self, cmd): + """ + Private method to send an editor command to the active window. + + @param cmd the scintilla command to be sent + """ + aw = self.activeWindow() + if aw: + aw.SendScintilla(cmd) + + ################################################################## + ## Below are protected utility methods + ################################################################## + + def _getOpenStartDir(self): + """ + Protected method to return the starting directory for a file open dialog. + + The appropriate starting directory is calculated + using the following search order, until a match is found:
+ 1: Directory of currently active editor
+ 2: Directory of currently active Project
+ 3: CWD + + @return String name of directory to start or None + """ + # if we have an active source, return its path + if self.activeWindow() is not None and \ + self.activeWindow().getFileName(): + return os.path.dirname(self.activeWindow().getFileName()) + + # ok, try if there is an active project and return its path + elif self.getProject().isOpen(): + return self.getProject().ppath + + else: + try : + userDir=os.path.expanduser("~/Eficas_install/") + return userDir + except : + return "" + + + def _getOpenFileFilter(self): + """ + Protected method to return the active filename filter for a file open dialog. + + The appropriate filename filter is determined by file extension of + the currently active editor. + + @return name of the filename filter (QString) or None + """ + if self.activeWindow() is not None and \ + self.activeWindow().getFileName(): + ext = os.path.splitext(self.activeWindow().getFileName())[1] + try: + return QString(self.ext2Filter[ext]) + except KeyError: + return None + + else: + return None + + + + +""" +Module implementing a tabbed viewmanager class. +""" + + + +class TabWidget(QTabWidget): + """ + Class implementing a custimized TabWidget. + """ + def __init__(self, parent): + """ + Constructor + + @param parent parent widget (QWidget) + """ + QTabWidget.__init__(self, parent) + + self.editors = [] + self.curIndex = 0 + + self.connect(self, SIGNAL("currentChanged(QWidget *)"), self.handleCurrentChanged) + + def handleCurrentChanged(self): + """ + Private slot called by the currentChanged signal. + """ + self.curIndex = self.currentPageIndex() + + def addTab(self, editor, title): + """ + Overwritten method to add a new tab. + + @param editor the editor object to be added (QScintilla.Editor.Editor) + @param title title for the new tab (string, QString or QTab) + """ + QTabWidget.addTab(self, editor, title) + + if not editor in self.editors: + self.editors.append(editor) + self.connect(editor, PYSIGNAL('captionChanged'), + self.handleCaptionChange) + + def showPage(self, editor): + """ + Overridden method to show a tab. + + @param editor the editor object to be shown (QScintilla.Editor.Editor) + """ + QTabWidget.showPage(self, editor) + self.curIndex = self.indexOf(editor) + + def nextTab(self): + """ + Public slot used to show the next tab. + """ + if self.count(): + self.curIndex += 1 + if self.curIndex == self.count(): + self.curIndex = 0 + + QTabWidget.showPage(self, self.page(self.curIndex)) + + def prevTab(self): + """ + Public slot used to show the previous tab. + """ + if self.count(): + self.curIndex -= 1 + if self.curIndex == -1: + self.curIndex = self.count() - 1 + + QTabWidget.showPage(self, self.page(self.curIndex)) + + def handleCaptionChange(self, cap, editor): + """ + Private method to handle Caption change signals from the editor. + + Updates the listview text to reflect the new caption information. + + @param cap Caption for the editor + @param editor Editor to update the caption for + """ + fn = editor.getFileName() + if fn: + txt = os.path.basename(fn) + if editor.isReadOnly(): + txt = '%s (ro)' % txt + self.changeTab(editor, txt) + + def removePage(self, object): + """ + Overwritten method to remove a page. + + @param object object to be removed (QObject) + """ + QTabWidget.removePage(self, object) + + self.disconnect( object, PYSIGNAL('captionChanged'), + self.handleCaptionChange ) + self.editors.remove(object) + + def hasEditor(self, editor): + """ + Public method to check for an editor. + + @param editor editor object to check for + @return flag indicating, whether the editor to be checked belongs + to the list of editors managed by this tab widget. + """ + return editor in self.editors + + def hasEditors(self): + """ + Public method to test, if any editor is managed. + + @return flag indicating editors are managed + """ + return len(self.editors) and 1 or 0 + +class Tabview(QSplitter, ViewManager): + """ + Class implementing a tabbed viewmanager class embedded in a splitter. + + @signal lastEditorClosed emitted after the last editor window was closed + @signal editorOpened emitted after an editor window was opened + @signal editorSaved emitted after an editor window was saved + """ + def __init__(self,parent, ui): + """ + Constructor + + @param parent parent widget (QWidget) + @param ui reference to the main user interface + @param dbs reference to the debug server object + """ + self.tabWidgets = [] + + QSplitter.__init__(self,parent) + ViewManager.__init__(self, ui) + tw = TabWidget(self) + self.tabWidgets.append(tw) + self.currentTabWidget = tw + self.connect(tw, SIGNAL('currentChanged(QWidget*)'), + self.handleCurrentChanged) + tw.installEventFilter(self) + tw.tabBar().installEventFilter(self) + self.setOrientation(QSplitter.Vertical) + + def initViewActions(self): + """ + Protected method defining the user interface actions for the view commands. + """ + ViewManager.initViewActions(self) + + self.nextTabAct = QAction(self.trUtf8('Show next tab'), + self.trUtf8('Show next tab'), + QKeySequence(self.trUtf8('Ctrl+Alt+Tab')), self) + self.connect(self.nextTabAct, SIGNAL('activated()'), self.nextTab) + self.viewActions.append(self.nextTabAct) + + self.prevTabAct = QAction(self.trUtf8('Show previous tab'), + self.trUtf8('Show previous tab'), + QKeySequence(self.trUtf8('Shift+Ctrl+Alt+Tab')), self) + self.connect(self.prevTabAct, SIGNAL('activated()'), self.prevTab) + self.viewActions.append(self.prevTabAct) + + def nextTab(self): + """ + Private slot used to show the next tab of the current tabwidget. + """ + self.currentTabWidget.nextTab() + + def prevTab(self): + """ + Private slot used to show the previous tab of the current tabwidget. + """ + self.currentTabWidget.prevTab() + + def canCascade(self): + """ + Public method to signal if cascading of managed windows is available. + + @return flag indicating cascading of windows is available + """ + return 0 + + def canTile(self): + """ + Public method to signal if tiling of managed windows is available. + + @return flag indicating tiling of windows is available + """ + return 0 + + def canSplit(self): + """ + public method to signal if splitting of the view is available. + + @return flag indicating splitting of the view is available. + """ + return 1 + + def tile(self): + """ + Public method to tile the managed windows. + """ + pass + + def cascade(self): + """ + Public method to cascade the managed windows. + """ + pass + + def removeAllViews(self): + """ + Private method to remove all views (i.e. windows) + """ + for win in self.editors: + self.removeView(win) + + def removeView(self, win): + """ + Private method to remove a view (i.e. window) + + @param win editor window to be removed + """ + for tw in self.tabWidgets: + if tw.hasEditor(win): + tw.removePage(win) + break + win.closeIt() + + # if this was the last editor in this view, switch to the next, that + # still has open editors + for i in range(self.tabWidgets.index(tw), -1, -1) + \ + range(self.tabWidgets.index(tw) + 1, len(self.tabWidgets)): + if self.tabWidgets[i].hasEditors(): + self.currentTabWidget = self.tabWidgets[i] + self.activeWindow().setFocus() + break + + def addView(self, win, fn=None, title=None): + """ + Private method to add a view (i.e. window) + + @param win editor window to be added + @param fn filename of this editor + """ + win.show() + if fn is None: + if title== None : + self.untitledCount += 1 + self.currentTabWidget.addTab(win, self.trUtf8("Untitled %1").arg(self.untitledCount)) + else : + self.currentTabWidget.addTab(win, title) + else: + txt = os.path.basename(fn) + if not QFileInfo(fn).isWritable(): + txt = '%s (ro)' % txt + self.currentTabWidget.addTab(win, txt) + self.currentTabWidget.setTabToolTip(win, os.path.dirname(fn)) + self.currentTabWidget.showPage(win) + win.setFocus() + + def showView(self, win, fn=None): + """ + Private method to show a view (i.e. window) + + @param win editor window to be shown + @param fn filename of this editor + """ + win.show() + for tw in self.tabWidgets: + if tw.hasEditor(win): + tw.showPage(win) + self.currentTabWidget = tw + break + win.setFocus() + + def activeWindow(self): + """ + Private method to return the active (i.e. current) window. + + @return reference to the active editor + """ + return self.currentTabWidget.currentPage() + + def handleShowWindowMenu(self, windowMenu): + """ + Private method to set up the viewmanager part of the Window menu. + + @param windowMenu reference to the window menu + """ + pass + + def initWindowActions(self): + """ + Define the user interface actions for window handling. + """ + pass + + def setEditorName(self, editor, newName): + """ + Change the displayed name of the editor. + + @param editor editor window to be changed + @param newName new name to be shown (string or QString) + """ + self.currentTabWidget.changeTab(editor, + os.path.basename(unicode(newName))) + self.currentTabWidget.setTabToolTip(editor, + os.path.dirname(unicode(newName))) + + def handleModificationStatusChanged(self, m, editor): + """ + Private slot to handle the modificationStatusChanged signal. + + @param m flag indicating the modification status (boolean) + @param editor editor window changed + """ + for tw in self.tabWidgets: + if tw.hasEditor(editor): + break + if m: + tw.setTabIconSet(editor, + QIconSet(utilIcons.getPixmap("fileModified.png"))) + elif editor.hasSyntaxErrors(): + tw.setTabIconSet(editor, + QIconSet(utilIcons.getPixmap("syntaxError.png"))) + else: + tw.setTabIconSet(editor, + QIconSet(utilIcons.getPixmap("empty.png"))) + self.checkActions(editor) + + def handleSyntaxErrorToggled(self, editor): + """ + Private slot to handle the syntaxerrorToggled signal. + + @param editor editor that sent the signal + """ + for tw in self.tabWidgets: + if tw.hasEditor(editor): + break + if editor.hasSyntaxErrors(): + tw.setTabIconSet(editor, + QIconSet(utilIcons.getPixmap("syntaxError.png"))) + else: + tw.setTabIconSet(editor, + QIconSet(utilIcons.getPixmap("empty.png"))) + + ViewManager.handleSyntaxErrorToggled(self, editor) + + def addSplit(self): + """ + Public method used to split the current view. + """ + tw = TabWidget(self) + tw.show() + self.tabWidgets.append(tw) + self.currentTabWidget = self.tabWidgets[-1] + self.connect(tw, SIGNAL('currentChanged(QWidget*)'), + self.handleCurrentChanged) + tw.installEventFilter(self) + tw.tabBar().installEventFilter(self) + self.setSizes([int(100/len(self.tabWidgets))] * len(self.tabWidgets)) + self.splitRemoveAct.setEnabled(1) + + def removeSplit(self): + """ + Public method used to remove the current split view. + + @return flag indicating successfull removal + """ + if len(self.tabWidgets) > 1: + tw = self.currentTabWidget + res = 1 + savedEditors = tw.editors[:] + for editor in savedEditors: + res &= self.closeEditor(editor) + if res: + i = self.tabWidgets.index(tw) + if i == len(self.tabWidgets)-1: + i -= 1 + self.tabWidgets.remove(tw) + tw.close(1) + self.currentTabWidget = self.tabWidgets[i] + if len(self.tabWidgets) == 1: + self.splitRemoveAct.setEnabled(0) + return 1 + + return 0 + + def setSplitOrientation(self, orientation): + """ + Public method used to set the orientation of the split view. + + @param orientation orientation of the split + (QSplitter.Horizontal or QSplitter.Vertical) + """ + self.setOrientation(orientation) + + def handleCurrentChanged(self, editor): + """ + Private slot to handle the currentChanged signal. + + @param editor selected editor window + """ + self.checkActions(editor) + editor.setFocus() + + def eventFilter(self, watched, event): + """ + Method called to filter the event queue. + + @param watched the QObject being watched + @param event the event that occurred + @return always 0 + """ + if event.type() == QEvent.MouseButtonPress and \ + not event.button() == Qt.RightButton: + if isinstance(watched, QTabWidget): + self.currentTabWidget = watched + elif isinstance(watched, QTabBar): + self.currentTabWidget = watched.parent() + elif isinstance(watched, QScintilla.Editor.Editor): + for tw in self.tabWidgets: + if tw.hasEditor(watched): + self.currentTabWidget = tw + break + + aw = self.activeWindow() + if aw is not None: + self.checkActions(aw) + aw.setFocus() + + return 0 + + +class MyTabview(Tabview): + """ + Base class inherited by all specific viewmanager classes. + + It defines the interface to be implemented by specific + viewmanager classes and all common methods. + + @signal lastEditorClosed emitted after the last editor window was closed + @signal editorOpened(string) emitted after an editor window was opened + @signal editorSaved(string) emitted after an editor window was saved + @signal checkActions(editor) emitted when some actions should be checked + for their status + @signal cursorChanged(editor) emitted after the cursor position of the active + window has changed + @signal breakpointToggled(editor) emitted when a breakpoint is toggled. + @signal bookmarkToggled(editor) emitted when a bookmark is toggled. + """ + def __init__(self, parent, ui): + Tabview.__init__(self, parent, ui) + self.appli=parent + self.code =self.appli.code + self.salome=self.appli.salome + self.initRecent() + + def initRecent(self) : + rep=self.appli.CONFIGURATION.rep_user + monFichier=rep+"/listefichiers_"+self.code + index=0 + try : + f=open(monFichier) + while ( index < 9) : + ligne=f.readline() + if ligne != "" : + l=(ligne.split("\n"))[0] + self.recent.append(l) + index=index+1 + except : pass + + try : f.close() + except : pass + + def SauveRecents(self) : + rep=self.appli.CONFIGURATION.rep_user + monFichier=rep+"/listefichiers_"+self.code + try : + f=open(monFichier,'w') + if len(self.recent) == 0 : return + index=0 + while ( index < len(self.recent)): + ligne=str(self.recent[index])+"\n" + f.write(ligne) + index=index+1 + except : + pass + try : + f.close() + except : + pass + + + def checkActions(self, editor, setSb=1): + """ + Private slot to check some actions for their enable/disable status and set the statusbar info. + + @param editor editor window + @param setSb flag indicating an update of the status bar is wanted (boolean) + """ + self.emit(PYSIGNAL('checkActions'), (editor,)) + + + def addToRecentList(self, fn): + """ + Public slot to add a filename to the list of recently opened files. + + @param fn name of the file to be added + """ + self.recent.remove(fn) + self.recent.prepend(fn) + if len(self.recent) > 9: + self.recent = self.recent[:9] + + def handleOpen(self,fn=None,patron=0,units=None): + """ + Public slot to open a Python JDC file. + + @param prog name of file to be opened (string or QString) + patron booleen pour indiquer si le fichier doit etre + ajoute a la liste des fichiers ouverts recemment + """ + # Get the file name if one wasn't specified. + if fn is None: + + fn = QFileDialog.getOpenFileName(self._getOpenStartDir(), + self.trUtf8('JDC Files (*.comm);;''All Files (*)'), self.ui) + + if fn.isNull(): + return + + fn = normabspath(unicode(fn)) + + newWin, editor = self.getEditor(fn,units=units) + + if newWin: + self.handleModificationStatusChanged(editor.modified, editor) + self.checkActions(editor) + + # insert filename into list of recently opened files + if patron == 0 : self.addToRecentList(fn) + + + ################################################################## + ## Below are protected utility methods + ################################################################# + + def _getOpenStartDir(self): + """ + Protected method to return the starting directory for a file open dialog. + + The appropriate starting directory is calculated + using the following search order, until a match is found:
+ 1: Directory of currently active editor
+ 2: Directory of currently active Project
+ 3: CWD + + @return String name of directory to start or None + """ + # if we have an active source, return its path + if self.activeWindow() is not None and \ + self.activeWindow().getFileName(): + return os.path.dirname(self.activeWindow().getFileName()) + + + else: + # None will cause open dialog to start with cwd + try : + userDir=os.path.expanduser("~/Eficas_install/") + return userDir + except : + return "" + + + def handleEditorOpened(self): + """ + Private slot to handle the editorOpened signal. + """ + pass + + def handleModificationStatusChanged(self, m, editor): + """ + Private slot to handle the modificationStatusChanged signal. + + @param m flag indicating the modification status (boolean) + @param editor editor window changed + """ + for tw in self.tabWidgets: + if tw.hasEditor(editor): + break + if m: + #tw.setTabIconSet(editor, + # QIconSet(utilIcons.getPixmap("fileModified.png"))) + pass + elif editor.hasSyntaxErrors(): + tw.setTabIconSet(editor, + QIconSet(utilIcons.getPixmap("syntaxError.png"))) + else: + tw.setTabIconSet(editor, + QIconSet(utilIcons.getPixmap("empty.png"))) + self.checkActions(editor) + + + + +if __name__=='__main__': + import sys + import prefs + if hasattr(prefs,'encoding'): + # Hack pour changer le codage par defaut des strings + import sys + reload(sys) + sys.setdefaultencoding(prefs.encoding) + del sys.setdefaultencoding + # Fin hack + + #CS_pbruno note: fait implicitement des trucs ces imports (grr) + #import styles + from Editeur import import_code + from Editeur import session + + # Analyse des arguments de la ligne de commande + options=session.parse(sys.argv) + code=options.code + app = QApplication(sys.argv) + + mw = MyTabview(None,None) + app.setMainWidget(mw) + app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + mw.show() + mw.getEditor('azAster.comm') + mw.getEditor('azAster2.comm') + res = app.exec_loop() + sys.exit(res) diff --git a/InterfaceQT4/__init__.py b/InterfaceQT4/__init__.py new file mode 100644 index 00000000..21d22fbc --- /dev/null +++ b/InterfaceQT4/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce package contient les fonctionnalités nécessaires + pour l'éditeur graphique QT +""" diff --git a/InterfaceQT4/browser.py b/InterfaceQT4/browser.py new file mode 100644 index 00000000..8d2c165f --- /dev/null +++ b/InterfaceQT4/browser.py @@ -0,0 +1,423 @@ +# -*- coding: utf-8 -*- + +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +import string,re +import types,sys,os +import traceback +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +class JDCTree( QTreeWidget ): + def __init__( self, jdc_item, QWParent): + QListView.__init__( self, QWParent ) + + self.item = jdc_item + self.tree = self + self.editor = QWParent + self.appliEficas = self.editor.appliEficas + + self.setColumnCount(2) + mesLabels=QStringList() + mesLabels << self.trUtf8('Commande ') << self.trUtf8('Concept/Valeur ') + self.setHeaderLabels(mesLabels) + + self.setMinimumSize(QSize(600,500)) + print self + self.setColumnWidth(0,300) + + self.connect(self, SIGNAL("itemClicked ( QTreeWidgetItem * ,int) "), self.handleOnItem) + self.racine=self.item.itemNode(self,self.item) + self.expandItem(self.racine) + self.node_selected=self.racine + self.racine.affichePanneau() + + + def contextMenuEvent(self,event) : + coord=event.globalPos() + item= self.currentItem() + self.handleContextMenu(item,coord) + + def handleContextMenu(self,item,coord): + """ + Private slot to show the context menu of the listview. + + @param itm the selected listview item (QListWidgetItem) + @param coord the position of the mouse pointer (QPoint) + Attention : existeMenu permet de savoir si un menu est associe a cet item + """ + if item == None : return + if item.existeMenu == 0 : return + if item.menu == None: + item.createPopUpMenu() + if item.menu != None: + item.menu.exec_(coord) + + def handleOnItem(self,item,int): + item.affichePanneau() + try : + fr = item.item.get_fr() + if self.editor: + self.editor.affiche_infos(fr) + except: + pass + + +# type de noeud +COMMENT = "COMMENTAIRE" +PARAMETERS = "PARAMETRE" + +class JDCNode(QTreeWidgetItem): + def __init__( self, treeParent, item): + self.item = item + self.treeParent = treeParent + self.tree = self.treeParent.tree + self.editor = self.treeParent.editor + self.appliEficas = treeParent.appliEficas + + name = self.appliEficas.trUtf8( str( item.GetLabelText()[0] ) ) + value = self.appliEficas.trUtf8( str( item.GetText() ) ) + mesColonnes=QStringList() + mesColonnes << name << value + QTreeWidgetItem.__init__(self,treeParent,mesColonnes) + + monIcone = QIcon("/home/noyret/Install_Eficas/EficasV1/InterfaceQT4/icons/" +self.item.GetIconName() + ".gif") + self.setIcon(0,monIcone) + self.children = [] + self.build_children() + self.menu=None + self.existeMenu=1 + + self.item.connect("valid",self.onValid,()) + self.item.connect("supp" ,self.onAdd,()) + self.item.connect("add" ,self.onSupp,()) + + def build_children(self,posInsertion=10000): + """ Construit la liste des enfants de self """ + """ Se charge de remettre les noeuds Expanded dans le meme etat """ + #print "*********** build_children ", self.item.GetLabelText() + listeExpanded=[] + for item in self.children : + if item.isExpanded(): + if self.children.index(item) < posInsertion : + listeExpanded.append(self.children.index(item)) + else : + listeExpanded.append( self.children.index(item) +1) + self.removeChild(item) + self.children = [] + sublist = self.item._GetSubList() + ind=0 + for item in sublist : + nouvelItem=item.itemNode(self,item) + self.children.append(nouvelItem) + if ind in listeExpanded : nouvelItem.setExpanded(1) + ind=ind+1 + + def affichePanneau(self) : + if self.item.isactif(): + panel=self.getPanel() + else: + from monInactifPanel import PanelInactif + panel = PanelInactif(self,self.editor) + panel.show() + self.select() + + + def createPopUpMenu(self): + #implemente dans les noeuds derives si necessaire + self.existeMenu = 0 + + def commentIt(self): + """ + Cette methode a pour but de commentariser la commande pointee par self + """ + # On traite par une exception le cas ou l'utilisateur final cherche a désactiver + # (commentariser) un commentaire. + try : + pos=self.treeParent.children.index(self) + commande_comment = self.item.get_objet_commentarise() + # On signale a l editeur du panel (le JDCDisplay) une modification + self.editor.init_modif() + self.treeParent.build_children() + self.treeParent.children[pos].select() + self.treeParent.children[pos].affichePanneau() + except Exception,e: + traceback.print_exc() + QMessageBox.critical( self.editor, "TOO BAD",str(e)) + + def unCommentIt(self): + """ + Realise la decommentarisation de self + """ + try : + pos=self.treeParent.children.index(self) + commande,nom = self.item.uncomment() + self.editor.init_modif() + self.treeParent.build_children() + self.treeParent.children[pos].select() + self.treeParent.children[pos].affichePanneau() + except Exception,e: + QMessageBox.critical( self.editor, "Erreur !",str(e)) + + def addComment( self, after=True ): + """ + Ajoute un commentaire a l'interieur du JDC : + """ + self.editor.init_modif() + if after: + pos = 'after' + else: + pos = 'before' + return self.append_brother( COMMENT, pos ) + + def addParameters( self, after=True ): + """ + Ajoute un parametre a l'interieur du JDC : + """ + self.editor.init_modif() + if after: + pos = 'after' + else: + pos = 'before' + return self.append_brother( PARAMETERS, pos ) + + + def select( self ): + """ + Rend le noeud courant (self) selectionne et deselectionne + tous les autres + """ + for item in self.tree.selectedItems() : + item.setSelected(0) + #print "select -----------> " , self.item.GetLabelText() + self.setSelected( True ) + self.setExpanded( True ) + self.tree.setCurrentItem( self ) + self.tree.node_selected= self + + #------------------------------------------------------------------ + # Methodes de creation et destruction de noeuds + # Certaines de ces methodes peuvent etre appelees depuis l'externe + #------------------------------------------------------------------ + def append_brother(self,name,pos='after'): + """ + Permet d'ajouter un objet frere a l'objet associe au noeud self + par defaut on l'ajoute immediatement apres + Methode externe + """ + #print "*********** append_brother ", self.item.GetLabelText() + self.editor.init_modif() + index = self.treeParent.children.index(self) + if pos == 'before': + index = index + elif pos == 'after': + index = index +1 + else: + print str(pos)," n'est pas un index valide pour append_brother" + return 0 + return self.treeParent.append_child(name,pos=index) + + def append_child(self,name,pos=None,verif='oui'): + """ + Methode pour ajouter un objet fils a l'objet associe au noeud self. + On peut l'ajouter en debut de liste (pos='first'), en fin (pos='last') + ou en position intermediaire. + Si pos vaut None, on le place a la position du catalogue. + """ + #print "************** append_child ",self.item.GetLabelText() + self.editor.init_modif() + if pos == 'first': + index = 0 + elif pos == 'last': + index = len(self.children) + elif type(pos) == types.IntType : + # position fixee + index = pos + elif type(pos) == types.InstanceType: + # pos est un item. Il faut inserer name apres pos + index = self.item.get_index(pos) +1 + elif type(name) == types.InstanceType: + index = self.item.get_index_child(name.nom) + else: + index = self.item.get_index_child(name) + obj=self.item.additem(name,index) #CS_pbruno emet le signal 'add' + if obj is None:obj=0 + if obj == 0:return 0 + self.build_children(index) + child=self.children[index] + child.affichePanneau() + return child + + def delete(self): + """ + Methode externe pour la destruction de l'objet associe au noeud + """ + self.editor.init_modif() + index = self.treeParent.children.index(self) - 1 + if index < 0 : index =0 + + ret=self.treeParent.item.suppitem(self.item) + if ret == 0:return + + self.treeParent.build_children() + brothers=self.treeParent.children + if brothers: + toselect=brothers[index] + else: + toselect=self.treeParent + toselect.select() + toselect.affichePanneau() + +# +# #------------------------------------------------------------------ + def onValid(self): + self.editor.init_modif() + self.update_node_valid() + self.update_node_label() + self.update_node_texte() + + def onAdd(self,object): + #print "NODE onAdd", self.item.GetLabelText() + self.editor.init_modif() + self.update_nodes() + + def onSupp(self,object): + #print "NODE onSupp", self.item.GetLabelText() + self.editor.init_modif() + self.update_nodes() + + + def update_node_valid(self): + """Cette methode remet a jour la validite du noeud (icone) + Elle appelle isvalid + """ + #print 'NODE update_node_valid', self.item.GetLabelText() + monIcone = QIcon("/home/noyret/Install_Eficas/EficasV1/InterfaceQT4/icons/" +self.item.GetIconName() + ".gif") + self.setIcon(0,monIcone) + + def update_node_label(self): + """ Met a jour le label du noeud """ + #print "NODE update_node_label", self.item.GetLabelText() + labeltext,fonte,couleur = self.item.GetLabelText() + self.setText(0, labeltext) + + def update_node_texte(self): + """ Met a jour les noms des SD et valeurs des mots-cles """ + #print "NODE update_node_texte", self.item.GetLabelText() + value = self.item.GetText() + self.setText(1, value) + + def update_nodes(self): + #print 'NODE update_nodes', self.item.GetLabelText() + self.build_children() + + def update_texte(self): + """ Met a jour les noms des SD et valeurs des mots-cles """ + #print "NODE update_texte", self.item.GetLabelText() + self.update_node_texte() + if self.isExpanded() : + for child in self.children: + if child.isHidden() == false : child.update_texte() + +# def update_valid(self) : +# """Cette methode a pour but de mettre a jour la validite du noeud +# et de propager la demande de mise a jour a son Parent +# """ +# #print "NODE update_valid", self.item.GetLabelText() +# self.update_node_valid() +# try : +# self.treeParent.update_valid() +# except: +# pass + + def doPasteCommande(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument qui est nécessairement + une commande + """ + print "objet_a_copier = ", objet_a_copier.item.GetLabelText() + child = self.append_brother(objet_a_copier) + return child + + def doPasteMCF(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument (objet_a_copier) + Il s'agit forcément d'un mot clé facteur + """ + child = self.append_child(objet_a_copier,pos='first') + return child + +if __name__=='__main__': + from PyQt4 import * + from PyQt4.QtGui import * + from PyQt4.QtCore import * + + +# sys.path[:0]=['..','../Aster','../Aster/Cata' ] + +# app = QApplication(sys.argv) + +# fn = 'azAster.comm' +# jdcName = os.path.basename(fn) +# f=open(fn,'r') +# text=f.read() +# f.close() +# print 'text',text + print "afaire" + +# +# from autre_analyse_cata import analyse_catalogue +# from Cata import cataSTA8 +# cata=cataSTA8 +# fic_cata="../../Aster/Cata/cataSTA8/cata.py" +# cata_ordonne ,list_simp_reel = analyse_catalogue(cata) +# +# +# +# j=cata.JdC( procedure=text, cata=cata, nom=jdcName, +# cata_ord_dico=cata_ordonne ) +# +# j.compile() +# if not j.cr.estvide(): +# print j.cr +# sys.exit() +# +# j.exec_compile() +# if not j.cr.estvide(): +# print j.cr +# sys.exit() +# +# from Editeur import comploader +# comploader.charger_composants(QT) +# from Editeur import Objecttreeitem +# jdc_item=Objecttreeitem.make_objecttreeitem( app, "nom", j) +# +# if jdc_item: +# tree = JDCTree( jdc_item, None ) +# +# app.setMainWidget(tree) +# app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) +# tree.show() +# +# res = app.exec_loop() +# sys.exit(res) +# +# diff --git a/InterfaceQT4/compobase.py b/InterfaceQT4/compobase.py new file mode 100644 index 00000000..a287b7d2 --- /dev/null +++ b/InterfaceQT4/compobase.py @@ -0,0 +1,3 @@ +from Editeur import Objecttreeitem +treeitem = Objecttreeitem.ObjectTreeItem +objet = None diff --git a/InterfaceQT4/compobloc.py b/InterfaceQT4/compobloc.py new file mode 100644 index 00000000..e236eef5 --- /dev/null +++ b/InterfaceQT4/compobloc.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- + +from PyQt4 import * +from PyQt4.QtGui import * +from Editeur import Objecttreeitem + +import compofact +import browser + + +class Node(browser.JDCNode): + def getPanel(self): + """ + """ + from monMCFactPanel import MonMCFactPanel + return MonMCFactPanel(self,parent=self.editor) + + +class BLOCTreeItem(compofact.FACTTreeItem): + itemNode=Node + + def get_objet(self,name) : + for v in self.object.mc_liste: + if v.nom == name : return v + return None + + def iscopiable(self): + return 0 + + +import Accas +treeitem = BLOCTreeItem +objet = Accas.MCBLOC diff --git a/InterfaceQT4/compocomm.py b/InterfaceQT4/compocomm.py new file mode 100644 index 00000000..671bc67e --- /dev/null +++ b/InterfaceQT4/compocomm.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +from PyQt4.QtGui import * +from PyQt4.QtCore import * +import string + +from Editeur import Objecttreeitem +import browser +import typeNode + + +class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel): + def getPanel( self ): + """ + """ + from monCommentairePanel import MonCommentairePanel + return MonCommentairePanel(self,parent=self.editor) + + def createPopUpMenu(self): + typeNode.PopUpMenuNodePartiel.createPopUpMenu(self) + self.Decommente = QAction('Decommenter',self.tree) + self.tree.connect(self.Decommente,SIGNAL("activated()"),self.Decommenter) + self.Decommente.setStatusTip("Decommente la commande ") + + if hasattr(self.item,'uncomment'): + self.menu.addAction(self.Decommente) + + def Decommenter(self) : + item= self.tree.currentItem() + item.unCommentIt() + + def update_node_label(self) : + """ + """ + debComm=self.item.GetText() + self.setText(1,debComm) + + +class COMMTreeItem(Objecttreeitem.ObjectTreeItem): + itemNode=Node + + def init(self): + self.setfunction = self.set_valeur + + def GetIconName(self): + """ + Retourne le nom de l'icône associée au noeud qui porte self, + dépendant de la validité de l'objet + NB : un commentaire est toujours valide ... + """ + return "ast-white-percent" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + return 'commentaire' #CS_pbruno,Fonte_Commentaire,None + + def get_valeur(self): + """ + Retourne la valeur de l'objet Commentaire cad son texte + """ + return self.object.get_valeur() or '' + + def GetText(self): + texte = self.object.valeur + texte = string.split(texte,'\n')[0] + if len(texte) < 25 : + return texte + else : + return texte[0:24] + + def set_valeur(self,valeur): + """ + Afecte valeur à l'objet COMMENTAIRE + """ + self.object.set_valeur(valeur) + + def GetSubList(self): + """ + Retourne la liste des fils de self + """ + return [] + + + def get_objet_commentarise(self): + """ + La méthode get_objet_commentarise() de la classe compocomm.COMMTreeItem + surcharge la méthode get_objet_commentarise de la classe Objecttreeitem.ObjectTreeItem + elle a pour but d'empecher l'utilisateur final de commentariser un commentaire. + """ + raise Exception( 'Impossible de commentariser un commentaire' ) + +import Extensions +treeitem =COMMTreeItem +objet = Extensions.commentaire.COMMENTAIRE diff --git a/InterfaceQT4/compocommandecomm.py b/InterfaceQT4/compocommandecomm.py new file mode 100644 index 00000000..153f2b71 --- /dev/null +++ b/InterfaceQT4/compocommandecomm.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +import traceback +import string + +from Editeur import Objecttreeitem +import compocomm + +class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem): + itemNode=compocomm.Node + + def init(self): + self.setfunction = self.set_valeur + + def GetIconName(self): + """ + Retourne le nom de l'icône associée au noeud qui porte self, + dépendant de la validité de l'objet + NB : une commande commentarisée est toujours valide ... + """ + if self.isvalid(): + return "ast-green-percent" + else: + return "ast-red-percent" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + return 'commentaire' + + def get_valeur(self): + """ + Retourne la valeur de la commande commentarisée cad son texte + """ + return self.object.get_valeur() or '' + + def GetText(self): + texte = self.object.valeur + texte = string.split(texte,'\n')[0] + if len(texte) < 25 : + return texte + else : + return texte[0:24] + + def set_valeur(self,valeur): + """ + Afefcte valeur à l'objet commande commentarisée + """ + self.object.set_valeur(valeur) + + def GetSubList(self): + """ + Retourne la liste des fils de self + """ + return [] + + def uncomment(self): + """ + Demande à l'objet commande commentarisée de se décommentariser. + Si l'opération s'effectue correctement, retourne l'objet commande + et éventuellement le nom de la sd produite, sinon lève une exception + """ + try: + commande,nom = self.object.uncomment() + #self.parent.children[pos].select() + except Exception,e: + traceback.print_exc() + raise e + return commande,nom + +import Accas +treeitem =COMMANDE_COMMTreeItem +objet = Accas.COMMANDE_COMM diff --git a/InterfaceQT4/compoerror.py b/InterfaceQT4/compoerror.py new file mode 100644 index 00000000..305039f0 --- /dev/null +++ b/InterfaceQT4/compoerror.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +from Tkinter import Label,Button + +#Modules Eficas +from Noyau.N_OBJECT import ErrorObj +from Editeur import Objecttreeitem +from desError import Ui_DError + +class ERRORTreeItem(Objecttreeitem.AtomicObjectTreeItem): + + panel = Ui_DError + def GetIconName(self): + return "ast-red-ball" + + +treeitem =ERRORTreeItem +objet = ErrorObj + diff --git a/InterfaceQT4/compofact.py b/InterfaceQT4/compofact.py new file mode 100644 index 00000000..76b81c63 --- /dev/null +++ b/InterfaceQT4/compofact.py @@ -0,0 +1,139 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * +import browser + +from Editeur import Objecttreeitem + + +class Node(browser.JDCNode): + def getPanel(self): + """ + """ + from monMCFactPanel import MonMCFactPanel + return MonMCFactPanel(self,parent=self.editor) + + def doPaste(self,node_selected): + objetACopier = self.item.get_copie_objet() + child=node_selected.doPasteMCF(objetACopier) + return child + + def doPasteMCF(self,objetACopier): + child = self.parent.append_child(objetACopier, + pos=self.item, + retour='oui') + return child + + +class FACTTreeItem(Objecttreeitem.ObjectTreeItem): + itemNode=Node + + def IsExpandable(self): + return 1 + + def GetText(self): + return '' + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + # None --> fonte et couleur par défaut + return self.object.getlabeltext(),None,None + + def isvalid(self): + return self.object.isvalid() + + def iscopiable(self): + return 1 + + def GetIconName(self): + if self.object.isvalid(): + return "ast-green-los" + elif self.object.isoblig(): + return "ast-red-los" + else: + return "ast-yel-los" + + def keys(self): + keys=self.object.mc_dict.keys() + return keys + + def GetSubList(self): + """ + Reactualise la liste des items fils stockes dans self.sublist + """ + liste=self.object.mc_liste + sublist=[None]*len(liste) + # suppression des items lies aux objets disparus + for item in self.sublist: + old_obj=item.getObject() + if old_obj in liste: + pos=liste.index(old_obj) + sublist[pos]=item + else: + pass # objets supprimes ignores + # ajout des items lies aux nouveaux objets + pos=0 + for obj in liste: + if sublist[pos] is None: + # nouvel objet : on cree un nouvel item + def setfunction(value, object=obj): + object.setval(value) + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction) + sublist[pos]=item + pos=pos+1 + + self.sublist=sublist + return self.sublist + + def additem(self,name,pos): + objet = self.object.addentite(name,pos) + return objet + + def suppitem(self,item) : + """ + Cette methode a pour fonction de supprimer l'item passee en argument + des fils de l'item FACT qui est son pere + - item = item du MOCLE a supprimer du MOCLE pere + - item.getObject() = MCSIMP ou MCBLOC + """ + itemobject=item.getObject() + if itemobject.isoblig() : + self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ') + return 0 + + if self.object.suppentite(itemobject): + message = "Mot-clé " + itemobject.nom + " supprimé" + self.appli.affiche_infos(message) + return 1 + else: + self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé') + return 0 + +import Accas +objet = Accas.MCFACT +treeitem = FACTTreeItem diff --git a/InterfaceQT4/compoformule.py b/InterfaceQT4/compoformule.py new file mode 100644 index 00000000..43ae257a --- /dev/null +++ b/InterfaceQT4/compoformule.py @@ -0,0 +1,179 @@ +# -*- coding: utf-8 -*- + +""" +Ce module contient les classes permettant de définir les objets graphiques +représentant un objet de type FORMULE, cad le panneau et l'item de l'arbre +d'EFICAS +""" + +import string +import compooper +import browser +import typeNode + + +class FormuleNode(browser.JDCNode,typeNode.PopUpMenuNode): + + def getPanel(self): + + from monFormulePanel import MonFormulePanel + return MonFormulePanel(self,parent=self.editor) + + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + + +class FORMULETreeItem(compooper.EtapeTreeItem): + """ + Classe servant a définir l'item porté par le noeud de l'arbre d'EFICAS + qui représente la FORMULE + """ + itemNode=FormuleNode + + def init(self): + self.setfunction = self.set_valeur + +# --------------------------------------------------------------------------- +# API de FORMULE pour l'arbre +# --------------------------------------------------------------------------- + def GetSubList(self): + """ + Retourne la liste des fils de self + On considére que FORMULE n'a pas de fils + --> modification par rapport a MACRO classique + """ + # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE + # de façon traditionnelle + return [] + + def GetIconName(self): + """ + Retourne le nom de l'icone à afficher dans l'arbre + Ce nom dépend de la validité de l'objet + """ + if self.object.isactif(): + self.object.state="modified" + if self.object.isvalid(): + return "ast-green-square" + else: + return "ast-red-square" + else: + return "ast-white-text" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte a afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + if self.object.isactif(): + # None --> fonte et couleur par défaut + return self.labeltext,None,None + else: + return self.labeltext,None,None + #return self.labeltext,fontes.standard_italique,None + +# --------------------------------------------------------------------------- +# Méthodes permettant la modification et la lecture des attributs +# du paramètre = API graphique de la FORMULE pour Panel et EFICAS +# --------------------------------------------------------------------------- + + def get_nom(self): + """ + Retourne le nom de la FORMULE + """ + return self.object.get_nom() + + def get_type(self): + """ + Retourne le type de la valeur retournée par la FORMULE + """ + return self.object.type_retourne + + def get_args(self): + """ + Retourne les arguments de la FORMULE + """ + args="" + for mot in self.object.mc_liste: + if mot.nom == 'NOM_PARA': + args=mot.valeur + break + if args : + if args[0] == "(" and args[-1] ==")": + args=args[1:-1] + # transforme en tuple si ce n est pas déja le casa + try : + args=string.split(args,',') + except : + pass + return args + + def get_corps(self): + """ + Retourne le corps de la FORMULE + """ + corps="" + for mot in self.object.mc_liste: + if mot.nom == 'VALE': + corps=mot.valeur + break + return corps + + + def get_liste_types_autorises(self): + """ + Retourne la liste des types autorises pour les valeurs de sortie + d'une FORMULE + """ + return self.object.l_types_autorises + + def save_formule(self,new_nom,new_typ,new_arg,new_exp): + """ + Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE + licite : + - si oui, stocke ces paramètres comme nouveaux paramètres de la + FORMULE courante et retourne 1 + - si non, laisse les paramètres anciens de la FORMULE inchangés et + retourne 0 + """ + test,erreur = self.object.verif_formule_python(formule=(new_nom,new_typ,new_arg, + new_exp)) + if test : + # la formule est bien correcte : on sauve les nouveaux paramètres + test=self.object.update_formule_python(formule=(new_nom,new_typ,new_exp,new_arg)) + return test,erreur + +# --------------------------------------------------------------------------- +# Accès aux méthodes de vérification de l'objet FORM_ETAPE +# --------------------------------------------------------------------------- + + def verif_nom(self,nom): + """ + Lance la vérification du nom passé en argument + """ + return self.object.verif_nom(nom) + + def verif_arguments(self,arguments): + """ + Lance la vérification des arguments passés en argument + """ + return self.object.verif_arguments('('+arguments+')') + + def verif_formule(self,formule): + """ + Lance la vérification de FORMULE passée en argument + """ + return self.object.verif_formule(formule=formule) + + + def verif_formule_python(self,formule): + """ + Lance la vérification de FORMULE passée en argument + """ + return self.object.verif_formule_python(formule=formule) + +import Accas +treeitem =FORMULETreeItem +objet = Accas.FORM_ETAPE diff --git a/InterfaceQT4/compojdc.py b/InterfaceQT4/compojdc.py new file mode 100644 index 00000000..b99bf3c5 --- /dev/null +++ b/InterfaceQT4/compojdc.py @@ -0,0 +1,115 @@ +# -*- coding: utf-8 -*- + +from Editeur import Objecttreeitem +import browser + + +class Node(browser.JDCNode): + def getPanel(self): + """ + """ + from monRacinePanel import MonRacinePanel + return MonRacinePanel(self,parent=self.editor) + + def doPasteCommande(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument qui est nécessairement + une commande + """ + child = self.append_child(objet_a_copier,pos='first',retour='oui') + return child + + +class JDCTreeItem(Objecttreeitem.ObjectTreeItem): + itemNode=Node + + def IsExpandable(self): + return 1 + + def GetText(self): + return " " + + def GetLabelText(self): + # None --> fonte et couleur par défaut + return self.object.nom,None,None + + def get_jdc(self): + """ + Retourne l'objet pointé par self + """ + return self.object + + def GetIconName(self): + if self.object.isvalid(): + return "ast-green-square" + else: + return "ast-red-square" + + def keys(self): + if self.object.etapes_niveaux != []: + return range(len(self.object.etapes_niveaux)) + else: + return range(len(self.object.etapes)) + + def additem(self,name,pos): + cmd = self._object.addentite(name,pos) + return cmd + + def suppitem(self,item) : + # item = item de l'ETAPE à supprimer du JDC + # item.getObject() = ETAPE ou COMMENTAIRE + # self.object = JDC + + itemobject=item.getObject() + if self.object.suppentite(itemobject): + if itemobject.nature == "COMMENTAIRE" : + message = "Commentaire supprimé" + else : + message = "Commande " + itemobject.nom + " supprimée" + self.appli.affiche_infos(message) + return 1 + else: + self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet") + return 0 + + def GetSubList(self): + """ + Retourne la liste des items fils de l'item jdc. + Cette liste est conservee et mise a jour a chaque appel + """ + if self.object.etapes_niveaux != []: + liste = self.object.etapes_niveaux + else: + liste = self.object.etapes + sublist=[None]*len(liste) + # suppression des items lies aux objets disparus + for item in self.sublist: + old_obj=item.getObject() + if old_obj in liste: + pos=liste.index(old_obj) + sublist[pos]=item + else: + pass # objets supprimes ignores + # ajout des items lies aux nouveaux objets + pos=0 + for obj in liste: + if sublist[pos] is None: + # nouvel objet : on cree un nouvel item + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj) + sublist[pos]=item + pos=pos+1 + + self.sublist=sublist + return self.sublist + + def get_l_noms_etapes(self): + """ Retourne la liste des noms des étapes de self.object""" + return self.object.get_l_noms_etapes() + + def get_liste_cmd(self): + listeCmd = self.object.niveau.definition.get_liste_cmd() + return listeCmd + +import Accas +treeitem =JDCTreeItem +objet = Accas.JDC diff --git a/InterfaceQT4/compomacro.py b/InterfaceQT4/compomacro.py new file mode 100644 index 00000000..1afafa5d --- /dev/null +++ b/InterfaceQT4/compomacro.py @@ -0,0 +1,153 @@ +# -*- coding: utf-8 -*- + +# Modules Python +import os,sys,string +import types +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import compooper +import browser +import typeNode + + +class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode): + def getPanel(self): + from monMacroPanel import MonMacroPanel + return MonMacroPanel (self,parent=self.editor ) + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + + +class MACROTreeItem(compooper.EtapeTreeItem): +# """ Cette classe hérite d'une grande partie des comportements +# de la classe compooper.EtapeTreeItem +# """ + itemNode=MACRONode + +# ------------------------------------ +# Classes necessaires à INCLUDE +# ------------------------------------ + +class INCLUDETreeItemBase(MACROTreeItem): + + def __init__(self,appli, labeltext, object, setfunction): + MACROTreeItem.__init__(self,appli, labeltext, object, setfunction) + + def iscopiable(self): + return 0 + + +class INCLUDENode(browser.JDCNode,typeNode.PopUpMenuNode): + def getPanel(self): + from monIncludePanel import MonIncludePanel + return MonIncludePanel (self,parent=self.editor ) + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + #self.menu.insertItem( qApp.translate('Browser','Edit'), self.makeEdit ) + + def makeEdit(self): #,appli,node + if self.item.object.text_converted == 0: + # Le texte du fichier inclus n'a pas pu etre converti par le module convert + msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n" + msg=msg+self.item.object.text_error + return + + if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None: + #L'include n'est pas initialise + self.item.object.build_include(None,"") + + # On cree un nouvel onglet dans le bureau + self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom ) + + +class INCLUDETreeItem(INCLUDETreeItemBase): + itemNode=INCLUDENode + + +# ------------------------------------ +# Classes necessaires à POURSUITE +# ------------------------------------ + +class POURSUITENode(browser.JDCNode, typeNode.PopUpMenuNode): + def getPanel(self): + from monPoursuitePanel import MonPoursuitePanel + return MonPoursuitePanel (self,parent=self.editor ) + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + self.menu.insertItem( qApp.translate('Browser','Edit'), self.makeEdit ) + + def makeEdit(self): #,appli,node + if self.item.object.text_converted == 0: + msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n" + msg=msg+self.item.object.text_error + return + + if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None: + text="""DEBUT() + FIN()""" + self.object.build_poursuite(None,text) + + # On cree un nouvel onglet dans le bureau + self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom) + +class POURSUITETreeItem(INCLUDETreeItemBase): + itemNode=POURSUITENode + + +# ---------------------------------------- +# Classes necessaires à INCLUDE MATERIAU +# ---------------------------------------- + + +class MATERIAUNode(MACRONode): + + def getPanel(self): + from monMacroPanel import MonMacroPanel + return MonMacroPanel (self,parent=self.editor ) + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + self.menu.insertItem( qApp.translate('Browser','View'), self.makeView ) + + def makeView(self) : + if hasattr(self.item.object,'fichier_ini') and self.item.object.fichier_ini==None: + QMessageBox.information( self, "Include vide","L'include doit etre correctement initialisé pour etre visualisé") + return + f = open(self.item.object.fichier_ini, "rb") + texte = f.read() + f.close() + from desVisu import DVisu + monVisu=DVisu(parent=self.editor,fl=Qt.WType_Dialog) + monVisu.TB.setText(texte) + monVisu.show() + +class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase): + itemNode=MATERIAUNode + +# ------------------------------------ +# TreeItem +# ------------------------------------ + + +def treeitem(appli, labeltext, object, setfunction=None): + """ Factory qui retourne l'item adapte au type de macro : + INCLUDE, POURSUITE, MACRO + """ + if object.nom == "INCLUDE_MATERIAU": + return INCLUDE_MATERIAUTreeItem(appli, labeltext, object, setfunction) + elif object.nom == "INCLUDE": + return INCLUDETreeItem(appli, labeltext, object, setfunction) + elif object.nom == "POURSUITE": + return POURSUITETreeItem(appli, labeltext, object, setfunction) + else: + return MACROTreeItem(appli, labeltext, object, setfunction) + +import Accas +objet=Accas.MACRO_ETAPE + + diff --git a/InterfaceQT4/compomclist.py b/InterfaceQT4/compomclist.py new file mode 100644 index 00000000..04a79132 --- /dev/null +++ b/InterfaceQT4/compomclist.py @@ -0,0 +1,203 @@ +# -*- coding: utf-8 -*- + +import types +import traceback + +import compofact +import browser +from Editeur import Objecttreeitem +from Noyau.N_OBJECT import ErrorObj +#import compoerror + + +class Node(browser.JDCNode): + def getPanel(self): + """ + """ + if self.item.isMCList() : + if self.item.ajout_possible(): + from monMCListAjoutPanel import MonMCListAjoutPanel + return MonMCListAjoutPanel(self,parent=self.editor) + else : + print "MCList" + elif self.item.isMCFact() : + from monMCFactPanel import MonMCFactPanel + return MonMCFactPanel(self,parent=self.editor) + else : + print "MCList" + + def doPaste(self,node_selected): + objet_a_copier = self.item.get_copie_objet() + child=node_selected.doPasteMCF(objet_a_copier) + #print "doPaste",child + return child + + def doPasteMCF(self,objet_a_copier): + child=None + # le noeud courant est une MCList + if self.item.isMCList() : + child = self.append_child(objet_a_copier,pos='first',retour='oui') + + # le noeud courant est un MCFACT + elif self.item.isMCFact() : + # le noeud selectionne est un MCFACT dans une MCList + if self.parent.item.isMCList(): + child = self.parent.append_child(objet_a_copier, + pos=self.item, + retour='oui') + + # le noeud MCFACT selectionne n'est pas dans une MCList + else: + child = self.parent.append_child(objet_a_copier,retour='oui') + + else: + QMessageBox.information( self, "Copie impossible", + "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !") + self.editor.affiche_infos("Copie refusée") + + return child + +class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem): + """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets + du noyau Accas instances de la classe MCLIST. + Elle adapte ces objets pour leur permettre d'etre intégrés en tant que + noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py). + Cette classe délègue les appels de méthode et les accès + aux attributs à l'objet du noyau soit manuellement soit + automatiquement (voir classe Delegate et attribut object). + """ + itemNode=Node + + def init(self): + # Si l'objet Accas (MCList) a moins d'un mot cle facteur + # on utilise directement ce mot cle facteur comme delegue + self.updateDelegate() + + def updateDelegate(self): + if len(self._object) > 1: + self.setdelegate(self._object) + else: + self.setdelegate(self._object.data[0]) + + def panel(self,jdcdisplay,pane,node): + """ Retourne une instance de l'objet panneau associe a l'item (self) + Si la liste ne contient qu'un mot clé facteur, on utilise le panneau + FACTPanel. + Si la liste est plus longue on utilise le panneau MCLISTPanel. + """ + if len(self._object) > 1: + return MCLISTPanel(jdcdisplay,pane,node) + elif isinstance(self._object.data[0],ErrorObj): + return compoerror.ERRORPanel(jdcdisplay,pane,node) + else: + return compofact.FACTPanel(jdcdisplay,pane,node) + + def IsExpandable(self): + if len(self._object) > 1: + return Objecttreeitem.SequenceTreeItem.IsExpandable(self) + else: + return compofact.FACTTreeItem.IsExpandable(self) + + def GetSubList(self): + self.updateDelegate() + if len(self._object) <= 1: + self._object.data[0].alt_parent=self._object + return compofact.FACTTreeItem.GetSubList(self) + + liste=self._object.data + sublist=[None]*len(liste) + # suppression des items lies aux objets disparus + for item in self.sublist: + old_obj=item.getObject() + if old_obj in liste: + pos=liste.index(old_obj) + sublist[pos]=item + else: + pass # objets supprimes ignores + # ajout des items lies aux nouveaux objets + pos=0 + for obj in liste: + if sublist[pos] is None: + # nouvel objet : on cree un nouvel item + def setfunction(value, object=obj): + object=value + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction) + sublist[pos]=item + #Attention : on ajoute une information supplementaire pour l'actualisation de + # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE + # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des + # informations de validite. alt_parent permet de remedier a ce defaut. + obj.alt_parent=self._object + pos=pos+1 + + self.sublist=sublist + return self.sublist + + def GetIconName(self): + if self._object.isvalid(): + return "ast-green-los" + elif self._object.isoblig(): + return "ast-red-los" + else: + return "ast-yel-los" + + def get_docu(self): + """ Retourne la clef de doc de l'objet pointé par self """ + return self.object.get_docu() + + def iscopiable(self): + if len(self._object) > 1: + return Objecttreeitem.SequenceTreeItem.iscopiable(self) + else: + return compofact.FACTTreeItem.iscopiable(self) + + def isMCFact(self): + """ + Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon + """ + return len(self._object) <= 1 + + def isMCList(self): + """ + Retourne 1 si l'objet pointé par self est une MCList, 0 sinon + """ + return len(self._object) > 1 + + def get_copie_objet(self): + return self._object.data[0].copy() + + def additem(self,obj,pos): + #print "compomclist.additem",obj,pos + if len(self._object) <= 1: + return compofact.FACTTreeItem.additem(self,obj,pos) + + o= self.object.addentite(obj,pos) + return o + + def suppitem(self,item): + """ + Retire un objet MCFACT de la MCList (self.object) + """ + #print "compomclist.suppitem",item + obj=item.getObject() + if len(self._object) <= 1: + return compofact.FACTTreeItem.suppitem(self,item) + + if self.object.suppentite(obj): + if len(self._object) == 1: self.updateDelegate() + message = "Mot-clef " + obj.nom + " supprimé" + self.appli.affiche_infos(message) + return 1 + else: + self.appli.affiche_infos('Impossible de supprimer ce mot-clef') + return 0 + + +import Accas +objet = Accas.MCList + +def treeitem(appli,labeltext,object,setfunction): + """ Factory qui produit un objet treeitem adapte a un objet + Accas.MCList (attribut objet de ce module) + """ + return MCListTreeItem(appli,labeltext,object,setfunction) diff --git a/InterfaceQT4/componiveau.py b/InterfaceQT4/componiveau.py new file mode 100644 index 00000000..02743c71 --- /dev/null +++ b/InterfaceQT4/componiveau.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- + +from Editeur import Objecttreeitem +from Extensions import commentaire +import browser + +class Node(browser.JDCNode): + pass + +class NIVEAUTreeItem(Objecttreeitem.ObjectTreeItem): + itemNode=Node + + def isactif(self): + return self.object.isactif() + + def IsExpandable(self): + return 1 + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + if self.isactif(): + fonte = Fonte_Niveau + else : + fonte = Fonte_Niveau_inactif + return self.labeltext,fonte,'#00008b' + + def GetIconName(self): + if self.isactif(): + if self.object.isvalid(): + return "ast-green-text" + else: + return "ast-red-text" + else: + return "ast-white-text" + + def keys(self): + if self.object.etapes_niveaux != []: + return range(len(self.object.etapes_niveaux)) + else: + return range(len(self.object.etapes)) + + def GetSubList(self): + sublist=[] + for key in self.keys(): + if self.object.etapes_niveaux != []: + liste = self.object.etapes_niveaux + else: + liste = self.object.etapes + try: + value = liste[key] + except KeyError: + continue + def setfunction(value, key=key, object=liste): + object[key] = value + item =self.make_objecttreeitem(self.appli,value.ident() + " : ", value, setfunction) + sublist.append(item) + return sublist + + def additem(self,name,pos): + if isinstance(name,Objecttreeitem.TreeItem) : + cmd=self.object.addentite(name.getObject(),pos) + else : + cmd = self.object.addentite(name,pos) + item = self.make_objecttreeitem(self.appli,cmd.nom + " : ", cmd) + return item + + def suppitem(self,item) : + # item = item de l'ETAPE à supprimer du JDC + # item.getObject() = ETAPE ou COMMENTAIRE + # self.object = JDC + itemobject=item.getObject() + if self.object.suppentite(itemobject): + if isinstance(item.object,commentaire.COMMENTAIRE): + message = "Commentaire supprimé" + else : + message = "Commande " + itemobject.nom + " supprimée" + self.appli.affiche_infos(message) + return 1 + else: + self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet") + return 0 + + def GetText(self): + return '' + + +import Accas +treeitem = NIVEAUTreeItem +objet = Accas.ETAPE_NIVEAU diff --git a/InterfaceQT4/componuplet.py b/InterfaceQT4/componuplet.py new file mode 100644 index 00000000..d9c610c1 --- /dev/null +++ b/InterfaceQT4/componuplet.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import types +from repr import Repr +from copy import copy,deepcopy + +# Modules Eficas +from Editeur import Objecttreeitem + +myrepr = Repr() +myrepr.maxstring = 100 +myrepr.maxother = 100 + +# Si Expandable vaut 1 les éléments du nuplet apparaissent dans l'arbre +# Si Expandable vaut 0 les éléments n'apparaissent pas +Expandable=1 + + +import browser + +class Node(browser.JDCNode): pass + + +class NUPLETTreeItem(Objecttreeitem.ObjectTreeItem): + itemNode=Node + + def IsExpandable(self): + return Expandable + + def GetText(self): + return '' + + def isvalid(self): + return self.object.isvalid() + + def GetIconName(self): + if self.object.isvalid(): + return "ast-green-los" + elif self.object.isoblig(): + return "ast-red-los" + else: + return "ast-yel-los" + + def GetSubList(self): + if not Expandable:return [] + sublist=[] + for obj in self.object.mc_liste: + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, None) + sublist.append(item) + return sublist + + def additem(self,name,pos): + raise "NUPLET" + + def suppitem(self,item) : + raise "NUPLET" + +import Accas +treeitem=NUPLETTreeItem +objet=Accas.MCNUPLET diff --git a/InterfaceQT4/compooper.py b/InterfaceQT4/compooper.py new file mode 100644 index 00000000..66bd646f --- /dev/null +++ b/InterfaceQT4/compooper.py @@ -0,0 +1,261 @@ +# -*- coding: utf-8 -*- +import traceback +import string +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * + + +from Editeur import Objecttreeitem +import browser +import typeNode + +class Node(browser.JDCNode, typeNode.PopUpMenuNode): + def getPanel( self ): + """ + """ + from monCommandePanel import MonCommandePanel + return MonCommandePanel(self,parent=self.editor) + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + if ("AFFE_CARA_ELEM" in self.item.get_genealogie()) and self.editor.salome: + self.menu.insertItem( 'View3D', self.view3D ) + + def doPaste(self,node_selected): + """ + Déclenche la copie de l'objet item avec pour cible + l'objet passé en argument : node_selected + """ + objet_a_copier = self.item.get_copie_objet() + child=node_selected.doPasteCommande(objet_a_copier) + return child + + def doPasteCommande(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument qui est nécessairement + une commande + """ + parent=self.parent + #child = parent.item.append_child(objet_a_copier,self.item.getObject()) + child = self.append_brother(objet_a_copier) + #if child is None:return 0 + return child + + def doPasteMCF(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument (objet_a_copier) + Il s'agit forcément d'un mot clé facteur + """ + child = self.append_child(objet_a_copier,pos='first',retour='oui') + return child + + def view3D(self) : + import TroisDPal + troisD=TroisDPal.TroisDPilote(self.item,self.editor.parent.appliEficas) + troisD.envoievisu() + + +class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): + """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau + Accas. Elle leur permet d'etre affichés comme des noeuds + d'un arbre graphique. + Cette classe a entre autres deux attributs importants : + - _object qui est un pointeur vers l'objet du noyau + - object qui pointe vers l'objet auquel sont délégués les + appels de méthode et les acces aux attributs + Dans le cas d'une ETAPE, _object et object pointent vers le + meme objet. + """ + itemNode=Node + + def IsExpandable(self): + return 1 + + def GetIconName(self): + """ + Retourne le nom de l'icone a afficher dans l'arbre + Ce nom dépend de la validité de l'objet + """ + if not self.object.isactif(): + return "ast-white-square" + elif self.object.isvalid(): + return "ast-green-square" + else: + valid=self.valid_child() + valid=valid * self.valid_regles("non") + if self.reste_val != {}: + valid=0 + if valid==0 : + return "ast-red-square" + else : + try : + # on traite ici le cas d include materiau + # print self.object.definition.nom + if self.object.fichier_ini != self.object.nom_mater : + return "ast-red-square" + except : + pass + return "ast-yellow-square" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte a afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + if self.object.isactif(): + # None --> fonte et couleur par défaut + return self.labeltext,None,None + else: + return self.labeltext, None, None #CS_pbruno todo + + def get_objet(self,name) : + for v in self.object.mc_liste: + if v.nom == name : return v + return None + + def get_type_sd_prod(self): + """ + Retourne le nom du type du concept résultat de l'étape + """ + sd_prod=self.object.get_type_produit() + if sd_prod: + return sd_prod.__name__ + else: + return "" + + def additem(self,name,pos): + mcent = self._object.addentite(name,pos) + return mcent + + + def suppitem(self,item) : + # item : item du MOCLE de l'ETAPE a supprimer + # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList + itemobject=item.getObject() + if itemobject.isoblig() : + self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ') + return 0 + if self.object.suppentite(itemobject): + message = "Mot-clé " + itemobject.nom + " supprimé" + self.appli.affiche_infos(message) + return 1 + else : + self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé') + return 0 + + def GetText(self): + try: + return self.object.get_sdname() + except: + return '' + + def keys(self): + keys=self.object.mc_dict.keys() + return keys + + def GetSubList(self): + """ + Reactualise la liste des items fils stockes dans self.sublist + """ + if self.isactif(): + liste=self.object.mc_liste + else: + liste=[] + + sublist=[None]*len(liste) + # suppression des items lies aux objets disparus + for item in self.sublist: + old_obj=item.getObject() + if old_obj in liste: + pos=liste.index(old_obj) + sublist[pos]=item + else: + pass # objets supprimes ignores + + # ajout des items lies aux nouveaux objets + pos=0 + for obj in liste: + if sublist[pos] is None: + # nouvel objet : on cree un nouvel item + def setfunction(value, object=obj): + object.setval(value) + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction) + sublist[pos]=item + pos=pos+1 + + self.sublist=sublist + return self.sublist + + def isvalid(self): + return self.object.isvalid() + + def iscopiable(self): + """ + Retourne 1 si l'objet est copiable, 0 sinon + """ + return 1 + + def update(self,item): + if item.sd and item.sd.nom: + self.nomme_sd(item.sd.nom) + + def nomme_sd(self,nom): + """ Lance la méthode de nommage de la SD """ + oldnom="" + if self.object.sd != None : + oldnom=self.object.sd.nom + test,mess= self.object.nomme_sd(nom) + if test:self.object.parent.reset_context() + if (test and self.appli.dict_reels.has_key(oldnom) ): + self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom] + return test,mess + + def is_reentrant(self): + return self.object.is_reentrant() + + def get_noms_sd_oper_reentrant(self): + return self.object.get_noms_sd_oper_reentrant() + + def get_objet_commentarise(self): + """ + Cette méthode retourne un objet commentarisé + représentatif de self.object + """ + # Format de fichier utilisé + format=self.appli.format_fichier + return self.object.get_objet_commentarise(format) + + def get_objet_commentarise_BAK(self): + """ + Cette méthode retourne un objet commentarisé + représentatif de self.object + """ + import generator,string,Accas + # Format de fichier utilisé + format=self.appli.format_fichier + g=generator.plugins[format]() + texte_commande = g.gener(self.object,format='beautifie') + # Il faut enlever la premiere ligne vide de texte_commande que + # rajoute le generator + rebut,texte_commande = string.split(texte_commande,'\n',1) + # on construit l'objet COMMANDE_COMM repésentatif de self mais non + # enregistré dans le jdc + commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non', + parent=self.object.parent) + commande_comment.niveau = self.object.niveau + commande_comment.jdc = commande_comment.parent = self.object.jdc + + pos=self.object.parent.etapes.index(self.object) + parent=self.object.parent + self.object.parent.suppentite(self.object) + parent.addentite(commande_comment,pos) + + return commande_comment + + +import Accas +treeitem = EtapeTreeItem +objet = Accas.ETAPE + diff --git a/InterfaceQT4/compoparam.py b/InterfaceQT4/compoparam.py new file mode 100644 index 00000000..b21ae803 --- /dev/null +++ b/InterfaceQT4/compoparam.py @@ -0,0 +1,122 @@ +# -*- coding: utf-8 -*- +""" + Ce module contient les classes permettant de définir les objets graphiques + représentant un objet de type PARAMETRE, cad le panneau et l'item de l'arbre + d'EFICAS +""" + +# import modules Python +import string + +# import modules EFICAS +from Editeur import Objecttreeitem +import browser +import typeNode + + +class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel): + def getPanel(self): + """ + """ + from monParamPanel import MonParamPanel + return MonParamPanel(self, parent=self.editor ) + + def createPopUpMenu(self): + typeNode.PopUpMenuNodePartiel.createPopUpMenu(self) + + + +class PARAMTreeItem(Objecttreeitem.ObjectTreeItem): + """ + Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS + qui représente le PARAMETRE + """ + itemNode=Node + + def init(self): + self.setfunction = self.set_valeur + +# --------------------------------------------------------------------------- +# API du PARAMETRE pour l'arbre +# --------------------------------------------------------------------------- + + def GetIconName(self): + """ + Retourne le nom de l'icone associée au noeud qui porte self, + dépendant de la validité de l'objet + NB : un PARAMETRE est toujours valide ... + """ + if self.isactif(): + if self.isvalid(): + return "ast-green-square" + else: + return "ast-red-square" + else: + return "ast-white-square" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + return 'PARAMETRE',None,None + + def GetText(self): + """ + Retourne le texte à afficher aprês le nom de la commande (ici apres 'paramêtre') + Ce texte est tronqué à 25 caractêres + """ + texte=self.object.nom+"="+str(self.object.valeur) + texte = string.split(texte,'\n')[0] + if len(texte) < 25 : + return texte + else : + return texte[0:24]+'...' + + def GetSubList(self): + """ + Retourne la liste des fils de self + """ + return [] + +# --------------------------------------------------------------------------- +# Méthodes permettant la modification et la lecture des attributs +# du paramêtre = API graphique du PARAMETRE pour Panel et EFICAS +# --------------------------------------------------------------------------- + + def get_valeur(self): + """ + Retourne la valeur de l'objet PARAMETRE cad son texte + """ + if self.object.valeur is None: return '' + else: return self.object.valeur + + def get_nom(self): + """ + Retourne le nom du paramêtre + """ + return self.object.nom + + def set_valeur(self,new_valeur): + """ + Affecte valeur à l'objet PARAMETRE + """ + self.object.set_valeur(new_valeur) + + def set_nom(self,new_nom): + """ + Renomme le paramêtre + """ + self.object.set_nom(new_nom) + #self.object.set_attribut('nom',new_nom) + + def get_fr(self): + """ + Retourne le fr associé au paramêtre, cad la bulle d'aide pour EFICAS + """ + return "Définition d'un paramêtre" + +import Extensions.parametre +treeitem =PARAMTreeItem +objet = Extensions.parametre.PARAMETRE diff --git a/InterfaceQT4/compoproc.py b/InterfaceQT4/compoproc.py new file mode 100644 index 00000000..0a1adcaf --- /dev/null +++ b/InterfaceQT4/compoproc.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +from Editeur import Objecttreeitem +import compooper +import browser +import typeNode + + +class Node(browser.JDCNode,typeNode.PopUpMenuNode): + def getPanel(self): + from monMacroPanel import MonMacroPanel + return MonMacroPanel(self,parent=self.editor) + + def createPopUpMenu(self): + typeNode.PopUpMenuNode.createPopUpMenu(self) + + +class ProcEtapeTreeItem(compooper.EtapeTreeItem): + itemNode=Node + +import Accas +treeitem = ProcEtapeTreeItem +objet = Accas.PROC_ETAPE + diff --git a/InterfaceQT4/composimp.py b/InterfaceQT4/composimp.py new file mode 100644 index 00000000..2d7364fd --- /dev/null +++ b/InterfaceQT4/composimp.py @@ -0,0 +1,604 @@ +# -*- coding: utf-8 -*- +# Modules Python +import string,types,os + +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import browser +from Noyau.N_CR import justify_text + +import prefs + +class Node(browser.JDCNode): + def getPanel(self): + """ + """ + klass = None + + # Attention l ordre des if est important + if self.item.wait_shell(): + # l'objet attend un shell + # a priori jamais + print "Pb : Panneau Shell attendu" + print "Pb : Prevenir la maintenance" + klass = None #CS_pbruno todo + return None + + # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs + if self.item.has_into(): + if self.item.is_list() : + from monPlusieursIntoPanel import MonPlusieursIntoPanel + klass = MonPlusieursIntoPanel + else: + from monUniqueIntoPanel import MonUniqueIntoPanel + klass = MonUniqueIntoPanel + + # l'objet prend une ou des valeurs a priori quelconques + else: + # on attend une liste de valeurs + if self.item.is_list() : + # on attend une liste de SD + if self.item.wait_assd(): + from monPlusieursASSDPanel import MonPlusieursASSDPanel + klass = MonPlusieursASSDPanel + else: + # on attend une liste de valeurs de types debase (entiers, réels,...) + from monPlusieursBasePanel import MonPlusieursBasePanel + klass = MonPlusieursBasePanel + # on n'attend qu'une seule valeur + else: + # on attend une SD ou un objet de la classe CO (qui n'existe pas encore) + if self.item.wait_co(): + if len(self.item.get_sd_avant_du_bon_type()) != 0 : + from monUniqueSDCOIntoPanel import MonUniqueSDCOIntoPanel + klass = MonUniqueSDCOIntoPanel + else : + from monUniqueSDCOPanel import MonUniqueSDCOPanel + klass = MonUniqueSDCOPanel + + # on attend une SD + elif self.item.wait_assd(): + if 'R' in self.item.GetType(): + from monUniqueASSDPanel import MonUniqueASSDReelPanel + klass = MonUniqueASSDReelPanel + else : + from monUniqueASSDPanel import MonUniqueASSDPanel + klass = MonUniqueASSDPanel + + # on attend une valeur d'un type de base (entier,reel,...) + else: + # on attend un complexe + if self.item.wait_complex(): + from monUniqueCompPanel import MonUniqueCompPanel + klass = MonUniqueCompPanel + else: + # on attend un entier, un réel ou une string + from monUniqueBasePanel import MonUniqueBasePanel + klass = MonUniqueBasePanel + + # cas particulier des fonctions + genea = self.item.get_genealogie() + if "VALE" in genea or "VALE_C" in genea: + if "DEFI_FONCTION" in genea : + from monFonctionPanel import MonFonctionPanel + klass = MonFonctionPanel + + if not klass: + return None + return klass( self, self.editor ) + + + +class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): + itemNode=Node + + def init(self) : + self.expandable = 0 + + + #----------------------------------------------- + # + # Methodes liees aux informations sur le Panel + # ou au mot-clef simple + # + #----------------------------------------------- + # is_list + # get_into a priori inutile --> commentee + # has_into + # wait_into a priori inutile --> commentee + # GetMinMax + # GetMultiplicite + # GetIntervalle + # GetListeValeurs + # get_liste_possible + + def is_list(self): + """ + Cette méthode indique si le mot cle simple attend une liste (valeur de retour 1) + ou s'il n'en attend pas (valeur de retour 0) + + Deux cas principaux peuvent se presenter : avec validateurs ou bien sans. + Dans le cas sans validateur, l'information est donnée par l'attribut max + de la definition du mot cle. + Dans le cas avec validateur, il faut combiner l'information précédente avec + celle issue de l'appel de la méthode is_list sur le validateur.On utilisera + l'operateur ET pour effectuer cette combinaison (AndVal). + """ + is_a_list=0 + min,max = self.GetMinMax() + assert (min <= max) + if max > 1 : + is_a_list=1 + # Dans le cas avec validateurs, pour que le mot cle soit considéré + # comme acceptant une liste, il faut que max soit supérieur a 1 + # ET que la méthode is_list du validateur retourne 1. Dans les autres cas + # on retournera 0 (n'attend pas de liste) + if self.definition.validators : + is_a_list= self.definition.validators.is_list() * is_a_list + return is_a_list + + #def get_into(self,liste_courante=None): + # """ + # Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose + # pas de liste de choix, la méthode retourne None. + # L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déja + # effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix + # en en tenant compte. + # Cette méthode part du principe que la relation entre into du mot clé et les validateurs est + # une relation de type ET (AndVal). + # """ + # if not self.object.definition.validators : + # return self.object.definition.into + # else: + # return self.object.definition.validators.get_into(liste_courante,self.definition.into) + + def has_into(self): + """ + Cette méthode indique si le mot cle simple propose un choix (valeur de retour 1) + ou s'il n'en propose pas (valeur de retour 0) + + Deux cas principaux peuvent se presenter : avec validateurs ou bien sans. + Dans le cas sans validateur, l'information est donnée par l'attribut into + de la definition du mot cle. + Dans le cas avec validateurs, pour que le mot cle soit considéré + comme proposant un choix, il faut que into soit présent OU + que la méthode has_into du validateur retourne 1. Dans les autres cas + on retournera 0 (ne propose pas de choix) + """ + has_an_into=0 + if self.definition.into: + has_an_into=1 + elif self.definition.validators : + has_an_into= self.definition.validators.has_into() + return has_an_into + + + def GetMinMax(self): + """ Retourne les valeurs min et max de la définition de object """ + return self.object.get_min_max() + + def GetMultiplicite(self): + """ A préciser. + Retourne la multiplicité des valeurs affectées a l'objet + représenté par l'item. Pour le moment retourne invariablement 1. + """ + return 1 + + def GetIntervalle(self): + """ + Retourne le domaine de valeur attendu par l'objet représenté + par l'item. + """ + return self.object.getintervalle() + + def GetListeValeurs(self) : + """ Retourne la liste des valeurs de object """ + valeurs=self.object.get_liste_valeurs() + try : + if "R" in self.object.definition.type: + clef=self.object.GetNomConcept() + if self.appli.dict_reels.has_key(clef): + if type(valeurs) == types.TupleType: + valeurs_reelles=[] + for val in valeurs : + if self.appli.dict_reels[clef].has_key(val) : + valeurs_reelles.append(self.appli.dict_reels[clef][val]) + else : + valeurs_reelles.append(val) + else : + if self.appli.dict_reels[clef].has_key(valeurs): + valeurs_reelles=self.appli.dict_reels[clef][valeurs] + valeurs=valeurs_reelles + except : + pass + return valeurs + + def get_liste_possible(self,listeActuelle=[]): + if hasattr(self.definition.validators,'into'): + valeurspossibles = self.definition.validators.into + else: + valeurspossibles = self.get_definition().into + + #On ne garde que les items valides + listevalideitem=[] + if type(valeurspossibles) in (types.ListType,types.TupleType) : + pass + else : + valeurspossibles=(valeurspossibles,) + for item in valeurspossibles: + encorevalide=self.valide_item(item) + if encorevalide : + listevalideitem.append(item) + + #on ne garde que les choix possibles qui passent le test de valide_liste_partielle + listevalideliste=[] + for item in listevalideitem: + encorevalide=self.valide_liste_partielle(item,listeActuelle) + if encorevalide : + listevalideliste.append(item) + return listevalideliste + + def get_liste_param_possible(self): + liste_param=[] + for param in self.object.jdc.params: + encorevalide=self.valide_item(param.valeur) + if encorevalide: + type_param=param.valeur.__class__.__name__ + for typ in self.definition.type: + if typ=='R': + liste_param.append(param) + if typ=='I' and type_param=='int': + liste_param.append(param) + if typ=='TXM' and type_param=='str': + liste_param.append(repr(param)) + if ('grma' in repr(typ)) and type_param=='str': + liste_param.append(param.nom) + return liste_param + + #-------------------------------------------------- + # + # Methodes liees a la validite des valeurs saisies + # + #--------------------------------------------------- + # valide_item + # valide_liste_partielle + # valide_liste_complete + # info_erreur_item + # info_erreur_liste + # IsInIntervalle + # isvalid + + def valide_item(self,item): + """ + La validation est réalisée directement par l'objet + """ + return self.object.valide_item(item) + + def valide_liste_partielle(self,item,listecourante): + #On protege la liste en entree en la copiant + valeur=listecourante[:] + valeur.append(item) + return self.object.valid_valeur_partielle(valeur) + + def valide_liste_complete (self,valeur): + return self.object.valid_valeur(valeur) + + def valide_val (self,valeur): + return self.object.valid_val(valeur) + + def info_erreur_item(self) : + commentaire="" + if self.definition.validators : + commentaire=self.definition.validators.info_erreur_item() + return commentaire + + def aide(self) : + commentaire="" + if self.definition.validators : + commentaire=self.definition.validators.aide() + return commentaire + + def info_erreur_liste(self) : + commentaire="" + if self.definition.validators : + commentaire=self.definition.validators.info_erreur_liste() + return commentaire + + def IsInIntervalle(self,valeur): + """ + Retourne 1 si la valeur est dans l'intervalle permis par + l'objet représenté par l'item. + """ + return self.valide_item(valeur) + + def isvalid(self): + valide=self.object.isvalid() + return valide + + #-------------------------------------------------- + # + # Autres ... + # + #--------------------------------------------------- + # GetIconName + # GetText + # set_valeur_co + # get_sd_avant_du_bon_type + # delete_valeur_co + + + def GetIconName(self): + if self.isvalid(): + return "ast-green-ball" + elif self.object.isoblig(): + return "ast-red-ball" + else: + return "ast-yel-ball" + + def GetText(self): + """ + Classe SIMPTreeItem + Retourne le texte a afficher dans l'arbre représentant la valeur de l'objet + pointé par self + """ + text= self.object.GetText() + if text == None : text="" + return text + + + def set_valeur_co(self,nom_co): + """ + Affecte au MCS pointé par self l'objet de type CO et de nom nom_co + """ + ret = self.object.set_valeur_co(nom_co) + #print "set_valeur_co",ret + return ret + + def get_sd_avant_du_bon_type(self): + """ + Retourne la liste des noms des SD présentes avant l'étape qui contient + le MCS pointé par self et du type requis par ce MCS + """ + a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type) + return a + + def get_sd_avant_du_bon_type_pour_type_de_base(self): + a=self.object.jdc.get_sd_avant_du_bon_type_pour_type_de_base(self.object.etape,"LASSD") + return a + + + + + def delete_valeur_co(self,valeur=None): + """ + Supprime la valeur du mot cle (de type CO) + il faut propager la destruction aux autres etapes + """ + if not valeur : valeur=self.object.valeur + # XXX faut il vraiment appeler del_sdprod ??? + #self.object.etape.parent.del_sdprod(valeur) + self.object.etape.parent.delete_concept(valeur) + + #----------------------------------------------- + # + # Methodes liees au type de l objet attendu + # + #----------------------------------------------- + # wait_co + # wait_geom + # wait_complex + # wait_reel + # wait_shell + # wait_assd + # GetType + + def wait_co(self): + """ + Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un objet de type ASSD qui n'existe pas encore (type CO()), + 0 sinon + """ + return self.object.wait_co() + + def wait_geom(self): + """ + Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un objet GEOM, 0 sinon + """ + return self.object.wait_geom() + + def wait_complex(self): + """ Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un complexe, 0 sinon """ + if 'C' in self.object.definition.type: + return 1 + else: + return 0 + + def wait_reel(self): + """ Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un réel, 0 sinon """ + if 'R' in self.object.definition.type: + return 1 + else: + return 0 + + def wait_shell(self): + """ Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un shell, 0 sinon """ + if 'shell' in self.object.definition.type: + return 1 + else: + return 0 + + def wait_assd(self): + """Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un objet de type ASSD ou dérivé, 0 sinon """ + return self.object.wait_assd() + + def wait_assd_or_type_base(self) : + boo=0 + if len(self.object.definition.type) > 1 : + if self.wait_reel() : + boo = 1 + if 'I' in self.object.definition.type : + boo = 1 + return boo + + + def GetType(self): + """ + Retourne le type de valeur attendu par l'objet représenté par l'item. + """ + return self.object.get_type() + + #----------------------------------------------------- + # + # Methodes liees a l evaluation de la valeur saisie + # + #----------------------------------------------------- + # eval_valeur + # eval_valeur_item + # is_CO + # traite_reel + + def eval_valeur(self,valeur): + """ Lance l'interprétation de 'valeur' (chaine de caractéres) comme valeur de self : + - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...) + - retourne 'valeur' (chaine de caractéres) sinon + """ + newvaleur=self.eval_val(valeur) + return newvaleur,1 + + def eval_valeur_BAK(self,valeur): + """ Lance l'interprétation de 'valeur' (chaine de caractéres) comme valeur + de l'objet pointé par self : + - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...) + - retourne 'valeur' (chaine de caractéres) sinon + - retourne None en cas d invalidite + - retourne invalide si 1 des objets du tuple l est + """ + validite=1 + if type(valeur) in (types.ListType,types.TupleType) : + valeurretour=[] + for item in valeur : + newvaleur,validiteitem=self.eval_valeur_item(item) + valeurretour.append(newvaleur) + if validiteitem == 0: + validite=0 + else : + valeurretour,validite= self.eval_valeur_item(valeur) + if validite == 0 : + valeurretour = None + return valeurretour,validite + + def eval_valeur_item(self,valeur): + """ Lance l'interprétation de 'valeur' qui doit ne pas etre un tuple + - va retourner la valeur de retour et la validite + selon le type de l objet attendu + - traite les reels et les parametres + """ + #print "eval_valeur_item",valeur + if valeur==None or valeur == "" : + return None,0 + validite=1 + if self.wait_reel(): + valeurinter = self.traite_reel(valeur) + if valeurinter != None : + valeurretour,validite= self.object.eval_valeur(valeurinter) + else: + valeurretour,validite= self.object.eval_valeur(valeur) + elif self.wait_geom(): + valeurretour,validite = valeur,1 + else : + valeurretour,validite= self.object.eval_valeur(valeur) + #print "eval_valeur_item",valeurretour,validite + + if validite == 0: + if type(valeur) == types.StringType and self.object.wait_TXM(): + essai_valeur="'" + valeur + "'" + valeurretour,validite= self.object.eval_valeur(essai_valeur) + + if hasattr(valeurretour,'__class__'): + #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'): + if valeurretour.__class__.__name__ in ('PARAMETRE',): + validite=1 + + #if self.wait_co(): + # CCAR : il ne faut pas essayer de creer un concept + # il faut simplement en chercher un existant ce qui a du etre fait par self.object.eval_valeur(valeur) + #try: + #valeurretour=Accas.CO(valeur) + #except: + #valeurretour=None + #validite=0 + # on est dans le cas ou on a évalué et ou on n'aurait pas du + if self.object.wait_TXM() : + if type(valeurretour) != types.StringType: + valeurretour=str(valeur) + validite=1 + return valeurretour,validite + + def is_CO(self,valeur=None): + """ + Indique si valeur est un concept produit de la macro + Cette méthode n'a de sens que pour un MCSIMP d'une MACRO + Si valeur vaut None on teste la valeur du mot cle + """ + # Pour savoir si un concept est un nouveau concept de macro + # on regarde s'il est présent dans l'attribut sdprods de l'étape + # ou si son nom de classe est CO. + # Il faut faire les 2 tests car une macro non valide peut etre + # dans un etat pas tres catholique avec des CO pas encore types + # et donc pas dans sdprods (resultat d'une exception dans type_sdprod) + if not valeur:valeur=self.object.valeur + if valeur in self.object.etape.sdprods:return 1 + if type(valeur) is not types.InstanceType:return 0 + if valeur.__class__.__name__ == 'CO':return 1 + return 0 + + def is_param(self,valeur) : + for param in self.jdc.params: + if (repr(param) == valeur): + return 1 + return 0 + + def traite_reel(self,valeur): + """ + Cette fonction a pour but de rajouter le '.' en fin de chaine pour un réel + ou de détecter si on fait référence a un concept produit par DEFI_VALEUR + ou un EVAL ... + """ + valeur = string.strip(valeur) + liste_reels = self.get_sd_avant_du_bon_type() + if valeur in liste_reels: + return valeur + if len(valeur) >= 3 : + if valeur[0:4] == 'EVAL' : + # on a trouvé un EVAL --> on retourne directement la valeur + return valeur + if string.find(valeur,'.') == -1 : + # aucun '.' n'a été trouvé dans valeur --> on en rajoute un a la fin + if (self.is_param(valeur)): + return valeur + else: + if string.find(valeur,'e') != -1: + # Notation scientifique ? + try : + r=eval(valeur) + return valeur + except : + return None + else : + return valeur+'.' + else: + return valeur + + +import Accas +treeitem = SIMPTreeItem +objet = Accas.MCSIMP + diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py new file mode 100644 index 00000000..7b8c937b --- /dev/null +++ b/InterfaceQT4/editor.py @@ -0,0 +1,625 @@ +# -*- coding: utf-8 -*- +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +import types,sys,os +import traceback +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +# Modules Eficas + +import convert,generator +from Editeur import session +from Editeur import comploader +from Editeur import Objecttreeitem +#import panelsQT +import browser +import readercata +import qtCommun + +import prefs + +VERSION_EFICAS = "EFICAS v1.14" + + +class JDCEditor(QSplitter): +# -------------------------- # + """ + Editeur de jdc + """ + + def __init__ (self,fichier = None, jdc = None, QWParent=None, units = None, include=0 ,appli=None, vm=None): + #----------------------------------------------------------------------------------------------------------# + + #print "debut JDCEditor __init__" + print "fichier", fichier,"jdc",jdc,"units",units,"include",include + QSplitter.__init__(self, QWParent) + self.appliEficas = appli + self.appli = appli #---- attendu par IHM + self.vm = vm + self.fichier = fichier + self.jdc = jdc + self.QWParent = QWParent + + self.test=0 + VERSION_CODE = session.d_env.cata + if appli != None : + self.salome = self.appliEficas.salome + else : + self.salome=0 + + self.code = prefs.code + self.version_code = VERSION_CODE + self.titre=VERSION_EFICAS + ' pour '+ self.code + + self.dict_reels={} + self.liste_simp_reel=[] + self.format_fichier='python' # par defaut + self.jdc_openturn_xml="" + self.jdc_openturn_std="" + self.ihm="QT" + + from Editeur import configuration + self.CONFIGURATION = self.appliEficas.CONFIGURATION + self.CONFIGStyle = self.appliEficas.CONFIGStyle + + self.sb = None + if hasattr(self.appliEficas,"statusBar"): + self.sb = self.appliEficas.statusBar() + + self.fileInfo = None + self.lastModified = 0 + + self.modified = False + self.isReadOnly = False + self.tree = None + self.node_selected = None + + if not hasattr( readercata, 'reader' ) : + readercata.reader = readercata.READERCATA( self, self.appliEficas ) + self.readercata = readercata.reader + + #------- construction du jdc -------------- + + jdc_item = None + + nouveau=0 + if self.fichier is not None: # fichier jdc fourni + self.fileInfo = QFileInfo(self.fichier) + self.fileInfo.setCaching(0) + if jdc==None : + self.jdc = self.readFile(self.fichier) + else : + self.jdc=jdc + if units is not None: + self.jdc.recorded_units=units + self.jdc.old_recorded_units=units + else: + if not self.jdc: # nouveau jdc + if not include : + self.jdc = self._newJDC(units=units) + else : + self.jdc = self._newJDCInclude(units=units) + nouveau=1 + + if self.jdc: + self.jdc.appli = self + txt_exception = None + if not jdc: + self.jdc.analyse() + txt_exception = self.jdc.cr.get_mess_exception() + if txt_exception: + self.jdc = None + qApp.restoreOverrideCursor() + self.affiche_infos("Erreur fatale au chargement de %s" %fichier) + QMessageBox.critical( self, "Erreur fatale au chargement d'un fichier", txt_exception) + else: + comploader.charger_composants("QT") + jdc_item=Objecttreeitem.make_objecttreeitem( self, "nom", self.jdc ) + + if (not self.jdc.isvalid()) and (not nouveau) : + self.viewJdcRapport() + if jdc_item: + self.tree = browser.JDCTree( jdc_item, self ) + + #--------------------------------# + def _newJDC( self ,units = None): + #--------------------------------# + """ + Initialise un nouveau JDC vierge + """ + CONTEXT.unset_current_step() + jdc=self.readercata.cata[0].JdC( procedure="", + appli=self, + cata=self.readercata.cata, + cata_ord_dico=self.readercata.cata_ordonne_dico, + rep_mat=self.CONFIGURATION.rep_mat + ) + if units is not None: + jdc.recorded_units=units + jdc.old_recorded_units=units + jdc.analyse() + return jdc + + #--------------------------------# + def _newJDCInclude( self ,units = None): + #--------------------------------# + """ + Initialise un nouveau JDC vierge + """ + import Extensions.jdc_include + JdC_aux=Extensions.jdc_include.JdC_include + print JdC_aux + CONTEXT.unset_current_step() + + jaux=self.readercata.cata[0].JdC( procedure="", + appli=self, + cata=self.readercata.cata, + cata_ord_dico=self.readercata.cata_ordonne_dico, + rep_mat=self.CONFIGURATION.rep_mat, + ) + jaux.analyse() + + J=JdC_aux( procedure="", + appli=self, + cata=self.readercata.cata, + cata_ord_dico=self.readercata.cata_ordonne_dico, + jdc_pere=jaux, + rep_mat=self.CONFIGURATION.rep_mat, + ) + J.analyse() + if units is not None: + J.recorded_units=units + J.old_recorded_units=units + return J + + #-----------------------# + def readFile(self, fn): + #--------------------------------# + """ + Public slot to read the text from a file. + @param fn filename to read from (string or QString) + """ + fn = unicode(fn) + + # ------------------------------------------------------------------------------------ + # charge le JDC + # ------------------------------------------------------------------------------------ + + jdcName=os.path.basename(fn) + # Il faut convertir le contenu du fichier en fonction du format + if convert.plugins.has_key( self.format_fichier ): + # Le convertisseur existe on l'utilise + appli = self + p=convert.plugins[self.format_fichier]() + p.readfile(fn) + text=p.convert('exec',appli) + if not p.cr.estvide(): + self.affiche_infos("Erreur à la conversion") + + CONTEXT.unset_current_step() + ## os.chdir(self.initialdir) + jdc=self.readercata.cata[0].JdC(procedure=text, + appli=self, + cata=self.readercata.cata, + cata_ord_dico=self.readercata.cata_ordonne_dico, + nom=jdcName, + rep_mat=self.CONFIGURATION.rep_mat + ) + # ---------------------------------------------------- + # charge le JDC fin + # ---------------------------------------------------- + self.modified = False + +# qApp.restoreOverrideCursor() + if self.fileInfo!= None : + self.lastModified = self.fileInfo.lastModified() + else : + self.lastModified = 1 + return jdc + + #-----------------------# + def get_source(self,file): + #-----------------------# + format=self.format_fichier + + # Il faut convertir le contenu du fichier en fonction du format + if convert.plugins.has_key(format): + # Le convertisseur existe on l'utilise + p=convert.plugins[format]() + p.readfile(file) + text=p.convert('execnoparseur') + if not p.cr.estvide(): + self.affiche_infos("Erreur a la conversion") + return text + else: + # Il n'existe pas c'est une erreur + self.affiche_infos("Type de fichier non reconnu") + QMessageBox.critical( self, "Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier") + return None + + #----------------------------------------------# + def _viewText(self, txt, caption = "FILE_VIEWER"): + #----------------------------------------------# + w = qtCommun.ViewText( self.QWParent ) + w.setWindowTitle( caption ) + w.setText(txt) + w.show() + + #-----------------------# + def viewJdcSource(self): + #-----------------------# + format = self.format_fichier + f=open(self.fichier,'r') + texteSource=f.read() + f.close() + self._viewText(texteSource, "JDC_SOURCE") + + #-----------------------# + def viewJdcPy(self): + #-----------------------# + format = self.format_fichier + strSource = str( self.get_text_JDC(format) ) + self._viewText(strSource, "JDC_RESULTAT") + + #-----------------------# + def viewJdcRapport(self): + #-----------------------# + strRapport = str( self.jdc.report() ) + self._viewText(strRapport, "JDC_RAPPORT") + + #----------------# + def closeIt(self): + #----------------# + """ + Public method called by the viewmanager to finally get rid of us. + """ + if self.jdc: + self.jdc.supprime() + self.close() + + #------------------------------# + def affiche_infos(self,message): + #------------------------------# + if self.sb: + self.sb.showMessage(message)#,2000) + + #------------------------------# + def affiche_alerte(self,titre,message): + #------------------------------# + # appele par I_MACRO_ETAPE + QMessageBox.information( self, titre, message) + + #-------------------# + def init_modif(self): + #-------------------# + """ + Met l'attribut modified a 'o' : utilise par Eficas pour savoir + si un JDC doit etre sauvegarde avant destruction ou non + """ + self.modified = True + + #---------------------------------------# + def chercheNoeudSelectionne(self,copie=1): + #---------------------------------------# + """ + appele par Cut et Copy pour positionner self.node_selected + """ + self.node_selected=None + if len(self.tree.selectedItems()) == 0 : return + if len(self.tree.selectedItems()) != 1 : + QMessageBox.information( self, + "Copie impossible", + "Cette version d'EFICAS permet uniquement la copie d un seul objet") + return + self.node_selected=self.tree.selectedItems()[0] + if copie == 0 : return + if not self.node_selected.item.iscopiable(): + QMessageBox.information( self, + "Copie impossible", + "Cette version d'EFICAS ne permet pas la copie de cet Objet") + self.node_selected=None + return + + + #---------------------# + def handleEditCut(self): + #---------------------# + """ + Stocke dans Eficas.noeud_a_editer le noeud à couper + """ + self.chercheNoeudSelectionne() + self.QWParent.edit="couper" + self.QWParent.noeud_a_editer = self.node_selected + + #-----------------------# + def handleEditCopy(self): + #-----------------------# + """ + Stocke dans Eficas.noeud_a_editer le noeud a copier + """ + self.chercheNoeudSelectionne() + self.QWParent.edit="copier" + self.QWParent.noeud_a_editer = self.node_selected + + #------------------------# + def handleEditPaste(self): + #------------------------# + """ + Lance la copie de l'objet place dans self.QWParent.noeud_a_editer + Ne permet que la copie d'objets de type Commande ou MCF + """ + self.chercheNoeudSelectionne() + print "noeud a copier", self.node_selected.item.GetLabelText()[0] + print "noued apres " ,self.QWParent.noeud_a_editer.item.GetLabelText()[0] + if self.QWParent.noeud_a_editer == None : + QMessageBox.information( self, + "Copie impossible", + "Aucun Objet n a ete copie ou colle ") + return + try: + child=self.QWParent.noeud_a_editer.doPaste(self.node_selected) + except: + traceback.print_exc() + QMessageBox.information( self, + "Copie impossible", + "L'action de coller apres un tel objet n'est pas permise") + return + + + if child == 0: + if self.message != '': + QMessageBox.critical( self, "Copie refusee", self.message) + self.message = '' + self.affiche_infos("Copie refusée") + return + + # il faut declarer le JDCDisplay_courant modifie + self.init_modif() + # suppression eventuelle du noeud selectionne + # si possible on renomme l objet comme le noeud couper + + if self.QWParent.edit == "couper": + #nom = self.QWParent.noeud_a_editer.item.object.sd.nom + print self.QWParent.noeud_a_editer.item.object.sd.nom + item=self.QWParent.noeud_a_editer.item + self.QWParent.noeud_a_editer.delete() + child.item.update(item) + #test,mess = child.item.nomme_sd(nom) + child.select() + + # on rend la copie a nouveau possible en liberant le flag edit + self.QWParent.edit="copier" + + #---------------------# + def getFileName(self): + #---------------------# + return self.fichier + + #---------------------------# + def writeFile(self, fn, txt = None): + #------------------------------# + """ + Public slot to write the text to a file. + + @param fn filename to write to (string or QString) + @return flag indicating success + """ + + fn = unicode(fn) + + if txt == None : + txt = self.get_text_JDC(self.format_fichier) + eol = '\n' + if len(txt) >= len(eol): + if txt[-len(eol):] != eol: + txt += eol + else: + txt += eol + + try: + f = open(fn, 'wb') + f.write(txt) + f.close() + return 1 + except IOError, why: + QMessageBox.critical(self, self.trUtf8('Save File'), + self.trUtf8('The file %1 could not be saved.
Reason: %2') + .arg(unicode(fn)).arg(str(why))) + return 0 + +# #------------------------------------ +# def writeFilesOpenturns(self,fn) : +# #------------------------------------ +# base=fn[:fn.rfind(".")] +# fileXML=base + '.xml' +# fileSTD=base + '_std.py' +# self.writeFile(fileXML,self.jdc_openturn_xml) +# self.writeFile(fileSTD,self.jdc_openturn_std) +# +# + #-----------------------------# + def get_text_JDC(self,format): + #-----------------------------# + if generator.plugins.has_key(format): + # Le generateur existe on l'utilise + g=generator.plugins[format]() + jdc_formate=g.gener(self.jdc,format='beautifie') + if format == "openturns" : + self.jdc_openturn_xml=g.getOpenturnsXML() + self.jdc_openturn_std=g.getOpenturnsSTD() + if not g.cr.estvide(): + self.affiche_infos("Erreur à la generation") + QMessageBox.critical( self, "Erreur a la generation","EFICAS ne sait pas convertir ce JDC") + return + else: + return jdc_formate + else: + # Il n'existe pas c'est une erreur + self.affiche_infos("Format %s non reconnu" % format) + QMessageBox.critical( self, "Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC en format %s "% format) + return + + + #-----------------------------------------# + def saveFile(self, path = None, saveas= 0): + #-----------------------------------------# + """ + Public slot to save the text to a file. + + @param path directory to save the file in (string or QString) + @return tuple of two values (boolean, string) giving a success indicator and + the name of the saved file + """ + + if not self.modified and not saveas: + return (0, None) # do nothing if text wasn't changed + + newName = None + if self.fichier is None or saveas: + if path is None: + #PN --> modifier selon les prefs + path="/tmp" + selectedFilter = QString('') + fn = QFileDialog.getSaveFileName( self, + self.trUtf8("sauvegarde"), path, + self.trUtf8("JDC (*.comm);;" "All Files (*)"),None, + QFileDialog.DontConfirmOverwrite) + if fn.isNull(): return (0, None) + + ext = QFileInfo(fn).suffix() + if ext.isEmpty(): fn.append(".comm") + + if QFileInfo(fn).exists(): + abort = QMessageBox.warning(self, + self.trUtf8("Sauvegarde du Fichier"), + self.trUtf8("Le fichier %1 existe deja.").arg(fn), + self.trUtf8("&Ecraser"), + self.trUtf8("&Abandonner")) + if abort == 1 : return (0, None) + + fn = unicode(QDir.convertSeparators(fn)) + newName = fn + + else: + fn = self.fichier + + if self.writeFile(fn): + self.fichier = fn + self.modified = False + if self.fileInfo is None or saveas: + self.fileInfo = QFileInfo(self.fichier) + self.fileInfo.setCaching(0) + self.lastModified = self.fileInfo.lastModified() + if newName is not None: + self.appliEficas.addToRecentList(newName) + self.tree.racine.item.getObject().nom=os.path.basename(newName) + self.tree.racine.update_node_label() +# if self.code == "OPENTURNS" : +# self.writeFilesOpenturns(fn) +# if self.salome : +# self.QWParent.appli.addJdcInSalome( self.fichier) +# if self.code == 'ASTER': +# self.QWParent.appli.createOrUpdateMesh(self) +# #PN ; TODO +# + return (1, self.fichier) + else: + return (0, None) +# + #---------------------------------# + def saveFileAs(self, path = None): + #---------------------------------# + """ + Public slot to save a file with a new name. + + @param path directory to save the file in (string or QString) + @return tuple of two values (boolean, string) giving a success indicator and + the name of the saved file + """ + return self.saveFile(path,1) + + + + #---------------------------------------------# + def get_file(self,unite=None,fic_origine = ''): + #---------------------------------------------# + # appele par I_JDC + ulfile = None + jdcText = "" + + titre = "" + + if unite : + titre = "Choix unite %d " %unite + texte = "Le fichier %s contient une commande INCLUDE \n" % fic_origine + texte = texte+'Donnez le nom du fichier correspondant\n à l unité logique %d' % unite + labeltexte = 'Fichier pour unite %d :' % unite + else: + titre = "Choix d'un fichier de poursuite" + texte = "Le fichier %s contient une commande %s\n" %(fic_origine,'POURSUITE') + texte = texte+'Donnez le nom du fichier dont vous \n voulez faire une poursuite' + + QMessageBox.information( self, titre,texte) + #PN --> les prefs + fn = QFileDialog.getOpenFileName( self, titre) + + if fn.isNull(): + # ce retour est impose par le get_file d'I_JDC + return None," " + + ulfile = os.path.abspath(unicode(fn)) + # On utilise le convertisseur défini par format_fichier + source=self.get_source(ulfile) + if source: + # On a réussi à convertir le fichier self.ulfile + jdcText = source + else: + # Une erreur a été rencontrée + jdcText = '' + return ulfile, jdcText + +if __name__=='__main__': + if hasattr(prefs,'encoding'): + # Hack pour changer le codage par defaut des strings + import sys + reload(sys) + sys.setdefaultencoding(prefs.encoding) + del sys.setdefaultencoding + # Fin hack + +# #CS_pbruno note: fait implicitement des trucs ces imports (grr) +# import styles +# import import_code +# import session +# +# # Analyse des arguments de la ligne de commande +# options=session.parse(sys.argv) +# code=options.code +# + app = QApplication(sys.argv) + mw = JDCEditor('azAster.comm') + app.setMainWidget(mw) + app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + mw.show() + + res = app.exec_loop() + sys.exit(res) diff --git a/InterfaceQT4/eficas_go.py b/InterfaceQT4/eficas_go.py new file mode 100644 index 00000000..daaf8bf7 --- /dev/null +++ b/InterfaceQT4/eficas_go.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module permet de lancer l'application EFICAS en affichant + un ecran Splash pour faire patienter l'utilisateur +""" +# Modules Python +import sys +from qt import * + +# Modules Eficas +import prefs +if hasattr(prefs,'encoding'): + # Hack pour changer le codage par defaut des strings + import sys + reload(sys) + sys.setdefaultencoding(prefs.encoding) + del sys.setdefaultencoding + # Fin hack + +from Editeur import import_code +from Editeur import session + +def lance_eficas(code=None,fichier=None): + """ + Lance l'appli EFICAS + """ + # Analyse des arguments de la ligne de commande + if code !=None : prefs.code=code + import qtEficas + options=session.parse(sys.argv) + code=options.code + + app = QApplication(sys.argv) + mw = qtEficas.Appli(code=code) + app.setMainWidget(mw) + app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + mw.show() + mw.ouvreFichiers() + res = app.exec_loop() + sys.exit(res) + + diff --git a/InterfaceQT4/gereTraduction.py b/InterfaceQT4/gereTraduction.py new file mode 100644 index 00000000..025d63cb --- /dev/null +++ b/InterfaceQT4/gereTraduction.py @@ -0,0 +1,52 @@ +from PyQt4 import * +from PyQt4.QtGui import * +import os + + +def traduction(directPath,editor,version): + if version == "V7V8" : + from Traducteur import traduitV7V8 + suffixe="v8.comm" + if version == "V8V9" : + from Traducteur import traduitV8V9 + suffixe="v9.comm" + fn = QFileDialog.getOpenFileName( QString(directPath) , "") + + FichieraTraduire=str(fn) + if (FichieraTraduire == "" or FichieraTraduire == () ) : return + i=FichieraTraduire.rfind(".") + Feuille=FichieraTraduire[0:i] + FichierTraduit=Feuille+suffixe + + i=Feuille.rfind("/") + directLog=Feuille[0:i] + log=directLog+"/convert.log" + os.system("rm -rf "+log) + os.system("rm -rf "+FichierTraduit) + + qApp.setOverrideCursor(QCursor(Qt.WaitCursor)) + if version == "V7V8" : traduitV7V8.traduc(FichieraTraduire,FichierTraduit,log) + if version == "V8V9" : traduitV8V9.traduc(FichieraTraduire,FichierTraduit,log) + qApp.setOverrideCursor(QCursor(Qt.ArrowCursor)) + + Entete="Fichier Traduit : "+FichierTraduit +"\n\n" + if os.stat(log)[6] != 0L : + f=open(log) + texte= f.read() + f.close() + else : + texte = Entete + commande="diff "+FichieraTraduire+" "+FichierTraduit+" >/dev/null" + try : + if os.system(commande) == 0 : + texte = texte + "Pas de difference entre le fichier origine et le fichier traduit" + except : + pass + + from desVisu import DVisu + titre = "conversion de "+ FichieraTraduire + monVisu=DVisu(parent=editor,fl=Qt.WType_Dialog) + monVisu.setCaption(titre) + monVisu.TB.setText(texte) + monVisu.show() + diff --git a/InterfaceQT4/monChoixCata.py b/InterfaceQT4/monChoixCata.py new file mode 100644 index 00000000..50371d0d --- /dev/null +++ b/InterfaceQT4/monChoixCata.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desChoixCata import Ui_DChoixCata +from PyQt4 import * +from PyQt4.QtCore import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * + + +# Import des panels + +class MonChoixCata(Ui_DChoixCata,QtGui.QDialog): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,listeCata,readercata, QWparent , name = None,fl = 0): + #print "MonChoixCata" + QtGui.QDialog.__init__(self,QWparent) + self.setModal(True) + self.setupUi(self) + self.listeCata=listeCata + self.readercata=readercata + for cata in self.listeCata : + self.CBChoixCata.insertItem(0,cata) + lab = QString(repr(len(listeCata))) + lab += QString(" versions du catalogue sont disponibles") + self.TLNb.setText(lab) + self.CBChoixCata.setCurrentIndex(0) + self.readercata.version_cata=self.CBChoixCata.currentText() + + def on_buttonCancel_clicked(self): + QDialog.reject(self) + + def on_CBChoixCata_activated(self): + self.readercata.version_cata=self.CBChoixCata.currentText() + + def on_buttonOk_clicked(self): + QDialog.accept(self) + diff --git a/InterfaceQT4/monCommandePanel.py b/InterfaceQT4/monCommandePanel.py new file mode 100644 index 00000000..530142d5 --- /dev/null +++ b/InterfaceQT4/monCommandePanel.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desCommande import Ui_DComm +from qtCommun import QTPanel +from qtCommun import QTPanelTBW1 +from qtCommun import QTPanelTBW2 +from qtCommun import QTPanelTBW3 +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +class DComm(Ui_DComm,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + self.setModal(modal) + + +# Import des panels + +class MonCommandePanel(DComm,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonCommandePanel" + DComm.__init__(self,parent,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW1.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent) + QTPanelTBW3.__init__(self,node,parent) + self.connecterSignaux() + + def connecterSignaux(self): + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.LENomConcept,SIGNAL("returnPressed()"),self.LENomConceptReturnPressed) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.BNext,SIGNAL("pressed()"),self.BNextPressed) + + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def BNextPressed(self): + QTPanelTBW2.BNextPressed(self) + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def LENomConceptReturnPressed(self): + QTPanelTBW3.LENomConceptReturnPressed(self) + + diff --git a/InterfaceQT4/monCommentairePanel.py b/InterfaceQT4/monCommentairePanel.py new file mode 100644 index 00000000..2449ac32 --- /dev/null +++ b/InterfaceQT4/monCommentairePanel.py @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas + +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +from desCommentaire import Ui_DComment +from qtCommun import QTPanel +from qtCommun import QTPanelTBW2 + +class DComment(Ui_DComment,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + + +# Import des panels + +class MonCommentairePanel(DComment,QTPanelTBW2,QTPanel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonCommentairePanel" + DComment.__init__(self,parent,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent) + self.RemplitPanel() + self.connecterSignaux() + + def connecterSignaux(self) : + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.BNext,SIGNAL("pressed()"),self.BNextPressed) + self.connect(self.textCommentaire,SIGNAL("textChanged()"),self.TexteCommentaireEntre) + + def RemplitPanel(self): + texte=self.node.item.get_valeur() + self.textCommentaire.setText(texte) + + def TexteCommentaireEntre(self): + texte=str(self.textCommentaire.toPlainText()) + self.editor.init_modif() + self.node.item.set_valeur(texte) + self.node.onValid() + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def BNextPressed(self) : + QTPanelTBW2.BNextPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT4/monFonctionPanel.py b/InterfaceQT4/monFonctionPanel.py new file mode 100644 index 00000000..4dba067e --- /dev/null +++ b/InterfaceQT4/monFonctionPanel.py @@ -0,0 +1,155 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +from qtSaisie import SaisieValeur +from monPlusieursBasePanel import MonPlusieursBasePanel + +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +# Import des panels + +class MonFonctionPanel(MonPlusieursBasePanel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonFonctionPanel" + self.node=node + self.SetNbValeurs() + MonPlusieursBasePanel.__init__(self,node,parent,name,fl) + + def SetNbValeurs(self): + genea=self.node.item.get_genealogie() + if "VALE" in genea: + self.nbValeurs=2 + if "VALE_C" in genea: + self.nbValeurs=3 + + + def DecoupeListeValeurs(self,liste): + #decoupe la liste des valeurs en n ( les x puis les y) + l_valeurs=[] + if (len(liste)% self.nbValeurs != 0): + message="La cardinalité n'est pas correcte, la dernière valeur est ignorée" + #self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + for i in range(len(liste)/ self.nbValeurs) : + if (self.nbValeurs==2): + t=(liste[i*self.nbValeurs], liste[i*self.nbValeurs+1]) + else: + t=(liste[i*self.nbValeurs], liste[i*self.nbValeurs+1], liste[i*self.nbValeurs+2]) + l_valeurs.append(t) + return l_valeurs + + def BuildLBValeurs(self): + self.LBValeurs.clear() + listeValeurs=self.node.item.GetListeValeurs() + for valeur in self.DecoupeListeValeurs(listeValeurs): + if (self.nbValeurs==2): + str_valeur=str(valeur[0])+","+str(valeur[1]) + else: + str_valeur=str(valeur[0])+","+str(valeur[1])+","+str(valeur[2]) + self.LBValeurs.addItem(str_valeur) + + def Ajout1Valeur(self,liste=[]): + # Pour être appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur) + if liste == [] : + liste,validite=SaisieValeur.TraiteLEValeur(self) + else : + validite=1 + if validite == 0 : return + if liste ==[] : return + + if len(liste) != self.nbValeurs : + commentaire = QString(str(liste)) + commentaire += QString(" n est pas un tuple de ") + commentaire += QString(str(self.nbValeurs)) + commentaire += QString(" valeurs") + self.LEValeur.setText(QString(str(liste))) + self.editor.affiche_infos(commentaire) + return + + index=self.LBValeurs.currentRow() + if ((self.LBValeurs.isItemSelected(self.LBValeurs.item(index )) == 0) and (index > 0 )): + index=0 + else : + index=self.LBValeurs.currentRow() + 1 + indexListe=index*self.nbValeurs + if index == 0 : + indexListe=len(self.listeValeursCourantes) + listeVal=[] + for valeur in self.listeValeursCourantes : + listeVal.append(valeur) + validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) + self.Commentaire.setText(comm2) + if not validite : + self.editor.affiche_infos(comm) + else: + self.LEValeur.setText(QString("")) + l1=self.listeValeursCourantes[:indexListe] + l3=self.listeValeursCourantes[indexListe:] + for valeur in self.DecoupeListeValeurs(listeRetour) : + if (self.nbValeurs==2): + str_valeur=str(valeur[0])+","+str(valeur[1]) + else: + str_valeur=str(valeur[0])+","+str(valeur[1])+","+str(valeur[2]) + self.LBValeurs.insertItem(index,str_valeur) + item=self.LBValeurs.item(index) + item.setSelected(1) + self.LBValeurs.setCurrentItem(item) + index=index+1 + self.listeValeursCourantes=l1+listeRetour+l3 + + + def AjoutNValeur(self,liste) : + if len(liste)%self.nbValeurs != 0 : + texte="Nombre de valeur incorrecte" + #self.Commentaire.setText(texte) + self.editor.affiche_infos(texte) + return + listeDecoupee=self.DecoupeListeValeurs(liste) + for vals in listeDecoupee : + self.Ajout1Valeur(vals) + + + def Sup1Valeur(self): + index=self.LBValeurs.currentRow() + if index == None : return + self.LBValeurs.takeItem(index) + listeVal=[] + i=0 + for valeur in self.listeValeursCourantes : + if self.nbValeurs == 2 : + if (i != index*2 and i != index*2+1 ) : listeVal.append(valeur) + elif self.nbValeurs == 3 : + if (i != index*3 and i != index*3+1 and i != index*3 +2) : listeVal.append(valeur) + else : + print "aiiiiiiiiiiiiiiiiiieeee" + i = i+1 + self.listeValeursCourantes=listeVal + listeValeurs=self.listeValeursCourantes + diff --git a/InterfaceQT4/monFormulePanel.py b/InterfaceQT4/monFormulePanel.py new file mode 100644 index 00000000..570fc669 --- /dev/null +++ b/InterfaceQT4/monFormulePanel.py @@ -0,0 +1,181 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desFormule import Ui_DFormule +from qtCommun import QTPanel +from qtCommun import QTPanelTBW2 + +from PyQt4.QtGui import * +from PyQt4.QtCore import * + + +class DFormule(Ui_DFormule,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + + +# Import des panels + +class MonFormulePanel(DFormule,QTPanelTBW2): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonFormulePanel" + DFormule.__init__(self,parent,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent) + self.connecterSignaux() + self.LENomFormule.setText(node.item.get_nom()) + self.LECorpsFormule.setText(node.item.get_corps()) + texte_args="" + if node.item.get_args() != None : + for i in node.item.get_args() : + if texte_args != "" : + texte_args = texte_args +"," + texte_args=texte_args + i + self.LENomsArgs.setText(texte_args) + + self.parent=parent + + def connecterSignaux(self): + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed) + self.connect(self.LENomFormule,SIGNAL("returnPressed()"),self.NomFormuleSaisi) + self.connect(self.LENomsArgs,SIGNAL("returnPressed()"),self.argsSaisis) + self.connect(self.LECorpsFormule,SIGNAL("returnPressed()"),self.FormuleSaisie) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def BNextPressed(self): + QTPanelTBW2.BNextPressed(self) + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def NomFormuleSaisi(self): + nomFormule = str(self.LENomFormule.text()) + if nomFormule == '' : return + test,erreur = self.node.item.verif_nom(nomFormule) + if test : + commentaire=nomFormule+" est un nom valide pour une FORMULE" + else : + commentaire=nomFormule+" n'est pas un nom valide pour une FORMULE" + self.editor.affiche_infos(commentaire) + + def argsSaisis(self): + arguments = str(self.LENomsArgs.text()) + if arguments == '' : return + + test,erreur = self.node.item.verif_arguments(arguments) + if test: + commentaire="Argument(s) valide(s) pour une FORMULE" + else: + commentaire="Argument(s) invalide(s) pour une FORMULE" + self.editor.affiche_infos(commentaire) + + def FormuleSaisie(self): + nomFormule = str(self.LENomFormule.text()) + arguments = str(self.LENomsArgs.text()) + expression = str(self.LECorpsFormule.text()) + if expression == '' : return + test,erreur = self.node.item.verif_formule_python((nomFormule,"REEL",arguments,expression)) + + if test: + commentaire="Corps de FORMULE valide" + else: + commentaire="Corps de FORMULE invalide" + self.editor.affiche_infos(commentaire) + + + def BOkPressedFormule(self): + if self.parent.modified == 'n' : self.parent.init_modif() + + nomFormule = str(self.LENomFormule.text()) + test,erreur = self.node.item.verif_nom(nomFormule) + if not test : + self.editor.affiche_infos(erreur) + return + + arguments = str(self.LENomsArgs.text()) + test,erreur = self.node.item.verif_arguments(arguments) + if not test : + self.editor.affiche_infos(erreur) + return + + expression = str(self.LECorpsFormule.text()) + test,erreur = self.node.item.verif_formule_python((nomFormule,"REEL",arguments,expression)) + if not test : + self.editor.affiche_infos(erreur) + return + + test=self.node.item.object.update_formule_python(formule=(nomFormule,"REEL",arguments,expression)) + test,erreur = self.node.item.save_formule(nomFormule,"REEL",arguments,expression) + if test : + #self.node.update_texte() + #self.node.update_label() + #self.node.update_node() + self.node.onValid() + self.node.update_valid() + commentaire = "Formule modifiée" + else: + commentaire ="Formule incorrecte : " + erreur + self.editor.init_modif() + self.editor.affiche_infos(commentaire) diff --git a/InterfaceQT4/monInactifPanel.py b/InterfaceQT4/monInactifPanel.py new file mode 100644 index 00000000..bf544724 --- /dev/null +++ b/InterfaceQT4/monInactifPanel.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- + + +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +from qtCommun import QTPanel +from desInactif import Ui_DInactif + + +SEPARATEUR = '-'*30 + + +class PanelInactif( QTPanel, Ui_DInactif,QDialog ): + def __init__(self,node,parent ): + #print "PanelInactif" + QDialog.__init__(self,parent) + QTPanel.__init__(self,node,parent) + Ui_DInactif.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + diff --git a/InterfaceQT4/monIncludePanel.py b/InterfaceQT4/monIncludePanel.py new file mode 100644 index 00000000..15a0408c --- /dev/null +++ b/InterfaceQT4/monIncludePanel.py @@ -0,0 +1,194 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +import os,traceback,sys +from qtCommun import QTPanel +from qtCommun import QTPanelTBW1 +from qtCommun import QTPanelTBW2 +from qtCommun import QTPanelTBW3 +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +from desInclude import Ui_DInc1 +import convert + +class DInc(Ui_DInc1,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + + + +# Import des panels + +class MonIncludePanel(DInc,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonIncludePanel" + DInc.__init__(self,parent,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent) + QTPanelTBW1.__init__(self,node,parent) + self.connecterSignaux() + + self.node=node + if not hasattr(self.node.item.object,'fichier_unite'): + self.pageBad() + else: + self.pageOk() + + def pageOk(self): + self.TWChoix.removeTab(3) + self.TWChoix.setCurrentIndex(2) + self.LENomFichier.setText(self.node.item.object.fichier_ini) + + + def pageBad(self) : + self.TWChoix.removeTab(2) + self.TWChoix.setCurrentIndex(2) + + def BBrowsePressed(self): + print self.node.makeEdit + self.node.makeEdit() + + def BOkIncPressed (self): + self.LENomFichReturnPressed() + + def LENomFichReturnPressed(self): + nomFichier=str(self.LENomFichier.text()) + if not os.path.isfile(nomFichier) : + commentaire = "Fichier introuvable" + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + return + + text=self.convert_file(nomFichier) + + # Si probleme a la lecture-conversion on arrete le traitement + if not text: + return + + try : + self.node.item.object.change_fichier_init(nomFichier,text) + commentaire = "Fichier modifie : " + self.node.item.get_nom() + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + except: + l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1]) + QMessageBox.critical( self, "Erreur fatale au chargement du fichier Include", l[0]) + commentaire = "Fichier invalide" + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + return + + + def convert_file(self,file): + """ + Methode pour convertir le fichier file dans le format courant + """ + format=self.editor.format_fichier + text=None + if convert.plugins.has_key(format): + # Le convertisseur existe on l'utilise + p=convert.plugins[format]() + p.readfile(file) + text=p.convert('execnoparseur') + else : + commentaire = "Impossible de lire le fichier : Format inconnu" + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + return text + + + def BChangeFilePressed(self): + userDir=os.path.expanduser("~/Eficas_install/") + fn = QFileDialog.getOpenFileName(self.node.appliEficas, + self.node.appliEficas.trUtf8('Fichier Include'), + self.node.appliEficas.trUtf8('All Files (*);;''JDC Files (*.comm);;')) + + if fn.isNull(): + return + + fn = os.path.abspath((unicode(fn))) + self.LENomFichier.setText(fn) + self.LENomFichReturnPressed() + + def connecterSignaux(self): + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.BNext,SIGNAL("pressed()"),self.BNextPressed) + self.connect(self.BBrowse,SIGNAL("clicked()"),self.BBrowsePressed) + try : + self.connect(self.BChangeFile,SIGNAL("clicked()"),self.BChangeFilePressed) + self.connect(self.LENomFichier,SIGNAL("returnPressed()"),self.LENomFichReturnPressed) + except : + pass + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def BNextPressed(self): + QTPanelTBW2.BNextPressed(self) + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def LENomConceptReturnPressed(self): + QTPanelTBW3.LENomConceptReturnPressed(self) + diff --git a/InterfaceQT4/monListeParamPanel.py b/InterfaceQT4/monListeParamPanel.py new file mode 100644 index 00000000..0a672881 --- /dev/null +++ b/InterfaceQT4/monListeParamPanel.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desListeParam import Ui_DLisParam +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +# Import des panels +class DLisParam(Ui_DLisParam,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + self.setupUi(self) + +class MonListeParamPanel(DLisParam): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,liste,parent,name = None,fl = 0): + #print "MonListeParamPanel" + self.panel=parent + DLisParam.__init__(self,parent,fl) + self.liste=liste + self.dictListe={} + self.initVal() + self.connecterSignaux() + + def connecterSignaux(self) : + self.connect(self.LBParam,SIGNAL("itemPressed(QListWidgetItem*)"),self.LBParamItemPressed) + + def initVal(self): + self.LBParam.clear() + for param in self.liste : + self.LBParam.addItem(QString(repr(param))) + self.dictListe[QString(repr(param))] = param + + def LBParamItemPressed(self): + i=self.LBParam.selectedItems()[0].text() + self.panel.Ajout1Valeur(self.dictListe[i]) diff --git a/InterfaceQT4/monMCFactPanel.py b/InterfaceQT4/monMCFactPanel.py new file mode 100644 index 00000000..7f775ff5 --- /dev/null +++ b/InterfaceQT4/monMCFactPanel.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desMCFact import Ui_DMCFact +from qtCommun import QTPanel +from qtCommun import QTPanelTBW1 +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +class DMCFact(Ui_DMCFact,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + + +# Import des panels + +class MonMCFactPanel(DMCFact,QTPanelTBW1): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonMCFactPanel" + DMCFact.__init__(self,parent,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW1.__init__(self,node,parent) + self.connecterSignaux() + + def connecterSignaux(self): + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT4/monMCListAjoutPanel.py b/InterfaceQT4/monMCListAjoutPanel.py new file mode 100644 index 00000000..5a807680 --- /dev/null +++ b/InterfaceQT4/monMCListAjoutPanel.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desMCListAjout import Ui_DMCListAjout +from PyQt4.QtGui import * +from PyQt4.QtCore import * +from qtCommun import QTPanel + + +class DMCListAjout(Ui_DMCListAjout,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + +# Import des panels + +class MonMCListAjoutPanel(DMCListAjout,QTPanel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node,parent = None,name = None,fl = 0): + #print "MonMCListAjoutPanel" + DMCListAjout.__init__(self,parent,fl) + QTPanel.__init__(self,node,parent) + monMCFact=self.node.item.get_nom() + self.MCFacteur.setText(QString(monMCFact)) + self.MCFacteur.setAlignment(Qt.AlignHCenter) + self.connecterSignaux() + + def connecterSignaux(self): + self.connect(self.bOk,SIGNAL("clicked()"),self.BAjoutClicked) + self.connect(self.bAjout,SIGNAL("clicked()"),self.BAjoutClicked) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BAjoutClicked(self): + self.node.treeParent.append_child(self.node.item.get_nom()) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT4/monMacroPanel.py b/InterfaceQT4/monMacroPanel.py new file mode 100644 index 00000000..7e6d744a --- /dev/null +++ b/InterfaceQT4/monMacroPanel.py @@ -0,0 +1,107 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desCommande import Ui_DComm +from qtCommun import QTPanel +from qtCommun import QTPanelTBW1 +from qtCommun import QTPanelTBW2 +from qtCommun import QTPanelTBW3 +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +class DMacro(Ui_DComm,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + +# Import des panels + +class MonMacroPanel(DMacro,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonMacroPanel" + DMacro.__init__(self,parent,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent) + QTPanelTBW1.__init__(self,node,parent) + self.connecterSignaux() + if self.node.item.object.get_type_produit() != None : + QTPanelTBW3.__init__(self,node,parent) + else : + self.TWChoix.removeTab(1) + + def connecterSignaux(self): + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.LENomConcept,SIGNAL("returnPressed()"),self.LENomConceptReturnPressed) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.BNext,SIGNAL("pressed()"),self.BNextPressed) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def BNextPressed(self): + QTPanelTBW2.BNextPressed(self) + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def LENomConceptReturnPressed(self): + QTPanelTBW3.LENomConceptReturnPressed(self) + diff --git a/InterfaceQT4/monOptionsEditeur.py b/InterfaceQT4/monOptionsEditeur.py new file mode 100644 index 00000000..e307158b --- /dev/null +++ b/InterfaceQT4/monOptionsEditeur.py @@ -0,0 +1,170 @@ +# -*- coding: utf-8 -*- + +import os, re + +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +from OptionsEditeur import Ui_desOptions + + +class desOptions(Ui_desOptions,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + self.setupUi(self) + self.setModal(modal) + +class Options(desOptions): + def __init__(self,parent = None,modal = 0,configuration=None): + #print "Options" + desOptions.__init__(self,parent,modal) + self.configuration=configuration + self.viewMan=parent + self.dVersion={} + self.dRepMat={} + self.dRepCat={} + self.connecterSignaux() + self.initAll() + + def connecterSignaux(self) : + self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie) + self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked) + self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion) + self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc) + self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked) + self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion) + self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion) + self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion) + self.connect(self.PBQuit,SIGNAL("clicked()"),self.close) + self.connect(self.LERepDoc,SIGNAL("textChanged(const QString&)"),self.ChangePathDoc) + + + def initAll(self): + self.CBVersions.clear() + for item in self.configuration.catalogues : + try : + (code,version,cata,format,defaut)=item + except : + (code,version,cata,format)=item + self.dVersion[version]=(item) + self.dRepCat[version]=str(cata) + self.CBVersions.addItem(QString(version)) + + codeSansPoint=re.sub("\.","",version) + chaine="rep_mat_"+codeSansPoint + if hasattr(self.configuration,chaine): + rep_mat=getattr(self.configuration,chaine) + self.dRepMat[version]=str(rep_mat) + else : + self.dRepMat[version]="" + self.LERepMat.setText(self.dRepMat[version]) + self.LERepCata.setText(self.dRepCat[version]) + if hasattr(self.configuration,"path_doc"): + self.LERepDoc.setText(self.configuration.path_doc) + + + def VersionChoisie(self): + version=str(self.CBVersions.currentText()) + if self.dRepMat.has_key(version): + self.LERepMat.setText(self.dRepMat[version]) + if self.dRepCat.has_key(version): + self.LERepCata.setText(self.dRepCat[version]) + + def BokClicked(self): + version=str(self.CBVersions.currentText()) + if self.LERepCata.text() == "" : + QMessageBox.critical( self, "Champ non rempli","Le champs Catalogue doit etre rempli" ) + return + + self.dRepMat[version]=self.LERepMat.text() + if str(self.dRepMat[version] != "") != "" : + codeSansPoint=re.sub("\.","",version) + chaine="rep_mat_"+codeSansPoint + setattr(self.configuration,chaine,self.dRepMat[version]) + + self.dRepCat[version]=str(self.LERepCata.text()) + if version in self.dVersion.keys(): + item=list(self.dVersion[version]) + item[2]=self.dRepCat[version] + self.dVersion[version]=tuple(item) + else : + self.dVersion[version]=('ASTER',version,self.dRepCat[version],'python') + + lItem=[] + for version in self.dVersion.keys() : + lItem.append(self.dVersion[version]) + self.configuration.catalogues=lItem + self.configuration.save_params() + + def AjoutVersion(self): + version=self.LEVersionAjout.text() + if str(version) == "" : return + self.CBVersions.addItem(version) + self.LERepMat.setText("") + self.LERepCata.setText("") + self.LEVersionAjout.setText("") + self.CBVersions.setCurrentIndex(self.CBVersions.count()-1) + + def SupVersion(self): + version=str(self.LEVersionSup.text()) + if version == "" : return + i =0 + while i < self.CBVersions.count() : + if self.CBVersions.itemText(i) == version : + self.CBVersions.removeItem(i) + break + i=i+1 + try : + del self.dVersion[version] + del self.dRepMat[version] + del self.dRepCat[version] + except : + self.LEVersionSup.setText("") + return + codeSansPoint=re.sub("\.","",version) + chaine="rep_mat_"+codeSansPoint + if hasattr(self.configuration,chaine): + delattr(self.configuration,chaine) + self.LEVersionSup.setText("") + + lItem=[] + for version in self.dVersion.keys() : + lItem.append(self.dVersion[version]) + self.LERepMat.setText("") + self.LERepCata.setText("") + self.configuration.catalogues=lItem + self.configuration.save_params() + self.CBVersions.setCurrentIndex(0) + self.VersionChoisie() + + + def BdefautChecked(self): + res = QMessageBox.warning( + None, + self.trUtf8("Restauration des parametres par defaut "), + self.trUtf8("Votre fichier editeur sera ecrase."), + self.trUtf8("&Ok"), + self.trUtf8("&Abandonner")) + self.Bdefaut.setState(QButton.Off) + if res == 1 : return + + appli=self.configuration.appli + rep_ini=self.configuration.rep_ini + fic_ini_util=self.configuration.fic_ini_utilisateur + old_fic_ini_util=fic_ini_util+"_old" + commande="mv "+fic_ini_util+" "+old_fic_ini_util + os.system(commande) + from Editeur import configuration + configNew=configuration.CONFIG(appli,rep_ini) + self.configuration=configNew + appli.CONFIGURATION=configNew + self.configuration.save_params() + self.dVersion={} + self.dRepMat={} + self.dRepCat={} + self.initAll() + + def ChangePathDoc(self): + self.configuration.path_doc=str(self.LERepDoc.text()) + self.configuration.save_params() + diff --git a/InterfaceQT4/monOptionsPdf.py b/InterfaceQT4/monOptionsPdf.py new file mode 100644 index 00000000..643eeb72 --- /dev/null +++ b/InterfaceQT4/monOptionsPdf.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +from OptionsPdf import Ui_desPdf + +class desPdf(Ui_desPdf,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + self.setupUi(self) + self.setModal(modal) + + +class OptionPdf(desPdf): + def __init__(self,parent = None,modal = 0,configuration=None): + #print "OptionsPdf" + desPdf.__init__(self,parent,modal) + self.configuration=configuration + self.initVal() + self.connecterSignaux() + + def connecterSignaux(self) : + self.connect(self.BCancel,SIGNAL("clicked()"),self.reject) + self.connect(self.LERepPdf,SIGNAL("returnPressed()"),self.LeRepPdfPressed) + self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked) + + def initVal(self): + if hasattr(self.configuration,'exec_acrobat'): + self.LERepPdf.setText(self.configuration.exec_acrobat) + else : + self.LERepPdf.clear() + + def LeRepPdfPressed(self): + nouveau=str(self.LERepPdf.text()) + self.configuration.exec_acrobat=nouveau + self.configuration.save_params() + + def BokClicked(self): + self.LeRepPdfPressed() + self.close() diff --git a/InterfaceQT4/monParamPanel.py b/InterfaceQT4/monParamPanel.py new file mode 100644 index 00000000..a77f9439 --- /dev/null +++ b/InterfaceQT4/monParamPanel.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os,re + +# Modules Eficas +import prefs + +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +from desParam import Ui_DParam +from qtCommun import QTPanel +from qtCommun import QTPanelTBW2 + +class DParam(Ui_DParam,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + +# Import des panels + +class MonParamPanel(DParam,QTPanelTBW2,QTPanel): + """ + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonParamPanel" + DParam.__init__(self,parent,fl) + QTPanel.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent) + self.InitLEs() + self.connecterSignaux() + + def connecterSignaux(self) : + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.BNext,SIGNAL("pressed()"),self.BNextPressed) + self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.BOkPressed) + + def InitLEs(self): + nom=self.node.item.get_nom() + self.lineEditNom.setText(nom) + valeur=self.node.item.get_valeur() + if valeur != None: + #str=QString("").setNum(valeur) + self.lineEditVal.setText(str(valeur)) + else : + self.lineEditVal.clear() + + def BOkParamPressed(self): + val=self.LEValeurPressed() + nom,commentaire=self.LENomPressed() + if not nom : + if commentaire == None : + commentaire="Entrer un nom de parametre" + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + return + if not val : + return + self.node.item.set_nom(nom) + self.node.item.set_valeur(val) + self.node.update_texte() + self.node.update_valid() + self.editor.init_modif() + self.InitLEs() + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def LEValeurPressed(self): + self.Commentaire.setText(QString("")) + commentaire="Valeur incorrecte" + qtVal=self.lineEditVal.text() + boul=2 + try : + val,boul=QString.toInt(qtVal) + except : + pass + if boul == 0 : + try : + val,boul=QString.toDouble(qtVal) + except : + pass + if boul == 0 : + try : + val=str(qtVal) + boul=1 + except : + pass + if boul: commentaire="Valeur correcte" + valString=str(self.lineEditVal.text()) + self.Commentaire.setText(QString(commentaire)) + if (valString.find(' ') > -1) or (valString.find(',') > -1) : + commentaire="Valeur incorrecte" + self.Commentaire.setText(QString(commentaire)) + return None + self.Commentaire.setText(QString(commentaire)) + return valString + + def LENomPressed(self): + self.Commentaire.setText(QString("")) + qtNom=self.lineEditNom.text() + nom=str(qtNom) + numDebutPattern=re.compile('[a-zA-Z"_"]') + if numDebutPattern.match(nom) : + return nom,None + else : + commentaire="Les noms de parametre doivent commencer par une lettre ou un souligne" + return None,commentaire + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def AppelleBuildLBRegles(self): + listeRegles=self.node.item.get_regles() + listeNomsEtapes = self.node.item.get_l_noms_etapes() + self.BuildLBRegles(listeRegles,listeNomsEtapes) + + def BNextPressed(self) : + QTPanelTBW2.BNextPressed(self) + + def BOkPressed(self): + QTPanel.BOkPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT4/monPlusieursASSDPanel.py b/InterfaceQT4/monPlusieursASSDPanel.py new file mode 100644 index 00000000..48942483 --- /dev/null +++ b/InterfaceQT4/monPlusieursASSDPanel.py @@ -0,0 +1,135 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +import prefs + +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * +from monPlusieursIntoPanel import MonPlusieursIntoPanel +from monPlusieursIntoPanel import DPlusInto +from qtCommun import QTPanel +from politiquesValidation import PolitiquePlusieurs +# Import des panels + +class MonPlusieursASSDPanel(MonPlusieursIntoPanel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonPlusieursASSDPanel" + QTPanel.__init__(self,node,parent) + DPlusInto.__init__(self,parent,fl) + + self.listeValeursCourantes=self.node.item.GetListeValeurs() + self.InitValeursCourantes() + self.DisplayListBoxCourantes() + self.DisplayListBoxPossibles() + + self.politique=PolitiquePlusieurs(node,parent) + self.connecterSignaux() + + def DisplayListBoxPossibles(self): + listeNomsSD = self.node.item.get_sd_avant_du_bon_type() + self.listBoxVal.clear() + for aSD in listeNomsSD: + self.listBoxVal.addItem( aSD) + if len(listeNomsSD) == 1 : + self.listBoxVal.setCurrentRow(1) + + def DisplayListBoxCourantes(self): + self.LBValeurs.clear() + for aSD in self.listNomsValeurs : + self.LBValeurs.addItem( aSD) + + def InitValeursCourantes(self): + self.listNomsValeurs=[] + for i in self.listeValeursCourantes : + self.listNomsValeurs.append(i.get_name()) + + def BOkPourListePressed(self): + if self.listeValeursCourantes == [] : + self.editor.affiche_infos("Pas de Validation d un groupe vide") + return + self.node.item.set_valeur(self.listeValeursCourantes) + self.editor.affiche_infos("Valeur Acceptée") + pass + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def Sup1Valeur(self): + indexCourant=self.LBValeurs.currentRow() + if indexCourant < 0 : return + if self.LBValeurs.isItemSelected(self.LBValeurs.item(indexCourant))== 0 : return + if self.LBValeurs.item(indexCourant).text()==QString("") : return + self.LBValeurs.takeItem(indexCourant) + + listeVal=[] + i=0 + for valeur in self.listeValeursCourantes : + if i != indexCourant : listeVal.append(valeur) + i = i+1 + self.listeValeursCourantes=listeVal + self.InitValeursCourantes() + self.DisplayListBoxCourantes() + self.DisplayListBoxPossibles() + + def Ajout1Valeur(self): + liste=[] + indexCourant=self.listBoxVal.currentRow() + if indexCourant == None : return + if self.listBoxVal.isItemSelected(self.listBoxVal.item(indexCourant))== 0 : return + if self.listBoxVal.item(indexCourant).text()==QString("") : return + liste.append(str(self.listBoxVal.item(indexCourant).text())) + if self.LBValeurs.currentItem() != None : + index= self.LBValeurs.currentRow()+ 1 + else : + index = 0 + + listeVal=[] + for valeur in self.listeValeursCourantes : + valeurSD,validite=self.node.item.eval_valeur(valeur) + if validite : listeVal.append(valeur) + validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) + self.Commentaire.setText(comm2) + if not validite : + self.editor.affiche_infos(comm) + else: + l1=self.listeValeursCourantes[:index] + l3=self.listeValeursCourantes[index:] + for valeur in listeRetour: + self.LBValeurs.insertItem(index,QString(str(valeur))) + item=self.LBValeurs.item(index) + item.setSelected(1) + self.LBValeurs.setCurrentItem(item) + index=index+1 + self.listeValeursCourantes=l1+listeRetour+l3 + self.InitValeursCourantes() + self.DisplayListBoxCourantes() + self.DisplayListBoxPossibles() + + diff --git a/InterfaceQT4/monPlusieursBasePanel.py b/InterfaceQT4/monPlusieursBasePanel.py new file mode 100644 index 00000000..4a67d947 --- /dev/null +++ b/InterfaceQT4/monPlusieursBasePanel.py @@ -0,0 +1,221 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +from desPlusieursBase import Ui_DPlusBase +from qtCommun import QTPanel +from qtSaisie import SaisieValeur +from politiquesValidation import PolitiquePlusieurs + +class DPlusBase (Ui_DPlusBase,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + +# Import des panels + +class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonPlusieursBasePanel" + QTPanel.__init__(self,node,parent) + DPlusBase.__init__(self,parent,fl) + self.politique=PolitiquePlusieurs(node,parent) + self.BuildLBValeurs() + self.listeValeursCourantes=self.node.item.GetListeValeurs() + self.InitCommentaire() + self.detruitBouton() + self.connecterSignaux() + + def connecterSignaux(self) : + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPourListePressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + self.connect(self.bParam,SIGNAL("clicked()"),self.BParametresPressed) + self.connect(self.bImport,SIGNAL("clicked()"),self.BImportPressed) + self.connect(self.BAjout1Val,SIGNAL("clicked()"),self.Ajout1Valeur) + self.connect(self.BSup1Val,SIGNAL("clicked()"),self.Sup1Valeur) + self.connect(self.LEValeur,SIGNAL("returnPressed()"),self.LEValeurPressed) + self.connect(self.BSalome,SIGNAL("clicked()"),self.BSalomePressed) + self.connect(self.BView2D,SIGNAL("clicked()"),self.BView2DPressed) + + def detruitBouton(self): + mc = self.node.item.get_definition() + type = mc.type[0] + print self.editor.salome + if not(('grma' in repr(type)) or ('grno' in repr(type))) or not(self.editor.salome) : + self.BSalome.close() + self.BView2D.close() + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def BuildLBValeurs(self): + # redefinit en raison de l heritage par monFonctionPanel + SaisieValeur.BuildLBValeurs(self) + + def BOkPourListePressed(self): + self.editor.init_modif() + if self.listeValeursCourantes == [] : + self.editor.affiche_infos("Pas de validation d un groupe vide") + return + self.node.item.set_valeur(self.listeValeursCourantes) + self.editor.affiche_infos("Valeur Acceptée") + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BParametresPressed(self): + QTPanel.BParametresPressed(self) + + def LEValeurPressed(self): + self.Ajout1Valeur() + + def Sup1Valeur(self): + index=self.LBValeurs.currentRow() + if index < 0 : return + if self.LBValeurs.isItemSelected(self.LBValeurs.item(index)) == 0 : return + self.LEValeur.setText(self.LBValeurs.item(index).text()) + self.LBValeurs.takeItem(index) + listeVal=[] + i=0 + for valeur in self.listeValeursCourantes : + if i != index : listeVal.append(valeur) + i = i+1 + self.listeValeursCourantes=listeVal + + + def Ajout1Valeur(self,valeur=None): + liste,validite=SaisieValeur.TraiteLEValeur(self,valeur) + if validite == 0 : return + if liste ==[] : return + + indexCourant=self.LBValeurs.currentRow() + if ( (self.LBValeurs.isItemSelected(self.LBValeurs.item(indexCourant )) == 0) + and (indexCourant > 0 )): + index=0 + else : + index=self.LBValeurs.currentRow() + 1 + + listeVal=[] + for valeur in self.listeValeursCourantes : + listeVal.append(valeur) + validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) + self.Commentaire.setText(comm2) + if not validite : + self.editor.affiche_infos(comm) + else: + self.LEValeur.setText(QString("")) + l1=self.listeValeursCourantes[:index] + l3=self.listeValeursCourantes[index:] + for valeur in listeRetour: + self.LBValeurs.insertItem(index,QString(str(valeur))) + item=self.LBValeurs.item(index) + item.setSelected(1) + self.LBValeurs.setCurrentItem(item) + index=index+1 + self.listeValeursCourantes=l1+listeRetour+l3 + self.editor.affiche_infos("Valeurs Ajoutées") + + def BImportPressed(self): + init=QString( self.editor.CONFIGURATION.rep_user) + fn = QFileDialog.getOpenFileName(self.node.appliEficas, + self.node.appliEficas.trUtf8('Fichier de données'), + QString(), + self.trUtf8('All Files (*)',)) + if fn == None : return + if fn == "" : return + from monSelectVal import MonSelectVal + MonSelectVal(file=fn,parent=self).show() + + def InitCommentaire(self): + commentaire="" + mc = self.node.item.get_definition() + d_aides = { 'TXM' : 'chaînes de caractères', + 'R' : 'réels', + 'I' : 'entiers', + 'C' : 'complexes'} + type = mc.type[0] + if not d_aides.has_key(type) : + if mc.min == mc.max: + commentaire="Entrez "+str(mc.min)+" valeurs " + else : + commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs " + else : + if mc.min == mc.max: + commentaire="Entrez "+str(mc.min)+" "+d_aides[type] + else : + commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max) +" " + d_aides[type] + aideval=self.node.item.aide() + commentaire=commentaire + "\n" + aideval + self.Commentaire.setText(QString(commentaire)) + + def BSalomePressed(self): + + genea=self.node.item.get_genealogie() + kwType = None + for e in genea: + if "GROUP_NO" in e: kwType = "GROUP_NO" + if "GROUP_MA" in e: kwType = "GROUP_MA" + + #print "BkwType",kwType + #print "editor", self.editor + selection, commentaire = self.editor.parent.appliEficas.selectGroupFromSalome(kwType,editor=self.editor) + if commentaire !="" : + self.Commentaire.setText(QString(commentaire)) + monTexte="" + if selection == [] : return + for geomElt in selection: + monTexte=geomElt+"," + monTexte= monTexte[0:-1] + self.LEValeur.setText(QString(monTexte)) + + def BView2DPressed(self): + valeur=self.LEValeur.text() + if valeur == QString("") : + valeur=self.LBValeurs.currentText() + if valeur == QString("") : return + valeur = str(valeur) + if valeur : + ok, msgError = self.editor.parent.appliEficas.displayShape(valeur) + if not ok: + self.editor.parent.appli.affiche_infos(msgError) + diff --git a/InterfaceQT4/monPlusieursIntoPanel.py b/InterfaceQT4/monPlusieursIntoPanel.py new file mode 100644 index 00000000..af2eaa45 --- /dev/null +++ b/InterfaceQT4/monPlusieursIntoPanel.py @@ -0,0 +1,155 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +from desPlusieursInto import Ui_DPlusInto +from qtCommun import QTPanel +from qtSaisie import SaisieValeur +from politiquesValidation import PolitiquePlusieurs + +class DPlusInto(Ui_DPlusInto,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + +class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonPlusieursIntoPanel" + QTPanel.__init__(self,node,parent) + DPlusInto.__init__(self,parent,fl) + self.politique=PolitiquePlusieurs(node,parent) + SaisieValeur.BuildLBValeurs(self) + self.listeValeursCourantes=self.node.item.GetListeValeurs() + SaisieValeur.RemplitPanel(self,self.listeValeursCourantes) + self.InitCommentaire() + self.connecterSignaux() + + def connecterSignaux(self) : + self.connect(self.listBoxVal, SIGNAL("itemDoubleClicked(QListWidgetItem*)" ), self.Ajout1Valeur ) + self.connect(self.LBValeurs,SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.Sup1Valeur) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPourListePressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + self.connect(self.BAjout1Val,SIGNAL("clicked()"),self.Ajout1Valeur) + self.connect(self.BSup1Val,SIGNAL("clicked()"),self.Sup1Valeur) + + + def BOkPourListePressed(self): + if self.listeValeursCourantes == [] : + self.editor.affiche_infos("Pas de validation d un groupe vide") + return + self.node.item.set_valeur(self.listeValeursCourantes) + self.editor.affiche_infos("Valeur Acceptée") + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def Sup1Valeur(self): + indexCourant=self.LBValeurs.currentRow() + if indexCourant == None : return + if self.LBValeurs.isItemSelected(self.LBValeurs.item(indexCourant))== 0 : return + if self.LBValeurs.item(indexCourant).text()==QString("") : return + self.LBValeurs.takeItem(indexCourant) + listeVal=[] + i=0 + for valeur in self.listeValeursCourantes : + if i != indexCourant : listeVal.append(valeur) + i = i+1 + self.listeValeursCourantes=listeVal + SaisieValeur.RemplitPanel(self,self.listeValeursCourantes) + + def Ajout1Valeur(self): + liste=[] + + indexCourant=self.listBoxVal.currentRow() + if indexCourant == None : return + if self.listBoxVal.isItemSelected(self.listBoxVal.item(indexCourant))== 0 : return + if self.listBoxVal.item(indexCourant).text()==QString("") : return + liste.append(str(self.listBoxVal.item(indexCourant).text())) + if self.LBValeurs.currentItem() != None : + index= self.LBValeurs.currentRow()+ 1 + else : + index = 0 + listeVal=[] + for valeur in self.listeValeursCourantes : + listeVal.append(valeur) + validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) + self.Commentaire.setText(comm2) + if not validite : + self.editor.affiche_infos(comm) + else: + l1=self.listeValeursCourantes[:index] + l3=self.listeValeursCourantes[index:] + for valeur in listeRetour: + self.LBValeurs.insertItem(index,QString(str(valeur))) + item=self.LBValeurs.item(index) + item.setSelected(1) + self.LBValeurs.setCurrentItem(item) + index=index+1 + self.listeValeursCourantes=l1+listeRetour+l3 + SaisieValeur.RemplitPanel(self,self.listeValeursCourantes) + + def InitCommentaire(self): + commentaire="" + mc = self.node.item.get_definition() + d_aides = { 'TXM' : 'chaînes de caractères', + 'R' : 'réels', + 'I' : 'entiers', + 'C' : 'complexes'} + type = mc.type[0] + if not d_aides.has_key(type) : + if mc.min == mc.max: + commentaire="Entrez "+str(mc.min)+" valeurs " + else : + commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs " + else : + if mc.min == mc.max: + commentaire="Entrez "+str(mc.min)+" "+d_aides[type] + else : + commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" "+d_aides[type] + aideval=self.node.item.aide() + commentaire=commentaire + "\n" + aideval + self.Commentaire.setText(QString(commentaire)) + diff --git a/InterfaceQT4/monPoursuitePanel.py b/InterfaceQT4/monPoursuitePanel.py new file mode 100644 index 00000000..2143f273 --- /dev/null +++ b/InterfaceQT4/monPoursuitePanel.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +import os,traceback,sys +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +from monMacroPanel import MonMacroPanel + + +# Import des panels +# La page est ajoutee a partir du python genere par designer + +class MonPoursuitePanel(MonMacroPanel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + MonMacroPanel.__init__(self,node,parent,name,fl) + self.node=node + self.ajoutPageOk() + + def ajoutPageOk(self) : + self.TabPage = QtGui.QWidget() + self.TabPage.setGeometry(QtCore.QRect(0,0,499,433)) + self.TabPage.setObjectName("TabPage") + self.gridLayout_2 = QtGui.QGridLayout(self.TabPage) + self.gridLayout_2.setObjectName("gridLayout_2") + self.textLabel1_3 = QtGui.QLabel(self.TabPage) + self.textLabel1_3.setWordWrap(False) + self.textLabel1_3.setObjectName("textLabel1_3") + self.gridLayout_2.addWidget(self.textLabel1_3,0,0,1,1) + self.LENomFichier = QtGui.QLineEdit(self.TabPage) + self.LENomFichier.setMinimumSize(QtCore.QSize(470,40)) + self.LENomFichier.setObjectName("LENomFichier") + self.gridLayout_2.addWidget(self.LENomFichier,1,0,1,1) + spacerItem = QtGui.QSpacerItem(21,190,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridLayout_2.addItem(spacerItem,2,0,1,1) + self.hboxlayout = QtGui.QHBoxLayout() + self.hboxlayout.setObjectName("hboxlayout") + spacerItem1 = QtGui.QSpacerItem(331,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.hboxlayout.addItem(spacerItem1) + self.BBrowse = QtGui.QPushButton(self.TabPage) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.BBrowse.sizePolicy().hasHeightForWidth()) + self.BBrowse.setSizePolicy(sizePolicy) + self.BBrowse.setMinimumSize(QtCore.QSize(140,50)) + self.BBrowse.setObjectName("BBrowse") + self.hboxlayout.addWidget(self.BBrowse) + self.gridLayout_2.addLayout(self.hboxlayout,3,0,1,1) + spacerItem2 = QtGui.QSpacerItem(21,87,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridLayout_2.addItem(spacerItem2,4,0,1,1) + self.TWChoix.addTab(self.TabPage,"") + self.textLabel1_3.setText(QtGui.QApplication.translate("DPour", "La commande POURSUITE requiert un nom de Fichier :", None, QtGui.QApplication.UnicodeUTF8)) + self.BBrowse.setText(QtGui.QApplication.translate("DPour", "Edit", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.TabPage), QtGui.QApplication.translate("DPour", "Fichier Poursuite", None, QtGui.QApplication.UnicodeUTF8)) + + self.LENomFichier.setText(self.node.item.object.jdc_aux.nom) + self.connect(self.BBrowse,SIGNAL("clicked()"),self.BBrowsePressed) + + + def BBrowsePressed(self): + self.node.makeEdit() + + diff --git a/InterfaceQT4/monRacinePanel.py b/InterfaceQT4/monRacinePanel.py new file mode 100644 index 00000000..5b9fa79b --- /dev/null +++ b/InterfaceQT4/monRacinePanel.py @@ -0,0 +1,114 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desRacine import Ui_DRac +from qtCommun import QTPanel +from qtCommun import QTPanelTBW2 + +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +class DRac(Ui_DRac,QWidget): + def __init__(self,parent ,modal = 0 ) : + QWidget.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + + +# Import des panels + +class MonRacinePanel(DRac,QTPanelTBW2): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonRacinePanel" + DRac.__init__(self,parent,0) + self.connecterSignaux() + QTPanel.__init__(self,node,parent) + QTPanelTBW2.__init__(self,node,parent,racine=1) + self.a=0 + + def connecterSignaux(self): + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOkPressed(self): + self.DefCmd() + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def BNextPressed(self): + QTPanelTBW2.BNextPressed(self) + + def BuildTabCommand(self): + QTPanelTBW2.BuildLBNouvCommande(self) + + def LEFiltreTextChanged(self): + QTPanelTBW2.LEFiltreTextChanged(self) + + def LEfiltreReturnPressed(self): + QTPanelTBW2.LEfiltreReturnPressed(self) + + def LBNouvCommandeClicked(self): + QTPanelTBW2.LBNouvCommandeClicked(self) + + def AppelleBuildLBRegles(self): + listeRegles=self.node.item.get_regles() + listeNomsEtapes = self.node.item.get_l_noms_etapes() + self.BuildLBRegles(listeRegles,listeNomsEtapes) + + def DefCmd(self): + if self.LBNouvCommande.currentItem()== None : return + name=str(self.LBNouvCommande.currentItem().text()) + if name==QString(" "): return + if name.find("GROUPE :")==0 : return + print self.editor + print self.editor.__class__ + self.editor.init_modif() + print self.node.__class__ + new_node = self.node.append_child(name,'first') diff --git a/InterfaceQT4/monSelectVal.py b/InterfaceQT4/monSelectVal.py new file mode 100644 index 00000000..24e88397 --- /dev/null +++ b/InterfaceQT4/monSelectVal.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +# Modules Eficas + +from desSelectVal import Ui_DSelVal +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +class DSelVal(Ui_DSelVal,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + self.setupUi(self) + +class MonSelectVal(DSelVal): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,file,parent,name = None,fl = 0): + #print "MonSelectVal" + self.FonctPanel=parent + DSelVal.__init__(self,parent,0) + self.separateur=" " + self.texte=" " + self.textTraite="" + self.file=str(file) + self.readVal() + self.initVal() + self.connecterSignaux() + + def connecterSignaux(self) : + self.connect(self.Bespace,SIGNAL("clicked()"),self.SelectEsp) + self.connect(self.BpointVirgule,SIGNAL("clicked()"),self.SelectPoint) + self.connect(self.Bvirgule,SIGNAL("clicked()"),self.SelectVir) + self.connect(self.BImportSel,SIGNAL("clicked()"),self.BImportSelPressed) + self.connect(self.BImportTout,SIGNAL("clicked()"),self.BImportToutPressed) + + def readVal(self): + f = open(self.file, "rb") + self.texte = f.read() + f.close() + + def initVal(self): + self.TBtext.clear() + self.TBtext.setText(self.texte) + + def SelectEsp(self): + self.separateur=" " + + def SelectVir(self): + self.separateur="," + + def SelectPoint(self): + self.separateur=";" + + def BImportSelPressed(self): + + texte = self.TBtext.textCursor().selectedText() + textTraite=texte.replace(u'\u2029',"\n") + self.textTraite=str(textTraite) + self.Traitement() + + def BImportToutPressed(self): + self.textTraite=self.texte + self.Traitement() + + def Traitement(self): + import string + if self.textTraite == "" : return + if self.textTraite[-1]=="\n" : self.textTraite=self.textTraite[0:-1] + self.textTraite=string.replace(self.textTraite,"\n",self.separateur) + liste1=self.textTraite.split(self.separateur) + liste=[] + for val in liste1 : + val=str(val) + try : + val=eval(val,{}) + except : + pass + liste.append(val) + self.FonctPanel.AjoutNValeur(liste) diff --git a/InterfaceQT4/monUniqueASSDPanel.py b/InterfaceQT4/monUniqueASSDPanel.py new file mode 100644 index 00000000..474f62fa --- /dev/null +++ b/InterfaceQT4/monUniqueASSDPanel.py @@ -0,0 +1,100 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas + +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +from desUniqueASSD import Ui_DUnASSD +from qtCommun import QTPanel +from qtSaisie import SaisieValeur +from politiquesValidation import PolitiqueUnique + +class DUnASSD(Ui_DUnASSD,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + +# Import des panels + +class MonUniqueASSDPanel(DUnASSD,QTPanel,SaisieValeur): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonUniqueASSDPanel" + self.editor=parent + QTPanel.__init__(self,node,parent) + DUnASSD.__init__(self,parent,fl) + self.politique=PolitiqueUnique(node,parent) + self.InitListBoxASSD() + self.InitCommentaire() + self.connecterSignaux() + + def connecterSignaux(self) : + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.listBoxASSD,SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.ClicASSD) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + + + def BOkPressed(self): + self.ClicASSD() + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def InitCommentaire(self): + mc = self.node.item.get_definition() + try : + type = mc.type[0].__name__ + except : + type = str(mc.type[0]) + if len(mc.type)>1 : + for typ in mc.type[1:] : + try : + l=typ.__name__ + except: + l=str(typ) + type = type + ' ou '+l + commentaire="Un objet de type "+type+" est attendu" + aideval=self.node.item.aide() + commentaire=commentaire +"\n"+ aideval + self.Commentaire.setText(QString(commentaire)) diff --git a/InterfaceQT4/monUniqueBasePanel.py b/InterfaceQT4/monUniqueBasePanel.py new file mode 100644 index 00000000..24792e45 --- /dev/null +++ b/InterfaceQT4/monUniqueBasePanel.py @@ -0,0 +1,152 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +from desUniqueBase import Ui_DUnBase +from qtCommun import QTPanel +from qtSaisie import SaisieValeur +from politiquesValidation import PolitiqueUnique + +class DUnBase(Ui_DUnBase,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + +# Import des panels + +class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonUniqueBasePanel" + self.editor=parent + QTPanel.__init__(self,node,parent) + DUnBase.__init__(self,parent,fl) + self.politique=PolitiqueUnique(node,parent) + self.InitLineEditVal() + self.InitCommentaire() + self.detruitBouton() + self.connecterSignaux() + + def connecterSignaux(self) : + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOk2Pressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.LEValeurPressed) + self.connect(self.bParametres,SIGNAL("pressed()"),self.BParametresPressed) + self.connect(self.BSalome,SIGNAL("pressed()"),self.BSalomePressed) + self.connect(self.BView2D,SIGNAL("clicked()"),self.BView2DPressed) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + + def detruitBouton(self): + mc = self.node.item.get_definition() + type = mc.type[0] + if not('grma' in repr(type)) or not(self.editor.salome) : + self.BSalome.close() + self.BView2D.close() + + def InitLineEditVal(self): + valeur=self.node.item.get_valeur() + valeurTexte=self.politique.GetValeurTexte(valeur) + if valeurTexte != None : + if repr(valeurTexte.__class__).find("PARAMETRE") > 0: + str = QString(repr(valeur)) + else : + try : + str=QString("").setNum(valeurTexte) + except : + str=QString(valeurTexte) + self.lineEditVal.setText(str) + + + def InitCommentaire(self): + mc = self.node.item.get_definition() + d_aides = { 'TXM' : "Une chaîne de caractères est attendue", + 'R' : "Un réel est attendu", + 'I' : "Un entier est attendu"} + type = mc.type[0] + commentaire=d_aides.get(type,"Type de base inconnu") + aideval=self.node.item.aide() + commentaire=commentaire +"\n"+ aideval + self.Commentaire.setText(QString(commentaire)) + + def BOk2Pressed(self): + SaisieValeur.BOk2Pressed(self) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def LEValeurPressed(self): + SaisieValeur.LEValeurPressed(self) + + def BParametresPressed(self): + QTPanel.BParametresPressed(self) + + def Ajout1Valeur(self,valeur): + SaisieValeur.LEValeurPressed(self,valeur) + + def BSalomePressed(self): + genea=self.node.item.get_genealogie() + kwType = None + for e in genea: + if "GROUP_NO" in e: kwType = "GROUP_NO" + if "GROUP_MA" in e: kwType = "GROUP_MA" + + selection, commentaire = self.editor.parent.appliEficas.selectGroupFromSalome(kwType,editor=self.editor) + if commentaire !="" : + self.Commentaire.setText(QString(commentaire)) + monTexte="" + if selection == [] : return + for geomElt in selection: + monTexte=geomElt+"," + monTexte= monTexte[0:-1] + self.LEValeur.setText(QString(monTexte)) + + def BView2DPressed(self): + valeur=self.LEValeur.text() + if valeur == QString("") : return + valeur = str(valeur) + if valeur : + ok, msgError = self.editor.parent.appliEficas.displayShape(valeur) + if not ok: + self.editor.parent.appli.affiche_infos(msgError) + diff --git a/InterfaceQT4/monUniqueCompPanel.py b/InterfaceQT4/monUniqueCompPanel.py new file mode 100644 index 00000000..22eb994f --- /dev/null +++ b/InterfaceQT4/monUniqueCompPanel.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os,re + +# Modules Eficas +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +from desUniqueComp import Ui_DUnComp +from qtCommun import QTPanel +from politiquesValidation import PolitiqueUnique + +class DUnComp(Ui_DUnComp,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + + +# Import des panels + +class MonUniqueCompPanel(DUnComp,QTPanel,PolitiqueUnique): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonUniqueCompPanel" + QTPanel.__init__(self,node,parent) + DUnComp.__init__(self,parent,fl) + self.politique=PolitiqueUnique(node,parent) + self.InitLinesVal() + self.InitCommentaire() + self.connecterSignaux() + + def connecterSignaux(self): + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + self.connect(self.LEImag,SIGNAL("returnPressed()"),self.LEImagRPressed) + self.connect(self.LEReel,SIGNAL("returnPressed()"),self.LEReelRPressed) + self.connect(self.LEcomp,SIGNAL("returnPressed()"),self.LEcompRPressed) + + + def InitLinesVal(self): + valeur=self.node.item.get_valeur() + if valeur == None or valeur == '' : return + if type(valeur) not in (types.ListType,types.TupleType) : + self.LEcomp.setText(str(valeur)) + else : + typ_cplx,x1,x2=valeur + self.LEReel.setText(str(x1)) + self.LEImag.setText(str(x2)) + if typ_cplx == "RI" : + self.RBRI.setDown(1) + else : + self.RBMP.setDown(1) + + + def LEcompRPressed(self) : + self.LEReel.clear() + self.LEImag.clear() + commentaire="expression valide" + valeur = str(self.LEcomp.text()) + d={} + try : + v=eval(valeur,d) + except : + commentaire="expression invalide" + self.editor.affiche_infos(commentaire) + return + try : + i=v.imag + except : + commentaire="expression n est pas de la forme a+bj" + self.editor.affiche_infos(commentaire) + + def LEReelRPressed(self): + self.LEcomp.clear() + commentaire="expression valide" + valeur = str(self.LEReel.text()) + try : + a=string.atof(valeur) + except : + commentaire="expression invalide" + self.editor.affiche_infos(commentaire) + + def LEImagRPressed(self): + self.LEcomp.clear() + commentaire="expression valide" + valeur = str(self.LEImag.text()) + try : + a=string.atof(valeur) + except : + commentaire="expression invalide" + self.editor.affiche_infos(commentaire) + + def BOkPressed(self): + if self.LEcomp.text()== "" : + valeur = self.getValeurAster() + else : + if self.LEReel.text() != "" or self.LEImag.text() != "" : + commentaire="entrer une seule valeur SVP" + self.editor.affiche_infos(commentaire) + return + valeur= self.getValeurComp() + self.politique.RecordValeur(valeur) + + def getValeurAster(self): + """ + Retourne le complexe saisi par l'utilisateur + """ + l=[] + if (self.RBMP.isChecked() == 1 ) : + l.append("MP") + elif (self.RBRI.isChecked() == 1) : + l.append("RI") + else : + commentaire="saisir le type de complexe" + self.editor.affiche_infos(commentaire) + return None + try : + l.append(string.atof(str(self.LEReel.text()))) + l.append(string.atof(str(self.LEImag.text()))) + except : + return None + return `tuple(l)` + + def getValeurComp(self): + commentaire="expression valide" + valeur = str(self.LEcomp.text()) + d={} + try : + v=eval(valeur,d) + except : + commentaire="expression invalide" + self.editor.affiche_infos(commentaire) + return None + try : + i=v.imag + except : + commentaire="expression n est pas de la forme a+bj" + self.editor.affiche_infos(commentaire) + return None + return v + + def InitCommentaire(self): + commentaire='Un complexe est attendu' + aideval=self.node.item.aide() + commentaire=commentaire +"\n"+ aideval + self.Commentaire.setText(QString(commentaire)) + + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT4/monUniqueIntoPanel.py b/InterfaceQT4/monUniqueIntoPanel.py new file mode 100644 index 00000000..ab634816 --- /dev/null +++ b/InterfaceQT4/monUniqueIntoPanel.py @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +from desUniqueInto import Ui_DUnIn +from qtCommun import QTPanel +from qtSaisie import SaisieValeur +from politiquesValidation import PolitiqueUnique + +class DUnIn(Ui_DUnIn,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + + +class MonUniqueIntoPanel(DUnIn,QTPanel,SaisieValeur): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonUniqueIntoPanel" + QTPanel.__init__(self,node,parent) + DUnIn.__init__(self,parent,fl) + SaisieValeur.RemplitPanel(self) + self.politique=PolitiqueUnique(node,parent) + self.connecterSignaux() + + def connecterSignaux(self) : + self.connect(self.listBoxVal, SIGNAL("itemDoubleClicked(QListWidgetItem*)" ), self.ClicValeur ) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + + def ClicValeur(self): + SaisieValeur.ClicValeur(self) + self.editor.init_modif() + + def BOkPressed(self): + SaisieValeur.BOkPressed(self) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT4/monUniqueSDCOIntoPanel.py b/InterfaceQT4/monUniqueSDCOIntoPanel.py new file mode 100644 index 00000000..c968b0f7 --- /dev/null +++ b/InterfaceQT4/monUniqueSDCOIntoPanel.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +import prefs + +from PyQt4 import * +from PyQt4.QtGui import * + +from desUniqueSDCOInto import DUnSDCOInto +from qtCommun import QTPanel +from qtSaisie import SaisieSDCO +from politiquesValidation import PolitiqueUnique + +# Import des panels + +class MonUniqueSDCOIntoPanel(DUnSDCOInto,QTPanel,SaisieSDCO): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonUniqueSDCOIntoPanel" + QTPanel.__init__(self,node,parent) + DUnSDCOInto.__init__(self,parent,name,fl) + self.initLBSDCO() + + def initLBSDCO(self): + listeNomsSDCO = self.node.item.get_sd_avant_du_bon_type() + for aSDCO in listeNomsSDCO: + self.LBSDCO.insertItem( aSDCO) + valeur = self.node.item.get_valeur() + if valeur != "" and valeur != None : + self.LESDCO.setText(QString(valeur.nom)) + + + def LBSDCOReturnPressed(self): + """ + Teste si la valeur fournie par l'utilisateur est une valeur permise : + - si oui, l'enregistre + - si non, restaure l'ancienne valeur + """ + nomConcept=str(self.LBSDCO.currentText()) + self.LESDCO.clear() + self.editor.init_modif() + anc_val = self.node.item.get_valeur() + test_CO=self.node.item.is_CO(anc_val) + + valeur,validite=self.node.item.eval_valeur(nomConcept) + test = self.node.item.set_valeur(valeur) + if not test : + commentaire = "impossible d'évaluer : %s " %`valeur` + elif validite: + commentaire = "Valeur du mot-clé enregistrée" + if test_CO: + # il faut egalement propager la destruction de l'ancien concept + self.node.item.delete_valeur_co(valeur=anc_val) + self.node.item.object.etape.get_type_produit(force=1) + self.node.item.object.etape.parent.reset_context() + else : + commentaire = self.node.item.get_cr() + self.reset_old_valeur(anc_val,mess=mess) + self.editor.affiche_infos(commentaire) + self.Commentaire.setText(commentaire) + + def LESDCOReturnPressed(self) : + self.LBSDCO.clearSelection() + SaisieSDCO.LESDCOReturnPressed(self) + + def BOkPressed(self): + self.LESDCOReturnPressed() + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT4/monUniqueSDCOPanel.py b/InterfaceQT4/monUniqueSDCOPanel.py new file mode 100644 index 00000000..d00b6e04 --- /dev/null +++ b/InterfaceQT4/monUniqueSDCOPanel.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os + +# Modules Eficas +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +from desUniqueSDCO import Ui_DUnSDCO +from qtCommun import QTPanel +from qtSaisie import SaisieSDCO + +class DUnSDCO(Ui_DUnSDCO,QDialog): + def __init__(self,parent ,modal ) : + QDialog.__init__(self,parent) + if hasattr(parent,"leLayout"): + parent.leLayout.removeWidget(parent.leLayout.widgetActive) + parent.leLayout.widgetActive.close() + parent.leLayout.addWidget(self) + parent.leLayout.widgetActive=self + else: + parent.partieDroite=QWidget() + parent.leLayout=QGridLayout(parent.partieDroite) + parent.leLayout.addWidget(self) + parent.addWidget(parent.partieDroite) + parent.leLayout.widgetActive=self + self.setupUi(self) + +# Import des panels + +class MonUniqueSDCOPanel(DUnSDCO,QTPanel,SaisieSDCO): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def __init__(self,node, parent = None,name = None,fl = 0): + #print "MonUniquesSDCOPanel" + QTPanel.__init__(self,node,parent) + DUnSDCO.__init__(self,parent,fl) + valeur = self.node.item.get_valeur() + if valeur != "" and valeur != None : + self.LESDCO.setText(QString(valeur.nom)) + self.connecterSignaux() + + def connecterSignaux(self) : + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + self.connect(self.LESDCO,SIGNAL("returnPressed()"),self.LESDCOReturnPressed) + + + + def BOkPressed(self): + SaisieSDCO.LESDCOReturnPressed(self) + + def BSupPressed(self): + QTPanel.BSupPressed(self) + + def BOuiPressed(self): + self.Commentaire.setText("Aucun Objet de ce type n'est defini") + self.rbOui.setChecked(1) + + def LESDCOReturnPressed(self): + """ + Lit le nom donné par l'utilisateur au concept de type CO qui doit être + la valeur du MCS courant et stocke cette valeur + """ + SaisieSDCO.LESDCOReturnPressed(self) + + def ViewDoc(self): + QTPanel.ViewDoc(self) + diff --git a/InterfaceQT4/politiquesValidation.py b/InterfaceQT4/politiquesValidation.py new file mode 100644 index 00000000..a976f971 --- /dev/null +++ b/InterfaceQT4/politiquesValidation.py @@ -0,0 +1,160 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import types + + +#------------------ +class Validation : +#------------------ + def __init__(self,node,parent) : + self.node=node + self.parent=parent + + def TesteUneValeur(self,valeurentree): + valeur,validite=self.node.item.eval_valeur(valeurentree) + if not validite : + commentaire = "impossible d'évaluer : %s " %`valeurentree` + return valeur,validite,commentaire + + testtype,commentaire = self.node.item.object.verif_type(valeur) + if not testtype : + return valeur,0,commentaire + + valide=self.node.item.valide_item(valeur) + if type(valide) == types.TupleType: + validite,commentaire=valide + else : + validite=valide + commentaire=" " + + if not validite : + commentaire = "impossible d'évaluer : %s " %`valeurentree` + return valeur, validite, commentaire + +# ---------------------------------------------------------------------------------------- +# Méthodes utilisées pour la manipulation des items en notation scientifique +# a mettre au point +# ---------------------------------------------------------------------------------------- + def SetValeurTexte(self,texteValeur) : + try : + if "R" in self.node.item.object.definition.type: + if texteValeur[0] != "'": + clef=eval(texteValeur) + if str(clef) != str(texteValeur) : + self.node.item.object.init_modif() + clefobj=self.node.item.object.GetNomConcept() + if not self.parent.dict_reels.has_key(clefobj): + self.parent.dict_reels[clefobj] = {} + self.parent.dict_reels[clefobj][clef]=texteValeur + self.parent.dict_reels[clefobj] + self.node.item.object.fin_modif() + except: + pass + + def GetValeurTexte(self,valeur) : + valeurTexte=valeur + if "R" in self.node.item.object.definition.type: + clefobj=self.node.item.object.GetNomConcept() + if self.parent.dict_reels.has_key(clefobj): + if self.parent.dict_reels[clefobj].has_key(valeur): + valeurTexte=self.parent.dict_reels[clefobj][valeur] + return valeurTexte + +#------------------------------------ +class PolitiqueUnique(Validation) : +#------------------------------------ + """ + classe servant pour les entrees ne demandant qu un mot clef + """ + def __init__(self,node,parent): + Validation.__init__(self,node,parent) + + def RecordValeur(self,valeurentree): + if self.parent.modified == 'n' : self.parent.init_modif() + ancienne_val = self.node.item.get_valeur() + valeur,validite,commentaire =self.TesteUneValeur(valeurentree) + if validite : + validite=self.node.item.set_valeur(valeur) + if self.node.item.isvalid(): + commentaire = "Valeur du mot-clé enregistrée" + self.SetValeurTexte(str(valeurentree)) + else: + cr = self.node.item.get_cr() + commentaire = "Valeur du mot-clé non autorisée "+cr.get_mess_fatal() + self.node.item.set_valeur(ancienne_val) + return validite, commentaire + + +#------------------------ +class PolitiquePlusieurs: +#------------------------ + """ + classe servant pour les entrees ne demandant qu un mot clef + """ + def __init__(self,node,parent) : + self.node=node + self.parent=parent + + + def AjoutValeurs(self,listevaleur,index,listecourante): + listeRetour=[] + commentaire="Nouvelle valeur acceptée" + commentaire2="" + valide=1 + if listevaleur==None: return + if listevaleur=="": return + if not( type(listevaleur) in (types.ListType,types.TupleType)) : + listevaleur=tuple(listevaleur) + for valeur in listevaleur : + # On teste le type de la valeur + valide=self.node.item.valide_item(valeur) + if not valide : + #print self.__class__ + #if not testtype : + try : + valeur,valide=self.node.item.eval_valeur(valeur) + valide,commentaire = self.node.item.object.verif_type(valeur) + except : + #return testtype,commentaire,"",listeRetour + pass + if not valide: + commentaire="Valeur "+str(valeur)+ " incorrecte : ajout à la liste refusé" + commentaire2=self.node.item.info_erreur_item() + return valide,commentaire,commentaire2,listeRetour + + # On valide la liste obtenue + encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante) + if not encorevalide : + 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() + if len(listecourante) + 1 >= max : + commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé" + return valide,commentaire,commentaire2,listeRetour + if len(listecourante) + 1 > min : + return valide,commentaire,commentaire2,listeRetour + # On ajoute la valeur testee a la liste courante et a la liste acceptee + listecourante.insert(index,valeur) + index=index+1 + listeRetour.append(valeur) + + return valide,commentaire,commentaire2,listeRetour diff --git a/InterfaceQT4/prefsQT.py b/InterfaceQT4/prefsQT.py new file mode 100644 index 00000000..ef1aa899 --- /dev/null +++ b/InterfaceQT4/prefsQT.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- + +# ====================================================================== +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +lang='fr' + diff --git a/InterfaceQT4/qtCommun.py b/InterfaceQT4/qtCommun.py new file mode 100644 index 00000000..5a9ed167 --- /dev/null +++ b/InterfaceQT4/qtCommun.py @@ -0,0 +1,325 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +import traceback + +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * +import prefsQT + +# Import des panels + +# ---------- # +class QTPanel: +# ---------- # + """ + Classe contenant les méthodes Qt communes a tous les panneaux droits + Tous les panneaux Mon...Panel héritent de cette classe + Gére plus précisement : + - l affichage de la doc + - le bouton Suppression (BSupPressed) + - la mutualisation de l affichage des regles + """ + def __init__(self,node, parent = None): + self.editor = parent + self.node = node + + def BSupPressed(self): + self.editor.init_modif() + self.node.delete() + + def ViewDoc(self) : + cle_doc = self.node.item.get_docu() + if cle_doc == None : + QMessageBox.information( self.editor, "Documentation Vide", \ + "Aucune documentation Aster n'est associée à ce noeud") + return + cle_doc = string.replace(cle_doc,'.','') + cle_doc = string.replace(cle_doc,'-','') + commande = self.editor.appliEficas.CONFIGURATION.exec_acrobat + try : + f=open(commande,"rb") + except : + texte="impossible de trouver la commande " + commande + QMessageBox.information( self.editor, "Lecteur PDF", texte) + return + nom_fichier = cle_doc+".pdf" + fichier = os.path.abspath(os.path.join(self.editor.CONFIGURATION.path_doc, + nom_fichier)) + try : + f=open(fichier,"rb") + except : + texte="impossible d'ouvrir " + fichier + QMessageBox.information( self.editor, "Documentation Vide", texte) + return + if os.name == 'nt': + os.spawnv(os.P_NOWAIT,commande,(commande,fichier,)) + elif os.name == 'posix': + script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier) + pid = os.system(script) + + def BOkPressed(self): + """ Impossible d utiliser les vrais labels avec designer ?? """ + label=self.TWChoix.tabText(self.TWChoix.currentIndex()) + #print label + if label==QString("Nouvelle Commande"): + self.DefCmd() + if label==QString("Nommer Concept"): + self.LENomConceptReturnPressed() + if label==QString("Ajouter Mot-Clef"): + if self.LBMCPermis.currentItem() == None : return + self.DefMC(self.LBMCPermis.currentItem()) + if label==QString("Définition Formule"): + self.BOkPressedFormule() + if label==QString("Valeur Parametre"): + self.BOkParamPressed() + if label==QString("Fichier Include"): + self.BOkIncPressed() + + def BParametresPressed(self): + liste=self.node.item.get_liste_param_possible() + from monListeParamPanel import MonListeParamPanel + MonListeParamPanel(liste=liste,parent=self).show() + + def AppelleBuildLBRegles(self): + listeRegles = self.node.item.get_regles() + listeNomsEtapes = self.node.item.get_mc_presents() + self.BuildLBRegles(listeRegles,listeNomsEtapes) + + + def BuildLBRegles(self,listeRegles,listeNomsEtapes): + self.LBRegles.clear() + if len(listeRegles) > 0: + for regle in listeRegles : + texteRegle=regle.gettext() + texteMauvais,test = regle.verif(listeNomsEtapes) + for ligne in texteRegle.split("\n") : + if ligne == "" : + self.LBRegles.addItem(ligne) + continue + if ligne[0]=="\t" : + ligne=" "+ligne[1:] + if test : + self.LBRegles.addItem(ligne) + else : + + monItem=QListWidgetItem(ligne) + monItem.setForeground(Qt.red) + self.LBRegles.addItem(monItem) + + +# ----------------------- # +class QTPanelTBW1(QTPanel): +# ----------------------- # + """ + Classe contenant les méthodes nécessaires a l onglet "Ajouter Mot-Clef" + hérite de QTPanel # Attention n appelle pas le __init__ + Gére plus précisement : + """ + def __init__(self,node, parent = None): + self.editor = parent + self.node = node + self.BuildLBMCPermis() + self.AppelleBuildLBRegles() + + def BuildLBMCPermis(self): + self.LBMCPermis.clear() + QObject.connect(self.LBMCPermis,SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.DefMC) + jdc = self.node.item.get_jdc() + genea =self.node.item.get_genealogie() + liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico) + for aMc in liste_mc: + self.LBMCPermis.addItem( aMc) + + + def DefMC(self,item): + """ On ajoute un mot-clé à la commande : subnode """ + name=str(item.text()) + self.editor.init_modif() + self.node.append_child(name) + +# ---------------------------- # +class QTPanelTBW2(QTPanel): +# ---------------------------- # + """ + Classe contenant les méthodes nécessaires a l onglet "Nouvelle Commande" + hérite de QTPanel # Attention n appelle pas le __init__ + Gére plus précisement : + """ + + def __init__(self,node, parent = None, racine = 0): + self.editor = parent + self.node = node + self.BuildLBNouvCommande() + self.NbRecherches = 0 + if racine == 1 : self.AppelleBuildLBRegles() + + + def BuildLBNouvCommande(self): + self.LBNouvCommande.clear() + + jdc=self.node.item.object.get_jdc_root() + if self.RBalpha.isChecked(): + listeCmd = jdc.get_liste_cmd() + for aCmd in listeCmd: + self.LBNouvCommande.addItem( aCmd ) + else : + listeGroupes,dictGroupes=jdc.get_groups() + for grp in listeGroupes: + if grp == "CACHE":continue + listeCmd=dictGroupes[grp] + texte="GROUPE : "+grp + self.LBNouvCommande.addItem( texte ) + self.LBNouvCommande.addItem( " " ) + for aCmd in listeCmd: + self.LBNouvCommande.addItem( aCmd) + self.LBNouvCommande.addItem( " " ) + #QObject.connect( self.LBNouvCommande, SIGNAL("itemClicked(QListWidgetItem*)"),self.DefCmd ) + QObject.connect( self.LBNouvCommande, SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.DefCmd ) + + def DefCmd(self): + if (self.editor.focusWidget())!=self.LBNouvCommande : + return + if self.LBNouvCommande.currentItem()== 0 : return + if self.LBNouvCommande.currentItem()== None : return + name=str(self.LBNouvCommande.currentItem().text()) + if name==QString(" "): + return + if name.find("GROUPE :")==0 : + return + self.editor.init_modif() + print self.node + print name + new_node = self.node.append_brother(name,'after') + + + def LEFiltreTextChanged(self): + self.NbRecherches = 0 + try : + MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[0] + self.LBNouvCommande.setCurrentItem(MonItem) + except : + pass + + def LEfiltreReturnPressed(self): + self.DefCmd() + + def BNextPressed(self): + self.NbRecherches = self.NbRecherches + 1 + monItem = None + try : + MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[self.NbRecherches] + except : + try : # ce try sert si la liste est vide + MonItem=self.LBNouvCommande.findItems(self.LEFiltre.text().toUpper(),Qt.MatchContains)[0] + self.NbRecherches = 0 + except : + return + self.LBNouvCommande.setCurrentItem(MonItem) + + def LBNouvCommandeClicked(self): + name=str(self.LBNouvCommande.currentText()) + + +# ---------------------------- # +class QTPanelTBW3(QTPanel): +# ---------------------------- # + + """ + Classe contenant les méthodes nécessaires a l onglet "Nommer Concept" + si non réentrant + hérite de QTPanel # Attention n appelle pas le __init__ + Gére plus précisement : + """ + + def __init__(self,node, parent = None): + self.editor = parent + self.node = node + type_sd = self.node.item.get_type_sd_prod() + nomConcept = self.node.item.GetText() + self.typeConcept.setText(type_sd) + self.LENomConcept.setText("") + self.LENomConcept.setText(nomConcept) + + def LENomConceptReturnPressed(self): + """ + Nomme le concept SD retourne par l'etape + """ + nom = str(self.LENomConcept.text()) + nom = string.strip(nom) + if nom == '' : return # si pas de nom, on ressort sans rien faire + self.editor.init_modif() + test,mess = self.node.item.nomme_sd(nom) + self.editor.affiche_infos(mess) + +# ------------------------------- # +from desViewTexte import Ui_dView +class ViewText(Ui_dView,QDialog): +# ------------------------------- # + """ + Classe permettant la visualisation de texte + """ + def __init__(self,parent): + QDialog.__init__(self,parent) + self.setupUi(self) + + self.resize( QSize(600,507).expandedTo(self.minimumSizeHint()) ) + self.connect( self.bclose,SIGNAL("clicked()"), self, SLOT("close()") ) + self.connect( self.bsave,SIGNAL("clicked()"), self.saveFile ) + + def setText(self, txt ): + self.view.setText(txt) + + def saveFile(self): + #recuperation du nom du fichier + fn = QFileDialog.getSaveFileName(None, + self.trUtf8("Save File"), + self.trUtf8("/tmp")) + #if not fn.isNull(): + # print "hhhhhhhhhhhhhhjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkk" + # if QFileInfo(fn).exists(): + # abort = QMessageBox.warning(self, + # self.trUtf8("Save File"), + # self.trUtf8("The file %1 already exists.") + # .arg(fn), + # self.trUtf8("&Overwrite"), + # self.trUtf8("&Abort")) + # if abort: + # return + # fn = unicode(QDir.convertSeparators(fn)) + #else: + # return + + #ecriture du fichier + if fn.isNull() : return + try: + f = open(fn, 'wb') + f.write(str(self.view.toPlainText())) + f.close() + return 1 + except IOError, why: + QMessageBox.critical(self, self.trUtf8('Save File'), + self.trUtf8('The file %1 could not be saved.
Reason: %2') + .arg(unicode(fn)).arg(str(why))) + return + diff --git a/InterfaceQT4/qtEficas.py b/InterfaceQT4/qtEficas.py new file mode 100644 index 00000000..5f633e6e --- /dev/null +++ b/InterfaceQT4/qtEficas.py @@ -0,0 +1,341 @@ +# -*- coding: iso-8859-1 -*- + +import os, sys +REPINI=os.path.dirname(os.path.abspath(__file__)) +INSTALLDIR=os.path.join(REPINI,'..') +sys.path.append(INSTALLDIR) +sys.path.append(INSTALLDIR+"/UiQT4") +sys.path.append(INSTALLDIR+"/InterfaceQT4") + +from PyQt4.QtGui import * +from PyQt4.QtCore import * +from PyQt4.QtAssistant import * +from myMain import Ui_Eficas +from viewManager import MyTabview + +from Editeur import configuration +from Editeur import session + + + +class Appli(Ui_Eficas,QMainWindow): + """ + Class implementing the main user interface. + """ + def __init__(self,code="ASTER",salome=0,parent=None): + """ + Constructor + """ + self.ihm="QT" + self.code=code + self.salome=salome + self.top = self #(pour CONFIGURATION) + + self.initPrefs() + self.CONFIGURATION = configuration.make_config(self,prefs.REPINI) + self.CONFIGStyle = configuration.make_config_style(self,prefs.REPINI) + + QMainWindow.__init__(self) + Ui_Eficas.__init__(self) + self.setupUi(self) + self.viewmanager = MyTabview(self) + self.recentMenu=self.menuFichier.addMenu(self.trUtf8('&Recents')) + self.connecterSignaux() + + + #self.monAssistant=QAssistantClient(QString(""), self.viewmanager) + + #if self.salome : + # from Editeur import session + # self.ouvreFichiers() + from Editeur import session + self.ouvreFichiers() + + self.ficPatrons={} + self.initPatrons() + + self.recent = QStringList() + self.ficRecents={} + self.initRecents() + + def OPENTURNS(self) : + self.MenuBar.removeItem(5) + self.MenuBar.removeItem(6) + self.MenuBar.removeItem(7) + + + def connecterSignaux(self) : + self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu) + + self.connect(self.action_Nouveau,SIGNAL("activated()"),self.fileNew) + self.connect(self.actionNouvel_Include,SIGNAL("activated()"),self.NewInclude) + self.connect(self.action_Ouvrir,SIGNAL("activated()"),self.fileOpen) + self.connect(self.actionEnregistrer,SIGNAL("activated()"),self.fileSave) + self.connect(self.actionEnregistrer_sous,SIGNAL("activated()"),self.fileSaveAs) + self.connect(self.actionFermer,SIGNAL("activated()"),self.fileClose) + self.connect(self.actionFermer_tout,SIGNAL("activated()"),self.fileCloseAll) + self.connect(self.actionQuitter,SIGNAL("activated()"),self.fileExit) + + self.connect(self.actionCouper,SIGNAL("activated()"),self.editCut) + self.connect(self.actionCopier,SIGNAL("activated()"),self.editCopy) + self.connect(self.actionColler,SIGNAL("activated()"),self.editPaste) + + self.connect(self.actionRapport_de_Validation,SIGNAL("activated()"),self.jdcRapport) + self.connect(self.actionFichier_Source,SIGNAL("activated()"),self.jdcFichierSource) + self.connect(self.actionFichier_Resultat,SIGNAL("activated()"),self.visuJdcPy) + + self.connect(self.actionParametres_Eficas,SIGNAL("activated()"),self.optionEditeur) + self.connect(self.actionLecteur_Pdf,SIGNAL("activated()"),self.optionPdf) + + self.connect(self.actionTraduitV7V8,SIGNAL("activated()"),self.traductionV7V8) + self.connect(self.actionTraduitV8V9,SIGNAL("activated()"),self.traductionV8V9) + + #self.connect(self.helpIndexAction,SIGNAL("activated()"),self.helpIndex) + #self.connect(self.helpContentsAction,SIGNAL("activated()"),self.helpContents) + #self.connect(self.helpAboutAction,SIGNAL("activated()"),self.helpAbout) + #self.connect(self.aidenew_itemAction,SIGNAL("activated()"),self.helpAbout) + + + def ouvreFichiers(self) : + # Ouverture des fichiers de commandes donnes sur la ligne de commande + cwd=os.getcwd() + self.dir=cwd + for study in session.d_env.studies: + os.chdir(cwd) + d=session.get_unit(study,self) + self.viewmanager.handleOpen(fichier=study["comm"],units=d) + + def get_source(self,file): + # appele par Editeur/session.py + import convert + p=convert.plugins['python']() + p.readfile(file) + texte=p.convert('execnoparseur') + return texte + + + + def initPatrons(self) : + # Mise à jour du menu des fichiers recemment ouverts + from Editeur import listePatrons + self.listePatrons = listePatrons.listePatrons(self.code) + idx = 0 + for nomSsMenu in self.listePatrons.liste.keys(): + ssmenu=self.menuPatrons.addMenu(nomSsMenu) + for fichier in self.listePatrons.liste[nomSsMenu]: + id = ssmenu.addAction(fichier) + self.ficPatrons[id]=fichier + self.connect(id, SIGNAL('triggered()'),self.handleOpenPatrons) + # self.Patrons.setItemParameter(id,idx) + idx=idx+1 + + def initRecents(self): + #try : + if 1 : + rep=self.CONFIGURATION.rep_user + monFichier=rep+"/listefichiers_"+self.code + index=0 + f=open(monFichier) + while ( index < 9) : + ligne=f.readline() + if ligne != "" : + l=(ligne.split("\n"))[0] + self.recent.append(l) + index=index+1 + #except : pass + else : + pass + + try : f.close() + except : pass + + def addToRecentList(self, fn): + """ + Public slot to add a filename to the list of recently opened files. + + @param fn name of the file to be added + """ + self.recent.removeAll(fn) + self.recent.prepend(fn) + if len(self.recent) > 9: + self.recent = self.recent[:9] + + def sauveRecents(self) : + rep=self.CONFIGURATION.rep_user + monFichier=rep+"/listefichiers_"+self.code + try : + f=open(monFichier,'w') + if len(self.recent) == 0 : return + index=0 + while ( index < len(self.recent)): + ligne=str(self.recent[index])+"\n" + f.write(ligne) + index=index+1 + except : + pass + try : + f.close() + except : + pass + + + + def traductionV7V8(self): + from gereTraduction import traduction + traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V7V8") + + def traductionV8V9(self): + from gereTraduction import traduction + traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V8V9") + + def version(self) : + from desVisu import DVisu + titre = "version " + monVisu=DVisu(parent=self.viewmanager) + monVisu.setCaption(titre) + monVisu.TB.setText("Eficas V1.13") + monVisu.adjustSize() + monVisu.show() + + def aidePPal(self) : + maD=INSTALLDIR+"/AIDE/fichiers" + docsPath = QDir(maD).absPath() + self.monAssistant.showPage( QString("%1/index.html").arg(docsPath) ) + + def optionEditeur(self) : + from monOptionsEditeur import Options + monOption=Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION) + monOption.show() + + def optionPdf(self) : + from monOptionsPdf import OptionPdf + monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.CONFIGURATION) + monOption.show() + + def handleShowRecentMenu(self): + """ + Private method to set up recent files menu. + """ + self.recentMenu.clear() + + for rp in self.recent: + id = self.recentMenu.addAction(rp) + self.ficRecents[id]=rp + self.connect(id, SIGNAL('triggered()'),self.handleOpenRecent) + self.recentMenu.addSeparator() + self.recentMenu.addAction(self.trUtf8('&Clear'), self.handleClearRecent) + + def handleOpenPatrons(self): + idx=self.sender() + fichier=REPINI+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx] + self.viewmanager.handleOpen(fichier=fichier, patron = 1) + + def handleOpenRecent(self): + idx=self.sender() + fichier=self.ficRecents[idx] + self.viewmanager.handleOpen(fichier=fichier, patron =0 ) + + def handleClearRecent(self): + self.recent = QStringList() + + def fileNew(self): + self.viewmanager.newEditor() + + def fileOpen(self ): + self.viewmanager.handleOpen() + + def fileSave(self): + self.viewmanager.saveCurrentEditor() + + def fileSaveAs(self): + self.viewmanager.saveAsCurrentEditor() + + def fileClose(self): + self.viewmanager.handleClose() + + def fileCloseAll(self): + self.viewmanager.handleCloseAll() + + def fileExit(self): + # On peut sortir sur Abort + self.viewmanager.handleCloseAll() + if self.salome : + self.close() + else : + qApp.closeAllWindows() + + def editCopy(self): + self.viewmanager.handleEditCopy() + + def editCut(self): + self.viewmanager.handleEditCut() + + def editPaste(self): + self.viewmanager.handleEditPaste() + + def jdcFichierSource(self): + self.viewmanager.handleViewJdcFichierSource() + + def jdcRapport(self): + self.viewmanager.handleViewJdcRapport() + + def visuJdcPy(self): + self.viewmanager.handleViewJdcPy() + + def helpAbout(self): + import AIDE + AIDE.go3(parent=self) + + def NewInclude(self): + self.viewmanager.newIncludeEditor() + + def initPrefs(self): + if code == "ASTER" : + from Aster import prefs + import sys + sys.path.append(INSTALLDIR+"/Aster") + else : + import prefs + #try : + if 1 : + apply(Appli.__dict__[code],(self,)) + #except : + else: + pass + if hasattr(prefs,'encoding'): + import sys + reload(sys) + sys.setdefaultencoding(prefs.encoding) + +if __name__=='__main__': + + # Modules Eficas + sys.path.append(INSTALLDIR+"/Aster") + from Aster import prefs + if hasattr(prefs,'encoding'): + # Hack pour changer le codage par defaut des strings + import sys + reload(sys) + sys.setdefaultencoding(prefs.encoding) + del sys.setdefaultencoding + # Fin hack + + from Editeur import import_code + from Editeur import session + + # Analyse des arguments de la ligne de commande + options=session.parse(sys.argv) + code=options.code + + + app = QApplication(sys.argv) + #app.setMainWidget(mw) (qt3) + Eficas=Appli() + Eficas.show() + + #app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) + #mw.ouvreFichiers() + #mw.show() + + res=app.exec_() + sys.exit(res) diff --git a/InterfaceQT4/qtSaisie.py b/InterfaceQT4/qtSaisie.py new file mode 100644 index 00000000..53144721 --- /dev/null +++ b/InterfaceQT4/qtSaisie.py @@ -0,0 +1,189 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +# Import des panels + +class SaisieValeur: + """ + Classe contenant les méthodes communes aux panels + permettant de choisir des valeurs + """ + def __init__(self): + pass + + def InitListBoxASSD(self): + listeNomsSD = self.node.item.get_sd_avant_du_bon_type() + for aSD in listeNomsSD: + self.listBoxASSD.addItem( aSD) + QObject.connect(self.listBoxASSD, SIGNAL("doubleClicked(QListBoxItem*)" ), self.ClicASSD ) + min,max = self.node.item.GetMinMax() + l= self.node.item.GetListeValeurs() + + if (min == 1 and min == max and len(listeNomsSD)==1 and (l==[] or l==None)): + if ('R' not in self.node.item.get_type()) : + self.listBoxASSD.setCurrentItem(0) + + + def BuildLBValeurs(self): + self.LBValeurs.clear() + listeValeurs=self.node.item.GetListeValeurs() + for valeur in listeValeurs: + self.LBValeurs.addItem(str(valeur)) + if listeValeurs != None and listeValeurs != [] : + self.LBValeurs.setCurrentRow(len(listeValeurs) - 1) + + + def RemplitPanel(self,listeDejaLa=[]): + self.listBoxVal.clear() + lChoix=self.node.item.get_liste_possible(listeDejaLa) + for valeur in lChoix : + self.listBoxVal.addItem( str(valeur) ) + if len(lChoix) == 1 : + self.listBoxVal.setCurrentRow(1) + + def ClicASSD(self): + if self.listBoxASSD.currentItem()== None : return + valeurQstring=self.listBoxASSD.currentItem().text() + commentaire = QString("Valeur selectionnée : ") + commentaire.append(valeurQstring) + self.Commentaire.setText(commentaire) + valeur=str(valeurQstring) + validite,commentaire=self.politique.RecordValeur(valeur) + self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + + def ClicValeur(self): + if self.listBoxVal.currentItem()== None : return + valeurQstring=self.listBoxVal.currentItem().text() + valeur=str(valeurQstring) + validite,commentaire=self.politique.RecordValeur(valeur) + #self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + + def BOkPressed(self): + if self.listBoxVal.currentItem()==None : + commentaire = "Pas de valeur selectionnée" + self.Commentaire.setText(QString(commentaire)) + else : + self.ClicValeur() + + def BOk2Pressed(self): + if str(self.lineEditVal.text())== "" : + commentaire = "Pas de valeur entrée " + self.Commentaire.setText(QString(commentaire)) + else : + self.LEValeurPressed() + + def LEValeurPressed(self,valeur=None): + if valeur == None : + nouvelleValeur=str(self.lineEditVal.text()) + else : + self.lineEditVal.setText(QString(valeur.nom)) + nouvelleValeur=valeur + validite,commentaire=self.politique.RecordValeur(nouvelleValeur) + if commentaire != "" : + #self.Commentaire.setText(QString(commentaire)) + self.editor.affiche_infos(commentaire) + + + def TraiteLEValeur(self,valeurTraitee=None) : + # lit la chaine entree dans le line edit + # et la tranforme en chaine de valeurs + # a traiter. renvoie eventuellement des complexes + listeValeurs=[] + if valeurTraitee == None : + valeurBrute=str(self.LEValeur.text()) + else : + valeurBrute=valeurTraitee + if valeurBrute == str("") : return listeValeurs,1 + + try : + valeur=eval(valeurBrute,{}) + except : + valeur=valeurBrute + + if type(valeur) in (types.ListType,types.TupleType) : + if self.node.item.wait_complex() : + indice = 0 + while (indice < len(valeur)): + v=valeur[indice] + + if (v== 'RI' or v == 'MP'): + try : + t=tuple([v,valeur[indice+1],valeur[indice+2]]) + listeValeurs.append(t) + indice=indice+3 + except : + commentaire = "Veuillez entrer le complexe sous forme aster ou sous forme python" + self.editor.affiche_infos(commentaire) + return listeValeurs,0 + + + else : # ce n'est pas un tuple à la mode aster + listeValeurs.append(v) + indice = indice + 1 + + else: # on n'attend pas un complexe + listeValeurs=valeurBrute.split(',') + + elif type(valeur) == types.StringType: + listeValeurs=valeur.split(',') + else: + listeValeurs.append(valeur) + + return listeValeurs,1 + + +class SaisieSDCO : + def __init__(self): + pass + + def LESDCOReturnPressed(self): + """ + Lit le nom donné par l'utilisateur au concept de type CO qui doit être + la valeur du MCS courant et stocke cette valeur + """ + self.editor.init_modif() + anc_val = self.node.item.get_valeur() + if anc_val != None: + # il faut egalement propager la destruction de l'ancien concept + self.node.item.delete_valeur_co(valeur=anc_val) + # et on force le recalcul des concepts de sortie de l'etape + self.node.item.object.etape.get_type_produit(force=1) + # et le recalcul du contexte + self.node.item.object.etape.parent.reset_context() + nomConcept = str(self.LESDCO.text()) + if nomConcept == "" : return + + test,commentaire=self.node.item.set_valeur_co(nomConcept) + if test: + commentaire="Valeur du mot-clé enregistree" + self.node.update_node_valid() + else : + cr = self.node.item.get_cr() + commentaire = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal() + self.node.item.set_valeur_co(anc_val) + self.Commentaire.setText(QString(commentaire)) diff --git a/InterfaceQT4/readercata.py b/InterfaceQT4/readercata.py new file mode 100644 index 00000000..052d2f1d --- /dev/null +++ b/InterfaceQT4/readercata.py @@ -0,0 +1,389 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module sert a lire un catalogue et a construire + un objet CataItem pour Eficas. + Il s'appuie sur la classe READERCATA +""" +# Modules Python +import time +import os,sys,py_compile +import traceback +import cPickle +import re + +# Modules Eficas +import prefs +from Noyau.N_CR import CR +from Editeur.utils import init_rep_cata_dev + +from Editeur import analyse_catalogue +from Editeur import autre_analyse_cata +from Editeur import uiinfo +from monChoixCata import MonChoixCata + +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +version="14" + +class READERCATA: + + def __init__(self,QWParent, appliEficas): + self.QWParent=QWParent + self.appliEficas=self.QWParent.appliEficas + self.code=self.QWParent.code + self.QWParent.format_fichier='python' + self.version_code=self.QWParent.version_code + self.version_cata=None + self.fic_cata=None + self.OpenCata() + self.cataitem=None + + def OpenCata(self): + """ + Ouvre le catalogue standard du code courant, cad le catalogue présent + dans le répertoire Cata + """ + message1 = "Compilation des fichiers Eficas \n\n Veuillez patienter ..." + + liste_cata_possibles=[] + for catalogue in self.appliEficas.CONFIGURATION.catalogues: + if catalogue[0] == self.code : + liste_cata_possibles.append(catalogue) + + if len(liste_cata_possibles)==0: + QMessageBox.critical( self.QWParent, "Import du catalogue","Pas de catalogue defini pour le code %s" % self.code) + self.appliEficas.close() + sys.exit(1) + + if self.version_code is not None: + # La version a ete fixee + for cata in liste_cata_possibles: + if self.version_code == cata[1]: + self.fic_cata = cata[2] + self.appliEficas.format_fichier=cata[3] + elif len(liste_cata_possibles)==1: + self.fic_cata = liste_cata_possibles[0][2] + self.version_code = liste_cata_possibles[0][1] + self.QWParent.format_fichier=liste_cata_possibles[0][3] + lab=QString("Eficas V1.") + lab+=QString(version) + lab+=QString(" pour ") + lab+=QString(self.code) + lab+=QString(" avec le catalogue ") + lab+=self.version_code + try : + # souci pour les includes + self.appliEficas.setWindowTitle(lab) + except : + pass + else: + # plusieurs catalogues sont disponibles : il faut demander a l'utilisateur + # lequel il veut utiliser ... + self.ask_choix_catalogue() + + if self.fic_cata == None : + print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code) + sys.exit(0) + + self.determineMater() + + + # détermination de fic_cata_c et fic_cata_p + self.fic_cata_c = self.fic_cata + 'c' + self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py' + + # import du catalogue + self.cata = self.import_cata(self.fic_cata) + if not self.cata : + QMessageBox.critical( self.QWParent, "Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata) + self.appliEficas.close() + sys.exit(1) + # + # analyse du catalogue (ordre des mots-clés) + # + # Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue + # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation + # des mots clés a la création + self.Retrouve_Ordre_Cata_Standard_autre() + + # + # analyse des données liées a  l'IHM : UIinfo + # + uiinfo.traite_UIinfo(self.cata) + + # + # traitement des clefs documentaires + # + self.traite_clefs_documentaires() + + # chargement et analyse des catalogues développeur (le cas échéant) + # + if self.appliEficas.CONFIGURATION.isdeveloppeur == 'OUI' : + init_rep_cata_dev(self.fic_cata,self.appliEficas.CONFIGURATION.path_cata_dev) + fic_cata_dev = os.path.join(self.appliEficas.CONFIGURATION.path_cata_dev,'cata_developpeur.py') + if os.path.isfile(fic_cata_dev): + # il y a bien un catalogue développeur : il faut récupérer le module_object associé ... + test = self.compile_cata(fic_cata_dev,fic_cata_dev+'c') + if not test : + showinfo("Compilation catalogue développeur", + "Erreur dans la compilation du catalogue développeur") + self.cata = (self.cata,) + else: + self.cata_dev =self.import_cata(fic_cata_dev) + #self.Retrouve_Ordre_Cata_Developpeur() + self.Retrouve_Ordre_Cata_Developpeur_autre() + self.cata = (self.cata,self.cata_dev) + else: + self.cata = (self.cata,) + else: + self.cata = (self.cata,) + titre="Eficas V1.14 avec le catalogue " + os.path.basename(self.fic_cata) + if self.appliEficas.top: + self.appliEficas.setWindowTitle(titre) + self.appliEficas.titre=titre + + def determineMater(self) : + # Determinination du repertoire materiau + v_codeSansPoint=self.version_code + v_codeSansPoint=re.sub("\.","",v_codeSansPoint) + chaine="rep_mat_"+v_codeSansPoint + if hasattr(self.appliEficas.CONFIGURATION,chaine): + a=getattr(self.appliEficas.CONFIGURATION,chaine) + else : + try : + a=self.appliEficas.CONFIGURATION.dRepMat[self.version_code] + except : + if self.code == "ASTER" : + print "Probleme avec le repertoire materiau" + a='.' + self.appliEficas.CONFIGURATION.rep_mat=a + + def import_cata(self,cata): + """ + Réalise l'import du catalogue dont le chemin d'acca¨s est donné par cata + """ + nom_cata = os.path.splitext(os.path.basename(cata))[0] + rep_cata = os.path.dirname(cata) + sys.path[:0] = [rep_cata] + try : + o=__import__(nom_cata) + return o + except Exception,e: + traceback.print_exc() + return 0 + + def Retrouve_Ordre_Cata_Standard_autre(self): + """ + Construit une structure de données dans le catalogue qui permet + a  EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue. + Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui + contient le nom des mots clés dans le bon ordre + """ + self.cata_ordonne_dico,self.appliEficas.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata) + + def Retrouve_Ordre_Cata_Standard(self): + """ + Retrouve l'ordre des mots-clés dans le catalogue, cad : + - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer + l'ordre des mots-clés dans le catalogue + - s'il n'a pas été modifié, relie le fichier pickle + """ + time1 = os.path.getmtime(self.fic_cata) + try : + time2 = os.path.getmtime(self.fic_cata_p) + except: + time2 = 0 + if time2 > time1 : + # l'objet catalogue n'a pas été modifié depuis le dernier "pickle" + self.Get_Ordre_Cata() + else : + # le catalogue a été modifié depuis le dernier "pickle" : + # il faut retrouver l'ordre du catalogue et refaire pickle + self.Get_Ordre_Cata(mode='cata') + self.appliEficas.affiche_infos("Catalogue standard chargé") + + def Retrouve_Ordre_Cata_Developpeur(self): + """ + Retrouve l'ordre des mots-clés dans le catalogue, cad : + - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer + l'ordre des mots-clés dans le catalogue + - s'il n'a pas été modifié, relie le fichier pickle + """ + if self.code != 'ASTER' : return + fic_cata = os.path.join(self.appliEficas.CONFIGURATION.path_cata_dev,'cata_developpeur.py') + message="Chargement catalogue développeur présent dans :\n %s..." % self.appliEficas.CONFIGURATION.path_cata_dev + cata_dev_ordonne = analyse_cata.analyse_catalogue(self,self.fic_cata) + self.cata_dev_ordonne_cr = cata_dev_ordonne.cr + cata_dev_ordonne_dico = cata_dev_ordonne.entites + self.cata_ordonne_dico.update(cata_dev_ordonne_dico) + self.appliEficas.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) + + def Retrouve_Ordre_Cata_Developpeur_autre(self): + """ + Retrouve l'ordre des mots-clés dans le catalogue, cad : + - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer + l'ordre des mots-clés dans le catalogue + - s'il n'a pas été modifié, relie le fichier pickle + """ + if self.code != 'ASTER' : return + message="Chargement catalogue développeur présent dans :\n %s..." % self.appliEficas.CONFIGURATION.path_cata_dev + cata_dev_ordonne_dico,self.appliEficas.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata) + self.cata_ordonne_dico.update(cata_dev_ordonne_dico) + self.appliEficas.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) + + def Get_Ordre_Cata(self,mode='pickle'): + """ + Retrouve l'ordre du catalogue : + - mode='pickle ': tente de relire le fichier pickle et sinon lance l'analyse du catalogue + - mode='cata' : force l'analyse du catalogue directement sans relire le pickle + """ + if mode == 'pickle' : + try: + f = open(self.fic_cata_p) + u = cPickle.Unpickler(f) + self.cata_ordonne_dico = u.load() + f.close() + except : + # on peut ne pas arriver a  relire le fichier pickle s'il a été altéré + # ou (le plus probable) s'il a été créé sous un autre OS + self.Get_Ordre_Cata(mode='cata') + elif mode == 'cata': + cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata) + self.cata_ordonne_cr = cata_ordonne.cr + self.cata_ordonne_dico = cata_ordonne.entites + f = open(self.fic_cata_p,'w+') + p = cPickle.Pickler(f) + p.dump(self.cata_ordonne_dico) + f.close() + else : + raise Exception("Appel a  un mode inconnu de Get_Ordre_Cata : %s" % mode) + return + + def ask_choix_catalogue(self): + """ + Ouvre une fenetre de sélection du catalogue dans le cas oa¹ plusieurs + ont été définis dans Accas/editeur.ini + """ + # construction du dictionnaire et de la liste des catalogues + self.dico_catalogues = {} + defaut = None + for catalogue in self.appliEficas.CONFIGURATION.catalogues: + if catalogue[0] == self.code : + self.dico_catalogues[catalogue[1]] = catalogue + if len(catalogue) == 5 : + if catalogue[4]=='defaut' : defaut = catalogue[1] + liste_choix = self.dico_catalogues.keys() + liste_choix.sort() + + lab=QString("Eficas V1.") + lab+=QString(version) + lab+=QString(" pour ") + lab+=QString(self.code) + lab+=QString(" avec le catalogue ") + + # teste si plusieurs catalogues ou non + if len(liste_choix) == 0: + QMessageBox.critical( self.QWParent, "", "Aucun catalogue déclaré pour %s" %self.code) + self.appliEficas.close() + sys.exit(1) + + # création d'une boite de dialogue modale + widgetChoix=MonChoixCata(liste_choix,self, self.appliEficas, "", True ) + ret=widgetChoix.exec_() + + lab=QString("Eficas V1.") + lab+=QString(version) + lab+=QString(" pour ") + lab+=QString(self.code) + lab+=QString(" avec le catalogue ") + if ret == QDialog.Accepted: + self.version_cata=str(self.version_cata) + self.fic_cata = self.dico_catalogues[self.version_cata][2] + self.version_code = self.version_cata + self.appliEficas.format_fichier = self.dico_catalogues[self.version_cata][3] + lab+=self.version_cata + self.appliEficas.setWindowTitle(lab) + #qApp.mainWidget().setCaption(lab) + else : + sys.exit(0) + + + def compile_cata(self,cata,catac): + """ + Teste si le catalogue a bien besoin d'etre recompilé et si oui, le compile et + affiche un message dans le splash . Retourne 1 si la compilation s'est bien déroulée, + 0 sinon. + """ + time1 = os.path.getmtime(cata) + try: + time2 = os.path.getmtime(catac) + except: + time2 = 0 + if time1 > time2: + try: + # le catalogue doit etre recompilé avant d'etre importé + if self.QWParent.test == 0 : + splash._splash.configure(text="Compilation du catalogue\nCela peut prendre plusieurs secondes ...") + py_compile.compile(cata) + except: + return 0 + return 1 + + + + def visuCRCATA(self): + """ + Méthode permettant l'affichage du rapport de validation + """ + cr = CR( debut = "Début rapport de validation du catalogue", + fin = "Fin rapport de validation du catalogue") + titre="rapport de validation du catalogue" + if hasattr(self,'cata_ordonne_cr') : + cr.add(self.cata_ordonne_cr) + if hasattr(self,'cata_dev_ordonne_cr') : + cr.add(self.cata_dev_ordonne_cr) + for cata in self.cata: + if hasattr(cata,'JdC'): + cr.add(cata.JdC.report()) + texte_cr = str(cr) + self.visu_texte_cr = Fenetre(self.appliEficas,titre=titre,texte=texte_cr) + + + def traite_clefs_documentaires(self): + try: + self.fic_cata_clef=os.path.splitext(self.fic_cata_c)[0]+'_clefs_docu' + f=open(self.fic_cata_clef) + except: + #print "Pas de fichier associé contenant des clefs documentaires" + return + + dict_clef_docu={} + for l in f.readlines(): + clef=l.split(':')[0] + docu=l.split(':')[1] + docu=docu[0:-1] + dict_clef_docu[clef]=docu + for oper in self.cata.JdC.commandes: + if dict_clef_docu.has_key(oper.nom): + oper.docu=dict_clef_docu[oper.nom] diff --git a/InterfaceQT4/typeNode.py b/InterfaceQT4/typeNode.py new file mode 100644 index 00000000..f3e84ec1 --- /dev/null +++ b/InterfaceQT4/typeNode.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +from PyQt4 import * +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +#---------------------------# +class PopUpMenuNodePartiel : +#---------------------------# + def createPopUpMenu(self): + self.createActions() + + self.menu = QMenu(self.tree) + #ss-menu Comment: + self.commentMenu=self.menu.addMenu('Commentaire') + self.commentMenu.addAction(self.CommApres) + self.commentMenu.addAction(self.CommAvant) + #ss-menu Parameters: + self.paramMenu =self.menu.addMenu('Parametre') + self.paramMenu.addAction(self.ParamApres) + self.paramMenu.addAction(self.ParamAvant) + + #items du menu + self.menu.addAction(self.Supprime) + + def createActions(self): + self.CommApres = QAction('après',self.tree) + self.tree.connect(self.CommApres,SIGNAL("activated()"),self.addCommApres) + self.CommApres.setStatusTip("Insere un commentaire apres la commande ") + self.CommAvant = QAction('avant',self.tree) + self.tree.connect(self.CommAvant,SIGNAL("activated()"),self.addCommAvant) + self.CommAvant.setStatusTip("Insere un commentaire avant la commande ") + + self.ParamApres = QAction('après',self.tree) + self.tree.connect(self.ParamApres,SIGNAL("activated()"),self.addParametersApres) + self.ParamApres.setStatusTip("Insere un parametre apres la commande ") + self.ParamAvant = QAction('avant',self.tree) + self.tree.connect(self.ParamAvant,SIGNAL("activated()"),self.addParametersAvant) + self.ParamAvant.setStatusTip("Insere un parametre avant la commande ") + + self.Supprime = QAction('Supprimer',self.tree) + self.tree.connect(self.Supprime,SIGNAL("activated()"),self.supprimeNoeud) + self.Supprime.setStatusTip("supprime le mot clef ") + + def supprimeNoeud(self): + item= self.tree.currentItem() + item.delete() + + def addParametersApres(self): + item= self.tree.currentItem() + item.addParameters(True) + + def addParametersAvant(self): + item= self.tree.currentItem() + item.addParameters(False) + + def addCommApres(self): + item= self.tree.currentItem() + item.addComment(True) + + def addCommAvant(self): + item= self.tree.currentItem() + item.addComment(False) + +#-----------------------------------------# +class PopUpMenuNode(PopUpMenuNodePartiel) : +#-----------------------------------------# + def createPopUpMenu(self): + PopUpMenuNodePartiel.createPopUpMenu(self) + self.Commente = QAction('ce noeud',self.tree) + self.tree.connect(self.Commente,SIGNAL("activated()"),self.Commenter) + self.Commente.setStatusTip("commente le noeud ") + self.commentMenu.addAction(self.Commente) + + def Commenter(self): + item= self.tree.currentItem() + item.commentIt() diff --git a/InterfaceQT4/utilIcons.py b/InterfaceQT4/utilIcons.py new file mode 100644 index 00000000..ec83c59a --- /dev/null +++ b/InterfaceQT4/utilIcons.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- + +from PyQt4.QtGui import QPixmap, QIcon +import os + +class PixmapCache: + """ + Class implementing a pixmap cache for icons. + """ + def __init__(self): + """ + Constructor + """ + self.pixmapCache = {} + + + def getPixmap(self, key): + """ + Public method to retrieve a pixmap. + + @param key name of the wanted pixmap (string) + @return the requested pixmap (QPixmap) + """ + if (1==1): + #try: + key="/local/pnoyret/Install_Eficas/EficasV1/InterfaceQT/icons/"+key + return QPixmap(key) + #return self.pixmapCache[key] + #except KeyError: + else : + self.pixmapCache[key] = QPixmap.fromMimeSource(key) + return self.pixmapCache[key] + +pixCache = PixmapCache() + +def getPixmap(key, cache = pixCache): + """ + Module function to retrieve a pixmap. + + @param key name of the wanted pixmap (string) + @return the requested pixmap (QPixmap) + """ + return cache.getPixmap(key) + +def getIcon(key): + key="/local/pnoyret/Install_Eficas/EficasV1/InterfaceQT/icons/"+key + return QIcon(key) + + +#from PyQt4.Qt3Support import Q3MimeSourceFactory + +#def initializeMimeSourceFactory(): + """ + Function to initialize the default mime source factory. + + """ +# defaultFactory = Q3MimeSourceFactory.defaultFactory() +# repini=os.path.dirname(os.path.abspath(__file__)) +# defaultFactory.addFilePath(repini+"/../Editeur/icons") #CS_pbruno todo (config) + diff --git a/InterfaceQT4/viewManager.py b/InterfaceQT4/viewManager.py new file mode 100644 index 00000000..52650ead --- /dev/null +++ b/InterfaceQT4/viewManager.py @@ -0,0 +1,260 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +import os, string +from PyQt4.QtGui import * +from PyQt4.QtCore import * + +class MyTabview: + + def __init__(self,appliEficas): + self.appliEficas=appliEficas + self.tabWidgets = [] + self.mesIndexes = {} + self.appliEficas=appliEficas + self.editors = [] + self.dict_editors={} + self.untitledCount = 0 + self.doubles = {} + + self.gridLayout = QGridLayout(self.appliEficas.centralWidget()) + self.myQtab = QTabWidget(self.appliEficas.centralWidget()) + self.gridLayout.addWidget(self.myQtab) + + + def handleOpen(self,fichier=None,patron=0,units=None): + if fichier is None: + fichier = QFileDialog.getOpenFileName(self.appliEficas, + self.appliEficas.trUtf8('Ouvrir Fichier'), + self.getOpenStartDir(), + self.appliEficas.trUtf8('JDC Files (*.comm);;''All Files (*)')) + if fichier.isNull(): return + from utilitaires import normabspath + fichier = normabspath(unicode(fichier)) + maPage=self.getEditor( fichier,units=units) + + def handleClose(self,doitSauverRecent = 1): + print "passage dans handleClose" + print self.dict_editors + if doitSauverRecent : self.appliEficas.sauveRecents() + index=self.myQtab.currentIndex() + if index < 0 : return + self.checkDirty(self.dict_editors[index]) + index=self.myQtab.currentIndex() + while index < len(self.dict_editors) -1 : + self.dict_editors[index]=self.dict_editors[index+1] + index = index + 1 + del self.dict_editors[len (self.dict_editors) -1] + try : + del self.doubles[self.dict_editors[index]] + except : + pass + print self.dict_editors + self.myQtab.removeTab(index) + + + def handleCloseAll(self): + self.appliEficas.sauveRecents() + print "passage dans CloseAll" + print "self.dict_editors", self.dict_editors + while len(self.dict_editors) > 0 : + self.myQtab.setCurrentIndex(0) + self.handleClose(0) + + def handleEditCopy(self): + print "passage dans handleEditCopy" + index=self.myQtab.currentIndex() + editor=self.dict_editors[index] + editor.handleEditCopy() + + def handleEditCut(self): + print "passage dans handleEditCut" + index=self.myQtab.currentIndex() + editor=self.dict_editors[index] + editor.handleEditCut() + + def handleEditPaste(self): + print "passage dans handleEditPaste" + index=self.myQtab.currentIndex() + editor=self.dict_editors[index] + editor.handleEditPaste() + + def newEditor(self,include=0): + print "passage dans newEditor" + maPage=self.getEditor() + + def newIncludeEditor(self): + self.newEditor(include=1) + + def handleViewJdcFichierSource(self): + index=self.myQtab.currentIndex() + if index < 0 : return + self.dict_editors[index].viewJdcSource() + + def handleViewJdcRapport(self): + index=self.myQtab.currentIndex() + if index < 0 : return + self.dict_editors[index].viewJdcRapport() + + def handleViewJdcPy(self): + index=self.myQtab.currentIndex() + if index < 0 : return + self.dict_editors[index].viewJdcPy() + + def saveCurrentEditor(self): + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dict_editors[index] + if editor in self.doubles.keys() : + QMessageBox.warning( + None, + self.appliEficas.trUtf8("Fichier Duplique"), + self.appliEficas.trUtf8("Le fichier ne sera pas sauvegarde."), + self.appliEficas.trUtf8("&Annuler")) + return + ok, newName = editor.saveFile() + if ok : + fileName=os.path.basename(unicode(newName)) + self.myQtab.setTabText(index,fileName) + + def saveAsCurrentEditor(self): + index=self.myQtab.currentIndex() + editor=self.dict_editors[index] + oldName=editor.fichier + ok,newName = editor.saveFileAs() + if ok : + fileName=os.path.basename(unicode(newName)) + self.myQtab.setTabText(index,fileName) + if editor in self.doubles.keys(): + if oldName != newName : + del self.doubles[editor] + + + def displayJDC(self,jdc,fn=None): + """ + Public slot to display a file in an editor. + @param fn name of file to be opened + # insert filename into list of recently opened files + """ + titre=None + if fn != None : titre=fn.split("/")[-1] + editor = self.getEditor(fichier= fn, jdc = jdc ,include=1) + self.appliEficas.addToRecentList(editor.getFileName()) + + def getEditor(self,fichier = None,jdc = None, units = None,include=0): + newWin = 0 + double = None + indexEditor=0 + for indexEditor in self.dict_editors.keys(): + editor=self.dict_editors[indexEditor] + from utilitaires import samepath + if samepath(fichier, editor.getFileName()): + abort = QMessageBox.warning(self.appliEficas, + self.appliEficas.trUtf8("Fichier"), + self.appliEficas.trUtf8("Le fichier %1 est deja ouvert.").arg(fichier), + self.appliEficas.trUtf8("&Duplication"), + self.appliEficas.trUtf8("&Abort")) + if abort: break + double=editor + else : + from editor import JDCEditor + editor = JDCEditor(fichier, jdc, self.myQtab,units=units,appli=self.appliEficas,vm = self,include=include) + if double != None : + self.doubles[editor]=double + if editor.jdc: # le fichier est bien un jdc + self.editors.append(editor) + newWin = 1 + else: + editor.closeIt() + + if newWin: + self.addView(editor, fichier) + elif editor.jdc: + self.myQtab.setCurrentIndex(indexEditor) + + index=self.myQtab.currentIndex() + if index != -1 : + self.dict_editors[index]=editor + return editor + + def addView(self, win, fichier=None): + if fichier is None: + self.untitledCount += 1 + self.myQtab.addTab(win, self.appliEficas.trUtf8("Untitled %1").arg(self.untitledCount)) + else: + liste=fichier.split('/') + txt = liste[-1] + if not QFileInfo(fichier).isWritable(): + txt = '%s (ro)' % txt + self.myQtab.addTab(win, txt) + self.myQtab.setCurrentWidget(win) + self.currentEditor=win + win.setFocus() + + def getOpenStartDir(self) : + #PN --> Les Preferences + try : + userDir=os.path.expanduser("~/Eficas_install/") + return userDir + except : + return "" + + + def checkDirty(self, editor): + """ + Private method to check dirty status and open a message window. + + @param editor editor window to check + @return flag indicating successful reset of the dirty flag (boolean) + """ + + print "checkDirty" + if (editor.modified) and (editor in self.doubles.keys()) : + res = QMessageBox.warning( + None, + self.appliEficas.trUtf8("Fichier Duplique"), + self.appliEficas.trUtf8("Le fichier ne sera pas sauvegarde."), + self.appliEficas.trUtf8("&Quitter"), + self.appliEficas.trUtf8("&Annuler")) + if res == 0 : return 1 + return 0 + if editor.modified: + fn = editor.getFileName() + if fn is None: + fn = self.appliEficas.trUtf8('Noname') + res = QMessageBox.warning(self.appliEficas, + self.appliEficas.trUtf8("Fichier Modifie"), + self.appliEficas.trUtf8("Le fichier %1 n a pas ete sauvegarde.") + .arg(fn), + self.appliEficas.trUtf8("&Sauvegarder"), + self.appliEficas.trUtf8("&Quitter "), + self.appliEficas.trUtf8("&Annuler"), 0, 2) + if res == 0: + (ok, newName) = editor.saveFile() + if ok: + fileName=os.path.basename(unicode(newName)) + index=self.myQtab.currentIndex() + self.myQtab.setTabText(index,fileName) + return ok + elif res == 2: + return 0 + return 1 + diff --git a/InterfaceTK/Interp.py b/InterfaceTK/Interp.py new file mode 100644 index 00000000..8fb95820 --- /dev/null +++ b/InterfaceTK/Interp.py @@ -0,0 +1,153 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +import Tkinter,ScrolledText +import os, sys, string, traceback +import code + +sys.ps1 = ">>> " +sys.ps2 = "... " + +class PythonInterpreter( code.InteractiveConsole): + def __init__( self, text, namespace = None): + code.InteractiveConsole.__init__( self, namespace) + self.text = text + + def showtraceback( self): + start = self.text.pos + " - 1 lines" + code.InteractiveConsole.showtraceback( self) + end = self.text.pos + self.text.tag_add( "exception", start, end) + +class InterpWindow(Tkinter.Toplevel): + def __init__(self,namespace, parent=None): + Tkinter.Toplevel.__init__(self,parent) + self._initTkWidgets() + self.stdout = self.stderr = self + self.pos = '1.0' + self.history = [ '' ] + self.hpos = 0 + self.tabCount = 0 + self.shell = PythonInterpreter( self,namespace) + self.write("Python %s on %s\n%s\n(%s)\n" % + (sys.version, sys.platform, sys.copyright, + self.__class__.__name__)) + self.write( sys.ps1) + self.text.focus_set() + + def _initTkWidgets( self): + self.text = ScrolledText.ScrolledText( self, bg = "white",fg="black", wrap="word") + self.text.pack( fill='both', expand = 1) + self.text.bind( '', self.clearMsg) + self.text.bind( '', self.inputhandler) + self.text.bind( '', self.inputhandler) + self.text.bind( '', self.uphistory) + self.text.bind( '', self.downhistory) + self.text.bind( '', self.goto_sol) + self.text.bind( '', self.sendeof) + self.text.tag_config("exception", foreground = "red") + + def swapStdFiles(self): + sys.stdout,self.stdout = self.stdout,sys.stdout + sys.stderr,self.stderr = self.stderr,sys.stderr + + def write(self, data): + self.text.insert("end", data) + self.pos = self.text.index("end - 1 char") + self.text.yview_pickplace("end") + + def tag_add( self, tag, start, end): + self.text.tag_add( tag, start, end) + + def inputhandler(self, *args): + # Remove any extraneous stuff + self.text.delete( self.pos + " lineend", "end") + # Now get the line + line = self.text.get(self.pos, "end - 1 char") + self.text.insert("end", "\n") + self.pos = self.text.index("end") + self.addHistory( line) + self.swapStdFiles() + if self.shell.push( line): + self.write(sys.ps2) + else: + self.write(sys.ps1) + self.swapStdFiles() + self.text.mark_set("insert", "end") + return "break" + + def addHistory( self, line): + if line: + self.history.insert( len( self.history) - 1, line) + self.hpos = len( self.history) - 1 + + def sendeof(self, *args): + self.destroy() + return "break" + + def uphistory(self, event=None): + if not self.history: return "break" + + if self.hpos > 0: + self.hpos = self.hpos - 1 + + line = self.history[ self.hpos] + self.text.delete( self.pos, "end") + self.text.insert( self.pos, line) + + return "break" + + def downhistory( self, event=None): + if not self.history: return "break" + + if self.hpos < (len( self.history) - 1): + self.hpos = self.hpos + 1 + + line = self.history[ self.hpos] + self.text.delete( self.pos, "end") + self.text.insert( self.pos, line) + + return "break" + + def goto_sol( self, event=None): + """ + Met en mode edition la ligne courante + """ + self.text.mark_set( 'insert', 'insert linestart + 4 chars') + return "break" + + def clearMsg( self, event=None): + index = self.text.index( "insert") + self.text.delete( "insert lineend", "end") + self.tabCount = 0 + +if __name__ == "__main__": + app = Tkinter.Tk() + d={'a':1} + + def go(): + InterpWindow(d,parent=app) + + Tkinter.Button(app,text="Interp",command=go).pack() + Tkinter.Button(app,text="Quit",command=app.destroy).pack() + + app.mainloop() + diff --git a/InterfaceTK/TroisDPal.py b/InterfaceTK/TroisDPal.py new file mode 100644 index 00000000..c0cc0d07 --- /dev/null +++ b/InterfaceTK/TroisDPal.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module contient la classe 3Dpilote qui va creer les ordres + de pilotage de l idl PAL pour un element de structure +""" +import generator + +class TroisDPilote: + + def __init__(self,node,appli,parent): + self.node=node + self.appli=appli + self.parent=parent + + def envoievisu(self): + """ + """ + format="vers3DSalome" + if generator.plugins.has_key(format): + # Le generateur existe on l'utilise + g=generator.plugins[format]() + g.init_jdc(self.node.get_jdc()) + texte=g.gener(self.node) + else: + print "Le generateur n a pas ete trouvé" + print "Erreur ! Erreur!" + return "" + self.appli.envoievisu(texte) + diff --git a/InterfaceTK/__init__.py b/InterfaceTK/__init__.py new file mode 100644 index 00000000..28da2d3d --- /dev/null +++ b/InterfaceTK/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== diff --git a/InterfaceTK/appli.py b/InterfaceTK/appli.py new file mode 100644 index 00000000..147a560f --- /dev/null +++ b/InterfaceTK/appli.py @@ -0,0 +1,458 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module contient la classe APPLI qui est la classe mère de + l'application EFICAS. Elle prend en charge l'organisation générale + des composants graphiques et l'initialisation Tk + L'aspect applicatif doit etre pris en charge par la classe dérivée +""" +# Modules Python +import os +import string +import sys +import types +import Pmw +import Tkinter +from widgets import showerror + +# Modules Eficas +import splash +import prefs +import styles +from styles import style +import fontes +import tooltip +import properties +import convert,generator +from Editeur import comploader +from Editeur.utils import extension_fichier,stripPath + +from widgets import Fenetre +from Misc import MakeNomComplet +from Editeur import session + +import listeFichiers +import listePatronsTK + +REPTK=os.path.dirname(os.path.abspath(__file__)) +sys.path[:0]=[REPTK] + +VERSION="EFICAS v1.14" + +class APPLI: + def __init__ (self,master,code=prefs.code,fichier=None,test=0,ihm="TK",salome=0) : + self.ihm=ihm + self.code=code + self.salome=salome + self.top=master + self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS) + + #dimensionnement de la fenetre principale + #aspect ratio de l'ecran + aspect=float(self.top.winfo_screenwidth())/float(self.top.winfo_screenheight()) + #resolution (pixels par point). On utilise le fait qu'on a "normalement" 72 points par inch + resolution= self.top.winfo_screenwidth()/(self.top.winfo_screenmmwidth()/25.4*72) + DDY=max(20,resolution*(fontes.standard[1]+4)) #largeur d'un caractere fonte standard en pixel + x=int(45*DDY) #largeur d'ouverture de 45 caracteres de fonte standard + y=int(25*DDY) #hauteur d'ouverture de 25 caracteres de fonte standard + minx=x*8/10 #largeur min (80 pour cent de largeur) + miny=y*8/10 #hauteur min (80 pour cent de hauteur) + self.top.minsize(minx,miny) + self.top.geometry('%dx%d' % (x,y)) + + self.top.title(VERSION + ' pour '+self.code) + self.titre=VERSION + ' pour '+self.code + self.top.withdraw() + self.initializeTk(master) + Pmw.initialise(master) + + self.dict_reels={} + self.liste_simp_reel=[] + # L'attribut test permet d'activer les panneaux de splash et d'erreur (test=0) + # Si test est different de 0, les panneaux ne sont pas activés + self.test=test + + # Lecture des parametres de configuration (fichier global editeur.ini + # et utilisateur eficas.ini) + self.lecture_parametres() + + self.format_fichier = Tkinter.StringVar() + self.message='' + # Avant la creation du bureau qui lit le catalogue + self.version_code=session.d_env.cata + + # Creation de la menubar, toolbar, messagebar + self.cree_composants_graphiques() + # Creation des autres composants graphiques dont le bureau (parametrable par prefs.py) + self.load_appli_composants() + self.listeFichiers=listeFichiers.listeFichiers(self) + self.listePatrons=listePatronsTK.listePatronsTK(self) + self.dir=None + + # Fermer le splash et deiconifier la fenetre principale si on n'est pas en test + if (self.test == 0): + splash.fini_splash() + #self.affiche_FAQ() + + # Ouverture des fichiers de commandes donnes sur la ligne de commande + cwd=os.getcwd() + self.dir=cwd + for study in session.d_env.studies: + os.chdir(cwd) + d=session.get_unit(study,self) + self.bureau.openJDC(file=study["comm"],units=d) + + + def send_message(self,message): + self.message=message + + def exitEFICAS(self): + self.quit() + + def quit(self): + if self.top: + self.top.quit() + + def lecture_parametres(self): + """ + Active la lecture des paramètres standards et utilisateur + """ + if (self.test == 0): + splash._splash.configure(text = "Chargement des paramètres utilisateur") + from Editeur import configuration + self.CONFIGURATION = configuration.make_config(self,prefs.REPINI) + self.CONFIGStyle = configuration.make_config_style(self,prefs.REPINI) + + def cree_composants_graphiques(self): + """ + Cree les constituants graphiques fixes de l'application : + - menubar + - toolbar + - statusbar + """ + if (self.test == 0): + splash._splash.configure(text = "Chargement de l'IHM") + splash._splash.configure(text = "Chargement de la menubar") + import menubar + self.menubar=menubar.MENUBAR(self,self.top) + if (self.test == 0): + splash._splash.configure(text = "Chargement de la toolbar") + import toolbar + self.toolbar=toolbar.TOOLBAR(self,self.top) + if (self.test == 0): + splash._splash.configure(text = "Chargement de la statusbar") + import statusbar + self.statusbar=statusbar.STATUSBAR(self.top,styles.style.statusfont) + + def load_appli_composants(self): + """ + Cree les autres constituants graphiques de l'application : + - bureau + - readercata + - ... + Cette creation est parametrable par fichier prefs.py + """ + if (self.test == 0): + splash._splash.configure(text = "Chargement des appli_composants") + for mname in self.appli_composants: + self.load_appli_composant(mname) + + def load_appli_composant(self,mname): + module=__import__(mname,globals(),locals()) + factory=getattr(module,mname.upper()) + appli_composant=factory(self,self.top) + setattr(self,mname,appli_composant) + self.fill_menus(appli_composant,appli_composant.menu_defs) + self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant) + + def affiche_FAQ(self): + import faq + faq.affiche(self.top) + + def affiche_infos(self,message): + self.statusbar.affiche_infos(message) + return + + def initializeTk(self, root): + """ + Initialize platform specific options + """ + if sys.platform == 'mac': + self.initializeTk_mac(root) + elif sys.platform == 'win32': + self.initializeTk_win32(root) + else: + self.initializeTk_unix(root) + + def initializeTk_win32(self, root): + root.option_add('*Font', fontes.standard) + root.option_add('*EntryField.Entry.Font', fontes.standard) + root.option_add('*Listbox*Font',fontes.standard) + + def initializeTk_colors_common(self, root): + root.option_add('*background', style.background) + root.option_add('*foreground', style.foreground) + root.option_add('*EntryField.Entry.background', style.entry_background) + root.option_add('*Entry*background', style.entry_background) + root.option_add('*Listbox*background', style.list_background) + root.option_add('*Listbox*selectBackground', style.list_select_background) + root.option_add('*Listbox*selectForeground', style.list_select_foreground) + + def initializeTk_mac(self, root): + self.initializeTk_colors_common(root) + + def initializeTk_unix(self, root): + root.option_add('*Font', fontes.standard) + root.option_add('*EntryField.Entry.Font',fontes.standard ) + root.option_add('*Listbox*Font', fontes.standard) + self.initializeTk_colors_common(root) + + def get_texte_infos(self): + """ + Retourne un texte d'informations sur la session courante d'EFICAS + """ + texte = VERSION + '\n\n' + texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n' + texte = texte + 'Equipe : SINETICS\n\n' + texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version) + return texte + + def efface_aide(self,event): + """ + Efface la bulle d'aide d'un panneau + """ + try: + self.aide.destroy() + except: + pass + return + + def affiche_aide(self,event,aide): + """ + Affiche l'aide concernant un panneau + """ + x=event.x + y=event.y + widget=event.widget + self.aide=tooltip.TOOLTIP(widget) + self.aide.xoffset = 10 + self.aide.yoffset = - widget.winfo_height()/2 + self.aide.setText(aide) + self.aide._showTip() + return + + def cree_menu(self,menu,itemlist,appli_composant): + """ + Ajoute les items du tuple itemlist + dans le menu menu + """ + number_item=0 + radio=None + for item in itemlist: + number_item=number_item + 1 + raccourci_label="" + if not item : + #menu.add_separator() + pass + else: + if len(item)==3: + raccourci=item[2] + raccourci_label=" "+raccourci + newitem=(item[0],item[1]) + else : + if len(item)==4: + raccourci=item[2] + raccourci_label=" "+item[3] + newitem=(item[0],item[1]) + else : + raccourci="" + newitem=item + item=newitem + label,method=item + if type(method) == types.TupleType: + # On a un tuple => on cree une cascade + menu_cascade=Tkinter.Menu(menu) + menu.add_cascade(label=label,menu=menu_cascade) + self.cree_menu(menu_cascade,method,appli_composant) + elif method[0] == '&': + # On a une chaine avec & en tete => on cree un radiobouton + command=getattr(appli_composant,method[1:]) + menu.add_radiobutton(label=label,command=command) + if radio == None:radio=number_item + else: + command=getattr(appli_composant,method) + menu.add_command(label=label,accelerator=raccourci_label,command=command) + if raccourci != "" : + self.top.bind(raccourci,command) + # Si au moins un radiobouton existe on invoke le premier + if radio:menu.invoke(radio) + + def fill_menus(self,appli_composant,defs): + menudict=self.menubar.menudict + for mname,itemlist in defs: + if mname in menudict.keys() : + menu=menudict[mname] + else : + continue + self.cree_menu(menu,itemlist,appli_composant) + + def update_jdc_courant(self): + self.bureau.update_jdc_courant() + + def affiche_alerte(self,titre,message): + f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message) + f.wait() + + +class valeur: + def __init__(self,v=None): + self.v=v + def set(self,v): + self.v=v + def get(self): + return self.v + +class STANDALONE(APPLI): + def __init__ (self,code=prefs.code,fichier=None,version='v8.2',ihm="TK") : + self.ihm=ihm + self.salome=0 + self.code=code + self.top=None + self.format_fichier=valeur() + + self.dict_reels={} + self.liste_simp_reel=[] + # L'attribut test doit valoir 1 si on ne veut pas creer les fenetres + self.test=1 + self.titre="STANDALONE POUR TEST" + + # Lecture des parametres de configuration (fichier global editeur.ini + # et utilisateur eficas.ini) + self.lecture_parametres() + + self.message='' + # Avant la creation du bureau qui lit le catalogue + self.version_code=version + import readercata + self.readercata=readercata.READERCATA(self,None) + + self.dir=None + + def affiche_infos(self,message): + return + + def get_text_JDC(self,JDC,format): + if generator.plugins.has_key(format): + # Le generateur existe on l'utilise + g=generator.plugins[format]() + jdc_formate=g.gener(JDC,format='beautifie') + return jdc_formate + else: + # Il n'existe pas c'est une erreur + return + + def newJDC(self): + CONTEXT.unset_current_step() + J=self.readercata.cata[0].JdC(procedure="", + appli=self, + cata=self.readercata.cata, + cata_ord_dico=self.readercata.cata_ordonne_dico, + rep_mat=self.CONFIGURATION.rep_mat, + ) + J.analyse() + return J + + def openJDC(self,file): + self.fileName = file + e=extension_fichier(file) + self.JDCName=stripPath(file) + self.initialdir = os.path.dirname(os.path.abspath(file)) + format=self.format_fichier.get() + # Il faut convertir le contenu du fichier en fonction du format + if convert.plugins.has_key(format): + # Le convertisseur existe on l'utilise + p=convert.plugins[format]() + p.readfile(file) + text=p.convert('exec',self) + if not p.cr.estvide(): + raise ValueError(str(p.cr)) + + # On se met dans le repertoire ou se trouve le fichier de commandes + # pour trouver les eventuels fichiers include ou autres + # localises a cote du fichier de commandes + os.chdir(self.initialdir) + CONTEXT.unset_current_step() + J=self.readercata.cata[0].JdC(procedure=text, + appli=self, + cata=self.readercata.cata, + cata_ord_dico=self.readercata.cata_ordonne_dico, + nom=self.JDCName, + rep_mat=self.CONFIGURATION.rep_mat, + ) + J.analyse() + txt= J.cr.get_mess_exception() + if txt:raise ValueError(txt) + return J + + def openTXT(self,text): + self.JDCName="TEXT" + CONTEXT.unset_current_step() + J=self.readercata.cata[0].JdC(procedure=text, + appli=self, + cata=self.readercata.cata, + cata_ord_dico=self.readercata.cata_ordonne_dico, + nom=self.JDCName, + rep_mat=self.CONFIGURATION.rep_mat, + ) + J.analyse() + txt= J.cr.get_mess_exception() + if txt:raise ValueError(txt) + return J + + def create_item(self,obj): + return comploader.make_objecttreeitem(self,getattr(obj,"nom","item"),obj) + + def get_file(self,unite=None,fic_origine = ''): + """ + Retourne le nom du fichier correspondant a l unite logique unite (entier) + ou d'un fichier poursuite + """ + f,ext=os.path.splitext(fic_origine) + if unite : + #include + finclude=f+".%d" % unite + else: + #poursuite + n=ext[-1] + if n == '0': + ext=".comm" + else: + ext=".com%d" % (string.atoi(n)-1) + if ext == '.com0' and not os.path.isfile(f+".com0"): + ext=".comm" + finclude=f+ext + ff=open(finclude) + text=ff.read() + ff.close() + return finclude,text + + def affiche_alerte(self,titre,message): + print titre+ "\n\n" + message diff --git a/InterfaceTK/basestyle.py b/InterfaceTK/basestyle.py new file mode 100644 index 00000000..e4287b75 --- /dev/null +++ b/InterfaceTK/basestyle.py @@ -0,0 +1,27 @@ +class STYLE: + background='gray90' + foreground='black' + entry_background='white' + list_background='white' + list_select_background='#00008b' + list_select_foreground='grey' + tooltip_background="yellow" + + standard = ("Helvetica",12) + standard_italique = ("Helvetica",12,'italic') + standard_gras = ("Helvetica",12,'bold') + standard_gras_souligne = ("Helvetica",12,'bold','underline') + + canvas = ('Helvetica',10) + canvas_italique = ('Helvetica',10,'italic') + canvas_gras = ("Helvetica",10,'bold') + canvas_gras_italique = ("Helvetica",12,'bold','italic') + + standard12 = ("Helvetica",14) + standard12_gras = ("Helvetica",14,'bold') + standard12_gras_italique = ( "Helvetica",14,'bold','italic') + + standardcourier10 = ("Courier",14) + statusfont = ("Helvetica",16) + +style=STYLE() diff --git a/InterfaceTK/browser.py b/InterfaceTK/browser.py new file mode 100644 index 00000000..51c4e3a4 --- /dev/null +++ b/InterfaceTK/browser.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" +""" +# Modules Python +import os,string + +# Modules Eficas +import Interp +import catabrowser +import cataediteur + +class BROWSER: + + menu_defs=[ + ('Browsers',[ + ('Browser catalogue','browser_catalogue'), + ('Editeur catalogue','edite_catalogue'), + ('Shell','shell'), + ] + ) + ] + + button_defs=[] + + def __init__(self,appli,parent): + self.appli=appli + self.parent=parent + self.cataitem = catabrowser.CATAItem(self,"Catalogue "+self.appli.readercata.code, + self.appli.readercata.cata, + objet_cata_ordonne = self.appli.readercata.cata_ordonne_dico) + + def shell(self,event=None): + if not hasattr(self.appli.bureau.JDCDisplay_courant,'jdc'):return + d={'j':self.appli.bureau.JDCDisplay_courant.jdc} + Interp.InterpWindow(d,parent=self.parent) + + def browser_catalogue(self,event=None): + catabrowser.CataBrowser(parent=self.parent,appli=self.appli, + cata = self.appli.readercata.cata, + item = self.cataitem) + + def edite_catalogue(self,event=None): + cataediteur.CataEditeur(parent=self.parent,appli=self.appli,cata=self.appli.readercata.cata) + + + diff --git a/InterfaceTK/bureau.py b/InterfaceTK/bureau.py new file mode 100644 index 00000000..5921a2d5 --- /dev/null +++ b/InterfaceTK/bureau.py @@ -0,0 +1,817 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module contient la classe BUREAU qui gere les JDC ouverts +""" +# Modules Python +import os,string,sys,re +import traceback +import Pmw +from widgets import askopenfilename,asksaveasfilename +from widgets import showinfo,askyesno,showerror + +# Modules Eficas +import splash +import prefs +import convert +import generator +import AIDE +import os +from jdcdisplay import JDCDISPLAY +from Editeur.utils import extension_fichier,stripPath,save_in_file +from widgets import Fenetre,Ask_Format_Fichier,FenetreSurLigneWarning +from fenetre_mc_inconnus import fenetre_mc_inconnus +from Ihm import CONNECTOR +try : + from Traducteur import traduitV7V8 +except : + pass + +from Editeur import comploader + +dict_defext = {"ASTER":".comm","HOMARD":".py","OPENTURNS":".comm"} +dict_filtyp = {"ASTER":(("ASTER", ".comm"),),"HOMARD":(("HOMARD", ".py"),),"OPENTURNS":(("OPENTURNS", ".comm"),)} + +class BUREAU: + menu_defs=[ + ('Fichier',[ + ('Nouveau','newJDC',''), + ('Ouvrir','openJDC',''), + ('Enregistrer','saveJDC',''), + ('Enregistrer sous','saveasJDC',''), + None, + ('Fermer','closeJDC',''), + ('Quitter','exitEFICAS',''), + ] + ), + ('Edition',[ + ('Copier','copy',''), + ('Couper','cut',''), + ('Coller','paste',''), + ] + ), + ('Jeu de commandes',[ + ('Rapport de validation','visuCRJDC',''), + ('Fichier a plat','visu_a_plat',''), + ('Fichier .py','visuJDC_py'), + ('Fichier source','visu_txt_brut_JDC',''), + ('Parametres Eficas','affichage_fichier_ini'), + ('Mots-cles inconnus','mc_inconnus'), + ] + ), + ('Traduction',[ + ('Traduction v7 en v8','TraduitFichier','','Ctrl+T') + ] + ), + ('Aide',[ + ('Aide EFICAS','aideEFICAS','','Ctrl+A'), + ] + ), + ] + + button_defs = (('New24',"newJDC","Creation d'un nouveau fichier",'always'), + ('Open24',"openJDC","Ouverture d'un fichier existant",'always'), + ('Save24',"saveJDC","Sauvegarde du fichier courant",'always'), + ('Fermer24',"closeJDC","Fermeture du fichier courant",'always'), + ('Zoom24',"visuJDC","Visualisation du fichier de commandes",'always'), + None, + ('Copy24',"copy","Copie l'objet courant",'jdc'), + ('Cut24',"cut","Coupe l'objet courant",'jdc'), + ('Paste24',"paste","Colle l'objet copie apres l'objet courant",'jdc'), + None, + ('Delete24',"delete","Supprime l'objet courant",'jdc'), + ('Help24',"view_doc","Documentation de l'objet courant",'jdc') + ) + try: + menu_defs=prefs.menu_defs['bureau'] + except: + pass + try: + button_defs=prefs.button_defs['bureau'] + except: + pass + + def __init__(self,appli,parent): + self.parent=parent + self.appli=appli + if self.appli.test == 0 : + splash._splash.configure(text = "Creation du bureau") + self.nb = Pmw.NoteBook(self.parent,raisecommand=self.selectJDC) + self.nb.pack(fill='both',expand=1) + self.JDCDisplay_courant=None + self.fileName=None + self.liste_JDCDisplay=[] + self.charger_composants() + self.cree_cataitem() + self.text_reel="" + self.initialdir = self.appli.CONFIGURATION.initialdir + + def charger_composants(self): + comploader.charger_composants() + + def cree_cataitem(self): + """ + On recupere dans l'appli_composant readercata les variables + qui servent par la suite pour la creation des JDC + """ + self.cataitem=self.appli.readercata.cataitem + self.cata=self.appli.readercata.cata + self.cata_ordonne_dico=self.appli.readercata.cata_ordonne_dico + self.code=self.appli.readercata.code + self.version_code=self.appli.readercata.version_code + self.fic_cata=self.appli.readercata.fic_cata + + def selectJDC(self,event=None): + """ + Cette methode est appelee chaque fois que l'on selectionne + l'onglet d'un JDC dans le NoteBook des JDC. + Elle permet de stocker dans les variable self.JDC et + self.JDCDisplay_courant les valeurs concernant le JDC courant + """ + if len(self.liste_JDCDisplay) == 0 : return + #if self.JDCDisplay_courant : self.JDCDisplay_courant.jdc.unset_context() + numero_jdc = self.nb.index(self.nb.getcurselection()) + self.JDCDisplay_courant.unselect() + self.JDCDisplay_courant = self.liste_JDCDisplay[numero_jdc] + self.JDC = self.JDCDisplay_courant.jdc + self.JDCName = self.JDC.nom + self.JDCDisplay_courant.select() + #print "selectJDC",numero_jdc,self.JDCDisplay_courant,self.JDCName + + + def newJDC_include(self,event=None): + """ + Initialise un nouveau JDC include vierge + """ + import Extensions.jdc_include + JdC_aux=Extensions.jdc_include.JdC_include + + self.appli.statusbar.reset_affichage_infos() + + CONTEXT.unset_current_step() + jaux=self.cata[0].JdC(procedure="",appli=self.appli, + cata=self.cata,cata_ord_dico=self.cata_ordonne_dico, + rep_mat=self.appli.CONFIGURATION.rep_mat, + ) + jaux.analyse() + + J=JdC_aux(procedure="",appli=self.appli, + cata=self.cata,cata_ord_dico=self.cata_ordonne_dico, + jdc_pere=jaux, + rep_mat=self.appli.CONFIGURATION.rep_mat, + ) + J.analyse() + self.JDCName=J.nom + self.fileName=None + self.ShowJDC(J,self.JDCName) + self.appli.toolbar.active_boutons() + return J + + def newJDC(self,event=None): + """ + Initialise un nouveau JDC vierge + """ + self.appli.statusbar.reset_affichage_infos() + + CONTEXT.unset_current_step() + J=self.cata[0].JdC(procedure="",appli=self.appli, + cata=self.cata,cata_ord_dico=self.cata_ordonne_dico, + rep_mat=self.appli.CONFIGURATION.rep_mat, + ) + J.analyse() + self.JDCName=J.nom + self.fileName=None + self.ShowJDC(J,self.JDCName) + self.appli.toolbar.active_boutons() + return J + + def ShowJDC(self,JDC,nom,label_onglet=None,JDCDISPLAY=JDCDISPLAY,enregistre="non"): + """ + Lance l'affichage du JDC cad creation du JDCDisplay + Rajoute le JDCDisplay a la liste des JDCDisplay si label_onglet == None cad si on cree + bien un nouveau JDCDisplay et non si on remplace (renommage de l'onglet) + """ + self.JDC=JDC + self.JDCName = self.JDC.nom = nom + if label_onglet == None : + # On veut un nouvel onglet + label_onglet = self.GetLabelJDC() + self.nb.add(label_onglet,tab_text = nom,tab_width=20) + new = 'oui' + else : + new = 'non' + self.JDCDisplay_courant=JDCDISPLAY(self.JDC,nom,appli=self.appli,parent=self.nb.page(label_onglet)) + if new == 'oui': + self.liste_JDCDisplay.append(self.JDCDisplay_courant) + self.JDCDisplay_courant.modified='n' + if enregistre != "non" : + self.JDCDisplay_courant.fichier=self.fileName + else : + self.initialdir = self.appli.CONFIGURATION.rep_user + self.nb.selectpage(label_onglet) + self.nb.setnaturalsize() + self.nb.bind_all("",lambda e,s=self:s.selectArbreDown()) + self.nb.bind_all("",lambda e,s=self:s.selectArbreUp()) + self.nb.bind_all("",lambda e,s=self:s.deplieReplieNode()) + texte = "Jeu de commandes :" + self.JDCName+" ouvert" + CONNECTOR.Connect(JDC,"close",self.onClose,(self.JDCDisplay_courant,)) + self.appli.affiche_infos(texte) + + def onClose(self,jdcdisplay): + #print "onClose",jdcdisplay + self.closeJDCDISPLAY(jdcdisplay) + + def closeJDCDISPLAY(self,jdc): + """ + Ferme le jdcdisplay specifie par l'argument jdc + """ + if jdc is self.JDCDisplay_courant: + # on ferme le jdcdisplay courant + self.closeSelectedJDC() + else: + # on ferme un autre jdcdisplay que le courant + old_JDCDisplay=self.JDCDisplay_courant + old_page=self.nb.getcurselection() + + self.JDCDisplay_courant=jdc + self.JDC=jdc.jdc + numero_jdc=self.liste_JDCDisplay.index(jdc) + self.nb.selectpage(numero_jdc) + #print numero_jdc + + self.closeSelectedJDC() + self.JDCDisplay_courant=old_JDCDisplay + self.JDC=old_JDCDisplay.jdc + self.nb.selectpage(old_page) + + def closeJDC (self,event=None) : + """ + Ferme le JDC associe au JDCDISPLAY selectionne + """ + if self.JDCDisplay_courant : + self.JDCDisplay_courant.jdc.close() + + def closeSelectedJDC (self) : + """ + Ferme le JDC courant et detruit l'onglet associe dans le notebook self.nb + """ + if self.JDCDisplay_courant.modified == 'o' : + message = "Voulez-vous sauvegarder le jeu de commandes "+self.JDC.nom+" courant ?" + reponse = askyesno(title="Sauvegarde du jdc courant", + message=message) + if reponse : + test = self.saveJDC() + if test == 0 : + self.appli.affiche_infos("Sauvegarde impossible") + return + + CONNECTOR.Disconnect(self.JDCDisplay_courant.jdc,"close",self.onClose,(self.JDCDisplay_courant,)) + self.JDCDisplay_courant.supprime() + self.JDCDisplay_courant.jdc.supprime() + self.liste_JDCDisplay.remove(self.JDCDisplay_courant) + # Active le mecanisme de selection du notebook (selectJDC) + self.nb.delete(self.nb.getcurselection()) + + try: + index = self.nb.index(self.nb.getcurselection()) + self.JDCDisplay_courant = self.liste_JDCDisplay[index] + self.JDC = self.JDCDisplay_courant.jdc + except: + self.JDC = None + self.JDCDisplay_courant = None + self.appli.toolbar.inactive_boutons() + + def visuCRJDC(self,event=None): + return self.visuCR(mode='JDC') + + def visuCR(self,mode): + """ + Methode permettant l'affichage du rapport de validation + """ + if mode == 'JDC': + if not hasattr(self,'JDC') : return + if self.JDC == None : return + titre="rapport de validation du jeu de commandes courant" + cr = self.JDC.report() + #self.update_jdc_courant() + elif mode == 'CATA': + from Noyau.N_CR import CR + cr = CR() + cr.debut = "Debut rapport de validation du catalogue" + cr.fin = "Fin rapport de validation du catalogue" + titre="rapport de validation du catalogue" + if hasattr(self,'cata_ordonne_cr') : + cr.add(self.cata_ordonne_cr) + if hasattr(self,'cata_dev_ordonne_cr') : + cr.add(self.cata_dev_ordonne_cr) + for cata in self.cata: + if hasattr(cata,'JdC'): + cr.add(cata.JdC.report()) + texte_cr = str(cr) + self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr) + + def openJDC(self,event=None,file=None,units=None,enregistre="oui"): + """ + Demande a l'utilisateur quel JDC existant il veut ouvrir + """ + if self.code == 'ASTER': + filetypes = ( ("format "+self.appli.format_fichier.get(), ".com*"),("Tous",'*')) + elif self.code == 'HOMARD' : + filetypes = ( ("format "+self.appli.format_fichier.get(), ".py"),("Tous",'*')) + elif self.code == 'OPENTURNS' : + filetypes = ( ("format "+self.appli.format_fichier.get(), ".com*"),("Tous",'*')) + else: + filetypes = ( ("format "+self.appli.format_fichier.get(), ".py"),) + if not hasattr(self,'initialdir'): + self.initialdir = self.appli.CONFIGURATION.initialdir + + if not file : + file = askopenfilename(title="Ouverture d'un fichier de commandes Aster", + defaultextension=".comm", + filetypes = filetypes, + initialdir = self.initialdir) + if file : + self.fileName = file + e=extension_fichier(file) + self.JDCName=stripPath(file) + self.initialdir = os.path.dirname(os.path.abspath(file)) + else : + return + + # Il faut convertir le contenu du fichier en fonction du format + format=self.appli.format_fichier.get() + if convert.plugins.has_key(format): + # Le convertisseur existe on l'utilise + p=convert.plugins[format]() + p.readfile(file) + text=p.convert('exec',self.appli) + if not p.cr.estvide(): + self.appli.affiche_infos("Erreur a la conversion") + Fenetre(self.appli, + titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier", + texte = str(p.cr)).wait() + return + if enregistre == "oui" : + self.appli.listeFichiers.aOuvert(file) + else: + # Il n'existe pas c'est une erreur + self.appli.affiche_infos("Type de fichier non reconnu") + showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier") + return + + # On se met dans le repertoire ou se trouve le fichier de commandes + # pour trouver les eventuels fichiers include ou autres + # localises a cote du fichier de commandes + os.chdir(self.initialdir) + CONTEXT.unset_current_step() + J=self.cata[0].JdC(procedure=text,appli=self.appli, + cata=self.cata,cata_ord_dico=self.cata_ordonne_dico, + nom = self.JDCName, + rep_mat=self.appli.CONFIGURATION.rep_mat, + ) + if units is not None: + J.recorded_units=units + J.old_recorded_units=units + + J.analyse() + txt_exception = J.cr.get_mess_exception() + if txt_exception : + # des exceptions ont ete levees a la creation du JDC + # --> on affiche les erreurs mais pas le JDC + self.JDC=J + self.appli.affiche_infos("Erreur fatale au chargement de %s" %file) + if self.appli.test == 0 : + showerror("Erreur fatale au chargement d'un fichier",txt_exception) + else: + self.ShowJDC(J,self.JDCName,enregistre=enregistre) + self.appli.toolbar.active_boutons() + # si le JDC ne contient rien (vide), on retourne ici + if len(self.JDC.etapes) == 0 : return + # dans le cas ou le JDC est invalide, on affiche son CR + if not self.JDC.isvalid(): + self.appli.top.update() + self.visuCR(mode='JDC') + return J + + def deplieReplieNode(self): + self.JDCDisplay_courant.tree.tree.deplieReplieNode() + + def selectArbreDown(self): + self.JDCDisplay_courant.tree.tree.canvas.focus_set() + self.JDCDisplay_courant.tree.tree.mot_down_force() + + def selectArbreUp(self): + self.JDCDisplay_courant.tree.tree.canvas.focus_set() + self.JDCDisplay_courant.tree.tree.mot_up_force() + + def GetLabelJDC(self,nb_jdc = 'absent'): + """ + Retourne le label de l'onglet du NoteBook associe au JDC a afficher + """ + if nb_jdc == 'absent': + nb_jdc = len(self.nb.pagenames()) + nb_jdc = nb_jdc+1 + label_onglet = 'JDC'+`nb_jdc` + if label_onglet not in self.nb.pagenames() : + return label_onglet + else : + return self.GetLabelJDC(nb_jdc) + + def saveasJDC(self,event=None): + """ + Sauvegarde le JDC courant en demandant imperativement a l'utilisateur de + donner le nom du fichier de sauvegarde + """ + self.saveJDC(echo='oui') + + def saveJDC(self,echo='non'): + """ + Sauvegarde le JDC courant. + Retourne 1 si la sauvegarde s'est bien faite, 0 sinon. + + - Si echo = 'oui' : interactif (l'utilisateur donne le nom sous lequel il + veut sauver le JDC + - Si echo = 'non' : muet (sauvegarde le JDC dans JDC.procedure) + """ + ok = 0 + if not hasattr(self,'JDC') : return 0 + format=self.appli.format_fichier.get() + if generator.plugins.has_key(format): + # Le generateur existe on l'utilise + g=generator.plugins[format]() + jdc_formate=g.gener(self.JDC,format='beautifie') + if format == 'homard': + self.jdc_homard=g.get_homard() + elif format == 'openturns' : + self.jdc_openturn_xml=g.getOpenturnsXML() + self.jdc_openturn_std=g.getOpenturnsSTD() + if not g.cr.estvide(): + self.appli.affiche_infos("Erreur a la generation") + showerror("Erreur a la generation","EFICAS ne sait pas convertir ce JDC") + return + else: + # Il n'existe pas c'est une erreur + self.appli.affiche_infos("Format %s non reconnu" % format) + showerror("Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC") + return + self.jdc_fini = string.replace(jdc_formate,'\r\n','\n') + + if echo =='oui' or self.JDCDisplay_courant.fichier == None: + ok = self.asknomsauvegardeJDC() + elif self.JDCDisplay_courant.fichier != None : + # le JDC a deja un nom : on sauvegarde directement sans demander + # un autre nom au developpeur + if not save_in_file(self.JDCDisplay_courant.fichier,self.jdc_fini,self.appli.dir) : + showinfo("Erreur","Probleme a la sauvegarde du fichier :" + `self.JDCDisplay_courant.fichier`) + #return 0 + ok = 0 + else : + if self.appli.format_fichier.get() == 'homard': + self.save_homard(self.JDCDisplay_courant.fichier,self.jdc_homard) + elif self.appli.format_fichier.get() == 'openturns': + self.save_openturns(self.JDCDisplay_courant.fichier[0:-3], + self.jdc_openturn_xml, + self.jdc_openturn_std) + self.JDCDisplay_courant.stop_modif() + self.appli.affiche_infos("sauvegarde de "+`self.JDCDisplay_courant.fichier`+" effectuee") + ok = 1 + + if ok and self.appli.salome: + # eficas a ete lance a partir deSalome + #1)ajout dans l'arbre d'etude du nom du jdc + if self.appli.salome==0 : return 0 + ok, msg = self.appli.addJdcInSalome( self.JDCDisplay_courant.fichier ) + + #2)CS_pbruno ?? + from panelsSalome import SALOME_UNIQUE_BASE_Panel + if len(SALOME_UNIQUE_BASE_Panel.dict_fichier_unite) > 0 : + print 'CS_pbruno if len(SALOMchier_unite) > 0 :???????' + self.appli.creeConfigTxt( self.appli.CONFIGURATION.initialdir, SALOME_UNIQUE_BASE_Panel.dict_fichier_unite ) + + #3)creation/mise a jours d'un maillage dans Salome + if self.code == 'ASTER': + self.appli.createOrUpdateMesh() + return ok + + def asknomsauvegardeJDC(self): + """ Demande a l'utilsateur le nom sous lequel il veut sauvegarder le JDC courant """ + titre = "Sauvegarde d'un fichier de commandes "+self.code + if dict_defext.has_key(self.code) : + defext = dict_defext[self.code] + filtyp = dict_filtyp[self.code] + else : + defext = ".py" + filtyp = ( (self.code, ".py"),) + sauvegarde = asksaveasfilename(title=titre, + defaultextension=defext, + filetypes = filtyp, + initialdir = self.initialdir) + #initialdir = self.appli.CONFIGURATION.initialdir) + #initialdir = self.appli.CONFIGURATION.rep_user) + if sauvegarde : + if not save_in_file(sauvegarde,self.jdc_fini,None) : + showinfo("Erreur","Probleme a la sauvegarde du fichier "+`sauvegarde`) + return 0 + else : + if self.appli.format_fichier.get() == 'homard': + self.save_homard(sauvegarde,self.jdc_homard) + elif self.appli.format_fichier.get() == 'openturns': + self.save_openturns(sauvegarde, + self.jdc_openturn_xml, + self.jdc_openturn_std) + self.JDCDisplay_courant.stop_modif() + self.appli.affiche_infos("Sauvegarde effectuee") + if sauvegarde != self.JDCDisplay_courant.fichier : + # l'utilisateur a sauvegarde le JDC sous un autre nom + self.JDCDisplay_courant.fichier = sauvegarde + self.JDCName = self.JDC.nom = stripPath(sauvegarde) + self.JDC.changefichier(sauvegarde) + self.changeNomPage() + return 1 + else : + return 0 + + def changeNomPage(self): + """ Change le nom de l'onglet contenant le JDC courant : en fait detruit l'actuel + et recree un autre onglet a la même place avec le bon nom + """ + nom = self.JDCName + self.JDCDisplay_courant.jdc.nom = nom + nom_page = self.nb.getcurselection() + num_page = self.nb.index(nom_page) + tab = self.nb.tab(num_page) + tab.configure(text = nom) + + def exitEFICAS(self,event=None): + """ + Permet de sortir d'EFICAS en demandant a l'utilisateur + s'il veut sauvegarder les modifications en cours + """ + liste = self.GetListeJDCaSauvegarder() + if liste != [] : + # Certains fichiers n'ont pas ete sauvegardes ... + if askyesno("Enregistrer modifications","Enregistrer les modifications ?") : + test = self.saveall(liste) + if test != 1 : + return + if askyesno ("Quitter","Voulez-vous vraiment quitter l'application ?") : + for JDCDisplay in self.liste_JDCDisplay: + JDCDisplay.jdc.supprime() + self.appli.quit() + return + + def GetListeJDCaSauvegarder(self) : + """ Retourne parmi la liste de tous les JDC ouverts la liste de ceux qui ont ete modifies """ + if not self.JDCDisplay_courant : return [] + if len(self.liste_JDCDisplay) == 0 : return l + l = [] + for JDCDisplay in self.liste_JDCDisplay: + if JDCDisplay.modified == 'o' : + l.append(JDCDisplay) + return l + + def copy(self,event=None): + """ + Lance la copie sur le JDC courant + """ + if self.JDCDisplay_courant : self.JDCDisplay_courant.doCopy() + + def paste(self,event=None): + """ + Lance le collage sur le JDC courant + """ + if self.JDCDisplay_courant : self.JDCDisplay_courant.doPaste() + + def cut(self,event=None): + """ + Lance le cut sur le JDC courant + """ + if self.JDCDisplay_courant: self.JDCDisplay_courant.doCut() + + def delete(self): + """ + Lance la suppression du noeud courant + """ + if not self.JDCDisplay_courant : return + self.JDCDisplay_courant.init_modif() + self.JDCDisplay_courant.node_selected.delete() + + def visuJDC_py(self,event=None): + """ + Methode permettant d'afficher dans une fenêtre a part l'echo au + format python du jdc courant + """ + if not hasattr(self,'JDC') : return + jdc_fini = self.get_text_JDC('python') + if jdc_fini == None : return + Fenetre(self.appli, + titre = 'fichier '+ self.JDCName + ' a la syntaxe Python', + texte = jdc_fini) + + def visuJDC(self): + """ + Methode permettant d'afficher dans une fenêtre a part l'echo au + format .comm ou .py du jdc courant + """ + if not hasattr(self,'JDC') : return + titre = 'fichier '+ self.JDCName + ' a la syntaxe '+ self.code + format=self.appli.format_fichier.get() + self.jdc_fini = self.get_text_JDC(format) + if self.jdc_fini == None : return + self.visu_fichier_cmd = Fenetre(self.appli,titre=titre,texte = self.jdc_fini) + + def get_text_JDC(self,format): + if generator.plugins.has_key(format): + # Le generateur existe on l'utilise + g=generator.plugins[format]() + jdc_formate=g.gener(self.JDC,format='beautifie') + if not g.cr.estvide(): + self.appli.affiche_infos("Erreur a la generation") + showerror("Erreur a la generation","EFICAS ne sait pas convertir ce JDC") + return + else: + return jdc_formate + else: + # Il n'existe pas c'est une erreur + self.appli.affiche_infos("Format %s non reconnu" % format) + showerror("Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC en format %s "% format) + return + + def view_doc(self): + """ + Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader + - Ne fonctionne pas sous UNIX (chemin d'acces Acrobat Reader) + - indication du chemin d'acces aux fichiers pdf a revoir : trop statique + """ + if not self.JDCDisplay_courant : return + try: + cle_doc = self.JDCDisplay_courant.node_selected.item.get_docu() + if cle_doc == None : return + cle_doc = string.replace(cle_doc,'.','') + cle_doc = string.replace(cle_doc,'-','') + commande = self.appli.CONFIGURATION.exec_acrobat + nom_fichier = cle_doc+".pdf" + fichier = os.path.abspath(os.path.join(self.appli.CONFIGURATION.path_doc,nom_fichier)) + if os.name == 'nt': + os.spawnv(os.P_NOWAIT,commande,(commande,fichier,)) + elif os.name == 'posix': + script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier) + pid = os.system(script) + except AttributeError: + traceback.print_exc() + pass + + def visu_a_plat(self,event=None): + """ + Methode permettant d'afficher dans une fenêtre a part l'echo 'a plat' du jdc courant + """ + if not hasattr(self,'JDC') : return + titre = 'fichier '+ self.JDCName + ' a plat ' + self.jdc_fini = self.get_text_JDC('aplat') + if self.jdc_fini == None : return + self.visu_fichier_cmd = Fenetre(self.appli,titre=titre,texte = self.jdc_fini) + + def visu_txt_brut_JDC(self,event=None): + """ + Methode permettant d'afficher le jeu de commandes tel qu'il a ete passe au JDC + """ + if not hasattr(self,'JDC') : return + titre = "fichier de commandes utilisateur" + #texte = self.JDC.procedure + #if texte == None: + if self.JDCDisplay_courant.fichier == None: + self.appli.affiche_infos("Pas de fichier initial") + showerror("Impossible de visualiser le fichier initial", + "EFICAS ne peut visualiser le fichier initial.\nIl s'agit d'un nouveau JDC") + return + os.chdir(self.appli.dir) + f=open(self.JDCDisplay_courant.fichier,'r') + texte=f.read() + f.close() + self.visu_texte_JDC = Fenetre(self.appli,titre=titre,texte=texte) + + def affichage_fichier_ini(self): + """ + Affichage des valeurs des parametres relus par Eficas + """ + self.appli.CONFIGURATION.affichage_fichier_ini() + + def saveall(self,liste): + """ + Sauvegarde tous les JDC contenus dans liste + """ + test = 1 + for JDCDisplay in liste : + self.JDCDisplay_courant=JDCDisplay + self.JDC = JDCDisplay.jdc + test = test * self.saveJDC(echo = 'non') + return test + + def save_homard(self,nom,texte): + file_homard=nom+'.conf_homard' + try: + f=open(file_homard,'w') + for ligne in texte: + f.write(ligne) + f.write('\n') + f.close() + except: + print "Pb a la sauvegarde sous le format homard" + if self.appli.salome: + import eficasEtude + self.appli.salome.rangeInStudy(file_homard,"_CONF") + + def save_openturns(self,nom,texteXML,texteSTD): + nomSansSuf=nom[:nom.rfind(".")] + fileXML=nomSansSuf + '.xml' + fileSTD=nomSansSuf + '_Std.py' + try: + f=open(fileXML,'w') + f.write(texteXML) + f.close() + except: + print "Pb sauvegarde openturns pour le format xml" + try: + #print texteSTD + if nomSansSuf.rfind("/") > 0 : + nomSansSuf=nomSansSuf[nomSansSuf.rfind("/")+1:] + texteSTD=re.sub('XXXXXX',nomSansSuf,texteSTD) + #print texteSTD + f=open(fileSTD,'w') + f.write(texteSTD) + f.close() + except: + print "Pb sauvegarde openturns pour le format STD" + if self.appli.salome == 1: + ok, msg = self.appli.addJdcInSalome( fileSTD ) + ok, msg = self.appli.addJdcInSalome( fileXML ) + +# --------------------------------------------------------------------------- +# Methodes liees aux mots-cles inconnus +# --------------------------------------------------------------------------- + + def mc_inconnus(self): + l_mc = self.JDCDisplay_courant.jdc.get_liste_mc_inconnus() + o = fenetre_mc_inconnus(l_mc) + l = o.wait_new_list() + #print "mc_inconnus_new_list: ",l + #CCAR: Il n' y a pas de retour vers le JDC + + def aideEFICAS(self,event=None): + AIDE.go(master=self.parent) + + def update_jdc_courant(self): + self.JDCDisplay_courant.update() + + def TraduitFichier(self,event=None): + directory = self.appli.CONFIGURATION.rep_user + FichieraTraduire = askopenfilename(title="Nom du Fichier a Traduire", + defaultextension=".comm", + initialdir = directory + ) + if (FichieraTraduire == "" or FichieraTraduire == () ) : return + i=FichieraTraduire.rfind(".") + Feuille=FichieraTraduire[0:i] + FichierTraduit=Feuille+"v8.comm" + log=self.initialdir+"/convert.log" + os.system("rm -rf "+log) + os.system("rm -rf "+FichierTraduit) + Pmw.showbusycursor() + traduitV7V8.traduc(FichieraTraduire,FichierTraduit,log) + Pmw.hidebusycursor() + Entete="Fichier Traduit : "+FichierTraduit +"\n\n" + titre = "conversion de "+ FichieraTraduire + + if os.stat(log)[6] != 0L : + f=open(log) + texte_cr= f.read() + f.close() + else : + texte_cr = Entete + commande="diff "+FichieraTraduire+" "+FichierTraduit+" >/dev/null" + try : + if os.system(commande) == 0 : + texte_cr = texte_cr + "Pas de difference entre le fichier V7 et le fichier traduit" + except : + pass + + cptrendu = FenetreSurLigneWarning(self.appli,titre=titre,texte=texte_cr) + diff --git a/InterfaceTK/catabrowser.py b/InterfaceTK/catabrowser.py new file mode 100644 index 00000000..7ce303ed --- /dev/null +++ b/InterfaceTK/catabrowser.py @@ -0,0 +1,398 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import os +import sys +import types +import string +import Pmw +from Tkinter import * + +# Modules Eficas +import fontes +from treewidget import Tree +from Editeur.Objecttreeitem import TreeItem +from Accas import AsException +from Noyau.N_CR import justify_text +from Accas import OPER,PROC,MACRO,FORM +from Accas import FACT,BLOC,SIMP + +# +__version__="$Name: V1_14 $" +__Id__="$Id: catabrowser.py,v 1.1.4.3.4.1 2008-10-10 13:46:35 pnoyret Exp $" +# +class Tableau: + incr = 10 + def __init__(self,parent,colonnes): + self.parent = parent + self.colonnes = colonnes + self.init() + + def init(self): + # recherche du nombre maxi de lignes et de colonnes.... + for col in self.colonnes : + nb_l = 0 + if len(col) > nb_l : nb_l = len(col) + self.nb_lignes = nb_l + self.nb_colonnes = len(self.colonnes) + # initialisation des coordonnées dans le canvas + self.x0 = self.incr + self.y0 = self.incr + self.x = self.x0 + self.incr + self.y = self.y0 + self.incr + + def affiche(self): + self.scrolledcanvas=Pmw.ScrolledCanvas(self.parent, + hull_width=1., + hull_height=1., + borderframe=1) + Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95') + self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both") + self.canvas = self.scrolledcanvas.component('canvas') + self.affiche_colonnes() + + def affiche_colonnes(self): + for i in range(self.nb_lignes): + self.affiche_ligne(i) + self.aligne_colonnes() + self.trace_traits() + self.scrolledcanvas.resizescrollregion() + + def get_xy_max(self): + try: + x0,y0,xmax,ymax = self.canvas.bbox(ALL) + return xmax,ymax + except: + return None,None + + def trace_traits(self): + xmax,ymax = self.get_xy_max() + if not xmax : return + xmax = xmax+self.incr + ymax = ymax+self.incr + # trace les traits horizontaux + for i in range(self.nb_lignes): + tag_lig = 'ligne_'+`i` + l_id = self.canvas.find_withtag(tag_lig) + x0,y0,x1,y1 = self.bbox(l_id) + self.canvas.create_line(x0-self.incr,y0-self.incr,xmax,y0-self.incr) + self.canvas.create_line(self.x0,ymax,xmax,ymax) + # trace les traits verticaux + for j in range(self.nb_colonnes): + tag_col = 'colonne_'+`j` + l_id = self.canvas.find_withtag(tag_col) + x0,y0,x1,y1 = self.bbox(l_id) + self.canvas.create_line(x0-self.incr,y0-self.incr,x0-self.incr,ymax) + self.canvas.create_line(xmax,self.y0,xmax,ymax) + + def bbox(self,l_id): + x0,y0,x1,y1 = self.canvas.bbox(l_id[0]) + for id in l_id[1:]: + x2,y2,x3,y3 = self.canvas.bbox(id) + x0 = min(x2,x0) + y0 = min(y2,y0) + x1 = max(x3,x1) + y1 = max(y3,y1) + return x0,y0,x1,y1 + + def affiche_ligne(self,num_lig): + tag_lig = 'ligne_'+`num_lig` + num_col = 0 + for col in self.colonnes: + tag_col = 'colonne_'+`num_col` + x = 100*num_col+self.x + id = self.canvas.create_text(x,self.y, + text = justify_text(col[num_lig],cesure=60), + tag=(tag_lig,tag_col), + anchor='nw', + font = fontes.canvas) + x0,y0,x1,y1 = self.canvas.bbox(id) + num_col = num_col+1 + l_id = self.canvas.find_withtag(tag_lig) + x0,y0,x1,y1 = self.bbox(l_id) + self.y = y1 + 2*self.incr + + def aligne_colonnes(self): + num_col = 0 + for col in self.colonnes: + tag_col = 'colonne_'+`num_col` + l_id = self.canvas.find_withtag(tag_col) + if not l_id : continue + x0,y0,x1,y1 = self.bbox(l_id) + self.move(x1+self.incr,self.colonnes[num_col+1:],num_col+1) + num_col = num_col+1 + + def move(self,x,colonnes,num): + num_col = num + for col in colonnes: + tag_col = 'colonne_'+`num_col` + l_id = self.canvas.find_withtag(tag_col) + if not l_id : continue + x0,y0,x1,y1 = self.canvas.bbox(l_id[0]) + self.canvas.move(tag_col,x+self.incr-x0,0) + num_col = num_col+1 + +class CATAPanel(Frame) : + """ Classe servant à créer le panneau représentant l'objet sélectionné dans l'arbre""" + def __init__(self,parent,panneau,node) : + self.parent=parent + self.panneau = panneau + self.node=node + Frame.__init__(self,self.panneau) + self.place(x=0,y=0,relheight=1,relwidth=1) + self.init() + + def init(self): + # création du label initial + label = Label(self, + text = 'Attributs de '+self.node.item.labeltext, + font = fontes.standard_gras_souligne) + label.pack(side='top',pady=10) + # création des listes correspondant aux colonnes du tableau à afficher + colonne1,colonne2 = self.get_listes() + # affichage du tableau + self.tableau = Tableau(self,(colonne1,colonne2)) + self.tableau.affiche() + + def get_listes(self): + self.node.item.get_dico_attributs() + l_cles_attributs = self.node.item.d_attributs.keys() + l_cles_attributs.sort() + ind=0 + liste1 = [] + liste2=[] + for nom_attr in l_cles_attributs : + valeur = self.node.item.d_attributs[nom_attr] + if type(valeur) == types.TupleType: + texte ='' + for elem in valeur: + if type(elem) == types.ClassType: + texte = texte + elem.__name__ + else: + texte = texte + str(elem) + elif type(valeur) == types.ClassType : + texte = valeur.__name__ + else: + texte = str(valeur) + liste1.append(nom_attr) + liste2.append(texte) + return liste1,liste2 + +class CATAItem(TreeItem): + panel = CATAPanel + def __init__(self,appli,labeltext,object,setfunction=None,objet_cata_ordonne = None): + self.appli = appli + self.labeltext = labeltext + self.object=object + self.setfunction = setfunction + self.objet_cata_ordonne = objet_cata_ordonne + + def get_dico_fils(self): + d_fils = {} + if type(self.object) != types.TupleType: + for e in dir(self.object): + cmd = getattr(self.object,e) + if isCMD(cmd) : + d_fils[string.strip(cmd.nom)] = cmd + else: + for obj in self.object : + for e in dir(obj): + cmd = getattr(obj,e) + if isCMD(cmd) : + d_fils[string.strip(cmd.nom)] = cmd + self.d_fils = d_fils + + def get_dico_attributs(self): + d_attributs ={} + if type(self.object) == types.TupleType : + self.d_attributs = d_attributs + return + l_noms_attributs = ['nom','op','sd_prod','reentrant','repetable','fr','docu','into','valide_vide','actif', + 'regles','op_init','niveau','definition','code','niveaux','statut', + 'defaut','min','max','homo','position','val_min','val_max','condition'] + for nom_attribut in l_noms_attributs : + if hasattr(self.object,nom_attribut): + attr = getattr(self.object,nom_attribut) + d_attributs[nom_attribut] = attr + self.d_attributs = d_attributs + + def get_liste_mc_ordonnee(self): + """ Retourne la liste ordonnée (suivant le catalogue) brute des fils + de l'entite courante """ + if hasattr(self.objet_cata_ordonne,'ordre_mc'): + return self.objet_cata_ordonne.ordre_mc + else : + l=self.objet_cata_ordonne.keys() + l.sort() + return l + + def GetLabelText(self): + return self.labeltext,None,None + + def get_fr(self): + return '' + + def isMCList(self): + return 0 + + def GetSubList(self): + sublist=[] + if not hasattr(self,'d_fils'): + self.get_dico_fils() + # on classe les fils dans l'odre du catalogue ... + l_cles_fils = self.get_liste_mc_ordonnee() + for k in l_cles_fils : + if type(self.objet_cata_ordonne) == types.InstanceType : + objet_cata = self.objet_cata_ordonne.entites[k] + else : + objet_cata = self.objet_cata_ordonne.get(k,None) + item = make_objecttreeitem(self.appli,k + " : ",self.d_fils[k], + objet_cata_ordonne = objet_cata) + sublist.append(item) + return sublist + + def GetIconName(self): + return 'ast-green-square' + + def isactif(self): + return 1 + +class CMDItem(CATAItem): + + def get_dico_fils(self): + self.d_fils = self.object.entites + +class SIMPItem(CATAItem): + d_fils={} + d_attributs={} + + def GetIconName(self): + return 'ast-green-ball' + + def IsExpandable(self): + return 0 + +class FACTItem(CMDItem): + def GetIconName(self): + return 'ast-green-los' + +class BLOCItem(FACTItem): pass + +class ATTRIBUTItem(SIMPItem): + def get_dico_attributs(self): + self.d_attributs = {} + + def GetSubList(self): + return [] + + def IsExpandable(self): + return 0 + + def GetText(self): + return self.object + + def GetIconName(self): + return 'aucune' + +class CataBrowser: + def __init__(self,parent,appli,cata,item = None): + self.parent = parent + self.cata = cata + self.appli = appli + self.item = item + self.init() + + def close(self): + self.top.destroy() + + def init(self): + self.nodes={} + self.top = Pmw.Dialog(self.parent, + title = "Visualisation d'un catalogue", + buttons=('OK',), + command = self.quit) + self.pane = Pmw.PanedWidget(self.top.component('dialogchildsite'), + hull_width = 800, + hull_height = 500, + orient = 'horizontal') + self.pane.add('canvas',min = 0.4, max = 0.6, size = 0.5) + self.pane.add('panel',min = 0.4, max = 0.6, size = 0.5) + self.pane.pack(expand =1, fill = 'both') + self.scrolledcanvas = Pmw.ScrolledCanvas(self.pane.pane('canvas'), + hull_width=1., + hull_height=1., + borderframe=1) + Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95') + self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both") + if self.item == None : + self.item = CATAItem(self.appli,"Catalogue",self.cata) + self.tree = Tree(self.appli,self.item,self.scrolledcanvas,command = self.select_node) + self.tree.draw() + self.node = self.tree.node_selected + + def select_node(self,node): + self.nodes[node]=self.create_panel(node) + + def create_panel(self,node): + if hasattr(node.item,"panel"): + return getattr(node.item,"panel")(self,self.pane.pane('panel'),node) + + def quit(self,nom_bouton) : + self.top.destroy() + + def settitle(self): + self.top.wm_title("Browser de catalogue " ) + self.top.wm_iconname("CataBrowser") + + +dispatch = { + OPER : CMDItem, + PROC : CMDItem, + MACRO : CMDItem, + SIMP : SIMPItem, + FACT : FACTItem, + BLOC : BLOCItem, +} + +def TYPE(o): + if isinstance(o,OPER):return OPER + elif isinstance(o,PROC):return PROC + elif isinstance(o,MACRO):return MACRO + elif isinstance(o,FORM):return MACRO + elif isinstance(o,SIMP):return SIMP + elif isinstance(o,FACT):return FACT + elif isinstance(o,BLOC):return BLOC + else:return type(o) + +def make_objecttreeitem(appli,labeltext, object, setfunction=None,objet_cata_ordonne=None): + t = TYPE(object) + if dispatch.has_key(t): + c = dispatch[t] + else: + #print 'on a un objet de type :',t,' ',object + c = ATTRIBUTItem + return c(appli,labeltext, object, setfunction = setfunction,objet_cata_ordonne=objet_cata_ordonne) + +def isCMD(cmd): + return isinstance(cmd,OPER) or isinstance(cmd,PROC) or isinstance(cmd,MACRO) or isinstance(cmd,FORM) + + + diff --git a/InterfaceTK/cataediteur.py b/InterfaceTK/cataediteur.py new file mode 100644 index 00000000..e7e4499e --- /dev/null +++ b/InterfaceTK/cataediteur.py @@ -0,0 +1,975 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import os +import sys +import types +import string +import Pmw +from widgets import showinfo +from Tkinter import * + +# Modules Eficas +import fontes +from widgets import * +from treewidget import Tree +from Editeur.Objecttreeitem import TreeItem +from Accas import AsException +from Noyau.N_CR import justify_text + +from Accas import ASSD,GEOM +import definition_cata + +# +__version__="$Name: V1_14 $" +__Id__="$Id: cataediteur.py,v 1.1.4.3.4.1 2008-10-10 13:47:11 pnoyret Exp $" +# + +Fonte_Niveau = fontes.canvas_gras_italique + +class Panel(Frame) : + """ Classe servant de classe mère à toutes celles représentant les + panneaux à afficher en fonction de la nature de l'objet en cours + Elle est toujours dérivée.""" + def __init__(self,parent,panneau,node) : + self.parent=parent + self.panneau = panneau + self.node=node + Frame.__init__(self,self.panneau) + self.place(x=0,y=0,relheight=1,relwidth=1) + #self.creer_boutons() + self.init() + + def creer_boutons(self): + """ Méthode créant les boutons se trouvant dans la partie contextuelle d'EFICAS + (à droite sous les onglets ) """ + self.fr_but = Frame(self,height=30) + self.fr_but.pack(side='bottom',fill='x') + self.bouton_com = Button(self.fr_but, + text = 'Commentaire', + command = self.ajout_commentaire, + width=14) + self.bouton_sup = Button(self.fr_but, + text = "Supprimer", + command=self.supprimer, + width=14) + self.bouton_doc = Button(self.fr_but, + text="Documentation", + command=self.visu_doc, + width=14) + self.bouton_cata = Button(self.fr_but, + text = "Catalogue", + command = self.show_catalogue, + width=14) + if self.parent.appli.CONFIGURATION.isdeveloppeur == 'OUI': + self.bouton_sup.place(relx=0.25,rely = 0.5,relheight = 0.8,anchor='w') + self.bouton_cata.place(relx=0.5,rely = 0.5,relheight = 0.8,anchor='w') + self.bouton_doc.place(relx=0.75,rely = 0.5,relheight = 0.8,anchor='w') + else: + self.bouton_sup.place(relx=0.3,rely = 0.5,relheight = 0.8,anchor='w') + self.bouton_doc.place(relx=0.7,rely = 0.5,relheight = 0.8,anchor='w') + + def show_catalogue(self): + try: + genea = self.node.item.get_genealogie() + self.parent.appli.browser_catalogue_objet(genea) + except Exception,e: + traceback.print_exc() + + def efface(self): + self.node.efface() + + def ajout_commentaire(self,ind='after'): + """ Ajoute un commentaire à l'intérieur du JDC, par défaut après le noeud en cours""" + if self.parent.modified == 'n' : self.parent.init_modif() + return self.node.append_brother("COMMENTAIRE",ind) + + def ajout_commentaire_first(self): + """ Ajoute un commentaire en début de JDC""" + if self.parent.modified == 'n' : self.parent.init_modif() + return self.node.append_child("COMMENTAIRE",'first') + + def visu_doc(self): + """ Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader + - Ne fonctionne pas sous UNIX (chemin d'accès Acrobat Reader) + - indication du chemin d'accès aux fichiers pdf à revoir : trop statique""" + cle_doc = self.parent.appli.get_docu(self.node) + if cle_doc == None : return + cle_doc = string.replace(cle_doc,'.','') + commande = self.parent.appli.CONFIGURATION.exec_acrobat + nom_fichier = cle_doc+".doc" + rep_fichier = cle_doc[0:2] + fichier = os.path.abspath(os.path.join(self.parent.appli.CONFIGURATION.path_doc,rep_fichier,nom_fichier)) + print 'commande =',commande + print 'fichier =',fichier + print 'existe =',os.path.isfile(fichier) + if os.name == 'nt': + os.spawnv(os.P_NOWAIT,commande,(commande,fichier)) + elif os.name == 'posix': + script ="#!/usr/bin/sh \n%s %s" %(commande,nom_fichier) + pid = os.system(script) + + def supprimer(self): + """ Suppression du noeud courant """ + if self.parent.modified == 'n' : self.parent.init_modif() + pere = self.node.parent + self.node.delete() + pere.select() + + def affiche(self): + """ Force l'affichage des fenêtres en cours """ + self.tkraise() + + def selectMC(self,name): + """ On retrouve le mot-clé sous le curseur pour affichage du fr """ + cmd=self.node.item.get_definition() + texte_infos = '' + for e in cmd.entites.keys() : + if e == name : + texte_infos=getattr(cmd.entites[e],'fr') + break + if texte_infos == '' : texte_infos="Pas d'infos disponibles" + self.parent.appli.affiche_infos(texte_infos) + + def defMC(self,name): + """ On ajoute un mot-clé à la commande : subnode """ + if name == SEPARATEUR:return + if self.parent.modified == 'n' : self.parent.init_modif() + if name != "COMMENTAIRE": + self.node.append_child(name) + else : + self.ajout_commentaire() + + def selectFilsCmd(self,name): + pass + + def defFilsCmd(self,name): + pass + + def defCmdFirst(self,name): + """ On ajoute une commande ou un commentaire au début du fichier de commandes """ + if name == SEPARATEUR:return + if self.parent.modified == 'n' : self.parent.init_modif() + if name != "COMMENTAIRE": + new_node = self.node.append_child(name,'first') + else : + new_node = self.ajout_commentaire_first() + + def add_commande_avant(self,event=None): + pass + + def add_commande_apres(self,event=None): + pass + +class OngletPanel(Panel) : + """ Cette classe est virtuelle et doit être dérivée + Elle contient les principales méthodes d'affichage des différents onglets""" + + def raisecmd(self,page): + self.nb.page(page).focus_set() + if page == 'Concept': self._any.focus() + + def affiche(self): + page=self.nb.getcurselection() + self.nb.page(page).focus_set() + if page == 'Concept':self._any.component('entry').focus_set() + self.tkraise() + + def makeConceptPage(self,page): + """ Crée la page de saisie du nom du concept """ + self.label = Label(page,text='Nom du concept :') + self.label.place(relx=0.1,rely=0.4) + self._any = Entry(page,relief='sunken') + self._any.place(relx=0.35,rely=0.4,relwidth=0.5) + self._any.bind("",lambda e,s=self:s.execConcept()) + self._any.bind("",lambda e,s=self:s.execConcept()) + self._any.insert(0,self.node.item.GetText()) + type_sd = self.node.item.object.get_type_sd_prod() + if type_sd : + txt = "L'opérateur courant retourne un objet de type %s" %type_sd + self.label = Label(page, text = txt) + self.label.place(relx=0.5,rely=0.55,anchor='n') + self._any.focus() + + def makeCommandePage(self,page): + """ Affiche la page d'ajout d'une commande relativement à l'objet commande sélectionné """ + titre = "Où voulez-vous insérer une commande par rapport à %s" %self.node.item.object.nom + Label(page,text=titre).place(relx=0.5,rely=0.2,anchor='w') + b_avant = Button(page,text='AVANT', + command = self.node.item.add_commande_avant) + b_apres = Button(page,text='APRES', + command = self.node.item.add_commande_apres) + b_avant.place(relx=0.35,rely=0.5,anchor='w') + b_apres.place(relx=0.65,rely=0.5,anchor='w') + + def deselectMC(self,name): + self.parent.appli.affiche_infos('') + + def get_liste_cmd(self): + listeCmd = self.node.item.object.niveau.definition.get_liste_cmd() + return listeCmd + + def get_liste_fils_cmd(self): + return ['Mot-clé simple','Mot-clé facteur','Bloc'] + + def makeMoclesPage(self,page): + frame1 = Frame(page,height = 20) + frame1.pack(side='top',fill='x') + label = Label(frame1,text ="Le mot-clé choisi sera ajouté à la fin du catalogue") + label.pack(side='top') + frame2 = Frame(page) + frame2.pack(side='top',fill='both',expand=1) + liste_cmd = self.get_liste_fils_cmd() + liste_commandes = (("",self.selectFilsCmd), + ("",self.deselectFilsCmd), + ("",self.defFilsCmd)) + Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes,titre = "Mots-clés") + Liste.affiche_liste() + + def deselectFilsCmd(self,name): + pass + + def makeJDCPage(self,page): + liste_cmd = self.get_liste_cmd() + liste_commandes = (("",self.selectCmd), + ("",self.deselectCmd), + ("",self.defCmdFirst)) + Liste = ListeChoix(self,page,liste_cmd,liste_commandes = liste_commandes,filtre='oui',titre = "Commandes") + Liste.affiche_liste() + + def makeReglesPage(self,page) : + regles = [] + regles = self.node.item.get_regles() + dictionnaire = self.node.item.get_mc_presents() + texte_regles = [] + l_regles_en_defaut=[] + if len(regles) > 0: + i = 0 + for regle in regles : + texte_regles.append(regle.gettext()) + texte,test = regle.verif(dictionnaire) + if test == 0 : l_regles_en_defaut.append(i) + i = i+1 + Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles") + Liste.affiche_liste() + #self.afficheListe(page,texte_regles,self.selectRegle,self.execRegle) + + def execConcept(self): + """ Nomme le concept SD retourné par l'étape """ + if self.parent.modified == 'n' : self.parent.init_modif() + nom = self._any.get() + # Pourquoi node.etape ??? + #test,mess = self.node.etape.item.nomme_sd(nom) + test,mess = self.node.item.nomme_sd(nom) + self.parent.appli.affiche_infos(mess) + self.node.racine.update() + + def changed(self): + pass + + def makeAttributsPage(self,page): + l_attributs=self.node.item.object.attributs + d_defauts = self.node.item.object.attributs_defauts + for attribut in l_attributs : + attr = self.node.item.object.entites_attributs.get(attribut,None) + if attr.valeur is d_defauts[attribut] : + texte = attribut+' = '+repr(attr.valeur)+' (defaut)' + else: + texte = attribut+' = '+repr(attr.valeur) + Label(page,text=texte).pack(side='top') + + def makeSimpPage(self,page): + texte = "Où voulez-vous ajouter un mot-clé simple ?" + Label(page,text=texte).place(relx=0.5,rely=0.3,anchor='center') + b1 = Button(page,text='AVANT '+self.node.item.object.nom,command=self.add_simp_avant) + b2 = Button(page,text='APRES '+self.node.item.object.nom,command=self.add_simp_apres) + b1.place(relx=0.5,rely=0.5,anchor='center') + b2.place(relx=0.5,rely=0.6,anchor='center') + + def add_simp_avant(self,event=None): + """ + Ajoute un mot-clé simple avant celui courant + """ + self.node.append_brother('new_simp','before') + self.node.update() + + def add_simp_apres(self,event=None): + """ + Ajoute un mot-clé simple après celui courant + """ + self.node.append_brother('new_simp','after') + self.node.update() + +class TYPEPanel(Frame): + def __init__(self,parent,panneau,node) : + self.parent=parent + self.panneau = panneau + self.node=node + Frame.__init__(self,self.panneau) + self.place(x=0,y=0,relheight=1,relwidth=1) + self.creer_texte() + + def creer_texte(self): + texte = "Le noeud sélectionné correspond à un type\n" + self.label = Label(self,text=texte) + self.label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center') + +class OPERPanel(OngletPanel): + def init(self): + nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) + + nb.pack(fill = 'both', expand = 1) + self.nb=nb + nb.add('Mocles', tab_text='Ajouter mots-clés') + nb.add('Commandes',tab_text='Ajouter une commande') + self.makeMoclesPage(nb.page("Mocles")) + self.makeCommandePage(nb.page("Commandes")) + nb.tab('Mocles').focus_set() + nb.setnaturalsize() + self.affiche() + +class SIMPPanel(OngletPanel): + def init(self): + nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) + nb.pack(fill = 'both', expand = 1) + self.nb=nb + nb.add('generaux', tab_text='Données générales') + nb.add('ihm',tab_text='Données IHM') + nb.add('mocle',tab_text='Ajouter un mot-cle simple') + self.makeAttributsGenerauxPage(nb.page("generaux")) + self.makeAttributsIHMPage(nb.page("ihm")) + self.makeSimpPage(nb.page('mocle')) + nb.tab('generaux').focus_set() + nb.setnaturalsize() + self.affiche() + + def makeAttributsGenerauxPage(self,page): + fr1 = Frame(page,bd=1,relief='raised') + fr2 = Frame(page,bd=1,relief='raised') + fr3 = Frame(page,bd=1,relief='raised') + fr4 = Frame(page,bd=1,relief='raised') + fr5 = Frame(page,bd=1,relief='raised') + fr1.place(relheight=0.14,relwidth=1,rely=0) + fr2.place(relheight=0.14,relwidth=1,rely=0.14) + fr3.place(relheight=0.29,relwidth=1,rely=0.28) + fr4.place(relheight=0.14,relwidth=1,rely=0.57) + fr5.place(relheight=0.28,relwidth=1,rely=0.71) + # nom du mot-clé + Label(fr1,text = 'Nom :').place(relx=0.05,rely=0.3,anchor='w') + self.e_nom = Entry(fr1) + self.e_nom.place(relx=0.35,rely=0.3,relwidth=0.3,anchor='w') + self.e_nom.bind("",lambda e,s=self : s.set_valeur_attribut('nom',None)) + self.e_nom.bind("",lambda e,s=self : s.set_valeur_attribut('nom',None)) + self.e_nom.insert(0,self.get_valeur_attribut('nom')) + # Statut + Label(fr1,text='Statut : ').place(relx=0.05,rely=0.7,anchor='w') + self.statut=StringVar() + valeurs_statut=[('obligatoire','o'), + ('facultatif','f'), + ('caché','c') + ] + self.statut.set(self.node.item.object.get_valeur_attribut('statut')) + i=0 + for text,mode in valeurs_statut: + b=Radiobutton(fr1,text=text,variable=self.statut,value=mode, + command = lambda s=self,m=mode : s.set_valeur_attribut('statut',m)) + b.place(relx=0.25+i*0.25,rely=0.7,anchor='w') + i=i+1 + # Type ... + Label(fr2,text='Type de la valeur : ').place(relx=0.05,rely=0.5,anchor='w') + self.e_type = Entry(fr2) + self.e_type.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w') + self.e_type.insert(0,self.node.item.object.get_valeur_attribut('type')) + # Domaine de validité + Label(fr3,text='Domaine de validité : ').place(relx=0.05,rely=0.2,anchor='w') + self.domaine = StringVar() + self.domaine.set(self.node.item.object.get_valeur_attribut('domaine_validité')) + b1=Radiobutton(fr3,text='continu',variable=self.domaine,value='continu', + command=lambda s=self,f=fr3 :s.change_domaine(f)) + b2=Radiobutton(fr3,text='discret',variable=self.domaine,value='discret', + command=lambda s=self,f=fr3 :s.change_domaine(f)) + b1.place(relx=0.35,rely=0.2,anchor='w') + b2.place(relx=0.65,rely=0.2,anchor='w') + self.change_domaine(fr3) + # Défaut ... + if self.domaine.get() == 'continu': + # le développeur peut donner la valeur qu'il souhaite, moyennant la vérification de type... + Label(fr4,text='Valeur par défaut : ').place(relx=0.05,rely=0.5,anchor='w') + self.e_defaut = Entry(fr4) + self.e_defaut.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w') + if self.node.item.object.get_valeur_attribut('defaut') : + self.e_defaut.insert(0,self.node.item.object.get_valeur_attribut('defaut')) + self.e_defaut.bind("",lambda e,s=self : s.set_valeur_attribut('defaut',None)) + self.e_defaut.bind("",lambda e,s=self : s.set_valeur_attribut('defaut',None)) + else : + # dans le cas discret, la valeur par défaut doit être dans l'ensemble des valeurs possibles (into) + liste = self.node.item.object.get_valeur_attribut('into') + if self.node.item.object.get_valeur_attribut('defaut') : + self.set_valeur_attribut('defaut',self.node.item.object.get_valeur_attribut('defaut')) + if liste == None : liste = [] + self.e_defaut = Pmw.OptionMenu(fr4,labelpos='w',label_text = "Valeur par défaut : ", + items = self.node.item.object.get_valeur_attribut('into'), + menubutton_width=30) + self.e_defaut.configure(command = lambda e,s=self : s.set_valeur_attribut('defaut',None)) + self.e_defaut.place(relx=0.05,rely=0.5,anchor='w') + # Liste de valeurs ? + Label(fr5,text='Liste de valeurs : ').place(relx=0.05,rely=0.2,anchor='w') + self.liste_valeurs = BooleanVar() + liste_valeurs = [('OUI',1),('NON',0)] + self.liste_valeurs.set(0) + i=0 + for text,mode in liste_valeurs: + b=Radiobutton(fr5,text=text,variable=self.liste_valeurs,value=mode, + command=lambda s=self,f=fr5 :s.change_liste_valeurs(f)) + b.place(relx=0.35+i*0.2,rely=0.2,anchor='w') + i=i+1 + self.change_liste_valeurs(fr5) + + def makeAttributsIHMPage(self,page): + fr1 = Frame(page,height=100,bd=1,relief='raised') + fr2 = Frame(page,height=50,bd=1,relief='raised') + fr1.pack(side='top',fill='x') + fr2.pack(side='top',fill='x') + # Champ fr ... + Label(fr1,text='Champ fr : ').place(relx=0.05,rely=0.35,anchor='w') + self.e_fr = Entry(fr1) + self.e_fr.place(relx=0.35,rely=0.35,relwidth=0.6,anchor='w') + self.e_fr.insert(0,self.node.item.object.get_valeur_attribut('fr')) + # Champ ang ... + Label(fr1,text='Champ ang : ').place(relx=0.05,rely=0.70,anchor='w') + self.e_ang = Entry(fr1) + self.e_ang.place(relx=0.35,rely=0.70,relwidth=0.6,anchor='w') + self.e_ang.insert(0,self.node.item.object.get_valeur_attribut('ang')) + # Clé documentaire ... + Label(fr2,text='Clé documentaire : ').place(relx=0.05,rely=0.50,anchor='w') + self.e_docu = Entry(fr2) + self.e_docu.place(relx=0.35,rely=0.50,relwidth=0.6,anchor='w') + self.e_docu.insert(0,self.node.item.object.get_valeur_attribut('docu')) + + def detruit_widgets(self,l_widgets): + for nom_widg in l_widgets : + try: + widg = getattr(self,nom_widg) + widg.place_forget() + delattr(self,nom_widg) + except: + pass + + def change_liste_valeurs(self,fr5): + valeur = self.liste_valeurs.get() + if valeur == 0 : + # pas de liste de valeurs + l_widgets=['l_homo','b1_homo','b2_homo','l_min','e_min','l_max','e_max'] + self.detruit_widgets(l_widgets) + elif valeur == 1: + # pas de widgets à détruire ... + if hasattr(self,'l_homo') : + # on est déjà en mode 'liste' --> rien à faire + return + # homo + self.l_homo = Label(fr5,text='Liste homogène : ') + self.l_homo.place(relx=0.05,rely=0.4,anchor='w') + self.homo = BooleanVar() + self.homo.set(self.node.item.object.get_valeur_attribut('homo')) + self.b1_homo=Radiobutton(fr5,text='OUI',variable=self.homo,value=1) + self.b2_homo=Radiobutton(fr5,text='NON',variable=self.homo,value=0) + self.b1_homo.place(relx=0.35,rely=0.4,anchor='w') + self.b2_homo.place(relx=0.65,rely=0.4,anchor='w') + # min ... + self.l_min = Label(fr5,text='Longueur minimale : ') + self.l_min.place(relx=0.05,rely=0.6,anchor='w') + self.e_min = Entry(fr5) + self.e_min.place(relx=0.4,rely=0.6,relwidth=0.3,anchor='w') + self.e_min.insert(0,self.node.item.object.get_valeur_attribut('min')) + # max ... + self.l_max = Label(fr5,text='Longueur maximale : ') + self.l_max.place(relx=0.05,rely=0.8,anchor='w') + self.e_max = Entry(fr5) + self.e_max.place(relx=0.4,rely=0.8,relwidth=0.3,anchor='w') + self.e_max.insert(0,self.node.item.object.get_valeur_attribut('max')) + + def change_domaine(self,fr3): + valeur = self.domaine.get() + if valeur == 'discret' : + l_widgets = ['l_val_min','l_val_max','e_val_min','e_val_max'] + self.detruit_widgets(l_widgets) + # into + #self.l_into = Label(fr3,text='Ensemble de valeurs : ') + #self.l_into.place(relx=0.2,rely=0.5,anchor='w') + self.e_into = Pmw.ScrolledListBox(fr3, + items=self.node.item.object.get_valeur_attribut('into'), + labelpos='w', + label_text= 'Ensemble de valeurs : ', + listbox_height = 3, + dblclickcommand = self.change_into) + self.e_into.place(relx=0.05,rely=0.6,relwidth=0.9,anchor='w') + #self.e_into.insert(0,self.node.item.object.get_valeur_attribut('into')) + elif valeur == 'continu': + l_widgets = ['l_into','e_into'] + self.detruit_widgets(l_widgets) + if hasattr(self,'l_val_min'): + # on est déjà en mode 'continu' --> rien à faire + return + # val_min + self.l_val_min = Label(fr3,text='Valeur minimale : ') + self.l_val_min.place(relx=0.05,rely=0.5,anchor='w') + self.e_val_min = Entry(fr3) + self.e_val_min.place(relx=0.35,rely=0.5,relwidth=0.5,anchor='w') + self.e_val_min.bind("",lambda e,s=self : s.set_valeur_attribut('val_min',None)) + self.e_val_min.bind("",lambda e,s=self : s.set_valeur_attribut('val_min',None)) + self.set_valeur_attribut('val_min',self.get_valeur_attribut('val_min')) + # val_max + self.l_val_max = Label(fr3,text='Valeur maximale : ') + self.l_val_max.place(relx=0.05,rely=0.8,anchor='w') + self.e_val_max = Entry(fr3) + self.e_val_max.place(relx=0.35,rely=0.8,relwidth=0.5,anchor='w') + self.e_val_max.bind("",lambda e,s=self : s.set_valeur_attribut('val_max',None)) + self.e_val_max.bind("",lambda e,s=self : s.set_valeur_attribut('val_max',None)) + self.set_valeur_attribut('val_max',self.get_valeur_attribut('val_max')) + +# ------------------------------------------------------------------ +# Méthodes de validation des entrées faites par l'utilisateur +# ------------------------------------------------------------------ + + def get_valeur_attribut(self,nom_attr): + """ + Demande à l'item de retourner la valeur de l'attribut nom_attr + """ + return self.node.item.get_valeur_attribut(nom_attr) + + def set_valeur_attribut(self,nom_attr,new_valeur): + """ + Affecte la valeur new_valeur à l'attribut nom_attr + Vérifie si celle-ci est valide, sinon restaure l'ancienne + """ + if new_valeur is None : + widget = getattr(self,'e_'+nom_attr) + if hasattr(widget,'getcurselection'): + new_valeur = widget.getcurselection() + else: + new_valeur = widget.get() + print "on affecte %s a %s" %(str(new_valeur),nom_attr) + self.node.item.set_valeur_attribut(nom_attr,new_valeur) + self.node.update() + + def change_into(self): + """ + Méthode activée par double clic sur la ListBox d'affichage des valeurs discrètes possibles : + permet de changer la liste de ces valeurs + """ + showinfo("Fonction non encore disponible", + "Vous ne pouvez pas encore modifier la liste into par cette IHM") + +class OBJECTItem(TreeItem): + def __init__(self,appli,labeltext,object,setfunction=None,objet_cata_ordonne = None): + self.appli = appli + self.labeltext = labeltext + self.object=object + self.setfunction = setfunction + self.objet_cata_ordonne = objet_cata_ordonne + + def GetLabelText(self): + return self.labeltext,None,None + + def get_fr(self): + return '' + + def isMCList(self): + return 0 + + def isactif(self): + return 1 + + def add_commande_avant(self): + pass + + def add_commande_apres(self): + pass + + def set_valeur_attribut(self,nom_attr,new_valeur): + """ + Affecte la valeur new_valeur à l'attribut nom_attr + Vérifie si celle-ci est valide, sinon restaure l'ancienne + """ + old_valeur = self.object.get_valeur_attribut(nom_attr) + self.object.set_valeur_attribut(nom_attr,new_valeur) + verificateur = 'verif_'+nom_attr + if hasattr(self.object,verificateur): + if not getattr(self.object,verificateur)(): + # la nouvelle valeur de nom_attr n'est pas valide : on restaure l'ancienne (sans vérification) + self.object.set_valeur_attribut(nom_attr,old_valeur) + print 'changement de valeur refuse' + return + print 'changement de valeur accepte' + self.object.init_modif() + + def get_valeur_attribut(self,nom_attr): + """ + Retourne la valeur de l'attribut nom_attr + """ + return self.object.get_valeur_attribut(nom_attr) + +class CATAItem(OBJECTItem): + def GetSubList(self): + sublist=[] + for fils in self.object.entites_fils: + item = make_objecttreeitem(self.appli,fils.objet.label + " : ",fils,objet_cata_ordonne=self.objet_cata_ordonne) + sublist.append(item) + return sublist + + def GetIconName(self): + if self.object.isvalid(): + return 'ast-green-square' + else: + return 'ast-red-square' + + def GetText(self): + return "Catalogue %s" %self.appli.code + + def add_commande_avant(self): + pass + + def add_commande_apres(self): + pass + + +def transforme_liste_dico(liste): + d={} + for item in liste : + d[item.nom]=item + return d + +class OPERItem(OBJECTItem): + panel = OPERPanel + def GetSubList(self): + sublist=[] + # on classe les fils dans l'ordre du catalogue ... + l_cles_fils = self.get_liste_mc_ordonnee() + # on crée les items fils ... + dico_fils = transforme_liste_dico(self.object.entites_fils) + for k in l_cles_fils : + typ = TYPE_COMPLET(dico_fils[k]) + if type(self.objet_cata_ordonne) == types.InstanceType : + objet_cata = self.objet_cata_ordonne.entites[k] + else : + objet_cata = self.objet_cata_ordonne.get(k,None) + item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata) + sublist.append(item) + return sublist + + def GetText(self): + #return self.object.nom + return self.object.get_valeur_attribut('nom') + + def get_liste_mc_ordonnee(self): + return self.objet_cata_ordonne.ordre_mc + + def GetIconName(self): + if self.object.isvalid(): + return 'ast-green-square' + else: + return 'ast-red-square' + + def additem(self,name,pos): + if isinstance(name,TreeItem) : + cmd=self.object.addentite(name.getObject(),pos) + else : + cmd = self.object.addentite(name,pos) + typ = TYPE_COMPLET(cmd) + item = make_objecttreeitem(self.appli,typ + " : ", cmd) + return item + + def get_attribut(self,nom): + if nom == 'nature': return 'OPERATEUR' + + def get_liste_mc_presents(self): + return [] + + def verif_condition_regles(self,liste): + return [] + +class PROCItem(OPERItem): + panel = OPERPanel + +class MACROItem(OPERItem): + panel = OPERPanel + +class SIMPItem(OPERItem): + panel = SIMPPanel + + def GetIconName(self): + if self.object.isvalid(): + return 'ast-green-ball' + else: + return 'ast-red-ball' + + def IsExpandable(self): + return 0 + + def GetSubList(self): + return [] + +class FACTItem(OPERItem): + def GetIconName(self): + if self.object.isvalid(): + return 'ast-green-los' + else: + return 'ast-red-los' + +class BLOCItem(FACTItem): pass + +class TYPEItem(SIMPItem): + panel = TYPEPanel + def get_dico_attributs(self): + self.d_attributs = {} + + def GetSubList(self): + return [] + + def IsExpandable(self): + return 0 + + def GetText(self): + return self.object.nom + +class NIVEAUItem(OPERItem): + def IsExpandable(self): + return 1 + + def get_liste_mc_ordonnee(self): + l=[] + for fils in self.object.entites_fils: + l.append(fils.nom) + return l + + def GetSubList(self): + sublist=[] + # on classe les fils dans l'ordre du catalogue ... + l_cles_fils = self.get_liste_mc_ordonnee() + # on crꥠles items fils ... + dico_fils = transforme_liste_dico(self.object.entites_fils) + for k in l_cles_fils : + typ = TYPE_COMPLET(dico_fils[k]) + if type(self.objet_cata_ordonne) == types.InstanceType : + objet_cata = self.objet_cata_ordonne.entites[k] + else : + objet_cata = self.objet_cata_ordonne.get(k,None) + item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata) + sublist.append(item) + return sublist + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + return self.labeltext,Fonte_Niveau,'#00008b' + + def GetIconName(self): + if self.object.isvalid(): + return "ast-green-text" + else: + return 'ast-red-text' + + def additem(self,name,pos): + if isinstance(name,TreeItem) : + cmd=self.object.addentite(name.getObject(),pos) + else : + cmd = self.object.addentite(name,pos) + typ = TYPE_COMPLET(obj) + item = make_objecttreeitem(self.appli,typ+ " : ", cmd) + return item + + def suppitem(self,item) : + # item = item de l'ETAPE à supprimer du JDC + # item.getObject() = ETAPE ou _C + # self.object = JDC + itemobject=item.getObject() + if self.object.suppentite(itemobject): + if isinstance(itemobject,_C): + message = "Commentaire supprimé" + else : + message = "Commande " + itemobject.nom + " supprimée" + self.appli.affiche_infos(message) + return 1 + else: + self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet") + return 0 + + def GetText(self): + return '' + +class ATTRIBUTItem(SIMPItem): + def get_dico_attributs(self): + self.d_attributs = {} + + def GetSubList(self): + return [] + + def IsExpandable(self): + return 0 + + def GetText(self): + return self.object + + def GetIconName(self): + return 'aucune' + +class CataEditeur: + def __init__(self,parent,appli,cata): + self.parent = parent + self.cata = definition_cata.CATALOGUE(cata) + self.appli = appli + self.top = Toplevel() + self.top.geometry("800x500") + self.top.title("Edition d'un catalogue") + self.init() + + def close(self): + self.top.destroy() + + def init(self): + self.nodes={} + self.creerbarremenus() + self.pane = Pmw.PanedWidget(self.top, + hull_width = 800, + hull_height = 500, + orient = 'horizontal') + self.pane.add('canvas',min = 0.4, max = 0.6, size = 0.45) + self.pane.add('panel',min = 0.4, max = 0.6, size = 0.55) + self.pane.pack(expand =1, fill = 'both') + self.scrolledcanvas = Pmw.ScrolledCanvas(self.pane.pane('canvas'), + hull_width=1., + hull_height=1., + borderframe=1) + Pmw.Color.changecolor(self.scrolledcanvas.component('canvas'),background='gray95') + self.scrolledcanvas.pack(padx=10,pady=10,expand=1, fill="both") + self.item = CATAItem(self.appli,"Catalogue", + self.cata, + objet_cata_ordonne = self.appli.readercata.cata_ordonne_dico) + + self.tree = Tree(self.appli,self.item,self.scrolledcanvas,command = self.select_node) + self.tree.draw() + self.node = self.tree.node_selected + + def creerbarremenus(self) : + self.menubar=Menu(self.top) + self.filemenu=Menu(self.menubar,tearoff=0) + self.filemenu.add_command(label='Quitter',command=self.quit) + + self.editmenu=Menu(self.menubar,tearoff=0) + #self.editmenu.add_command(label='Copier',command=self.copy) + #self.editmenu.add_command(label='Couper',command=self.cut) + #self.editmenu.add_command(label='Coller',command=self.paste) + + self.affichagemenu=Menu(self.menubar,tearoff=0) + self.affichagemenu.add_command(label='Rapport de validation', + command = self.visuCR) + self.affichagemenu.add_command(label='shell',command = self.shell) + #self.affichagemenu.add_command(label='Fichier à¡°lat',command=self.visu_a_plat) + #self.affichagemenu.add_command(label='Fichier .py',command =self.visuJDC_py) + #self.affichagemenu.add_command(label='Fichier source',command = self.visu_txt_brut_JDC) + #self.affichagemenu.add_command(label='Paraméµ²es Eficas',command=self.affichage_fichier_ini) + + #self.optionmenu=Menu(self.menubar,tearoff=0) + #self.optionmenu.add_command(label='Catalogue dê·¥loppeur',command=self.choix_cata_developpeur) + + self.menubar.add_cascade(label='Fichier',menu=self.filemenu) + self.menubar.add_cascade(label='Edition',menu=self.editmenu) + self.menubar.add_cascade(label='Jeu de commandes',menu=self.affichagemenu) + #self.menubar.add_cascade(label='Browsers',menu=self.browsermenu) + #self.menubar.add_cascade(label='Catalogue',menu=self.cataloguemenu) + #self.menubar.add_cascade(label='Options',menu=self.optionmenu) + self.top.configure(menu=self.menubar) + self.top.protocol("WM_DELETE_WINDOW",self.quit) + self.top.minsize(900,500) + self.top.geometry("900x500") + + def shell(self,event=None): + import Interp + d={'j':self.tree.item.getObject()} + Interp.InterpWindow(d,parent=self.parent) + + def visuCR(self,mode='Cata'): + txt = str(self.cata.report()) + titre="Rapport de validation du catalogue" + Fenetre(self.appli,titre=titre,texte=txt) + + def select_node(self,node): + self.nodes[node]=self.create_panel(node) + + def create_panel(self,node): + if hasattr(node.item,"panel"): + return getattr(node.item,"panel")(self,self.pane.pane('panel'),node) + + def quit(self) : + self.top.destroy() + + def settitle(self): + self.top.wm_title("Browser de catalogue " ) + self.top.wm_iconname("CataBrowser") + + +dispatch = { + 'OPER' : OPERItem, + 'PROC' : PROCItem, + 'MACRO' : MACROItem, + 'SIMP' : SIMPItem, + 'FACT' : FACTItem, + 'BLOC' : BLOCItem, + 'TYPE' : TYPEItem, + 'NIVEAU' : NIVEAUItem +} + +def TYPE(o): + if isinstance(o,definition_cata.OPER_CATA):return 'OPER' + elif isinstance(o,definition_cata.PROC_CATA):return 'PROC' + elif isinstance(o,definition_cata.MACRO_CATA):return 'MACRO' + elif isinstance(o,definition_cata.SIMP_CATA):return 'SIMP' + elif isinstance(o,definition_cata.FACT_CATA):return 'FACT' + elif isinstance(o,definition_cata.BLOC_CATA):return 'BLOC' + elif isinstance(o,definition_cata.TYPE_CATA):return 'TYPE' + elif isinstance(o,definition_cata.NIVEAU_CATA) : return 'NIVEAU' + else:return type(o) + +def TYPE_COMPLET(o): + if isinstance(o,definition_cata.OPER_CATA):return "OPERATEUR" + elif isinstance(o,definition_cata.PROC_CATA):return "PROCEDURE" + elif isinstance(o,definition_cata.MACRO_CATA):return "MACRO" + elif isinstance(o,definition_cata.SIMP_CATA):return "Mot-clé SIMPLE" + elif isinstance(o,definition_cata.FACT_CATA):return "Mot-clé FACTEUR" + elif isinstance(o,definition_cata.BLOC_CATA):return "BLOC" + elif isinstance(o,definition_cata.TYPE_CATA):return "Type" + elif isinstance(o,definition_cata.NIVEAU_CATA):return "Niveau" + else: return "Inconnu ("+`type(o)`+")" + +def make_objecttreeitem(appli,labeltext, object, setfunction=None,objet_cata_ordonne=None): + t = TYPE(object) + if dispatch.has_key(t): + c = dispatch[t] + else: + print 'on a un objet de type :',type(object),' ',object + c = ATTRIBUTItem + return c(appli,labeltext, object, setfunction = setfunction,objet_cata_ordonne=objet_cata_ordonne) + + + diff --git a/InterfaceTK/centerwindow.py b/InterfaceTK/centerwindow.py new file mode 100644 index 00000000..4acca2e4 --- /dev/null +++ b/InterfaceTK/centerwindow.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module contient la fonction utilitaire centerwindow + qui sert à centrer une fenetre +""" +import types + +def centerwindow(window,parent = 'avec'): + if parent =='avec': + parent = window.winfo_parent() + if type(parent) == types.StringType: + parent = window._nametowidget(parent) + # Find size of window. + window.update_idletasks() + width = window.winfo_width() + height = window.winfo_height() + if width == 1 and height == 1: + # If the window has not yet been displayed, its size is + # reported as 1x1, so use requested size. + width = window.winfo_reqwidth() + height = window.winfo_reqheight() + # Place in centre of screen: + if parent =='avec' : + x = (window.winfo_screenwidth() - width) / 2 - parent.winfo_vrootx() + y = (window.winfo_screenheight() - height) / 3 - parent.winfo_vrooty() + else: + x = (window.winfo_screenwidth() - width) / 2 + y = (window.winfo_screenheight() - height) / 3 + if x < 0: + x = 0 + if y < 0: + y = 0 + window.geometry('+%d+%d' % (x, y)) + diff --git a/InterfaceTK/change_comm.py b/InterfaceTK/change_comm.py new file mode 100755 index 00000000..5fb53226 --- /dev/null +++ b/InterfaceTK/change_comm.py @@ -0,0 +1,166 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module permet de lancer l'application EFICAS en affichant + un ecran Splash pour faire patentier l'utilisateur +""" +# Modules Python +import sys +import os + +# Modules Eficas +from Editeur import import_code +from Editeur import session +import prefs +import convert +import generator +import string +from Editeur.utils import extension_fichier,stripPath, save_in_file + +class DUP : + + def __init__(self,code): + """ + """ + self.format_fichier="python" + self.version_code=None + self.code=code + + self.top=None + self.test=2 + from Editeur import configuration + self.CONFIGURATION=configuration.make_config(self,prefs.REPINI) + + self.load_readercata() + self.cata=self.readercata.cata + + self.JDC=None + self.JDCName="" + self.J2=None + + def load_readercata(self): + mname='readercata' + module=__import__(mname,globals(),locals()) + factory=getattr(module,mname.upper()) + appli_composant=factory(self,self.top) + setattr(self,mname,appli_composant) + + + def openJDC(self,fichier): + if fichier : + self.fichier = fichier + e=extension_fichier(fichier) + self.JDCName=stripPath(fichier) + self.initialdir = os.path.dirname(os.path.abspath(fichier)) + else : + return + + format=self.format_fichier + # Il faut convertir le contenu du fichier en fonction du format + if convert.plugins.has_key(format): + # Le convertisseur existe on l'utilise + p=convert.plugins[format]() + p.readfile(fichier) + text=p.convert('exec',self) + if not p.cr.estvide(): + print ("Erreur à la conversion") + print str(p.cr) + return + + # On se met dans le repertoire ou se trouve le fichier de commandes + # pour trouver les eventuels fichiers include ou autres + # localises a cote du fichier de commandes + os.chdir(self.initialdir) + CONTEXT.unset_current_step() + J=self.cata[0].JdC(procedure=text,appli=self, + cata=self.cata,cata_ord_dico=self.readercata.cata_ordonne_dico, + nom = self.JDCName, + rep_mat=self.CONFIGURATION.rep_mat, + ) + + J.analyse() + + txt_exception = J.cr.get_mess_exception() + if txt_exception : + # des exceptions ont été levées à la création du JDC + # --> on affiche les erreurs mais pas le JDC + self.JDC=J + print("Erreur fatale au chargement de %s" %file) + else : + self.JDC=J + + def modifieJDC(self,texte): + if texte == None or texte == "" : return + format="python" + lignes=string.split(texte,";") + textedecoup="" + for l in lignes : + textedecoup=textedecoup+l+'\n' + if convert.plugins.has_key(format): + p=convert.plugins[format]() + p.settext(textedecoup) + text=p.convert('exec',self) + if not p.cr.estvide(): + print ("Erreur à la conversion") + print str(p.cr) + return + self.J2=self.cata[0].JdC(procedure=text,appli=self, + cata=self.cata, + cata_ord_dico=self.readercata.cata_ordonne_dico, + nom = self.JDCName+"2", + rep_mat=self.CONFIGURATION.rep_mat, + ) + self.J2.definition.code = "MODIF" + self.J2.analyse() + + + def saveJDC(self,fichierSortie): + """ + Sauvegarde le JDC courant. + Retourne 1 si la sauvegarde s'est bien faite, 0 sinon. + """ + if not hasattr(self,'JDC') : return 0 + + format="Modif" + + if generator.plugins.has_key(format): + g=generator.plugins[format]() + jdc_formate=g.genermodifparam(self.JDC,self.J2) + if not g.cr.estvide(): + self.affiche_infos("Erreur à la generation") + return 0 + else: + self.affiche_infos("Format %s non reconnu" % format) + return 0 + + self.jdc_fini = string.replace(jdc_formate,'\r\n','\n') + + if not save_in_file(fichierSortie,self.jdc_fini) : + self.affiche_infos("Problème à la sauvegarde du fichier") + return 0 + else : + self.affiche_infos("sauvegarde effectuée") + return 1 + + + def affiche_infos(self,mess): + print mess + diff --git a/InterfaceTK/compobase.py b/InterfaceTK/compobase.py new file mode 100644 index 00000000..a287b7d2 --- /dev/null +++ b/InterfaceTK/compobase.py @@ -0,0 +1,3 @@ +from Editeur import Objecttreeitem +treeitem = Objecttreeitem.ObjectTreeItem +objet = None diff --git a/InterfaceTK/compobloc.py b/InterfaceTK/compobloc.py new file mode 100644 index 00000000..e92d5199 --- /dev/null +++ b/InterfaceTK/compobloc.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +from Tkinter import * +import Pmw + +from Editeur import Objecttreeitem +import compofact + + +class BLOCTreeItem(compofact.FACTTreeItem): + panel = compofact.FACTPanel + + def get_objet(self,name) : + for v in self.object.mc_liste: + if v.nom == name : return v + return None + + def iscopiable(self): + return 0 + + +import Accas +treeitem = BLOCTreeItem +objet = Accas.MCBLOC diff --git a/InterfaceTK/compocomm.py b/InterfaceTK/compocomm.py new file mode 100644 index 00000000..949014c6 --- /dev/null +++ b/InterfaceTK/compocomm.py @@ -0,0 +1,170 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +from Tkinter import * +import Pmw +import string + +from Editeur import Objecttreeitem +import panels +import fontes + +Fonte_Commentaire = fontes.standard_italique + +class COMMPanel(panels.OngletPanel): + + def init(self): + """ + Initialise les frame des panneaux contextuels relatifs à un COMMENTAIRE + """ + nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) + nb.pack(fill = 'both', expand = 1) + self.nb=nb + nb.add('TexteComm', tab_text='Texte Commentaire') + nb.add('Commande', tab_text='Nouvelle Commande') + nb.add('Commentaire',tab_text='Paramètre/Commentaire') + self.makeCOMMPage(nb.page("TexteComm")) + self.makeCommandePage(nb.page("Commande")) + self.makeParamCommentPage_for_etape(nb.page("Commentaire")) + nb.tab('TexteComm').focus_set() + self.enlevebind() + self.creebind() + nb.setnaturalsize() + + def makeCOMMPage(self,page): + """ + Crée la page qui permet d'afficher et d'éditer le texte du commentaire + """ + self.frame_valeur = Frame(page) + self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw') + self.widget_text = Pmw.ScrolledText(self.frame_valeur, + borderframe=1, + labelpos='n', + label_text = 'Texte du commentaire\n ') + self.widget_text.pack(side='top',expand=1,fill='both') + self.widget_text.configure(hscrollmode='dynamic', + vscrollmode='dynamic') + self.widget_text.component('text').configure(background = 'white') + self.make_buttons() + self.display_valeur() + + def make_buttons(self): + """ + Crée les boutons du panneau + """ + #self.bouton_sup.place_forget() + #self.bouton_doc.place_forget() + #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14) + #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14) + + #self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center') + #self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center') + #self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center') + + self.bouton_sup.pack_forget() + self.bouton_doc.pack_forget() + self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur) + self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur) + + self.bouton_val.pack(side='left',padx=5, pady=5) + self.bouton_ann.pack(side='left',padx=5, pady=5) + self.bouton_sup.pack(side='right',padx=5, pady=5) + + def change_valeur(self): + """ + Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du commentaire + """ + if self.parent.modified == 'n' : self.parent.init_modif() + new_valeur = self.widget_text.get() + self.node.item.set_valeur(new_valeur) + self.node.update() + + def display_valeur(self): + """ + Affiche dans self.widget_text la valeur de l'objet commentaire + (annule d'éventuelles modifications faite par l'utilisateur) + """ + t=self.node.item.get_valeur() + try: + self.widget_text.settext(unicode(t)) + except: + # Si probleme avec unicode + self.widget_text.settext(t) + +class COMMTreeItem(Objecttreeitem.ObjectTreeItem): + panel = COMMPanel + + def init(self): + self.setfunction = self.set_valeur + + def GetIconName(self): + """ + Retourne le nom de l'icône associée au noeud qui porte self, + dépendant de la validité de l'objet + NB : un commentaire est toujours valide ... + """ + return "ast-white-percent" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + return 'commentaire',Fonte_Commentaire,None + + def get_valeur(self): + """ + Retourne la valeur de l'objet Commentaire cad son texte + """ + return self.object.get_valeur() or '' + + def GetText(self): + texte = self.object.valeur + texte = string.split(texte,'\n')[0] + if len(texte) < 25 : + return texte + else : + return texte[0:24] + + def set_valeur(self,valeur): + """ + Afefcte valeur à l'objet COMMENTAIRE + """ + self.object.set_valeur(valeur) + + def GetSubList(self): + """ + Retourne la liste des fils de self + """ + return [] + + + def get_objet_commentarise(self): + """ + La méthode get_objet_commentarise() de la classe compocomm.COMMTreeItem + surcharge la méthode get_objet_commentarise de la classe Objecttreeitem.ObjectTreeItem + elle a pour but d'empecher l'utilisateur final de commentariser un commentaire. + """ + raise Exception( 'Citoyen : tu peux "commentariser" une commande MAIS PAS UN COMMENTAIRE' ) + +import Extensions +treeitem =COMMTreeItem +objet = Extensions.commentaire.COMMENTAIRE diff --git a/InterfaceTK/compocommandecomm.py b/InterfaceTK/compocommandecomm.py new file mode 100644 index 00000000..c7e55d78 --- /dev/null +++ b/InterfaceTK/compocommandecomm.py @@ -0,0 +1,182 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +import traceback +from Tkinter import * +import Pmw +import string +from widgets import showerror + +from Editeur import Objecttreeitem +import panels +import fontes + +Fonte_Commentaire = fontes.standard_italique + +class COMMANDE_COMMPanel(panels.OngletPanel): + """ + Classe servant à définir le panel associé à une commande commentarisée + """ + def init(self): + """ + Initialise les frame des panneaux contextuels relatifs à une commande commentarisée + """ + panneau=Frame(self) + panneau.pack(expand=1,fill='both') + self.make_buttons() + self.makeCOMMPage(panneau) + self.enlevebind() + + def makeCOMMPage(self,page): + """ + Crée la page qui permet d'afficher et d'éditer le texte de la commande commentarisée + """ + self.frame_valeur = Frame(page) + self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw') + self.widget_text = Pmw.ScrolledText(self.frame_valeur, + borderframe=1, + labelpos='n', + label_text = 'Texte de la commande\n ') + self.widget_text.pack(side='top',expand=1,fill='both') + self.widget_text.configure(hscrollmode='dynamic', + vscrollmode='dynamic') + self.display_valeur() + + def make_buttons(self): + """ + Crée les boutons du panneau + """ + #self.bouton_sup.place_forget() + #self.bouton_doc.place_forget() + #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14) + #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14) + #self.bouton_unc = Button(self.fr_but,text='Décommentariser',command=self.uncomment,width=14) + + #self.bouton_val.place(relx=0.1,rely=0.5,relheight=1,relwidth=0.20,anchor='center') + #self.bouton_ann.place(relx=0.30,rely=0.5,relheight=1,relwidth=0.20,anchor='center') + #self.bouton_sup.place(relx=0.50,rely=0.5,relheight=1,relwidth=0.20,anchor='center') + #self.bouton_unc.place(relx=0.75,rely=0.5,relheight=1,relwidth=0.25,anchor='center') + + self.bouton_sup.pack_forget() + self.bouton_doc.pack_forget() + self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur) + self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur) + self.bouton_unc = Button(self.fr_but,text='Décommentariser',command=self.uncomment) + self.bouton_val.pack(side='left',padx=5, pady=5) + self.bouton_ann.pack(side='left',padx=5, pady=5) + self.bouton_sup.pack(side='left',padx=5, pady=5) + self.bouton_unc.pack(side='right',padx=5, pady=5) + + def change_valeur(self): + """ + Stocke la nouvelle valeur donnée par l'utilisateur comme valeur de la commande commentarisée + """ + if self.parent.modified == 'n' : self.parent.init_modif() + new_valeur = self.widget_text.get() + self.node.item.set_valeur(new_valeur) + self.node.update() + + def display_valeur(self): + """ + Affiche dans self.widget_text la valeur de la commande commentarisée + (annule d'éventuelles modifications faite par l'utilisateur) + """ + self.widget_text.settext(self.node.item.get_valeur()) + + def uncomment(self): + """ + Réalise la décommentarisation de self + """ + try: + pos=self.node.parent.children.index(self.node) + commande,nom = self.node.item.uncomment() + self.node.parent.children[pos].select() + except Exception,e: + showerror("Erreur !",str(e)) + return + #self.parent.appli.bureau.JDCDisplay_courant.ReplaceObjectNode(self.node,commande,nom) + +class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem): + panel = COMMANDE_COMMPanel + + def init(self): + self.setfunction = self.set_valeur + + def GetIconName(self): + """ + Retourne le nom de l'icône associée au noeud qui porte self, + dépendant de la validité de l'objet + NB : une commande commentarisée est toujours valide ... + """ + if self.isvalid(): + return "ast-green-percent" + else: + return "ast-red-percent" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + return 'commande commentarisée',Fonte_Commentaire,None + + def get_valeur(self): + """ + Retourne la valeur de la commande commentarisée cad son texte + """ + return self.object.get_valeur() or '' + + def GetText(self): + texte = self.object.valeur + texte = string.split(texte,'\n')[0] + if len(texte) < 25 : + return texte + else : + return texte[0:24] + + def set_valeur(self,valeur): + """ + Afefcte valeur à l'objet commande commentarisée + """ + self.object.set_valeur(valeur) + + def GetSubList(self): + """ + Retourne la liste des fils de self + """ + return [] + + def uncomment(self): + """ + Demande à l'objet commande commentarisée de se décommentariser. + Si l'opération s'effectue correctement, retourne l'objet commande + et éventuellement le nom de la sd produite, sinon lève une exception + """ + try: + commande,nom = self.object.uncomment() + except Exception,e: + traceback.print_exc() + raise e + return commande,nom + +import Accas +treeitem =COMMANDE_COMMTreeItem +objet = Accas.COMMANDE_COMM diff --git a/InterfaceTK/compoerror.py b/InterfaceTK/compoerror.py new file mode 100644 index 00000000..74e0c46c --- /dev/null +++ b/InterfaceTK/compoerror.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +from Tkinter import Label,Button + +#Modules Eficas +from Noyau.N_OBJECT import ErrorObj +from Editeur import Objecttreeitem +import panels + +class ERRORPanel(panels.Panel_Inactif): + def creer_texte(self): + texte = """Le noeud sélectionné correspond à un objet erroné """ + label = Label(self,text=texte,justify='center') + label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center') + bouton = Button(self,text = "Supprimer", command=self.supprimer) + bouton.place(relx=0.5,rely=0.5,anchor='center') + +class ERRORTreeItem(Objecttreeitem.AtomicObjectTreeItem): + panel = ERRORPanel + def GetIconName(self): + return "ast-red-ball" + + +treeitem =ERRORTreeItem +objet = ErrorObj + diff --git a/InterfaceTK/compofact.py b/InterfaceTK/compofact.py new file mode 100644 index 00000000..0d984381 --- /dev/null +++ b/InterfaceTK/compofact.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +import Pmw +from Editeur import Objecttreeitem +import panels + +class FACTPanel(panels.OngletPanel) : + def init(self) : + nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) + nb.pack(fill = 'both', expand = 1) + self.nb=nb + nb.add('Mocles', tab_text='Ajouter mots-clés') + panneau=Pmw.PanedWidget(nb.page("Mocles"), + orient='horizontal') + panneau.add('left',min=0.4,max=0.6,size=0.5) + panneau.add('right',min=0.4,max=0.6,size=0.5) + panneau.pack(expand=1,fill='both') + self.makeMoclesPage(panneau.pane('left')) + self.makeReglesPage(panneau.pane('right')) + nb.tab('Mocles').focus_set() + nb.setnaturalsize() + self.enlevebind() + self.creebind() + self.affiche() + +import treewidget +class Node(treewidget.Node): + def doPaste(self,node_selected): + objet_a_copier = self.item.get_copie_objet() + child=node_selected.doPaste_MCF(objet_a_copier) + return child + + def doPaste_MCF(self,objet_a_copier): + child = self.parent.append_child(objet_a_copier, + pos=self.item, + retour='oui') + return child + + +class FACTTreeItem(Objecttreeitem.ObjectTreeItem): + panel = FACTPanel + itemNode=Node + + def IsExpandable(self): + return 1 + + def GetText(self): + return '' + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + # None --> fonte et couleur par défaut + return self.object.getlabeltext(),None,None + + def isvalid(self): + return self.object.isvalid() + + def iscopiable(self): + return 1 + + def GetIconName(self): + if self.object.isvalid(): + return "ast-green-los" + elif self.object.isoblig(): + return "ast-red-los" + else: + return "ast-yel-los" + + def keys(self): + keys=self.object.mc_dict.keys() + return keys + + def GetSubList(self): + """ + Reactualise la liste des items fils stockes dans self.sublist + """ + liste=self.object.mc_liste + sublist=[None]*len(liste) + # suppression des items lies aux objets disparus + for item in self.sublist: + old_obj=item.getObject() + if old_obj in liste: + pos=liste.index(old_obj) + sublist[pos]=item + else: + pass # objets supprimes ignores + # ajout des items lies aux nouveaux objets + pos=0 + for obj in liste: + if sublist[pos] is None: + # nouvel objet : on cree un nouvel item + def setfunction(value, object=obj): + object.setval(value) + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction) + sublist[pos]=item + pos=pos+1 + + self.sublist=sublist + return self.sublist + + def additem(self,name,pos): + #print "compofact.additem",name,pos + objet = self.object.addentite(name,pos) + return objet + + def suppitem(self,item) : + """ + Cette methode a pour fonction de supprimer l'item passé en argument + des fils de l'item FACT qui est son pere + - item = item du MOCLE à supprimer du MOCLE père + - item.getObject() = MCSIMP ou MCBLOC + """ + itemobject=item.getObject() + if itemobject.isoblig() : + self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ') + return 0 + + if self.object.suppentite(itemobject): + message = "Mot-clé " + itemobject.nom + " supprimé" + self.appli.affiche_infos(message) + return 1 + else: + self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé') + return 0 + +import Accas +objet = Accas.MCFACT +treeitem = FACTTreeItem diff --git a/InterfaceTK/compoformule.py b/InterfaceTK/compoformule.py new file mode 100644 index 00000000..e6f22793 --- /dev/null +++ b/InterfaceTK/compoformule.py @@ -0,0 +1,410 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" +Ce module contient les classes permettant de définir les objets graphiques +représentant un objet de type FORMULE, cad le panneau et l'item de l'arbre +d'EFICAS +""" + +# import modules Python +from Tkinter import * +import Pmw +import string + +# import modules EFICAS +import widgets +import panels +import fontes +import compooper + +Fonte_TITRE = fontes.standard_gras_souligne + + +class FORMULEPanel(panels.OngletPanel): + """ + Classe servant à construire le panneau associé à un paramètre. + C'est au moyen de ce panneau que l'utilisateur peut accéder + aux nom et valeur du paramètre en vue éventuellement de les + modifier. + """ + + def init(self): + nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) + nb.pack(fill = 'both', expand = 1) + self.nb=nb + nb.add('Formule', tab_text='Définition Formule') + nb.add('Commande', tab_text='Nouvelle Commande') + nb.add('Commentaire',tab_text='Paramètre/Commentaire') + self.makeFormulePage(nb.page("Formule")) + self.makeCommandePage(nb.page("Commande")) + self.makeParamCommentPage_for_etape(nb.page("Commentaire")) + nb.tab('Formule').focus_set() + self.enlevebind() + self.creebind() + nb.setnaturalsize() + + def makeFormulePage(self,page): + """ + Crée la page qui permet d'afficher et d'éditer le texte de la FORMULE + """ + self.frame_valeur = Frame(page) + self.frame_valeur.pack(fill='both',expand=1) + #self.frame_valeur.place(relwidth=0.95,relheight=0.95,relx=0.05,rely=0.05,anchor='nw') + #self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw') + # affichage du titre du panneau + self.titre = StringVar() + self.titre.set("FORMULE "+self.node.item.get_nom()) + + self.entry_nom = Entry(self.frame_valeur) + #Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.,anchor='n') + Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).grid(row=0,columnspan=2,padx=5,pady=5) + # création des labels et entries associés aux nom, type retourné, arguments et corps de la FORMULE + + #Label(self.frame_valeur,text= 'Nom de la formule : ').place(relx=0.,rely=0.1) + Label(self.frame_valeur,text= 'Nom de la formule : ').grid(row=1,sticky=W,padx=5,pady=5) + #Label(self.frame_valeur,text= 'Arguments : ').place(relx=0.,rely=0.40) + Label(self.frame_valeur,text= 'Arguments : ').grid(row=2,sticky=W,padx=5,pady=5) + self.entry_arg = Entry(self.frame_valeur) + #Label(self.frame_valeur,text= 'Expression : ').place(relx=0.,rely=0.65) + Label(self.frame_valeur,text= 'Expression : ').grid(row=4,sticky=W,padx=5,pady=5) + self.entry_exp = Entry(self.frame_valeur) + + # binding sur les entries + self.entry_nom.bind("",self.verif_nom) + self.entry_nom.bind("",self.verif_nom) + self.entry_arg.bind("",self.verif_arguments) + self.entry_arg.bind("",self.verif_arguments) + self.entry_exp.bind("",self.verif_corps) + self.entry_exp.bind("",self.verif_corps) + # affichage des entries + #self.entry_nom.place(relx=0.35,rely=0.10,relwidth=0.2) + self.entry_nom.grid(row=1,column=1,sticky=W,padx=5,pady=5) + #self.entry_arg.place(relx=0.35,rely=0.40,relwidth=0.4) + self.entry_arg.grid(row=2,column=1,sticky=W,padx=5,pady=5) + + # affichage d'une phrase d'aide pour les arguments + aide = """Entrer les arguments sous la forme +de VARIABLES séparées par des virgules (,) +Exemple X,Y,Z """ + #Label(self.frame_valeur,text=aide, justify="l").place(relx=0.5,rely=0.47,anchor='n') + Label(self.frame_valeur,text=aide, justify="l").grid(row=3,columnspan=2,padx=5,pady=5) + + #self.entry_exp.place(relx=0.35,rely=0.65,relwidth=0.60) + self.entry_exp.grid(row=4,column=1,sticky=W,padx=5,pady=5) + # affichage d'une phrase d'aide pour l'expression + aide = """Un retour de chariot dans une zone de saisie vous permet de vérifier si +la valeur que vous avez entrée est valide. +Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles +valeurs seront effectivement prises en compte.""" + #Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.75,anchor='n') + Label(self.frame_valeur,text=aide).grid(row=5,columnspan=2,padx=5,pady=5) + self.frame_valeur.columnconfigure(1,weight=1) + + # affichage des nom, type retourné, arguments et corps de la FORMULE + self.display_valeur() + # affichage des boutons + self.make_buttons() + # entry_nom prend le focus + self.entry_nom.focus() + + def make_buttons(self): + """ + Crée les boutons du panneau + """ + #self.bouton_sup.place_forget() + #self.bouton_doc.place_forget() + #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14) + #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14) + + #self.bouton_val.place(relx=0.15,rely=0.5,relheight=0.8,anchor='center') + #self.bouton_ann.place(relx=0.40,rely=0.5,relheight=0.8,anchor='center') + #self.bouton_sup.place(relx=0.65,rely=0.5,relheight=0.8,anchor='center') + #self.bouton_doc.place(relx=0.90,rely=0.5,relheight=0.8,anchor='center') + + self.bouton_sup.pack_forget() + self.bouton_doc.pack_forget() + self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur) + self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur) + + self.bouton_val.pack(side='left',padx=5, pady=5) + self.bouton_ann.pack(side='left',padx=5, pady=5) + self.bouton_sup.pack(side='left',padx=5, pady=5) + self.bouton_doc.pack(side='right',padx=5, pady=5) + + def change_valeur(self): + """ + Stocke la nouvelle FORMULE décrite par l'utilisateur + """ + if self.parent.modified == 'n' : self.parent.init_modif() + # on récupère les nouveaux nom, type retourné, arguments et corps de la FORMULE + new_nom = self.entry_nom.get() + new_typ="REEL" + new_arg = self.entry_arg.get() + new_exp = self.entry_exp.get() + self.verif_arguments() + self.verif_corps() + # on essaie de les stocker + test,erreur = self.node.item.save_formule(new_nom,new_typ,new_arg,new_exp) + if test : + # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage + self.node.update() + self.display_valeur() + self.parent.appli.affiche_infos("FORMULE %s modifiée" %self.node.item.get_nom()) + else: + # la formule est incorrecte : on affiche les erreurs + widgets.showerror("Formule incorrecte",erreur) + self.parent.appli.affiche_infos("FORMULE %s non modifiée" %self.node.item.get_nom()) + + def display_valeur(self): + """ + Affiche dans self.widget_text de la valeur de l'objet FORMULE + (annule d'éventuelles modifications faite par l'utilisateur) + """ + # on efface tout texte affiché dans les entries + self.entry_nom.delete(0,END) + self.entry_arg.delete(0,END) + self.entry_exp.delete(0,END) + # on rafraîchit le titre du panneau + self.titre.set('FORMULE '+self.node.item.get_nom()) + # on insére les nouveaux nom, type retourné, arguments et corps de la FORMULE + nom = self.node.item.get_nom() + if nom != '': + self.entry_nom.insert(END,nom) + args = self.node.item.get_args() + if args: + texte_args="" + for i in args : + if texte_args != "" : + texte_args = texte_args +"," + texte_args=texte_args + i + self.entry_arg.insert(END,texte_args) + corps = self.node.item.get_corps() + if corps : + self.entry_exp.insert(END,self.node.item.get_corps()) + + def verif_nom(self,event=None): + """ + Lance la vérification du nom présent dans entry_nom + """ + nom = self.entry_nom.get() + if nom == '': + test,erreur = 0,"Aucun nom fourni !" + else: + test,erreur = self.node.item.verif_nom(nom) + if not test: + widgets.showerror("Nom invalide",erreur) + self.entry_nom.focus() + self.entry_nom.selection_range(0,END) + self.parent.appli.affiche_infos("%s n'est pas un nom valide pour une FORMULE" %nom) + else: + self.parent.appli.affiche_infos("%s est un nom valide pour une FORMULE" %nom) + self.entry_arg.focus() + + def verif_arguments(self,event=None): + """ + Lance la vérification des arguments présents dans entry_arg + """ + arguments = self.entry_arg.get() + if arguments == '' : + test,erreur = 0,"Aucun argument fourni" + else: + test,erreur = self.node.item.verif_arguments(arguments) + if not test: + widgets.showerror("Argument(s) invalide(s)",erreur) + self.entry_arg.focus() + self.entry_arg.selection_range(0,END) + self.parent.appli.affiche_infos("Argument(s) invalide(s) pour une FORMULE") + else: + self.parent.appli.affiche_infos("Argument(s) valide(s) pour une FORMULE") + self.entry_exp.focus() + + def verif_corps(self,event=None): + """ + Lance la vérification du corps de formule présent dans entry_exp + """ + new_nom = self.entry_nom.get() + new_typ="REEL" + new_arg = self.entry_arg.get() + new_exp = self.entry_exp.get() + if new_exp == '': + test,erreur = 0,"Aucune expression fournie !" + else: + test,erreur = self.node.item.verif_formule_python((new_nom,new_typ,new_arg,new_exp)) + + if not test: + widgets.showerror("Corps de FORMULE invalide",erreur) + self.entry_exp.focus() + self.entry_exp.selection_range(0,END) + self.parent.appli.affiche_infos("Corps de FORMULE invalide") + else: + self.parent.appli.affiche_infos("Corps de FORMULE valide") + +class FORMULETreeItem(compooper.EtapeTreeItem): + """ + Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS + qui représente la FORMULE + """ + panel = FORMULEPanel + + def init(self): + self.setfunction = self.set_valeur + +# --------------------------------------------------------------------------- +# API de FORMULE pour l'arbre +# --------------------------------------------------------------------------- + def GetSubList(self): + """ + Retourne la liste des fils de self + On considère que FORMULE n'a pas de fils + --> modification par rapport à MACRO classique + """ + # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE + # de façon traditionnelle + return [] + + def GetIconName(self): + """ + Retourne le nom de l'icône à afficher dans l'arbre + Ce nom dépend de la validité de l'objet + """ + if self.object.isactif(): + if self.object.isvalid(): + return "ast-green-square" + else: + return "ast-red-square" + else: + return "ast-white-text" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + if self.object.isactif(): + # None --> fonte et couleur par défaut + return self.labeltext,None,None + else: + return self.labeltext,fontes.standard_italique,None + +# --------------------------------------------------------------------------- +# Méthodes permettant la modification et la lecture des attributs +# du paramètre = API graphique de la FORMULE pour Panel et EFICAS +# --------------------------------------------------------------------------- + + def get_nom(self): + """ + Retourne le nom de la FORMULE + """ + return self.object.get_nom() + + def get_type(self): + """ + Retourne le type de la valeur retournée par la FORMULE + """ + return self.object.type_retourne + + def get_args(self): + """ + Retourne les arguments de la FORMULE + """ + args="" + for mot in self.object.mc_liste: + if mot.nom == 'NOM_PARA': + args=mot.valeur + break + if args : + if args[0] == "(" and args[-1] ==")": + args=args[1:-1] + # transforme en tuple si ce n est pas déjà le casa + try : + args=string.split(args,',') + except : + pass + return args + + def get_corps(self): + """ + Retourne le corps de la FORMULE + """ + corps="" + for mot in self.object.mc_liste: + if mot.nom == 'VALE': + corps=mot.valeur + break + return corps + + + def get_liste_types_autorises(self): + """ + Retourne la liste des types autorises pour les valeurs de sortie + d'une FORMULE + """ + return self.object.l_types_autorises + + def save_formule(self,new_nom,new_typ,new_arg,new_exp): + """ + Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE + licite : + - si oui, stocke ces paramètres comme nouveaux paramètres de la + FORMULE courante et retourne 1 + - si non, laisse les paramètres anciens de la FORMULE inchangés et + retourne 0 + """ + test,erreur = self.object.verif_formule_python(formule=(new_nom,new_typ,new_arg, + new_exp)) + if test : + # la formule est bien correcte : on sauve les nouveaux paramètres + test=self.object.update_formule_python(formule=(new_nom,new_typ,new_exp,new_arg)) + return test,erreur + +# --------------------------------------------------------------------------- +# Accès aux méthodes de vérification de l'objet FORM_ETAPE +# --------------------------------------------------------------------------- + + def verif_nom(self,nom): + """ + Lance la vérification du nom passé en argument + """ + return self.object.verif_nom(nom) + + def verif_arguments(self,arguments): + """ + Lance la vérification des arguments passés en argument + """ + return self.object.verif_arguments('('+arguments+')') + + def verif_formule(self,formule): + """ + Lance la vérification de FORMULE passée en argument + """ + return self.object.verif_formule(formule=formule) + + + def verif_formule_python(self,formule): + """ + Lance la vérification de FORMULE passée en argument + """ + return self.object.verif_formule_python(formule=formule) + +import Accas +treeitem =FORMULETreeItem +objet = Accas.FORM_ETAPE diff --git a/InterfaceTK/compojdc.py b/InterfaceTK/compojdc.py new file mode 100644 index 00000000..fb9b7d76 --- /dev/null +++ b/InterfaceTK/compojdc.py @@ -0,0 +1,168 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +import Pmw +from Editeur import Objecttreeitem +import panels + +from widgets import ListeChoix + +class JDCPanel(panels.OngletPanel): + def init(self): + """ Initialise les frame des panneaux contextuels relatifs à un JDC """ + panneau=Pmw.PanedWidget(self,orient='horizontal') + panneau.add('left',min=0.4,max=0.6,size=0.5) + panneau.add('right',min=0.4,max=0.6,size=0.5) + panneau.pack(expand=1,fill='both') + self.bouton_com.pack_forget() + self.makeJDCPage(panneau.pane('left')) + self.makeReglesPage(panneau.pane('right')) + self.enlevebind() + + def makeReglesPage(self,page) : + regles = [] + regles = self.node.item.get_regles() + texte_regles = [] + l_regles_en_defaut=[] + if len(regles) > 0: + l_noms_etapes = self.node.item.get_l_noms_etapes() + i = 0 + for regle in regles : + texte_regles.append(regle.gettext()) + texte,test = regle.verif(l_noms_etapes) + if test == 0 : l_regles_en_defaut.append(i) + i = i+1 + Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles") + Liste.affiche_liste() + # aide associée au panneau + bulle_aide="""Ce panneau contient la liste des règles qui s'appliquent à l'objet + en cours d'édition. + - en noir : règles valides + - en rouge : règles violées""" + Liste.MCbox.bind("", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + Liste.MCbox.bind("",self.parent.appli.efface_aide) + +import treewidget +class Node(treewidget.Node): + def doPaste_Commande(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument qui est nécessairement + une commande + """ + #child = self.item.append_child(objet_a_copier,pos='first') + child = self.append_child(objet_a_copier,pos='first',retour='oui') + #if child is None : return 0 + return child + + +class JDCTreeItem(Objecttreeitem.ObjectTreeItem): + panel = JDCPanel + itemNode=Node + + def IsExpandable(self): + return 1 + + def GetText(self): + return " " + + def GetLabelText(self): + # None --> fonte et couleur par défaut + return self.object.nom,None,None + + def get_jdc(self): + """ + Retourne l'objet pointé par self + """ + return self.object + + def GetIconName(self): + if self.object.isvalid(): + return "ast-green-square" + else: + return "ast-red-square" + + def keys(self): + if self.object.etapes_niveaux != []: + return range(len(self.object.etapes_niveaux)) + else: + return range(len(self.object.etapes)) + + def additem(self,name,pos): + cmd = self._object.addentite(name,pos) + return cmd + + def suppitem(self,item) : + # item = item de l'ETAPE à supprimer du JDC + # item.getObject() = ETAPE ou COMMENTAIRE + # self.object = JDC + itemobject=item.getObject() + if self.object.suppentite(itemobject): + if itemobject.nature == "COMMENTAIRE" : + message = "Commentaire supprimé" + else : + message = "Commande " + itemobject.nom + " supprimée" + self.appli.affiche_infos(message) + return 1 + else: + self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet") + return 0 + + def GetSubList(self): + """ + Retourne la liste des items fils de l'item jdc. + Cette liste est conservee et mise a jour a chaque appel + """ + if self.object.etapes_niveaux != []: + liste = self.object.etapes_niveaux + else: + liste = self.object.etapes + sublist=[None]*len(liste) + # suppression des items lies aux objets disparus + for item in self.sublist: + old_obj=item.getObject() + if old_obj in liste: + pos=liste.index(old_obj) + sublist[pos]=item + else: + pass # objets supprimes ignores + # ajout des items lies aux nouveaux objets + pos=0 + for obj in liste: + if sublist[pos] is None: + # nouvel objet : on cree un nouvel item + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj) + sublist[pos]=item + pos=pos+1 + + self.sublist=sublist + return self.sublist + + def get_l_noms_etapes(self): + """ Retourne la liste des noms des étapes de self.object""" + return self.object.get_l_noms_etapes() + + def get_liste_cmd(self): + #print "get_liste_cmd",self.object.niveau.definition + listeCmd = self.object.niveau.definition.get_liste_cmd() + return listeCmd + +import Accas +treeitem =JDCTreeItem +objet = Accas.JDC diff --git a/InterfaceTK/compomacro.py b/InterfaceTK/compomacro.py new file mode 100644 index 00000000..e8f05053 --- /dev/null +++ b/InterfaceTK/compomacro.py @@ -0,0 +1,311 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import os,sys,string +import types +import Tkinter +import Pmw +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import panels +import fontes +import compooper +import convert +from widgets import askopenfilename +from widgets import Fenetre,FenetreYesNo +from widgets import showinfo,showerror + +# +__version__="$Name: V1_14 $" +__Id__="$Id: compomacro.py,v 1.1.4.4.4.1 2008-10-10 13:47:11 pnoyret Exp $" +# + +class MACROPanel(panels.OngletPanel): + def init(self): + nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) + nb.pack(fill = 'both', expand = 1) + self.nb=nb + nb.add('Mocles', tab_text='Ajouter mots-clés') + typsd=self.node.item.object.get_type_produit() + ficini = self.node.item.wait_fichier_init() + if typsd != None: + nb.add('Concept', tab_text='Nommer concept') + if ficini == 1: + nb.add('Fichierinit',tab_text = 'Fichier %s' %self.node.item.get_nom()) + nb.add('Commande', tab_text='Nouvelle Commande') + nb.add('Commentaire',tab_text='Paramètre/Commentaire') + panneau=Pmw.PanedWidget(nb.page("Mocles"), + orient='horizontal') + panneau.add('left',min=0.4,max=0.6,size=0.5) + panneau.add('right',min=0.4,max=0.6,size=0.5) + panneau.pack(expand=1,fill='both') + self.makeCommandePage(nb.page("Commande")) + if typsd != None: + self.makeConceptPage(nb.page("Concept")) + if ficini == 1 : + self.makeFichierPage(nb.page('Fichierinit')) + self.makeMoclesPage(panneau.pane('left')) + self.makeReglesPage(panneau.pane('right')) + self.makeParamCommentPage_for_etape(nb.page("Commentaire")) + nb.tab('Mocles').focus_set() + nb.setnaturalsize() + self.enlevebind() + self.creebind() + self.affiche() + + def makeFichierPage(self,page): + """ + Affiche la page d'onglet correspondant au changement du fichier + dont a besoin la macro + """ + titre = Tkinter.Label(page,text="La commande %s requiert un fichier " %self.node.item.get_nom()) + titre.place(relx=0.5,rely=0.2,anchor='center') + frameMain=Tkinter.Frame(page) + frameMain.place(relx=0.5,rely=0.4,anchor='center',relwidth=1.) + Tkinter.Label(frameMain,text="Fichier :").pack(side='left',padx=5) + self.entry = Tkinter.Entry(frameMain,relief='sunken',bg='white') + self.entry.pack(side='left',padx=5,fill='x',expand=1) + frameButtons=Tkinter.Frame(page) + but1=Tkinter.Button(frameButtons,text='Valider',command = self.change_fichier_init) + but2=Tkinter.Button(frameButtons,text='Browse',command = self.browse_fichier_init) + but3=Tkinter.Button(frameButtons,text='Annuler',command = self.annule_fichier_init) + but1.grid(row=0,column=0,padx=5,pady=5) + but2.grid(row=0,column=1,padx=5,pady=5) + but3.grid(row=0,column=2,padx=5,pady=5) + frameButtons.place(relx=0.5,rely=0.6,anchor='center') + + if hasattr(self.node.item.object,'fichier_ini'): + if self.node.item.object.fichier_ini : + self.entry.insert(0,self.node.item.object.fichier_ini) + self.entry.focus() + + def convert_file(self,file): + """ + Methode pour convertir le fichier file dans le format courant + """ + format=self.parent.appli.format_fichier.get() + if convert.plugins.has_key(format): + # Le convertisseur existe on l'utilise + p=convert.plugins[format]() + p.readfile(file) + text=p.convert('execnoparseur') + if not p.cr.estvide(): + self.parent.appli.affiche_infos("Erreur à la conversion") + Fenetre(self, + titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier", + texte = str(p.cr)) + return None + return text + else: + # Il n'existe pas c'est une erreur + self.parent.appli.affiche_infos("Type de fichier non reconnu") + showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier") + return None + + def change_fichier_init(self,event=None): + """ + Effectue le changement de fichier d'initialisation s'il est valide + """ + new_fic = self.entry.get() + if not os.path.isfile(new_fic) : + showinfo("Fichier introuvable","Le fichier que vous avez saisi\n"+ + "n'est pas un nom de fichier valide !") + self.parent.appli.affiche_infos("Fichier introuvable") + return + # On convertit le fichier + text=self.convert_file(new_fic) + # Si probleme a la lecture-conversion on arrete le traitement + if not text: + return + + try: + self.node.item.object.change_fichier_init(new_fic,text) + self.parent.appli.affiche_infos("Fichier %s modifié" %self.node.item.get_nom()) + except: + # Erreurs lors de l'evaluation de text dans un JDC auxiliaire + self.parent.appli.affiche_infos("Fichier invalide") + l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1]) + f=FenetreYesNo(self.parent.appli,titre="Fichier invalide : voulez vous retablir l ancien fichier ?", + texte="Erreur dans l'interprétation du nouveau fichier ...\n\n"+string.join(l), + yes="Retablir",no="Changer") + f.wait() + reponse=f.result + if reponse: + # On retablit l'ancien fichier + self.entry.delete(0,Tkinter.END) + self.node.item.object.restore_fichier_init() + self.parent.appli.affiche_infos("Fichier invalide ... Ancien fichier restauré") + fic=self.node.item.object.fichier_ini + if fic: + self.entry.insert(0,fic) + else: + self.node.item.object.force_fichier_init() + self.parent.appli.affiche_infos("Fichier invalide ... Nouveau fichier mémorisé") + + def annule_fichier_init(self,event=None): + """ Restaure dans self.entry le nom de fichier_init""" + self.entry.delete(0,Tkinter.END) + if self.node.item.object.fichier_ini: + self.entry.insert(0,self.node.item.object.fichier_ini) + + def browse_fichier_init(self,event=None): + """ + Propose à l'utilisateur une Bsf et retourne le fichier + sélectionné dans self.entry + """ + file = askopenfilename(title="Choix du fichier %s" %self.node.item.get_nom()) + if file : + self.entry.delete(0,Tkinter.END) + self.entry.insert(0,file) + + def update_panel(self): + if hasattr(self,"entry"): + self.annule_fichier_init() + +class MACROTreeItem(compooper.EtapeTreeItem): + """ Cette classe hérite d'une grande partie des comportements + de la classe compooper.EtapeTreeItem + """ + panel=MACROPanel + +class INCLUDETreeItemBase(MACROTreeItem): + rmenu_specs=[("View","makeView"), + ("Edit","makeEdit"), + ] + + def __init__(self,appli, labeltext, object, setfunction): + MACROTreeItem.__init__(self,appli, labeltext, object, setfunction) + + def iscopiable(self): + """ + Retourne 1 si l'objet est copiable, 0 sinon + """ + return 0 + + def makeEdit(self,appli,node): + #print "makeEdit",self.object,self.object.nom + #print "makeEdit",self.object.jdc_aux,self.object.jdc_aux.nom + #print "makeEdit",self.object.jdc_aux.context_ini + if self.object.text_converted == 0: + # Le texte du fichier inclus n'a pas pu etre converti par le module convert + msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n" + msg=msg+self.object.text_error + Fenetre(self,titre="Include non editable",texte=msg,wrap='none') + return + + if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None: + #L'include n'est pas initialise + self.object.build_include(None,"") + + # On cree un nouvel onglet dans le bureau + appli.bureau.ShowJDC(self.object.jdc_aux,self.object.jdc_aux.nom, + label_onglet=None, + JDCDISPLAY=macrodisplay.MACRODISPLAY) + + def makeView(self,appli,node): + if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None: + showerror("Include vide", + "L'include doit etre correctement initialisé pour etre visualisé") + return + + nom=self.object.nom + if hasattr(self.object,'fichier_ini'): + if self.object.fichier_ini is None: + nom=nom+' '+"Fichier non défini" + else: + nom=nom+' '+self.object.fichier_ini + macdisp=macrodisplay.makeMacroDisplay(appli,self,nom) + +class INCLUDEPanel(MACROPanel): + def makeFichierPage(self,page): + """ + Affiche la page d'onglet correspondant au changement du fichier INCLUDE + """ + if not hasattr(self.node.item.object,'fichier_ini'): + titre = Tkinter.Label(page,text="L'INCLUDE n'a pas de fichier associé\nIl faut d'abord choisir un numero d'unité " ) + titre.place(relx=0.5,rely=0.5,anchor='center') + else: + MACROPanel.makeFichierPage(self,page) + +class INCLUDETreeItem(INCLUDETreeItemBase): + panel=INCLUDEPanel + +class POURSUITETreeItem(INCLUDETreeItemBase): + def makeEdit(self,appli,node): + if self.object.text_converted == 0: + # Le texte du fichier inclus n'a pas pu etre converti par le module convert + msg="Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n" + msg=msg+self.object.text_error + Fenetre(self,titre="Poursuite non editable",texte=msg,wrap='none') + return + + if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None: + #La poursuite n'est pas initialisee + text="""DEBUT() +FIN()""" + self.object.build_poursuite(None,text) + + # On cree un nouvel onglet dans le bureau + appli.bureau.ShowJDC(self.object.jdc_aux,self.object.jdc_aux.nom, + label_onglet=None, + JDCDISPLAY=macrodisplay.MACRODISPLAY) + + def makeView(self,appli,node): + if not hasattr(self.object,"jdc_aux") or self.object.jdc_aux is None: + showerror("Poursuite vide","Une POURSUITE doit etre correctement initialisée pour etre visualisée") + return + nom=self.object.nom + if hasattr(self.object,'fichier_ini'): + if self.object.fichier_ini is None: + nom=nom+' '+"Fichier non défini" + else: + nom=nom+' '+self.object.fichier_ini + macdisp=macrodisplay.makeMacroDisplay(appli,self,nom) + +class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase): + rmenu_specs=[("View","makeView"), + ] + def iscopiable(self): + """ + Retourne 1 si l'objet est copiable, 0 sinon + """ + return 1 + + +def treeitem(appli, labeltext, object, setfunction=None): + """ Factory qui retourne l'item adapté au type de macro : + INCLUDE, POURSUITE, MACRO + """ + if object.nom == "INCLUDE_MATERIAU": + return INCLUDE_MATERIAUTreeItem(appli, labeltext, object, setfunction) + elif object.nom == "INCLUDE": + return INCLUDETreeItem(appli, labeltext, object, setfunction) + elif object.nom == "POURSUITE": + return POURSUITETreeItem(appli, labeltext, object, setfunction) + else: + return MACROTreeItem(appli, labeltext, object, setfunction) + +import Accas +objet=Accas.MACRO_ETAPE + +import macrodisplay diff --git a/InterfaceTK/compomclist.py b/InterfaceTK/compomclist.py new file mode 100644 index 00000000..ba3704ca --- /dev/null +++ b/InterfaceTK/compomclist.py @@ -0,0 +1,225 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +import types +from Tkinter import * +import Pmw + +from Noyau.N_OBJECT import ErrorObj +from Editeur import Objecttreeitem +import panels +import traceback + +class MCLISTPanel(panels.Panel): + def init(self): + test_ajout = self.node.item.ajout_possible() + nom_mcfact = self.node.item.get_nom() + if test_ajout: + texte = "Pour ajouter une autre occurrence du mot-clé facteur %s, cliquez ci-dessous" %nom_mcfact + else: + texte = "Vous ne pouvez pas ajouter une autre occurrence du mot-clé facteur %s ?" %nom_mcfact + self.label = Label(self,text = texte) + self.label.place(relx=0.5,rely=0.4,anchor='center') + if test_ajout: + self.but=Button(self,text="AJOUTER",command=self.ajout_occurrence) + self.but.place(relx=0.5,rely=0.6,anchor='center') + #Button(self,text="NON",command=None).place(relx=0.6,rely=0.6,anchor='center') + + def ajout_occurrence(self,event=None): + self.node.parent.append_child(self.node.item.get_nom()) + +import compofact +import compoerror +import treewidget + +class Node(treewidget.Node): + def doPaste(self,node_selected): + objet_a_copier = self.item.get_copie_objet() + child=node_selected.doPaste_MCF(objet_a_copier) + #print "doPaste",child + return child + + def doPaste_MCF(self,objet_a_copier): + if self.item.isMCList() : + # le noeud courant est une MCList + child = self.append_child(objet_a_copier,pos='first',retour='oui') + #child = self.parent.append_child(objet_a_copier,pos='first',retour='oui') + elif self.item.isMCFact() : + # le noeud courant est un MCFACT + if self.parent.item.isMCList(): + # le noeud selectionne est un MCFACT dans une MCList + child = self.parent.append_child(objet_a_copier, + pos=self.item, + retour='oui') + else: + # le noeud MCFACT selectionne n'est pas dans une MCList + child = self.parent.append_child(objet_a_copier,retour='oui') + else: + showinfo("Copie impossible", + "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !") + self.appli.affiche_infos("Copie refusée") + child=None + #print "doPaste_MCF",child + return child + +class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem): + """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets + du noyau Accas instances de la classe MCLIST. + Elle adapte ces objets pour leur permettre d'etre intégrés en tant que + noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py). + Cette classe délègue les appels de méthode et les accès + aux attributs à l'objet du noyau soit manuellement soit + automatiquement (voir classe Delegate et attribut object). + """ + itemNode=Node + + def init(self): + # Si l'objet Accas (MCList) a moins d'un mot cle facteur + # on utilise directement ce mot cle facteur comme delegue + self.updateDelegate() + + def updateDelegate(self): + if len(self._object) > 1: + self.setdelegate(self._object) + else: + self.setdelegate(self._object.data[0]) + + def panel(self,jdcdisplay,pane,node): + """ Retourne une instance de l'objet panneau associe a l'item (self) + Si la liste ne contient qu'un mot clé facteur, on utilise le panneau + FACTPanel. + Si la liste est plus longue on utilise le panneau MCLISTPanel. + """ + if len(self._object) > 1: + return MCLISTPanel(jdcdisplay,pane,node) + elif isinstance(self._object.data[0],ErrorObj): + return compoerror.ERRORPanel(jdcdisplay,pane,node) + else: + return compofact.FACTPanel(jdcdisplay,pane,node) + + def IsExpandable(self): + if len(self._object) > 1: + return Objecttreeitem.SequenceTreeItem.IsExpandable(self) + else: + return compofact.FACTTreeItem.IsExpandable(self) + + def GetSubList(self): + self.updateDelegate() + if len(self._object) <= 1: + self._object.data[0].alt_parent=self._object + return compofact.FACTTreeItem.GetSubList(self) + + liste=self._object.data + sublist=[None]*len(liste) + # suppression des items lies aux objets disparus + for item in self.sublist: + old_obj=item.getObject() + if old_obj in liste: + pos=liste.index(old_obj) + sublist[pos]=item + else: + pass # objets supprimes ignores + # ajout des items lies aux nouveaux objets + pos=0 + for obj in liste: + if sublist[pos] is None: + # nouvel objet : on cree un nouvel item + def setfunction(value, object=obj): + object=value + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction) + sublist[pos]=item + #Attention : on ajoute une information supplementaire pour l'actualisation de + # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE + # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des + # informations de validite. alt_parent permet de remedier a ce defaut. + obj.alt_parent=self._object + pos=pos+1 + + self.sublist=sublist + return self.sublist + + def GetIconName(self): + if self._object.isvalid(): + return "ast-green-los" + elif self._object.isoblig(): + return "ast-red-los" + else: + return "ast-yel-los" + + def get_docu(self): + """ Retourne la clé de doc de l'objet pointé par self """ + return self.object.get_docu() + + def iscopiable(self): + if len(self._object) > 1: + return Objecttreeitem.SequenceTreeItem.iscopiable(self) + else: + return compofact.FACTTreeItem.iscopiable(self) + + def isMCFact(self): + """ + Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon + """ + return len(self._object) <= 1 + + def isMCList(self): + """ + Retourne 1 si l'objet pointé par self est une MCList, 0 sinon + """ + return len(self._object) > 1 + + def get_copie_objet(self): + return self._object.data[0].copy() + + def additem(self,obj,pos): + #print "compomclist.additem",obj,pos + if len(self._object) <= 1: + return compofact.FACTTreeItem.additem(self,obj,pos) + + o= self.object.addentite(obj,pos) + return o + + def suppitem(self,item): + """ + Retire un objet MCFACT de la MCList (self.object) + """ + #print "compomclist.suppitem",item + obj=item.getObject() + if len(self._object) <= 1: + return compofact.FACTTreeItem.suppitem(self,item) + + if self.object.suppentite(obj): + if len(self._object) == 1: self.updateDelegate() + message = "Mot-clé " + obj.nom + " supprimé" + self.appli.affiche_infos(message) + return 1 + else: + self.appli.affiche_infos('Impossible de supprimer ce mot-clé') + return 0 + + +import Accas +objet = Accas.MCList + +def treeitem(appli,labeltext,object,setfunction): + """ Factory qui produit un objet treeitem adapte a un objet + Accas.MCList (attribut objet de ce module) + """ + return MCListTreeItem(appli,labeltext,object,setfunction) diff --git a/InterfaceTK/componiveau.py b/InterfaceTK/componiveau.py new file mode 100644 index 00000000..175a3e89 --- /dev/null +++ b/InterfaceTK/componiveau.py @@ -0,0 +1,133 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +from Tkinter import * +import Pmw + +from Editeur import Objecttreeitem +import panels +import fontes +from Extensions import commentaire + +Fonte_Niveau = fontes.canvas_gras_italique +Fonte_Niveau_inactif = fontes.canvas_italique + +class NIVEAUPanel(panels.OngletPanel): + def init(self): + """ Initialise les frame des panneaux contextuels relatifs à un JDC """ + panneau=Pmw.PanedWidget(self,orient='horizontal') + panneau.add('left',min=0.4,max=0.6,size=0.5) + panneau.add('right',min=0.4,max=0.6,size=0.5) + panneau.pack(expand=1,fill='both') + self.bouton_com.pack_forget() + self.makeJDCPage(panneau.pane('left')) + self.enlevebind() + + +import treewidget +class Node(treewidget.Node):pass + + +class NIVEAUTreeItem(Objecttreeitem.ObjectTreeItem): + panel = NIVEAUPanel + itemNode=Node + + def isactif(self): + return self.object.isactif() + + def IsExpandable(self): + return 1 + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + if self.isactif(): + fonte = Fonte_Niveau + else : + fonte = Fonte_Niveau_inactif + return self.labeltext,fonte,'#00008b' + + def GetIconName(self): + if self.isactif(): + if self.object.isvalid(): + return "ast-green-text" + else: + return "ast-red-text" + else: + return "ast-white-text" + + def keys(self): + if self.object.etapes_niveaux != []: + return range(len(self.object.etapes_niveaux)) + else: + return range(len(self.object.etapes)) + + def GetSubList(self): + sublist=[] + for key in self.keys(): + if self.object.etapes_niveaux != []: + liste = self.object.etapes_niveaux + else: + liste = self.object.etapes + try: + value = liste[key] + except KeyError: + continue + def setfunction(value, key=key, object=liste): + object[key] = value + item =self.make_objecttreeitem(self.appli,value.ident() + " : ", value, setfunction) + sublist.append(item) + return sublist + + def additem(self,name,pos): + if isinstance(name,Objecttreeitem.TreeItem) : + cmd=self.object.addentite(name.getObject(),pos) + else : + cmd = self.object.addentite(name,pos) + item = self.make_objecttreeitem(self.appli,cmd.nom + " : ", cmd) + return item + + def suppitem(self,item) : + # item = item de l'ETAPE à supprimer du JDC + # item.getObject() = ETAPE ou COMMENTAIRE + # self.object = JDC + itemobject=item.getObject() + if self.object.suppentite(itemobject): + if isinstance(item.object,commentaire.COMMENTAIRE): + message = "Commentaire supprimé" + else : + message = "Commande " + itemobject.nom + " supprimée" + self.appli.affiche_infos(message) + return 1 + else: + self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet") + return 0 + + def GetText(self): + return '' + + +import Accas +treeitem = NIVEAUTreeItem +objet = Accas.ETAPE_NIVEAU diff --git a/InterfaceTK/componuplet.py b/InterfaceTK/componuplet.py new file mode 100644 index 00000000..474b643e --- /dev/null +++ b/InterfaceTK/componuplet.py @@ -0,0 +1,175 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import types +import Tkinter +import Pmw +from repr import Repr +from copy import copy,deepcopy + +# Modules Eficas +from Editeur import Objecttreeitem +import panels + +# +__version__="$Name: V1_14 $" +__Id__="$Id: componuplet.py,v 1.1.4.2.4.1 2008-10-10 13:47:11 pnoyret Exp $" +# + +myrepr = Repr() +myrepr.maxstring = 100 +myrepr.maxother = 100 + +# Si Expandable vaut 1 les éléments du nuplet apparaissent dans l'arbre +# Si Expandable vaut 0 les éléments n'apparaissent pas +Expandable=1 + +class NUPLETPanel(panels.OngletPanel): + def init(self): + """ Initialise les frame des panneaux contextuels relatifs \340 un NUPLET """ + self.nb=Pmw.NoteBook(self,raisecommand=self.raisecmd) + self.nb.pack(fill = 'both', expand = 1) + self.nb.add("Valeurs",tab_text="Saisir valeurs") + self.makeValeurPage(self.nb.page('Valeurs')) + self.enlevebind() + self.creebind() + self.nb.setnaturalsize() + + def makeValeurPage(self,page): + label = Tkinter.Label(page,text='Valeurs :').pack(side=Tkinter.LEFT) + i=0 + for obj in self.node.item.object.mc_liste: + frame_valeur=Tkinter.Frame(page) + frame_valeur.pack(side=Tkinter.LEFT) + if hasattr(obj,'definition'): + objet_mc=obj.definition + else: + objet_mc=None + valeur=obj.valeur + if type(valeur) == types.InstanceType : + valeur=obj.getval() + aide=self.gen_aide(obj) + if objet_mc.into != None : + l_choix=list(objet_mc.into) + #obj.set_valeur(l_choix[0],evaluation='non') + obj.set_valeur(l_choix[0]) + option=Pmw.OptionMenu (frame_valeur, + items = l_choix, + menubutton_width = 10, + command = lambda e,obj=obj,s=self:s.record_valeur(val=e,obj=obj), + ) + option.pack(side=Tkinter.LEFT,padx=1) + else : + entry = Tkinter.Entry(frame_valeur,relief='sunken',width=10) + entry.pack(side=Tkinter.LEFT,padx=1) + entry.bind("", + lambda e,obj=obj,s=self:s.valid_valeur(e,obj=obj)) + entry.bind("", + lambda e,obj=obj,s=self:s.valid_valeur(e,obj=obj)) + if i==0:entry.focus_set() + #aide = Tkinter.Label(frame_valeur, text = aide) + #aide.place(relx=0.5,rely=0.55,anchor='n') + if valeur != None : + entry.delete(0,Tkinter.END) + entry.insert(0,obj.getval()) + i=i+1 + + def record_valeur(self,val=None,obj=None,mess='Valeur du mot-cl\351 enregistr\351e'): + """ + Enregistre val comme valeur de self.node.item.object SANS faire de + test de validité + """ + #obj.set_valeur(val,evaluation='non') + obj.set_valeur(val) + self.parent.appli.affiche_infos(mess) + #self.node.parent.verif() + #self.node.update() + + def valid_valeur(self,e,obj=None,mess='Valeur du mot-cl\351 enregistr\351e'): + """ + Enregistre val comme valeur de self.node.item.object avec + test de validité + """ + valeur=e.widget.get() + e.widget.delete(0,Tkinter.END) + anc_val=obj.getval() + if anc_val == None:anc_val='' + test=obj.set_valeur(valeur) + if test: + if obj.isvalid(): + self.parent.appli.affiche_infos('Valeur du mot-cl\351 enregistr\351e') + e.widget.insert(0,obj.getval()) + else: + #obj.set_valeur(anc_val,evaluation='non') + obj.set_valeur(anc_val) + self.parent.appli.affiche_infos("valeur du mot-cl\351 non autoris\351e") + e.widget.insert(0,anc_val) + else: + print "impossible d'\351valuer : %s " %valeur + print "test =",test + self.parent.appli.affiche_infos("valeur du mot-cl\351 non autoris\351e") + e.widget.delete(0,Tkinter.END) + e.widget.insert(0,anc_val) + + #self.node.parent.verif() + #self.node.update() + + def gen_aide(self,obj): + return "" + + +class NUPLETTreeItem(Objecttreeitem.ObjectTreeItem): + panel=NUPLETPanel + + def IsExpandable(self): + return Expandable + + def GetText(self): + return '' + + def isvalid(self): + return self.object.isvalid() + + def GetIconName(self): + if self.object.isvalid(): + return "ast-green-los" + elif self.object.isoblig(): + return "ast-red-los" + else: + return "ast-yel-los" + + def GetSubList(self): + if not Expandable:return [] + sublist=[] + for obj in self.object.mc_liste: + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, None) + sublist.append(item) + return sublist + + def additem(self,name,pos): + raise "NUPLET" + + def suppitem(self,item) : + raise "NUPLET" + +import Accas +treeitem=NUPLETTreeItem +objet=Accas.MCNUPLET diff --git a/InterfaceTK/compooper.py b/InterfaceTK/compooper.py new file mode 100644 index 00000000..0575053d --- /dev/null +++ b/InterfaceTK/compooper.py @@ -0,0 +1,332 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +from Tkinter import * +import Pmw +import traceback +from Editeur import Objecttreeitem +import panels +import fontes + +class OPERPanel(panels.OngletPanel): + + def init(self): + nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) + nb.pack(fill = 'both', expand = 1) + self.nb=nb + nb.add('Mocles', tab_text='Nouveau mot-clé') + nb.add('Concept', tab_text='Nommer concept') + nb.add('Commande', tab_text='Nouvelle Commande') + nb.add('Commentaire',tab_text='Paramètre/Commentaire') + panneau=Pmw.PanedWidget(nb.page("Mocles"), + orient='horizontal') + panneau.add('left',min=0.4,max=0.60,size=0.50) + panneau.add('right',min=0.4,max=0.60,size=0.50) + panneau.pack(expand=1,fill='both') + panneau.setnaturalsize() + self.makeCommandePage(nb.page("Commande")) + self.makeConceptPage_oper(nb.page("Concept")) + self.makeMoclesPage(panneau.pane('left')) + self.makeReglesPage(panneau.pane('right')) + #self.makeCommentairePage(nb.page("Commentaire")) + self.makeParamCommentPage_for_etape(nb.page("Commentaire")) + nb.tab('Mocles').focus_set() + self.nb.setnaturalsize() + self.enlevebind() + self.creebind() + self.affiche() + + def makeConceptPage_oper(self,page): + """ Crée la page de saisie du nom du concept """ + if self.node.item.is_reentrant(): + # commande obligatoirement reentrante + self.makeConceptPage_reentrant(page) + else: + # commande non reentrante ou facultativement reentrante + self.makeConceptPage(page) + + def makeConceptPage_reentrant(self,page): + """ Crée la page de saisie du nom de concept pour un opérateur reentrant + cad propose dans la liste des SD utilisées dans la commande celle(s) dont le + type est compatible avec celui que retourne l'opérateur """ + liste_noms_sd = self.node.item.get_noms_sd_oper_reentrant() + self.listbox = Pmw.ScrolledListBox(page, + items=liste_noms_sd, + labelpos='n', + label_text="Structure(s) de données à enrichir par l'opérateur courant :", + listbox_height = 6, + selectioncommand=self.select_valeur_from_list, + dblclickcommand=lambda s=self,c=self.execConcept : s.choose_valeur_from_list(c)) + self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center') + Label(page,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6) + self.valeur_choisie = StringVar() + self.label_valeur = Label(page,textvariable=self.valeur_choisie) + self.label_valeur.place(relx=0.45,rely=0.6) + if len(liste_noms_sd) == 1 : + self.valeur_choisie.set(liste_noms_sd[0]) + + def select_valeur_from_list(self): + try: + choix = self.listbox.getcurselection()[0] + self.valeur_choisie.set(choix) + except: + traceback.print_exc() + + + def choose_valeur_from_list(self,command): + try: + choix = self.listbox.getcurselection()[0] + self.valeur_choisie.set(choix) + apply(command,(),{}) + except: + traceback.print_exc() + +import treewidget +class Node(treewidget.Node): + def doPaste(self,node_selected): + """ + Déclenche la copie de l'objet item avec pour cible + l'objet passé en argument : node_selected + """ + objet_a_copier = self.item.get_copie_objet() + child=node_selected.doPaste_Commande(objet_a_copier) + return child + + def doPaste_Commande(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument qui est nécessairement + une commande + """ + parent=self.parent + #child = parent.item.append_child(objet_a_copier,self.item.getObject()) + child = self.append_brother(objet_a_copier,retour='oui') + #if child is None:return 0 + return child + + def doPaste_MCF(self,objet_a_copier): + """ + Réalise la copie de l'objet passé en argument (objet_a_copier) + Il s'agit forcément d'un mot clé facteur + """ + child = self.append_child(objet_a_copier,pos='first',retour='oui') + return child + + +class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): + """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau + Accas. Elle leur permet d'etre affichés comme des noeuds + d'un arbre graphique. + Cette classe a entre autres deux attributs importants : + - _object qui est un pointeur vers l'objet du noyau + - object qui pointe vers l'objet auquel sont délégués les + appels de méthode et les accès aux attributs + Dans le cas d'une ETAPE, _object et object pointent vers le + meme objet. + """ + panel = OPERPanel + itemNode=Node + + def IsExpandable(self): + return 1 + + def GetIconName(self): + """ + Retourne le nom de l'icône à afficher dans l'arbre + Ce nom dépend de la validité de l'objet + """ + if not self.object.isactif(): + return "ast-white-square" + elif self.object.isvalid(): + return "ast-green-square" + else: + valid=self.valid_child() + valid=valid * self.valid_regles("non") + if self.reste_val != {}: + valid=0 + if valid==0 : + return "ast-red-square" + else : + return "ast-yellow-square" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + if self.object.isactif(): + # None --> fonte et couleur par défaut + return self.labeltext,None,None + else: + return self.labeltext,fontes.standard_italique,None + + def get_objet(self,name) : + for v in self.object.mc_liste: + if v.nom == name : return v + return None + + def get_type_sd_prod(self): + """ + Retourne le nom du type du concept résultat de l'étape + """ + sd_prod=self.object.get_type_produit() + if sd_prod: + return sd_prod.__name__ + else: + return "" + + def additem(self,name,pos): + #print "compooper.additem",name,pos + mcent = self._object.addentite(name,pos) + return mcent + + def suppitem(self,item) : + # item : item du MOCLE de l'ETAPE à supprimer + # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList + itemobject=item.getObject() + if itemobject.isoblig() : + self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ') + return 0 + if self.object.suppentite(itemobject): + message = "Mot-clé " + itemobject.nom + " supprimé" + self.appli.affiche_infos(message) + return 1 + else : + self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé') + return 0 + + def GetText(self): + try: + return self.object.get_sdname() + except: + return '' + + def keys(self): + keys=self.object.mc_dict.keys() + return keys + + def GetSubList(self): + """ + Reactualise la liste des items fils stockes dans self.sublist + """ + if self.isactif(): + liste=self.object.mc_liste + else: + liste=[] + + sublist=[None]*len(liste) + # suppression des items lies aux objets disparus + for item in self.sublist: + old_obj=item.getObject() + if old_obj in liste: + pos=liste.index(old_obj) + sublist[pos]=item + else: + pass # objets supprimes ignores + + # ajout des items lies aux nouveaux objets + pos=0 + for obj in liste: + if sublist[pos] is None: + # nouvel objet : on cree un nouvel item + def setfunction(value, object=obj): + object.setval(value) + item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction) + sublist[pos]=item + pos=pos+1 + + self.sublist=sublist + return self.sublist + + def isvalid(self): + return self.object.isvalid() + + def iscopiable(self): + """ + Retourne 1 si l'objet est copiable, 0 sinon + """ + return 1 + + def update(self,item): + if item.sd and item.sd.nom: + self.nomme_sd(item.sd.nom) + + def nomme_sd(self,nom): + """ Lance la méthode de nommage de la SD """ + oldnom="" + if self.object.sd != None : + oldnom=self.object.sd.nom + test,mess= self.object.nomme_sd(nom) + if test:self.object.parent.reset_context() + if (test and self.appli.dict_reels.has_key(oldnom) ): + self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom] + return test,mess + + def is_reentrant(self): + return self.object.is_reentrant() + + def get_noms_sd_oper_reentrant(self): + return self.object.get_noms_sd_oper_reentrant() + + def get_objet_commentarise(self): + """ + Cette méthode retourne un objet commentarisé + représentatif de self.object + """ + # Format de fichier utilisé + format=self.appli.format_fichier.get() + return self.object.get_objet_commentarise(format) + + def get_objet_commentarise_BAK(self): + """ + Cette méthode retourne un objet commentarisé + représentatif de self.object + """ + import generator,string,Accas + # Format de fichier utilisé + format=self.appli.format_fichier.get() + g=generator.plugins[format]() + texte_commande = g.gener(self.object,format='beautifie') + # Il faut enlever la première ligne vide de texte_commande que + # rajoute le generator + rebut,texte_commande = string.split(texte_commande,'\n',1) + # on construit l'objet COMMANDE_COMM repésentatif de self mais non + # enregistré dans le jdc + commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non', + parent=self.object.parent) + commande_comment.niveau = self.object.niveau + commande_comment.jdc = commande_comment.parent = self.object.jdc + + pos=self.object.parent.etapes.index(self.object) + parent=self.object.parent + self.object.parent.suppentite(self.object) + parent.addentite(commande_comment,pos) + + return commande_comment + + def visu_3D(self,appli,node) : + import TroisDPal + troisD=TroisDPal.TroisDPilote(node.item,appli,node.parent) + troisD.envoievisu() + +import Accas +treeitem = EtapeTreeItem +objet = Accas.ETAPE + diff --git a/InterfaceTK/compoparam.py b/InterfaceTK/compoparam.py new file mode 100644 index 00000000..80094ad3 --- /dev/null +++ b/InterfaceTK/compoparam.py @@ -0,0 +1,248 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module contient les classes permettant de définir les objets graphiques + représentant un objet de type PARAMETRE, cad le panneau et l'item de l'arbre + d'EFICAS +""" + +# import modules Python +from Tkinter import * +import Pmw +import string + +# import modules EFICAS +from Editeur import Objecttreeitem +import panels +import fontes + + +Fonte_PARAMETRE = fontes.standard_italique +Fonte_TITRE = fontes.standard_gras_souligne + + +class PARAMPanel(panels.OngletPanel): + """ + Classe servant à construire le panneau associé à un paramètre. + C'est au moyen de ce panneau que l'utilisateur peut accéder + aux nom et valeur du paramètre en vue éventuellement de les + modifier. + """ + + def init(self): + """ + Initialise les frame des panneaux contextuels relatifs à un PARAMETRE + """ + nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) + nb.pack(fill = 'both', expand = 1) + self.nb=nb + nb.add('Parametre', tab_text='Valeur Paramètre') + nb.add('Commande', tab_text='Nouvelle Commande') + nb.add('Commentaire',tab_text='Paramètre/Commentaire') + self.makeParametrePage(nb.page("Parametre")) + self.makeCommandePage(nb.page("Commande")) + self.makeParamCommentPage_for_etape(nb.page("Commentaire")) + nb.tab('Parametre').focus_set() + nb.setnaturalsize() + self.make_buttons() + self.enlevebind() + self.creebind() + + def makeParametrePage(self,page): + """ + Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE + """ + self.frame_valeur = Frame(page) + #self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw') + self.frame_valeur.pack(expand=1) + # affichage du titre du panneau + self.titre = StringVar() + self.titre.set("PARAMETRE "+self.node.item.get_nom()) + #Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n') + Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).grid(row=0,columnspan=2,padx=5,pady=5) + # création des labels et entries associés aux nom et valeur du paramètre + #Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3) + Label(self.frame_valeur,text= 'Nom du paramètre : ').grid(row=1,sticky=W,padx=5,pady=5) + self.entry_nom = Entry(self.frame_valeur) + #Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5) + Label(self.frame_valeur,text= 'Valeur du paramètre : ').grid(row=2,sticky=W,padx=5,pady=5) + self.entry_val = Entry(self.frame_valeur) + # binding sur entry_nom + self.entry_nom.bind("",lambda e,s=self : s.entry_val.focus()) + self.entry_val.bind("",lambda e,s=self : s.change_valeur()) + self.entry_nom.bind("",lambda e,s=self : s.entry_val.focus()) + self.entry_val.bind("",lambda e,s=self : s.change_valeur()) + # affichage des entries + #self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3) + self.entry_nom.grid(row=1,column=1,sticky=W,padx=5,pady=5) + #self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5) + self.entry_val.grid(row=2,column=1,sticky=W,padx=5,pady=5) + # affichage d'une phrase d'aide + aide = """ + Un retour de chariot dans une zone de saisie vous permet de vérifier si + la valeur que vous avez entrée est valide. + Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles + valeurs seront effectivement prises en compte + """ + #Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n') + Label(self.frame_valeur,text=aide).grid(row=3,columnspan=2,padx=5,pady=5) + self.frame_valeur.columnconfigure(1,weight=1) + # affichage des nom et valeur du paramètre + self.display_valeur() + self.entry_nom.focus() + + def make_buttons(self): + """ + Crée les boutons du panneau + """ + #self.bouton_sup.place_forget() + #self.bouton_doc.place_forget() + #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14) + #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14) + #self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center') + #self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center') + #self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center') + + self.bouton_sup.pack_forget() + self.bouton_doc.pack_forget() + self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur) + self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur) + self.bouton_val.pack(side='left',padx=5, pady=5) + self.bouton_ann.pack(side='left',padx=5, pady=5) + self.bouton_sup.pack(side='right',padx=5, pady=5) + + def change_valeur(self): + """ + Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE + """ + if self.parent.modified == 'n' : self.parent.init_modif() + new_nom = self.entry_nom.get() + new_val = self.entry_val.get() + self.node.item.set_nom(new_nom) + self.node.item.set_valeur(new_val) + self.node.update() + self.display_valeur() + + def display_valeur(self): + """ + Affiche dans self.widget_text la valeur de l'objet PARAMETRE + (annule d'éventuelles modifications faite par l'utilisateur) + """ + self.entry_nom.delete(0,END) + self.entry_val.delete(0,END) + self.titre.set('PARAMETRE '+self.node.item.get_nom()) + self.entry_nom.insert(END,self.node.item.get_nom()) + self.entry_val.insert(END,self.node.item.get_valeur()) + +class PARAMTreeItem(Objecttreeitem.ObjectTreeItem): + """ + Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS + qui représente le PARAMETRE + """ + panel = PARAMPanel + + def init(self): + self.setfunction = self.set_valeur + +# --------------------------------------------------------------------------- +# API du PARAMETRE pour l'arbre +# --------------------------------------------------------------------------- + + def GetIconName(self): + """ + Retourne le nom de l'icône associée au noeud qui porte self, + dépendant de la validité de l'objet + NB : un PARAMETRE est toujours valide ... + """ + if self.isactif(): + if self.isvalid(): + return "ast-green-square" + else: + return "ast-red-square" + else: + return "ast-white-square" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + return 'Paramètre',Fonte_PARAMETRE,None + + def GetText(self): + """ + Retourne le texte à afficher après le nom de la commande (ici après 'paramètre') + Ce texte est tronqué à 25 caractères + """ + texte = repr(self.object) + texte = string.split(texte,'\n')[0] + if len(texte) < 25 : + return texte + else : + return texte[0:24]+'...' + + def GetSubList(self): + """ + Retourne la liste des fils de self + """ + return [] + +# --------------------------------------------------------------------------- +# Méthodes permettant la modification et la lecture des attributs +# du paramètre = API graphique du PARAMETRE pour Panel et EFICAS +# --------------------------------------------------------------------------- + + def get_valeur(self): + """ + Retourne la valeur de l'objet PARAMETRE cad son texte + """ + if self.object.valeur is None: return '' + else: return self.object.valeur + + def get_nom(self): + """ + Retourne le nom du paramètre + """ + return self.object.nom + + def set_valeur(self,new_valeur): + """ + Affecte valeur à l'objet PARAMETRE + """ + self.object.set_valeur(new_valeur) + + def set_nom(self,new_nom): + """ + Renomme le paramètre + """ + self.object.set_nom(new_nom) + #self.object.set_attribut('nom',new_nom) + + def get_fr(self): + """ + Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS + """ + return "Définition d'un paramètre" + +import Extensions.parametre +treeitem =PARAMTreeItem +objet = Extensions.parametre.PARAMETRE diff --git a/InterfaceTK/compoparameval.py b/InterfaceTK/compoparameval.py new file mode 100644 index 00000000..009473d4 --- /dev/null +++ b/InterfaceTK/compoparameval.py @@ -0,0 +1,311 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" +Ce module contient les classes permettant de définir les objets graphiques +représentant un objet de type PARAMETRE_EVAL, cad le panneau et l'item de l'arbre +d'EFICAS +""" + +# import modules Python +from Tkinter import * +import Pmw +import string + +# import modules EFICAS +import widgets +from Editeur import Objecttreeitem +import panels +import fontes + + +Fonte_PARAMETRE = fontes.standard_italique +Fonte_TITRE = fontes.standard_gras_souligne + + +class PARAM_EVALPanel(panels.OngletPanel): + """ + Classe servant à construire le panneau associé à un paramètre. + C'est au moyen de ce panneau que l'utilisateur peut accéder + aux nom et valeur du paramètre en vue éventuellement de les + modifier. + """ + + def init(self): + """ + Initialise les frame des panneaux contextuels relatifs à un PARAMETRE + """ + nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) + nb.pack(fill = 'both', expand = 1) + self.nb=nb + nb.add('Parametre', tab_text='Paramètre EVAL') + nb.add('Commande', tab_text='Nouvelle Commande') + nb.add('Commentaire',tab_text='Paramètre/Commentaire') + self.makeParametrePage(nb.page("Parametre")) + self.makeCommandePage(nb.page("Commande")) + self.makeParamCommentPage_for_etape(nb.page("Commentaire")) + nb.tab('Parametre').focus_set() + nb.setnaturalsize() + self.make_buttons() + + def makeParametrePage(self,page): + """ + Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE + """ + self.frame_valeur = Frame(page) + self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw') + # affichage du titre du panneau + self.titre = StringVar() + self.titre.set("PARAMETRE EVAL "+self.node.item.get_nom()) + Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n') + # création des labels et entries associés aux nom et valeur du paramètre + Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3) + self.entry_nom = Entry(self.frame_valeur) + Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5) + self.entry_val = Entry(self.frame_valeur) + # binding sur entry_nom + self.entry_nom.bind("",lambda e,s=self : s.verif_nom()) + self.entry_val.bind("",lambda e,s=self : s.verif_eval()) + self.entry_nom.bind("",lambda e,s=self : s.verif_nom()) + self.entry_val.bind("",lambda e,s=self : s.verif_eval()) + # affichage des entries + self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3) + self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5) + # affichage d'une phrase d'aide + aide = """ + Un retour de chariot dans une zone de saisie vous permet de vérifier si + la valeur que vous avez entrée est valide. + Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles + valeurs seront effectivement prises en compte + """ + Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n') + # affichage des nom et valeur du paramètre + self.display_valeur() + self.entry_nom.focus() + + def make_buttons(self): + """ + Crée les boutons du panneau + """ + #self.bouton_sup.place_forget() + #self.bouton_doc.place_forget() + self.bouton_sup.pack_forget() + self.bouton_doc.pack_forget() + #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14) + #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14) + self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur) + self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur) + self.bouton_val.bind("",lambda e,s=self : s.bouton_val.invoke()) + self.bouton_val.bind("",lambda e,s=self : s.bouton_val.invoke()) + #self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center') + #self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center') + #self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center') + self.bouton_val.pack(side='left',padx=5, pady=5) + self.bouton_ann.pack(side='left',padx=5, pady=5) + self.bouton_sup.pack(side='left',padx=5, pady=5) + + def change_valeur(self): + """ + Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE + """ + if self.parent.modified == 'n' : self.parent.init_modif() + new_nom = self.entry_nom.get() + new_val = self.entry_val.get() + #self.node.item.set_nom(new_nom) + #self.node.item.set_valeur(new_val) + #self.node.update() + #self.display_valeur() + # on essaie de stocker les noms et valeurs + test,erreur = self.node.item.save_parametre_eval(new_nom,new_val) + if test : + # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage + self.node.update() + self.display_valeur() + self.parent.appli.affiche_infos("Expression EVAL %s modifiée" %self.node.item.get_nom()) + else: + # la formule est incorrecte : on affiche les erreurs + widgets.showerror("Expression EVAL incorrecte",erreur) + self.parent.appli.affiche_infos("Expression EVAL %s non modifiée" %self.node.item.get_nom()) + + def display_valeur(self): + """ + Affiche dans self.widget_text la valeur de l'objet PARAMETRE + (annule d'éventuelles modifications faite par l'utilisateur) + """ + self.entry_nom.delete(0,END) + self.entry_val.delete(0,END) + self.titre.set('PARAMETRE '+self.node.item.get_nom()) + self.entry_nom.insert(END,self.node.item.get_nom()) + self.entry_val.insert(END,self.node.item.get_valeur()) + + def verif_nom(self): + """ + Lance la vérification du nom donné par l'utilisateur dans entry_nom + """ + nom = self.entry_nom.get() + test,erreur = self.node.item.verif_nom(nom) + if not test : + widgets.showerror("Nom invalide",erreur) + self.entry_nom.focus() + self.entry_nom.selection_range(0,END) + self.parent.appli.affiche_infos("Nom du paramètre refusé") + else: + self.parent.appli.affiche_infos("Nom du paramètre accepté") + + def verif_eval(self,event=None): + """ + Lance la vérification de l'expression EVAL présente dans entry_val + """ + exp_eval = self.entry_val.get() + test,erreur = self.node.item.verif_eval(exp_eval) + if not test: + widgets.showerror("Expression EVAL invalide",erreur) + self.entry_val.focus() + self.entry_val.selection_range(0,END) + self.parent.appli.affiche_infos("Expression EVAL refusée") + else: + self.parent.appli.affiche_infos("Expression EVAL acceptée") + +class PARAM_EVALTreeItem(Objecttreeitem.ObjectTreeItem): + """ + Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS + qui représente le PARAMETRE + """ + panel = PARAM_EVALPanel + + def init(self): + self.setfunction = self.set_valeur + +# --------------------------------------------------------------------------- +# API du PARAMETRE pour l'arbre +# --------------------------------------------------------------------------- + + def GetIconName(self): + """ + Retourne le nom de l'icône associée au noeud qui porte self, + dépendant de la validité de l'objet + NB : un PARAMETRE est toujours valide ... + """ + if self.isactif(): + if self.isvalid(): + return "ast-green-square" + else: + return "ast-red-square" + else: + return "ast-white-square" + + def GetLabelText(self): + """ Retourne 3 valeurs : + - le texte à afficher dans le noeud représentant l'item + - la fonte dans laquelle afficher ce texte + - la couleur du texte + """ + return 'EVAL',Fonte_PARAMETRE,None + + def GetText(self): + """ + Retourne le texte à afficher après le nom de la commande (ici après 'paramètre') + Ce texte est tronqué à 25 caractères + """ + texte = repr(self.object) + texte = string.split(texte,'\n')[0] + if len(texte) < 25 : + return texte + else : + return texte[0:24]+'...' + + def GetSubList(self): + """ + Retourne la liste des fils de self + """ + return [] + +# --------------------------------------------------------------------------- +# Méthodes permettant la modification et la lecture des attributs +# du paramètre = API graphique du PARAMETRE pour Panel et EFICAS +# --------------------------------------------------------------------------- + + def isvalid(self): + """ + Indique si l'objet pointé par self est valide + """ + return self.object.isvalid() + + def get_valeur(self): + """ + Retourne une chaîne représentant la valeur de l'objet PARAMETRE + cad de l'objet class_eval.EVAL + """ + return self.object.get_valeur() or '' + + def get_nom(self): + """ + Retourne le nom du paramètre + """ + return self.object.get_nom() + + def set_valeur(self,new_valeur): + """ + Affecte new_valeur à l'objet PARAMETRE_EVAL + """ + # on construit le texte de la nouvelle valeur + new_valeur = 'EVAL("""'+new_valeur+'""")' + # on affecte la nouvelle valeur à self.object + self.object.set_valeur(new_valeur) + + def set_nom(self,new_nom): + """ + Renomme le paramètre + """ + self.object.set_nom(new_nom) + + def get_fr(self): + """ + Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS + """ + return "Définition d'un paramètre de type EVAL" + + def verif_nom(self,nom): + """ + Lance la vérification de validité du nom passé en argument + """ + return self.object.verif_nom(nom = nom) + + def verif_eval(self,valeur): + """ + Lance la vérification de validité de l'expression EVAL passée en argument + """ + return self.object.verif_eval(exp_eval = valeur) + + def save_parametre_eval(self,new_nom,new_val): + """ + Vérifie si (new_nom,new_val) définit bien un EVAL licite : + - si oui, stocke ces paramètres comme nouveaux paramètres de l'EVAL courant et retourne 1 + - si non, laisse les paramètres anciens de EVAL inchangés et retourne 0 + """ + test,erreur = self.object.verif_parametre_eval(param=(new_nom,new_val)) + if test : + # la formule est bien correcte : on sauve les nouveaux paramètres + self.object.update(param=(new_nom,new_val)) + return test,erreur + +import Extensions.parametre_eval +treeitem =PARAM_EVALTreeItem +objet = Extensions.parametre_eval.PARAMETRE_EVAL diff --git a/InterfaceTK/compoproc.py b/InterfaceTK/compoproc.py new file mode 100644 index 00000000..3d3e906e --- /dev/null +++ b/InterfaceTK/compoproc.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +from Tkinter import * +import Pmw + +from Editeur import Objecttreeitem +import panels +import fontes +import compooper + +class PROCPanel(panels.OngletPanel): + def init(self): + nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) + self.nb=nb + nb.pack(fill = 'both', expand = 1) + nb.add('Mocles', tab_text='Ajouter mots-clés') + nb.add('Commande', tab_text='Nouvelle Commande') + nb.add('Commentaire',tab_text='Paramètre/Commentaire') + panneau=Pmw.PanedWidget(nb.page("Mocles"), + orient='horizontal') + panneau.add('left',min=0.4,max=0.6,size=0.5) + panneau.add('right',min=0.4,max=0.6,size=0.5) + panneau.pack(expand=1,fill='both') + self.makeCommandePage(nb.page("Commande")) + self.makeMoclesPage(panneau.pane('left')) + self.makeReglesPage(panneau.pane('right')) + self.makeParamCommentPage_for_etape(nb.page("Commentaire")) + nb.setnaturalsize() + self.enlevebind() + self.creebind() + self.affiche() + +class ProcEtapeTreeItem(compooper.EtapeTreeItem): + panel = PROCPanel + +import Accas +treeitem = ProcEtapeTreeItem +objet = Accas.PROC_ETAPE + diff --git a/InterfaceTK/composimp.py b/InterfaceTK/composimp.py new file mode 100644 index 00000000..d278c166 --- /dev/null +++ b/InterfaceTK/composimp.py @@ -0,0 +1,652 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import prefs +import panels +import images +from widgets import ListeChoix +from widgets import FenetreDeSelection + +from Noyau.N_CR import justify_text +from Editeur.utils import substract_list + + +class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): + from newsimppanel import newSIMPPanel + panel = newSIMPPanel + + def init(self) : + self.expandable = 0 + self.affect_panel() + + + def affect_panel(self): + """ + Cette méthode attribue le panel à l'objet pointé par self en fonction de la + nature de la valeur demandée pour cet objet + """ + from uniquepanel import UNIQUE_Panel + from plusieurspanel import PLUSIEURS_Panel + + #print "affect_panel : ",self.nom,self.is_list(),self.has_into() + # Attention l ordre des if est important + + if self.wait_shell(): + # l'objet attend un shell + from shellpanel import SHELLPanel + self.panel = SHELLPanel + elif self.has_into(): + # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs + if self.is_list() : + from plusieursintopanel import PLUSIEURS_INTO_Panel + self.panel = PLUSIEURS_INTO_Panel + else: + from uniqueintopanel import UNIQUE_INTO_Panel + self.panel = UNIQUE_INTO_Panel + else: + # l'objet prend une ou des valeurs à priori quelconques + if self.is_list() : + # on attend une liste de valeurs mais de quel type ? + if self.wait_assd(): + # on attend une liste de SD + from plusieursassdpanel import PLUSIEURS_ASSD_Panel + self.panel = PLUSIEURS_ASSD_Panel + else: + # on attend une liste de valeurs de types debase (entiers, réels,...) + #from plusieursbasepanel import PLUSIEURS_BASE_OR_UNELISTE_Panel + #self.panel = PLUSIEURS_BASE_OR_UNELISTE_Panel + from plusieursbasepanel import PLUSIEURS_BASE_Panel + self.panel = PLUSIEURS_BASE_Panel + else: + # on n'attend qu'une seule valeur mais de quel type ? + if self.wait_co(): + # on attend une SD ou un objet de la classe CO (qui n'existe pas encore) + from uniquesdcopanel import UNIQUE_SDCO_Panel + self.panel = UNIQUE_SDCO_Panel + elif self.wait_assd(): + # on attend une SD + from uniqueassdpanel import UNIQUE_ASSD_Panel + from uniqueassdpanel import UNIQUE_ASSD_Panel_Reel + if 'R' in self.GetType(): + self.panel = UNIQUE_ASSD_Panel_Reel + else : + self.panel = UNIQUE_ASSD_Panel + else: + # on attend une valeur d'un type de base (entier,réel,...) + if self.wait_complex(): + # on attend un complexe + from uniquecomppanel import UNIQUE_COMP_Panel + self.panel = UNIQUE_COMP_Panel + else: + # on attend un entier, un réel ou une string + from uniquebasepanel import UNIQUE_BASE_Panel + self.panel = UNIQUE_BASE_Panel + # cas particulier des fonctions + genea = self.get_genealogie() + if "VALE" in genea or "VALE_C" in genea: + if "DEFI_FONCTION" in genea : + from fonctionpanel import FONCTION_Panel + self.panel=FONCTION_Panel + #--------------------------------------------------------- + # PN ajout pour lancement de Salome + #--------------------------------------------------------- + if self.appli.salome: + import panelsSalome + + self.select_noeud_maille=0 + self.clef_fonction="SALOME" + for i in range(0,len( genea )) : + self.clef_fonction=self.clef_fonction+"_"+ genea[i] + #if genea[i] == "GROUP_NO" or genea[i] == "GROUP_MA": + if "GROUP_NO" in genea[len(genea)-1] or "GROUP_MA" in genea[len(genea)-1]: + self.select_noeud_maille=1 + + recherche=panelsSalome.dict_classes_salome[self.panel] + if hasattr(recherche,self.clef_fonction): + self.panel=recherche + if self.select_noeud_maille==1 : + self.panel=recherche + + + #----------------------------------------------- + # + # Methodes liees aux informations sur le Panel + # ou au mot-clef simple + # + #----------------------------------------------- + # is_list + # get_into a priori inutile --> commentee + # has_into + # wait_into a priori inutile --> commentee + # GetMinMax + # GetMultiplicite + # GetIntervalle + # GetListeValeurs + # get_liste_possible + + def is_list(self): + """ + Cette méthode indique si le mot cle simple attend une liste (valeur de retour 1) + ou s'il n'en attend pas (valeur de retour 0) + + Deux cas principaux peuvent se presenter : avec validateurs ou bien sans. + Dans le cas sans validateur, l'information est donnée par l'attribut max + de la definition du mot cle. + Dans le cas avec validateur, il faut combiner l'information précédente avec + celle issue de l'appel de la méthode is_list sur le validateur.On utilisera + l'operateur ET pour effectuer cette combinaison (AndVal). + """ + is_a_list=0 + min,max = self.GetMinMax() + assert (min <= max) + if max > 1 : + is_a_list=1 + # Dans le cas avec validateurs, pour que le mot cle soit considéré + # comme acceptant une liste, il faut que max soit supérieur a 1 + # ET que la méthode is_list du validateur retourne 1. Dans les autres cas + # on retournera 0 (n'attend pas de liste) + if self.definition.validators : + is_a_list= self.definition.validators.is_list() * is_a_list + return is_a_list + + #def get_into(self,liste_courante=None): + # """ + # Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose + # pas de liste de choix, la méthode retourne None. + # L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déjà + # effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix + # en en tenant compte. + # Cette méthode part du principe que la relation entre into du mot clé et les validateurs est + # une relation de type ET (AndVal). + # """ + # if not self.object.definition.validators : + # return self.object.definition.into + # else: + # return self.object.definition.validators.get_into(liste_courante,self.definition.into) + + def has_into(self): + """ + Cette méthode indique si le mot cle simple propose un choix (valeur de retour 1) + ou s'il n'en propose pas (valeur de retour 0) + + Deux cas principaux peuvent se presenter : avec validateurs ou bien sans. + Dans le cas sans validateur, l'information est donnée par l'attribut into + de la definition du mot cle. + Dans le cas avec validateurs, pour que le mot cle soit considéré + comme proposant un choix, il faut que into soit présent OU + que la méthode has_into du validateur retourne 1. Dans les autres cas + on retournera 0 (ne propose pas de choix) + """ + has_an_into=0 + if self.definition.into: + has_an_into=1 + elif self.definition.validators : + has_an_into= self.definition.validators.has_into() + return has_an_into + +# def wait_into(self): +# """ Méthode booléenne qui retourne 1 si l'objet pointé par self +# prend ses valeurs dans un ensemble discret (into), 0 sinon """ +# if self.object.definition.into != None : +# return 1 +# else: +# return 0 + + def GetMinMax(self): + """ Retourne les valeurs min et max de la définition de object """ + return self.object.get_min_max() + + def GetMultiplicite(self): + """ A préciser. + Retourne la multiplicité des valeurs affectées à l'objet + représenté par l'item. Pour le moment retourne invariablement 1. + """ + return 1 + + def GetIntervalle(self): + """ + Retourne le domaine de valeur attendu par l'objet représenté + par l'item. + """ + return self.object.getintervalle() + + def GetListeValeurs(self) : + """ Retourne la liste des valeurs de object """ + valeurs=self.object.get_liste_valeurs() + try : + if "R" in self.object.definition.type: + clef=self.object.GetNomConcept() + if self.appli.dict_reels.has_key(clef): + if type(valeurs) == types.TupleType: + valeurs_reelles=[] + for val in valeurs : + if self.appli.dict_reels[clef].has_key(val) : + valeurs_reelles.append(self.appli.dict_reels[clef][val]) + else : + valeurs_reelles.append(val) + else : + if self.appli.dict_reels[clef].has_key(valeurs): + valeurs_reelles=self.appli.dict_reels[clef][valeurs] + valeurs=valeurs_reelles + except : + pass + return valeurs + + def get_liste_possible(self,listeActuelle=[]): + if hasattr(self.definition.validators,'into'): + valeurspossibles = self.definition.validators.into + else: + valeurspossibles = self.get_definition().into + + #On ne garde que les items valides + listevalideitem=[] + for item in valeurspossibles: + encorevalide=self.valide_item(item) + if encorevalide : + listevalideitem.append(item) + + #on ne garde que les choix possibles qui passent le test de valide_liste_partielle + listevalideliste=[] + for item in listevalideitem: + encorevalide=self.valide_liste_partielle(item,listeActuelle) + if encorevalide : + listevalideliste.append(item) + return listevalideliste + + def get_liste_param_possible(self): + liste_param=[] + for param in self.object.jdc.params: + encorevalide=self.valide_item(param.valeur) + if encorevalide: + type_param=param.valeur.__class__.__name__ + for typ in self.definition.type: + if typ=='R': + liste_param.append(param) + if typ=='I' and type_param=='int': + liste_param.append(param) + if typ=='TXM' and type_param=='str': + liste_param.append(repr(param)) + return liste_param + + #-------------------------------------------------- + # + # Methodes liees a la validite des valeurs saisies + # + #--------------------------------------------------- + # valide_item + # valide_liste_partielle + # valide_liste_complete + # info_erreur_item + # info_erreur_liste + # IsInIntervalle + # isvalid + + def valide_item(self,item): + """ + La validation est réalisée directement par l'objet + """ + return self.object.valide_item(item) + + def valide_liste_partielle(self,item,listecourante): + #On protege la liste en entree en la copiant + valeur=listecourante[:] + valeur.append(item) + return self.object.valid_valeur_partielle(valeur) + + def valide_liste_complete (self,valeur): + return self.object.valid_valeur(valeur) + + def valide_val (self,valeur): + return self.object.valid_val(valeur) + + def info_erreur_item(self) : + commentaire="" + if self.definition.validators : + commentaire=self.definition.validators.info_erreur_item() + return commentaire + + def aide(self) : + commentaire="" + if self.definition.validators : + commentaire=self.definition.validators.aide() + return commentaire + + def info_erreur_liste(self) : + commentaire="" + if self.definition.validators : + commentaire=self.definition.validators.info_erreur_liste() + return commentaire + + def IsInIntervalle(self,valeur): + """ + Retourne 1 si la valeur est dans l'intervalle permis par + l'objet représenté par l'item. + """ + return self.valide_item(valeur) + + def isvalid(self): + valide=self.object.isvalid() + return valide + + #-------------------------------------------------- + # + # Autres ... + # + #--------------------------------------------------- + # SetText a priori inutilisee --> commentee + # GetIconName + # GetText + # getval a priori inutilisee --> commentee + # set_valeur_co + # get_sd_avant_du_bon_type + # verif a priori inutilisee --> commentee + # delete_valeur_co + + #def SetText(self, text): + # try: + # value = eval(text) + # self.object.setval(value) + # except: + # pass + + def GetIconName(self): + if self.isvalid(): + return "ast-green-ball" + elif self.object.isoblig(): + return "ast-red-ball" + else: + return "ast-yel-ball" + + def GetText(self): + """ + Classe SIMPTreeItem + Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet + pointé par self + """ + text= self.object.GetText() + return text + + #def getval(self): + # return self.object.getval() + + def set_valeur_co(self,nom_co): + """ + Affecte au MCS pointé par self l'objet de type CO et de nom nom_co + """ + ret = self.object.set_valeur_co(nom_co) + #print "set_valeur_co",ret + return ret + + def get_sd_avant_du_bon_type(self): + """ + Retourne la liste des noms des SD présentes avant l'étape qui contient + le MCS pointé par self et du type requis par ce MCS + """ + a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type) + return a + + def get_sd_avant_du_bon_type_pour_type_de_base(self): + a=self.object.jdc.get_sd_avant_du_bon_type_pour_type_de_base(self.object.etape,"LASSD") + return a + + + + #def verif(self): + # pass + + def delete_valeur_co(self,valeur=None): + """ + Supprime la valeur du mot cle (de type CO) + il faut propager la destruction aux autres etapes + """ + if not valeur : valeur=self.object.valeur + # XXX faut il vraiment appeler del_sdprod ??? + #self.object.etape.parent.del_sdprod(valeur) + self.object.etape.parent.delete_concept(valeur) + + #----------------------------------------------- + # + # Methodes liees au type de l objet attendu + # + #----------------------------------------------- + # wait_co + # wait_geom + # wait_complex + # wait_reel + # wait_shell + # wait_assd + # GetType + + def wait_co(self): + """ + Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un objet de type ASSD qui n'existe pas encore (type CO()), + 0 sinon + """ + return self.object.wait_co() + + def wait_geom(self): + """ + Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un objet GEOM, 0 sinon + """ + return self.object.wait_geom() + + def wait_complex(self): + """ Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un complexe, 0 sinon """ + if 'C' in self.object.definition.type: + return 1 + else: + return 0 + + def wait_reel(self): + """ Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un réel, 0 sinon """ + if 'R' in self.object.definition.type: + return 1 + else: + return 0 + + def wait_shell(self): + """ Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un shell, 0 sinon """ + if 'shell' in self.object.definition.type: + return 1 + else: + return 0 + + def wait_assd(self): + """Méthode booléenne qui retourne 1 si l'objet pointé par self + attend un objet de type ASSD ou dérivé, 0 sinon """ + return self.object.wait_assd() + + def wait_assd_or_type_base(self) : + boo=0 + if len(self.object.definition.type) > 1 : + if self.wait_reel() : + boo = 1 + if 'I' in self.object.definition.type : + boo = 1 + return boo + + + def GetType(self): + """ + Retourne le type de valeur attendu par l'objet représenté par l'item. + """ + return self.object.get_type() + + #----------------------------------------------------- + # + # Methodes liees a l evaluation de la valeur saisie + # + #----------------------------------------------------- + # eval_valeur + # eval_valeur_item + # is_CO + # traite_reel + + def eval_valeur(self,valeur): + """ Lance l'interprétation de 'valeur' (chaîne de caractères) comme valeur de self : + - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...) + - retourne 'valeur' (chaîne de caractères) sinon + """ + newvaleur=self.eval_val(valeur) + return newvaleur,1 + + def eval_valeur_BAK(self,valeur): + """ Lance l'interprétation de 'valeur' (chaîne de caractères) comme valeur + de l'objet pointé par self : + - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...) + - retourne 'valeur' (chaîne de caractères) sinon + - retourne None en cas d invalidite + - retourne invalide si 1 des objets du tuple l est + """ + validite=1 + if type(valeur) in (types.ListType,types.TupleType) : + valeurretour=[] + for item in valeur : + newvaleur,validiteitem=self.eval_valeur_item(item) + valeurretour.append(newvaleur) + if validiteitem == 0: + validite=0 + else : + valeurretour,validite= self.eval_valeur_item(valeur) + if validite == 0 : + valeurretour = None + return valeurretour,validite + + def eval_valeur_item(self,valeur): + """ Lance l'interprétation de 'valeur' qui doit ne pas etre un tuple + - va retourner la valeur de retour et la validite + selon le type de l objet attendu + - traite les reels et les parametres + """ + #print "eval_valeur_item",valeur + if valeur==None or valeur == "" : + return None,0 + validite=1 + if self.wait_reel(): + valeurinter = self.traite_reel(valeur) + if valeurinter != None : + valeurretour,validite= self.object.eval_valeur(valeurinter) + else: + valeurretour,validite= self.object.eval_valeur(valeur) + elif self.wait_geom(): + valeurretour,validite = valeur,1 + else : + valeurretour,validite= self.object.eval_valeur(valeur) + #print "eval_valeur_item",valeurretour,validite + + if validite == 0: + if type(valeur) == types.StringType and self.object.wait_TXM(): + essai_valeur="'" + valeur + "'" + valeurretour,validite= self.object.eval_valeur(essai_valeur) + + if hasattr(valeurretour,'__class__'): + #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'): + if valeurretour.__class__.__name__ in ('PARAMETRE',): + validite=1 + + #if self.wait_co(): + # CCAR : il ne faut pas essayer de creer un concept + # il faut simplement en chercher un existant ce qui a du etre fait par self.object.eval_valeur(valeur) + #try: + #valeurretour=Accas.CO(valeur) + #except: + #valeurretour=None + #validite=0 + # on est dans le cas où on a évalué et où on n'aurait pas du + if self.object.wait_TXM() : + if type(valeurretour) != types.StringType: + valeurretour=str(valeur) + validite=1 + return valeurretour,validite + + def is_CO(self,valeur=None): + """ + Indique si valeur est un concept produit de la macro + Cette méthode n'a de sens que pour un MCSIMP d'une MACRO + Si valeur vaut None on teste la valeur du mot cle + """ + # Pour savoir si un concept est un nouveau concept de macro + # on regarde s'il est présent dans l'attribut sdprods de l'étape + # ou si son nom de classe est CO. + # Il faut faire les 2 tests car une macro non valide peut etre + # dans un etat pas tres catholique avec des CO pas encore types + # et donc pas dans sdprods (resultat d'une exception dans type_sdprod) + if not valeur:valeur=self.object.valeur + if valeur in self.object.etape.sdprods:return 1 + if type(valeur) is not types.InstanceType:return 0 + if valeur.__class__.__name__ == 'CO':return 1 + return 0 + + def is_param(self,valeur) : + for param in self.jdc.params: + if (repr(param) == valeur): + return 1 + return 0 + + def traite_reel(self,valeur): + """ + Cette fonction a pour but de rajouter le '.' en fin de chaîne pour un réel + ou de détecter si on fait référence à un concept produit par DEFI_VALEUR + ou un EVAL ... + """ + valeur = string.strip(valeur) + liste_reels = self.get_sd_avant_du_bon_type() + if valeur in liste_reels: + return valeur + if len(valeur) >= 3 : + if valeur[0:4] == 'EVAL' : + # on a trouvé un EVAL --> on retourne directement la valeur + return valeur + if string.find(valeur,'.') == -1 : + # aucun '.' n'a été trouvé dans valeur --> on en rajoute un à la fin + if (self.is_param(valeur)): + return valeur + else: + if string.find(valeur,'e') != -1: + # Notation scientifique ? + try : + r=eval(valeur) + return valeur + except : + return None + else : + return valeur+'.' + else: + return valeur + + +import Accas +treeitem = SIMPTreeItem +objet = Accas.MCSIMP + diff --git a/InterfaceTK/definition_cata.py b/InterfaceTK/definition_cata.py new file mode 100644 index 00000000..156ea489 --- /dev/null +++ b/InterfaceTK/definition_cata.py @@ -0,0 +1,462 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import types + +# Modules Eficas +import Accas +from Noyau.N_CR import CR + +class CATALOGUE: + def __init__(self,modules_cata): + self.modules_cata = modules_cata # tuple de modules... + self.cr = CR() + self.state='undetermined' + self.entites_attributs = {} + self.entites_fils = [] + self.build_entites_attributs() + self.build_entites_fils() + + def build_entites_attributs(self): + pass + + def build_entites_fils(self): + niv_types = Accas.NIVEAU(nom="types",label="Liste des types") + niv_commandes = Accas.NIVEAU(nom="commandes",label="Liste des commandes") + self.entites_fils.append(make_commande_cata(niv_types,self)) + self.entites_fils.append(make_commande_cata(niv_commandes,self)) + for module_cata in self.modules_cata: + for e in dir(module_cata): + obj = getattr(module_cata,e) + if isCMD(obj): + self.entites_fils[1].register(make_commande_cata(obj,self.entites_fils[1])) + elif type(obj) == types.ClassType: + if issubclass(obj,Accas.ASSD): + self.entites_fils[0].register(TYPE_CATA(obj)) + + def init_modif(self): + self.state = 'modified' + + def report(self): + """ Classe CATALOGUE + Methode pour generation d un rapport de validite + """ + self.cr.purge() + self.cr.debut="DEBUT CR validation : " + self.cr.fin="FIN CR validation :" + self.state = 'modified' + self.isvalid(cr='oui') + for fils in self.entites_fils[1].entites : + self.cr.add(fils.report()) + return self.cr + + def isvalid(self,cr='non'): + if self.state != 'unchanged': + valid=1 + for fils in self.entites_fils[1].entites_fils: + if not fils.isvalid(): + valid=0 + break + self.valid = valid + self.state='unchanged' + return self.valid + +def make_commande_cata(objet,pere): + if isinstance(objet,Accas.OPER): + return OPER_CATA(objet,pere,objet.nom) + elif isinstance(objet,Accas.PROC): + return PROC_CATA(objet,pere,objet.nom) + elif isinstance(objet,Accas.MACRO): + return MACRO_CATA(objet,pere,objet.nom) + elif isinstance(objet,Accas.FORM): + return MACRO_CATA(objet,pere,objet.nom) + elif isinstance(objet,Accas.NIVEAU): + return NIVEAU_CATA(objet,pere,objet.nom) + else: + print "Erreur dans make_commande_cata : on cherche à évaluer un objet non référencé ",objet + +def make_mc_cata(objet,pere,nom=''): + if isinstance(objet,Accas.BLOC): + return BLOC_CATA(objet,pere,nom) + elif isinstance(objet,Accas.FACT): + return FACT_CATA(objet,pere,nom) + elif isinstance(objet,Accas.SIMP): + return SIMP_CATA(objet,pere,nom) + else: + print "Erreur dans make_mc_cata : on cherche à évaluer un objet non référencé ",objet + +class TYPE_CATA: + def __init__(self,objet): + self.objet = objet + self.nom = objet.__name__ + + def isvalid(self,cr='non'): + return 1 + + def get_valeur_attribut(self,nom_attr): + if nom_attr == 'nom':return self.nom + return None + +class OBJET_CATA: + attributs=[] + attributs_defauts={} + def __init__(self,objet,pere,nom): + self.objet = objet + self.nom = nom + self.pere = pere + self.cr = CR() + self.state='undetermined' + self.entites_fils = [] + self.entites_attributs = {} + self.build_entites_attributs() + self.build_entites_fils() + + def __str__(self): + s='' + s=self.__class__.__name__+' : '+self.nom + return s + + def build_entites_attributs(self): + for attribut in self.attributs: + if hasattr(self.objet,attribut): + self.entites_attributs[attribut]=ATTR_CATA(attribut,getattr(self.objet,attribut)) + else: + if self.attributs_defauts.has_key(attribut): + self.entites_attributs[attribut]=ATTR_CATA(attribut,self.attributs_defauts[attribut]) + else: + self.entites_attributs[attribut]=ATTR_CATA(attribut,None) + + def build_entites_fils(self): + for k,v in self.objet.entites.items(): + self.entites_fils.append(make_mc_cata(v,self,nom=k)) + + def get_valeur_attribut(self,nom_attr): + if nom_attr in self.entites_attributs.keys(): + return self.entites_attributs[nom_attr].valeur + elif nom_attr in self.attributs_defauts.keys(): + return self.attributs_defauts[nom_attr] + elif nom_attr == 'domaine_validité': + if self.entites_attributs['into'].valeur != None : + return 'discret' + else: + return 'continu' + + def isvalid(self,cr='non'): + if self.state =='unchanged': + return self.valid + else: + valid = 1 + if hasattr(self,'valid'): + old_valid = self.valid + else: + old_valid = None + # on teste self lui-meme + if self.nom == '' or self.nom == None : valid=0 + # on teste les attributs + for attribut in self.entites_attributs.values(): + if not attribut.isvalid() : valid =0 + break + # on teste les fils + for fils in self.entites_fils: + if not fils.isvalid(): valid = 0 + break + self.valid = valid + self.state = 'unchanged' + if old_valid: + if old_valid != self.valid : self.init_modif_up() + return self.valid + + def init_modif_up(self): + self.pere.state='modified' + + def report(self): + self.cr.purge() + self.cr.debut="Debut "+self.__class__.__name__+' : '+self.nom + self.cr.fin = "Fin "+self.__class__.__name__+' : '+self.nom + self.isvalid(cr='oui') + for attribut in self.entites_attributs.values(): + self.cr.add(attribut.report()) + for fils in self.entites_fils : + self.cr.add(fils.report()) + return self.cr + + def set_valeur_attribut(self,nom_attr,valeur): + """ + Affecte la valeur 'valeur' à l'attribut de nom 'nom-attr' + """ + # il faudra être prudent sur les changements de nom : interdire de changer + # le nom d'un mot-clé qui serait utilisé dans une règle ??? + self.entites_attributs[nom_attr].valeur = valeur + + def addentite(self,name,pos): + """ + Permet d'ajouter un nouveau fils a self + """ + self.init_modif() + if name == 'new_simp': + objet = Accas.SIMP(typ=('bidon',)) + objet_cata = make_mc_cata(objet,self) + self.entites_fils.insert(pos,objet_cata) + return objet_cata + + def init_modif(self): + self.state = 'modified' + if hasattr(self,'pere'): + self.pere.init_modif() + + def verif_nom(self,cr='non'): + """ + Méthode appelée par EFICAS et ACCAS + Booléenne : retourne 1 si l'attribut nom est valide, 0 sinon + """ + if self.entites_attributs['nom'].valeur == '': + if cr == 'oui' : self.cr.fatal("L'objet de type %s n'est pas nommé" %self.__class__.__name__) + return 0 + return 1 + + def verif_defaut(self,cr='non'): + """ + Méthode de vérification de validité du défaut + """ + defaut = self.get_valeur_attribut('defaut') + if self.get_valeur_attribut('domaine_validite') == 'discret' : + if defaut not in self.get_valeur_attribut('into'): + if cr == 'oui' : self.cr.fatal("La valeur %s n'est pas autorisée" %str(defaut)) + return 0 + return 1 + else: + if defaut == None : return 1 + typ = self.get_valeur_attribut('type') + # on attend un TXM ? + if 'TXM' in typ : + if type(defaut) == types.StringType : return 1 + val_min = self.get_valeur_attribut('val_min') + val_max = self.get_valeur_attribut('val_max') + # on attend un reel ? + if 'R' in typ : + if type(defaut) == types.StringType: + try : + nb = string.atof(defaut) + except: + nb=None + else: + nb = defaut + if nb != None : + test = 1 + if val_min != '**' : test = (nb >= val_min) + if val_max != '**' : test = test*(nb <= val_max) + if test : return 1 + # on attend un entier ? + if 'I' in typ : + if type(defaut)==types.StringType: + try: + nb = string.atoi(defaut) + except: + pass + else: + nb = defaut + if nb != None : + test = 1 + if val_min != '**' : test = (nb >= val_min) + if val_max != '**' : test = test*(nb <= val_max) + if test : return 1 + # si on passe par là, c'est que l'on n'a pas su évaluer defaut + if cr == 'oui' : self.cr.fatal("La valeur %s n'est pas une valeur permise" %str(defaut)) + return 0 + + def verif_val_min(self,cr='non'): + """ + Méthode de vérification de val_min. + Booléenne : retourne 1 si val_min est valide, 0 sinon + """ + val_min = self.get_valeur_attribut('val_min') + if not val_min : + if cr == 'oui' : self.cr.fatal('val_min ne peut valoir None') + return 0 + if val_min == '**': return 1 + # val_min doit à ce stade être : + # - soit un entier ou un réel + # - soit une chaîne de caractères représentant un entier ou un réel (provient d'EFICAS) + if type(val_min) == types.StringType : + try : + val_min = string.atoi(val_min) + except: + try: + val_min = string.atof(val_min) + except: + if cr == 'oui' : self.cr.fatal("%s n'est ni un entier ni un réel" %str(val_min)) + return 0 + # A ce stade, val_min doit être un entier ou un réel : on vérifie ... + if type(val_min) not in (types.IntType,types.FloatType) : + if cr == 'oui' : self.cr.fatal("%s n'est pas d'un type autorisé" %str(val_min)) + return 0 + # A ce stade valeur est un entier ou un réel : on peut comparer à val_max + val_max = self.get_valeur_attribut('val_max') + if val_max == '**' or val_min < val_max : return 1 + # erreur : val_min est supérieur à val_max !!! + if cr == 'oui' : self.cr.fatal("%s n'est pas inférieur à %s" %(str(val_min),str(val_max))) + return 0 + + def verif_val_max(self,cr='non'): + """ + Méthode de vérification de val_max. + Booléenne : retourne 1 si val_max est valide, 0 sinon + """ + val_max = self.get_valeur_attribut('val_max') + if not val_max : + if cr == 'oui' : self.cr.fatal('val_max ne peut valoir None') + return 0 + if val_max == '**': return 1 + # val_max doit à ce stade être : + # - soit un entier ou un réel + # - soit une chaîne de caractères représentant un entier ou un réel (provient d'EFICAS) + if type(val_max) == types.StringType : + try : + val_max = string.atoi(val_max) + except: + try: + val_max = string.atof(val_max) + except: + if cr == 'oui' : self.cr.fatal("%s n'est ni un entier ni un réel" %str(val_max)) + return 0 + # A ce stade, val_max doit être un entier ou un réel : on vérifie ... + if type(val_max) not in (types.IntType,types.FloatType) : + if cr == 'oui' : self.cr.fatal("%s n'est pas d'un type autorisé" %str(val_max)) + return 0 + # A ce stade valeur est un entier ou un réel : on peut comparer à val_max + val_min = self.get_valeur_attribut('val_min') + if val_min == '**' or val_min < val_max : return 1 + # erreur : val_min est supérieur à val_max !!! + if cr == 'oui' : self.cr.fatal("%s n'est pas supérieur à %s" %(str(val_max),str(val_min))) + return 0 + +class OPER_CATA(OBJET_CATA): + attributs = ['ang','docu','fr','niveau','nom','op','op_init','reentrant','regles','repetable','sd_prod'] + +class PROC_CATA(OBJET_CATA): + attributs = ['ang','docu','fr','niveau','nom','op','op_init','regles','repetable'] + +class MACRO_CATA(OBJET_CATA): + attributs = ['ang','docu','fr','niveau','nom','op','op_init','reentrant','regles','repetable','sd_prod'] + +class BLOC_CATA(OBJET_CATA): + attributs = ['ang','condition','docu','fr','nom','regles'] + +class FACT_CATA(OBJET_CATA): + attributs=['ang','defaut','docu','fr','max','min','nom','regles','statut'] + +class SIMP_CATA(OBJET_CATA): + attributs=['ang','defaut','docu','fr','homo','into','max','min','nom','position','statut','type','val_min','val_max'] + attributs_defauts={'ang':'','defaut':None,'fr':'','homo':1,'into':None,'max':1,'min':1,'nom' : '','position':'local', + 'regles':None,'statut':'f','type':None,'val_min':'**','val_max':'**','docu':''} + + def build_entites_fils(self): + pass + + def isvalid(self,cr='non'): + """ + Mde appelpar l'externe (EFICAS et ACCAS). + Boolne : retourne 1 si l'objet est valide, 0 sinon + """ + if self.state == 'unchanged': + return self.valid + else: + valid = 1 + valid = valid*self.verif_nom(cr=cr) + valid = valid*self.verif_defaut(cr=cr) + valid = valid*self.verif_val_min(cr=cr)*self.verif_val_max(cr=cr) + if hasattr(self,'valid'): + old_valid = self.valid + else: + old_valid = None + self.valid = valid + self.state='unchanged' + if old_valid : + if old_valid != self.valid : self.init_modif_up() + return self.valid + +class NIVEAU_CATA(OBJET_CATA): + def __init__(self,objet,pere,nom): + self.pere = pere + self.nom = nom + self.state = 'undetermined' + self.cr = CR() + self.objet = objet + self.entites_fils=[] + self.entites_attributs = {} + + def register(self,fils): + """ + Enregistre la commande 굡pe : + - si editmode = 0 : on est en mode relecture d'un fichier de commandes + auquel cas on ajoute etape ࡬a fin de la liste self.etapes + - si editmode = 1 : on est en mode ajout d'굡pe depuis eficas auquel cas + cette mode ne fait rien, c'est addentité enregistre etape ࡬a bonne place + dans self.etapes + """ + self.entites_fils.append(fils) + + def unregister(self,etape): + self.entites_fils.remove(etape) + + def isvalid(self,cr='non'): + """ Mode boolne qui retourne 0 si le niveau est invalide, 1 sinon """ + if self.state == 'unchanged': + return self.valid + else: + valid = 1 + if len(self.entites_fils) == 0: + #valid = self.Accas.valide_vide + valid = 1 + else: + for commande in self.entites_fils : + if hasattr(commande,'isvalid'): + if not commande.isvalid() : + valid = 0 + break + else: + print str(commande)," n'a pas de methode isvalid" + if hasattr(self,'valid'): + old_valid = self.valid + else: + old_valid = None + self.valid = valid + self.state='unchanged' + if old_valid: + if old_valid != self.valid : self.init_modif_up() + return self.valid + + +class ATTR_CATA(OBJET_CATA): + def __init__(self,nom,valeur=None): + self.nom = nom + self.valeur = valeur + self.cr = CR() + self.state='undetermined' + self.entites_attributs={} + self.entites_fils=() + + def isvalid(self,cr='non'): + return 1 + +def isCMD(cmd): + return isinstance(cmd,Accas.OPER) or isinstance(cmd,Accas.PROC) or isinstance(cmd,Accas.MACRO) or isinstance(cmd,Accas.FORM) + diff --git a/InterfaceTK/eficas.py b/InterfaceTK/eficas.py new file mode 100644 index 00000000..caf47fb8 --- /dev/null +++ b/InterfaceTK/eficas.py @@ -0,0 +1,143 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module contient la classe EFICAS qui est l'application + proprement dite. Elle est dérivée de la classe APPLI +""" +# Modules Python +import string +from Tkinter import Label +import Pmw +import traceback + +# Modules Eficas +from widgets import showerror +from widgets import askopenfilename +import patches +import appli +from widgets import Fenetre + +class EFICAS(appli.APPLI): + + try: + from prefs import appli_composants + except: + appli_composants=['readercata','bureau','browser','options'] + + def get_texte_infos(self): + texte=appli.APPLI.get_texte_infos(self) + texte = texte + 'Catalogue utilisé : %s\n' % self.bureau.fic_cata + return texte + + def exitEFICAS(self): + self.bureau.exitEFICAS() + + def getBureau(self): + return self.bureau + + def browse(self,result): + if result == 'Browse': + self.ulfile = askopenfilename(parent=self.dialog.component('hull'),title="Choix fichier :") + self._ulfile.setentry(self.ulfile) + elif result == 'OK': + self.ulfile = self._ulfile.get() + # On utilise le convertisseur défini par format_fichier + source=self.get_source(self.ulfile) + if source: + # On a réussi à convertir le fichier self.ulfile + self.dialog.deactivate(result) + self.text=source + else: + # Une erreur a été rencontrée + self.text='' + elif result == 'Cancel': + self._ulfile.setentry('') + self.dialog.deactivate(result) + self.ulfile = None + self.text="" + + def get_file(self,unite=None,fic_origine = ''): + """ + Retourne le nom du fichier correspondant a l unite logique unite (entier) + """ + if unite : + titre = "Choix unite %d " %unite + else: + titre = "Choix d'un fichier de poursuite" + self.dialog=Pmw.Dialog(self.top, + title = titre, + buttons = ('OK', 'Browse','Cancel'), + defaultbutton='OK', + command=self.browse, + ) + self.dialog.withdraw() + if unite : + texte = "Le fichier %s contient une commande INCLUDE \n" % fic_origine + texte = texte+'Donnez le nom du fichier correspondant\n à l unité logique %d' % unite + else: + texte="Le fichier %s contient une commande %s\n" %(fic_origine,'POURSUITE') + texte = texte+'Donnez le nom du fichier dont vous \n voulez faire une poursuite' + if self.test == 1: raise Exception("Erreur: "+texte) + w = Label(self.dialog.interior(), + text = texte) + w.pack(padx = 10, pady = 10) + if unite != None : + labeltexte = 'Fichier pour unite %d :' % unite + else: + labeltexte = 'Fichier à poursuivre :' + self._ulfile=Pmw.EntryField(self.dialog.interior(), + labelpos = 'w', + label_text = labeltexte, + ) + self._ulfile.pack(fill='x', expand=1, padx=10, pady=5) + self._ulfile.component('entry').focus_set() + self.dialog.activate(geometry='centerscreenalways') + return self.ulfile,self.text + + def get_source(self,file): + import convert + format=self.format_fichier.get() + # Il faut convertir le contenu du fichier en fonction du format + if convert.plugins.has_key(format): + # Le convertisseur existe on l'utilise + p=convert.plugins[format]() + p.readfile(file) + text=p.convert('execnoparseur') + if not p.cr.estvide(): + self.affiche_infos("Erreur à la conversion") + Fenetre(self, + titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier", + texte = str(p.cr)).wait() + return text + return text + else: + # Il n'existe pas c'est une erreur + self.affiche_infos("Type de fichier non reconnu") + showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier") + return None + + def affiche_texte(self,entete,texte): + """Cette methode ouvre une fenetre modale dans laquelle on affiche un texte + """ + self.affiche_infos(entete) + f=Fenetre(self, titre=entete, texte = texte) + f.wait() + diff --git a/InterfaceTK/eficas_go.py b/InterfaceTK/eficas_go.py new file mode 100644 index 00000000..e6b00c5c --- /dev/null +++ b/InterfaceTK/eficas_go.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module permet de lancer l'application EFICAS en affichant + un ecran Splash pour faire patienter l'utilisateur +""" +# Modules Python +import sys +import Tkinter + +# Modules Eficas +import prefs +if hasattr(prefs,'encoding'): + # Hack pour changer le codage par defaut des strings + import sys + reload(sys) + sys.setdefaultencoding(prefs.encoding) + del sys.setdefaultencoding + # Fin hack + +import styles +from Editeur import import_code +import splash +from Editeur import session + +def lance_eficas(code=None,fichier=None): + """ + Lance l'appli EFICAS + """ + # Analyse des arguments de la ligne de commande + if code !=None : prefs.code=code + if code !=None : + sys.argv.append("-k") + sys.argv.append(code) + options=session.parse(sys.argv) + code=options.code + + root = Tkinter.Tk() + splash.init_splash(root,code=code,titre="Lancement d'EFICAS pour %s" %code) + splash._splash.configure(text="Chargement d'EFICAS en cours.\n Veuillez patienter ...") + import eficas + eficas.EFICAS(root,code=code,ihm="TK") + + root.mainloop() + diff --git a/InterfaceTK/eficas_test.py b/InterfaceTK/eficas_test.py new file mode 100644 index 00000000..2a5230cf --- /dev/null +++ b/InterfaceTK/eficas_test.py @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module permet de lancer l'application EFICAS en affichant + un ecran Splash pour faire patentier l'utilisateur +""" +# Modules Python +import sys +import Tkinter + +# Modules Eficas +from Editeur import import_code +from Editeur import session + +def lance_eficas(code,fichier=None): + """ + Lance l'appli EFICAS + """ + options=session.parse(sys.argv) + root = Tkinter.Tk() + import eficas + if fichier : + a=eficas.EFICAS(root,code=code,fichier = fichier,test=1) + bureau=a.getBureau() + else: + eficas.EFICAS(root,code=code) + + print bureau.JDC.report() + bureau.closeJDC() + +def duplique_fichier(code,fichier=None,root=None): + print code + print fichier + if root == None : + root = Tkinter.Tk() + import eficas + import convert + import generator + import Editeur.utils + import string + + if fichier != None : + options=session.parse(sys.argv+[fichier]) + else : + options=session.parse(sys.argv) + + appli=eficas.EFICAS(root,code=code,fichier = fichier,test=1) + format='homard' + if convert.plugins.has_key(format): + p=convert.plugins[format]() + p.readfile(fichier) + text=p.convert('exec',appli) + print text + text2=convertir(text) + print text2 + cata=appli.readercata.cata + J=cata[0].JdC(procedure=text2,cata=cata) + J.analyse() + fileName=fichier+"_init" + if generator.plugins.has_key(format): + g=generator.plugins[format]() + jdc_formate=g.gener(J,format='beautifie') + jdc_fini = string.replace(jdc_formate,'\r\n','\n') + utils.save_in_file(fileName+".comm",jdc_fini,None) + +def convertir(texte): + import re + dict_change={"FICHIER_MED_MAILLAGE_N=":"FICHIER_MED_MAILLAGE_NP1","NOM_MED_MAILLAGE_N=":"NOM_MED_MAILLAGE_NP1"} + for mot in dict_change.keys(): + if( re.search(mot,texte)): + indicenouveau=re.search(mot,texte).end() + indicefinnouveau= texte.find(",",indicenouveau) + avant=dict_change[mot] + if( re.search(avant,texte)): + indiceancien=re.search(avant,texte).end()+1 + indicefinancien= texte.find(",",indiceancien) + valeur=texte[indiceancien:indicefinancien] + texte=texte[0:indicenouveau]+valeur+texte[indicefinnouveau:] + liste_mot_clef_None=['CRIT_RAFF_ABS','CRIT_RAFF_REL','CRIT_RAFF_PE','CRIT_DERA_ABS','CRIT_DERA_REL','CRIT_DERA_PE','NITER','NOM_MED_MAILLAGE_NP1','FICHIER_MED_MAILLAGE_NP1'] + + for mot in liste_mot_clef_None: + if( re.search(mot,texte)): + indice=re.search(mot,texte).end()+1 + indicefin= texte.find(",",indice) + texte=texte[0:indice]+"None"+texte[indicefin:] + return texte + diff --git a/InterfaceTK/faq.py b/InterfaceTK/faq.py new file mode 100644 index 00000000..30764b53 --- /dev/null +++ b/InterfaceTK/faq.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module sert a afficher le texte du FAQ EFICAS + et à attendre l'acquittement par l'utilisateur +""" +# Modules Python +import os +import Pmw +from Tkinter import END + +# Modules Eficas +import prefs +import fontes + +class FAQ: + def __init__(self,parent): + self.parent=parent + self.Dialog = Pmw.Dialog(parent, + buttons=('Lu',), + title="FAQs et limitations d'EFICAS", + command = self.lu_FAQ) + txt = open(os.path.join(prefs.INSTALLDIR,'Editeur','faqs.txt'),'r').read() + Texte = Pmw.ScrolledText(self.Dialog.interior(), + text_font=fontes.standard) + Texte.insert(END,txt) + Texte.pack(expand=1,fill='both') + self.Dialog.activate(geometry = 'centerscreenalways') + + def lu_FAQ(self,event=None): + self.Dialog.destroy() + +def affiche(parent): + FAQ(parent) diff --git a/InterfaceTK/fenetre_mc_inconnus.py b/InterfaceTK/fenetre_mc_inconnus.py new file mode 100644 index 00000000..35b118ac --- /dev/null +++ b/InterfaceTK/fenetre_mc_inconnus.py @@ -0,0 +1,223 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" +""" +# Modules Python +from Tkinter import * +import copy + +# Modules Eficas +from centerwindow import centerwindow + +class fenetre_mc_inconnus : + """ + Cette classe sert à construire la fenêtre qui apparaît dans EFICAS + lorsque des mots-clés inconnus ont été trouvés dans le fichier de + commandes que l'on est en train de lire + """ + def __init__(self,l_mc): + self.l_mc = l_mc + self.fenetre = Toplevel() + self.fenetre.withdraw() + self.fenetre.geometry("400x400+0+0") + self.fenetre.title("Mots-clés inconnus dans le fichier de commandes") + self.init() + self.init_frames() + self.init_label() + self.init_liste_mc() + self.init_boutons() + centerwindow(self.fenetre) + self.fenetre.deiconify() + + def init(self) : + """ + Initialise les structures de données + """ + self.new_l_mc = [] + for mc in self.l_mc : + self.new_l_mc.append(copy.copy(mc)) + self.mc_courant = None + self.var_quit = IntVar(0) + self.entry_courante = None + + def init_frames(self): + """ + Création des 2 frames devant contenir le label et la liste des MC inconnus + """ + self.frame1 = Frame(self.fenetre) + self.frame2 = Frame(self.fenetre) + self.frame3 = Frame(self.fenetre) + self.frame1.place(relx=0,rely=0,relheight=0.2,relwidth=1) + self.frame2.place(relx=0,rely=0.2,relheight=0.6,relwidth=1) + self.frame3.place(relx=0,rely=0.8,relheight=0.2,relwidth=1) + + def init_label(self): + """ + Affichage du label dans la zone concernée + """ + txt = " Un ou plusieurs mots-clés inconnus ont été trouvés dans le fichier de commandes." + #txt = txt + "En cliquant sur leur nom, vous pourrez soit corriger l'orthographe soit supprimer ce mot-clé" + self.fenetre.update_idletasks() + Label(self.frame1, + text = txt, + wraplength = int(self.frame1.winfo_width()*0.8), + justify = 'center').place(relx=0.5,rely=0.5,anchor='center') + + + def init_liste_mc(self): + """ + Affiche les mots-clés à modifier ou supprimer + """ + i=0 + self.widgets=[] + for mc in self.l_mc : + # mc est une liste : + # mc contient comme premiers arguments l'étape et éventuellement les blocs, mcfact ... + # et contient comme 2 derniers éléments le nom du mot-clé et sa valeur + path_mc = self.get_path(mc[0:-2]) + nom_mc = mc[-2] + lab=Label(self.frame2,text = path_mc) + lab.grid(row=i,column=1,sticky=W) + e = Entry(self.frame2) + e.grid(row=i,column=0,sticky=W) + e.insert(END,nom_mc) + #e.bind("",lambda event,en=e,m=mc,s=self : s.select_mc(m,en)) + #e.bind("",lambda e,s=self : s.modifie_mc()) + e.configure(relief='flat',state='disabled') + self.widgets.append((e,lab)) + i=i+1 + + def init_boutons(self): + """ + Construit les boutons Modifier,Supprimer et Fermer + Les deux premiers sont inactifs tant qu'aucun mot-clé n'est sélectionné + """ + self.b_mod = Button(self.frame3, + text = "Modifier", + disabledforeground = 'grey35', + state='disabled', + command = self.modifie_mc) + self.b_sup = Button(self.frame3, + text = "Supprimer", + disabledforeground = 'grey35', + state='disabled', + command = self.supprime_mc) + self.b_quit = Button(self.frame3, + text = "Fermer", + command = self.quit) + #self.b_mod.place(relx=0.25,rely=0.5,anchor='center') + #self.b_sup.place(relx=0.50,rely=0.5,anchor='center') + #self.b_quit.place(relx=0.75,rely=0.5,anchor='center') + self.b_quit.place(relx=0.50,rely=0.5,anchor='center') + + def wait_new_list(self): + """ + Cette méthode rend cette toplevel bloquante. + Dès que la variable var_quit est modifiée, on continue l'exécution de cette + méthode (et on quitte) + """ + self.fenetre.wait_variable(self.var_quit) + self.fenetre.destroy() + return self.new_l_mc + + def get_path(self,l_o): + """ + Construit la chaîne de caractère contenant le chemin d'accès complet du mot-clé + """ + txt = '' + for o in l_o : + txt = txt + o.nom+'/' + # on enlève le dernier slash en trop + txt = txt[0:-1] + return txt + + def select_mc(self,mc,entry): + """ + Enregistre le mot-clé passé en argument comme mot-clé courant + Active les boutons Modifier et Supprimer + """ + self.desactive_entry() + self.mc_courant = mc + self.entry_courante = entry + self.active_boutons() + self.active_entry() + + def modifie_mc(self): + """ + Modifie le nom du mot-clé en prenant la nouvelle valeur lue dans entry_courante + """ + new_nom_mc = self.entry_courante.get() + index = self.l_mc.index(self.mc_courant) + new_mc = self.new_l_mc[index] + new_mc[-2] = new_nom_mc + objet_pere = self.mc_courant[-3] + + self.desactive_boutons() + self.desactive_entry() + + def supprime_mc(self): + """ + Supprime le mot-clé courant de la liste + """ + index = self.l_mc.index(self.mc_courant) + self.new_l_mc[index] = None + e,lab=self.widgets[index] + e.grid_remove() + lab.grid_remove() + self.desactive_boutons() + self.desactive_entry() + + def desactive_boutons(self): + """ + Désactive les boutons Modifier et Supprimer + """ + self.b_mod.configure(state='disabled') + self.b_sup.configure(state='disabled') + + def active_boutons(self): + """ + Active les boutons Modifier et Supprimer + """ + self.b_mod.configure(state='normal') + self.b_sup.configure(state='normal') + + def desactive_entry(self): + """ + Désactive l'entry courante si elle existe + """ + if self.entry_courante : + self.entry_courante.configure(state='disabled',relief='flat') + + def active_entry(self): + """ + Active l'entry courante si elle existe + """ + if self.entry_courante : + self.entry_courante.configure(state='normal',relief='sunken') + + def quit(self): + """ + Permet de fermer la fenêtre + """ + self.var_quit.set(1) + +if __name__ == '__main__': + fenetre_mc_inconnus(('toto','titi')) diff --git a/InterfaceTK/fonctionpanel.py b/InterfaceTK/fonctionpanel.py new file mode 100644 index 00000000..b17704d5 --- /dev/null +++ b/InterfaceTK/fonctionpanel.py @@ -0,0 +1,293 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import prefs +import panels +import images +from widgets import ListeChoix +from widgets import FenetreDeSelection +from widgets import askopenfilename +from widgets import showinfo + +from Noyau.N_CR import justify_text +from Editeur.utils import substract_list +from plusieursbasepanel import PLUSIEURS_BASE_Panel + + +class FONCTION_Panel(PLUSIEURS_BASE_Panel): + def makeValeurPage(self,page): + """ + Crée la page de saisie d'une liste de valeurs à priori quelconques, + cad qui ne sont pas à choisir dans une liste prédéfinie + """ + genea=self.node.item.get_genealogie() + if "VALE" in genea: + self.nb_valeurs=2 + if "VALE_C" in genea: + self.nb_valeurs=3 + # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste), + # et la liste des valeurs déjà affectées à l'objet courant + bulle_aide=self.get_bulle_aide() + objet_mc = self.node.item.get_definition() + aide = self.get_aide() + aide = justify_text(texte=aide) + min,max = self.node.item.GetMinMax() + l_valeurs = self.node.item.GetListeValeurs() + l2_valeurs=self.decoupeListeValeurs(l_valeurs) + + # création des frames globales + self.frame1 = Frame(page,relief='groove',bd=2) + self.frame2 = Frame(page) + self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85) + self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15) + self.frame_right = Frame(self.frame1) + self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.) + + # création des frames internes + self.frame_valeurs = Frame(self.frame1) + self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95) + self.frame_boutons_fleches = Frame(self.frame_right) + self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5) + self.frame_choix = Frame(self.frame_right) + self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.5) + self.frame_aide = Frame(self.frame_right) + self.frame_aide.place(relx=0.1,rely=0.7,relwidth=0.8,relheight=0.3) + self.frame_boutons = Frame(self.frame2) + self.frame_boutons.place(relx=0.35,rely=0.,relwidth=0.5,relheight=1.) + for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs, + self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons): + fram.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + fram.bind("",self.parent.appli.efface_aide) + + # création des objets dans les frames + liste_commandes_valeurs = (("",self.selectValeur), + ("",self.deselectValeur), + ("",self.afficheValeurListe)) + self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l2_valeurs,liste_commandes = liste_commandes_valeurs, + titre="Valeur(s) actuelle(s)") + + # Création de l'entry ou de la liste des SD + self.label = Label(self.frame_choix,text="Valeur :") + self.make_entry(frame = self.frame_choix,command = self.add_double_valeur_plusieurs_base) + self.label.place(relx=0.05,rely=0.5) + + # Création d'un bouton "Importer ..." sur le panel. + bouton_valeurs_fichier = Button(self.frame_choix, + text="Importer ...", + command=self.select_in_file) + bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6) + self.ajout_valeurs = None + + # boutons Ajouter et Supprimer + self.bouton_add = Button(self.frame_boutons_fleches, + image = images.get_image('arrow_left'), + command = self.add_double_valeur_plusieurs_base) + self.bouton_sup = Button(self.frame_boutons_fleches, + image = images.get_image('arrow_right'), + command = self.sup_valeur_sans_into) + self.bouton_add.place(relx=0.3,rely=0.35) + self.bouton_sup.place(relx=0.3,rely=0.65) + # affichage de l'aide + self.frame_aide.update() + self.aide = Label(self.frame_aide, + text = aide, + justify='center', + anchor='center', + wraplength=int(self.frame_aide.winfo_width()*0.8)) + self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1) + self.Liste_valeurs.affiche_liste() + # boutons Accepter et Annuler + self.bouton_accepter = Button(self.frame_boutons, + text='Valider', + command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur_recolle(m,M)) + self.bouton_annuler = Button(self.frame_boutons, + text = 'Annuler', + command = self.annule_modifs_valeur) + for but in (self.bouton_accepter,self.bouton_annuler): + but.pack(side='left',padx=4) + + + def afficheValeurListe(self,name): + self.display_valeur(name) + + def decoupeListeValeurs(self,liste): + #decoupe la liste des valeurs en n ( les x puis les y) + nb=self.nb_valeurs + l_valeurs=[] + if (len(liste)%nb != 0): + message="La cardinalité n'est pas correcte, la dernière valeur est ignorée" + showinfo("Problème",message) + for i in range(len(liste)/nb) : + if (nb==2): + t=(liste[i*nb], liste[i*nb+1]) + else: + t=(liste[i*nb], liste[i*nb+1], liste[i*nb+2]) + l_valeurs.append(t) + return l_valeurs + + + def accepte_modifs_valeur_recolle(self,min,max): + l_valeurs=[] + l1_valeurs = self.Liste_valeurs.get_liste() + for val in l1_valeurs : + for item in val : + l_valeurs.append(item) + self.accepte_modifs_valeur(min,max,l_valeurs) + + + def add_double_valeur_plusieurs_base(self): + # on verifie qu'il s agit bien d un tuple + # on enleve les parentheses eventuelles + #doublevaleur_entree,validite,commentaire=self.get_valeur_double() + doublevaleur_entree= self.entry.get() + try: + if doublevaleur_entree[0]=='(' : + doublevaleur_entree=doublevaleur_entree[1:-1] + if doublevaleur_entree[-1]==')' : + doublevaleur_entree=doublevaleur_entree[0:-2] + val1=doublevaleur_entree.split(',')[0] + val2=doublevaleur_entree.split(',')[1] + saisie=(val1,val2) + if (self.nb_valeurs==3): + val3=doublevaleur_entree.split(',')[2] + saisie=(val1,val2,val3) + self.entry.delete(0,END) + except : + commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree` + if (self.nb_valeurs==3): + commentaire = "%s n est pas un tuple de la forme (x,y,z)" %`doublevaleur_entree` + self.parent.appli.affiche_infos(commentaire) + return + + # et seulement d un tuple + try: + val=doublevaleur_entree.split(',')[self.nb_valeurs] + commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree` + if (self.nb_valeurs==3): + commentaire = "%s n est pas un tuple de la forme (x,y,z)" %`doublevaleur_entree` + self.parent.appli.affiche_infos(commentaire) + self.parent.appli.affiche_infos(commentaire) + return + except : + # c est la le cas normal + pass + + # on verifie la validite des valeurs sont correctes + valeur,validite=self.node.item.eval_valeur(saisie) + if not validite : + commentaire = "impossible d'évaluer : %s " %`doublevaleur_entree` + self.parent.appli.affiche_infos(commentaire) + return + + # on verifie la validite de la liste + liste=[] + l1_valeurs = self.Liste_valeurs.get_liste() + for val in l1_valeurs : + for item in val : + liste.append(item) + validite_liste=self.node.item.valide_liste_partielle(valeur[0],liste) + if not validite_liste: + commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree` + self.parent.appli.affiche_infos(commentaire) + return + # liste a deja ete modifiee par l appel precedent a valide_liste_partielle + # et contient deja valeur[0] + validite_liste=self.node.item.valide_liste_partielle(valeur[1],liste) + if not validite_liste: + commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree` + self.parent.appli.affiche_infos(commentaire) + return + + # si une valeur est selectionnee on insere apres + # sinon on ajoute la valeur à la fin + if (self.Liste_valeurs.selection != None): + ligne=self.Liste_valeurs.cherche_selected_item() + if self.nb_valeurs==2: + l1_valeurs.insert(ligne,(valeur[0],valeur[1])) + else : + l1_valeurs.insert(ligne,(valeur[0],valeur[1],valeur[2])) + else : + if self.nb_valeurs==2: + l1_valeurs.append((valeur[0],valeur[1])) + else : + l1_valeurs.append((valeur[0],valeur[1],valeur[2])) + i = 0 + while i < self.nb_valeurs : + self.set_valeur_texte(saisie[i]) + i=i+1 + self.Liste_valeurs.put_liste(l1_valeurs) + self.Liste_valeurs.affiche_liste() + + + def display_valeur(self,val=None): + """ + Affiche la valeur passée en argument dans l'entry de saisie. + Par défaut affiche la valeur du mot-clé simple + Doit être redéfinie pour un pb avec les parametres dans un tuple + """ + if not val : + valeur = self.node.item.object.getval() + else: + valeur = val + if not valeur : return + + try: + affiche="(" + separe="" + for val in valeur: + affiche=affiche+separe+str(val) + separe="," + affiche=affiche+")" + self.entry.delete(0,END) + self.entry.insert(0,affiche) + except : + self.entry.delete(0,END) + +# Surcharge de select in file pour prendre en compte la saisie de tuple + def select_in_file(self): + """ Permet d'ouvrir un fichier choisi par l'utilisateur. """ + nom_fichier = askopenfilename(title="Choix fichier :") + + if not nom_fichier: + return + + try: + f = open(nom_fichier, "rb") + selection_texte = f.read() + f.close() + self.add_double_valeur_plusieurs_base = FenetreDeSelection(self, + self.node.item, + self.parent.appli, + titre="Sélection de valeurs", + texte=selection_texte, + cardinal = self.nb_valeurs) + except: + traceback.print_exc() + showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier) + diff --git a/InterfaceTK/fontes.py b/InterfaceTK/fontes.py new file mode 100644 index 00000000..8e158927 --- /dev/null +++ b/InterfaceTK/fontes.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +standard = ("Times",10) +standard_italique = ("Times",10,'italic') +standard_gras = ("Times",10,'bold') +standard_gras_souligne = ("Times",10,'bold','underline') + +canvas = ('times',8) +canvas_italique = ('times',8,'italic') +canvas_gras = ("Times",8,'bold') +canvas_gras_italique = ("Times",10,'bold','italic') + +standard12 = ("Times",12) +standard12_gras = ("Times",12,'bold') +standard12_gras_italique = ( "times",12,'bold','italic') + +standardcourier10 = ("Courier",10) + diff --git a/InterfaceTK/images.py b/InterfaceTK/images.py new file mode 100644 index 00000000..a6f0a74e --- /dev/null +++ b/InterfaceTK/images.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module joue le role de cache pour les images stockées + dans le repertoire ICONDIR +""" + +import os +import Tkinter + +if __name__ == '__main__': + # Programme de test + import sys + import images + root=Tkinter.Tk() + frame = Tkinter.Frame(root) + frame.pack(expand=1,fill='both') + + for name in ('About24','Save24'): + Tkinter.Label(frame, image=images.get_image(name)).pack(side=Tkinter.TOP) + + root.mainloop() + sys.exit() + +try: + import prefs + ICONDIR=prefs.ICONDIR +except: + # Par defaut on utilise le repertoire local icons + ICONDIR=os.path.join(os.path.abspath(os.path.dirname(__file__)),'/Editeur/icons') + + +dico_images={} + +def get_image(name): + if dico_images.has_key(name): + return dico_images[name] + else : + fic_image = os.path.join(ICONDIR,name) + if not os.path.isfile(fic_image): + file, ext = os.path.splitext(fic_image) + fic_image = file + '.gif' + image = Tkinter.PhotoImage(file=fic_image) + dico_images[name]=image + return image + +def update_cache(): + dico_images.clear() + diff --git a/InterfaceTK/jdcdisplay.py b/InterfaceTK/jdcdisplay.py new file mode 100644 index 00000000..fd0ac827 --- /dev/null +++ b/InterfaceTK/jdcdisplay.py @@ -0,0 +1,285 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module contient la classe JDCDISPLAY qui réalise l'affichage + du jeu de commandes sous la forme d'un arbre et de panneaux qui portent + les informations attachées au noeud de l'arbre sélectionné +""" +# Modules Python +import types,sys +import traceback +import Tkinter +import Pmw + +# Modules Eficas +import panels +from treeitemincanvas import TREEITEMINCANVAS +from widgets import showinfo,showerror + +class CONFIG: + isdeveloppeur='NON' + +class JDCDISPLAY: + """ + Cette classe ajoute à la class TREEITEMINCANVAS l'affichage des infos + attachées au noeud sélectionné dans un notebook + L'objet item associé au jdc est créé par la classe TREEITEMINCANVAS + """ + def __init__(self,jdc,nom_jdc,appli=None,parent=None): + self.jdc=jdc + self.nom_jdc=nom_jdc + self.fichier=None + self.panel_courant=None + + if not appli: + class Appli: + def __init__(self): + self.CONFIGURATION=CONFIG() + def affiche_infos(self,message): + print message + return + + def efface_aide(self,event): + return + + def affiche_aide(self,event,aide): + print aide + return + + appli=Appli() + self.appli=appli + + if not parent: + parent=Tkinter.Tk() + Pmw.initialise(parent) + self.parent=parent + self.node_selected = None + self.modified='n' + + self.pane=Pmw.PanedWidget(self.parent,orient='horizontal') + self.pane.add('treebrowser',min=0.4,size=0.5) + self.pane.add('selected',min=0.4) + self.pane.pack(expand=1,fill='both') + self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'), + self.appli,self.select_node,self.make_rmenu) + + def make_rmenu(self,node,event): + if hasattr(node.item,'rmenu_specs'): + rmenu = Tkinter.Menu(self.pane.pane('treebrowser'), tearoff=0) + #node.select() + self.cree_menu(rmenu,node.item.rmenu_specs,node) + rmenu.tk_popup(event.x_root,event.y_root) + + def cree_menu(self,menu,itemlist,node): + """ + Ajoute les items du tuple itemlist + dans le menu menu + """ + number_item=0 + radio=None + for item in itemlist: + number_item=number_item + 1 + if not item : + menu.add_separator() + else: + label,method=item + if type(method) == types.TupleType: + # On a un tuple => on cree une cascade + menu_cascade=Tkinter.Menu(menu) + menu.add_cascade(label=label,menu=menu_cascade) + self.cree_menu(menu_cascade,method,node) + elif method[0] == '&': + # On a une chaine avec & en tete => on cree un radiobouton + try: + command=getattr(node.item,method[1:]) + menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n)) + if radio == None:radio=number_item + except:pass + else: + try: + command=getattr(node.item,method) + menu.add_command(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n)) + except:pass + # Si au moins un radiobouton existe on invoke le premier + if radio:menu.invoke(radio) + + def select(self): + return + + def unselect(self): + return + + def select_node(self,node): + """ + Cette méthode est appelée à chaque fois qu'un noeud est sélectionné + dans l'arbre. + Elle permet l'affichage du panneau correspondant au noeud sélectionné + """ + if node is not self.node_selected : + #ATTENTION: il faut affecter l'attribut node_selected avant d'appeler + # create_panel pour eviter une recursion infinie entre create_panel, + # Emit, onValid, select_node + self.node_selected = node + self.create_panel(node) + elif self.panel_courant: + self.panel_courant.update_panel() + + def create_panel(self,node): + """ + Lance la génération du panneau contextuel de l'objet sélectionné + dans l'arbre + """ + if self.panel_courant: + # On detruit le panneau + self.panel_courant.destroy() + o=self.panel_courant + self.panel_courant=None + # Mettre à 1 pour verifier les cycles entre objets + # pour les panneaux + withCyclops=0 + if withCyclops: + from Misc import Cyclops + z = Cyclops.CycleFinder() + z.register(o) + del o + z.find_cycles() + z.show_stats() + z.show_cycles() + + if node is None: + self.panel_courant=None + return self.panel_courant + + if node.item.isactif(): + if hasattr(node.item,"panel"): + self.panel_courant=node.item.panel(self,self.pane.pane('selected'),node) + else: + raise Exception("Le noeud sélectionné n'a pas de panel associé") + else: + self.panel_courant = panels.Panel_Inactif(self,self.pane.pane('selected'),node) + return self.panel_courant + + def init_modif(self): + """ + Met l'attribut modified à 'o' : utilisé par Eficas pour savoir + si un JDC doit être sauvegardé avant destruction ou non + """ + self.modified = 'o' + + def stop_modif(self): + """ + Met l'attribut modified à 'n' : utilisé par Eficas pour savoir + si un JDC doit être sauvegardé avant destruction ou non + """ + self.modified = 'n' + + def mainloop(self): + self.parent.mainloop() + + def ReplaceObjectNode(self,node,new_object,nom_sd=None): + """ + Cette méthode sert à remplacer l'objet pointé par node par + new_object. + Si nom_sd : on remplace un OPER et on essaie de renommer la + nouvelle sd par nom_sd + """ + child = node.append_brother(new_object,retour='oui') + if child == 0: + self.appli.affiche_infos("Impossible de remplacer l'objet du noeud courant") + else: + self.init_modif() + node.delete() + #if nom_sd: + #child.item.nomme_sd(nom_sd) + child.select() + #child.update() + + def doCut(self): + """ + Stocke dans Eficas.noeud_a_editer le noeud à couper + """ + if not self.node_selected.item.iscopiable(): + showinfo("Copie impossible", + "Cette version d'EFICAS ne permet que la copie d'objets de type 'Commande' ou mot-clé facteur") + return + self.appli.edit="couper" + self.appli.noeud_a_editer = self.node_selected + + def doCopy(self): + """ + Stocke dans Eficas.noeud_a_editer le noeud à copier + """ + if not self.node_selected.item.iscopiable(): + showinfo("Copie impossible", + "La copie d'un tel objet n'est pas permise") + return + self.appli.edit="copier" + self.appli.noeud_a_editer = self.node_selected + + def doPaste(self): + """ + Lance la copie de l'objet placé dans self.appli.noeud_a_editer + Ne permet que la copie d'objets de type Commande ou MCF + """ + try: + child=self.appli.noeud_a_editer.doPaste(self.node_selected) + except: + #traceback.print_exc() + showinfo("Action de coller impossible", + "L'action de coller apres un tel objet n'est pas permise") + return + + if child == 0: + if self.appli.message != '': + showerror("Copie refusée",self.appli.message) + self.appli.message = '' + self.appli.affiche_infos("Copie refusée") + return + + # il faut déclarer le JDCDisplay_courant modifié + self.init_modif() + # suppression éventuelle du noeud sélectionné + # si possible on renomme l objet comme le noeud couper + if self.appli.edit == "couper": + #nom = self.appli.noeud_a_editer.item.object.sd.nom + item=self.appli.noeud_a_editer.item + self.appli.noeud_a_editer.delete() + child.item.update(item) + #test,mess = child.item.nomme_sd(nom) + child.select() + # on rend la copie à nouveau possible en libérant le flag edit + self.appli.edit="copier" + + def update(self): + """Cette methode est utilisee par le JDC associe pour + signaler des modifications globales du JDC + """ + self.tree.update() + + def supprime(self): + #print "supprime",self + self.select_node(None) + self.tree.supprime() + self.tree=None + self.pane.destroy() + + #def __del__(self): + # print "__del__",self diff --git a/InterfaceTK/listeFichiers.py b/InterfaceTK/listeFichiers.py new file mode 100644 index 00000000..908bfe2b --- /dev/null +++ b/InterfaceTK/listeFichiers.py @@ -0,0 +1,81 @@ +import string + +class listeFichiers : + + def __init__(self,appli): + self.appli=appli + self.premiere=1 + self.nbfich=0 + self.rep=self.appli.CONFIGURATION.rep_user + self.menuFichier=self.appli.menubar.menudict['Fichier'] + self.monFichier=self.rep+"/listefichiers_"+self.appli.code + self.liste_Fichiers=[] + self.init_Fichier() + self.traite_liste() + + def init_Fichier(self): + index=0 + try : + f=open(self.monFichier) + while ( index < 5) : + ligne=f.readline() + if ligne != "" : + l=(ligne.split("\n"))[0] + self.liste_Fichiers.append(l) + index=index+1 + except : + pass + try : + f.close() + except : + pass + + def sauve_Fichier(self): + try : + if len(self.liste_Fichiers) == 0 : + return + f=open(self.monFichier,'w') + index=0 + while ( index < len(self.liste_Fichiers)): + ligne=self.liste_Fichiers[index]+"\n" + f.write(ligne) + index=index+1 + except : + pass + try : + f.close() + except : + pass + + def traite_liste(self): + index=0 + for index in range(self.nbfich): + self.menuFichier.delete(9) + self.nbfich = 0 + index = 0 + while( index < len(self.liste_Fichiers)) : + self.ajout_item(index) + index=index+1 + + def ajout_item(self,index): + if self.premiere and (len(self.liste_Fichiers)!=0): + self.premiere=0 + self.menuFichier.add_separator() + label=self.liste_Fichiers[index] + self.menuFichier.insert_command(8,label=label,command= lambda self=self, l=label:self.coucou (l)); + self.nbfich=self.nbfich+1 + + def coucou(self,label): + self.appli.bureau.openJDC(file=label) + + def aOuvert(self,file): + if file not in self.liste_Fichiers : + if (len(self.liste_Fichiers) > 4) : + f=self.liste_Fichiers[0] + self.liste_Fichiers.remove(f) + self.liste_Fichiers.insert(len(self.liste_Fichiers),file) + else: + self.liste_Fichiers.remove(file) + self.liste_Fichiers.insert(len(self.liste_Fichiers),file) + self.traite_liste() + self.sauve_Fichier() diff --git a/InterfaceTK/listePatronsTK.py b/InterfaceTK/listePatronsTK.py new file mode 100644 index 00000000..350749b1 --- /dev/null +++ b/InterfaceTK/listePatronsTK.py @@ -0,0 +1,27 @@ +import os +import re +import Tkinter + + +from Editeur import listePatrons + +class listePatronsTK(listePatrons.listePatrons) : + + def __init__(self,appli): + self.appli=appli + listePatrons.listePatrons.__init__(self) + self.ajout_menu() + + def ajout_menu(self): + menuFichier=self.appli.menubar.menubar + menu_cascade=Tkinter.Menu(menuFichier,tearoff=0) + menuFichier.add_cascade(label="Patrons",menu=menu_cascade) + for ss_menu in self.liste.keys(): + ssmenu=Tkinter.Menu(menu_cascade,tearoff=0) + menu_cascade.add_cascade(label=ss_menu,menu=ssmenu) + for fichier in self.liste[ss_menu]: + ssmenu.add_command(label=fichier,command= lambda self=self, l=fichier:self.ouvre(l)); + + def ouvre(self,label): + fichier=self.rep_patrons+"/"+label + self.appli.bureau.openJDC(file=fichier,enregistre="non") diff --git a/InterfaceTK/macrodisplay.py b/InterfaceTK/macrodisplay.py new file mode 100644 index 00000000..a0e7e8de --- /dev/null +++ b/InterfaceTK/macrodisplay.py @@ -0,0 +1,165 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module contient la classe MacroDisplay qui realise l'affichage + des sous commandes d'une macro sous forme d'arbre +""" +# Modules Python +import types,sys +import Tkinter,Pmw + +# Modules EFICAS +import images +import tooltip +from Editeur import Objecttreeitem +import compojdc +import treewidget +from widgets import Fenetre +from Ihm import CONNECTOR + +class MACRO2TreeItem(compojdc.JDCTreeItem): + pass + +class MacroDisplay: + def __init__(self,appli,macroitem,nom_jdc): + self.fenetre = Tkinter.Toplevel() + self.fenetre.configure(width = 800,height=500) + self.fenetre.protocol("WM_DELETE_WINDOW", self.quit) + self.fenetre.title("Visualisation Macro_Etape") + self.macroitem=macroitem + self.jdc=macroitem.object.jdc_aux + self.nom_jdc=nom_jdc + self.appli=appli + self.barre=Tkinter.Frame(self.fenetre,relief="ridge",bd=2) + self.barre.pack(expand=0,fill=Tkinter.X) + if self.macroitem.object.fichier_text is not None: + b=Tkinter.Button(self.barre,image=images.get_image("Zoom24"),command=self.visufile) + b.pack(side='left') + tp=tooltip.TOOLTIP(b,"View file") + self.mainPart=Pmw.ScrolledCanvas(self.fenetre, + hull_width=600, + hull_height=500, + borderframe=1) + self.canvas=self.mainPart.component('canvas') + Pmw.Color.changecolor(self.canvas,background='gray95') + self.mainPart.pack(padx=10,pady=10,fill = 'both', expand = 1) + self.item=MACRO2TreeItem(self.appli,nom_jdc,self.jdc) + self.tree = treewidget.Tree(self.appli,self.item,self.mainPart,command=None,rmenu=self.make_rmenu) + self.tree.draw() + CONNECTOR.Connect(self.jdc,"close",self.onCloseView,()) + + def onCloseView(self): + self.quit() + + def visufile(self): + Fenetre(self.appli,titre="Source du fichier inclus",texte=self.macroitem.object.fichier_text) + + def make_rmenu(self,node,event): + if hasattr(node.item,'rmenu_specs'): + rmenu = Tkinter.Menu(self.canvas, tearoff=0) + self.cree_menu(rmenu,node.item.rmenu_specs,node) + rmenu.tk_popup(event.x_root,event.y_root) + + def cree_menu(self,menu,itemlist,node): + """ + Ajoute les items du tuple itemlist + dans le menu menu + """ + number_item=0 + radio=None + for item in itemlist: + number_item=number_item + 1 + if not item : + menu.add_separator() + else: + label,method=item + if type(method) == types.TupleType: + # On a un tuple => on cree une cascade + menu_cascade=Tkinter.Menu(menu) + menu.add_cascade(label=label,menu=menu_cascade) + self.cree_menu(menu_cascade,method,node) + elif method[0] == '&': + # On a une chaine avec & en tete => on cree un radiobouton + try: + command=getattr(node.item,method[1:]) + menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n)) + if radio == None:radio=number_item + except:pass + else: + try: + command=getattr(node.item,method) + menu.add_command(label=label,command=lambda a=self.appli,c=command,n=node:c(a,n)) + except:pass + # Si au moins un radiobouton existe on invoke le premier + if radio:menu.invoke(radio) + + def quit(self): + #print "quit",self + self.tree.supprime() + self.tree=None + self.fenetre.destroy() + + #def __del__(self): + # print "__del__",self + +def makeMacroDisplay(appli,macroitem,nom_item): + return MacroDisplay(appli,macroitem,nom_item) + +import treeitemincanvas + +class TREEITEMINCANVAS(treeitemincanvas.TREEITEMINCANVAS): + def __init__(self,object,nom="",parent=None,appli=None,sel=None,rmenu=None): + #print "TREEITEMINCANVAS",object + self.object=object + self.nom=nom + self.appli=appli + self.parent=parent + + self.item=MACRO2TreeItem(self.appli,self.nom,self.object) + self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1,canvas_background='gray95') + self.canvas.pack(padx=10,pady=10,fill = 'both', expand = 1) + if not sel: + def sel(event=None): + return + self.tree=treewidget.Tree(self.appli,self.item,self.canvas,command=sel,rmenu=rmenu) + self.tree.draw() + +import jdcdisplay + +class MACRODISPLAY(jdcdisplay.JDCDISPLAY): + def __init__(self,jdc,nom_jdc,appli=None,parent=None): + #print "MACRODISPLAY",jdc + self.jdc=jdc + self.nom_jdc=nom_jdc + self.fichier=None + self.panel_courant=None + self.appli=appli + self.parent=parent + self.node_selected = None + self.modified='n' + + self.pane=Pmw.PanedWidget(self.parent,orient='horizontal') + self.pane.add('treebrowser',min=0.4,size=0.5) + self.pane.add('selected',min=0.4) + self.pane.pack(expand=1,fill='both') + self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'), + self.appli,self.select_node,self.make_rmenu) + diff --git a/InterfaceTK/menubar.py b/InterfaceTK/menubar.py new file mode 100644 index 00000000..119bbdfa --- /dev/null +++ b/InterfaceTK/menubar.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" +""" +from Tkinter import Menu + +class MENUBAR: + def __init__(self,appli,parent): + # L'attribut appli pointe vers l'objet application qui détient la menubar et les autres composants + self.appli=appli + # L'attribut parent pointe vers l'objet graphique parent de la menubar + self.parent=parent + self.menubar=Menu(self.parent) + self.parent.configure(menu=self.menubar) + self.init() + + try: + from prefs import labels + except: + labels= ('Fichier','Edition','Jeu de commandes','Catalogue','Options','Aide','Traduction') + + def init(self): + self.menudict={} + for label in self.labels: + menu=Menu(self.menubar,tearoff=0) + self.menudict[label]=menu + self.menubar.add_cascade(label=label,menu=menu) + diff --git a/InterfaceTK/newsimppanel.py b/InterfaceTK/newsimppanel.py new file mode 100644 index 00000000..77ca83aa --- /dev/null +++ b/InterfaceTK/newsimppanel.py @@ -0,0 +1,196 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import prefs +import panels +import images +import composimp +from widgets import ListeChoix +from widgets import FenetreDeSelection + +from Noyau.N_CR import justify_text +from Editeur.utils import substract_list + + +class newSIMPPanel(panels.OngletPanel): + """ + Classe virtuelle servant de classe mère à toutes les classes Panel + servant à afficher et récupérer la valeur d'un mot-clé simple. + Le panel est différent suivant le type de la valeur attendu + """ + def init(self): + """ + Méthode appelée par le constructeur de OngletPanel : + construit le notebook à 2 onglets utilisé par tous les panels de + tous les mots-clés simples + """ + nb = Pmw.NoteBook(self,raisecommand=self.raisecmd) + nb.pack(fill = 'both', expand = 1) + self.nb=nb + nb.add('Valeur', tab_text='Saisir valeur') + self.makeValeurPage(nb.page('Valeur')) + self.enlevebind() + self.creebind() + nb.setnaturalsize() + +# ---------------------------------------------------------------------------------------- +# Méthodes utilisées pour l'affectation de la valeur donnée par l'utilisateur +# au mot-clé courant +# ---------------------------------------------------------------------------------------- + + def reset_old_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'): + """ + Enregistre val comme valeur de self.node.item.object SANS + faire de test de validité ni ré-évaluer l'ancienne valeur + permet de rester avec des valeurs non entrees et de ne pas + ré-évaluer des entiers par exemple + """ + if self.parent.modified == 'n' : self.parent.init_modif() + self.node.item.set_valeur(name) + self.parent.appli.affiche_infos(mess) + + def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'): + """ + Enregistre val comme valeur de self.node.item.object + en evaluant l item et en le validant + Si name n'est pas renseigné, la valeur + """ + if self.parent.modified == 'n' : self.parent.init_modif() + if name != None: + valeur = name + validite = 1 + else : + valeurentree= self.entry.get() + self.entry.delete(0,END) + if valeurentree == '': valeurentree=None + valeur,validite=self.node.item.eval_valeur(valeurentree) + if not validite : + valeur= self.entry.get() + commentaire = "impossible d'évaluer : %s " %`valeurentree` + self.parent.appli.affiche_infos(commentaire) + + if validite : + validite,commentaire=self.node.item.valide_val(valeur) + + if validite : + self.node.item.set_valeur(valeur) + self.parent.appli.affiche_infos(mess) + else : + self.parent.appli.affiche_infos(commentaire) + +# ---------------------------------------------------------------------------------------- +# Méthodes utilisées pour la manipulation des items dans les listes de choix +# ---------------------------------------------------------------------------------------- + def selectValeur(self,name): + self.selected_valeur = name + + def deselectValeur(self,name): + self.selectValeur = None + + def sup_valeur(self,name=None): + """ + Supprime la valeur selectionnée de la liste des valeurs et la rajoute + à la liste des choix possibles + """ + if hasattr(self,'selected_valeur') : + if ( self.selected_valeur != None and self.selected_valeur != ''): + liste_valeurs = self.Liste_valeurs.get_liste() + liste_valeurs.remove(self.selected_valeur) + self.Liste_valeurs.put_liste(liste_valeurs) + listeActuelle=self.Liste_valeurs.get_liste() + liste_choix=self.node.item.get_liste_possible(listeActuelle) + self.Liste_choix.put_liste(liste_choix) + self.selected_valeur = None + + def add_choix(self,name=None): + """ + Ajoute le choix selectionné à la liste des valeurs et le retire + de la liste des choix possibles + """ + + if hasattr(self,'selected_choix') : + if (self.selected_choix != None and self.selected_choix != ''): + min,max = self.node.item.GetMinMax() + liste_valeurs = self.Liste_valeurs.get_liste() + if len(liste_valeurs) >= max : + self.parent.appli.affiche_infos("La liste ne peut pas avoir plus de %d éléments" %max) + return + if (self.Liste_valeurs.selection != None): + ligne=self.Liste_valeurs.cherche_selected_item() + liste_valeurs.insert(ligne,self.selected_choix) + else : + liste_valeurs.append(self.selected_choix) + self.Liste_valeurs.put_liste(liste_valeurs) + listeActuelle=self.Liste_valeurs.get_liste() + liste_choix=self.node.item.get_liste_possible(listeActuelle) + self.Liste_choix.put_liste(liste_choix) + self.selected_choix = None + + def selectChoix(self,name): + self.selected_choix = name + + def deselectChoix(self,name): + self.selectChoix = None + + def raisecmd(self,page): + try: + self.entry.focus() + except: + pass + +# ---------------------------------------------------------------------------------------- +# Méthodes utilisées pour la manipulation des items en notation scientifique +# ---------------------------------------------------------------------------------------- + def set_valeur_texte(self,texte_valeur) : + """ Sert à mettre à jour la notation scientifique""" + try : + if "R" in self.node.item.object.definition.type: + if texte_valeur[0] != "'": + clef=eval(texte_valeur) + if str(clef) != str(texte_valeur) : + self.node.item.object.init_modif() + clefobj=self.node.item.object.GetNomConcept() + if not self.parent.appli.dict_reels.has_key(clefobj): + self.parent.appli.dict_reels[clefobj] = {} + self.parent.appli.dict_reels[clefobj][clef]=texte_valeur + self.parent.appli.dict_reels[clefobj] + self.node.item.object.fin_modif() + except: + pass + + + def get_valeur_texte(self,valeur) : + valeur_texte="" + if "R" in self.node.item.object.definition.type: + clefobj=self.node.item.object.GetNomConcept() + if self.parent.appli.dict_reels.has_key(clefobj): + if self.parent.appli.dict_reels[clefobj].has_key(valeur): + valeur_texte=self.parent.appli.dict_reels[clefobj][valeur] + return valeur_texte + diff --git a/InterfaceTK/options.py b/InterfaceTK/options.py new file mode 100644 index 00000000..9d0da1e4 --- /dev/null +++ b/InterfaceTK/options.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" +""" +# Modules Python +import os,string + +# Modules Eficas +from widgets import askopenfilename +import panels + +# l'option affichage_commandes peut prendre les valeurs "groupes" ou "alphabetic" +affichage_commandes="alphabetic" + +class OPTIONS: + + menu_defs=[ + ('Options',[ + ("Affichage commandes",(("alphabétique",'&affichage_alpha'),("groupes",'&affichage_grp'))), + #("Couleur",(("fond",'change_fond'),("barre",'change_barre'))), + # ("Catalogue développeur",'choix_cata_developpeur'), + ('Paramètres Eficas','affichage_fichier_ini'), + ('Paramètres Affichage','affichage_style_ini'), + + ] + ) + ] + + button_defs=[] + + def __init__(self,appli,parent): + self.appli=appli + self.parent=parent + + + def affichage_grp(self): + global affichage_commandes + affichage_commandes="groupes" + if hasattr(panels,'panneauCommande'): + panel=panels.panneauCommande + parent=panel.parent + if parent != None : + parent.create_panel(parent.node_selected) + # si on a un panel avec plusieurs onglets + # on affiche Commande + try : + parent.panel_courant.nb.selectpage("Commande") + except : + pass + + def affichage_alpha(self): + + global affichage_commandes + affichage_commandes="alphabetic" + if hasattr(panels,'panneauCommande'): + panel=panels.panneauCommande + parent=panel.parent + if parent != None : + parent.create_panel(parent.node_selected) + # si on a un panel avec plusieurs onglets + # on affiche Commande + try : + parent.panel_courant.nb.selectpage("Commande") + except : + pass + + def change_fond(self): + from tkColorChooser import askcolor + #nouvelle=askcolor(self.appli.background) + nouvelle=askcolor('grey') + + def change_barre(self): + pass + + def choix_cata_developpeur(self): + """ + Cette méthode demande à l'utilisateur-développeur d'indiquer quel catalogue + il veut utiliser en remplacement du catalogue standard du code + NB : il faut que le développeur ait les droits d'écriture dans le répertoire où + se trouve le catalogue + """ + file = askopenfilename(title="Choix d'un catalogue personnel", + defaultextension=".py", + filetypes = ( ("Catalogue", "cata*.py"),)) + if file : + self.parent.update_idletasks() + self.appli.reset_affichage_infos() + rep_fic = os.path.dirname(file) + nom_fic = string.split(os.path.basename(file),'.')[0] + rep_courant = os.getcwd() + os.chdir(rep_fic) + self.cata = __import__(nom_fic) + self.code = self.cata.CODE + os.chdir(rep_courant) + self.fic_cata = file + fic_cata_p = nom_fic+'_pickled.py' + self.fic_cata_p = os.path.join(rep_fic,fic_cata_p) + pile_erreurs = self.cata.erreurs_cata + if pile_erreurs.existe_message() : + messages = pile_erreurs.retourne_messages() + print messages + else : + # XXX ne doit pas fonctionner + self.catalo = catabrowser.CataItem(cata=self.cata) + self.Retrouve_Ordre_Cata('personnel') + pile_erreurs.efface() + + + def affichage_fichier_ini(self): + self.appli.CONFIGURATION.affichage_fichier_ini() + + + def affichage_style_ini(self): + self.appli.CONFIGStyle.affichage_style_ini() diff --git a/InterfaceTK/panels.py b/InterfaceTK/panels.py new file mode 100644 index 00000000..b84a5697 --- /dev/null +++ b/InterfaceTK/panels.py @@ -0,0 +1,587 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +import string +import os +from Tkinter import * +import Pmw +import time +import traceback + +import widgets +from widgets import ListeChoix +from widgets import ListeChoixParGroupes +import prefs +import options + +SEPARATEUR = '-'*30 + + +class Panel(Frame) : + """ + Classe servant de classe mère à toutes celles représentant les + panneaux à afficher en fonction de la nature de l'objet en cours + Elle est toujours dérivée. + """ + def __init__(self,parent,panneau,node) : + # Le parent d'un panel est un objet de la classe JDCDISPLAY ou derivee + # ou un objet qui a les attributs : appli (de classe APPLI ou derivee), + # modified et la methode init_modif + self.parent=parent + self.panneau = panneau + self.node=node + Frame.__init__(self,self.panneau) + self.place(x=0,y=0,relheight=1,relwidth=1) + self.creer_boutons() + self.init() + global panneauCommande + panneauCommande=self + + #def __del__(self): + # print "__del__",self + + def update_panel(self): + """Methode appele pour demander une mise a jour du panneau""" + + def destroy(self): + Frame.destroy(self) + self.panneau=None + self.parent=None + # Because on herite de Frame + self.master=None + # On supprime explicitement les references aux objets Tk + self.nb=None + self.fr_but=None + self.bouton_cata=None + self.bouton_doc=None + self.bouton_com=None + self.bouton_sup=None + #self.frame_eval=None + self.label=None + self.frame_boutons=None + self.frame_comment=None + self.frame_param=None + # On termine la suppression de facon brutale (objets Tk et non Tk) + for k in self.__dict__.keys(): + # il est plus prudent de ne pas détruire le lien sur le Node + # si on voulait mettre l'attribut node à None, il faudrait + # que tous les appels à node.parent.select() apparaissent après + # toutes les autres actions liées au panel (node.item.isglobal(), ...) + if k != 'node' : setattr(self,k,None) + + def creer_boutons(self): + """ + Méthode créant les boutons se trouvant dans la partie contextuelle d'EFICAS + (à droite sous les onglets ) + """ + self.fr_but = Frame(self,height=30) + self.fr_but.pack(side='bottom') + self.bouton_com = Button(self.fr_but, text = 'Commentariser', command = self.ajout_commentaire) + self.bouton_sup = Button(self.fr_but, text = "Supprimer", command=self.supprimer) + self.bouton_doc = Button(self.fr_but, text="Documentation", command=self.visu_doc) + self.bouton_cata = Button(self.fr_but, text = "Catalogue", command = self.show_catalogue) + + if self.parent.appli.CONFIGURATION.isdeveloppeur == 'OUI': + self.bouton_sup.pack(side='left',padx=5, pady=5) + self.bouton_cata.pack(side='left',padx=5, pady=5) + self.bouton_doc.pack(side='right',padx=5, pady=5) + #self.bouton_sup.place(relx=0.25,rely = 0.5,relheight = 0.8,anchor='center') + #self.bouton_cata.place(relx=0.5,rely = 0.5,relheight = 0.8,anchor='center') + #self.bouton_doc.place(relx=0.75,rely = 0.5,relheight = 0.8,anchor='center') + else: + self.bouton_sup.pack(side='left',padx=5, pady=5) + self.bouton_doc.pack(side='right',padx=5, pady=5) + #self.bouton_sup.place(relx=0.3,rely = 0.5,relheight = 0.8,anchor='center') + #self.bouton_doc.place(relx=0.7,rely = 0.5,relheight = 0.8,anchor='center') + + def show_catalogue(self): + try: + genea = self.node.item.get_genealogie() + self.parent.appli.browser_catalogue_objet(genea) + except Exception,e: + traceback.print_exc() + + def efface(self): + self.node.efface() + +# ------------------------------------------------------------------------ +# Méthodes permettant d'ajouter des commentaires, des paramètres +# et des objets EVAL. +# Ces méthodes sont utilisées par les panneaux des JDC,ETAPE, +# COMMENTAIRE et PARAMETRE +# ------------------------------------------------------------------------ + + def ajout_commentaire(self,ind='after'): + """ + Ajoute un commentaire à l'intérieur du JDC : + - si ind='after' : l'ajoute après l'objet courant + - si ind='before' : l'ajoute avant. + """ + if self.parent.modified == 'n' : self.parent.init_modif() + return self.node.append_brother("COMMENTAIRE",ind) + + def ajout_commentaire_first(self): + """ + Ajoute un commentaire en début de JDC + """ + if self.parent.modified == 'n' : self.parent.init_modif() + return self.node.append_child("COMMENTAIRE",'first') + + def ajout_parametre(self,ind='after'): + """ + Ajoute un parametre à l'intérieur du JDC : + - si ind='after' : l'ajoute après l'objet courant + - si ind='before' : l'ajoute avant. + """ + if self.parent.modified == 'n' : self.parent.init_modif() + return self.node.append_brother("PARAMETRE",ind) + + def ajout_parametre_first(self): + """ + Ajoute un parametre en début de JDC + """ + if self.parent.modified == 'n' : self.parent.init_modif() + return self.node.append_child("PARAMETRE",'first') + +# def ajout_parametre_eval(self,ind='after'): +# """ +# Ajoute un paramètre EVAL à l'intérieur du JDC : +# - si ind='after' : l'ajoute après l'objet courant +# - si ind='before' : l'ajoute avant. +# """ +# if self.parent.modified == 'n' : self.parent.init_modif() +# return self.node.append_brother("PARAMETRE_EVAL",ind) + +# def ajout_parametre_eval_first(self): +# """ +# Ajoute un paramètre EVAL en début de JDC +# """ +# if self.parent.modified == 'n' : self.parent.init_modif() +# return self.node.append_child("PARAMETRE_EVAL",'first') + +# ------------------------------------------------------------------------ + + def visu_doc(self): + """ Permet d'ouvrir le fichier doc U de la commande au format pdf avec Acrobat Reader + - Ne fonctionne pas sous UNIX (chemin d'accès Acrobat Reader) + - indication du chemin d'accès aux fichiers pdf à revoir : trop statique""" + cle_doc = self.node.item.get_docu() + if cle_doc == None : return + cle_doc = string.replace(cle_doc,'.','') + cle_doc = string.replace(cle_doc,'-','') + commande = self.parent.appli.CONFIGURATION.exec_acrobat + nom_fichier = cle_doc+".pdf" + fichier = os.path.abspath(os.path.join(self.parent.appli.CONFIGURATION.path_doc, + nom_fichier)) + if os.name == 'nt': + os.spawnv(os.P_NOWAIT,commande,(commande,fichier,)) + elif os.name == 'posix': + script ="#!/usr/bin/sh \n%s %s&" %(commande,fichier) + pid = os.system(script) + + def supprimer(self): + """ + Suppression du noeud courant + """ + # On signale au parent du panel (le JDCDisplay) une modification + self.parent.init_modif() + self.node.delete() + + def affiche(self): + """ Force l'affichage des fenêtres en cours """ + self.tkraise() + + def selectMC(self,name): + """ On retrouve le mot-clé sous le curseur pour affichage du fr """ + cmd=self.node.item.get_definition() + texte_infos = '' + for e in cmd.entites.keys() : + if e == name : + texte_infos=getattr(cmd.entites[e],prefs.lang) + break + if texte_infos == '' : texte_infos="Pas d'infos disponibles" + self.parent.appli.affiche_infos(texte_infos) + + def defMC(self,name): + """ On ajoute un mot-clé à la commande : subnode """ + if name == SEPARATEUR:return + if self.parent.modified == 'n' : self.parent.init_modif() + if name != "COMMENTAIRE": + self.node.append_child(name) + else : + self.ajout_commentaire() + + def selectCmd(self,name): + """ On retrouve la commande sous le curseur pour affichage du fr """ + if name != 'COMMENTAIRE' and name != SEPARATEUR: + texte_infos=getattr(self.parent.jdc.get_cmd(name),prefs.lang) + self.parent.appli.affiche_infos(texte_infos) + + def defCmd(self,name): + """ + On ajoute une commande après la commande selectionnée : after + ou bien on ajoute un commentaire + """ + if name == SEPARATEUR:return + if self.parent.modified == 'n' : self.parent.init_modif() + if name != "COMMENTAIRE": + #parent=self.node.parent + #new_obj = parent.item.append_child(name,self.node.item.getObject()) + #parent.children[parent.children.index(self.node)+1].select() + new_node = self.node.append_brother(name,'after') + else : + new_node = self.ajout_commentaire() + + def defCmdFirst(self,name): + """ On ajoute une commande ou un commentaire au début du fichier de commandes """ + if name == SEPARATEUR:return + if self.parent.modified == 'n' : self.parent.init_modif() + if name != "COMMENTAIRE": + #new_obj = self.node.item.append_child(name,'first') + #self.node.children[0].select() + new_node = self.node.append_child(name,'first') + else : + new_node = self.ajout_commentaire_first() + +class OngletPanel(Panel) : + """ Cette classe est virtuelle et doit être dérivée + Elle contient les principales méthodes d'affichage des différents onglets""" + + global panelbind + + def raisecmd(self,page): + self.nb.page(page).focus_set() + if page == 'Concept': + try: + self._any.focus() + except: + pass + elif page == 'Commande': + try: + self.command_entry.component('entry').focus() + except: + pass + + def creebind(self): + self.nb.bind_all("",lambda e,s=self,num=0:s.commande_up(num)) + self.nb.bind_all("",lambda e,s=self,num=1:s.commande_up(num)) + self.nb.bind_all("",lambda e,s=self,num=2:s.commande_up(num)) + self.nb.bind_all("",lambda e,s=self,num=3:s.commande_up(num)) + OngletPanel.panelbind=self.nb + + def enlevebind(self): + if not hasattr(OngletPanel,"panelbind"): + return + if OngletPanel.panelbind == None: + return + try: + OngletPanel.panelbind.unbind_all("") + OngletPanel.panelbind.unbind_all("") + OngletPanel.panelbind.unbind_all("") + OngletPanel.panelbind.unbind_all("") + except: + pass + OngletPanel.panelbind = None + + def commande_up(self,num): + #print "commande_up de panels pour ", num + try : + OngletPanel.panelbind.selectpage(num) + pageNew=OngletPanel.panelbind.page(num) + pageNew.focus_set() + except : + pass + + def affiche(self): + page=self.nb.getcurselection() + self.nb.page(page).focus_set() + if page == 'Concept': + try: +# _any est un pointeur sur entry +# component est une methode de pmw +# a priori, jamais ok + self._any.component('entry').focus_set() + except: + pass + self.tkraise() + +# ------------------------------------------------------------------------ +# Méthodes permettant d'afficher des pages partagées par différents +# types d'objets (règles,mots-clés,concept,...) +# ------------------------------------------------------------------------ + + def makeConceptPage(self,page): + """ + Crée la page de saisie du nom du concept + """ + self.label = Label(page,text='Nom du concept :') + self.label.place(relx=0.1,rely=0.4) + self._any = Entry(page,relief='sunken') + self._any.place(relx=0.35,rely=0.4,relwidth=0.5) + self._any.bind("",lambda e,s=self:s.execConcept()) + self._any.bind("",lambda e,s=self:s.execConcept()) + self._any.insert(0,self.node.item.GetText()) + self.but_ok=Button(page,text = "Valider",command=self.execConcept) + self.but_ok.place(relx=0.35,rely=0.8, relwidth=0.35) + type_sd = self.node.item.get_type_sd_prod() + if type_sd : + txt = "L'opérateur courant retourne un objet de type %s" %type_sd + self.label = Label(page, text = txt) + self.label.place(relx=0.5,rely=0.55,anchor='n') + self._any.focus() + # aide associée au panneau + bulle_aide="""Tapez dans la zone de saisie le nom que vous voulez donner + au concept retounré par l'opérateur courant et pressez pour valider""" + page.bind("", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + page.bind("",self.parent.appli.efface_aide) + + + def makeMoclesPage(self,page): + """ + Crée la page qui affiche la liste des mots-clés que l'on peut + encore ajouter + """ + genea =self.node.item.get_genealogie() + jdc = self.node.item.get_jdc() + liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico) + liste_commandes = (("",self.selectMC), + ("",self.deselectMC), + ("",self.defMC)) + Liste = ListeChoix(self,page,liste_mc,liste_commandes = liste_commandes,titre = "Mots-clés permis",optionReturn="oui") + Liste.affiche_liste() + # aide associée au panneau + bulle_aide="""Double-cliquez sur le mot-clé que vous voulez ajouter à + la commande en cours d'édition""" + Liste.MCbox.bind("", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + Liste.MCbox.bind("",self.parent.appli.efface_aide) + if len(liste_mc) > 0 : + Liste.surligne(liste_mc[0]) + self.Liste=Liste + + def makeCommentairePage(self,page): + label = Label(page,text = "Insérer un commentaire :") + label.grid(column = 0, row = 2) + but_avant = Button(page,text = "AVANT",command = lambda s=self :s.ajout_commentaire(ind = 'before')) + but_apres = Button(page,text = "APRES",command = self.ajout_commentaire) + but_avant.grid(column = 1,row =2) + but_apres.grid(column = 1,row =3) + + def makeCommandePage(self,page): + """ + Cree l'onglet + """ + frame1 = Frame(page,height = 20) + frame1.pack(side='top',fill='x') + label = Label(frame1,text ="La commande choisie sera ajoutée\n APRES la commande courante") + label.pack(side='top') + frame2 = Frame(page) + frame2.pack(side='top',fill='both',expand=1) + liste_commandes = (("",self.selectCmd), + ("",self.deselectCmd), + ("",self.defCmd)) + if options.affichage_commandes == "alphabetic": + liste_cmd = self.get_liste_cmd() + Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes, + filtre='oui',titre = "Commandes",optionReturn="oui") + else: + liste_commandes=liste_commandes+(("",self.defCmd),) + liste_groupes,dict_groupes=self.get_groups() + Liste = ListeChoixParGroupes(self,frame2,liste_groupes,dict_groupes, + liste_commandes = liste_commandes, + filtre='oui',titre = "Commandes",optionReturn="oui") + Liste.affiche_liste() + self.command_entry=Liste.entry + # aide associée au panneau + bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes""" + Liste.MCbox.bind("", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + Liste.MCbox.bind("",self.parent.appli.efface_aide) + self.liste_command=Liste + global panneauCommande + panneauCommande=self + + def makeJDCPage(self,page): + """ + Crée la page correspondant à un objet de type JDC + """ + liste_commandes = (("",self.selectCmd), + ("",self.deselectCmd), + ("",self.defCmdFirst)) + if options.affichage_commandes == "alphabetic": + liste_cmd = self.get_liste_cmd() + Liste = ListeChoix(self,page,liste_cmd,liste_commandes = liste_commandes, + filtre='oui',titre = "Commandes",optionReturn="oui") + else: + liste_commandes=liste_commandes+(("",self.defCmdFirst),) + liste_groupes,dict_groupes=self.get_groups() + Liste = ListeChoixParGroupes(self,page,liste_groupes,dict_groupes, + liste_commandes = liste_commandes, + filtre='oui',titre = "Commandes",optionReturn="oui") + Liste.affiche_liste() + # aide associée au panneau + bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes""" + Liste.MCbox.bind("", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + Liste.MCbox.bind("",self.parent.appli.efface_aide) + + def makeReglesPage(self,page) : + """ + Crée la page qui affiche la liste des règles avec celle qui ne sont + pas respectées en rouge + """ + regles = [] + regles = self.node.item.get_regles() + dictionnaire = self.node.item.get_mc_presents() + texte_regles = [] + l_regles_en_defaut=[] + if len(regles) > 0: + i = 0 + for regle in regles : + texte_regles.append(regle.gettext()) + texte,test = regle.verif(dictionnaire) + if test == 0 : l_regles_en_defaut.append(i) + i = i+1 + Liste = ListeChoix(self,page,texte_regles,liste_marques=l_regles_en_defaut,active='non',titre="Règles") + Liste.affiche_liste() + # aide associée au panneau + bulle_aide="""Ce panneau contient la liste des règles qui s'appliquent à l'objet + en cours d'édition. + - en noir : règles valides + - en rouge : règles violées""" + Liste.MCbox.bind("", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + Liste.MCbox.bind("",self.parent.appli.efface_aide) + + def makeParamCommentPage_for_etape(self,page): + """ + Crée la page qui offre le choix à l'utilisateur d'ajouter un commentaire + ou un paramètre, avant ou après le noeud courant dans l'arbre. + Cette page est destinée aux objets de niveau ETAPE cad à toutes les CMD, + les commentaires inter commandes et les paramètres + """ + # les frame ... + self.frame_comment = Frame(page,bd=1,relief='raised') + self.frame_param = Frame(page,bd=1,relief='raised') + self.frame_boutons = Frame(page,bd=1,relief='raised') + self.frame_comment.place(relx=0,rely=0,relwidth=1,relheight=0.40) + self.frame_param.place(relx=0,rely=0.40,relwidth=1,relheight=0.40) + self.frame_boutons.place(relx=0,rely=0.84,relwidth=1,relheight=0.16) + # remplissage de la frame commentaire + Label(self.frame_comment,text = "Insérer un commentaire :").place(relx=0.1,rely=0.5,anchor='w') + but_comment_avant = Button(self.frame_comment, + text = "AVANT "+self.node.item.get_nom(), + command = lambda s=self :s.ajout_commentaire(ind = 'before')) + but_comment_apres = Button(self.frame_comment, + text = "APRES "+self.node.item.get_nom(), + command = self.ajout_commentaire) + but_comment_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45) + but_comment_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45) + # remplissage de la frame paramètre + Label(self.frame_param,text = "Insérer un paramètre :").place(relx=0.1,rely=0.5,anchor='w') + but_param_avant = Button(self.frame_param, + text = "AVANT "+self.node.item.get_nom(), + command = lambda s=self :s.ajout_parametre(ind = 'before')) + but_param_apres = Button(self.frame_param, + text = "APRES "+self.node.item.get_nom(), + command = self.ajout_parametre) + but_param_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45) + but_param_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45) + # remplissage de la frame boutons + Button(self.frame_boutons, + text="Commentariser toute la commande", + command = self.comment_commande).place(relx=0.5,rely=0.5,anchor='center') + + def deselectMC(self,name): + self.parent.appli.affiche_infos('') + + def get_groups(self): + jdc=self.node.item.object.get_jdc_root() + return jdc.get_groups() + + def get_liste_cmd(self): + #print "get_liste_cmd",self.node.item.object + jdc=self.node.item.object.get_jdc_root() + listeCmd = jdc.get_liste_cmd() + return listeCmd + + def deselectCmd(self,name): + self.parent.appli.affiche_infos('') + + def execConcept(self): + """ + Nomme le concept SD retourné par l'étape + """ + if not hasattr(self,'valeur_choisie'): + nom = self._any.get() + else: + nom = self.valeur_choisie.get() + nom = string.strip(nom) + if nom == '' : return # si pas de nom, on ressort sans rien faire ... + if self.parent.modified == 'n' : self.parent.init_modif() + test,mess = self.node.item.nomme_sd(nom) + #self.node.verif() + #self.node.racine.update() + self.parent.appli.affiche_infos(mess) + + def changed(self): + pass + + def comment_commande(self): + """ + Cette méthode a pour but de commentariser la commande pointée par self.node + """ + # On traite par une exception le cas où l'utilisateur final cherche à désactiver + # (commentariser) un commentaire. + try : + pos=self.node.parent.children.index(self.node) + commande_comment = self.node.item.get_objet_commentarise() + # On signale au parent du panel (le JDCDisplay) une modification + self.parent.init_modif() + self.node.parent.children[pos].select() + except Exception,e: + traceback.print_exc() + widgets.showerror("TOO BAD",str(e)) + return + + +class Panel_Inactif(Panel): + """ + Cette classe sert à définir un panneau dans lequel on dit que le noeud + sélectionné n'est pas actif + """ + def __init__(self,parent,panneau,node) : + self.parent=parent + self.panneau = panneau + self.node=node + Frame.__init__(self,self.panneau) + self.place(x=0,y=0,relheight=1,relwidth=1) + self.creer_texte() + + def creer_texte(self): + texte = "Le noeud sélectionné ne correspond pas à un objet actif\n" + texte = texte + "Seules les commandes placées entre \nDEBUT/POURSUITE et FIN sont actives" + longueur = int(self.panneau.winfo_width()*0.8) + self.label = Label(self,text=texte,wraplength=longueur,justify='center') + self.label.place(relx=0.5,rely=0.4,relwidth=0.8,anchor='center') + self.bouton_sup = Button(self, + text = "Supprimer", + command=self.supprimer, + width=14) + self.bouton_sup.place(relx=0.5,rely=0.8,anchor='center') + + +if __name__ == "__main__" : pass diff --git a/InterfaceTK/panelsSalome.py b/InterfaceTK/panelsSalome.py new file mode 100644 index 00000000..800848ed --- /dev/null +++ b/InterfaceTK/panelsSalome.py @@ -0,0 +1,286 @@ +# -*- coding: utf-8 -*- + +from Tkinter import * +from widgets import ListeChoix +from widgets import showerror + +from fonctionpanel import FONCTION_Panel +from shellpanel import SHELLPanel +from plusieursintopanel import PLUSIEURS_INTO_Panel +from plusieursassdpanel import PLUSIEURS_ASSD_Panel +from plusieursbasepanel import PLUSIEURS_BASE_Panel +from plusieursbasepanel import PLUSIEURS_BASE_OR_UNELISTE_Panel +from uniquesdcopanel import UNIQUE_SDCO_Panel +from uniqueassdpanel import UNIQUE_ASSD_Panel +from uniqueintopanel import UNIQUE_INTO_Panel +from uniquecomppanel import UNIQUE_COMP_Panel +from uniquebasepanel import UNIQUE_BASE_Panel +from uniqueassdpanel import UNIQUE_ASSD_Panel_Reel + +from Noyau.N_CR import justify_text + +import traceback +import images + + + +# 2 types de commandes vont etre particularisees dans Salome +# +# - un cas general : +# Toutes les commandes possedant GROUP_NO ou GROUP_MA +# seront surchargees d office +# pour cela on va utiliser le dictionnaire dict_classes_salome +# qui va permettre de changer la classe de la commande +# ainsi si un panel en dehors de salome a pour classe PLUSIEURS_BASE_Panel +# la classe de ce panel devient alors SALOME_PLUSIEURS_BASE_Panel +# (pour cela voir composimp) + +# des commandes "autres" ne pouvant pas etre identifiées par leur nom +# il suffit de creer dans la classe SALOME de la commande +# une fonction portant son nom +# Exemple de particularisation d un panel : +# Supposons que l on veuille particulariser la commande +# - LIRE_MAILLAGE_UNITE +# le panel initial a pour classe UNIQUE_BASE_Panel +# il suffit d'ajouter dans la classe derivée SALOME_UNIQUE_BASE_Panel +# une fonction SALOME_LIRE_MAILLAGE_UNITE +# la classe de ce panel devient alors SALOME_UNIQUE_BASE_Panel +# on peut surcharger les methodes nécessaires (affichage par exemple) + + +class SALOME_SHELLPanel (SHELLPanel): + "" + +class SALOME_FONCTION_Panel (FONCTION_Panel): + "" + +class SALOME_PLUSIEURS_INTO_Panel (PLUSIEURS_INTO_Panel): + "" + +class SALOME_PLUSIEURS_ASSD_Panel (PLUSIEURS_ASSD_Panel): + "" + +class SALOME_UNIQUE_INTO_Panel (UNIQUE_INTO_Panel): + "" + +class SALOME_UNIQUE_SDCO_Panel (UNIQUE_SDCO_Panel): + "" + +class SALOME_UNIQUE_ASSD_Panel (UNIQUE_ASSD_Panel): + "" + +class SALOME_UNIQUE_COMP_Panel (UNIQUE_COMP_Panel): + "" + +class SALOME_UNIQUE_ASSD_Panel_Reel (UNIQUE_ASSD_Panel_Reel): + "" + +# ------------------------------------------------------------------------------# +# classe SALOME_PLUSIEURS_BASE_Panel +# +# Commandes modifiées : +# - AFFE_CHAR_MECA_DDL_IMPO_GROUP_NO +# Methodes surchargées : +# - makeValeurPage(self,page) +# +# ------------------------------------------------------------------------------# + +class SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel(PLUSIEURS_BASE_OR_UNELISTE_Panel): + "" + +class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel): + + def __init__(self,parent,panneau,node): + PLUSIEURS_BASE_Panel.__init__( self, parent, panneau, node ) + #self.selected_valeur = None + + def add_valeur_plusieurs_base(self,name=None): + try: + valeur,validite,commentaire=self.get_valeur() + if not valeur: # sélection dans salome + strSelection = '' + + genea=self.node.item.get_genealogie() + kwType = None + for e in genea: + if "GROUP_NO" in e: + kwType = "GROUP_NO" + if "GROUP_MA" in e: + kwType = "GROUP_MA" + + selection, msg = self.parent.appli.selectGroupFromSalome(kwType) + if selection: + for oneSelection in selection: + strSelection +=str( oneSelection ) + strSelection +=',' + + strSelection = strSelection.rstrip(',') + self.display_valeur( strSelection ) + + PLUSIEURS_BASE_Panel.add_valeur_plusieurs_base( self, name ) + if msg: + self.parent.appli.affiche_infos(msg) + self.erase_valeur() + except: + print ' erreur add_valeur_plusieurs_base' #CS_pbruno : afficher boite de dialogue ici ? + + def makeValeurPage(self,page): + """ + Crée la page de saisie d'une liste de valeurs à priori quelconques, + cad qui ne sont pas à choisir dans une liste prédéfinie + """ + PLUSIEURS_BASE_Panel.makeValeurPage(self,page) + self.c = Button( self.frame_choix, text='Visualiser',command=self.displayInSalomeGeom ) + self.c.place( relx=0.3, rely=0.0,relwidth=0.55) + + + def displayInSalomeGeom( self ): + if self.selected_valeur: + ok, msgError = self.parent.appli.displayShape( self.selected_valeur ) + if not ok: + self.parent.appli.affiche_infos(msgError) + + + + +# ------------------------------------------------------------------------------# +# classe SALOME_UNIQUE_BASE_Panel +# +# Commandes modifiées : +# - LIRE_MAILLAGE_UNITE +# Methodes surchargées : +# - makeValeurPage(self,page) +# +# ------------------------------------------------------------------------------# + +class SALOME_UNIQUE_BASE_Panel(UNIQUE_BASE_Panel): + +# ce dictionnaire va servir lors de la sortie d efficas +# a creer le fichier qui sera integre au config.txt +# pour relier une unite logique et un nom de fichier + + dict_fichier_unite={} + + + def SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_N(self): + import salome + entrychaine=salome.sg.getAllSelected() + if entrychaine != '': + self.entry2.delete(0,END) + try: + SO = salome.myStudy.FindObjectID(entrychaine[0]) + except: + boo = 0 + SO = None + + FileName='' + if SO != None: + myBuilder = salome.myStudy.NewBuilder() + boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeFileType") + if boo: + val=FileAttr.Value() + if (val !="FICHIERMED" and val != "FICHIER_RESU_MED"): + boo=0 + showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9") + else: + boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeExternalFileDef") + if boo : + FileName=FileAttr.Value() + else: + showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9") + if FileName != '' : + self.entry.delete(0,END) + self.entry2.delete(0,END) + self.entry.insert(0,FileName) + self.entry2.insert(0,FileName) + self.valid_valeur() + + + def SALOME_DONNEES_HOMARD_TRAITEMENT_NOM_MED_MAILLAGE_N(self): + import salome + EntryName='' + entrychaine=salome.sg.getAllSelected() + if entrychaine != '': + self.entry2.delete(0,END) + try: + SO = salome.myStudy.FindObjectID(entrychaine[0]) + except: + boo = 0 + SO = None + + if SO is not None: + myBuilder = salome.myStudy.NewBuilder() + ok, AtName = myBuilder.FindAttribute(SO,"AttributeName") + if ok: + EntryName=AtName.Value() + + if EntryName != '': + self.entry.delete(0,END) + self.entry2.delete(0,END) + self.entry.insert(0,EntryName) + self.entry2.insert(0,EntryName) + self.valid_valeur() + + def SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_NP1(self): + self.SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_N() + + def SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA(self): + #try: + if ( 1 == 1 ) : + selection, msg = self.parent.appli.selectGroupFromSalome() + if selection: + strSelection =str( selection ) + UNIQUE_BASE_Panel.valid_valeur(self,strSelection) + if msg: + self.parent.appli.affiche_infos(msg) + self.erase_valeur() + #except: + else : + print ' erreur ' + + + def redistribue_selon_simp(self): + genea = self.node.item.get_genealogie() + commande="SALOME" + for i in range(0,len( genea )) : + commande=commande+"_"+ genea[i] + # -------------------------------------------------------------- + # on verifie que la methode n est pas particularise + # sinon on appelle SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA qui + # sert comme methode par defaut + # -------------------------------------------------------------- + try : + SALOME_UNIQUE_BASE_Panel.__dict__[commande](self) + except : + SALOME_UNIQUE_BASE_Panel.SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA(self) + + + + def makeValeurPage(self,page): + """ + Crée la page de saisie d'une valeur à priori quelconque, + cad qui ne sont pas à choisir dans une liste prédéfinie + Ajout d'un bouton pour selectionner à partir de Salome + """ + UNIQUE_BASE_Panel.makeValeurPage(self,page) + self.b = Button(self.frame_valeur,text='Relier selection',command=self.redistribue_selon_simp) + self.b.place(relx=0.28,rely=0.4,relwidth=0.4) + +#--------------------------------------------------------------------------------------- +# Correspondances entre les classes eficas et les classes salome_eficas +#______________________________________________________________________________________ +dict_classes_salome = { SHELLPanel : SALOME_SHELLPanel, + FONCTION_Panel : SALOME_FONCTION_Panel, + PLUSIEURS_INTO_Panel : SALOME_PLUSIEURS_INTO_Panel, + PLUSIEURS_ASSD_Panel : SALOME_PLUSIEURS_ASSD_Panel, + PLUSIEURS_BASE_Panel : SALOME_PLUSIEURS_BASE_Panel, + PLUSIEURS_BASE_OR_UNELISTE_Panel : SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel, + UNIQUE_INTO_Panel : SALOME_UNIQUE_INTO_Panel, + UNIQUE_SDCO_Panel : SALOME_UNIQUE_SDCO_Panel, + UNIQUE_ASSD_Panel : SALOME_UNIQUE_ASSD_Panel, + UNIQUE_ASSD_Panel_Reel : SALOME_UNIQUE_ASSD_Panel_Reel, + UNIQUE_COMP_Panel : SALOME_UNIQUE_COMP_Panel, + UNIQUE_BASE_Panel : SALOME_UNIQUE_BASE_Panel} + +dict_geom_numgroupe = { } +dict_geom_numface = { } diff --git a/InterfaceTK/patches.py b/InterfaceTK/patches.py new file mode 100644 index 00000000..0bd2fc4c --- /dev/null +++ b/InterfaceTK/patches.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +""" + Ce module contient des modifications mineures du comportement + du noyau ou de validation +""" +import string + +if __name__ == "__main__": + import Noyau.N_CR + print Noyau.N_CR.encadre_message(motif='!', +texte="""- Il faut au moins un mot-clé parmi : ('DEBUT', 'POURSUITE') +- Il faut au moins un mot-clé parmi : ('FIN',) +- Il faut qu'au moins un objet de la liste : ('DEBUT', 'POURSUITE') soit suivi d'au moins un objet de la liste : ('FIN',) +ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,yyyyyyyyyyyyyyyy +""") + + + diff --git a/InterfaceTK/plusieursassdpanel.py b/InterfaceTK/plusieursassdpanel.py new file mode 100644 index 00000000..3e5eb99b --- /dev/null +++ b/InterfaceTK/plusieursassdpanel.py @@ -0,0 +1,183 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import prefs +import panels +import images +from widgets import ListeChoix +from widgets import FenetreDeSelection + +from Noyau.N_CR import justify_text +from Editeur.utils import substract_list + +# Import des panels +from plusieurspanel import PLUSIEURS_Panel + +class PLUSIEURS_ASSD_Panel(PLUSIEURS_Panel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de donner une liste de valeurs qui ne sont pas + à choisir dans une liste discrètes et qui sont de type dérivé d'ASSD + """ + def makeValeurPage(self,page): + """ + Génère la page de saisie de plusieurs noms de SD parmi un ensemble discret + de SD possibles, cad d'un type cohérent avec les types attendus par le mot-clé simple + """ + # On récupère la bulle d'aide du panneau, l'objet, l'aide, min et max (cardinalité de la liste), + # la liste des valeurs déjà affectées à l'objet courant et la liste des SD du bon type + bulle_aide=self.get_bulle_aide() + self.ajout_valeurs=None + objet_mc = self.node.item.get_definition() + aide = self.get_aide() + aide = justify_text(texte=aide) + min,max = self.node.item.GetMinMax() + l_valeurs = self.node.item.GetListeValeurs() + l_choix=self.node.item.get_sd_avant_du_bon_type() + l_choix.sort() + # remplissage du panneau + self.frame_valeurs = Frame(page) + self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7) + self.frame_boutons_fleches = Frame(page) + self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7) + self.frame_choix = Frame(page) + self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7) + self.frame_boutons = Frame(page) + self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.5,relheight=0.1) + liste_commandes_valeurs = (("",self.selectValeur), + ("",self.deselectValeur), + ("",self.sup_valeur_sans_into)) + liste_commandes_choix = (("",self.selectChoix), + ("",self.deselectChoix), + ("",self.add_eval_valeur_sans_into)) + self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs, + titre="Valeur(s) actuelle(s)") + self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,liste_commandes = liste_commandes_choix, + titre= "Valeurs possibles") + self.bouton_add = Button(self.frame_boutons_fleches, + image = images.get_image('arrow_left'), + command = self.add_eval_valeur_sans_into) + self.bouton_sup = Button(self.frame_boutons_fleches, + image = images.get_image('arrow_right'), + command = self.sup_valeur_sans_into) + self.bouton_accepter = Button(self.frame_boutons, + text='Valider', + command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M)) + self.bouton_annuler = Button(self.frame_boutons, + text = 'Annuler', + command = self.annule_modifs_valeur) + self.bouton_add.place(relx=0.3,rely=0.35) + self.bouton_sup.place(relx=0.3,rely=0.65) + for but in (self.bouton_accepter,self.bouton_annuler): + but.pack(side='left',padx=4) + self.Liste_valeurs.affiche_liste() + if len(l_valeurs) > 0 : + liste_marque=l_valeurs[-1] + self.Liste_valeurs.surligne(liste_marque) + self.Liste_choix.affiche_liste() + for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons): + fram.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + fram.bind("",self.parent.appli.efface_aide) + + def add_eval_valeur_sans_into(self,valeurentree=None): + if valeurentree == None: + valeurentree = self.get_valeur() + valeur,validite=self.node.item.eval_valeur(valeurentree) + if not validite : + commentaire = "impossible d'évaluer : %s " %`valeurentree` + self.parent.appli.affiche_infos(commentaire) + return + self.add_valeur_sans_into(valeur) + + def get_bulle_aide(self): + """ + Retourne la bulle d'aide associée au panneau + """ + return """Un clic sur une valeur des deux listes la sélectionne. + - Un clic sur la flèche gauche stocke la valeur possible sélectionnée + dans la liste des valeurs que vous voulez affecter au mot-clé simple + - Un clic sur la flèche droite déstocke la valeur du mot-clé simple + sélectionnée (elle apparaît alors à nouveau comme choix possible + dans la liste des choix à droite) + - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées + au mot-clé simple courant + - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple + avant toute modification depuis le dernier 'Valider'""" + + def get_aide(self): + """ + Retourne la phrase d'aide indiquant de quel type doivent être les + valeurs que doit entrer l'utilisateur + """ + commentaire="" + mc = self.node.item.get_definition() + type = mc.type[0].__name__ + if len(mc.type)>1 : + for typ in mc.type[1:] : + type = type + ' ou '+typ.__name__ + if mc.min == mc.max: + commentaire="Une liste de "+`mc.min`+" objets de type "+type+" est attendue" + else : + commentaire="Une liste d'objets de type "+type+" est attendue (min="+`mc.min`+",max="+`mc.max`+')' + aideval=self.node.item.aide() + commentaire=commentaire +"\n"+ aideval + return commentaire + + + def sup_valeur(self,name=None): + """ + Supprime la valeur selectionnée de la liste des valeurs et la rajoute + à la liste des choix possibles + """ + liste_valeurs = self.Liste_valeurs.get_liste() + liste_valeurs.remove(self.selected_valeur) + liste_choix = self.node.item.get_definition().into + liste_choix = substract_list(liste_choix,liste_valeurs) + self.Liste_valeurs.put_liste(liste_valeurs) + self.Liste_choix.put_liste(liste_choix) + self.selected_valeur = None + + def erase_valeur(self): + pass + + def get_valeur(self): + """ + Retourne la valeur sélectionnée dans la liste des choix + """ + return self.selected_choix + + def display_valeur(self,val=None): + """ + Affiche la valeur passée en argument dans l'entry de saisie. + Par défaut affiche la valeur du mot-clé simple + """ + # Il n'y a pas d'entry pour ce type de panneau + return + + diff --git a/InterfaceTK/plusieursbasepanel.py b/InterfaceTK/plusieursbasepanel.py new file mode 100644 index 00000000..34af53e9 --- /dev/null +++ b/InterfaceTK/plusieursbasepanel.py @@ -0,0 +1,542 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import prefs +import panels +import images +from widgets import showinfo +from widgets import askopenfilename +from widgets import ListeChoix +from widgets import FenetreDeSelection +from widgets import FenetreDeParametre + +from Noyau.N_CR import justify_text +from Ihm.I_LASSD import LASSD +from Extensions.parametre import PARAMETRE + +from Editeur.utils import substract_list +from plusieurspanel import PLUSIEURS_Panel +from uniqueassdpanel import UNIQUE_ASSD_Panel + +import fontes +import math + +class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de donner une liste de valeurs qui ne sont pas + à choisir dans une liste discrètes et qui sont de type de base : + entier, réel, string,... + """ + def makeValeurPage(self,page): + """ + Crée la page de saisie d'une liste de valeurs à priori quelconques, + cad qui ne sont pas à choisir dans une liste prédéfinie + """ + #print "Methode Utilisée par Salome" + # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste), + # et la liste des valeurs déjà affectées à l'objet courant + bulle_aide=self.get_bulle_aide() + objet_mc = self.node.item.get_definition() + aide = self.get_aide() + aide = justify_text(texte=aide) + min,max = self.node.item.GetMinMax() + l_valeurs = self.node.item.GetListeValeurs() + + # création des frames globales + self.frame1 = Frame(page,relief='groove',bd=2) + self.frame2 = Frame(page) + self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85) + self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15) + self.frame_right = Frame(self.frame1) + self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.) + + # création des frames internes + self.frame_valeurs = Frame(self.frame1) + self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95) + self.frame_boutons_fleches = Frame(self.frame_right) + self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5) + self.frame_choix = Frame(self.frame_right) + self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.8) + self.frame_aide = Frame(self.frame_right) + self.frame_aide.place(relx=0.1,rely=0.8,relwidth=0.8,relheight=0.2) + self.frame_boutons = Frame(self.frame2) + self.frame_boutons.place(relx=0.2,rely=0.,relwidth=1,relheight=1.) + for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs, + self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons): + fram.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + fram.bind("",self.parent.appli.efface_aide) + + # création des objets dans les frames + liste_commandes_valeurs = (("",self.selectValeur), + ("",self.deselectValeur), + ("",self.sup_valeur_sans_into)) + self.Liste_valeurs=ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs, + titre="Valeur(s) actuelle(s)") + + # Création de l'entry ou de la liste des SD + # PN : pour ajouter les validators + self.label = Label(self.frame_choix,text="Valeur :") + self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base) + self.label.place(relx=0.05,rely=0.2) + + # Création d'un bouton "Importer ..." et d'un bouton "Paramatres" sur le panel. + bouton_valeurs_fichier = Button(self.frame_choix, + text="Importer", + command=self.select_in_file) + bouton_valeurs_fichier.place(relx=0.28,rely=0.4,relwidth=0.6) + bouton_parametres = Button(self.frame_choix, text="Parametres", command=self.affiche_parametre) + bouton_parametres.place(relx=0.28,rely=0.6,relwidth=0.6) + self.ajout_valeurs = None + + # boutons Ajouter et Supprimer + self.bouton_add = Button(self.frame_boutons_fleches, + image = images.get_image('arrow_left'), + command = self.add_valeur_plusieurs_base) + self.bouton_sup = Button(self.frame_boutons_fleches, + image = images.get_image('arrow_right'), + command = self.sup_valeur_sans_into) + self.bouton_add.place(relx=0.3,rely=0.35) + self.bouton_sup.place(relx=0.3,rely=0.65) + # affichage de l'aide + self.frame_aide.update() + self.aide = Label(self.frame_aide, + text = aide, + justify='center', + anchor='center', + wraplength=int(self.frame_aide.winfo_width()*0.8)) + self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1) + self.Liste_valeurs.affiche_liste() + if len(l_valeurs) > 0 : + liste_marque=l_valeurs[-1] + self.Liste_valeurs.surligne(liste_marque) + self.selectValeur(liste_marque) + # boutons Accepter et Annuler + self.bouton_accepter = Button(self.frame_boutons, + text='Valider', + command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M)) + self.bouton_annuler = Button(self.frame_boutons, + text = 'Annuler', + command = self.annule_modifs_valeur) + self.bouton_accepter.place(relx=0.2, rely=0.2,relwidth=0.25) + self.bouton_annuler.place(relx=0.5, rely=0.2,relwidth=0.25) + + def affiche_parametre(self) : + if self.node.item.get_liste_param_possible() != [ ]: + txtparam="" + for param in self.node.item.get_liste_param_possible(): + txtparam=txtparam+repr(param)+"\n" + if txtparam=="": + showerror("Aucun parametre ","Pas de parametre de ce type") + else : + try : + self.self.fenetreparam.destroy() + except: + pass + self.fenetreparam=FenetreDeParametre( self, self.node.item, self.parent.appli, txtparam) + + def valid_valeur(self): + self.add_valeur_plusieurs_base() + + def add_valeur_plusieurs_base(self,name=None): + if name != None : + valeur = name + else: + valeur,validite,commentaire=self.get_valeur() + if not validite : + self.parent.appli.affiche_infos(commentaire) + return + + atraiter=[] + if type(valeur) in (types.ListType,types.TupleType) : + indice = 0 + while (indice < len(valeur)): + v=valeur[indice] + if self.node.item.wait_complex : + if (v== 'RI' or v == 'MP'): + try : + t=tuple([v,valeur[indice+1],valeur[indice+2]]) + atraiter.append(t) + indice=indice+3 + except : + validite=0 + commentaire = "Veuillez entrer le complexe sous forme aster ou sous forme python" + self.parent.appli.affiche_infos(commentaire) + return + else : # ce n'est pas un tuple à la mode aster + atraiter.append(v) + indice = indice + 1 + else: # on n'attend pas un complexe + atraiter.append(v) + indice=indice+1 + else: + atraiter.append(valeur) + + for valeur in atraiter : + encorevalide=self.node.item.valide_item(valeur) + if encorevalide : + listecourante=self.Liste_valeurs.get_liste() + encorevalide=self.node.item.valide_liste_partielle(valeur,listecourante) + if not encorevalide : encorevalide = -1 + self.add_valeur_sans_into(valeur,encorevalide) + + def select_in_file(self): + """ Permet d'ouvrir un fichier choisi par l'utilisateur. """ + nom_fichier = askopenfilename(title="Choix fichier :") + + if not nom_fichier: + return + + try: + f = open(nom_fichier, "rb") + selection_texte = f.read() + f.close() + self.ajout_valeurs = FenetreDeSelection(self, + self.node.item, + self.parent.appli, + titre="Sélection de valeurs", + texte=selection_texte) + except: + traceback.print_exc() + showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier) + + def get_bulle_aide(self): + """ + Retourne l'aide associée au panneau courant + """ + return """Taper dans la boîte de saisie de droite la valeur que + vous voulez affecter au mot-clé simple. + - Cliquez sur la flèche gauche ou pressez pour la faire glisser + dans la liste des valeurs que vous voulez affecter au mot-clé simple + - Un clic sur une valeur de la liste la sélectionne + - Un clic sur la flèche droite ou un double-clic retire la valeur + sélectionnée de la liste + - Cliquez sur 'Valider' pour que la nouvelle valeur désirée soit affectée + au mot-clé simple + - Cliquez sur 'Annuler' pour annuler toutes les modifications faites + depuis le dernier clic sur 'Valider'""" + + def get_aide(self): + """ + Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs + que saisit l'utilisateur + """ + commentaire="" + mc = self.node.item.get_definition() + d_aides = { 'TXM' : 'chaînes de caractères', + 'R' : 'réels', + 'I' : 'entiers', + 'C' : 'complexes'} + type = mc.type[0] + if not d_aides.has_key(type) : return 'Type de base inconnu' + if mc.min == mc.max: + commentaire="Une liste de "+d_aides[type]+" de longueur " + `mc.min` + " est attendue" + else : + commentaire="Une liste de "+d_aides[type]+" est attendue (min="+`mc.min`+",max="+`mc.max`+')' + + aideval=self.node.item.aide() + commentaire=commentaire +"\n"+aideval + return commentaire + + def make_entry(self,frame,command,x=0.28,y=0.2): + self.entry = Entry(frame,relief='sunken') + self.entry.place(relx=0.28,rely=y,relwidth=0.6) + self.entry.bind("",lambda e,c=command:c()) + self.entry.bind("",lambda e,c=command:c()) + self.entry.focus() + + def get_valeur(self): + """ + Retourne la valeur saisie par l'utilisateur dans self.entry + """ + commentaire = "" + if hasattr(self,'entry'): + # Traitement d'une entree unique + valeurentree = self.entry.get() + if (valeurentree == None or valeurentree ==""): + return None,0,"" + + #On tente une evaluation globale (ne fait pas de vérification de validité + #seulement une transformation de la chaine en objet équivalent) + valeur,validite=self.node.item.eval_valeur(valeurentree) + if valeur == valeurentree: + #L'evaluation n'a rien donné : on a toujours la string + #on découpe la string sur le séparateur , si c'est possible + if valeurentree.find(',') != -1: + valeur=[] + for v in valeurentree.split(','): + vsimple,validite=self.node.item.eval_valeur(v) + valeur.append(vsimple) + + return valeur,validite,commentaire + + + # if (valeurentree[0] != "(") and (valeurentree.find(',') < len(valeurentree)): + # valeurs=[] + # for v in valeurentree.split(','): + # vsimple,validite=self.node.item.eval_valeur(v) + # Pn If ajoute pour le panneau "double" + #if isinstance(vsimple,LASSD) : + # commentaire = "impossible de mélanger reels et liste prédéfinie" + # validite = 0 + # break + # if validite : + # valeurs.append(vsimple) + # else: + # commentaire = "impossible d'évaluer : %s " %`valeurentree` + # break + # valeur=valeurs + # else: + # valeur,validite=self.node.item.eval_valeur(valeurentree) + # if not validite and commentaire == "": + # commentaire = "impossible d'évaluer : %s " %`valeurentree` + # return valeur,validite,commentaire + #else: + # # Traitement d'une entree de type complexe + # try: + # valeur= (self.typ_cplx.get(), + # string.atof(self.entry1.get()), + # string.atof(self.entry2.get())) + # return valeur,1,"" + # except: + # #traceback.print_exc() + # return None,0,"impossible d'évaluer la valeur d'entree" + + def erase_valeur(self): + """ + Efface la valeur donnée par l'utilisateur dans l'entry + """ + if hasattr(self,'entry'): + self.entry.delete(0,END) + else: + self.typ_cplx.set('RI') + self.entry1.delete(0,END) + self.entry2.delete(0,END) + + + def display_valeur(self,val=None): + """ + Affiche la valeur passée en argument dans l'entry de saisie. + Par défaut affiche la valeur du mot-clé simple + """ + if not val : + valeur = self.node.item.object.getval() + else: + valeur = val + if not valeur : return + + if hasattr(self,'entry'): + # Traitement d'une entree unique + self.entry.delete(0,END) + self.entry.insert(0,str(valeur)) + else: + # Traitement d'une entree de type complexe + typ_cplx,x1,x2=valeur + self.entry1.delete(0,END) + self.entry2.delete(0,END) + self.typ_cplx.set(typ_cplx) + self.entry1.setentry(x1) + self.entry2.setentry(x2) + +class PLUSIEURS_BASE_OR_UNELISTE_Panel(PLUSIEURS_BASE_Panel,UNIQUE_ASSD_Panel): + + def makeValeurPage(self,page): + """ + Crée la page de saisie d'une liste de valeurs à priori quelconques, + cad qui ne sont pas à choisir dans une liste prédéfinie + """ + # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste), + # et la liste des valeurs déjà affectées à l'objet courant + bulle_aide=self.get_bulle_aide() + objet_mc = self.node.item.get_definition() + aide = self.get_aide() + aide = justify_text(texte=aide) + aide2 = self.get_aide2() + aide2 = justify_text(texte=aide2) + min,max = self.node.item.GetMinMax() + l_valeurs = self.node.item.GetListeValeurs() + for i in l_valeurs: + if isinstance(i,LASSD) : + affiche_entry=l_valeurs + l_valeurs=() + + # Il faut traiter ici pour avoir le choix entre une liste + # deja constituee (listr8aster) ou manuelle + + # création des frames globales + self.frame1 = Frame(page,relief='groove',bd=2) + self.frame2 = Frame(page) + self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.9) + self.frame2.place(relx=0.,rely=0.9,relwidth=1,relheight=0.1) + + # création des frames internes dans frame1 + self.frame_valeurs = Frame(self.frame1) + self.frame_valeurs.place(relx=0.02,rely=0.55,relwidth=0.35,relheight=0.45) + self.frame_haut = Frame(self.frame1) + self.frame_haut.place(relx=0.02,rely=0.02,relwidth=0.98,relheight=0.45) + self.frame_bas = Frame(self.frame1) + self.frame_bas.place(relx=0.37,rely=0.55,relwidth=0.63,relheight=0.45) + + # création des frames internes dans frame_right + self.frame_fleches = Frame(self.frame_bas) + self.frame_fleches.place(relx=0.,rely=0.4,relwidth=0.2,relheight=0.5) + self.frame_choix = Frame(self.frame_bas) + self.frame_choix.place(relx=0.2,rely=0.1,relwidth=0.75,relheight=1) + + # affichage de l'aide + self.aide = Label(self.frame_haut, text = aide, justify='center', anchor='center',) + self.aide.place(relx=0.72,rely=0.25,anchor='center',relwidth=1) + self.aide2 = Label(self.frame2, text = aide2,) + self.aide2.place(relx=0.4,rely=0.01,relwidth=0.6) + + # Création d'un bouton "Importer ..." et d'un bouton "Parametres" sur le panel. + bouton_valeurs_fichier = Button(self.frame_choix, + text="Importer", + command=self.select_in_file) + bouton_valeurs_fichier.place(relx=0.28,rely=0.0,relwidth=0.6) + bouton_parametres = Button(self.frame_choix, text="Parametres", command=self.affiche_parametre) + bouton_parametres.place(relx=0.28,rely=0.25,relwidth=0.6) + self.ajout_valeurs = None + + + # Création de la liste des SD + liste_noms_sd = self.node.item.get_sd_avant_du_bon_type_pour_type_de_base() + liste_noms_sd = self.tri(liste_noms_sd) + self.listbox = Pmw.ScrolledListBox(self.frame_haut, + items=liste_noms_sd, + labelpos='n', + #label_text="Structures de données du type\n requis parl'objet courant :", + label_text="Listes du type\n requis parl'objet courant :", + listbox_height = 6, + dblclickcommand=lambda s=self,c=UNIQUE_ASSD_Panel.valid_valeur : s.choose_valeur_from_list(c)) + self.listbox.place(relx=0.00,rely=0.00,relwidth=0.4) + + # On eneleve le label pour gagner de la place + #self.label = Label(self.frame_choix,text="Valeur :") + #self.label.place(relx=0.05,rely=0.85) + self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base,x=0.28,y=0.55) + + # boutons Ajouter et Supprimer + bouton_add = Button(self.frame_fleches, image = images.get_image('arrow_left'), + command = self.add_valeur_plusieurs_base) + bouton_sup = Button(self.frame_fleches, image = images.get_image('arrow_right'), + command = self.sup_valeur_sans_into) + bouton_add.place(relx=0.2,rely=0.25) + bouton_sup.place(relx=0.2,rely=0.70) + + + # boutons Accepter et Annuler dans frame2 + bouton_accepter = Button(self.frame2, text='Valider', + command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M)) + bouton_annuler = Button(self.frame2, text = 'Annuler', + command = self.annule_modifs_valeur) + for but in (bouton_accepter,bouton_annuler): + but.pack(side='left',padx=5) + + # création des objets dans les frames + liste_commandes_valeurs = (("",self.selectValeur), + ("",self.deselectValeur), + ("",self.sup_valeur_sans_into)) + self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs, + liste_commandes = liste_commandes_valeurs, + titre="Valeur(s) non-prédéfinies(s)", + fonte_titre=None + ) + + for fram in (self.frame1,self.frame2,self.frame_bas,self.frame_haut,self.frame_valeurs, + self.frame_fleches,self.frame_choix): + fram.bind("",lambda e,s=self,a=bulle_aide: s.parent.appli.affiche_aide(e,a)) + fram.bind("",self.parent.appli.efface_aide) + + self.Liste_valeurs.affiche_liste() + if len(l_valeurs) > 0 : + liste_marque=l_valeurs[-1] + self.Liste_valeurs.surligne(liste_marque) + + def get_aide(self): + """ + Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs + saisies par l'utilisateur + """ + commentaire="Ce motclef accepte soit un nom de liste déja définie soit une liste manuelle de valeurs" + return commentaire + + def get_aide2(self): + min,max = self.node.item.GetMinMax() + aideval=self.node.item.aide() + commentaire="min : " + str(min) + ", max : " + str(max) + aideval=commentaire + aideval + return aideval + + def choose_valeur_from_list(self,command): + """ + Affecte à valeur choisie la sélection courante dans la liste des choix proposés + Exécute command + """ + self.Liste_valeurs.liste=[] + self.Liste_valeurs.affiche_liste() + if len(self.listbox.get()) == 0 : return + choix = self.listbox.getcurselection()[0] + d={} + d["valeurentree"]=choix + apply(command,(self,),d) + + + + def tri(self,liste_noms_sd): + a=(3+8j) + d_types = { 'TXM' : type('A'), + 'R' : type(3.), + 'I' : type(0), + 'C' : type(a)} + + # On enleve seulement ceux qu'on peut + # Sur certaines listes, il est possible qu'on ne + # sache pas déterminer le type + listefinale=[] + typespossibles=self.node.item.object.definition.type + typecherche = None + for t in typespossibles: + if t in d_types.keys() : + typecherche = d_types[t] + break + for liste in liste_noms_sd: + valeur,validite=self.node.item.eval_valeur(liste) + for mc in valeur.etape.mc_liste : + try : + if type(mc.valeur) in (types.ListType,types.TupleType) : + typeliste=type(mc.valeur[0]) + else : + typeliste=type(mc.valeur) + if type(mc.valeur[0]) == typecherche: + listefinale.append(liste) + except: + listefinale.append(liste) + return listefinale + diff --git a/InterfaceTK/plusieursintopanel.py b/InterfaceTK/plusieursintopanel.py new file mode 100644 index 00000000..d5ef1e15 --- /dev/null +++ b/InterfaceTK/plusieursintopanel.py @@ -0,0 +1,163 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import prefs +import panels +import images +from widgets import ListeChoix +from widgets import FenetreDeSelection + +from Noyau.N_CR import justify_text +from Editeur.utils import substract_list + +# Import des panels +from plusieurspanel import PLUSIEURS_Panel + +class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel): + """ + Classe servant à définir le panneau permettant d'afficher et de saisir une + liste de valeurs à choisir parmi une liste discrètes de valeurs possibles + """ + def makeValeurPage(self,page): + """ + Génère la page de saisie de plusieurs valeurs parmi un ensemble discret + de possibles + """ + self.ajout_valeurs = None + # On récupère la bulle d'aide du panneau, l'objet, min et max (cardinalité de la liste), + # la liste des choix et la liste des valeurs + aide = self.get_aide() + aide = justify_text(texte=aide) + bulle_aide=self.get_bulle_aide() + objet_mc = self.node.item.get_definition() + min,max = self.node.item.GetMinMax() + #l_choix=list(objet_mc.into) + l_valeurs = self.node.item.GetListeValeurs() + l_choix= self.node.item.get_liste_possible(l_valeurs) + # reinitialisation de l_valeurs + l_valeurs = self.node.item.GetListeValeurs() + + # remplissage du panneau + self.frame_valeurs = Frame(page) + self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7) + self.frame_boutons_fleches = Frame(page) + self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7) + self.frame_choix = Frame(page) + self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7) + self.frame_boutons = Frame(page) + self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=1,relheight=0.1) + self.frame_aide = Frame(page) + self.frame_aide.place(relx=0.1,rely=0.75,relwidth=1,relheight=0.15) + liste_commandes_valeurs = (("",self.selectValeur), + ("",self.deselectValeur), + ("",self.sup_valeur)) + liste_commandes_choix = (("",self.selectChoix), + ("",self.deselectChoix), + ("",self.add_choix)) + self.Liste_valeurs = ListeChoix(self,self.frame_valeurs, + l_valeurs,liste_commandes = liste_commandes_valeurs, + titre="Valeur(s) actuelle(s)") + self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix, + liste_commandes = liste_commandes_choix, + titre= "Valeurs possibles") + self.bouton_add = Button(self.frame_boutons_fleches, + #text="<--", + image = images.get_image('arrow_left'), + command = self.add_choix) + self.bouton_sup = Button(self.frame_boutons_fleches, + #text="-->", + image = images.get_image('arrow_right'), + command = self.sup_valeur) + self.bouton_accepter = Button(self.frame_boutons, + text='Valider', + command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M)) + self.bouton_annuler = Button(self.frame_boutons, + text = 'Annuler', + command = self.annule_modifs_valeur) + self.bouton_add.place(relx=0.3,rely=0.35) + self.bouton_sup.place(relx=0.3,rely=0.65) + for but in (self.bouton_accepter,self.bouton_annuler): + but.pack(side='left',padx=3) + self.Liste_valeurs.affiche_liste() + if len(l_valeurs) > 0 : + liste_marque=l_valeurs[-1] + self.Liste_valeurs.surligne(liste_marque) + self.selectValeur(l_valeurs[-1]) + self.Liste_choix.affiche_liste() + for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons): + fram.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + fram.bind("",self.parent.appli.efface_aide) + self.frame_aide.update() + self.aide = Label(self.frame_aide, + text = aide, + justify='center', + anchor='center') + #wraplength=int(self.frame_aide.winfo_width()*0.8)) + self.aide.place(relx=0.3,rely=0.5,anchor='center',relwidth=1) + + def get_aide(self): + """ + Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs + que saisit l'utilisateur + """ + commentaire="" + mc = self.node.item.get_definition() + d_aides = { 'TXM' : 'chaînes de caractères', + 'R' : 'réels', + 'I' : 'entiers', + 'C' : 'complexes'} + type = mc.type[0] + if not d_aides.has_key(type) : + if mc.min == mc.max: + return str(mc.min)+" valeur(s) est(sont) attendue(s)" + else : + return "entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs" + if mc.min == mc.max: + commentaire="Une liste de "+str(mc.min)+" "+d_aides[type]+" est attendue" + else : + commentaire="Entre "+str(mc.min)+" et "+str(mc.max)+" valeurs de type "+d_aides[type]+" sont attendues" + aideval=self.node.item.aide() + commentaire=commentaire + "\n" + aideval + return commentaire + + def get_bulle_aide(self): + """ + Retourne la bulle d'aide du panneau (affichée par clic droit) + """ + return """Un clic sur une valeur des deux listes la sélectionne. + - Un clic sur la flèche gauche stocke la valeur possible sélectionnée + dans la liste des valeurs que vous voulez affecter au mot-clé simple + - Un clic sur la flèche droite déstocke la valeur du mot-clé simple + sélectionnée (elle apparaît alors à nouveau comme choix possible + dans la liste des choix à droite) + - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées + au mot-clé simple courant + - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple + avant toute modification depuis le dernier 'Valider'""" + diff --git a/InterfaceTK/plusieurspanel.py b/InterfaceTK/plusieurspanel.py new file mode 100644 index 00000000..0a21907e --- /dev/null +++ b/InterfaceTK/plusieurspanel.py @@ -0,0 +1,177 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import prefs +import panels +import images +from widgets import ListeChoix +from widgets import FenetreDeSelection + +from Noyau.N_CR import justify_text +from Editeur.utils import substract_list + +# Import des panels +from newsimppanel import newSIMPPanel + + +class PLUSIEURS_Panel(newSIMPPanel): + """ + Classe virtuelle servant de classe mère à toutes celles définissant + un panneau pour un mot-clé simple qui attend une liste de valeurs + """ + def accepte_modifs_valeur(self,min,max,liste=None): + """ + Méthode qui récupère la liste des valeurs donnée par l'utilisateur + et l'affecte au mot-clé courant. + le parametre None n'est pas rempli sauf par l appel a partir de fonctionpanel + """ + if liste==None: + l1_valeurs = self.Liste_valeurs.get_liste() + else: + l1_valeurs = liste + + #nettoyage de la liste + l_valeurs=[] + for val in l1_valeurs : + if val != '' and val != None : + l_valeurs.append(val) + + longueur = len(l_valeurs) + if longueur < min or longueur > max : + self.parent.appli.affiche_infos("Valeur refusée : nombre d'éléments incorrect dans la liste") + return + if longueur > 1: + valeur = tuple(l_valeurs) + elif longueur == 1: + valeur = l_valeurs[0] + else: + valeur = None + + self.parent.appli.affiche_infos("Valeur acceptée") + self.record_valeur(valeur) + # fermeture de la fenêtre de sélection + if self.ajout_valeurs: + self.ajout_valeurs.quit() + + def annule_modifs_valeur(self): + """ + RAZ de la liste des valeurs (annule toutes les valeurs saisies par l'utilisateur) + """ + self.node.select() + # fermeture de la fenêtre de sélection + if self.ajout_valeurs: + self.ajout_valeurs.quit() + + def add_valeur_sans_into(self,name=None,encorevalide=1): + """ + Tente d'ajouter la valeur fournie (name) à la liste courante : + - si la valeur est acceptable, elle est ajoutée dans la liste des valeurs + - sinon elle est refusée + + encorevalide peut prendre les valeurs suivantes : + + - valeur 1 si le validateur trouve l item et la liste correctes + - valeur 0 si le validateur trouve la valeur de l item incorrecte + - valeur -1 si le validateur trouve la liste incorrecte + """ + valeur = name + commentaire="Valeur incorrecte : ajout à la liste refusé" + testvalide=1 + + # Pas de traitement des valeurs nulles ( a priori clic involontaire + if (valeur == None or valeur =="") : + commentaire = "Pas de saisie des valeurs nulles" + encorevalide = -2 + testtype=0 + else : + testtype,comment = self.node.item.object.verif_type(valeur) + if not testtype : + commentaire =comment + encorevalide=-2 + + if (encorevalide ==0) : + commentaire=self.node.item.info_erreur_item() + if (encorevalide == -1) : + commentaire=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() + if len(self.Liste_valeurs.get_liste()) >= max : + commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé" + + if testvalide and (encorevalide == 1): + min,max = self.node.item.GetMinMax() + + if testtype : + liste_valeurs = self.Liste_valeurs.get_liste() + if len(liste_valeurs) >= max : + commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé" + else : + if (self.Liste_valeurs.selection != None): + ligne=self.Liste_valeurs.cherche_selected_item() + liste_valeurs.insert(ligne,valeur) + else : + liste_valeurs.append(valeur) + try : + self.set_valeur_texte(str(self.entry.get())) + except : + pass + self.Liste_valeurs.put_liste(liste_valeurs) + self.erase_valeur() + commentaire="Nouvelle valeur acceptée" + else : + commentaire ="Type de la valeur incorrecte" + + self.parent.appli.affiche_infos(commentaire) + + def sup_valeur_sans_into(self,name=None): + """ + Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée + """ + try: + self.Liste_valeurs.remove_selected_item() + self.display_valeur(self.selected_valeur) + self.selected_valeur = None + except: + # la valeur sélectionnée n'est pas dans la liste + return + + def display_valeur(self,val=None): + """ + Affiche la valeur passée en argument dans l'entry de saisie. + Par défaut affiche la valeur du mot-clé simple + """ + if not val : + #valeur = self.node.item.getval() + valeur = self.node.item.object.getval() + else: + valeur = val + self.entry.delete(0,END) + if not valeur : return + self.entry.insert(0,str(valeur)) + diff --git a/InterfaceTK/readercata.py b/InterfaceTK/readercata.py new file mode 100644 index 00000000..b4d827ed --- /dev/null +++ b/InterfaceTK/readercata.py @@ -0,0 +1,444 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module sert à lire un catalogue et à construire + un objet CataItem pour Eficas. + Il s'appuie sur la classe READERCATA +""" +# Modules Python +import time +import os,sys,py_compile +import traceback +import cPickle +import Pmw +import re + +# Modules Eficas +from Editeur import analyse_catalogue +from Editeur import autre_analyse_cata +from Editeur import uiinfo +from Noyau.N_CR import CR +from widgets import showinfo,showerror +from widgets import Fenetre +import fontes + +from Editeur.utils import init_rep_cata_dev + + +class READERCATA: + + menu_defs=[ + ('Catalogue',[ + ("Rapport de validation catalogue",'visuCRCATA'), + ] + ) + ] + + button_defs=[] + + def __init__(self,appli,parent): + self.appli=appli + self.parent=parent + self.code=self.appli.code + self.appli.format_fichier.set('python') + self.version_code=self.appli.version_code + self.fic_cata=None + self.version_cata=None + self.OpenCata() + self.cataitem=None + + def OpenCata(self): + """ + Ouvre le catalogue standard du code courant, cad le catalogue présent + dans le répertoire Cata + """ + if self.appli.ihm == "TK" : + import splash + message1 = "Compilation des fichiers Eficas \n\n Veuillez patienter ..." + if self.appli.test == 0 and self.appli.ihm=="TK" : + splash._splash.configure(text = message1) + self.configure_barre(4) + + liste_cata_possibles=[] + for catalogue in self.appli.CONFIGURATION.catalogues: + if catalogue[0] == self.code : + liste_cata_possibles.append(catalogue) + + if len(liste_cata_possibles)==0: + showerror("Import du catalogue","Pas de catalogue defini pour le code %s" % self.code) + self.appli.quit() + sys.exit(1) + + if self.version_code is not None: + # La version a ete fixee + for cata in liste_cata_possibles: + if self.version_code == cata[1]: + self.fic_cata = cata[2] + self.appli.format_fichier.set(cata[3]) + elif len(liste_cata_possibles)==1: + self.fic_cata = liste_cata_possibles[0][2] + self.version_code = liste_cata_possibles[0][1] + self.appli.format_fichier.set(liste_cata_possibles[0][3]) + else: + # plusieurs catalogues sont disponibles : il faut demander à l'utilisateur + # lequel il veut utiliser ... + self.ask_choix_catalogue() + + if self.fic_cata == None : + print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code) + sys.exit(0) + + # Determinination du repertoire materiau + v_codeSansPoint=self.version_code + v_codeSansPoint=re.sub("\.","",v_codeSansPoint) + chaine="rep_mat_"+v_codeSansPoint + if hasattr(self.appli.CONFIGURATION,chaine): + a=getattr(self.appli.CONFIGURATION,chaine) + else : + try : + a=self.appli.CONFIGURATION.dRepMat[self.version_code] + except : + if self.code == "ASTER" : + print "Probleme avec le repertoire materiau" + a='.' + self.appli.CONFIGURATION.rep_mat=a + + # détermination de fic_cata_c et fic_cata_p + self.fic_cata_c = self.fic_cata + 'c' + self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py' + + # import du catalogue + if self.appli.test == 0 and self.appli.ihm=="TK" : + splash._splash.configure(text = "Debut import_cata: %d s" % time.clock()) + self.cata = self.import_cata(self.fic_cata) + self.update_barre() + if self.appli.test == 0 and self.appli.ihm=="TK" : + splash._splash.configure(text = "Fin import_cata: %d s" % time.clock()) + if not self.cata : + showerror("Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata) + self.appli.quit() + sys.exit(1) + # + # analyse du catalogue (ordre des mots-clés) + # + if self.appli.test == 0 and self.appli.ihm=="TK" : + splash._splash.configure(text = "Debut Retrouve_Ordre: %d s" % time.clock()) + # Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue + # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation + # des mots clés à la création + #self.Retrouve_Ordre_Cata_Standard() + self.Retrouve_Ordre_Cata_Standard_autre() + self.update_barre() + if self.appli.test == 0 and self.appli.ihm=="TK" : + splash._splash.configure(text = "Fin Retrouve_Ordre: %d s" % time.clock()) + # + # analyse des données liées à l'IHM : UIinfo + # + uiinfo.traite_UIinfo(self.cata) + self.update_barre() + + # + # traitement des clefs documentaires + # + self.traite_clefs_documentaires() + + # chargement et analyse des catalogues développeur (le cas échéant) + # + if self.appli.CONFIGURATION.isdeveloppeur == 'OUI' : + init_rep_cata_dev(self.fic_cata,self.appli.CONFIGURATION.path_cata_dev) + fic_cata_dev = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py') + if os.path.isfile(fic_cata_dev): + # il y a bien un catalogue développeur : il faut récupérer le module_object associé ... + test = self.compile_cata(fic_cata_dev,fic_cata_dev+'c') + if not test : + showinfo("Compilation catalogue développeur", + "Erreur dans la compilation du catalogue développeur") + self.cata = (self.cata,) + else: + self.cata_dev =self.import_cata(fic_cata_dev) + #self.Retrouve_Ordre_Cata_Developpeur() + self.Retrouve_Ordre_Cata_Developpeur_autre() + self.cata = (self.cata,self.cata_dev) + else: + self.cata = (self.cata,) + else: + self.cata = (self.cata,) + titreSuite=" avec le catalogue " + os.path.basename(self.fic_cata) + titre=self.appli.titre+titreSuite + if self.appli.top: + self.appli.top.title(titre) + self.appli.titre=titre + + + def import_cata(self,cata): + """ + Réalise l'import du catalogue dont le chemin d'accès est donné par cata + """ + if self.appli.test == 0 and self.appli.ihm=="TK" : + import splash + splash._splash.configure(text = "Chargement du catalogue") + nom_cata = os.path.splitext(os.path.basename(cata))[0] + rep_cata = os.path.dirname(cata) + sys.path[:0] = [rep_cata] + try : + o=__import__(nom_cata) + return o + except Exception,e: + traceback.print_exc() + return 0 + + def Retrouve_Ordre_Cata_Standard_autre(self): + """ + Construit une structure de données dans le catalogue qui permet + à EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue. + Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui + contient le nom des mots clés dans le bon ordre + """ + self.cata_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata) + + def Retrouve_Ordre_Cata_Standard(self): + """ + Retrouve l'ordre des mots-clés dans le catalogue, cad : + - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer + l'ordre des mots-clés dans le catalogue + - s'il n'a pas été modifié, relie le fichier pickle + """ + time1 = os.path.getmtime(self.fic_cata) + try : + time2 = os.path.getmtime(self.fic_cata_p) + except: + time2 = 0 + if time2 > time1 : + # l'objet catalogue n'a pas été modifié depuis le dernier "pickle" + self.Get_Ordre_Cata() + else : + # le catalogue a été modifié depuis le dernier "pickle" : + # il faut retrouver l'ordre du catalogue et refaire pickle + self.Get_Ordre_Cata(mode='cata') + self.appli.affiche_infos("Catalogue standard chargé") + + def Retrouve_Ordre_Cata_Developpeur(self): + """ + Retrouve l'ordre des mots-clés dans le catalogue, cad : + - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer + l'ordre des mots-clés dans le catalogue + - s'il n'a pas été modifié, relie le fichier pickle + """ + if self.code != 'ASTER' : return + fic_cata = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py') + message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev + if self.appli.test == 0 and self.appli.ihm=="TK" : + splash._splash.configure(text = message,barre='oui') + cata_dev_ordonne = analyse_cata.analyse_catalogue(self,self.fic_cata) + self.cata_dev_ordonne_cr = cata_dev_ordonne.cr + cata_dev_ordonne_dico = cata_dev_ordonne.entites + self.cata_ordonne_dico.update(cata_dev_ordonne_dico) + self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) + + def Retrouve_Ordre_Cata_Developpeur_autre(self): + """ + Retrouve l'ordre des mots-clés dans le catalogue, cad : + - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer + l'ordre des mots-clés dans le catalogue + - s'il n'a pas été modifié, relie le fichier pickle + """ + if self.code != 'ASTER' : return + message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev + if self.appli.test == 0 and self.appli.ihm=="TK": + splash._splash.configure(text = message,barre='oui') + cata_dev_ordonne_dico,self.appli.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata) + self.cata_ordonne_dico.update(cata_dev_ordonne_dico) + self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) + + def Get_Ordre_Cata(self,mode='pickle'): + """ + Retrouve l'ordre du catalogue : + - mode='pickle ': tente de relire le fichier pickle et sinon lance l'analyse du catalogue + - mode='cata' : force l'analyse du catalogue directement sans relire le pickle + """ + if mode == 'pickle' : + try: + f = open(self.fic_cata_p) + u = cPickle.Unpickler(f) + if self.appli.test == 0 and self.appli.ihm=="TK" : + splash._splash.configure(text = "Analyse du catalogue") + self.cata_ordonne_dico = u.load() + f.close() + except : + # on peut ne pas arriver à relire le fichier pickle s'il a été altéré + # ou (le plus probable) s'il a été créé sous un autre OS + self.Get_Ordre_Cata(mode='cata') + elif mode == 'cata': + if self.appli.test == 0 and self.appli.ihm=="TK" : + splash._splash.configure(text = "Analyse du catalogue",barre='oui') + cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata) + self.cata_ordonne_cr = cata_ordonne.cr + self.cata_ordonne_dico = cata_ordonne.entites + splash._splash.configure(text = "Sauvegarde des informations sur le catalogue") + f = open(self.fic_cata_p,'w+') + p = cPickle.Pickler(f) + p.dump(self.cata_ordonne_dico) + f.close() + else : + raise Exception("Appel à un mode inconnu de Get_Ordre_Cata : %s" % mode) + return + + def ask_choix_catalogue(self): + """ + Ouvre une fenêtre de sélection du catalogue dans le cas où plusieurs + ont été définis dans Accas/editeur.ini + """ + # construction du dictionnaire et de la liste des catalogues + self.dico_catalogues = {} + defaut = None + for catalogue in self.appli.CONFIGURATION.catalogues: + if catalogue[0] == self.code : + self.dico_catalogues[catalogue[1]] = catalogue + if len(catalogue) == 5 : + if catalogue[4]=='defaut' : defaut = catalogue[1] + liste_choix = self.dico_catalogues.keys() + liste_choix.sort() + # test si plusieurs catalogues ou non + if len(liste_choix) == 0: + showerror("Aucun catalogue déclaré pour %s" %self.code) + self.appli.quit() + sys.exit(1) + elif len(liste_choix) == 1: + self.fic_cata = self.dico_catalogues[liste_choix[0]][2] + self.version_code = liste_choix[0] + return + # création d'une boîte de dialogue modale + import splash + self.fenetre_choix_cata = Pmw.Dialog(splash._splash, #avec self.parent, ne marche pas sous Windows + buttons=('OK','ANNULER'), + defaultbutton = 'OK', + title = "Choix d'une version du code %s" %self.code, + command = self.chooseCata) + # construction des radioboutons + label = `len(liste_choix)`+' versions du code %s sont disponibles\n' %self.code + label = label + 'Veuillez choisir celle avec laquelle vous souhaitez travailler :' + self.radiobutton = Pmw.RadioSelect(self.fenetre_choix_cata.interior(), + buttontype='radiobutton', + labelpos = 'w', + label_text = label, + label_font = fontes.standard, + orient='vertical') + for choix in liste_choix : + self.radiobutton.add(choix) + if defaut == None : + # aucun catalogue par défaut n'a été spécifié dans Accas/editeur.ini + defaut = liste_choix[0] + self.radiobutton.invoke(defaut) + self.radiobutton.pack(fill='x',padx=10,pady=10) + # centrage de la fenêtre + self.fenetre_choix_cata.activate(geometry='centerscreenalways') + + def chooseCata(self,txt): + """ + Méthode activée lorsque l'utilisateur a fait son choix et cliqué sur 'OK' ou sur 'ANNULER' + """ + if txt == 'OK' : + version_cata = self.radiobutton.getcurselection() + self.fic_cata = self.dico_catalogues[version_cata][2] + self.version_code = version_cata + self.appli.format_fichier.set(self.dico_catalogues[version_cata][3]) + self.fenetre_choix_cata.destroy() + else: + self.parent.destroy() + + def compile_cata(self,cata,catac): + """ + Teste si le catalogue a bien besoin d'être recompilé et si oui, le compile et + affiche un message dans le splash . Retourne 1 si la compilation s'est bien déroulée, + 0 sinon. + """ + time1 = os.path.getmtime(cata) + try: + time2 = os.path.getmtime(catac) + except: + time2 = 0 + if time1 > time2: + try: + # le catalogue doit être recompilé avant d'être importé + if self.appli.test == 0 and self.appli.ihm=="TK" : + splash._splash.configure(text="Compilation du catalogue\nCela peut prendre plusieurs secondes ...") + py_compile.compile(cata) + except: + return 0 + return 1 + + +#-------------------------------------------------------------------------------- +# Méthodes concernant la barre de progression lors de l'analyse du catalogue +#-------------------------------------------------------------------------------- + + def configure_barre(self,nbcommandes): + """ Configure la barre de progression en lui passant comme paramètre le + nombre de commandes du catalogue qui lui sert à déterminer la longueur de son incrément """ + try: + if self.appli.test == 0 and self.appli.ihm=="TK" : + splash._splash.configure(barre='oui',ratio = nbcommandes) + except: + pass + + def update_barre(self): + """ Update la position de la barre de progression : la fait progresser de son incrément """ + try: + if self.appli.test == 0 and self.appli.ihm=="TK" : + splash._splash.update_barre() + except: + pass + + def visuCRCATA(self): + """ + Méthode permettant l'affichage du rapport de validation + """ + cr = CR( debut = "Début rapport de validation du catalogue", + fin = "Fin rapport de validation du catalogue") + titre="rapport de validation du catalogue" + if hasattr(self,'cata_ordonne_cr') : + cr.add(self.cata_ordonne_cr) + if hasattr(self,'cata_dev_ordonne_cr') : + cr.add(self.cata_dev_ordonne_cr) + for cata in self.cata: + if hasattr(cata,'JdC'): + cr.add(cata.JdC.report()) + texte_cr = str(cr) + self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr) + + + def traite_clefs_documentaires(self): + try: + self.fic_cata_clef=os.path.splitext(self.fic_cata_c)[0]+'_clefs_docu' + f=open(self.fic_cata_clef) + except: + #print "Pas de fichier associé contenant des clefs documentaires" + return + + dict_clef_docu={} + for l in f.readlines(): + clef=l.split(':')[0] + docu=l.split(':')[1] + docu=docu[0:-1] + dict_clef_docu[clef]=docu + for oper in self.cata.JdC.commandes: + if dict_clef_docu.has_key(oper.nom): + oper.docu=dict_clef_docu[oper.nom] diff --git a/InterfaceTK/shellpanel.py b/InterfaceTK/shellpanel.py new file mode 100644 index 00000000..b7682198 --- /dev/null +++ b/InterfaceTK/shellpanel.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +#import prefs +#import panels +#import images +#from widgets import ListeChoix +#from widgets import FenetreDeSelection + +from Noyau.N_CR import justify_text +from Editeur.utils import substract_list +from newsimppanel import newSIMPPanel + + +class SHELLPanel(newSIMPPanel): + """ + Classe Panel utilisé pour les mots-clés simples qui attendent un shell pour valeur + """ + + def makeValeurPage(self,page): + """ + Affiche la page concernant l'objet pointé par self qui attend un shell + """ + objet_mc = self.node.item.get_definition() + aide = self.gen_aide() + aide = justify_text(texte=aide) + self.frame = Frame(page) + self.frame.place(relx=0,rely=0,relwidth=1,relheight=1) + label_aide = Label(self.frame,text = aide) + label_aide.place(relx=0.5,rely=0.1,anchor='center') + self.text = Text(self.frame,bg='gray95') + self.text.place(relx=0.2,rely=0.2,relwidth=0.6,relheight=0.6) + but_val = Button(self.frame,text='Valider',command = self.valide_shell) + but_ann = Button(self.frame,text='Annuler',command = self.annule_shell) + but_val.place(relx=0.35,rely=0.9,anchor='center') + but_ann.place(relx=0.65,rely=0.9,anchor='center') + self.display_valeur() + + def gen_aide(self): + """ + Retourne une chaîne de caractères d'aide sur la valeur qu'attend l'objet + pointé par self + """ + return "Un shell est attendu" + + def valide_shell(self,event=None): + """ + Récupère la valeur saisie par l'utilisateur dans self.text + et la stocke dans l'objet MCSIMP courant + """ + texte = self.text.get(1.0,END) + self.record_valeur(texte) + + def annule_shell(self,event=None): + """ + Annule toute saisie dans self.text + """ + self.text.delete(0,END) + + def display_valeur(self,val=None): + """ + Affiche la valeur de l'objet pointé par self + """ + if val != None : + valeur = val + else: + valeur = self.node.item.get_valeur() + if valeur == None or valeur == '': return + self.text.insert(END,valeur) + diff --git a/InterfaceTK/splash.py b/InterfaceTK/splash.py new file mode 100644 index 00000000..2918ddfe --- /dev/null +++ b/InterfaceTK/splash.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module permet de créer, mettre à jour et détruire + un écran Splash +""" +from Tkinter import * + +from centerwindow import centerwindow +from Tools.foztools.foztools import Slider +import fontes +import images + +_splash=None + +def init_splash(*pos,**args): + global _splash + _splash=SplashScreen(*pos,**args) + +def fini_splash(): + global _splash + _splash.quit() + _splash=None + +class SplashScreen(Toplevel): + """ + Provides a splash screen. Usage: + Subclass and override 'CreateWidgets()' + In constructor of main window/application call + - S = SplashScreen(main=self) (if caller is Toplevel) + - S = SplashScreen(main=self.master) (if caller is Frame) + - S.quit() after you are done creating your widgets etc. + """ + def __init__(self, master=None,**args): + Toplevel.__init__(self, master, relief='groove', + borderwidth=5) + self.main = master + if self.main != None : + self.main.iconify() + self.withdraw() + self.frame = Frame(self) + self.frame.pack(expand=1,fill='both') + self.init(args) + self.geometry("300x200") + self.resizable(0,0) + centerwindow(self) + self.CreateWidgets() + self.deiconify() + + def init(self,args={}): + self.text = StringVar() + self.text.set('') + self.text2 = StringVar() + self.text2.set('') + self.icone = 'logo_edf.gif' + self.barre = 'non' + if args == {} : return + if args.has_key('text'): + self.text.set(args['text']) + if args.has_key('info'): + self.text2.set(args['info']) + if args.has_key('titre'): + self.title(args['titre']) + if args.has_key('code'): + self.code = args['code'] + else: + self.code = 'inconnu' + if args.has_key('icone'): + self.icone = args['icone'] + if self.code == 'ASTER' : + self.icone = 'code_aster.gif' + elif self.code == 'SATURNE': + self.icone = 'code_saturne.gif' + elif self.code == 'DESCARTES': + self.icone = 'code_descartes.gif' + + def CreateWidgets(self): + self.catIcon = images.get_image(self.icone) + self.label = Label(self.frame, image=self.catIcon) + self.label.pack(side=TOP) + self.label = Label(self.frame, textvariable=self.text,font = fontes.standard_gras) + self.label.pack(side=TOP,expand=1,fill='both') + self.label2 = Label(self.frame, textvariable=self.text2,font = fontes.standard_italique) + self.label2.pack(side=TOP,expand=1,fill='both') + self.progress = Slider(self.frame,value=0,max=100,orientation='horizontal', + fillColor='#00008b',width=200,height=30, + background='white',labelColor='red') + centerwindow(self) + + def update_barre(self,event=None): + """ Permet de faire avancer la barre de progression """ + try: + self.progress.value = self.progress.value+self.increment + self.progress.update() + except: + pass + + def configure_barre(self): + """ + Calcule l'incrément de progression de la barre en fonction + du nombre d'opérations à effectuer afin que le compteur + soit à 100% à la fin des opérations + """ + self.increment = 100./self.ratio + self.progress.update() + + def configure(self,**args): + if args.has_key('text'): + self.text.set(args['text']) + if args.has_key('info'): + self.text2.set(args['info']) + if args.has_key('titre'): + self.title(args['titre']) + if args.has_key('barre'): + old = self.barre + self.barre = args['barre'] + if self.barre == 'oui' and old == 'non': + self.progress.frame.pack(in_=self.frame,side='top') + elif self.barre == 'non' and old == 'oui': + self.progress.frame.pack_forget() + if args.has_key('ratio'): + self.ratio = args['ratio'] + self.configure_barre() + self.update() + + def quit(self): + self.progress = None + self.destroy() + if self.main: + centerwindow(self.main,parent='sans') + self.main.deiconify() + diff --git a/InterfaceTK/statusbar.py b/InterfaceTK/statusbar.py new file mode 100644 index 00000000..e3b809b8 --- /dev/null +++ b/InterfaceTK/statusbar.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" +""" +# Modules Python +import Tkinter +import types + +class STATUSBAR: + def __init__(self,parent,police): + self.parent=parent + self.police=police + self.frame = Tkinter.Frame(parent,bd=1, relief=Tkinter.RAISED) + self.frame.pack(side=Tkinter.BOTTOM, fill=Tkinter.X) + self.label = Tkinter.Label (self.frame, + fg='black', + text='', + justify='left', + relief='sunken', + height=3, + bg='gray95') + self.label.pack(side='left',expand=1,fill='both') + + def affiche_infos(self,texte): + if len(texte)>150 : + texte_infos=texte[0:150] + else : + texte_infos=texte + self.label.configure(text=texte_infos,font=self.police) + + def reset_affichage_infos(self): + """ Efface tout message présent dans le panneau en bas d'EFICAS """ + self.affiche_infos('') + diff --git a/InterfaceTK/styles.py b/InterfaceTK/styles.py new file mode 100644 index 00000000..2d5fc4a2 --- /dev/null +++ b/InterfaceTK/styles.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +import os +import prefs +import basestyle +from basestyle import STYLE,style + +inistylefile=os.path.join(prefs.REPINI,"style.py") +if os.path.isfile(inistylefile): + execfile(inistylefile) + +userstylefile=os.path.expanduser("~/Eficas_install/style.py") +if os.path.isfile(userstylefile): + execfile(userstylefile) + +import fontes +for attr in dir(style): + if attr[0]=='_':continue + if not hasattr(fontes,attr):continue + setattr(fontes,attr,getattr(style,attr)) + + diff --git a/InterfaceTK/toolbar.py b/InterfaceTK/toolbar.py new file mode 100644 index 00000000..74248a09 --- /dev/null +++ b/InterfaceTK/toolbar.py @@ -0,0 +1,145 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" +""" +# Modules Python +import string +from Tkinter import * +import Pmw + +# Modules Eficas +import images + +class TOOLBAR: + def __init__(self,appli,parent): + # parent représente l'objet graphique parent + self.parent=parent + # appli représente l'objet application parent + self.appli=appli + self.balloon = None + self.l_boutons_a_activer = [] + self.barreboutons=Frame(self.parent,relief='ridge',bd=2) + self.barreboutons.pack(anchor='nw',expand=0,fill=X) + # bouton Infos à l'extrême droite de la barre des boutons + b = Button(self.barreboutons, + image = images.get_image('About24'), + command = self.view_infos) + b.pack(side='right') + texte = "Infos EFICAS" + b.bind("",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t,pos='right')) + b.bind("", self.efface_balloon) + + def appelle_commande(self,e,b,c): + try : + c() + except : + pass + + def inactive_boutons(self): + """ + Inactive les boutons de la liste self.l_boutons_a_activer + --> cette méthode est appelée dès qu'il n'y a pas de JDC courant + """ + for but in self.l_boutons_a_activer: + but.configure(state='disabled') + + def active_boutons(self): + """ + Active les boutons de la liste self.l_boutons_a_activer + --> cette méthode est appelée dès qu'il y a un JDC courant + """ + for but in self.l_boutons_a_activer: + but.configure(state='normal') + + def affiche_balloon(self,event,bouton,bulle,pos='left'): + """ + Affiche le balloon bulle associé au bouton bouton + """ + etat = bouton.cget('state') + if etat != 'normal' : return + geom = bouton.winfo_geometry() + l_args = string.split(geom,'+') + x = eval(l_args[1])+event.x+10 + self.balloon = Label(self.parent, + text = bulle, + background="yellow", + borderwidth=2, + relief='ridge') + if pos == 'left': + self.balloon.place(in_=self.parent,x=x,y=32) + else: + self.balloon.place(in_=self.parent,x=x,y=32,anchor='ne') + + def efface_balloon(self,event=None): + """ + Efface le balloon courant + """ + if self.balloon : + self.balloon.destroy() + self.balloon = None + + def view_infos(self): + """ + Permet d'afficher des infos sur la session courante d'EFICAS + """ + self.fen_infos = Pmw.Dialog(self.parent, + title = 'Informations session EFICAS', + buttons = ('Fermer',), + command = self.close_infos) + self.fen_infos.withdraw() + texte_infos = self.appli.get_texte_infos() + Label(self.fen_infos.interior(), + text = texte_infos, + anchor='center').pack(side='top',anchor='center') + self.fen_infos.activate(geometry = 'centerscreenalways') + + def close_infos(self,lbl): + """ + Ferme la fenêtre des infos + """ + self.fen_infos.destroy() + + def creer_boutons_appli_composant(self,l_boutons,appli_composant): + for bouton in l_boutons : + if not bouton : + # on veut afficher un bouton vide (=espace entre boutons) + Button(self.barreboutons, + image = images.get_image('Sep'), + state='disabled', + relief = 'flat').pack(side='left') + continue + nom_fic,commande,texte,statut = bouton + commande=getattr(appli_composant,commande) + b = Button(self.barreboutons, + image = images.get_image(nom_fic), + command = commande, + relief='flat') + b.pack(side='left') + b.bind("",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t)) + b.bind("", self.efface_balloon) + b.bind("", lambda e,s=self,but=b,c=commande:s.appelle_commande(e,but,c)) + if statut != 'always': + self.l_boutons_a_activer.append(b) + + # inactive les boutons qui doivent l'être tant qu'aucun JDC courant + self.inactive_boutons() + + diff --git a/InterfaceTK/tooltip.py b/InterfaceTK/tooltip.py new file mode 100644 index 00000000..18fbabb5 --- /dev/null +++ b/InterfaceTK/tooltip.py @@ -0,0 +1,127 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module propose la classe TOOLTIP pour + mettre en oeuvre les bulles d'aide +""" + +import Tkinter +import types + +def destruct(obj): + # assist in breaking circular references + if obj is not None: + assert type(obj) is types.InstanceType + for k in obj.__dict__.keys(): + obj.__dict__[k] = None + ##del obj.__dict__[k] + +def after(widget, ms, func, *args): + timer = apply(widget.after, (ms, func) + args) + command = widget._tclCommands[-1] + return (timer, command, widget) + +def after_cancel(t): + if t is not None: + t[2].after_cancel(t[0]) + try: + t[2].deletecommand(t[1]) + except Tkinter.TclError: + pass + +class TOOLTIP: + def __init__(self,widget,text=None): + self.widget=widget + self.text = text + self.timer = None + self.tooltip = None + self.label = None + self.bindings = [] + self.bindings.append(self.widget.bind("", self._enter)) + self.bindings.append(self.widget.bind("", self._leave)) + self.bindings.append(self.widget.bind("", self._leave)) + # user overrideable settings + self.time = 1000 # milliseconds + self.relief = Tkinter.SOLID + self.justify = Tkinter.LEFT + self.fg = "#000000" + self.bg = "#ffffe0" + self.xoffset = 20 + self.yoffset = 1 + + def setText(self, text): + self.text = text + + def _unbind(self): + if self.bindings and self.widget: + self.widget.unbind("", self.bindings[0]) + self.widget.unbind("", self.bindings[1]) + self.widget.unbind("", self.bindings[2]) + self.bindings = [] + + def destroy(self): + self._unbind() + self._leave() + + def _enter(self, *event): + after_cancel(self.timer) + self.timer = after(self.widget, self.time, self._showTip) + + def _leave(self, *event): + after_cancel(self.timer) + self.timer = None + if self.tooltip: + self.label.destroy() + destruct(self.label) + self.label = None + self.tooltip.destroy() + destruct(self.tooltip) + self.tooltip = None + + def _showTip(self): + if self.tooltip or not self.text: + return + c = self.widget.__class__ + if c in (Tkinter.Button,): + if self.widget["state"] == Tkinter.DISABLED: + return + x = self.widget.winfo_rootx() + y = self.widget.winfo_rooty() + self.widget.winfo_height() + x = x + self.xoffset + y = y + self.yoffset + self.tooltip = Tkinter.Toplevel() + self.tooltip.wm_iconify() + self.tooltip.wm_overrideredirect(1) + self.tooltip.wm_protocol("WM_DELETE_WINDOW", self.destroy) + self.label = Tkinter.Label(self.tooltip, text=self.text, + relief=self.relief, justify=self.justify, + fg=self.fg, bg=self.bg, bd=1, takefocus=0) + self.label.pack(ipadx=1, ipady=1) + self.tooltip.wm_geometry("%+d%+d" % (x, y)) + self.tooltip.wm_deiconify() + +if __name__ == "__main__": + root=Tkinter.Tk() + label = Tkinter.Label(root, text="coucou") + label.pack() + tp=TOOLTIP(label,"texte d'aide") + root.mainloop() + diff --git a/InterfaceTK/treeitemincanvas.py b/InterfaceTK/treeitemincanvas.py new file mode 100644 index 00000000..db38e98f --- /dev/null +++ b/InterfaceTK/treeitemincanvas.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" +""" +# Modules Python +import Tkinter,Pmw + +# Modules Eficas +from Editeur import Objecttreeitem +import treewidget +Objecttreeitem.TreeItem.itemNode=treewidget.Node + +class TREEITEMINCANVAS: + def __init__(self,object,nom="",parent=None,appli=None,sel=None,rmenu=None): + self.object=object + self.nom=nom + + if not appli: + class Appli: + def affiche_infos(self,message): + pass + appli=Appli() + self.appli=appli + + if not parent: + parent=Tkinter.Tk() + Pmw.initialise(parent) + self.parent=parent + + self.item=Objecttreeitem.make_objecttreeitem(self.appli,self.nom,self.object) + self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1,canvas_background='gray95') + self.canvas.pack(padx=10,pady=10,fill = 'both', expand = 1) + if not sel: + def sel(event=None): + return + self.tree=treewidget.Tree(self.appli,self.item,self.canvas,command=sel,rmenu=rmenu) + self.tree.draw() + + def mainloop(self): + self.parent.mainloop() + + def update(self): + """Cette methode est utilisee pour signaler une mise a jour des objets associes""" + self.tree.update() + + def supprime(self): + #print "supprime",self + self.tree.supprime() + self.tree=None + self.canvas.destroy() + self.canvas=None + + #def __del__(self): + # print "__del__",self + diff --git a/InterfaceTK/treewidget.py b/InterfaceTK/treewidget.py new file mode 100644 index 00000000..9768ada6 --- /dev/null +++ b/InterfaceTK/treewidget.py @@ -0,0 +1,948 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +import os,sys,string,re,types,traceback +from Tkinter import * + + +import fontes +import images +from Ihm import CONNECTOR + +# +__version__="$Name: V1_14 $" +__Id__="$Id: treewidget.py,v 1.1.4.4.4.1 2008-10-10 13:47:11 pnoyret Exp $" +# + +Fonte_Standard = fontes.standard + +class Tree : + def __init__(self,appli,jdc_item,scrolledcanvas,command = None,rmenu=None): + self.item = jdc_item + self.scrolledcanvas = scrolledcanvas + self.canvas = self.scrolledcanvas.component('canvas') + #resolution + resolution= self.canvas.winfo_screenwidth()/(self.canvas.winfo_screenmmwidth()/25.4*72) + self.DDY=max(20,resolution*(Fonte_Standard[1]+4)) + self.id_up=self.canvas.bind("", self.page_up) + self.id_down=self.canvas.bind("", self.page_down) + self.id_um=self.canvas.bind("", self.mot_up) + self.id_dm=self.canvas.bind("", self.mot_down) + self.id_s=self.canvas.bind("<1>", self.canvas_select) + self.tree = self + self.command = command + self.rmenu=rmenu + self.appli = appli + self.parent = None + self.racine = self + self.node_selected = None + self.build_children() + + def canvas_select(self,event): + self.canvas.focus_set() + + def page_up(self,event): + event.widget.yview_scroll(-1, "page") + + def page_down(self,event): + event.widget.yview_scroll(1, "page") + + def unit_up(self,event): + event.widget.yview_scroll(-1, "unit") + + def unit_down(self,event): + event.widget.yview_scroll(1, "unit") + + def mot_down(self,event): + self.select_next(None) + self.canvas.focus_set() + + def mot_down_force(self): + self.select_next(None) + self.canvas.focus_set() + + def mot_up(self,event): + self.node_selected.select_mot_previous() + self.canvas.focus_set() + + def mot_up_force(self): + self.node_selected.select_mot_prev() + self.canvas.focus_set() + + def deplieReplieNode(self): + self.node_selected.deplieReplieNode() + + def build_children(self): + """ Construit la liste des enfants de self """ + self.children = [] + child = self.item.itemNode(self,self.item,self.command,self.rmenu) + self.children.append(child) + child.state='expanded' + + def draw(self): + """ Dessine l'arbre """ + lasty = 8 + x = 5 + for child in self.children: + child.draw(x,lasty) + lasty = child.lasty + 15 + self.children[0].select() + self.resizescrollregion() + + def deselectall(self): + """ déselectionne tous les éléments de l'arbre """ + if self.node_selected : + self.node_selected.deselect() + + def update(self): + """ Update tous les éléments de l'arbre """ + for child in self.children: + child.update() + + def supprime(self): + """ supprime tous les éléments de l'arbre """ + #print "supprime",self + self.canvas.unbind("",self.id_up) + self.canvas.unbind("",self.id_down) + self.canvas.unbind("",self.id_um) + self.canvas.unbind("",self.id_dm) + self.canvas.unbind("<1>",self.id_s) + self.tree = None + self.racine = None + self.node_selected = None + self.item = None + self.scrolledcanvas = None + self.canvas = None + self.command = None + self.rmenu=None + for child in self.children: + child.supprime() + self.children=[] + + def update_valid(self) : + """Cette methode a pour but de mettre a jour la validite du noeud + et de propager la demande de mise à jour à son parent + """ + pass + + def resizescrollregion(self): + x0,y0,x1,y1=self.canvas.bbox(ALL) + # On ajoute une marge approximativement de la moitié du canvas + y1=y1+self.canvas.winfo_height()/2 + self.canvas.configure(scrollregion = (x0,y0,x1,y1)) + + def select_next(self,event): + self.node_selected.select_next() + self.canvas.focus_set() + + def select_previous(self,event): + self.node_selected.select_previous() + + def see(self,items): + x1, y1, x2, y2=apply(self.canvas.bbox, items) + while x2 > self.canvas.canvasx(0)+self.canvas.winfo_width(): + old=self.canvas.canvasx(0) + self.canvas.xview_scroll( 1, 'units') + # avoid endless loop if we can't scroll + if old == self.canvas.canvasx(0): + break + while y2 > self.canvas.canvasy(0)+self.canvas.winfo_height(): + old=self.canvas.canvasy(0) + self.canvas.yview_scroll( 1, 'units') + if old == self.canvas.canvasy(0): + break + # done in this order to ensure upper-left of object is visible + while x1 < self.canvas.canvasx(0): + old=self.canvas.canvasx(0) + self.canvas.xview_scroll( -1, 'units') + if old == self.canvas.canvasx(0): + break + while y1 < self.canvas.canvasy(0): + old=self.canvas.canvasy(0) + self.canvas.yview_scroll( -1, 'units') + if old == self.canvas.canvasy(0): + break + + #def __del__(self): + # print "__del__",self + + +class Node : + def __init__(self,parent,item,command=None,rmenu=None): + self.parent = parent + self.item = item + self.connect() + self.command = command + self.rmenu=rmenu + self.tree = self.parent.tree + self.appli = self.parent.appli + self.canvas = self.parent.canvas + self.init() + + def init(self): + self.state='collapsed' + self.displayed = 0 + self.selected = 0 + self.x = self.y =None + self.lasty = 0 + self.children = None + self.id = [] + if self.parent is self.tree: + self.racine=self + else: + self.racine = self.parent.racine + + def connect(self): + self.item.connect("add",self.onAdd,()) + self.item.connect("supp",self.onSupp,()) + self.item.connect("valid",self.onValid,()) + + #def __del__(self): + # print "__del__",self + + def force_select(self): + if self.selected: + # le noeud est selectionné. On force la reconstruction du panel associé + if self.command:apply(self.command,(None,)) + self.select() + + def onValid(self): + #print "onValid : l'item a changé de validité ",self.item,self.item.object,self.item.object.isvalid() + self.update_node_valid() + self.update_node_label() + self.update_node_texte() + if self.selected and self.command: + self.command(self) + + def onAdd(self,objet): + #print "onAdd : un objet a été ajouté aux fils de l'item ",self.item.object,objet + self.expand_node() + old_nodes=self.children + self.update_nodes() + self.redraw_children(old_nodes) + self.force_select() + + def onSupp(self,objet): + #print "onSupp : un objet a été supprimé des fils de l'item ",self.item.object,objet + self.expand_node() + old_nodes=self.children + self.update_nodes() + self.redraw_children(old_nodes) + self.force_select() + + def update_nodes(self): + #print "update_nodes",self + newnodes=[] + inodes=iter(self.children) + sublist=self.item._GetSubList() + iliste=iter(sublist) + + while(1): + old_item=item=None + for node in inodes: + old_item=node.item + if old_item in sublist:break + #print "item supprime",old_item + for item in iliste: + if item is old_item:break + #print "item ajoute",item + child = item.itemNode(self,item,self.command,self.rmenu) + newnodes.append(child) + + if old_item is None and item is None:break + if old_item is item: + #print "item conserve",item + newnodes.append(node) + + self.children=newnodes + self.connect() + + def supprime(self): + #print "supprime",self + self.efface_node() + self.racine = None + self.command = None + self.rmenu=None + if not self.children : return + for child in self.children: + child.supprime() + self.children=None + + def redraw_children(self,old_nodes): + #print "redraw_children",old_nodes + #print self.children + y = self.y + self.tree.DDY + x = self.x + 15 + supp_nodes=[] + + inodes=iter(old_nodes) + iliste=iter(self.children) + # on parcourt la liste des anciens noeuds (node) + # et la liste des nouveaux noeuds (new_node) en parallele (iterateurs) + + while(1): + new_node=node=None + for node in inodes: + #print "ancien noeud",node + if node in self.children:break # ancien noeud toujours present + #print "noeud supprime",node,node.item.GetLabelText()[0] + dy=node.y-node.lasty -self.tree.DDY + #print "deplacer noeuds",y,dy + node.move_nodes(y,dy) + node.supprime() + #supp_nodes.append(node) + + for new_node in iliste: + #print "nouveau noeud",new_node + if new_node in old_nodes: break # nouveau noeud deja present + #print "noeud ajoute",new_node,new_node.item.GetLabelText()[0] + y=self.draw_node(new_node,x,y) + + if node is None and new_node is None : break + + if node is new_node: # ancien noeud + #print "noeud conserve",node + node.update_node_label() + y=y+node.lasty-node.y +self.tree.DDY + + self.racine.update_coords() + self.canvas.delete('line') + self.racine.trace_ligne() + self.tree.resizescrollregion() + # Mettre à 1 pour verifier les cycles entre objets node + #withCyclops=0 + #if withCyclops: + #from Misc import Cyclops + #z = Cyclops.CycleFinder() + #print supp_nodes + #for o in supp_nodes: + #z.register(o) + #del supp_nodes + #del o + #z.find_cycles() + #z.show_stats() + #z.show_cycles() + + def tag_move_nodes(self,y): + """ Marque pour deplacement tous les noeuds au dela de l'ordonnée y """ + #print "tag_move_nodes",y + self.canvas.dtag(ALL,'move') + # on marque tous les ids au dela de y + x0, y0, x1, y1 = self.canvas.bbox(ALL) + if y > y1: # pas d'objet a deplacer + return + self.canvas.addtag_overlapping('move',x0,y,x1,y1) + + def move_nodes(self,y,dy): + """ Déplace de l'incrément dy les noeuds au dela de l'ordonnée y """ + #print "move_nodes",y,dy + self.tag_move_nodes(y) + # on déplace tous les items de dy + self.canvas.move('move',0,dy) + + def draw_node(self,new_node,x,y): + """ Dessine le noeud new_node en x,y en deplacant les noeuds existants + en y et au dela + Retourne la position du premier des noeuds deplaces + """ + #print "draw_node",new_node,x,y + self.tag_move_nodes(y) + #if new_node.item.isactif(): + #new_node.state = 'expanded' + new_node.state = 'expanded' + new_node.draw(x,y) + dy=(new_node.get_nb_children()+1)*self.tree.DDY + #print "deplacer noeuds",y,dy + self.canvas.move('move',0,dy) + return new_node.lasty+self.tree.DDY + + def build_children(self): + """ Construit la liste des enfants de self """ + self.children = [] + sublist = self.item._GetSubList() + if not sublist : return + for item in sublist : + child = item.itemNode(self,item,self.command,self.rmenu) + self.children.append(child) + + #----------------------------------------------- + # Méthodes de sélection/déselection d'un noeud + #----------------------------------------------- + + def select(self, event=None): + """ + Rend le noeud courant (self) sélectionné et déselectionne + tous les autres + """ + #print "SELECT",self + if not self.children : self.build_children() + self.tree.deselectall() + self.selected = 1 + self.tree.node_selected = self + if self.command:apply(self.command,(self,)) + self.highlight() + self.make_visible() + + def deselect(self, event=None): + """ Déselectionne self """ + self.selected = 0 + if self.displayed == 1 : self.dehighlight() + + def make_visible(self): + """ Rend l'objet self visible cad déplace le scroll pour que self + soit dans la fenêtre de visu + """ + lchild=self.last_child() + self.tree.see((self.image_id,lchild.image_id)) + + def select_next(self,ind=0): + """ on doit chercher à sélectionner dans l'ordre: + - son premier fils s'il est affiché + - son frère cadet s'il existe + - son oncle (benjamin de son père) + - ... appel récursif ... + """ + if self.state=='expanded' and len(self.children) > ind: + self.children[ind].select() + else : + index = self.parent.children.index(self) + 1 + try : + if isinstance(self.parent,TREE) : + try: + self.children[ind].select() + except: + self.children[0].select() + except : + if self.parent is self.tree: + pass + else : + self.parent.select_next(index) + + def select_mot_prev(self): + index = self.parent.children.index(self) - 1 + try : + if index > -1 : + self.parent.children[index].select() + if self.parent.children[index].state=="expanded": + print len(self.parent.children[index].children) + if len(self.parent.children[index].children)!=0 : + max=len(self.parent.children[index].children) - 1 + self.parent.children[index].children[max].select() + else : + self.parent.children[index].select() + else : + self.parent.children[index].select() + elif self.parent is self.tree: + pass + else : + self.parent.select() + except: + if self.parent is self.tree: + pass + else : + self.parent.select_previous() + + + def select_mot_previous(self): + index = self.parent.children.index(self) - 1 + try : + if index > -1 : + self.parent.children[index].select() + elif self.parent is self.tree: + pass + else : + self.parent.select() + except: + if self.parent is self.tree: + pass + else : + self.parent.select_previous() + + def select_previous(self): + """ on doit d'abord sélectionner(dans l'ordre) : + - son frère aîné + - son père + """ + index = self.parent.children.index(self) - 1 + try : + self.parent.children[index].select() + except: + #self.parent.select() + if self.parent is self.tree: + pass + else : + self.parent.select_previous() + + def popup(self,event=None): + """ + Declenche le traitement associé au clic droit de la souris + sur l'icone du Node + """ + if not self.rmenu:return + apply(self.rmenu,(self,event)) + + #----------------------------------------------- + # Méthodes de recherche d'informations + #----------------------------------------------- + def geticonimage(self,name=None): + """ + Retourne l'image qui doit être associée à self + """ + if not name : + name = self.item.GetIconName() + if not name or name == 'aucune' : + return None + return images.get_image(name) + + def get_nb_children(self): + """ Retourne le nombre d'enfants affichés de self """ + nb = 0 + if self.state =='collapsed' : return nb + for child in self.children : + nb = nb + 1 + child.get_nb_children() + return nb + + def get_liste_id(self): + """ Retourne la liste de tous les id (filiation comprise) de self """ + liste = self.id + for child in self.children: + liste.extend(child.get_liste_id()) + return liste + + def get_node_fils(self,name) : + """ Retourne le fils de self de nom name s'il existe""" + for child in self.children: + if child.item.get_nom() == name: return child + return None + + #----------------------------------------------- + # Méthodes d'affichage d'un noeud + #----------------------------------------------- + def draw(self,x,y): + """ Permet de tracer le noeud self """ + # le début du noeud est en x,y + self.x = x + self.y = y + self.lasty = y + self.displayed = 1 + self.id=[] + # choix de l'icone à afficher : + ou - + if self.item.IsExpandable(): + if self.state == 'expanded': + iconname = "minusnode" + callback = self.collapse + else: + iconname = "plusnode" + callback = self.expand + image = self.geticonimage(name=iconname) + self.icone_id = self.canvas.create_image(self.x, self.y, image=image) + self.callback_id=self.canvas.tag_bind(self.icone_id, "<1>", callback) + self.id.append(self.icone_id) + # création de la ligne horizontale + self.ligne_id = self.canvas.create_line(self.x,self.y,self.x+10,self.y) + self.id.append(self.ligne_id) + self.canvas.tag_lower(self.ligne_id) + # affichage de l'icone (carre ,rond, ovale ...) de couleur + image = self.geticonimage() + if image != None : + self.image_id = self.canvas.create_image(self.x+15,self.y,image = image) + self.select_id2=self.canvas.tag_bind(self.image_id,"<1>",self.select) + self.popup_id2=self.canvas.tag_bind(self.image_id,"<3>",self.popup) + self.id.append(self.image_id) + else: + self.image_id = None + # affichage du texte : nom de l'objet (ETAPE ou MOT-CLE) et sa valeur + self.drawtext() + if self.state == 'expanded' : + if not self.children : self.build_children() + if len(self.children) > 0: + self.drawchildren() + self.lasty = self.children[-1].lasty + + def drawchildren(self): + """ Dessine les enfants de self """ + y = self.y + self.tree.DDY + x = self.x + 15 + for child in self.children: + child.draw(x,y) + nb = child.get_nb_children() + y = y + self.tree.DDY*(nb+1) + self.trace_ligne() + + def drawtext(self): + """ Affiche les deux zones de texte après l'icône de couleur de l'objet """ + if self.image_id != None : + textx = self.x + 30 + else: + textx = self.x + 15 + texty = self.y + # nom,fonte et couleur de l'objet du noeud à afficher + labeltext,fonte,couleur = self.item.GetLabelText() + if labeltext == '' : labeltext = ' ' + if fonte == None : fonte = Fonte_Standard + if couleur == None : couleur = 'black' + # création du widget label + self.label = Label(self.canvas, + text = labeltext, + fg = couleur, + bg = 'gray95', + font=fonte) + self.label_id = self.canvas.create_window(textx,texty,window=self.label,anchor='w') + self.id.append(self.label_id) + # bindings sur le widget label + self.select_id=self.label.bind("<1>", self.select) + self.popup_id=self.label.bind("<3>", self.popup) + self.enter_id=self.label.bind("",self.enter) + self.leave_id=self.label.bind("",self.leave) + # valeur de cet objet à afficher + x0, y0, x1, y1 = self.canvas.bbox(self.label_id) + textx = max(x1, 200) + 10 + text = self.item.GetText() or " " + self.text = Label(self.canvas, text=text, + bd=0, padx=2, pady=2,background='gray95', + font=fonte) + if self.selected: + self.highlight() + else: + self.dehighlight() + self.text_id = self.canvas.create_window(textx, texty,anchor="w", window=self.text) + self.id.append(self.text_id) + + def highlight(self,event=None): + """ Met en surbrillance self""" + if hasattr(self,'label'): + self.label.configure(fg='white',bg='#00008b') + if hasattr(self.item,'get_nom') and self.appli.salome : + if self.item.get_nom() == "AFFE_CARA_ELEM": + self.item.rmenu_specs=[("View3D", "visu_3D")] + self.tree.rmenu + + + def dehighlight(self,event=None): + """ Rétablit l'affichage normal de self""" + if hasattr(self,'label'): + self.label.configure(fg='black',bg='gray95') + + def enter(self,event=None): + """ Met en surbrillance self et affiche le fr de l'objet """ + self.highlight() + fr = self.item.get_fr() + self.appli.affiche_infos(fr) + + def leave(self,event=None): + """ Rétablit l'affichage normal de self et efface le fr de l'objet """ + if not self.selected : + self.dehighlight() + self.appli.affiche_infos('') + + def collapse_children(self): + """ Collapse récursivement tous les descendants de self """ + if not self.children : return + for child in self.children: + child.state='collapsed' + child.collapse_children() + + def deplieReplieNode(self): + if self.state == 'expanded': + self.collapse() + else : + self.expand_node() + + def collapse(self,event = None): + """ Collapse self et descendants et retrace self """ + nb = self.get_nb_children() + self.state = 'collapsed' + self.collapse_children() + self.redraw(-nb) + self.select() + + def expand_node(self,event = None): + """ Expanse self et le retrace """ + if self.state == 'expanded':return + #if not self.item.isactif() : return + if not self.children : self.build_children() + self.state = 'expanded' + nb = self.get_nb_children() + self.redraw(nb) + + def expand(self,event = None): + """ Expanse self et le retrace """ + self.expand_node() + self.select() + + def redraw(self,nb): + """ Redessine self : nb est le décalage à introduire + en dessous de self pour le redessiner """ + # nb = nombre d'items de décalage + self.move(self.tree.DDY*nb) + # on efface self et on le redessine + self.efface() + self.draw(self.x,self.y) + # Il n'est pas nécessaire d'appeler update + # il suffit d'updater les coordonnees et de retracer les lignes + self.racine.update_coords() + self.racine.trace_ligne() + self.update_valid() + self.tree.resizescrollregion() + + def update_coords(self): + """ Permet d'updater les coordonnes de self et de tous ses enfants""" + if self.displayed == 0 : return + if self.image_id != None : + coords = self.canvas.coords(self.image_id) + self.x = coords[0]-15 + else: + coords = self.canvas.coords(self.label_id) + self.x = coords[0]-15 + self.y = coords[1] + self.lasty = self.y + if self.state == 'expanded' : + for child in self.children: + if child.displayed != 0: + child.update_coords() + self.lasty = child.lasty + + def update_icone(self): + """ Met à jour les icônes de tous les noeuds : teste la validité de l'objet + Cette méthode est très lente, trop !!""" + if self.image_id != None : + image = self.geticonimage() + self.canvas.itemconfig(self.image_id,image=image) + if self.state == 'expanded': + for child in self.children: + if child.displayed != 0: + child.update_icone() + + def update_label_texte(self): + """ Met a jour le label du noeud et celui de tous ses fils ouverts """ + self.update_node_label() + if self.state == 'expanded' : + for child in self.children: + if child.displayed != 0 : child.update_label_texte() + + def update_texte(self): + """ Met à jour les noms des SD et valeurs des mots-clés """ + self.update_node_texte() + if self.state == 'expanded' : + for child in self.children: + if child.displayed != 0 : child.update_texte() + + def update_node_label(self): + """ Met a jour le label du noeud """ + if self.displayed == 0 : return + # nom,fonte et couleur de l'objet du noeud à afficher + labeltext,fonte,couleur = self.item.GetLabelText() + if labeltext == '' : labeltext = ' ' + if fonte == None : fonte = Fonte_Standard + if couleur == None : couleur = 'black' + if hasattr(self,'label') and self.label: + self.label.configure(text=labeltext,font=fonte) + + def update_node_texte(self): + """ Met à jour les noms des SD et valeurs des mots-clés """ + if self.displayed == 0 : return + text = self.item.GetText() + if text == None : text = '' + if hasattr(self,'text') and self.text: + self.text.configure(text=text) + + def update_node_valid(self) : + """Cette methode remet a jour la validite du noeud (icone) + Elle appelle isvalid + """ + if self.displayed == 0 : return + if hasattr(self,'image_id'): + if self.image_id != None : + image = self.geticonimage() + self.canvas.itemconfig(self.image_id,image=image) + + def update_valid(self) : + """Cette methode a pour but de mettre a jour la validite du noeud + et de propager la demande de mise à jour à son parent + """ + self.update_node_valid() + self.parent.update_valid() + + def update(self,event=None) : + """ Classe Node : + Cette méthode est appelée pour demander l update d un noeud + d'un jeu de commandes + Cette demande est transmise au noeud racine (le JDC) qui update + tout l arbre représentant le jeu de commandes + Pendant cette mise à jour, on appelle la méthode isvalid qui + fera l update de tous les objets déclarés modifiés lors des + actions précédentes + La métode isvalid est en général appelée par l intermédiaire de + update_icone -> geticonimage -> GetIconName + """ + #print "update",self + #traceback.print_stack() + self.racine.update_coords() + self.racine.trace_ligne() + self.racine.update_icone() + self.racine.update_texte() + self.racine.update_label_texte() + self.tree.resizescrollregion() + + def efface_node(self): + if self.displayed != 0: + self.label.unbind("<1>", self.select_id) + self.label.unbind("<3>", self.popup_id) + self.label.unbind("",self.enter_id) + self.label.unbind("",self.leave_id) + self.canvas.tag_unbind(self.image_id,"<1>",self.select_id2) + self.canvas.tag_unbind(self.image_id,"<3>",self.popup_id2) + if self.item.IsExpandable(): + self.canvas.tag_unbind(self.icone_id, "<1>", self.callback_id) + self.label.destroy() + self.text.destroy() + + for id in self.id : + self.canvas.delete(id) + self.id=[] + self.label_id=None + self.text_id=None + self.image_id=None + self.icone_id=None + self.label=None + self.text=None + self.displayed=0 + + def efface(self): + """ Efface du canvas les id associés à self : cad les siens et ceux + de ses enfants """ + self.efface_node() + if not self.children : return + for child in self.children: + child.efface() + + def move(self,dy): + """ Déplace de l'incrément dy tous les id en dessous de self """ + # il faut marquer tous les suivants de self + bbox1 = self.canvas.bbox(ALL) + self.canvas.dtag(ALL,'move') + self.canvas.delete('line') + try: + self.canvas.addtag_overlapping('move',bbox1[0],self.y +10,bbox1[2],bbox1[3]) + except: + print "Erreur dans move :" + print self + print self.item + print self.item.getObject() + print self.item.getObject().definition.label + print 'y=',self.y + print 'dy=',dy + # on déplace tous les items de dy + self.canvas.move('move',0,dy) + + def trace_ligne(self): + """ Dessine les lignes verticales entre frères et entre père et premier fils""" + if self.state=='collapsed' : return + if len(self.children)==0 : return + # on est bien dans le cas d'un noeud expansé avec enfants ... + # il faut rechercher l'ordonnée du dernier fils de self + y_end = self.children[-1].y + ligne = self.canvas.create_line(self.x+15,self.y,self.x+15,y_end,tags='line') + self.canvas.tag_lower(ligne) + for child in self.children : + try: + child.trace_ligne() + except: + print "Erreur dans trace_ligne :" + print child + print child.item.getObject() + + def last_child(self): + lchild=self + if self.state == 'expanded' and self.children: + lchild= self.children[-1].last_child() + return lchild + + #------------------------------------------------------------------ + # Méthodes de création et destruction de noeuds + # Certaines de ces méthodes peuvent être appelées depuis l'externe + #------------------------------------------------------------------ + def append_brother(self,name,pos='after',retour='non'): + """ + Permet d'ajouter un objet frère à l'objet associé au noeud self + par défaut on l'ajoute immédiatement après + Méthode externe + """ + # on veut ajouter le frère de nom name directement avant ou après self + index = self.parent.children.index(self) + if pos == 'before': + index = index + elif pos == 'after': + index = index +1 + else: + print str(pos)," n'est pas un index valide pour append_brother" + return 0 + return self.parent.append_child(name,pos=index) + + def append_child(self,name,pos=None,verif='oui',retour='non'): + """ + Methode pour ajouter un objet fils à l'objet associé au noeud self. + On peut l'ajouter en début de liste (pos='first'), en fin (pos='last') + ou en position intermédiaire. + Si pos vaut None, on le place à la position du catalogue. + """ + #print "append_child",self,self.children + if pos == 'first': + index = 0 + elif pos == 'last': + index = len(self.children) + elif type(pos) == types.IntType : + # position fixee + index = pos + elif type(pos) == types.InstanceType: + # pos est un item. Il faut inserer name apres pos + index = self.item.get_index(pos) +1 + elif type(name) == types.InstanceType: + index = self.item.get_index_child(name.nom) + else: + index = self.item.get_index_child(name) + obj=self.item.additem(name,index) + #print obj + if obj is None:obj=0 + if obj == 0:return 0 + #print "append_child",index,self.children + child=self.children[index] + child.select() + return child + + def delete(self): + """ + Méthode externe pour la destruction de l'objet associé au noeud + La mise à jour des noeuds est faite par onSupp sur notification + """ + index = self.parent.children.index(self) - 1 + if index < 0 : index =0 + + parent=self.parent + ret=parent.item.suppitem(self.item) + if ret == 0:return + + brothers=parent.children + if brothers: + toselect=brothers[index] + else: + toselect=parent + toselect.select() + diff --git a/InterfaceTK/uniqueassdpanel.py b/InterfaceTK/uniqueassdpanel.py new file mode 100644 index 00000000..27edcd97 --- /dev/null +++ b/InterfaceTK/uniqueassdpanel.py @@ -0,0 +1,219 @@ +# -*- coding: utf-8 -*- +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import prefs +import panels +import images +from widgets import ListeChoix +from widgets import FenetreDeSelection + +from Noyau.N_CR import justify_text +from Editeur.utils import substract_list + +# Import des panels +from uniquepanel import UNIQUE_Panel + + +class UNIQUE_ASSD_Panel(UNIQUE_Panel): + """ + Classe servant à définir le panneau associé aux objets qui attendent une valeur unique + d'un type dérivé d'ASSD + """ + def valid_valeur_automatique(self): + """ + Réalise la validation d'un concept sans remonter dans le + node parent dans le cas ou il n'y a qu'un concept possible (liste de longueur 1) + Identique à valid_valeur moins appel de self.node.parent.select() + On pourrait supposer que le seul concept présent est valide et donc ne pas + réaliser tous les tests de vérification. + """ + if self.parent.modified == 'n' : self.parent.init_modif() + valeur = self.get_valeur() + self.erase_valeur() + anc_val = self.node.item.get_valeur() + valeur,validite=self.node.item.eval_valeur_item(valeur) + test = self.node.item.set_valeur(valeur) + if not test : + mess = "impossible d'évaluer : %s " %`valeur` + self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess) + elif self.node.item.isvalid() : + self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée') + #if self.node.item.get_position()=='global': + #self.node.etape.verif_all() + #elif self.node.item.get_position()=='global_jdc': + #self.node.racine.verif_all() + #else : + #self.node.parent.verif() + #self.node.update() + else : + cr = self.node.item.get_cr() + mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal() + self.reset_old_valeur(anc_val,mess=mess) + + def makeValeurPage(self,page,reel="non"): + """ + Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une + SD de type dérivé d'ASSD + """ + # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur, + # et de la liste des SD du bon type (constituant la liste des choix) + bulle_aide=self.get_bulle_aide() + aide=self.get_aide() + aide= justify_text(texte=aide) + liste_noms_sd = self.node.item.get_sd_avant_du_bon_type() + + # Remplissage du panneau + self.valeur_choisie = StringVar() + self.valeur_choisie.set('') + min,max = self.node.item.GetMinMax() + if (min == 1 and min == max and len(liste_noms_sd)==1 ): + if self.valeur_choisie.get() != liste_noms_sd[0]: + if ('R' not in self.node.item.get_type()) : + self.valeur_choisie.set(liste_noms_sd[0]) + self.valid_valeur_automatique() + + self.frame_valeur = Frame(page) + self.frame_valeur.pack(fill='both',expand=1) + self.frame_valeur.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + self.frame_valeur.bind("",self.parent.appli.efface_aide) + self.listbox = Pmw.ScrolledListBox(self.frame_valeur, + items=liste_noms_sd, + labelpos='n', + label_text="Structures de données du type\n requis par l'objet courant :", + listbox_height = 6, + selectioncommand=self.select_valeur_from_list, + dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c)) + self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center') + Label(self.frame_valeur,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6) + Label(self.frame_valeur,textvariable=self.valeur_choisie).place(relx=0.5,rely=0.6) + self.but_val = Button(self.frame_valeur,text = "Valider",command= self.Choisir) + self.but_val.place(relx=0.3,rely=0.8,relwidth=0.35) + + # affichage de la valeur courante + self.display_valeur() + if self.__class__.__name__ == 'UNIQUE_ASSD_Panel_Reel' : + Label(self.frame_valeur,text='Valeur Réelle').place(relx=0.1,rely=0.9) + self.entry = Entry(self.frame_valeur,relief='sunken') + self.entry.place(relx=0.28,rely=0.9,relwidth=0.6) + self.entry.bind("",lambda e,c=self.valid_valeur_reel:c()) + self.entry.bind("",lambda e,c=self.valid_valeur_reel:c()) + + + + def get_bulle_aide(self): + """ + Retourne l'aide associée au panneau + """ + return "Double-cliquez sur la structure de donnée désirée pour valoriser le mot-clé simple courant" + + def get_aide(self): + """ + Retourne la phrase d'aide indiquant de quel type doit être la valeur à donner par l'utilisateur + """ + mc = self.node.item.get_definition() + try : + type = mc.type[0].__name__ + except : + type = str(mc.type[0]) + if len(mc.type)>1 : + for typ in mc.type[1:] : + try : + l=typ.__name__ + except: + l=str(typ) + type = type + ' ou '+l + commentaire="Un objet de type "+type+" est attendu" + aideval=self.node.item.aide() + commentaire=commentaire +"\n"+ aideval + return commentaire + + + def select_valeur_from_list(self): + """ + Affecte à valeur choisie la sélection courante dans la liste des choix proposée + """ + if len(self.listbox.get()) == 0 : return + if len(self.listbox.getcurselection()) == 0 : return + choix = self.listbox.getcurselection()[0] + self.valeur_choisie.set(choix) + self.listbox.component("listbox").focus_set() + + def choose_valeur_from_list(self,command): + """ + Affecte à valeur choisie la sélection courante dans la liste des choix proposée + Exécute command + """ + if len(self.listbox.get()) == 0 : return + if len(self.listbox.getcurselection()) == 0 : return + choix = self.listbox.getcurselection()[0] + self.valeur_choisie.set(choix) + apply(command,(),{}) + + def Choisir(self) : + #Appeler par le bouton Valider + self.choose_valeur_from_list(self.valid_valeur) + + def get_valeur(self): + """ + Retourne la valeur donnée par l'utilisateur au MCS + """ + return self.valeur_choisie.get() + + def display_valeur(self): + """ + Affiche la valeur de l'objet pointé par self + """ + valeur = self.node.item.get_valeur() + if valeur == None or valeur == '' : return # pas de valeur à afficher ... + self.valeur_choisie.set(getattr(valeur,"nom","unknown")) + + def erase_valeur(self): + pass + + def appel_make(self,page): + self.makeValeurPage(page,reel="oui") + +class UNIQUE_ASSD_Panel_Reel(UNIQUE_ASSD_Panel): + + def valid_valeur_reel(self): + if self.parent.modified == 'n' : self.parent.init_modif() + anc_val = self.node.item.get_valeur() + valeurentree = self.entry.get() + self.valeur_choisie.set(valeurentree) + self.valid_valeur() + + def display_valeur(self): + valeur = self.node.item.get_valeur() + if valeur == None or valeur == '' : return # pas de valeur à afficher ... + if type(valeur) == types.FloatType : + self.valeur_choisie.set(valeur) + else : + self.valeur_choisie.set(valeur.nom) + + + diff --git a/InterfaceTK/uniquebasepanel.py b/InterfaceTK/uniquebasepanel.py new file mode 100644 index 00000000..b7a71beb --- /dev/null +++ b/InterfaceTK/uniquebasepanel.py @@ -0,0 +1,153 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +from Tkinter import Widget +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import prefs +import panels +import images +from widgets import FenetreDeParametre +from widgets import showerror + +from Noyau.N_CR import justify_text +from Editeur.utils import substract_list + +# Import des panels +from uniquepanel import UNIQUE_Panel + + +class UNIQUE_BASE_Panel(UNIQUE_Panel): + """ + Classe servant à définir le panneau associé aux mots-clés simples qui attendent + une valeur d'un type de base (entier, réel ou string). + """ + def makeValeurPage(self,page): + """ + Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type + de base cad entier, réel, string ou complexe + """ + # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur, + # et de la liste des SD du bon type (constituant la liste des choix) + bulle_aide=self.get_bulle_aide() + aide=self.get_aide() + aide= justify_text(texte=aide) + liste_noms_sd = self.node.item.get_sd_avant_du_bon_type() + # Remplissage du panneau + self.frame_valeur = Frame(page) + self.frame_valeur.pack(fill='both',expand=1) + self.frame_valeur.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + self.frame_valeur.bind("",self.parent.appli.efface_aide) + self.label = Label(self.frame_valeur,text='Valeur :') + #self.label.place(relx=0.1,rely=0.2) + self.label.grid(row=0,padx=5,pady=5) + self.entry = Entry(self.frame_valeur,relief='sunken') + #self.entry.place(relx=0.28,rely=0.2,relwidth=0.6) + self.entry.grid(row=0,column=1,padx=5,pady=5) + self.entry.bind("",lambda e,c=self.valid_valeur:c()) + self.entry.bind("",lambda e,c=self.valid_valeur:c()) + # aide associée au panneau + self.frame_valeur.update() + self.aide = Label(self.frame_valeur, + text = aide, + wraplength=int(self.frame_valeur.winfo_width()*0.8), + justify='center') + #self.aide.place(relx=0.5,rely=0.9,anchor='n') + self.aide.grid(row=4,columnspan=2,padx=5,pady=5) + # bouton parametre + bouton_parametres = Button(self.frame_valeur, text="Parametres", command=self.affiche_parametre) + #bouton_parametres.place(relx=0.28,rely=0.5,relwidth=0.4) + bouton_parametres.grid(row=2,columnspan=2,padx=5,pady=5) + bouton_val = Button(self.frame_valeur, text="Valider", command=self.valide) + #bouton_val.place(relx=0.28,rely=0.6,relwidth=0.4) + bouton_val.grid(row=3,columnspan=2,padx=5,pady=5) + # affichage de la valeur du MCS + self.display_valeur() + + def valide(self): + self.valid_valeur() + + def affiche_parametre(self) : + if self.node.item.get_liste_param_possible() != [ ]: + txtparam="" + for param in self.node.item.get_liste_param_possible(): + txtparam=txtparam+repr(param)+"\n" + if txtparam=="": + showerror("Aucun parametre ","Pas de parametre de ce type") + else : + try : + self.fenetreparam.destroy() + except : + pass + self.fenetreparam=FenetreDeParametre( self, self.node.item, self.parent.appli, txtparam) + + def destroy(self): + try : + self.fenetreparam.destroy() + except : + pass + Widget.destroy(self) + + def get_aide(self): + """ + Retourne la phrase d'aide indiquant de quel type doit être la valeur + du mot-clé simple fournie par l'utilisateur + """ + mc = self.node.item.get_definition() + d_aides = { 'TXM' : "Une chaîne de caractères est attendue", + 'R' : "Un réel est attendu", + 'I' : "Un entier est attendu"} + type = mc.type[0] + commentaire=d_aides.get(type,"Type de base inconnu") + aideval=self.node.item.aide() + commentaire=commentaire +"\n"+ aideval + return commentaire + + def get_bulle_aide(self): + """ + Retourne la bulle d'aide associée au panneau et affichée par clic droit + """ + return """Saisissez la valeur que vous voulez affecter au mot-clé simple + dans la zone de saisie et pressez """ + + def display_valeur(self): + """ + Affiche la valeur de l'objet pointé par self + """ + valeur = self.node.item.get_valeur() + if valeur == None or valeur == '' : # pas de valeur à afficher ... + self.entry.delete(0,END) + self.entry.focus() + return + + valeur_texte=self.get_valeur_texte(valeur) + if valeur_texte != "": + valeur=valeur_texte + self.entry.delete(0,END) + self.entry.insert(0,valeur) + self.entry.focus() + diff --git a/InterfaceTK/uniquecomppanel.py b/InterfaceTK/uniquecomppanel.py new file mode 100644 index 00000000..80d9aa77 --- /dev/null +++ b/InterfaceTK/uniquecomppanel.py @@ -0,0 +1,171 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import prefs +import panels +import images +from widgets import ListeChoix +from widgets import FenetreDeSelection + +from Noyau.N_CR import justify_text +from Editeur.utils import substract_list + +# Import des panels +from uniquepanel import UNIQUE_Panel + + +class UNIQUE_COMP_Panel(UNIQUE_Panel): + """ + Classe servant à définir le panneau associé aux mots-clés simples + qui attendent une valeur de type complexe + """ + def makeValeurPage(self,page): + """ + Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type + de base cad entier, réel, string ou complexe + """ + # Récupération de l'aide associée au panneau et de l'aide destinée à l'utilisateur + bulle_aide=self.get_bulle_aide() + aide=self.get_aide() + aide= justify_text(texte=aide) + # Remplissage du panneau + self.frame_valeur = Frame(page) + self.frame_valeur.pack(fill='both',expand=1) + self.frame_valeur.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + self.frame_valeur.bind("",self.parent.appli.efface_aide) + self.label = Label(self.frame_valeur,text='Complexe de la forme : a+bj') + self.label1 = Label(self.frame_valeur,text='Imaginaire') + self.label2 = Label(self.frame_valeur,text='Phase') + self.label3 = Label(self.frame_valeur,text='OU') + self.label.place (relx=0.15,rely=0.1) + self.label1.place(relx=0.6,rely=0.50) + self.label2.place(relx=0.6,rely=0.57) + self.label3.place(relx=0.15,rely=0.4) + self.typ_cplx=StringVar() + self.typ_cplx.set('RI') + rb1 = Radiobutton(self.frame_valeur, text='RI : Réel',variable=self.typ_cplx,value='RI') + rb2 = Radiobutton(self.frame_valeur, text='MP : Module',variable=self.typ_cplx,value='MP') + rb1.place(relx=0.15,rely = 0.50) + rb2.place(relx=0.15,rely = 0.57) + self.entry1 = Pmw.EntryField(self.frame_valeur,validate='real') + self.entry2 = Pmw.EntryField(self.frame_valeur,validate='real') + self.entry3 = Pmw.EntryField(self.frame_valeur) + self.entry1.component('entry').bind("",lambda e,s=self:s.entry2.component('entry').focus()) + self.entry1.component('entry').bind("",lambda e,s=self:s.entry2.component('entry').focus()) + self.entry2.component('entry').bind("",lambda e,c=self.valid_valeur:c()) + self.entry2.component('entry').bind("",lambda e,c=self.valid_valeur:c()) + self.entry3.component('entry').bind("",lambda e,c=self.valid_complexe:c()) + self.entry3.component('entry').bind("",lambda e,c=self.valid_complexe:c()) + self.entry1.place(relx=0.15,rely = 0.65,relwidth=0.35) + self.entry2.place(relx=0.60,rely = 0.65,relwidth=0.35) + self.entry3.place(relx=0.15,rely = 0.20,relwidth=0.60) + self.entry1.focus() + self.bouton_val=Button(self.frame_valeur,text="Valider",command=self.valider,width=14) + self.bouton_val.place(relx=0.4,rely=0.8) + self.frame_valeur.update() + self.aide = Label(self.frame_valeur, + text = aide, + wraplength=int(self.frame_valeur.winfo_width()*0.8), + justify='center') + self.aide.place(relx=0.5,rely=0.9,anchor='n') + # affichage de la valeur du MCS + self.display_valeur() + + def valider(self): + if ((self.entry3.get() != None) and (self.entry3.get() != "" )): + self.erase_valeur() + self.valid_complexe() + else : + self.valid_valeur() + + + def display_valeur(self): + """ + Affiche la valeur de l'objet pointé par self + """ + valeur = self.node.item.get_valeur() + if valeur == None or valeur == '' : return # pas de valeur à afficher ... + self.entry1.delete(0,END) + self.entry2.delete(0,END) + self.entry3.delete(0,END) + if type(valeur) not in (types.ListType,types.TupleType) : + self.display_complexe() + else: + typ_cplx,x1,x2=valeur + self.typ_cplx.set(typ_cplx) + self.entry1.setentry(x1) + self.entry2.setentry(x2) + + def display_complexe(self): + valeur = self.node.item.get_valeur() + self.entry3.setentry(valeur) + + def get_bulle_aide(self): + """ + Retourne la bulle d'aide du panneau + """ + return """-Choisissez votre format de saisie du complexe : + \t 'RI' = parties réelle et imaginaire + \t 'MP' = module/phase (en degrés) + - Saisissez ensuite dans les deux zones de saisie les deux nombres attendus""" + + def get_aide(self): + """ + Retourne la phrase d'aide décrivant le type de la valeur que peut prendre + le mot-clé simple courant + """ + commentaire='Un complexe est attendu' + aideval=self.node.item.aide() + commentaire=commentaire +"\n"+ aideval + return commentaire + + def get_valeur(self): + """ + Retourne le complexe saisi par l'utilisateur + """ + l=[] + l.append(self.typ_cplx.get()) + try : + l.append(string.atof(self.entry1.get())) + l.append(string.atof(self.entry2.get())) + except : + return None + return `tuple(l)` + + def erase_valeur(self): + """ + Efface les entries de saisie + """ + self.typ_cplx.set('RI') + self.entry1.delete(0,END) + self.entry2.delete(0,END) + + def valid_complexe(self): + valeurentree=self.entry3.get() + self.valid_valeur(valeurentree=valeurentree) diff --git a/InterfaceTK/uniqueintopanel.py b/InterfaceTK/uniqueintopanel.py new file mode 100644 index 00000000..76133cd5 --- /dev/null +++ b/InterfaceTK/uniqueintopanel.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import prefs +import panels +import images +from widgets import ListeChoix +from widgets import FenetreDeSelection + +from Noyau.N_CR import justify_text +from Editeur.utils import substract_list + +# Import des panels +from uniquepanel import UNIQUE_Panel + +class UNIQUE_INTO_Panel(UNIQUE_Panel): + """ + Classe définissant le panel associé aux mots-clés qui demandent + à l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discrètes + """ + def makeValeurPage(self,page): + """ + Génère la page de saisie d'une seule valeur parmi un ensemble + discret de possibles + """ + # récupération de la bulle d'aide et de l'objet mc + bulle_aide=self.get_bulle_aide() + objet_mc = self.node.item.get_definition() + # remplissage du panel + self.frame_valeur = Frame(page) + self.frame_valeur.pack(fill='both',expand=1) + self.frame_valeur.bind("",lambda e,s=self,a=bulle_aide : + s.parent.appli.affiche_aide(e,a)) + self.frame_valeur.bind("",self.parent.appli.efface_aide) + #l_choix=list(objet_mc.into) + #l_choix.sort() + l_choix=self.node.item.get_liste_possible([]) + self.label = Label(self.frame_valeur,text='Choisir une valeur :') + self.label.pack(side='top') + self.frame = Frame(page) + self.frame.place(relx=0.33,rely=0.2,relwidth=0.33,relheight=0.6) + + + liste_commandes = (("",self.selectChoix), + ("",self.deselectChoix), + ("",self.record_valeur)) + self.Liste_choix = ListeChoix(self,self.frame,l_choix, + liste_commandes = liste_commandes, + titre="Valeurs possibles",optionReturn="oui") + self.Liste_choix.affiche_liste() + if len(l_choix) == 1 : + self.Liste_choix.surligne(l_choix[0]) + self.bouton_val = Button(self.frame_valeur, + text = "Valider", + command=self.record_valeur_ligne, + width=14) + self.bouton_val.place(relx=0.33,rely=0.85) + + def record_valeur_ligne(self): + valeur=self.Liste_choix.arg_selected + self.record_valeur(valeur) + + def get_bulle_aide(self): + """ + Retourne la bulle d'aide affectée au panneau courant (affichée par clic droit) + """ + return """Double-cliquez sur la valeur désirée + pour valoriser le mot-clé simple courant""" + diff --git a/InterfaceTK/uniquepanel.py b/InterfaceTK/uniquepanel.py new file mode 100644 index 00000000..90b3b9d9 --- /dev/null +++ b/InterfaceTK/uniquepanel.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import prefs +import panels +import images +from widgets import ListeChoix +from widgets import FenetreDeSelection + +from Noyau.N_CR import justify_text +from Editeur.utils import substract_list + +# Import des panels +from newsimppanel import newSIMPPanel + + +class UNIQUE_Panel(newSIMPPanel): + """ + Classe virtuelle servant de classe mère à toutes celles définissant un panneau + permettant l'affichage et la saisie d'une valeur unique pour le mot-clé simple + """ + + def erase_valeur(self): + """ + Efface l'entry de saisie + """ + self.entry.delete(0,END) + + def get_valeur(self): + """ + Retourne la valeur donnée par l'utilisateur + """ + return self.entry.get() + + + def valid_valeur(self,valeurentree=None): + """ + Teste si la valeur fournie par l'utilisateur est une valeur permise : + - si oui, l'enregistre + - si non, restaure l'ancienne valeur + """ + if self.parent.modified == 'n' : self.parent.init_modif() + anc_val = self.node.item.get_valeur() + if valeurentree== None : + valeurentree = self.get_valeur() + valeur,validite=self.node.item.eval_valeur(valeurentree) + if not validite : + commentaire = "impossible d'évaluer : %s " %`valeurentree` + self.display_valeur() + self.parent.appli.affiche_infos(commentaire) + return + + test = self.node.item.set_valeur(valeur) + if test : + self.set_valeur_texte(str(valeurentree)) + + if not test : + mess = "impossible d'évaluer : %s " %`valeur` + self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée : "+mess) + elif self.node.item.isvalid() : + self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée') + else : + cr = self.node.item.get_cr() + mess = "Valeur du mot-clé non autorisée "+cr.get_mess_fatal() + self.reset_old_valeur(anc_val,mess=mess) + + self.display_valeur() diff --git a/InterfaceTK/uniquesdcopanel.py b/InterfaceTK/uniquesdcopanel.py new file mode 100644 index 00000000..a9e326c5 --- /dev/null +++ b/InterfaceTK/uniquesdcopanel.py @@ -0,0 +1,246 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# Modules Python +import string,types,os +from Tkinter import * +import Pmw +from copy import copy,deepcopy +import traceback + +# Modules Eficas +from Editeur import Objecttreeitem +import prefs +import panels +import images +from widgets import ListeChoix +from widgets import FenetreDeSelection + +from Noyau.N_CR import justify_text +from Editeur.utils import substract_list + +# Import des panels +from uniqueassdpanel import UNIQUE_ASSD_Panel + + +class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel): + """ + Classe servant à définir le panneau correspondant à un mot-clé simple + qui attend une valeur unique de type dérivé d'ASSD ou non encore + existante (type CO(...) utilisé dans les macros uniquement) + """ + def makeValeurPage(self,page): + """ + Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une SD de type dérivé + d'ASSD + """ + # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur, + # et de la liste des SD du bon type (constituant la liste des choix) + bulle_aide=self.get_bulle_aide() + aide=self.get_aide() + aide= justify_text(texte=aide) + liste_noms_sd = self.node.item.get_sd_avant_du_bon_type() + # Remplissage du panneau + self.frame_valeur = Frame(page) + self.frame_valeur.pack(fill='both',expand=1) + self.frame_valeur.bind("",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a)) + self.frame_valeur.bind("",self.parent.appli.efface_aide) + # affichage de la liste des SD existantes et du bon type + self.listbox = Pmw.ScrolledListBox(self.frame_valeur, + items=liste_noms_sd, + labelpos='n', + label_text="Structures de données du type\n requis par l'objet courant :", + listbox_height = 6, + selectioncommand=self.select_valeur_from_list, + dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c)) + self.listbox.component("listbox").bind("",lambda e,s=self,c=self.valid_valeur : s.choose_valeur_from_list(c)) + if liste_noms_sd != [] : + self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center') + self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ", items = ('NON','OUI'), + menubutton_width=10) + else : + self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ", items = ('OUI',), + menubutton_width=10) + # affichage du bouton 'Nouveau concept' + self.b_co.configure(command = self.ask_new_concept) + if liste_noms_sd != [] : + self.b_co.place(relx=0.05,rely=0.6,anchor='w') + else : + self.b_co.place(relx=0.05,rely=0.3,anchor='w') + self.label_co = Label(self.frame_valeur,text='Nom du nouveau concept :') + self.entry_co = Entry(self.frame_valeur) + self.entry_co.bind('',self.valid_nom_concept_co) + self.entry_co.bind('',self.valid_nom_concept_co) + # affichage du label de la structure de donnée choisie + self.l_resu = Label(self.frame_valeur,text='Structure de donnée choisie :') + self.valeur_choisie = StringVar() + self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie) + self.frame_valeur.update() + self.aide = Label(self.frame_valeur, + text = aide, + wraplength=int(self.frame_valeur.winfo_width()*0.8), + justify='center') + self.aide.place(relx=0.5,rely=0.85,anchor='n') + + self.but_val = Button(self.fr_but,text = "Valider",command= self.valid_nom_concept_co) + self.but_val.pack(side='right',padx=5, pady=5) + + # affichage de la valeur courante + self.display_valeur() + if liste_noms_sd == [] : + self.b_co.invoke('OUI') + + def get_bulle_aide(self): + """ + Retourne la bulle d'aide du panneau + """ + return """Double-cliquez sur la structure de donnée désirée + pour valoriser le mot-clé simple courant ou cliquez sur NOUVEAU CONCEPT pour + entrer le nom d'un concept non encore existant""" + + def valid_valeur(self): + """ + Teste si la valeur fournie par l'utilisateur est une valeur permise : + - si oui, l'enregistre + - si non, restaure l'ancienne valeur + """ + if self.parent.modified == 'n' : self.parent.init_modif() + valeur = self.get_valeur() + #print "valid_valeur",valeur + + self.erase_valeur() + anc_val = self.node.item.get_valeur() + test_CO=self.node.item.is_CO(anc_val) + #PN essai pour bug dans MACRO_PROJ_BASE + valeur,validite=self.node.item.eval_valeur(valeur) + test = self.node.item.set_valeur(valeur) + if not test : + mess = "impossible d'évaluer : %s " %`valeur` + self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess) + return + #PN essai pour bug dans MACRO_PROJ_BASE + #elif self.node.item.isvalid() : + elif validite: + self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée') + if test_CO: + # il faut egalement propager la destruction de l'ancien concept + self.node.item.delete_valeur_co(valeur=anc_val) + # et on force le recalcul des concepts de sortie de l'etape + self.node.item.object.etape.get_type_produit(force=1) + # et le recalcul du contexte + self.node.item.object.etape.parent.reset_context() + self.node.parent.select() + else : + cr = self.node.item.get_cr() + mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal() + self.reset_old_valeur(anc_val,mess=mess) + return + + def valid_nom_concept_co(self,event=None): + """ + Lit le nom donné par l'utilisateur au concept de type CO qui doit être + la valeur du MCS courant et stocke cette valeur + """ + #print "valid_nom_concept_co" + if self.parent.modified == 'n' : self.parent.init_modif() + anc_val = self.node.item.get_valeur() + if anc_val != None: + # il faut egalement propager la destruction de l'ancien concept + self.node.item.delete_valeur_co(valeur=anc_val) + # et on force le recalcul des concepts de sortie de l'etape + self.node.item.object.etape.get_type_produit(force=1) + # et le recalcul du contexte + self.node.item.object.etape.parent.reset_context() + nom_concept = self.entry_co.get() + #print "valid_nom_concept_co",nom_concept + test,mess=self.node.item.set_valeur_co(nom_concept) + if not test: + # On n'a pas pu créer le concept + self.parent.appli.affiche_infos(mess) + return + elif self.node.item.isvalid() : + self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée') + self.node.parent.select() + else : + cr = self.node.item.get_cr() + mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal() + self.reset_old_valeur(anc_val,mess=mess) + return + + def ask_new_concept(self,tag): + """ + Crée une entry dans le panneau d'un MCS qui attend un concept OU un CO() afin de + permettre à l'utilisateur de donner le nom du nouveau concept + """ + new_concept = self.b_co.getcurselection() + if new_concept == 'OUI': + self.label_co.place(relx=0.05,rely=0.7) + self.entry_co.place(relx=0.45,rely=0.7,relwidth=0.25) + self.l_resu.place_forget() + self.label_valeur.place_forget() + self.entry_co.focus() + elif new_concept == 'NON': + # On est passe de OUI à NON, on supprime la valeur +# PN correction de bug (on passe de non a non et cela supprime la valeur) +# ajout du if de le ligne suivane + if self.node.item.is_CO(): + self.node.item.delete_valeur_co() + self.record_valeur(name=None,mess="Suppression CO enregistrée") + self.label_co.place_forget() + self.entry_co.place_forget() + self.l_resu.place(relx=0.05,rely=0.7) + self.label_valeur.place(relx=0.45,rely=0.7) + + def display_valeur(self): + """ + Affiche la valeur de l'objet pointé par self + """ + valeur = self.node.item.get_valeur() + #print "display_valeur",valeur + if valeur == None or valeur == '': + self.valeur_choisie.set('') + return # pas de valeur à afficher ... + # il faut configurer le bouton si la valeur est un objet CO + # sinon afficher le nom du concept dans self.valeur_choisie + if self.node.item.is_CO(): + #print "display_valeur.is_CO" + self.b_co.invoke('OUI') + self.entry_co.insert(0,valeur.nom) + else: + self.valeur_choisie.set(valeur.nom) + + def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'): + """ + Enregistre val comme valeur de self.node.item.object SANS faire de test de validité + """ + if self.parent.modified == 'n' : self.parent.init_modif() + if name != None: + valeur =name + else : + self.entry_co.delete(0,END) + valeur= self.entry_co.get() + self.node.item.set_valeur_co(valeur) + self.parent.appli.affiche_infos(mess) + # On met a jour le display dans le panneau + self.display_valeur() + if self.node.item.isvalid(): + self.node.parent.select() + + diff --git a/InterfaceTK/widgets.py b/InterfaceTK/widgets.py new file mode 100644 index 00000000..c0dda777 --- /dev/null +++ b/InterfaceTK/widgets.py @@ -0,0 +1,1388 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +# ---------------------------------------------------------- +# Cette classe sert à définir les widgets utilisés par +# EFICAS +# ---------------------------------------------------------- + +import Tkinter +from Tkinter import * +import Pmw +import os,sys,re,string +import types,fnmatch +import traceback +from tkFileDialog import * +from tkMessageBox import showinfo,askyesno,showerror,askretrycancel + +import fontes +import prefs +from Editeur.utils import save_in_file +from centerwindow import centerwindow + +from Noyau.N_utils import repr_float +from Accas import AsException + +# Surcharge de la fonction askyesno qui retourne un resultat errone en Python 2.3 avec Tk 8.4 +# et Tkinter.wantobject==1 +import tkMessageBox +def askyesno(title=None, message=None, **options): + "Ask a question; return true if the answer is yes" + s = tkMessageBox._show(title, message, tkMessageBox.QUESTION, tkMessageBox.YESNO, **options) + if s == tkMessageBox.YES:return 1 + if s == tkMessageBox.NO:return 0 + if s:return 1 + return 0 + + +class Fenetre : + """ Cette classe permet de créer une fenêtre Toplevel dans laquelle + on peut afficher un texte et qui permet de le sauver""" + def __init__(self,appli,titre="",texte="",wrap=WORD,width=100,height=30): + self.appli=appli + if self.appli.test==1 : return + self.fenetre = Toplevel() + self.fenetre.withdraw() + #self.fenetre.configure(width = 800,height=500) + self.fenetre.protocol("WM_DELETE_WINDOW", self.quit) + self.fenetre.title("Visualisation du "+titre) + self.texte = string.replace(texte,'\r\n','\n') + self.titre = titre + fonte=fontes.standardcourier10 + # définition des frames + self.frame_texte = Frame(self.fenetre) + self.frame_boutons = Frame(self.fenetre) + #self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.9) + #self.frame_boutons.place(relheight=0.1,relx=0,rely=0.9,relwidth=1.) + # définition de la zone texte et du scrollbar + self.zone_texte = Text(self.frame_texte,font=fonte,wrap=wrap, + height=height,width=width) + self.zone_texte.bind("", self.page_up) + self.zone_texte.bind("", self.page_down) + self.zone_texte.bind("", self.unit_up) + self.zone_texte.bind("", self.unit_down) + self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview) + #self.scroll_h = Scrollbar (self.frame_texte,command = self.zone_texte.xview) + self.scroll_v.pack(side='right',fill ='y') + #self.scroll_h.pack(side='bottom',fill ='x') + self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10) + self.zone_texte.configure(yscrollcommand=self.scroll_v.set) + # définition des boutons + self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit, + default='active') + self.but_save = Button(self.frame_boutons,text = "Sauver",command = self.save) + #self.but_quit.place(relx=0.4,rely=0.5,anchor='center') + #self.but_save.place(relx=0.6,rely=0.5,anchor='center') + self.but_quit.pack(side='left',padx=25, pady=5) + self.but_save.pack(side='right',padx=25, pady=5) + self.frame_texte.pack(side='top',fill='both',expand=1) + self.frame_boutons.pack(side='bottom') + self.zone_texte.focus_set() + self.fenetre.bind('',self.quit) #dismiss window + + # affichage du texte + self.affiche_texte(self.texte) + self.zone_texte.config(state=DISABLED) + centerwindow(self.fenetre) + self.fenetre.deiconify() + + def page_up(self,event): + event.widget.yview_scroll(-1, "page") + return "break" #Pour eviter la propagation de l'evenement a la fenetre principale + def page_down(self,event): + event.widget.yview_scroll(1, "page") + return "break" #Pour eviter la propagation de l'evenement a la fenetre principale + def unit_up(self,event): + event.widget.yview_scroll(-1, "unit") + return "break" #Pour eviter la propagation de l'evenement a la fenetre principale + def unit_down(self,event): + event.widget.yview_scroll(1, "unit") + return "break" #Pour eviter la propagation de l'evenement a la fenetre principale + + def wait(self): + self.fenetre.grab_set() + self.zone_texte.focus_set() + self.fenetre.wait_window(self.fenetre) + + def quit(self,event=None): + self.fenetre.destroy() + return "break" #Pour eviter la propagation de l'evenement a la fenetre principale + + def efface_scroll(self): + """ Efface le scroll lorsqu'il n'est pas nécessaire : ne marche pas""" + self.scroll_v.pack_forget() + #self.scroll_h.pack_forget() + + def affiche_texte(self,texte): + """ Affiche le texte dans la fenêtre """ + if texte != "" : + self.zone_texte.insert(END,texte) + try: + self.fenetre.update_idletasks() + x0,y0,x1,y1 = self.zone_texte.bbox(END) + if (y1-y0) < 300 : self.efface_scroll() + except: + pass + + def save(self): + """ Permet de sauvegarder le texte dans un fichier dont on a demandé le nom + à l'utilisateur """ + file = asksaveasfilename(parent=self.fenetre,defaultextension = '.comm', + #initialdir = self.appli.CONFIGURATION.rep_user, + initialdir = self.appli.CONFIGURATION.initialdir, + title="Sauvegarde du "+self.titre) + if file : + if not save_in_file(file,self.texte,None) : + showerror("Sauvegarde impossible", + "Impossible de sauvegarder le texte dans le fichier spécifié\n"+ + "Vérifiez les droits d'écriture",parent=self.fenetre) + else: + showinfo("Sauvegarde effectuée","Sauvegarde effectuée dans le fichier %s" %file,parent=self.fenetre) + + def destroy(self): + try : + self.fenetre.destroy() + except : + pass + +class FenetreSurLigneWarning(Fenetre): + + def affiche_texte(self,texte): + """ Affiche le texte dans la fenêtre """ + ligne=0 + if texte != "" : + texte_cr=texte.splitlines() + for l in texte_cr: + ligne=ligne+1 + l=l+"\n" + self.zone_texte.insert(END,l) + if (l.find("WARNING") > -1) or (l.find("ERROR") > -1) : + self.zone_texte.tag_add( "Rouge", str(ligne)+".0", "end-1c" ) + self.zone_texte.tag_config("Rouge", foreground='red') + try: + self.fenetre.update_idletasks() + x0,y0,x1,y1 = self.zone_texte.bbox(END) + if (y1-y0) < 300 : self.efface_scroll() + except: + pass + +class FenetreYesNo(Fenetre): + def __init__(self,appli,titre="",texte="",yes="Yes",no="No"): + self.appli=appli + self.fenetre = Toplevel() + self.fenetre.configure(width = 800,height=500) + self.fenetre.protocol("WM_DELETE_WINDOW", self.quit) + self.fenetre.title(titre) + self.texte = string.replace(texte,'\r\n','\n') + self.titre = titre + fonte=fontes.standardcourier10 + # définition des frames + self.frame_texte = Frame(self.fenetre) + self.frame_boutons = Frame(self.fenetre) + self.frame_boutons.place(relx=0,rely=0, relwidth=1.,relheight=0.1) + self.frame_texte.place( relx=0,rely=0.1, relwidth=1, relheight=0.9) + # définition de la zone texte et du scrollbar + self.zone_texte = Text(self.frame_texte,font=fonte) + self.zone_texte.bind("", self.page_up) + self.zone_texte.bind("", self.page_down) + self.zone_texte.bind("", self.unit_up) + self.zone_texte.bind("", self.unit_down) + self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview) + #self.scroll_h = Scrollbar (self.frame_texte,command = self.zone_texte.xview) + self.scroll_v.pack(side='right',fill ='y') + #self.scroll_h.pack(side='bottom',fill ='x') + self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10) + self.zone_texte.configure(yscrollcommand=self.scroll_v.set) + # définition des boutons + self.but_yes = Button(self.frame_boutons,text = yes,command=self.yes) + self.but_no = Button(self.frame_boutons,text = no,command = self.no) + self.but_yes.place(relx=0.4,rely=0.5,anchor='center') + self.but_no.place(relx=0.6,rely=0.5,anchor='center') + # affichage du texte + self.affiche_texte(self.texte) + centerwindow(self.fenetre) + + def yes(self): + self.result=1 + self.quit() + + def no(self): + self.result=0 + self.quit() + +class FenetreDeSelection(Fenetre): + """ Classe dérivée de Fenêtre permettant la récupération d'une zone de texte sélectionnée. + Cette classe est utilisée pour affecter une liste de valeurs à un mot-clé. + """ + def __init__(self,panel,item,appli,titre="",texte="",cardinal=1): + Fenetre.__init__(self,appli,titre=titre,texte=texte) + self.frame_boutons.place_forget() + self.frame_texte.place_forget() + self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.8) + self.frame_boutons.place(relheight=0.2,relx=0,rely=0.8,relwidth=1.) + + self.cardinal=cardinal + self.fenetre.configure(width = 320,height=400) + centerwindow(self.fenetre) + self.panel = panel + self.item = item + self.fenetre.title(titre) + self.but_save.configure(text="Ajouter",command=self.traite_selection) + # séparateur par défaut + self.separateur = ';' + # création de la zone de saisie du séparateur + l_separateurs_autorises = self.get_separateurs_autorises() + self.choix_sep = Pmw.ComboBox(self.frame_boutons, + label_text = "Séparateur :", + labelpos = 'w', + listheight = 100, + selectioncommand = self.choose_separateur, + scrolledlist_items = l_separateurs_autorises) + self.choix_sep.component('entry').configure(width=6) + self.choix_sep.place(relx=0.01,rely=0.5,anchor='w') + self.choix_sep.selectitem(self.separateur) + # Replacement + self.but_quit.place_forget() + self.but_save.place_forget() + self.but_all = Button(self.frame_boutons,text = "Tout Sélectionner", command=self.tout) + self.but_save.place(relx=0.6,rely=0.6,anchor='center') + self.but_quit.place(relx=0.8,rely=0.6,anchor='center') + self.but_all.place(relx=0.7,rely=0.2,anchor='center') + self.choose_separateur('espace') + + + def get_separateurs_autorises(self): + """ + Retourne la liste des séparateurs autorisés + """ + return ['espace',';',','] + + def choose_separateur(self,nom_sep): + """ + Affecte à self.separateur le caractère séparateur correspondant à nom_sep + """ + if nom_sep == 'espace' : + self.separateur = ' ' + else: + self.separateur = nom_sep + + def tout(self): + liste=[] + texte=self.texte.splitlines() + for l in texte : + for mot in string.split(l,self.separateur): + if mot != '' and mot != ' ' and mot != self.separateur : + liste.append(mot) + self.traite_selection(liste) + + def traite_selection(self,liste=None): + """ Cette méthode effectue tous les traitements nécessaires pour vérifier + et affecter la liste de valeurs à l'objet réprésenté par self.item + """ + # Récupère la liste des chaines de caractères de la zone sélectionnée + message="" + if liste == None: + message,liste = self.recupere_liste() + if self.test_probleme(message,"Sélectionnez des données") == 0: + return + # Vérifie que le nombre de données est dans les limites attendues + message = self.verif_liste(liste) + if self.test_probleme(message,"Vérifiez le nombre de données") == 0: + return + # Crée une liste de valeurs du type attendu + message,liste_valeurs = self.creation_liste_valeurs(liste) + if self.test_probleme(message,"Vérifiez le type des données") == 0: + return + # Vérifie que chaque valeur est dans le domaine exigé + message = self.verif_valeurs(liste_valeurs) + if self.test_probleme(message,"Vérifiez le domaine des valeurs") == 0: + return + # Ajoute les valeurs dans la liste de valeurs du mot-clé + if self.cardinal != 1 : + nb=self.cardinal + l_valeurs=[] + # a ameliorer + if (len(liste_valeurs)%nb != 0): + message="La cardinalité n'est pas correcte" + self.test_probleme(message,"On attend des tuples") + return + for i in range(len(liste_valeurs)/nb) : + if (nb==2): + t=(liste_valeurs[i*nb], liste_valeurs[i*nb+1]) + elif (nb ==3): + t=(liste_valeurs[i*nb], liste_valeurs[i*nb+1], liste_valeurs[i*nb+2]) + else : + print "probleme : prevenir la maintenance Eficas" + return + l_valeurs.append(t) + liste_valeurs=l_valeurs + self.ajouter_valeurs(liste_valeurs) + self.appli.affiche_infos("Liste de valeurs acceptée") + + def test_probleme(self, message, message_eficas): + """ Cette méthode affiche un message d'erreur si message != '' + et retourne 0, sinon retourne 1 sans rien afficher. + """ + if message != "": + showinfo("Problème",message,parent=self.fenetre) + self.fenetre.tkraise() + self.appli.affiche_infos(message_eficas) + return 0 + else: + return 1 + + def recupere_liste(self): + """ Cette méthode récupère le texte de la zone sélectionnée, construit et + retourne une liste avec les chaines qui se trouvent entre les séparateurs. + S'il n'y a pas de données selectionnées, elle retourne un message d'erreur + et une liste vide. + """ + message = "" + try: + selection=self.fenetre.selection_get() + except: + message = "Pas de donnée sélectionnée" + return message,None + # les retours chariots doivent être interprétés comme des séparateurs + selection = string.replace(selection,'\n',self.separateur) + # on splitte la sélection suivant le caractère séparateur + liste_chaines = string.split(selection,self.separateur) + l_chaines = [] + for chaine in liste_chaines: + chaine = string.strip(chaine) + if chaine != '' : l_chaines.append(chaine) + return message,l_chaines + + def verif_liste(self, liste): + """ Cette méthode effectue des tests sur le nombre d'éléments de la liste + et retourne 1 si la liste est correcte, sinon 0 et le message d'erreur + correspondant. + """ + message = "" + # nombre d'éléments sélectionnés + nombre_elements = len(liste) + # nombre d'éléments déja dans la liste du panel + nombre_in_liste = len(self.panel.Liste_valeurs.get_liste()) + multiplicite = self.item.GetMultiplicite() + if (nombre_elements % multiplicite) != 0: + message = "Vous devez sélectionner "+str(multiplicite)+" * n données" + return message + nombre_valeurs = nombre_elements / multiplicite + cardinalite = self.item.GetMinMax() + if nombre_valeurs < cardinalite[0]: + message = "Vous devez sélectionner au moins "+str(cardinalite[0])+" valeurs" + return message + if cardinalite[1] != "**" and nombre_valeurs > (long(cardinalite[1])-nombre_in_liste): + message = "La liste ne peut avoir plus de "+str(cardinalite[1])+" valeurs" + return message + + return message + + def creation_liste_valeurs(self, liste): + """ Cette méthode crée et retourne une liste de valeurs du type attendu + par le mot-clé. La liste de valeurs est créée à partir de la liste + de chaines de caractères transmise. + """ + type_attendu = self.item.GetType()[0] + if type_attendu == 'R': + return self.convertir(liste, f_conversion= float) + elif type_attendu == 'I': + return self.convertir(liste, f_conversion= int) + elif type_attendu == 'TXM': + return self.convertir(liste) + else: + message = "Seuls les entiers, les réels et les chaines de caractères sont convertis" + return message,None + + def convertir(self, liste, f_conversion=None): + """ Cette méthode essaie de convertir les éléments de la liste avec la + fonction f_conversion si elle existe, et retourne la liste des + éléments dans le type voulu en cas de succès, sinon retourne None. + """ + liste_valeurs = [] + message = "" + for chaine in liste: + if f_conversion: + try: + liste_valeurs.append(f_conversion(chaine)) + except: + message = "Impossible de convertir "+chaine+" dans le type attendu" + return message,None + else: + liste_valeurs.append(chaine) + return message,liste_valeurs + + def verif_valeurs(self, liste_valeurs): + """ Cette méthode teste la validité de tous les éléments de la liste, + retourne un message vide s'ils sont valides + ou un message non vide au premier élément non valide rencontré + """ + message = "" + for valeur in liste_valeurs: + test,message = self.item.object.verif_type(valeur) + if test == 0: return message + return message + + def ajouter_valeurs(self, liste_valeurs): + """ Cette méthode ajoute les nouvelles valeurs à la liste existante.""" + liste = self.panel.Liste_valeurs.get_liste() + liste.extend(liste_valeurs) + self.panel.Liste_valeurs.put_liste(liste) + +class FenetreDeParametre(Fenetre) : + def __init__(self,parent,item,appli,texte): + self.parent=parent + self.appli=appli + self.fenetre = Toplevel() + self.fenetre.configure(width = 250,height=100) + self.fenetre.protocol("WM_DELETE_WINDOW", self.quit) + self.fenetre.title("Parametres") + self.titre = "Parametres" + self.texte = string.replace(texte,'\r\n','\n') + fonte=fontes.standardcourier10 + + # définition des frames + self.frame_texte = Frame(self.fenetre) + self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.7) + # définition de la zone texte et du scrollbar + self.zone_texte = Text(self.frame_texte,font=fonte) + self.zone_texte.bind("", self.page_up) + self.zone_texte.bind("", self.page_down) + self.zone_texte.bind("", self.unit_up) + self.zone_texte.bind("", self.unit_down) + self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview) + self.scroll_v.pack(side='right',fill ='y') + self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10) + self.zone_texte.configure(yscrollcommand=self.scroll_v.set) + # affichage du texte + self.affiche_texte(self.texte) + self.zone_texte.config(state="disabled") + + # définition des boutons + self.frame_boutons = Frame(self.fenetre) + self.frame_boutons.place(relheight=0.3,relx=0,rely=0.65,relwidth=1.) + self.label1 = Label(self.frame_boutons,text="surligner la") + self.label2 = Label(self.frame_boutons,text="ligne entière") + self.label1.place(relx=0.1,rely=0) + self.label2.place(relx=0.1,rely=0.5) + self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit) + self.but_save = Button(self.frame_boutons,text = "Choisir",command = self.Choisir) + self.but_save.place(relx=0.6,rely=0,relheight=1) + self.but_quit.place(relx=0.8,rely=0,relheight=1) + + + def Choisir(self): + try: + selection=self.zone_texte.selection_get() + except: + showerror("Pas de donnée sélectionnée", + "Selectionner un parametre") + l_param = "" + for param in selection.splitlines(): + nomparam=param[0:param.find("=")-1] + if nomparam != '' : + l_param=l_param+nomparam+',' + self.parent.entry.delete(0,Tkinter.END) + self.parent.entry.insert(0,l_param[0:-1]) + self.parent.valid_valeur() + self.quit() + +class Formulaire: + """ + Cette classe permet de créer une boîte Dialog dans laquelle + on affiche un formulaire à remplir par l'utilisateur + """ + def __init__(self,fen_pere,obj_pere=None,titre="",texte="",items=(),mode='query',commande=None): + self.resultat=0 + if items in ((),[]) : return + self.items = items + self.titre = titre + self.texte = texte + self.fen_pere = fen_pere + self.obj_pere = obj_pere + self.mode= mode + self.command = commande + self.display() + + def display(self): + self.init_validateurs() + self.init_fenetre() + self.init_texte() + self.init_items_formulaire() + self.fenetre.activate(geometry='centerscreenalways') + + def init_validateurs(self): + """ + Crée le dictionnaire des validateurs des objets reconnus par le formulaire + """ + self.d_validateurs = {} + self.d_validateurs['rep'] = self.repvalidator + self.d_validateurs['file'] = self.filevalidator + self.d_validateurs['cata']= self.catavalidator + self.d_validateurs['mot']= self.motvalidator + self.d_validateurs['mot2']= self.mot2validator + self.d_validateurs['mot3']= self.mot3validator + self.d_validateurs['mot4']= self.mot4validator + + def init_fenetre(self): + """ + Crée la fenêtre Dialog + """ + if self.mode == 'query': + buttons=('Valider','Annuler') + defaultbutton = 'Valider' + elif self.mode == 'display': + if self.command : + buttons=(self.command[0],'OK') + defaultbutton = 'OK' + else: + buttons=('OK') + defaultbutton = 'OK' + self.fenetre = Pmw.Dialog(self.fen_pere, + buttons=buttons, + defaultbutton = defaultbutton, + title = self.titre, + command = self.execute) + self.fenetre.withdraw() + + def init_texte(self): + """ + Crée le label qui affiche le texte à l'intérieur du panneau + """ + fonte=fontes.standard + fr_texte = Frame(self.fenetre.interior(),height=60) + fr_texte.pack(side='top',fill='x',expand=1) + Label(fr_texte,text = self.texte, font=fonte).place(relx=0.5,rely=0.5,anchor='center') + + def init_items_formulaire(self): + """ + Crée et affiche les items dans la boîte de dialogue + """ + self.radiobut = 0 + self.widgets = [] + self.item_widgets = {} + length_maxi = 0 + for item in self.items: + if len(item[0])>length_maxi : length_maxi = len(item[0]) + window = self.fenetre.interior() + for item in self.items : + if len(item) == 4 : + label,nature,nom_var,defaut = item + chaine="Yes" + chaine2="No" + else : + label,nature,nom_var,defaut,chaine,chaine2 = item + + # création de la frame + fr_item = Frame(window,height=40,width=700) + fr_item.pack(side='top',fill='x',expand=1) + # création du label + Label(fr_item,text = label).place(relx=0.05,rely=0.4) + if nature in ('rep','file','cata','mot','mot2','mot3','mot4'): + # création de l'entry + e_item = Entry(fr_item) + e_item.place(relx=0.5,rely=0.4,relwidth=0.45) + self.widgets.append(e_item) + self.item_widgets[item] = e_item + if defaut : e_item.insert(0,str(defaut)) + elif nature == 'YesNo': + # création de la StringVar + var = StringVar() + setattr(self,'item_'+nom_var,var) + var.set(defaut) + # création du radiobouton + rb1 = Radiobutton(fr_item,text=chaine,variable=var,value='OUI') + rb2 = Radiobutton(fr_item,text=chaine2,variable=var,value='NON') + rb1.place(relx=0.65,rely=0.5,anchor='center') + rb2.place(relx=0.80,rely=0.5,anchor='center') + self.widgets.append((rb1,rb2)) + self.item_widgets[item] = var + # détermination de la méthode à appliquer sur les boutons + if self.mode == 'query': + function = self.active + elif self.mode == 'display': + function = self.inactive + else: + return + # on applique la méthode sur les boutons (activation ou désactivation) + for widget in self.widgets : + if type(widget) == types.TupleType: + for widg in widget : + apply(function,(widg,),{}) + else: + apply(function,(widget,),{}) + + def active(self,widget): + """ + Active le widget passé en argument + """ + widget.configure(state='normal',bg='white') + + def inactive(self,widget): + """ + Inactive le widget passé en argument + """ + if not isinstance(widget,Radiobutton) : + widget.configure(state='disabled',bg='gray95') + else : + widget.configure(state='disabled') + +# -------------------------------------------------------------------------------- +# Validateurs des noms de répertoire, de fichiers et de catalogues +# ------------------------------------------------------------------------------- + + def motvalidator(self,text): + text2="("+text+")" + return self.motlongueurvalidator(text2,1) + + def mot2validator(self,text): + return self.motlongueurvalidator(text,2) + + def mot3validator(self,text): + return self.motlongueurvalidator(text,3) + + def mot4validator(self,text): + return self.motlongueurvalidator(text,4) + + def motlongueurvalidator(self,text,longueur): + try : + if ((text[0] != "(") or (text[-1] != ")")) : return 0 + if len(text.split(",")) != longueur : return 0 + return 1 + except : + return 0 + + def repvalidator(self,text): + """ + Teste si text peut faire référence à un répertoire ou non + Retourne 1 si valide, 0 sinon + """ + return os.path.isdir(text),'Répertoire introuvable : %s' %text + + def filevalidator(self,text): + """ + Teste si text peut faire référence à un fichier ou non + Retourne 1 si valide, 0 sinon + """ + return os.path.isfile(text),'Fichier introuvable : %s' %text + + def catavalidator(self,text): + """ + Teste si text est un chemin d'accès valide à un catalogue + Retourne 1 si valide, 0 sinon + """ + return os.path.isfile(text),"Catalogue introuvable : %s" %text + +# -------------------------------------------------------------------------------- +# Méthodes callbacks des boutons et de fin +# -------------------------------------------------------------------------------- + + def execute(self,txt): + """ + Cette commande est activée à chaque clic sur un bouton. + Redirige l'action sur la bonne méthode en fonction du bouton activé + """ + if txt == 'Valider': + self.fini() + elif txt in ('OK','Annuler'): + self.quit() + elif txt == 'Modifier': + self.resultat = apply(self.command[1],(),{}) + self.fenetre.destroy() + else : + print "Nom de bouton inconnu" + self.quit() + + def fini(self): + """ + Commande qui termine le panneau et sauvegarde les nouvelles options + dans l'objet resultat (dictionnaire) + """ + dico={} + for item,widget in self.item_widgets.items(): + nom_var = item[2] + type_var = item[1] + valeur = widget.get() + if self.d_validateurs.has_key(type_var): + test = self.d_validateurs[type_var](valeur) + if not test : + # une entrée n'est pas valide --> on la met en surbrillance et on quitte la méthode + # sans tuer la fenêtre bien sûr + widget.selection_range(0,END) + return + dico[nom_var] = valeur + self.fenetre.destroy() + self.resultat=dico + + def quit(self): + self.fenetre.destroy() + self.resultat=None + +class ListeChoix : + """ Cette classe est utilisée pour afficher une liste de choix passée en paramètre + en passant les commandes à lancer suivant différents bindings """ + def __init__(self,parent,page,liste,liste_commandes=[],liste_marques =[],active ='oui',filtre='non',titre='', + optionReturn=None, fonte_titre=fontes.standard_gras_souligne): + self.parent = parent + self.page = page + self.liste = liste + self.dico_labels={} + self.dico_mots={} + self.nBlabel = 0 + self.dico_place={} + self.dico_mots={} + self.selection = None + self.liste_commandes = liste_commandes + self.liste_marques = liste_marques + self.arg_selected='' + self.active = active + self.titre = titre + self.filtre = filtre + self.optionReturn = optionReturn + self.fonte_titre=fonte_titre + self.init() + + def init(self): + self.make_label_titre() + self.make_entry_filtre() + self.make_text_box() + try: + self.entry.component('entry').focus() + except: + pass + + def make_label_titre(self): + """ Crée le label correspondant au titre """ + if self.titre == '' : return + self.label = Label(self.page, + text = self.titre, + font = self.fonte_titre) + self.label.pack(side='top',pady=2) + + def make_entry_filtre(self): + """ Crée l'entry permettant à l'utilisateur d'entrer un filtre de sélection dans la liste """ + if self.filtre != 'oui' : return + self.entry = Pmw.EntryField(self.page,labelpos='w', + label_text="Filtre :", + command=self.entry_changed) + self.entry.pack(side='top',pady=2) + + def make_text_box(self): + """ Crée la fenêtre texte dans laquelle sera affichée la liste """ + self.MCbox = Text (self.page,relief='sunken',bg='gray95',bd=2) + self.MCscroll = Scrollbar (self.page,command = self.MCbox.yview) + self.MCscroll.pack(side='right',fill ='y',pady=2) + self.MCbox.pack(fill='y',expand=1,padx=2,pady=2) + self.MCbox.configure(yscrollcommand=self.MCscroll.set) + + + def affiche_liste(self): + """ Affiche la liste dans la fenêtre""" + liste_labels=[] + self.MCbox.config(state=NORMAL) + self.MCbox.delete(1.0,END) + self.nBlabel = 0 + self.dico_place={} + for objet in self.liste : + if type(objet) == types.InstanceType: + try: + mot = objet.nom + except: + mot = str(objet) + elif type(objet) in (types.StringType,types.IntType): + mot = objet + elif type(objet) == types.FloatType : + mot = self.parent.get_valeur_texte(objet) + if mot == "" : + mot = str(objet) + elif type(objet) == types.TupleType : + mot="(" + premier=1 + for val in objet: + if (not premier): + mot=mot+"," + else: + premier=0 + valtexte = self.parent.get_valeur_texte(val) + if valtexte != "" : + mot=mot+valtexte + else: + mot=mot+str(val) + mot=mot+")" + elif string.find(str(type(objet)),".SD.") : + mot=objet.nom + else : + mot=`objet` + label = Label(self.MCbox, + text = mot, + fg = 'black',bg = 'gray95',justify = 'left') + self.dico_labels[mot]=label + self.dico_place[mot]=self.nBlabel + self.dico_mots[label]=mot + self.nBlabel=self.nBlabel+1 + liste_labels.append(label) + self.MCbox.window_create(END, + window=label, + stretch = 1) + self.MCbox.insert(END,'\n') + if self.optionReturn != None : + label.bind("",lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitemsurligne(x,l,c)) + label.bind("",lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitemsurligne(x,l,c)) + label.bind("",lambda e,s=self,x=objet,l=label : s.selectNextItem(x,l)) + label.bind("",lambda e, s=self,x=objet,l=label : s.selectNextItem(x,l)) + label.bind("" ,lambda e,s=self,x=objet,l=label : s.selectPrevItem(x,l)) + label.bind("" ,lambda e,s=self,x=objet,l=label : s.selectPrevItem(x,l)) + if self.active == 'oui': + label.bind(self.liste_commandes[0][0],lambda e,s=self,c=self.liste_commandes[0][1],x=objet,l=label : s.selectitem(x,l,c)) + label.bind(self.liste_commandes[1][0],lambda e,s=self,c=self.liste_commandes[1][1],x=objet,l=label : s.deselectitem(l,x,c)) + label.bind(self.liste_commandes[2][0],lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitem(x,l,c)) + + for marque in self.liste_marques: + try: + self.markitem(liste_labels[marque]) + except: + pass + + self.MCbox.config(state=DISABLED) + self.selection = None + self.dontselect=0 + for event,callback in self.liste_commandes: + if event == "": + self.selection=None,None,callback + break + + def clear_marque(self): + try: + self.dico_labels[self.arg_selected].configure(bg='gray95',fg='black') + self.arg_selected = '' + except : + pass + + def surligne(self,marque): + try : + self.highlightitem(self.dico_labels[marque]) + self.arg_selected = marque + except: + pass + + def chooseitemsurligne(self,mot,label,commande): + """ Active la méthode de choix passée en argument""" + try: + mot=self.arg_selected + commande(mot) + except AsException,e: + raison=str(e) + showerror(raison.split('\n')[0],raison) + + def chooseitem(self,mot,label,commande): + """ Active la méthode de choix passée en argument""" + try: + commande(mot) + except AsException,e: + raison=str(e) + showerror(raison.split('\n')[0],raison) + + def afficheMot(self,mot): + """ Pour contourner le bug sur l index + on commence par la methode dite normale + puis par la methode de contournement + puis rien du tout + """ + try: + labelsuivant=self.dico_labels[mot] + index = self.MCbox.index(labelsuivant) + self.MCbox.see(index) + except : + posmot=self.dico_place[mot] + totale=self.nBlabel + 0.0 + self.MCbox.yview_moveto(posmot/totale) + + def selectNextItem(self,mot,label): + index=self.liste.index(mot) + indexsuivant=index+1 + if indexsuivant > len(self.liste) -1: + indexsuivant=0 + motsuivant=self.liste[indexsuivant] + labelsuivant=self.dico_labels[motsuivant] + self.afficheMot(motsuivant) + self.selectthis(motsuivant,labelsuivant,self.selection[2],) + self.dontselect=1 + + def selectPrevItem(self,mot,label): + index=self.liste.index(mot) + indexprec=index-1 + motprec=self.liste[indexprec] + labelprec=self.dico_labels[motprec] + self.afficheMot(motprec) + self.selectthis(motprec,labelprec,self.selection[2],) + self.dontselect=1 + + def selectthis(self,mot,label,commande) : + self.clear_marque() + if self.selection != None : + self.deselectitem(self.selection[1],self.selection[0],self.selection[2],) + self.highlightitem(label) + self.selection = (mot,label,commande) + self.arg_selected = mot + if commande : commande(mot) + + def selectitem(self,mot,label,commande) : + """ Met l'item sélectionné (représenté par son label) en surbrillance + et lance la commande associée au double-clic""" + if self.dontselect: + self.dontselect=0 + return + self.selectthis(mot,label,commande) + + def highlightitem(self,label) : + """ Met l'item représenté par son label en surbrillance """ + label.focus_set() + label.configure(bg='#00008b',fg='white') + + def markitem(self,label): + """ Met l'item (représenté par son label) en rouge """ + label.configure(bg='gray95',fg='red') + + def deselectitem(self,label,mot='',commande=None) : + """ Remet l'item (représenté par son label) en noir""" + if label:label.configure(bg='gray95',fg='black') + self.arg_selected = '' + if commande and mot : commande(mot) + + def cherche_selected_item(self): + try : + index=self.MCbox.index(self.selection[1]) + lign,col=map(int,string.split(index,'.')) + except : + label=self.dico_labels[self.arg_selected] + mot=self.dico_mots[label] + lign=self.dico_place[mot]+1 + return lign + + def remove_selected_item(self): + try : + index=self.MCbox.index(self.selection[1]) + lign,col=map(int,string.split(index,'.')) + except : + label=self.dico_labels[self.arg_selected] + mot=self.dico_mots[label] + lign=self.dico_place[mot]+1 + del self.liste[lign-1] + self.affiche_liste() + + def entry_changed(self,event=None): + """ Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu + de l'entry et frappe """ + if self.arg_selected != '' : self.deselectitem(self.dico_labels[self.arg_selected]) + filtre = self.entry.get()+"*" + FILTRE = string.upper(filtre) + self.dontselect=0 + for arg in self.liste : + if fnmatch.fnmatch(arg,filtre) or fnmatch.fnmatch(arg,FILTRE) : + label=self.dico_labels[arg] + self.afficheMot(arg) + self.selectitem(arg,label,self.selection[2]) + break + + #try : + #self.dico_labels[self.arg_selected].focus_set() + #except : + #pass + + + # PN attention à la gestion des paramétres + # cela retourne H = 1 , et ni H, ni 1 + # print repr(val) + # print val.__class__.__name__ + def get_liste(self): + l=[] + for val in self.liste: +# try: +# v = eval(val) +# l.append(v) +# except: + l.append(val) + return l + + def put_liste(self,liste): + self.liste = liste + self.affiche_liste() + +class Affichage : + """ Cette classe permet d'afficher au lancement d'EFICAS le message + d'attente et la barre de progression""" + def __init__(self,master,message,barre ='oui'): + from Tools.foztools.foztools import Slider + fonte=fontes.standard12_gras + self.master=master + self.frame = Frame(self.master) + self.frame.pack(expand=1,fill='both') + self.mess = Label(self.frame,text=message,justify='center', + bd=2,relief='groove',font=fonte) + self.mess.pack(in_ = self.frame,side='top',expand=1,fill='both') + self.progress = Slider(self.frame,value=0,max=100,orientation='horizontal', + fillColor='#00008b',width=200,height=30, + background='white',labelColor='red') + if barre == 'oui': + self.progress.frame.pack(in_=self.frame,side='top') + self.master.update() + if barre == 'oui': + self.progress.frame.after(1000,self.update) + + def configure(self,**options): + if options.has_key('message'): + self.mess.configure(text=options['message']) + if options.has_key('barre'): + if options['barre'] == 'oui' : + self.progress.frame.pack(in_=self.frame,side='top') + elif options['barre'] == 'non' : + self.progress.frame.pack_forget() + self.master.update_idletasks() + + def quit(self): + self.frame.destroy() + self.master.update() + + def update(self,event=None): + """ Permet de faire avancer la barre de progression """ + try : + bar=self.progress + bar.value = bar.value+self.increment + bar.update() + self.master.after(100,self.update) + except: + pass + + def configure_barre(self,nb): + """ Calcule l'incrément de progression de la barre en fonction + du nombre d'opérations à effectuer afin que le compteur + soit à 100% à la fin des opérations""" + self.increment = 100./nb + self.progress.update() + +class Ask_Format_Fichier : + """ + Cette classe permet de créer une fenêtre Toplevel dans laquelle + on propose le choix du format de fichier de commandes à ouvrir + """ + def __init__(self,appli): + self.fenetre = Toplevel() + self.fenetre.configure(width = 250,height=150) + self.fenetre.protocol("WM_DELETE_WINDOW", self.quit) + self.fenetre.title("Choix du format du fichier de commandes") + # définition des frames + self.frame_texte = Frame(self.fenetre) + self.frame_radioboutons = Frame(self.fenetre) + self.frame_bouton_ok = Frame(self.fenetre) + self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.3) + self.frame_radioboutons.place(relheight=0.5,relx=0,rely=0.3,relwidth=1.) + self.frame_bouton_ok.place(relheight=0.2,relx=0,rely=0.8,relwidth=1.) + # définition de la zone texte et du scrollbar + zone_texte = Label(self.frame_texte,text = "Format du fichier à ouvrir :") + zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10) + # définition des radioboutons + Radiobutton(self.frame_radioboutons,text='Format Aster (Code_Aster --> v5)', + variable=appli.format_fichier,value='Aster').pack(anchor='n') + Radiobutton(self.frame_radioboutons,text='Format Python (Code_Aster v6-->)', + variable=appli.format_fichier,value='Python').pack(anchor='n') + # création du bouton OK + Button(self.frame_bouton_ok,text='OK',command=self.quit).pack(anchor='n') + # centrage de la fenêtre + centerwindow(self.fenetre) + + def quit(self): + self.fenetre.destroy() + +class BARRE_K2000(Toplevel): + def __init__(self,master=None,text = ""): + Toplevel.__init__(self,master,relief='groove') + self.master.iconify() + self.geometry("250x100+0+0") + self.protocol("WM_DELETE_WINDOW",self.quit) + # frame principale dans self (= Toplevel) + self.frame = Frame(self) + self.frame.place(relwidth=1,relheight=1) + # frame contenant le texte à afficher + self.frame_text = Frame(self.frame) + self.frame_text.place(relwidth=1,relheight=0.75,rely=0) + # frame contenant le canvas de la barre + self.frame_canv = Frame(self.frame) + self.frame_canv.place(relwidth=1,relheight=0.25,rely=0.75) + # canvas dans lequel sera affichée la barre K2000 + self.canvas = Canvas(self.frame_canv) + self.canvas.place(relx=0.5,rely=0.5,relheight=0.8,relwidth=0.8,anchor='center') + # on affiche le texte et la barre + self.build_text(text) + self.build_batons() + #self.overrideredirect(1) + # on active la barre ... + self.master.after(1000,self.launch) + # on centre la fenêtre + centerwindow(self) + self.focus() + + def build_text(self,text): + """ + Affichage de text dans frame_text + """ + self.texte_var = StringVar() + self.texte_var.set(text) + Label(self.frame_text,textvariable=self.texte_var).place(relx=0.5,rely=0.5,anchor='center') + + def build_batons(self): + """ + Construit la suite de bâtons dans le canvas + """ + self.l_batons=[] + self.black = -1 + self.sens = 'D' + self.quit = 0 + for i in range(0,40): + id = self.canvas.create_rectangle(i*5,0,(i+1)*5,20,fill='gray90',outline='') + self.l_batons.append(id) + + def launch(self): + """ + Active la barre K2000 en affichant les bâtons avec des couleurs en dégradé + """ + if self.quit == 1 : + self.destroy() + self.master.deiconify() + return + if self.sens == 'D': + self.black = self.black+1 + l_bat = self.l_batons[0:self.black+1] + l_bat.reverse() + elif self.sens == 'G': + self.black = self.black-1 + l_bat = self.l_batons[self.black:] + i=0 + for bat in l_bat : + num_color = 5+i*10 + if num_color < 10 : color = 'black' + elif num_color > 90 : color = 'white' + else: color = 'gray'+`num_color` + self.canvas.itemconfigure(bat,fill=color) + i=i+1 + if self.black == len(self.l_batons) : + self.sens = 'G' + if self.black == 0 and self.sens == 'G':self.sens = 'D' + self.after(80,self.launch) + + def update_text(self,new_text): + """ + Remplace le texte affiché par new_text + """ + self.texte_var.set(new_text) + + def quit(self): + self.quit = 1 + +class ListeChoixParGroupes(ListeChoix) : + """ + Cette classe est utilisée pour afficher une liste de commandes classées par + groupes. L'utilisateur peut réaliser des actions de selection + qui déclenchent des actions spécifiées par les bindings contenus dans liste_commandes + Exemple de binding: + liste_commandes = (("",self.selectCmd), + ("",self.deselectCmd), + ("",self.defCmd)) + Il s'agit d'une liste de doublets dont le premier element est un evenement et le + deuxieme un callback a appeler sur l'evenement en question. + + """ + def __init__(self,parent,page,liste_groupes,dict_groupes,liste_commandes=[],liste_marques =[], + active ='oui',filtre='non',titre='',optionReturn=None,fonte_titre=fontes.standard_gras_souligne): + self.parent = parent + self.page = page + self.liste_groupes = liste_groupes + self.dict_groupes = dict_groupes + self.dico_labels={} + self.selection = None + self.liste_commandes = liste_commandes + self.liste_marques = liste_marques + self.arg_selected='' + self.active = active + self.titre = titre + self.filtre = filtre + self.optionReturn = optionReturn + self.fonte_titre=fonte_titre + self.init() + + def affiche_liste(self): + """ Affiche la liste dans la fenêtre""" + liste_labels=[] + self.dico_mots={} + self.MCbox.config(state=NORMAL) + self.MCbox.delete(1.0,END) + for grp in self.liste_groupes: + # On itère sur les groupes + if grp == "CACHE":continue + liste_commandes=self.dict_groupes[grp] + text="GROUPE<<<<<<<< "+grp+" " + text=text+">"*max(0,30-len(text)) + label = Label(self.MCbox, + text = text, + fg = 'black',bg = 'gray95',justify = 'left') + # On stocke la relation entre le nom de la commande et le label + self.dico_labels[grp]=label + liste_labels.append(label) + self.MCbox.window_create(END, + window=label, + stretch = 1) + self.MCbox.insert(END,'\n') + for cmd in liste_commandes: + label = Label(self.MCbox, + text = cmd, + fg = 'black',bg = 'gray95',justify = 'left') + # On stocke la relation entre le nom de la commande et le label + self.dico_labels[cmd]=label + self.dico_mots[label]=cmd + self.MCbox.window_create(END, + window=label, + stretch = 1) + self.MCbox.insert(END,'\n') + + def null(*tp,**args): return + + if self.active == 'oui': + # Traitement par defaut des evenements + label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.selectitem(x,l,c)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.deselectitem(l,x,c)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label: s.chooseitem(x,l,c)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectNextItem(x,l,c,gr,x)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectNextItem(x,l,c,gr,x)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectPrevItem(x,l,c,gr,x)) + label.bind("",lambda e,s=self,c=null,x=cmd,l=label,gr=grp: s.selectPrevItem(x,l,c,gr,x)) + + # Si des callbacks sont definis on les utilise + for event,callback in self.liste_commandes: + if event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.selectitem(x,l,c)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.deselectitem(l,x,c)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label: s.chooseitem(x,l,c)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectNextItem(x,l,c,gr,x)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectNextItem(x,l,c,gr,x)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectPrevItem(x,l,c,gr,x)) + elif event == "": + label.bind("",lambda e,s=self,c=callback,x=cmd,l=label,gr=grp:s.selectPrevItem(x,l,c,gr,x)) + else: + label.bind(event,lambda e,s=self,c=callback,x=cmd,l=label: c()) + + for marque in self.liste_marques: + try: + self.markitem(liste_labels[marque]) + except: + pass + + self.MCbox.config(state=DISABLED) + self.selection = None + self.dontselect=0 + for event,callback in self.liste_commandes: + if event == "": + self.selection=None,None,callback + break + + def selectPrevItem(self,mot,label,callback,group,cmd): + g=self.liste_groupes.index(group) + liste_commandes=self.dict_groupes[group] + c=liste_commandes.index(cmd) + if c > 0: + co=liste_commandes[c-1] + else: + # debut de liste. On passe au groupe precedent + if g > 0: + gr=self.liste_groupes[g-1] + co=self.dict_groupes[gr][-1] + else: + # debut des groupes. On ne fait rien + return + # On a trouve l'item precedent + labelsuivant=self.dico_labels[co] + index = self.MCbox.index(labelsuivant) + self.MCbox.see(index) + self.selectthis(co,labelsuivant,self.selection[2],) + self.dontselect=1 + + def selectNextItem(self,mot,label,callback,group,cmd): + g=self.liste_groupes.index(group) + liste_commandes=self.dict_groupes[group] + c=liste_commandes.index(cmd) + try: + co=liste_commandes[c+1] + except: + # fin de liste. On passe au groupe suivant + try: + gr=self.liste_groupes[g+1] + co=self.dict_groupes[gr][0] + except: + # fin des groupes. On ne fait rien + return + # On a trouve l'item suivant + labelsuivant=self.dico_labels[co] + index = self.MCbox.index(labelsuivant) + self.MCbox.see(index) + self.selectthis(co,labelsuivant,self.selection[2],) + self.dontselect=1 + + def entry_changed(self,event=None): + """ + Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu + de l'entry et frappe + """ + if self.arg_selected != '' : self.deselectitem(self.dico_labels[self.arg_selected]) + + filtre = self.entry.get()+"*" + FILTRE = string.upper(filtre) + # + # On cherche d'abord dans les noms de groupe + # puis dans les noms de commande groupe par groupe + # + for grp in self.liste_groupes: + if fnmatch.fnmatch(grp,filtre) or fnmatch.fnmatch(grp,FILTRE) : + cmd=self.dict_groupes[grp][0] + label=self.dico_labels[cmd] + index = self.MCbox.index(label) + self.MCbox.see(index) + self.selectitem(cmd,label,self.selection[2]) + # On a trouve un groupe on arrete la recherche + return + + for grp in self.liste_groupes: + for cmd in self.dict_groupes[grp] : + if fnmatch.fnmatch(cmd,filtre) or fnmatch.fnmatch(cmd,FILTRE) : + label=self.dico_labels[cmd] + index = self.MCbox.index(label) + self.MCbox.see(index) + self.selectitem(cmd,label,self.selection[2]) + # On a trouve une commande on arrete la recherche + return + diff --git a/Misc/traced.py b/Misc/traced.py new file mode 100644 index 00000000..cece5acf --- /dev/null +++ b/Misc/traced.py @@ -0,0 +1,47 @@ +indent = 0 +indStr = ' ' + +def srepr(*argl,**argd): + #parse the arguments and create a string representation + args = [] + for item in argl: + args.append('%s' % str(item)) + for key,item in argd.items(): + args.append('%s=%s' % (key,str(item))) + argstr = ','.join(args) + return argstr + +def logfunc(f): + def _method(*argl,**argd): + global indent + print indStr*indent+f.__module__+"."+f.__name__+"("+srepr(*argl,**argd)+")" + indent += 1 + r=f(*argl,**argd) + indent -= 1 + print indStr*indent+str(r) + return r + return _method + +def logmeth(f): + def _method(self,*argl,**argd): + global indent + print indStr*indent+str(self)+"."+f.__name__+"("+srepr(*argl,**argd)+")" + indent += 1 + r=f(self,*argl,**argd) + indent -= 1 + print indStr*indent+str(r) + return r + return _method + +if __name__ == "__main__": + @logfunc + def g(a,b): + return a + class A: + @logmeth + def h(self,a): + return g(a,a) + + g(1,2) + a=A() + a.h(1) diff --git a/Noyau/N_ASSD.py b/Noyau/N_ASSD.py index 92a3a4cb..79e7dcdc 100644 --- a/Noyau/N_ASSD.py +++ b/Noyau/N_ASSD.py @@ -1,4 +1,4 @@ -#@ MODIF N_ASSD Noyau DATE 02/04/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_ASSD Noyau DATE 02/06/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -56,7 +56,8 @@ class ASSD(object): self.id = self.parent.reg_sd(self) else : self.id = self.parent.o_register(self) - + # permet de savoir si le concept a été calculé (1) ou non (0) + self.executed = 0 # initialise la partie "sd" super(ASSD, self).__init__(nomj='?&?&?&?&') diff --git a/Noyau/N_CONVERT.py b/Noyau/N_CONVERT.py new file mode 100644 index 00000000..9d3443dd --- /dev/null +++ b/Noyau/N_CONVERT.py @@ -0,0 +1,102 @@ +#@ MODIF N_CONVERT Noyau DATE 30/11/2007 AUTEUR COURTOIS M.COURTOIS +# -*- coding: iso-8859-1 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# ====================================================================== + +""" + Module de conversion des valeurs saisies par l'utilisateur après vérification. +""" + +# ----------------------------------------------------------------------------- +def is_int(real): + """Est-ce que 'real' a une valeur entière ? + """ + return abs(int(real) - real) < 1.e-12 + +# ----------------------------------------------------------------------------- +class Conversion: + """Conversion de type. + """ + def __init__(self, name, typ): + self.name = name + self.typ = typ + + def convert(self, obj): + """Filtre liste + """ + in_type = type(obj) + if in_type not in (list, tuple): + obj = (obj,) + + result = [] + for o in obj: + result.append(self.function(o)) + + if in_type not in (list, tuple): + return result[0] + else: + # ne marche pas avec MACR_RECAL qui attend une liste et non un tuple + return tuple(result) + + def function(self, o): + raise NotImplementedError, 'cette classe doit être dérivée' + +# ----------------------------------------------------------------------------- +class TypeConversion(Conversion): + """Conversion de type + """ + def __init__(self, typ): + Conversion.__init__(self, 'type', typ) + +# ----------------------------------------------------------------------------- +class IntConversion(TypeConversion): + """Conversion en entier + """ + def __init__(self): + TypeConversion.__init__(self, 'I') + + def function(self, o): + if type(o) is float and is_int(o): + o = int(o) + return o + +# ----------------------------------------------------------------------------- +class FloatConversion(TypeConversion): + """Conversion de type + """ + def __init__(self): + TypeConversion.__init__(self, 'R') + + def function(self, o): + if type(o) in (int, float, long): + o = float(o) + return o + +# ----------------------------------------------------------------------------- +_convertI = IntConversion() +_convertR = FloatConversion() + +def ConversionFactory(name, typ): + if name == 'type': + if 'I' in typ: + return _convertI + elif 'R' in typ: + return _convertR + return None + + diff --git a/Noyau/N_FONCTION.py b/Noyau/N_FONCTION.py index 02c13ef4..5ac04bf7 100644 --- a/Noyau/N_FONCTION.py +++ b/Noyau/N_FONCTION.py @@ -1,4 +1,4 @@ -#@ MODIF N_FONCTION Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_FONCTION Noyau DATE 18/12/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -26,8 +26,6 @@ from __future__ import division from N_ASSD import ASSD -import string - from asojb import AsBase class FONCTION(ASSD):pass @@ -50,7 +48,7 @@ class formule(ASSD,AsBase): res=eval(self.expression,self.jdc.const_context, context) except : print 75*'!' - print '! '+string.ljust('Erreur evaluation formule '+self.nom,72)+'!' + print '! ' + '%-72s' % ('Erreur evaluation formule '+self.nom) + '!' print 75*'!' raise return res @@ -67,7 +65,7 @@ class formule(ASSD,AsBase): self.code=compile(texte,texte,'eval') except SyntaxError : print 75*'!' - print '! '+string.ljust('Erreur evaluation formule '+self.nom,72)+'!' + print '! ' + '%-72s' % ('Erreur evaluation formule '+self.nom) + '!' print 75*'!' raise @@ -88,3 +86,33 @@ class formule(ASSD,AsBase): del d['code'] return d + def Parametres(self): + """Equivalent de fonction.Parametres pour pouvoir utiliser des formules + à la place de fonctions dans certaines macro-commandes. + """ + from SD.sd_fonction import sd_formule + from Utilitai.Utmess import UTMESS + if not self.par_lot(): + TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT', 'I':'INTERPRE' } + sd = sd_formule(self.get_name()) + prol = sd.PROL.get() + nova = sd.NOVA.get() + if prol is None or nova is None: + UTMESS('F', 'SDVERI_2', valk=[objev]) + dico={ + 'INTERPOL' : ['LIN','LIN'], + 'NOM_PARA' : [s.strip() for s in nova], + 'NOM_RESU' : prol[3][0:16].strip(), + 'PROL_DROITE' : TypeProl['E'], + 'PROL_GAUCHE' : TypeProl['E'], + } + else: + raise Accas.AsException("Erreur dans fonction.Parametres en PAR_LOT='OUI'") + return dico + + +class formule_c(formule): + pass + + + diff --git a/Noyau/N_GEOM.py b/Noyau/N_GEOM.py index 76bf97c8..8a1fddaa 100644 --- a/Noyau/N_GEOM.py +++ b/Noyau/N_GEOM.py @@ -1,4 +1,4 @@ -#@ MODIF N_GEOM Noyau DATE 16/05/2006 AUTEUR DURAND C.DURAND +#@ MODIF N_GEOM Noyau DATE 19/11/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -57,8 +57,8 @@ class GEOM(ASSD): def __convert__(cls,valeur): if isinstance(valeur, (str,unicode)): - return valeur - raise ValueError, 'On attend une chaine de caractères' + return valeur + raise ValueError, 'On attend un chaine de caractères' __convert__=classmethod(__convert__) class geom(GEOM):pass diff --git a/Noyau/N_JDC.py b/Noyau/N_JDC.py index af1a3c07..d4d3222a 100644 --- a/Noyau/N_JDC.py +++ b/Noyau/N_JDC.py @@ -1,4 +1,4 @@ -#@ MODIF N_JDC Noyau DATE 30/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_JDC Noyau DATE 01/04/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -35,6 +35,30 @@ import N_CR from N_Exception import AsException from N_ASSD import ASSD + + + +MemoryErrorMsg = """MemoryError : + +En général, cette erreur se produit car la mémoire utilisée hors du fortran +(jeveux) est importante. + +Causes possibles : + - le calcul produit de gros objets Python dans une macro-commande ou + dans le jeu de commande lui-même, + - le calcul appelle un solveur (MUMPS par exemple) ou un outil externe + qui a besoin de mémoire hors jeveux, + - utilisation de jeveux dynamique, + - ... + +Solution : + - distinguer la mémoire limite du calcul (case "Mémoire totale" de astk) + de la mémoire réservée à jeveux (case "dont Aster"), le reste étant + disponible pour les allocations dynamiques. +""" + + + class JDC(N_OBJECT.OBJECT): """ Cette classe interprete un jeu de commandes fourni sous @@ -92,12 +116,15 @@ NONE = None # self.cr = self.CR(debut = "CR phase d'initialisation", fin = "fin CR phase d'initialisation") - self.g_context={} + # on met le jdc lui-meme dans le context global pour l'avoir sous + # l'etiquette "jdc" dans le fichier de commandes + self.g_context={ 'jdc' : self } # Liste pour stocker tous les concepts produits dans le JDC self.sds=[] # Dictionnaire pour stocker tous les concepts du JDC (acces rapide par le nom) self.sds_dict={} self.etapes=[] + self.index_etapes = {} self.mc_globaux={} self.current_context={} self.condition_context={} @@ -112,13 +139,25 @@ NONE = None compte-rendu self.cr """ try: - if self.appli != None : - self.appli.affiche_infos('Compilation du fichier de commandes en cours ...') - self.proc_compile=compile(self.procedure,self.nom,'exec') - except SyntaxError,e: - if CONTEXT.debug : traceback.print_exc() - l=traceback.format_exception_only(SyntaxError,e) - self.cr.exception("Compilation impossible : "+string.join(l)) + if self.appli != None : + self.appli.affiche_infos('Compilation du fichier de commandes en cours ...') + self.proc_compile=compile(self.procedure,self.nom,'exec') + except SyntaxError, e: + if CONTEXT.debug : traceback.print_exc() + l=traceback.format_exception_only(SyntaxError,e) + self.cr.exception("Compilation impossible : "+string.join(l)) + except MemoryError, e: + self.cr.exception(MemoryErrorMsg) + except SystemError, e: + erreurs_connues = """ +Causes possibles : + - offset too large : liste trop longue derrière un mot-clé. + Solution : liste = (valeurs, ..., ) + MOT_CLE = *liste, +""" + l=traceback.format_exception_only(SystemError,e) + l.append(erreurs_connues) + self.cr.exception("Compilation impossible : " + ''.join(l)) return def exec_compile(self): @@ -178,7 +217,12 @@ NONE = None # une erreur a ete identifiee if CONTEXT.debug : traceback.print_exc() - self.cr.exception(str(e)) + # l'exception a été récupérée avant (où, comment ?), + # donc on cherche dans le texte + txt = str(e) + if txt.find('MemoryError') >= 0: + txt = MemoryErrorMsg + self.cr.exception(txt) CONTEXT.unset_current_step() except NameError,e: @@ -241,6 +285,7 @@ NONE = None et retourne un numéro d'enregistrement """ self.etapes.append(etape) + self.index_etapes[etape] = len(self.etapes) - 1 return self.g_register(etape) def o_register(self,sd): @@ -418,7 +463,7 @@ NONE = None # Si on insère des commandes (par ex, dans EFICAS), il faut préalablement # remettre ce pointeur à 0 if etape: - index_etape=self.etapes.index(etape) + index_etape = self.index_etapes[etape] else: index_etape=len(self.etapes) if index_etape >= self.index_etape_courante: @@ -429,7 +474,8 @@ NONE = None liste_etapes=self.etapes[self.index_etape_courante:index_etape] else: d=self.current_context={} - if self.context_ini:d.update(self.context_ini) + if self.context_ini: + d.update(self.context_ini) liste_etapes=self.etapes for e in liste_etapes: @@ -459,5 +505,6 @@ NONE = None et remet à jour la parenté de l'étape et des concepts """ self.etapes.append(etape) + self.index_etapes[etape] = len(self.etapes) - 1 etape.reparent(self) etape.reset_jdc(self) diff --git a/Noyau/N_MACRO_ETAPE.py b/Noyau/N_MACRO_ETAPE.py index 28940f2c..c2a53700 100644 --- a/Noyau/N_MACRO_ETAPE.py +++ b/Noyau/N_MACRO_ETAPE.py @@ -1,4 +1,4 @@ -#@ MODIF N_MACRO_ETAPE Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_MACRO_ETAPE Noyau DATE 28/11/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -76,6 +76,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE): self.current_context={} self.index_etape_courante=0 self.etapes=[] + self.index_etapes={} self.sds=[] # Dans le cas d'une macro écrite en Python, l'attribut Outputs est un # dictionnaire qui contient les concepts produits de sortie @@ -268,7 +269,7 @@ Causes possibles : # Si on insère des commandes (par ex, dans EFICAS), il faut # préalablement remettre ce pointeur à 0 if etape: - index_etape=self.etapes.index(etape) + index_etape = self.index_etapes[etape] else: index_etape=len(self.etapes) @@ -426,6 +427,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co et demande d enregistrement global aupres du JDC """ self.etapes.append(etape) + self.index_etapes[etape] = len(self.etapes) - 1 idetape=self.jdc.g_register(etape) return idetape @@ -651,6 +653,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co passée en argument (etape) """ self.etapes=[] + self.index_etapes={} for etp in etape.etapes: new_etp=etp.copy() new_etp.copy_reuse(etp) @@ -665,6 +668,8 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co self.NommerSdprod(new_sd,etp.sd.nom) new_etp.copy_intern(etp) self.etapes.append(new_etp) + self.index_etapes[new_etp] = len(self.etapes) - 1 + def reset_jdc(self,new_jdc): """ diff --git a/Noyau/N_MCCOMPO.py b/Noyau/N_MCCOMPO.py index 2205ae34..6509c708 100644 --- a/Noyau/N_MCCOMPO.py +++ b/Noyau/N_MCCOMPO.py @@ -1,4 +1,4 @@ -#@ MODIF N_MCCOMPO Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_MCCOMPO Noyau DATE 18/12/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -367,17 +367,17 @@ class MCCOMPO(N_OBJECT.OBJECT): mocle.reparent(self) def get_sd_utilisees(self): - """ + """ Retourne la liste des concepts qui sont utilisés à l'intérieur de self ( comme valorisation d'un MCS) - """ - l=[] - for child in self.mc_liste: - l.extend(child.get_sd_utilisees()) - return l + """ + l=[] + for child in self.mc_liste: + l.extend(child.get_sd_utilisees()) + return l def get_sd_mcs_utilisees(self): - """ + """ Retourne la ou les SD utilisée par self sous forme d'un dictionnaire : - Si aucune sd n'est utilisée, le dictionnaire est vide. - Sinon, les clés du dictionnaire sont les mots-clés derrière lesquels on @@ -387,13 +387,14 @@ class MCCOMPO(N_OBJECT.OBJECT): { 'VALE_F': [ , ], 'MODELE': [] } - """ - dico = {} - for child in self.mc_liste: - daux = child.get_sd_mcs_utilisees() - for cle in daux.keys(): - dico[cle] = daux[cle] - return dico + """ + dico = {} + for child in self.mc_liste: + daux = child.get_sd_mcs_utilisees() + for cle in daux.keys(): + dico[cle] = dico.get(cle, []) + dico[cle].extend(daux[cle]) + return dico def get_mcs_with_co(self,co): """ diff --git a/Noyau/N_MCLIST.py b/Noyau/N_MCLIST.py index da2162fe..07462dd7 100644 --- a/Noyau/N_MCLIST.py +++ b/Noyau/N_MCLIST.py @@ -1,4 +1,4 @@ -#@ MODIF N_MCLIST Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_MCLIST Noyau DATE 18/12/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -121,7 +121,7 @@ class MCList(UserList.UserList): """ l=[] for child in self.data: - l.extend(child.get_sd_utilisees()) + l.extend(child.get_sd_utilisees()) return l def get_sd_mcs_utilisees(self): @@ -136,12 +136,13 @@ class MCList(UserList.UserList): { 'VALE_F': [ , ], 'MODELE': [] } - """ + """ dico = {} for child in self.data: - daux = child.get_sd_mcs_utilisees() - for cle in daux.keys(): - dico[cle] = daux[cle] + daux = child.get_sd_mcs_utilisees() + for cle in daux.keys(): + dico[cle] = dico.get(cle, []) + dico[cle].extend(daux[cle]) return dico def get_mcs_with_co(self,co): diff --git a/Noyau/N_MCSIMP.py b/Noyau/N_MCSIMP.py index d85eda44..2f42ae93 100644 --- a/Noyau/N_MCSIMP.py +++ b/Noyau/N_MCSIMP.py @@ -1,4 +1,4 @@ -#@ MODIF N_MCSIMP Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_MCSIMP Noyau DATE 30/11/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -32,6 +32,7 @@ from copy import copy from Noyau.N_ASSD import ASSD,assd from Noyau.N_CO import CO import N_OBJECT +from N_CONVERT import ConversionFactory class MCSIMP(N_OBJECT.OBJECT): """ @@ -58,6 +59,7 @@ class MCSIMP(N_OBJECT.OBJECT): self.nom=nom self.val = val self.parent = parent + self.convProto = ConversionFactory('type', typ=self.definition.type) self.valeur = self.GETVAL(self.val) if parent : self.jdc = self.parent.jdc @@ -68,16 +70,17 @@ class MCSIMP(N_OBJECT.OBJECT): self.jdc = None self.niveau = None self.etape = None - + def GETVAL(self,val): """ Retourne la valeur effective du mot-clé en fonction de la valeur donnée. Defaut si val == None """ if (val is None and hasattr(self.definition,'defaut')) : - return self.definition.defaut - else: - return val + val = self.definition.defaut + if self.convProto: + val = self.convProto.convert(val) + return val def get_valeur(self): """ diff --git a/Noyau/N_VALIDATOR.py b/Noyau/N_VALIDATOR.py index fbd8cc56..61a79a4c 100644 --- a/Noyau/N_VALIDATOR.py +++ b/Noyau/N_VALIDATOR.py @@ -1,4 +1,4 @@ -#@ MODIF N_VALIDATOR Noyau DATE 16/05/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF N_VALIDATOR Noyau DATE 09/10/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -80,7 +80,7 @@ class ListProtocol(Protocol): """Verificateur de protocole liste : convertit un objet quelconque en liste pour validation ultérieure""" def default(self,obj): if type(obj) == types.TupleType : - if obj[0] in ('RI','MP'): + if len(obj) > 0 and obj[0] in ('RI','MP'): #il s'agit d'un complexe ancienne mode. La cardinalite vaut 1 return (obj,) else: @@ -134,7 +134,7 @@ class TypeProtocol(PProtocol): else: print "Type non encore géré %s" %`type_permis` - raise ValError("%s n'est pas d'un type autorisé: %s" % (repr(obj),typ)) + raise ValError("%s (de type %s) n'est pas d'un type autorisé: %s" % (repr(obj),type(obj),typ)) def is_complexe(self,valeur): """ Retourne 1 si valeur est un complexe, 0 sinon """ diff --git a/Noyau/ascheckers.py b/Noyau/ascheckers.py index cfd3f131..0f191246 100644 --- a/Noyau/ascheckers.py +++ b/Noyau/ascheckers.py @@ -1,4 +1,4 @@ -#@ MODIF ascheckers Noyau DATE 23/05/2007 AUTEUR PELLET J.PELLET +#@ MODIF ascheckers Noyau DATE 28/11/2007 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== @@ -39,12 +39,18 @@ class Parmi(object): return "".join( l ) class CheckLog(object): - """Un validateur qui enregistre toutes - les erreurs trouvées""" + """Un validateur qui enregistre toutes les erreurs trouvées. + checkedXXX répond True si la "marq" courante est inférieure ou égale + à la celle de la dernière vérification. + Si on incrémentait "marq" à chaque étape, on revérifie à chaque fois. + """ def __init__(self): - self.msg = [] - self.names = {} - self.optional = False + self.msg = [] + self.names = {} + self.optional = False + self._marq = 1 + self._lastmarq = self._marq + self._debug = False def log(self, level, obj, msg ): if obj : @@ -58,8 +64,40 @@ class CheckLog(object): def warn(self, obj, msg ): self.log( 1, obj, msg ) - def visit(self, obj ): - self.names[obj.nomj()] = 1 + def visitOJB(self, obj): + key = obj.nomj() + self.names[key] = self._marq + + def visitAsBase(self, obj): + key = (obj.nomj(), obj.__class__.__name__) + self.names[key] = self._marq + + def force(self, force=False): + if not force: + self._marq = 1 + else: + self._lastmarq += 1 + self._marq = self._lastmarq + + def checkedOJB(self, obj): + key = obj.nomj() + res = self.names.get(key, 0) >= self._marq + self.help_dbg([key,], res) + return res + + def checkedAsBase(self, obj): + key = (obj.nomj(), obj.__class__.__name__) + res = self.names.get(key, 0) >= self._marq + self.help_dbg(key, res) + return res + + def help_dbg(self, key, res): + if self._debug: + if res: + s = 'ignore' + else: + s = 'check ' + print '#DBG %6d %s : %s' % (self._marq, s, ', '.join(key)) def __str__(self): d = { 0: "E", 1:"W" } diff --git a/Noyau/asojb.py b/Noyau/asojb.py index eaf091ec..adc4b85e 100644 --- a/Noyau/asojb.py +++ b/Noyau/asojb.py @@ -1,21 +1,21 @@ -#@ MODIF asojb Noyau DATE 04/06/2007 AUTEUR COURTOIS M.COURTOIS +#@ MODIF asojb Noyau DATE 07/04/2008 AUTEUR COURTOIS M.COURTOIS # -*- coding: iso-8859-1 -*- # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== # COPYRIGHT (C) 1991 - 2007 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. # ====================================================================== """ @@ -29,7 +29,7 @@ import traceback,sys # pour utilisation dans eficas try: import aster - from Utilitai.Utmess import U2MESS as UTMESS + from Utilitai.Utmess import UTMESS except: pass @@ -56,6 +56,11 @@ class AsBase(Type): if checker is None: checker = CheckLog() + # vérif déjà faite ? (en tenant compte du type) + if checker.checkedAsBase(self): + return checker + checker.visitAsBase( self ) + # vérifie les enfants : optional = checker.optional checker.optional = checker.optional or self.optional @@ -70,9 +75,10 @@ class AsBase(Type): try : v( checker ) except : - UTMESS("E", 'SDVERI_45') + UTMESS("E", 'SDVERI_45') # AJACOT NON print 40*'-' traceback.print_exc(file=sys.stdout) + print self checker.optional = optional return checker @@ -108,9 +114,22 @@ class AsBase(Type): l.append( indent + line ) return "\n".join( l ) - def __repr__(self): + def short_repr(self): return "<%s(%x,%r)>" % (self.__class__.__name__, id(self), self.nomj() ) + def long_repr(self): + if not hasattr(self, "par_lot") or self.par_lot(): + # hors Aster ou en par_lot='oui' + return self.short_repr() + else: + from Cata.cata import IMPR_CO, _F + IMPR_CO(CONCEPT=_F(NOM=self.nom), UNITE=6) + return '' + + def __repr__(self): + # par défaut, on fait court ! + return self.short_repr() + # ----------------------------------------------------------------------------- class JeveuxAttr(object): @@ -152,14 +171,22 @@ class JeveuxIntAttr(JeveuxAttr): def __get__(self, obj, klass): if obj is None: return self - return aster.jeveux_getattr( obj.nomj(), self.name )[0] + nomj = obj.nomj() + if aster.jeveux_exists( nomj ): + return aster.jeveux_getattr( nomj, self.name )[0] + else : + return None # ----------------------------------------------------------------------------- class JeveuxStrAttr(JeveuxAttr): def __get__(self, obj, klass): if obj is None: return self - return aster.jeveux_getattr( obj.nomj(), self.name )[1].strip() + nomj = obj.nomj() + if aster.jeveux_exists( nomj ): + return aster.jeveux_getattr( nomj, self.name )[1].strip() + else : + return None # ----------------------------------------------------------------------------- class OJB(AsBase): @@ -206,7 +233,7 @@ class OJB(AsBase): """Fonction utilitaire, renvoie une liste de chaines 'strippées'""" data = self.get() if data is not None: - return [ x.strip() for x in self.get() ] + return [ x.strip() for x in data ] else: return [] @@ -221,9 +248,9 @@ class OJB(AsBase): if checker is None: checker = CheckLog() # l'objet a déjà été vérifié, on ne fait rien - if self.nomj() in checker.names.keys(): - return checker - checker.visit( self ) + if checker.checkedOJB(self): + return checker + checker.visitOJB( self ) if self.exists: self.foreachattr( lambda k,v,obj,c: v.check(k, obj, c), self, checker ) @@ -248,6 +275,16 @@ def Facultatif( ojb ): class OJBVect(OJB): lonmax = JeveuxIntAttr("LONMAX") lonuti = JeveuxIntAttr("LONUTI") + _xous = "S" + _genr = "V" + +# ----------------------------------------------------------------------------- +class OJBPtnom(OJB): + nommax = JeveuxIntAttr("NOMMAX") + nomuti = JeveuxIntAttr("NOMUTI") + _xous = "S" + _genr = "N" + _type = "K" # ----------------------------------------------------------------------------- class OJBCollec(OJB): @@ -299,5 +336,7 @@ class AsVK80(OJBVect): _ltyp = 80 # Pour compatibilite -AsColl = OJBCollec AsObject = OJB +AsColl = OJBCollec +AsPn = OJBPtnom +AsVect = OJBVect diff --git a/Noyau/properties.py b/Noyau/properties.py deleted file mode 100644 index f6bb7c46..00000000 --- a/Noyau/properties.py +++ /dev/null @@ -1,24 +0,0 @@ -#@ MODIF properties Noyau DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS -# -*- coding: iso-8859-1 -*- -# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -version = "6.2.24" -date = "15/03/2002" - diff --git a/Tests/Makefile b/Tests/Makefile new file mode 100644 index 00000000..36d2b463 --- /dev/null +++ b/Tests/Makefile @@ -0,0 +1,28 @@ +all:elem elem7 comm comm9 comm7 ihm9 ihm ihm7 + +elem: + python run.py testelem +elem7: + python run.py testelem7 + +comm: + python run.py testcomm +comm9: + python run.py testcomm9 +comm7: + python run.py testcomm7 + +ihm9: + python run.py testihm9/testihm1.py + python run.py testihm9/testihm2.py + python run.py testihm9/testihm3.py + python run.py testihm9/testihm4.py +ihm: + python run.py testihm/testihm1.py + python run.py testihm/testihm2.py + python run.py testihm/testihm3.py + python run.py testihm/testihm4.py +ihm7: + python run.py testihm7/testihm1.py + python run.py testihm7/testihm2.py + python run.py testihm7/testihm4.py diff --git a/Tests/README b/Tests/README index eb536e9e..ae0b62f6 100644 --- a/Tests/README +++ b/Tests/README @@ -13,3 +13,6 @@ par test ou Test. Quelques tests dont le nom commence par futuretest ne sont pas exécutés. Ils identifient des limites actuelles d'Accas. + +Certains tests doivent etre exécutés séparément à cause d'un problème d'import de catalogue. +En particulier, les tests d'ihm (testihm*.py) entrent dans cette catégorie. diff --git a/Tests/editeur.ini b/Tests/editeur.ini index 92b7360f..d4118db0 100644 --- a/Tests/editeur.ini +++ b/Tests/editeur.ini @@ -37,8 +37,10 @@ rep_travail = "/tmp" initialdir=os.curdir # Choix des catalogues -rep_mat=os.path.join(rep_cata,'..','materiau') -rep_mat="/local/cchris/ASTER/instals/materiaux/NEW8/materiau" +#rep_mat=os.path.join(rep_cata,'..','materiau') +rep_mat_v7="/local/cchris/ASTER/instals/materiaux/STA7" +rep_mat_v8="/local/cchris/ASTER/instals/materiaux/STA8" +rep_mat_v9="/local/cchris/ASTER/instals/materiaux/NEW9" catalogues = ( ('ASTER','petit',os.path.join(rep_cata,'petitcata'),'python'), diff --git a/Tests/eficas_aster.py b/Tests/eficas_aster.py index 1d298b58..deaa5455 100755 --- a/Tests/eficas_aster.py +++ b/Tests/eficas_aster.py @@ -27,6 +27,6 @@ # Modules Eficas import prefs -from Editeur import eficas_go +from InterfaceTK import eficas_go eficas_go.lance_eficas() diff --git a/Tests/testastest/basetest.py b/Tests/testastest/basetest.py index 9c58b1ff..97280757 100644 --- a/Tests/testastest/basetest.py +++ b/Tests/testastest/basetest.py @@ -2,7 +2,7 @@ import os,glob,sys import unittest import difflib -from Editeur import appli +from InterfaceTK import appli from config import ASTERDIR diff --git a/Tests/testastest9/basetest.py b/Tests/testastest9/basetest.py index 05d94bc8..253edf54 100644 --- a/Tests/testastest9/basetest.py +++ b/Tests/testastest9/basetest.py @@ -2,7 +2,7 @@ import os,glob,sys import unittest import difflib -from Editeur import appli +from InterfaceTK import appli from config import ASTERDIR diff --git a/Tests/testcomm/testcomm.py b/Tests/testcomm/testcomm.py index e3013c80..14d8981f 100644 --- a/Tests/testcomm/testcomm.py +++ b/Tests/testcomm/testcomm.py @@ -3,7 +3,7 @@ import unittest import difflib import prefs -from Editeur import appli +from InterfaceTK import appli def add_param(j,pos,nom,valeur): co=j.addentite("PARAMETRE",pos) diff --git a/Tests/testcomm7/testcomm.py b/Tests/testcomm7/testcomm.py index bc7c9379..7e9432eb 100644 --- a/Tests/testcomm7/testcomm.py +++ b/Tests/testcomm7/testcomm.py @@ -3,7 +3,7 @@ import unittest import difflib import prefs -from Editeur import appli +from InterfaceTK import appli def add_param(j,pos,nom,valeur): co=j.addentite("PARAMETRE",pos) diff --git a/Tests/testcomm9/efica01a.com0 b/Tests/testcomm9/efica01a.com0 index 25134e98..34a71cc8 100755 --- a/Tests/testcomm9/efica01a.com0 +++ b/Tests/testcomm9/efica01a.com0 @@ -5,7 +5,7 @@ INCLUDE_MATERIAU( NOM_AFNOR='18MND5', TYPE_MODELE='REF', NOM_MATER='MAT3', INFO=1 ) CHMAT3=AFFE_MATERIAU( MAILLAGE=MAILLA3, - AFFE=_F( TOUT='OUI', MATER = MAT3, TEMP_REF = 20.)) + AFFE=_F( TOUT='OUI', MATER = MAT3)) riginor = 2.88E7 diff --git a/Tests/testcomm9/forma12c.comm b/Tests/testcomm9/forma12c.comm index 2027774f..af7db1de 100755 --- a/Tests/testcomm9/forma12c.comm +++ b/Tests/testcomm9/forma12c.comm @@ -191,10 +191,10 @@ SUPPORT=AFFE_CHAR_MECA( CHMATP=AFFE_MATERIAU(MAILLAGE=MAILLAGE, AFFE=(_F(GROUP_MA='GMAT01', MATER=MATP01, - TEMP_REF=20.0,), + ), _F(GROUP_MA='GMAT03', MATER=MATP03, - TEMP_REF=20.0,),),) + ),),) #----------------------------------------------------------------------- # ASSEMBLAGE MATRICE MASSE ET RIGIDITE @@ -247,7 +247,7 @@ MODES=MACRO_MODE_MECA( VERI_MODE=_F( STOP_ERREUR = 'NON'), NORM_MODE=_F( NORME = 'MASS_GENE', - MASS_INER =MASSINER), + ), IMPRESSION=_F( TOUT_PARA = 'OUI') ) diff --git a/Tests/testcomm9/hsnv100h.comm b/Tests/testcomm9/hsnv100h.comm index 976dc604..e23f47d5 100755 --- a/Tests/testcomm9/hsnv100h.comm +++ b/Tests/testcomm9/hsnv100h.comm @@ -38,7 +38,7 @@ INCLUDE_MATERIAU(TYPE_MODELE='REF', ) CHMAT=AFFE_MATERIAU( MAILLAGE=MAIL,AFFE=( - _F( TOUT='OUI',TEMP_REF=25, MATER = MONMAT), + _F( TOUT='OUI', MATER = MONMAT), ),) # diff --git a/Tests/testcomm9/testcomm.py b/Tests/testcomm9/testcomm.py index e211716e..a0b40af6 100644 --- a/Tests/testcomm9/testcomm.py +++ b/Tests/testcomm9/testcomm.py @@ -3,7 +3,7 @@ import unittest import difflib import prefs -from Editeur import appli +from InterfaceTK import appli def add_param(j,pos,nom,valeur): co=j.addentite("PARAMETRE",pos) diff --git a/Tests/testelem/testaz76.py b/Tests/testelem/testaz76.py index 44401008..c23919a3 100644 --- a/Tests/testelem/testaz76.py +++ b/Tests/testelem/testaz76.py @@ -6,7 +6,7 @@ import difflib import compare import prefs -from Editeur import appli +from InterfaceTK import appli def add_param(j,pos,nom,valeur): co=j.addentite("PARAMETRE",pos) @@ -35,7 +35,7 @@ class TestCase(unittest.TestCase): def test000(self): """ Test de construction du fichier de commandes az.comm de zero""" - app=appli.STANDALONE(version='v7') + app=appli.STANDALONE(version='v9') j=app.newJDC() # commande DEBUT co=j.addentite("DEBUT",0) @@ -322,7 +322,7 @@ class TestCase(unittest.TestCase): def test001(self): """ Test de construction d'un fichier de commandes avec DEFI_LIST_REEL, fonction et parametre de zero""" - app=appli.STANDALONE(version='v7') + app=appli.STANDALONE(version='v9') j=app.newJDC() # commande DEBUT co=j.addentite("DEBUT",0) @@ -378,9 +378,9 @@ class TestCase(unittest.TestCase): ! Concept retourné non défini ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Mot-clé simple : VALE - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 'sin(1.,2)' n'est pas d'un type autorisé: ('R',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 'sin(1.,2)' (de type ) n'est pas d'un type autorisé: ('R',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : VALE Fin Etape : DEFI_LIST_REEL Etape : DEFI_LIST_REEL ligne : ... @@ -388,9 +388,9 @@ class TestCase(unittest.TestCase): ! Concept retourné non défini ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Mot-clé simple : VALE - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 'aaa(1.)' n'est pas d'un type autorisé: ('R',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 'aaa(1.)' (de type ) n'est pas d'un type autorisé: ('R',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : VALE Fin Etape : DEFI_LIST_REEL FIN CR validation :SansNom diff --git a/Tests/testelem/testfact1.py b/Tests/testelem/testfact1.py index 664332c2..c5d4cb1d 100644 --- a/Tests/testelem/testfact1.py +++ b/Tests/testelem/testfact1.py @@ -38,13 +38,13 @@ Fin Mot cle Facteur :mcs1 """Verification de type""" #Ne leve plus d'exception #self.assertRaises(AttributeError,self.cata,1,'mcs1',None) - o=self.cata({'a':1.},'mcs1',None) + o=self.cata({'a':1.2},'mcs1',None) cr=o.report() expected_cr="""Mot cle Facteur :mcs1 Mot-clé simple : a - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 1.0 n'est pas d'un type autorisé: ('I',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 1.2 (de type ) n'est pas d'un type autorisé: ('I',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : a Fin Mot cle Facteur :mcs1 """ diff --git a/Tests/testelem/testitem1.py b/Tests/testelem/testitem1.py index 93776064..c3f902a0 100644 --- a/Tests/testelem/testitem1.py +++ b/Tests/testelem/testitem1.py @@ -3,10 +3,12 @@ import unittest import difflib import prefs -from Editeur import appli +from InterfaceTK import appli +#from Editeur import appli from Editeur import comploader from Editeur import Objecttreeitem + def add_param(j,pos,nom,valeur): co=j.addentite("PARAMETRE",pos) co.set_nom(nom) diff --git a/Tests/testelem/testjdc1.py b/Tests/testelem/testjdc1.py index 9bee5124..1efad3b3 100644 --- a/Tests/testelem/testjdc1.py +++ b/Tests/testelem/testjdc1.py @@ -6,7 +6,8 @@ import difflib import compare import prefs -from Editeur import appli +from InterfaceTK import appli +#from Editeur import appli def add_param(j,pos,nom,valeur): co=j.addentite("PARAMETRE",pos) @@ -433,9 +434,9 @@ FIN(); ! Concept retourné non défini ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Mot-clé simple : VALE - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 'sin(1.,2)' n'est pas d'un type autorisé: ('R',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 'sin(1.,2)' (de type ) n'est pas d'un type autorisé: ('R',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : VALE Fin Etape : DEFI_LIST_REEL Etape : DEFI_LIST_REEL ligne : ... @@ -443,9 +444,9 @@ FIN(); ! Concept retourné non défini ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Mot-clé simple : VALE - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 'aaa(1.)' n'est pas d'un type autorisé: ('R',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 'aaa(1.)' (de type ) n'est pas d'un type autorisé: ('R',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : VALE Fin Etape : DEFI_LIST_REEL FIN CR validation :SansNom diff --git a/Tests/testelem/testjdc2.py b/Tests/testelem/testjdc2.py index 89430d96..78ddd294 100644 --- a/Tests/testelem/testjdc2.py +++ b/Tests/testelem/testjdc2.py @@ -27,9 +27,10 @@ co1=OP5(MATR=co0) expected="""DEBUT CR validation : bidon Etape : OP5 ligne : 5 fichier : 'bidon' Mot-clé simple : MATR - !!!!!!... - ! ... n'est pas d'un type autorisé... ! - !!!!!!... + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! concept co0 de type concept (de type ) n'est pas d'un ! + ! type autorisé: (,) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : MATR Fin Etape : OP5 FIN CR validation :bidon @@ -46,9 +47,10 @@ co2=OP2(MATR=co0) expected="""DEBUT CR validation : bidon Etape : OP2 ligne : 5 fichier : 'bidon' Mot-clé simple : MATR - !!!!... - ! ... n'est pas d'un type autorisé... ! - !!!!... + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! concept co0 de type concept (de type ) n'est pas d'un ! + ! type autorisé: (, ) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : MATR Fin Etape : OP2 FIN CR validation :bidon @@ -78,9 +80,10 @@ co2=OP10(MATR=CO("xx")) expected="""DEBUT CR validation : bidon Etape : OP10 ligne : 2 fichier : 'bidon' Mot-clé simple : MATR - !!!!... - ! ... n'est pas d'un type autorisé... ! - !!!!... + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! concept xx de type CO (de type ) n'est pas d'un type ! + ! autorisé: (,) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : MATR Fin Etape : OP10 FIN CR validation :bidon @@ -101,9 +104,10 @@ co2=OP22(MATR=xx) expected="""DEBUT CR validation : bidon Etape : OP22 ligne : 3 fichier : 'bidon' Mot-clé simple : MATR - !!!!!!!!... - ! ... n'est pas d'un type autorisé... ! - !!!!!!!... + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! concept xx de type concept4 (de type ) n'est pas d'un ! + ! type autorisé: (,) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : MATR Fin Etape : OP22 FIN CR validation :bidon diff --git a/Tests/testelem/testjdc3.py b/Tests/testelem/testjdc3.py index 4d2a936e..5a7ad9e1 100644 --- a/Tests/testelem/testjdc3.py +++ b/Tests/testelem/testjdc3.py @@ -5,7 +5,8 @@ import difflib import compare import prefs -from Editeur import appli +from InterfaceTK import appli +#from Editeur import appli from Accas import AsException def add_param(j,pos,nom,valeur): diff --git a/Tests/testelem/testjdc4.py b/Tests/testelem/testjdc4.py index 6b7f3e5c..7a07d18a 100644 --- a/Tests/testelem/testjdc4.py +++ b/Tests/testelem/testjdc4.py @@ -5,7 +5,8 @@ import difflib import compare import prefs -from Editeur import appli +from InterfaceTK import appli +#from Editeur import appli from Accas import AsException def add_param(j,pos,nom,valeur): diff --git a/Tests/testelem/testsimp1.py b/Tests/testelem/testsimp1.py index d2ea0de7..67858ff6 100644 --- a/Tests/testelem/testsimp1.py +++ b/Tests/testelem/testsimp1.py @@ -168,7 +168,7 @@ Fin Mot-cl # Entiers def test030(self): cata=SIMP(typ='I',statut='o') - liste=((1,1),("a",0), (1.,0),(('RI',1.,0.),0), + liste=((1,1),("a",0), (1.1,0),(('RI',1.,0.),0), (('RI',1,0),0), (1+0j,0), ("1",0), ("toto",0), (None,0), ) for valeur,valid in liste: @@ -179,7 +179,7 @@ Fin Mot-cl def test031(self): cata=SIMP(typ='I',statut='o',into=(1,5,8),max=4) liste=((1,1),("a",0), ("toto",0), (None,0), - (1.,0),(('RI',1.,0.),0), + (1.1,0),(('RI',1.,0.),0), (3,0), (6,0), ((1,5),1), ((1,5,8),1), ((1,5,8,5),1), ((1,5,8,5,1),0), ((1.,6.),0), ((3.,2.),0), ((1.,2.,3.),0), ((1.,2.,3.,4.),0), ((1.,2.,3.,4.,5.),0), diff --git a/Tests/testelem/testsimp2.py b/Tests/testelem/testsimp2.py index b04f7435..e472dd26 100644 --- a/Tests/testelem/testsimp2.py +++ b/Tests/testelem/testsimp2.py @@ -41,3 +41,24 @@ class TestSimpCase(unittest.TestCase): o=cata(valeur,'mcs',None) msg="erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()) self.assertEqual(o.isvalid(),valid,msg=msg) + + def test004(self): + cata=SIMP(statut='f',typ=('R','I'),max=5) + liste=((1,1),(1.5,1), ((1,2),1), + ((2.3,3.4),1),((1,2.0),1), + ) + for valeur,valid in liste: + o=cata(valeur,'mcs',None) + msg="erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()) + self.assertEqual(o.isvalid(),valid,msg=msg) + + def _test005(self): + cata=SIMP(statut='f',typ='I',max=5) + liste=((1,1),(1.0,1), ((1,2),1), + ((2.3,3.4),0),((1,2.0),1), + ) + for valeur,valid in liste: + o=cata(valeur,'mcs',None) + msg="erreur sur le test %s %s" % (valeur,valid)+'\n'+str(o.report()) + self.assertEqual(o.isvalid(),valid,msg=msg) + diff --git a/Tests/testelem/testsimp3.py b/Tests/testelem/testsimp3.py index e7e1fa62..51891e9a 100644 --- a/Tests/testelem/testsimp3.py +++ b/Tests/testelem/testsimp3.py @@ -73,9 +73,9 @@ Fin Mot-cl """), (("TUTU","TATA","CCCC","TUTU","TATA",1,"TUTU","TATA","CCCC"), """Mot-clé simple : mcs - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 1 n'est pas d'un type autorisé: ('TXM',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 1 (de type ) n'est pas d'un type autorisé: ('TXM',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! La valeur : 1 ne fait pas partie des choix possibles ('TUTU', 'TATA', 'CCCC') ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -107,31 +107,31 @@ Fin Mot-cl (myparam((2,4,4)),OK), (myparam((2,4.5,4)), """Mot-clé simple : mcs - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 4.5 n'est pas d'un type autorisé: ('I',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 4.5 (de type ) n'est pas d'un type autorisé: ('I',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs """), (myparam((2,myparam(4.5),4)), """Mot-clé simple : mcs - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 4.5 n'est pas d'un type autorisé: ('I',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 4.5 (de type ) n'est pas d'un type autorisé: ('I',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs """), (param((2,4,4)),OK), (param((2,4.5,4)), """Mot-clé simple : mcs - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 4.5 n'est pas d'un type autorisé: ('I',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 4.5 (de type ) n'est pas d'un type autorisé: ('I',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs """), (param((2,param(4.5),4)), """Mot-clé simple : mcs - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 4.5 n'est pas d'un type autorisé: ('I',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 4.5 (de type ) n'est pas d'un type autorisé: ('I',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs """), ) diff --git a/Tests/testelem/testsimp4.py b/Tests/testelem/testsimp4.py index 6519dabd..40f3c41f 100644 --- a/Tests/testelem/testsimp4.py +++ b/Tests/testelem/testsimp4.py @@ -17,9 +17,9 @@ class TestMCSimpCase(unittest.TestCase): o=cata((1,2,'aa','bb',7,'cc'),'mcs1',None) cr=o.report() expected_cr="""Mot-clé simple : mcs1 - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 'aa' n'est pas d'un type autorisé: ('I',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 'aa' (de type ) n'est pas d'un type autorisé: ('I',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Nombre d'arguments de (1, 2, 'aa', 'bb', 7, 'cc') incorrect (min = 1, max = 5) ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -32,9 +32,9 @@ Fin Mot-cl o=cata((1,2,'aa','bb',7,'cc'),'mcs1',None) cr=o.report() expected_cr="""Mot-clé simple : mcs1 - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 'aa' n'est pas d'un type autorisé: ('I',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 'aa' (de type ) n'est pas d'un type autorisé: ('I',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs1 """ self.assertEqual(str(cr) , expected_cr,msg='Erreur :\n%s\n!=\n%s' % (str(cr),expected_cr)) @@ -44,9 +44,9 @@ Fin Mot-cl o=cata((1,2,7,3,4,5,6),'mcs1',None) cr=o.report() expected_cr="""Mot-clé simple : mcs1 - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! La valeur : 3 ne fait pas partie des choix possibles (1, 2, 7) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! La valeur : 3.0 ne fait pas partie des choix possibles (1, 2, 7) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs1 """ self.assertEqual(str(cr) , expected_cr,msg='Erreur :\n%s\n!=\n%s' % (str(cr),expected_cr)) @@ -56,9 +56,9 @@ Fin Mot-cl o=cata((1,2,7,3,4,5,6),'mcs1',None) cr=o.report() expected_cr="""Mot-clé simple : mcs1 - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! La valeur : 7 est en dehors du domaine de validité [ ** , 6 ] ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! La valeur : 7.0 est en dehors du domaine de validité [ ** , 6 ] ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs1 """ self.assertEqual(str(cr) , expected_cr,msg='Erreur :\n%s\n!=\n%s' % (str(cr),expected_cr)) @@ -68,12 +68,13 @@ Fin Mot-cl o=cata((1,2,7,3,4,5,6),'mcs1',None) cr=o.report() expected_cr="""Mot-clé simple : mcs1 - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! La valeur : 7 est en dehors du domaine de validité [ ** , 6 ] ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Nombre d'arguments de (1, 2, 7, 3, 4, 5, 6) incorrect (min = 1, max = 6) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! La valeur : 7.0 est en dehors du domaine de validité [ ** , 6 ] ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! Nombre d'arguments de (1.0, 2.0, 7.0, 3.0, 4.0, 5.0, 6.0) incorrect (min = 1, ! + ! max = 6) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs1 """ self.assertEqual(str(cr) , expected_cr,msg='Erreur :\n%s\n!=\n%s' % (str(cr),expected_cr)) @@ -83,15 +84,16 @@ Fin Mot-cl o=cata((1,2,7,"aa",4,"bb",6),'mcs1',None) cr=o.report() expected_cr="""Mot-clé simple : mcs1 - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 'aa' n'est pas d'un type autorisé: ('R',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! La valeur : 7 est en dehors du domaine de validité [ ** , 6 ] ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Nombre d'arguments de (1, 2, 7, 'aa', 4, 'bb', 6) incorrect (min = 1, max = 6) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 'aa' (de type ) n'est pas d'un type autorisé: ('R',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! La valeur : 7.0 est en dehors du domaine de validité [ ** , 6 ] ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! Nombre d'arguments de (1.0, 2.0, 7.0, 'aa', 4.0, 'bb', 6.0) incorrect (min = 1, ! + ! max = 6) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs1 """ self.assertEqual(str(cr) , expected_cr,msg='Erreur :\n%s\n!=\n%s' % (str(cr),expected_cr)) diff --git a/Tests/testelem/testvalidator1.py b/Tests/testelem/testvalidator1.py index 7390fef7..80a2881f 100644 --- a/Tests/testelem/testvalidator1.py +++ b/Tests/testelem/testvalidator1.py @@ -66,7 +66,7 @@ class TestValidCase(unittest.TestCase): def test003(self): cata=SIMP(statut='o',typ='I',validators=TypeVal(1)) liste=( - (1,1),(1.,0),(1.25,0), + (1,1),(1.1,0),(1.25,0), (('RI',0.,1.),0), ) self._test(cata,liste) @@ -77,7 +77,7 @@ class TestValidCase(unittest.TestCase): (1,1),((1,3),1), ((3,1),0), ((1,3,2),0), - ((1.,2.),0), + ((1.1,2.),0), (myparam((1.,2.)),0), (myparam((1,2)),1), (myparam((1,2,3,4,5)),1), @@ -108,7 +108,7 @@ class TestValidCase(unittest.TestCase): ((100,50,60,701),0), ((3,1),0), ((1,3,2),0), - ((1.,2.),0), + ((1.1,2.),0), ) self._test(cata,liste) diff --git a/Tests/testelem/testvalidator2.py b/Tests/testelem/testvalidator2.py index f78f8433..e9b06022 100644 --- a/Tests/testelem/testvalidator2.py +++ b/Tests/testelem/testvalidator2.py @@ -72,10 +72,10 @@ Fin Mot-cl (("aaaa","aaaaa","axyzaa","bbbbaaa","zzz"),OK), (("aaaa","aaaa","axyz","bbbb","zzz"), """Mot-clé simple : mcs - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Mot-clé mcs invalide : aaaa est un doublon ! - ! Critere de validite: : pas de présence de doublon dans la liste ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! Mot-clé mcs invalide : aaaa est un doublon ! + ! Critere de validite: pas de présence de doublon dans la liste ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs """), (("aaaa","axyz","bbbb","zzz"),OK), @@ -84,19 +84,19 @@ Fin Mot-cl (("aaa",Variable('x',"bbb")),OK), (("aaa",Variable('x',"aaa")), """Mot-clé simple : mcs - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Mot-clé mcs invalide : aaa est un doublon ! - ! Critere de validite: : pas de présence de doublon dans la liste ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! Mot-clé mcs invalide : aaa est un doublon ! + ! Critere de validite: pas de présence de doublon dans la liste ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs """), (Variable('x',("aaa","bbb")),OK), (Variable('x',("aaa","bbb","bbb")), """Mot-clé simple : mcs - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Mot-clé mcs invalide : bbb est un doublon ! - ! Critere de validite: : pas de présence de doublon dans la liste ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! Mot-clé mcs invalide : bbb est un doublon ! + ! Critere de validite: pas de présence de doublon dans la liste ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs """), ) @@ -109,10 +109,10 @@ Fin Mot-cl (("TUTU","TATA","CCCC"),OK), (("TUTU","TATA","CCCC","TUTU","TATA","CCCC"), """Mot-clé simple : mcs - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Mot-clé mcs invalide : TUTU est un doublon ! - ! Critere de validite: : pas de présence de doublon dans la liste ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! Mot-clé mcs invalide : TUTU est un doublon ! + ! Critere de validite: pas de présence de doublon dans la liste ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs """), (("TUTU","TATA","CCCC","TUTU","TATA","CCCC","TUTU","TATA","CCCC"), @@ -142,7 +142,7 @@ Fin Mot-cl """Mot-clé simple : mcs !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Mot-clé mcs invalide : (1, 3, 5) contient des valeurs non paires ! - ! Critere de validite: : pas de présence de doublon dans la liste ! + ! Critere de validite: pas de présence de doublon dans la liste ! ! et valeur paire ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs @@ -150,11 +150,11 @@ Fin Mot-cl ((2,4,6),OK), ((2,4,4), """Mot-clé simple : mcs - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Mot-clé mcs invalide : 4 est un doublon ! - ! Critere de validite: : pas de présence de doublon dans la liste ! - ! et valeur paire ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! Mot-clé mcs invalide : 4 est un doublon ! + ! Critere de validite: pas de présence de doublon dans la liste ! + ! et valeur paire ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs """), ) @@ -170,10 +170,10 @@ Fin Mot-cl ((i,1,i,i),OK), ((1,1,i,i), """Mot-clé simple : mcs - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Mot-clé mcs invalide : 1 est un doublon ! - ! Critere de validite: : pas de présence de doublon dans la liste ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! Mot-clé mcs invalide : 1 est un doublon ! + ! Critere de validite: pas de présence de doublon dans la liste ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs """ ), ) @@ -241,7 +241,7 @@ Fin Mot-cl !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Mot-clé mcs invalide : (, 5, 7, ) ne contient ! ! pas les elements obligatoires : [6] ! - ! Critere de validite: : pas de présence de doublon dans la liste ! + ! Critere de validite: pas de présence de doublon dans la liste ! ! et valeur (5, 6, 7) obligatoire ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs @@ -293,7 +293,7 @@ Fin Mot-cl ! pas les elements obligatoires : [6] ! ! Critere de validite: valeur (5, 6, 7) obligatoire ! ! et liste croissant ! - ! et : pas de présence de doublon dans la liste ! + ! et pas de présence de doublon dans la liste ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs """ ), @@ -304,7 +304,7 @@ Fin Mot-cl ! par valeurs croissantes ! ! Critere de validite: valeur (5, 6, 7) obligatoire ! ! et liste croissant ! - ! et : pas de présence de doublon dans la liste ! + ! et pas de présence de doublon dans la liste ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs """ ), @@ -314,7 +314,7 @@ Fin Mot-cl ! Mot-clé mcs invalide : 7 est un doublon ! ! Critere de validite: valeur (5, 6, 7) obligatoire ! ! et liste croissant ! - ! et : pas de présence de doublon dans la liste ! + ! et pas de présence de doublon dans la liste ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : mcs """ ), diff --git a/Tests/testelem/testzzz6az.py b/Tests/testelem/testzzz6az.py deleted file mode 100644 index 748748c8..00000000 --- a/Tests/testelem/testzzz6az.py +++ /dev/null @@ -1,399 +0,0 @@ -# coding=utf-8 - -import os -import unittest -import difflib -import compare - -import prefs -from Editeur import appli - -def add_param(j,pos,nom,valeur): - co=j.addentite("PARAMETRE",pos) - co.set_nom(nom) - co.set_valeur(valeur) - return co - -def add_mcsimp(obj,nom,valeur): - mcs=obj.get_child(nom,restreint='oui') - if mcs is None: - pos=obj.get_index_child(nom) - mcs=obj.addentite(nom,pos) - mcs.set_valeur(mcs.eval_val(valeur)) - return mcs - -def cdiff(text1,text2): - return " ".join(difflib.context_diff(text1.splitlines(1),text2.splitlines(1))) - -class TestCase(unittest.TestCase): - def setUp(self): - pass - - def tearDown(self): - CONTEXT.unset_current_step() - - def test000(self): - """ Test de construction du fichier de commandes az.comm de zero""" - - app=appli.STANDALONE(version='v6') - j=app.newJDC() -# commande DEBUT - co=j.addentite("DEBUT",0) -# commande FIN - co=j.addentite("FIN",1) -# parametres - pos=0 - pos=pos+1 - co=add_param(j,pos,"P1","9.8") - pos=pos+1 - co=add_param(j,pos,"P2","8.8") - pos=pos+1 - co=add_param(j,pos,"P3","7") - pos=pos+1 - co=add_param(j,pos,"P5","P3*P1") - pos=pos+1 - co=add_param(j,pos,"P6","P1-3") - pos=pos+1 - co=add_param(j,pos,"P4","[2,3,4]") -# commentaire - pos=pos+1 - co=j.addentite("COMMENTAIRE",pos) - co.set_valeur("Pas trouve shellpanel") -# commande LIRE_MAILLAGE - pos=pos+1 - co=j.addentite("LIRE_MAILLAGE",pos) - test,mess=co.nomme_sd("MAILLA2") - mcs=co.addentite("UNITE") - valeur=mcs.eval_val("P4[1]") - test=mcs.set_valeur(valeur) -# formule - pos=pos+1 - co=j.addentite("FORMULE",pos) - co.update(("aaa","REEL","a+z","(a,z)")) -# commande LIRE_MAILLAGE - pos=pos+1 - ma=co=j.addentite("LIRE_MAILLAGE",pos) - test,mess=co.nomme_sd("MAIL") - mcs=co.addentite("UNITE") - valeur,validite=mcs.eval_valeur("P3") - test=mcs.set_valeur(valeur) -# - pos=pos+1 - co=j.addentite("COMMENTAIRE",pos) - co.set_valeur(" 'LIRE_MAILLAGE', 'UNITE' --> uniquebasepanel") -# formule - pos=pos+1 - co=j.addentite("FORMULE",pos) - co.update(("az","REEL","aaaaa","(ae,inst)")) -# commande AFFE_MODELE - pos=pos+1 - co=j.addentite("AFFE_MODELE",pos) - mcs=co.get_child("MAILLAGE") - valeur,validite=mcs.eval_valeur("MAIL") - assert valeur == ma.sd - test=mcs.set_valeur(valeur) - assert valeur == co["MAILLAGE"] - mcf=co.addentite("AFFE") - mcs=mcf[0].get_child("PHENOMENE") - valeur=mcs.eval_val_item('MECANIQUE') - assert valeur=='MECANIQUE',str(valeur) - test=mcs.set_valeur(valeur) - assert mcf["PHENOMENE"] == 'MECANIQUE' - mcs=mcf[0].get_child("b_mecanique").get_child("MODELISATION") - mcs.set_valeur(mcs.eval_val_item('DIS_T')) - assert mcf["MODELISATION"] == 'DIS_T' - mcs=add_mcsimp(mcf[0],"GROUP_MA",('RESSORT','eee',)) - - mcf=co.addentite("AFFE") - mcs=mcf[1].get_child("PHENOMENE") - mcs.set_valeur(mcs.eval_val_item('MECANIQUE')) - mcs=mcf[1].get_child("b_mecanique").get_child("MODELISATION") - mcs.set_valeur(mcs.eval_val_item('DIS_T')) - mcs=add_mcsimp(mcf[1],"GROUP_MA",'MASSES') - - mcf=co.addentite("AFFE") - mcs=mcf[2].get_child("PHENOMENE") - mcs.set_valeur(mcs.eval_val_item('ACOUSTIQUE')) - mcs=mcf[2].get_child("b_acoustique").get_child("MODELISATION") - mcs.set_valeur(mcs.eval_val_item('PLAN')) - #mcs=add_mcsimp(mcf[2],"GROUP_NO",'GNP3,GNP5,GNP6,GNP7,GNP8,GNP9,GNP10,GNP11,GNP12') - mcs=add_mcsimp(mcf[2],"GROUP_NO","'GNP3','GNP5','GNP6','GNP7','GNP8','GNP9','GNP10','GNP11','GNP12'") - - co.nomme_sd("AFFE1") -# commande AFFE_MODELE - pos=pos+1 - co=j.addentite("AFFE_MODELE",pos) - mcs=co.get_child("MAILLAGE") - mcs.set_valeur(mcs.eval_val("MAIL")) - - mcf=co.addentite("AFFE") - mcs=mcf[0].get_child("PHENOMENE") - valeur=mcs.eval_val_item('MECANIQUE') - test=mcs.set_valeur(valeur) - mcs=mcf[0].get_child("b_mecanique").get_child("MODELISATION") - mcs.set_valeur(mcs.eval_val_item('DIS_T')) - mcs=add_mcsimp(mcf[0],"GROUP_MA",'RESSORT') - - mcf=co.addentite("AFFE") - mcs=mcf[1].get_child("PHENOMENE") - mcs.set_valeur(mcs.eval_val_item('MECANIQUE')) - mcs=mcf[1].get_child("b_mecanique").get_child("MODELISATION") - mcs.set_valeur(mcs.eval_val_item('DIS_T')) - mcs=add_mcsimp(mcf[1],"GROUP_MA",'MASSES') - - mcf=co.addentite("AFFE") - mcs=mcf[2].get_child("PHENOMENE") - mcs.set_valeur(mcs.eval_val_item('THERMIQUE')) - mcs=mcf[2].get_child("b_thermique").get_child("MODELISATION") - mcs.set_valeur(mcs.eval_val_item('COQUE')) - mcs=add_mcsimp(mcf[2],"TOUT",'OUI') - - co.nomme_sd("MOD") -#CARA=AFFE_CARA_ELEM(MODELE=MOD, -# POUTRE=_F(GROUP_MA='MA', -# SECTION='CERCLE', -# CARA='R', -# VALE=(3.0,P6,),),); - pos=pos+1 - co=j.addentite("AFFE_CARA_ELEM",pos) - mcs=co.get_child("MODELE") - mcs.set_valeur(mcs.eval_val("MOD")) - mcf=co.addentite("POUTRE") - mcs=mcf[0].get_child("SECTION") - mcs.set_valeur(mcs.eval_val('CERCLE')) - assert mcf[0]["SECTION"] == 'CERCLE' - mcs=add_mcsimp(mcf[0],"GROUP_MA",'MA') - mcs=mcf[0].get_child("b_cercle").get_child("CARA") - mcs.set_valeur(mcs.eval_val('R')) - mcs=mcf[0].get_child("b_cercle").get_child("VALE") - mcs.set_valeur(mcs.eval_val('3.0,P6')) - co.nomme_sd("CARA") -# commentaire - pos=pos+1 - co=j.addentite("COMMENTAIRE",pos) - text=""" 'AFFE_MODELE', 'MAILLAGE' --> uniqueassdpanel - AFFE_MODELE', 'AFFE', 'GROUP_MA' --> plusieursbasepanel - 'AFFE_MODELE', 'AFFE', 'PHENOMENE' --> uniqueintopanel - 'AFFE_MODELE', 'AFFE', 'b_mecanique'--> plusieursintopanel""" - co.set_valeur(text) -#F1=DEFI_FONCTION(NOM_PARA='DX', -# VALE=(5.0,3.0,P4[1],P3,),); - pos=pos+1 - co=j.addentite("DEFI_FONCTION",pos) - mcs=co.get_child("NOM_PARA") - mcs.set_valeur(mcs.eval_val("DX")) - mcs=co.addentite("VALE") - mcs.set_valeur(mcs.eval_val("5.0,3.0,P4[1],P3")) - co.nomme_sd("F1") -#F3=DEFI_FONCTION(NOM_PARA='DRX', -# VALE_C=(5.0,7.0,9.0,9.0,8.0,7.0,),); - pos=pos+1 - co=j.addentite("DEFI_FONCTION",pos) - mcs=co.get_child("NOM_PARA") - mcs.set_valeur(mcs.eval_val("DRX")) - mcs=co.addentite("VALE_C") - mcs.set_valeur(mcs.eval_val("5.0,7.0,9.0,9.0,8.0,7.0")) - co.nomme_sd("F3") -# commentaire - pos=pos+1 - co=j.addentite("COMMENTAIRE",pos) - co.set_valeur(" 'DEFI_FONCTION', 'VALE' --> fonctionpanel ") -#MATER2=DEFI_MATERIAU(ELAS=_F(E=100000000000.0, -# NU=0.0,), -# ECRO_ASYM_LINE=_F(DC_SIGM_EPSI=0.0, -# SY_C=200000000.0, -# DT_SIGM_EPSI=0.0, -# SY_T=50000000.0,),); - pos=pos+1 - co=j.addentite("DEFI_MATERIAU",pos) - mcf=co.addentite("ELAS") - mcs=mcf[0].get_child("E") - mcs.set_valeur(mcs.eval_val("100000000000.0")) - mcs=mcf[0].get_child("NU") - mcs.set_valeur(mcs.eval_val("0.0")) - mcf=co.addentite("ECRO_ASYM_LINE") - mcs=mcf[0].get_child("DC_SIGM_EPSI") - mcs.set_valeur(mcs.eval_val("0.0")) - mcs=mcf[0].get_child("DT_SIGM_EPSI") - mcs.set_valeur(mcs.eval_val("0.0")) - mcs=mcf[0].get_child("SY_C") - mcs.set_valeur(mcs.eval_val("200000000.0")) - mcs=mcf[0].get_child("SY_T") - mcs.set_valeur(mcs.eval_val("50000000.0")) - co.nomme_sd("MATER2") -#PS1=DEFI_PARA_SENSI(VALE=1.0,); -#PS2=DEFI_PARA_SENSI(VALE=1.0,); -#PS3=DEFI_PARA_SENSI(VALE=1.0,); - pos=pos+1 - co=j.addentite("DEFI_PARA_SENSI",pos) - mcs=co.get_child("VALE") - mcs.set_valeur(mcs.eval_val("1.0")) - co.nomme_sd("PS1") - pos=pos+1 - co=j.addentite("DEFI_PARA_SENSI",pos) - mcs=co.get_child("VALE") - mcs.set_valeur(mcs.eval_val("1.0")) - co.nomme_sd("PS2") - pos=pos+1 - co=j.addentite("DEFI_PARA_SENSI",pos) - mcs=co.get_child("VALE") - mcs.set_valeur(mcs.eval_val("1.0")) - co.nomme_sd("PS3") -#CHMAT2=AFFE_MATERIAU(MAILLAGE=MAIL, -# AFFE=_F(TOUT='OUI', -# MATER=MATER2,),); - pos=pos+1 - co=j.addentite("AFFE_MATERIAU",pos) - add_mcsimp(co,"MAILLAGE","MAIL") - mcf=co.get_child("AFFE") - add_mcsimp(mcf[0],"TOUT","OUI") - add_mcsimp(mcf[0],"MATER","MATER2") - co.nomme_sd("CHMAT2") -#AAAZ=AFFE_CHAR_THER(MODELE=AFFE1, -# TEMP_IMPO=_F(TOUT='OUI', -# TEMP=0.0,),); - pos=pos+1 - co=j.addentite("AFFE_CHAR_THER",pos) - add_mcsimp(co,"MODELE","AFFE1") - mcf=co.addentite("TEMP_IMPO") - add_mcsimp(mcf[0],"TOUT","OUI") - add_mcsimp(mcf[0],"TEMP","0.0") - co.nomme_sd("AAAZ") -#TH1=THER_LINEAIRE(MODELE=AFFE1, -# CHAM_MATER=CHMAT2, -# EXCIT=_F(CHARGE=AAAZ,), -# SENSIBILITE=(PS1,PS2,),); - pos=pos+1 - co=j.addentite("THER_LINEAIRE",pos) - add_mcsimp(co,"MODELE","AFFE1") - add_mcsimp(co,"CHAM_MATER","CHMAT2") - mcf=co.get_child("EXCIT") - add_mcsimp(mcf[0],"CHARGE","AAAZ") - add_mcsimp(co,"SENSIBILITE","PS1,PS2") - co.nomme_sd("TH1") -# commentaire - pos=pos+1 - co=j.addentite("COMMENTAIRE",pos) - co.set_valeur(" 'THER_LINEAIRE', 'SENSIBILITE' --> plusieursassdpanel") -#ACA1=AFFE_CHAR_ACOU(MODELE=AFFE1, -# PRES_IMPO=_F(TOUT='OUI', -# PRES=('RI',3.0,3.0,),),); - pos=pos+1 - co=j.addentite("AFFE_CHAR_ACOU",pos) - add_mcsimp(co,"MODELE","AFFE1") - mcf=co.addentite("PRES_IMPO") - add_mcsimp(mcf[0],"TOUT","OUI") - add_mcsimp(mcf[0],"PRES","'RI',3.0,3.0") - co.nomme_sd("ACA1") -# commentaire - pos=pos+1 - co=j.addentite("COMMENTAIRE",pos) - co.set_valeur(" 'AFFE_CHAR_ACOU', 'PRES_IMPO', 'PRES' --> uniquecomppanel") - -# 'AFFE_CHAR_ACOU', 'PRES_IMPO', 'PRES' --> uniquecomppanel - -#MACRO_MATR_ASSE(MODELE=AFFE1, -# NUME_DDL=CO('DDL1'), -# MATR_ASSE=_F(MATRICE=CO('MAT1'), -# OPTION='RIGI_THER',),); - pos=pos+1 - co=j.addentite("MACRO_MATR_ASSE",pos) - add_mcsimp(co,"MODELE","AFFE1") - mcs=co.get_child("NUME_DDL") - mcs.set_valeur_co('DDL1') - mcf=co.get_child("MATR_ASSE") - add_mcsimp(mcf[0],"OPTION","RIGI_THER") - mcs=mcf[0].get_child("MATRICE") - mcs.set_valeur_co('MAT1') -# commentaire - pos=pos+1 - co=j.addentite("COMMENTAIRE",pos) - co.set_valeur(" 'MACRO_MATR_ASSE', 'MATR_ASSE', 'MATRICE' --> uniquesdcopanel") - - assert j.isvalid(),j.report() - - text1=app.get_text_JDC(j,'python') - file=os.path.join(prefs.INSTALLDIR,"Tests/testelem/azv6.comm") - f=open(file) - text2=f.read() - f.close() - assert text1 == text2 , cdiff(text1,text2) - - def test001(self): - """ Test de construction d'un fichier de commandes avec DEFI_LIST_REEL, fonction et parametre de zero""" - - app=appli.STANDALONE(version='v6.8') - j=app.newJDC() -# commande DEBUT - co=j.addentite("DEBUT",0) -# commande FIN - co=j.addentite("FIN",1) -#parametre - pos=0 - pos=pos+1 - co=add_param(j,pos,"P1","9.8") - pos=pos+1 - co=add_param(j,pos,"P2","sin(P1)") -# formule - pos=pos+1 - co=j.addentite("FORMULE",pos) - co.update(("aaa","REEL","a+z","(a,z)")) -#parametre de formule - pos=pos+1 - co=add_param(j,pos,"P3","aaa(P1,2.)") -#commande defi_list_reel - pos=pos+1 - co=j.addentite("DEFI_LIST_REEL",pos) - add_mcsimp(co,"VALE","1.,2.,3.") - co.nomme_sd("LI1") -#commande defi_list_reel - pos=pos+1 - co=j.addentite("DEFI_LIST_REEL",pos) - add_mcsimp(co,"VALE","sin(1.)") - co.nomme_sd("LI2") -#commande defi_list_reel - pos=pos+1 - co=j.addentite("DEFI_LIST_REEL",pos) - add_mcsimp(co,"VALE","aaa(1.,2.)") - co.nomme_sd("LI3") -#commande defi_list_reel - pos=pos+1 - co=j.addentite("DEFI_LIST_REEL",pos) - add_mcsimp(co,"VALE","sin(1.,2)") - co.nomme_sd("LI4") -#commande defi_list_reel - pos=pos+1 - co=j.addentite("DEFI_LIST_REEL",pos) - add_mcsimp(co,"VALE","aaa(1.)") - co.nomme_sd("LI5") -#commande defi_list_reel - pos=pos+1 - co=j.addentite("DEFI_LIST_REEL",pos) - add_mcsimp(co,"VALE","1,sin(1.),2") - co.nomme_sd("LI6") - - expected="""DEBUT CR validation : SansNom - Etape : DEFI_LIST_REEL ligne : ... - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Concept retourné non défini ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - Mot-clé simple : VALE - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 'sin(1.,2)' n'est pas d'un type autorisé: ('R',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - Fin Mot-clé simple : VALE - Fin Etape : DEFI_LIST_REEL - Etape : DEFI_LIST_REEL ligne : ... - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Concept retourné non défini ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - Mot-clé simple : VALE - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 'aaa(1.)' n'est pas d'un type autorisé: ('R',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - Fin Mot-clé simple : VALE - Fin Etape : DEFI_LIST_REEL -FIN CR validation :SansNom -""" - msg=str( j.report()) - assert compare.check(expected,msg),cdiff(expected,msg) diff --git a/Tests/testelem7/testaz76.py b/Tests/testelem7/testaz76.py index 44401008..f463af35 100644 --- a/Tests/testelem7/testaz76.py +++ b/Tests/testelem7/testaz76.py @@ -6,7 +6,7 @@ import difflib import compare import prefs -from Editeur import appli +from InterfaceTK import appli def add_param(j,pos,nom,valeur): co=j.addentite("PARAMETRE",pos) @@ -378,9 +378,9 @@ class TestCase(unittest.TestCase): ! Concept retourné non défini ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Mot-clé simple : VALE - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 'sin(1.,2)' n'est pas d'un type autorisé: ('R',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 'sin(1.,2)' (de type ) n'est pas d'un type autorisé: ('R',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : VALE Fin Etape : DEFI_LIST_REEL Etape : DEFI_LIST_REEL ligne : ... @@ -388,9 +388,9 @@ class TestCase(unittest.TestCase): ! Concept retourné non défini ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Mot-clé simple : VALE - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! 'aaa(1.)' n'est pas d'un type autorisé: ('R',) ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! 'aaa(1.)' (de type ) n'est pas d'un type autorisé: ('R',) ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Fin Mot-clé simple : VALE Fin Etape : DEFI_LIST_REEL FIN CR validation :SansNom diff --git a/Tests/testihm/testihm1.py b/Tests/testihm/testihm1.py index 52e49e83..dcf246d0 100644 --- a/Tests/testihm/testihm1.py +++ b/Tests/testihm/testihm1.py @@ -9,11 +9,11 @@ import Tkinter # Modules Eficas import prefs -from Editeur import eficas_go -from Editeur import splash from Editeur import session -from Editeur import eficas -from Editeur import images +from InterfaceTK import eficas_go +from InterfaceTK import splash +from InterfaceTK import eficas +from InterfaceTK import images from common import * version='v8' diff --git a/Tests/testihm/testihm2.py b/Tests/testihm/testihm2.py index b701fbb0..0bb15fbb 100644 --- a/Tests/testihm/testihm2.py +++ b/Tests/testihm/testihm2.py @@ -9,11 +9,8 @@ import Tkinter # Modules Eficas import prefs -from Editeur import eficas_go -from Editeur import splash from Editeur import session -from Editeur import eficas -from Editeur import images +from InterfaceTK import eficas_go,splash,eficas,images from common import * diff --git a/Tests/testihm/testihm3.py b/Tests/testihm/testihm3.py index 7fa615f3..f96a73b8 100644 --- a/Tests/testihm/testihm3.py +++ b/Tests/testihm/testihm3.py @@ -9,11 +9,8 @@ import Tkinter # Modules Eficas import prefs -from Editeur import eficas_go -from Editeur import splash from Editeur import session -from Editeur import eficas -from Editeur import images +from InterfaceTK import eficas_go,splash,eficas,images from common import * diff --git a/Tests/testihm/testihm4.py b/Tests/testihm/testihm4.py index 3d384921..3b3032e4 100644 --- a/Tests/testihm/testihm4.py +++ b/Tests/testihm/testihm4.py @@ -9,11 +9,8 @@ import Tkinter # Modules Eficas import prefs -from Editeur import eficas_go -from Editeur import splash from Editeur import session -from Editeur import eficas -from Editeur import images +from InterfaceTK import eficas_go,splash,eficas,images from common import * diff --git a/Tests/testihm7/testihm1.py b/Tests/testihm7/testihm1.py index 3b806c3d..78590803 100644 --- a/Tests/testihm7/testihm1.py +++ b/Tests/testihm7/testihm1.py @@ -9,11 +9,8 @@ import Tkinter # Modules Eficas import prefs -from Editeur import eficas_go -from Editeur import splash from Editeur import session -from Editeur import eficas -from Editeur import images +from InterfaceTK import eficas_go,splash,eficas,images from common import * version='v7' diff --git a/Tests/testihm7/testihm2.py b/Tests/testihm7/testihm2.py index 15d83d9f..37de0da2 100644 --- a/Tests/testihm7/testihm2.py +++ b/Tests/testihm7/testihm2.py @@ -9,11 +9,8 @@ import Tkinter # Modules Eficas import prefs -from Editeur import eficas_go -from Editeur import splash from Editeur import session -from Editeur import eficas -from Editeur import images +from InterfaceTK import eficas_go,splash,eficas,images from common import * diff --git a/Tests/testihm7/testihm4.py b/Tests/testihm7/testihm4.py index abdea69f..6dbd0025 100644 --- a/Tests/testihm7/testihm4.py +++ b/Tests/testihm7/testihm4.py @@ -9,11 +9,8 @@ import Tkinter # Modules Eficas import prefs -from Editeur import eficas_go -from Editeur import splash from Editeur import session -from Editeur import eficas -from Editeur import images +from InterfaceTK import eficas_go,splash,eficas,images from common import * diff --git a/Tests/testihm9/common.py b/Tests/testihm9/common.py index 37c180cd..911387bf 100644 --- a/Tests/testihm9/common.py +++ b/Tests/testihm9/common.py @@ -6,6 +6,10 @@ jdcdisplay=None class UnKnownNode(Exception):pass +def pause(): + if 1: + showinfo("Pause","Pause") + def init_common(r,j): global root,jdcdisplay root=r @@ -57,7 +61,6 @@ def create_command(nom,panel): label=panel.liste_command.dico_labels[nom] label.event_generate("") label.event_generate("") - #root.event_generate("") root.update() panel=jdcdisplay.panel_courant return panel diff --git a/Tests/testihm9/testihm1.py b/Tests/testihm9/testihm1.py index dab4f5e6..0c1b6699 100644 --- a/Tests/testihm9/testihm1.py +++ b/Tests/testihm9/testihm1.py @@ -9,11 +9,8 @@ import Tkinter # Modules Eficas import prefs -from Editeur import eficas_go -from Editeur import splash from Editeur import session -from Editeur import eficas -from Editeur import images +from InterfaceTK import eficas_go,splash,eficas,images from common import * version='v9' diff --git a/Tests/testihm9/testihm2.py b/Tests/testihm9/testihm2.py index ab88e845..ee3762d9 100644 --- a/Tests/testihm9/testihm2.py +++ b/Tests/testihm9/testihm2.py @@ -9,11 +9,8 @@ import Tkinter # Modules Eficas import prefs -from Editeur import eficas_go -from Editeur import splash from Editeur import session -from Editeur import eficas -from Editeur import images +from InterfaceTK import eficas_go,splash,eficas,images from common import * diff --git a/Tests/testihm9/testihm3.py b/Tests/testihm9/testihm3.py index 7fa615f3..f96a73b8 100644 --- a/Tests/testihm9/testihm3.py +++ b/Tests/testihm9/testihm3.py @@ -9,11 +9,8 @@ import Tkinter # Modules Eficas import prefs -from Editeur import eficas_go -from Editeur import splash from Editeur import session -from Editeur import eficas -from Editeur import images +from InterfaceTK import eficas_go,splash,eficas,images from common import * diff --git a/Tests/testihm9/testihm4.py b/Tests/testihm9/testihm4.py index 6e0d3547..20e44bb1 100644 --- a/Tests/testihm9/testihm4.py +++ b/Tests/testihm9/testihm4.py @@ -9,11 +9,8 @@ import Tkinter # Modules Eficas import prefs -from Editeur import eficas_go -from Editeur import splash from Editeur import session -from Editeur import eficas -from Editeur import images +from InterfaceTK import eficas_go,splash,eficas,images from common import * diff --git a/Traducteur/dictErreurs.py b/Traducteur/dictErreurs.py index b5970abb..f6d1d0c7 100644 --- a/Traducteur/dictErreurs.py +++ b/Traducteur/dictErreurs.py @@ -6,6 +6,7 @@ import sets jdcSet=sets.Set() dict_erreurs={ +#STA8.4 "DIST_LIGN_3D": "la commande DIST_LIGN_3D a ete supprimee", "DEFI_THER_JOULE": "la commande DIST_LIGN_3D a ete supprimee", "DIST_LIGN_3D": "la commande DIST_LIGN_3D a ete supprimee", @@ -62,6 +63,18 @@ dict_erreurs={ "COMB_CHAM_ELEM":"COMB_CHAM_ELEM est remplace par CREA_CHAMP", "IMPR_OAR":"IMPR_OAR demande un traitement manuel", "IMPR_FICO_HOMARD":"IMPR_FICO_HOMARD a ete integre dans MACR_ADPA_MAIL", +# STA9.2 + "POST_RCCM_SITUATION_NUME_PASSAGE":"Utilisation de NUME_PASSAGE pour le type TUYAUTERIE impossible en 9.2. On ne traite pour le moment que les chemins de passage simples.", + "DEFI_MATERIAU_BAZANT_FD" : "le materiau BAZANT_FD a ete supprime", + "DEFI_MATERIAU_APPUI_ELAS" : "le materiau APPUI_ELAS a ete supprime", + "DEFI_MATERIAU_PORO_JOINT" : "le materiau PORO_JOINT a ete supprime", + "DEFI_MATERIAU_ZIRC_CYRA2" : "le materiau ZIRC_CYRA2 a ete supprime", + "DEFI_MATERIAU_ZIRC_EPRI" : "le materiau ZIRC_EPRI a ete supprime", + "IMPR_MATRICE_MATR_ELEM_FORMAT=RESULTAT" : "IMPR_MATRICE au format RESULTAT a ete supprime", + "IMPR_MATRICE_MATR_ASSE_FORMAT=RESULTAT" : "IMPR_MATRICE au format RESULTAT a ete supprime", + "CALC_G_OPTION=G_LAGR" : "l'OPTION G_LAGR de CALC_G a ete supprimee", + "CALC_G_OPTION=G_LAGR_GLOB" : "l'OPTION G_LAGR_GLOB de CALC_G a ete supprimee", + "CALC_MATR_ELEM_THETA" : "l'OPTION RIGI_MECA_LAGR de CALC_MATR_ELEM a ete supprimee", } def EcritErreur(listeGena,ligne=None) : diff --git a/Traducteur/load.py b/Traducteur/load.py index b8f0a5aa..fc95db7e 100644 --- a/Traducteur/load.py +++ b/Traducteur/load.py @@ -6,7 +6,6 @@ import parseur from mocles import parseKeywords -JDCdict={} class JDC: """Cet objet conserve toutes les informations relatives à un fichier de commandes .comm""" @@ -112,12 +111,9 @@ class JDC: def getJDC(filename,atraiter): #---------------------------_ # lit le JDC - jdc=JDCdict.get(filename) - if not jdc: - f=open(filename) - src=f.read() - f.close() - jdc=JDC(filename,src,atraiter) - JDCdict[filename]=jdc + f=open(filename) + src=f.read() + f.close() + jdc=JDC(filename,src,atraiter) return jdc diff --git a/Traducteur/traduitV8V9.py b/Traducteur/traduitV8V9.py index 9bc0e044..80d2ede4 100644 --- a/Traducteur/traduitV8V9.py +++ b/Traducteur/traduitV8V9.py @@ -23,7 +23,7 @@ from dictErreurs import GenereErreurPourCommande import calcG -atraiter=( "DEFI_MAILLAGE",) +atraiter=( "DEFI_MAILLAGE","CALC_VECT_ELEM","DYNA_NON_LINE","STAT_NON_LINE","FACT_LDLT","FACT_GRAD","RESO_LDLT","RESO_GRAD","DYNA_TRAN_MODAL","NORM_MODE","MACRO_MODE_MECA","POST_RCCM","THER_NON_LINE","THER_LINEAIRE","THER_NON_LINE_MO","DEFI_CABLE_BP","GENE_VARI_ALEA","DEFI_MATERIAU","IMPR_MATRICE","CALC_G","CALC_MATR_ELEM") def traduc(infile,outfile,flog=None): @@ -35,14 +35,131 @@ def traduc(infile,outfile,flog=None): parseKeywords(root) ####################### traitement erreurs ######################## - #GenereErreurPourCommande(jdc,("POST_RCCM","DIST_LIGN_3D","IMPR_OAR","COMB_CHAM_NO","COMB_CHAM_ELEM")) - GenereErreurPourCommande(jdc,()) + GenereErreurPourCommande(jdc,("POST_RCCM")) - ####################### traitement CALC_META ####################### + ####################### traitement Sous-Structuration ####################### renameMotCleInFact(jdc,"DEFI_MAILLAGE","DEFI_SUPER_MAILLE","MACR_ELEM_STAT","MACR_ELEM") + renameMotCleInFact(jdc,"DYNA_NON_LINE","SOUS_STRUC","MAILLE","SUPER_MAILLE") + renameMotCleInFact(jdc,"STAT_NON_LINE","SOUS_STRUC","MAILLE","SUPER_MAILLE") + renameMotCleInFact(jdc,"CALC_VECT_ELEM","SOUS_STRUC","MAILLE","SUPER_MAILLE") + ######################################################################### + + ####################### traitement Resolution lineaire ###################### + renameMotCle(jdc,"RESO_LDLT","MATR_FACT","MATR") + renameMotCle(jdc,"RESO_GRAD","MATR_ASSE","MATR") + renameMotCle(jdc,"RESO_GRAD","MATR_FACT","MATR_FACT") + renameOper(jdc,"RESO_LDLT","RESOUDRE") + renameOper(jdc,"RESO_GRAD","RESOUDRE") + renameOper(jdc,"FACT_LDLT","FACTORISER") + renameOper(jdc,"FACT_GRAD","FACTORISER") + ######################################################################### + + ####################### traitement DYNA_TRAN_MODAL ###################### + removeMotCle(jdc,"DYNA_TRAN_MODAL","NB_MODE_DIAG") + ######################################################################### + + ####################### traitement MASS_INER dans NORM_MODE ########## + removeMotCle(jdc,"NORM_MODE","MASSE_INER") + removeMotCleInFact(jdc,"MACRO_MODE_MECA","NORM_MODE","MASSE_INER") + ######################################################################### + + ####################### traitement POST_RCCM ############################ + removeMotCleInFactSiRegleAvecErreur(jdc,"POST_RCCM","SITUATION","NUME_PASSAGE",((("TYPE_RESU_MECA","TUYAUTERIE",jdc),"MCaPourValeur"),)) + ######################################################################### + + ####################### traitement THER_NON_LINE ############################ + renameMotCleInFact(jdc,"THER_NON_LINE","TEMP_INIT","NUME_INIT","NUME_ORDRE") + renameMotCle(jdc,"THER_NON_LINE","TEMP_INIT","ETAT_INIT",) + renameMotCleInFact(jdc,"THER_NON_LINE","INCREMENT","NUME_INIT","NUME_INST_INIT") + renameMotCleInFact(jdc,"THER_NON_LINE","INCREMENT","NUME_FIN","NUME_INST_FIN") + ######################################################################### + + ####################### traitement THER_LINEAIRE ############################ + renameMotCleInFact(jdc,"THER_LINEAIRE","TEMP_INIT","NUME_INIT","NUME_ORDRE") + renameMotCle(jdc,"THER_LINEAIRE","TEMP_INIT","ETAT_INIT",) + renameMotCleInFact(jdc,"THER_LINEAIRE","INCREMENT","NUME_INIT","NUME_INST_INIT") + renameMotCleInFact(jdc,"THER_LINEAIRE","INCREMENT","NUME_FIN","NUME_INST_FIN") + ######################################################################### + + ####################### traitement THER_NON_LINE ############################ + renameMotCleInFact(jdc,"THER_NON_LINE","TEMP_INIT","NUME_INIT","NUME_ORDRE") + renameMotCle(jdc,"THER_NON_LINE","TEMP_INIT","ETAT_INIT",) + ######################################################################### + ####################### traitement DEFI_CABLE_BP ###################### + removeMotCle(jdc,"DEFI_CABLE_BP","MAILLAGE") ######################################################################### + ####################### traitement GENE_VARI_ALEA ###################### + removeMotCleSiRegle(jdc,"GENE_VARI_ALEA","COEF_VAR",((("TYPE","EXPONENTIELLE",jdc),"MCaPourValeur"),)) + ######################################################################### + + ####################### traitement DEFI_MATERIAU ###################### + removeMotCleAvecErreur(jdc,"DEFI_MATERIAU","BAZANT_FD") + removeMotCleAvecErreur(jdc,"DEFI_MATERIAU","PORO_JOINT") + removeMotCleAvecErreur(jdc,"DEFI_MATERIAU","APPUI_ELAS") + removeMotCleAvecErreur(jdc,"DEFI_MATERIAU","ZIRC_EPRI") + removeMotCleAvecErreur(jdc,"DEFI_MATERIAU","ZIRC_CYRA2") + ######################################################################### + + ####################### traitement IMPR_MATRICE ###################### + removeCommandeSiRegleAvecErreur(jdc,"IMPR_MATRICE",((("MATR_ELEM","FORMAT","RESULTAT",jdc),"MCsousMCFaPourValeur"),)) + removeCommandeSiRegleAvecErreur(jdc,"IMPR_MATRICE",((("MATR_ASSE","FORMAT","RESULTAT",jdc),"MCsousMCFaPourValeur"),)) + ######################################################################### + + + ####################### traitement CALC_G ###################### + removeMotCleSiRegleAvecErreur(jdc,"CALC_G","OPTION",((("OPTION","G_LAGR",jdc),"MCaPourValeur"),)) + removeMotCleSiRegleAvecErreur(jdc,"CALC_G","OPTION",((("OPTION","G_LAGR_GLOB",jdc),"MCaPourValeur"),)) + removeMotCle(jdc,"CALC_G","PROPAGATION") + removeMotCle(jdc,"CALC_G","THETA_LAGR") + removeMotCle(jdc,"CALC_G","DIRE_THETA_LAGR") + ######################################################################### + + ####################### traitement CALC_MATR_ELEM ###################### + removeMotCleSiRegle(jdc,"CALC_MATR_ELEM","OPTION",((("OPTION","RIGI_MECA_LAGR",jdc),"MCaPourValeur"),)) + removeMotCleAvecErreur(jdc,"CALC_MATR_ELEM","PROPAGATION") + removeMotCle(jdc,"CALC_MATR_ELEM","THETA") + ######################################################################### + + ####################### traitement CONTACT ###################### + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","KT_ULTM") + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","EFFO_N_INIT") + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","RIGI_N_IRRA") + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","RIGI_N_FO") + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","RIGI_MZ") + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","ANGLE_1") + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","ANGLE_2") + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","ANGLE_3") + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","ANGLE_4") + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","MOMENT_1") + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","MOMENT_2") + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","MOMENT_3") + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","MOMENT_4") + removeMotCleInFact(jdc,"DEFI_MATERIAU","DIS_CONTACT","C_PRAGER_MZ") + dDis_Choc={"DIS_CONTACT":"DIS_CHOC"} + ChangementValeurDsMCF(jdc,"STAT_NON_LINE","COMP_INCR","RELATION",dDis_Choc) + ChangementValeurDsMCF(jdc,"DYNA_NON_LINE","COMP_INCR","RELATION",dDis_Choc) + renameMotCleInFact(jdc,"STAT_NON_LINE","COMP_INCR","DIS_CONTACT","DIS_CHOC") + renameMotCleInFact(jdc,"DYNA_NON_LINE","COMP_INCR","DIS_CONTACT","DIS_CHOC") + dGrilles={"DIS_GRICRA":"GRILLE_CRAYONS"} + ChangementValeurDsMCF(jdc,"STAT_NON_LINE","COMP_INCR","RELATION",dGrilles) + ChangementValeurDsMCF(jdc,"DYNA_NON_LINE","COMP_INCR","RELATION",dGrilles) + + removeMotCleInFact(jdc,"AFFE_CHAR_MECA","CONTACT","RECHERCHE") + removeMotCleInFact(jdc,"AFFE_CHAR_MECA","CONTACT","VECT_Y") + removeMotCleInFact(jdc,"AFFE_CHAR_MECA","CONTACT","VECT_ORIE_POU") + + renameCommandeSiRegle(jdc,"AFFE_CHAR_MECA_F","AFFE_CHAR_MECA",((("CONTACT",),"existeMCFParmi"),)) + ######################################################################### + + ####################### traitement CAM_CLAY ###################### + AjouteMotClefDansFacteur(jdc,"DEFI_MATERIAU","CAM_CLAY","MU=xxx",) + ######################################################################### + + ####################### traitement GLRC ###################### + renameCommandeSiRegle(jdc,"DEFI_MATERIAU","DEFI_GLRC", ((("GLRC_DAMAGE","GLRC_ACIER",),"existeMCFParmi"),)) + ######################################################################### f=open(outfile,'w') f.write(jdc.getSource()) diff --git a/Ui/OptionsEditeur.py b/Ui/OptionsEditeur.py new file mode 100644 index 00000000..f828bdfc --- /dev/null +++ b/Ui/OptionsEditeur.py @@ -0,0 +1,138 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'OptionsEditeur.ui' +# +# Created: Tue Jun 10 18:23:53 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.16 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class desOptions(QDialog): + def __init__(self,parent = None,name = None,modal = 0,fl = 0): + QDialog.__init__(self,parent,name,modal,fl) + + if not name: + self.setName("desOptions") + + + + self.groupBox1 = QGroupBox(self,"groupBox1") + self.groupBox1.setGeometry(QRect(11,11,548,191)) + + self.textLabel1_3 = QLabel(self.groupBox1,"textLabel1_3") + self.textLabel1_3.setGeometry(QRect(30,60,280,20)) + + self.textLabel1_2_2 = QLabel(self.groupBox1,"textLabel1_2_2") + self.textLabel1_2_2.setGeometry(QRect(30,120,280,20)) + + self.CBVersions = QComboBox(0,self.groupBox1,"CBVersions") + self.CBVersions.setGeometry(QRect(30,20,90,30)) + + self.LERepMat = QLineEdit(self.groupBox1,"LERepMat") + self.LERepMat.setGeometry(QRect(30,140,501,31)) + + self.LERepCata = QLineEdit(self.groupBox1,"LERepCata") + self.LERepCata.setGeometry(QRect(30,80,501,31)) + + self.Bok = QPushButton(self.groupBox1,"Bok") + self.Bok.setGeometry(QRect(440,20,90,31)) + self.Bok.setAutoDefault(0) + + self.groupBox2 = QGroupBox(self,"groupBox2") + self.groupBox2.setGeometry(QRect(11,208,548,90)) + + self.LEVersionAjout = QLineEdit(self.groupBox2,"LEVersionAjout") + self.LEVersionAjout.setGeometry(QRect(120,31,101,30)) + + self.LEVersionSup = QLineEdit(self.groupBox2,"LEVersionSup") + self.LEVersionSup.setGeometry(QRect(410,30,101,30)) + + self.PBSup = QPushButton(self.groupBox2,"PBSup") + self.PBSup.setGeometry(QRect(300,20,101,41)) + + self.PBajout = QPushButton(self.groupBox2,"PBajout") + self.PBajout.setGeometry(QRect(10,20,101,41)) + + self.PBQuit = QPushButton(self,"PBQuit") + self.PBQuit.setGeometry(QRect(400,420,151,31)) + self.PBQuit.setMinimumSize(QSize(0,30)) + + self.groupBox3 = QGroupBox(self,"groupBox3") + self.groupBox3.setGeometry(QRect(10,310,548,90)) + + self.LERepDoc = QLineEdit(self.groupBox3,"LERepDoc") + self.LERepDoc.setGeometry(QRect(20,50,520,31)) + + self.textLabel1 = QLabel(self.groupBox3,"textLabel1") + self.textLabel1.setGeometry(QRect(20,20,280,30)) + + self.Bdefaut = QCheckBox(self,"Bdefaut") + self.Bdefaut.setGeometry(QRect(10,430,340,20)) + Bdefaut_font = QFont(self.Bdefaut.font()) + Bdefaut_font.setPointSize(12) + self.Bdefaut.setFont(Bdefaut_font) + + self.languageChange() + + self.resize(QSize(570,474).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie) + self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked) + self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion) + self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc) + self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked) + self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion) + self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion) + self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion) + self.connect(self.PBQuit,SIGNAL("clicked()"),self.close) + self.connect(self.LERepDoc,SIGNAL("textChanged(const QString&)"),self.ChangePathDoc) + + + def languageChange(self): + self.setCaption(self.__tr("Options Aster")) + self.groupBox1.setTitle(self.__tr("Configurer une Version")) + self.textLabel1_3.setText(self.__trUtf8("\x52\xc3\xa9\x70\x65\x72\x74\x6f\x69\x72\x65\x20\x64\x27\x61\x63\x63\xc3\xa8\x73\x20\x61\x75\x20\x63\x61\x74\x61\x6c\x6f\x67\x75\x65\x20\x3a")) + self.textLabel1_2_2.setText(self.__trUtf8("\x52\xc3\xa9\x70\x65\x72\x74\x6f\x69\x72\x65\x20\x64\x27\x61\x63\x63\xc3\xa8\x73\x20\x61\x75\x78\x20\x6d\x61\x74\xc3\xa9\x72\x69\x61\x75\x78\x20\x3a")) + self.LERepMat.setText(QString.null) + self.LERepCata.setText(QString.null) + self.Bok.setText(self.__tr("Valider")) + self.groupBox2.setTitle(self.__trUtf8("\x47\xc3\xa9\x72\x65\x72\x20\x6c\x65\x73\x20\x76\x65\x72\x73\x69\x6f\x6e\x73")) + self.PBSup.setText(self.__tr("Supprimer\n" +"Version :")) + self.PBajout.setText(self.__tr("Ajouter\n" +"Version :")) + self.PBQuit.setText(self.__tr("Quitter")) + self.groupBox3.setTitle(self.__tr("Doc")) + self.LERepDoc.setText(QString.null) + self.textLabel1.setText(self.__trUtf8("\x52\x65\x70\x65\x72\x74\x6f\x69\x72\x65\x20\x64\x27\x61\x63\x63\x65\x73\x20\xc3\xa0\x20\x6c\x61\x20\x64\x6f\x63\x75\x6d\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x3a")) + self.Bdefaut.setText(self.__tr("Reinitialiser avec les valeurs par defaut")) + + + def VersionChoisie(self): + print "desOptions.VersionChoisie(): Not implemented yet" + + def BdefautChecked(self): + print "desOptions.BdefautChecked(): Not implemented yet" + + def AjoutVersion(self): + print "desOptions.AjoutVersion(): Not implemented yet" + + def SupVersion(self): + print "desOptions.SupVersion(): Not implemented yet" + + def ChangePathDoc(self): + print "desOptions.ChangePathDoc(): Not implemented yet" + + def BokClicked(self): + print "desOptions.BokClicked(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("desOptions",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("desOptions",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/OptionsEditeur.ui b/Ui/OptionsEditeur.ui new file mode 100644 index 00000000..0825010c --- /dev/null +++ b/Ui/OptionsEditeur.ui @@ -0,0 +1,369 @@ + +desOptions + + + desOptions + + + + 0 + 0 + 570 + 474 + + + + Options Aster + + + + groupBox1 + + + + 11 + 11 + 548 + 191 + + + + Configurer une Version + + + + textLabel1_3 + + + + 30 + 60 + 280 + 20 + + + + Répertoire d'accès au catalogue : + + + + + textLabel1_2_2 + + + + 30 + 120 + 280 + 20 + + + + Répertoire d'accès aux matériaux : + + + + + CBVersions + + + + 30 + 20 + 90 + 30 + + + + + + LERepMat + + + + 30 + 140 + 501 + 31 + + + + + + + + + LERepCata + + + + 30 + 80 + 501 + 31 + + + + + + + + + Bok + + + + 440 + 20 + 90 + 31 + + + + Valider + + + false + + + + + + groupBox2 + + + + 11 + 208 + 548 + 90 + + + + Gérer les versions + + + + LEVersionAjout + + + + 120 + 31 + 101 + 30 + + + + + + LEVersionSup + + + + 410 + 30 + 101 + 30 + + + + + + PBSup + + + + 300 + 20 + 101 + 41 + + + + Supprimer +Version : + + + + + PBajout + + + + 10 + 20 + 101 + 41 + + + + Ajouter +Version : + + + + + + PBQuit + + + + 400 + 420 + 151 + 31 + + + + + 0 + 30 + + + + Quitter + + + + + groupBox3 + + + + 10 + 310 + 548 + 90 + + + + Doc + + + + LERepDoc + + + + 20 + 50 + 520 + 31 + + + + + + + + + textLabel1 + + + + 20 + 20 + 280 + 30 + + + + Repertoire d'acces à la documentation : + + + + + + Bdefaut + + + + 10 + 430 + 340 + 20 + + + + + 12 + + + + Reinitialiser avec les valeurs par defaut + + + + + + CBVersions + activated(int) + desOptions + VersionChoisie() + + + Bdefaut + clicked() + desOptions + BdefautChecked() + + + LEVersionAjout + returnPressed() + desOptions + AjoutVersion() + + + LERepDoc + returnPressed() + desOptions + ChangePathDoc() + + + Bok + clicked() + desOptions + BokClicked() + + + LEVersionSup + returnPressed() + desOptions + SupVersion() + + + PBajout + clicked() + desOptions + AjoutVersion() + + + PBSup + clicked() + desOptions + SupVersion() + + + PBQuit + clicked() + desOptions + close() + + + LERepDoc + textChanged(const QString&) + desOptions + ChangePathDoc() + + + + VersionChoisie() + BdefautChecked() + AjoutVersion() + SupVersion() + ChangePathDoc() + BokClicked() + + + diff --git a/Ui/OptionsPdf.py b/Ui/OptionsPdf.py new file mode 100644 index 00000000..c5c3c891 --- /dev/null +++ b/Ui/OptionsPdf.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'OptionsPdf.ui' +# +# Created: lun avr 7 09:36:07 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class desPdf(QDialog): + def __init__(self,parent = None,name = None,modal = 0,fl = 0): + QDialog.__init__(self,parent,name,modal,fl) + + if not name: + self.setName("desPdf") + + + + self.textLabel1_2 = QLabel(self,"textLabel1_2") + self.textLabel1_2.setGeometry(QRect(20,10,280,20)) + + self.BCancel = QPushButton(self,"BCancel") + self.BCancel.setGeometry(QRect(450,90,70,31)) + + self.LERepPdf = QLineEdit(self,"LERepPdf") + self.LERepPdf.setGeometry(QRect(20,40,501,31)) + + self.Bok = QPushButton(self,"Bok") + self.Bok.setGeometry(QRect(350,90,70,31)) + + self.languageChange() + + self.resize(QSize(538,142).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.BCancel,SIGNAL("clicked()"),self.reject) + self.connect(self.LERepPdf,SIGNAL("returnPressed()"),self.LeRepPdfPressed) + self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked) + + self.setTabOrder(self.LERepPdf,self.Bok) + self.setTabOrder(self.Bok,self.BCancel) + + + def languageChange(self): + self.setCaption(self.__tr("desPdf")) + self.textLabel1_2.setText(self.__tr("Lecteur Pdf")) + self.BCancel.setText(self.__tr("Cancel")) + self.LERepPdf.setText(self.__tr("acroread")) + self.Bok.setText(self.__tr("Ok")) + + + def LeRepPdfPressed(self): + print "desPdf.LeRepPdfPressed(): Not implemented yet" + + def BokClicked(self): + print "desPdf.BokClicked(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("desPdf",s,c) diff --git a/Ui/OptionsPdf.ui b/Ui/OptionsPdf.ui new file mode 100644 index 00000000..5d7a8a5a --- /dev/null +++ b/Ui/OptionsPdf.ui @@ -0,0 +1,116 @@ + +desPdf + + + desPdf + + + + 0 + 0 + 538 + 142 + + + + desPdf + + + + textLabel1_2 + + + + 20 + 10 + 280 + 20 + + + + Lecteur Pdf + + + + + BCancel + + + + 450 + 90 + 70 + 31 + + + + Cancel + + + + + LERepPdf + + + + 20 + 40 + 501 + 31 + + + + acroread + + + + + Bok + + + + 350 + 90 + 70 + 31 + + + + Ok + + + + + + BCancel + clicked() + desPdf + reject() + + + LERepPdf + returnPressed() + desPdf + LeRepPdfPressed() + + + Bok + clicked() + desPdf + BokClicked() + + + + LERepPdf + Bok + BCancel + + + OptionsPdf.ui.h + + + LeRepPdfPressed() + BokClicked() + + + diff --git a/Ui/aideQT.py b/Ui/aideQT.py new file mode 100644 index 00000000..a60c7609 --- /dev/null +++ b/Ui/aideQT.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'aideQT.ui' +# +# Created: mar mar 25 10:05:07 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class Aide(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("Aide") + + + AideLayout = QGridLayout(self,1,1,11,6,"AideLayout") + + layout2 = QHBoxLayout(None,0,6,"layout2") + + self.PBIndex = QPushButton(self,"PBIndex") + self.PBIndex.setMinimumSize(QSize(0,30)) + layout2.addWidget(self.PBIndex) + + self.PBBack = QPushButton(self,"PBBack") + self.PBBack.setEnabled(1) + self.PBBack.setMinimumSize(QSize(0,30)) + layout2.addWidget(self.PBBack) + + self.PBForward = QPushButton(self,"PBForward") + self.PBForward.setEnabled(1) + self.PBForward.setMinimumSize(QSize(0,30)) + layout2.addWidget(self.PBForward) + + AideLayout.addLayout(layout2,1,0) + + self.TB1 = QTextBrowser(self,"TB1") + + AideLayout.addMultiCellWidget(self.TB1,0,0,0,1) + spacer1 = QSpacerItem(311,20,QSizePolicy.Expanding,QSizePolicy.Minimum) + AideLayout.addItem(spacer1,1,1) + + self.languageChange() + + self.resize(QSize(602,480).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.PBBack,SIGNAL("clicked()"),self.TB1.backward) + self.connect(self.PBForward,SIGNAL("clicked()"),self.TB1.forward) + self.connect(self.PBIndex,SIGNAL("clicked()"),self.TB1.home) + + + def languageChange(self): + self.setCaption(self.__tr("Aide")) + self.PBIndex.setText(self.__tr("Index")) + self.PBBack.setText(self.__tr("Back")) + self.PBForward.setText(self.__tr("Forward")) + + + def PBIndexPushed(self): + print "Aide.PBIndexPushed(): Not implemented yet" + + def PBBackPushed(self): + print "Aide.PBBackPushed(): Not implemented yet" + + def PBForwardPushed(self): + print "Aide.PBForwardPushed(): Not implemented yet" + + def SlotSourceChanged(self): + print "Aide.SlotSourceChanged(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("Aide",s,c) diff --git a/Ui/aideQT.ui b/Ui/aideQT.ui new file mode 100644 index 00000000..40a8d593 --- /dev/null +++ b/Ui/aideQT.ui @@ -0,0 +1,131 @@ + +Aide + + + Aide + + + + 0 + 0 + 602 + 480 + + + + Aide + + + + unnamed + + + + layout2 + + + + unnamed + + + + PBIndex + + + + 0 + 30 + + + + Index + + + + + PBBack + + + true + + + + 0 + 30 + + + + Back + + + + + PBForward + + + true + + + + 0 + 30 + + + + Forward + + + + + + + TB1 + + + + + spacer1 + + + Horizontal + + + Expanding + + + + 311 + 20 + + + + + + + + PBBack + clicked() + TB1 + backward() + + + PBForward + clicked() + TB1 + forward() + + + PBIndex + clicked() + TB1 + home() + + + + PBIndexPushed() + PBBackPushed() + PBForwardPushed() + SlotSourceChanged() + + + diff --git a/Ui/desChoixCata.py b/Ui/desChoixCata.py new file mode 100644 index 00000000..22e37b83 --- /dev/null +++ b/Ui/desChoixCata.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desChoixCata.ui' +# +# Created: mar mar 25 10:05:07 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DChoixCata(QDialog): + def __init__(self,parent = None,name = None,modal = 0,fl = 0): + QDialog.__init__(self,parent,name,modal,fl) + + if not name: + self.setName("DChoixCata") + + self.setSizeGripEnabled(1) + + DChoixCataLayout = QGridLayout(self,1,1,11,6,"DChoixCataLayout") + + self.frame3 = QFrame(self,"frame3") + self.frame3.setFrameShape(QFrame.StyledPanel) + self.frame3.setFrameShadow(QFrame.Raised) + + self.buttonCancel = QPushButton(self.frame3,"buttonCancel") + self.buttonCancel.setGeometry(QRect(380,6,90,30)) + self.buttonCancel.setAutoDefault(1) + + self.buttonOk = QPushButton(self.frame3,"buttonOk") + self.buttonOk.setGeometry(QRect(40,6,90,30)) + self.buttonOk.setAutoDefault(1) + self.buttonOk.setDefault(1) + + DChoixCataLayout.addMultiCellWidget(self.frame3,2,2,0,1) + + self.TLNb = QLabel(self,"TLNb") + self.TLNb.setMinimumSize(QSize(30,0)) + + DChoixCataLayout.addWidget(self.TLNb,0,0) + + self.CBChoixCata = QComboBox(0,self,"CBChoixCata") + self.CBChoixCata.setEnabled(1) + + DChoixCataLayout.addWidget(self.CBChoixCata,1,1) + + self.textLabel1_2 = QLabel(self,"textLabel1_2") + self.textLabel1_2.setMinimumSize(QSize(380,60)) + + DChoixCataLayout.addWidget(self.textLabel1_2,1,0) + + self.languageChange() + + self.resize(QSize(547,172).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.buttonOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.buttonCancel,SIGNAL("clicked()"),self.BCancelPressed) + self.connect(self.CBChoixCata,SIGNAL("activated(const QString&)"),self.CataChoisi) + + + def languageChange(self): + self.setCaption(self.__tr("Choix d'une version du code Aster")) + self.buttonCancel.setText(self.__tr("&Cancel")) + self.buttonCancel.setAccel(QString.null) + self.buttonOk.setText(self.__tr("&OK")) + self.buttonOk.setAccel(QString.null) + self.TLNb.setText(self.__tr("2")) + self.textLabel1_2.setText(self.__tr("Veuillez choisir celle avec laquelle vous souhaitez travailler")) + + + def CataChoisi(self): + print "DChoixCata.CataChoisi(): Not implemented yet" + + def BOkPressed(self): + print "DChoixCata.BOkPressed(): Not implemented yet" + + def BCancelPressed(self): + print "DChoixCata.BCancelPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DChoixCata",s,c) diff --git a/Ui/desChoixCata.ui b/Ui/desChoixCata.ui new file mode 100644 index 00000000..8f6eff55 --- /dev/null +++ b/Ui/desChoixCata.ui @@ -0,0 +1,147 @@ + +DChoixCata + + + DChoixCata + + + + 0 + 0 + 547 + 172 + + + + Choix d'une version du code Aster + + + true + + + + unnamed + + + + frame3 + + + StyledPanel + + + Raised + + + + buttonCancel + + + + 380 + 6 + 90 + 30 + + + + &Cancel + + + + + + true + + + + + buttonOk + + + + 40 + 6 + 90 + 30 + + + + &OK + + + + + + true + + + true + + + + + + TLNb + + + + 30 + 0 + + + + 2 + + + + + CBChoixCata + + + true + + + + + textLabel1_2 + + + + 380 + 60 + + + + <font size="+1">Veuillez choisir celle avec laquelle vous souhaitez travailler</font> + + + + + + + buttonOk + clicked() + DChoixCata + BOkPressed() + + + buttonCancel + clicked() + DChoixCata + BCancelPressed() + + + CBChoixCata + activated(const QString&) + DChoixCata + CataChoisi() + + + + CataChoisi() + BOkPressed() + BCancelPressed() + + + diff --git a/Ui/desCommande.py b/Ui/desCommande.py new file mode 100644 index 00000000..2a4cc274 --- /dev/null +++ b/Ui/desCommande.py @@ -0,0 +1,228 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desCommande.ui' +# +# Created: ven mai 16 13:30:38 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DComm(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DComm") + + self.setMinimumSize(QSize(505,0)) + + DCommLayout = QGridLayout(self,1,1,11,6,"DCommLayout") + + self.Commentaire = QLabel(self,"Commentaire") + self.Commentaire.setFrameShape(QLabel.NoFrame) + self.Commentaire.setFrameShadow(QLabel.Plain) + + DCommLayout.addMultiCellWidget(self.Commentaire,1,1,0,2) + + self.bOk = QPushButton(self,"bOk") + self.bOk.setMinimumSize(QSize(0,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + + DCommLayout.addWidget(self.bOk,2,1) + + self.bSup = QPushButton(self,"bSup") + self.bSup.setMinimumSize(QSize(0,30)) + self.bSup.setAutoDefault(1) + + DCommLayout.addWidget(self.bSup,2,0) + + self.bHelp = QPushButton(self,"bHelp") + self.bHelp.setMinimumSize(QSize(0,30)) + self.bHelp.setAutoDefault(1) + + DCommLayout.addWidget(self.bHelp,2,2) + + self.TWChoix = QTabWidget(self,"TWChoix") + + self.MotClef = QWidget(self.TWChoix,"MotClef") + + self.textLabel1 = QLabel(self.MotClef,"textLabel1") + self.textLabel1.setGeometry(QRect(11,11,226,18)) + self.textLabel1.setMinimumSize(QSize(0,0)) + + self.LBMCPermis = QListBox(self.MotClef,"LBMCPermis") + self.LBMCPermis.setGeometry(QRect(11,35,226,342)) + self.LBMCPermis.setMinimumSize(QSize(0,0)) + + self.textLabel1_2 = QLabel(self.MotClef,"textLabel1_2") + self.textLabel1_2.setGeometry(QRect(243,11,225,18)) + + self.LBRegles = QListBox(self.MotClef,"LBRegles") + self.LBRegles.setGeometry(QRect(243,35,225,342)) + self.TWChoix.insertTab(self.MotClef,QString("")) + + self.Concept = QWidget(self.TWChoix,"Concept") + ConceptLayout = QGridLayout(self.Concept,1,1,11,6,"ConceptLayout") + + self.groupBox1 = QGroupBox(self.Concept,"groupBox1") + + self.textLabel1_3 = QLabel(self.groupBox1,"textLabel1_3") + self.textLabel1_3.setGeometry(QRect(80,50,130,31)) + + self.textLabel1_3_2 = QLabel(self.groupBox1,"textLabel1_3_2") + self.textLabel1_3_2.setGeometry(QRect(80,170,150,31)) + + self.LENomConcept = QLineEdit(self.groupBox1,"LENomConcept") + self.LENomConcept.setGeometry(QRect(80,110,310,30)) + + self.textLabel3 = QLabel(self.groupBox1,"textLabel3") + self.textLabel3.setGeometry(QRect(10,200,290,31)) + + self.typeConcept = QLabel(self.groupBox1,"typeConcept") + self.typeConcept.setGeometry(QRect(310,200,130,31)) + + ConceptLayout.addWidget(self.groupBox1,0,0) + self.TWChoix.insertTab(self.Concept,QString("")) + + self.Commande = QWidget(self.TWChoix,"Commande") + CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout") + + self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1") + + self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha") + self.RBalpha.setGeometry(QRect(20,20,120,20)) + self.RBalpha.setChecked(1) + + self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe") + self.RBGroupe.setGeometry(QRect(20,40,110,20)) + + CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3) + + self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande") + + CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3) + + self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4") + self.textLabel1_4.setMaximumSize(QSize(32767,20)) + + CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,2) + + self.textLabel4 = QLabel(self.Commande,"textLabel4") + + CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3) + + self.textLabel6 = QLabel(self.Commande,"textLabel6") + self.textLabel6.setMinimumSize(QSize(40,40)) + + CommandeLayout.addWidget(self.textLabel6,1,0) + + self.LEFiltre = QLineEdit(self.Commande,"LEFiltre") + self.LEFiltre.setMinimumSize(QSize(0,40)) + + CommandeLayout.addWidget(self.LEFiltre,1,1) + + self.BNext = QToolButton(self.Commande,"BNext") + self.BNext.setMinimumSize(QSize(70,40)) + self.BNext.setIconSet(QIconSet()) + + CommandeLayout.addWidget(self.BNext,1,2) + self.TWChoix.insertTab(self.Commande,QString("")) + + DCommLayout.addMultiCellWidget(self.TWChoix,0,0,0,2) + + self.languageChange() + + self.resize(QSize(505,483).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.LENomConcept,SIGNAL("returnPressed()"),self.LENomConceptReturnPressed) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.BNext,SIGNAL("pressed()"),self.BNextPressed) + + self.setTabOrder(self.LEFiltre,self.LBRegles) + self.setTabOrder(self.LBRegles,self.LENomConcept) + self.setTabOrder(self.LENomConcept,self.TWChoix) + self.setTabOrder(self.TWChoix,self.LBMCPermis) + self.setTabOrder(self.LBMCPermis,self.RBalpha) + self.setTabOrder(self.RBalpha,self.LBNouvCommande) + self.setTabOrder(self.LBNouvCommande,self.bOk) + self.setTabOrder(self.bOk,self.bSup) + self.setTabOrder(self.bSup,self.bHelp) + + + def languageChange(self): + self.setCaption(self.__tr("DComm")) + self.Commentaire.setText(QString.null) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.textLabel1.setText(self.__tr("

Mots Clefs Permis

")) + self.textLabel1_2.setText(self.__trUtf8("\x3c\x68\x33\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x3c\x75\x3e\x3c\x62\x3e\x52\xc3\xa8\x67\x6c\x65\x73\x3c\x2f\x62\x3e\x3c\x2f\x75\x3e\x3c\x2f\x70\x3e\x3c\x2f\x68\x33\x3e")) + self.TWChoix.changeTab(self.MotClef,self.__tr("Ajouter Mot-Clef")) + self.groupBox1.setTitle(self.__tr("Concept")) + self.textLabel1_3.setText(self.__tr("Nom du concept :")) + self.textLabel1_3_2.setText(self.__tr("Type du concept :")) + self.textLabel3.setText(self.__trUtf8("\x4c\x27\x6f\x70\xc3\xa9\x72\x61\x74\x65\x75\x72\x20\x72\x65\x74\x6f\x75\x72\x6e\x65\x20\x75\x6e\x20\x63\x6f\x6e\x63\x65\x70\x74\x20\x64\x65\x20\x74\x79\x70\x65\x20\x3a")) + self.typeConcept.setText(self.__tr("TypeDuConcept")) + self.TWChoix.changeTab(self.Concept,self.__tr("Nommer Concept")) + self.buttonGroup1.setTitle(self.__tr("Affichage")) + self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65")) + self.RBGroupe.setText(self.__tr("par groupe")) + self.textLabel1_4.setText(self.__tr("Commandes :")) + self.textLabel4.setText(self.__trUtf8("\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65")) + self.textLabel6.setText(self.__tr("Filtre")) + self.BNext.setText(self.__tr("Suivant")) + QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence")) + self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande")) + + + def LBNouvCommandeClicked(self): + print "DComm.LBNouvCommandeClicked(): Not implemented yet" + + def LEFiltreTextChanged(self): + print "DComm.LEFiltreTextChanged(): Not implemented yet" + + def LEfiltreReturnPressed(self): + print "DComm.LEfiltreReturnPressed(): Not implemented yet" + + def BSupPressed(self): + print "DComm.BSupPressed(): Not implemented yet" + + def LENomConceptReturnPressed(self): + print "DComm.LENomConceptReturnPressed(): Not implemented yet" + + def BOkPressed(self): + print "DComm.BOkPressed(): Not implemented yet" + + def BuildTabCommand(self): + print "DComm.BuildTabCommand(): Not implemented yet" + + def ViewDoc(self): + print "DComm.ViewDoc(): Not implemented yet" + + def BNextPressed(self): + print "DComm.BNextPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DComm",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DComm",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desCommande.ui b/Ui/desCommande.ui new file mode 100644 index 00000000..1ebda2c3 --- /dev/null +++ b/Ui/desCommande.ui @@ -0,0 +1,484 @@ + +DComm + + + DComm + + + + 0 + 0 + 505 + 483 + + + + + 505 + 0 + + + + DComm + + + + unnamed + + + + Commentaire + + + NoFrame + + + Plain + + + + + + + + bOk + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bSup + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bHelp + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + TWChoix + + + + MotClef + + + Ajouter Mot-Clef + + + + unnamed + + + + textLabel1 + + + + 0 + 0 + + + + <h3><p align="center"><u><b>Mots Clefs Permis</b></u></p></h3> + + + + + LBRegles + + + + + LBMCPermis + + + + 0 + 0 + + + + + + textLabel1_2 + + + <h3><p align="center"><u><b>Règles</b></u></p></h3> + + + + + + + Concept + + + Nommer Concept + + + + unnamed + + + + groupBox1 + + + Concept + + + + textLabel1_3 + + + + 80 + 50 + 130 + 31 + + + + <u>Nom du concept :</u> + + + + + textLabel1_3_2 + + + + 80 + 170 + 150 + 31 + + + + <u>Type du concept :</u> + + + + + LENomConcept + + + + 80 + 110 + 310 + 30 + + + + + + textLabel3 + + + + 10 + 200 + 290 + 31 + + + + L'opérateur retourne un concept de type : + + + + + typeConcept + + + + 310 + 200 + 130 + 31 + + + + TypeDuConcept + + + + + + + + Commande + + + Nouvelle Commande + + + + unnamed + + + + buttonGroup1 + + + Affichage + + + + RBalpha + + + + 20 + 20 + 120 + 20 + + + + alphabétique + + + true + + + + + RBGroupe + + + + 20 + 40 + 110 + 20 + + + + par groupe + + + + + + LBNouvCommande + + + + + textLabel1_4 + + + + 32767 + 20 + + + + <b><u>Commandes :</u></b> + + + + + textLabel4 + + + La commande choisie sera ajoutée APRES la commande courante + + + + + textLabel6 + + + + 40 + 40 + + + + Filtre + + + + + LEFiltre + + + + 0 + 40 + + + + + + BNext + + + + 70 + 40 + + + + Suivant + + + + + + affiche la prochaine occurence + + + + + + + + + + LBNouvCommande + doubleClicked(QListBoxItem*) + DComm + LBNouvCommandeClicked() + + + LEFiltre + textChanged(const QString&) + DComm + LEFiltreTextChanged() + + + LEFiltre + returnPressed() + DComm + LEfiltreReturnPressed() + + + bSup + pressed() + DComm + BSupPressed() + + + bOk + clicked() + DComm + BOkPressed() + + + LENomConcept + returnPressed() + DComm + LENomConceptReturnPressed() + + + RBGroupe + clicked() + DComm + BuildTabCommand() + + + RBalpha + clicked() + DComm + BuildTabCommand() + + + bHelp + clicked() + DComm + ViewDoc() + + + BNext + pressed() + DComm + BNextPressed() + + + + LEFiltre + LBRegles + LENomConcept + TWChoix + LBMCPermis + RBalpha + LBNouvCommande + bOk + bSup + bHelp + + + LBNouvCommandeClicked() + LEFiltreTextChanged() + LEfiltreReturnPressed() + BSupPressed() + LENomConceptReturnPressed() + BOkPressed() + BuildTabCommand() + ViewDoc() + BNextPressed() + + + diff --git a/Ui/desCommentaire.py b/Ui/desCommentaire.py new file mode 100644 index 00000000..2ad37170 --- /dev/null +++ b/Ui/desCommentaire.py @@ -0,0 +1,186 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desCommentaire.ui' +# +# Created: Thu Jun 19 16:49:50 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.16 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DComment(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DComment") + + self.setMinimumSize(QSize(505,0)) + + DCommentLayout = QGridLayout(self,1,1,11,6,"DCommentLayout") + + self.TWChoix = QTabWidget(self,"TWChoix") + + self.Valeur_Parametre = QWidget(self.TWChoix,"Valeur_Parametre") + + self.textCommentaire = QTextEdit(self.Valeur_Parametre,"textCommentaire") + self.textCommentaire.setGeometry(QRect(0,0,480,390)) + self.TWChoix.insertTab(self.Valeur_Parametre,QString.fromLatin1("")) + + self.Commande = QWidget(self.TWChoix,"Commande") + CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout") + + self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande") + + CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3) + + self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1") + + self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe") + self.RBGroupe.setGeometry(QRect(20,40,101,20)) + + self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha") + self.RBalpha.setGeometry(QRect(20,20,120,20)) + self.RBalpha.setChecked(1) + + CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3) + + self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4") + + CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,2) + + self.textLabel4 = QLabel(self.Commande,"textLabel4") + + CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3) + + self.LEFiltre = QLineEdit(self.Commande,"LEFiltre") + self.LEFiltre.setMinimumSize(QSize(160,30)) + + CommandeLayout.addWidget(self.LEFiltre,1,1) + + self.BNext = QToolButton(self.Commande,"BNext") + self.BNext.setMinimumSize(QSize(60,30)) + self.BNext.setIconSet(QIconSet()) + + CommandeLayout.addWidget(self.BNext,1,2) + + self.textLabel6 = QLabel(self.Commande,"textLabel6") + self.textLabel6.setMinimumSize(QSize(50,30)) + + CommandeLayout.addWidget(self.textLabel6,1,0) + self.TWChoix.insertTab(self.Commande,QString.fromLatin1("")) + + DCommentLayout.addMultiCellWidget(self.TWChoix,0,0,0,2) + + self.bOk = QPushButton(self,"bOk") + self.bOk.setMinimumSize(QSize(0,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + + DCommentLayout.addWidget(self.bOk,2,1) + + self.bSup = QPushButton(self,"bSup") + self.bSup.setMinimumSize(QSize(0,30)) + self.bSup.setAutoDefault(1) + + DCommentLayout.addWidget(self.bSup,2,0) + + self.bHelp = QPushButton(self,"bHelp") + self.bHelp.setMinimumSize(QSize(0,30)) + self.bHelp.setAutoDefault(1) + + DCommentLayout.addWidget(self.bHelp,2,2) + + self.Commentaire = QLabel(self,"Commentaire") + self.Commentaire.setFrameShape(QLabel.NoFrame) + self.Commentaire.setFrameShadow(QLabel.Plain) + + DCommentLayout.addMultiCellWidget(self.Commentaire,1,1,0,2) + + self.languageChange() + + self.resize(QSize(505,483).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.BNext,SIGNAL("pressed()"),self.BNextPressed) + self.connect(self.textCommentaire,SIGNAL("textChanged()"),self.TexteCommentaireEntre) + + self.setTabOrder(self.LEFiltre,self.TWChoix) + self.setTabOrder(self.TWChoix,self.textCommentaire) + self.setTabOrder(self.textCommentaire,self.LBNouvCommande) + self.setTabOrder(self.LBNouvCommande,self.RBalpha) + self.setTabOrder(self.RBalpha,self.bOk) + self.setTabOrder(self.bOk,self.bSup) + self.setTabOrder(self.bSup,self.bHelp) + + + def languageChange(self): + self.setCaption(self.__tr("DComm")) + self.TWChoix.changeTab(self.Valeur_Parametre,self.__tr("Commentaire")) + self.buttonGroup1.setTitle(self.__tr("Affichage")) + self.RBGroupe.setText(self.__tr("par groupe")) + self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65")) + self.textLabel1_4.setText(self.__tr("Commandes :")) + self.textLabel4.setText(self.__trUtf8("\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65")) + self.BNext.setText(self.__tr("Suivant")) + QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence")) + self.textLabel6.setText(self.__tr("Filtre")) + self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(QKeySequence(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(QKeySequence(self.__tr("Alt+S"))) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(QKeySequence(self.__tr("Alt+D"))) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.Commentaire.setText(QString.null) + + + def LBNouvCommandeClicked(self): + print "DComment.LBNouvCommandeClicked(): Not implemented yet" + + def LEFiltreTextChanged(self): + print "DComment.LEFiltreTextChanged(): Not implemented yet" + + def LEfiltreReturnPressed(self): + print "DComment.LEfiltreReturnPressed(): Not implemented yet" + + def BSupPressed(self): + print "DComment.BSupPressed(): Not implemented yet" + + def LENomConceptReturnPressed(self): + print "DComment.LENomConceptReturnPressed(): Not implemented yet" + + def BOkPressed(self): + print "DComment.BOkPressed(): Not implemented yet" + + def BuildTabCommand(self): + print "DComment.BuildTabCommand(): Not implemented yet" + + def ViewDoc(self): + print "DComment.ViewDoc(): Not implemented yet" + + def BNextPressed(self): + print "DComment.BNextPressed(): Not implemented yet" + + def textCommentaireChanged(self): + print "DComment.textCommentaireChanged(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DComment",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DComment",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desCommentaire.ui b/Ui/desCommentaire.ui new file mode 100644 index 00000000..63210082 --- /dev/null +++ b/Ui/desCommentaire.ui @@ -0,0 +1,349 @@ + +DComment + + + DComment + + + + 0 + 0 + 505 + 483 + + + + + 505 + 0 + + + + DComm + + + + unnamed + + + + TWChoix + + + + Valeur_Parametre + + + Commentaire + + + + textCommentaire + + + + 0 + 0 + 480 + 390 + + + + + + + Commande + + + Nouvelle Commande + + + + unnamed + + + + LBNouvCommande + + + + + buttonGroup1 + + + Affichage + + + + RBGroupe + + + + 20 + 40 + 101 + 20 + + + + par groupe + + + + + RBalpha + + + + 20 + 20 + 120 + 20 + + + + alphabétique + + + true + + + + + + textLabel1_4 + + + <b><u>Commandes :</u></b> + + + + + textLabel4 + + + La commande choisie sera ajoutée APRES la commande courante + + + + + LEFiltre + + + + 160 + 30 + + + + + + BNext + + + + 60 + 30 + + + + Suivant + + + + + + affiche la prochaine occurence + + + + + textLabel6 + + + + 50 + 30 + + + + Filtre + + + + + + + + bOk + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bSup + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bHelp + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + Commentaire + + + NoFrame + + + Plain + + + + + + + + + + LBNouvCommande + doubleClicked(QListBoxItem*) + DComment + LBNouvCommandeClicked() + + + LEFiltre + textChanged(const QString&) + DComment + LEFiltreTextChanged() + + + LEFiltre + returnPressed() + DComment + LEfiltreReturnPressed() + + + bSup + pressed() + DComment + BSupPressed() + + + bOk + clicked() + DComment + BOkPressed() + + + RBGroupe + clicked() + DComment + BuildTabCommand() + + + RBalpha + clicked() + DComment + BuildTabCommand() + + + bHelp + clicked() + DComment + ViewDoc() + + + BNext + pressed() + DComment + BNextPressed() + + + textCommentaire + textChanged() + DComment + TexteCommentaireEntre() + + + + LEFiltre + TWChoix + textCommentaire + LBNouvCommande + RBalpha + bOk + bSup + bHelp + + + LBNouvCommandeClicked() + LEFiltreTextChanged() + LEfiltreReturnPressed() + BSupPressed() + LENomConceptReturnPressed() + BOkPressed() + BuildTabCommand() + ViewDoc() + BNextPressed() + textCommentaireChanged() + + + diff --git a/Ui/desError.py b/Ui/desError.py new file mode 100644 index 00000000..b9c59795 --- /dev/null +++ b/Ui/desError.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desError.ui' +# +# Created: mar mar 25 10:05:08 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DError(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DError") + + self.setMinimumSize(QSize(350,0)) + + DErrorLayout = QGridLayout(self,1,1,11,6,"DErrorLayout") + + self.textLabel1_3 = QLabel(self,"textLabel1_3") + + DErrorLayout.addWidget(self.textLabel1_3,0,0) + + layout1 = QHBoxLayout(None,0,6,"layout1") + spacer1_2 = QSpacerItem(171,20,QSizePolicy.Expanding,QSizePolicy.Minimum) + layout1.addItem(spacer1_2) + + self.bSup = QPushButton(self,"bSup") + self.bSup.setAutoDefault(1) + layout1.addWidget(self.bSup) + spacer1 = QSpacerItem(171,20,QSizePolicy.Expanding,QSizePolicy.Minimum) + layout1.addItem(spacer1) + + DErrorLayout.addLayout(layout1,1,0) + + self.languageChange() + + self.resize(QSize(482,480).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + + + def languageChange(self): + self.setCaption(self.__tr("DInactif")) + self.textLabel1_3.setText(self.__trUtf8("\x3c\x66\x6f\x6e\x74\x20\x73\x69\x7a\x65\x3d\x22\x2b\x34\x22\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x4c\x65\x20\x6e\x6f\x65\x75\x64\x20\x73\xc3\xa9\x6c\x65\x63\x74\x69\x6f\x6e\x6e\xc3\xa9\x20\x6e\x65\x20\x63\x6f\x72\x72\x65\x73\x70\x6f\x6e\x64\x20\x70\x61\x73\x20\xc3\xa0\x20\x75\x6e\x20\x6f\x62\x6a\x65\x74\x20\x61\x63\x74\x69\x66\x2e\x3c\x2f\x70\x3e\x3c\x2f\x66\x6f\x6e\x74\x3e")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + + + def BSupPressed(self): + print "DError.BSupPressed(): Not implemented yet" + + def ViewDoc(self): + print "DError.ViewDoc(): Not implemented yet" + + def BOkPressed(self): + print "DError.BOkPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DError",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DError",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desError.ui b/Ui/desError.ui new file mode 100644 index 00000000..9dd94bbd --- /dev/null +++ b/Ui/desError.ui @@ -0,0 +1,113 @@ + +DError + + + DError + + + + 0 + 0 + 482 + 480 + + + + + 350 + 0 + + + + DInactif + + + + unnamed + + + + textLabel1_3 + + + <font size="+4"><p align="center">Le noeud sélectionné ne correspond pas à un objet actif.</p></font> + + + + + layout1 + + + + unnamed + + + + spacer1_2 + + + Horizontal + + + Expanding + + + + 171 + 20 + + + + + + bSup + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + spacer1 + + + Horizontal + + + Expanding + + + + 171 + 20 + + + + + + + + + + bSup + clicked() + DError + BSupPressed() + + + + BSupPressed() + ViewDoc() + BOkPressed() + + + diff --git a/Ui/desFormule.py b/Ui/desFormule.py new file mode 100644 index 00000000..6d7b72c2 --- /dev/null +++ b/Ui/desFormule.py @@ -0,0 +1,260 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desFormule.ui' +# +# Created: ven mai 16 13:30:38 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DFormule(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DFormule") + + self.setMinimumSize(QSize(505,0)) + + DFormuleLayout = QGridLayout(self,1,1,11,6,"DFormuleLayout") + + layout4 = QHBoxLayout(None,0,6,"layout4") + + self.bSup = QPushButton(self,"bSup") + self.bSup.setMinimumSize(QSize(0,30)) + self.bSup.setAutoDefault(1) + layout4.addWidget(self.bSup) + + self.bOk = QPushButton(self,"bOk") + self.bOk.setMinimumSize(QSize(0,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + layout4.addWidget(self.bOk) + + self.bHelp = QPushButton(self,"bHelp") + self.bHelp.setMinimumSize(QSize(0,30)) + self.bHelp.setAutoDefault(1) + layout4.addWidget(self.bHelp) + + DFormuleLayout.addLayout(layout4,2,0) + + self.Commentaire = QLabel(self,"Commentaire") + + DFormuleLayout.addWidget(self.Commentaire,1,0) + + self.TWChoix = QTabWidget(self,"TWChoix") + + self.Formule = QWidget(self.TWChoix,"Formule") + FormuleLayout = QGridLayout(self.Formule,1,1,11,6,"FormuleLayout") + + self.textLabel1 = QLabel(self.Formule,"textLabel1") + self.textLabel1.setMinimumSize(QSize(0,0)) + + FormuleLayout.addWidget(self.textLabel1,0,0) + + self.textLabel1_3 = QLabel(self.Formule,"textLabel1_3") + + FormuleLayout.addMultiCellWidget(self.textLabel1_3,6,6,0,1) + + layout6 = QHBoxLayout(None,0,6,"layout6") + + self.LENomFormule = QLineEdit(self.Formule,"LENomFormule") + self.LENomFormule.setMinimumSize(QSize(0,40)) + layout6.addWidget(self.LENomFormule) + + layout4_2 = QHBoxLayout(None,0,6,"layout4_2") + + self.textLabel1_6 = QLabel(self.Formule,"textLabel1_6") + layout4_2.addWidget(self.textLabel1_6) + + self.LENomsArgs = QLineEdit(self.Formule,"LENomsArgs") + self.LENomsArgs.setMinimumSize(QSize(230,40)) + layout4_2.addWidget(self.LENomsArgs) + + self.textLabel1_6_2 = QLabel(self.Formule,"textLabel1_6_2") + layout4_2.addWidget(self.textLabel1_6_2) + layout6.addLayout(layout4_2) + + FormuleLayout.addMultiCellLayout(layout6,2,2,0,1) + + self.textLabel2 = QLabel(self.Formule,"textLabel2") + + FormuleLayout.addWidget(self.textLabel2,1,1) + + self.textLabel1_3_2 = QLabel(self.Formule,"textLabel1_3_2") + + FormuleLayout.addMultiCellWidget(self.textLabel1_3_2,7,7,0,1) + + self.textLabel2_2 = QLabel(self.Formule,"textLabel2_2") + + FormuleLayout.addMultiCellWidget(self.textLabel2_2,3,3,0,1) + + self.textLabel1_5 = QLabel(self.Formule,"textLabel1_5") + self.textLabel1_5.setMinimumSize(QSize(0,0)) + + FormuleLayout.addMultiCellWidget(self.textLabel1_5,4,4,0,1) + + self.LECorpsFormule = QLineEdit(self.Formule,"LECorpsFormule") + self.LECorpsFormule.setMinimumSize(QSize(0,30)) + + FormuleLayout.addMultiCellWidget(self.LECorpsFormule,5,5,0,1) + + self.textLabel1_2 = QLabel(self.Formule,"textLabel1_2") + + FormuleLayout.addWidget(self.textLabel1_2,0,1) + self.TWChoix.insertTab(self.Formule,QString("")) + + self.Commande = QWidget(self.TWChoix,"Commande") + CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout") + + self.textLabel4 = QLabel(self.Commande,"textLabel4") + + CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3) + + self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1") + + LayoutWidget = QWidget(self.buttonGroup1,"layout1") + LayoutWidget.setGeometry(QRect(20,20,113,48)) + layout1 = QVBoxLayout(LayoutWidget,11,6,"layout1") + + self.RBalpha = QRadioButton(LayoutWidget,"RBalpha") + self.RBalpha.setChecked(1) + layout1.addWidget(self.RBalpha) + + self.RBGroupe = QRadioButton(LayoutWidget,"RBGroupe") + layout1.addWidget(self.RBGroupe) + + CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3) + + self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande") + + CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3) + + self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4") + + CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,2) + + self.textLabel6 = QLabel(self.Commande,"textLabel6") + self.textLabel6.setMinimumSize(QSize(40,0)) + + CommandeLayout.addWidget(self.textLabel6,1,0) + + self.LEFiltre = QLineEdit(self.Commande,"LEFiltre") + self.LEFiltre.setMinimumSize(QSize(160,40)) + + CommandeLayout.addWidget(self.LEFiltre,1,1) + + self.BNext = QToolButton(self.Commande,"BNext") + self.BNext.setMinimumSize(QSize(60,40)) + self.BNext.setIconSet(QIconSet()) + + CommandeLayout.addWidget(self.BNext,1,2) + self.TWChoix.insertTab(self.Commande,QString("")) + + DFormuleLayout.addWidget(self.TWChoix,0,0) + + self.languageChange() + + self.resize(QSize(529,493).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed) + self.connect(self.LENomFormule,SIGNAL("returnPressed()"),self.NomFormuleSaisi) + self.connect(self.LENomsArgs,SIGNAL("returnPressed()"),self.argsSaisis) + self.connect(self.LECorpsFormule,SIGNAL("returnPressed()"),self.FormuleSaisie) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + + self.setTabOrder(self.LEFiltre,self.LENomFormule) + self.setTabOrder(self.LENomFormule,self.LENomsArgs) + self.setTabOrder(self.LENomsArgs,self.LECorpsFormule) + self.setTabOrder(self.LECorpsFormule,self.bSup) + self.setTabOrder(self.bSup,self.bOk) + self.setTabOrder(self.bOk,self.bHelp) + self.setTabOrder(self.bHelp,self.TWChoix) + self.setTabOrder(self.TWChoix,self.RBalpha) + self.setTabOrder(self.RBalpha,self.RBGroupe) + self.setTabOrder(self.RBGroupe,self.LBNouvCommande) + + + def languageChange(self): + self.setCaption(self.__tr("DMacro")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.Commentaire.setText(QString.null) + self.textLabel1.setText(self.__tr("

Nom de la formule

")) + self.textLabel1_3.setText(self.__trUtf8("\x52\x65\x74\x6f\x75\x72\x2d\x43\x68\x61\x72\x69\x6f\x74\x20\x70\x65\x72\x6d\x65\x74\x20\x64\x65\x20\x76\xc3\xa9\x72\x69\x66\x69\x65\x72\x20\x71\x75\x65\x20\x6c\x27\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x20\x65\x73\x74\x20\x76\x61\x6c\x69\x64\x65\x2e")) + self.textLabel1_6.setText(self.__tr("

(

")) + self.textLabel1_6_2.setText(self.__tr("

)

")) + self.textLabel2.setText(self.__trUtf8("\x76\x61\x72\x69\x61\x62\x6c\x65\x73\x20\x73\xc3\xa9\x70\x61\x72\xc3\xa9\x65\x73\x20\x70\x61\x72\x20\x64\x65\x73\x20\x22\x2c\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x61\x72\x20\x65\x78\x2e\x20\x3a\x20\x78\x2c\x79\x2c\x7a")) + self.textLabel1_3_2.setText(self.__trUtf8("\x43\x65\x20\x6e\x27\x65\x73\x74\x20\x71\x75\x27\x61\x70\x72\xc3\xa8\x73\x20\x61\x76\x6f\x69\x72\x20\x61\x70\x70\x75\x79\xc3\xa9\x20\x73\x75\x72\x20\x6c\x65\x20\x62\x6f\x75\x74\x6f\x6e\x20\x56\x61\x6c\x69\x64\x65\x72\x20\x71\x75\x65\x20\x6c\x65\x73\x20\x6e\x6f\x75\x76\x65\x6c\x6c\x65\x73\x0a\x76\x61\x6c\x65\x75\x72\x73\x20\x73\x65\x72\x6f\x6e\x74\x20\x65\x66\x66\x65\x63\x74\x69\x76\x65\x6d\x65\x6e\x74\x20\x70\x72\x69\x73\x65\x73\x20\x65\x6e\x20\x63\x6f\x6d\x70\x74\x65")) + self.textLabel2_2.setText(self.__tr("=")) + self.textLabel1_5.setText(self.__tr("

Expression

")) + self.textLabel1_2.setText(self.__tr("

Arguments

")) + self.TWChoix.changeTab(self.Formule,self.__trUtf8("\x44\xc3\xa9\x66\x69\x6e\x69\x74\x69\x6f\x6e\x20\x46\x6f\x72\x6d\x75\x6c\x65")) + self.textLabel4.setText(self.__trUtf8("\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x6c\x65\x66\x74\x22\x3e\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65\x3c\x2f\x70\x3e")) + self.buttonGroup1.setTitle(self.__tr("Affichage")) + self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65")) + self.RBGroupe.setText(self.__tr("par groupe")) + self.textLabel1_4.setText(self.__tr("Commandes :")) + self.textLabel6.setText(self.__tr("Filtre")) + self.BNext.setText(self.__tr("Suivant")) + QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence")) + self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande")) + + + def LBNouvCommandeClicked(self): + print "DFormule.LBNouvCommandeClicked(): Not implemented yet" + + def LEFiltreTextChanged(self): + print "DFormule.LEFiltreTextChanged(): Not implemented yet" + + def LEfiltreReturnPressed(self): + print "DFormule.LEfiltreReturnPressed(): Not implemented yet" + + def BSupPressed(self): + print "DFormule.BSupPressed(): Not implemented yet" + + def BOkPressed(self): + print "DFormule.BOkPressed(): Not implemented yet" + + def BuildTabCommand(self): + print "DFormule.BuildTabCommand(): Not implemented yet" + + def BNextPressed(self): + print "DFormule.BNextPressed(): Not implemented yet" + + def NomFormuleSaisi(self): + print "DFormule.NomFormuleSaisi(): Not implemented yet" + + def argsSaisis(self): + print "DFormule.argsSaisis(): Not implemented yet" + + def FormuleSaisie(self): + print "DFormule.FormuleSaisie(): Not implemented yet" + + def ViewDoc(self): + print "DFormule.ViewDoc(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DFormule",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DFormule",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desFormule.ui b/Ui/desFormule.ui new file mode 100644 index 00000000..37d5e0a2 --- /dev/null +++ b/Ui/desFormule.ui @@ -0,0 +1,502 @@ + +DFormule + + + DFormule + + + + 0 + 0 + 529 + 493 + + + + + 505 + 0 + + + + DMacro + + + + unnamed + + + + layout4 + + + + unnamed + + + + bSup + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bOk + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bHelp + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + Commentaire + + + + + + + + TWChoix + + + + Formule + + + Définition Formule + + + + unnamed + + + + textLabel1 + + + + 0 + 0 + + + + <h3><p align="center"><u><b>Nom de la formule</b></u></p></h3> + + + + + textLabel1_3 + + + Retour-Chariot permet de vérifier que l'expression est valide. + + + + + layout6 + + + + unnamed + + + + LENomFormule + + + + 0 + 40 + + + + + + layout4 + + + + unnamed + + + + textLabel1_6 + + + <h1><b>(</b></h1> + + + + + LENomsArgs + + + + 230 + 40 + + + + + + textLabel1_6_2 + + + <h1><b>)</b></h1> + + + + + + + + + textLabel2 + + + variables séparées par des "," + par ex. : x,y,z + + + + + textLabel1_3_2 + + + Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles +valeurs seront effectivement prises en compte + + + + + textLabel2_2 + + + <font size="+4" face="Helvetica"><b>=</b></font> + + + + + textLabel1_5 + + + + 0 + 0 + + + + <h3><p align="center"><u><b>Expression</b></u></p></h3> + + + + + LECorpsFormule + + + + 0 + 30 + + + + + + textLabel1_2 + + + <h3><p align="center"><u><b>Arguments</b></u></p></h3> + + + + + + + Commande + + + Nouvelle Commande + + + + unnamed + + + + textLabel4 + + + <p align="left">La commande choisie sera ajoutée APRES la commande courante</p> + + + + + buttonGroup1 + + + Affichage + + + + layout1 + + + + 20 + 20 + 113 + 48 + + + + + unnamed + + + + RBalpha + + + alphabétique + + + true + + + + + RBGroupe + + + par groupe + + + + + + + + LBNouvCommande + + + + + textLabel1_4 + + + <b><u>Commandes :</u></b> + + + + + textLabel6 + + + + 40 + 0 + + + + Filtre + + + + + LEFiltre + + + + 160 + 40 + + + + + + BNext + + + + 60 + 40 + + + + Suivant + + + + + + affiche la prochaine occurence + + + + + + + + + + LBNouvCommande + doubleClicked(QListBoxItem*) + DFormule + LBNouvCommandeClicked() + + + LEFiltre + textChanged(const QString&) + DFormule + LEFiltreTextChanged() + + + LEFiltre + returnPressed() + DFormule + LEfiltreReturnPressed() + + + bSup + pressed() + DFormule + BSupPressed() + + + bOk + clicked() + DFormule + BOkPressed() + + + RBalpha + clicked() + DFormule + BuildTabCommand() + + + RBGroupe + clicked() + DFormule + BuildTabCommand() + + + BNext + clicked() + DFormule + BNextPressed() + + + LENomFormule + returnPressed() + DFormule + NomFormuleSaisi() + + + LENomsArgs + returnPressed() + DFormule + argsSaisis() + + + LECorpsFormule + returnPressed() + DFormule + FormuleSaisie() + + + bHelp + clicked() + DFormule + ViewDoc() + + + + LEFiltre + LENomFormule + LENomsArgs + LECorpsFormule + bSup + bOk + bHelp + TWChoix + RBalpha + RBGroupe + LBNouvCommande + + + LBNouvCommandeClicked() + LEFiltreTextChanged() + LEfiltreReturnPressed() + BSupPressed() + BOkPressed() + BuildTabCommand() + BNextPressed() + NomFormuleSaisi() + argsSaisis() + FormuleSaisie() + ViewDoc() + + + diff --git a/Ui/desInactif.py b/Ui/desInactif.py new file mode 100644 index 00000000..39e7cce7 --- /dev/null +++ b/Ui/desInactif.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desInactif.ui' +# +# Created: mar mar 25 10:05:08 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DInactif(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DInactif") + + self.setMinimumSize(QSize(350,0)) + + DInactifLayout = QGridLayout(self,1,1,11,6,"DInactifLayout") + + self.textLabel1_3 = QLabel(self,"textLabel1_3") + + DInactifLayout.addWidget(self.textLabel1_3,0,0) + + self.textLabel1 = QLabel(self,"textLabel1") + + DInactifLayout.addWidget(self.textLabel1,1,0) + + layout1 = QHBoxLayout(None,0,6,"layout1") + spacer2 = QSpacerItem(171,20,QSizePolicy.Expanding,QSizePolicy.Minimum) + layout1.addItem(spacer2) + + self.bSup = QPushButton(self,"bSup") + self.bSup.setAutoDefault(1) + layout1.addWidget(self.bSup) + spacer1 = QSpacerItem(171,20,QSizePolicy.Expanding,QSizePolicy.Minimum) + layout1.addItem(spacer1) + + DInactifLayout.addLayout(layout1,2,0) + + self.languageChange() + + self.resize(QSize(482,480).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + + + def languageChange(self): + self.setCaption(self.__tr("DInactif")) + self.textLabel1_3.setText(self.__trUtf8("\x3c\x66\x6f\x6e\x74\x20\x73\x69\x7a\x65\x3d\x22\x2b\x32\x22\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x4c\x65\x20\x6e\x6f\x65\x75\x64\x20\x73\xc3\xa9\x6c\x65\x63\x74\x69\x6f\x6e\x6e\xc3\xa9\x20\x6e\x65\x20\x63\x6f\x72\x72\x65\x73\x70\x6f\x6e\x64\x20\x70\x61\x73\x20\xc3\xa0\x20\x75\x6e\x20\x6f\x62\x6a\x65\x74\x20\x61\x63\x74\x69\x66\x2e\x3c\x2f\x70\x3e\x3c\x2f\x66\x6f\x6e\x74\x3e")) + self.textLabel1.setText(self.__trUtf8("\x3c\x66\x6f\x6e\x74\x20\x73\x69\x7a\x65\x3d\x22\x2b\x32\x22\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x0a\x53\x65\x75\x6c\x65\x73\x20\x6c\x65\x73\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x73\x20\x70\x6c\x61\x63\xc3\xa9\x65\x73\x20\x65\x6e\x74\x72\x65\x20\x3a\x0a\x0a\x44\x45\x42\x55\x54\x20\x2f\x20\x46\x49\x4e\x0a\x0a\x73\x6f\x6e\x74\x20\x61\x63\x74\x69\x76\x65\x73\x0a\x3c\x2f\x70\x3e\x3c\x2f\x66\x6f\x6e\x74\x3e")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + + + def BSupPressed(self): + print "DInactif.BSupPressed(): Not implemented yet" + + def ViewDoc(self): + print "DInactif.ViewDoc(): Not implemented yet" + + def BOkPressed(self): + print "DInactif.BOkPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DInactif",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DInactif",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desInactif.ui b/Ui/desInactif.ui new file mode 100644 index 00000000..1b8f7f32 --- /dev/null +++ b/Ui/desInactif.ui @@ -0,0 +1,127 @@ + +DInactif + + + DInactif + + + + 0 + 0 + 482 + 480 + + + + + 350 + 0 + + + + DInactif + + + + unnamed + + + + textLabel1_3 + + + <font size="+2"><p align="center">Le noeud sélectionné ne correspond pas à un objet actif.</p></font> + + + + + textLabel1 + + + <font size="+2"><p align="center"> +Seules les commandes placées entre : + +DEBUT / FIN + +sont actives +</p></font> + + + + + layout1 + + + + unnamed + + + + spacer2 + + + Horizontal + + + Expanding + + + + 171 + 20 + + + + + + bSup + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + spacer1 + + + Horizontal + + + Expanding + + + + 171 + 20 + + + + + + + + + + bSup + clicked() + DInactif + BSupPressed() + + + + BSupPressed() + ViewDoc() + BOkPressed() + + + diff --git a/Ui/desInclude.py b/Ui/desInclude.py new file mode 100644 index 00000000..dfe0d625 --- /dev/null +++ b/Ui/desInclude.py @@ -0,0 +1,240 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desInclude.ui' +# +# Created: ven mai 16 13:30:38 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DInc1(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DInc1") + + self.setMinimumSize(QSize(505,0)) + + DInc1Layout = QGridLayout(self,1,1,11,6,"DInc1Layout") + + self.bOk = QPushButton(self,"bOk") + self.bOk.setMinimumSize(QSize(0,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + + DInc1Layout.addWidget(self.bOk,2,1) + + self.bHelp = QPushButton(self,"bHelp") + self.bHelp.setMinimumSize(QSize(0,30)) + self.bHelp.setAutoDefault(1) + + DInc1Layout.addWidget(self.bHelp,2,2) + + self.bSup = QPushButton(self,"bSup") + self.bSup.setMinimumSize(QSize(0,30)) + self.bSup.setAutoDefault(1) + + DInc1Layout.addWidget(self.bSup,2,0) + + self.Commentaire = QLabel(self,"Commentaire") + + DInc1Layout.addMultiCellWidget(self.Commentaire,1,1,0,2) + + self.TWChoix = QTabWidget(self,"TWChoix") + + self.MotClef = QWidget(self.TWChoix,"MotClef") + MotClefLayout = QGridLayout(self.MotClef,1,1,11,6,"MotClefLayout") + + self.LBMCPermis = QListBox(self.MotClef,"LBMCPermis") + self.LBMCPermis.setMinimumSize(QSize(0,0)) + + MotClefLayout.addWidget(self.LBMCPermis,1,0) + + self.textLabel1 = QLabel(self.MotClef,"textLabel1") + self.textLabel1.setMinimumSize(QSize(0,0)) + + MotClefLayout.addWidget(self.textLabel1,0,0) + + self.LBRegles = QListBox(self.MotClef,"LBRegles") + + MotClefLayout.addWidget(self.LBRegles,1,1) + + self.textLabel1_2 = QLabel(self.MotClef,"textLabel1_2") + + MotClefLayout.addWidget(self.textLabel1_2,0,1) + self.TWChoix.insertTab(self.MotClef,QString("")) + + self.Commande = QWidget(self.TWChoix,"Commande") + CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout") + + self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande") + + CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3) + + self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1") + + self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe") + self.RBGroupe.setGeometry(QRect(20,40,101,20)) + + self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha") + self.RBalpha.setGeometry(QRect(20,20,120,20)) + self.RBalpha.setChecked(1) + + CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3) + + self.textLabel4 = QLabel(self.Commande,"textLabel4") + + CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3) + + self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4") + + CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,2) + + self.textLabel6 = QLabel(self.Commande,"textLabel6") + self.textLabel6.setMinimumSize(QSize(40,0)) + + CommandeLayout.addWidget(self.textLabel6,1,0) + + self.LEFiltre = QLineEdit(self.Commande,"LEFiltre") + self.LEFiltre.setMinimumSize(QSize(160,40)) + + CommandeLayout.addWidget(self.LEFiltre,1,1) + + self.BNext = QToolButton(self.Commande,"BNext") + self.BNext.setMinimumSize(QSize(60,0)) + self.BNext.setIconSet(QIconSet()) + + CommandeLayout.addWidget(self.BNext,1,2) + self.TWChoix.insertTab(self.Commande,QString("")) + + self.TabPage = QWidget(self.TWChoix,"TabPage") + + self.textLabel1_3 = QLabel(self.TabPage,"textLabel1_3") + self.textLabel1_3.setGeometry(QRect(30,40,440,41)) + + self.LENomFichier = QLineEdit(self.TabPage,"LENomFichier") + self.LENomFichier.setGeometry(QRect(18,117,450,40)) + self.LENomFichier.setSizePolicy(QSizePolicy(0,0,0,0,self.LENomFichier.sizePolicy().hasHeightForWidth())) + self.LENomFichier.setMinimumSize(QSize(450,40)) + + self.BBrowse = QPushButton(self.TabPage,"BBrowse") + self.BBrowse.setGeometry(QRect(288,306,161,41)) + self.BBrowse.setSizePolicy(QSizePolicy(0,0,0,0,self.BBrowse.sizePolicy().hasHeightForWidth())) + + self.BChangeFile = QPushButton(self.TabPage,"BChangeFile") + self.BChangeFile.setGeometry(QRect(290,350,161,41)) + self.BChangeFile.setSizePolicy(QSizePolicy(0,0,0,0,self.BChangeFile.sizePolicy().hasHeightForWidth())) + self.TWChoix.insertTab(self.TabPage,QString("")) + + self.TabPage_2 = QWidget(self.TWChoix,"TabPage_2") + TabPageLayout = QGridLayout(self.TabPage_2,1,1,11,6,"TabPageLayout") + + self.textLabel1_5 = QLabel(self.TabPage_2,"textLabel1_5") + + TabPageLayout.addWidget(self.textLabel1_5,0,0) + self.TWChoix.insertTab(self.TabPage_2,QString("")) + + DInc1Layout.addMultiCellWidget(self.TWChoix,0,0,0,2) + + self.languageChange() + + self.resize(QSize(521,511).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed) + self.connect(self.BBrowse,SIGNAL("clicked()"),self.BBrowsePressed) + self.connect(self.LENomFichier,SIGNAL("returnPressed()"),self.LENomFichReturnPressed) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + + self.setTabOrder(self.LEFiltre,self.LENomFichier) + self.setTabOrder(self.LENomFichier,self.bHelp) + self.setTabOrder(self.bHelp,self.bSup) + self.setTabOrder(self.bSup,self.bOk) + self.setTabOrder(self.bOk,self.TWChoix) + self.setTabOrder(self.TWChoix,self.LBMCPermis) + self.setTabOrder(self.LBMCPermis,self.LBRegles) + self.setTabOrder(self.LBRegles,self.LBNouvCommande) + self.setTabOrder(self.LBNouvCommande,self.RBalpha) + self.setTabOrder(self.RBalpha,self.BBrowse) + self.setTabOrder(self.BBrowse,self.BChangeFile) + + + def languageChange(self): + self.setCaption(self.__tr("DMacro")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.Commentaire.setText(QString.null) + self.textLabel1.setText(self.__tr("

Mots Clefs Permis

")) + self.textLabel1_2.setText(self.__trUtf8("\x3c\x68\x33\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x3c\x75\x3e\x3c\x62\x3e\x52\xc3\xa9\x67\x6c\x65\x73\x3c\x2f\x62\x3e\x3c\x2f\x75\x3e\x3c\x2f\x70\x3e\x3c\x2f\x68\x33\x3e")) + self.TWChoix.changeTab(self.MotClef,self.__tr("Ajouter Mot-Clef")) + self.buttonGroup1.setTitle(self.__tr("Affichage")) + self.RBGroupe.setText(self.__tr("par groupe")) + self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65")) + self.textLabel4.setText(self.__trUtf8("\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65")) + self.textLabel1_4.setText(self.__tr("Commandes :")) + self.textLabel6.setText(self.__tr("Filtre")) + self.BNext.setText(self.__tr("Suivant")) + QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence")) + self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande")) + self.textLabel1_3.setText(self.__tr("La commande INCLUDE requiert un nom de Fichier :")) + self.BBrowse.setText(self.__tr("Edit")) + self.BChangeFile.setText(self.__tr("Autre Fichier")) + self.TWChoix.changeTab(self.TabPage,self.__tr("Fichier Include")) + self.textLabel1_5.setText(self.__trUtf8("\x3c\x66\x6f\x6e\x74\x20\x73\x69\x7a\x65\x3d\x22\x2b\x31\x22\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x49\x4e\x43\x4c\x55\x44\x45\x20\x6e\x27\x61\x20\x70\x61\x73\x20\x64\x65\x20\x66\x69\x63\x68\x69\x65\x72\x20\x61\x73\x73\x6f\x63\x69\xc3\xa9\x2e\x0a\x49\x6c\x20\x66\x61\x75\x74\x20\x64\x27\x61\x62\x6f\x72\x64\x20\x63\x68\x6f\x69\x73\x69\x72\x20\x75\x6e\x20\x6e\x75\x6d\xc3\xa9\x72\x6f\x20\x64\x27\x75\x6e\x69\x74\xc3\xa9\x3c\x2f\x70\x3e\x3c\x2f\x66\x6f\x6e\x74\x3e")) + self.TWChoix.changeTab(self.TabPage_2,self.__tr("Fichier Inc")) + + + def LBNouvCommandeClicked(self): + print "DInc1.LBNouvCommandeClicked(): Not implemented yet" + + def LEFiltreTextChanged(self): + print "DInc1.LEFiltreTextChanged(): Not implemented yet" + + def LEfiltreReturnPressed(self): + print "DInc1.LEfiltreReturnPressed(): Not implemented yet" + + def BSupPressed(self): + print "DInc1.BSupPressed(): Not implemented yet" + + def BOkPressed(self): + print "DInc1.BOkPressed(): Not implemented yet" + + def BuildTabCommand(self): + print "DInc1.BuildTabCommand(): Not implemented yet" + + def BNextPressed(self): + print "DInc1.BNextPressed(): Not implemented yet" + + def BBrowsePressed(self): + print "DInc1.BBrowsePressed(): Not implemented yet" + + def LENomFichReturnPressed(self): + print "DInc1.LENomFichReturnPressed(): Not implemented yet" + + def ViewDoc(self): + print "DInc1.ViewDoc(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DInc1",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DInc1",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desInclude.ui b/Ui/desInclude.ui new file mode 100644 index 00000000..9edfc3e7 --- /dev/null +++ b/Ui/desInclude.ui @@ -0,0 +1,504 @@ + +DInc1 + + + DInc1 + + + + 0 + 0 + 521 + 511 + + + + + 505 + 0 + + + + DMacro + + + + unnamed + + + + bOk + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bHelp + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + bSup + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + Commentaire + + + + + + + + TWChoix + + + + MotClef + + + Ajouter Mot-Clef + + + + unnamed + + + + LBMCPermis + + + + 0 + 0 + + + + + + textLabel1 + + + + 0 + 0 + + + + <h3><p align="center"><u><b>Mots Clefs Permis</b></u></p></h3> + + + + + LBRegles + + + + + textLabel1_2 + + + <h3><p align="center"><u><b>Régles</b></u></p></h3> + + + + + + + Commande + + + Nouvelle Commande + + + + unnamed + + + + LBNouvCommande + + + + + buttonGroup1 + + + Affichage + + + + RBGroupe + + + + 20 + 40 + 101 + 20 + + + + par groupe + + + + + RBalpha + + + + 20 + 20 + 120 + 20 + + + + alphabétique + + + true + + + + + + textLabel4 + + + La commande choisie sera ajoutée APRES la commande courante + + + + + textLabel1_4 + + + <b><u>Commandes :</u></b> + + + + + textLabel6 + + + + 40 + 0 + + + + Filtre + + + + + LEFiltre + + + + 160 + 40 + + + + + + BNext + + + + 60 + 0 + + + + Suivant + + + + + + affiche la prochaine occurence + + + + + + + TabPage + + + Fichier Include + + + + textLabel1_3 + + + + 30 + 40 + 440 + 41 + + + + <font size="+1">La commande INCLUDE requiert un nom de Fichier :</font> + + + + + LENomFichier + + + + 18 + 117 + 450 + 40 + + + + + 0 + 0 + 0 + 0 + + + + + 450 + 40 + + + + + + BBrowse + + + + 288 + 306 + 161 + 41 + + + + + 0 + 0 + 0 + 0 + + + + Edit + + + + + BChangeFile + + + + 290 + 350 + 161 + 41 + + + + + 0 + 0 + 0 + 0 + + + + Autre Fichier + + + + + + TabPage + + + Fichier Inc + + + + unnamed + + + + textLabel1_5 + + + <font size="+1"><p align="center">La commande INCLUDE n'a pas de fichier associé. +Il faut d'abord choisir un numéro d'unité</p></font> + + + + + + + + + + LBNouvCommande + doubleClicked(QListBoxItem*) + DInc1 + LBNouvCommandeClicked() + + + LEFiltre + textChanged(const QString&) + DInc1 + LEFiltreTextChanged() + + + LEFiltre + returnPressed() + DInc1 + LEfiltreReturnPressed() + + + bSup + pressed() + DInc1 + BSupPressed() + + + bOk + clicked() + DInc1 + BOkPressed() + + + RBalpha + clicked() + DInc1 + BuildTabCommand() + + + RBGroupe + clicked() + DInc1 + BuildTabCommand() + + + BNext + clicked() + DInc1 + BNextPressed() + + + BBrowse + clicked() + DInc1 + BBrowsePressed() + + + LENomFichier + returnPressed() + DInc1 + LENomFichReturnPressed() + + + bHelp + clicked() + DInc1 + ViewDoc() + + + + LEFiltre + LENomFichier + bHelp + bSup + bOk + TWChoix + LBMCPermis + LBRegles + LBNouvCommande + RBalpha + BBrowse + BChangeFile + + + LBNouvCommandeClicked() + LEFiltreTextChanged() + LEfiltreReturnPressed() + BSupPressed() + BOkPressed() + BuildTabCommand() + BNextPressed() + BBrowsePressed() + LENomFichReturnPressed() + ViewDoc() + + + diff --git a/Ui/desListeParam.py b/Ui/desListeParam.py new file mode 100644 index 00000000..d8326749 --- /dev/null +++ b/Ui/desListeParam.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desListeParam.ui' +# +# Created: mar mar 25 10:05:08 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DLisParam(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DLisParam") + + + DLisParamLayout = QGridLayout(self,1,1,11,6,"DLisParamLayout") + + self.LBParam = QListBox(self,"LBParam") + + DLisParamLayout.addWidget(self.LBParam,0,0) + + self.languageChange() + + self.resize(QSize(413,394).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.LBParam,SIGNAL("clicked(QListBoxItem*)"),self.LBParamItemPressed) + + + def languageChange(self): + self.setCaption(self.__trUtf8("\x53\xc3\xa9\x6c\x65\x63\x74\x69\x6f\x6e\x20\x64\x65\x20\x70\x61\x72\x61\x6d\xc3\xa9\x74\x72\x65\x73")) + + + def LBParamItemPressed(self): + print "DLisParam.LBParamItemPressed(): Not implemented yet" + + def __trUtf8(self,s,c = None): + return qApp.translate("DLisParam",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desListeParam.ui b/Ui/desListeParam.ui new file mode 100644 index 00000000..5296fb55 --- /dev/null +++ b/Ui/desListeParam.ui @@ -0,0 +1,44 @@ + +DLisParam + + + DLisParam + + + + 0 + 0 + 413 + 394 + + + + Sélection de paramétres + + + + unnamed + + + + LBParam + + + Single + + + + + + + LBParam + clicked(QListBoxItem*) + DLisParam + LBParamItemPressed() + + + + LBParamItemPressed() + + + diff --git a/Ui/desMCFact.py b/Ui/desMCFact.py new file mode 100644 index 00000000..50c7de55 --- /dev/null +++ b/Ui/desMCFact.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desMCFact.ui' +# +# Created: mar mar 25 10:05:08 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DMCFact(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DMCFact") + + self.setMinimumSize(QSize(505,0)) + + DMCFactLayout = QGridLayout(self,1,1,11,6,"DMCFactLayout") + + self.TWChoix = QTabWidget(self,"TWChoix") + + self.MotClef = QWidget(self.TWChoix,"MotClef") + MotClefLayout = QGridLayout(self.MotClef,1,1,11,6,"MotClefLayout") + + self.textLabel1 = QLabel(self.MotClef,"textLabel1") + self.textLabel1.setMinimumSize(QSize(0,0)) + + MotClefLayout.addWidget(self.textLabel1,0,0) + + self.LBMCPermis = QListBox(self.MotClef,"LBMCPermis") + self.LBMCPermis.setMinimumSize(QSize(0,0)) + + MotClefLayout.addWidget(self.LBMCPermis,1,0) + + self.LBRegles = QListBox(self.MotClef,"LBRegles") + + MotClefLayout.addWidget(self.LBRegles,1,1) + + self.textLabel1_2 = QLabel(self.MotClef,"textLabel1_2") + + MotClefLayout.addWidget(self.textLabel1_2,0,1) + self.TWChoix.insertTab(self.MotClef,QString("")) + + DMCFactLayout.addMultiCellWidget(self.TWChoix,0,0,0,2) + + self.bSup = QPushButton(self,"bSup") + self.bSup.setAutoDefault(1) + + DMCFactLayout.addWidget(self.bSup,2,0) + + self.Commentaire = QLabel(self,"Commentaire") + + DMCFactLayout.addMultiCellWidget(self.Commentaire,1,1,0,2) + + self.bHelp = QPushButton(self,"bHelp") + self.bHelp.setAutoDefault(1) + + DMCFactLayout.addWidget(self.bHelp,2,2) + + self.bOk = QPushButton(self,"bOk") + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + + DMCFactLayout.addWidget(self.bOk,2,1) + + self.languageChange() + + self.resize(QSize(511,499).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + + + def languageChange(self): + self.setCaption(self.__tr("DMacro")) + self.textLabel1.setText(self.__tr("

Mots Clefs Permis

")) + self.textLabel1_2.setText(self.__trUtf8("\x3c\x68\x33\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x3c\x75\x3e\x3c\x62\x3e\x52\xc3\xa9\x67\x6c\x65\x73\x3c\x2f\x62\x3e\x3c\x2f\x75\x3e\x3c\x2f\x70\x3e\x3c\x2f\x68\x33\x3e")) + self.TWChoix.changeTab(self.MotClef,self.__tr("Ajouter Mot-Clef")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.Commentaire.setText(QString.null) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + + + def ViewDoc(self): + print "DMCFact.ViewDoc(): Not implemented yet" + + def BSupPressed(self): + print "DMCFact.BSupPressed(): Not implemented yet" + + def BOkPressed(self): + print "DMCFact.BOkPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DMCFact",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DMCFact",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desMCFact.ui b/Ui/desMCFact.ui new file mode 100644 index 00000000..433df5f9 --- /dev/null +++ b/Ui/desMCFact.ui @@ -0,0 +1,174 @@ + +DMCFact + + + DMCFact + + + + 0 + 0 + 511 + 499 + + + + + 505 + 0 + + + + DMacro + + + + unnamed + + + + TWChoix + + + + MotClef + + + Ajouter Mot-Clef + + + + unnamed + + + + textLabel1 + + + + 0 + 0 + + + + <h3><p align="center"><u><b>Mots Clefs Permis</b></u></p></h3> + + + + + LBMCPermis + + + + 0 + 0 + + + + + + LBRegles + + + + + textLabel1_2 + + + <h3><p align="center"><u><b>Régles</b></u></p></h3> + + + + + + + + bSup + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + Commentaire + + + + + + + + bHelp + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + bOk + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + + + bSup + pressed() + DMCFact + BSupPressed() + + + bOk + clicked() + DMCFact + BOkPressed() + + + bHelp + clicked() + DMCFact + ViewDoc() + + + + ViewDoc() + BSupPressed() + BOkPressed() + + + diff --git a/Ui/desMCListAjout.py b/Ui/desMCListAjout.py new file mode 100644 index 00000000..bb0d5986 --- /dev/null +++ b/Ui/desMCListAjout.py @@ -0,0 +1,121 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desMCListAjout.ui' +# +# Created: mar mar 25 10:05:08 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DMCListAjout(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DMCListAjout") + + self.setMinimumSize(QSize(350,0)) + + DMCListAjoutLayout = QGridLayout(self,1,1,11,6,"DMCListAjoutLayout") + + self.textLabel1 = QLabel(self,"textLabel1") + + DMCListAjoutLayout.addMultiCellWidget(self.textLabel1,1,1,0,2) + + self.textLabel1_2 = QLabel(self,"textLabel1_2") + + DMCListAjoutLayout.addMultiCellWidget(self.textLabel1_2,2,2,0,2) + + layout9 = QHBoxLayout(None,0,6,"layout9") + spacer4 = QSpacerItem(60,21,QSizePolicy.Expanding,QSizePolicy.Minimum) + layout9.addItem(spacer4) + + self.bAjout = QPushButton(self,"bAjout") + self.bAjout.setAutoDefault(1) + self.bAjout.setDefault(1) + layout9.addWidget(self.bAjout) + spacer2 = QSpacerItem(80,21,QSizePolicy.Expanding,QSizePolicy.Minimum) + layout9.addItem(spacer2) + + DMCListAjoutLayout.addMultiCellLayout(layout9,8,8,0,2) + spacer1 = QSpacerItem(21,40,QSizePolicy.Minimum,QSizePolicy.Expanding) + DMCListAjoutLayout.addItem(spacer1,9,1) + + self.textLabel1_2_2 = QLabel(self,"textLabel1_2_2") + + DMCListAjoutLayout.addMultiCellWidget(self.textLabel1_2_2,6,6,0,2) + spacer5 = QSpacerItem(20,20,QSizePolicy.Minimum,QSizePolicy.Expanding) + DMCListAjoutLayout.addItem(spacer5,7,1) + + self.MCFacteur = QLabel(self,"MCFacteur") + + DMCListAjoutLayout.addMultiCellWidget(self.MCFacteur,4,4,0,2) + spacer6 = QSpacerItem(21,31,QSizePolicy.Minimum,QSizePolicy.Expanding) + DMCListAjoutLayout.addItem(spacer6,5,1) + spacer7 = QSpacerItem(21,51,QSizePolicy.Minimum,QSizePolicy.Expanding) + DMCListAjoutLayout.addItem(spacer7,3,1) + spacer8 = QSpacerItem(41,51,QSizePolicy.Minimum,QSizePolicy.Expanding) + DMCListAjoutLayout.addItem(spacer8,0,1) + + self.bSup = QPushButton(self,"bSup") + self.bSup.setAutoDefault(1) + + DMCListAjoutLayout.addWidget(self.bSup,10,0) + + self.bOk = QPushButton(self,"bOk") + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + + DMCListAjoutLayout.addWidget(self.bOk,10,1) + + self.bHelp = QPushButton(self,"bHelp") + self.bHelp.setAutoDefault(1) + + DMCListAjoutLayout.addWidget(self.bHelp,10,2) + + self.languageChange() + + self.resize(QSize(459,472).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.bOk,SIGNAL("clicked()"),self.BAjoutClicked) + self.connect(self.bAjout,SIGNAL("clicked()"),self.BAjoutClicked) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + + + def languageChange(self): + self.setCaption(self.__tr("Form1")) + self.textLabel1.setText(self.__tr("

Pour ajouter une autre occurrence

")) + self.textLabel1_2.setText(self.__tr("

du mot clef-facteur

")) + self.bAjout.setText(self.__tr("&Ajouter")) + self.bAjout.setAccel(self.__tr("Alt+A")) + QToolTip.add(self.bAjout,self.__tr("validation de la saisie")) + self.textLabel1_2_2.setText(self.__tr("

cliquez ci-dessous

")) + self.MCFacteur.setText(self.__tr("

AFFE

")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + + + def BAjoutClicked(self): + print "DMCListAjout.BAjoutClicked(): Not implemented yet" + + def BSupPressed(self): + print "DMCListAjout.BSupPressed(): Not implemented yet" + + def ViewDoc(self): + print "DMCListAjout.ViewDoc(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DMCListAjout",s,c) diff --git a/Ui/desMCListAjout.ui b/Ui/desMCListAjout.ui new file mode 100644 index 00000000..ff58dbcd --- /dev/null +++ b/Ui/desMCListAjout.ui @@ -0,0 +1,297 @@ + +DMCListAjout + + + DMCListAjout + + + + 0 + 0 + 459 + 472 + + + + + 350 + 0 + + + + Form1 + + + + unnamed + + + + textLabel1 + + + <p align="center"><font size="+1">Pour ajouter une autre occurrence</font></p> + + + + + textLabel1_2 + + + <p align="center"><font size="+1">du mot clef-facteur</font> </p> + + + + + layout9 + + + + unnamed + + + + spacer4 + + + Horizontal + + + Expanding + + + + 60 + 21 + + + + + + bAjout + + + &Ajouter + + + Alt+A + + + true + + + true + + + validation de la saisie + + + + + spacer2 + + + Horizontal + + + Expanding + + + + 80 + 21 + + + + + + + + spacer1 + + + Vertical + + + Expanding + + + + 21 + 40 + + + + + + textLabel1_2_2 + + + <p align="center"><font size="+1">cliquez ci-dessous</font> </p> + + + + + spacer5 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + MCFacteur + + + <p align="center">AFFE</p> + + + + + spacer6 + + + Vertical + + + Expanding + + + + 21 + 31 + + + + + + spacer7 + + + Vertical + + + Expanding + + + + 21 + 51 + + + + + + spacer8 + + + Vertical + + + Expanding + + + + 41 + 51 + + + + + + bSup + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bOk + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bHelp + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + bOk + clicked() + DMCListAjout + BAjoutClicked() + + + bAjout + clicked() + DMCListAjout + BAjoutClicked() + + + bSup + clicked() + DMCListAjout + BSupPressed() + + + bHelp + clicked() + DMCListAjout + ViewDoc() + + + + BAjoutClicked() + BSupPressed() + ViewDoc() + + + diff --git a/Ui/desMacro.py b/Ui/desMacro.py new file mode 100644 index 00000000..4850e072 --- /dev/null +++ b/Ui/desMacro.py @@ -0,0 +1,228 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desMacro.ui' +# +# Created: Mon Jun 2 15:35:12 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.16 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DMacro(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DMacro") + + self.setMinimumSize(QSize(505,0)) + + DMacroLayout = QGridLayout(self,1,1,11,6,"DMacroLayout") + + self.Commentaire = QLabel(self,"Commentaire") + + DMacroLayout.addMultiCellWidget(self.Commentaire,1,1,0,2) + + self.TWChoix = QTabWidget(self,"TWChoix") + + self.MotClef = QWidget(self.TWChoix,"MotClef") + MotClefLayout = QGridLayout(self.MotClef,1,1,11,6,"MotClefLayout") + + self.LBMCPermis = QListBox(self.MotClef,"LBMCPermis") + self.LBMCPermis.setMinimumSize(QSize(0,0)) + + MotClefLayout.addWidget(self.LBMCPermis,1,0) + + self.LBRegles = QListBox(self.MotClef,"LBRegles") + + MotClefLayout.addWidget(self.LBRegles,1,1) + + self.textLabel1_2 = QLabel(self.MotClef,"textLabel1_2") + + MotClefLayout.addWidget(self.textLabel1_2,0,1) + + self.textLabel1 = QLabel(self.MotClef,"textLabel1") + self.textLabel1.setMinimumSize(QSize(0,0)) + + MotClefLayout.addWidget(self.textLabel1,0,0) + self.TWChoix.insertTab(self.MotClef,QString.fromLatin1("")) + + self.Commande = QWidget(self.TWChoix,"Commande") + CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout") + + self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande") + + CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3) + + self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1") + + self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha") + self.RBalpha.setGeometry(QRect(20,20,120,20)) + self.RBalpha.setChecked(1) + + self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe") + self.RBGroupe.setGeometry(QRect(20,40,120,20)) + + CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3) + + self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4") + + CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,1) + + self.BNext = QToolButton(self.Commande,"BNext") + self.BNext.setMinimumSize(QSize(60,0)) + self.BNext.setIconSet(QIconSet()) + + CommandeLayout.addWidget(self.BNext,1,2) + + self.textLabel6 = QLabel(self.Commande,"textLabel6") + self.textLabel6.setMinimumSize(QSize(40,0)) + + CommandeLayout.addWidget(self.textLabel6,1,0) + + self.textLabel4 = QLabel(self.Commande,"textLabel4") + + CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3) + + self.LEFiltre = QLineEdit(self.Commande,"LEFiltre") + self.LEFiltre.setMinimumSize(QSize(160,30)) + + CommandeLayout.addWidget(self.LEFiltre,1,1) + self.TWChoix.insertTab(self.Commande,QString.fromLatin1("")) + + self.TabPage = QWidget(self.TWChoix,"TabPage") + + self.groupBox1_2 = QGroupBox(self.TabPage,"groupBox1_2") + self.groupBox1_2.setGeometry(QRect(0,0,520,380)) + + self.textLabel3_2 = QLabel(self.groupBox1_2,"textLabel3_2") + self.textLabel3_2.setGeometry(QRect(10,230,320,31)) + + self.typeConcept = QLabel(self.groupBox1_2,"typeConcept") + self.typeConcept.setGeometry(QRect(360,230,130,31)) + + self.textLabel1_3_2_3 = QLabel(self.groupBox1_2,"textLabel1_3_2_3") + self.textLabel1_3_2_3.setGeometry(QRect(20,200,160,31)) + + self.textLabel1_3_3 = QLabel(self.groupBox1_2,"textLabel1_3_3") + self.textLabel1_3_3.setGeometry(QRect(20,50,150,31)) + + self.LENomConcept = QLineEdit(self.groupBox1_2,"LENomConcept") + self.LENomConcept.setGeometry(QRect(20,80,440,30)) + self.TWChoix.insertTab(self.TabPage,QString.fromLatin1("")) + + DMacroLayout.addMultiCellWidget(self.TWChoix,0,0,0,2) + + self.bSup = QPushButton(self,"bSup") + self.bSup.setMinimumSize(QSize(0,30)) + self.bSup.setAutoDefault(1) + + DMacroLayout.addWidget(self.bSup,2,0) + + self.bHelp = QPushButton(self,"bHelp") + self.bHelp.setMinimumSize(QSize(0,30)) + self.bHelp.setAutoDefault(1) + + DMacroLayout.addWidget(self.bHelp,2,2) + + self.bOk = QPushButton(self,"bOk") + self.bOk.setMinimumSize(QSize(0,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + + DMacroLayout.addWidget(self.bOk,2,1) + + self.languageChange() + + self.resize(QSize(521,499).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed) + self.connect(self.LENomConcept,SIGNAL("returnPressed()"),self.LENomConceptReturnPressed) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + + self.setTabOrder(self.LEFiltre,self.LENomConcept) + self.setTabOrder(self.LENomConcept,self.TWChoix) + self.setTabOrder(self.TWChoix,self.LBMCPermis) + self.setTabOrder(self.LBMCPermis,self.LBRegles) + self.setTabOrder(self.LBRegles,self.LBNouvCommande) + self.setTabOrder(self.LBNouvCommande,self.RBalpha) + self.setTabOrder(self.RBalpha,self.bSup) + self.setTabOrder(self.bSup,self.bHelp) + self.setTabOrder(self.bHelp,self.bOk) + + + def languageChange(self): + self.setCaption(self.__tr("DMacro")) + self.Commentaire.setText(QString.null) + self.textLabel1_2.setText(self.__trUtf8("\x3c\x68\x33\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x3c\x75\x3e\x3c\x62\x3e\x52\xc3\xa9\x67\x6c\x65\x73\x3c\x2f\x62\x3e\x3c\x2f\x75\x3e\x3c\x2f\x70\x3e\x3c\x2f\x68\x33\x3e")) + self.textLabel1.setText(self.__tr("

Mots Clefs Permis

")) + self.TWChoix.changeTab(self.MotClef,self.__tr("Ajouter Mot-Clef")) + self.buttonGroup1.setTitle(self.__tr("Affichage")) + self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65")) + self.RBGroupe.setText(self.__tr("par groupe")) + self.textLabel1_4.setText(self.__tr("Commandes :")) + self.BNext.setText(self.__tr("Suivant")) + QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence")) + self.textLabel6.setText(self.__tr("Filtre")) + self.textLabel4.setText(self.__trUtf8("\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65")) + self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande")) + self.groupBox1_2.setTitle(self.__tr("Concept")) + self.textLabel3_2.setText(self.__trUtf8("\x4c\x27\x6f\x70\xc3\xa9\x72\x61\x74\x65\x75\x72\x20\x63\x6f\x75\x72\x61\x6e\x74\x20\x72\x65\x74\x6f\x75\x72\x6e\x65\x20\x75\x6e\x20\x63\x6f\x6e\x63\x65\x70\x74\x20\x64\x65\x20\x74\x79\x70\x65\x20\x3a")) + self.typeConcept.setText(self.__tr("TypeDuConcept")) + self.textLabel1_3_2_3.setText(self.__tr("Type du concept :")) + self.textLabel1_3_3.setText(self.__tr("Nom du concept :")) + self.TWChoix.changeTab(self.TabPage,self.__tr("Nommer Concept")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(QKeySequence(self.__tr("Alt+S"))) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(QKeySequence(self.__tr("Alt+D"))) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(QKeySequence(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + + + def LBNouvCommandeClicked(self): + print "DMacro.LBNouvCommandeClicked(): Not implemented yet" + + def LEFiltreTextChanged(self): + print "DMacro.LEFiltreTextChanged(): Not implemented yet" + + def LEfiltreReturnPressed(self): + print "DMacro.LEfiltreReturnPressed(): Not implemented yet" + + def BSupPressed(self): + print "DMacro.BSupPressed(): Not implemented yet" + + def BOkPressed(self): + print "DMacro.BOkPressed(): Not implemented yet" + + def BuildTabCommand(self): + print "DMacro.BuildTabCommand(): Not implemented yet" + + def BNextPressed(self): + print "DMacro.BNextPressed(): Not implemented yet" + + def LENomConceptReturnPressed(self): + print "DMacro.LENomConceptReturnPressed(): Not implemented yet" + + def ViewDoc(self): + print "DMacro.ViewDoc(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DMacro",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DMacro",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desMacro.ui b/Ui/desMacro.ui new file mode 100644 index 00000000..d451544b --- /dev/null +++ b/Ui/desMacro.ui @@ -0,0 +1,475 @@ + +DMacro + + + DMacro + + + + 0 + 0 + 521 + 499 + + + + + 505 + 0 + + + + DMacro + + + + unnamed + + + + Commentaire + + + + + + + + TWChoix + + + + MotClef + + + Ajouter Mot-Clef + + + + unnamed + + + + LBMCPermis + + + + 0 + 0 + + + + + + LBRegles + + + + + textLabel1_2 + + + <h3><p align="center"><u><b>Régles</b></u></p></h3> + + + + + textLabel1 + + + + 0 + 0 + + + + <h3><p align="center"><u><b>Mots Clefs Permis</b></u></p></h3> + + + + + + + Commande + + + Nouvelle Commande + + + + unnamed + + + + LBNouvCommande + + + + + buttonGroup1 + + + Affichage + + + + RBalpha + + + + 20 + 20 + 120 + 20 + + + + alphabétique + + + true + + + + + RBGroupe + + + + 20 + 40 + 120 + 20 + + + + par groupe + + + + + + textLabel1_4 + + + <b><u>Commandes :</u></b> + + + + + BNext + + + + 60 + 0 + + + + Suivant + + + + + + affiche la prochaine occurence + + + + + textLabel6 + + + + 40 + 0 + + + + Filtre + + + + + textLabel4 + + + La commande choisie sera ajoutée APRES la commande courante + + + + + LEFiltre + + + + 160 + 30 + + + + + + + + TabPage + + + Nommer Concept + + + + groupBox1_2 + + + + 0 + 0 + 520 + 380 + + + + Concept + + + + textLabel3_2 + + + + 10 + 230 + 320 + 31 + + + + L'opérateur courant retourne un concept de type : + + + + + typeConcept + + + + 360 + 230 + 130 + 31 + + + + TypeDuConcept + + + + + textLabel1_3_2_3 + + + + 20 + 200 + 160 + 31 + + + + <u>Type du concept :</u> + + + + + textLabel1_3_3 + + + + 20 + 50 + 150 + 31 + + + + <u>Nom du concept :</u> + + + + + LENomConcept + + + + 20 + 80 + 440 + 30 + + + + + + + + + bSup + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bHelp + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + bOk + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + + + LBNouvCommande + doubleClicked(QListBoxItem*) + DMacro + LBNouvCommandeClicked() + + + LEFiltre + textChanged(const QString&) + DMacro + LEFiltreTextChanged() + + + LEFiltre + returnPressed() + DMacro + LEfiltreReturnPressed() + + + bSup + pressed() + DMacro + BSupPressed() + + + bOk + clicked() + DMacro + BOkPressed() + + + RBalpha + clicked() + DMacro + BuildTabCommand() + + + RBGroupe + clicked() + DMacro + BuildTabCommand() + + + BNext + clicked() + DMacro + BNextPressed() + + + LENomConcept + returnPressed() + DMacro + LENomConceptReturnPressed() + + + bHelp + clicked() + DMacro + ViewDoc() + + + + LEFiltre + LENomConcept + TWChoix + LBMCPermis + LBRegles + LBNouvCommande + RBalpha + bSup + bHelp + bOk + + + LBNouvCommandeClicked() + LEFiltreTextChanged() + LEfiltreReturnPressed() + BSupPressed() + BOkPressed() + BuildTabCommand() + BNextPressed() + LENomConceptReturnPressed() + ViewDoc() + + + diff --git a/Ui/desParam.py b/Ui/desParam.py new file mode 100644 index 00000000..bd886581 --- /dev/null +++ b/Ui/desParam.py @@ -0,0 +1,209 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desParam.ui' +# +# Created: ven mai 16 13:30:38 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DParam(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DParam") + + self.setMinimumSize(QSize(505,0)) + + DParamLayout = QGridLayout(self,1,1,11,6,"DParamLayout") + + self.Commentaire = QLabel(self,"Commentaire") + self.Commentaire.setFrameShape(QLabel.NoFrame) + self.Commentaire.setFrameShadow(QLabel.Plain) + + DParamLayout.addMultiCellWidget(self.Commentaire,1,1,0,2) + + self.TWChoix = QTabWidget(self,"TWChoix") + + self.Valeur_Parametre = QWidget(self.TWChoix,"Valeur_Parametre") + + self.textLabel2_2_2 = QLabel(self.Valeur_Parametre,"textLabel2_2_2") + self.textLabel2_2_2.setGeometry(QRect(80,11,231,89)) + + self.Commentaire_2 = QLabel(self.Valeur_Parametre,"Commentaire_2") + self.Commentaire_2.setGeometry(QRect(11,275,459,89)) + + self.lineEditNom = QLineEdit(self.Valeur_Parametre,"lineEditNom") + self.lineEditNom.setGeometry(QRect(80,106,231,31)) + self.lineEditNom.setMinimumSize(QSize(231,31)) + + self.textLabel2_2 = QLabel(self.Valeur_Parametre,"textLabel2_2") + self.textLabel2_2.setGeometry(QRect(11,106,63,31)) + + self.textLabel2 = QLabel(self.Valeur_Parametre,"textLabel2") + self.textLabel2.setGeometry(QRect(11,143,63,31)) + + self.Commentaire2 = QLabel(self.Valeur_Parametre,"Commentaire2") + self.Commentaire2.setGeometry(QRect(11,180,459,89)) + + self.lineEditVal = QLineEdit(self.Valeur_Parametre,"lineEditVal") + self.lineEditVal.setGeometry(QRect(80,143,231,31)) + self.lineEditVal.setMinimumSize(QSize(231,31)) + self.TWChoix.insertTab(self.Valeur_Parametre,QString("")) + + self.Commande = QWidget(self.TWChoix,"Commande") + CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout") + + self.textLabel6 = QLabel(self.Commande,"textLabel6") + self.textLabel6.setMinimumSize(QSize(40,0)) + + CommandeLayout.addWidget(self.textLabel6,1,0) + + self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande") + + CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3) + + self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1") + + self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe") + self.RBGroupe.setGeometry(QRect(20,40,101,20)) + + self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha") + self.RBalpha.setGeometry(QRect(20,20,120,20)) + self.RBalpha.setChecked(1) + + CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3) + + self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4") + + CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,1) + + self.textLabel4 = QLabel(self.Commande,"textLabel4") + + CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3) + + self.BNext = QToolButton(self.Commande,"BNext") + self.BNext.setMinimumSize(QSize(60,0)) + self.BNext.setIconSet(QIconSet()) + + CommandeLayout.addWidget(self.BNext,1,2) + + self.LEFiltre = QLineEdit(self.Commande,"LEFiltre") + self.LEFiltre.setMinimumSize(QSize(160,30)) + + CommandeLayout.addWidget(self.LEFiltre,1,1) + self.TWChoix.insertTab(self.Commande,QString("")) + + DParamLayout.addMultiCellWidget(self.TWChoix,0,0,0,2) + + self.bOk = QPushButton(self,"bOk") + self.bOk.setMinimumSize(QSize(0,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + + DParamLayout.addWidget(self.bOk,2,1) + + self.bSup = QPushButton(self,"bSup") + self.bSup.setMinimumSize(QSize(0,30)) + self.bSup.setAutoDefault(1) + + DParamLayout.addWidget(self.bSup,2,0) + + self.bHelp = QPushButton(self,"bHelp") + self.bHelp.setMinimumSize(QSize(0,30)) + self.bHelp.setAutoDefault(1) + + DParamLayout.addWidget(self.bHelp,2,2) + + self.languageChange() + + self.resize(QSize(505,483).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.BNext,SIGNAL("pressed()"),self.BNextPressed) + self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.BOkPressed) + + self.setTabOrder(self.LEFiltre,self.TWChoix) + self.setTabOrder(self.TWChoix,self.lineEditNom) + self.setTabOrder(self.lineEditNom,self.lineEditVal) + self.setTabOrder(self.lineEditVal,self.LBNouvCommande) + self.setTabOrder(self.LBNouvCommande,self.RBalpha) + self.setTabOrder(self.RBalpha,self.bOk) + self.setTabOrder(self.bOk,self.bSup) + self.setTabOrder(self.bSup,self.bHelp) + + + def languageChange(self): + self.setCaption(self.__tr("DComm")) + self.Commentaire.setText(QString.null) + self.textLabel2_2_2.setText(self.__tr("

Parametre

")) + self.Commentaire_2.setText(QString.null) + self.textLabel2_2.setText(self.__tr(" Nom: ")) + self.textLabel2.setText(self.__tr(" Valeur: ")) + self.Commentaire2.setText(self.__trUtf8("\x52\x65\x74\x6f\x75\x72\x20\x43\x68\x61\x72\x69\x6f\x74\x20\x64\x61\x6e\x73\x20\x75\x6e\x65\x20\x73\x6f\x6e\x65\x20\x64\x65\x20\x73\x61\x69\x73\x69\x65\x20\x70\x65\x72\x6d\x65\x74\x20\x64\x65\x20\x76\xc3\xa9\x72\x69\x66\x69\x65\x72\x20\x6c\x61\x20\x0a\x76\x61\x6c\x69\x64\x69\x74\xc3\xa9\x20\x64\x65\x20\x6c\x61\x20\x76\x61\x6c\x65\x75\x72\x20\x73\x61\x69\x73\x69\x65\x2e\x0a\x0a\x4c\x65\x73\x20\x6e\x6f\x75\x76\x65\x6c\x6c\x65\x73\x20\x76\x61\x6c\x65\x75\x72\x73\x20\x6e\x65\x20\x73\x65\x72\x6f\x6e\x74\x20\x70\x72\x69\x73\x65\x73\x20\x20\x65\x6e\x20\x63\x6f\x6d\x70\x74\x65\x20\x71\x75\x27\x61\x70\x72\xc3\xa8\x73\x20\x61\x76\x6f\x69\x72\x20\x0a\x61\x70\x70\x75\x79\xc3\xa9\x20\x73\x75\x72\x20\x20\x6c\x65\x20\x62\x6f\x75\x74\x6f\x6e\x20\x56\x61\x6c\x69\x64\x65\x72\x2e")) + self.TWChoix.changeTab(self.Valeur_Parametre,self.__tr("Valeur Parametre")) + self.textLabel6.setText(self.__tr("Filtre")) + self.buttonGroup1.setTitle(self.__tr("Affichage")) + self.RBGroupe.setText(self.__tr("par groupe")) + self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65")) + self.textLabel1_4.setText(self.__tr("Commandes :")) + self.textLabel4.setText(self.__trUtf8("\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65")) + self.BNext.setText(self.__tr("Suivant")) + QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence")) + self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + + + def LBNouvCommandeClicked(self): + print "DParam.LBNouvCommandeClicked(): Not implemented yet" + + def LEFiltreTextChanged(self): + print "DParam.LEFiltreTextChanged(): Not implemented yet" + + def LEfiltreReturnPressed(self): + print "DParam.LEfiltreReturnPressed(): Not implemented yet" + + def BSupPressed(self): + print "DParam.BSupPressed(): Not implemented yet" + + def LENomConceptReturnPressed(self): + print "DParam.LENomConceptReturnPressed(): Not implemented yet" + + def BOkPressed(self): + print "DParam.BOkPressed(): Not implemented yet" + + def BuildTabCommand(self): + print "DParam.BuildTabCommand(): Not implemented yet" + + def ViewDoc(self): + print "DParam.ViewDoc(): Not implemented yet" + + def BNextPressed(self): + print "DParam.BNextPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DParam",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DParam",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desParam.ui b/Ui/desParam.ui new file mode 100644 index 00000000..7aa81f89 --- /dev/null +++ b/Ui/desParam.ui @@ -0,0 +1,508 @@ + +DParam + + + DParam + + + + 0 + 0 + 505 + 483 + + + + + 505 + 0 + + + + DComm + + + + unnamed + + + + Commentaire + + + NoFrame + + + Plain + + + + + + + + TWChoix + + + + Valeur_Parametre + + + Valeur Parametre + + + + textLabel2_2_2 + + + + 80 + 11 + 231 + 89 + + + + <u><b><p align="center">Parametre</p></b></u> + + + + + Commentaire_2 + + + + 11 + 275 + 459 + 89 + + + + + + + + + lineEditNom + + + + 80 + 106 + 231 + 31 + + + + + 231 + 31 + + + + + + spacer1 + + + Horizontal + + + Expanding + + + + 153 + 20 + + + + + 317 + 111 + 153 + 20 + + + + + + spacer2 + + + Horizontal + + + Expanding + + + + 153 + 20 + + + + + 317 + 148 + 153 + 20 + + + + + + textLabel2_2 + + + + 11 + 106 + 63 + 31 + + + + <b> Nom: </b> + + + + + textLabel2 + + + + 11 + 143 + 63 + 31 + + + + <b> Valeur: </b> + + + + + Commentaire2 + + + + 11 + 180 + 459 + 89 + + + + Retour Chariot dans une sone de saisie permet de vérifier la +validité de la valeur saisie. + +Les nouvelles valeurs ne seront prises en compte qu'après avoir +appuyé sur le bouton Valider. + + + + + lineEditVal + + + + 80 + 143 + 231 + 31 + + + + + 231 + 31 + + + + + + + Commande + + + Nouvelle Commande + + + + unnamed + + + + textLabel6 + + + + 40 + 0 + + + + Filtre + + + + + LBNouvCommande + + + + + buttonGroup1 + + + Affichage + + + + RBGroupe + + + + 20 + 40 + 101 + 20 + + + + par groupe + + + + + RBalpha + + + + 20 + 20 + 120 + 20 + + + + alphabétique + + + true + + + + + + textLabel1_4 + + + <b><u>Commandes :</u></b> + + + + + textLabel4 + + + La commande choisie sera ajoutée APRES la commande courante + + + + + BNext + + + + 60 + 0 + + + + Suivant + + + + + + affiche la prochaine occurence + + + + + LEFiltre + + + + 160 + 30 + + + + + + + + + bOk + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bSup + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bHelp + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + LBNouvCommande + doubleClicked(QListBoxItem*) + DParam + LBNouvCommandeClicked() + + + LEFiltre + textChanged(const QString&) + DParam + LEFiltreTextChanged() + + + LEFiltre + returnPressed() + DParam + LEfiltreReturnPressed() + + + bSup + pressed() + DParam + BSupPressed() + + + bOk + clicked() + DParam + BOkPressed() + + + RBGroupe + clicked() + DParam + BuildTabCommand() + + + RBalpha + clicked() + DParam + BuildTabCommand() + + + bHelp + clicked() + DParam + ViewDoc() + + + BNext + pressed() + DParam + BNextPressed() + + + lineEditVal + returnPressed() + DParam + BOkPressed() + + + + LEFiltre + TWChoix + lineEditNom + lineEditVal + LBNouvCommande + RBalpha + bOk + bSup + bHelp + + + LBNouvCommandeClicked() + LEFiltreTextChanged() + LEfiltreReturnPressed() + BSupPressed() + LENomConceptReturnPressed() + BOkPressed() + BuildTabCommand() + ViewDoc() + BNextPressed() + + + diff --git a/Ui/desPlusieursBase.py b/Ui/desPlusieursBase.py new file mode 100644 index 00000000..dc7ca0f1 --- /dev/null +++ b/Ui/desPlusieursBase.py @@ -0,0 +1,293 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desPlusieursBase.ui' +# +# Created: lun mai 5 17:43:44 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + +image0_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x14\x00\x00\x00\x14" \ + "\x08\x06\x00\x00\x00\x8d\x89\x1d\x0d\x00\x00\x00" \ + "\x8d\x49\x44\x41\x54\x38\x8d\xb5\xd3\xdb\x0d\x80" \ + "\x20\x0c\x05\xd0\x5b\xe3\x3a\x8e\xe2\x4c\x86\x99" \ + "\x18\x85\x81\xea\x87\xc6\xc4\xd2\x56\x28\xd8\x84" \ + "\x0f\x5e\x27\x17\x50\x02\x63\x6a\x2d\x73\xb9\x1f" \ + "\xc0\xb5\x69\x15\x39\x17\xc3\xa0\x7e\xf0\xae\x9c" \ + "\xca\xab\xbf\x1f\x5b\xb5\xa6\xed\xc8\x0c\x02\x83" \ + "\x34\x20\x06\x02\x00\x81\x65\xc2\x38\x28\x30\x2f" \ + "\xa9\x77\xdd\x36\xc6\xa0\x67\xa7\x78\x14\x3f\xa1" \ + "\x85\xf9\x5b\xe6\x61\x76\xc2\x20\xa6\x83\x03\x58" \ + "\x0d\x0e\x62\x7a\xc2\x01\xcc\x04\xa3\xd8\x55\x2c" \ + "\x1a\xc0\x39\x95\xab\x27\xe7\x5a\x9a\x3e\x18\x47" \ + "\xdd\xef\x30\x72\xec\xef\x5f\xaf\xb3\x4e\xcb\x01" \ + "\x65\xf7\x82\x6b\x45\x7b\x00\x00\x00\x00\x49\x45" \ + "\x4e\x44\xae\x42\x60\x82" +image1_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x21\x00\x00\x00\x0e" \ + "\x08\x06\x00\x00\x00\xa1\x1e\x75\x8c\x00\x00\x00" \ + "\xc7\x49\x44\x41\x54\x38\x8d\xcd\x94\x59\x0e\xc3" \ + "\x20\x0c\x44\x71\xd5\x7b\xc7\x3d\xf9\xf4\x07\xd3" \ + "\x31\xb1\x59\xa2\x28\xaa\x25\x44\x48\xbc\x3c\xc6" \ + "\x81\x52\xfe\xc0\xe4\x42\x0c\xee\xce\xb9\x12\xe0" \ + "\x8a\x02\x39\x83\x88\x48\xf5\xdf\x02\xc9\x9c\x11" \ + "\xf8\x60\x04\x30\x01\x19\x05\x4a\xe8\x68\xc5\x6a" \ + "\xc2\x06\xc0\x6b\x4b\x10\x91\x11\xc8\x02\x87\x4f" \ + "\x3a\x52\xa5\x87\x75\x71\x23\x89\x7e\x40\x39\xc4" \ + "\x6b\x50\xd8\x86\x5b\x07\xf5\x40\x0a\x45\x00\x53" \ + "\x33\x08\x93\xcf\x86\x74\xa3\x00\x28\xd4\x92\xde" \ + "\xef\x04\x62\x6b\x55\x9d\xfe\x48\xac\x84\x2b\x1a" \ + "\x6d\xaa\xe6\x85\x01\x55\x03\x3b\x99\xc5\x00\x9f" \ + "\x70\xce\xda\x11\x1a\xab\x41\x3b\x6f\x6a\x70\xd1" \ + "\x18\xe0\x08\xe6\xfd\x8b\xc5\x1d\x5d\x00\xa0\xf6" \ + "\x14\x55\x6d\x1f\xf9\xb9\xbe\x49\x52\xaa\xbc\x37" \ + "\x21\xf8\xf8\xb6\xf6\x24\xc5\x57\xef\x89\x47\xaf" \ + "\xed\xf4\x8c\x5e\x60\xb8\xdf\xbe\xb8\x1d\x6d\xab" \ + "\x9a\xff\x99\x27\x00\x00\x00\x00\x49\x45\x4e\x44" \ + "\xae\x42\x60\x82" +image2_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x21\x00\x00\x00\x0e" \ + "\x08\x06\x00\x00\x00\xa1\x1e\x75\x8c\x00\x00\x00" \ + "\xcf\x49\x44\x41\x54\x38\x8d\xd5\x94\xdb\x0e\xc3" \ + "\x20\x0c\x43\xed\xfd\xf8\xd8\x97\xbb\x0f\x34\x5b" \ + "\x48\x08\x45\xd5\x1e\xb6\x48\x88\xf4\x12\xe7\x60" \ + "\x01\xc0\x0f\x04\x6f\xd6\xe9\x9b\xba\x77\x20\x04" \ + "\x80\x92\x4a\x10\x32\xc9\x2e\xfb\xd8\xc7\xd5\xca" \ + "\xbc\xc0\x25\x40\x00\x99\xe9\x57\x84\x95\x68\xfe" \ + "\x7f\x06\xc0\xde\xd1\xde\xb3\x2b\x4a\x1e\xc4\xea" \ + "\x82\x4b\x9e\x74\x09\x71\x65\xbd\x01\xf8\x55\x27" \ + "\xf7\x8a\x72\x01\xe0\xa3\x12\x9f\x34\x5a\x01\x7c" \ + "\x54\x3b\xaf\xdc\x98\x3d\x0f\x71\x09\xd1\x5a\x33" \ + "\x1b\x47\x1f\x47\x07\x2c\x17\x49\x4a\x82\x33\x8f" \ + "\x61\x78\x20\x3a\x88\x17\xe6\x73\x06\xb1\xf0\x8b" \ + "\x07\xba\x03\xe6\x02\xc9\xb8\x31\x07\x7e\x37\xe0" \ + "\x20\x9e\x67\xe3\x38\x67\x10\x97\x7b\x17\xde\x80" \ + "\xc1\x85\xad\x38\x69\x5a\x51\xd5\x22\xc8\x2c\xe7" \ + "\x79\x12\xe2\xfe\xd8\xbe\x83\x76\x20\x92\xf5\x2b" \ + "\x18\x20\xdd\x11\xbb\x10\xe5\x65\xb5\x3a\x5a\x3b" \ + "\xba\xff\x13\x07\x13\xd6\x6f\xa6\x98\x18\x57\x06" \ + "\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82" + +class DPlusBase(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + self.image0 = QPixmap() + self.image0.loadFromData(image0_data,"PNG") + self.image1 = QPixmap() + self.image1.loadFromData(image1_data,"PNG") + self.image2 = QPixmap() + self.image2.loadFromData(image2_data,"PNG") + if not name: + self.setName("DPlusBase") + + self.setMinimumSize(QSize(350,0)) + self.setIcon(self.image0) + + DPlusBaseLayout = QGridLayout(self,1,1,11,6,"DPlusBaseLayout") + + self.tabuniqueinto = QTabWidget(self,"tabuniqueinto") + + self.Widget8 = QWidget(self.tabuniqueinto,"Widget8") + Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout") + + self.textLabel1 = QLabel(self.Widget8,"textLabel1") + + Widget8Layout.addWidget(self.textLabel1,0,0) + + self.LBValeurs = QListBox(self.Widget8,"LBValeurs") + self.LBValeurs.setMinimumSize(QSize(200,0)) + + Widget8Layout.addMultiCellWidget(self.LBValeurs,1,9,0,0) + spacer4 = QSpacerItem(21,231,QSizePolicy.Minimum,QSizePolicy.Expanding) + Widget8Layout.addMultiCell(spacer4,5,9,1,2) + spacer3_3 = QSpacerItem(31,30,QSizePolicy.Minimum,QSizePolicy.Expanding) + Widget8Layout.addMultiCell(spacer3_3,0,0,1,2) + + self.BAjout1Val = QToolButton(self.Widget8,"BAjout1Val") + self.BAjout1Val.setSizePolicy(QSizePolicy(0,0,0,0,self.BAjout1Val.sizePolicy().hasHeightForWidth())) + self.BAjout1Val.setMinimumSize(QSize(40,30)) + self.BAjout1Val.setIconSet(QIconSet(self.image1)) + + Widget8Layout.addMultiCellWidget(self.BAjout1Val,2,2,1,2) + spacer5 = QSpacerItem(150,20,QSizePolicy.Expanding,QSizePolicy.Minimum) + Widget8Layout.addMultiCell(spacer5,8,8,2,4) + + layout7 = QVBoxLayout(None,0,6,"layout7") + + self.bParam = QPushButton(self.Widget8,"bParam") + self.bParam.setMinimumSize(QSize(0,30)) + self.bParam.setAutoDefault(1) + layout7.addWidget(self.bParam) + + self.bImport = QPushButton(self.Widget8,"bImport") + self.bImport.setMinimumSize(QSize(0,30)) + self.bImport.setAutoDefault(1) + layout7.addWidget(self.bImport) + + Widget8Layout.addMultiCellLayout(layout7,7,8,5,5) + spacer3 = QSpacerItem(31,50,QSizePolicy.Minimum,QSizePolicy.Expanding) + Widget8Layout.addItem(spacer3,6,5) + spacer3_2 = QSpacerItem(31,50,QSizePolicy.Minimum,QSizePolicy.Expanding) + Widget8Layout.addItem(spacer3_2,9,5) + + self.BSalome = QToolButton(self.Widget8,"BSalome") + self.BSalome.setSizePolicy(QSizePolicy(0,0,0,0,self.BSalome.sizePolicy().hasHeightForWidth())) + self.BSalome.setMinimumSize(QSize(40,30)) + self.BSalome.setIconSet(QIconSet(self.image0)) + + Widget8Layout.addWidget(self.BSalome,4,3) + + self.BView2D = QPushButton(self.Widget8,"BView2D") + self.BView2D.setMinimumSize(QSize(120,30)) + + Widget8Layout.addMultiCellWidget(self.BView2D,4,4,4,5) + + layout12 = QHBoxLayout(None,0,6,"layout12") + + self.textLabel1_2 = QLabel(self.Widget8,"textLabel1_2") + layout12.addWidget(self.textLabel1_2) + spacer6 = QSpacerItem(111,20,QSizePolicy.Expanding,QSizePolicy.Minimum) + layout12.addItem(spacer6) + + Widget8Layout.addMultiCellLayout(layout12,0,1,3,5) + + self.LEValeur = QLineEdit(self.Widget8,"LEValeur") + self.LEValeur.setSizePolicy(QSizePolicy(1,1,0,0,self.LEValeur.sizePolicy().hasHeightForWidth())) + self.LEValeur.setMinimumSize(QSize(220,30)) + + Widget8Layout.addMultiCellWidget(self.LEValeur,2,3,3,5) + + self.BSup1Val = QToolButton(self.Widget8,"BSup1Val") + self.BSup1Val.setSizePolicy(QSizePolicy(0,0,0,0,self.BSup1Val.sizePolicy().hasHeightForWidth())) + self.BSup1Val.setMinimumSize(QSize(40,30)) + self.BSup1Val.setIconSet(QIconSet(self.image2)) + + Widget8Layout.addMultiCellWidget(self.BSup1Val,3,4,1,2) + + self.Commentaire = QLabel(self.Widget8,"Commentaire") + self.Commentaire.setMinimumSize(QSize(0,60)) + + Widget8Layout.addMultiCellWidget(self.Commentaire,5,5,3,5) + + layout6 = QHBoxLayout(None,0,6,"layout6") + + self.bSup = QPushButton(self.Widget8,"bSup") + self.bSup.setMinimumSize(QSize(0,30)) + self.bSup.setAutoDefault(1) + layout6.addWidget(self.bSup) + + self.bOk = QPushButton(self.Widget8,"bOk") + self.bOk.setMinimumSize(QSize(0,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + layout6.addWidget(self.bOk) + + self.bHelp = QPushButton(self.Widget8,"bHelp") + self.bHelp.setMinimumSize(QSize(0,30)) + self.bHelp.setAutoDefault(1) + layout6.addWidget(self.bHelp) + + Widget8Layout.addMultiCellLayout(layout6,10,10,0,5) + self.tabuniqueinto.insertTab(self.Widget8,QString("")) + + DPlusBaseLayout.addWidget(self.tabuniqueinto,0,0) + + self.languageChange() + + self.resize(QSize(552,480).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPourListePressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + self.connect(self.bParam,SIGNAL("clicked()"),self.BParametresPressed) + self.connect(self.bImport,SIGNAL("clicked()"),self.BImportPressed) + self.connect(self.BAjout1Val,SIGNAL("clicked()"),self.Ajout1Valeur) + self.connect(self.BSup1Val,SIGNAL("clicked()"),self.Sup1Valeur) + self.connect(self.LEValeur,SIGNAL("returnPressed()"),self.LEValeurPressed) + self.connect(self.BSalome,SIGNAL("clicked()"),self.BSalomePressed) + self.connect(self.BView2D,SIGNAL("clicked()"),self.BView2DPressed) + + self.setTabOrder(self.LEValeur,self.tabuniqueinto) + self.setTabOrder(self.tabuniqueinto,self.bSup) + self.setTabOrder(self.bSup,self.bOk) + self.setTabOrder(self.bOk,self.bHelp) + self.setTabOrder(self.bHelp,self.bParam) + self.setTabOrder(self.bParam,self.bImport) + self.setTabOrder(self.bImport,self.LBValeurs) + self.setTabOrder(self.LBValeurs,self.BView2D) + + + def languageChange(self): + self.setCaption(self.__tr("DUnIn")) + self.textLabel1.setText(self.__tr("Valeur(s) actuelle(s)")) + self.BAjout1Val.setText(QString.null) + QToolTip.add(self.BAjout1Val,self.__trUtf8("\x61\x6a\x6f\x75\x74\x65\x20\x6c\x61\x20\x76\x61\x6c\x65\x75\x72\x20\x73\x61\x69\x73\x69\x65\x20\x73\x6f\x75\x73\x20\x6c\x20\x6f\x63\x63\x75\x72\x65\x6e\x63\x65\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x6e\xc3\xa9\x65\x20\x28\x65\x6e\x20\x66\x69\x6e\x20\x64\x65\x20\x6c\x69\x73\x74\x65\x20\x73\x69\x20\x69\x6c\x20\x6e\x20\x79\x20\x61\x20\x70\x61\x73\x20\x64\x65\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x29")) + self.bParam.setText(self.__tr("&Parametres")) + self.bParam.setAccel(self.__tr("Alt+P")) + QToolTip.add(self.bParam,self.__tr("suppression du mot clef")) + self.bImport.setText(self.__tr("&Importer")) + self.bImport.setAccel(self.__tr("Alt+I")) + QToolTip.add(self.bImport,self.__tr("suppression du mot clef")) + self.BSalome.setText(QString.null) + QToolTip.add(self.BSalome,self.__trUtf8("\x61\x6a\x6f\x75\x74\x65\x20\x6c\x61\x20\x76\x61\x6c\x65\x75\x72\x20\x73\x61\x69\x73\x69\x65\x20\x73\x6f\x75\x73\x20\x6c\x20\x6f\x63\x63\x75\x72\x65\x6e\x63\x65\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x6e\xc3\xa9\x65\x20\x28\x65\x6e\x20\x66\x69\x6e\x20\x64\x65\x20\x6c\x69\x73\x74\x65\x20\x73\x69\x20\x69\x6c\x20\x6e\x20\x79\x20\x61\x20\x70\x61\x73\x20\x64\x65\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x29")) + self.BView2D.setText(self.__tr("Visualiser")) + self.textLabel1_2.setText(self.__tr("Valeur")) + self.BSup1Val.setText(QString.null) + QToolTip.add(self.BSup1Val,self.__tr("enleve l occurence selectionnee")) + self.Commentaire.setText(QString.null) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur")) + + + def BSupPressed(self): + print "DPlusBase.BSupPressed(): Not implemented yet" + + def ViewDoc(self): + print "DPlusBase.ViewDoc(): Not implemented yet" + + def BOkPourListePressed(self): + print "DPlusBase.BOkPourListePressed(): Not implemented yet" + + def BParametresPressed(self): + print "DPlusBase.BParametresPressed(): Not implemented yet" + + def LEValeurPressed(self): + print "DPlusBase.LEValeurPressed(): Not implemented yet" + + def Ajout1Valeur(self): + print "DPlusBase.Ajout1Valeur(): Not implemented yet" + + def Sup1Valeur(self): + print "DPlusBase.Sup1Valeur(): Not implemented yet" + + def BImportPressed(self): + print "DPlusBase.BImportPressed(): Not implemented yet" + + def BSalomePressed(self): + print "DPlusBase.BSalomePressed(): Not implemented yet" + + def BView2DPressed(self): + print "DPlusBase.BView2DPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DPlusBase",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DPlusBase",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desPlusieursBase.ui b/Ui/desPlusieursBase.ui new file mode 100644 index 00000000..a6a4eb0c --- /dev/null +++ b/Ui/desPlusieursBase.ui @@ -0,0 +1,556 @@ + +DPlusBase + + + DPlusBase + + + + 0 + 0 + 552 + 480 + + + + + 350 + 0 + + + + DUnIn + + + image0 + + + + unnamed + + + + tabuniqueinto + + + + Widget8 + + + Saisir Valeur + + + + unnamed + + + + textLabel1 + + + <u><font size="+1">Valeur(s) actuelle(s)</font></u> + + + + + LBValeurs + + + + 200 + 0 + + + + + + spacer4 + + + Vertical + + + Expanding + + + + 21 + 231 + + + + + + spacer3_3 + + + Vertical + + + Expanding + + + + 31 + 30 + + + + + + BAjout1Val + + + + 0 + 0 + 0 + 0 + + + + + 40 + 30 + + + + + + + image1 + + + ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection) + + + + + spacer5 + + + Horizontal + + + Expanding + + + + 150 + 20 + + + + + + layout7 + + + + unnamed + + + + bParam + + + + 0 + 30 + + + + &Parametres + + + Alt+P + + + true + + + suppression du mot clef + + + + + bImport + + + + 0 + 30 + + + + &Importer + + + Alt+I + + + true + + + suppression du mot clef + + + + + + + spacer3 + + + Vertical + + + Expanding + + + + 31 + 50 + + + + + + spacer3_2 + + + Vertical + + + Expanding + + + + 31 + 50 + + + + + + BSalome + + + + 0 + 0 + 0 + 0 + + + + + 40 + 30 + + + + + + + image0 + + + ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection) + + + + + BView2D + + + + 120 + 30 + + + + Visualiser + + + + + layout12 + + + + unnamed + + + + textLabel1_2 + + + <font size="+1">Valeur</font> + + + + + spacer6 + + + Horizontal + + + Expanding + + + + 111 + 20 + + + + + + + + LEValeur + + + + 1 + 1 + 0 + 0 + + + + + 220 + 30 + + + + + + BSup1Val + + + + 0 + 0 + 0 + 0 + + + + + 40 + 30 + + + + + + + image2 + + + enleve l occurence selectionnee + + + + + Commentaire + + + + 0 + 60 + + + + + + + + + layout6 + + + + unnamed + + + + bSup + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bOk + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bHelp + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + + + + + + 89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000008d49444154388db5d3db0d80200c05d05be33a8ee24c8699188581ea87c6c4d25628d8840f5e27175002636a2d73b91fc0b569153917c3a07ef0ae9ccaabbf1f5bb5a6edc80c028334200602008165c23828302fa977dd36c6a067a778143fa185f95be66176c220a68303580d0e627ac201cc04a3d8552c1ac03995ab27e75a9a3e1847ddef3072ecef5fafb34ecb0165f7826b457b0000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d49484452000000210000000e0806000000a11e758c000000c749444154388dcd94590ec3200c4471d57bc73df9f407d331b159a228aa254448bc3cc68152fec0e4420ceeceb912e08a0239838848f5df02c99c11f86004300119054ae868c56ac206c06b4b109111c802874f3a52a587757123897e4039c46b50d8865b07f5400a450053330893cf8674a30028d492deef04626b559dfe48ac842b1a6daae6850155033b99c5009f70ceda111aab413b6f6a70d118e008e6fd8bc51d5d00a0f614556d1ff9b9be4952aabc3721f8f8b6f624c557ef8947afedf48c5e60b8dfbeb81d6dab9aff99270000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d49484452000000210000000e0806000000a11e758c000000cf49444154388dd594db0ec3200c43edfdf8d897bb0f345b480845d51eb64888f412e76001c00f046fd6e99bba77200480924a1032c92efbd8c7d5cabcc025400099e957849568fe7f06c0ded1deb32b4a1ec4ea824b9e74097165bd01f85527f78a7201e0a3129f345a017c543bafdc983d0f7109d15a331b471f47072c17494a82338f6178203a8817e67306b1f08b07ba03e602c9b831077e37e0209e67e3386710977b17de80c185ad38695a51d522c82ce77912e2fed8be83762092f52b1820dd11bb10e565b53a5a3bbaff130713d66fa6981857060000000049454e44ae426082 + + + + + bHelp + clicked() + DPlusBase + ViewDoc() + + + bOk + clicked() + DPlusBase + BOkPourListePressed() + + + bSup + clicked() + DPlusBase + BSupPressed() + + + bParam + clicked() + DPlusBase + BParametresPressed() + + + bImport + clicked() + DPlusBase + BImportPressed() + + + BAjout1Val + clicked() + DPlusBase + Ajout1Valeur() + + + BSup1Val + clicked() + DPlusBase + Sup1Valeur() + + + LEValeur + returnPressed() + DPlusBase + LEValeurPressed() + + + BSalome + clicked() + DPlusBase + BSalomePressed() + + + BView2D + clicked() + DPlusBase + BView2DPressed() + + + + LEValeur + tabuniqueinto + bSup + bOk + bHelp + bParam + bImport + LBValeurs + BView2D + + + BSupPressed() + ViewDoc() + BOkPourListePressed() + BParametresPressed() + LEValeurPressed() + Ajout1Valeur() + Sup1Valeur() + BImportPressed() + BSalomePressed() + BView2DPressed() + + + diff --git a/Ui/desPlusieursInto.py b/Ui/desPlusieursInto.py new file mode 100644 index 00000000..224aa87c --- /dev/null +++ b/Ui/desPlusieursInto.py @@ -0,0 +1,207 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desPlusieursInto.ui' +# +# Created: ven avr 4 11:27:09 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + +image0_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x21\x00\x00\x00\x0e" \ + "\x08\x06\x00\x00\x00\xa1\x1e\x75\x8c\x00\x00\x00" \ + "\xcf\x49\x44\x41\x54\x38\x8d\xd5\x94\xdb\x0e\xc3" \ + "\x20\x0c\x43\xed\xfd\xf8\xd8\x97\xbb\x0f\x34\x5b" \ + "\x48\x08\x45\xd5\x1e\xb6\x48\x88\xf4\x12\xe7\x60" \ + "\x01\xc0\x0f\x04\x6f\xd6\xe9\x9b\xba\x77\x20\x04" \ + "\x80\x92\x4a\x10\x32\xc9\x2e\xfb\xd8\xc7\xd5\xca" \ + "\xbc\xc0\x25\x40\x00\x99\xe9\x57\x84\x95\x68\xfe" \ + "\x7f\x06\xc0\xde\xd1\xde\xb3\x2b\x4a\x1e\xc4\xea" \ + "\x82\x4b\x9e\x74\x09\x71\x65\xbd\x01\xf8\x55\x27" \ + "\xf7\x8a\x72\x01\xe0\xa3\x12\x9f\x34\x5a\x01\x7c" \ + "\x54\x3b\xaf\xdc\x98\x3d\x0f\x71\x09\xd1\x5a\x33" \ + "\x1b\x47\x1f\x47\x07\x2c\x17\x49\x4a\x82\x33\x8f" \ + "\x61\x78\x20\x3a\x88\x17\xe6\x73\x06\xb1\xf0\x8b" \ + "\x07\xba\x03\xe6\x02\xc9\xb8\x31\x07\x7e\x37\xe0" \ + "\x20\x9e\x67\xe3\x38\x67\x10\x97\x7b\x17\xde\x80" \ + "\xc1\x85\xad\x38\x69\x5a\x51\xd5\x22\xc8\x2c\xe7" \ + "\x79\x12\xe2\xfe\xd8\xbe\x83\x76\x20\x92\xf5\x2b" \ + "\x18\x20\xdd\x11\xbb\x10\xe5\x65\xb5\x3a\x5a\x3b" \ + "\xba\xff\x13\x07\x13\xd6\x6f\xa6\x98\x18\x57\x06" \ + "\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82" +image1_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x21\x00\x00\x00\x0e" \ + "\x08\x06\x00\x00\x00\xa1\x1e\x75\x8c\x00\x00\x00" \ + "\xc7\x49\x44\x41\x54\x38\x8d\xcd\x94\x59\x0e\xc3" \ + "\x20\x0c\x44\x71\xd5\x7b\xc7\x3d\xf9\xf4\x07\xd3" \ + "\x31\xb1\x59\xa2\x28\xaa\x25\x44\x48\xbc\x3c\xc6" \ + "\x81\x52\xfe\xc0\xe4\x42\x0c\xee\xce\xb9\x12\xe0" \ + "\x8a\x02\x39\x83\x88\x48\xf5\xdf\x02\xc9\x9c\x11" \ + "\xf8\x60\x04\x30\x01\x19\x05\x4a\xe8\x68\xc5\x6a" \ + "\xc2\x06\xc0\x6b\x4b\x10\x91\x11\xc8\x02\x87\x4f" \ + "\x3a\x52\xa5\x87\x75\x71\x23\x89\x7e\x40\x39\xc4" \ + "\x6b\x50\xd8\x86\x5b\x07\xf5\x40\x0a\x45\x00\x53" \ + "\x33\x08\x93\xcf\x86\x74\xa3\x00\x28\xd4\x92\xde" \ + "\xef\x04\x62\x6b\x55\x9d\xfe\x48\xac\x84\x2b\x1a" \ + "\x6d\xaa\xe6\x85\x01\x55\x03\x3b\x99\xc5\x00\x9f" \ + "\x70\xce\xda\x11\x1a\xab\x41\x3b\x6f\x6a\x70\xd1" \ + "\x18\xe0\x08\xe6\xfd\x8b\xc5\x1d\x5d\x00\xa0\xf6" \ + "\x14\x55\x6d\x1f\xf9\xb9\xbe\x49\x52\xaa\xbc\x37" \ + "\x21\xf8\xf8\xb6\xf6\x24\xc5\x57\xef\x89\x47\xaf" \ + "\xed\xf4\x8c\x5e\x60\xb8\xdf\xbe\xb8\x1d\x6d\xab" \ + "\x9a\xff\x99\x27\x00\x00\x00\x00\x49\x45\x4e\x44" \ + "\xae\x42\x60\x82" + +class DPlusInto(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + self.image0 = QPixmap() + self.image0.loadFromData(image0_data,"PNG") + self.image1 = QPixmap() + self.image1.loadFromData(image1_data,"PNG") + if not name: + self.setName("DPlusInto") + + self.setMinimumSize(QSize(350,0)) + + DPlusIntoLayout = QGridLayout(self,1,1,11,6,"DPlusIntoLayout") + + self.tabuniqueinto = QTabWidget(self,"tabuniqueinto") + + self.Widget8 = QWidget(self.tabuniqueinto,"Widget8") + Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout") + + self.textLabel1 = QLabel(self.Widget8,"textLabel1") + + Widget8Layout.addMultiCellWidget(self.textLabel1,0,0,0,1) + + self.bSup = QPushButton(self.Widget8,"bSup") + self.bSup.setMinimumSize(QSize(130,30)) + self.bSup.setAutoDefault(1) + + Widget8Layout.addWidget(self.bSup,3,0) + + self.bOk = QPushButton(self.Widget8,"bOk") + self.bOk.setMinimumSize(QSize(130,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + + Widget8Layout.addMultiCellWidget(self.bOk,3,3,1,2) + + self.bHelp = QPushButton(self.Widget8,"bHelp") + self.bHelp.setSizePolicy(QSizePolicy(1,0,150,0,self.bHelp.sizePolicy().hasHeightForWidth())) + self.bHelp.setMinimumSize(QSize(130,30)) + self.bHelp.setAutoDefault(1) + + Widget8Layout.addWidget(self.bHelp,3,3) + + self.Commentaire = QLabel(self.Widget8,"Commentaire") + self.Commentaire.setMinimumSize(QSize(0,40)) + + Widget8Layout.addMultiCellWidget(self.Commentaire,2,2,0,3) + + layout8 = QHBoxLayout(None,0,6,"layout8") + + self.LBValeurs = QListBox(self.Widget8,"LBValeurs") + layout8.addWidget(self.LBValeurs) + + layout5 = QVBoxLayout(None,0,6,"layout5") + spacer2 = QSpacerItem(21,44,QSizePolicy.Minimum,QSizePolicy.Expanding) + layout5.addItem(spacer2) + + layout2 = QVBoxLayout(None,0,6,"layout2") + + self.BSup1Val = QToolButton(self.Widget8,"BSup1Val") + self.BSup1Val.setMinimumSize(QSize(40,31)) + self.BSup1Val.setMaximumSize(QSize(40,31)) + self.BSup1Val.setIconSet(QIconSet(self.image0)) + layout2.addWidget(self.BSup1Val) + + self.BAjout1Val = QToolButton(self.Widget8,"BAjout1Val") + self.BAjout1Val.setMinimumSize(QSize(40,31)) + self.BAjout1Val.setMaximumSize(QSize(40,31)) + self.BAjout1Val.setIconSet(QIconSet(self.image1)) + layout2.addWidget(self.BAjout1Val) + spacer3 = QSpacerItem(21,176,QSizePolicy.Minimum,QSizePolicy.Expanding) + layout2.addItem(spacer3) + layout5.addLayout(layout2) + layout8.addLayout(layout5) + + self.listBoxVal = QListBox(self.Widget8,"listBoxVal") + layout8.addWidget(self.listBoxVal) + + Widget8Layout.addMultiCellLayout(layout8,1,1,0,3) + + self.textLabel1_2 = QLabel(self.Widget8,"textLabel1_2") + + Widget8Layout.addMultiCellWidget(self.textLabel1_2,0,0,2,3) + self.tabuniqueinto.insertTab(self.Widget8,QString("")) + + DPlusIntoLayout.addWidget(self.tabuniqueinto,0,0) + + self.languageChange() + + self.resize(QSize(482,480).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPourListePressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + self.connect(self.LBValeurs,SIGNAL("doubleClicked(QListBoxItem*)"),self.Sup1Valeur) + self.connect(self.BAjout1Val,SIGNAL("clicked()"),self.Ajout1Valeur) + self.connect(self.BSup1Val,SIGNAL("clicked()"),self.Sup1Valeur) + + self.setTabOrder(self.listBoxVal,self.tabuniqueinto) + self.setTabOrder(self.tabuniqueinto,self.bSup) + self.setTabOrder(self.bSup,self.bOk) + self.setTabOrder(self.bOk,self.bHelp) + self.setTabOrder(self.bHelp,self.LBValeurs) + + + def languageChange(self): + self.setCaption(self.__tr("DUnIn")) + self.textLabel1.setText(self.__tr("Valeur(s) actuelle(s)")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.Commentaire.setText(QString.null) + self.BSup1Val.setText(QString.null) + QToolTip.add(self.BSup1Val,self.__tr("enleve l occurence selectionnee")) + self.BAjout1Val.setText(QString.null) + QToolTip.add(self.BAjout1Val,self.__trUtf8("\x61\x6a\x6f\x75\x74\x65\x20\x6c\x61\x20\x76\x61\x6c\x65\x75\x72\x20\x73\x61\x69\x73\x69\x65\x20\x73\x6f\x75\x73\x20\x6c\x20\x6f\x63\x63\x75\x72\x65\x6e\x63\x65\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x6e\xc3\xa9\x65\x20\x28\x65\x6e\x20\x66\x69\x6e\x20\x64\x65\x20\x6c\x69\x73\x74\x65\x20\x73\x69\x20\x69\x6c\x20\x6e\x20\x79\x20\x61\x20\x70\x61\x73\x20\x64\x65\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x29")) + self.textLabel1_2.setText(self.__tr("Valeur(s) possibles(s)")) + self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur")) + + + def BSupPressed(self): + print "DPlusInto.BSupPressed(): Not implemented yet" + + def ViewDoc(self): + print "DPlusInto.ViewDoc(): Not implemented yet" + + def BOkPourListePressed(self): + print "DPlusInto.BOkPourListePressed(): Not implemented yet" + + def Ajout1Valeur(self): + print "DPlusInto.Ajout1Valeur(): Not implemented yet" + + def Sup1Valeur(self): + print "DPlusInto.Sup1Valeur(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DPlusInto",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DPlusInto",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desPlusieursInto.ui b/Ui/desPlusieursInto.ui new file mode 100644 index 00000000..f53e25e1 --- /dev/null +++ b/Ui/desPlusieursInto.ui @@ -0,0 +1,346 @@ + +DPlusInto + + + DPlusInto + + + + 0 + 0 + 482 + 480 + + + + + 350 + 0 + + + + DUnIn + + + + unnamed + + + + tabuniqueinto + + + + Widget8 + + + Saisir Valeur + + + + unnamed + + + + textLabel1 + + + <u><font size="+1">Valeur(s) actuelle(s)</font></u> + + + + + bSup + + + + 130 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bOk + + + + 130 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bHelp + + + + 1 + 0 + 150 + 0 + + + + + 130 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + Commentaire + + + + 0 + 40 + + + + + + + + + layout8 + + + + unnamed + + + + LBValeurs + + + + + layout5 + + + + unnamed + + + + spacer2 + + + Vertical + + + Expanding + + + + 21 + 44 + + + + + + layout2 + + + + unnamed + + + + BSup1Val + + + + 40 + 31 + + + + + 40 + 31 + + + + + + + image0 + + + enleve l occurence selectionnee + + + + + BAjout1Val + + + + 40 + 31 + + + + + 40 + 31 + + + + + + + image1 + + + ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection) + + + + + spacer3 + + + Vertical + + + Expanding + + + + 21 + 176 + + + + + + + + + + listBoxVal + + + + + + + textLabel1_2 + + + <u><font size="+1">Valeur(s) possibles(s)</font></u> + + + + + + + + + + 89504e470d0a1a0a0000000d49484452000000210000000e0806000000a11e758c000000cf49444154388dd594db0ec3200c43edfdf8d897bb0f345b480845d51eb64888f412e76001c00f046fd6e99bba77200480924a1032c92efbd8c7d5cabcc025400099e957849568fe7f06c0ded1deb32b4a1ec4ea824b9e74097165bd01f85527f78a7201e0a3129f345a017c543bafdc983d0f7109d15a331b471f47072c17494a82338f6178203a8817e67306b1f08b07ba03e602c9b831077e37e0209e67e3386710977b17de80c185ad38695a51d522c82ce77912e2fed8be83762092f52b1820dd11bb10e565b53a5a3bbaff130713d66fa6981857060000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d49484452000000210000000e0806000000a11e758c000000c749444154388dcd94590ec3200c4471d57bc73df9f407d331b159a228aa254448bc3cc68152fec0e4420ceeceb912e08a0239838848f5df02c99c11f86004300119054ae868c56ac206c06b4b109111c802874f3a52a587757123897e4039c46b50d8865b07f5400a450053330893cf8674a30028d492deef04626b559dfe48ac842b1a6daae6850155033b99c5009f70ceda111aab413b6f6a70d118e008e6fd8bc51d5d00a0f614556d1ff9b9be4952aabc3721f8f8b6f624c557ef8947afedf48c5e60b8dfbeb81d6dab9aff99270000000049454e44ae426082 + + + + + bHelp + clicked() + DPlusInto + ViewDoc() + + + bOk + clicked() + DPlusInto + BOkPourListePressed() + + + bSup + clicked() + DPlusInto + BSupPressed() + + + LBValeurs + doubleClicked(QListBoxItem*) + DPlusInto + Sup1Valeur() + + + BAjout1Val + clicked() + DPlusInto + Ajout1Valeur() + + + BSup1Val + clicked() + DPlusInto + Sup1Valeur() + + + + listBoxVal + tabuniqueinto + bSup + bOk + bHelp + LBValeurs + + + BSupPressed() + ViewDoc() + BOkPourListePressed() + Ajout1Valeur() + Sup1Valeur() + + + diff --git a/Ui/desPoursuite.py b/Ui/desPoursuite.py new file mode 100644 index 00000000..2db030cc --- /dev/null +++ b/Ui/desPoursuite.py @@ -0,0 +1,236 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desPoursuite.ui' +# +# Created: ven mai 16 13:30:38 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DPour(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DPour") + + self.setMinimumSize(QSize(505,0)) + + DPourLayout = QGridLayout(self,1,1,11,6,"DPourLayout") + + self.Commentaire = QLabel(self,"Commentaire") + + DPourLayout.addMultiCellWidget(self.Commentaire,1,1,0,2) + + self.TWChoix = QTabWidget(self,"TWChoix") + + self.MotClef = QWidget(self.TWChoix,"MotClef") + MotClefLayout = QGridLayout(self.MotClef,1,1,11,6,"MotClefLayout") + + self.textLabel1_2 = QLabel(self.MotClef,"textLabel1_2") + + MotClefLayout.addWidget(self.textLabel1_2,0,1) + + self.LBMCPermis = QListBox(self.MotClef,"LBMCPermis") + self.LBMCPermis.setMinimumSize(QSize(0,0)) + + MotClefLayout.addWidget(self.LBMCPermis,1,0) + + self.LBRegles = QListBox(self.MotClef,"LBRegles") + + MotClefLayout.addWidget(self.LBRegles,1,1) + + self.textLabel1 = QLabel(self.MotClef,"textLabel1") + self.textLabel1.setMinimumSize(QSize(0,0)) + + MotClefLayout.addWidget(self.textLabel1,0,0) + self.TWChoix.insertTab(self.MotClef,QString("")) + + self.Commande = QWidget(self.TWChoix,"Commande") + CommandeLayout = QGridLayout(self.Commande,1,1,11,6,"CommandeLayout") + + self.LBNouvCommande = QListBox(self.Commande,"LBNouvCommande") + + CommandeLayout.addMultiCellWidget(self.LBNouvCommande,2,2,0,3) + + self.textLabel1_4 = QLabel(self.Commande,"textLabel1_4") + + CommandeLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,1) + + self.buttonGroup1 = QButtonGroup(self.Commande,"buttonGroup1") + + self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe") + self.RBGroupe.setGeometry(QRect(20,40,101,20)) + + self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha") + self.RBalpha.setGeometry(QRect(20,20,120,20)) + self.RBalpha.setChecked(1) + + CommandeLayout.addMultiCellWidget(self.buttonGroup1,0,1,3,3) + + self.textLabel4 = QLabel(self.Commande,"textLabel4") + + CommandeLayout.addMultiCellWidget(self.textLabel4,3,3,0,3) + + self.BNext = QToolButton(self.Commande,"BNext") + self.BNext.setMinimumSize(QSize(60,0)) + self.BNext.setIconSet(QIconSet()) + + CommandeLayout.addWidget(self.BNext,1,2) + + self.textLabel6 = QLabel(self.Commande,"textLabel6") + self.textLabel6.setMinimumSize(QSize(40,0)) + + CommandeLayout.addWidget(self.textLabel6,1,0) + + self.LEFiltre = QLineEdit(self.Commande,"LEFiltre") + self.LEFiltre.setMinimumSize(QSize(160,30)) + + CommandeLayout.addWidget(self.LEFiltre,1,1) + self.TWChoix.insertTab(self.Commande,QString("")) + + self.TabPage = QWidget(self.TWChoix,"TabPage") + + LayoutWidget = QWidget(self.TabPage,"layout4") + LayoutWidget.setGeometry(QRect(10,31,472,90)) + layout4 = QVBoxLayout(LayoutWidget,11,6,"layout4") + + self.textLabel1_3 = QLabel(LayoutWidget,"textLabel1_3") + layout4.addWidget(self.textLabel1_3) + + self.LENomFichier = QLineEdit(LayoutWidget,"LENomFichier") + self.LENomFichier.setMinimumSize(QSize(470,40)) + layout4.addWidget(self.LENomFichier) + + LayoutWidget_2 = QWidget(self.TabPage,"layout5") + LayoutWidget_2.setGeometry(QRect(8,131,481,250)) + layout5 = QGridLayout(LayoutWidget_2,1,1,11,6,"layout5") + + layout3 = QHBoxLayout(None,0,6,"layout3") + spacer3 = QSpacerItem(331,20,QSizePolicy.Expanding,QSizePolicy.Minimum) + layout3.addItem(spacer3) + + self.BBrowse = QPushButton(LayoutWidget_2,"BBrowse") + self.BBrowse.setSizePolicy(QSizePolicy(0,0,0,0,self.BBrowse.sizePolicy().hasHeightForWidth())) + self.BBrowse.setMinimumSize(QSize(140,50)) + layout3.addWidget(self.BBrowse) + + layout5.addLayout(layout3,1,0) + spacer1 = QSpacerItem(21,190,QSizePolicy.Minimum,QSizePolicy.Expanding) + layout5.addItem(spacer1,0,0) + self.TWChoix.insertTab(self.TabPage,QString("")) + + DPourLayout.addMultiCellWidget(self.TWChoix,0,0,0,2) + + self.bSup = QPushButton(self,"bSup") + self.bSup.setMinimumSize(QSize(0,30)) + self.bSup.setAutoDefault(1) + + DPourLayout.addWidget(self.bSup,2,0) + + self.bOk = QPushButton(self,"bOk") + self.bOk.setMinimumSize(QSize(0,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + + DPourLayout.addWidget(self.bOk,2,1) + + self.bHelp = QPushButton(self,"bHelp") + self.bHelp.setMinimumSize(QSize(0,30)) + self.bHelp.setAutoDefault(1) + + DPourLayout.addWidget(self.bHelp,2,2) + + self.languageChange() + + self.resize(QSize(521,499).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed) + self.connect(self.BBrowse,SIGNAL("clicked()"),self.BBrowsePressed) + self.connect(self.LENomFichier,SIGNAL("returnPressed()"),self.LENomFichReturnPressed) + + self.setTabOrder(self.LEFiltre,self.LENomFichier) + self.setTabOrder(self.LENomFichier,self.TWChoix) + self.setTabOrder(self.TWChoix,self.LBMCPermis) + self.setTabOrder(self.LBMCPermis,self.LBRegles) + self.setTabOrder(self.LBRegles,self.LBNouvCommande) + self.setTabOrder(self.LBNouvCommande,self.RBalpha) + self.setTabOrder(self.RBalpha,self.BBrowse) + self.setTabOrder(self.BBrowse,self.bSup) + self.setTabOrder(self.bSup,self.bOk) + self.setTabOrder(self.bOk,self.bHelp) + + + def languageChange(self): + self.setCaption(self.__tr("DMacro")) + self.Commentaire.setText(QString.null) + self.textLabel1_2.setText(self.__trUtf8("\x3c\x68\x33\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x3c\x75\x3e\x3c\x62\x3e\x52\xc3\xa9\x67\x6c\x65\x73\x3c\x2f\x62\x3e\x3c\x2f\x75\x3e\x3c\x2f\x70\x3e\x3c\x2f\x68\x33\x3e")) + self.textLabel1.setText(self.__tr("

Mots Clefs Permis

")) + self.TWChoix.changeTab(self.MotClef,self.__tr("Ajouter Mot-Clef")) + self.textLabel1_4.setText(self.__tr("Commandes :")) + self.buttonGroup1.setTitle(self.__tr("Affichage")) + self.RBGroupe.setText(self.__tr("par groupe")) + self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65")) + self.textLabel4.setText(self.__trUtf8("\x4c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x68\x6f\x69\x73\x69\x65\x20\x73\x65\x72\x61\x20\x61\x6a\x6f\x75\x74\xc3\xa9\x65\x20\x41\x50\x52\x45\x53\x20\x6c\x61\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x65\x20\x63\x6f\x75\x72\x61\x6e\x74\x65")) + self.BNext.setText(self.__tr("Suivant")) + QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence")) + self.textLabel6.setText(self.__tr("Filtre")) + self.TWChoix.changeTab(self.Commande,self.__tr("Nouvelle Commande")) + self.textLabel1_3.setText(self.__tr("La commande POURSUITE requiert un nom de Fichier :")) + self.BBrowse.setText(self.__tr("Edit")) + self.TWChoix.changeTab(self.TabPage,self.__tr("Fichier Poursuite")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + + + def LBNouvCommandeClicked(self): + print "DPour.LBNouvCommandeClicked(): Not implemented yet" + + def LEFiltreTextChanged(self): + print "DPour.LEFiltreTextChanged(): Not implemented yet" + + def LEfiltreReturnPressed(self): + print "DPour.LEfiltreReturnPressed(): Not implemented yet" + + def BSupPressed(self): + print "DPour.BSupPressed(): Not implemented yet" + + def BOkPressed(self): + print "DPour.BOkPressed(): Not implemented yet" + + def BuildTabCommand(self): + print "DPour.BuildTabCommand(): Not implemented yet" + + def BNextPressed(self): + print "DPour.BNextPressed(): Not implemented yet" + + def BBrowsePressed(self): + print "DPour.BBrowsePressed(): Not implemented yet" + + def LENomFichReturnPressed(self): + print "DPour.LENomFichReturnPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DPour",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DPour",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desPoursuite.ui b/Ui/desPoursuite.ui new file mode 100644 index 00000000..17f7d6da --- /dev/null +++ b/Ui/desPoursuite.ui @@ -0,0 +1,504 @@ + +DPour + + + DPour + + + + 0 + 0 + 521 + 499 + + + + + 505 + 0 + + + + DMacro + + + + unnamed + + + + Commentaire + + + + + + + + TWChoix + + + + MotClef + + + Ajouter Mot-Clef + + + + unnamed + + + + textLabel1_2 + + + <h3><p align="center"><u><b>Régles</b></u></p></h3> + + + + + LBMCPermis + + + + 0 + 0 + + + + + + LBRegles + + + + + textLabel1 + + + + 0 + 0 + + + + <h3><p align="center"><u><b>Mots Clefs Permis</b></u></p></h3> + + + + + + + Commande + + + Nouvelle Commande + + + + unnamed + + + + LBNouvCommande + + + + + textLabel1_4 + + + <b><u>Commandes :</u></b> + + + + + buttonGroup1 + + + Affichage + + + + RBGroupe + + + + 20 + 40 + 101 + 20 + + + + par groupe + + + + + RBalpha + + + + 20 + 20 + 120 + 20 + + + + alphabétique + + + true + + + + + + textLabel4 + + + La commande choisie sera ajoutée APRES la commande courante + + + + + BNext + + + + 60 + 0 + + + + Suivant + + + + + + affiche la prochaine occurence + + + + + textLabel6 + + + + 40 + 0 + + + + Filtre + + + + + LEFiltre + + + + 160 + 30 + + + + + + + + TabPage + + + Fichier Poursuite + + + + layout4 + + + + 10 + 31 + 472 + 90 + + + + + unnamed + + + + textLabel1_3 + + + <font size="+1">La commande POURSUITE requiert un nom de Fichier :</font> + + + + + LENomFichier + + + + 470 + 40 + + + + + + + + layout5 + + + + 8 + 131 + 481 + 250 + + + + + unnamed + + + + layout3 + + + + unnamed + + + + spacer3 + + + Horizontal + + + Expanding + + + + 331 + 20 + + + + + + BBrowse + + + + 0 + 0 + 0 + 0 + + + + + 140 + 50 + + + + Edit + + + + + + + spacer1 + + + Vertical + + + Expanding + + + + 21 + 190 + + + + + + + + + + bSup + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bOk + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bHelp + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + LBNouvCommande + doubleClicked(QListBoxItem*) + DPour + LBNouvCommandeClicked() + + + LEFiltre + textChanged(const QString&) + DPour + LEFiltreTextChanged() + + + LEFiltre + returnPressed() + DPour + LEfiltreReturnPressed() + + + bSup + pressed() + DPour + BSupPressed() + + + bOk + clicked() + DPour + BOkPressed() + + + RBalpha + clicked() + DPour + BuildTabCommand() + + + RBGroupe + clicked() + DPour + BuildTabCommand() + + + BNext + clicked() + DPour + BNextPressed() + + + BBrowse + clicked() + DPour + BBrowsePressed() + + + LENomFichier + returnPressed() + DPour + LENomFichReturnPressed() + + + + LEFiltre + LENomFichier + TWChoix + LBMCPermis + LBRegles + LBNouvCommande + RBalpha + BBrowse + bSup + bOk + bHelp + + + LBNouvCommandeClicked() + LEFiltreTextChanged() + LEfiltreReturnPressed() + BSupPressed() + BOkPressed() + BuildTabCommand() + BNextPressed() + BBrowsePressed() + LENomFichReturnPressed() + + + diff --git a/Ui/desRacine.py b/Ui/desRacine.py new file mode 100644 index 00000000..39382eb2 --- /dev/null +++ b/Ui/desRacine.py @@ -0,0 +1,166 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desRacine.ui' +# +# Created: Mon Jun 2 16:02:17 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.16 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DRac(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DRac") + + self.setMinimumSize(QSize(505,0)) + + DRacLayout = QGridLayout(self,1,1,11,6,"DRacLayout") + + self.textLabel1_4 = QLabel(self,"textLabel1_4") + self.textLabel1_4.setMinimumSize(QSize(291,21)) + + DRacLayout.addMultiCellWidget(self.textLabel1_4,0,0,0,1) + + self.textLabel1_4_2 = QLabel(self,"textLabel1_4_2") + + DRacLayout.addMultiCellWidget(self.textLabel1_4_2,0,1,2,3) + + self.buttonGroup1 = QButtonGroup(self,"buttonGroup1") + self.buttonGroup1.setMinimumSize(QSize(0,60)) + + self.RBGroupe = QRadioButton(self.buttonGroup1,"RBGroupe") + self.RBGroupe.setGeometry(QRect(10,20,90,20)) + + self.RBalpha = QRadioButton(self.buttonGroup1,"RBalpha") + self.RBalpha.setGeometry(QRect(110,20,120,20)) + self.RBalpha.setChecked(1) + + DRacLayout.addMultiCellWidget(self.buttonGroup1,1,1,0,1) + + self.bHelp = QPushButton(self,"bHelp") + self.bHelp.setMinimumSize(QSize(160,30)) + self.bHelp.setAutoDefault(1) + + DRacLayout.addWidget(self.bHelp,3,3) + + self.bSup = QPushButton(self,"bSup") + self.bSup.setMinimumSize(QSize(160,30)) + self.bSup.setAutoDefault(1) + + DRacLayout.addWidget(self.bSup,3,0) + + self.bOk = QPushButton(self,"bOk") + self.bOk.setMinimumSize(QSize(160,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + + DRacLayout.addMultiCellWidget(self.bOk,3,3,1,2) + + layout2 = QGridLayout(None,1,1,0,6,"layout2") + + self.BNext = QToolButton(self,"BNext") + self.BNext.setMinimumSize(QSize(60,30)) + self.BNext.setIconSet(QIconSet()) + + layout2.addWidget(self.BNext,0,2) + + self.LEFiltre = QLineEdit(self,"LEFiltre") + self.LEFiltre.setMinimumSize(QSize(0,30)) + + layout2.addWidget(self.LEFiltre,0,1) + + self.LBRegles = QListBox(self,"LBRegles") + self.LBRegles.setMinimumSize(QSize(240,350)) + + layout2.addMultiCellWidget(self.LBRegles,0,1,3,3) + + self.textLabel6 = QLabel(self,"textLabel6") + self.textLabel6.setMinimumSize(QSize(40,0)) + + layout2.addWidget(self.textLabel6,0,0) + + self.LBNouvCommande = QListBox(self,"LBNouvCommande") + + layout2.addMultiCellWidget(self.LBNouvCommande,1,1,0,2) + + DRacLayout.addMultiCellLayout(layout2,2,2,0,3) + + self.languageChange() + + self.resize(QSize(509,513).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked) + self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged) + self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed) + self.connect(self.bSup,SIGNAL("pressed()"),self.BSupPressed) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommand) + self.connect(self.BNext,SIGNAL("clicked()"),self.BNextPressed) + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + + self.setTabOrder(self.LEFiltre,self.LBNouvCommande) + self.setTabOrder(self.LBNouvCommande,self.RBalpha) + self.setTabOrder(self.RBalpha,self.bSup) + self.setTabOrder(self.bSup,self.bOk) + self.setTabOrder(self.bOk,self.bHelp) + self.setTabOrder(self.bHelp,self.LBRegles) + + + def languageChange(self): + self.setCaption(self.__tr("DMacro")) + self.textLabel1_4.setText(self.__tr("Commandes :")) + self.textLabel1_4_2.setText(self.__trUtf8("\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x3c\x62\x3e\x3c\x75\x3e\x52\xc3\xa9\x67\x6c\x65\x73\x20\x3a\x3c\x2f\x75\x3e\x3c\x2f\x62\x3e\x3c\x2f\x70\x3e")) + self.buttonGroup1.setTitle(self.__tr("Affichage")) + self.RBGroupe.setText(self.__tr("par groupe")) + self.RBalpha.setText(self.__trUtf8("\x61\x6c\x70\x68\x61\x62\xc3\xa9\x74\x69\x71\x75\x65")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(QKeySequence(self.__tr("Alt+D"))) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(QKeySequence(self.__tr("Alt+S"))) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(QKeySequence(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A"))) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.BNext.setText(self.__tr("Suivant")) + QToolTip.add(self.BNext,self.__tr("affiche la prochaine occurence")) + self.textLabel6.setText(self.__tr("Filtre")) + + + def LBNouvCommandeClicked(self): + print "DRac.LBNouvCommandeClicked(): Not implemented yet" + + def LEFiltreTextChanged(self): + print "DRac.LEFiltreTextChanged(): Not implemented yet" + + def LEfiltreReturnPressed(self): + print "DRac.LEfiltreReturnPressed(): Not implemented yet" + + def BSupPressed(self): + print "DRac.BSupPressed(): Not implemented yet" + + def BOkPressed(self): + print "DRac.BOkPressed(): Not implemented yet" + + def BuildTabCommand(self): + print "DRac.BuildTabCommand(): Not implemented yet" + + def BNextPressed(self): + print "DRac.BNextPressed(): Not implemented yet" + + def ViewDoc(self): + print "DRac.ViewDoc(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DRac",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DRac",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desRacine.ui b/Ui/desRacine.ui new file mode 100644 index 00000000..b4ee15d2 --- /dev/null +++ b/Ui/desRacine.ui @@ -0,0 +1,320 @@ + +DRac + + + DRac + + + + 0 + 0 + 509 + 513 + + + + + 505 + 0 + + + + DMacro + + + + unnamed + + + + textLabel1_4 + + + + 291 + 21 + + + + <b><u>Commandes :</u></b> + + + + + textLabel1_4_2 + + + <p align="center"><b><u>Régles :</u></b></p> + + + + + buttonGroup1 + + + + 0 + 60 + + + + Affichage + + + + RBGroupe + + + + 10 + 20 + 90 + 20 + + + + par groupe + + + + + RBalpha + + + + 110 + 20 + 120 + 20 + + + + alphabétique + + + true + + + + + + bHelp + + + + 160 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + bSup + + + + 160 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bOk + + + + 160 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + layout2 + + + + unnamed + + + + BNext + + + + 60 + 30 + + + + Suivant + + + + + + affiche la prochaine occurence + + + + + LEFiltre + + + + 0 + 30 + + + + + + LBRegles + + + + 240 + 350 + + + + + + textLabel6 + + + + 40 + 0 + + + + Filtre + + + + + LBNouvCommande + + + + + + + + + LBNouvCommande + doubleClicked(QListBoxItem*) + DRac + LBNouvCommandeClicked() + + + LEFiltre + textChanged(const QString&) + DRac + LEFiltreTextChanged() + + + LEFiltre + returnPressed() + DRac + LEfiltreReturnPressed() + + + bSup + pressed() + DRac + BSupPressed() + + + bOk + clicked() + DRac + BOkPressed() + + + RBalpha + clicked() + DRac + BuildTabCommand() + + + RBGroupe + clicked() + DRac + BuildTabCommand() + + + BNext + clicked() + DRac + BNextPressed() + + + bHelp + clicked() + DRac + ViewDoc() + + + + LEFiltre + LBNouvCommande + RBalpha + bSup + bOk + bHelp + LBRegles + + + LBNouvCommandeClicked() + LEFiltreTextChanged() + LEfiltreReturnPressed() + BSupPressed() + BOkPressed() + BuildTabCommand() + BNextPressed() + ViewDoc() + + + diff --git a/Ui/desSelectVal.py b/Ui/desSelectVal.py new file mode 100644 index 00000000..f43b5d2c --- /dev/null +++ b/Ui/desSelectVal.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desSelectVal.ui' +# +# Created: mar mar 25 10:05:09 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DSelVal(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DSelVal") + + + DSelValLayout = QGridLayout(self,1,1,11,6,"DSelValLayout") + + self.TBtext = QTextBrowser(self,"TBtext") + + DSelValLayout.addMultiCellWidget(self.TBtext,0,0,0,1) + + self.BGSeparateur = QButtonGroup(self,"BGSeparateur") + self.BGSeparateur.setMinimumSize(QSize(180,100)) + + LayoutWidget = QWidget(self.BGSeparateur,"layout1") + LayoutWidget.setGeometry(QRect(17,20,150,74)) + layout1 = QGridLayout(LayoutWidget,1,1,11,6,"layout1") + + self.BpointVirgule = QRadioButton(LayoutWidget,"BpointVirgule") + + layout1.addWidget(self.BpointVirgule,2,0) + + self.Bespace = QRadioButton(LayoutWidget,"Bespace") + self.Bespace.setChecked(1) + + layout1.addWidget(self.Bespace,0,0) + + self.Bvirgule = QRadioButton(LayoutWidget,"Bvirgule") + + layout1.addWidget(self.Bvirgule,1,0) + + DSelValLayout.addMultiCellWidget(self.BGSeparateur,1,2,0,0) + + self.BImportTout = QPushButton(self,"BImportTout") + + DSelValLayout.addWidget(self.BImportTout,2,1) + + self.BImportSel = QPushButton(self,"BImportSel") + + DSelValLayout.addWidget(self.BImportSel,1,1) + + self.languageChange() + + self.resize(QSize(413,497).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.BGSeparateur,SIGNAL("clicked(int)"),self.SeparateurSelect) + self.connect(self.BImportSel,SIGNAL("clicked()"),self.BImportSelPressed) + self.connect(self.BImportTout,SIGNAL("clicked()"),self.BImportToutPressed) + + + def languageChange(self): + self.setCaption(self.__trUtf8("\x53\xc3\xa9\x6c\x65\x63\x74\x69\x6f\x6e\x20\x64\x65\x20\x76\x61\x6c\x65\x75\x72\x73")) + self.BGSeparateur.setTitle(self.__trUtf8("\x53\xc3\xa9\x70\x61\x72\x61\x74\x65\x75\x72")) + self.BpointVirgule.setText(self.__tr("point-virgule")) + self.Bespace.setText(self.__tr("espace")) + self.Bvirgule.setText(self.__tr("virgule")) + self.BImportTout.setText(self.__tr("Importer Tout")) + self.BImportSel.setText(self.__tr("Ajouter Selection")) + + + def SeparateurSelect(self): + print "DSelVal.SeparateurSelect(): Not implemented yet" + + def BImportSelPressed(self): + print "DSelVal.BImportSelPressed(): Not implemented yet" + + def BImportToutPressed(self): + print "DSelVal.BImportToutPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DSelVal",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DSelVal",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desSelectVal.ui b/Ui/desSelectVal.ui new file mode 100644 index 00000000..ae092f56 --- /dev/null +++ b/Ui/desSelectVal.ui @@ -0,0 +1,130 @@ + +DSelVal + + + DSelVal + + + + 0 + 0 + 413 + 497 + + + + Sélection de valeurs + + + + unnamed + + + + TBtext + + + + + BGSeparateur + + + + 180 + 100 + + + + Séparateur + + + + layout1 + + + + 17 + 20 + 150 + 74 + + + + + unnamed + + + + BpointVirgule + + + point-virgule + + + + + Bespace + + + espace + + + true + + + + + Bvirgule + + + virgule + + + + + + + + BImportTout + + + Importer Tout + + + + + BImportSel + + + Ajouter Selection + + + + + + + BGSeparateur + clicked(int) + DSelVal + SeparateurSelect() + + + BImportSel + clicked() + DSelVal + BImportSelPressed() + + + BImportTout + clicked() + DSelVal + BImportToutPressed() + + + + SeparateurSelect() + BImportSelPressed() + BImportToutPressed() + + + diff --git a/Ui/desUniqueASSD.py b/Ui/desUniqueASSD.py new file mode 100644 index 00000000..12a79933 --- /dev/null +++ b/Ui/desUniqueASSD.py @@ -0,0 +1,106 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desUniqueASSD.ui' +# +# Created: mar mar 25 10:05:09 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DUnASSD(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DUnASSD") + + self.setMinimumSize(QSize(350,0)) + + DUnASSDLayout = QGridLayout(self,1,1,11,6,"DUnASSDLayout") + + self.tabuniqueinto = QTabWidget(self,"tabuniqueinto") + + self.Widget8 = QWidget(self.tabuniqueinto,"Widget8") + Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout") + + self.textLabel2 = QLabel(self.Widget8,"textLabel2") + self.textLabel2.setMinimumSize(QSize(436,50)) + + Widget8Layout.addWidget(self.textLabel2,0,0) + + self.listBoxASSD = QListBox(self.Widget8,"listBoxASSD") + + Widget8Layout.addWidget(self.listBoxASSD,1,0) + + self.Commentaire = QLabel(self.Widget8,"Commentaire") + self.Commentaire.setMinimumSize(QSize(380,30)) + + Widget8Layout.addWidget(self.Commentaire,2,0) + + layout2 = QHBoxLayout(None,0,6,"layout2") + + self.bSup = QPushButton(self.Widget8,"bSup") + self.bSup.setMinimumSize(QSize(0,30)) + self.bSup.setAutoDefault(1) + layout2.addWidget(self.bSup) + + self.bOk = QPushButton(self.Widget8,"bOk") + self.bOk.setMinimumSize(QSize(0,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + layout2.addWidget(self.bOk) + + self.bHelp = QPushButton(self.Widget8,"bHelp") + self.bHelp.setMinimumSize(QSize(0,30)) + self.bHelp.setAutoDefault(1) + layout2.addWidget(self.bHelp) + + Widget8Layout.addLayout(layout2,3,0) + self.tabuniqueinto.insertTab(self.Widget8,QString("")) + + DUnASSDLayout.addWidget(self.tabuniqueinto,0,0) + + self.languageChange() + + self.resize(QSize(482,480).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + + + def languageChange(self): + self.setCaption(self.__tr("DUnIn")) + self.textLabel2.setText(self.__trUtf8("\x3c\x66\x6f\x6e\x74\x20\x73\x69\x7a\x65\x3d\x22\x2b\x31\x22\x3e\x3c\x70\x20\x61\x6c\x69\x67\x6e\x3d\x22\x63\x65\x6e\x74\x65\x72\x22\x3e\x53\x74\x72\x75\x63\x74\x75\x72\x65\x73\x20\x64\x65\x20\x64\x6f\x6e\x6e\xc3\xa9\x65\x73\x20\x64\x75\x20\x74\x79\x70\x65\x0a\x72\x65\x71\x75\x69\x73\x20\x70\x61\x72\x20\x6c\x27\x6f\x62\x6a\x65\x74\x20\x63\x6f\x75\x72\x61\x6e\x74\x20\x3a\x3c\x2f\x70\x3e\x3c\x2f\x66\x6f\x6e\x74\x3e")) + self.Commentaire.setText(QString.null) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur")) + + + def BSupPressed(self): + print "DUnASSD.BSupPressed(): Not implemented yet" + + def ViewDoc(self): + print "DUnASSD.ViewDoc(): Not implemented yet" + + def BOkPressed(self): + print "DUnASSD.BOkPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DUnASSD",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DUnASSD",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desUniqueASSD.ui b/Ui/desUniqueASSD.ui new file mode 100644 index 00000000..819c9294 --- /dev/null +++ b/Ui/desUniqueASSD.ui @@ -0,0 +1,190 @@ + +DUnASSD + + + DUnASSD + + + + 0 + 0 + 482 + 480 + + + + + 350 + 0 + + + + DUnIn + + + + unnamed + + + + tabuniqueinto + + + + Widget8 + + + Saisir Valeur + + + + unnamed + + + + textLabel2 + + + + 436 + 50 + + + + <font size="+1"><p align="center">Structures de données du type +requis par l'objet courant :</p></font> + + + + + listBoxASSD + + + + + Commentaire + + + + 380 + 30 + + + + + + + + + layout2 + + + + unnamed + + + + bSup + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bOk + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bHelp + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + + + + + + bHelp + clicked() + DUnASSD + ViewDoc() + + + bOk + clicked() + DUnASSD + BOkPressed() + + + bSup + clicked() + DUnASSD + BSupPressed() + + + + BSupPressed() + ViewDoc() + BOkPressed() + + + diff --git a/Ui/desUniqueBase.py b/Ui/desUniqueBase.py new file mode 100644 index 00000000..ec1c5161 --- /dev/null +++ b/Ui/desUniqueBase.py @@ -0,0 +1,174 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desUniqueBase.ui' +# +# Created: ven avr 4 11:27:09 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + +image0_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x14\x00\x00\x00\x14" \ + "\x08\x06\x00\x00\x00\x8d\x89\x1d\x0d\x00\x00\x00" \ + "\x8d\x49\x44\x41\x54\x38\x8d\xb5\xd3\xdb\x0d\x80" \ + "\x20\x0c\x05\xd0\x5b\xe3\x3a\x8e\xe2\x4c\x86\x99" \ + "\x18\x85\x81\xea\x87\xc6\xc4\xd2\x56\x28\xd8\x84" \ + "\x0f\x5e\x27\x17\x50\x02\x63\x6a\x2d\x73\xb9\x1f" \ + "\xc0\xb5\x69\x15\x39\x17\xc3\xa0\x7e\xf0\xae\x9c" \ + "\xca\xab\xbf\x1f\x5b\xb5\xa6\xed\xc8\x0c\x02\x83" \ + "\x34\x20\x06\x02\x00\x81\x65\xc2\x38\x28\x30\x2f" \ + "\xa9\x77\xdd\x36\xc6\xa0\x67\xa7\x78\x14\x3f\xa1" \ + "\x85\xf9\x5b\xe6\x61\x76\xc2\x20\xa6\x83\x03\x58" \ + "\x0d\x0e\x62\x7a\xc2\x01\xcc\x04\xa3\xd8\x55\x2c" \ + "\x1a\xc0\x39\x95\xab\x27\xe7\x5a\x9a\x3e\x18\x47" \ + "\xdd\xef\x30\x72\xec\xef\x5f\xaf\xb3\x4e\xcb\x01" \ + "\x65\xf7\x82\x6b\x45\x7b\x00\x00\x00\x00\x49\x45" \ + "\x4e\x44\xae\x42\x60\x82" + +class DUnBase(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + self.image0 = QPixmap() + self.image0.loadFromData(image0_data,"PNG") + if not name: + self.setName("DUnBase") + + self.setMinimumSize(QSize(350,0)) + + DUnBaseLayout = QGridLayout(self,1,1,11,6,"DUnBaseLayout") + + self.tabuniqueinto = QTabWidget(self,"tabuniqueinto") + + self.Widget8 = QWidget(self.tabuniqueinto,"Widget8") + Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout") + + layout2 = QHBoxLayout(None,0,6,"layout2") + + self.textLabel2 = QLabel(self.Widget8,"textLabel2") + layout2.addWidget(self.textLabel2) + + self.lineEditVal = QLineEdit(self.Widget8,"lineEditVal") + self.lineEditVal.setMinimumSize(QSize(290,50)) + layout2.addWidget(self.lineEditVal) + + Widget8Layout.addMultiCellLayout(layout2,1,1,0,2) + spacer1 = QSpacerItem(288,21,QSizePolicy.Expanding,QSizePolicy.Minimum) + Widget8Layout.addMultiCell(spacer1,0,0,0,1) + + self.bParametres = QPushButton(self.Widget8,"bParametres") + self.bParametres.setSizePolicy(QSizePolicy(0,0,0,0,self.bParametres.sizePolicy().hasHeightForWidth())) + self.bParametres.setMinimumSize(QSize(140,30)) + + Widget8Layout.addWidget(self.bParametres,0,2) + + self.bSup = QPushButton(self.Widget8,"bSup") + self.bSup.setMinimumSize(QSize(0,30)) + self.bSup.setAutoDefault(1) + + Widget8Layout.addWidget(self.bSup,5,0) + + self.bOk = QPushButton(self.Widget8,"bOk") + self.bOk.setMinimumSize(QSize(0,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + + Widget8Layout.addWidget(self.bOk,5,1) + + self.bHelp = QPushButton(self.Widget8,"bHelp") + self.bHelp.setMinimumSize(QSize(0,30)) + self.bHelp.setAutoDefault(1) + + Widget8Layout.addWidget(self.bHelp,5,2) + spacer4 = QSpacerItem(41,112,QSizePolicy.Minimum,QSizePolicy.Expanding) + Widget8Layout.addItem(spacer4,2,1) + spacer3 = QSpacerItem(21,112,QSizePolicy.Minimum,QSizePolicy.Expanding) + Widget8Layout.addItem(spacer3,4,1) + + self.Commentaire = QLabel(self.Widget8,"Commentaire") + self.Commentaire.setMinimumSize(QSize(430,40)) + + Widget8Layout.addMultiCellWidget(self.Commentaire,3,3,0,2) + + self.BView2D = QPushButton(self.Widget8,"BView2D") + self.BView2D.setMinimumSize(QSize(110,40)) + + Widget8Layout.addWidget(self.BView2D,2,2) + + self.BSalome = QPushButton(self.Widget8,"BSalome") + self.BSalome.setMinimumSize(QSize(50,40)) + self.BSalome.setIconSet(QIconSet(self.image0)) + + Widget8Layout.addWidget(self.BSalome,2,0) + self.tabuniqueinto.insertTab(self.Widget8,QString("")) + + DUnBaseLayout.addWidget(self.tabuniqueinto,0,0) + + self.languageChange() + + self.resize(QSize(482,480).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOk2Pressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.LEValeurPressed) + self.connect(self.bParametres,SIGNAL("pressed()"),self.BParametresPressed) + self.connect(self.BSalome,SIGNAL("pressed()"),self.BSalomePressed) + self.connect(self.BView2D,SIGNAL("clicked()"),self.BView2DPressed) + + self.setTabOrder(self.lineEditVal,self.tabuniqueinto) + self.setTabOrder(self.tabuniqueinto,self.bParametres) + self.setTabOrder(self.bParametres,self.bSup) + self.setTabOrder(self.bSup,self.bOk) + self.setTabOrder(self.bOk,self.bHelp) + self.setTabOrder(self.bHelp,self.BView2D) + self.setTabOrder(self.BView2D,self.BSalome) + + + def languageChange(self): + self.setCaption(self.__tr("DUnIn")) + self.textLabel2.setText(self.__tr("

Valeur:

")) + self.bParametres.setText(self.__tr("Parametres")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.Commentaire.setText(QString.null) + self.BView2D.setText(self.__tr("Visualiser")) + self.BSalome.setText(QString.null) + self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur")) + + + def BSupPressed(self): + print "DUnBase.BSupPressed(): Not implemented yet" + + def ViewDoc(self): + print "DUnBase.ViewDoc(): Not implemented yet" + + def BOk2Pressed(self): + print "DUnBase.BOk2Pressed(): Not implemented yet" + + def BParametresPressed(self): + print "DUnBase.BParametresPressed(): Not implemented yet" + + def LEValeurPressed(self): + print "DUnBase.LEValeurPressed(): Not implemented yet" + + def BSalomePressed(self): + print "DUnBase.BSalomePressed(): Not implemented yet" + + def BView2DPressed(self): + print "DUnBase.BView2DPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DUnBase",s,c) diff --git a/Ui/desUniqueBase.ui b/Ui/desUniqueBase.ui new file mode 100644 index 00000000..30eeab83 --- /dev/null +++ b/Ui/desUniqueBase.ui @@ -0,0 +1,336 @@ + +DUnBase + + + DUnBase + + + + 0 + 0 + 482 + 480 + + + + + 350 + 0 + + + + DUnIn + + + + unnamed + + + + tabuniqueinto + + + + Widget8 + + + Saisir Valeur + + + + unnamed + + + + layout2 + + + + unnamed + + + + textLabel2 + + + <b><u><p align="center">Valeur: </p></u></b> + + + + + lineEditVal + + + + 290 + 50 + + + + + + + + spacer1 + + + Horizontal + + + Expanding + + + + 288 + 21 + + + + + + bParametres + + + + 0 + 0 + 0 + 0 + + + + + 140 + 30 + + + + Parametres + + + + + bSup + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bOk + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bHelp + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + spacer4 + + + Vertical + + + Expanding + + + + 41 + 112 + + + + + + spacer3 + + + Vertical + + + Expanding + + + + 21 + 112 + + + + + + Commentaire + + + + 430 + 40 + + + + + + + + + BView2D + + + + 110 + 40 + + + + Visualiser + + + + + BSalome + + + + 50 + 40 + + + + + + + image0 + + + + + + + + + + 89504e470d0a1a0a0000000d49484452000000140000001408060000008d891d0d0000008d49444154388db5d3db0d80200c05d05be33a8ee24c8699188581ea87c6c4d25628d8840f5e27175002636a2d73b91fc0b569153917c3a07ef0ae9ccaabbf1f5bb5a6edc80c028334200602008165c23828302fa977dd36c6a067a778143fa185f95be66176c220a68303580d0e627ac201cc04a3d8552c1ac03995ab27e75a9a3e1847ddef3072ecef5fafb34ecb0165f7826b457b0000000049454e44ae426082 + + + + + bHelp + clicked() + DUnBase + ViewDoc() + + + bOk + clicked() + DUnBase + BOk2Pressed() + + + bSup + clicked() + DUnBase + BSupPressed() + + + lineEditVal + returnPressed() + DUnBase + LEValeurPressed() + + + bParametres + pressed() + DUnBase + BParametresPressed() + + + BSalome + pressed() + DUnBase + BSalomePressed() + + + BView2D + clicked() + DUnBase + BView2DPressed() + + + + lineEditVal + tabuniqueinto + bParametres + bSup + bOk + bHelp + BView2D + BSalome + + + BSupPressed() + ViewDoc() + BOk2Pressed() + BParametresPressed() + LEValeurPressed() + BSalomePressed() + BView2DPressed() + + + diff --git a/Ui/desUniqueComp.py b/Ui/desUniqueComp.py new file mode 100644 index 00000000..7b9af9dd --- /dev/null +++ b/Ui/desUniqueComp.py @@ -0,0 +1,152 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desUniqueComp.ui' +# +# Created: ven avr 4 11:27:09 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DUnComp(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DUnComp") + + self.setMinimumSize(QSize(350,0)) + + DUnCompLayout = QGridLayout(self,1,1,11,6,"DUnCompLayout") + + self.tabuniqueinto = QTabWidget(self,"tabuniqueinto") + + self.Widget8 = QWidget(self.tabuniqueinto,"Widget8") + Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout") + + layout3 = QVBoxLayout(None,0,6,"layout3") + + self.textLabel1 = QLabel(self.Widget8,"textLabel1") + layout3.addWidget(self.textLabel1) + + self.LEcomp = QLineEdit(self.Widget8,"LEcomp") + self.LEcomp.setMinimumSize(QSize(390,40)) + layout3.addWidget(self.LEcomp) + + Widget8Layout.addMultiCellLayout(layout3,0,0,0,1) + + self.Commentaire = QLabel(self.Widget8,"Commentaire") + + Widget8Layout.addMultiCellWidget(self.Commentaire,5,5,0,1) + + self.LEReel = QLineEdit(self.Widget8,"LEReel") + self.LEReel.setMinimumSize(QSize(190,40)) + + Widget8Layout.addWidget(self.LEReel,3,0) + + self.LEImag = QLineEdit(self.Widget8,"LEImag") + self.LEImag.setMinimumSize(QSize(190,40)) + + Widget8Layout.addWidget(self.LEImag,3,1) + + self.buttonGroup1 = QButtonGroup(self.Widget8,"buttonGroup1") + + self.RBRI = QRadioButton(self.buttonGroup1,"RBRI") + self.RBRI.setGeometry(QRect(20,40,335,20)) + + self.RBMP = QRadioButton(self.buttonGroup1,"RBMP") + self.RBMP.setGeometry(QRect(20,20,335,20)) + + Widget8Layout.addMultiCellWidget(self.buttonGroup1,2,2,0,1) + spacer3 = QSpacerItem(20,41,QSizePolicy.Minimum,QSizePolicy.Expanding) + Widget8Layout.addItem(spacer3,1,0) + spacer4 = QSpacerItem(20,41,QSizePolicy.Minimum,QSizePolicy.Expanding) + Widget8Layout.addItem(spacer4,4,0) + + layout2 = QHBoxLayout(None,0,6,"layout2") + + self.bSup = QPushButton(self.Widget8,"bSup") + self.bSup.setAutoDefault(1) + layout2.addWidget(self.bSup) + + self.bOk = QPushButton(self.Widget8,"bOk") + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + layout2.addWidget(self.bOk) + + self.bHelp = QPushButton(self.Widget8,"bHelp") + self.bHelp.setAutoDefault(1) + layout2.addWidget(self.bHelp) + + Widget8Layout.addMultiCellLayout(layout2,6,6,0,1) + self.tabuniqueinto.insertTab(self.Widget8,QString("")) + + DUnCompLayout.addWidget(self.tabuniqueinto,0,0) + + self.languageChange() + + self.resize(QSize(484,480).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + self.connect(self.LEImag,SIGNAL("returnPressed()"),self.LEImagRPressed) + self.connect(self.LEReel,SIGNAL("returnPressed()"),self.LEReelRPressed) + self.connect(self.LEcomp,SIGNAL("returnPressed()"),self.LEcompRPressed) + + self.setTabOrder(self.LEcomp,self.LEReel) + self.setTabOrder(self.LEReel,self.LEImag) + self.setTabOrder(self.LEImag,self.tabuniqueinto) + self.setTabOrder(self.tabuniqueinto,self.RBRI) + self.setTabOrder(self.RBRI,self.RBMP) + self.setTabOrder(self.RBMP,self.bSup) + self.setTabOrder(self.bSup,self.bOk) + self.setTabOrder(self.bOk,self.bHelp) + + + def languageChange(self): + self.setCaption(self.__tr("DUnComp")) + self.textLabel1.setText(self.__tr("Complexe de la forme : a+bj")) + self.Commentaire.setText(self.__tr("Un complexe est attendu")) + self.buttonGroup1.setTitle(self.__tr("OU")) + self.RBRI.setText(self.__trUtf8("\x52\x49\x20\x20\x20\x3a\x20\x52\xc3\xa9\x65\x6c\x09\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x49\x6d\x61\x67\x69\x6e\x61\x69\x72\x65")) + self.RBMP.setText(self.__tr("MP : Module Phase")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur")) + + + def BSupPressed(self): + print "DUnComp.BSupPressed(): Not implemented yet" + + def ViewDoc(self): + print "DUnComp.ViewDoc(): Not implemented yet" + + def BOkPressed(self): + print "DUnComp.BOkPressed(): Not implemented yet" + + def LEImagRPressed(self): + print "DUnComp.LEImagRPressed(): Not implemented yet" + + def LEReelRPressed(self): + print "DUnComp.LEReelRPressed(): Not implemented yet" + + def LEcompRPressed(self): + print "DUnComp.LEcompRPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DUnComp",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DUnComp",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desUniqueComp.ui b/Ui/desUniqueComp.ui new file mode 100644 index 00000000..ae0361d6 --- /dev/null +++ b/Ui/desUniqueComp.ui @@ -0,0 +1,303 @@ + +DUnComp + + + DUnComp + + + + 0 + 0 + 484 + 480 + + + + + 350 + 0 + + + + DUnComp + + + + unnamed + + + + tabuniqueinto + + + + Widget8 + + + Saisir Valeur + + + + unnamed + + + + layout3 + + + + unnamed + + + + textLabel1 + + + <font size="+2">Complexe de la forme : a+bj</font> + + + + + LEcomp + + + + 390 + 40 + + + + + + + + Commentaire + + + <font size="+2">Un complexe est attendu</font> + + + + + LEReel + + + + 190 + 40 + + + + + + LEImag + + + + 190 + 40 + + + + + + buttonGroup1 + + + OU + + + + RBRI + + + + 20 + 40 + 335 + 20 + + + + RI : Réel Imaginaire + + + + + RBMP + + + + 20 + 20 + 335 + 20 + + + + MP : Module Phase + + + + + + spacer3 + + + Vertical + + + Expanding + + + + 20 + 41 + + + + + + spacer4 + + + Vertical + + + Expanding + + + + 20 + 41 + + + + + + layout2 + + + + unnamed + + + + bSup + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bOk + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bHelp + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + + + + + + bHelp + clicked() + DUnComp + ViewDoc() + + + bOk + clicked() + DUnComp + BOkPressed() + + + bSup + clicked() + DUnComp + BSupPressed() + + + LEImag + returnPressed() + DUnComp + LEImagRPressed() + + + LEReel + returnPressed() + DUnComp + LEReelRPressed() + + + LEcomp + returnPressed() + DUnComp + LEcompRPressed() + + + + LEcomp + LEReel + LEImag + tabuniqueinto + RBRI + RBMP + bSup + bOk + bHelp + + + BSupPressed() + ViewDoc() + BOkPressed() + LEImagRPressed() + LEReelRPressed() + LEcompRPressed() + + + diff --git a/Ui/desUniqueInto.py b/Ui/desUniqueInto.py new file mode 100644 index 00000000..914a3d2e --- /dev/null +++ b/Ui/desUniqueInto.py @@ -0,0 +1,102 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desUniqueInto.ui' +# +# Created: mar mar 25 10:05:09 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DUnIn(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DUnIn") + + self.setMinimumSize(QSize(350,0)) + + DUnInLayout = QGridLayout(self,1,1,11,6,"DUnInLayout") + + self.tabuniqueinto = QTabWidget(self,"tabuniqueinto") + + self.Widget8 = QWidget(self.tabuniqueinto,"Widget8") + Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout") + + self.Commentaire = QLabel(self.Widget8,"Commentaire") + self.Commentaire.setMinimumSize(QSize(420,30)) + + Widget8Layout.addWidget(self.Commentaire,2,0) + + layout2 = QHBoxLayout(None,0,6,"layout2") + + self.bSup = QPushButton(self.Widget8,"bSup") + self.bSup.setMinimumSize(QSize(0,30)) + self.bSup.setAutoDefault(1) + layout2.addWidget(self.bSup) + + self.bOk = QPushButton(self.Widget8,"bOk") + self.bOk.setMinimumSize(QSize(0,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + layout2.addWidget(self.bOk) + + self.bHelp = QPushButton(self.Widget8,"bHelp") + self.bHelp.setMinimumSize(QSize(0,30)) + self.bHelp.setAutoDefault(1) + layout2.addWidget(self.bHelp) + + Widget8Layout.addLayout(layout2,3,0) + + self.listBoxVal = QListBox(self.Widget8,"listBoxVal") + + Widget8Layout.addWidget(self.listBoxVal,1,0) + + self.textLabel2 = QLabel(self.Widget8,"textLabel2") + + Widget8Layout.addWidget(self.textLabel2,0,0) + self.tabuniqueinto.insertTab(self.Widget8,QString("")) + + DUnInLayout.addWidget(self.tabuniqueinto,0,0) + + self.languageChange() + + self.resize(QSize(482,480).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + + + def languageChange(self): + self.setCaption(self.__tr("DUnIn")) + self.Commentaire.setText(QString.null) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.textLabel2.setText(self.__tr("

Valeurs possibles

")) + self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur")) + + + def BSupPressed(self): + print "DUnIn.BSupPressed(): Not implemented yet" + + def ViewDoc(self): + print "DUnIn.ViewDoc(): Not implemented yet" + + def BOkPressed(self): + print "DUnIn.BOkPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DUnIn",s,c) diff --git a/Ui/desUniqueInto.ui b/Ui/desUniqueInto.ui new file mode 100644 index 00000000..67f99a98 --- /dev/null +++ b/Ui/desUniqueInto.ui @@ -0,0 +1,183 @@ + +DUnIn + + + DUnIn + + + + 0 + 0 + 482 + 480 + + + + + 350 + 0 + + + + DUnIn + + + + unnamed + + + + tabuniqueinto + + + + Widget8 + + + Saisir Valeur + + + + unnamed + + + + Commentaire + + + + 420 + 30 + + + + + + + + + layout2 + + + + unnamed + + + + bSup + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bOk + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bHelp + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + listBoxVal + + + + + textLabel2 + + + <b><u><p align="center">Valeurs possibles</p></u></b> + + + + + + + + + + bHelp + clicked() + DUnIn + ViewDoc() + + + bOk + clicked() + DUnIn + BOkPressed() + + + bSup + clicked() + DUnIn + BSupPressed() + + + + BSupPressed() + ViewDoc() + BOkPressed() + + + diff --git a/Ui/desUniqueSDCO.py b/Ui/desUniqueSDCO.py new file mode 100644 index 00000000..bd94a1db --- /dev/null +++ b/Ui/desUniqueSDCO.py @@ -0,0 +1,122 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desUniqueSDCO.ui' +# +# Created: ven avr 4 11:27:09 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DUnSDCO(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DUnSDCO") + + self.setMinimumSize(QSize(350,0)) + + DUnSDCOLayout = QGridLayout(self,1,1,11,6,"DUnSDCOLayout") + + self.tabuniqueinto = QTabWidget(self,"tabuniqueinto") + + self.Widget8 = QWidget(self.tabuniqueinto,"Widget8") + Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout") + + self.bSup = QPushButton(self.Widget8,"bSup") + self.bSup.setMinimumSize(QSize(0,30)) + self.bSup.setAutoDefault(1) + + Widget8Layout.addWidget(self.bSup,4,0) + + self.bOk = QPushButton(self.Widget8,"bOk") + self.bOk.setMinimumSize(QSize(0,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + + Widget8Layout.addWidget(self.bOk,4,1) + + self.bHelp = QPushButton(self.Widget8,"bHelp") + self.bHelp.setMinimumSize(QSize(0,30)) + self.bHelp.setAutoDefault(1) + + Widget8Layout.addWidget(self.bHelp,4,2) + + self.Commentaire = QLabel(self.Widget8,"Commentaire") + self.Commentaire.setMinimumSize(QSize(311,30)) + + Widget8Layout.addMultiCellWidget(self.Commentaire,3,3,0,2) + + self.textLabel2_2 = QLabel(self.Widget8,"textLabel2_2") + + Widget8Layout.addMultiCellWidget(self.textLabel2_2,0,0,0,2) + + self.LESDCO = QLineEdit(self.Widget8,"LESDCO") + self.LESDCO.setMinimumSize(QSize(300,40)) + + Widget8Layout.addMultiCellWidget(self.LESDCO,1,1,0,2) + + self.textLabel2 = QLabel(self.Widget8,"textLabel2") + + Widget8Layout.addMultiCellWidget(self.textLabel2,2,2,0,2) + self.tabuniqueinto.insertTab(self.Widget8,QString("")) + + DUnSDCOLayout.addWidget(self.tabuniqueinto,0,0) + + self.languageChange() + + self.resize(QSize(461,480).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + self.connect(self.LESDCO,SIGNAL("returnPressed()"),self.LESDCOReturnPressed) + + self.setTabOrder(self.LESDCO,self.tabuniqueinto) + self.setTabOrder(self.tabuniqueinto,self.bSup) + self.setTabOrder(self.bSup,self.bOk) + self.setTabOrder(self.bOk,self.bHelp) + + + def languageChange(self): + self.setCaption(self.__tr("DUnIn")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.Commentaire.setText(QString.null) + self.textLabel2_2.setText(self.__tr("

Nom du nouveau concept :

")) + self.textLabel2.setText(self.__tr("Un objet de type CO est attendu")) + self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur")) + + + def BSupPressed(self): + print "DUnSDCO.BSupPressed(): Not implemented yet" + + def ViewDoc(self): + print "DUnSDCO.ViewDoc(): Not implemented yet" + + def BOkPressed(self): + print "DUnSDCO.BOkPressed(): Not implemented yet" + + def LESDCOReturnPressed(self): + print "DUnSDCO.LESDCOReturnPressed(): Not implemented yet" + + def BOuiPressed(self): + print "DUnSDCO.BOuiPressed(): Not implemented yet" + + def BNonPressed(self): + print "DUnSDCO.BNonPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DUnSDCO",s,c) diff --git a/Ui/desUniqueSDCO.ui b/Ui/desUniqueSDCO.ui new file mode 100644 index 00000000..f847c8b5 --- /dev/null +++ b/Ui/desUniqueSDCO.ui @@ -0,0 +1,203 @@ + +DUnSDCO + + + DUnSDCO + + + + 0 + 0 + 461 + 480 + + + + + 350 + 0 + + + + DUnIn + + + + unnamed + + + + tabuniqueinto + + + + Widget8 + + + Saisir Valeur + + + + unnamed + + + + bSup + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bOk + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bHelp + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + Commentaire + + + + 311 + 30 + + + + + + + + + textLabel2_2 + + + <h1><font size="+2">Nom du nouveau concept : </font></h1> + + + + + LESDCO + + + + 300 + 40 + + + + + + textLabel2 + + + <font size="+1">Un objet de type CO est attendu</font> + + + + + + + + + + bHelp + clicked() + DUnSDCO + ViewDoc() + + + bOk + clicked() + DUnSDCO + BOkPressed() + + + bSup + clicked() + DUnSDCO + BSupPressed() + + + LESDCO + returnPressed() + DUnSDCO + LESDCOReturnPressed() + + + + LESDCO + tabuniqueinto + bSup + bOk + bHelp + + + BSupPressed() + ViewDoc() + BOkPressed() + LESDCOReturnPressed() + BOuiPressed() + BNonPressed() + + + diff --git a/Ui/desUniqueSDCOInto.py b/Ui/desUniqueSDCOInto.py new file mode 100644 index 00000000..4a7a9d24 --- /dev/null +++ b/Ui/desUniqueSDCOInto.py @@ -0,0 +1,151 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desUniqueSDCOInto.ui' +# +# Created: ven avr 4 11:27:09 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DUnSDCOInto(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DUnSDCOInto") + + self.setMinimumSize(QSize(350,0)) + + DUnSDCOIntoLayout = QGridLayout(self,1,1,11,6,"DUnSDCOIntoLayout") + + self.tabuniqueinto = QTabWidget(self,"tabuniqueinto") + + self.Widget8 = QWidget(self.tabuniqueinto,"Widget8") + Widget8Layout = QGridLayout(self.Widget8,1,1,11,6,"Widget8Layout") + + self.textLabel2 = QLabel(self.Widget8,"textLabel2") + + Widget8Layout.addMultiCellWidget(self.textLabel2,0,0,0,2) + + self.LBSDCO = QListBox(self.Widget8,"LBSDCO") + + Widget8Layout.addMultiCellWidget(self.LBSDCO,1,1,0,2) + + self.textLabel2_3 = QLabel(self.Widget8,"textLabel2_3") + + Widget8Layout.addMultiCellWidget(self.textLabel2_3,5,5,0,2) + + self.Commentaire = QLabel(self.Widget8,"Commentaire") + self.Commentaire.setMinimumSize(QSize(420,30)) + + Widget8Layout.addMultiCellWidget(self.Commentaire,4,4,0,2) + + layout3 = QGridLayout(None,1,1,0,6,"layout3") + + Widget8Layout.addMultiCellLayout(layout3,2,2,0,2) + + layout6 = QHBoxLayout(None,0,6,"layout6") + + self.frame3 = QFrame(self.Widget8,"frame3") + self.frame3.setMinimumSize(QSize(190,50)) + self.frame3.setFrameShape(QFrame.StyledPanel) + self.frame3.setFrameShadow(QFrame.Raised) + + self.textLabel2_2 = QLabel(self.frame3,"textLabel2_2") + self.textLabel2_2.setGeometry(QRect(20,10,150,30)) + layout6.addWidget(self.frame3) + + self.LESDCO = QLineEdit(self.Widget8,"LESDCO") + self.LESDCO.setMinimumSize(QSize(220,40)) + layout6.addWidget(self.LESDCO) + + Widget8Layout.addMultiCellLayout(layout6,3,3,0,2) + + self.bSup = QPushButton(self.Widget8,"bSup") + self.bSup.setMinimumSize(QSize(0,30)) + self.bSup.setAutoDefault(1) + + Widget8Layout.addWidget(self.bSup,6,0) + + self.bOk = QPushButton(self.Widget8,"bOk") + self.bOk.setMinimumSize(QSize(0,30)) + self.bOk.setAutoDefault(1) + self.bOk.setDefault(1) + + Widget8Layout.addWidget(self.bOk,6,1) + + self.bHelp = QPushButton(self.Widget8,"bHelp") + self.bHelp.setMinimumSize(QSize(0,30)) + self.bHelp.setAutoDefault(1) + + Widget8Layout.addWidget(self.bHelp,6,2) + self.tabuniqueinto.insertTab(self.Widget8,QString("")) + + DUnSDCOIntoLayout.addWidget(self.tabuniqueinto,0,0) + + self.languageChange() + + self.resize(QSize(482,480).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.bHelp,SIGNAL("clicked()"),self.ViewDoc) + self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed) + self.connect(self.bSup,SIGNAL("clicked()"),self.BSupPressed) + self.connect(self.LBSDCO,SIGNAL("clicked(QListBoxItem*)"),self.LBSDCOReturnPressed) + self.connect(self.LESDCO,SIGNAL("returnPressed()"),self.LESDCOReturnPressed) + + self.setTabOrder(self.LESDCO,self.LBSDCO) + self.setTabOrder(self.LBSDCO,self.tabuniqueinto) + self.setTabOrder(self.tabuniqueinto,self.bSup) + self.setTabOrder(self.bSup,self.bOk) + self.setTabOrder(self.bOk,self.bHelp) + + + def languageChange(self): + self.setCaption(self.__tr("DUnIn")) + self.textLabel2.setText(self.__trUtf8("\x3c\x66\x6f\x6e\x74\x20\x73\x69\x7a\x65\x3d\x22\x2b\x31\x22\x3e\x3c\x75\x3e\x53\x74\x72\x75\x63\x74\x75\x72\x65\x73\x20\x64\x65\x20\x64\x6f\x6e\x6e\xc3\xa9\x65\x73\x20\x64\x75\x20\x74\x79\x70\x65\x20\x72\x65\x71\x75\x69\x73\x20\x70\x61\x72\x20\x6c\x27\x6f\x62\x6a\x65\x74\x20\x63\x6f\x75\x72\x61\x6e\x74\x20\x3c\x2f\x75\x3e\x3c\x2f\x66\x6f\x6e\x74\x3e")) + self.textLabel2_3.setText(self.__tr("Un objet de type CO est attendu")) + self.Commentaire.setText(QString.null) + self.textLabel2_2.setText(self.__tr(" Nom concept : ")) + self.bSup.setText(self.__tr("&Supprimer")) + self.bSup.setAccel(self.__tr("Alt+S")) + QToolTip.add(self.bSup,self.__tr("suppression du mot clef")) + self.bOk.setText(self.__tr("&Valider")) + self.bOk.setAccel(self.__tr("Shift+A, Alt+A, Alt+A, Alt+A")) + QToolTip.add(self.bOk,self.__tr("validation de la saisie")) + self.bHelp.setText(self.__tr("&Documentation")) + self.bHelp.setAccel(self.__tr("Alt+D")) + QToolTip.add(self.bHelp,self.__tr("affichage documentation aster")) + self.tabuniqueinto.changeTab(self.Widget8,self.__tr("Saisir Valeur")) + + + def BSupPressed(self): + print "DUnSDCOInto.BSupPressed(): Not implemented yet" + + def ViewDoc(self): + print "DUnSDCOInto.ViewDoc(): Not implemented yet" + + def BOkPressed(self): + print "DUnSDCOInto.BOkPressed(): Not implemented yet" + + def LESDCOReturnPressed(self): + print "DUnSDCOInto.LESDCOReturnPressed(): Not implemented yet" + + def BOuiPressed(self): + print "DUnSDCOInto.BOuiPressed(): Not implemented yet" + + def BNonPressed(self): + print "DUnSDCOInto.BNonPressed(): Not implemented yet" + + def LBSDCOReturnPressed(self): + print "DUnSDCOInto.LBSDCOReturnPressed(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("DUnSDCOInto",s,c) + + def __trUtf8(self,s,c = None): + return qApp.translate("DUnSDCOInto",s,c,QApplication.UnicodeUTF8) diff --git a/Ui/desUniqueSDCOInto.ui b/Ui/desUniqueSDCOInto.ui new file mode 100644 index 00000000..3849072f --- /dev/null +++ b/Ui/desUniqueSDCOInto.ui @@ -0,0 +1,269 @@ + +DUnSDCOInto + + + DUnSDCOInto + + + + 0 + 0 + 482 + 480 + + + + + 350 + 0 + + + + DUnIn + + + + unnamed + + + + tabuniqueinto + + + + Widget8 + + + Saisir Valeur + + + + unnamed + + + + textLabel2 + + + <font size="+1"><u>Structures de données du type requis par l'objet courant </u></font> + + + + + LBSDCO + + + + + textLabel2_3 + + + <font size="+1">Un objet de type CO est attendu</font> + + + + + Commentaire + + + + 420 + 30 + + + + + + + + + layout3 + + + + unnamed + + + + + + layout6 + + + + unnamed + + + + frame3 + + + + 190 + 50 + + + + StyledPanel + + + Raised + + + + textLabel2_2 + + + + 20 + 10 + 150 + 30 + + + + <font size="+1"> Nom concept : </font> + + + + + + LESDCO + + + + 220 + 40 + + + + + + + + bSup + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + bOk + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + bHelp + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + + + + bHelp + clicked() + DUnSDCOInto + ViewDoc() + + + bOk + clicked() + DUnSDCOInto + BOkPressed() + + + bSup + clicked() + DUnSDCOInto + BSupPressed() + + + LBSDCO + clicked(QListBoxItem*) + DUnSDCOInto + LBSDCOReturnPressed() + + + LESDCO + returnPressed() + DUnSDCOInto + LESDCOReturnPressed() + + + + LESDCO + LBSDCO + tabuniqueinto + bSup + bOk + bHelp + + + BSupPressed() + ViewDoc() + BOkPressed() + LESDCOReturnPressed() + BOuiPressed() + BNonPressed() + LBSDCOReturnPressed() + + + diff --git a/Ui/desVisu.py b/Ui/desVisu.py new file mode 100644 index 00000000..09571531 --- /dev/null +++ b/Ui/desVisu.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desVisu.ui' +# +# Created: mar mar 25 10:05:09 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.13 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + + +class DVisu(QWidget): + def __init__(self,parent = None,name = None,fl = 0): + QWidget.__init__(self,parent,name,fl) + + if not name: + self.setName("DVisu") + + + DVisuLayout = QGridLayout(self,1,1,11,6,"DVisuLayout") + + self.TB = QTextBrowser(self,"TB") + + DVisuLayout.addWidget(self.TB,0,0) + + self.languageChange() + + self.resize(QSize(501,394).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + + def languageChange(self): + self.setCaption(self.__tr("Visualisation Include Materiau")) + + + def __tr(self,s,c = None): + return qApp.translate("DVisu",s,c) diff --git a/Ui/desVisu.ui b/Ui/desVisu.ui new file mode 100644 index 00000000..3f61d74a --- /dev/null +++ b/Ui/desVisu.ui @@ -0,0 +1,30 @@ + +DVisu + + + DVisu + + + + 0 + 0 + 501 + 394 + + + + Visualisation Include Materiau + + + + unnamed + + + + TB + + + + + + diff --git a/Ui/image120.gif b/Ui/image120.gif new file mode 100644 index 00000000..1834870b Binary files /dev/null and b/Ui/image120.gif differ diff --git a/Ui/image120.png b/Ui/image120.png new file mode 100644 index 00000000..264a9700 Binary files /dev/null and b/Ui/image120.png differ diff --git a/Ui/image240.gif b/Ui/image240.gif new file mode 100644 index 00000000..2ed58745 Binary files /dev/null and b/Ui/image240.gif differ diff --git a/Ui/makefile b/Ui/makefile new file mode 100644 index 00000000..430af331 --- /dev/null +++ b/Ui/makefile @@ -0,0 +1,15 @@ +PYUIC = pyuic +.PHONY : all +.SUFFIXES : .ui .py + + +PY_FILES = desChoixCata.py desCommande.py desCommentaire.py desError.py desFormule.py desInactif.py \ + desInclude.py desListeParam.py desMacro.py desMCFact.py desMCListAjout.py desParam.py \ + desPlusieursBase.py desPlusieursInto.py desPoursuite.py desRacine.py desSelectVal.py \ + desUniqueASSD.py desUniqueBase.py desUniqueComp.py desUniqueInto.py desUniqueSDCOInto.py \ + desUniqueSDCO.py desVisu.py myMain.py aideQT.py OptionsEditeur.py OptionsPdf.py + +%.py:%.ui + ${PYUIC} -o $@ $< + +all : $(PY_FILES) diff --git a/Ui/myMain.py b/Ui/myMain.py new file mode 100644 index 00000000..c19f1424 --- /dev/null +++ b/Ui/myMain.py @@ -0,0 +1,553 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'myMain.ui' +# +# Created: Thu Jun 19 11:40:51 2008 +# by: The PyQt User Interface Compiler (pyuic) 3.16 +# +# WARNING! All changes made in this file will be lost! + + +from qt import * + +image0_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \ + "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \ + "\x74\x49\x44\x41\x54\x38\x8d\xed\xd5\xc1\x09\xc0" \ + "\x20\x0c\x05\xd0\x6f\xe9\x36\x81\x2c\x10\xb2\xff" \ + "\xdd\x85\xd2\x53\x85\xb6\xa9\x91\x48\x0f\x05\x3f" \ + "\x08\x1a\xf0\x29\x12\x10\xf8\x28\xc5\xa9\xd9\xc4" \ + "\xde\x96\xcd\x2b\x9a\xd9\xeb\x00\x00\x66\x0e\x2f" \ + "\xe0\xc2\x51\x98\x39\xc4\xf7\x0c\x4c\x44\x6d\x5e" \ + "\x6b\x35\x38\xcf\x92\x82\x45\xe4\xb2\xf6\xf0\x14" \ + "\xac\xaa\x8f\xda\x1d\x4f\xc1\xa5\x74\x1b\x22\x07" \ + "\x9f\x9d\x11\x1d\x96\xea\x8a\x91\x2c\x78\xc1\x0b" \ + "\xee\x64\xe6\x07\x19\xf5\x7e\x92\x03\xad\x45\x2a" \ + "\x04\xcc\x4e\x50\x20\x00\x00\x00\x00\x49\x45\x4e" \ + "\x44\xae\x42\x60\x82" +image1_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \ + "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \ + "\x99\x49\x44\x41\x54\x38\x8d\xed\x94\x41\x0e\x85" \ + "\x20\x0c\x44\x5f\x89\xc7\x36\x7f\x61\xbc\x77\x5d" \ + "\x28\x48\xa4\x28\x60\xff\xce\xd9\x54\x8b\xbe\x8e" \ + "\x13\x04\x3e\x1d\x92\x81\x77\xf4\x81\xa1\x23\xdc" \ + "\x2b\x34\xf6\xf4\x7a\x3d\xe2\xb8\x65\xa8\x84\x3f" \ + "\x40\x01\x98\x2a\x0b\x3d\x5f\x62\xc5\x83\x00\xaa" \ + "\x1a\xd7\x05\x50\x44\x9a\xb9\xd5\x07\xa7\x73\xa8" \ + "\xa4\xba\x4f\x92\xa2\xdf\x33\x3c\x64\xc6\x3b\xeb" \ + "\xbd\x82\xe5\xb8\xad\xde\xcb\xcc\x78\x20\xeb\x42" \ + "\x66\xc6\x39\x74\x5d\xfa\x80\xf3\x6f\xaf\x66\xc6" \ + "\x6f\xa1\x9c\x3f\x88\x2f\xb4\x70\xec\x05\xcd\xc0" \ + "\xbe\xd0\x78\x93\xf6\x8e\x17\x14\x92\x63\x5f\x68" \ + "\x6c\x3e\xef\xf6\xba\x3c\x8f\xdd\x36\x6d\xc4\xc0" \ + "\x45\x2c\x87\x81\xf8\x08\x00\x00\x00\x00\x49\x45" \ + "\x4e\x44\xae\x42\x60\x82" +image2_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \ + "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \ + "\xa0\x49\x44\x41\x54\x38\x8d\xd5\x95\x4d\x0a\x80" \ + "\x20\x10\x85\x9f\xd1\x46\x68\xe1\x8d\xe6\x62\xd2" \ + "\x22\xbc\x98\x37\x6a\x21\xb4\xac\x45\x19\x92\xc6" \ + "\x64\x69\xe0\xb7\xf1\x87\xf1\xf1\x1c\x47\x05\x2a" \ + "\x21\x8e\x76\x2d\xad\xdb\xfb\x9e\x99\xf6\x56\x8f" \ + "\x80\xb5\x36\x4b\x85\x88\xce\x35\x44\x04\x00\xe8" \ + "\x0a\x39\x8c\xe8\xf9\x90\x34\xd2\x29\x2c\xc3\x7c" \ + "\x8e\xbd\x53\x0f\xeb\x58\x3a\x05\xe9\x54\x34\x1f" \ + "\x8a\x02\x7b\x2a\x7d\x3a\x1f\x09\xbf\x85\x4d\xc5" \ + "\xd5\xd9\x53\xaa\x39\x6e\x4f\x38\xca\xb1\x99\xe2" \ + "\xd2\xe1\x08\xab\xe1\x56\xf8\x2e\x30\x97\x7f\xcb" \ + "\x4d\x8f\xf9\x42\xd7\x5d\xbe\xbe\xd2\xe1\x43\x95" \ + "\x3a\x93\xf6\xca\xad\x3d\x61\x11\xf4\x4b\x7d\x4f" \ + "\x82\x0f\xf9\xc0\x06\x9b\xb5\x1e\xcd\xed\x31\x8c" \ + "\x5c\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60" \ + "\x82" +image3_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \ + "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \ + "\x73\x49\x44\x41\x54\x38\x8d\xed\x92\xc1\x0e\x80" \ + "\x20\x08\x40\xb1\xef\x66\x1d\x1c\xff\x4d\x87\x6a" \ + "\xa8\x88\xa1\x76\x69\xf9\x36\x0f\x28\x3e\xd8\x00" \ + "\x60\xf1\x59\x42\x5f\x3a\x71\xf5\x36\x02\xe0\x8e" \ + "\x99\x2b\x09\x88\x01\xd0\x28\x54\x17\x6a\xe4\x7f" \ + "\x21\xce\x1f\xb5\xb0\x5d\x38\xed\xdc\x90\x60\xd0" \ + "\xf1\x13\x79\x63\x5b\x3b\xc9\x2b\xd5\x18\xe2\x39" \ + "\xa9\x43\xec\x1d\x5a\xb7\x78\x5c\xee\x10\x7b\xe4" \ + "\xb2\x15\xaf\x40\x91\xf8\x94\xde\x47\x18\x1e\xce" \ + "\xa5\x9e\xde\x9e\xc5\x9f\x38\x00\x62\xac\x28\xb1" \ + "\xe3\xd7\x01\xd9\x00\x00\x00\x00\x49\x45\x4e\x44" \ + "\xae\x42\x60\x82" +image4_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \ + "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \ + "\x74\x49\x44\x41\x54\x38\x8d\xed\x92\xc1\x0a\xc0" \ + "\x20\x08\x40\x6d\xdf\x2d\x3b\x84\xff\xed\x0e\xa3" \ + "\x58\x6a\x26\xd1\x65\xe0\x83\x0e\xa5\x3e\x85\x04" \ + "\x48\x7e\x4b\x91\x0f\x54\x89\xf1\x9e\xa5\xa3\xca" \ + "\x0f\x8a\x89\x63\x65\xb3\x06\xc4\x2d\xd6\x13\xc6" \ + "\x49\xbd\xc2\x59\x83\x16\x13\x62\x19\xf0\xf9\x36" \ + "\xc0\xa2\xef\x00\xd7\x5a\x62\x61\x4d\x3a\xb2\x29" \ + "\x96\xf2\xa3\x62\xff\xa3\x37\xc5\xeb\xed\xe9\x62" \ + "\xaa\xd1\xa2\xe8\x4a\xaa\xa2\xf7\x50\xdd\x12\x74" \ + "\x8c\x0f\xd0\xab\x93\x24\x67\x78\x00\x59\x6e\x28" \ + "\xb1\x74\x3f\x46\x86\x00\x00\x00\x00\x49\x45\x4e" \ + "\x44\xae\x42\x60\x82" +image5_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \ + "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \ + "\x82\x49\x44\x41\x54\x38\x8d\xcd\xd3\x41\x12\x80" \ + "\x20\x08\x05\x50\xe8\xe0\x2e\xbc\x38\xad\x32\x73" \ + "\x50\x3e\x48\x53\x7f\xe3\xe4\x8c\x4f\x24\x25\xfa" \ + "\x28\xe2\x9c\x6f\x39\x92\x0b\xf9\x27\x6c\xb6\x01" \ + "\x85\x35\x88\x77\x61\x13\x88\xc2\x57\x64\x18\xcd" \ + "\xa0\x15\xf5\x20\xb4\xe6\xb5\x5b\xe1\x09\xdc\x06" \ + "\x22\xb8\xe2\x2a\xcf\x31\x05\x6e\x18\xdf\xdf\xf8" \ + "\x06\x06\xaa\x55\x1c\xc6\x35\x64\xc4\xdc\xf8\x0c" \ + "\xd0\x20\x1d\x57\x7a\x5c\x85\xa8\x84\x5f\xdc\x02" \ + "\x5e\xa5\x30\x7a\xfc\xcd\x07\xe2\x3a\x1d\xf2\x83" \ + "\xec\x2b\x37\xd9\xad\x5f\xb4\xdf\xef\xd4\x9c\xfb" \ + "\xf7\x2f\xac\x98\xc8\xcc\x89\x00\x00\x00\x00\x49" \ + "\x45\x4e\x44\xae\x42\x60\x82" +image6_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \ + "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \ + "\xbf\x49\x44\x41\x54\x38\x8d\xd5\x93\x41\x0a\x83" \ + "\x30\x10\x45\xdf\x48\x8e\xe5\x1d\xbc\x8c\x3b\xa9" \ + "\x8b\xf4\x6a\x9e\xab\xd3\x85\x35\x0d\x26\x63\x62" \ + "\x44\x4a\x3f\x0c\x42\x66\xfc\xf3\xf8\x24\xf0\x6f" \ + "\x12\x40\x2b\x66\xda\x8c\x55\xf3\xde\x22\x12\xcf" \ + "\x9d\x92\xcb\x98\xc0\xba\x2d\x7c\x45\x44\xcf\x9a" \ + "\x07\x63\x8b\xba\xd5\x3c\x44\x91\x23\x5e\xcf\x7c" \ + "\xc1\x62\x36\x97\xa9\x25\x40\xc1\x1f\xf4\xfd\xa7" \ + "\x52\x75\x01\x5d\x24\xa9\x38\x9e\x7d\x6f\x53\xdf" \ + "\x4f\xe4\xcc\xab\x32\x3e\xea\x0f\x03\xc0\xc4\xb2" \ + "\xa0\x71\x2c\xe6\xad\xd8\x9b\x59\xb7\x66\x1c\x3b" \ + "\xe0\x95\x98\x5f\x26\x16\x79\xee\x4e\xbc\xc2\x2c" \ + "\x97\x88\x55\x1f\xe6\xa2\xcb\xc4\x96\x9a\x89\x4b" \ + "\xcb\x6f\x23\xee\x36\x1a\xab\x62\xe2\x52\xc5\x72" \ + "\x94\xdf\xbf\xb6\x10\xbb\xf2\xc8\x97\xb8\xa4\x6c" \ + "\xc6\x67\x7e\xaa\x51\x95\x71\xfa\x08\x7e\xa8\x37" \ + "\x62\xda\x9a\xba\xcb\x20\x23\x5f\x00\x00\x00\x00" \ + "\x49\x45\x4e\x44\xae\x42\x60\x82" +image7_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \ + "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x00" \ + "\xd5\x49\x44\x41\x54\x38\x8d\xc5\x95\x5d\x0a\x84" \ + "\x30\x0c\x84\x27\xe2\xa9\x0a\x9e\x6c\x8b\x0f\x4b" \ + "\x3d\xd9\x82\xd7\xca\x3e\x58\xd7\xfe\x4c\xd0\xba" \ + "\x5d\x76\x40\x02\x4d\xf2\x65\xda\x0a\x05\x7e\x24" \ + "\x39\xc9\xeb\x8d\x9e\xaa\x88\x41\xa0\xc9\xaa\xd8" \ + "\xc8\x2a\xb3\x2f\x9c\x42\x5b\xe1\xe3\x0e\x0d\xcf" \ + "\x00\xc0\x03\x08\xf0\xb3\xa7\xa0\x74\x10\xa9\xd7" \ + "\x14\x2e\x00\xb4\x2c\x5a\x5f\xab\x69\x6b\x97\x9b" \ + "\x1c\x83\x7f\xc0\xc3\x16\xb6\xe4\x16\x5b\x64\xf7" \ + "\x8d\x71\x63\x59\x91\x9b\xdc\x45\x70\xde\x47\xc0" \ + "\x47\x32\xdd\x5e\x5b\xcc\x35\xf0\xc9\x77\x62\xae" \ + "\x78\x79\x36\xdc\xcf\x75\x13\x57\x7e\x79\xf4\x8c" \ + "\x4b\x27\xaa\x0f\x13\x27\xb2\x40\xf5\x11\x7f\xcb" \ + "\xe3\x48\xaa\x33\xb6\xe0\x22\x4b\x05\x4d\x07\x46" \ + "\xb8\x02\x5e\x2e\x3b\x3e\x73\xcd\xe0\xdd\x1c\x97" \ + "\xf0\x2e\x8e\xd9\xd0\xaf\x1d\xb3\x81\x22\x4b\xdf" \ + "\x33\xee\xe6\x98\xa9\x34\xa0\xf6\x17\xb4\x55\x40" \ + "\xd0\x0b\xcf\x4c\xa0\x8f\xc0\xdf\xf4\x06\xe3\x25" \ + "\xc1\x98\x1b\xc4\x18\x76\x00\x00\x00\x00\x49\x45" \ + "\x4e\x44\xae\x42\x60\x82" +image8_data = \ + "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d" \ + "\x49\x48\x44\x52\x00\x00\x00\x16\x00\x00\x00\x16" \ + "\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\x00\x00\x02" \ + "\x5d\x49\x44\x41\x54\x38\x8d\xd5\x93\xa1\x72\xdb" \ + "\x40\x10\x86\x3f\x67\x0a\x56\xec\xc4\x22\x78\xd0" \ + "\x65\x36\x93\xa0\xc2\x1c\x68\xd6\xc2\xe6\x0d\xf2" \ + "\x1a\x81\x81\x11\x34\x94\x99\xc2\x54\xa8\x32\x9b" \ + "\x55\xf0\xe0\x89\xdd\xb1\x5b\xa6\x02\xb7\x9d\x66" \ + "\x92\xd6\x99\xb6\xd3\x99\xfe\xe8\x6e\x67\xe7\xdb" \ + "\x7f\x77\xef\xe0\x7f\xd3\xe2\xc7\x4b\xd7\x75\xb3" \ + "\x73\x0e\xef\x3d\x51\x15\x00\x23\x82\xb5\x16\x6b" \ + "\x2d\x57\x57\x57\x8b\x17\x29\xbf\x02\xb7\x6d\x3b" \ + "\x0f\x87\x03\xb9\x2d\x58\xae\xd7\x60\x04\x00\xef" \ + "\x1c\xe3\xc7\x03\x06\xa8\xaa\x8a\xeb\xeb\xeb\x57" \ + "\xc1\x17\xdf\xa0\x6d\xdb\x52\x5d\xd7\x54\xef\xb6" \ + "\x00\xa8\x2a\x49\x13\x8a\x12\x35\x32\xec\x3a\xc4" \ + "\x2b\x9b\xcd\xe6\x55\xce\x2f\xfa\xbe\x9f\x87\xc3" \ + "\x40\xfd\xe1\x3d\xcb\x4d\x8d\xaa\xa2\x4e\x48\xee" \ + "\x12\xc6\x82\x38\x08\xc1\x07\x96\x9b\x1a\x8a\x9c" \ + "\xe3\xf1\xf8\xaa\x51\x5c\x38\xe7\xc8\xad\xa5\xaa" \ + "\x6b\x00\xc4\x5f\x12\x9c\x67\xd2\x23\x93\x8c\x88" \ + "\xe6\xc8\x60\xd1\x18\xb1\xd5\x92\xd1\x39\xba\xae" \ + "\x9b\xcf\x83\xa7\x89\x65\xb5\x46\x51\x34\x80\x1b" \ + "\x1d\x2e\x1f\x49\x45\xc0\xe3\x50\x09\x64\x08\xea" \ + "\x15\x44\x90\xc2\xe0\xbd\x3f\xef\x58\x53\xc2\xe4" \ + "\x86\xa0\x01\x9f\x4d\x84\xf5\x84\x18\x41\x83\x62" \ + "\xb0\x40\x8e\x8b\x23\xc9\x24\x50\x10\x93\x31\x4d" \ + "\xd3\x59\xf0\x1b\x80\x98\x14\x11\x20\x25\x14\x40" \ + "\x15\xf1\x96\x4c\x0b\xbc\x1b\x48\x4b\x07\xe4\x68" \ + "\x88\x80\xc0\x29\xeb\xd7\x8e\x41\x41\xf5\xb4\x34" \ + "\xfd\x76\x86\x4c\x05\x3f\x1e\x08\x4b\x0f\x85\x80" \ + "\x26\x54\x40\x63\x40\x44\xce\x83\x8b\xbc\xc0\x39" \ + "\x87\xa6\x13\x50\xa3\xa2\x28\x5e\x1d\x5a\x44\x14" \ + "\xd0\x70\x8a\xa5\x98\x08\x21\x62\xad\x3d\x0f\xb6" \ + "\xd6\xe2\x87\xcf\xa4\x98\x50\x8d\x27\x40\x50\x44" \ + "\x73\x70\x42\x8c\x91\xaf\x8d\x10\xfd\x44\x81\x60" \ + "\x8c\x39\x0b\x5e\x00\xdc\xdd\xdd\xcd\x8e\x80\xa9" \ + "\xde\x42\x02\x48\xe8\x04\x84\x08\x56\xf0\x3e\x02" \ + "\x90\x7d\x72\x94\x65\xc9\xba\x5a\xe3\x46\x87\x31" \ + "\xe6\xa7\x9f\xe5\x02\x60\xb5\x5a\x61\x02\xc4\xee" \ + "\x40\xa6\x89\x4c\x33\xf2\xcb\x0c\xb1\x06\x51\x28" \ + "\x14\xf8\xf8\x99\xb2\x2c\xb9\xb9\xb9\x59\xb8\xd1" \ + "\xf1\xf8\xf8\x48\xd3\x34\xb4\x6d\xfb\xe2\x9b\xfe" \ + "\x5e\xad\xef\xfb\xf9\x78\x3c\x32\x3a\x87\x18\x81" \ + "\xec\xb4\x20\x0d\x11\x51\xa8\xeb\x9a\xed\x76\xbb" \ + "\x00\x18\x86\x61\xee\xba\x8e\xfd\x7e\x8f\x31\x86" \ + "\xed\x76\xcb\x6a\xb5\x7a\xe2\xfe\x59\x1b\x5d\xd7" \ + "\xcd\xde\x7b\x62\x8c\x88\x08\x79\x9e\x63\xad\xa5" \ + "\xaa\xaa\x67\xb9\xbb\xdd\x6e\x6e\x9a\x06\xef\x3d" \ + "\x75\x5d\x3f\x29\xfe\xc7\xea\xfb\x7e\xbe\xbd\xbd" \ + "\x9d\xad\xb5\x73\x59\x96\xf3\xfd\xfd\xfd\xfc\xa2" \ + "\xe3\xdf\xd5\xc3\xc3\xc3\xdc\x34\x0d\xd3\x34\xb1" \ + "\xd9\x6c\xfe\x1e\x18\x4e\x63\xdc\xef\xf7\xa4\x94" \ + "\xfe\x26\xf6\x1f\xe9\x0b\xbc\x4c\x5e\x59\xd6\x14" \ + "\xca\xf4\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42" \ + "\x60\x82" + +class Eficas(QMainWindow): + def __init__(self,parent = None,name = None,fl = 0): + QMainWindow.__init__(self,parent,name,fl) + self.statusBar() + + self.image0 = QPixmap() + self.image0.loadFromData(image0_data,"PNG") + self.image1 = QPixmap() + self.image1.loadFromData(image1_data,"PNG") + self.image2 = QPixmap() + self.image2.loadFromData(image2_data,"PNG") + self.image3 = QPixmap() + self.image3.loadFromData(image3_data,"PNG") + self.image4 = QPixmap() + self.image4.loadFromData(image4_data,"PNG") + self.image5 = QPixmap() + self.image5.loadFromData(image5_data,"PNG") + self.image6 = QPixmap() + self.image6.loadFromData(image6_data,"PNG") + self.image7 = QPixmap() + self.image7.loadFromData(image7_data,"PNG") + self.image8 = QPixmap() + self.image8.loadFromData(image8_data,"PNG") + if not name: + self.setName("Eficas") + + self.setEnabled(1) + self.setSizePolicy(QSizePolicy(QSizePolicy.Minimum,QSizePolicy.Minimum,0,0,self.sizePolicy().hasHeightForWidth())) + self.setMinimumSize(QSize(21,336)) + self.setBackgroundOrigin(QMainWindow.WidgetOrigin) + f = QFont(self.font()) + self.setFont(f) + + self.setCentralWidget(QWidget(self,"qt_central_widget")) + + self.line1 = QFrame(self.centralWidget(),"line1") + self.line1.setGeometry(QRect(-30,-10,930,20)) + self.line1.setFrameShape(QFrame.HLine) + self.line1.setFrameShadow(QFrame.Sunken) + self.line1.setFrameShape(QFrame.HLine) + + self.fileNewAction = QAction(self,"fileNewAction") + self.fileNewAction.setIconSet(QIconSet(self.image0)) + self.fileOpenAction = QAction(self,"fileOpenAction") + self.fileOpenAction.setIconSet(QIconSet(self.image1)) + self.fileSaveAction = QAction(self,"fileSaveAction") + self.fileSaveAction.setIconSet(QIconSet(self.image2)) + self.fileSaveAsAction = QAction(self,"fileSaveAsAction") + self.fileExitAction = QAction(self,"fileExitAction") + self.editUndoAction = QAction(self,"editUndoAction") + self.editUndoAction.setEnabled(0) + self.editUndoAction.setIconSet(QIconSet(self.image3)) + self.editRedoAction = QAction(self,"editRedoAction") + self.editRedoAction.setEnabled(0) + self.editRedoAction.setIconSet(QIconSet(self.image4)) + self.editCutAction = QAction(self,"editCutAction") + self.editCutAction.setIconSet(QIconSet(self.image5)) + self.editCopyAction = QAction(self,"editCopyAction") + self.editCopyAction.setIconSet(QIconSet(self.image6)) + self.editPasteAction = QAction(self,"editPasteAction") + self.editPasteAction.setIconSet(QIconSet(self.image7)) + self.jdcFichierResultatAction = QAction(self,"jdcFichierResultatAction") + self.jdcFichierResultatAction.setEnabled(1) + self.jdcFichierResultatAction.setIconSet(QIconSet(self.image8)) + self.helpContentsAction = QAction(self,"helpContentsAction") + self.helpIndexAction = QAction(self,"helpIndexAction") + self.helpAboutAction = QAction(self,"helpAboutAction") + self.helpAboutAction.setOn(0) + self.fileSaveCloseAction = QAction(self,"fileSaveCloseAction") + self.fileCloseAction = QAction(self,"fileCloseAction") + self.fileNewViewAction = QAction(self,"fileNewViewAction") + self.fileNewViewAction.setEnabled(0) + self.fileCloseAllAction = QAction(self,"fileCloseAllAction") + self.jdcRapportDeValidationAction = QAction(self,"jdcRapportDeValidationAction") + self.jdcFichierSourceAction = QAction(self,"jdcFichierSourceAction") + self.traduitV7V8Action = QAction(self,"traduitV7V8Action") + self.aidenew_itemAction = QAction(self,"aidenew_itemAction") + self.fileNewInclude = QAction(self,"fileNewInclude") + self.optionEditeurAction = QAction(self,"optionEditeurAction") + self.optionPdfAction = QAction(self,"optionPdfAction") + + + self.toolBar = QToolBar(QString(""),self,Qt.DockTop) + + self.toolBar.setFrameShape(QToolBar.MenuBarPanel) + self.toolBar.setHorizontallyStretchable(0) + self.fileNewAction.addTo(self.toolBar) + self.fileSaveAction.addTo(self.toolBar) + self.fileOpenAction.addTo(self.toolBar) + self.fileSaveAsAction.addTo(self.toolBar) + self.editCutAction.addTo(self.toolBar) + self.editPasteAction.addTo(self.toolBar) + self.jdcFichierResultatAction.addTo(self.toolBar) + self.fileExitAction.addTo(self.toolBar) + self.toolBar.addSeparator() + + + self.MenuBar = QMenuBar(self,"MenuBar") + + self.MenuBar.setMargin(2) + + self.Fichier = QPopupMenu(self) + self.fileNewAction.addTo(self.Fichier) + self.fileNewInclude.addTo(self.Fichier) + self.fileOpenAction.addTo(self.Fichier) + self.fileSaveAction.addTo(self.Fichier) + self.fileSaveAsAction.addTo(self.Fichier) + self.fileCloseAction.addTo(self.Fichier) + self.fileCloseAllAction.addTo(self.Fichier) + self.Fichier.insertSeparator() + self.Fichier.insertSeparator() + self.fileExitAction.addTo(self.Fichier) + self.MenuBar.insertItem(QString(""),self.Fichier,2) + + self.Edition = QPopupMenu(self) + self.Edition.insertSeparator() + self.editCutAction.addTo(self.Edition) + self.editCopyAction.addTo(self.Edition) + self.editPasteAction.addTo(self.Edition) + self.MenuBar.insertItem(QString(""),self.Edition,3) + + self.JdC = QPopupMenu(self) + self.jdcRapportDeValidationAction.addTo(self.JdC) + self.jdcFichierSourceAction.addTo(self.JdC) + self.jdcFichierResultatAction.addTo(self.JdC) + self.MenuBar.insertItem(QString(""),self.JdC,4) + + self.Aide = QPopupMenu(self) + self.aidenew_itemAction.addTo(self.Aide) + self.MenuBar.insertItem(QString(""),self.Aide,5) + + self.Options = QPopupMenu(self) + self.optionEditeurAction.addTo(self.Options) + self.optionPdfAction.addTo(self.Options) + self.MenuBar.insertItem(QString(""),self.Options,6) + + self.Traduction = QPopupMenu(self) + self.traduitV7V8Action.addTo(self.Traduction) + self.MenuBar.insertItem(QString(""),self.Traduction,7) + + self.Patrons = QPopupMenu(self) + self.MenuBar.insertItem(QString(""),self.Patrons,8) + + + self.languageChange() + + self.resize(QSize(902,594).expandedTo(self.minimumSizeHint())) + self.clearWState(Qt.WState_Polished) + + self.connect(self.fileNewAction,SIGNAL("activated()"),self.fileNew) + self.connect(self.fileOpenAction,SIGNAL("activated()"),self.fileOpen) + self.connect(self.fileSaveAction,SIGNAL("activated()"),self.fileSave) + self.connect(self.fileSaveAsAction,SIGNAL("activated()"),self.fileSaveAs) + self.connect(self.fileExitAction,SIGNAL("activated()"),self.fileExit) + self.connect(self.editUndoAction,SIGNAL("activated()"),self.editUndo) + self.connect(self.editRedoAction,SIGNAL("activated()"),self.editRedo) + self.connect(self.editCutAction,SIGNAL("activated()"),self.editCut) + self.connect(self.editPasteAction,SIGNAL("activated()"),self.editPaste) + self.connect(self.jdcFichierResultatAction,SIGNAL("activated()"),self.visuJdcPy) + self.connect(self.helpIndexAction,SIGNAL("activated()"),self.helpIndex) + self.connect(self.helpContentsAction,SIGNAL("activated()"),self.helpContents) + self.connect(self.helpAboutAction,SIGNAL("activated()"),self.helpAbout) + self.connect(self.fileCloseAction,SIGNAL("activated()"),self.fileClose) + self.connect(self.fileNewViewAction,SIGNAL("activated()"),self.fileNewView) + self.connect(self.fileCloseAllAction,SIGNAL("activated()"),self.fileCloseAll) + self.connect(self.editCopyAction,SIGNAL("activated()"),self.editCopy) + self.connect(self.jdcRapportDeValidationAction,SIGNAL("activated()"),self.jdcRapport) + self.connect(self.jdcFichierSourceAction,SIGNAL("activated()"),self.jdcFichierSource) + self.connect(self.traduitV7V8Action,SIGNAL("activated()"),self.traductionV7V8) + self.connect(self.aidenew_itemAction,SIGNAL("activated()"),self.helpAbout) + self.connect(self.fileNewInclude,SIGNAL("activated()"),self.NewInclude) + self.connect(self.optionEditeurAction,SIGNAL("activated()"),self.optionEditeur) + self.connect(self.optionPdfAction,SIGNAL("activated()"),self.optionPdf) + + + def languageChange(self): + self.setCaption(self.__tr("Eficas ")) + self.fileNewAction.setText(self.__tr("Nouveau")) + self.fileNewAction.setMenuText(self.__tr("&Nouveau")) + self.fileNewAction.setAccel(self.__tr("Ctrl+N")) + self.fileOpenAction.setText(self.__tr("Ouvrir")) + self.fileOpenAction.setMenuText(self.__tr("&Ouvrir")) + self.fileOpenAction.setAccel(self.__tr("Ctrl+O")) + self.fileSaveAction.setText(self.__tr("Enregistrer")) + self.fileSaveAction.setMenuText(self.__tr("&Enregistrer")) + self.fileSaveAction.setAccel(self.__tr("Ctrl+E")) + self.fileSaveAsAction.setText(self.__tr("Enregistrer Sous")) + self.fileSaveAsAction.setMenuText(self.__tr("Enregistrer Sous")) + self.fileSaveAsAction.setAccel(QString.null) + self.fileExitAction.setText(self.__tr("Quitter")) + self.fileExitAction.setMenuText(self.__tr("Q&uitter")) + self.fileExitAction.setAccel(QString.null) + self.editUndoAction.setText(self.__tr("Undo")) + self.editUndoAction.setMenuText(self.__tr("&Undo")) + self.editUndoAction.setAccel(self.__tr("Ctrl+Z")) + self.editRedoAction.setText(self.__tr("Redo")) + self.editRedoAction.setMenuText(self.__tr("&Redo")) + self.editRedoAction.setAccel(self.__tr("Ctrl+Y")) + self.editCutAction.setText(self.__tr("Couper")) + self.editCutAction.setMenuText(self.__tr("C&ouper")) + self.editCutAction.setAccel(self.__tr("Ctrl+X")) + self.editCopyAction.setText(self.__tr("Copier")) + self.editCopyAction.setMenuText(self.__tr("&Copier")) + self.editCopyAction.setAccel(self.__tr("Ctrl+C")) + self.editPasteAction.setText(self.__tr("Coller")) + self.editPasteAction.setMenuText(self.__tr("&Coller")) + self.editPasteAction.setAccel(self.__tr("Ctrl+V")) + self.jdcFichierResultatAction.setText(self.__tr("Fichier Resultat")) + self.jdcFichierResultatAction.setMenuText(self.__tr("Fichier Resultat")) + self.jdcFichierResultatAction.setAccel(self.__tr("Ctrl+F")) + self.helpContentsAction.setText(self.__tr("Contents")) + self.helpContentsAction.setMenuText(self.__tr("&Contents...")) + self.helpContentsAction.setAccel(QString.null) + self.helpIndexAction.setText(self.__tr("Index")) + self.helpIndexAction.setMenuText(self.__tr("&Index...")) + self.helpIndexAction.setAccel(QString.null) + self.helpAboutAction.setText(self.__tr("About")) + self.helpAboutAction.setMenuText(self.__tr("&About")) + self.helpAboutAction.setAccel(QString.null) + self.fileSaveCloseAction.setText(self.__tr("Fermer")) + self.fileSaveCloseAction.setMenuText(self.__tr("Fermer")) + self.fileCloseAction.setText(self.__tr("Fermer")) + self.fileCloseAction.setMenuText(self.__tr("Fermer")) + self.fileCloseAction.setAccel(self.__tr("Ctrl+W")) + self.fileNewViewAction.setText(self.__tr("New view")) + self.fileCloseAllAction.setText(self.__tr("Tout Fermer")) + self.fileCloseAllAction.setMenuText(self.__tr("Tout Fermer")) + self.jdcRapportDeValidationAction.setText(self.__tr("Rapport de validation")) + self.jdcRapportDeValidationAction.setMenuText(self.__tr("Rapport de validation")) + self.jdcRapportDeValidationAction.setAccel(self.__tr("Ctrl+R")) + self.jdcFichierSourceAction.setText(self.__tr("Fichier source")) + self.jdcFichierSourceAction.setMenuText(self.__tr("Fichier source")) + self.jdcFichierSourceAction.setAccel(self.__tr("Ctrl+B")) + self.traduitV7V8Action.setText(self.__tr("traduitV7V8")) + self.traduitV7V8Action.setMenuText(self.__tr("traduitV7V8")) + self.aidenew_itemAction.setText(self.__tr("Eficas")) + self.fileNewInclude.setText(self.__tr("Nouvel Include")) + self.fileNewInclude.setMenuText(self.__tr("Nouvel Include")) + self.optionEditeurAction.setText(self.__tr("Parametres Eficas")) + self.optionEditeurAction.setMenuText(self.__tr("Parametres Eficas")) + self.optionPdfAction.setText(self.__tr("Lecteur Pdf")) + self.optionPdfAction.setMenuText(self.__tr("Lecteur Pdf")) + self.toolBar.setLabel(self.__tr("Tools")) + if self.MenuBar.findItem(2): + self.MenuBar.findItem(2).setText(self.__tr("&Fichier")) + if self.MenuBar.findItem(3): + self.MenuBar.findItem(3).setText(self.__tr("&Edition")) + if self.MenuBar.findItem(4): + self.MenuBar.findItem(4).setText(self.__tr("JdC")) + if self.MenuBar.findItem(5): + self.MenuBar.findItem(5).setText(self.__tr("&Aide")) + if self.MenuBar.findItem(6): + self.MenuBar.findItem(6).setText(self.__tr("Options")) + if self.MenuBar.findItem(7): + self.MenuBar.findItem(7).setText(self.__tr("Traduction")) + if self.MenuBar.findItem(8): + self.MenuBar.findItem(8).setText(self.__tr("Patrons")) + + + def fileNew(self): + print "Eficas.fileNew(): Not implemented yet" + + def fileOpen(self): + print "Eficas.fileOpen(): Not implemented yet" + + def fileSave(self): + print "Eficas.fileSave(): Not implemented yet" + + def fileSaveAs(self): + print "Eficas.fileSaveAs(): Not implemented yet" + + def filePrint(self): + print "Eficas.filePrint(): Not implemented yet" + + def fileExit(self): + print "Eficas.fileExit(): Not implemented yet" + + def editUndo(self): + print "Eficas.editUndo(): Not implemented yet" + + def editRedo(self): + print "Eficas.editRedo(): Not implemented yet" + + def jdcFichierSource(self): + print "Eficas.jdcFichierSource(): Not implemented yet" + + def fileNewView(self): + print "Eficas.fileNewView(): Not implemented yet" + + def editPaste(self): + print "Eficas.editPaste(): Not implemented yet" + + def visuJdcPy(self): + print "Eficas.visuJdcPy(): Not implemented yet" + + def helpIndex(self): + print "Eficas.helpIndex(): Not implemented yet" + + def helpContents(self): + print "Eficas.helpContents(): Not implemented yet" + + def helpAbout(self): + print "Eficas.helpAbout(): Not implemented yet" + + def fileClose(self): + print "Eficas.fileClose(): Not implemented yet" + + def fileCloseAll(self): + print "Eficas.fileCloseAll(): Not implemented yet" + + def jdcRapport(self): + print "Eficas.jdcRapport(): Not implemented yet" + + def editCut(self): + print "Eficas.editCut(): Not implemented yet" + + def editCopy(self): + print "Eficas.editCopy(): Not implemented yet" + + def traductionV7V8(self): + print "Eficas.traductionV7V8(): Not implemented yet" + + def NewInclude(self): + print "Eficas.NewInclude(): Not implemented yet" + + def optionEditeur(self): + print "Eficas.optionEditeur(): Not implemented yet" + + def optionPdf(self): + print "Eficas.optionPdf(): Not implemented yet" + + def __tr(self,s,c = None): + return qApp.translate("Eficas",s,c) diff --git a/Ui/myMain.ui b/Ui/myMain.ui new file mode 100644 index 00000000..51aee702 --- /dev/null +++ b/Ui/myMain.ui @@ -0,0 +1,710 @@ + +Eficas + + + Eficas + + + true + + + + 0 + 0 + 902 + 594 + + + + + 21 + 349 + + + + WidgetOrigin + + + + + + + Eficas + + + + line1 + + + + -30 + -10 + 930 + 20 + + + + HLine + + + Sunken + + + Horizontal + + + + + + MenuBar + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + toolBar + + + MenuBarPanel + + + false + + + Tools + + + + + + + + + + + + + + + + fileNewAction + + + image0 + + + Nouveau + + + &Nouveau + + + Ctrl+N + + + + + fileOpenAction + + + image1 + + + Ouvrir + + + &Ouvrir + + + Ctrl+O + + + + + fileSaveAction + + + image2 + + + Enregistrer + + + Enregistrer + + + Ctrl+S + + + + + fileSaveAsAction + + + Enregistrer Sous + + + Enregistrer Sous + + + + + + + + fileExitAction + + + Quitter + + + Q&uitter + + + + + + + + editUndoAction + + + false + + + image3 + + + Undo + + + &Undo + + + Ctrl+Z + + + + + editRedoAction + + + false + + + image4 + + + Redo + + + &Redo + + + Ctrl+Y + + + + + editCutAction + + + image5 + + + Couper + + + C&ouper + + + Ctrl+X + + + + + editCopyAction + + + image6 + + + Copier + + + &Copier + + + Ctrl+C + + + + + editPasteAction + + + image7 + + + Coller + + + &Coller + + + Ctrl+V + + + + + jdcFichierResultatAction + + + true + + + image8 + + + Fichier Resultat + + + Fichier Resultat + + + Ctrl+F + + + + + helpContentsAction + + + Contents + + + &Contents... + + + + + + + + helpIndexAction + + + Index + + + &Index... + + + + + + + + helpAboutAction + + + false + + + About + + + &About + + + + + + + + fileSaveCloseAction + + + Fermer + + + Fermer + + + + + fileCloseAction + + + Fermer + + + Fermer + + + Ctrl+W + + + + + fileNewViewAction + + + false + + + New view + + + + + fileCloseAllAction + + + Tout Fermer + + + Tout Fermer + + + + + jdcRapportDeValidationAction + + + Rapport de validation + + + Rapport de validation + + + Ctrl+R + + + + + jdcFichierSourceAction + + + Fichier source + + + Fichier source + + + Ctrl+B + + + + + traduitV7V8Action + + + traduitV7V8 + + + traduitV7V8 + + + + + traduitV8V9Action + + + traduitV8V9 + + + traduitV8V9 + + + + + aidenew_itemAction + + + Eficas + + + + + fileNewInclude + + + Nouvel Include + + + Nouvel Include + + + + + optionEditeurAction + + + Parametres Eficas + + + Parametres Eficas + + + + + optionPdfAction + + + Lecteur Pdf + + + Lecteur Pdf + + + + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000007449444154388dedd5c109c0200c05d06fe936812c10b2ffdd85d25385b6a991480f053f081af0291210f828c5a9d9c4de96cd2b9ad9eb0000660e2fe0c2519839c4f70c4c446d5e6b3538cf928245e4b2f6f014acaa8fda1d4fc1a5741b22079f9d111d96ea8a912c78c10bee64e60719f57e9203ad452a04cc4e50200000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000009949444154388ded94410e85200c445f89c7367f61bc775d2848a42860ffced9548bbe8e13043e1d928177f481a123dc2b34f6f47a3de2b865a8843f4001982a0b3d5f62c58300aa1ad70550449ab9d507a773a8a4ba4f92a2df333c64c63bebbd82e5b8addecbcc7820eb4266c639745dfa80f36faf66c66fa19c3f882fb470ec05cdc0bed07893f68e171492635f686c3eeff6ba3c8fdd366dc4c0452c8781f8080000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000a049444154388dd5954d0a802010859fd14668e18de662d222bc98376a21b4ac451992c66469e0b7f187f1f11c47052a218e762daddbfb9e99f6568f80b5364b8588ce35440400e80a398ce8f99034d2292cc37c8ebd530feb583a05e954341f8a027b2a7d3a1f09bf854dc5d5d953aa396e4f38cab199e2d2e108abe156f82e30977fcb4d8ff942d75dbebed2e143953a93f6caad3d6111f44b7d4f820ff9c0069bb51ecded318c5c0000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000007349444154388ded92c10e80200840b1ef661d1cff4d876aa888a17669f9360f283ed80060f159425f3a71f53602e08e992b098801d02854176ae47f21ce1fb5b05d38eddc9060d0f11379635b3bc92bd518e239a943ec1d5ab7785cee107be4b215af4091f894de47181ecea59ede9ec59f380062ac28b1e3d701d90000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000007449444154388ded92c10ac02008406ddf2d3b84ffed0ea3586a26d165e0830ea53e8504487e4b910f5489f19ea5a3ca0f8a896365b306c42dd613c649bdc2598316136219f0f936c0a2ef00d75a62614d3ab22996f2a362ffa337c5ebede962aad1a2e84aaaa2f750dd12748c0fd0ab9324677800596e28b1743f46860000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000008249444154388dcdd341128020080550e8e02ebc38ad3273503e48537fe3e48c4f2425fa28e29c6f39920bf9276cb60185358877611388c2576418cda015f520b4e6b55be109dc0622b8e22acf31056e18dfdff80606aa551cc63564c4dcf80cd0201d577a5c85a8845fdc025ea5307afccd07e23a1df283ec2b37d9ad5fb4dfefd49cfbf72fac98c8cc890000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000bf49444154388dd593410a83301045df488ee51dbc8c3ba98bf46a9eabd385350d266362444a3f0c4266fcf3f824f06f12402b66da8c55f3de2212cf9d92cb98c0ba2d7c4544cf9a07638bbad53c4491235ecf7cc1623697a92540c11ff4fda75275015d24a9389e7d6f53df4fe4ccab323eea0f03c0c4b2a0712ce6add89b59b7661c3be095985f261679ee4ebcc22c9788551fe6a2cbc4969a894bcb6f23ee361aab62e252c57294dfbfb610bbf2c897b8a46cc6677eaa519571fa087ea83762da9abacb20235f0000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000d549444154388dc5955d0a84300c8427e2a90a9e6c8b0f4b3dd982d7ca3e58d7fe4cd0ba5d7640024df265da0a057e2439c9eb8d9eaa8841a0c9aad8c82ab32f9c425be1e30e0dcf00c00308f0b3a7a07410a9d7142e00b42c5a5fab696b979b1c837fc0c316b6e4165b64f78d716359919bdc4570de47c04732dd5e5bcc35f0c97762ae787936dccf7513577e79f48c4b27aa0f1327b240f5117fcbe348aa33b6e0224b054d0746b8025e2e3b3e73cde0dd1c97f02e8ed9d0af1db381224bdf33eee698a934a0f617b45540d00bcf4ca08fc0dff406e325c1981bc418760000000049454e44ae426082 + + + 89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000025d49444154388dd593a172db4010863f670a56ecc42278d0653693a0c21c68d6c2e60df21a818111349499c254a8329b55f0e089ddb15ba602b79d6692d699b6d399fee86e67e7db7f77efe07fd3e2c74bd775b3730eef3d5115002382b5166b2d5757578b1729bf02b76d3b0f8703b92d58aed7600400ef1ce3c70306a8aa8aebebeb57c117dfa06ddb525dd754efb600a82a49138a123532ec3ac42b9bcde655ce2ffabe9f87c340fde13dcb4d8daaa24e48ee12c6823808c107969b1a8a9ce3f1f8aa515c38e7c8ada5aa6b00c45f129c67d223938c88e6c860d118b1d592d139baae9bcf83a78965b5465134801b1d2e1f4945c0e350096408ea154490c2e0bd3fef5853c2e486a0019f4d84f58418418362b0408e8b23c924501093314dd359f01b809814112025144015f1964c0bbc1b484b07e4688880c029ebd78e4141f5b434fd76864c053f1e084b0f8580265440634044ce838bbcc03987a61350a3a2285e1d5a4414d0708aa598082162ad3d0fb6d6e287cfa498508d274050447370428c91af8d10fd4481608c390b5e00dcddddcd8e80a9de420248e804840856f03e02907d729465c9ba5ae3468731e6a79fe50260b55a6102c4ee40a6894c33f2cb0cb106512814f8f899b22cb9b9b959b8d1f1f8f848d334b46dfbe29bfe5eadeffbf9783c323a871881ecb4200d1151a8eb9aed76bb00188661eeba8efd7e8f3186ed76cb6ab57ae2fe591b5dd7cdde7b628c8808799e63ada5aaaa67b9bbdd6e6e9a06ef3d755d3f29fec7eafb7ebebdbd9dadb5735996f3fdfdfdfca2e3dfd5c3c3c3dc340dd334b1d96cfe1e184e63dceff7a494fe26f61fe90bbc4c5e59d614caf40000000049454e44ae426082 + + + + + fileNewAction + activated() + Eficas + fileNew() + + + fileOpenAction + activated() + Eficas + fileOpen() + + + fileSaveAction + activated() + Eficas + fileSave() + + + fileSaveAsAction + activated() + Eficas + fileSaveAs() + + + fileExitAction + activated() + Eficas + fileExit() + + + editUndoAction + activated() + Eficas + editUndo() + + + editRedoAction + activated() + Eficas + editRedo() + + + editCutAction + activated() + Eficas + editCut() + + + editPasteAction + activated() + Eficas + editPaste() + + + jdcFichierResultatAction + activated() + Eficas + visuJdcPy() + + + helpIndexAction + activated() + Eficas + helpIndex() + + + helpContentsAction + activated() + Eficas + helpContents() + + + helpAboutAction + activated() + Eficas + helpAbout() + + + fileCloseAction + activated() + Eficas + fileClose() + + + fileNewViewAction + activated() + Eficas + fileNewView() + + + fileCloseAllAction + activated() + Eficas + fileCloseAll() + + + editCopyAction + activated() + Eficas + editCopy() + + + jdcRapportDeValidationAction + activated() + Eficas + jdcRapport() + + + jdcFichierSourceAction + activated() + Eficas + jdcFichierSource() + + + traduitV7V8Action + activated() + Eficas + traductionV7V8() + + + traduitV8V9Action + activated() + Eficas + traductionV8V9() + + + aidenew_itemAction + activated() + Eficas + helpAbout() + + + fileNewInclude + activated() + Eficas + NewInclude() + + + optionEditeurAction + activated() + Eficas + optionEditeur() + + + optionPdfAction + activated() + Eficas + optionPdf() + + + + fileNew() + fileOpen() + fileSave() + fileSaveAs() + filePrint() + fileExit() + editUndo() + editRedo() + jdcFichierSource() + fileNewView() + editPaste() + visuJdcPy() + helpIndex() + helpContents() + helpAbout() + fileClose() + fileCloseAll() + jdcRapport() + editCut() + editCopy() + traductionV7V8() + traductionV8V9() + NewInclude() + optionEditeur() + optionPdf() + + + diff --git a/UiQT4/OptionsEditeur.py b/UiQT4/OptionsEditeur.py new file mode 100644 index 00000000..6435e88b --- /dev/null +++ b/UiQT4/OptionsEditeur.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'OptionsEditeur.ui' +# +# Created: Wed Jul 9 10:12:47 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_desOptions(object): + def setupUi(self, desOptions): + desOptions.setObjectName("desOptions") + desOptions.resize(570,474) + self.groupBox1 = QtGui.QGroupBox(desOptions) + self.groupBox1.setGeometry(QtCore.QRect(11,11,548,191)) + self.groupBox1.setObjectName("groupBox1") + self.textLabel1_3 = QtGui.QLabel(self.groupBox1) + self.textLabel1_3.setGeometry(QtCore.QRect(30,60,280,20)) + self.textLabel1_3.setWordWrap(False) + self.textLabel1_3.setObjectName("textLabel1_3") + self.textLabel1_2_2 = QtGui.QLabel(self.groupBox1) + self.textLabel1_2_2.setGeometry(QtCore.QRect(30,120,280,20)) + self.textLabel1_2_2.setWordWrap(False) + self.textLabel1_2_2.setObjectName("textLabel1_2_2") + self.CBVersions = QtGui.QComboBox(self.groupBox1) + self.CBVersions.setGeometry(QtCore.QRect(30,20,90,30)) + self.CBVersions.setObjectName("CBVersions") + self.LERepMat = QtGui.QLineEdit(self.groupBox1) + self.LERepMat.setGeometry(QtCore.QRect(30,140,501,31)) + self.LERepMat.setObjectName("LERepMat") + self.LERepCata = QtGui.QLineEdit(self.groupBox1) + self.LERepCata.setGeometry(QtCore.QRect(30,80,501,31)) + self.LERepCata.setObjectName("LERepCata") + self.Bok = QtGui.QPushButton(self.groupBox1) + self.Bok.setGeometry(QtCore.QRect(440,20,90,31)) + self.Bok.setAutoDefault(False) + self.Bok.setObjectName("Bok") + self.groupBox2 = QtGui.QGroupBox(desOptions) + self.groupBox2.setGeometry(QtCore.QRect(11,208,548,90)) + self.groupBox2.setObjectName("groupBox2") + self.LEVersionAjout = QtGui.QLineEdit(self.groupBox2) + self.LEVersionAjout.setGeometry(QtCore.QRect(120,31,101,30)) + self.LEVersionAjout.setObjectName("LEVersionAjout") + self.LEVersionSup = QtGui.QLineEdit(self.groupBox2) + self.LEVersionSup.setGeometry(QtCore.QRect(410,30,101,30)) + self.LEVersionSup.setObjectName("LEVersionSup") + self.PBSup = QtGui.QPushButton(self.groupBox2) + self.PBSup.setGeometry(QtCore.QRect(300,20,101,41)) + self.PBSup.setObjectName("PBSup") + self.PBajout = QtGui.QPushButton(self.groupBox2) + self.PBajout.setGeometry(QtCore.QRect(10,20,101,41)) + self.PBajout.setObjectName("PBajout") + self.PBQuit = QtGui.QPushButton(desOptions) + self.PBQuit.setGeometry(QtCore.QRect(400,420,151,31)) + self.PBQuit.setMinimumSize(QtCore.QSize(0,30)) + self.PBQuit.setObjectName("PBQuit") + self.groupBox3 = QtGui.QGroupBox(desOptions) + self.groupBox3.setGeometry(QtCore.QRect(10,310,548,90)) + self.groupBox3.setObjectName("groupBox3") + self.LERepDoc = QtGui.QLineEdit(self.groupBox3) + self.LERepDoc.setGeometry(QtCore.QRect(20,50,520,31)) + self.LERepDoc.setObjectName("LERepDoc") + self.textLabel1 = QtGui.QLabel(self.groupBox3) + self.textLabel1.setGeometry(QtCore.QRect(20,20,280,30)) + self.textLabel1.setWordWrap(False) + self.textLabel1.setObjectName("textLabel1") + self.Bdefaut = QtGui.QCheckBox(desOptions) + self.Bdefaut.setGeometry(QtCore.QRect(10,430,340,20)) + font = QtGui.QFont() + font.setPointSize(12) + self.Bdefaut.setFont(font) + self.Bdefaut.setObjectName("Bdefaut") + + self.retranslateUi(desOptions) + + def retranslateUi(self, desOptions): + desOptions.setWindowTitle(QtGui.QApplication.translate("desOptions", "Options Aster", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox1.setTitle(QtGui.QApplication.translate("desOptions", "Configurer une Version", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_3.setText(QtGui.QApplication.translate("desOptions", "Répertoire d\'accès au catalogue :", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_2_2.setText(QtGui.QApplication.translate("desOptions", "Répertoire d\'accès aux matériaux :", None, QtGui.QApplication.UnicodeUTF8)) + self.Bok.setText(QtGui.QApplication.translate("desOptions", "Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox2.setTitle(QtGui.QApplication.translate("desOptions", "Gérer les versions", None, QtGui.QApplication.UnicodeUTF8)) + self.PBSup.setText(QtGui.QApplication.translate("desOptions", "Supprimer\n" +"Version :", None, QtGui.QApplication.UnicodeUTF8)) + self.PBajout.setText(QtGui.QApplication.translate("desOptions", "Ajouter\n" +"Version :", None, QtGui.QApplication.UnicodeUTF8)) + self.PBQuit.setText(QtGui.QApplication.translate("desOptions", "Quitter", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox3.setTitle(QtGui.QApplication.translate("desOptions", "Doc", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1.setText(QtGui.QApplication.translate("desOptions", "Repertoire d\'acces à la documentation :", None, QtGui.QApplication.UnicodeUTF8)) + self.Bdefaut.setText(QtGui.QApplication.translate("desOptions", "Reinitialiser avec les valeurs par defaut", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + desOptions = QtGui.QDialog() + ui = Ui_desOptions() + ui.setupUi(desOptions) + desOptions.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/OptionsEditeur.ui b/UiQT4/OptionsEditeur.ui new file mode 100644 index 00000000..bbe72dd4 --- /dev/null +++ b/UiQT4/OptionsEditeur.ui @@ -0,0 +1,258 @@ + + + + + desOptions + + + + 0 + 0 + 570 + 474 + + + + Options Aster + + + + + 11 + 11 + 548 + 191 + + + + Configurer une Version + + + + + 30 + 60 + 280 + 20 + + + + Répertoire d'accès au catalogue : + + + false + + + + + + 30 + 120 + 280 + 20 + + + + Répertoire d'accès aux matériaux : + + + false + + + + + + 30 + 20 + 90 + 30 + + + + + + + 30 + 140 + 501 + 31 + + + + + + + + + + 30 + 80 + 501 + 31 + + + + + + + + + + 440 + 20 + 90 + 31 + + + + Valider + + + false + + + + + + + 11 + 208 + 548 + 90 + + + + Gérer les versions + + + + + 120 + 31 + 101 + 30 + + + + + + + 410 + 30 + 101 + 30 + + + + + + + 300 + 20 + 101 + 41 + + + + Supprimer +Version : + + + + + + 10 + 20 + 101 + 41 + + + + Ajouter +Version : + + + + + + + 400 + 420 + 151 + 31 + + + + + 0 + 30 + + + + Quitter + + + + + + 10 + 310 + 548 + 90 + + + + Doc + + + + + 20 + 50 + 520 + 31 + + + + + + + + + + 20 + 20 + 280 + 30 + + + + Repertoire d'acces à la documentation : + + + false + + + + + + + 10 + 430 + 340 + 20 + + + + + 12 + + + + Reinitialiser avec les valeurs par defaut + + + + + qPixmapFromMimeSource + diff --git a/UiQT4/OptionsPdf.py b/UiQT4/OptionsPdf.py new file mode 100644 index 00000000..d20115f7 --- /dev/null +++ b/UiQT4/OptionsPdf.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'OptionsPdf.ui' +# +# Created: Wed Jul 9 10:12:47 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_desPdf(object): + def setupUi(self, desPdf): + desPdf.setObjectName("desPdf") + desPdf.resize(538,142) + self.textLabel1_2 = QtGui.QLabel(desPdf) + self.textLabel1_2.setGeometry(QtCore.QRect(20,10,280,20)) + self.textLabel1_2.setWordWrap(False) + self.textLabel1_2.setObjectName("textLabel1_2") + self.BCancel = QtGui.QPushButton(desPdf) + self.BCancel.setGeometry(QtCore.QRect(450,90,70,31)) + self.BCancel.setObjectName("BCancel") + self.LERepPdf = QtGui.QLineEdit(desPdf) + self.LERepPdf.setGeometry(QtCore.QRect(20,40,501,31)) + self.LERepPdf.setObjectName("LERepPdf") + self.Bok = QtGui.QPushButton(desPdf) + self.Bok.setGeometry(QtCore.QRect(350,90,70,31)) + self.Bok.setObjectName("Bok") + + self.retranslateUi(desPdf) + desPdf.setTabOrder(self.LERepPdf,self.Bok) + desPdf.setTabOrder(self.Bok,self.BCancel) + + def retranslateUi(self, desPdf): + desPdf.setWindowTitle(QtGui.QApplication.translate("desPdf", "desPdf", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_2.setText(QtGui.QApplication.translate("desPdf", "Lecteur Pdf", None, QtGui.QApplication.UnicodeUTF8)) + self.BCancel.setText(QtGui.QApplication.translate("desPdf", "Cancel", None, QtGui.QApplication.UnicodeUTF8)) + self.LERepPdf.setText(QtGui.QApplication.translate("desPdf", "acroread", None, QtGui.QApplication.UnicodeUTF8)) + self.Bok.setText(QtGui.QApplication.translate("desPdf", "Ok", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + desPdf = QtGui.QDialog() + ui = Ui_desPdf() + ui.setupUi(desPdf) + desPdf.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/OptionsPdf.ui b/UiQT4/OptionsPdf.ui new file mode 100644 index 00000000..83a4a41e --- /dev/null +++ b/UiQT4/OptionsPdf.ui @@ -0,0 +1,81 @@ + + + + + desPdf + + + + 0 + 0 + 538 + 142 + + + + desPdf + + + + + 20 + 10 + 280 + 20 + + + + Lecteur Pdf + + + false + + + + + + 450 + 90 + 70 + 31 + + + + Cancel + + + + + + 20 + 40 + 501 + 31 + + + + acroread + + + + + + 350 + 90 + 70 + 31 + + + + Ok + + + + + qPixmapFromMimeSource + + LERepPdf + Bok + BCancel + + diff --git a/UiQT4/__init__.py b/UiQT4/__init__.py new file mode 100644 index 00000000..21d22fbc --- /dev/null +++ b/UiQT4/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce package contient les fonctionnalités nécessaires + pour l'éditeur graphique QT +""" diff --git a/UiQT4/aideQT.py b/UiQT4/aideQT.py new file mode 100644 index 00000000..d736e7ce --- /dev/null +++ b/UiQT4/aideQT.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'aideQT.ui' +# +# Created: Wed Jul 9 10:12:47 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_Aide(object): + def setupUi(self, Aide): + Aide.setObjectName("Aide") + Aide.resize(602,480) + self.gridLayout = QtGui.QGridLayout(Aide) + self.gridLayout.setObjectName("gridLayout") + self.TB1 = QtGui.QTextBrowser(Aide) + self.TB1.setObjectName("TB1") + self.gridLayout.addWidget(self.TB1,0,0,1,4) + self.PBIndex = QtGui.QPushButton(Aide) + self.PBIndex.setMinimumSize(QtCore.QSize(0,30)) + self.PBIndex.setObjectName("PBIndex") + self.gridLayout.addWidget(self.PBIndex,1,0,1,1) + self.PBBack = QtGui.QPushButton(Aide) + self.PBBack.setEnabled(True) + self.PBBack.setMinimumSize(QtCore.QSize(0,30)) + self.PBBack.setObjectName("PBBack") + self.gridLayout.addWidget(self.PBBack,1,1,1,1) + self.PBForward = QtGui.QPushButton(Aide) + self.PBForward.setEnabled(True) + self.PBForward.setMinimumSize(QtCore.QSize(0,30)) + self.PBForward.setObjectName("PBForward") + self.gridLayout.addWidget(self.PBForward,1,2,1,1) + spacerItem = QtGui.QSpacerItem(311,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.gridLayout.addItem(spacerItem,1,3,1,1) + + self.retranslateUi(Aide) + QtCore.QMetaObject.connectSlotsByName(Aide) + + def retranslateUi(self, Aide): + Aide.setWindowTitle(QtGui.QApplication.translate("Aide", "Aide", None, QtGui.QApplication.UnicodeUTF8)) + self.PBIndex.setText(QtGui.QApplication.translate("Aide", "Index", None, QtGui.QApplication.UnicodeUTF8)) + self.PBBack.setText(QtGui.QApplication.translate("Aide", "Back", None, QtGui.QApplication.UnicodeUTF8)) + self.PBForward.setText(QtGui.QApplication.translate("Aide", "Forward", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + Aide = QtGui.QWidget() + ui = Ui_Aide() + ui.setupUi(Aide) + Aide.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/aideQT.ui b/UiQT4/aideQT.ui new file mode 100644 index 00000000..44706313 --- /dev/null +++ b/UiQT4/aideQT.ui @@ -0,0 +1,86 @@ + + Aide + + + + 0 + 0 + 602 + 480 + + + + Aide + + + + + + + + + + 0 + 30 + + + + Index + + + + + + + true + + + + 0 + 30 + + + + Back + + + + + + + true + + + + 0 + 30 + + + + Forward + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 311 + 20 + + + + + + + + qPixmapFromMimeSource + + + diff --git a/UiQT4/desChoixCata.py b/UiQT4/desChoixCata.py new file mode 100644 index 00000000..d35f39ff --- /dev/null +++ b/UiQT4/desChoixCata.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desChoixCata.ui' +# +# Created: Wed Jul 16 16:27:33 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DChoixCata(object): + def setupUi(self, DChoixCata): + DChoixCata.setObjectName("DChoixCata") + DChoixCata.resize(547,192) + DChoixCata.setSizeGripEnabled(True) + self.gridLayout = QtGui.QGridLayout(DChoixCata) + self.gridLayout.setObjectName("gridLayout") + self.TLNb = QtGui.QLabel(DChoixCata) + self.TLNb.setMinimumSize(QtCore.QSize(30,0)) + self.TLNb.setWordWrap(False) + self.TLNb.setObjectName("TLNb") + self.gridLayout.addWidget(self.TLNb,0,0,1,1) + self.CBChoixCata = QtGui.QComboBox(DChoixCata) + self.CBChoixCata.setEnabled(True) + self.CBChoixCata.setMinimumSize(QtCore.QSize(125,41)) + self.CBChoixCata.setMaximumSize(QtCore.QSize(150,16777215)) + self.CBChoixCata.setObjectName("CBChoixCata") + self.gridLayout.addWidget(self.CBChoixCata,0,1,2,1) + self.textLabel1_2 = QtGui.QLabel(DChoixCata) + self.textLabel1_2.setMinimumSize(QtCore.QSize(60,60)) + self.textLabel1_2.setWordWrap(False) + self.textLabel1_2.setObjectName("textLabel1_2") + self.gridLayout.addWidget(self.textLabel1_2,1,0,1,1) + self.frame3 = QtGui.QFrame(DChoixCata) + self.frame3.setFrameShape(QtGui.QFrame.StyledPanel) + self.frame3.setFrameShadow(QtGui.QFrame.Raised) + self.frame3.setObjectName("frame3") + self.horizontalLayout = QtGui.QHBoxLayout(self.frame3) + self.horizontalLayout.setObjectName("horizontalLayout") + self.buttonOk = QtGui.QPushButton(self.frame3) + self.buttonOk.setAutoDefault(True) + self.buttonOk.setDefault(True) + self.buttonOk.setObjectName("buttonOk") + self.horizontalLayout.addWidget(self.buttonOk) + spacerItem = QtGui.QSpacerItem(334,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem) + self.buttonCancel = QtGui.QPushButton(self.frame3) + self.buttonCancel.setAutoDefault(True) + self.buttonCancel.setObjectName("buttonCancel") + self.horizontalLayout.addWidget(self.buttonCancel) + self.gridLayout.addWidget(self.frame3,2,0,1,2) + + self.retranslateUi(DChoixCata) + QtCore.QMetaObject.connectSlotsByName(DChoixCata) + + def retranslateUi(self, DChoixCata): + DChoixCata.setWindowTitle(QtGui.QApplication.translate("DChoixCata", "Choix d\'une version du code Aster", None, QtGui.QApplication.UnicodeUTF8)) + self.TLNb.setText(QtGui.QApplication.translate("DChoixCata", "2 versions sont disponibles", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_2.setText(QtGui.QApplication.translate("DChoixCata", "\n" +"\n" +"

Veuillez choisir celle avec laquelle

\n" +"

vous souhaitez travailler

", None, QtGui.QApplication.UnicodeUTF8)) + self.buttonOk.setText(QtGui.QApplication.translate("DChoixCata", "&OK", None, QtGui.QApplication.UnicodeUTF8)) + self.buttonCancel.setText(QtGui.QApplication.translate("DChoixCata", "&Cancel", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DChoixCata = QtGui.QDialog() + ui = Ui_DChoixCata() + ui.setupUi(DChoixCata) + DChoixCata.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desChoixCata.ui b/UiQT4/desChoixCata.ui new file mode 100644 index 00000000..a59643f7 --- /dev/null +++ b/UiQT4/desChoixCata.ui @@ -0,0 +1,139 @@ + + DChoixCata + + + + 0 + 0 + 547 + 192 + + + + Choix d'une version du code Aster + + + true + + + + + + + 30 + 0 + + + + 2 versions sont disponibles + + + false + + + + + + + true + + + + 125 + 41 + + + + + 150 + 16777215 + + + + + + + + + 60 + 60 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:large;">Veuillez choisir celle avec laquelle</span></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:large;"><span style=" font-size:large;"> vous souhaitez travailler</span></p></body></html> + + + false + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + &OK + + + + + + true + + + true + + + + + + + Qt::Horizontal + + + + 334 + 20 + + + + + + + + &Cancel + + + + + + true + + + + + + + + frame3 + TLNb + textLabel1_2 + CBChoixCata + + + qPixmapFromMimeSource + + + diff --git a/UiQT4/desCommande.py b/UiQT4/desCommande.py new file mode 100644 index 00000000..03e404f2 --- /dev/null +++ b/UiQT4/desCommande.py @@ -0,0 +1,186 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desCommande.ui' +# +# Created: Tue Sep 23 10:19:58 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DComm(object): + def setupUi(self, DComm): + DComm.setObjectName("DComm") + DComm.resize(505,483) + DComm.setMinimumSize(QtCore.QSize(505,0)) + self.gridlayout = QtGui.QGridLayout(DComm) + self.gridlayout.setObjectName("gridlayout") + self.Commentaire = QtGui.QLabel(DComm) + self.Commentaire.setFrameShape(QtGui.QFrame.NoFrame) + self.Commentaire.setFrameShadow(QtGui.QFrame.Plain) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout.addWidget(self.Commentaire,1,0,1,3) + self.bOk = QtGui.QPushButton(DComm) + self.bOk.setMinimumSize(QtCore.QSize(0,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setObjectName("bOk") + self.gridlayout.addWidget(self.bOk,2,1,1,1) + self.bSup = QtGui.QPushButton(DComm) + self.bSup.setMinimumSize(QtCore.QSize(0,30)) + self.bSup.setAutoDefault(True) + self.bSup.setObjectName("bSup") + self.gridlayout.addWidget(self.bSup,2,0,1,1) + self.bHelp = QtGui.QPushButton(DComm) + self.bHelp.setMinimumSize(QtCore.QSize(0,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setObjectName("bHelp") + self.gridlayout.addWidget(self.bHelp,2,2,1,1) + self.TWChoix = QtGui.QTabWidget(DComm) + self.TWChoix.setObjectName("TWChoix") + self.MotClef = QtGui.QWidget() + self.MotClef.setGeometry(QtCore.QRect(0,0,483,372)) + self.MotClef.setObjectName("MotClef") + self.gridLayout_3 = QtGui.QGridLayout(self.MotClef) + self.gridLayout_3.setObjectName("gridLayout_3") + self.textLabel1 = QtGui.QLabel(self.MotClef) + self.textLabel1.setMinimumSize(QtCore.QSize(0,0)) + self.textLabel1.setWordWrap(False) + self.textLabel1.setObjectName("textLabel1") + self.gridLayout_3.addWidget(self.textLabel1,0,0,1,1) + self.textLabel1_2 = QtGui.QLabel(self.MotClef) + self.textLabel1_2.setWordWrap(False) + self.textLabel1_2.setObjectName("textLabel1_2") + self.gridLayout_3.addWidget(self.textLabel1_2,0,1,1,1) + self.LBMCPermis = QtGui.QListWidget(self.MotClef) + self.LBMCPermis.setObjectName("LBMCPermis") + self.gridLayout_3.addWidget(self.LBMCPermis,1,0,1,1) + self.LBRegles = QtGui.QListWidget(self.MotClef) + self.LBRegles.setObjectName("LBRegles") + self.gridLayout_3.addWidget(self.LBRegles,1,1,1,1) + self.TWChoix.addTab(self.MotClef,"") + self.Concept = QtGui.QWidget() + self.Concept.setGeometry(QtCore.QRect(0,0,483,372)) + self.Concept.setObjectName("Concept") + self.gridlayout1 = QtGui.QGridLayout(self.Concept) + self.gridlayout1.setObjectName("gridlayout1") + self.groupBox1 = QtGui.QGroupBox(self.Concept) + self.groupBox1.setObjectName("groupBox1") + self.textLabel1_3 = QtGui.QLabel(self.groupBox1) + self.textLabel1_3.setGeometry(QtCore.QRect(80,50,130,31)) + self.textLabel1_3.setWordWrap(False) + self.textLabel1_3.setObjectName("textLabel1_3") + self.textLabel1_3_2 = QtGui.QLabel(self.groupBox1) + self.textLabel1_3_2.setGeometry(QtCore.QRect(80,170,150,31)) + self.textLabel1_3_2.setWordWrap(False) + self.textLabel1_3_2.setObjectName("textLabel1_3_2") + self.LENomConcept = QtGui.QLineEdit(self.groupBox1) + self.LENomConcept.setGeometry(QtCore.QRect(80,110,310,30)) + self.LENomConcept.setObjectName("LENomConcept") + self.textLabel3 = QtGui.QLabel(self.groupBox1) + self.textLabel3.setGeometry(QtCore.QRect(10,200,290,31)) + self.textLabel3.setWordWrap(False) + self.textLabel3.setObjectName("textLabel3") + self.typeConcept = QtGui.QLabel(self.groupBox1) + self.typeConcept.setGeometry(QtCore.QRect(310,200,130,31)) + self.typeConcept.setWordWrap(False) + self.typeConcept.setObjectName("typeConcept") + self.gridlayout1.addWidget(self.groupBox1,0,0,1,1) + self.TWChoix.addTab(self.Concept,"") + self.Commande = QtGui.QWidget() + self.Commande.setGeometry(QtCore.QRect(0,0,483,372)) + self.Commande.setObjectName("Commande") + self.gridLayout_2 = QtGui.QGridLayout(self.Commande) + self.gridLayout_2.setObjectName("gridLayout_2") + self.textLabel1_4 = QtGui.QLabel(self.Commande) + self.textLabel1_4.setWordWrap(False) + self.textLabel1_4.setObjectName("textLabel1_4") + self.gridLayout_2.addWidget(self.textLabel1_4,0,0,1,1) + self.horizontalLayout = QtGui.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + self.textLabel6 = QtGui.QLabel(self.Commande) + self.textLabel6.setMinimumSize(QtCore.QSize(50,30)) + self.textLabel6.setWordWrap(False) + self.textLabel6.setObjectName("textLabel6") + self.horizontalLayout.addWidget(self.textLabel6) + self.LEFiltre = QtGui.QLineEdit(self.Commande) + self.LEFiltre.setMinimumSize(QtCore.QSize(160,30)) + self.LEFiltre.setObjectName("LEFiltre") + self.horizontalLayout.addWidget(self.LEFiltre) + self.BNext = QtGui.QPushButton(self.Commande) + self.BNext.setObjectName("BNext") + self.horizontalLayout.addWidget(self.BNext) + self.gridLayout_2.addLayout(self.horizontalLayout,1,0,1,1) + self.groupBox = QtGui.QGroupBox(self.Commande) + self.groupBox.setObjectName("groupBox") + self.gridLayout = QtGui.QGridLayout(self.groupBox) + self.gridLayout.setObjectName("gridLayout") + self.RBalpha = QtGui.QRadioButton(self.groupBox) + self.RBalpha.setChecked(True) + self.RBalpha.setObjectName("RBalpha") + self.gridLayout.addWidget(self.RBalpha,0,0,1,1) + self.RBGroupe = QtGui.QRadioButton(self.groupBox) + self.RBGroupe.setObjectName("RBGroupe") + self.gridLayout.addWidget(self.RBGroupe,1,0,1,1) + self.gridLayout_2.addWidget(self.groupBox,0,1,2,1) + self.LBNouvCommande = QtGui.QListWidget(self.Commande) + self.LBNouvCommande.setObjectName("LBNouvCommande") + self.gridLayout_2.addWidget(self.LBNouvCommande,2,0,1,2) + self.textLabel4 = QtGui.QLabel(self.Commande) + self.textLabel4.setWordWrap(False) + self.textLabel4.setObjectName("textLabel4") + self.gridLayout_2.addWidget(self.textLabel4,3,0,1,2) + self.TWChoix.addTab(self.Commande,"") + self.gridlayout.addWidget(self.TWChoix,0,0,1,3) + + self.retranslateUi(DComm) + self.TWChoix.setCurrentIndex(0) + QtCore.QMetaObject.connectSlotsByName(DComm) + DComm.setTabOrder(self.LEFiltre,self.LENomConcept) + DComm.setTabOrder(self.LENomConcept,self.TWChoix) + DComm.setTabOrder(self.TWChoix,self.LBNouvCommande) + DComm.setTabOrder(self.LBNouvCommande,self.bOk) + DComm.setTabOrder(self.bOk,self.bSup) + DComm.setTabOrder(self.bSup,self.bHelp) + + def retranslateUi(self, DComm): + DComm.setWindowTitle(QtGui.QApplication.translate("DComm", "DComm", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setToolTip(QtGui.QApplication.translate("DComm", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DComm", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DComm", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setToolTip(QtGui.QApplication.translate("DComm", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DComm", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DComm", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setToolTip(QtGui.QApplication.translate("DComm", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DComm", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DComm", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1.setText(QtGui.QApplication.translate("DComm", "

Mots Clefs Permis

", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_2.setText(QtGui.QApplication.translate("DComm", "

Règles

", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.MotClef), QtGui.QApplication.translate("DComm", "Ajouter Mot-Clef", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox1.setTitle(QtGui.QApplication.translate("DComm", "Concept", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_3.setText(QtGui.QApplication.translate("DComm", "Nom du concept :", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_3_2.setText(QtGui.QApplication.translate("DComm", "Type du concept :", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel3.setText(QtGui.QApplication.translate("DComm", "L\'opérateur retourne un concept de type :", None, QtGui.QApplication.UnicodeUTF8)) + self.typeConcept.setText(QtGui.QApplication.translate("DComm", "TypeDuConcept", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.Concept), QtGui.QApplication.translate("DComm", "Nommer Concept", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_4.setText(QtGui.QApplication.translate("DComm", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel6.setText(QtGui.QApplication.translate("DComm", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) + self.BNext.setText(QtGui.QApplication.translate("DComm", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox.setTitle(QtGui.QApplication.translate("DComm", "Affichage", None, QtGui.QApplication.UnicodeUTF8)) + self.RBalpha.setText(QtGui.QApplication.translate("DComm", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) + self.RBGroupe.setText(QtGui.QApplication.translate("DComm", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel4.setText(QtGui.QApplication.translate("DComm", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DComm", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DComm = QtGui.QWidget() + ui = Ui_DComm() + ui.setupUi(DComm) + DComm.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desCommande.ui b/UiQT4/desCommande.ui new file mode 100644 index 00000000..9cdc1812 --- /dev/null +++ b/UiQT4/desCommande.ui @@ -0,0 +1,373 @@ + + DComm + + + + 0 + 0 + 505 + 483 + + + + + 505 + 0 + + + + DComm + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + + + + false + + + + + + + + 0 + 30 + + + + validation de la saisie + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + + + + + + 0 + 30 + + + + suppression du mot clef + + + &Supprimer + + + Alt+S + + + true + + + + + + + + 0 + 30 + + + + affichage documentation aster + + + &Documentation + + + Alt+D + + + true + + + + + + + 0 + + + + + 0 + 0 + 483 + 372 + + + + Ajouter Mot-Clef + + + + + + + 0 + 0 + + + + <h3><p align="center"><u><b>Mots Clefs Permis</b></u></p></h3> + + + false + + + + + + + <h3><p align="center"><u><b>Règles</b></u></p></h3> + + + false + + + + + + + + + + + + + + + 0 + 0 + 483 + 372 + + + + Nommer Concept + + + + + + Concept + + + + + 80 + 50 + 130 + 31 + + + + <u>Nom du concept :</u> + + + false + + + + + + 80 + 170 + 150 + 31 + + + + <u>Type du concept :</u> + + + false + + + + + + 80 + 110 + 310 + 30 + + + + + + + 10 + 200 + 290 + 31 + + + + L'opérateur retourne un concept de type : + + + false + + + + + + 310 + 200 + 130 + 31 + + + + TypeDuConcept + + + false + + + + + + + + + + 0 + 0 + 483 + 372 + + + + Nouvelle Commande + + + + + + <b><u>Commandes :</u></b> + + + false + + + + + + + + + + 50 + 30 + + + + Filtre + + + false + + + + + + + + 160 + 30 + + + + + + + + Suivant + + + + + + + + + Affichage + + + + + + alphabétique + + + true + + + + + + + par groupe + + + + + + + + + + + + + La commande choisie sera ajoutée APRES la commande courante + + + false + + + + + + + + + + + qPixmapFromMimeSource + + LEFiltre + LENomConcept + TWChoix + LBNouvCommande + bOk + bSup + bHelp + + + + diff --git a/UiQT4/desCommentaire.py b/UiQT4/desCommentaire.py new file mode 100644 index 00000000..d4b7a5e4 --- /dev/null +++ b/UiQT4/desCommentaire.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desCommentaire.ui' +# +# Created: Wed Jul 23 12:00:45 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DComment(object): + def setupUi(self, DComment): + DComment.setObjectName("DComment") + DComment.resize(505,482) + DComment.setMinimumSize(QtCore.QSize(505,0)) + self.gridlayout = QtGui.QGridLayout(DComment) + self.gridlayout.setObjectName("gridlayout") + self.bOk = QtGui.QPushButton(DComment) + self.bOk.setMinimumSize(QtCore.QSize(0,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setObjectName("bOk") + self.gridlayout.addWidget(self.bOk,2,1,1,1) + self.bSup = QtGui.QPushButton(DComment) + self.bSup.setMinimumSize(QtCore.QSize(0,30)) + self.bSup.setAutoDefault(True) + self.bSup.setObjectName("bSup") + self.gridlayout.addWidget(self.bSup,2,0,1,1) + self.bHelp = QtGui.QPushButton(DComment) + self.bHelp.setMinimumSize(QtCore.QSize(0,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setObjectName("bHelp") + self.gridlayout.addWidget(self.bHelp,2,2,1,1) + self.Commentaire = QtGui.QLabel(DComment) + self.Commentaire.setFrameShape(QtGui.QFrame.NoFrame) + self.Commentaire.setFrameShadow(QtGui.QFrame.Plain) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout.addWidget(self.Commentaire,1,0,1,3) + self.TWChoix = QtGui.QTabWidget(DComment) + self.TWChoix.setObjectName("TWChoix") + self.Valeur_Parametre = QtGui.QWidget() + self.Valeur_Parametre.setGeometry(QtCore.QRect(0,0,483,371)) + self.Valeur_Parametre.setObjectName("Valeur_Parametre") + self.gridLayout = QtGui.QGridLayout(self.Valeur_Parametre) + self.gridLayout.setObjectName("gridLayout") + self.textCommentaire = QtGui.QTextEdit(self.Valeur_Parametre) + self.textCommentaire.setObjectName("textCommentaire") + self.gridLayout.addWidget(self.textCommentaire,0,0,1,1) + self.TWChoix.addTab(self.Valeur_Parametre,"") + self.Commande = QtGui.QWidget() + self.Commande.setGeometry(QtCore.QRect(0,0,483,371)) + self.Commande.setObjectName("Commande") + self.gridLayout_4 = QtGui.QGridLayout(self.Commande) + self.gridLayout_4.setObjectName("gridLayout_4") + self.textLabel1_4 = QtGui.QLabel(self.Commande) + self.textLabel1_4.setWordWrap(False) + self.textLabel1_4.setObjectName("textLabel1_4") + self.gridLayout_4.addWidget(self.textLabel1_4,0,0,1,3) + self.groupBox = QtGui.QGroupBox(self.Commande) + self.groupBox.setObjectName("groupBox") + self.gridLayout_3 = QtGui.QGridLayout(self.groupBox) + self.gridLayout_3.setObjectName("gridLayout_3") + self.RBalpha = QtGui.QRadioButton(self.groupBox) + self.RBalpha.setChecked(True) + self.RBalpha.setObjectName("RBalpha") + self.gridLayout_3.addWidget(self.RBalpha,0,0,1,1) + self.RBGroupe = QtGui.QRadioButton(self.groupBox) + self.RBGroupe.setObjectName("RBGroupe") + self.gridLayout_3.addWidget(self.RBGroupe,1,0,1,1) + self.gridLayout_4.addWidget(self.groupBox,0,3,2,1) + self.textLabel6_2 = QtGui.QLabel(self.Commande) + self.textLabel6_2.setMinimumSize(QtCore.QSize(50,30)) + self.textLabel6_2.setWordWrap(False) + self.textLabel6_2.setObjectName("textLabel6_2") + self.gridLayout_4.addWidget(self.textLabel6_2,1,0,1,1) + self.LEFiltre = QtGui.QLineEdit(self.Commande) + self.LEFiltre.setMinimumSize(QtCore.QSize(160,30)) + self.LEFiltre.setObjectName("LEFiltre") + self.gridLayout_4.addWidget(self.LEFiltre,1,1,1,1) + self.BNext = QtGui.QPushButton(self.Commande) + self.BNext.setObjectName("BNext") + self.gridLayout_4.addWidget(self.BNext,1,2,1,1) + self.LBNouvCommande = QtGui.QListWidget(self.Commande) + self.LBNouvCommande.setObjectName("LBNouvCommande") + self.gridLayout_4.addWidget(self.LBNouvCommande,2,0,1,4) + self.textLabel4 = QtGui.QLabel(self.Commande) + self.textLabel4.setWordWrap(False) + self.textLabel4.setObjectName("textLabel4") + self.gridLayout_4.addWidget(self.textLabel4,3,0,1,4) + self.TWChoix.addTab(self.Commande,"") + self.gridlayout.addWidget(self.TWChoix,0,0,1,3) + + self.retranslateUi(DComment) + self.TWChoix.setCurrentIndex(0) + QtCore.QMetaObject.connectSlotsByName(DComment) + DComment.setTabOrder(self.TWChoix,self.bOk) + DComment.setTabOrder(self.bOk,self.bSup) + DComment.setTabOrder(self.bSup,self.bHelp) + + def retranslateUi(self, DComment): + DComment.setWindowTitle(QtGui.QApplication.translate("DComment", "DComm", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setToolTip(QtGui.QApplication.translate("DComment", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DComment", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DComment", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setToolTip(QtGui.QApplication.translate("DComment", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DComment", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DComment", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setToolTip(QtGui.QApplication.translate("DComment", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DComment", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DComment", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.Valeur_Parametre), QtGui.QApplication.translate("DComment", "Commentaire", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_4.setText(QtGui.QApplication.translate("DComment", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox.setTitle(QtGui.QApplication.translate("DComment", "Affichage", None, QtGui.QApplication.UnicodeUTF8)) + self.RBalpha.setText(QtGui.QApplication.translate("DComment", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) + self.RBGroupe.setText(QtGui.QApplication.translate("DComment", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel6_2.setText(QtGui.QApplication.translate("DComment", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) + self.BNext.setText(QtGui.QApplication.translate("DComment", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel4.setText(QtGui.QApplication.translate("DComment", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DComment", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DComment = QtGui.QWidget() + ui = Ui_DComment() + ui.setupUi(DComment) + DComment.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desCommentaire.ui b/UiQT4/desCommentaire.ui new file mode 100644 index 00000000..1202e7b5 --- /dev/null +++ b/UiQT4/desCommentaire.ui @@ -0,0 +1,241 @@ + + DComment + + + + 0 + 0 + 505 + 482 + + + + + 505 + 0 + + + + DComm + + + + + + + 0 + 30 + + + + validation de la saisie + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + + + + + + 0 + 30 + + + + suppression du mot clef + + + &Supprimer + + + Alt+S + + + true + + + + + + + + 0 + 30 + + + + affichage documentation aster + + + &Documentation + + + Alt+D + + + true + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + + + + false + + + + + + + 0 + + + + + 0 + 0 + 483 + 371 + + + + Commentaire + + + + + + + + + + + 0 + 0 + 483 + 371 + + + + Nouvelle Commande + + + + + + <b><u>Commandes :</u></b> + + + false + + + + + + + Affichage + + + + + + alphabétique + + + true + + + + + + + par groupe + + + + + + + + + + + 50 + 30 + + + + Filtre + + + false + + + + + + + + 160 + 30 + + + + + + + + Suivant + + + + + + + + + + La commande choisie sera ajoutée APRES la commande courante + + + false + + + + + + + + + + + qPixmapFromMimeSource + + TWChoix + bOk + bSup + bHelp + + + + diff --git a/UiQT4/desError.py b/UiQT4/desError.py new file mode 100644 index 00000000..31da9ec1 --- /dev/null +++ b/UiQT4/desError.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desError.ui' +# +# Created: Wed Jul 9 10:11:20 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DError(object): + def setupUi(self, DError): + DError.setObjectName("DError") + DError.resize(482,480) + DError.setMinimumSize(QtCore.QSize(350,0)) + self.gridLayout = QtGui.QGridLayout(DError) + self.gridLayout.setObjectName("gridLayout") + self.textBrowser = QtGui.QTextBrowser(DError) + self.textBrowser.setObjectName("textBrowser") + self.gridLayout.addWidget(self.textBrowser,0,0,1,1) + self.hboxlayout = QtGui.QHBoxLayout() + self.hboxlayout.setObjectName("hboxlayout") + spacerItem = QtGui.QSpacerItem(171,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.hboxlayout.addItem(spacerItem) + self.bSup = QtGui.QPushButton(DError) + self.bSup.setAutoDefault(True) + self.bSup.setObjectName("bSup") + self.hboxlayout.addWidget(self.bSup) + spacerItem1 = QtGui.QSpacerItem(171,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.hboxlayout.addItem(spacerItem1) + self.gridLayout.addLayout(self.hboxlayout,1,0,1,1) + + self.retranslateUi(DError) + QtCore.QMetaObject.connectSlotsByName(DError) + + def retranslateUi(self, DError): + DError.setWindowTitle(QtGui.QApplication.translate("DError", "DInactif", None, QtGui.QApplication.UnicodeUTF8)) + self.textBrowser.setHtml(QtGui.QApplication.translate("DError", "\n" +"\n" +"

\n" +"

\n" +"

\n" +"

\n" +"

Le noeud selectionné

\n" +"

ne correspond pas

\n" +"

à un noeud actif

", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setToolTip(QtGui.QApplication.translate("DError", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DError", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DError", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DError = QtGui.QWidget() + ui = Ui_DError() + ui.setupUi(DError) + DError.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desError.ui b/UiQT4/desError.ui new file mode 100644 index 00000000..f265353e --- /dev/null +++ b/UiQT4/desError.ui @@ -0,0 +1,97 @@ + + DError + + + + 0 + 0 + 482 + 480 + + + + + 350 + 0 + + + + DInactif + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">Le noeud selectionné</p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">ne correspond pas</p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">à un noeud actif</p></body></html> + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 171 + 20 + + + + + + + + suppression du mot clef + + + &Supprimer + + + Alt+S + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 171 + 20 + + + + + + + + + + qPixmapFromMimeSource + + + diff --git a/UiQT4/desFormule.py b/UiQT4/desFormule.py new file mode 100644 index 00000000..2ac2323d --- /dev/null +++ b/UiQT4/desFormule.py @@ -0,0 +1,207 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desFormule.ui' +# +# Created: Wed Jul 23 11:43:53 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DFormule(object): + def setupUi(self, DFormule): + DFormule.setObjectName("DFormule") + DFormule.resize(529,493) + DFormule.setMinimumSize(QtCore.QSize(505,0)) + self.gridlayout = QtGui.QGridLayout(DFormule) + self.gridlayout.setObjectName("gridlayout") + self.hboxlayout = QtGui.QHBoxLayout() + self.hboxlayout.setObjectName("hboxlayout") + self.bSup = QtGui.QPushButton(DFormule) + self.bSup.setMinimumSize(QtCore.QSize(0,30)) + self.bSup.setAutoDefault(True) + self.bSup.setObjectName("bSup") + self.hboxlayout.addWidget(self.bSup) + self.bOk = QtGui.QPushButton(DFormule) + self.bOk.setMinimumSize(QtCore.QSize(0,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setObjectName("bOk") + self.hboxlayout.addWidget(self.bOk) + self.bHelp = QtGui.QPushButton(DFormule) + self.bHelp.setMinimumSize(QtCore.QSize(0,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setObjectName("bHelp") + self.hboxlayout.addWidget(self.bHelp) + self.gridlayout.addLayout(self.hboxlayout,2,0,1,1) + self.Commentaire = QtGui.QLabel(DFormule) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout.addWidget(self.Commentaire,1,0,1,1) + self.TWChoix = QtGui.QTabWidget(DFormule) + self.TWChoix.setObjectName("TWChoix") + self.Formule = QtGui.QWidget() + self.Formule.setGeometry(QtCore.QRect(0,0,507,384)) + self.Formule.setObjectName("Formule") + self.gridlayout1 = QtGui.QGridLayout(self.Formule) + self.gridlayout1.setObjectName("gridlayout1") + self.textLabel1 = QtGui.QLabel(self.Formule) + self.textLabel1.setMinimumSize(QtCore.QSize(0,0)) + self.textLabel1.setWordWrap(False) + self.textLabel1.setObjectName("textLabel1") + self.gridlayout1.addWidget(self.textLabel1,0,0,1,1) + self.textLabel1_3 = QtGui.QLabel(self.Formule) + self.textLabel1_3.setWordWrap(False) + self.textLabel1_3.setObjectName("textLabel1_3") + self.gridlayout1.addWidget(self.textLabel1_3,6,0,1,2) + self.hboxlayout1 = QtGui.QHBoxLayout() + self.hboxlayout1.setObjectName("hboxlayout1") + self.LENomFormule = QtGui.QLineEdit(self.Formule) + self.LENomFormule.setMinimumSize(QtCore.QSize(0,40)) + self.LENomFormule.setObjectName("LENomFormule") + self.hboxlayout1.addWidget(self.LENomFormule) + self.hboxlayout2 = QtGui.QHBoxLayout() + self.hboxlayout2.setObjectName("hboxlayout2") + self.textLabel1_6 = QtGui.QLabel(self.Formule) + self.textLabel1_6.setWordWrap(False) + self.textLabel1_6.setObjectName("textLabel1_6") + self.hboxlayout2.addWidget(self.textLabel1_6) + self.LENomsArgs = QtGui.QLineEdit(self.Formule) + self.LENomsArgs.setMinimumSize(QtCore.QSize(230,40)) + self.LENomsArgs.setObjectName("LENomsArgs") + self.hboxlayout2.addWidget(self.LENomsArgs) + self.textLabel1_6_2 = QtGui.QLabel(self.Formule) + self.textLabel1_6_2.setWordWrap(False) + self.textLabel1_6_2.setObjectName("textLabel1_6_2") + self.hboxlayout2.addWidget(self.textLabel1_6_2) + self.hboxlayout1.addLayout(self.hboxlayout2) + self.gridlayout1.addLayout(self.hboxlayout1,2,0,1,2) + self.textLabel2 = QtGui.QLabel(self.Formule) + self.textLabel2.setWordWrap(False) + self.textLabel2.setObjectName("textLabel2") + self.gridlayout1.addWidget(self.textLabel2,1,1,1,1) + self.textLabel1_3_2 = QtGui.QLabel(self.Formule) + self.textLabel1_3_2.setWordWrap(False) + self.textLabel1_3_2.setObjectName("textLabel1_3_2") + self.gridlayout1.addWidget(self.textLabel1_3_2,7,0,1,2) + self.textLabel2_2 = QtGui.QLabel(self.Formule) + self.textLabel2_2.setWordWrap(False) + self.textLabel2_2.setObjectName("textLabel2_2") + self.gridlayout1.addWidget(self.textLabel2_2,3,0,1,2) + self.textLabel1_5 = QtGui.QLabel(self.Formule) + self.textLabel1_5.setMinimumSize(QtCore.QSize(0,0)) + self.textLabel1_5.setWordWrap(False) + self.textLabel1_5.setObjectName("textLabel1_5") + self.gridlayout1.addWidget(self.textLabel1_5,4,0,1,2) + self.LECorpsFormule = QtGui.QLineEdit(self.Formule) + self.LECorpsFormule.setMinimumSize(QtCore.QSize(0,30)) + self.LECorpsFormule.setObjectName("LECorpsFormule") + self.gridlayout1.addWidget(self.LECorpsFormule,5,0,1,2) + self.textLabel1_2 = QtGui.QLabel(self.Formule) + self.textLabel1_2.setWordWrap(False) + self.textLabel1_2.setObjectName("textLabel1_2") + self.gridlayout1.addWidget(self.textLabel1_2,0,1,1,1) + self.TWChoix.addTab(self.Formule,"") + self.Commande = QtGui.QWidget() + self.Commande.setGeometry(QtCore.QRect(0,0,507,384)) + self.Commande.setObjectName("Commande") + self.gridLayout_2 = QtGui.QGridLayout(self.Commande) + self.gridLayout_2.setObjectName("gridLayout_2") + self.textLabel1_4 = QtGui.QLabel(self.Commande) + self.textLabel1_4.setWordWrap(False) + self.textLabel1_4.setObjectName("textLabel1_4") + self.gridLayout_2.addWidget(self.textLabel1_4,0,0,1,1) + self.groupBox = QtGui.QGroupBox(self.Commande) + self.groupBox.setObjectName("groupBox") + self.gridLayout = QtGui.QGridLayout(self.groupBox) + self.gridLayout.setObjectName("gridLayout") + self.RBalpha = QtGui.QRadioButton(self.groupBox) + self.RBalpha.setChecked(True) + self.RBalpha.setObjectName("RBalpha") + self.gridLayout.addWidget(self.RBalpha,0,0,1,1) + self.RBGroupe = QtGui.QRadioButton(self.groupBox) + self.RBGroupe.setObjectName("RBGroupe") + self.gridLayout.addWidget(self.RBGroupe,1,0,1,1) + self.gridLayout_2.addWidget(self.groupBox,0,1,2,1) + self.horizontalLayout = QtGui.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + self.textLabel6 = QtGui.QLabel(self.Commande) + self.textLabel6.setMinimumSize(QtCore.QSize(50,30)) + self.textLabel6.setWordWrap(False) + self.textLabel6.setObjectName("textLabel6") + self.horizontalLayout.addWidget(self.textLabel6) + self.LEFiltre = QtGui.QLineEdit(self.Commande) + self.LEFiltre.setMinimumSize(QtCore.QSize(160,30)) + self.LEFiltre.setObjectName("LEFiltre") + self.horizontalLayout.addWidget(self.LEFiltre) + self.BNext = QtGui.QPushButton(self.Commande) + self.BNext.setObjectName("BNext") + self.horizontalLayout.addWidget(self.BNext) + self.gridLayout_2.addLayout(self.horizontalLayout,1,0,1,1) + self.LBNouvCommande = QtGui.QListWidget(self.Commande) + self.LBNouvCommande.setObjectName("LBNouvCommande") + self.gridLayout_2.addWidget(self.LBNouvCommande,2,0,1,2) + self.textLabel4 = QtGui.QLabel(self.Commande) + self.textLabel4.setWordWrap(False) + self.textLabel4.setObjectName("textLabel4") + self.gridLayout_2.addWidget(self.textLabel4,3,0,1,2) + self.TWChoix.addTab(self.Commande,"") + self.gridlayout.addWidget(self.TWChoix,0,0,1,1) + + self.retranslateUi(DFormule) + self.TWChoix.setCurrentIndex(0) + QtCore.QMetaObject.connectSlotsByName(DFormule) + DFormule.setTabOrder(self.LEFiltre,self.LENomFormule) + DFormule.setTabOrder(self.LENomFormule,self.LENomsArgs) + DFormule.setTabOrder(self.LENomsArgs,self.LECorpsFormule) + DFormule.setTabOrder(self.LECorpsFormule,self.bSup) + DFormule.setTabOrder(self.bSup,self.bOk) + DFormule.setTabOrder(self.bOk,self.bHelp) + DFormule.setTabOrder(self.bHelp,self.TWChoix) + DFormule.setTabOrder(self.TWChoix,self.RBalpha) + DFormule.setTabOrder(self.RBalpha,self.RBGroupe) + DFormule.setTabOrder(self.RBGroupe,self.LBNouvCommande) + + def retranslateUi(self, DFormule): + DFormule.setWindowTitle(QtGui.QApplication.translate("DFormule", "DMacro", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setToolTip(QtGui.QApplication.translate("DFormule", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DFormule", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DFormule", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setToolTip(QtGui.QApplication.translate("DFormule", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DFormule", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DFormule", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setToolTip(QtGui.QApplication.translate("DFormule", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DFormule", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DFormule", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1.setText(QtGui.QApplication.translate("DFormule", "

Nom de la formule

", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_3.setText(QtGui.QApplication.translate("DFormule", "Retour-Chariot permet de vérifier que l\'expression est valide.", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_6.setText(QtGui.QApplication.translate("DFormule", "

(

", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_6_2.setText(QtGui.QApplication.translate("DFormule", "

)

", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel2.setText(QtGui.QApplication.translate("DFormule", "variables séparées par des \",\"\n" +" par ex. : x,y,z", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_3_2.setText(QtGui.QApplication.translate("DFormule", "Ce n\'est qu\'après avoir appuyé sur le bouton Valider que les nouvelles\n" +"valeurs seront effectivement prises en compte", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel2_2.setText(QtGui.QApplication.translate("DFormule", "=", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_5.setText(QtGui.QApplication.translate("DFormule", "

Expression

", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_2.setText(QtGui.QApplication.translate("DFormule", "

Arguments

", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.Formule), QtGui.QApplication.translate("DFormule", "Définition Formule", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_4.setText(QtGui.QApplication.translate("DFormule", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox.setTitle(QtGui.QApplication.translate("DFormule", "Affichage", None, QtGui.QApplication.UnicodeUTF8)) + self.RBalpha.setText(QtGui.QApplication.translate("DFormule", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) + self.RBGroupe.setText(QtGui.QApplication.translate("DFormule", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel6.setText(QtGui.QApplication.translate("DFormule", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) + self.BNext.setText(QtGui.QApplication.translate("DFormule", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel4.setText(QtGui.QApplication.translate("DFormule", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DFormule", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DFormule = QtGui.QWidget() + ui = Ui_DFormule() + ui.setupUi(DFormule) + DFormule.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desFormule.ui b/UiQT4/desFormule.ui new file mode 100644 index 00000000..e0d4f44a --- /dev/null +++ b/UiQT4/desFormule.ui @@ -0,0 +1,389 @@ + + DFormule + + + + 0 + 0 + 529 + 493 + + + + + 505 + 0 + + + + DMacro + + + + + + + + + 0 + 30 + + + + suppression du mot clef + + + &Supprimer + + + Alt+S + + + true + + + + + + + + 0 + 30 + + + + validation de la saisie + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + + + + + + 0 + 30 + + + + affichage documentation aster + + + &Documentation + + + Alt+D + + + true + + + + + + + + + + + + false + + + + + + + 0 + + + + + 0 + 0 + 507 + 384 + + + + Définition Formule + + + + + + + 0 + 0 + + + + <h3><p align="center"><u><b>Nom de la formule</b></u></p></h3> + + + false + + + + + + + Retour-Chariot permet de vérifier que l'expression est valide. + + + false + + + + + + + + + + 0 + 40 + + + + + + + + + + <h1><b>(</b></h1> + + + false + + + + + + + + 230 + 40 + + + + + + + + <h1><b>)</b></h1> + + + false + + + + + + + + + + + variables séparées par des "," + par ex. : x,y,z + + + false + + + + + + + Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles +valeurs seront effectivement prises en compte + + + false + + + + + + + <font size="+4" face="Helvetica"><b>=</b></font> + + + false + + + + + + + + 0 + 0 + + + + <h3><p align="center"><u><b>Expression</b></u></p></h3> + + + false + + + + + + + + 0 + 30 + + + + + + + + <h3><p align="center"><u><b>Arguments</b></u></p></h3> + + + false + + + + + + + + + 0 + 0 + 507 + 384 + + + + Nouvelle Commande + + + + + + <b><u>Commandes :</u></b> + + + false + + + + + + + Affichage + + + + + + alphabétique + + + true + + + + + + + par groupe + + + + + + + + + + + + + 50 + 30 + + + + Filtre + + + false + + + + + + + + 160 + 30 + + + + + + + + Suivant + + + + + + + + + + + + La commande choisie sera ajoutée APRES la commande courante + + + false + + + + + + + + + + + qPixmapFromMimeSource + + LEFiltre + LENomFormule + LENomsArgs + LECorpsFormule + bSup + bOk + bHelp + TWChoix + RBalpha + RBGroupe + LBNouvCommande + + + + diff --git a/UiQT4/desInactif.py b/UiQT4/desInactif.py new file mode 100644 index 00000000..7a8ce1df --- /dev/null +++ b/UiQT4/desInactif.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desInactif.ui' +# +# Created: Wed Jul 9 10:11:21 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DInactif(object): + def setupUi(self, DInactif): + DInactif.setObjectName("DInactif") + DInactif.resize(452,480) + DInactif.setMinimumSize(QtCore.QSize(350,0)) + self.gridLayout = QtGui.QGridLayout(DInactif) + self.gridLayout.setObjectName("gridLayout") + self.textLabel1_3 = QtGui.QLabel(DInactif) + self.textLabel1_3.setWordWrap(False) + self.textLabel1_3.setObjectName("textLabel1_3") + self.gridLayout.addWidget(self.textLabel1_3,0,0,1,3) + self.textLabel1 = QtGui.QLabel(DInactif) + self.textLabel1.setWordWrap(False) + self.textLabel1.setObjectName("textLabel1") + self.gridLayout.addWidget(self.textLabel1,1,0,1,3) + spacerItem = QtGui.QSpacerItem(167,146,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.gridLayout.addItem(spacerItem,2,0,1,1) + self.bSup = QtGui.QPushButton(DInactif) + self.bSup.setAutoDefault(True) + self.bSup.setObjectName("bSup") + self.gridLayout.addWidget(self.bSup,2,1,1,1) + spacerItem1 = QtGui.QSpacerItem(166,146,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.gridLayout.addItem(spacerItem1,2,2,1,1) + + self.retranslateUi(DInactif) + QtCore.QMetaObject.connectSlotsByName(DInactif) + + def retranslateUi(self, DInactif): + DInactif.setWindowTitle(QtGui.QApplication.translate("DInactif", "DInactif", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_3.setText(QtGui.QApplication.translate("DInactif", "\n" +"\n" +"

Le noeud sélectionné ne correspond

\n" +"

pas à un objet actif.

", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1.setText(QtGui.QApplication.translate("DInactif", "\n" +"\n" +"

Seules les commandes placées

\n" +"

entre : DEBUT / FIN sont actives

", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setToolTip(QtGui.QApplication.translate("DInactif", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DInactif", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DInactif", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DInactif = QtGui.QWidget() + ui = Ui_DInactif() + ui.setupUi(DInactif) + DInactif.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desInactif.ui b/UiQT4/desInactif.ui new file mode 100644 index 00000000..cc49e51e --- /dev/null +++ b/UiQT4/desInactif.ui @@ -0,0 +1,106 @@ + + DInactif + + + + 0 + 0 + 452 + 480 + + + + + 350 + 0 + + + + DInactif + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:x-large;"><span style=" font-size:x-large;">Le noeud sélectionné ne correspond</span></p> +<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:x-large;"><span style=" font-size:x-large;"> pas à un objet actif.</span></p></body></html> + + + false + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:x-large;"><span style=" font-size:x-large;">Seules les commandes placées</span></p> +<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:x-large;"><span style=" font-size:x-large;"> entre : DEBUT / FIN sont actives </span></p></body></html> + + + false + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 167 + 146 + + + + + + + + suppression du mot clef + + + &Supprimer + + + Alt+S + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 166 + 146 + + + + + + + + qPixmapFromMimeSource + + + diff --git a/UiQT4/desInclude.py b/UiQT4/desInclude.py new file mode 100644 index 00000000..73a967c7 --- /dev/null +++ b/UiQT4/desInclude.py @@ -0,0 +1,207 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desInclude.ui' +# +# Created: Tue Oct 7 16:59:34 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DInc1(object): + def setupUi(self, DInc1): + DInc1.setObjectName("DInc1") + DInc1.resize(521,511) + DInc1.setMinimumSize(QtCore.QSize(505,0)) + self.gridlayout = QtGui.QGridLayout(DInc1) + self.gridlayout.setObjectName("gridlayout") + self.bOk = QtGui.QPushButton(DInc1) + self.bOk.setMinimumSize(QtCore.QSize(0,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setObjectName("bOk") + self.gridlayout.addWidget(self.bOk,2,1,1,1) + self.bHelp = QtGui.QPushButton(DInc1) + self.bHelp.setMinimumSize(QtCore.QSize(0,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setObjectName("bHelp") + self.gridlayout.addWidget(self.bHelp,2,2,1,1) + self.bSup = QtGui.QPushButton(DInc1) + self.bSup.setMinimumSize(QtCore.QSize(0,30)) + self.bSup.setAutoDefault(True) + self.bSup.setObjectName("bSup") + self.gridlayout.addWidget(self.bSup,2,0,1,1) + self.Commentaire = QtGui.QLabel(DInc1) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout.addWidget(self.Commentaire,1,0,1,3) + self.TWChoix = QtGui.QTabWidget(DInc1) + self.TWChoix.setObjectName("TWChoix") + self.MotClef = QtGui.QWidget() + self.MotClef.setGeometry(QtCore.QRect(0,0,499,400)) + self.MotClef.setObjectName("MotClef") + self.gridlayout1 = QtGui.QGridLayout(self.MotClef) + self.gridlayout1.setObjectName("gridlayout1") + self.LBMCPermis = QtGui.QListWidget(self.MotClef) + self.LBMCPermis.setMinimumSize(QtCore.QSize(0,0)) + self.LBMCPermis.setObjectName("LBMCPermis") + self.gridlayout1.addWidget(self.LBMCPermis,1,0,1,1) + self.textLabel1 = QtGui.QLabel(self.MotClef) + self.textLabel1.setMinimumSize(QtCore.QSize(0,0)) + self.textLabel1.setWordWrap(False) + self.textLabel1.setObjectName("textLabel1") + self.gridlayout1.addWidget(self.textLabel1,0,0,1,1) + self.LBRegles = QtGui.QListWidget(self.MotClef) + self.LBRegles.setObjectName("LBRegles") + self.gridlayout1.addWidget(self.LBRegles,1,1,1,1) + self.textLabel1_2 = QtGui.QLabel(self.MotClef) + self.textLabel1_2.setWordWrap(False) + self.textLabel1_2.setObjectName("textLabel1_2") + self.gridlayout1.addWidget(self.textLabel1_2,0,1,1,1) + self.TWChoix.addTab(self.MotClef,"") + self.Commande = QtGui.QWidget() + self.Commande.setGeometry(QtCore.QRect(0,0,499,400)) + self.Commande.setObjectName("Commande") + self.gridLayout_2 = QtGui.QGridLayout(self.Commande) + self.gridLayout_2.setObjectName("gridLayout_2") + self.textLabel1_4 = QtGui.QLabel(self.Commande) + self.textLabel1_4.setWordWrap(False) + self.textLabel1_4.setObjectName("textLabel1_4") + self.gridLayout_2.addWidget(self.textLabel1_4,0,0,1,3) + self.groupBox = QtGui.QGroupBox(self.Commande) + self.groupBox.setObjectName("groupBox") + self.gridLayout = QtGui.QGridLayout(self.groupBox) + self.gridLayout.setObjectName("gridLayout") + self.RBalpha = QtGui.QRadioButton(self.groupBox) + self.RBalpha.setChecked(True) + self.RBalpha.setObjectName("RBalpha") + self.gridLayout.addWidget(self.RBalpha,0,0,1,1) + self.RBGroupe = QtGui.QRadioButton(self.groupBox) + self.RBGroupe.setObjectName("RBGroupe") + self.gridLayout.addWidget(self.RBGroupe,1,0,1,1) + self.gridLayout_2.addWidget(self.groupBox,0,3,2,1) + self.textLabel6 = QtGui.QLabel(self.Commande) + self.textLabel6.setMinimumSize(QtCore.QSize(50,30)) + self.textLabel6.setWordWrap(False) + self.textLabel6.setObjectName("textLabel6") + self.gridLayout_2.addWidget(self.textLabel6,1,0,1,1) + self.LEFiltre = QtGui.QLineEdit(self.Commande) + self.LEFiltre.setMinimumSize(QtCore.QSize(160,30)) + self.LEFiltre.setObjectName("LEFiltre") + self.gridLayout_2.addWidget(self.LEFiltre,1,1,1,1) + self.BNext = QtGui.QPushButton(self.Commande) + self.BNext.setObjectName("BNext") + self.gridLayout_2.addWidget(self.BNext,1,2,1,1) + self.LBNouvCommande = QtGui.QListWidget(self.Commande) + self.LBNouvCommande.setObjectName("LBNouvCommande") + self.gridLayout_2.addWidget(self.LBNouvCommande,2,0,1,4) + self.textLabel4 = QtGui.QLabel(self.Commande) + self.textLabel4.setWordWrap(False) + self.textLabel4.setObjectName("textLabel4") + self.gridLayout_2.addWidget(self.textLabel4,3,0,1,4) + self.TWChoix.addTab(self.Commande,"") + self.maPageOk = QtGui.QWidget() + self.maPageOk.setGeometry(QtCore.QRect(0,0,499,400)) + self.maPageOk.setObjectName("maPageOk") + self.textLabel1_3 = QtGui.QLabel(self.maPageOk) + self.textLabel1_3.setGeometry(QtCore.QRect(30,40,440,41)) + self.textLabel1_3.setWordWrap(False) + self.textLabel1_3.setObjectName("textLabel1_3") + self.LENomFichier = QtGui.QLineEdit(self.maPageOk) + self.LENomFichier.setGeometry(QtCore.QRect(18,117,450,40)) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.LENomFichier.sizePolicy().hasHeightForWidth()) + self.LENomFichier.setSizePolicy(sizePolicy) + self.LENomFichier.setMinimumSize(QtCore.QSize(450,40)) + self.LENomFichier.setObjectName("LENomFichier") + self.BBrowse = QtGui.QPushButton(self.maPageOk) + self.BBrowse.setGeometry(QtCore.QRect(280,240,161,41)) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.BBrowse.sizePolicy().hasHeightForWidth()) + self.BBrowse.setSizePolicy(sizePolicy) + self.BBrowse.setObjectName("BBrowse") + self.BChangeFile = QtGui.QPushButton(self.maPageOk) + self.BChangeFile.setGeometry(QtCore.QRect(280,290,161,41)) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.BChangeFile.sizePolicy().hasHeightForWidth()) + self.BChangeFile.setSizePolicy(sizePolicy) + self.BChangeFile.setObjectName("BChangeFile") + self.TWChoix.addTab(self.maPageOk,"") + self.maPageBad = QtGui.QWidget() + self.maPageBad.setGeometry(QtCore.QRect(0,0,499,400)) + self.maPageBad.setObjectName("maPageBad") + self.gridlayout2 = QtGui.QGridLayout(self.maPageBad) + self.gridlayout2.setObjectName("gridlayout2") + self.textLabel1_5 = QtGui.QLabel(self.maPageBad) + self.textLabel1_5.setWordWrap(False) + self.textLabel1_5.setObjectName("textLabel1_5") + self.gridlayout2.addWidget(self.textLabel1_5,0,0,1,1) + self.TWChoix.addTab(self.maPageBad,"") + self.gridlayout.addWidget(self.TWChoix,0,0,1,3) + + self.retranslateUi(DInc1) + self.TWChoix.setCurrentIndex(2) + QtCore.QMetaObject.connectSlotsByName(DInc1) + DInc1.setTabOrder(self.LEFiltre,self.LENomFichier) + DInc1.setTabOrder(self.LENomFichier,self.bHelp) + DInc1.setTabOrder(self.bHelp,self.bSup) + DInc1.setTabOrder(self.bSup,self.bOk) + DInc1.setTabOrder(self.bOk,self.TWChoix) + DInc1.setTabOrder(self.TWChoix,self.LBMCPermis) + DInc1.setTabOrder(self.LBMCPermis,self.LBRegles) + DInc1.setTabOrder(self.LBRegles,self.LBNouvCommande) + DInc1.setTabOrder(self.LBNouvCommande,self.RBalpha) + DInc1.setTabOrder(self.RBalpha,self.BBrowse) + DInc1.setTabOrder(self.BBrowse,self.BChangeFile) + + def retranslateUi(self, DInc1): + DInc1.setWindowTitle(QtGui.QApplication.translate("DInc1", "DMacro", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setToolTip(QtGui.QApplication.translate("DInc1", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DInc1", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DInc1", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setToolTip(QtGui.QApplication.translate("DInc1", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DInc1", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DInc1", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setToolTip(QtGui.QApplication.translate("DInc1", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DInc1", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DInc1", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1.setText(QtGui.QApplication.translate("DInc1", "

Mots Clefs Permis

", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_2.setText(QtGui.QApplication.translate("DInc1", "

Régles

", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.MotClef), QtGui.QApplication.translate("DInc1", "Ajouter Mot-Clef", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_4.setText(QtGui.QApplication.translate("DInc1", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox.setTitle(QtGui.QApplication.translate("DInc1", "Affichage", None, QtGui.QApplication.UnicodeUTF8)) + self.RBalpha.setText(QtGui.QApplication.translate("DInc1", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) + self.RBGroupe.setText(QtGui.QApplication.translate("DInc1", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel6.setText(QtGui.QApplication.translate("DInc1", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) + self.BNext.setText(QtGui.QApplication.translate("DInc1", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel4.setText(QtGui.QApplication.translate("DInc1", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DInc1", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_3.setText(QtGui.QApplication.translate("DInc1", "La commande INCLUDE requiert un nom de Fichier :", None, QtGui.QApplication.UnicodeUTF8)) + self.BBrowse.setText(QtGui.QApplication.translate("DInc1", "Edit", None, QtGui.QApplication.UnicodeUTF8)) + self.BChangeFile.setText(QtGui.QApplication.translate("DInc1", "Autre Fichier", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.maPageOk), QtGui.QApplication.translate("DInc1", "Fichier Include", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_5.setText(QtGui.QApplication.translate("DInc1", "\n" +"\n" +"

La commande INCLUDE n\'a pas de fichier associé.

\n" +"

Il faut d\'abord choisir un numéro d\'unité

", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.maPageBad), QtGui.QApplication.translate("DInc1", "Fichier Inc", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DInc1 = QtGui.QWidget() + ui = Ui_DInc1() + ui.setupUi(DInc1) + DInc1.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desInclude.ui b/UiQT4/desInclude.ui new file mode 100644 index 00000000..dc21a3f6 --- /dev/null +++ b/UiQT4/desInclude.ui @@ -0,0 +1,398 @@ + + DInc1 + + + + 0 + 0 + 521 + 511 + + + + + 505 + 0 + + + + DMacro + + + + + + + 0 + 30 + + + + validation de la saisie + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + + + + + + 0 + 30 + + + + affichage documentation aster + + + &Documentation + + + Alt+D + + + true + + + + + + + + 0 + 30 + + + + suppression du mot clef + + + &Supprimer + + + Alt+S + + + true + + + + + + + + + + false + + + + + + + 2 + + + + + 0 + 0 + 499 + 400 + + + + Ajouter Mot-Clef + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + <h3><p align="center"><u><b>Mots Clefs Permis</b></u></p></h3> + + + false + + + + + + + + + + <h3><p align="center"><u><b>Régles</b></u></p></h3> + + + false + + + + + + + + + 0 + 0 + 499 + 400 + + + + Nouvelle Commande + + + + + + <b><u>Commandes :</u></b> + + + false + + + + + + + Affichage + + + + + + alphabétique + + + true + + + + + + + par groupe + + + + + + + + + + + 50 + 30 + + + + Filtre + + + false + + + + + + + + 160 + 30 + + + + + + + + Suivant + + + + + + + + + + La commande choisie sera ajoutée APRES la commande courante + + + false + + + + + + + + + 0 + 0 + 499 + 400 + + + + Fichier Include + + + + + 30 + 40 + 440 + 41 + + + + <font size="+1">La commande INCLUDE requiert un nom de Fichier :</font> + + + false + + + + + + 18 + 117 + 450 + 40 + + + + + 0 + 0 + + + + + 450 + 40 + + + + + + + 280 + 240 + 161 + 41 + + + + + 0 + 0 + + + + Edit + + + + + + 280 + 290 + 161 + 41 + + + + + 0 + 0 + + + + Autre Fichier + + + + + + + 0 + 0 + 499 + 400 + + + + Fichier Inc + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:large;"><span style=" font-size:11pt; font-weight:600;">La commande INCLUDE n'a pas de fichier associé. </span></p> +<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; font-weight:600;"><span style=" font-size:large;">Il faut d'abord choisir un numéro d'unité</span></p></body></html> + + + false + + + + + + + + + + + qPixmapFromMimeSource + + LEFiltre + LENomFichier + bHelp + bSup + bOk + TWChoix + LBMCPermis + LBRegles + LBNouvCommande + RBalpha + BBrowse + BChangeFile + + + + diff --git a/UiQT4/desListeParam.py b/UiQT4/desListeParam.py new file mode 100644 index 00000000..ade7e63b --- /dev/null +++ b/UiQT4/desListeParam.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desListeParam.ui' +# +# Created: Fri Jul 18 16:24:34 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DLisParam(object): + def setupUi(self, DLisParam): + DLisParam.setObjectName("DLisParam") + DLisParam.resize(413,394) + self.gridlayout = QtGui.QGridLayout(DLisParam) + self.gridlayout.setObjectName("gridlayout") + self.LBParam = QtGui.QListWidget(DLisParam) + self.LBParam.setObjectName("LBParam") + self.gridlayout.addWidget(self.LBParam,0,0,1,1) + + self.retranslateUi(DLisParam) + + def retranslateUi(self, DLisParam): + DLisParam.setWindowTitle(QtGui.QApplication.translate("DLisParam", "Sélection de paramétres", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DLisParam = QtGui.QWidget() + ui = Ui_DLisParam() + ui.setupUi(DLisParam) + DLisParam.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desListeParam.ui b/UiQT4/desListeParam.ui new file mode 100644 index 00000000..0e3a9fe3 --- /dev/null +++ b/UiQT4/desListeParam.ui @@ -0,0 +1,26 @@ + + + + + DLisParam + + + + 0 + 0 + 413 + 394 + + + + Sélection de paramétres + + + + + + + + + qPixmapFromMimeSource + diff --git a/UiQT4/desMCFact.py b/UiQT4/desMCFact.py new file mode 100644 index 00000000..ede80549 --- /dev/null +++ b/UiQT4/desMCFact.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desMCFact.ui' +# +# Created: Fri Jul 18 16:24:34 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DMCFact(object): + def setupUi(self, DMCFact): + DMCFact.setObjectName("DMCFact") + DMCFact.resize(511,499) + DMCFact.setMinimumSize(QtCore.QSize(505,0)) + self.gridlayout = QtGui.QGridLayout(DMCFact) + self.gridlayout.setObjectName("gridlayout") + self.TWChoix = QtGui.QTabWidget(DMCFact) + self.TWChoix.setObjectName("TWChoix") + self.MotClef = QtGui.QWidget() + self.MotClef.setObjectName("MotClef") + self.gridlayout1 = QtGui.QGridLayout(self.MotClef) + self.gridlayout1.setObjectName("gridlayout1") + self.textLabel1 = QtGui.QLabel(self.MotClef) + self.textLabel1.setMinimumSize(QtCore.QSize(0,0)) + self.textLabel1.setWordWrap(False) + self.textLabel1.setObjectName("textLabel1") + self.gridlayout1.addWidget(self.textLabel1,0,0,1,1) + self.LBMCPermis = QtGui.QListWidget(self.MotClef) + self.LBMCPermis.setMinimumSize(QtCore.QSize(0,0)) + self.LBMCPermis.setObjectName("LBMCPermis") + self.gridlayout1.addWidget(self.LBMCPermis,1,0,1,1) + self.LBRegles = QtGui.QListWidget(self.MotClef) + self.LBRegles.setObjectName("LBRegles") + self.gridlayout1.addWidget(self.LBRegles,1,1,1,1) + self.textLabel1_2 = QtGui.QLabel(self.MotClef) + self.textLabel1_2.setWordWrap(False) + self.textLabel1_2.setObjectName("textLabel1_2") + self.gridlayout1.addWidget(self.textLabel1_2,0,1,1,1) + self.TWChoix.addTab(self.MotClef,"") + self.gridlayout.addWidget(self.TWChoix,0,0,1,3) + self.bSup = QtGui.QPushButton(DMCFact) + self.bSup.setAutoDefault(True) + self.bSup.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCFact", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))) + self.bSup.setObjectName("bSup") + self.gridlayout.addWidget(self.bSup,2,0,1,1) + self.Commentaire = QtGui.QLabel(DMCFact) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout.addWidget(self.Commentaire,1,0,1,3) + self.bHelp = QtGui.QPushButton(DMCFact) + self.bHelp.setAutoDefault(True) + self.bHelp.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCFact", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))) + self.bHelp.setObjectName("bHelp") + self.gridlayout.addWidget(self.bHelp,2,2,1,1) + self.bOk = QtGui.QPushButton(DMCFact) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCFact", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))) + self.bOk.setObjectName("bOk") + self.gridlayout.addWidget(self.bOk,2,1,1,1) + + self.retranslateUi(DMCFact) + + def retranslateUi(self, DMCFact): + DMCFact.setWindowTitle(QtGui.QApplication.translate("DMCFact", "DMacro", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1.setText(QtGui.QApplication.translate("DMCFact", "

Mots Clefs Permis

", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_2.setText(QtGui.QApplication.translate("DMCFact", "

Régles

", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.MotClef), QtGui.QApplication.translate("DMCFact", "Ajouter Mot-Clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DMCFact", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DMCFact", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DMCFact", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DMCFact", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DMCFact", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DMCFact", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DMCFact = QtGui.QWidget() + ui = Ui_DMCFact() + ui.setupUi(DMCFact) + DMCFact.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desMCFact.ui b/UiQT4/desMCFact.ui new file mode 100644 index 00000000..8eb9080d --- /dev/null +++ b/UiQT4/desMCFact.ui @@ -0,0 +1,140 @@ + + + + + DMCFact + + + + 0 + 0 + 511 + 499 + + + + + 505 + 0 + + + + DMacro + + + + + + + Ajouter Mot-Clef + + + + + + + 0 + 0 + + + + <h3><p align="center"><u><b>Mots Clefs Permis</b></u></p></h3> + + + false + + + + + + + + 0 + 0 + + + + + + + + + + + <h3><p align="center"><u><b>Régles</b></u></p></h3> + + + false + + + + + + + + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + + + + + + false + + + + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + + + qPixmapFromMimeSource + diff --git a/UiQT4/desMCListAjout.py b/UiQT4/desMCListAjout.py new file mode 100644 index 00000000..f01c7325 --- /dev/null +++ b/UiQT4/desMCListAjout.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desMCListAjout.ui' +# +# Created: Wed Jul 9 10:11:21 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DMCListAjout(object): + def setupUi(self, DMCListAjout): + DMCListAjout.setObjectName("DMCListAjout") + DMCListAjout.resize(459,472) + DMCListAjout.setMinimumSize(QtCore.QSize(350,0)) + self.gridlayout = QtGui.QGridLayout(DMCListAjout) + self.gridlayout.setObjectName("gridlayout") + self.textLabel1 = QtGui.QLabel(DMCListAjout) + self.textLabel1.setWordWrap(False) + self.textLabel1.setObjectName("textLabel1") + self.gridlayout.addWidget(self.textLabel1,1,0,1,3) + self.textLabel1_2 = QtGui.QLabel(DMCListAjout) + self.textLabel1_2.setWordWrap(False) + self.textLabel1_2.setObjectName("textLabel1_2") + self.gridlayout.addWidget(self.textLabel1_2,2,0,1,3) + self.hboxlayout = QtGui.QHBoxLayout() + self.hboxlayout.setObjectName("hboxlayout") + spacerItem = QtGui.QSpacerItem(60,21,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.hboxlayout.addItem(spacerItem) + self.bAjout = QtGui.QPushButton(DMCListAjout) + self.bAjout.setAutoDefault(True) + self.bAjout.setDefault(True) + self.bAjout.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCListAjout", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))) + self.bAjout.setObjectName("bAjout") + self.hboxlayout.addWidget(self.bAjout) + spacerItem1 = QtGui.QSpacerItem(80,21,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.hboxlayout.addItem(spacerItem1) + self.gridlayout.addLayout(self.hboxlayout,8,0,1,3) + spacerItem2 = QtGui.QSpacerItem(21,40,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridlayout.addItem(spacerItem2,9,1,1,1) + self.textLabel1_2_2 = QtGui.QLabel(DMCListAjout) + self.textLabel1_2_2.setWordWrap(False) + self.textLabel1_2_2.setObjectName("textLabel1_2_2") + self.gridlayout.addWidget(self.textLabel1_2_2,6,0,1,3) + spacerItem3 = QtGui.QSpacerItem(20,20,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridlayout.addItem(spacerItem3,7,1,1,1) + self.MCFacteur = QtGui.QLabel(DMCListAjout) + self.MCFacteur.setWordWrap(False) + self.MCFacteur.setObjectName("MCFacteur") + self.gridlayout.addWidget(self.MCFacteur,4,0,1,3) + spacerItem4 = QtGui.QSpacerItem(21,31,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridlayout.addItem(spacerItem4,5,1,1,1) + spacerItem5 = QtGui.QSpacerItem(21,51,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridlayout.addItem(spacerItem5,3,1,1,1) + spacerItem6 = QtGui.QSpacerItem(41,51,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridlayout.addItem(spacerItem6,0,1,1,1) + self.bSup = QtGui.QPushButton(DMCListAjout) + self.bSup.setAutoDefault(True) + self.bSup.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCListAjout", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))) + self.bSup.setObjectName("bSup") + self.gridlayout.addWidget(self.bSup,10,0,1,1) + self.bOk = QtGui.QPushButton(DMCListAjout) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCListAjout", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))) + self.bOk.setObjectName("bOk") + self.gridlayout.addWidget(self.bOk,10,1,1,1) + self.bHelp = QtGui.QPushButton(DMCListAjout) + self.bHelp.setAutoDefault(True) + self.bHelp.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DMCListAjout", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))) + self.bHelp.setObjectName("bHelp") + self.gridlayout.addWidget(self.bHelp,10,2,1,1) + + self.retranslateUi(DMCListAjout) + + def retranslateUi(self, DMCListAjout): + DMCListAjout.setWindowTitle(QtGui.QApplication.translate("DMCListAjout", "Form1", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1.setText(QtGui.QApplication.translate("DMCListAjout", "

Pour ajouter une autre occurrence

", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_2.setText(QtGui.QApplication.translate("DMCListAjout", "

du mot clef-facteur

", None, QtGui.QApplication.UnicodeUTF8)) + self.bAjout.setText(QtGui.QApplication.translate("DMCListAjout", "&Ajouter", None, QtGui.QApplication.UnicodeUTF8)) + self.bAjout.setShortcut(QtGui.QApplication.translate("DMCListAjout", "Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_2_2.setText(QtGui.QApplication.translate("DMCListAjout", "

cliquez ci-dessous

", None, QtGui.QApplication.UnicodeUTF8)) + self.MCFacteur.setText(QtGui.QApplication.translate("DMCListAjout", "

AFFE

", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DMCListAjout", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DMCListAjout", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DMCListAjout", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DMCListAjout", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DMCListAjout", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DMCListAjout", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DMCListAjout = QtGui.QWidget() + ui = Ui_DMCListAjout() + ui.setupUi(DMCListAjout) + DMCListAjout.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desMCListAjout.ui b/UiQT4/desMCListAjout.ui new file mode 100644 index 00000000..e36dbfae --- /dev/null +++ b/UiQT4/desMCListAjout.ui @@ -0,0 +1,255 @@ + + + + + DMCListAjout + + + + 0 + 0 + 459 + 472 + + + + + 350 + 0 + + + + Form1 + + + + + + <p align="center"><font size="+1">Pour ajouter une autre occurrence</font></p> + + + false + + + + + + + <p align="center"><font size="+1">du mot clef-facteur</font> </p> + + + false + + + + + + + + + + 60 + 21 + + + + QSizePolicy::Expanding + + + Qt::Horizontal + + + + + + + &Ajouter + + + Alt+A + + + true + + + true + + + validation de la saisie + + + + + + + + 80 + 21 + + + + QSizePolicy::Expanding + + + Qt::Horizontal + + + + + + + + + + 21 + 40 + + + + QSizePolicy::Expanding + + + Qt::Vertical + + + + + + + <p align="center"><font size="+1">cliquez ci-dessous</font> </p> + + + false + + + + + + + + 20 + 20 + + + + QSizePolicy::Expanding + + + Qt::Vertical + + + + + + + <p align="center">AFFE</p> + + + false + + + + + + + + 21 + 31 + + + + QSizePolicy::Expanding + + + Qt::Vertical + + + + + + + + 21 + 51 + + + + QSizePolicy::Expanding + + + Qt::Vertical + + + + + + + + 41 + 51 + + + + QSizePolicy::Expanding + + + Qt::Vertical + + + + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + qPixmapFromMimeSource + diff --git a/UiQT4/desParam.py b/UiQT4/desParam.py new file mode 100644 index 00000000..cee894d9 --- /dev/null +++ b/UiQT4/desParam.py @@ -0,0 +1,170 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desParam.ui' +# +# Created: Wed Sep 10 11:20:17 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DParam(object): + def setupUi(self, DParam): + DParam.setObjectName("DParam") + DParam.resize(505,483) + DParam.setMinimumSize(QtCore.QSize(505,0)) + self.gridlayout = QtGui.QGridLayout(DParam) + self.gridlayout.setObjectName("gridlayout") + self.Commentaire = QtGui.QLabel(DParam) + self.Commentaire.setFrameShape(QtGui.QFrame.NoFrame) + self.Commentaire.setFrameShadow(QtGui.QFrame.Plain) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout.addWidget(self.Commentaire,1,0,1,3) + self.TWChoix = QtGui.QTabWidget(DParam) + self.TWChoix.setObjectName("TWChoix") + self.Valeur_Parametre = QtGui.QWidget() + self.Valeur_Parametre.setGeometry(QtCore.QRect(0,0,483,372)) + self.Valeur_Parametre.setObjectName("Valeur_Parametre") + self.gridLayout_3 = QtGui.QGridLayout(self.Valeur_Parametre) + self.gridLayout_3.setObjectName("gridLayout_3") + self.textLabel2_2_2 = QtGui.QLabel(self.Valeur_Parametre) + self.textLabel2_2_2.setWordWrap(False) + self.textLabel2_2_2.setObjectName("textLabel2_2_2") + self.gridLayout_3.addWidget(self.textLabel2_2_2,0,1,1,1) + self.textLabel2_2 = QtGui.QLabel(self.Valeur_Parametre) + self.textLabel2_2.setWordWrap(False) + self.textLabel2_2.setObjectName("textLabel2_2") + self.gridLayout_3.addWidget(self.textLabel2_2,1,0,1,1) + self.lineEditNom = QtGui.QLineEdit(self.Valeur_Parametre) + self.lineEditNom.setMinimumSize(QtCore.QSize(231,31)) + self.lineEditNom.setObjectName("lineEditNom") + self.gridLayout_3.addWidget(self.lineEditNom,1,1,1,1) + self.textLabel2 = QtGui.QLabel(self.Valeur_Parametre) + self.textLabel2.setWordWrap(False) + self.textLabel2.setObjectName("textLabel2") + self.gridLayout_3.addWidget(self.textLabel2,2,0,1,1) + self.lineEditVal = QtGui.QLineEdit(self.Valeur_Parametre) + self.lineEditVal.setMinimumSize(QtCore.QSize(231,31)) + self.lineEditVal.setObjectName("lineEditVal") + self.gridLayout_3.addWidget(self.lineEditVal,2,1,1,1) + self.Commentaire2 = QtGui.QLabel(self.Valeur_Parametre) + self.Commentaire2.setWordWrap(False) + self.Commentaire2.setObjectName("Commentaire2") + self.gridLayout_3.addWidget(self.Commentaire2,3,0,1,2) + self.Commentaire_2 = QtGui.QLabel(self.Valeur_Parametre) + self.Commentaire_2.setWordWrap(False) + self.Commentaire_2.setObjectName("Commentaire_2") + self.gridLayout_3.addWidget(self.Commentaire_2,4,0,1,2) + self.TWChoix.addTab(self.Valeur_Parametre,"") + self.Commande = QtGui.QWidget() + self.Commande.setGeometry(QtCore.QRect(0,0,483,372)) + self.Commande.setObjectName("Commande") + self.gridLayout_2 = QtGui.QGridLayout(self.Commande) + self.gridLayout_2.setObjectName("gridLayout_2") + self.textLabel1_4 = QtGui.QLabel(self.Commande) + self.textLabel1_4.setWordWrap(False) + self.textLabel1_4.setObjectName("textLabel1_4") + self.gridLayout_2.addWidget(self.textLabel1_4,0,0,1,3) + self.groupBox = QtGui.QGroupBox(self.Commande) + self.groupBox.setObjectName("groupBox") + self.gridLayout = QtGui.QGridLayout(self.groupBox) + self.gridLayout.setObjectName("gridLayout") + self.RBGroupe = QtGui.QRadioButton(self.groupBox) + self.RBGroupe.setObjectName("RBGroupe") + self.gridLayout.addWidget(self.RBGroupe,1,0,1,1) + self.RBalpha = QtGui.QRadioButton(self.groupBox) + self.RBalpha.setChecked(True) + self.RBalpha.setObjectName("RBalpha") + self.gridLayout.addWidget(self.RBalpha,0,0,1,1) + self.gridLayout_2.addWidget(self.groupBox,0,3,2,1) + self.textLabel6 = QtGui.QLabel(self.Commande) + self.textLabel6.setMinimumSize(QtCore.QSize(50,30)) + self.textLabel6.setWordWrap(False) + self.textLabel6.setObjectName("textLabel6") + self.gridLayout_2.addWidget(self.textLabel6,1,0,1,1) + self.LEFiltre = QtGui.QLineEdit(self.Commande) + self.LEFiltre.setMinimumSize(QtCore.QSize(160,30)) + self.LEFiltre.setObjectName("LEFiltre") + self.gridLayout_2.addWidget(self.LEFiltre,1,1,1,1) + self.BNext = QtGui.QPushButton(self.Commande) + self.BNext.setObjectName("BNext") + self.gridLayout_2.addWidget(self.BNext,1,2,1,1) + self.LBNouvCommande = QtGui.QListWidget(self.Commande) + self.LBNouvCommande.setObjectName("LBNouvCommande") + self.gridLayout_2.addWidget(self.LBNouvCommande,2,0,1,4) + self.textLabel4 = QtGui.QLabel(self.Commande) + self.textLabel4.setWordWrap(False) + self.textLabel4.setObjectName("textLabel4") + self.gridLayout_2.addWidget(self.textLabel4,3,0,1,4) + self.TWChoix.addTab(self.Commande,"") + self.gridlayout.addWidget(self.TWChoix,0,0,1,3) + self.bOk = QtGui.QPushButton(DParam) + self.bOk.setMinimumSize(QtCore.QSize(0,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setObjectName("bOk") + self.gridlayout.addWidget(self.bOk,2,1,1,1) + self.bSup = QtGui.QPushButton(DParam) + self.bSup.setMinimumSize(QtCore.QSize(0,30)) + self.bSup.setAutoDefault(True) + self.bSup.setObjectName("bSup") + self.gridlayout.addWidget(self.bSup,2,0,1,1) + self.bHelp = QtGui.QPushButton(DParam) + self.bHelp.setMinimumSize(QtCore.QSize(0,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setObjectName("bHelp") + self.gridlayout.addWidget(self.bHelp,2,2,1,1) + + self.retranslateUi(DParam) + self.TWChoix.setCurrentIndex(0) + QtCore.QMetaObject.connectSlotsByName(DParam) + DParam.setTabOrder(self.LEFiltre,self.TWChoix) + DParam.setTabOrder(self.TWChoix,self.lineEditNom) + DParam.setTabOrder(self.lineEditNom,self.lineEditVal) + DParam.setTabOrder(self.lineEditVal,self.LBNouvCommande) + DParam.setTabOrder(self.LBNouvCommande,self.RBalpha) + DParam.setTabOrder(self.RBalpha,self.bOk) + DParam.setTabOrder(self.bOk,self.bSup) + DParam.setTabOrder(self.bSup,self.bHelp) + + def retranslateUi(self, DParam): + DParam.setWindowTitle(QtGui.QApplication.translate("DParam", "DComm", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel2_2_2.setText(QtGui.QApplication.translate("DParam", "

Parametre

", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel2_2.setText(QtGui.QApplication.translate("DParam", " Nom: ", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel2.setText(QtGui.QApplication.translate("DParam", " Valeur: ", None, QtGui.QApplication.UnicodeUTF8)) + self.Commentaire2.setText(QtGui.QApplication.translate("DParam", "Retour Chariot dans une sone de saisie permet de vérifier la \n" +"validité de la valeur saisie.\n" +"\n" +"Les nouvelles valeurs ne seront prises en compte qu\'après avoir \n" +"appuyé sur le bouton Valider.", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.Valeur_Parametre), QtGui.QApplication.translate("DParam", "Valeur Parametre", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_4.setText(QtGui.QApplication.translate("DParam", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox.setTitle(QtGui.QApplication.translate("DParam", "Affichage", None, QtGui.QApplication.UnicodeUTF8)) + self.RBGroupe.setText(QtGui.QApplication.translate("DParam", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) + self.RBalpha.setText(QtGui.QApplication.translate("DParam", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel6.setText(QtGui.QApplication.translate("DParam", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) + self.BNext.setText(QtGui.QApplication.translate("DParam", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel4.setText(QtGui.QApplication.translate("DParam", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DParam", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setToolTip(QtGui.QApplication.translate("DParam", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DParam", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DParam", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setToolTip(QtGui.QApplication.translate("DParam", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DParam", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DParam", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setToolTip(QtGui.QApplication.translate("DParam", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DParam", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DParam", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DParam = QtGui.QWidget() + ui = Ui_DParam() + ui.setupUi(DParam) + DParam.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desParam.ui b/UiQT4/desParam.ui new file mode 100644 index 00000000..faf4ef17 --- /dev/null +++ b/UiQT4/desParam.ui @@ -0,0 +1,317 @@ + + DParam + + + + 0 + 0 + 505 + 483 + + + + + 505 + 0 + + + + DComm + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + + + + false + + + + + + + 0 + + + + + 0 + 0 + 483 + 372 + + + + Valeur Parametre + + + + + + <u><b><p align="center">Parametre</p></b></u> + + + false + + + + + + + <b> Nom: </b> + + + false + + + + + + + + 231 + 31 + + + + + + + + <b> Valeur: </b> + + + false + + + + + + + + 231 + 31 + + + + + + + + Retour Chariot dans une sone de saisie permet de vérifier la +validité de la valeur saisie. + +Les nouvelles valeurs ne seront prises en compte qu'après avoir +appuyé sur le bouton Valider. + + + false + + + + + + + + + + false + + + + + + + + + 0 + 0 + 483 + 372 + + + + Nouvelle Commande + + + + + + <b><u>Commandes :</u></b> + + + false + + + + + + + Affichage + + + + + + par groupe + + + + + + + alphabétique + + + true + + + + + + + + + + + 50 + 30 + + + + Filtre + + + false + + + + + + + + 160 + 30 + + + + + + + + Suivant + + + + + + + + + + La commande choisie sera ajoutée APRES la commande courante + + + false + + + + + + + + + + + + 0 + 30 + + + + validation de la saisie + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + + + + + + 0 + 30 + + + + suppression du mot clef + + + &Supprimer + + + Alt+S + + + true + + + + + + + + 0 + 30 + + + + affichage documentation aster + + + &Documentation + + + Alt+D + + + true + + + + + + + qPixmapFromMimeSource + + LEFiltre + TWChoix + lineEditNom + lineEditVal + LBNouvCommande + RBalpha + bOk + bSup + bHelp + + + + diff --git a/UiQT4/desPlusieursBase.py b/UiQT4/desPlusieursBase.py new file mode 100644 index 00000000..54c612b3 --- /dev/null +++ b/UiQT4/desPlusieursBase.py @@ -0,0 +1,187 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desPlusieursBase.ui' +# +# Created: Fri Jul 18 16:24:35 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DPlusBase(object): + def setupUi(self, DPlusBase): + DPlusBase.setObjectName("DPlusBase") + DPlusBase.resize(552,480) + DPlusBase.setMinimumSize(QtCore.QSize(350,0)) + self.gridlayout = QtGui.QGridLayout(DPlusBase) + self.gridlayout.setObjectName("gridlayout") + self.tabuniqueinto = QtGui.QTabWidget(DPlusBase) + self.tabuniqueinto.setObjectName("tabuniqueinto") + self.Widget8 = QtGui.QWidget() + self.Widget8.setGeometry(QtCore.QRect(0,0,530,435)) + self.Widget8.setObjectName("Widget8") + self.gridlayout1 = QtGui.QGridLayout(self.Widget8) + self.gridlayout1.setObjectName("gridlayout1") + self.textLabel1 = QtGui.QLabel(self.Widget8) + self.textLabel1.setWordWrap(False) + self.textLabel1.setObjectName("textLabel1") + self.gridlayout1.addWidget(self.textLabel1,0,0,1,1) + self.LBValeurs = QtGui.QListWidget(self.Widget8) + self.LBValeurs.setMinimumSize(QtCore.QSize(200,0)) + self.LBValeurs.setObjectName("LBValeurs") + self.gridlayout1.addWidget(self.LBValeurs,1,0,9,1) + spacerItem = QtGui.QSpacerItem(21,231,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridlayout1.addItem(spacerItem,5,1,5,2) + spacerItem1 = QtGui.QSpacerItem(31,30,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridlayout1.addItem(spacerItem1,0,1,1,2) + self.BAjout1Val = QtGui.QToolButton(self.Widget8) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.BAjout1Val.sizePolicy().hasHeightForWidth()) + self.BAjout1Val.setSizePolicy(sizePolicy) + self.BAjout1Val.setMinimumSize(QtCore.QSize(40,30)) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("../../EficasV1/Editeur/icons/arrow_left.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off) + self.BAjout1Val.setIcon(icon) + self.BAjout1Val.setObjectName("BAjout1Val") + self.gridlayout1.addWidget(self.BAjout1Val,2,1,1,2) + spacerItem2 = QtGui.QSpacerItem(150,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.gridlayout1.addItem(spacerItem2,8,2,1,3) + self.vboxlayout = QtGui.QVBoxLayout() + self.vboxlayout.setObjectName("vboxlayout") + self.bParam = QtGui.QPushButton(self.Widget8) + self.bParam.setMinimumSize(QtCore.QSize(0,30)) + self.bParam.setAutoDefault(True) + self.bParam.setObjectName("bParam") + self.vboxlayout.addWidget(self.bParam) + self.bImport = QtGui.QPushButton(self.Widget8) + self.bImport.setMinimumSize(QtCore.QSize(0,30)) + self.bImport.setAutoDefault(True) + self.bImport.setObjectName("bImport") + self.vboxlayout.addWidget(self.bImport) + self.gridlayout1.addLayout(self.vboxlayout,7,5,2,1) + spacerItem3 = QtGui.QSpacerItem(31,50,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridlayout1.addItem(spacerItem3,6,5,1,1) + spacerItem4 = QtGui.QSpacerItem(31,50,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridlayout1.addItem(spacerItem4,9,5,1,1) + self.BSalome = QtGui.QToolButton(self.Widget8) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.BSalome.sizePolicy().hasHeightForWidth()) + self.BSalome.setSizePolicy(sizePolicy) + self.BSalome.setMinimumSize(QtCore.QSize(40,30)) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("image240.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off) + self.BSalome.setIcon(icon) + self.BSalome.setObjectName("BSalome") + self.gridlayout1.addWidget(self.BSalome,4,3,1,1) + self.BView2D = QtGui.QPushButton(self.Widget8) + self.BView2D.setMinimumSize(QtCore.QSize(120,30)) + self.BView2D.setObjectName("BView2D") + self.gridlayout1.addWidget(self.BView2D,4,4,1,2) + self.hboxlayout = QtGui.QHBoxLayout() + self.hboxlayout.setObjectName("hboxlayout") + self.textLabel1_2 = QtGui.QLabel(self.Widget8) + self.textLabel1_2.setWordWrap(False) + self.textLabel1_2.setObjectName("textLabel1_2") + self.hboxlayout.addWidget(self.textLabel1_2) + spacerItem5 = QtGui.QSpacerItem(111,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.hboxlayout.addItem(spacerItem5) + self.gridlayout1.addLayout(self.hboxlayout,0,3,2,3) + self.LEValeur = QtGui.QLineEdit(self.Widget8) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Minimum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.LEValeur.sizePolicy().hasHeightForWidth()) + self.LEValeur.setSizePolicy(sizePolicy) + self.LEValeur.setMinimumSize(QtCore.QSize(220,30)) + self.LEValeur.setObjectName("LEValeur") + self.gridlayout1.addWidget(self.LEValeur,2,3,2,3) + self.BSup1Val = QtGui.QToolButton(self.Widget8) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.BSup1Val.sizePolicy().hasHeightForWidth()) + self.BSup1Val.setSizePolicy(sizePolicy) + self.BSup1Val.setMinimumSize(QtCore.QSize(40,30)) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("../../EficasV1/Editeur/icons/arrow_right.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off) + self.BSup1Val.setIcon(icon) + self.BSup1Val.setObjectName("BSup1Val") + self.gridlayout1.addWidget(self.BSup1Val,3,1,2,2) + self.Commentaire = QtGui.QLabel(self.Widget8) + self.Commentaire.setMinimumSize(QtCore.QSize(0,60)) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout1.addWidget(self.Commentaire,5,3,1,3) + self.hboxlayout1 = QtGui.QHBoxLayout() + self.hboxlayout1.setObjectName("hboxlayout1") + self.bSup = QtGui.QPushButton(self.Widget8) + self.bSup.setMinimumSize(QtCore.QSize(0,30)) + self.bSup.setAutoDefault(True) + self.bSup.setObjectName("bSup") + self.hboxlayout1.addWidget(self.bSup) + self.bOk = QtGui.QPushButton(self.Widget8) + self.bOk.setMinimumSize(QtCore.QSize(0,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setObjectName("bOk") + self.hboxlayout1.addWidget(self.bOk) + self.bHelp = QtGui.QPushButton(self.Widget8) + self.bHelp.setMinimumSize(QtCore.QSize(0,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setObjectName("bHelp") + self.hboxlayout1.addWidget(self.bHelp) + self.gridlayout1.addLayout(self.hboxlayout1,10,0,1,6) + self.tabuniqueinto.addTab(self.Widget8,"") + self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1) + + self.retranslateUi(DPlusBase) + QtCore.QMetaObject.connectSlotsByName(DPlusBase) + DPlusBase.setTabOrder(self.LEValeur,self.tabuniqueinto) + DPlusBase.setTabOrder(self.tabuniqueinto,self.bSup) + DPlusBase.setTabOrder(self.bSup,self.bOk) + DPlusBase.setTabOrder(self.bOk,self.bHelp) + DPlusBase.setTabOrder(self.bHelp,self.bParam) + DPlusBase.setTabOrder(self.bParam,self.bImport) + DPlusBase.setTabOrder(self.bImport,self.LBValeurs) + DPlusBase.setTabOrder(self.LBValeurs,self.BView2D) + + def retranslateUi(self, DPlusBase): + DPlusBase.setWindowTitle(QtGui.QApplication.translate("DPlusBase", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1.setText(QtGui.QApplication.translate("DPlusBase", "Valeur(s) actuelle(s)", None, QtGui.QApplication.UnicodeUTF8)) + self.BAjout1Val.setToolTip(QtGui.QApplication.translate("DPlusBase", "ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)", None, QtGui.QApplication.UnicodeUTF8)) + self.bParam.setToolTip(QtGui.QApplication.translate("DPlusBase", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bParam.setText(QtGui.QApplication.translate("DPlusBase", "&Parametres", None, QtGui.QApplication.UnicodeUTF8)) + self.bParam.setShortcut(QtGui.QApplication.translate("DPlusBase", "Alt+P", None, QtGui.QApplication.UnicodeUTF8)) + self.bImport.setToolTip(QtGui.QApplication.translate("DPlusBase", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bImport.setText(QtGui.QApplication.translate("DPlusBase", "&Importer", None, QtGui.QApplication.UnicodeUTF8)) + self.bImport.setShortcut(QtGui.QApplication.translate("DPlusBase", "Alt+I", None, QtGui.QApplication.UnicodeUTF8)) + self.BSalome.setToolTip(QtGui.QApplication.translate("DPlusBase", "ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)", None, QtGui.QApplication.UnicodeUTF8)) + self.BView2D.setText(QtGui.QApplication.translate("DPlusBase", "Visualiser", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_2.setText(QtGui.QApplication.translate("DPlusBase", "Valeur", None, QtGui.QApplication.UnicodeUTF8)) + self.BSup1Val.setToolTip(QtGui.QApplication.translate("DPlusBase", "enleve l occurence selectionnee", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setToolTip(QtGui.QApplication.translate("DPlusBase", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DPlusBase", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DPlusBase", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setToolTip(QtGui.QApplication.translate("DPlusBase", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DPlusBase", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DPlusBase", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setToolTip(QtGui.QApplication.translate("DPlusBase", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DPlusBase", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DPlusBase", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DPlusBase", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DPlusBase = QtGui.QWidget() + ui = Ui_DPlusBase() + ui.setupUi(DPlusBase) + DPlusBase.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desPlusieursBase.ui b/UiQT4/desPlusieursBase.ui new file mode 100644 index 00000000..6ad53129 --- /dev/null +++ b/UiQT4/desPlusieursBase.ui @@ -0,0 +1,431 @@ + + DPlusBase + + + + 0 + 0 + 552 + 480 + + + + + 350 + 0 + + + + DUnIn + + + + + + + + 0 + 0 + 530 + 435 + + + + Saisir Valeur + + + + + + <u><font size="+1">Valeur(s) actuelle(s)</font></u> + + + false + + + + + + + + 200 + 0 + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 21 + 231 + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 31 + 30 + + + + + + + + + 0 + 0 + + + + + 40 + 30 + + + + ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection) + + + + + + + ../../EficasV1/Editeur/icons/arrow_left.gif../../EficasV1/Editeur/icons/arrow_left.gif + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 150 + 20 + + + + + + + + + + + 0 + 30 + + + + suppression du mot clef + + + &Parametres + + + Alt+P + + + true + + + + + + + + 0 + 30 + + + + suppression du mot clef + + + &Importer + + + Alt+I + + + true + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 31 + 50 + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 31 + 50 + + + + + + + + + 0 + 0 + + + + + 40 + 30 + + + + ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection) + + + + + + + image240.gifimage240.gif + + + + + + + + 120 + 30 + + + + Visualiser + + + + + + + + + <font size="+1">Valeur</font> + + + false + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 111 + 20 + + + + + + + + + + + 0 + 0 + + + + + 220 + 30 + + + + + + + + + 0 + 0 + + + + + 40 + 30 + + + + enleve l occurence selectionnee + + + + + + + ../../EficasV1/Editeur/icons/arrow_right.gif../../EficasV1/Editeur/icons/arrow_right.gif + + + + + + + + 0 + 60 + + + + + + + false + + + + + + + + + + 0 + 30 + + + + suppression du mot clef + + + &Supprimer + + + Alt+S + + + true + + + + + + + + 0 + 30 + + + + validation de la saisie + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + + + + + + 0 + 30 + + + + affichage documentation aster + + + &Documentation + + + Alt+D + + + true + + + + + + + + + + + + + + LEValeur + tabuniqueinto + bSup + bOk + bHelp + bParam + bImport + LBValeurs + BView2D + + + + diff --git a/UiQT4/desPlusieursInto.py b/UiQT4/desPlusieursInto.py new file mode 100644 index 00000000..0af9546f --- /dev/null +++ b/UiQT4/desPlusieursInto.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desPlusieursInto.ui' +# +# Created: Fri Sep 26 11:16:49 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DPlusInto(object): + def setupUi(self, DPlusInto): + DPlusInto.setObjectName("DPlusInto") + DPlusInto.resize(482,480) + DPlusInto.setMinimumSize(QtCore.QSize(350,0)) + self.gridlayout = QtGui.QGridLayout(DPlusInto) + self.gridlayout.setObjectName("gridlayout") + self.tabuniqueinto = QtGui.QTabWidget(DPlusInto) + self.tabuniqueinto.setObjectName("tabuniqueinto") + self.Widget8 = QtGui.QWidget() + self.Widget8.setGeometry(QtCore.QRect(0,0,460,435)) + self.Widget8.setObjectName("Widget8") + self.gridlayout1 = QtGui.QGridLayout(self.Widget8) + self.gridlayout1.setObjectName("gridlayout1") + self.textLabel1 = QtGui.QLabel(self.Widget8) + self.textLabel1.setWordWrap(False) + self.textLabel1.setObjectName("textLabel1") + self.gridlayout1.addWidget(self.textLabel1,0,0,1,2) + self.bSup = QtGui.QPushButton(self.Widget8) + self.bSup.setMinimumSize(QtCore.QSize(130,30)) + self.bSup.setAutoDefault(True) + self.bSup.setObjectName("bSup") + self.gridlayout1.addWidget(self.bSup,3,0,1,1) + self.bOk = QtGui.QPushButton(self.Widget8) + self.bOk.setMinimumSize(QtCore.QSize(130,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setObjectName("bOk") + self.gridlayout1.addWidget(self.bOk,3,1,1,2) + self.bHelp = QtGui.QPushButton(self.Widget8) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(150) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.bHelp.sizePolicy().hasHeightForWidth()) + self.bHelp.setSizePolicy(sizePolicy) + self.bHelp.setMinimumSize(QtCore.QSize(130,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setObjectName("bHelp") + self.gridlayout1.addWidget(self.bHelp,3,3,1,1) + self.Commentaire = QtGui.QLabel(self.Widget8) + self.Commentaire.setMinimumSize(QtCore.QSize(0,40)) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout1.addWidget(self.Commentaire,2,0,1,4) + self.hboxlayout = QtGui.QHBoxLayout() + self.hboxlayout.setObjectName("hboxlayout") + self.LBValeurs = QtGui.QListWidget(self.Widget8) + self.LBValeurs.setObjectName("LBValeurs") + self.hboxlayout.addWidget(self.LBValeurs) + self.vboxlayout = QtGui.QVBoxLayout() + self.vboxlayout.setObjectName("vboxlayout") + spacerItem = QtGui.QSpacerItem(21,44,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.vboxlayout.addItem(spacerItem) + self.vboxlayout1 = QtGui.QVBoxLayout() + self.vboxlayout1.setObjectName("vboxlayout1") + self.BAjout1Val = QtGui.QToolButton(self.Widget8) + self.BAjout1Val.setMinimumSize(QtCore.QSize(40,31)) + self.BAjout1Val.setMaximumSize(QtCore.QSize(40,31)) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("../../EficasV1/Editeur/icons/arrow_left.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off) + self.BAjout1Val.setIcon(icon) + self.BAjout1Val.setObjectName("BAjout1Val") + self.vboxlayout1.addWidget(self.BAjout1Val) + self.BSup1Val = QtGui.QToolButton(self.Widget8) + self.BSup1Val.setMinimumSize(QtCore.QSize(40,31)) + self.BSup1Val.setMaximumSize(QtCore.QSize(40,31)) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("../Editeur/icons/arrow_right.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off) + self.BSup1Val.setIcon(icon) + self.BSup1Val.setObjectName("BSup1Val") + self.vboxlayout1.addWidget(self.BSup1Val) + spacerItem1 = QtGui.QSpacerItem(21,176,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.vboxlayout1.addItem(spacerItem1) + self.vboxlayout.addLayout(self.vboxlayout1) + self.hboxlayout.addLayout(self.vboxlayout) + self.listBoxVal = QtGui.QListWidget(self.Widget8) + self.listBoxVal.setObjectName("listBoxVal") + self.hboxlayout.addWidget(self.listBoxVal) + self.gridlayout1.addLayout(self.hboxlayout,1,0,1,4) + self.textLabel1_2 = QtGui.QLabel(self.Widget8) + self.textLabel1_2.setWordWrap(False) + self.textLabel1_2.setObjectName("textLabel1_2") + self.gridlayout1.addWidget(self.textLabel1_2,0,2,1,2) + self.tabuniqueinto.addTab(self.Widget8,"") + self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1) + + self.retranslateUi(DPlusInto) + QtCore.QMetaObject.connectSlotsByName(DPlusInto) + DPlusInto.setTabOrder(self.listBoxVal,self.tabuniqueinto) + DPlusInto.setTabOrder(self.tabuniqueinto,self.bSup) + DPlusInto.setTabOrder(self.bSup,self.bOk) + DPlusInto.setTabOrder(self.bOk,self.bHelp) + DPlusInto.setTabOrder(self.bHelp,self.LBValeurs) + + def retranslateUi(self, DPlusInto): + DPlusInto.setWindowTitle(QtGui.QApplication.translate("DPlusInto", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1.setText(QtGui.QApplication.translate("DPlusInto", "Valeur(s) actuelle(s)", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setToolTip(QtGui.QApplication.translate("DPlusInto", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DPlusInto", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DPlusInto", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setToolTip(QtGui.QApplication.translate("DPlusInto", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DPlusInto", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DPlusInto", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setToolTip(QtGui.QApplication.translate("DPlusInto", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DPlusInto", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DPlusInto", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + self.BAjout1Val.setToolTip(QtGui.QApplication.translate("DPlusInto", "enleve l occurence selectionnee", None, QtGui.QApplication.UnicodeUTF8)) + self.BSup1Val.setToolTip(QtGui.QApplication.translate("DPlusInto", "ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_2.setText(QtGui.QApplication.translate("DPlusInto", "Valeur(s) possibles(s)", None, QtGui.QApplication.UnicodeUTF8)) + self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DPlusInto", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DPlusInto = QtGui.QWidget() + ui = Ui_DPlusInto() + ui.setupUi(DPlusInto) + DPlusInto.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desPlusieursInto.ui b/UiQT4/desPlusieursInto.ui new file mode 100644 index 00000000..9fa87f7d --- /dev/null +++ b/UiQT4/desPlusieursInto.ui @@ -0,0 +1,267 @@ + + DPlusInto + + + + 0 + 0 + 482 + 480 + + + + + 350 + 0 + + + + DUnIn + + + + + + + + 0 + 0 + 460 + 435 + + + + Saisir Valeur + + + + + + <u><font size="+1">Valeur(s) actuelle(s)</font></u> + + + false + + + + + + + + 130 + 30 + + + + suppression du mot clef + + + &Supprimer + + + Alt+S + + + true + + + + + + + + 130 + 30 + + + + validation de la saisie + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + + + + + + 150 + 0 + + + + + 130 + 30 + + + + affichage documentation aster + + + &Documentation + + + Alt+D + + + true + + + + + + + + 0 + 40 + + + + + + + false + + + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 21 + 44 + + + + + + + + + + + 40 + 31 + + + + + 40 + 31 + + + + enleve l occurence selectionnee + + + + + + + ../../EficasV1/Editeur/icons/arrow_left.gif../../EficasV1/Editeur/icons/arrow_left.gif + + + + + + + + 40 + 31 + + + + + 40 + 31 + + + + ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection) + + + + + + + ../Editeur/icons/arrow_right.gif../Editeur/icons/arrow_right.gif + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 21 + 176 + + + + + + + + + + + + + + + + + <u><font size="+1">Valeur(s) possibles(s)</font></u> + + + false + + + + + + + + + + + + listBoxVal + tabuniqueinto + bSup + bOk + bHelp + LBValeurs + + + + diff --git a/UiQT4/desPoursuite.py b/UiQT4/desPoursuite.py new file mode 100644 index 00000000..3b36f1c5 --- /dev/null +++ b/UiQT4/desPoursuite.py @@ -0,0 +1,187 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desPoursuite.ui' +# +# Created: Fri Oct 10 11:42:29 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DPour(object): + def setupUi(self, DPour): + DPour.setObjectName("DPour") + DPour.resize(521,544) + DPour.setMinimumSize(QtCore.QSize(505,0)) + self.gridlayout = QtGui.QGridLayout(DPour) + self.gridlayout.setObjectName("gridlayout") + self.TWChoix = QtGui.QTabWidget(DPour) + self.TWChoix.setObjectName("TWChoix") + self.MotClef = QtGui.QWidget() + self.MotClef.setGeometry(QtCore.QRect(0,0,499,433)) + self.MotClef.setObjectName("MotClef") + self.gridLayout_4 = QtGui.QGridLayout(self.MotClef) + self.gridLayout_4.setObjectName("gridLayout_4") + self.textLabel1 = QtGui.QLabel(self.MotClef) + self.textLabel1.setMinimumSize(QtCore.QSize(0,0)) + self.textLabel1.setWordWrap(False) + self.textLabel1.setObjectName("textLabel1") + self.gridLayout_4.addWidget(self.textLabel1,0,0,1,1) + self.textLabel1_2 = QtGui.QLabel(self.MotClef) + self.textLabel1_2.setWordWrap(False) + self.textLabel1_2.setObjectName("textLabel1_2") + self.gridLayout_4.addWidget(self.textLabel1_2,0,1,1,1) + self.LBMCPermis = QtGui.QListWidget(self.MotClef) + self.LBMCPermis.setMinimumSize(QtCore.QSize(0,0)) + self.LBMCPermis.setObjectName("LBMCPermis") + self.gridLayout_4.addWidget(self.LBMCPermis,1,0,1,1) + self.LBRegles = QtGui.QListWidget(self.MotClef) + self.LBRegles.setObjectName("LBRegles") + self.gridLayout_4.addWidget(self.LBRegles,1,1,1,1) + self.TWChoix.addTab(self.MotClef,"") + self.Commande = QtGui.QWidget() + self.Commande.setGeometry(QtCore.QRect(0,0,499,433)) + self.Commande.setObjectName("Commande") + self.gridLayout_3 = QtGui.QGridLayout(self.Commande) + self.gridLayout_3.setObjectName("gridLayout_3") + self.textLabel1_4 = QtGui.QLabel(self.Commande) + self.textLabel1_4.setWordWrap(False) + self.textLabel1_4.setObjectName("textLabel1_4") + self.gridLayout_3.addWidget(self.textLabel1_4,0,0,1,3) + self.groupBox = QtGui.QGroupBox(self.Commande) + self.groupBox.setObjectName("groupBox") + self.gridLayout = QtGui.QGridLayout(self.groupBox) + self.gridLayout.setObjectName("gridLayout") + self.RBalpha = QtGui.QRadioButton(self.groupBox) + self.RBalpha.setChecked(True) + self.RBalpha.setObjectName("RBalpha") + self.gridLayout.addWidget(self.RBalpha,0,0,1,1) + self.RBGroupe = QtGui.QRadioButton(self.groupBox) + self.RBGroupe.setObjectName("RBGroupe") + self.gridLayout.addWidget(self.RBGroupe,1,0,1,1) + self.gridLayout_3.addWidget(self.groupBox,0,3,2,1) + self.textLabel6 = QtGui.QLabel(self.Commande) + self.textLabel6.setMinimumSize(QtCore.QSize(50,30)) + self.textLabel6.setWordWrap(False) + self.textLabel6.setObjectName("textLabel6") + self.gridLayout_3.addWidget(self.textLabel6,1,0,1,1) + self.LEFiltre = QtGui.QLineEdit(self.Commande) + self.LEFiltre.setMinimumSize(QtCore.QSize(160,30)) + self.LEFiltre.setObjectName("LEFiltre") + self.gridLayout_3.addWidget(self.LEFiltre,1,1,1,1) + self.pushButton = QtGui.QPushButton(self.Commande) + self.pushButton.setObjectName("pushButton") + self.gridLayout_3.addWidget(self.pushButton,1,2,1,1) + self.LBNouvCommande = QtGui.QListWidget(self.Commande) + self.LBNouvCommande.setObjectName("LBNouvCommande") + self.gridLayout_3.addWidget(self.LBNouvCommande,2,0,1,4) + self.textLabel4 = QtGui.QLabel(self.Commande) + self.textLabel4.setWordWrap(False) + self.textLabel4.setObjectName("textLabel4") + self.gridLayout_3.addWidget(self.textLabel4,3,0,1,4) + self.TWChoix.addTab(self.Commande,"") + self.TabPage = QtGui.QWidget() + self.TabPage.setGeometry(QtCore.QRect(0,0,499,433)) + self.TabPage.setObjectName("TabPage") + self.gridLayout_2 = QtGui.QGridLayout(self.TabPage) + self.gridLayout_2.setObjectName("gridLayout_2") + self.textLabel1_3 = QtGui.QLabel(self.TabPage) + self.textLabel1_3.setWordWrap(False) + self.textLabel1_3.setObjectName("textLabel1_3") + self.gridLayout_2.addWidget(self.textLabel1_3,0,0,1,1) + self.LENomFichier = QtGui.QLineEdit(self.TabPage) + self.LENomFichier.setMinimumSize(QtCore.QSize(470,40)) + self.LENomFichier.setObjectName("LENomFichier") + self.gridLayout_2.addWidget(self.LENomFichier,1,0,1,1) + spacerItem = QtGui.QSpacerItem(21,190,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridLayout_2.addItem(spacerItem,2,0,1,1) + self.hboxlayout = QtGui.QHBoxLayout() + self.hboxlayout.setObjectName("hboxlayout") + spacerItem1 = QtGui.QSpacerItem(331,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.hboxlayout.addItem(spacerItem1) + self.BBrowse = QtGui.QPushButton(self.TabPage) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.BBrowse.sizePolicy().hasHeightForWidth()) + self.BBrowse.setSizePolicy(sizePolicy) + self.BBrowse.setMinimumSize(QtCore.QSize(140,50)) + self.BBrowse.setObjectName("BBrowse") + self.hboxlayout.addWidget(self.BBrowse) + self.gridLayout_2.addLayout(self.hboxlayout,3,0,1,1) + spacerItem2 = QtGui.QSpacerItem(21,87,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridLayout_2.addItem(spacerItem2,4,0,1,1) + self.TWChoix.addTab(self.TabPage,"") + self.gridlayout.addWidget(self.TWChoix,0,0,1,3) + self.bSup = QtGui.QPushButton(DPour) + self.bSup.setMinimumSize(QtCore.QSize(0,30)) + self.bSup.setAutoDefault(True) + self.bSup.setObjectName("bSup") + self.gridlayout.addWidget(self.bSup,2,0,1,1) + self.bOk = QtGui.QPushButton(DPour) + self.bOk.setMinimumSize(QtCore.QSize(0,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setObjectName("bOk") + self.gridlayout.addWidget(self.bOk,2,1,1,1) + self.bHelp = QtGui.QPushButton(DPour) + self.bHelp.setMinimumSize(QtCore.QSize(0,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setObjectName("bHelp") + self.gridlayout.addWidget(self.bHelp,2,2,1,1) + self.Commentaire = QtGui.QLabel(DPour) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout.addWidget(self.Commentaire,1,0,1,3) + + self.retranslateUi(DPour) + self.TWChoix.setCurrentIndex(0) + QtCore.QMetaObject.connectSlotsByName(DPour) + DPour.setTabOrder(self.LEFiltre,self.LENomFichier) + DPour.setTabOrder(self.LENomFichier,self.TWChoix) + DPour.setTabOrder(self.TWChoix,self.LBMCPermis) + DPour.setTabOrder(self.LBMCPermis,self.LBRegles) + DPour.setTabOrder(self.LBRegles,self.LBNouvCommande) + DPour.setTabOrder(self.LBNouvCommande,self.RBalpha) + DPour.setTabOrder(self.RBalpha,self.BBrowse) + DPour.setTabOrder(self.BBrowse,self.bSup) + DPour.setTabOrder(self.bSup,self.bOk) + DPour.setTabOrder(self.bOk,self.bHelp) + + def retranslateUi(self, DPour): + DPour.setWindowTitle(QtGui.QApplication.translate("DPour", "DMacro", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1.setText(QtGui.QApplication.translate("DPour", "

Mots Clefs Permis

", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_2.setText(QtGui.QApplication.translate("DPour", "

Régles

", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.MotClef), QtGui.QApplication.translate("DPour", "Ajouter Mot-Clef", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_4.setText(QtGui.QApplication.translate("DPour", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox.setTitle(QtGui.QApplication.translate("DPour", "Affichage", None, QtGui.QApplication.UnicodeUTF8)) + self.RBalpha.setText(QtGui.QApplication.translate("DPour", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) + self.RBGroupe.setText(QtGui.QApplication.translate("DPour", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel6.setText(QtGui.QApplication.translate("DPour", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) + self.pushButton.setText(QtGui.QApplication.translate("DPour", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel4.setText(QtGui.QApplication.translate("DPour", "La commande choisie sera ajoutée APRES la commande courante", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.Commande), QtGui.QApplication.translate("DPour", "Nouvelle Commande", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_3.setText(QtGui.QApplication.translate("DPour", "La commande POURSUITE requiert un nom de Fichier :", None, QtGui.QApplication.UnicodeUTF8)) + self.BBrowse.setText(QtGui.QApplication.translate("DPour", "Edit", None, QtGui.QApplication.UnicodeUTF8)) + self.TWChoix.setTabText(self.TWChoix.indexOf(self.TabPage), QtGui.QApplication.translate("DPour", "Fichier Poursuite", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setToolTip(QtGui.QApplication.translate("DPour", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DPour", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DPour", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setToolTip(QtGui.QApplication.translate("DPour", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DPour", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DPour", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setToolTip(QtGui.QApplication.translate("DPour", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DPour", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DPour", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DPour = QtGui.QWidget() + ui = Ui_DPour() + ui.setupUi(DPour) + DPour.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desPoursuite.ui b/UiQT4/desPoursuite.ui new file mode 100644 index 00000000..71a35017 --- /dev/null +++ b/UiQT4/desPoursuite.ui @@ -0,0 +1,384 @@ + + DPour + + + + 0 + 0 + 521 + 544 + + + + + 505 + 0 + + + + DMacro + + + + + + 0 + + + + + 0 + 0 + 499 + 433 + + + + Ajouter Mot-Clef + + + + + + + 0 + 0 + + + + <h3><p align="center"><u><b>Mots Clefs Permis</b></u></p></h3> + + + false + + + + + + + <h3><p align="center"><u><b>Régles</b></u></p></h3> + + + false + + + + + + + + 0 + 0 + + + + + + + + + + + + + 0 + 0 + 499 + 433 + + + + Nouvelle Commande + + + + + + <b><u>Commandes :</u></b> + + + false + + + + + + + Affichage + + + + + + alphabétique + + + true + + + + + + + par groupe + + + + + + + + + + + 50 + 30 + + + + Filtre + + + false + + + + + + + + 160 + 30 + + + + + + + + Suivant + + + + + + + + + + La commande choisie sera ajoutée APRES la commande courante + + + false + + + + + + + + + 0 + 0 + 499 + 433 + + + + Fichier Poursuite + + + + + + <font size="+1">La commande POURSUITE requiert un nom de Fichier :</font> + + + false + + + + + + + + 470 + 40 + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 21 + 190 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 331 + 20 + + + + + + + + + 0 + 0 + + + + + 140 + 50 + + + + Edit + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 21 + 87 + + + + + + + + + + + + + 0 + 30 + + + + suppression du mot clef + + + &Supprimer + + + Alt+S + + + true + + + + + + + + 0 + 30 + + + + validation de la saisie + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + + + + + + 0 + 30 + + + + affichage documentation aster + + + &Documentation + + + Alt+D + + + true + + + + + + + + + + false + + + + + + + qPixmapFromMimeSource + + LEFiltre + LENomFichier + TWChoix + LBMCPermis + LBRegles + LBNouvCommande + RBalpha + BBrowse + bSup + bOk + bHelp + + + + diff --git a/UiQT4/desRacine.py b/UiQT4/desRacine.py new file mode 100644 index 00000000..19def6bc --- /dev/null +++ b/UiQT4/desRacine.py @@ -0,0 +1,106 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desRacine.ui' +# +# Created: Tue Sep 23 10:19:58 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DRac(object): + def setupUi(self, DRac): + DRac.setObjectName("DRac") + DRac.resize(554,540) + DRac.setMinimumSize(QtCore.QSize(505,0)) + self.gridLayout = QtGui.QGridLayout(DRac) + self.gridLayout.setObjectName("gridLayout") + self.textLabel1_4 = QtGui.QLabel(DRac) + self.textLabel1_4.setMinimumSize(QtCore.QSize(291,21)) + self.textLabel1_4.setWordWrap(False) + self.textLabel1_4.setObjectName("textLabel1_4") + self.gridLayout.addWidget(self.textLabel1_4,0,0,2,5) + self.textLabel1_4_2 = QtGui.QLabel(DRac) + self.textLabel1_4_2.setWordWrap(False) + self.textLabel1_4_2.setObjectName("textLabel1_4_2") + self.gridLayout.addWidget(self.textLabel1_4_2,1,4,1,2) + self.RBalpha = QtGui.QRadioButton(DRac) + self.RBalpha.setChecked(True) + self.RBalpha.setObjectName("RBalpha") + self.gridLayout.addWidget(self.RBalpha,2,0,1,2) + self.RBGroupe = QtGui.QRadioButton(DRac) + self.RBGroupe.setObjectName("RBGroupe") + self.gridLayout.addWidget(self.RBGroupe,2,2,1,3) + self.textLabel6 = QtGui.QLabel(DRac) + self.textLabel6.setMinimumSize(QtCore.QSize(40,0)) + self.textLabel6.setWordWrap(False) + self.textLabel6.setObjectName("textLabel6") + self.gridLayout.addWidget(self.textLabel6,3,0,1,1) + self.LEFiltre = QtGui.QLineEdit(DRac) + self.LEFiltre.setMinimumSize(QtCore.QSize(0,30)) + self.LEFiltre.setObjectName("LEFiltre") + self.gridLayout.addWidget(self.LEFiltre,3,1,1,1) + self.BNext = QtGui.QPushButton(DRac) + self.BNext.setObjectName("BNext") + self.gridLayout.addWidget(self.BNext,3,2,1,1) + self.LBRegles = QtGui.QListWidget(DRac) + self.LBRegles.setMinimumSize(QtCore.QSize(0,0)) + self.LBRegles.setObjectName("LBRegles") + self.gridLayout.addWidget(self.LBRegles,3,3,2,3) + self.LBNouvCommande = QtGui.QListWidget(DRac) + self.LBNouvCommande.setObjectName("LBNouvCommande") + self.gridLayout.addWidget(self.LBNouvCommande,4,0,1,3) + self.bSup = QtGui.QPushButton(DRac) + self.bSup.setMinimumSize(QtCore.QSize(160,30)) + self.bSup.setAutoDefault(True) + self.bSup.setObjectName("bSup") + self.gridLayout.addWidget(self.bSup,5,0,1,2) + self.bOk = QtGui.QPushButton(DRac) + self.bOk.setMinimumSize(QtCore.QSize(160,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setObjectName("bOk") + self.gridLayout.addWidget(self.bOk,5,2,1,3) + self.bHelp = QtGui.QPushButton(DRac) + self.bHelp.setMinimumSize(QtCore.QSize(160,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setObjectName("bHelp") + self.gridLayout.addWidget(self.bHelp,5,5,1,1) + + self.retranslateUi(DRac) + QtCore.QMetaObject.connectSlotsByName(DRac) + DRac.setTabOrder(self.LEFiltre,self.LBNouvCommande) + DRac.setTabOrder(self.LBNouvCommande,self.bSup) + DRac.setTabOrder(self.bSup,self.bOk) + DRac.setTabOrder(self.bOk,self.bHelp) + DRac.setTabOrder(self.bHelp,self.LBRegles) + + def retranslateUi(self, DRac): + DRac.setWindowTitle(QtGui.QApplication.translate("DRac", "DMacro", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_4.setText(QtGui.QApplication.translate("DRac", "Commandes :", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1_4_2.setText(QtGui.QApplication.translate("DRac", "

Régles :

", None, QtGui.QApplication.UnicodeUTF8)) + self.RBalpha.setText(QtGui.QApplication.translate("DRac", "alphabétique", None, QtGui.QApplication.UnicodeUTF8)) + self.RBGroupe.setText(QtGui.QApplication.translate("DRac", "par groupe", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel6.setText(QtGui.QApplication.translate("DRac", "Filtre", None, QtGui.QApplication.UnicodeUTF8)) + self.BNext.setText(QtGui.QApplication.translate("DRac", "Suivant", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setToolTip(QtGui.QApplication.translate("DRac", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DRac", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DRac", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setToolTip(QtGui.QApplication.translate("DRac", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DRac", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DRac", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setToolTip(QtGui.QApplication.translate("DRac", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DRac", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DRac", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DRac = QtGui.QWidget() + ui = Ui_DRac() + ui.setupUi(DRac) + DRac.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desRacine.ui b/UiQT4/desRacine.ui new file mode 100644 index 00000000..d21e3ce3 --- /dev/null +++ b/UiQT4/desRacine.ui @@ -0,0 +1,194 @@ + + DRac + + + + 0 + 0 + 554 + 540 + + + + + 505 + 0 + + + + DMacro + + + + + + + 291 + 21 + + + + <b><u>Commandes :</u></b> + + + false + + + + + + + <p align="center"><b><u>Régles :</u></b></p> + + + false + + + + + + + alphabétique + + + true + + + + + + + par groupe + + + + + + + + 40 + 0 + + + + Filtre + + + false + + + + + + + + 0 + 30 + + + + + + + + Suivant + + + + + + + + 0 + 0 + + + + + + + + + + + + 160 + 30 + + + + suppression du mot clef + + + &Supprimer + + + Alt+S + + + true + + + + + + + + 160 + 30 + + + + validation de la saisie + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + + + + + + 160 + 30 + + + + affichage documentation aster + + + &Documentation + + + Alt+D + + + true + + + + + + + qPixmapFromMimeSource + + LEFiltre + LBNouvCommande + bSup + bOk + bHelp + LBRegles + + + + diff --git a/UiQT4/desSelectVal.py b/UiQT4/desSelectVal.py new file mode 100644 index 00000000..914a3fa2 --- /dev/null +++ b/UiQT4/desSelectVal.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desSelectVal.ui' +# +# Created: Fri Sep 26 17:59:06 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DSelVal(object): + def setupUi(self, DSelVal): + DSelVal.setObjectName("DSelVal") + DSelVal.resize(469,624) + self.TBtext = QtGui.QTextEdit(DSelVal) + self.TBtext.setGeometry(QtCore.QRect(9,9,451,476)) + self.TBtext.setObjectName("TBtext") + self.BImportSel = QtGui.QPushButton(DSelVal) + self.BImportSel.setGeometry(QtCore.QRect(220,520,208,27)) + self.BImportSel.setObjectName("BImportSel") + self.BImportTout = QtGui.QPushButton(DSelVal) + self.BImportTout.setGeometry(QtCore.QRect(220,560,208,27)) + self.BImportTout.setObjectName("BImportTout") + self.BGSeparateur = QtGui.QGroupBox(DSelVal) + self.BGSeparateur.setGeometry(QtCore.QRect(20,500,188,103)) + self.BGSeparateur.setObjectName("BGSeparateur") + self.Bespace = QtGui.QRadioButton(self.BGSeparateur) + self.Bespace.setGeometry(QtCore.QRect(20,20,148,23)) + self.Bespace.setChecked(True) + self.Bespace.setObjectName("Bespace") + self.Bvirgule = QtGui.QRadioButton(self.BGSeparateur) + self.Bvirgule.setGeometry(QtCore.QRect(20,40,148,23)) + self.Bvirgule.setObjectName("Bvirgule") + self.BpointVirgule = QtGui.QRadioButton(self.BGSeparateur) + self.BpointVirgule.setGeometry(QtCore.QRect(20,60,148,23)) + self.BpointVirgule.setObjectName("BpointVirgule") + + self.retranslateUi(DSelVal) + QtCore.QMetaObject.connectSlotsByName(DSelVal) + + def retranslateUi(self, DSelVal): + DSelVal.setWindowTitle(QtGui.QApplication.translate("DSelVal", "Sélection de valeurs", None, QtGui.QApplication.UnicodeUTF8)) + self.BImportSel.setText(QtGui.QApplication.translate("DSelVal", "Ajouter Selection", None, QtGui.QApplication.UnicodeUTF8)) + self.BImportTout.setText(QtGui.QApplication.translate("DSelVal", "Importer Tout", None, QtGui.QApplication.UnicodeUTF8)) + self.BGSeparateur.setTitle(QtGui.QApplication.translate("DSelVal", "Separateur", None, QtGui.QApplication.UnicodeUTF8)) + self.Bespace.setText(QtGui.QApplication.translate("DSelVal", "espace", None, QtGui.QApplication.UnicodeUTF8)) + self.Bvirgule.setText(QtGui.QApplication.translate("DSelVal", "virgule", None, QtGui.QApplication.UnicodeUTF8)) + self.BpointVirgule.setText(QtGui.QApplication.translate("DSelVal", "point-virgule", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DSelVal = QtGui.QWidget() + ui = Ui_DSelVal() + ui.setupUi(DSelVal) + DSelVal.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desSelectVal.ui b/UiQT4/desSelectVal.ui new file mode 100644 index 00000000..48eb58c8 --- /dev/null +++ b/UiQT4/desSelectVal.ui @@ -0,0 +1,111 @@ + + DSelVal + + + + 0 + 0 + 469 + 624 + + + + Sélection de valeurs + + + + + 9 + 9 + 451 + 476 + + + + + + + 220 + 520 + 208 + 27 + + + + Ajouter Selection + + + + + + 220 + 560 + 208 + 27 + + + + Importer Tout + + + + + + 20 + 500 + 188 + 103 + + + + Separateur + + + + + 20 + 20 + 148 + 23 + + + + espace + + + true + + + + + + 20 + 40 + 148 + 23 + + + + virgule + + + + + + 20 + 60 + 148 + 23 + + + + point-virgule + + + + + + qPixmapFromMimeSource + + + diff --git a/UiQT4/desUniqueASSD.py b/UiQT4/desUniqueASSD.py new file mode 100644 index 00000000..39863fbc --- /dev/null +++ b/UiQT4/desUniqueASSD.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desUniqueASSD.ui' +# +# Created: Fri Jul 18 16:24:35 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DUnASSD(object): + def setupUi(self, DUnASSD): + DUnASSD.setObjectName("DUnASSD") + DUnASSD.resize(482,480) + DUnASSD.setMinimumSize(QtCore.QSize(350,0)) + self.gridlayout = QtGui.QGridLayout(DUnASSD) + self.gridlayout.setObjectName("gridlayout") + self.tabuniqueinto = QtGui.QTabWidget(DUnASSD) + self.tabuniqueinto.setObjectName("tabuniqueinto") + self.Widget8 = QtGui.QWidget() + self.Widget8.setObjectName("Widget8") + self.gridlayout1 = QtGui.QGridLayout(self.Widget8) + self.gridlayout1.setObjectName("gridlayout1") + self.textLabel2 = QtGui.QLabel(self.Widget8) + self.textLabel2.setMinimumSize(QtCore.QSize(436,50)) + self.textLabel2.setWordWrap(False) + self.textLabel2.setObjectName("textLabel2") + self.gridlayout1.addWidget(self.textLabel2,0,0,1,1) + self.listBoxASSD = QtGui.QListWidget(self.Widget8) + self.listBoxASSD.setObjectName("listBoxASSD") + self.gridlayout1.addWidget(self.listBoxASSD,1,0,1,1) + self.Commentaire = QtGui.QLabel(self.Widget8) + self.Commentaire.setMinimumSize(QtCore.QSize(380,30)) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout1.addWidget(self.Commentaire,2,0,1,1) + self.hboxlayout = QtGui.QHBoxLayout() + self.hboxlayout.setObjectName("hboxlayout") + self.bSup = QtGui.QPushButton(self.Widget8) + self.bSup.setMinimumSize(QtCore.QSize(0,30)) + self.bSup.setAutoDefault(True) + self.bSup.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnASSD", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))) + self.bSup.setObjectName("bSup") + self.hboxlayout.addWidget(self.bSup) + self.bOk = QtGui.QPushButton(self.Widget8) + self.bOk.setMinimumSize(QtCore.QSize(0,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnASSD", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))) + self.bOk.setObjectName("bOk") + self.hboxlayout.addWidget(self.bOk) + self.bHelp = QtGui.QPushButton(self.Widget8) + self.bHelp.setMinimumSize(QtCore.QSize(0,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnASSD", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))) + self.bHelp.setObjectName("bHelp") + self.hboxlayout.addWidget(self.bHelp) + self.gridlayout1.addLayout(self.hboxlayout,3,0,1,1) + self.tabuniqueinto.addTab(self.Widget8,"") + self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1) + + self.retranslateUi(DUnASSD) + + def retranslateUi(self, DUnASSD): + DUnASSD.setWindowTitle(QtGui.QApplication.translate("DUnASSD", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel2.setText(QtGui.QApplication.translate("DUnASSD", "

Structures de données du type\n" +"requis par l\'objet courant :

", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DUnASSD", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DUnASSD", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DUnASSD", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DUnASSD", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DUnASSD", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DUnASSD", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnASSD", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DUnASSD = QtGui.QWidget() + ui = Ui_DUnASSD() + ui.setupUi(DUnASSD) + DUnASSD.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desUniqueASSD.ui b/UiQT4/desUniqueASSD.ui new file mode 100644 index 00000000..fd6ee2ab --- /dev/null +++ b/UiQT4/desUniqueASSD.ui @@ -0,0 +1,149 @@ + + + + + DUnASSD + + + + 0 + 0 + 482 + 480 + + + + + 350 + 0 + + + + DUnIn + + + + + + + Saisir Valeur + + + + + + + 436 + 50 + + + + <font size="+1"><p align="center">Structures de données du type +requis par l'objet courant :</p></font> + + + false + + + + + + + + + + + 380 + 30 + + + + + + + false + + + + + + + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + + + + + + + qPixmapFromMimeSource + diff --git a/UiQT4/desUniqueBase.py b/UiQT4/desUniqueBase.py new file mode 100644 index 00000000..26520797 --- /dev/null +++ b/UiQT4/desUniqueBase.py @@ -0,0 +1,122 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desUniqueBase.ui' +# +# Created: Thu Jul 24 10:46:31 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DUnBase(object): + def setupUi(self, DUnBase): + DUnBase.setObjectName("DUnBase") + DUnBase.resize(482,480) + DUnBase.setMinimumSize(QtCore.QSize(350,0)) + self.gridlayout = QtGui.QGridLayout(DUnBase) + self.gridlayout.setObjectName("gridlayout") + self.tabuniqueinto = QtGui.QTabWidget(DUnBase) + self.tabuniqueinto.setObjectName("tabuniqueinto") + self.Widget8 = QtGui.QWidget() + self.Widget8.setGeometry(QtCore.QRect(0,0,460,435)) + self.Widget8.setObjectName("Widget8") + self.gridlayout1 = QtGui.QGridLayout(self.Widget8) + self.gridlayout1.setObjectName("gridlayout1") + self.hboxlayout = QtGui.QHBoxLayout() + self.hboxlayout.setObjectName("hboxlayout") + self.textLabel2 = QtGui.QLabel(self.Widget8) + self.textLabel2.setWordWrap(False) + self.textLabel2.setObjectName("textLabel2") + self.hboxlayout.addWidget(self.textLabel2) + self.lineEditVal = QtGui.QLineEdit(self.Widget8) + self.lineEditVal.setMinimumSize(QtCore.QSize(290,50)) + self.lineEditVal.setObjectName("lineEditVal") + self.hboxlayout.addWidget(self.lineEditVal) + self.gridlayout1.addLayout(self.hboxlayout,1,0,1,3) + spacerItem = QtGui.QSpacerItem(288,21,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.gridlayout1.addItem(spacerItem,0,0,1,2) + self.bParametres = QtGui.QPushButton(self.Widget8) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.bParametres.sizePolicy().hasHeightForWidth()) + self.bParametres.setSizePolicy(sizePolicy) + self.bParametres.setMinimumSize(QtCore.QSize(140,30)) + self.bParametres.setObjectName("bParametres") + self.gridlayout1.addWidget(self.bParametres,0,2,1,1) + self.bSup = QtGui.QPushButton(self.Widget8) + self.bSup.setMinimumSize(QtCore.QSize(0,30)) + self.bSup.setAutoDefault(True) + self.bSup.setObjectName("bSup") + self.gridlayout1.addWidget(self.bSup,5,0,1,1) + self.bOk = QtGui.QPushButton(self.Widget8) + self.bOk.setMinimumSize(QtCore.QSize(0,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setObjectName("bOk") + self.gridlayout1.addWidget(self.bOk,5,1,1,1) + self.bHelp = QtGui.QPushButton(self.Widget8) + self.bHelp.setMinimumSize(QtCore.QSize(0,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setObjectName("bHelp") + self.gridlayout1.addWidget(self.bHelp,5,2,1,1) + spacerItem1 = QtGui.QSpacerItem(41,112,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridlayout1.addItem(spacerItem1,2,1,1,1) + spacerItem2 = QtGui.QSpacerItem(21,112,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.gridlayout1.addItem(spacerItem2,4,1,1,1) + self.Commentaire = QtGui.QLabel(self.Widget8) + self.Commentaire.setMinimumSize(QtCore.QSize(430,40)) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout1.addWidget(self.Commentaire,3,0,1,3) + self.BView2D = QtGui.QPushButton(self.Widget8) + self.BView2D.setMinimumSize(QtCore.QSize(110,40)) + self.BView2D.setObjectName("BView2D") + self.gridlayout1.addWidget(self.BView2D,2,2,1,1) + self.BSalome = QtGui.QPushButton(self.Widget8) + self.BSalome.setMinimumSize(QtCore.QSize(50,40)) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("image240.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off) + self.BSalome.setIcon(icon) + self.BSalome.setObjectName("BSalome") + self.gridlayout1.addWidget(self.BSalome,2,0,1,1) + self.tabuniqueinto.addTab(self.Widget8,"") + self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1) + + self.retranslateUi(DUnBase) + QtCore.QMetaObject.connectSlotsByName(DUnBase) + DUnBase.setTabOrder(self.lineEditVal,self.bOk) + DUnBase.setTabOrder(self.bOk,self.bSup) + DUnBase.setTabOrder(self.bSup,self.BSalome) + DUnBase.setTabOrder(self.BSalome,self.bHelp) + DUnBase.setTabOrder(self.bHelp,self.BView2D) + DUnBase.setTabOrder(self.BView2D,self.bParametres) + DUnBase.setTabOrder(self.bParametres,self.tabuniqueinto) + + def retranslateUi(self, DUnBase): + DUnBase.setWindowTitle(QtGui.QApplication.translate("DUnBase", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel2.setText(QtGui.QApplication.translate("DUnBase", "

Valeur:

", None, QtGui.QApplication.UnicodeUTF8)) + self.bParametres.setText(QtGui.QApplication.translate("DUnBase", "Parametres", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setToolTip(QtGui.QApplication.translate("DUnBase", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DUnBase", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DUnBase", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setToolTip(QtGui.QApplication.translate("DUnBase", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DUnBase", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DUnBase", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setToolTip(QtGui.QApplication.translate("DUnBase", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DUnBase", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DUnBase", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + self.BView2D.setText(QtGui.QApplication.translate("DUnBase", "Visualiser", None, QtGui.QApplication.UnicodeUTF8)) + self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnBase", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DUnBase = QtGui.QWidget() + ui = Ui_DUnBase() + ui.setupUi(DUnBase) + DUnBase.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desUniqueBase.ui b/UiQT4/desUniqueBase.ui new file mode 100644 index 00000000..c089a5ff --- /dev/null +++ b/UiQT4/desUniqueBase.ui @@ -0,0 +1,262 @@ + + DUnBase + + + + 0 + 0 + 482 + 480 + + + + + 350 + 0 + + + + DUnIn + + + + + + + + 0 + 0 + 460 + 435 + + + + Saisir Valeur + + + + + + + + <b><u><p align="center">Valeur: </p></u></b> + + + false + + + + + + + + 290 + 50 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 288 + 21 + + + + + + + + + 0 + 0 + + + + + 140 + 30 + + + + Parametres + + + + + + + + 0 + 30 + + + + suppression du mot clef + + + &Supprimer + + + Alt+S + + + true + + + + + + + + 0 + 30 + + + + validation de la saisie + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + + + + + + 0 + 30 + + + + affichage documentation aster + + + &Documentation + + + Alt+D + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 41 + 112 + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 21 + 112 + + + + + + + + + 430 + 40 + + + + + + + false + + + + + + + + 110 + 40 + + + + Visualiser + + + + + + + + 50 + 40 + + + + + + + + image240.gifimage240.gif + + + + + + + + + + + + lineEditVal + bOk + bSup + BSalome + bHelp + BView2D + bParametres + tabuniqueinto + + + + diff --git a/UiQT4/desUniqueComp.py b/UiQT4/desUniqueComp.py new file mode 100644 index 00000000..1edb0042 --- /dev/null +++ b/UiQT4/desUniqueComp.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desUniqueComp.ui' +# +# Created: Wed Jul 9 10:31:14 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DUnComp(object): + def setupUi(self, DUnComp): + DUnComp.setObjectName("DUnComp") + DUnComp.resize(484,529) + DUnComp.setMinimumSize(QtCore.QSize(350,0)) + self.gridlayout = QtGui.QGridLayout(DUnComp) + self.gridlayout.setObjectName("gridlayout") + self.tabuniqueinto = QtGui.QTabWidget(DUnComp) + self.tabuniqueinto.setObjectName("tabuniqueinto") + self.Widget8 = QtGui.QWidget() + self.Widget8.setGeometry(QtCore.QRect(0,0,462,484)) + self.Widget8.setObjectName("Widget8") + self.gridLayout = QtGui.QGridLayout(self.Widget8) + self.gridLayout.setObjectName("gridLayout") + self.textLabel1 = QtGui.QLabel(self.Widget8) + self.textLabel1.setWordWrap(False) + self.textLabel1.setObjectName("textLabel1") + self.gridLayout.addWidget(self.textLabel1,0,0,1,2) + self.LEcomp = QtGui.QLineEdit(self.Widget8) + self.LEcomp.setMinimumSize(QtCore.QSize(390,40)) + self.LEcomp.setObjectName("LEcomp") + self.gridLayout.addWidget(self.LEcomp,1,0,1,2) + self.groupBox = QtGui.QGroupBox(self.Widget8) + self.groupBox.setObjectName("groupBox") + self.RBRI = QtGui.QRadioButton(self.groupBox) + self.RBRI.setGeometry(QtCore.QRect(10,30,444,23)) + self.RBRI.setObjectName("RBRI") + self.RBMP = QtGui.QRadioButton(self.groupBox) + self.RBMP.setGeometry(QtCore.QRect(10,50,444,23)) + self.RBMP.setObjectName("RBMP") + self.gridLayout.addWidget(self.groupBox,2,0,1,2) + self.LEReel = QtGui.QLineEdit(self.Widget8) + self.LEReel.setMinimumSize(QtCore.QSize(190,40)) + self.LEReel.setObjectName("LEReel") + self.gridLayout.addWidget(self.LEReel,3,0,1,1) + self.LEImag = QtGui.QLineEdit(self.Widget8) + self.LEImag.setMinimumSize(QtCore.QSize(190,40)) + self.LEImag.setObjectName("LEImag") + self.gridLayout.addWidget(self.LEImag,3,1,1,1) + self.Commentaire = QtGui.QLabel(self.Widget8) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridLayout.addWidget(self.Commentaire,4,0,1,2) + self.horizontalLayout = QtGui.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + self.bSup = QtGui.QPushButton(self.Widget8) + self.bSup.setAutoDefault(True) + self.bSup.setObjectName("bSup") + self.horizontalLayout.addWidget(self.bSup) + self.bOk = QtGui.QPushButton(self.Widget8) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setObjectName("bOk") + self.horizontalLayout.addWidget(self.bOk) + self.bHelp = QtGui.QPushButton(self.Widget8) + self.bHelp.setAutoDefault(True) + self.bHelp.setObjectName("bHelp") + self.horizontalLayout.addWidget(self.bHelp) + self.gridLayout.addLayout(self.horizontalLayout,5,0,1,2) + self.tabuniqueinto.addTab(self.Widget8,"") + self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1) + + self.retranslateUi(DUnComp) + QtCore.QMetaObject.connectSlotsByName(DUnComp) + + def retranslateUi(self, DUnComp): + DUnComp.setWindowTitle(QtGui.QApplication.translate("DUnComp", "DUnComp", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel1.setText(QtGui.QApplication.translate("DUnComp", "Complexe de la forme : a+bj", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox.setTitle(QtGui.QApplication.translate("DUnComp", "Ou", None, QtGui.QApplication.UnicodeUTF8)) + self.RBRI.setText(QtGui.QApplication.translate("DUnComp", "RI : Réel Imaginaire", None, QtGui.QApplication.UnicodeUTF8)) + self.RBMP.setText(QtGui.QApplication.translate("DUnComp", "MP : Module Phase", None, QtGui.QApplication.UnicodeUTF8)) + self.Commentaire.setText(QtGui.QApplication.translate("DUnComp", "Un complexe est attendu", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setToolTip(QtGui.QApplication.translate("DUnComp", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DUnComp", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DUnComp", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setToolTip(QtGui.QApplication.translate("DUnComp", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DUnComp", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DUnComp", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setToolTip(QtGui.QApplication.translate("DUnComp", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DUnComp", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DUnComp", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnComp", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DUnComp = QtGui.QWidget() + ui = Ui_DUnComp() + ui.setupUi(DUnComp) + DUnComp.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desUniqueComp.ui b/UiQT4/desUniqueComp.ui new file mode 100644 index 00000000..dcf31b22 --- /dev/null +++ b/UiQT4/desUniqueComp.ui @@ -0,0 +1,188 @@ + + DUnComp + + + + 0 + 0 + 484 + 529 + + + + + 350 + 0 + + + + DUnComp + + + + + + + + 0 + 0 + 462 + 484 + + + + Saisir Valeur + + + + + + <font size="+2">Complexe de la forme : a+bj</font> + + + false + + + + + + + + 390 + 40 + + + + + + + + Ou + + + + + 10 + 30 + 444 + 23 + + + + RI : Réel Imaginaire + + + + + + 10 + 50 + 444 + 23 + + + + MP : Module Phase + + + + + + + + + 190 + 40 + + + + + + + + + 190 + 40 + + + + + + + + <font size="+2">Un complexe est attendu</font> + + + false + + + + + + + + + suppression du mot clef + + + &Supprimer + + + Alt+S + + + true + + + + + + + validation de la saisie + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + + + + + affichage documentation aster + + + &Documentation + + + Alt+D + + + true + + + + + + + + + + + + + qPixmapFromMimeSource + + LEcomp + + + + diff --git a/UiQT4/desUniqueInto.py b/UiQT4/desUniqueInto.py new file mode 100644 index 00000000..5d9270f5 --- /dev/null +++ b/UiQT4/desUniqueInto.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desUniqueInto.ui' +# +# Created: Fri Jul 18 16:24:35 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DUnIn(object): + def setupUi(self, DUnIn): + DUnIn.setObjectName("DUnIn") + DUnIn.resize(482,480) + DUnIn.setMinimumSize(QtCore.QSize(350,0)) + self.gridlayout = QtGui.QGridLayout(DUnIn) + self.gridlayout.setObjectName("gridlayout") + self.tabuniqueinto = QtGui.QTabWidget(DUnIn) + self.tabuniqueinto.setObjectName("tabuniqueinto") + self.Widget8 = QtGui.QWidget() + self.Widget8.setObjectName("Widget8") + self.gridlayout1 = QtGui.QGridLayout(self.Widget8) + self.gridlayout1.setObjectName("gridlayout1") + self.Commentaire = QtGui.QLabel(self.Widget8) + self.Commentaire.setMinimumSize(QtCore.QSize(420,30)) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout1.addWidget(self.Commentaire,2,0,1,1) + self.hboxlayout = QtGui.QHBoxLayout() + self.hboxlayout.setObjectName("hboxlayout") + self.bSup = QtGui.QPushButton(self.Widget8) + self.bSup.setMinimumSize(QtCore.QSize(0,30)) + self.bSup.setAutoDefault(True) + self.bSup.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnIn", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))) + self.bSup.setObjectName("bSup") + self.hboxlayout.addWidget(self.bSup) + self.bOk = QtGui.QPushButton(self.Widget8) + self.bOk.setMinimumSize(QtCore.QSize(0,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnIn", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))) + self.bOk.setObjectName("bOk") + self.hboxlayout.addWidget(self.bOk) + self.bHelp = QtGui.QPushButton(self.Widget8) + self.bHelp.setMinimumSize(QtCore.QSize(0,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnIn", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))) + self.bHelp.setObjectName("bHelp") + self.hboxlayout.addWidget(self.bHelp) + self.gridlayout1.addLayout(self.hboxlayout,3,0,1,1) + self.listBoxVal = QtGui.QListWidget(self.Widget8) + self.listBoxVal.setObjectName("listBoxVal") + self.gridlayout1.addWidget(self.listBoxVal,1,0,1,1) + self.textLabel2 = QtGui.QLabel(self.Widget8) + self.textLabel2.setWordWrap(False) + self.textLabel2.setObjectName("textLabel2") + self.gridlayout1.addWidget(self.textLabel2,0,0,1,1) + self.tabuniqueinto.addTab(self.Widget8,"") + self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1) + + self.retranslateUi(DUnIn) + + def retranslateUi(self, DUnIn): + DUnIn.setWindowTitle(QtGui.QApplication.translate("DUnIn", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DUnIn", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DUnIn", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DUnIn", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DUnIn", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DUnIn", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DUnIn", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel2.setText(QtGui.QApplication.translate("DUnIn", "

Valeurs possibles

", None, QtGui.QApplication.UnicodeUTF8)) + self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnIn", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DUnIn = QtGui.QWidget() + ui = Ui_DUnIn() + ui.setupUi(DUnIn) + DUnIn.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desUniqueInto.ui b/UiQT4/desUniqueInto.ui new file mode 100644 index 00000000..7ab92b49 --- /dev/null +++ b/UiQT4/desUniqueInto.ui @@ -0,0 +1,142 @@ + + + + + DUnIn + + + + 0 + 0 + 482 + 480 + + + + + 350 + 0 + + + + DUnIn + + + + + + + Saisir Valeur + + + + + + + 420 + 30 + + + + + + + false + + + + + + + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + + + + + + <b><u><p align="center">Valeurs possibles</p></u></b> + + + false + + + + + + + + + + + qPixmapFromMimeSource + diff --git a/UiQT4/desUniqueSDCO.py b/UiQT4/desUniqueSDCO.py new file mode 100644 index 00000000..e1381af3 --- /dev/null +++ b/UiQT4/desUniqueSDCO.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desUniqueSDCO.ui' +# +# Created: Wed Jul 9 10:11:22 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DUnSDCO(object): + def setupUi(self, DUnSDCO): + DUnSDCO.setObjectName("DUnSDCO") + DUnSDCO.resize(461,480) + DUnSDCO.setMinimumSize(QtCore.QSize(350,0)) + self.gridlayout = QtGui.QGridLayout(DUnSDCO) + self.gridlayout.setObjectName("gridlayout") + self.tabuniqueinto = QtGui.QTabWidget(DUnSDCO) + self.tabuniqueinto.setObjectName("tabuniqueinto") + self.Widget8 = QtGui.QWidget() + self.Widget8.setObjectName("Widget8") + self.gridlayout1 = QtGui.QGridLayout(self.Widget8) + self.gridlayout1.setObjectName("gridlayout1") + self.bSup = QtGui.QPushButton(self.Widget8) + self.bSup.setMinimumSize(QtCore.QSize(0,30)) + self.bSup.setAutoDefault(True) + self.bSup.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnSDCO", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))) + self.bSup.setObjectName("bSup") + self.gridlayout1.addWidget(self.bSup,4,0,1,1) + self.bOk = QtGui.QPushButton(self.Widget8) + self.bOk.setMinimumSize(QtCore.QSize(0,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnSDCO", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))) + self.bOk.setObjectName("bOk") + self.gridlayout1.addWidget(self.bOk,4,1,1,1) + self.bHelp = QtGui.QPushButton(self.Widget8) + self.bHelp.setMinimumSize(QtCore.QSize(0,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnSDCO", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))) + self.bHelp.setObjectName("bHelp") + self.gridlayout1.addWidget(self.bHelp,4,2,1,1) + self.Commentaire = QtGui.QLabel(self.Widget8) + self.Commentaire.setMinimumSize(QtCore.QSize(311,30)) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout1.addWidget(self.Commentaire,3,0,1,3) + self.textLabel2_2 = QtGui.QLabel(self.Widget8) + self.textLabel2_2.setWordWrap(False) + self.textLabel2_2.setObjectName("textLabel2_2") + self.gridlayout1.addWidget(self.textLabel2_2,0,0,1,3) + self.LESDCO = QtGui.QLineEdit(self.Widget8) + self.LESDCO.setMinimumSize(QtCore.QSize(300,40)) + self.LESDCO.setObjectName("LESDCO") + self.gridlayout1.addWidget(self.LESDCO,1,0,1,3) + self.textLabel2 = QtGui.QLabel(self.Widget8) + self.textLabel2.setWordWrap(False) + self.textLabel2.setObjectName("textLabel2") + self.gridlayout1.addWidget(self.textLabel2,2,0,1,3) + self.tabuniqueinto.addTab(self.Widget8,"") + self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1) + + self.retranslateUi(DUnSDCO) + DUnSDCO.setTabOrder(self.LESDCO,self.tabuniqueinto) + DUnSDCO.setTabOrder(self.tabuniqueinto,self.bSup) + DUnSDCO.setTabOrder(self.bSup,self.bOk) + DUnSDCO.setTabOrder(self.bOk,self.bHelp) + + def retranslateUi(self, DUnSDCO): + DUnSDCO.setWindowTitle(QtGui.QApplication.translate("DUnSDCO", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DUnSDCO", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DUnSDCO", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DUnSDCO", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DUnSDCO", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DUnSDCO", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DUnSDCO", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel2_2.setText(QtGui.QApplication.translate("DUnSDCO", "

Nom du nouveau concept :

", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel2.setText(QtGui.QApplication.translate("DUnSDCO", "Un objet de type CO est attendu", None, QtGui.QApplication.UnicodeUTF8)) + self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnSDCO", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DUnSDCO = QtGui.QWidget() + ui = Ui_DUnSDCO() + ui.setupUi(DUnSDCO) + DUnSDCO.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desUniqueSDCO.ui b/UiQT4/desUniqueSDCO.ui new file mode 100644 index 00000000..46a472ca --- /dev/null +++ b/UiQT4/desUniqueSDCO.ui @@ -0,0 +1,162 @@ + + + + + DUnSDCO + + + + 0 + 0 + 461 + 480 + + + + + 350 + 0 + + + + DUnIn + + + + + + + Saisir Valeur + + + + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + + 311 + 30 + + + + + + + false + + + + + + + <h1><font size="+2">Nom du nouveau concept : </font></h1> + + + false + + + + + + + + 300 + 40 + + + + + + + + <font size="+1">Un objet de type CO est attendu</font> + + + false + + + + + + + + + + + qPixmapFromMimeSource + + LESDCO + tabuniqueinto + bSup + bOk + bHelp + + diff --git a/UiQT4/desUniqueSDCOInto.py b/UiQT4/desUniqueSDCOInto.py new file mode 100644 index 00000000..718c787b --- /dev/null +++ b/UiQT4/desUniqueSDCOInto.py @@ -0,0 +1,112 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desUniqueSDCOInto.ui' +# +# Created: Fri Jul 18 16:24:35 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DUnSDCOInto(object): + def setupUi(self, DUnSDCOInto): + DUnSDCOInto.setObjectName("DUnSDCOInto") + DUnSDCOInto.resize(482,480) + DUnSDCOInto.setMinimumSize(QtCore.QSize(350,0)) + self.gridlayout = QtGui.QGridLayout(DUnSDCOInto) + self.gridlayout.setObjectName("gridlayout") + self.tabuniqueinto = QtGui.QTabWidget(DUnSDCOInto) + self.tabuniqueinto.setObjectName("tabuniqueinto") + self.Widget8 = QtGui.QWidget() + self.Widget8.setObjectName("Widget8") + self.gridlayout1 = QtGui.QGridLayout(self.Widget8) + self.gridlayout1.setObjectName("gridlayout1") + self.textLabel2 = QtGui.QLabel(self.Widget8) + self.textLabel2.setWordWrap(False) + self.textLabel2.setObjectName("textLabel2") + self.gridlayout1.addWidget(self.textLabel2,0,0,1,3) + self.LBSDCO = QtGui.QListWidget(self.Widget8) + self.LBSDCO.setObjectName("LBSDCO") + self.gridlayout1.addWidget(self.LBSDCO,1,0,1,3) + self.textLabel2_3 = QtGui.QLabel(self.Widget8) + self.textLabel2_3.setWordWrap(False) + self.textLabel2_3.setObjectName("textLabel2_3") + self.gridlayout1.addWidget(self.textLabel2_3,5,0,1,3) + self.Commentaire = QtGui.QLabel(self.Widget8) + self.Commentaire.setMinimumSize(QtCore.QSize(420,30)) + self.Commentaire.setWordWrap(False) + self.Commentaire.setObjectName("Commentaire") + self.gridlayout1.addWidget(self.Commentaire,4,0,1,3) + self.gridlayout2 = QtGui.QGridLayout() + self.gridlayout2.setObjectName("gridlayout2") + self.gridlayout1.addLayout(self.gridlayout2,2,0,1,3) + self.hboxlayout = QtGui.QHBoxLayout() + self.hboxlayout.setObjectName("hboxlayout") + self.frame3 = QtGui.QFrame(self.Widget8) + self.frame3.setMinimumSize(QtCore.QSize(190,50)) + self.frame3.setFrameShape(QtGui.QFrame.StyledPanel) + self.frame3.setFrameShadow(QtGui.QFrame.Raised) + self.frame3.setObjectName("frame3") + self.textLabel2_2 = QtGui.QLabel(self.frame3) + self.textLabel2_2.setGeometry(QtCore.QRect(20,10,150,30)) + self.textLabel2_2.setWordWrap(False) + self.textLabel2_2.setObjectName("textLabel2_2") + self.hboxlayout.addWidget(self.frame3) + self.LESDCO = QtGui.QLineEdit(self.Widget8) + self.LESDCO.setMinimumSize(QtCore.QSize(220,40)) + self.LESDCO.setObjectName("LESDCO") + self.hboxlayout.addWidget(self.LESDCO) + self.gridlayout1.addLayout(self.hboxlayout,3,0,1,3) + self.bSup = QtGui.QPushButton(self.Widget8) + self.bSup.setMinimumSize(QtCore.QSize(0,30)) + self.bSup.setAutoDefault(True) + self.bSup.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnSDCOInto", "suppression du mot clef", None, QtGui.QApplication.UnicodeUTF8))) + self.bSup.setObjectName("bSup") + self.gridlayout1.addWidget(self.bSup,6,0,1,1) + self.bOk = QtGui.QPushButton(self.Widget8) + self.bOk.setMinimumSize(QtCore.QSize(0,30)) + self.bOk.setAutoDefault(True) + self.bOk.setDefault(True) + self.bOk.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnSDCOInto", "validation de la saisie", None, QtGui.QApplication.UnicodeUTF8))) + self.bOk.setObjectName("bOk") + self.gridlayout1.addWidget(self.bOk,6,1,1,1) + self.bHelp = QtGui.QPushButton(self.Widget8) + self.bHelp.setMinimumSize(QtCore.QSize(0,30)) + self.bHelp.setAutoDefault(True) + self.bHelp.setProperty("toolTip",QtCore.QVariant(QtGui.QApplication.translate("DUnSDCOInto", "affichage documentation aster", None, QtGui.QApplication.UnicodeUTF8))) + self.bHelp.setObjectName("bHelp") + self.gridlayout1.addWidget(self.bHelp,6,2,1,1) + self.tabuniqueinto.addTab(self.Widget8,"") + self.gridlayout.addWidget(self.tabuniqueinto,0,0,1,1) + + self.retranslateUi(DUnSDCOInto) + DUnSDCOInto.setTabOrder(self.LESDCO,self.LBSDCO) + DUnSDCOInto.setTabOrder(self.LBSDCO,self.tabuniqueinto) + DUnSDCOInto.setTabOrder(self.tabuniqueinto,self.bSup) + DUnSDCOInto.setTabOrder(self.bSup,self.bOk) + DUnSDCOInto.setTabOrder(self.bOk,self.bHelp) + + def retranslateUi(self, DUnSDCOInto): + DUnSDCOInto.setWindowTitle(QtGui.QApplication.translate("DUnSDCOInto", "DUnIn", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel2.setText(QtGui.QApplication.translate("DUnSDCOInto", "Structures de données du type requis par l\'objet courant ", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel2_3.setText(QtGui.QApplication.translate("DUnSDCOInto", "Un objet de type CO est attendu", None, QtGui.QApplication.UnicodeUTF8)) + self.textLabel2_2.setText(QtGui.QApplication.translate("DUnSDCOInto", " Nom concept : ", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setText(QtGui.QApplication.translate("DUnSDCOInto", "&Supprimer", None, QtGui.QApplication.UnicodeUTF8)) + self.bSup.setShortcut(QtGui.QApplication.translate("DUnSDCOInto", "Alt+S", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setText(QtGui.QApplication.translate("DUnSDCOInto", "&Valider", None, QtGui.QApplication.UnicodeUTF8)) + self.bOk.setShortcut(QtGui.QApplication.translate("DUnSDCOInto", "Shift+A, Alt+A, Alt+A, Alt+A", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setText(QtGui.QApplication.translate("DUnSDCOInto", "&Documentation", None, QtGui.QApplication.UnicodeUTF8)) + self.bHelp.setShortcut(QtGui.QApplication.translate("DUnSDCOInto", "Alt+D", None, QtGui.QApplication.UnicodeUTF8)) + self.tabuniqueinto.setTabText(self.tabuniqueinto.indexOf(self.Widget8), QtGui.QApplication.translate("DUnSDCOInto", "Saisir Valeur", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DUnSDCOInto = QtGui.QWidget() + ui = Ui_DUnSDCOInto() + ui.setupUi(DUnSDCOInto) + DUnSDCOInto.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desUniqueSDCOInto.ui b/UiQT4/desUniqueSDCOInto.ui new file mode 100644 index 00000000..c42947b9 --- /dev/null +++ b/UiQT4/desUniqueSDCOInto.ui @@ -0,0 +1,205 @@ + + + + + DUnSDCOInto + + + + 0 + 0 + 482 + 480 + + + + + 350 + 0 + + + + DUnIn + + + + + + + Saisir Valeur + + + + + + <font size="+1"><u>Structures de données du type requis par l'objet courant </u></font> + + + false + + + + + + + + + + <font size="+1">Un objet de type CO est attendu</font> + + + false + + + + + + + + 420 + 30 + + + + + + + false + + + + + + + + + + + + + 190 + 50 + + + + StyledPanel + + + Raised + + + + + 20 + 10 + 150 + 30 + + + + <font size="+1"> Nom concept : </font> + + + false + + + + + + + + + 220 + 40 + + + + + + + + + + + 0 + 30 + + + + &Supprimer + + + Alt+S + + + true + + + suppression du mot clef + + + + + + + + 0 + 30 + + + + &Valider + + + Shift+A, Alt+A, Alt+A, Alt+A + + + true + + + true + + + validation de la saisie + + + + + + + + 0 + 30 + + + + &Documentation + + + Alt+D + + + true + + + affichage documentation aster + + + + + + + + + + + qPixmapFromMimeSource + + LESDCO + LBSDCO + tabuniqueinto + bSup + bOk + bHelp + + diff --git a/UiQT4/desViewTexte.py b/UiQT4/desViewTexte.py new file mode 100644 index 00000000..dac56f76 --- /dev/null +++ b/UiQT4/desViewTexte.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desViewTexte.ui' +# +# Created: Tue Sep 9 18:09:46 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_dView(object): + def setupUi(self, dView): + dView.setObjectName("dView") + dView.resize(400,322) + self.gridLayout = QtGui.QGridLayout(dView) + self.gridLayout.setObjectName("gridLayout") + self.view = QtGui.QTextBrowser(dView) + self.view.setObjectName("view") + self.gridLayout.addWidget(self.view,0,0,1,4) + spacerItem = QtGui.QSpacerItem(209,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum) + self.gridLayout.addItem(spacerItem,1,0,1,1) + self.bclose = QtGui.QPushButton(dView) + self.bclose.setObjectName("bclose") + self.gridLayout.addWidget(self.bclose,1,2,1,1) + self.bsave = QtGui.QPushButton(dView) + self.bsave.setObjectName("bsave") + self.gridLayout.addWidget(self.bsave,1,1,1,1) + + self.retranslateUi(dView) + QtCore.QMetaObject.connectSlotsByName(dView) + + def retranslateUi(self, dView): + dView.setWindowTitle(QtGui.QApplication.translate("dView", "Dialog", None, QtGui.QApplication.UnicodeUTF8)) + self.bclose.setText(QtGui.QApplication.translate("dView", "Fermer", None, QtGui.QApplication.UnicodeUTF8)) + self.bsave.setText(QtGui.QApplication.translate("dView", "Sauver", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + dView = QtGui.QDialog() + ui = Ui_dView() + ui.setupUi(dView) + dView.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desViewTexte.ui b/UiQT4/desViewTexte.ui new file mode 100644 index 00000000..6cfa950e --- /dev/null +++ b/UiQT4/desViewTexte.ui @@ -0,0 +1,53 @@ + + dView + + + + 0 + 0 + 400 + 322 + + + + Dialog + + + + + + + + + Qt::Horizontal + + + + 209 + 20 + + + + + + + + Fermer + + + + + + + Sauver + + + + + view + bclose + bsave + + + + diff --git a/UiQT4/desVisu.py b/UiQT4/desVisu.py new file mode 100644 index 00000000..8a0e2895 --- /dev/null +++ b/UiQT4/desVisu.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'desVisu.ui' +# +# Created: Wed Jul 9 10:11:22 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DVisu(object): + def setupUi(self, DVisu): + DVisu.setObjectName("DVisu") + DVisu.resize(501,394) + self.gridlayout = QtGui.QGridLayout(DVisu) + self.gridlayout.setObjectName("gridlayout") + self.TB = QtGui.QTextBrowser(DVisu) + self.TB.setObjectName("TB") + self.gridlayout.addWidget(self.TB,0,0,1,1) + + self.retranslateUi(DVisu) + + def retranslateUi(self, DVisu): + DVisu.setWindowTitle(QtGui.QApplication.translate("DVisu", "Visualisation Include Materiau", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + DVisu = QtGui.QWidget() + ui = Ui_DVisu() + ui.setupUi(DVisu) + DVisu.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/desVisu.ui b/UiQT4/desVisu.ui new file mode 100644 index 00000000..536be1a4 --- /dev/null +++ b/UiQT4/desVisu.ui @@ -0,0 +1,26 @@ + + + + + DVisu + + + + 0 + 0 + 501 + 394 + + + + Visualisation Include Materiau + + + + + + + + + qPixmapFromMimeSource + diff --git a/UiQT4/image120.gif b/UiQT4/image120.gif new file mode 100644 index 00000000..1834870b Binary files /dev/null and b/UiQT4/image120.gif differ diff --git a/UiQT4/image120.png b/UiQT4/image120.png new file mode 100644 index 00000000..264a9700 Binary files /dev/null and b/UiQT4/image120.png differ diff --git a/UiQT4/image240.gif b/UiQT4/image240.gif new file mode 100644 index 00000000..2ed58745 Binary files /dev/null and b/UiQT4/image240.gif differ diff --git a/UiQT4/makefile b/UiQT4/makefile new file mode 100644 index 00000000..8327014d --- /dev/null +++ b/UiQT4/makefile @@ -0,0 +1,16 @@ +PYUIC = pyuic4 +.PHONY : all +.SUFFIXES : .ui .py + + +PY_FILES = desChoixCata.py desCommande.py desCommentaire.py desError.py desFormule.py desInactif.py \ + desInclude.py desListeParam.py desMCFact.py desMCListAjout.py desParam.py \ + desPlusieursBase.py desPlusieursInto.py desPoursuite.py desRacine.py desSelectVal.py \ + desUniqueASSD.py desUniqueBase.py desUniqueComp.py desUniqueInto.py desUniqueSDCOInto.py \ + desUniqueSDCO.py desVisu.py aideQT.py OptionsEditeur.py OptionsPdf.py myMain.py \ + desViewTexte.py + +%.py:%.ui + ${PYUIC} -x -o $@ $< + +all : $(PY_FILES) diff --git a/UiQT4/myMain.py b/UiQT4/myMain.py new file mode 100644 index 00000000..604403a7 --- /dev/null +++ b/UiQT4/myMain.py @@ -0,0 +1,186 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'myMain.ui' +# +# Created: Wed Sep 10 09:57:04 2008 +# by: PyQt4 UI code generator 4.4.2 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_Eficas(object): + def setupUi(self, Eficas): + Eficas.setObjectName("Eficas") + Eficas.resize(1406,600) + self.centralwidget = QtGui.QWidget(Eficas) + self.centralwidget.setGeometry(QtCore.QRect(0,68,1406,510)) + self.centralwidget.setObjectName("centralwidget") + Eficas.setCentralWidget(self.centralwidget) + self.menubar = QtGui.QMenuBar(Eficas) + self.menubar.setGeometry(QtCore.QRect(0,0,1406,29)) + self.menubar.setObjectName("menubar") + self.menuFichier = QtGui.QMenu(self.menubar) + self.menuFichier.setObjectName("menuFichier") + self.menuEdition = QtGui.QMenu(self.menubar) + self.menuEdition.setObjectName("menuEdition") + self.menuJdC = QtGui.QMenu(self.menubar) + self.menuJdC.setObjectName("menuJdC") + self.menu_Aide = QtGui.QMenu(self.menubar) + self.menu_Aide.setObjectName("menu_Aide") + self.menuOptions = QtGui.QMenu(self.menubar) + self.menuOptions.setObjectName("menuOptions") + self.menuTraduction = QtGui.QMenu(self.menubar) + self.menuTraduction.setObjectName("menuTraduction") + self.menuPatrons = QtGui.QMenu(self.menubar) + self.menuPatrons.setObjectName("menuPatrons") + Eficas.setMenuBar(self.menubar) + self.statusbar = QtGui.QStatusBar(Eficas) + self.statusbar.setGeometry(QtCore.QRect(0,578,1406,22)) + self.statusbar.setObjectName("statusbar") + Eficas.setStatusBar(self.statusbar) + self.toolBar = QtGui.QToolBar(Eficas) + self.toolBar.setGeometry(QtCore.QRect(0,29,1406,39)) + self.toolBar.setObjectName("toolBar") + Eficas.addToolBar(QtCore.Qt.TopToolBarArea,self.toolBar) + self.action_Nouveau = QtGui.QAction(Eficas) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("icons/New24.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off) + self.action_Nouveau.setIcon(icon) + self.action_Nouveau.setObjectName("action_Nouveau") + self.actionNouvel_Include = QtGui.QAction(Eficas) + self.actionNouvel_Include.setObjectName("actionNouvel_Include") + self.action_Ouvrir = QtGui.QAction(Eficas) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("icons/Open24.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off) + self.action_Ouvrir.setIcon(icon) + self.action_Ouvrir.setObjectName("action_Ouvrir") + self.actionEnregistrer = QtGui.QAction(Eficas) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("icons/Save24.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off) + self.actionEnregistrer.setIcon(icon) + self.actionEnregistrer.setObjectName("actionEnregistrer") + self.actionEnregistrer_sous = QtGui.QAction(Eficas) + self.actionEnregistrer_sous.setObjectName("actionEnregistrer_sous") + self.actionFermer = QtGui.QAction(Eficas) + self.actionFermer.setObjectName("actionFermer") + self.actionFermer_tout = QtGui.QAction(Eficas) + self.actionFermer_tout.setObjectName("actionFermer_tout") + self.actionCopier = QtGui.QAction(Eficas) + self.actionCopier.setObjectName("actionCopier") + self.actionCouper = QtGui.QAction(Eficas) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("icons/Cut24.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off) + self.actionCouper.setIcon(icon) + self.actionCouper.setObjectName("actionCouper") + self.actionColler = QtGui.QAction(Eficas) + self.actionColler.setObjectName("actionColler") + self.actionCopier1 = QtGui.QAction(Eficas) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("icons/Copy24.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off) + self.actionCopier1.setIcon(icon) + self.actionCopier1.setObjectName("actionCopier1") + self.actionColler1 = QtGui.QAction(Eficas) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("icons/Paste24.gif"),QtGui.QIcon.Normal,QtGui.QIcon.Off) + self.actionColler1.setIcon(icon) + self.actionColler1.setObjectName("actionColler1") + self.actionQuitter = QtGui.QAction(Eficas) + self.actionQuitter.setObjectName("actionQuitter") + self.actionRapport_de_Validation = QtGui.QAction(Eficas) + self.actionRapport_de_Validation.setObjectName("actionRapport_de_Validation") + self.actionFichier_Source = QtGui.QAction(Eficas) + self.actionFichier_Source.setObjectName("actionFichier_Source") + self.actionFichier_Resultat = QtGui.QAction(Eficas) + self.actionFichier_Resultat.setObjectName("actionFichier_Resultat") + self.actionParametres_Eficas = QtGui.QAction(Eficas) + self.actionParametres_Eficas.setObjectName("actionParametres_Eficas") + self.actionLecteur_Pdf = QtGui.QAction(Eficas) + self.actionLecteur_Pdf.setObjectName("actionLecteur_Pdf") + self.actionTraduitV7V8 = QtGui.QAction(Eficas) + self.actionTraduitV7V8.setObjectName("actionTraduitV7V8") + self.actionTraduitV8V9 = QtGui.QAction(Eficas) + self.actionTraduitV8V9.setObjectName("actionTraduitV8V9") + self.menuFichier.addAction(self.action_Nouveau) + self.menuFichier.addAction(self.actionNouvel_Include) + self.menuFichier.addAction(self.action_Ouvrir) + self.menuFichier.addSeparator() + self.menuFichier.addAction(self.actionEnregistrer) + self.menuFichier.addAction(self.actionEnregistrer_sous) + self.menuFichier.addAction(self.actionFermer) + self.menuFichier.addAction(self.actionFermer_tout) + self.menuFichier.addSeparator() + self.menuFichier.addAction(self.actionQuitter) + self.menuEdition.addAction(self.actionCouper) + self.menuEdition.addAction(self.actionCopier) + self.menuEdition.addAction(self.actionColler) + self.menuJdC.addAction(self.actionRapport_de_Validation) + self.menuJdC.addAction(self.actionFichier_Source) + self.menuJdC.addAction(self.actionFichier_Resultat) + self.menuOptions.addAction(self.actionParametres_Eficas) + self.menuOptions.addAction(self.actionLecteur_Pdf) + self.menuTraduction.addAction(self.actionTraduitV7V8) + self.menuTraduction.addAction(self.actionTraduitV8V9) + self.menubar.addAction(self.menuFichier.menuAction()) + self.menubar.addAction(self.menuEdition.menuAction()) + self.menubar.addAction(self.menuJdC.menuAction()) + self.menubar.addAction(self.menu_Aide.menuAction()) + self.menubar.addAction(self.menuOptions.menuAction()) + self.menubar.addAction(self.menuTraduction.menuAction()) + self.menubar.addAction(self.menuPatrons.menuAction()) + self.toolBar.addAction(self.action_Nouveau) + self.toolBar.addAction(self.action_Ouvrir) + self.toolBar.addAction(self.actionEnregistrer) + self.toolBar.addSeparator() + self.toolBar.addAction(self.actionCouper) + self.toolBar.addAction(self.actionCopier) + self.toolBar.addAction(self.actionColler) + + self.retranslateUi(Eficas) + QtCore.QMetaObject.connectSlotsByName(Eficas) + + def retranslateUi(self, Eficas): + Eficas.setWindowTitle(QtGui.QApplication.translate("Eficas", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) + self.menuFichier.setTitle(QtGui.QApplication.translate("Eficas", "&Fichier", None, QtGui.QApplication.UnicodeUTF8)) + self.menuEdition.setTitle(QtGui.QApplication.translate("Eficas", "Edition", None, QtGui.QApplication.UnicodeUTF8)) + self.menuJdC.setTitle(QtGui.QApplication.translate("Eficas", "JdC", None, QtGui.QApplication.UnicodeUTF8)) + self.menu_Aide.setTitle(QtGui.QApplication.translate("Eficas", "&Aide", None, QtGui.QApplication.UnicodeUTF8)) + self.menuOptions.setTitle(QtGui.QApplication.translate("Eficas", "Options", None, QtGui.QApplication.UnicodeUTF8)) + self.menuTraduction.setTitle(QtGui.QApplication.translate("Eficas", "Traduction", None, QtGui.QApplication.UnicodeUTF8)) + self.menuPatrons.setTitle(QtGui.QApplication.translate("Eficas", "Patrons", None, QtGui.QApplication.UnicodeUTF8)) + self.toolBar.setWindowTitle(QtGui.QApplication.translate("Eficas", "toolBar", None, QtGui.QApplication.UnicodeUTF8)) + self.action_Nouveau.setText(QtGui.QApplication.translate("Eficas", "&Nouveau", None, QtGui.QApplication.UnicodeUTF8)) + self.action_Nouveau.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+N", None, QtGui.QApplication.UnicodeUTF8)) + self.actionNouvel_Include.setText(QtGui.QApplication.translate("Eficas", "Nouvel Include", None, QtGui.QApplication.UnicodeUTF8)) + self.action_Ouvrir.setText(QtGui.QApplication.translate("Eficas", "&Ouvrir", None, QtGui.QApplication.UnicodeUTF8)) + self.action_Ouvrir.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+O", None, QtGui.QApplication.UnicodeUTF8)) + self.actionEnregistrer.setText(QtGui.QApplication.translate("Eficas", "Enregistrer", None, QtGui.QApplication.UnicodeUTF8)) + self.actionEnregistrer.setShortcut(QtGui.QApplication.translate("Eficas", "Shift+E", None, QtGui.QApplication.UnicodeUTF8)) + self.actionEnregistrer_sous.setText(QtGui.QApplication.translate("Eficas", "Enregistrer sous", None, QtGui.QApplication.UnicodeUTF8)) + self.actionFermer.setText(QtGui.QApplication.translate("Eficas", "Fermer ", None, QtGui.QApplication.UnicodeUTF8)) + self.actionFermer.setShortcut(QtGui.QApplication.translate("Eficas", "Ctrl+W", None, QtGui.QApplication.UnicodeUTF8)) + self.actionFermer_tout.setText(QtGui.QApplication.translate("Eficas", "Fermer tout", None, QtGui.QApplication.UnicodeUTF8)) + self.actionCopier.setText(QtGui.QApplication.translate("Eficas", "Copier", None, QtGui.QApplication.UnicodeUTF8)) + self.actionCouper.setText(QtGui.QApplication.translate("Eficas", "Couper", None, QtGui.QApplication.UnicodeUTF8)) + self.actionColler.setText(QtGui.QApplication.translate("Eficas", "Coller", None, QtGui.QApplication.UnicodeUTF8)) + self.actionCopier1.setText(QtGui.QApplication.translate("Eficas", "Copier", None, QtGui.QApplication.UnicodeUTF8)) + self.actionColler1.setText(QtGui.QApplication.translate("Eficas", "Coller", None, QtGui.QApplication.UnicodeUTF8)) + self.actionQuitter.setText(QtGui.QApplication.translate("Eficas", "Quitter", None, QtGui.QApplication.UnicodeUTF8)) + self.actionRapport_de_Validation.setText(QtGui.QApplication.translate("Eficas", "Rapport de Validation", None, QtGui.QApplication.UnicodeUTF8)) + self.actionFichier_Source.setText(QtGui.QApplication.translate("Eficas", "Fichier Source", None, QtGui.QApplication.UnicodeUTF8)) + self.actionFichier_Resultat.setText(QtGui.QApplication.translate("Eficas", "Fichier Résultat", None, QtGui.QApplication.UnicodeUTF8)) + self.actionParametres_Eficas.setText(QtGui.QApplication.translate("Eficas", "Parametres Eficas", None, QtGui.QApplication.UnicodeUTF8)) + self.actionLecteur_Pdf.setText(QtGui.QApplication.translate("Eficas", "Lecteur Pdf", None, QtGui.QApplication.UnicodeUTF8)) + self.actionTraduitV7V8.setText(QtGui.QApplication.translate("Eficas", "TraduitV7V8", None, QtGui.QApplication.UnicodeUTF8)) + self.actionTraduitV8V9.setText(QtGui.QApplication.translate("Eficas", "TraduitV8V9", None, QtGui.QApplication.UnicodeUTF8)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + Eficas = QtGui.QMainWindow() + ui = Ui_Eficas() + ui.setupUi(Eficas) + Eficas.show() + sys.exit(app.exec_()) + diff --git a/UiQT4/myMain.ui b/UiQT4/myMain.ui new file mode 100644 index 00000000..0112d9c6 --- /dev/null +++ b/UiQT4/myMain.ui @@ -0,0 +1,272 @@ + + Eficas + + + + 0 + 0 + 1406 + 600 + + + + MainWindow + + + + + 0 + 68 + 1406 + 510 + + + + + + + 0 + 0 + 1406 + 29 + + + + + &Fichier + + + + + + + + + + + + + + + Edition + + + + + + + + JdC + + + + + + + + &Aide + + + + + Options + + + + + + + Traduction + + + + + + + Patrons + + + + + + + + + + + + + + 0 + 578 + 1406 + 22 + + + + + + + 0 + 29 + 1406 + 39 + + + + toolBar + + + TopToolBarArea + + + false + + + + + + + + + + + + + icons/New24.gificons/New24.gif + + + &Nouveau + + + Ctrl+N + + + + + Nouvel Include + + + + + + icons/Open24.gificons/Open24.gif + + + &Ouvrir + + + Ctrl+O + + + + + + icons/Save24.gificons/Save24.gif + + + Enregistrer + + + Shift+E + + + + + Enregistrer sous + + + + + Fermer + + + Ctrl+W + + + + + Fermer tout + + + + + Copier + + + + + + icons/Cut24.gificons/Cut24.gif + + + Couper + + + + + Coller + + + + + + icons/Copy24.gificons/Copy24.gif + + + Copier + + + + + + icons/Paste24.gificons/Paste24.gif + + + Coller + + + + + Quitter + + + + + Rapport de Validation + + + + + Fichier Source + + + + + Fichier Résultat + + + + + Parametres Eficas + + + + + Lecteur Pdf + + + + + TraduitV7V8 + + + + + TraduitV8V9 + + + + + + diff --git a/convert/convert_openturns.py b/convert/convert_openturns.py new file mode 100644 index 00000000..527e6f65 --- /dev/null +++ b/convert/convert_openturns.py @@ -0,0 +1,128 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module contient le plugin convertisseur de fichier + au format python pour EFICAS. + + Un plugin convertisseur doit fournir deux attributs de classe : + extensions et formats et deux méthodes : readfile,convert. + + L'attribut de classe extensions est une liste d'extensions + de fichiers préconisées pour ce type de format. Cette information + est seulement indicative. + + L'attribut de classe formats est une liste de formats de sortie + supportés par le convertisseur. Les formats possibles sont : + eval, dict ou exec. + Le format eval est un texte source Python qui peut etre evalué. Le + résultat de l'évaluation est un objet Python quelconque. + Le format dict est un dictionnaire Python. + Le format exec est un texte source Python qui peut etre executé. + + La méthode readfile a pour fonction de lire un fichier dont le + nom est passé en argument de la fonction. + - convertisseur.readfile(nom_fichier) + + La méthode convert a pour fonction de convertir le fichier + préalablement lu dans un objet du format passé en argument. + - objet=convertisseur.convert(outformat) + + Ce convertisseur supporte le format de sortie exec + +""" +import sys,string,traceback + +import parseur_python +from Noyau import N_CR + +def entryPoint(): + """ + Retourne les informations nécessaires pour le chargeur de plugins + Ces informations sont retournées dans un dictionnaire + """ + return { + # Le nom du plugin + 'name' : 'openturns', + # La factory pour créer une instance du plugin + 'factory' : PythonParser, + } + + +class PythonParser: + """ + Ce convertisseur lit un fichier au format python avec la + methode readfile : convertisseur.readfile(nom_fichier) + et retourne le texte au format outformat avec la + methode convertisseur.convert(outformat) + + Ses caractéristiques principales sont exposées dans 2 attributs + de classe : + - extensions : qui donne une liste d'extensions de fichier préconisées + - formats : qui donne une liste de formats de sortie supportés + """ + # Les extensions de fichier préconisées + extensions=('.py',) + # Les formats de sortie supportés (eval dict ou exec) + # Le format exec est du python executable (commande exec) converti avec PARSEUR_PYTHON + # Le format execnoparseur est du python executable (commande exec) non converti + formats=('exec','execnoparseur') + + def __init__(self,cr=None): + # Si l'objet compte-rendu n'est pas fourni, on utilise le + # compte-rendu standard + self.text='' + if cr : + self.cr=cr + else: + self.cr=N_CR.CR(debut='CR convertisseur format python', + fin='fin CR format python') + + def readfile(self,filename): + self.filename=filename + try: + self.text=open(filename).read() + except: + self.cr.fatal("Impossible ouvrir fichier %s" % filename) + return + + def convert(self,outformat,appli=None): + if outformat == 'exec': + try: + #txt=parseur_python.PARSEUR_PYTHON(self.text).get_texte(appli) + #print txt + #return txt + return parseur_python.PARSEUR_PYTHON(self.text).get_texte(appli) + except: + # Erreur lors de la conversion + l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1], + sys.exc_info()[2]) + self.cr.exception("Impossible de convertir le fichier python \ + qui doit contenir des erreurs.\n \ + On retourne le fichier non converti \n \ + Prévenir la maintenance. \n" + string.join(l)) + # On retourne néanmoins le source initial non converti (au cas où) + return self.text + elif outformat == 'execnoparseur': + return self.text + else: + raise "Format de sortie : %s, non supporté" + return None + diff --git a/generator/DefautASTER.py b/generator/DefautASTER.py new file mode 100644 index 00000000..97e22263 --- /dev/null +++ b/generator/DefautASTER.py @@ -0,0 +1,214 @@ +""" +Ce module contient les variables +par defaut pour Aster +""" + +from OpenturnsSTD import STDGenerateur +from OpenturnsXML import XMLGenerateur + +#==================================================== +# Preparation du fichier STD +#==================================================== +# C.1. Parties du texte en dur dans le fichier STD +#------------------------------------------------- + +DecalSTD = " " +DecalSTDsaut = "\n " + +TexteSTDFIN ="\n\nexcept : \n" +TexteSTDFIN += DecalSTD + "error_message = sys.exc_type\n" +TexteSTDFIN += "\nif error_message is not None :\n" +TexteSTDFIN += DecalSTD + "texte = \"\\n=================================================\"" +TexteSTDFIN += DecalSTD + "texte += \"\\nMessage d'erreur : \" + str(error_message)" +TexteSTDFIN += DecalSTD + "texte += \"\\n=================================================\\n\"" +TexteSTDFIN += DecalSTD + "print texte" +TexteSTDFIN += DecalSTD + "\nsys.exit(error_message)\n" + +# C.2. Definition de composants dans le fichier STD +#-------------------------------------------------- + +NomFunction = "myFunction" +NomPhysicalStartingPoint = "myPhysicalStartingPoint" +NomCollection = "myCollection" +NomCopule = "myCopula" +NomDistribution = "myDistribution" +NomRandomVector_in = "myRandomVector_in" +NomRandomVector_out = "myRandomVector_out" +NomEvent = "myEvent" +NomMethod = "myMethod" +NomAlgo = "myAlgo" +NomRoot = "myRoot" +NomSampling = "mySampling" +NomSolverSD = "mySolver" +NomResu = "myResu" + +class Defaut : +# Cette classe ajoute les parametres par defaut propres au Solver Aster +# Elle va d abord enrichir le dictionnaire DictMCVal avec des valeurs par defaut +# C est la methode enrichitMCVal +# Elle va ensuite enrichir les variables +# C est la methode enrichitListeVariables + + def __init__(self, parent) : + self.parent=parent + self.enrichitMCVal() + self.enrichitListeVariables() + + + def enrichitMCVal(self) : + #===================== + # InformationSolver : nom du wrapper, type de fichiers d'echange, etc + #---------------------------------------------------------------------- + # Ajoute les informations sur le wrapper + # nom du wrapper, type de fichiers d'echange, etc. + dico = { "WrapperPath" : "Code_Aster.so", + "FunctionName" : "Code_Aster", + "WrapCouplingMode" : "fork", + "State" : "shared", + "InDataTransfer" : "files", + "OutDataTransfer" : "files", + } + + self.parent.ajouteDictMCVal(dico) + + #InformationSolverFile : parametres par defaut pour les fichiers d'echange + #-------------------------------------------------------------------------- + + liste = [] + dicoIn = { "Id" : "file_in", "Type" : "in", "Name" : "StdIn", "Path" : "commandes_aster" } + liste.append(dicoIn) + dicoOut = { "Id" : "file_out", "Type" : "out", "Name" : "StdOut", "Path" : "resultats_aster", } + liste.append(dicoOut) + dicoFile={"exchange_file" : liste} + self.parent.ajouteDictMCVal(dicoFile) + +# D.2. InformationSolverCommande : arguments, etc +#------------------------------------------------------------------------- +# InformationSolverCommande est un dictionnaire indexe par le nom du solveur externe appele. +# InformationSolverCommande[solveur] est lui-meme un dictionnaire qui contient les parametres +# supplementaires pour la commande. +# Des parametres sont donnes sous forme de tuple : (ok/nok, "mot-cle") ou (ok/nok, "mot-cle", valeur) +# . On ajoute seulement si ok +# . Avec (ok/nok, "mot-cle"), on ajoute en arguments les couples ("mot-cle", nom_du_parametre) +# . Avec (ok/nok, "mot-cle", valeur), on ajoute en arguments les couples ("mot-cle", valeur) + + +# dico = { "file_out" : (1, "-fic_de_aster_vers_ot"), +# "variable_in" : (1, "-variable") } +# self.parent.InformationSolverCommande["Code_Aster"] = dico + + + def enrichitListeVariables(self) : + # parametres par defaut pour chaque variable + #-------------------------------------------- + + dico_in = { "Regexp" : '"^" , "Name", "(.*)= *[0-9eE.+-]+([)]?;?)$"', + "Format" : '"Name", "\\1=%20.13G\\2"' + } + dico_out = { "Regexp" : '"(.*)"' } + self.parent.ajouteInfoVariables(dico_in,dico_out) + +class MonSTDGenerateur(STDGenerateur) : + + def CreeResu (self) : + #------------------ + ''' + Le resultat : + . Donnees : + . l'algorithme choisi. + . Resultats : + . Ecriture des odres d'impression. + ''' + if self.DictMCVal.has_key("Analysis"): + self.Analysis = str(self.DictMCVal["Analysis"]) + else : + self.Analysis = None + self.fic_resu_OpenTURNS = "fic_resu_OpenTURNS_glop" + Algorithm = str (self.DictMCVal["Algorithm"]) + texte = "\n\n# Le resultat\n" + texte += DecalSTDsaut + NomResu + " = " + NomAlgo + ".getResult()" + texte += DecalSTDsaut + "###" + "print " + NomResu + texte += DecalSTDsaut + "text_resu = \"Resultats\\n=======\\n\"" + +# Particularites des algorithmes de fiabilite + + if self.Analysis in ( "Reliability", ) : + texte += DecalSTDsaut + "aux = " + NomResu + ".getIsStandardPointOriginInFailureSpace()" + texte += DecalSTDsaut + "if aux :" + texte += DecalSTDsaut + DecalSTD + "texte_bis = \"est\"" + texte += DecalSTDsaut + "else :" + texte += DecalSTDsaut + DecalSTD + "texte_bis = \"n\'est pas\"" + texte += DecalSTDsaut + "text_resu += \"\\nLe point initial \" + texte_bis + \" dans l\'espace de defaillance.\"" + l_aux = [ ("Probabilite de defaillance", "EventProbability") ] + l_aux.append ( ("Indice de confiance generalise", "GeneralisedReliabilityIndex") ) + l_aux.append ( ("Indice de confiance de Hasofer", "HasoferReliabilityIndex") ) + for t_aux in l_aux : + texte += DecalSTDsaut + "text_resu += \"\\n" + t_aux[0] + " = \" + str(" \ + + NomResu + ".get" + t_aux[1] + "())" + l_aux = [] + l_aux.append("StandardSpaceDesignPoint") + l_aux.append("PhysicalSpaceDesignPoint") + l_aux.append("ImportanceFactors") + texte += DecalSTDsaut + "l_aux_var = []" + for DictVariable in self.ListeVariables : + if ( DictVariable["Type"] == "in" ) : + texte += DecalSTDsaut + "l_aux_var.append(\"" + DictVariable["Name"] + "\")" + texte += DecalSTDsaut + "l_aux = []" + for type_resu in l_aux : + texte += DecalSTDsaut + "l_aux.append(" + NomResu + ".get" + type_resu + "())" + texte += DecalSTDsaut + "for resu in l_aux :" + texte += DecalSTDsaut + DecalSTD + "if not resu.isEmpty() :" + texte += DecalSTDsaut + DecalSTD + DecalSTD + "text_resu += \"\\n\" + resu.getName() + \" :\"" + texte += DecalSTDsaut + DecalSTD + DecalSTD + "size = resu.getDimension()" + texte += DecalSTDsaut + DecalSTD + DecalSTD + "l_aux_1 = resu.getCollection()" + texte += DecalSTDsaut + DecalSTD + DecalSTD + "for iaux in range(size) :" + texte += DecalSTDsaut + DecalSTD + DecalSTD + DecalSTD + "text_resu += \"\\n. \" + l_aux_var[iaux] + \" : \" + str(l_aux_1[iaux])" + +# Particularites des algorithmes de simulation + + if self.Analysis in ( "Simulation", ) : + l_aux = [ ("Probabilite de defaillance", "ProbabilityEstimate") ] + l_aux.append ( ("Variance", "VarianceEstimate") ) + l_aux.append ( ("Nombre d\'iterations", "OuterSampling") ) + for t_aux in l_aux : + texte += DecalSTDsaut + "text_resu += \"\\n" + t_aux[0] + " = \" + str(" \ + + NomResu + ".get" + t_aux[1] + "())" + texte += DecalSTDsaut + "text_resu += \"\\nNombre d'evaluations de l'etat limite = \" + str(" \ + + NomResu + ".getOuterSampling()*" + NomResu + ".getBlockSize())" + if self.DictMCVal.has_key("ConfidenceIntervalProbability") : + aux = self.DictMCVal["ConfidenceIntervalProbability"] + texte += DecalSTDsaut + "proba = " + NomResu + ".getProbabilityEstimate()" + texte += DecalSTDsaut + "t_aux = " + if ( type(aux) is type(0.) ) : + texte += "(" + str(aux) + ")" + t_aux = [ str(aux) ] + else : + texte += str(aux) + texte += DecalSTDsaut + "for val in t_aux :" + texte += DecalSTDsaut + DecalSTD + "length = " + NomResu + ".getConfidenceLength(val)" + texte += DecalSTDsaut + DecalSTD + "vinf = str( proba - 0.5*length )" + texte += DecalSTDsaut + DecalSTD + "vsup = str( proba + 0.5*length )" + texte += DecalSTDsaut + DecalSTD + "text_resu += \"\\nIntervalle de confiance a \" + str(val) + \" = [ \" " + texte += "+ vinf + \" , \" + vsup + \" ]\"" + +# Generalites + + texte += DecalSTDsaut + "d_aux = {}" + texte += DecalSTDsaut + "d_aux[\"E\"] = ( \"de la fonction\", " + NomFunction + ".getEvaluationCallsNumber() )" + texte += DecalSTDsaut + "d_aux[\"G\"] = ( \"du gradient\", " + NomFunction + ".getGradientCallsNumber() )" + texte += DecalSTDsaut + "d_aux[\"H\"] = ( \"du hessien\", " + NomFunction + ".getHessianCallsNumber() )" + texte += DecalSTDsaut + "for cle in d_aux.keys() :" + texte += DecalSTDsaut + DecalSTD + "if d_aux[cle][1] > 0 :" + texte += DecalSTDsaut + DecalSTD + DecalSTD + "text_resu += \"\\nNombre d\'appels au solveur pour le calcul \"" \ + + " + d_aux[cle][0] + \" = \" + str(d_aux[cle][1])" + +# Impression + + texte += DecalSTDsaut + "print \"\\n\", text_resu, \"\\n\"" + texte += DecalSTDsaut + "file_resu = open(\"" + self.fic_resu_OpenTURNS + "\", \"w\")" + texte += DecalSTDsaut + "file_resu.write(text_resu)" + texte += DecalSTDsaut + "file_resu.close()" + texte += DecalSTDsaut + "probability = " + NomResu + ".getEventProbability()" + + return texte + diff --git a/generator/OpenturnsBase.py b/generator/OpenturnsBase.py new file mode 100644 index 00000000..316a34eb --- /dev/null +++ b/generator/OpenturnsBase.py @@ -0,0 +1,120 @@ +#@ AJOUT OpenturnsSolver Macro +# -*- coding: iso-8859-1 -*- +# RESPONSABLE + +""" +Ce module contient la partie commune +aux generateurs XML et Etude d Openturns +""" + +__revision__ = "V1.0" + +import os +import sys + +path=os.getcwd() +pathDef=path+"DefautOpenturns" + +sys.path.append(pathDef) + + +#============================================= +# La classe generale +#============================================= + +class Generateur : + + ''' + Classe generale du generateur + DictMCVal : dictionnaire des mots-cles + ListeVariables : chaque variable est decrite par un dictionnaire ; cette liste les regroupe + DictLois : dictionnaires des lois + ''' + def __init__ (self, DictMCVal, ListeVariables, DictLois ) : + #---------------------------------------------------------# + self.ListeVariables = ListeVariables + self.ListeVariablesIn = [] + self.DictLois = DictLois + self.DictMCVal = DictMCVal + self.DictTypeVar = {} + self.nbVarIn = 0 + self.creeInfoVar() + # + # On charge eventuellement le Solver par defaut + # et les valeurs par defaut du Solver (dans l init) + # + try : + #if 1 : + Solver = self.DictMCVal["PhysicalSolver"] + import_name = "Defaut"+Solver + self.module = __import__( import_name, globals(), locals() ) + monDefaut = self.module.Defaut( self ) + #else : + except: + self.module = None + + + def getSTDGenerateur(self) : + #--------------------------# + try : + gener = self.module.__dict__["MonSTDGenerateur"] + monSTDGenerateur=gener( self.DictMCVal, self.ListeVariablesIn, self.DictLois ) + except : + from OpenturnsSTD import STDGenerateur + monSTDGenerateur = STDGenerateur( self.DictMCVal, self.ListeVariablesIn, self.DictLois ) + return monSTDGenerateur + + def getXMLGenerateur(self) : + #--------------------------# + try : + gener = self.module.__dict__["MonXMLGenerateur"] + monXMLGenerateur=gener( self.DictMCVal, self.ListeVariables, self.DictLois ) + except : + from OpenturnsXML import XMLGenerateur + monXMLGenerateur = XMLGenerateur( self.DictMCVal, self.ListeVariables, self.DictLois ) + return monXMLGenerateur + + def creeInfoVar (self) : + #----------------------# + """ + On repere les variables in/out et on les numerote. + """ + num = 0 + liste = [] + for DictVariable in self.ListeVariables : + if not DictVariable.has_key("Type") : DictVariable["Type"] = "in" + self.DictTypeVar[num] = DictVariable["Type"] + if DictVariable["Type"] == "in" : + self.nbVarIn = self.nbVarIn + 1 + self.ListeVariablesIn.append( DictVariable ) + liste.append( DictVariable ) + num = num + 1 + self.ListeVariables = liste + + + def ajouteDictMCVal(self, dicoPlus) : + #-----------------------------------# + # Appele par le classe Defaut du python specifique au code (exple DefautASTER.py) + # enrichit self.DictMCVal avec les valeurs donnees dans dicoPlus + # si elles ne sont pas deja dans le dictionnaire + + for clef in dicoPlus.keys(): + if not self.DictMCVal.has_key(clef) : + self.DictMCVal[clef] = dicoPlus[clef] + + def ajouteInfoVariables (self, dicoVariablesIn, dicoVariablesOut) : + #-----------------------------------------------------------------# + # Appele par le classe Defaut du python specifique au code (exple DefautASTER.py) + # met a jour les dictionnaires qui decrivent les variables (regexp par exemple) + liste=[] + num = 0 + for dictVariable in self.ListeVariables: + if self.DictTypeVar[num] == "in" : + dico = dicoVariablesIn + else : + dico = dicoVariablesOut + for nouvelleVariable in dico.keys() : + if not dictVariable.has_key(nouvelleVariable): + dictVariable[nouvelleVariable] = dico[nouvelleVariable] + liste.append( dictVariable ) + num = num + 1 diff --git a/generator/OpenturnsSTD.py b/generator/OpenturnsSTD.py new file mode 100644 index 00000000..9fb4b234 --- /dev/null +++ b/generator/OpenturnsSTD.py @@ -0,0 +1,419 @@ +#@ AJOUT OpenturnsSolver Macro +# -*- coding: iso-8859-1 -*- +# RESPONSABLE + +""" +Ce module contient le generateur Etude pour Openturns +""" + +__revision__ = "V1.0" + +import os + + + +#============================================= +# La classe de creation du fichier STD +#============================================= + +class STDGenerateur : + + ''' + Generation du fichier pyhton + ''' + def __init__ (self, DictMCVal, ListeVariables, DictLois ) : + #---------------------------------------------------------# + + self.NomAlgo = "myAlgo" + self.DictMCVal = DictMCVal + self.ListeVariables = ListeVariables + self.DictLois = DictLois + + self.ListeOrdreMCReliability = ( + "MaximumIterationsNumber", + "MaximumAbsoluteError", + "RelativeAbsoluteError", + "MaximumConstraintError", + "MaximumResidualError", + ) + self.ListeOrdreMCDirectionalSampling = ( + "RootStrategy", + "SamplingStrategy", + ) + self.ListeOrdreMCParametresAlgo = ( + "BlockSize", + "MaximumCoefficientOfVariation", + ) + self.ListeOrdreImportanceSampling = ( + "ImportanceSampling_BlockSize", + "ImportanceSampling_MaximumCoefficientOfVariation", + "ImportanceSampling_MaximumOuterSampling", + ) + + # Ce dictionnaire contient la liste de tous les parametres possibles pour chaque loi + # Les parametres qui n'apparaissent pas ne pourront pas etre substitues dans le fichier + # produit (etude python), et donc n'apparaitront pas. + self.listeParamLoi = { + "Beta" : ["Mu", "Sigma", "T", "R", "A", "B" ], + "Exponential" : ["Lambda", "Gamma" ], + "Gamma" : ["K", "Mu", "Sigma", "Lambda", "Gamma" ], + #"Geometric" : ["P", ], + "Gumbel" : ["Alpha","Beta","Mu","Sigma" ], + #"Histogram" : ["Sup", "Values" ], + "LogNormal" : ["MuLog", "SigmaLog", "Mu", "Sigma", "SigmaOverMu", "Gamma", ], + "Logistic" : [ "Alpha", "Beta" ], + #"MultiNomial" : [ "N", "Values" ], + "Normal" : ["Mu", "Sigma" ], + "Poisson" : [ "Lambda", ], + "Student" : [ "Mu", "Nu" ], + "Triangular" : [ "A", "M", "B" ], + "TruncatedNormal" : [ "MuN", "SigmaN", "A", "B" ], + "Uniform" : [ "A", "B" ], + #"UserDefined" : [ "Values", ], + "Weibull" : [ "Alpha", "Beta", "Mu", "Sigma", "Gamma" ], + } + + # Ce dictionnaire contient, pour chaque loi qui possede plusieurs parametrages possibles, + # la correspondance entre le parametrage et son "numero" pour Open TURNS. + self.listeParamLoiSettings = { + "Beta" : { "RT" : "0", "MuSigma" : "1" }, \ + "Gamma" : { "KLambda" : "0", "MuSigma" : "1" }, \ + "Gumbel" : { "AlphaBeta" : "0", "MuSigma" : "1" }, \ + "LogNormal" : { "MuSigmaLog" : "0", "MuSigma" : "1", "MuSigmaOverMu" : "2" }, \ + "Weibull" : { "AlphaBeta" : "0", "MuSigma" : "1" }, \ + } + + + + def CreeSTD (self) : + #------------------ + ''' + Pilotage de la creation du fichier python + ''' + self.texte = self.CreeEntete() + self.texte += self.CreeRandomGenerator() + self.texte += self.CreeFunction() + self.texte += self.CreeLois() + self.texte += self.CreeCopula() + self.texte += self.CreeDistribution() + self.texte += self.CreeRandomVector() + self.texte += self.CreeAnalyse() + self.texte += self.CreeResu() + self.texte += self.CreeTexteFin() + return self.texte + +# ______________________________________ +# +# Methodes liees a la creation de la partie Analayse +# Si le mot clef Analyse existe la methode portant le meme nom va etre appele +# Exple : si self.DictMCVal["Analysis"]=="Reliability" on appelle la methode Reliability(self) +# + def CreeAnalyse (self) : + #---------------------- + # Appelee par CreeSTD + texte="" + if self.DictMCVal.has_key("Analysis"): + texte += apply( STDGenerateur.__dict__[self.DictMCVal["Analysis"]], (self,) ) + return texte + + def Reliability (self) : + #------------------------ + # Appelee eventuellement par CreeAnalyse + texte = self.CreeEvent() + texte += "\n# La methode\n\n" + if not self.DictMCVal.has_key("Method"): + print 'Attention Mot Clef "Method" non renseigne' + return texte + + texte += " myMethod = "+ self.DictMCVal["Method"] + "()\n" + texte += " myMethod.setSpecificParameters( " + self.DictMCVal["Method"] + "SpecificParameters() )\n" + + for MC in self.ListeOrdreMCReliability : + if self.DictMCVal.has_key(MC) and self.DictMCVal[MC] != None : + texte += " myMethod.set"+ MC +"( " + str(self.DictMCVal[MC]) + " )\n\n " + + texte += "\n# L'algorithme\n\n" + if not self.DictMCVal.has_key("Algorithm"): + print 'Attention Mot Clef "Algorithm" non renseigne' + return texte + texte += " " + self.NomAlgo + " = " + str (self.DictMCVal["Algorithm"]) + texte += "( NearestPointAlgorithm(myMethod), myEvent, myPhysicalStartingPoint )\n" + texte += " " + self.NomAlgo + ".run()\n " + + if self.DictMCVal.has_key("ImportanceSampling") and self.DictMCVal["ImportanceSampling"]=="yes" : + texte += self.ImportanceSampling() + return texte + + def Simulation (self) : + #------------------------ + # Appelee eventuellement par CreeAnalyse + texte = self.CreeEvent() + texte += "\n# L'algorithme\n\n" + if not self.DictMCVal.has_key("Algorithm"): + print 'Attention Mot Clef "Algorithm" non renseigne' + return texte + texte += " " + self.NomAlgo + " = " + str (self.DictMCVal["Algorithm"]) + texte += "( myEvent )\n" + if self.DictMCVal["Algorithm"] == "DirectionalSampling" : + texte += self.DirectionalSampling() + texte += self.ParametresAlgo() + texte += " " + self.NomAlgo + ".run() " + return texte + + + def DirectionalSampling (self) : + #------------------------------- + # Appelee eventuellement par Simulation + texte = "" + for MC in self.ListeOrdreMCDirectionalSampling : + if self.DictMCVal.has_key(MC) and self.DictMCVal[MC] != None : + texte += apply(STDGenerateur.__dict__[self.DictMCVal[MC]], (self,)) + return texte + + def RootStrategy(self): + #---------------------- + # Appelee eventuellement par DirectionalSampling + texte = " myRoot = " + self.DictMCVal["RootStrategy"] + "()\n" + if self.DictMCVal.has_key("Solver") and (self.DictMCVal["Solver"] != None) : + texte += " mySolver = " + self.DictMCVal["Solver"] + "() \n" + texte += " myRoot.setSolver( Solver( mySolver ) ) \n" + texte += " " + self.NomAlgo + ".setRootStrategy( RootStrategy( myRoot )) \n" + return texte + + def SamplingStrategy(self): + #-------------------------- + # Appelee eventuellement par DirectionalSampling + texte += " mySampling = " + self.DictMCVal["SamplingStrategy"] + "()\n" + texte += " mySampling.setSamplingStrategy( SamplingStrategy( mySampling ) )\n" + return texte + + + def QuadraticCumul (self) : + #-------------------------- + # Appelee eventuellement par CreeAnalyse + texte = "\n# Cumul quadratique\n\n" + texte += " myQuadraticCumul = QuadraticCumul( myRandomVector_out)\n\n" + texte += " firstOrderMean = myQuadraticCumul.getMeanFirstOrder()\n" + texte += " secondOrderMean = myQuadraticCumul.getMeanSecondOrder()\n" + texte += " covariance = myQuadraticCumul.getCovariance()\n" + texte += " importanceFactors = myQuadraticCumul.getImportanceFactors()\n" + return texte + + def CreeEvent (self) : + #------------------ + # Appelee eventuellement par Simulation et Reliability + texte = "\n# L'evenement\n\n" + if not self.DictMCVal.has_key("Threshold") or not self.DictMCVal.has_key("ComparisonOperator"): + print 'Attention Mot Clef "Threshold" ou "ComparisonOperator" non renseigne' + return texte + texte += " seuil = " +str (self.DictMCVal["Threshold"]) + "\n" + texte += " myEvent = Event(myRandomVector_out," + texte += "ComparisonOperator(" + str (self.DictMCVal["ComparisonOperator"]) + "()), seuil) \n" + return texte + + def ParametresAlgo( self ): + #--------------------------- + # Appelee par Simulation + + texte += " nbMaxOutSampling = " + + if self.DictMCVal["MaximumOuterSamplingType"] == "UserDefined" : + texte += str(self.DictMCVal["MaximumOuterSampling"]) + + elif self.DictMCVal["MaximumOuterSamplingType"] == "Wilks" : + texte += "Wilks.ComputeSampleSize( " + str(self.DictMCVal["Wilks_Alpha"]) + ", " \ + + str(self.DictMCVal["Wilks_Beta"]) + ", " + str(self.DictMCVal["Wilks_I"]) + " )" + texte += '\n print "MaximumOuterSampling = ", nbMaxOutSampling, "\n" \n' + + texte += " " + NomAlgo + ".setMaximumOuterSampling(nbMaxOutSampling)" + for MC in self.ListeOrdreMCParametresAlgo : + if self.DictMCVal.has_key(MC) and self.DictMCVal[MC] != None : + texte += " myMethod.set"+ MC +"(" + str(self.DictMCVal[MC]) + ")\n\n " + +# _____________________________________ + + def CreeRandomGenerator (self) : + #------------------------------- + # Appelee par CreeSTD + texte = "" + if self.DictMCVal.has_key("RandomGeneratorSeed") : + texte += "# We set the RandomGenerator seed in order to replay the study\n" + texte += " RandomGenerator().SetSeed(%d)\n" % self.DictMCVal["RandomGeneratorSeed"] + return texte + + def CreeFunction (self) : + #------------------------- + # Appelee par CreeSTD + ''' + La fonction : + Remarque : le nom 'solver' est en dur ici. Il doit imperativement correspondre + au nom du fichier xml : 'solver.xml' + ''' + texte = "\n# La fonction\n\n" + texte += ' myFunction = NumericalMathFunction(\"XXXXXX\")\n' + texte += ' dim = myFunction.getInputNumericalPointDimension()\n' + return texte + + + def CreeCopula (self) : + #------------------ + # Appelee par CreeSTD + texte = "\n# La copule\n\n" + texte += " myCopula = IndependentCopula(dim)\n" + return texte + + + def CreeDistribution (self) : + #---------------------------- + # Appelee par CreeSTD + texte = "\n# La distribution\n\n" + texte += " myDistribution = ComposedDistribution(myCollection, Copula(myCopula))\n" + return texte + + + def CreeRandomVector (self) : + #---------------------------- + # Appelee par CreeSTD + texte = "\n# Le Random Vector\n\n" + texte += " myRandomVector_in = RandomVector(Distribution(myDistribution))\n" + texte += " myRandomVector_out = RandomVector(myFunction, myRandomVector_in)\n" + return texte + + +# _______________________________ + + + + def ImportanceSampling (self) : + #----------------------------- + # Appele eventuellement par Reliability + + texte = " temporaryResult = " + self.NomAlgo + ".getResult()\n\n" + texte += " mean = temporaryResult.getPhysicalSpaceDesignPoint()\n" + texte += " sigma = NumericalPoint( mean.getDimension(), 1.0 )\n" + texte += " R = CorrelationMatrix( mean.getDimension() )\n" + texte += " myImportance = Normal( mean, sigma, R )\n\n\n" + + texte += " importanceSamplingAlgo = ImportanceSampling( myEvent, Distribution( myImportance ) )\n\n" + + for MC in self.ListeOrdreImportanceSampling : + if self.DictMCVal.has_key("MC") : + debut=" importanceSamplingAlgo.set"+MC.split("_")[-1] + texte += debut + "( " + str(self.DictMCVal[MC]) + " )\n" + + texte += "\n importanceSamplingAlgo.run()\n\n" + self.NomAlgo = "importanceSamplingAlgo" + return texte + + + def CreeResu (self) : + #------------------ + ''' + ''' + texte = "\n# Le resultat\n\n" + texte += " myResu = " + self.NomAlgo + ".getResult() \n" + texte += " probability = myResu.getEventProbability()" + + return texte + + + + def CreeLois (self) : + #------------------ + ''' + ''' + code_erreur = 0 + texte = "\n# Les lois\n\n" + if self.DictMCVal.has_key("Analysis") and self.DictMCVal["Analysis"] == "Reliability" : + texte += " myPhysicalStartingPoint = NumericalPoint(dim, 0.0)\n" + texte += " myCollection = DistributionCollection(dim)\n\n" + + numVar = 0 + for DictVariable in self.ListeVariables : + + boolLoiDef = True + if DictVariable.has_key("MarginalDistribution") and DictVariable.has_key("Name"): + ConceptLoi = DictVariable["MarginalDistribution"] + NomLoi = DictVariable["Name"]+"_Dist" + else : + boolLoiDef = False + + if boolLoiDef and self.DictLois.has_key(ConceptLoi): + loi = self.DictLois[ConceptLoi] + else : + boolLoiDef = False + + if boolLoiDef and loi.has_key("Kind") : + TypeLoi = loi["Kind"] + else : + boolLoiDef = False + + if not boolLoiDef or TypeLoi not in self.listeParamLoi.keys() : + texte += " Loi " + TypeLoi +" non programmee \n" + numVar += 1 + continue + + ListeParametres = [] + TexteParametres = "" + for Param in self.listeParamLoi[TypeLoi]: + if loi.has_key(Param) : + texte += " " + NomLoi + "_" + Param + " = " + str(loi[Param]) + "\n" + ListeParametres.append(NomLoi + "_" + Param) + TexteParametres += NomLoi + "_" + Param + "," + + texte += " " + NomLoi + " = " + TypeLoi + "( " + + if loi.has_key("Settings" ) and self.listeParamLoiSettings.has_key(TypeLoi) \ + and self.listeParamLoiSettings[TypeLoi].has_key(loi["Settings"]): + NumParam = self.listeParamLoiSettings[TypeLoi][loi["Settings"]] + texte += TexteParametres + NumParam +" )\n" + else : + texte += TexteParametres[:-1] + " )\n" + + texte += " " + NomLoi + '.setName( "'+DictVariable["Name"] +'" )\n' + texte += " myCollection["+str(numVar)+"] = Distribution( "+NomLoi+" )\n" + + if self.DictMCVal["Analysis"] == "Reliability" : + texte += " myPhysicalStartingPoint["+str(numVar)+"] = " + if DictVariable.has_key("PhysicalStartingPoint") : + texte += str(DictVariable["PhysicalStartingPoint"]) +"\n\n" + else : + texte += NomLoi+".computeQuantile( 0.5 )[0]\n\n" + + numVar += 1 + return texte + + +# _____________________________________________________ + + def CreeEntete (self) : + #------------------ + ''' + Entete : + ''' + + texte = "#!/usr/bin/env python\n" + texte += "# -*- coding: iso-8859-1 -*-\n" + texte += "import sys\n" + texte += "import os\n" + if self.DictLois.has_key("dir_openturns_python") : + texte += "sys.path.append(\"" + self.DictLois["dir_openturns_python"] + "\")\n" + if self.DictLois.has_key("DTDDirectory") : + texte += "os.environ[\"OPENTURNS_WRAPPER_PATH\"] = \".:" + self.DictLois["DTDDirectory"] + "\"\n" + texte += "from openturns import *\n" + texte += "error_message = None\n" + texte += "try : \n" + return texte + + def CreeTexteFin(self) : + #------------------------------------ + texte ='\n\nexcept : \n' + texte += ' error_message = sys.exc_type\n' + texte += ' if error_message is not None :\n' + texte += ' texte = "================================================= \\n"\n' + texte += ' texte += " Message d\'erreur : \" + str(error_message) + "\\n"\n' + texte += ' texte += "=================================================\\n"\n' + texte += ' print texte"\n' + texte += "sys.exit(error_message)\n" + return texte + diff --git a/generator/OpenturnsXML.py b/generator/OpenturnsXML.py new file mode 100644 index 00000000..7452d1fa --- /dev/null +++ b/generator/OpenturnsXML.py @@ -0,0 +1,264 @@ +#@ AJOUT OpenturnsSolver Macro +# -*- coding: iso-8859-1 -*- +# RESPONSABLE + +""" +Ce module contient le generateur XML pour Openturns +""" + +# Les variables +#--------------------- + +# OrdreVariable contient l'ordre des MC pour definir une variable en XML +# dictMCXML a pour cle le nom du MC dans la commande, +# Il contient aussi une liste donnant les informations suivantes +# 0 : debut de ligne +# 1 : fin de ligne +# 2 : code : 0 : facultatif, 1 : obligatoire +# Type est sur la meme ligne que Name + +OrdreVariable = ( 'Name', 'Type', 'Comment', 'Unit', 'Regexp', 'Format' ) +dictMCXML = { "Name" : ( ' \n', 1 ), + "Comment" : ( ' ' , '\n', 0 ), + "Unit" : ( ' ' , '\n', 0 ), + "Regexp" : ( ' ' , '\n', 0 ), + "Format" : ( ' ' , '\n', 0 ), + } + + +# Les fonctions du wrapper +#-------------------------------- +# OrdreLibrary contient l'ordre des MC pour definir la partie library en XML +# dictLibXML a pour cle le nom du MC dans la commande, +# Il contient aussi une liste donnant les informations suivantes : +# 0 : debut de ligne +# 1 : milieu de ligne si le MC est present +# 2 : milieu de ligne si le MC n est pas present +# 3 : fin de ligne +# 4 : code : 0 : facultatif, 1 : obligatoire sans defaut + +OrdreLibrary = ( 'FunctionName', 'GradientName', 'HessianName' ) +dictLibXML = { "FunctionName" : ( '\n\n ', + '\n ', + '\n ', + '', + 1, + ), + "GradientName" : ( '\n\n ', + '\n ', + '\n ', + '', + 0, + ), + "HessianName" : ( '\n\n ', + '\n ', + '\n ' , + '\n\n', + 0, + ), + } + +# Les communications du wrapper +#-------------------------------- +# OrdreWrapMode contient l'ordre des MC pour definir la partie WrapMode en XML +# dictWrMXML a pour cle le nom du MC dans la commande, +# Il contient aussi une liste donnant les informations suivantes +# 0 : debut de ligne +# 1 : fin de ligne +# 2 : code : 0 : facultatif, 1 : obligatoire sans defaut, 2 : obligatoire avec defaut +# 3 : valeur par defaut eventuelle +OrdreWrapMode = ( 'WrapCouplingMode', 'State', 'InDataTransfer', 'OutDataTransfer' ) +dictWrMXML = { "WrapCouplingMode" : ( '\n \n' , 2, 'shared">\n' ), + "InDataTransfer" : ( ' \n', 0 ), + "OutDataTransfer" : ( ' \n', 0 ), + } + +# Les fichiers d'echange du wrapper +#----------------------------------------- +# OrdreExchangeFile contient l'ordre des MC pour definir la partie OrdreExchangeFile en XML +# dictFilXML a pour cle le nom du MC dans la commande, +# Il contient aussi une liste donnant les informations suivantes +# 0 : debut de ligne +# 1 : fin de ligne +# 2 : code : 0 : facultatif, 1 : obligatoire sans defaut +OrdreExchangeFile = ( 'Id', 'Type', 'Name', 'Path', 'Subst' ) +dictFilXML = { "Id" : ( '\n ' ), + "Type" : ( ' type="' , '">' ), + "Name" : ( '\n ' , '' ), + "Path" : ( '\n ' , '' ), + "Subst" : ( '\n ' , '' ), + } + + +#========================== +# La classe de creation XML +#========================== + +class XMLGenerateur : + + ''' + Generation du fichier XML + ''' + def __init__ (self, DictMCVal, ListeVariables, DictLois ) : + #---------------------------------------------------------# + self.ListeFiles = [] + self.DictMCVal = DictMCVal + self.ListeVariables = ListeVariables + self.DictLois = DictLois + + def CreeXML (self) : + #------------------# + ''' + Pilotage general de la creation du fichier XML + ''' + self.texte = self.CreeEntete() + self.texte += self.CreeWrapperAndPath() + self.texte += self.CreeVariables() + self.texte += self.CreeLibrary() + self.texte += self.CreeFile() + self.texte += self.CreeWrapMode() + self.texte += self.CreeCommande() + return self.texte + + + def CreeEntete (self) : + #---------------------# + ''' + La variable DTDDirectory doit etre dans DictMCVal + ''' + #PN a faire : recuperer DTDDirectory dans editeur.ini + texte = "\n" + if self.DictMCVal.has_key("DTDDirectory") : + aux = os.path.join(self.DictMCVal["DTDDirectory"], "wrapper.dtd") + texte += "\n" + texte += '\n\n' + texte += '\n \n\n' + return texte + + + def CreeWrapperAndPath (self) : + #-----------------------------# + texte = ' \n' + texte += ' ' + if self.DictMCVal.has_key("WrapperPath") : + texte += self.DictMCVal["WrapperPath"] + else : + print "*********************************************" + print "* ERREUR GENERATION XML *" + print "* champ WrapperPath non rempli *" + print "*********************************************" + texte += '\n\n\n' + + return texte + + + def CreeVariables (self) : + #------------------------# + texte =' \n' + texte +=' \n\n' + texte +=' \n' + texte +=' \n\n' + texte += ' ' + + numvar = 0 + for DictVariable in self.ListeVariables : + texte += "\n \n" + for MC in OrdreVariable : + if DictVariable.has_key(MC) : + texte += dictMCXML[MC][0] + DictVariable[MC] + dictMCXML[MC][1] + else : + if dictMCXML[MC][2] : + print "**************************************************" + print "* ERREUR GENERATION XML *" + print "* champ obligatoire non rempli pour variable *" + print "**************************************************" + texte += ' \n' + numvar += 1 + texte += '\n \n' + texte += ' \n' + return texte + + def CreeLibrary (self) : + #----------------------# + ''' + Librairies + ''' + texte = "" + for MC in OrdreLibrary : + texte += dictLibXML[MC][0] + if self.DictMCVal.has_key(MC) : + texte += dictLibXML[MC][1] + self.DictMCVal[MC] + dictLibXML[MC][3] + else : + texte += dictLibXML[MC][2] + dictLibXML[MC][3] + if dictLibXML[MC][4] : + print "**************************************************" + print "* ERREUR GENERATION XML *" + print "* champ obligatoire non rempli pour wrapper *" + print "**************************************************" + texte += ' \n\n' + texte += ' \n' + return texte + + def CreeFile (self) : + #-------------------# + ''' + Fichiers + ''' + texte = '\n \n' + texte += '\n \n' + texte += ' \n' + + if self.DictMCVal.has_key("exchange_file") : + for dico in self.DictMCVal["exchange_file"] : + texte += "\n " + for MC in OrdreExchangeFile : + if dico.has_key(MC) : + texte += dictFilXML[MC][0] + dico[MC] + dictFilXML[MC][1] + texte += "\n \n" + texte += '\n \n' + return texte + + def CreeWrapMode (self) : + #-----------------------# + ''' + WrapMode + ''' + texte = '\n ' + + for MC in OrdreWrapMode : + if self.DictMCVal.has_key(MC) : + texte += dictWrMXML[MC][0] + self.DictMCVal[MC] + dictWrMXML[MC][1] + else : + if dictWrMXML[MC][2] == 2 : + texte += dictWrMXML[MC][0] + dictWrMXML[MC][3] + elif dictWrMXML[MC][2] == 1 : + print "**************************************************" + print "* ERREUR GENERATION XML *" + print "* champ obligatoire non rempli pour external *" + print "**************************************************" + texte += ' \n\n' + return texte + + def CreeCommande (self) : + #-----------------------# + ''' + La commande + On lui passera en argument les options supplementaires eventuelles + ''' + texte = ' \n' + texte += ' ' + if self.DictMCVal.has_key("Command") : + texte += self.DictMCVal["Command"] + if self.DictMCVal.has_key("ArguCommande") : + for argument in self.DictMCVal[ArguCommande] : + texte += " " + argument + texte += "\n" + else : + texte += '# no command' + texte +='\n' + texte +='\n \n' + texte +='\n\n' + return texte + diff --git a/generator/generator_openturns.py b/generator/generator_openturns.py new file mode 100644 index 00000000..b3118c60 --- /dev/null +++ b/generator/generator_openturns.py @@ -0,0 +1,139 @@ +# -*- coding: utf-8 -*- +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM 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 +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +""" + Ce module contient le plugin generateur de fichier au format + openturns pour EFICAS. + +""" +import traceback +import types,string,re + +from generator_python import PythonGenerator +from OpenturnsBase import Generateur +#from OpenturnsXML import XMLGenerateur +#from OpenturnsSTD import STDGenerateur + +def entryPoint(): + """ + Retourne les informations necessaires pour le chargeur de plugins + + Ces informations sont retournees dans un dictionnaire + """ + return { + # Le nom du plugin + 'name' : 'openturns', + # La factory pour creer une instance du plugin + 'factory' : OpenturnsGenerator, + } + + +class OpenturnsGenerator(PythonGenerator): + """ + Ce generateur parcourt un objet de type JDC et produit + un texte au format eficas et + un texte au format xml + + """ + # Les extensions de fichier permis? + extensions=('.comm',) + + def initDico(self): + self.dictMCVal={} + self.listeVariables=[] + self.listeFichiers=[] + self.dictMCLois={} + self.dictTempo={} + self.TraiteMCSIMP=1 + + def gener(self,obj,format='brut'): + #print "IDM: gener dans generator_openturns.py" + self.initDico() + self.text=PythonGenerator.gener(self,obj,format) + self.genereXML() + self.genereSTD() + return self.text + + def generMCSIMP(self,obj) : + """ + Convertit un objet MCSIMP en texte python + Remplit le dictionnaire des MCSIMP si nous ne sommes pas ni dans une loi, ni dans une variable + """ + s=PythonGenerator.generMCSIMP(self,obj) + if self.TraiteMCSIMP == 1 : + self.dictMCVal[obj.nom]=obj.val + else : + self.dictTempo[obj.nom]=obj.valeur + return s + + def generMCFACT(self,obj): + # Il n est pas possible d utiliser obj.valeur qui n est pas + # a jour pour les nouvelles variables ou les modifications + if obj.nom == "Variables" or "Files": + self.TraiteMCSIMP=0 + self.dictTempo={} + s=PythonGenerator.generMCFACT(self,obj) + if obj.nom == "Variables" : + self.listeVariables.append(self.dictTempo) + self.dictTempo={} + else : + self.listeFichiers.append(self.dictTempo) + self.TraiteMCSIMP=1 + return s + + def generETAPE(self,obj): + if obj.nom == "DISTRIBUTION" : + self.TraiteMCSIMP=0 + self.dictTempo={} + s=PythonGenerator.generETAPE(self,obj) + if obj.nom == "DISTRIBUTION" : + self.dictMCLois[obj.sd]=self.dictTempo + self.dictTempo={} + self.TraiteMCSIMP=1 + return s + + def genereXML(self): + #print "IDM: genereXML dans generator_openturns.py" + if self.listeFichiers != [] : + self.dictMCVal["exchange_file"]=self.listeFichiers + MonBaseGenerateur=Generateur(self.dictMCVal, self.listeVariables, self.dictMCLois) + MonGenerateur=MonBaseGenerateur.getXMLGenerateur() + #try : + if 1== 1 : + self.texteXML=MonGenerateur.CreeXML() + #except : + else : + self.texteXML="Il y a un pb a la Creation du XML" + + def genereSTD(self): + MonBaseGenerateur=Generateur(self.dictMCVal, self.listeVariables, self.dictMCLois) + MonGenerateur=MonBaseGenerateur.getSTDGenerateur() + #try : + if 1== 1 : + self.texteSTD=MonGenerateur.CreeSTD() + #except : + else : + self.texteSTD="Il y a un pb a la Creation du STD" + + def getOpenturnsXML(self): + return self.texteXML + + def getOpenturnsSTD(self): + return self.texteSTD diff --git a/generator/generator_vers3DSalome.py b/generator/generator_vers3DSalome.py index e16722af..5fdc6af6 100644 --- a/generator/generator_vers3DSalome.py +++ b/generator/generator_vers3DSalome.py @@ -35,7 +35,7 @@ import Extensions from Extensions.parametre import ITEM_PARAMETRE from Formatage import Formatage from generator_python import PythonGenerator -from Editeur.widgets import showerror +#from Editeur.widgets import showerror def entryPoint(): """ @@ -119,7 +119,7 @@ class vers3DSalomeGenerator(PythonGenerator): """ """ if obj.isvalid() == 0 : - showerror("Element non valide","Salome ne sait pas traiter les élements non valides") + #showerror("Element non valide","Salome ne sait pas traiter les élements non valides") return for v in obj.mc_liste: liste=self.generator(v) @@ -150,7 +150,8 @@ class vers3DSalomeGenerator(PythonGenerator): if self.boolGpMa == 1: self.list_commandes.append((self.commande,self.dict_attributs)) else : - showerror("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element") + #showerror("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element") + pass def generMCList(self,obj): """ diff --git a/insercopyright.py b/insercopyright.py deleted file mode 100644 index 49a3094a..00000000 --- a/insercopyright.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -import glob,os - -copyright="""# CONFIGURATION MANAGEMENT OF EDF VERSION -# ====================================================================== -# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG -# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY -# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY -# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR -# (AT YOUR OPTION) ANY LATER VERSION. -# -# THIS PROGRAM 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 -# GENERAL PUBLIC LICENSE FOR MORE DETAILS. -# -# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE -# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, -# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. -# -# -# ====================================================================== -""" - -listfich=glob.glob('*') -for fich in listfich: - if not os.path.isfile(fich):continue - print "Lecture ",fich - f=open(fich,'r') - text=f.read() - f.close() - os.rename(fich,fich+'.bak') - - text=copyright + text - - f2=open(fich,'w') - f2.write(text) - f2.close() -