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