From 07dae25e3d82f6eb981728c035df073f94487372 Mon Sep 17 00:00:00 2001 From: eficas <> Date: Wed, 6 Nov 2002 16:27:44 +0000 Subject: [PATCH] mise a niveau catalogue --- Minicode/cata_saturne.py | 205 ++++++++++++++++++++++++++++++++++++++- Minicode/editeur.ini | 7 +- Minicode/eficas_mini.py | 7 +- Minicode/ops.py | 106 ++++++++++++-------- 4 files changed, 280 insertions(+), 45 deletions(-) diff --git a/Minicode/cata_saturne.py b/Minicode/cata_saturne.py index 4c742a6a..5f86f0a5 100755 --- a/Minicode/cata_saturne.py +++ b/Minicode/cata_saturne.py @@ -7,7 +7,7 @@ from Accas import * import ops -JdC = JDC_CATA(code='SATURNE', +JdC = JDC_CATA(code='ASTER', execmodul=None, regles = (AU_MOINS_UN('DEBUT','POURSUITE'), AU_MOINS_UN('FIN'), @@ -27,6 +27,12 @@ class complexe(ASSD):pass class liste (ASSD):pass class chaine (ASSD):pass +# Type geometriques +class no (GEOM):pass +class grno(GEOM):pass +class ma (GEOM):pass +class grma(GEOM):pass + class sonde(ASSD):pass class varsca(ASSD):pass @@ -62,6 +68,13 @@ class matr_elem_depl_c(matr_elem):pass class matr_elem_depl_r(matr_elem):pass class matr_elem_pres_c(matr_elem):pass class matr_elem_temp_r(matr_elem):pass +class mater (ASSD):pass + + +# fonction : +#-------------------------------- +class para_sensi(fonction):pass +class fonction_c(fonction):pass # matr_asse : #-------------------------------- @@ -1502,6 +1515,50 @@ MACRO2 =MACRO(nom="MACRO2",op= -5 ,docu="U4.61.21-c", MODELE =SIMP(statut='o',typ=modele), ); +def macro3_prod(self,MAILLAGE,MAIL2,**args): + self.type_sdprod(MAIL2,maillage) + if not MAILLAGE:return None + return maillage + +MACRO3 =MACRO(nom="MACRO3",op= -5 ,docu="U4.61.21-c", + sd_prod=macro3_prod, + fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ", + MAILLAGE =SIMP(statut='f',typ=maillage), + MAIL2 =SIMP(statut='o',typ=(CO,maillage)), +); + +def errmacro_prod(self,MAILLAGE,**args): + #Erreur de programmation + a=1/0 + return maillage + +ERRMACRO =MACRO(nom="ERRMACRO",op= -5 ,docu="U4.61.21-c", + sd_prod=errmacro_prod, + fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ", + MAILLAGE =SIMP(statut='o',typ=maillage), +); + +def erroper_prod(self,MAILLAGE,**args): + #Erreur de programmation + a=1/0 + return maillage + +ERROPER =OPER(nom="ERROPER",op= -5 ,docu="U4.61.21-c", + sd_prod=erroper_prod, + fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ", + MAILLAGE =SIMP(statut='o',typ=maillage), +); + +def errproc_init(self,MAILLAGE,**args): + #Erreur de programmation + a=1/0 + +ERRPROC =PROC(nom="ERRPROC",op= -5 ,docu="U4.61.21-c", + op_init=errproc_init, + fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ", + MAILLAGE =SIMP(statut='o',typ=maillage), +); + class concept(ASSD):pass def op1_prod(x,**args): @@ -1549,3 +1606,149 @@ OP2 = MACRO(nom='OP2',op=1,sd_prod=op2_prod,reentrant='f', ), ); +DETRUIRE=PROC(nom="DETRUIRE",op=-7,docu="U4.14.01-d", + UIinfo={"groupes":("Gestion du travail",)}, + fr="Destruction d un concept utilisateur dans la base GLOBALE", + op_init=ops.detruire, + CONCEPT =FACT(statut='o',min=01, + NOM =SIMP(statut='o',typ=assd,max='**'), + ), +); + +INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,docu="U4.43.02-a", + UIinfo={"groupes":("Modélisation",)}, + fr=" ", + sd_prod=ops.INCLUDE_MATERIAU,op_init=ops.INCLUDE_context,fichier_ini=0, + NOM_AFNOR =SIMP(statut='o',typ='TXM' ), + TYPE_MODELE =SIMP(statut='o',typ='TXM',into=("REF","PAR") ), + VARIANTE =SIMP(statut='o',typ='TXM', + into=("A","B","C","D","E","F","G","H","I","J", + "K","L","M","N","O","P","Q","R","S","T","U","V", + "W","X","Y","Z",) ), + TYPE_VALE =SIMP(statut='o',typ='TXM',into=("NOMI","MINI","MAXI") ), + NOM_MATER =SIMP(statut='o',typ='TXM' ), + UNITE =SIMP(statut='f',typ='I',defaut= 32 ), + EXTRACTION =FACT(statut='f',min=1,max=99, + COMPOR =SIMP(statut='o',typ='TXM' ), + TEMP_EVAL =SIMP(statut='o',typ='R' ), + ), + INFO =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ), +) ; + +def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,**args): + if VALE != None : return fonction + if VALE_C != None : return fonction_c + if VALE_PARA != None : return fonction + if NOEUD_PARA != None : return fonction + raise AsException("type de concept resultat non prevu") + +DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod + ,fr="Définition des valeurs réelles ou complexes d une fonction réelle", + docu="U4.31.02-g3",reentrant='n', + UIinfo={"groupes":("Fonction",)}, + regles=(UN_PARMI('VALE','VALE_C','VALE_PARA','NOEUD_PARA'),), + NOM_PARA =SIMP(statut='o',typ='TXM', + into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP", + "INST","X","Y","Z","EPSI","META","FREQ","PULS", + "AMOR","ABSC","SIGM","HYDR","SECH","PORO","SAT", + "PGAZ","PCAP","VITE") ), + 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)"), + 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, + fr ="Fonction réelle définie par deux concepts de type listr8" ), + b_vale_para =BLOC(condition = "VALE_PARA != None", + VALE_FONC =SIMP(statut='o',typ=listr8 ), + ), + 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", + MAILLAGE =SIMP(statut='o',typ=maillage ), + VALE_Y =SIMP(statut='o',typ='R',max='**'), + ), + + INTERPOL =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ), + 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") ), + VERIF =SIMP(statut='f',typ='TXM',defaut="CROISSANT",into=("CROISSANT","NON") ), + INFO =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ), + TITRE =SIMP(statut='f',typ='TXM',max='**'), +) ; + +DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater, + fr="Définition des paramètres décrivant le comportement d un matériau", + docu="U4.43.01-g4",reentrant='n', + UIinfo={"groupes":("Modélisation",)}, + regles=(EXCLUS('ELAS','ELAS_FO','ELAS_FLUI','ELAS_ISTR','ELAS_ISTR_FO','ELAS_ORTH', + 'ELAS_ORTH_FO','ELAS_COQUE','ELAS_COQUE_FO', + 'SURF_ETAT_SATU','CAM_CLAY_THM','SURF_ETAT_NSAT'), + EXCLUS('THER','THER_FO','THER_ORTH','THER_NL'), + ), +# +# comportement élastique +# + ELAS =FACT(statut='f',min=0,max=1, + E =SIMP(statut='o',typ='R',val_min=0.E+0), + NU =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=0.5E+0), + RHO =SIMP(statut='f',typ='R'), + ALPHA =SIMP(statut='f',typ='R'), + AMOR_ALPHA =SIMP(statut='f',typ='R'), + AMOR_BETA =SIMP(statut='f',typ='R'), + AMOR_HYST =SIMP(statut='f',typ='R'), + ), + ELAS_FO =FACT(statut='f',min=0,max=1, + regles=(PRESENT_PRESENT('ALPHA','TEMP_DEF_ALPHA'),), + E =SIMP(statut='o',typ=fonction), + NU =SIMP(statut='o',typ=fonction), + RHO =SIMP(statut='f',typ='R'), + TEMP_DEF_ALPHA =SIMP(statut='f',typ='R'), + PRECISION =SIMP(statut='f',typ='R',defaut= 1.), + ALPHA =SIMP(statut='f',typ=fonction), + AMOR_ALPHA =SIMP(statut='f',typ=fonction), + AMOR_BETA =SIMP(statut='f',typ=fonction), + AMOR_HYST =SIMP(statut='f',typ=fonction), + K_DESSIC =SIMP(statut='f',typ='R',defaut= 0.E+0 ), + B_ENDOGE =SIMP(statut='f',typ='R',defaut= 0.E+0 ), + FONC_DESORP =SIMP(statut='f',typ=fonction), + VERI_P1 =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST",) ), + VERI_P2 =SIMP(statut='c',typ='TXM',defaut="INST",into=("TEMP","INST",) ), + VERI_P3 =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ), + VERI_P4 =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ), + ), +# +# comportement thermique +# + THER_NL =FACT(statut='f',min=0,max=1, + regles=(UN_PARMI('BETA','RHO_CP', ),), + LAMBDA =SIMP(statut='o',typ=fonction), + BETA =SIMP(statut='f',typ=fonction), + RHO_CP =SIMP(statut='f',typ=fonction), + VERI_P1 =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ), + ), + THER_HYDR =FACT(statut='f',min=0,max=1, + LAMBDA =SIMP(statut='o',typ=fonction), + BETA =SIMP(statut='f',typ=fonction), + AFFINITE =SIMP(statut='o',typ=fonction), + CHALHYDR =SIMP(statut='o',typ='R'), + QSR_K =SIMP(statut='o',typ='R'), + VERI_P1 =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("HYDR",) ), + VERI_P2 =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ), + ), + THER =FACT(statut='f',min=0,max=1, + LAMBDA =SIMP(statut='o',typ='R'), + RHO_CP =SIMP(statut='f',typ='R'), + ), + THER_FO =FACT(statut='f',min=0,max=1, + LAMBDA =SIMP(statut='o',typ=fonction), + RHO_CP =SIMP(statut='f',typ=fonction), + VERI_P1 =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ), + ), +) + +RETOUR=PROC(nom="RETOUR",op= -2,docu="U4.13.02-e", + UIinfo={"groupes":("Gestion du travail",)}, + fr="Retour au fichier de commandes appelant", +) ; + diff --git a/Minicode/editeur.ini b/Minicode/editeur.ini index 1cb03d64..d225b5aa 100644 --- a/Minicode/editeur.ini +++ b/Minicode/editeur.ini @@ -12,12 +12,15 @@ 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" +rep_mat="/home01/chris/ASTER/projet_Eficas/Devel/SUPER6_3/TestsAster/materiau" catalogues = ( - ('SATURNE','v1',os.path.join(rep_cata,'cata_saturne2.py'),'asterv5'), - ('SATURNE','v2',os.path.join(rep_cata,'cata_saturne.py'),'python','defaut'), + ('ASTER','v1',os.path.join(rep_cata,'cata_saturne2.py'),'asterv5'), + ('ASTER','v2',os.path.join(rep_cata,'cata_saturne.py'),'python','defaut'), ) diff --git a/Minicode/eficas_mini.py b/Minicode/eficas_mini.py index 281ccc8e..66a953ce 100755 --- a/Minicode/eficas_mini.py +++ b/Minicode/eficas_mini.py @@ -14,16 +14,19 @@ for a in args: if a == "-display": os.environ['DISPLAY']=args[args.index("-display")+1] +import Misc.Trace import Editeur from Editeur import eficas_go 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='SATURNE',fichier = sys.argv[1]) + eficas_go.lance_eficas(code='ASTER',fichier = sys.argv[1]) else: # on veut ouvrir Eficas 'vide' - eficas_go.lance_eficas(code='SATURNE') + eficas_go.lance_eficas(code='ASTER') + Misc.Trace.end_trace() def hidez(): from Misc import Cyclops diff --git a/Minicode/ops.py b/Minicode/ops.py index 560e8980..eecdc442 100644 --- a/Minicode/ops.py +++ b/Minicode/ops.py @@ -1,7 +1,21 @@ +#@ MODIF ops Cata DATE 23/10/2002 AUTEUR DURAND C.DURAND +# 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. # -__version__="$Name: FR_28_06_10_00 $" -__Id__="$Id: ops.py,v 1.12.18.3 2001/06/19 12:24:51 iliade Exp $" +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. # +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC 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 @@ -11,6 +25,15 @@ import string,linecache,os,traceback,re import Accas from Accas import ASSD +try: + import aster + # Si le module aster est présent, on le connecte + # au JDC + import Build.B_CODE + Build.B_CODE.CODE.codex=aster +except: + pass + def DEBUT(self,PAR_LOT,**args): """ Fonction sdprod de la macro DEBUT @@ -23,35 +46,35 @@ def POURSUITE(self,PAR_LOT,**args): """ self.jdc.set_par_lot(PAR_LOT) if self.codex and os.path.isfile("glob.1"): - # Le module d'execution est accessible et glob.1 est present - if hasattr(self,'fichier_init'):return - self.fichier_init='glob.1' - self.jdc.initexec() - lot,ier,lonuti,concepts=self.codex.poursu(self,1) - self.icmd=lonuti - #print "Fin de debut",ier,lot,lonuti - 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] - if nomres[0] not in (' ','.','&') and statut != '&DETRUIT': - exec nomres+'='+string.lower(concep)+'()' in self.parent.g_context,d - pos=pos+80 - for k,v in d.items(): - self.parent.NommerSdprod(v,k) - self.g_context=d - return + # Le module d'execution est accessible et glob.1 est present + if hasattr(self,'fichier_init'):return + self.fichier_init='glob.1' + self.jdc.initexec() + lot,ier,lonuti,concepts=self.codex.poursu(self,1) + self.icmd=lonuti + #print "Fin de debut",ier,lot,lonuti + 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] + if nomres[0] not in (' ','.','&') and statut != '&DETRUIT': + exec nomres+'='+string.lower(concep)+'()' in self.parent.g_context,d + pos=pos+80 + for k,v in d.items(): + self.parent.NommerSdprod(v,k) + self.g_context=d + 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() + # 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 POURSUITE_context(self,d): """ @@ -69,6 +92,7 @@ def INCLUDE(self,UNITE,**args): """ Fonction sd_prod pour la macro INCLUDE """ + if not UNITE : return if hasattr(self,'unite'):return self.unite=UNITE @@ -102,11 +126,13 @@ def detruire(self,d): sd.append(e) e=e.nom 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 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) @@ -151,9 +177,9 @@ def subst_materiau(text,NOM_MATER,EXTRACTION): if m.group(3) == "EVAL": ll.append(" "+m.group(1)+' = EVAL("'+m.group(4)+"("+str(TEMP)+')"),') elif m.group(3) == "SUPPR": - pass + pass else: - ll.append(l) + 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 @@ -179,13 +205,16 @@ def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER, 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: - self.mat=mat + 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["rep_mat"] + 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 @@ -201,7 +230,6 @@ def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER, # 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 - code=compile(self.text,f,'exec') if self.jdc.par_lot == 'NON': # On est en mode commande par commande # On teste la validite de la commande avec interruption eventuelle @@ -213,7 +241,5 @@ def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER, # commandes car le prefixe PRFXCO doit etre initialise dans le Fortran self.codex.opsexe(self,0,-1,-self.definition.op) - d={} - self.g_context = d - self.contexte_fichier_init = d - exec code in self.parent.g_context,d + self.make_contexte(f,self.text) + -- 2.39.2