1 #@ MODIF macro_matr_ajou_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 - 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
34 # On importe les definitions des commandes a utiliser dans la macro
35 DEFI_MATERIAU =self.get_cmd('DEFI_MATERIAU')
36 AFFE_MATERIAU =self.get_cmd('AFFE_MATERIAU')
37 AFFE_MODELE =self.get_cmd('AFFE_MODELE')
38 AFFE_CHAR_THER =self.get_cmd('AFFE_CHAR_THER')
39 CALC_MATR_AJOU =self.get_cmd('CALC_MATR_AJOU')
40 THER_LINEAIRE =self.get_cmd('THER_LINEAIRE')
41 CALC_FORC_AJOU =self.get_cmd('CALC_FORC_AJOU')
43 # La macro compte pour 1 dans la numerotation des commandes
47 print '<I> <MACRO_MATR_AJOU> tout le domaine fluide specifie dans GROUP_MA_INTERF et GROUP_MA_FLUIDE'
48 print ' sera affecte par la masse volumique RHO = ',FLUIDE['RHO']
49 if FLUIDE['GROUP_MA']!=None :
50 print '<I> <MACRO_MATR_AJOU> cas fluide simple : le group_ma dans lequel vous affectez la masse'
51 print 'volumique RHO doit etre la reunion de GROUP_MA_INTERF et GROUP_MA_FLUIDE.'
54 if flu['GROUP_MA']==None :
55 self.cr.fatal("<F> <MACRO_MATR_AJOU> cas fluides multiples : precisez le GROUP_MA dans lequel vous affectez la masse volumique RHO.")
61 # ---------------------------------------------------------------
62 # definition du materiau fluide par caracteristique
63 # thermique equivalente
67 __NOMMAT=DEFI_MATERIAU( THER = _F( LAMBDA = 1.0,
68 RHO_CP = FLUIDE[0]['RHO']))
69 __NOMCMA=AFFE_MATERIAU( MAILLAGE = MAILLAGE,
70 AFFE = _F( GROUP_MA = (GROUP_MA_FLUIDE,GROUP_MA_INTERF),
73 # ---------------------------------------------------------------
74 # cas fluides multiples
78 __NOMMAT=DEFI_MATERIAU( THER = _F( LAMBDA = 1.0,
80 mfact=_F(GROUP_MA=flu['GROUP_MA'],MATER=__NOMMAT)
83 __NOMCMA=AFFE_MATERIAU( MAILLAGE = MAILLAGE,
86 # ---------------------------------------------------------------
87 # commande AFFE_MODELE modele fluide
88 __NOMFLU=AFFE_MODELE( MAILLAGE = MAILLAGE,
89 AFFE = _F( GROUP_MA = (GROUP_MA_FLUIDE,GROUP_MA_INTERF),
90 MODELISATION = MODELISATION,
91 PHENOMENE = 'THERMIQUE' ), )
93 # ---------------------------------------------------------------
94 # commande AFFE_MODELE modele interface
95 __NOMINT=AFFE_MODELE( MAILLAGE = MAILLAGE,
96 AFFE = _F( GROUP_MA = GROUP_MA_INTERF,
97 MODELISATION = MODELISATION,
98 PHENOMENE = 'THERMIQUE' ), )
100 # ---------------------------------------------------------------
101 # commande AFFE_CHAR_THER condition de pression imposee
102 # en un point ou un groupe du fluide
105 for DDL in DDL_IMPO :
106 if DDL['PRES_FLUIDE']!=None :
108 if DDL['NOEUD'] !=None : mfact=_F(NOEUD =DDL['NOEUD'], TEMP=DDL['PRES_FLUIDE'])
109 if DDL['GROUP_NO']!=None : mfact=_F(GROUP_NO=DDL['GROUP_NO'],TEMP=DDL['PRES_FLUIDE'])
112 self.cr.fatal("<F> <MACRO_MATR_AJOU> PRES_FLUIDE obligatoire une fois")
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 self.cr.fatal("<F> <MACRO_MATR_AJOU> amortissement ajoute sur modele generalise non encore implante")
197 AMORAJ = CALC_MATR_AJOU(MODELE_FLUIDE = __NOMFLU,
198 MODELE_INTERFACE = __NOMINT,
200 CHAM_MATER = __NOMCMA,
201 OPTION = 'AMOR_AJOU',
206 # ---------------------------------------------------------------
207 # calcul de la rigidite ajoutee
208 if MATR_RIGI_AJOU!=None :
209 self.DeclareOut('RIGIAJ',MATR_RIGI_AJOU)
210 solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
212 if NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
213 if INFO !=None : mostcles['INFO'] =INFO
214 if MODE_MECA !=None : mostcles['MODE_MECA'] =MODE_MECA
215 elif DEPL_IMPO !=None : mostcles['CHAM_NO'] =DEPL_IMPO
217 self.cr.fatal("<F> <MACRO_MATR_AJOU> rigidite ajoutee sur modele generalise non encore implante")
221 RIGIAJ = CALC_MATR_AJOU(MODELE_FLUIDE = __NOMFLU,
222 MODELE_INTERFACE = __NOMINT,
224 CHAM_MATER = __NOMCMA,
225 OPTION = 'RIGI_AJOU',
230 # ---------------------------------------------------------------
231 # boucle sur le nombre de vecteurs a projeter, commande CALC_FORC_AJOU
233 for FORCAJ in FORC_AJOU:
234 self.DeclareOut('VECTAJ',FORCAJ['VECTEUR'])
235 solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
237 if NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
238 if MODE_MECA !=None : mostcles['MODE_MECA'] =MODE_MECA
239 elif MODELE_GENE !=None :
240 mostcles['MODELE_GENE'] =MODELE_GENE
241 mostcles['AVEC_MODE_STAT']=AVEC_MODE_STAT
242 mostcles['DIST_REFE'] =DIST_REFE
243 if NOEUD_DOUBLE !=None : mostcles['NOEUD_DOUBLE'] =NOEUD_DOUBLE
244 if MODE_STAT !=None :
245 mostcles['MODE_STAT'] =MODE_STAT
246 if FORCAJ['NOEUD'] !=None : mostcles['NOEUD'] =FORCAJ['NOEUD']
247 if FORCAJ['GROUP_NO'] !=None : mostcles['GROUP_NO'] =FORCAJ['GROUP_NO']
249 mostcles['MONO_APPUI'] =MONO_APPUI
251 VECTAJ = CALC_FORC_AJOU(DIRECTION = FORCAJ['DIRECTION'],
252 MODELE_FLUIDE = __NOMFLU,
253 MODELE_INTERFACE = __NOMINT,
255 CHAM_MATER = __NOMCMA,