1 #@ MODIF macro_matr_asse_ops Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
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 # ======================================================================
23 def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
24 SOLVEUR,NUME_DDL,CHARGE,INST,**args):
26 Ecriture de la macro MACRO_MATR_ASSE
30 # On met le mot cle NUME_DDL dans une variable locale pour le proteger
32 # On importe les definitions des commandes a utiliser dans la macro
33 # Le nom de la variable doit etre obligatoirement le nom de la commande
34 CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM')
35 NUME_DDL =self.get_cmd('NUME_DDL')
36 ASSE_MATRICE =self.get_cmd('ASSE_MATRICE')
37 # La macro compte pour 1 dans la numerotation des commandes
42 methode=SOLVEUR['METHODE']
45 renum=SOLVEUR['RENUM']
48 if renum not in ('SANS','RCMK'):
50 self.cr.fatal("<F> <MACRO_MATR_ASSE> Avec methode LDLT, RENUM doit etre SANS ou RCMK.")
52 elif methode=='MULT_FRONT':
54 renum=SOLVEUR['RENUM']
57 if renum not in ('MDA','MD','METIS'):
59 self.cr.fatal("<F> <MACRO_MATR_ASSE> Avec methode MULT_FRONT, RENUM doit etre MDA, MD ou RCMK.")
63 renum=SOLVEUR['RENUM']
66 if renum not in ('SANS','RCMK'):
68 self.cr.fatal("<F> <MACRO_MATR_ASSE> Avec methode GCPC, RENUM doit etre SANS ou RCMK.")
74 if numeddl in self.sdprods:
75 # Si le concept numeddl est dans self.sdprods
76 # il doit etre produit par la macro
77 # il faudra donc appeler la commande NUME_DDL
84 # decalage eventuel en premiere position dans la liste de l occurence de MATR_ASSE contenant
85 # l option de rigidite
89 if option in ('RIGI_MECA','RIGI_MECA_LAGR','RIGI_THER','RIGI_ACOU') :
91 MATR_ASSE.remove(decal)
92 MATR_ASSE.insert(0,decal)
100 if iocc == 1 and lnume == 1 and option not in ('RIGI_MECA','RIGI_MECA_LAGR',
101 'RIGI_THER','RIGI_ACOU') :
103 self.cr.fatal("<F> <MACRO_MATR_ASSE> UNE DES OPTIONS DOIT ETRE RIGI_MECA OU RIGI_THER OU RIGI_ACOU OU RIGI_MECA_LAGR")
106 if m['SIEF_ELGA']!=None and option!='RIGI_GEOM':
108 self.cr.fatal("<F> <MACRO_MATR_ASSE> SIEF_ELGA N EST ADMIS QU AVEC L OPTION RIGI_GEOM")
111 if m['MODE_FOURIER']!=None and option not in ('RIGI_MECA','RIGI_FLUI_STRU','RIGI_THER'):
113 self.cr.fatal("<F> <MACRO_MATR_ASSE> MODE_FOURIER N EST ADMIS QU AVEC UNE DES OPTIONS RIGI_MECA RIGI_FLUI_STRU RIGI_THER")
116 if (m['THETA']!=None or m['PROPAGATION']!=None) and option!='RIGI_MECA_LAGR':
118 self.cr.fatal("<F> <MACRO_MATR_ASSE> PROPAGATION ET,OU THETA NE SONT ADMIS QU AVEC L OPTION RIGI_MECA_LAGR")
121 motscles={'OPTION':option}
122 if option == 'AMOR_MECA':
123 if (not lrigel or not lmasel):
125 self.cr.fatal("""<F> <MACRO_MATR_ASSE> POUR CALCULER AMOR_MECA, IL FAUT AVOIR CALCULE
126 RIGI_MECA ET MASS_MECA AUPARAVANT (DANS LE MEME APPEL)""")
128 if CHAM_MATER != None:
129 motscles['RIGI_MECA'] =rigel
130 motscles['MASS_MECA'] =masel
132 if option[0:9] not in ('MASS_THER','RIGI_GEOM','MASS_ID_M'):
133 motscles['CHARGE'] =CHARGE
134 if CHAM_MATER != None: motscles['CHAM_MATER'] =CHAM_MATER
135 if CARA_ELEM != None: motscles['CARA_ELEM'] =CARA_ELEM
136 if INST != None: motscles['INST'] =INST
137 if m['SIEF_ELGA'] : motscles['SIEF_ELGA'] =m['SIEF_ELGA']
138 if m['MODE_FOURIER']: motscles['MODE_FOURIER']=m['MODE_FOURIER']
139 if m['THETA'] : motscles['THETA'] =m['THETA']
140 if m['PROPAGATION'] : motscles['PROPAGATION'] =m['PROPAGATION']
142 __a=CALC_MATR_ELEM(MODELE=MODELE,**motscles)
144 if option == 'RIGI_MECA':
147 if option == 'MASS_MECA':
151 if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'):
152 self.DeclareOut('num',numeddl)
153 # On peut passer des mots cles egaux a None. Ils sont ignores
154 num=NUME_DDL(MATR_RIGI=__a,METHODE=methode,RENUM=renum)
158 self.DeclareOut('mm',m['MATRICE'])
159 mm=ASSE_MATRICE(MATR_ELEM=__a,NUME_DDL=num)