1 #@ MODIF macro_elas_mult_ops Macro DATE 08/11/2007 AUTEUR SALMONA 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 # ======================================================================
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):
27 Ecriture de la macro MACRO_ELAS_MULT
32 from Utilitai.Utmess import UTMESS
34 # On met le mot cle NUME_DDL dans une variable locale pour le proteger
36 # On importe les definitions des commandes a utiliser dans la macro
37 CALC_MATR_ELEM =self.get_cmd('CALC_MATR_ELEM')
38 NUME_DDL =self.get_cmd('NUME_DDL')
39 ASSE_MATRICE =self.get_cmd('ASSE_MATRICE')
40 FACT_LDLT =self.get_cmd('FACT_LDLT')
41 CALC_VECT_ELEM =self.get_cmd('CALC_VECT_ELEM')
42 ASSE_VECTEUR =self.get_cmd('ASSE_VECTEUR')
43 RESO_LDLT =self.get_cmd('RESO_LDLT')
44 CREA_RESU =self.get_cmd('CREA_RESU')
45 CALC_ELEM =self.get_cmd('CALC_ELEM')
46 CALC_NO =self.get_cmd('CALC_NO')
47 # La macro compte pour 1 dans la numerotation des commandes
50 # Le concept sortant (de type mult_elas ou fourier_elas) est nommé
51 # 'nomres' dans le contexte de la macro
53 self.DeclareOut('nomres',self.sd)
59 ielas=1 # mot clé NOM_CAS présent sous CAS_CHARGE
62 ifour=1 # mot clé MODE_FOURIER présent sous CAS_CHARGE
63 tyresu = 'FOURIER_ELAS'
64 if ielas==1 and ifour==1:
65 UTMESS('F', "MACRO_ELAS_MULT", "On ne peut avoir a la fois NOM_CAS et MODE_FOURIER")
67 if (numeddl in self.sdprods) or (numeddl==None):
68 # Si le concept numeddl est dans self.sdprods ou n est pas nommé
69 # il doit etre produit par la macro
70 # il faudra donc appeler la commande NUME_DDL
77 if CHAR_MECA_GLOBAL: motscles['CHARGE'] =CHAR_MECA_GLOBAL
78 elif CHAR_CINE_GLOBAL: motscles['CHARGE'] =CHAR_CINE_GLOBAL
79 if CHAM_MATER : motscles['CHAM_MATER']=CHAM_MATER
80 if CARA_ELEM : motscles['CARA_ELEM'] =CARA_ELEM
81 __nomrig=CALC_MATR_ELEM(OPTION='RIGI_MECA',MODELE=MODELE,**motscles)
84 # On peut passer des mots cles egaux a None. Ils sont ignores
87 motscles['METHODE'] =SOLVEUR['METHODE']
88 motscles['RENUM'] =SOLVEUR['RENUM']
90 motscles['METHODE'] ='MULT_FRONT'
91 motscles['RENUM'] ='METIS'
93 self.DeclareOut('num',numeddl)
94 num=NUME_DDL(MATR_RIGI=__nomrig,**motscles)
96 _num=NUME_DDL(MATR_RIGI=__nomrig,**motscles)
101 __nomras=ASSE_MATRICE(MATR_ELEM=__nomrig,NUME_DDL=num)
103 __nomraf=FACT_LDLT(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER'])
105 #####################################################################
106 # boucle sur les items de CAS_CHARGE
115 if CHAR_MECA_GLOBAL: motscles['CHARGE'] =CHAR_MECA_GLOBAL
116 elif CHAR_CINE_GLOBAL: motscles['CHARGE'] =CHAR_CINE_GLOBAL
117 if CHAM_MATER : motscles['CHAM_MATER'] =CHAM_MATER
118 if CARA_ELEM : motscles['CARA_ELEM'] =CARA_ELEM
119 motscles['MODE_FOURIER'] =m['MODE_FOURIER']
120 __nomrig=CALC_MATR_ELEM(OPTION='RIGI_MECA',MODELE=MODELE,**motscles)
123 _num=NUME_DDL(MATR_RIGI=__nomrig,METHODE=SOLVEUR['METHODE'],RENUM=SOLVEUR['RENUM'])
127 __nomras=ASSE_MATRICE(MATR_ELEM=__nomrig,NUME_DDL=num)
129 __nomraf=FACT_LDLT(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER'])
132 if m['VECT_ASSE']==None :
134 if CHAM_MATER : motscles['CHAM_MATER'] =CHAM_MATER
135 if CARA_ELEM : motscles['CARA_ELEM'] =CARA_ELEM
136 if ifour : motscles['MODE_FOURIER'] =m['MODE_FOURIER']
137 if m['CHAR_MECA'] : motscles['CHARGE'] =m['CHAR_MECA']
138 elif m['CHAR_CINE'] : motscles['CHARGE'] =m['CHAR_CINE']
139 __nomvel=CALC_VECT_ELEM(OPTION='CHAR_MECA',**motscles)
140 __nomasv=ASSE_VECTEUR(VECT_ELEM=__nomvel,NUME_DDL=num)
142 __nomasv=m['VECT_ASSE']
145 __nomchn=RESO_LDLT(MATR_FACT=__nomraf,CHAM_NO=__nomasv,TITRE=m['SOUS_TITRE'])
146 nomchn.append(__nomchn)
148 # fin de la boucle sur les items de CAS_CHARGE
149 #####################################################################
154 if CHAM_MATER : motscle2['CHAM_MATER']=CHAM_MATER
155 if CARA_ELEM : motscle2['CARA_ELEM']=CARA_ELEM
156 if CHAM_MATER or CARA_ELEM :
160 motscles['AFFE'].append(_F(MODELE=MODELE,
161 CHAM_GD=nomchn[iocc],
162 NOM_CAS=m['NOM_CAS'],
168 motscles['AFFE'].append(_F(MODELE=MODELE,
169 CHAM_GD=nomchn[iocc],
170 NUME_MODE=m['MODE_FOURIER'],
171 TYPE_MODE=m['TYPE_MODE'],
178 motscles['AFFE'].append(_F(MODELE=MODELE,
179 CHAM_GD=nomchn[iocc],
180 NOM_CAS=m['NOM_CAS'],) )
185 motscles['AFFE'].append(_F(MODELE=MODELE,
186 CHAM_GD=nomchn[iocc],
187 NUME_MODE=m['MODE_FOURIER'],
188 TYPE_MODE=m['TYPE_MODE'],) )
192 nomres=CREA_RESU(OPERATION='AFFE',TYPE_RESU=tyresu,NOM_CHAM='DEPL',**motscles)
194 #####################################################################
195 # boucle sur les items de CAS_CHARGE pour CALC_ELEM ete CALC_NO
206 if type(m['OPTION'])==types.StringType:
207 if m['OPTION'] in ('FORC_NODA','REAC_NODA',
208 'EPSI_NOEU_DEPL','SIGM_NOEU_DEPL','EFGE_NOEU_DEPL',
209 'EQUI_NOEU_SIGM','EQUI_NOEU_EPSI','FLUX_NOEU_TEMP',):
211 liste_no.append(m['OPTION'])
214 liste_el.append(m['OPTION'])
216 for opt in m['OPTION']:
217 if opt in ('FORC_NODA','REAC_NODA',
218 'EPSI_NOEU_DEPL','SIGM_NOEU_DEPL','EFGE_NOEU_DEPL',
219 'EQUI_NOEU_SIGM','EQUI_NOEU_EPSI','FLUX_NOEU_TEMP',):
229 if CHAM_MATER : motscles['CHAM_MATER'] =CHAM_MATER
230 if CARA_ELEM : motscles['CARA_ELEM'] =CARA_ELEM
232 motscles['NOM_CAS']=m['NOM_CAS']
234 motscles['NUME_MODE']=m['MODE_FOURIER']
237 for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
238 elif m['CHAR_CINE'] :
239 for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
241 for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
242 elif CHAR_CINE_GLOBAL:
243 for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
244 CALC_ELEM(reuse=nomres,
247 REPE_COQUE=_F(NIVE_COUCHE=m['NIVE_COUCHE'],
248 NUME_COUCHE=m['NUME_COUCHE'],),
249 OPTION=tuple(liste_el),
253 if CHAM_MATER : motscles['CHAM_MATER'] =CHAM_MATER
254 if CARA_ELEM : motscles['CARA_ELEM'] =CARA_ELEM
256 motscles['NOM_CAS']=m['NOM_CAS']
258 motscles['NUME_MODE']=m['MODE_FOURIER']
261 for chargt in m['CHAR_MECA'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
262 elif m['CHAR_CINE'] :
263 for chargt in m['CHAR_CINE'] : motscles['EXCIT'].append(_F(CHARGE=chargt))
265 for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
266 elif CHAR_CINE_GLOBAL:
267 for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
268 CALC_NO(reuse=nomres,
271 OPTION=tuple(liste_no),
274 # fin de la boucle sur les items de CAS_CHARGE
275 #####################################################################