From: eficas <> Date: Thu, 29 Jul 2004 13:26:01 +0000 (+0000) Subject: PN intégration des modifs faites pour Homard X-Git-Tag: CC_param_poursuite~254 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=a17e07da7926850d744c778252db8730ef1bc661;p=modules%2Feficas.git PN intégration des modifs faites pour Homard --- diff --git a/Aster/editeur.ini b/Aster/editeur.ini index 1d18074c..f44719c7 100644 --- a/Aster/editeur.ini +++ b/Aster/editeur.ini @@ -42,5 +42,6 @@ catalogues = ( #('ASTER','v5',os.path.join(rep_cata,'cata_STA5.py'),'asterv5'), #('ASTER','v6',os.path.join(rep_cata,'cata_STA6.py'),'python'), ('ASTER','v7',os.path.join(rep_cata,'cata_STA7.py'),'python','defaut'), + ('HOMARD','v1',os.path.join(rep_cata,'homard_cata_STA7.py'),'homard'), ) diff --git a/Editeur/panelsSalome.py b/Editeur/panelsSalome.py index d9364e97..f0e0ccd5 100644 --- a/Editeur/panelsSalome.py +++ b/Editeur/panelsSalome.py @@ -377,6 +377,44 @@ class SALOME_UNIQUE_BASE_Panel(UNIQUE_BASE_Panel): dict_fichier_unite={} + + def SALOME_DONNEES_HOMARD_FICHIERS_NOM_MED_MAILLAGE_N(self): + entrychaine=salome.sg.getAllSelected() + if entrychaine != '': + self.entry2.delete(0,END) + try: + print salome.myStudy + 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"): + 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.entry2.insert(0,FileName) + self.entry.delete(0,END) + self.entry.insert(0,FileName) + self.valid_valeur() + + + def SALOME_DONNEES_HOMARD_FICHIERS_NOM_MED_MAILLAGE_NP1(self): + self.SALOME_DONNEES_HOMARD_FICHIERS_NOM_MED_MAILLAGE_N() + + def SALOME_LIRE_MAILLAGE_UNITE(self): unite=self.node.item.get_valeur() @@ -396,29 +434,42 @@ class SALOME_UNIQUE_BASE_Panel(UNIQUE_BASE_Panel): myBuilder = salome.myStudy.NewBuilder() boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeComment") - if boo == 0 : - FileName='' - print "a" - else : - Comment=FileAttr.Value() - print Comment - if Comment.find("FICHIERMED")== -1 : - FileName='' - else : - FileName=Comment[10:] - + FileName='' + if SO != None: + myBuilder = salome.myStudy.NewBuilder() + boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeFileType") + if boo: + boo=0 + val=FileAttr.Value() + if (val !="FICHIERMED"): + 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") print "FileName = " , FileName - if FileName != '' : + if FileName != '' : print FileName - self.entry2.insert(0,FileName) + self.entry2.insert(0,FileName) typefic='D' SALOME_UNIQUE_BASE_Panel.dict_fichier_unite[unite]=typefic+FileName else : - print "il faut afficher une Fenetre d impossibilité" - showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associé") + print "il faut afficher une Fenetre d impossibilit\xe9" + showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9") - def makeValeurPage(self,page): + def redistribue_selon_simp(self): + genea = self.node.item.get_genealogie() + commande="SALOME" + for i in range(0,len( genea )) : + commande=commande+"_"+ genea[i] + print SALOME_UNIQUE_BASE_Panel.__dict__[commande] + (SALOME_UNIQUE_BASE_Panel.__dict__[commande])(self) + + + 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 @@ -441,8 +492,8 @@ class SALOME_UNIQUE_BASE_Panel(UNIQUE_BASE_Panel): self.entry.bind("",lambda e,c=self.valid_valeur:c()) # PN : Ajout d'un bouton pour selectionner à partir de Salome - self.b = Button(self.frame_valeur,text='Relier a selection',command=self.SALOME_LIRE_MAILLAGE_UNITE) - self.b.place(relx=0.1,rely=0.1) + self.b = Button(self.frame_valeur,text='Relier selection',command=self.redistribue_selon_simp) + self.b.place(relx=0.05,rely=0.1) unite=self.node.item.get_valeur() self.entry2 = Entry(self.frame_valeur,relief='sunken') self.entry2.place(relx=0.3,rely=0.1) diff --git a/Editeur/readercata.py b/Editeur/readercata.py index b5b68c36..edc1916f 100644 --- a/Editeur/readercata.py +++ b/Editeur/readercata.py @@ -70,12 +70,16 @@ class READERCATA: message1 = "Compilation des fichiers Eficas \n\n Veuillez patienter ..." splash._splash.configure(text = message1) self.configure_barre(4) - if len(self.appli.CONFIGURATION.catalogues) == 1: - self.fic_cata = self.appli.CONFIGURATION.catalogues[0][2] + 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)==1: + self.fic_cata = liste_cata_possibles[0][2] self.code = self.appli.CONFIGURATION.catalogues[0][0] - self.version_code = self.appli.CONFIGURATION.catalogues[0][1] - self.appli.format_fichier.set(self.appli.CONFIGURATION.catalogues[0][3]) - elif len(self.appli.CONFIGURATION.catalogues) == 0: + self.version_code = liste_cata_possibles[0][1] + self.appli.format_fichier.set(liste_cata_possibles[0][3]) + elif len(liste_cata_possibles)==0: # aucun catalogue défini dans le fichier Accas/editeur.ini if self.code == 'ASTER' : self.fic_cata = os.path.join(prefs.CODE_PATH,'Cata','cata.py') diff --git a/Homard/editeur.ini b/Homard/editeur.ini new file mode 100644 index 00000000..bb337aac --- /dev/null +++ b/Homard/editeur.ini @@ -0,0 +1,24 @@ +import os + +import prefs + +rep_cata = prefs.REPINI + +# Accès à la documentation +path_doc = os.path.join(rep_cata,'Doc') +exec_acrobat = "/usr/bin/xpdf" +# 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="bidon" + +catalogues = ( + ('HOMARD','v1',os.path.join(rep_cata,'homard_cata_STA7.py'),'homard'), + ) + diff --git a/Homard/eficas_homard.py b/Homard/eficas_homard.py new file mode 100755 index 00000000..03108681 --- /dev/null +++ b/Homard/eficas_homard.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# 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 \xe0 lancer EFICAS configur\xe9 pour Code_Aster +""" +# Modules Python +import sys + +# Modules Eficas +import prefs +sys.path[:0]=[prefs.INSTALLDIR] + +import Editeur +from Editeur import eficas_go + +if len(sys.argv) > 1 : + # on veut ouvrir un fichier directement au lancement d'Eficas + eficas_go.lance_eficas(code='HOMARD',fichier = sys.argv[1]) +else: + # on veut ouvrir Eficas 'vide' + eficas_go.lance_eficas(code='HOMARD') + diff --git a/Homard/homard_cata_STA7.py b/Homard/homard_cata_STA7.py new file mode 100755 index 00000000..6e838730 --- /dev/null +++ b/Homard/homard_cata_STA7.py @@ -0,0 +1,251 @@ +# -------------------------------------------------- +# debut entete +# -------------------------------------------------- + +import Accas +from Accas import * + +#CONTEXT.debug=1 + +JdC = JDC_CATA(code='HOMARD', + execmodul=None, + regles = (AU_MOINS_UN('DONNEES_HOMARD'),), + ) + +# Type le plus general +class entier (ASSD):pass +class reel (ASSD):pass +class complexe(ASSD):pass +class liste (ASSD):pass +class chaine (ASSD):pass + +# Types geometriques +class no (GEOM):pass +class grno(GEOM):pass +class ma (GEOM):pass +class grma(GEOM):pass + +# -------------------------------------------------- +# fin entete +# -------------------------------------------------- + + +DONNEES_HOMARD=PROC(nom="DONNEES_HOMARD",op= 189, docu="U7.04.01-b", + UIinfo={"groupes":("Fonction",)}, + fr="Imprime le fichier de configuration de HOMARD.", + ang="Writes the configuration file for HOMARD.", +# +# 1. Langue des messages issus de HOMARD +# + LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS", + into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",), + fr="Langue des messages issus de HOMARD.", + ang="Language for HOMARD messages." ), +# +# 2. Les fichiers en entree/sortie +# + FICHIERS = FACT(statut='o', + NOM_MED_MAILLAGE_N = SIMP(statut='o' ,typ='TXM', + fr="Nom du fichier contenant le maillage à adapter", + ang="File name including the in-mesh"), + NOM_MED_MAILLAGE_NP1 = SIMP(statut='o' ,typ='TXM', + fr="Nom du fichier qui contiendra le maillage adapté", + ang="File name for resulting out-mesh"), + INFORMATION = SIMP(statut='o' ,typ='TXM', + fr="Nom du fichier contenant les informations de sortie", + ang="Log File"), + ), +# +# 3. Le type de traitement : +# + TRAITEMENT =FACT(statut='o', +# +# 3.1. DEUX CHOIX EXCLUSIFS : +# +# A. ADAPTATION AVEC DES VARIANTES SUR LE MODE DE RAFFINEMENT/DERAFFINEMENT +# . RAFFINEMENT ET DERAFFINEMENT +# . RAFFINEMENT SEUL +# . DERAFFINEMENT SEUL +# B. INFORMATION SUR UN MAILLAGE +# + regles=( AU_MOINS_UN('RAFFINEMENT','DERAFFINEMENT','INFORMATION'), + EXCLUS('RAFFINEMENT','INFORMATION'), + EXCLUS('DERAFFINEMENT','INFORMATION'),), + RAFFINEMENT =SIMP(statut='f',typ='TXM', + fr="Choix du mode de raffinement.", + ang="Choice of refinement mode.", + defaut="LIBRE", + into=("LIBRE","UNIFORME","NON","NON-CONFORME","NON-CONFORME-INDICATEUR") ), + DERAFFINEMENT =SIMP(statut='f',typ='TXM', + fr="Choix du mode de deraffinement.", + ang="Choice of unrefinement mode.", + defaut="LIBRE", + into=("LIBRE","UNIFORME","NON") ), + INFORMATION =SIMP(statut='f',typ='TXM', + fr="Information sur un maillage", + ang="Information on a mesh", + into=("OUI",) ), +# +# 3.2. LES CONTRAINTES : +# +# 3.2.1. POUR DE L'ADAPTATION LIBRE, IL FAUT : +# A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART +# B. LE NOM MED DU MAILLAGE D'ENTREE +# C. LE NOM MED DE L'INDICATEUR D'ERREUR +# D. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART +# E. LA MISE A JOUR DE SOLUTION +# F. LE NOM MED DU MAILLAGE DE SORTIE +# REMARQUE : IL FAUT DES CRITERES, MAIS ON NE SAIT PAS LESQUELS +# +# 3.2.2. POUR DE L'ADAPTATION UNIFORME +# IL FAUT : +# A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART +# B. LE NOM MED DU MAILLAGE DE SORTIE +# IL NE FAUT PAS : +# A. LE NOM MED DE L'INDICATEUR D'ERREUR +# B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR +# C. LES CRITERES +# REMARQUE : A L'ITERATION 0, OU AUX ITERATIONS SUIVANTES SI MAJ DE SOLUTION, +# IL FAUT LE NOM MED DU MAILLAGE D'ENTREE +# +# 3.2.3. POUR DE L'INFORMATION : +# IL FAUT : +# A. LE NOM MED DU MAILLAGE D'ENTREE +# IL NE FAUT PAS : +# A. LE NOM MED DE L'INDICATEUR D'ERREUR +# B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR +# C. LES CRITERES +# D. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART +# E. LA MISE A JOUR DE SOLUTION +# + NOM_MED_MAILLAGE_N =SIMP(statut='o',typ='TXM', + fr="Nom MED du maillage en entrée", + ang="MED name of the in-mesh",), +# + b_iteration_maj_champ =BLOC(condition = "( RAFFINEMENT != None ) or ( DERAFFINEMENT != None ) ", + fr="Nom MED du maillage en sortie, numero d'iteration et mise à jour de champs", + ang="MED name of the out-mesh, iteration rank and field updating", + NITER =SIMP(statut='o',typ='I', + fr="Numéro d'itération avant l'adaptation.", + ang="Iteration number before adaptation." ), + NOM_MED_MAILLAGE_NP1 =SIMP(statut='o',typ='TXM', + fr="Nom MED du maillage en sortie", + ang="MED name of the out-mesh" ), + ) , +# + b_indicateur_d_erreur =BLOC(condition = "( RAFFINEMENT == 'LIBRE' ) or ( RAFFINEMENT == 'NON-CONFORME' ) or \ + ( RAFFINEMENT == 'NON-CONFORME-INDICATEUR' ) or ( DERAFFINEMENT == 'LIBRE' ) ", + fr="Indicateur d'erreur", + ang="Error indicator", + NOM_MED =SIMP(statut='o',typ='TXM', + fr="Nom MED de l'indicateur d'erreur.", + ang="MED name of error indicator.",), + COMPOSANTE =SIMP(statut='o',typ='TXM', + fr="Nom de la composante de l'indicateur d'erreur retenue.", + ang="Name of the selected component of the error indicator.",), + NUME_ORDRE =SIMP(statut='f',typ='I', + fr="Numero d'ordre de l'indicateur.", + ang="Rank number of the error indicator.",), + ) , +# + b_critere_de_raffinement =BLOC( condition = "( RAFFINEMENT == 'LIBRE' ) or ( RAFFINEMENT == 'NON-CONFORME' ) or \ + ( RAFFINEMENT == 'NON-CONFORME-INDICATEUR' ) ", + fr="Critère de raffinement.", + ang="Refinement threshold.", + regles=(UN_PARMI ( 'CRIT_RAFF_ABS', 'CRIT_RAFF_REL', 'CRIT_RAFF_PE' ),), + CRIT_RAFF_ABS =SIMP(statut='f',typ='R', + fr="Critère absolu", + ang="Absolute threshold" ), + CRIT_RAFF_REL =SIMP(statut='f',typ='R', + fr="Critère relatif", + ang="Relative threshold" ), + CRIT_RAFF_PE =SIMP(statut='f',typ='R', + fr="Pourcentage d'éléments", + ang="Percentage of elements" ), + ) , +# + b_critere_de_deraffinement =BLOC ( condition = "( DERAFFINEMENT == 'LIBRE' ) ", + fr="Critère de déraffinement.", + ang="Unrefinement threshold.", + regles=(UN_PARMI ( 'CRIT_DERA_ABS', 'CRIT_DERA_REL', 'CRIT_DERA_PE' ),), + CRIT_DERA_ABS =SIMP(statut='f',typ='R' , + fr="Critère absolu", + ang="Absolute threshold" ), + CRIT_DERA_REL =SIMP(statut='f',typ='R', + fr="Critère relatif", + ang="Relative threshold" ), + CRIT_DERA_PE =SIMP(statut='f',typ='R', + fr="Pourcentage d'éléments", + ang="Percentage of elements" ), + ) , +# + b_niveau_maximum =BLOC ( condition = " ( RAFFINEMENT == 'LIBRE' ) or ( RAFFINEMENT == 'NON-CONFORME' ) or \ + ( RAFFINEMENT == 'NON-CONFORME-INDICATEUR' ) or ( RAFFINEMENT == 'UNIFORME' ) ", + NIVE_MAX =SIMP(statut='f',typ='I', + fr="Niveau maximum de profondeur de raffinement", + ang="Maximum level for refinement"), + ) , +# + b_niveau_minimum =BLOC ( condition = " ( DERAFFINEMENT == 'LIBRE' ) or ( DERAFFINEMENT == 'UNIFORME' ) ", + NIVE_MIN =SIMP(statut='f',typ='I', + fr="Niveau minimum de déraffinement", + ang="Minimum level for unrefinement" ), + ) , +# +# 3.3. Le suivi de frontiere eventuel : +# + NOM_MED_MAILLAGE_FRONTIERE =SIMP(statut='f',typ='TXM', + fr="Nom MED du maillage de la frontiere à suivre", + ang="MED name of the boundary mesh" ), +# + b_frontiere_1 =BLOC ( condition = "NOM_MED_MAILLAGE_FRONTIERE != None" , + GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**', + fr="Groupes définissant la frontière", + ang="Groups which define the boundary" ), + ) , + fichier_frontiere=BLOC ( condition = "NOM_MED_MAILLAGE_FRONTIERE != None" , + FIC_FRON = SIMP(statut='f',typ='TXM', + fr="Nom du fichier MED contenant le maillage frontiere", + ang="MED File including the boundary mesh" ), + ), +# + ), +# +# 4. L'ANALYSE DU MAILLAGE +# + ANALYSE =FACT(statut='f', + fr="Analyse du maillage.", + ang="Mesh analysis.", +# +# 5 CHOIX NON EXCLUSIFS, AVEC DEUX VARIANTES (OUI/NON) : +# A. NOMBRE DES ELEMENTS +# B. QUALITE DES ELEMENTS +# C. INTERPENETRATION DES ELEMENTS +# D. CONNEXITE DU MAILLAGE +# E. TAILLE DES DIFFERENTS SOUS-DOMAINES +# + regles=(AU_MOINS_UN('NOMBRE','QUALITE','INTERPENETRATION','CONNEXITE','TAILLE'),), +# + 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 elements in the mesh" ), +# + QUALITE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"), + fr="Qualité du maillage", + ang="Mesh quality" ), +# + 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." ), +# + CONNEXITE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"), + fr="Connexité du maillage.", + ang="Mesh connexity." ), +# + TAILLE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"), + fr="Tailles des sous-domaines du maillage.", + ang="Sizes of mesh sub-domains." ), +# + ), +# +) ; diff --git a/Homard/prefs.py b/Homard/prefs.py new file mode 100644 index 00000000..c14833ec --- /dev/null +++ b/Homard/prefs.py @@ -0,0 +1,25 @@ +import os + +# REPINI sert à localiser le fichier editeur.ini +# Obligatoire +REPINI=os.path.dirname(os.path.abspath(__file__)) + +# INSTALLDIR sert à localiser l'installation d'Eficas +# Obligatoire +INSTALLDIR=os.path.join(REPINI,'..') + +# CODE_PATH sert à localiser Noyau et Validation éventuellement +# non contenus dans la distribution EFICAS +# Par défaut on utilise les modules de INSTALLDIR +# Peut valoir None (defaut) +CODE_PATH = None +#CODE_PATH = os.path.join(REPINI,'../../Superv') + +# 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' + + diff --git a/Homard/properties.py b/Homard/properties.py new file mode 100644 index 00000000..96d09b75 --- /dev/null +++ b/Homard/properties.py @@ -0,0 +1,2 @@ +version = "6.3.20" +date = "10/10/2002"