1 #@ MODIF macro_matr_ajou_ops Macro DATE 16/10/2007 AUTEUR REZETTE C.REZETTE
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2004 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 # ======================================================================
22 def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATION,MODE_MECA,DEPL_IMPO,
23 NUME_DDL_GENE,MODELE_GENE,MATR_MASS_AJOU,MATR_AMOR_AJOU,MATR_RIGI_AJOU,
24 NOEUD_DOUBLE,FLUIDE,DDL_IMPO,DIST_REFE,SOLVEUR,INFO,AVEC_MODE_STAT,
26 FORC_AJOU,ECOULEMENT,**args):
28 Ecriture de la macro MACRO_MATR_AJOU
33 from Utilitai.Utmess import UTMESS
36 # On importe les definitions des commandes a utiliser dans la macro
37 DEFI_MATERIAU =self.get_cmd('DEFI_MATERIAU')
38 AFFE_MATERIAU =self.get_cmd('AFFE_MATERIAU')
39 AFFE_MODELE =self.get_cmd('AFFE_MODELE')
40 AFFE_CHAR_THER =self.get_cmd('AFFE_CHAR_THER')
41 CALC_MATR_AJOU =self.get_cmd('CALC_MATR_AJOU')
42 THER_LINEAIRE =self.get_cmd('THER_LINEAIRE')
43 CALC_FORC_AJOU =self.get_cmd('CALC_FORC_AJOU')
45 # La macro compte pour 1 dans la numerotation des commandes
49 message= '<I> <MACRO_MATR_AJOU> tout le domaine fluide specifie dans GROUP_MA_INTERF et GROUP_MA_FLUIDE \n'
50 message=message+ ' sera affecte par la masse volumique RHO = '+str(FLUIDE['RHO'])+' \n'
51 aster.affiche('MESSAGE',message)
52 if FLUIDE['GROUP_MA']!=None :
53 message= '<I> <MACRO_MATR_AJOU> cas fluide simple : le group_ma dans lequel vous affectez la masse \n'
54 message=message+ 'volumique RHO doit etre la reunion de GROUP_MA_INTERF et GROUP_MA_FLUIDE. \n'
55 aster.affiche('MESSAGE',message)
58 if flu['GROUP_MA']==None :
59 UTMESS('F','MATRICE0_1')
63 # ---------------------------------------------------------------
64 # definition du materiau fluide par caracteristique
65 # thermique equivalente
69 __NOMMAT=DEFI_MATERIAU( THER = _F( LAMBDA = 1.0,
70 RHO_CP = FLUIDE[0]['RHO']))
71 __NOMCMA=AFFE_MATERIAU( MAILLAGE = MAILLAGE,
72 AFFE = _F( GROUP_MA = (GROUP_MA_FLUIDE,GROUP_MA_INTERF),
75 # ---------------------------------------------------------------
76 # cas fluides multiples
80 __NOMMAT=DEFI_MATERIAU( THER = _F( LAMBDA = 1.0,
82 mfact=_F(GROUP_MA=flu['GROUP_MA'],MATER=__NOMMAT)
85 __NOMCMA=AFFE_MATERIAU( MAILLAGE = MAILLAGE,
88 # ---------------------------------------------------------------
89 # commande AFFE_MODELE modele fluide
90 __NOMFLU=AFFE_MODELE( MAILLAGE = MAILLAGE,
91 AFFE = _F( GROUP_MA = (GROUP_MA_FLUIDE,GROUP_MA_INTERF),
92 MODELISATION = MODELISATION,
93 PHENOMENE = 'THERMIQUE' ), )
95 # ---------------------------------------------------------------
96 # commande AFFE_MODELE modele interface
97 __NOMINT=AFFE_MODELE( MAILLAGE = MAILLAGE,
98 AFFE = _F( GROUP_MA = GROUP_MA_INTERF,
99 MODELISATION = MODELISATION,
100 PHENOMENE = 'THERMIQUE' ), )
102 # ---------------------------------------------------------------
103 # commande AFFE_CHAR_THER condition de pression imposee
104 # en un point ou un groupe du fluide
107 for DDL in DDL_IMPO :
108 if DDL['PRES_FLUIDE']!=None :
110 if DDL['NOEUD'] !=None : mfact=_F(NOEUD =DDL['NOEUD'], TEMP=DDL['PRES_FLUIDE'])
111 if DDL['GROUP_NO']!=None : mfact=_F(GROUP_NO=DDL['GROUP_NO'],TEMP=DDL['PRES_FLUIDE'])
114 UTMESS('F','MATRICE0_2')
116 __CHARGE=AFFE_CHAR_THER( MODELE = __NOMFLU,
119 # ---------------------------------------------------------------
120 # calcul des masses, rigidites et amortissements ajoutes en theorie
122 # commande CALC_MATR_AJOU, calcul de la masse ajoutee
124 if MATR_MASS_AJOU!=None :
125 self.DeclareOut('MASSAJ',MATR_MASS_AJOU)
126 solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
128 if NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
129 if INFO !=None : mostcles['INFO'] =INFO
130 if MODE_MECA !=None : mostcles['MODE_MECA'] =MODE_MECA
131 elif DEPL_IMPO !=None : mostcles['CHAM_NO'] =DEPL_IMPO
132 elif MODELE_GENE !=None :
133 mostcles['MODELE_GENE'] =MODELE_GENE
134 mostcles['AVEC_MODE_STAT']=AVEC_MODE_STAT
135 mostcles['DIST_REFE'] =DIST_REFE
136 if NOEUD_DOUBLE !=None : mostcles['NOEUD_DOUBLE'] =NOEUD_DOUBLE
138 MASSAJ = CALC_MATR_AJOU(MODELE_FLUIDE = __NOMFLU,
139 MODELE_INTERFACE = __NOMINT,
141 CHAM_MATER = __NOMCMA,
142 OPTION = 'MASS_AJOU',
146 # ---------------------------------------------------------------
147 # calcul de l amortissement ajoute
148 if (MATR_AMOR_AJOU!=None ) or (MATR_RIGI_AJOU!=None ):
150 # ---------------------------------------------------------------
151 # on definit un nouveau modele fluide pour calculer
152 # le potentiel stationnaire - AFFE_MODELE
153 grma=[GROUP_MA_FLUIDE,]
154 if ECOULEMENT!=None :
155 grma.append(ECOULEMENT['GROUP_MA_1'])
156 grma.append(ECOULEMENT['GROUP_MA_2'])
157 __NOFLUI=AFFE_MODELE( MAILLAGE = MAILLAGE,
158 AFFE = _F( GROUP_MA = grma,
159 MODELISATION = MODELISATION,
160 PHENOMENE = 'THERMIQUE' ), )
162 for DDL in DDL_IMPO :
163 if DDL['PRES_SORTIE']!=None :
164 if DDL['NOEUD'] !=None : mfact=_F(NOEUD =DDL['NOEUD'], TEMP=DDL['PRES_SORTIE'])
165 if DDL['GROUP_NO']!=None : mfact=_F(GROUP_NO=DDL['GROUP_NO'],TEMP=DDL['PRES_SORTIE'])
169 for ECL in ECOULEMENT :
170 mfact=_F(GROUP_MA=ECL['GROUP_MA_1'],FLUN=ECL['VNOR_1'])
172 mfact=_F(GROUP_MA=ECL['GROUP_MA_2'],FLUN=ECL['VNOR_2'])
174 __CHARG2=AFFE_CHAR_THER( MODELE = __NOFLUI,
178 __POTEN = THER_LINEAIRE( MODELE = __NOFLUI,
179 CHAM_MATER = __NOMCMA ,
180 EXCIT = _F( CHARGE = __CHARG2 ) )
182 # ---------------------------------------------------------------
183 # calcul amortissement proprement dit
184 if MATR_AMOR_AJOU!=None :
185 self.DeclareOut('AMORAJ',MATR_AMOR_AJOU)
186 solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
188 if NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
189 if INFO !=None : mostcles['INFO'] =INFO
190 if MODE_MECA !=None : mostcles['MODE_MECA'] =MODE_MECA
191 elif DEPL_IMPO !=None : mostcles['CHAM_NO'] =DEPL_IMPO
193 UTMESS('F','MATRICE0_3')
195 AMORAJ = CALC_MATR_AJOU(MODELE_FLUIDE = __NOMFLU,
196 MODELE_INTERFACE = __NOMINT,
198 CHAM_MATER = __NOMCMA,
199 OPTION = 'AMOR_AJOU',
204 # ---------------------------------------------------------------
205 # calcul de la rigidite ajoutee
206 if MATR_RIGI_AJOU!=None :
207 self.DeclareOut('RIGIAJ',MATR_RIGI_AJOU)
208 solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
210 if NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
211 if INFO !=None : mostcles['INFO'] =INFO
212 if MODE_MECA !=None : mostcles['MODE_MECA'] =MODE_MECA
213 elif DEPL_IMPO !=None : mostcles['CHAM_NO'] =DEPL_IMPO
215 UTMESS('F','MATRICE0_4')
217 RIGIAJ = CALC_MATR_AJOU(MODELE_FLUIDE = __NOMFLU,
218 MODELE_INTERFACE = __NOMINT,
220 CHAM_MATER = __NOMCMA,
221 OPTION = 'RIGI_AJOU',
226 # ---------------------------------------------------------------
227 # boucle sur le nombre de vecteurs a projeter, commande CALC_FORC_AJOU
229 for FORCAJ in FORC_AJOU:
230 self.DeclareOut('VECTAJ',FORCAJ['VECTEUR'])
231 solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
233 if NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
234 if MODE_MECA !=None : mostcles['MODE_MECA'] =MODE_MECA
235 elif MODELE_GENE !=None :
236 mostcles['MODELE_GENE'] =MODELE_GENE
237 mostcles['AVEC_MODE_STAT']=AVEC_MODE_STAT
238 mostcles['DIST_REFE'] =DIST_REFE
239 if NOEUD_DOUBLE !=None : mostcles['NOEUD_DOUBLE'] =NOEUD_DOUBLE
240 if MODE_STAT !=None :
241 mostcles['MODE_STAT'] =MODE_STAT
242 if FORCAJ['NOEUD'] !=None : mostcles['NOEUD'] =FORCAJ['NOEUD']
243 if FORCAJ['GROUP_NO'] !=None : mostcles['GROUP_NO'] =FORCAJ['GROUP_NO']
245 mostcles['MONO_APPUI'] =MONO_APPUI
247 VECTAJ = CALC_FORC_AJOU(DIRECTION = FORCAJ['DIRECTION'],
248 MODELE_FLUIDE = __NOMFLU,
249 MODELE_INTERFACE = __NOMINT,
251 CHAM_MATER = __NOMCMA,