From 7b8d05990cc102c8a1b5e6cf098f10d5b838f318 Mon Sep 17 00:00:00 2001 From: eficas <> Date: Mon, 11 Oct 2004 08:23:21 +0000 Subject: [PATCH] =?utf8?q?CCAR:=20correction=20du=20noyau=20pour=20la=20pr?= =?utf8?q?ise=20en=20compte=20de=20position=3D'global'=20=20=20=20=20=20?= =?utf8?q?=20+=20Patch=20pour=20que=20EFICAS=20continue=20=C3=A0=20marcher?= =?utf8?q?=20suite=20=C3=A0=20la=20suppression=20de=20EVAL=20=20=20=20=20?= =?utf8?q?=20=20=20dans=20le=20Noyau=20:=20remis=20dans=20Ihm.=20Ceci=20de?= =?utf8?q?vrait=20etre=20temporaire.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Accas/A_EVAL.py | 6 +- Aster/Cata/Macro/lire_inte_spec_ops.py | 122 ++++++++++++++++++ Ihm/I_EVAL.py | 43 +++++++ Minicode/cata_saturne2.py | 3 +- Minicode/editeur.ini | 6 +- Minicode/eficas_mini.py | 6 +- Minicode/homard_cata_V6n.py | 169 +++++++++++++++++++++++++ Noyau/N_MCCOMPO.py | 9 +- 8 files changed, 350 insertions(+), 14 deletions(-) create mode 100644 Aster/Cata/Macro/lire_inte_spec_ops.py create mode 100644 Ihm/I_EVAL.py create mode 100755 Minicode/homard_cata_V6n.py diff --git a/Accas/A_EVAL.py b/Accas/A_EVAL.py index 9c903823..ba34e2be 100644 --- a/Accas/A_EVAL.py +++ b/Accas/A_EVAL.py @@ -18,8 +18,8 @@ # # # ====================================================================== -from Noyau import N_EVAL +from Ihm import I_EVAL -class EVAL(N_EVAL.EVAL): +class EVAL(I_EVAL.EVAL): def __init__(self,str): - N_EVAL.EVAL.__init__(self,str) + I_EVAL.EVAL.__init__(self,str) diff --git a/Aster/Cata/Macro/lire_inte_spec_ops.py b/Aster/Cata/Macro/lire_inte_spec_ops.py new file mode 100644 index 00000000..d3ae6d67 --- /dev/null +++ b/Aster/Cata/Macro/lire_inte_spec_ops.py @@ -0,0 +1,122 @@ +#@ MODIF lire_inte_spec_ops Macro DATE 20/09/2004 AUTEUR DURAND C.DURAND +# -*- 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. +# ====================================================================== + +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 + # 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) + + # Lecture de la fonction dans un fichier d unité logique UNITE + + file="./fort."+str(UNITE) + if not os.path.isfile(file) : + ier=ier+1 + self.cr.fatal(" le fichier d unité logique "+str(UNITE)+" est introuvable") + return ier + file=open(file,'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 : + ier=ier+1 + self.cr.fatal(" la dimension DIM n est pas précisée dans le fichier lu") + return ier + + if len(list_fonc)!=(dim*(dim+1)/2): + ier=ier+1 + self.cr.fatal(" nombre de fonctions incorrect") + return ier + + 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 : + ier=ier+1 + self.cr.fatal(" erreur dans les données de fonctions") + return ier + + 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 : + ier=ier+1 + self.cr.fatal(" erreur dans les indices") + return ier + 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' ,LISTE_K=l_fonc ,NUME_LIGN=range(2,len(list_fonc)+2))) + self.DeclareOut('tab_inte',self.sd) + tab_inte=CREA_TABLE(TYPE_TABLE='TABL_INTE_SPEC', + LISTE=mcfact, + TITRE=TITRE,) + + return ier diff --git a/Ihm/I_EVAL.py b/Ihm/I_EVAL.py new file mode 100644 index 00000000..6398dd83 --- /dev/null +++ b/Ihm/I_EVAL.py @@ -0,0 +1,43 @@ +#@ MODIF N_EVAL Noyau DATE 27/03/2002 AUTEUR DURAND C.DURAND +# 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. +# +# +# ====================================================================== +""" +""" + +class EVAL : + """ + """ + def __init__(self,str): + """ + L'objet EVAL est initialise avec une chaine de caracteres (str) + """ + self.valeur = str + self.val=None + + def __repr__(self): + return 'EVAL("""'+self.valeur+'""")' + + def accept(self,visitor): + """ + Cette methode permet de parcourir l'arborescence des objets + en utilisant le pattern VISITEUR + """ + visitor.visitEVAL(self) + diff --git a/Minicode/cata_saturne2.py b/Minicode/cata_saturne2.py index 8691c821..611b9936 100755 --- a/Minicode/cata_saturne2.py +++ b/Minicode/cata_saturne2.py @@ -6,11 +6,10 @@ from Accas import ENSEMBLE,PRESENT_ABSENT from Accas import JDC_CATA,NIVEAU from Accas import OPER,PROC,MACRO,FORM from Accas import SIMP,FACT,BLOC -from Accas import EVAL,PARAMETRE,COMMENTAIRE,PARAMETRE_EVAL,COMMANDE_COMM from Accas import ASSD,CO,GEOM,fonction,geom,assd # __version__="$Name: $" -__Id__="$Id: cata_saturne2.py,v 1.2 2003/10/16 14:31:22 eficas Exp $" +__Id__="$Id: cata_saturne2.py,v 1.3 2004/09/10 15:52:03 eficas Exp $" # import ops diff --git a/Minicode/editeur.ini b/Minicode/editeur.ini index d225b5aa..daae371b 100644 --- a/Minicode/editeur.ini +++ b/Minicode/editeur.ini @@ -17,10 +17,10 @@ initialdir=os.curdir # Choix des catalogues rep_mat="bidon" -rep_mat="/home01/chris/ASTER/projet_Eficas/Devel/SUPER6_3/TestsAster/materiau" catalogues = ( - ('ASTER','v1',os.path.join(rep_cata,'cata_saturne2.py'),'asterv5'), - ('ASTER','v2',os.path.join(rep_cata,'cata_saturne.py'),'python','defaut'), + ('MINICODE','v1',os.path.join(rep_cata,'cata_saturne2.py'),'python'), + ('MINICODE','v2',os.path.join(rep_cata,'cata_saturne.py'),'python'), + ('MINICODE','v3',os.path.join(rep_cata,'homard_cata_V6n.py'),'python','defaut'), ) diff --git a/Minicode/eficas_mini.py b/Minicode/eficas_mini.py index 75ef37dd..41789389 100755 --- a/Minicode/eficas_mini.py +++ b/Minicode/eficas_mini.py @@ -1,5 +1,5 @@ -# -*- coding: utf-8 -*- #!/usr/bin/env python +# -*- coding: utf-8 -*- """ Ce module sert à lancer EFICAS configuré pour Code_Mini """ @@ -23,10 +23,10 @@ def main(): #Misc.Trace.begin_trace() if len(sys.argv) > 1 : # on veut ouvrir un fichier directement au lancement d'Eficas - eficas_go.lance_eficas(code='ASTER',fichier = sys.argv[1]) + eficas_go.lance_eficas(code='MINICODE',fichier = sys.argv[1]) else: # on veut ouvrir Eficas 'vide' - eficas_go.lance_eficas(code='ASTER') + eficas_go.lance_eficas(code='MINICODE') Misc.Trace.end_trace() def hidez(): diff --git a/Minicode/homard_cata_V6n.py b/Minicode/homard_cata_V6n.py new file mode 100755 index 00000000..72e1b545 --- /dev/null +++ b/Minicode/homard_cata_V6n.py @@ -0,0 +1,169 @@ + +# -------------------------------------------------- +# 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 +# -------------------------------------------------- + +def bloc_maj_champ(): + return 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" ), + FICHIER_MED_MAILLAGE_NP1 =SIMP(statut='o',typ='TXM', + fr="Nom du fichier MED du maillage en sortie", + ang="MED file name of the out-mesh" ), + ) + +def critere_de_deraffinement(): + return 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" ), + ) + +TEST=PROC(nom="TEST",op= 189, docu="U7.04.01-b", + fr="Imprime le fichier de configuration de HOMARD.", + TRAITEMENT =FACT(statut='o', + regles=( UN_PARMI('TYPE_RAFFINEMENT_LIBRE','TYPE_RAFFINEMENT_UNIFORME'),), + TYPE_RAFFINEMENT_LIBRE = FACT(statut='f', + RAFFINEMENT = SIMP(statut='o',typ='TXM', + fr="Choix du mode de raffinement.", + ang="Choice of refinement mode.", + into=("LIBRE","UNIFORME",), + ), + DERAFFINEMENT = SIMP(statut='o',typ='TXM', + fr="Choix du mode de deraffinement.", + ang="Choice of unrefinement mode.", + into=("LIBRE",), + ), + b_iteration_maj_champ =bloc_maj_champ(), + b_critere_de_deraffinement =critere_de_deraffinement(), + ), + + TYPE_RAFFINEMENT_UNIFORME = FACT(statut='f', + RAFFINEMENT = SIMP(statut='o',typ='TXM', + fr="Choix du mode de raffinement.", + ang="Choice of refinement mode.", + into=("NON","NON-CONFORME","NON-CONFORME-INDICATEUR"), + ), + DERAFFINEMENT = SIMP(statut='o',typ='TXM', + fr="Choix du mode de deraffinement.", + ang="Choice of unrefinement mode.", + into=("UNIFORME","NON",), + ), + b_iteration_maj_champ =bloc_maj_champ(), + b_critere_de_deraffinement =critere_de_deraffinement(), + ), + ), +); + +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.", +# 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 +# + regles=( AU_MOINS_UN('TYPE_RAFFINEMENT_LIBRE','TYPE_RAFFINEMENT_UNIFORME'), + EXCLUS('TYPE_RAFFINEMENT_LIBRE','TYPE_RAFFINEMENT_UNIFORME'),), + TYPE_RAFFINEMENT_LIBRE = FACT(statut='f', + RAFFINEMENT = SIMP(statut='o',typ='TXM', + position='global', + fr="Choix du mode de raffinement.", + ang="Choice of refinement mode.", + into=("LIBRE","UNIFORME",) ), + DERAFFINEMENT = SIMP(statut='o',typ='TXM', + position='global', + fr="Choix du mode de deraffinement.", + ang="Choice of unrefinement mode.", + into=("LIBRE",), ),), + TYPE_RAFFINEMENT_UNIFORME = FACT(statut='f', + RAFFINEMENT = SIMP(statut='o',typ='TXM', + fr="Choix du mode de raffinement.", + ang="Choice of refinement mode.", + into=("NON","NON-CONFORME","NON-CONFORME-INDICATEUR") ), + DERAFFINEMENT = SIMP(statut='o',typ='TXM', + fr="Choix du mode de deraffinement.", + ang="Choice of unrefinement mode.", + into=("UNIFORME","NON",), ),), +# + b_iteration_maj_champ =BLOC(condition = "( RAFFINEMENT != None ) or ( DERAFFINEMENT != None ) ", + #b_iteration_maj_champ =BLOC(condition = "(TYPE_RAFFINEMENT_UNIFORME != None) or (TYPE_RAFFINEMENT_LIBRE != 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" ), + FICHIER_MED_MAILLAGE_NP1 =SIMP(statut='o',typ='TXM', + fr="Nom du fichier MED du maillage en sortie", + ang="MED file name of the out-mesh" ), + ) , +# + 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" ), + ) , +# + ), +); diff --git a/Noyau/N_MCCOMPO.py b/Noyau/N_MCCOMPO.py index 739b7304..dfc371ed 100644 --- a/Noyau/N_MCCOMPO.py +++ b/Noyau/N_MCCOMPO.py @@ -206,8 +206,11 @@ class MCCOMPO(N_OBJECT.OBJECT): etape = self.get_etape() if etape : dict_mc_globaux_fac = self.recherche_mc_globaux_facultatifs() - dict_mc_globaux_fac.update(etape.mc_globaux) - if self.jdc : dict_mc_globaux_fac.update(self.jdc.mc_globaux) + for k,v in etape.mc_globaux.items(): + dict_mc_globaux_fac[k]=v.get_valeur() + if self.jdc : + for k,v in self.jdc.mc_globaux.items(): + dict_mc_globaux_fac[k]=v.get_valeur() return dict_mc_globaux_fac else : return {} @@ -225,7 +228,7 @@ class MCCOMPO(N_OBJECT.OBJECT): if v.position != 'global' : continue if v.statut == 'o':continue obj = v(val=None,nom=k,parent=etape) - dico[k]=obj + dico[k]=obj.get_valeur() return dico def supprime(self): -- 2.39.2