Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA8 / Macro / macro_matr_asse_ops.py
1 #@ MODIF macro_matr_asse_ops Macro  DATE 06/02/2008   AUTEUR MACOCCO K.MACOCCO 
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_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
24                         SOLVEUR,NUME_DDL,CHARGE,CHAR_CINE,INST,INFO,**args):
25   """
26      Ecriture de la macro MACRO_MATR_ASSE
27   """
28   ier=0
29   from Utilitai.Utmess     import UTMESS
30
31   # On met le mot cle NUME_DDL dans une variable locale pour le proteger
32   numeddl=NUME_DDL
33   info=INFO
34   # On importe les definitions des commandes a utiliser dans la macro
35   # Le nom de la variable doit etre obligatoirement le nom de la commande
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   # La macro compte pour 1 dans la numerotation des commandes
40   self.set_icmd(1)
41
42   # Les mots cles simples sous SOLVEUR sont par defaut MULT_FRONT/METIS
43   methode=SOLVEUR['METHODE']
44   renum=SOLVEUR['RENUM']
45
46   if numeddl in self.sdprods:
47     # Si le concept numeddl est dans self.sdprods
48     # il doit etre  produit par la macro
49     # il faudra donc appeler la commande NUME_DDL
50     lnume = 1
51   else:
52     lnume = 0
53   lrigel = 0
54   lmasel = 0
55
56 # decalage eventuel en premiere position dans la liste de l occurence de MATR_ASSE contenant
57 # l option de rigidite
58   try :
59     for m in MATR_ASSE:
60       option=m['OPTION']
61       if option in ('RIGI_MECA','RIGI_MECA_LAGR','RIGI_THER','RIGI_ACOU') :
62          decal=m
63          MATR_ASSE.remove(decal)
64          MATR_ASSE.insert(0,decal)
65          break
66   except: pass
67
68   iocc=0
69   for m in MATR_ASSE:
70     iocc=iocc+1
71     option=m['OPTION']
72     if iocc == 1 and lnume == 1 and option not in ('RIGI_MECA','RIGI_MECA_LAGR',
73                                                    'RIGI_THER','RIGI_ACOU')      :
74       UTMESS('F', "MACRO_MATR_ASSE", "UNE DES OPTIONS DOIT ETRE RIGI_MECA OU RIGI_THER OU RIGI_ACOU OU RIGI_MECA_LAGR")
75
76
77     motscles={'OPTION':option}
78     if option == 'RIGI_MECA_HYST':
79        if (not lrigel):
80           UTMESS('F', "MACRO_MATR_ASSE", "POUR CALCULER RIGI_MECA_HYST, IL FAUT AVOIR CALCULE RIGI_MECA AUPARAVANT (DANS LE MEME APPEL)")
81        motscles['RIGI_MECA']   =rigel
82     if option == 'AMOR_MECA':
83        if (not lrigel or not lmasel):
84           UTMESS('F', "MACRO_MATR_ASSE", "POUR CALCULER AMOR_MECA, IL FAUT AVOIR CALCULE RIGI_MECA ET MASS_MECA AUPARAVANT (DANS LE MEME APPEL)")
85        if CHAM_MATER != None:
86           motscles['RIGI_MECA']   =rigel
87           motscles['MASS_MECA']   =masel
88     if CHARGE     != None:
89        if option[0:9] not in ('MASS_THER','RIGI_GEOM','MASS_ID_M'):
90                            motscles['CHARGE']      =CHARGE
91     if CHAM_MATER != None: motscles['CHAM_MATER']  =CHAM_MATER
92     if CARA_ELEM  != None: motscles['CARA_ELEM']   =CARA_ELEM
93     if INST       != None: motscles['INST']        =INST
94
95     try : motscles['SIEF_ELGA']   =m['SIEF_ELGA']
96     except IndexError : pass
97
98     try : motscles['MODE_FOURIER']   =m['MODE_FOURIER']
99     except IndexError : pass
100
101     try : motscles['THETA']   =m['THETA']
102     except IndexError : pass
103
104     try : motscles['PROPAGATION']   =m['PROPAGATION']
105     except IndexError : pass
106     _a=CALC_MATR_ELEM(MODELE=MODELE,**motscles)
107
108     if option == 'RIGI_MECA':
109       rigel  = _a
110       lrigel = 1
111     if option == 'MASS_MECA':
112       masel  = _a
113       lmasel = 1
114
115     if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'):
116       self.DeclareOut('num',numeddl)
117       # On peut passer des mots cles egaux a None. Ils sont ignores
118       num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum,INFO=info)
119     else:
120       num=numeddl
121
122     self.DeclareOut('mm',m['MATRICE'])
123     motscles={'OPTION':option}
124     if CHAR_CINE != None: 
125       mm=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=num,CHAR_CINE=CHAR_CINE)
126     else:
127       mm=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=num)
128
129   return ier