1 # -*- coding: iso-8859-1 -*-
2 #@ MODIF macro_matr_asse_ops Macro DATE 15/10/2002 AUTEUR DURAND C.DURAND
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("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("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("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("UNE DES OPTIONS DOIT ETRE RIGI_MECA OU RIGI_THER OU RIGI_ACOU OU RIGI_MECA_LAGR")
103 if m['SIEF_ELGA']!=None and option!='RIGI_GEOM':
105 self.cr.fatal("SIEF_ELGA N EST ADMIS QU AVEC L OPTION RIGI_GEOM")
108 if m['MODE_FOURIER']!=None and option not in ('RIGI_MECA','RIGI_FLUI_STRU','RIGI_THER'):
110 self.cr.fatal("MODE_FOURIER N EST ADMIS QU AVEC UNE DES OPTIONS RIGI_MECA RIGI_FLUI_STRU RIGI_THER")
113 if (m['THETA']!=None or m['PROPAGATION']!=None) and option!='RIGI_MECA_LAGR':
115 self.cr.fatal("PROPAGATION ET,OU THETA NE SONT ADMIS QU AVEC L OPTION RIGI_MECA_LAGR")
118 motscles={'OPTION':option}
119 if option == 'AMOR_MECA':
120 if (not lrigel or not lmasel):
122 self.cr.fatal("""POUR CALCULER AMOR_MECA, IL FAUT AVOIR CALCULE
123 RIGI_MECA ET MASS_MECA AUPARAVANT (DANS LE MEME APPEL)""")
125 if CHAM_MATER != None:
126 motscles['RIGI_MECA'] =rigel
127 motscles['MASS_MECA'] =masel
129 if option[0:9] not in ('MASS_THER','RIGI_GEOM','MASS_ID_M'):
130 motscles['CHARGE'] =CHARGE
131 if CHAM_MATER != None: motscles['CHAM_MATER'] =CHAM_MATER
132 if CARA_ELEM != None: motscles['CARA_ELEM'] =CARA_ELEM
133 if INST != None: motscles['INST'] =INST
134 if m['SIEF_ELGA'] : motscles['SIEF_ELGA'] =m['SIEF_ELGA']
135 if m['MODE_FOURIER']: motscles['MODE_FOURIER']=m['MODE_FOURIER']
136 if m['THETA'] : motscles['THETA'] =m['THETA']
137 if m['PROPAGATION'] : motscles['PROPAGATION'] =m['PROPAGATION']
139 __a=CALC_MATR_ELEM(MODELE=MODELE,**motscles)
141 if option == 'RIGI_MECA':
144 if option == 'MASS_MECA':
148 if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'):
149 self.DeclareOut('num',numeddl)
150 # On peut passer des mots cles egaux a None. Ils sont ignores
151 num=NUME_DDL(MATR_RIGI=__a,METHODE=methode,RENUM=renum)
155 self.DeclareOut('mm',m['MATRICE'])
156 mm=ASSE_MATRICE(MATR_ELEM=__a,NUME_DDL=num)
160 def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args):
161 if not MATR_ASSE: raise AsException("Impossible de typer les concepts resultats")
162 if not NUME_DDL: raise AsException("Impossible de typer les concepts resultats")
163 self.type_sdprod(NUME_DDL,nume_ddl)
167 if opti in ( "RIGI_MECA","RIGI_FLUI_STRU","RIGI_MECA_LAGR" ,
168 "MASS_MECA" , "MASS_FLUI_STRU" ,"RIGI_GEOM" ,"RIGI_ROTA",
169 "AMOR_MECA","IMPE_MECA","MASS_ID_MDEP_R","MASS_ID_MDNS_R",
170 "ONDE_FLUI","MASS_MECA_DIAG" ) : t=matr_asse_depl_r
172 if opti in ( "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",) : t=matr_asse_pres_c
174 if opti in ( "RIGI_THER","MASS_THER","RIGI_THER_CONV" ,
175 "RIGI_THER_CONV_D","MASS_ID_MTEM_R","MASS_ID_MTNS_R",) : t=matr_asse_temp_r
177 if opti == "RIGI_MECA_HYST" : t= matr_asse_depl_c
179 self.type_sdprod(m['MATRICE'],t)