]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA8/Macro/macro_elas_mult_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA8 / Macro / macro_elas_mult_ops.py
1 #@ MODIF macro_elas_mult_ops Macro  DATE 08/11/2007   AUTEUR SALMONA L.SALMONA 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2002  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
21
22
23 def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
24                         CHAR_MECA_GLOBAL,CHAR_CINE_GLOBAL,LIAISON_DISCRET,
25                         CAS_CHARGE,SOLVEUR,**args):
26   """
27      Ecriture de la macro MACRO_ELAS_MULT
28   """
29   ier=0
30   import types
31   from Accas import _F
32   from Utilitai.Utmess     import UTMESS
33
34   # On met le mot cle NUME_DDL dans une variable locale pour le proteger
35   numeddl=NUME_DDL
36   # On importe les definitions des commandes a utiliser dans la macro
37   CALC_MATR_ELEM  =self.get_cmd('CALC_MATR_ELEM')
38   NUME_DDL        =self.get_cmd('NUME_DDL')
39   ASSE_MATRICE    =self.get_cmd('ASSE_MATRICE')
40   FACT_LDLT       =self.get_cmd('FACT_LDLT')
41   CALC_VECT_ELEM  =self.get_cmd('CALC_VECT_ELEM')
42   ASSE_VECTEUR    =self.get_cmd('ASSE_VECTEUR')
43   RESO_LDLT       =self.get_cmd('RESO_LDLT')
44   CREA_RESU       =self.get_cmd('CREA_RESU')
45   CALC_ELEM       =self.get_cmd('CALC_ELEM')
46   CALC_NO         =self.get_cmd('CALC_NO')
47   # La macro compte pour 1 dans la numerotation des commandes
48   self.set_icmd(1)
49
50   # Le concept sortant (de type mult_elas ou fourier_elas) est nommé
51   # 'nomres' dans le contexte de la macro
52   
53   self.DeclareOut('nomres',self.sd)
54
55   ielas = 0
56   ifour = 0
57   for m in CAS_CHARGE:
58      if m['NOM_CAS']:
59         ielas=1                 # mot clé NOM_CAS      présent sous CAS_CHARGE
60         tyresu = 'MULT_ELAS'
61      else:
62         ifour=1                 # mot clé MODE_FOURIER présent sous CAS_CHARGE
63         tyresu = 'FOURIER_ELAS'
64   if ielas==1 and ifour==1:
65      UTMESS('F', "MACRO_ELAS_MULT", "On ne peut avoir a la fois NOM_CAS et MODE_FOURIER")
66
67   if (numeddl in self.sdprods) or (numeddl==None):
68     # Si le concept numeddl est dans self.sdprods ou n est pas nommé
69     # il doit etre  produit par la macro
70     # il faudra donc appeler la commande NUME_DDL
71     lnume = 1
72   else:
73     lnume = 0
74
75   if ielas==1 :
76      motscles={}
77      if   CHAR_MECA_GLOBAL: motscles['CHARGE']    =CHAR_MECA_GLOBAL
78      elif CHAR_CINE_GLOBAL: motscles['CHARGE']    =CHAR_CINE_GLOBAL
79      if   CHAM_MATER      : motscles['CHAM_MATER']=CHAM_MATER
80      if   CARA_ELEM       : motscles['CARA_ELEM'] =CARA_ELEM
81      __nomrig=CALC_MATR_ELEM(OPTION='RIGI_MECA',MODELE=MODELE,**motscles)
82   
83      if lnume:
84        # On peut passer des mots cles egaux a None. Ils sont ignores
85        motscles={}
86        if SOLVEUR:
87           motscles['METHODE'] =SOLVEUR['METHODE']
88           motscles['RENUM']   =SOLVEUR['RENUM']
89        else:
90           motscles['METHODE'] ='MULT_FRONT'
91           motscles['RENUM']   ='METIS'
92        if numeddl!=None:
93           self.DeclareOut('num',numeddl)
94           num=NUME_DDL(MATR_RIGI=__nomrig,**motscles)
95        else:
96           _num=NUME_DDL(MATR_RIGI=__nomrig,**motscles)
97           num=_num
98      else:
99        num=numeddl
100
101      __nomras=ASSE_MATRICE(MATR_ELEM=__nomrig,NUME_DDL=num)
102
103      __nomraf=FACT_LDLT(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER'])
104
105 #####################################################################
106 # boucle sur les items de CAS_CHARGE
107
108   nomchn=[]
109   iocc=0
110   for m in CAS_CHARGE:
111      iocc=iocc+1
112
113      if ifour:
114         motscles={}
115         if   CHAR_MECA_GLOBAL: motscles['CHARGE']       =CHAR_MECA_GLOBAL
116         elif CHAR_CINE_GLOBAL: motscles['CHARGE']       =CHAR_CINE_GLOBAL
117         if   CHAM_MATER      : motscles['CHAM_MATER']   =CHAM_MATER
118         if   CARA_ELEM       : motscles['CARA_ELEM']    =CARA_ELEM
119         motscles['MODE_FOURIER'] =m['MODE_FOURIER']
120         __nomrig=CALC_MATR_ELEM(OPTION='RIGI_MECA',MODELE=MODELE,**motscles)
121
122         if lnume:
123            _num=NUME_DDL(MATR_RIGI=__nomrig,METHODE=SOLVEUR['METHODE'],RENUM=SOLVEUR['RENUM'])
124            num=_num
125            lnume=0
126
127         __nomras=ASSE_MATRICE(MATR_ELEM=__nomrig,NUME_DDL=num)
128
129         __nomraf=FACT_LDLT(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER'])
130
131
132      if m['VECT_ASSE']==None :
133         motscles={}
134         if   CHAM_MATER      : motscles['CHAM_MATER']   =CHAM_MATER
135         if   CARA_ELEM       : motscles['CARA_ELEM']    =CARA_ELEM
136         if   ifour           : motscles['MODE_FOURIER'] =m['MODE_FOURIER']
137         if   m['CHAR_MECA']  : motscles['CHARGE']       =m['CHAR_MECA']
138         elif m['CHAR_CINE']  : motscles['CHARGE']       =m['CHAR_CINE']
139         __nomvel=CALC_VECT_ELEM(OPTION='CHAR_MECA',**motscles)
140         __nomasv=ASSE_VECTEUR(VECT_ELEM=__nomvel,NUME_DDL=num)
141      else :
142         __nomasv=m['VECT_ASSE']
143
144
145      __nomchn=RESO_LDLT(MATR_FACT=__nomraf,CHAM_NO=__nomasv,TITRE=m['SOUS_TITRE'])
146      nomchn.append(__nomchn)
147
148 # fin de la boucle sur les items de CAS_CHARGE
149 #####################################################################
150
151   motscles={}
152   iocc=0
153   motscle2={}
154   if CHAM_MATER : motscle2['CHAM_MATER']=CHAM_MATER
155   if CARA_ELEM  : motscle2['CARA_ELEM']=CARA_ELEM
156   if CHAM_MATER or CARA_ELEM :
157     if ielas : 
158        motscles['AFFE']=[]
159        for m in CAS_CHARGE:
160           motscles['AFFE'].append(_F(MODELE=MODELE,
161                                      CHAM_GD=nomchn[iocc],
162                                      NOM_CAS=m['NOM_CAS'],
163                                      **motscle2) )
164           iocc=iocc+1
165     else :
166        motscles['AFFE']=[]
167        for m in CAS_CHARGE:
168           motscles['AFFE'].append(_F(MODELE=MODELE,
169                                      CHAM_GD=nomchn[iocc],
170                                      NUME_MODE=m['MODE_FOURIER'],
171                                      TYPE_MODE=m['TYPE_MODE'],
172                                      **motscle2) )
173           iocc=iocc+1
174   else:
175     if ielas : 
176        motscles['AFFE']=[]
177        for m in CAS_CHARGE:
178           motscles['AFFE'].append(_F(MODELE=MODELE,
179                                      CHAM_GD=nomchn[iocc],
180                                      NOM_CAS=m['NOM_CAS'],) )
181           iocc=iocc+1
182     else :
183        motscles['AFFE']=[]
184        for m in CAS_CHARGE:
185           motscles['AFFE'].append(_F(MODELE=MODELE,
186                                      CHAM_GD=nomchn[iocc],
187                                      NUME_MODE=m['MODE_FOURIER'],
188                                      TYPE_MODE=m['TYPE_MODE'],) )
189           iocc=iocc+1
190
191
192   nomres=CREA_RESU(OPERATION='AFFE',TYPE_RESU=tyresu,NOM_CHAM='DEPL',**motscles)
193
194 #####################################################################
195 # boucle sur les items de CAS_CHARGE pour CALC_ELEM ete CALC_NO
196
197   iocc=0
198   for m in CAS_CHARGE:
199      iocc=iocc+1
200
201      if m['OPTION']:
202         nbel=0
203         nbno=0
204         liste_el=[]
205         liste_no=[]
206         if type(m['OPTION'])==types.StringType:
207            if m['OPTION'] in ('FORC_NODA','REAC_NODA',
208                               'EPSI_NOEU_DEPL','SIGM_NOEU_DEPL','EFGE_NOEU_DEPL',
209                               'EQUI_NOEU_SIGM','EQUI_NOEU_EPSI','FLUX_NOEU_TEMP',):
210               nbno=nbno+1
211               liste_no.append(m['OPTION'])
212            else:
213               nbel=nbel+1
214               liste_el.append(m['OPTION'])
215         else:
216            for opt in m['OPTION']:
217               if opt in ('FORC_NODA','REAC_NODA',
218                          'EPSI_NOEU_DEPL','SIGM_NOEU_DEPL','EFGE_NOEU_DEPL',
219                          'EQUI_NOEU_SIGM','EQUI_NOEU_EPSI','FLUX_NOEU_TEMP',):
220                  nbno=nbno+1
221                  liste_no.append(opt)
222               else:
223                  nbel=nbel+1
224                  liste_el.append(opt)
225
226         lreac=0
227         if nbel:
228            motscles={}
229            if   CHAM_MATER : motscles['CHAM_MATER'] =CHAM_MATER
230            if   CARA_ELEM  : motscles['CARA_ELEM']  =CARA_ELEM
231            if ielas:
232               motscles['NOM_CAS']=m['NOM_CAS']
233            else:
234               motscles['NUME_MODE']=m['MODE_FOURIER']
235            motscles['EXCIT']=[]
236            if   m['CHAR_MECA'] :
237               for chargt in m['CHAR_MECA']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
238            elif m['CHAR_CINE'] :
239               for chargt in m['CHAR_CINE']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
240            if   CHAR_MECA_GLOBAL:
241               for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
242            elif CHAR_CINE_GLOBAL:
243               for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
244            CALC_ELEM(reuse=nomres,
245                      RESULTAT=nomres,
246                      MODELE=MODELE,
247                      REPE_COQUE=_F(NIVE_COUCHE=m['NIVE_COUCHE'],
248                                    NUME_COUCHE=m['NUME_COUCHE'],),
249                      OPTION=tuple(liste_el),
250                      **motscles)
251         if nbno:
252            motscles={}
253            if   CHAM_MATER : motscles['CHAM_MATER'] =CHAM_MATER
254            if   CARA_ELEM  : motscles['CARA_ELEM']  =CARA_ELEM
255            if ielas:
256               motscles['NOM_CAS']=m['NOM_CAS']
257            else:
258               motscles['NUME_MODE']=m['MODE_FOURIER']
259            motscles['EXCIT']=[]
260            if   m['CHAR_MECA'] :
261               for chargt in m['CHAR_MECA']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
262            elif m['CHAR_CINE'] :
263               for chargt in m['CHAR_CINE']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
264            if   CHAR_MECA_GLOBAL:
265               for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
266            elif CHAR_CINE_GLOBAL:
267               for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
268            CALC_NO(reuse=nomres,
269                    RESULTAT=nomres,
270                    MODELE=MODELE,
271                    OPTION=tuple(liste_no),
272                    **motscles)
273
274 # fin de la boucle sur les items de CAS_CHARGE
275 #####################################################################
276   return ier
277