]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA76/Macro/defi_part_feti_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA76 / Macro / defi_part_feti_ops.py
1 #@ MODIF defi_part_feti_ops Macro  DATE 05/07/2005   AUTEUR DURAND C.DURAND 
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 : appel a Metis et lancement de DEFI_PART_OPS
38
39
40 def defi_part_feti_ops(self,MAILLAGE,MODELE,NB_PART,EXCIT,METHODE,NOM_GROUP_MA,INFO,**args):
41
42   import aster, string, sys
43
44   from Accas import _F
45   from Noyau.N_utils import AsType
46
47   from Utilitai import partition
48
49   # DEBUT DE LA MACRO
50   ier=0
51
52   INCLUSE='NON'  # On cree des GROUP_MA pour les mailles de bords (pour developpeur)
53
54   # Nom des GROUP_MA générés
55   NOM_GROUP_MA = string.strip(NOM_GROUP_MA)
56   NOM_GROUP_MA_BORD = '_' + NOM_GROUP_MA
57
58   # Test sur le nombre de caractères de NOM_GROUP_MA
59   if ( len(NOM_GROUP_MA)+len(str(NB_PART)) > 7 ):
60     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))
61     print '\n\n'
62     sys.exit(1)
63
64   # Verification que des GROUP_MA ne portent pas deja les memes noms
65   _lst = []
66   for i in MAILLAGE.LIST_GROUP_MA():
67     _lst.append( string.strip(i[0]) )
68   for i in range(NB_PART):
69     if ( NOM_GROUP_MA+str(i) in _lst ):
70       print '\n\n        ERREUR : Il existe déjà un GROUP_MA nommé : ', NOM_GROUP_MA+str(i)
71       print '\n\n'
72       sys.exit(1)
73     if ( NOM_GROUP_MA_BORD+str(i) in _lst ):
74       print '\n\n        ERREUR : Il existe déjà un GROUP_MA nommé : ', NOM_GROUP_MA_BORD+str(i)
75       print '\n\n'
76       sys.exit(1)
77
78   # Executable du partitionneur
79   if METHODE=="AUTRE":
80     exe_metis = arg['LOGICIEL']
81   else:
82     exe_metis = aster.repout() + string.lower(METHODE)
83
84   # On importe les definitions des commandes a utiliser dans la macro
85   DEFI_PART_OPS   = self.get_cmd('DEFI_PART_OPS')
86   INFO_EXEC_ASTER = self.get_cmd('INFO_EXEC_ASTER')
87   DEFI_FICHIER    = self.get_cmd('DEFI_FICHIER')
88   DETRUIRE        = self.get_cmd('DETRUIRE')
89
90   # La macro compte pour 1 dans la numerotation des commandes
91   self.set_icmd(1)
92
93   # Le concept sortant dans le contexte de la macro
94   self.DeclareOut('_SDFETI',self.sd)
95
96   # Debut :
97   print """
98
99   #  ---------------------------------------------------------------------------
100   #  MACRO-COMMANDE : DEFI_PART_FETI
101   #  ----------------
102 """
103
104   # Objet Partition
105   _part = partition.PARTITION(jdc=self);
106
107   # Recuperation de deux UL libres
108   _UL=INFO_EXEC_ASTER(LISTE_INFO='UNITE_LIBRE')
109   ul1=_UL['UNITE_LIBRE',1]
110   DETRUIRE(CONCEPT=(_F(NOM=_UL),), INFO=1)
111   DEFI_FICHIER(UNITE=ul1)
112   _UL=INFO_EXEC_ASTER(LISTE_INFO='UNITE_LIBRE')
113   ul2=_UL['UNITE_LIBRE',1]
114   DEFI_FICHIER(ACTION='LIBERER',UNITE=ul1)
115
116   fichier_in  = 'fort.' + str(ul1)
117   fichier_out = 'fort.' + str(ul2)
118
119   # Options de la classe Partition
120   _part.OPTIONS['exe_metis']   = exe_metis
121   _part.OPTIONS['fichier_in']  = fichier_in
122   _part.OPTIONS['fichier_out'] = fichier_out
123
124
125   # Partitionnement
126   if MODELE:
127     _part.Partitionne_Aster(
128                        MAILLAGE = MAILLAGE,
129                        MODELE   = MODELE,
130                        NB_PART  = NB_PART,
131                        INFO     = INFO,
132                        );
133
134   elif MAILLAGE:
135     _part.Partitionne_Aster(
136                        MAILLAGE = MAILLAGE,
137                        NB_PART  = NB_PART,
138                        INFO     = INFO,
139                        );
140
141
142   # Creation des group_ma dans le maillage Aster
143   _part.Creation_Group_ma_Aster_par_SD(NOM=NOM_GROUP_MA, NOM2=NOM_GROUP_MA_BORD, INCLUSE=INCLUSE)
144
145
146   # Creation de la SDFETI
147   if MODELE:
148     _tmp  = []
149     for i in range(NB_PART):
150       txt = { 'GROUP_MA': NOM_GROUP_MA + str(i) }
151       if ( NOM_GROUP_MA_BORD+str(i) in _part.ASTER['GROUP_MA_BORD'] ):
152         txt['GROUP_MA_BORD'] = NOM_GROUP_MA_BORD + str(i)
153       _tmp.append( txt )
154   
155     motscle2= {'DEFI': _tmp }
156   
157     # Regeneration des mots-cles EXCIT passés en argument de la macro
158     if EXCIT:
159       dExcit=[]
160       for j in EXCIT :
161         dExcit.append(j.cree_dict_valeurs(j.mc_liste))
162         for i in dExcit[-1].keys():
163           if dExcit[-1][i]==None : del dExcit[-1][i]
164       motscle2['EXCIT']=dExcit
165   
166     _SDFETI=DEFI_PART_OPS(NOM='SDD',
167                           MODELE=MODELE,
168                           INFO=1,
169                           **motscle2
170                           );
171   else:
172     _SDFETI=None
173
174
175   # Fin :
176   print """
177
178   %  FIN MACRO-COMMANDE: DEFI_PART_FETI
179
180 """
181
182   return ier