1 #@ MODIF macro_matr_asse_ops Macro DATE 05/07/2006 AUTEUR CIBHHPD 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.
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.
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 # ======================================================================
21 def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
22 SOLVEUR,NUME_DDL,CHARGE,INST,**args):
24 Ecriture de la macro MACRO_MATR_ASSE
28 # On met le mot cle NUME_DDL dans une variable locale pour le proteger
30 # On importe les definitions des commandes a utiliser dans la macro
31 # Le nom de la variable doit etre obligatoirement le nom de la commande
32 CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM')
33 NUME_DDL =self.get_cmd('NUME_DDL')
34 ASSE_MATRICE =self.get_cmd('ASSE_MATRICE')
35 # La macro compte pour 1 dans la numerotation des commandes
39 methode=SOLVEUR['METHODE']
42 renum=SOLVEUR['RENUM']
45 if renum not in ('SANS','RCMK'):
47 self.cr.fatal("<F> <MACRO_MATR_ASSE> Avec methode LDLT, RENUM doit etre SANS ou RCMK.")
49 elif methode=='MULT_FRONT':
51 renum=SOLVEUR['RENUM']
54 if renum not in ('MDA','MD','METIS'):
56 self.cr.fatal("<F> <MACRO_MATR_ASSE> Avec methode MULT_FRONT, RENUM doit etre MDA, MD ou RCMK.")
60 renum=SOLVEUR['RENUM']
63 if renum not in ('SANS','RCMK'):
65 self.cr.fatal("<F> <MACRO_MATR_ASSE> Avec methode GCPC, RENUM doit etre SANS ou RCMK.")
71 if numeddl in self.sdprods:
72 # Si le concept numeddl est dans self.sdprods
73 # il doit etre produit par la macro
74 # il faudra donc appeler la commande NUME_DDL
81 # decalage eventuel en premiere position dans la liste de l occurence de MATR_ASSE contenant
82 # l option de rigidite
86 if option in ('RIGI_MECA','RIGI_MECA_LAGR','RIGI_THER','RIGI_ACOU') :
88 MATR_ASSE.remove(decal)
89 MATR_ASSE.insert(0,decal)
97 if iocc == 1 and lnume == 1 and option not in ('RIGI_MECA','RIGI_MECA_LAGR',
98 'RIGI_THER','RIGI_ACOU') :
100 self.cr.fatal("<F> <MACRO_MATR_ASSE> UNE DES OPTIONS DOIT ETRE RIGI_MECA OU RIGI_THER OU RIGI_ACOU OU RIGI_MECA_LAGR")
104 motscles={'OPTION':option}
105 if option == 'RIGI_MECA_HYST':
107 UTMESS('F', "MACRO_MATR_ASSE", "POUR CALCULER RIGI_MECA_HYST, IL FAUT AVOIR CALCULE RIGI_MECA AUPARAVANT (DANS LE MEME APPEL)")
108 motscles['RIGI_MECA'] =rigel
109 if option == 'AMOR_MECA':
110 if (not lrigel or not lmasel):
112 self.cr.fatal("""<F> <MACRO_MATR_ASSE> POUR CALCULER AMOR_MECA, IL FAUT AVOIR CALCULE
113 RIGI_MECA ET MASS_MECA AUPARAVANT (DANS LE MEME APPEL)""")
115 if CHAM_MATER != None:
116 motscles['RIGI_MECA'] =rigel
117 motscles['MASS_MECA'] =masel
119 if option[0:9] not in ('MASS_THER','RIGI_GEOM','MASS_ID_M'):
120 motscles['CHARGE'] =CHARGE
121 if CHAM_MATER != None: motscles['CHAM_MATER'] =CHAM_MATER
122 if CARA_ELEM != None: motscles['CARA_ELEM'] =CARA_ELEM
123 if INST != None: motscles['INST'] =INST
125 try : motscles['SIEF_ELGA'] =m['SIEF_ELGA']
126 except IndexError : pass
128 try : motscles['MODE_FOURIER'] =m['MODE_FOURIER']
129 except IndexError : pass
131 try : motscles['THETA'] =m['THETA']
132 except IndexError : pass
134 try : motscles['PROPAGATION'] =m['PROPAGATION']
135 except IndexError : pass
137 __a=CALC_MATR_ELEM(MODELE=MODELE,**motscles)
139 if option == 'RIGI_MECA':
142 if option == 'MASS_MECA':
146 if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'):
147 self.DeclareOut('num',numeddl)
148 # On peut passer des mots cles egaux a None. Ils sont ignores
149 num=NUME_DDL(MATR_RIGI=__a,METHODE=methode,RENUM=renum)
153 self.DeclareOut('mm',m['MATRICE'])
154 mm=ASSE_MATRICE(MATR_ELEM=__a,NUME_DDL=num)