--- /dev/null
+#@ MODIF defi_part_feti_ops Macro DATE 23/11/2004 AUTEUR ASSIRE A.ASSIRE
+# -*- 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.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+
+# ===========================================================================
+# CORPS DE LA MACRO "DEFI_PART_FETI"
+# -------------------------------------
+# USAGE :
+# MAILLAGE maillage a partitionner
+# MODELE modele (facultatif)
+# NB_PART nb de sous-domaines
+# EXCIT liste des chargements
+# METHODE PMETIS, KMETIS ou AUTRE
+# LOGICIEL si AUTRE alors on attend un chemin complet vers executable
+# NOM_GROUP_MA Un nom de base pour les group_ma contenant les SD
+# INFO 1,2
+#
+# ===========================================================================
+# script PYTHON : appel a Metis et lancement de DEFI_PART_OPS
+
+
+def defi_part_feti_ops(self,MAILLAGE,MODELE,NB_PART,EXCIT,METHODE,NOM_GROUP_MA,INFO,**args):
+
+ import aster, string, sys
+
+ from Accas import _F
+ from Noyau.N_utils import AsType
+
+ from Utilitai import partition
+
+ # DEBUT DE LA MACRO
+ ier=0
+
+ INCLUSE='NON' # On cree des GROUP_MA pour les mailles de bords (pour developpeur)
+
+ # Nom des GROUP_MA générés
+ NOM_GROUP_MA = string.strip(NOM_GROUP_MA)
+ NOM_GROUP_MA_BORD = '_' + NOM_GROUP_MA
+
+ # Test sur le nombre de caractères de NOM_GROUP_MA
+ if ( len(NOM_GROUP_MA)+len(str(NB_PART)) > 7 ):
+ print '\n\n ERREUR : Afin de pouvoir générer les GROUP_MA, réduisez le nombre \n de caractères de NOM_GROUP_MA à un maximum de :', 7-len(str(NB_PART))
+ print '\n\n'
+ sys.exit(1)
+
+ # Verification que des GROUP_MA ne portent pas deja les memes noms
+ _lst = []
+ for i in MAILLAGE.LIST_GROUP_MA():
+ _lst.append( string.strip(i[0]) )
+ for i in range(NB_PART):
+ if ( NOM_GROUP_MA+str(i) in _lst ):
+ print '\n\n ERREUR : Il existe déjà un GROUP_MA nommé : ', NOM_GROUP_MA+str(i)
+ print '\n\n'
+ sys.exit(1)
+ if ( NOM_GROUP_MA_BORD+str(i) in _lst ):
+ print '\n\n ERREUR : Il existe déjà un GROUP_MA nommé : ', NOM_GROUP_MA_BORD+str(i)
+ print '\n\n'
+ sys.exit(1)
+
+ # Executable du partitionneur
+ if METHODE=="AUTRE":
+ exe_metis = arg['LOGICIEL']
+ else:
+ exe_metis = aster.repout() + string.lower(METHODE)
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ DEFI_PART_OPS = self.get_cmd('DEFI_PART_OPS')
+ INFO_EXEC_ASTER = self.get_cmd('INFO_EXEC_ASTER')
+ DEFI_FICHIER = self.get_cmd('DEFI_FICHIER')
+ DETRUIRE = self.get_cmd('DETRUIRE')
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.icmd=1
+
+ # Le concept sortant dans le contexte de la macro
+ self.DeclareOut('_SDFETI',self.sd)
+
+ # Debut :
+ print """
+
+ # ---------------------------------------------------------------------------
+ # MACRO-COMMANDE : DEFI_PART_FETI
+ # ----------------
+"""
+
+ # Objet Partition
+ _part = partition.PARTITION(jdc=self);
+
+ # Recuperation de deux UL libres
+ _UL=INFO_EXEC_ASTER(LISTE_INFO='UNITE_LIBRE')
+ ul1=_UL['UNITE_LIBRE',1]
+ DETRUIRE(CONCEPT=(_F(NOM=_UL),), INFO=1)
+ DEFI_FICHIER(UNITE=ul1)
+ _UL=INFO_EXEC_ASTER(LISTE_INFO='UNITE_LIBRE')
+ ul2=_UL['UNITE_LIBRE',1]
+ DEFI_FICHIER(ACTION='LIBERER',UNITE=ul1)
+
+ fichier_in = 'fort.' + str(ul1)
+ fichier_out = 'fort.' + str(ul2)
+
+ # Options de la classe Partition
+ _part.OPTIONS['exe_metis'] = exe_metis
+ _part.OPTIONS['fichier_in'] = fichier_in
+ _part.OPTIONS['fichier_out'] = fichier_out
+
+
+ # Partitionnement
+ if MODELE:
+ _part.Partitionne_Aster(
+ MAILLAGE = MAILLAGE,
+ MODELE = MODELE,
+ NB_PART = NB_PART,
+ INFO = INFO,
+ );
+
+ elif MAILLAGE:
+ _part.Partitionne_Aster(
+ MAILLAGE = MAILLAGE,
+ NB_PART = NB_PART,
+ INFO = INFO,
+ );
+
+
+ # Creation des group_ma dans le maillage Aster
+ _part.Creation_Group_ma_Aster_par_SD(NOM=NOM_GROUP_MA, NOM2=NOM_GROUP_MA_BORD, INCLUSE=INCLUSE)
+
+
+ # Creation de la SDFETI
+ if MODELE:
+ _tmp = []
+ for i in range(NB_PART):
+ txt = { 'GROUP_MA': NOM_GROUP_MA + str(i) }
+ if ( NOM_GROUP_MA_BORD+str(i) in _part.ASTER['GROUP_MA_BORD'] ):
+ txt['GROUP_MA_BORD'] = NOM_GROUP_MA_BORD + str(i)
+ _tmp.append( txt )
+
+ motscle2= {'DEFI': _tmp }
+
+ # Regeneration des mots-cles EXCIT passés en argument de la macro
+ if EXCIT:
+ dExcit=[]
+ for j in EXCIT :
+ dExcit.append(j.cree_dict_valeurs(j.mc_liste))
+ 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=MODELE,
+ INFO=1,
+ **motscle2
+ );
+ else:
+ _SDFETI=None
+
+
+ # Fin :
+ print """
+
+ % FIN MACRO-COMMANDE: DEFI_PART_FETI
+
+"""
+
+ return ier
--- /dev/null
+#@ MODIF impr_table_ops Macro DATE 30/11/2004 AUTEUR MCOURTOI M.COURTOIS
+# -*- 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.
+# ======================================================================
+
+# RESPONSABLE MCOURTOI M.COURTOIS
+
+import os.path
+import re
+
+from types import ListType, TupleType, StringTypes
+EnumTypes=(ListType, TupleType)
+
+
+# ------------------------------------------------------------------------------
+def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
+ """
+ Macro IMPR_TABLE permettant d'imprimer une table dans un fichier.
+ Erreurs<S> dans IMPR_TABLE pour ne pas perdre la base.
+ """
+ macro='IMPR_TABLE'
+ import aster
+ from Accas import _F
+ from Cata.cata import table_jeveux
+ from Utilitai.Utmess import UTMESS
+ ier=0
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ # Le nom de la variable doit etre obligatoirement le nom de la commande
+ DETRUIRE = self.get_cmd('DETRUIRE')
+ DEFI_FICHIER = self.get_cmd('DEFI_FICHIER')
+ RECU_FONCTION = self.get_cmd('RECU_FONCTION')
+
+ #----------------------------------------------
+ # 0. Traitement des arguments, initialisations
+ # unité logique des fichiers réservés
+ ul_reserve=(8,)
+
+ # 0.1. Fichier
+ nomfich=None
+ if args['UNITE'] and args['UNITE']<>6:
+ nomfich='fort.'+str(args['UNITE'])
+ if nomfich and os.path.exists(nomfich):
+ if FORMAT=='XMGRACE':
+ UTMESS('A',macro,'Le fichier '+nomfich+' existe déjà, on écrit ' \
+ 'à la suite.')
+
+ # 0.2. Création des dictionnaires des FILTRES
+ Filtre=[]
+ if args['FILTRE']:
+ for Fi in args['FILTRE']:
+ dF = Fi.cree_dict_valeurs(Fi.mc_liste)
+ for mc in dF.keys():
+ if dF[mc]==None: del dF[mc]
+ Filtre.append(dF)
+ # format pour l'impression des filtres
+ form_filtre='\nFILTRE -> NOM_PARA: %-16s CRIT_COMP: %-4s VALE: %s'
+
+ # 0.3. Création de la liste des tables (une seule sans SENSIBILITE)
+ form_sens='\n... SENSIBILITE AU PARAMETRE %s'
+ ltab=[]
+ if args['SENSIBILITE']:
+ nmemo='&NOSENSI.MEMO.CORR'.ljust(24)
+ vect=aster.getvectjev(nmemo)
+ if vect:
+ lps=args['SENSIBILITE']
+ if not type(lps) in EnumTypes:
+ lps=[lps,]
+ for ps in [ps.get_name() for ps in lps]:
+ trouv=False
+ for ch in vect[0:len(vect):2]:
+ if ch[0:8].strip()==TABLE.get_name() and ch[8:16].strip()==ps:
+ trouv=True
+ ncomp=ch[16:24].strip()
+ sdtab=table_jeveux(ncomp)
+ tabs=sdtab.EXTR_TABLE()
+ tabs.titr+=form_sens % ps
+ ltab.append([tabs, sdtab])
+ if not trouv:
+ UTMESS('A',macro,'Dérivée de %s par rapport à %s non disponible'\
+ % (TABLE.get_name(), ps))
+ else:
+ UTMESS('A',macro,'Pas de calcul de sensibilité accessible.')
+ else:
+ ltab.append([TABLE.EXTR_TABLE(), TABLE])
+
+ if len(ltab)<1:
+ return ier
+
+ # 0.4.1. liste des paramètres à conserver
+ nom_para=ltab[0][0].para
+ if args['NOM_PARA']:
+ nom_para=args['NOM_PARA']
+
+ # 0.4.2. Traiter le cas des UL réservées
+ if args['UNITE'] and args['UNITE'] in ul_reserve:
+ DEFI_FICHIER( ACTION='LIBERER', UNITE=args['UNITE'], )
+
+ #----------------------------------------------
+ # Boucle sur les tables
+ for tab, sdtab in ltab:
+
+ # ----- 1. Infos de base
+ if INFO==2:
+ print 'IMPRESSION DE LA TABLE : %s' % sdtab.get_name()
+
+ if args['TITRE']:
+ tab.titr=args['TITRE'] + '\n' + tab.titr
+
+ # ----- 2. Filtres
+ for Fi in Filtre:
+ col = getattr(tab, Fi['NOM_PARA'])
+ # peu importe le type
+ opts=[Fi[k] for k in ('VALE','VALE_I','VALE_C','VALE_K') if Fi.has_key(k)]
+ kargs={}
+ for k in ('CRITERE','PRECISION'):
+ if Fi.has_key(k):
+ kargs[k]=Fi[k]
+ tab = tab & ( getattr(col, Fi['CRIT_COMP'])(*opts,**kargs) )
+ # trace l'operation dans le titre
+ #if FORMAT in ('TABLEAU','ASTER'):
+ tab.titr+=form_filtre % (Fi['NOM_PARA'], Fi['CRIT_COMP'], \
+ ' '.join([str(v) for v in opts]))
+
+ # ----- 3. Tris
+ if args['TRI']:
+ # une seule occurence de TRI
+ T0=args['TRI'][0]
+ dT=T0.cree_dict_valeurs(T0.mc_liste)
+ tab.sort(CLES=dT['NOM_PARA'], ORDRE=dT['ORDRE'])
+
+ # ----- 4. Impression
+ timp=tab[nom_para]
+ # passage des mots-clés de mise en forme à la méthode Impr
+ kargs=args.copy()
+ kargs.update({
+ 'FORMAT' : FORMAT,
+ 'FICHIER' : nomfich,
+ 'dform' : {},
+ })
+ # pour l'impression des fonctions
+ kfonc={
+ 'FORMAT' : FORMAT,
+ 'FICHIER' : nomfich,
+ }
+
+ # 4.1. au format AGRAF
+ if FORMAT=='AGRAF':
+ kargs['dform']={ 'formR' : '%12.5E' }
+ kfonc['FORMAT']='TABLEAU'
+
+ # 4.2. 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
+ if args['FORMAT_R']:
+ kargs['dform'].update({ 'formR' : fmtF2PY(args['FORMAT_R']) })
+
+ # 4.4. regroupement par paramètre : PAGINATION
+ if args['PAGINATION']:
+ kargs['PAGINATION']=args['PAGINATION']
+
+ timp.Impr(**kargs)
+
+ # ----- 5. IMPR_FONCTION='OUI'
+ if args['IMPR_FONCTION'] and args['IMPR_FONCTION']=='OUI':
+ # cherche parmi les cellules celles qui contiennent un nom de fonction
+ dfon={}
+ for row in timp:
+ 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,)
+
+ # 99. Traiter le cas des UL réservées
+ if args['UNITE'] and args['UNITE'] in ul_reserve:
+ DEFI_FICHIER( ACTION='ASSOCIER', UNITE=args['UNITE'],
+ TYPE='ASCII', ACCES='APPEND' )
+
+ return ier
+
+# ------------------------------------------------------------------------------
+def fmtF2PY(fformat):
+ """Convertit un format Fortran en format Python (printf style).
+ Gère uniquement les fortrans réels, par exemple : E12.5, 1PE13.6, D12.5...
+ """
+ fmt=''
+ matP=re.search('([0-9]+)P',fformat)
+ if matP:
+ fmt+=' '*int(matP.group(1))
+ matR=re.search('([eEdDfFgG]{1})([\.0-9]+)',fformat)
+ if matR:
+ fmt+='%'+matR.group(2)+re.sub('[dD]+','E',matR.group(1))
+ try:
+ s=fmt % -0.123
+ except (ValueError, TypeError), msg:
+ fmt='%12.5E'
+ print 'Error :',msg
+ print 'Format par défaut utilisé :',fmt
+ return fmt
--- /dev/null
+#@ MODIF macr_ecla_pg_ops Macro DATE 09/11/2004 AUTEUR VABHHTS J.PELLET
+# -*- 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 macr_ecla_pg_ops(self,RESULTAT,MAILLAGE,RESU_INIT,MODELE_INIT,
+ TOUT, GROUP_MA, MAILLE,
+ SHRINK, TAILLE_MIN,
+ NOM_CHAM, TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE, INST, LIST_INST, PRECISION, CRITERE,
+ **args):
+ """
+ Ecriture de la macro macr_ecla_pg
+ """
+ import os, string
+ from Accas import _F
+ from Noyau.N_utils import AsType
+ ier=0
+
+ # On importe les definitions des commandes a utiliser dans la macro
+ CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
+ CREA_RESU =self.get_cmd('CREA_RESU')
+
+
+ # La macro compte pour 1 dans la numerotation des commandes
+ self.set_icmd(1)
+
+
+ # Appel à CREA_MAILLAGE :
+ motscles={}
+ if TOUT : motscles['TOUT'] =TOUT
+ if GROUP_MA : motscles['GROUP_MA'] =GROUP_MA
+ if MAILLE : motscles['MAILLE'] =MAILLE
+
+ self.DeclareOut('ma2',MAILLAGE)
+ ma2=CREA_MAILLAGE(ECLA_PG=_F( MODELE = MODELE_INIT, NOM_CHAM=NOM_CHAM,
+ SHRINK = SHRINK, TAILLE_MIN=TAILLE_MIN, **motscles ));
+
+
+
+ # Appel à CREA_RESU :
+ typ2=AsType(RESU_INIT).__name__
+ if TOUT_ORDRE : motscles['TOUT_ORDRE'] =TOUT_ORDRE
+ if NUME_ORDRE : motscles['NUME_ORDRE'] =NUME_ORDRE
+ if LIST_ORDRE : motscles['LIST_ORDRE'] =LIST_ORDRE
+ if LIST_INST : motscles['LIST_INST'] =LIST_INST
+ if INST : motscles['INST'] =INST
+ if TOUT_ORDRE : motscles['TOUT_ORDRE'] =TOUT_ORDRE
+
+ self.DeclareOut('resu2',RESULTAT)
+ resu2=CREA_RESU( OPERATION='ECLA_PG', TYPE_RESU=string.upper(typ2),
+ ECLA_PG=_F( MODELE_INIT= MODELE_INIT, RESU_INIT=RESU_INIT, NOM_CHAM=NOM_CHAM,
+ MAILLAGE= ma2, **motscles ));
+ return ier
+############################################################################################
+