Salome HOME
d0c1a8c12b1f1b32ae9d8e17cd4f7afc6c428196
[tools/eficas.git] / Aster / Cata / cataSTA9 / Macro / defi_part_feti_ops.py
1 #@ MODIF defi_part_feti_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
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.
10 #
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.
15 #
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
21
22
23 # ===========================================================================
24 #           CORPS DE LA MACRO "DEFI_PART_FETI"
25 #           -------------------------------------
26 # USAGE :
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
34 #  INFO            1,2
35 #
36 # ===========================================================================
37 # script PYTHON : lancement de DEFI_PART_PA_OPS et de DEFI_PART_OPS
38
39
40 def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTION_CONNEX,INFO,**args):
41
42   import aster, string, sys
43
44   from Accas import _F
45   from Noyau.N_utils import AsType
46   from Utilitai.Utmess import  UTMESS
47
48   from Utilitai import partition
49
50   # DEBUT DE LA MACRO
51   # La macro compte pour 1 dans la numerotation des commandes
52   self.set_icmd(1)
53   ier=0
54
55   # On importe les definitions des commandes a utiliser dans la macro
56   DEFI_PART_OPS   = self.get_cmd('DEFI_PART_OPS')
57   INFO_EXEC_ASTER = self.get_cmd('INFO_EXEC_ASTER')
58   DEFI_FICHIER    = self.get_cmd('DEFI_FICHIER')
59   DETRUIRE        = self.get_cmd('DETRUIRE')
60   DEFI_PART_PA_OPS   = self.get_cmd('DEFI_PART_PA_OPS')
61
62   nompro='DEFI_PART_FETI'
63
64   # Maillage
65   if args.has_key('MODELE'):
66     if args['MODELE'] != None:
67       __MOD = string.ljust(args['MODELE'].nom,8)
68       __MOD =__MOD+'.MODELE    .LGRF        '
69       __LMAIL = aster.getvectjev(__MOD)
70       __MAIL  = string.strip(__LMAIL[0])
71       MAILLAGE=self.get_sd_avant_etape(__MAIL,self)
72     else:
73       MAILLAGE=args['MAILLAGE']
74
75   # Nom des GROUP_MA générés
76   NOM_GROUP_MA = string.strip(NOM_GROUP_MA)
77
78   # Test sur le nombre de caractères de NOM_GROUP_MA
79   if ( len(NOM_GROUP_MA)+len(str(NB_PART)) > 7 ):
80     ln=7-len(str(NB_PART))
81     UTMESS('F','FETI0_1',vali=ln)
82
83   # Verification que des GROUP_MA ne portent pas deja les memes noms
84   _lst = []
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','FETI0_2',valk=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','FETI0_2',valk=ngrma)
96
97   # Le concept sortant dans le contexte de la macro
98   self.DeclareOut('_SDFETI',self.sd)
99
100   # Debut :
101
102   # Regeneration des mots-cles GROUPAGE passés en argument de la macro
103   motscle1= {}
104   if args.has_key('GROUPAGE'):
105     if args['GROUPAGE'] != None :
106       dGroup=[]
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
112
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 :
116       dEval=[]
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
122
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']
127
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']
132
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']
137
138   # Partitionnement
139   DEFI_PART_PA_OPS(
140                    MAILLAGE=MAILLAGE,
141                    INFO=INFO,
142                    METHODE=METHODE,
143                    NB_PART=NB_PART,
144                    CORRECTION_CONNEX=CORRECTION_CONNEX,
145                    TRAITER_BORDS=TRAITER_BORDS,
146                    NOM_GROUP_MA=NOM_GROUP_MA,
147                    **motscle1
148                      );
149
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)
153
154   # Creation de la SDFETI
155   if args.has_key('MODELE'):
156     if args['MODELE'] != None :
157       _tmp  = []
158       for i in range(NB_PART):
159         txt = { 'GROUP_MA': NOM_GROUP_MA + str(i) }
160         _tmp.append( txt )
161
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)
166             _tmp.append( txt )
167
168       motscle2= {'DEFI': _tmp }
169
170       # Regeneration des mots-cles EXCIT passés en argument de la macro
171       if args.has_key('EXCIT'):
172         if args['EXCIT'] != None :
173           dExcit=[]
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
179
180       _SDFETI=DEFI_PART_OPS(NOM='SDD',
181                             MODELE=args['MODELE'],
182                             INFO=1,
183                             **motscle2
184                             );
185     else:
186       _SDFETI=None
187
188   else:
189     _SDFETI=None
190
191
192   # Fin :
193
194   return ier