1 #@ MODIF defi_part_feti_ops Macro DATE 26/03/2007 AUTEUR ASSIRE A.ASSIRE
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
18 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
20 # RESPONSABLE ASSIRE A.ASSIRE
23 # ===========================================================================
24 # CORPS DE LA MACRO "DEFI_PART_FETI"
25 # -------------------------------------
27 # MAILLAGE maillage a partitionner
28 # MODELE modele (facultatif)
29 # NB_PART nb de sous-domaines
30 # EXCIT liste des chargements
31 # METHODE PMETIS, KMETIS ou AUTRE
32 # LOGICIEL si AUTRE alors on attend un chemin complet vers executable
33 # NOM_GROUP_MA Un nom de base pour les group_ma contenant les SD
36 # ===========================================================================
37 # script PYTHON : lancement de DEFI_PART_PA_OPS et de DEFI_PART_OPS
40 def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTION_CONNEX,INFO,**args):
42 import aster, string, sys
45 from Noyau.N_utils import AsType
47 from Utilitai import partition
50 # La macro compte pour 1 dans la numerotation des commandes
54 # On importe les definitions des commandes a utiliser dans la macro
55 DEFI_PART_OPS = self.get_cmd('DEFI_PART_OPS')
56 INFO_EXEC_ASTER = self.get_cmd('INFO_EXEC_ASTER')
57 DEFI_FICHIER = self.get_cmd('DEFI_FICHIER')
58 DETRUIRE = self.get_cmd('DETRUIRE')
59 DEFI_PART_PA_OPS = self.get_cmd('DEFI_PART_PA_OPS')
61 nompro='DEFI_PART_FETI'
64 if args.has_key('MODELE'):
65 if args['MODELE'] != None:
66 __MOD = string.ljust(args['MODELE'].nom,8)
67 __MOD =__MOD+'.MODELE .NOMA '
68 __LMAIL = aster.getvectjev(__MOD)
69 __MAIL = string.strip(__LMAIL[0])
70 MAILLAGE=self.get_sd_avant_etape(__MAIL,self)
72 MAILLAGE=args['MAILLAGE']
74 # Nom des GROUP_MA générés
75 NOM_GROUP_MA = string.strip(NOM_GROUP_MA)
77 # Test sur le nombre de caractères de NOM_GROUP_MA
78 if ( len(NOM_GROUP_MA)+len(str(NB_PART)) > 7 ):
79 ln=7-len(str(NB_PART))
80 UTMESS('F', nompro, 'Afin de pouvoir générer les GROUP_MA, réduisez le nombre '\
81 'de caractères de NOM_GROUP_MA à un maximum de : %i' %ln)
83 # Verification que des GROUP_MA ne portent pas deja les memes noms
85 for i in MAILLAGE.LIST_GROUP_MA():
86 _lst.append( string.strip(i[0]) )
87 for i in range(NB_PART):
88 if ( NOM_GROUP_MA+str(i) in _lst ):
89 ngrma=NOM_GROUP_MA+str(i)
90 UTMESS('F', nompro, "Il existe déjà un GROUP_MA nommé : %s" %ngrma)
91 if args.has_key('NOM_GROUP_MA_BORD') :
92 if args['NOM_GROUP_MA_BORD'] != None :
93 if ( args['NOM_GROUP_MA_BORD']+str(i) in _lst ):
94 ngrma=args['NOM_GROUP_MA_BORD']+str(i)
95 UTMESS('F', nompro, "Il existe déjà un GROUP_MA nommé : %s" %ngrma)
97 # Le concept sortant dans le contexte de la macro
98 self.DeclareOut('_SDFETI',self.sd)
102 # Regeneration des mots-cles GROUPAGE passés en argument de la macro
104 if args.has_key('GROUPAGE'):
105 if args['GROUPAGE'] != None :
107 for j in args['GROUPAGE']:
108 dGroup.append(j.cree_dict_valeurs(j.mc_liste))
109 for i in dGroup[-1].keys():
110 if dGroup[-1][i]==None : del dGroup[-1][i]
111 motscle1['GROUPAGE']=dGroup
113 # Regeneration des mots-cles POIDS_MAILLES passés en argument de la macro
114 if args.has_key('POIDS_MAILLES'):
115 if args['POIDS_MAILLES'] != None :
117 for j in args['POIDS_MAILLES']:
118 dEval.append(j.cree_dict_valeurs(j.mc_liste))
119 for i in dEval[-1].keys():
120 if dEval[-1][i]==None : del dEval[-1][i]
121 motscle1['POIDS_MAILLES']=dEval
123 # Y a t'il présence du mot clé : NOM_GROUP_MA_BORD
124 if args.has_key('GROUP_MA_BORD'):
125 if args['GROUP_MA_BORD'] != None :
126 motscle1['GROUP_MA_BORD']=args['GROUP_MA_BORD']
128 # Y a t'il présence du mot clé : LOGICIEL
129 if args.has_key('LOGICIEL'):
130 if args['LOGICIEL'] != None :
131 motscle1['LOGICIEL']=args['LOGICIEL']
133 # Y a t'il présence du mot clé : MODELE
134 if args.has_key('MODELE'):
135 if args['MODELE'] != None :
136 motscle1['MODELE']=args['MODELE']
144 CORRECTION_CONNEX=CORRECTION_CONNEX,
145 TRAITER_BORDS=TRAITER_BORDS,
146 NOM_GROUP_MA=NOM_GROUP_MA,
150 # Liste des groupes de mailles du maillage
151 _LST_GMA = MAILLAGE.LIST_GROUP_MA()
152 _LST_GMA = map(lambda x: x[0], _LST_GMA)
154 # Creation de la SDFETI
155 if args.has_key('MODELE'):
156 if args['MODELE'] != None :
158 for i in range(NB_PART):
159 txt = { 'GROUP_MA': NOM_GROUP_MA + str(i) }
162 if args.has_key('NOM_GROUP_MA_BORD') :
163 if args['NOM_GROUP_MA_BORD'] != None :
164 if ( args['NOM_GROUP_MA_BORD']+str(i) in _LST_GMA ):
165 txt['GROUP_MA_BORD'] = string.strip(args['NOM_GROUP_MA_BORD']) + str(i)
168 motscle2= {'DEFI': _tmp }
170 # Regeneration des mots-cles EXCIT passés en argument de la macro
171 if args.has_key('EXCIT'):
172 if args['EXCIT'] != None :
174 for j in args['EXCIT']:
175 dExcit.append(j.cree_dict_valeurs(j.mc_liste))
176 for i in dExcit[-1].keys():
177 if dExcit[-1][i]==None : del dExcit[-1][i]
178 motscle2['EXCIT']=dExcit
180 _SDFETI=DEFI_PART_OPS(NOM='SDD',
181 MODELE=args['MODELE'],