1 #@ MODIF macr_cabri_calc_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 - 2003 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 # ======================================================================
24 def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER,
26 AFFE_MATERIAU,DEFI_CHAR_THER,DEFI_CHAR_MECA,RELATION,SOLVEUR,CONVERGENCE,NEWTON,
27 INCREMENT,CHAM_MATER,**args):
29 Ecriture de la macro MACR_CABRI_CALC
32 #################################################################
33 ########## PREPARATION MACRO
34 #################################################################
40 # On met certains mots-clefs dans des variables locales pour les proteger
41 affemateriau = AFFE_MATERIAU
45 # On importe les definitions des commandes a utiliser dans la macro
46 # Le nom de la variable doit etre obligatoirement le nom de la commande
47 DEFI_GROUP = self.get_cmd('DEFI_GROUP')
48 AFFE_MATERIAU = self.get_cmd('AFFE_MATERIAU')
49 AFFE_MODELE = self.get_cmd('AFFE_MODELE')
50 MODI_MAILLAGE = self.get_cmd('MODI_MAILLAGE')
51 AFFE_CHAR_THER_F = self.get_cmd('AFFE_CHAR_THER_F')
52 AFFE_CHAR_THER = self.get_cmd('AFFE_CHAR_THER')
53 AFFE_CHAR_MECA_F = self.get_cmd('AFFE_CHAR_MECA_F')
54 AFFE_CHAR_MECA = self.get_cmd('AFFE_CHAR_MECA')
55 DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
56 DEFI_LIST_REEL = self.get_cmd('DEFI_LIST_REEL')
57 THER_LINEAIRE = self.get_cmd('THER_LINEAIRE')
58 STAT_NON_LINE = self.get_cmd('STAT_NON_LINE')
60 # La macro compte pour 1 dans la numerotation des commandes
63 # Le concept sortant (de type evol_noli) est nomme 'resumeca' dans
64 # le contexte de la macro
65 self.DeclareOut('resumeca',self.sd)
66 self.DeclareOut('mail',MAILLAGE)
68 #################################################################
69 ########## PREPARATION DES MODELES
70 #################################################################
72 # Definition des groupes
73 mail=DEFI_GROUP(reuse =mail,MAILLAGE=mail,
75 _F(GROUP_MA='M_GOU',NOM='N_M_GOU',),
76 _F(GROUP_MA='M_JOI',NOM='N_M_JOI',),
77 _F(GROUP_MA='SCBJ',NOM='N_SCBJ',),
78 _F(GROUP_MA='SCJB',NOM='N_SCJB',),
79 _F(GROUP_MA='M_L_AA',NOM='N_M_L_AA',),
80 _F(GROUP_MA='SCEG',NOM='N_SCEG',),
81 _F(GROUP_MA='SCGE',NOM='N_SCGE',),),)
83 # Creation du modele thermique
84 if MODELE_THER != None:
85 self.DeclareOut('modther',MODELE_THER)
87 modther=AFFE_MODELE(MAILLAGE=mail,
88 AFFE=_F(GROUP_MA=('VTOT','M_GOU','M_TUB','M_JOI','SCBJ','SCJB',
89 'M_L_AA','M_INT','M_L_SA','M_EXT','SCEG','SCGE',),
90 PHENOMENE='THERMIQUE',
91 MODELISATION='3D_DIAG',),
94 # Creation du modele mecanique
95 if MODELE_MECA != None:
96 self.DeclareOut('modmeca',MODELE_MECA)
98 modmeca = AFFE_MODELE(MAILLAGE=mail,
99 AFFE=_F(GROUP_MA=('VTOT','M_GOU','M_TUB','M_JOI','SCBJ','SCJB',
100 'M_L_AA','M_L_SA','SCEG','SCGE','M_INT','M_EXT',),
101 PHENOMENE='MECANIQUE',
105 # Orientation des mailles
106 mail=MODI_MAILLAGE(reuse =mail,
108 ORIE_PEAU_3D=(_F(GROUP_MA=('M_INT','M_TUB',),),
109 _F(GROUP_MA=('M_L_AA','M_JOI','M_L_SA',),),),
114 # Affectation des materiaux
115 if CHAM_MATER != None:
116 self.DeclareOut('_cham',CHAM_MATER)
119 for mat in affemateriau:
120 if mat['TOUT'] == None:
121 # Creation de mots-cles pour les AFFE_CHAR_MECA
122 motscles['AFFE'].append(_F(GROUP_MA=mat['GROUP_MA'],
123 MATER = mat['MATER'],
124 TEMP_REF = mat['TEMP_REF'],) )
126 # Creation de mots-cles pour les AFFE_CHAR_MECA
127 motscles['AFFE'].append(_F(TOUT='OUI',
128 MATER = mat['MATER'],
129 TEMP_REF = mat['TEMP_REF'],) )
131 _cham = AFFE_MATERIAU(MAILLAGE=mail,
133 AFFE=motscles['AFFE'],
136 #################################################################
137 ########## CONDITIONS AUX LIMITES THERMIQUES
138 #################################################################
139 # Recuperation des parametres thermiques
141 if DEFI_CHAR_THER != None:
142 temp_ini = DEFI_CHAR_THER['TEMP_INIT']
143 if DEFI_CHAR_THER['COEF_H_FLUI']!=None:
144 coef_int = DEFI_CHAR_THER['COEF_H_FLUI']
146 coef_int = DEFI_FONCTION(NOM_PARA='INST',
149 PROL_DROITE='CONSTANT',
150 PROL_GAUCHE='CONSTANT',);
151 if DEFI_CHAR_THER['TEMP_EXT_FLUI']!=None:
152 temp_int = DEFI_CHAR_THER['TEMP_EXT_FLUI']
154 temp_int = DEFI_FONCTION(NOM_PARA='INST',
155 VALE=(0.0,temp_ini,1.0,temp_ini,11.0,60.0,
156 600.0,60.0,610.0,280.0,1800.0,280.0,7200.0,280.0,),
157 PROL_DROITE='CONSTANT',
158 PROL_GAUCHE='CONSTANT',);
159 if DEFI_CHAR_THER['COEF_H_AIR']!=None:
160 coef_ext = DEFI_CHAR_THER['COEF_H_AIR']
162 coef_ext = DEFI_FONCTION(NOM_PARA='INST',
163 VALE=(0.0,1e-05,7200.0,1e-05,),
164 PROL_DROITE='CONSTANT',
165 PROL_GAUCHE='CONSTANT',);
167 if DEFI_CHAR_THER['TEMP_EXT_AIR']!=None:
168 temp_ext = DEFI_CHAR_THER['TEMP_EXT_AIR']
170 temp_ext = DEFI_FONCTION(NOM_PARA='INST',
171 VALE=(0.0,20.0,7200.0,20.0,),
172 PROL_DROITE='CONSTANT',
173 PROL_GAUCHE='CONSTANT',);
174 if DEFI_CHAR_THER['LIST_INST']!=None:
175 transi1 = DEFI_CHAR_THER['LIST_INST']
177 transi1 = DEFI_LIST_REEL(DEBUT=0.0,
178 INTERVALLE=(_F(JUSQU_A=1.0,
191 temp_ini = DEFI_CHAR_THER['TEMP_INIT']
192 coef_int = DEFI_FONCTION(NOM_PARA='INST',
195 PROL_DROITE='CONSTANT',
196 PROL_GAUCHE='CONSTANT',);
197 temp_int = DEFI_FONCTION(NOM_PARA='INST',
198 VALE=(0.0,temp_ini,1.0,temp_ini,11.0,60.0,
199 600.0,60.0,610.0,280.0,1800.0,280.0,7200.0,280.0,),
200 PROL_DROITE='CONSTANT',
201 PROL_GAUCHE='CONSTANT',);
202 coef_ext = DEFI_FONCTION(NOM_PARA='INST',
203 VALE=(0.0,1e-05,7200.0,1e-05,),
204 PROL_DROITE='CONSTANT',
205 PROL_GAUCHE='CONSTANT',);
206 temp_ext = DEFI_FONCTION(NOM_PARA='INST',
207 VALE=(0.0,20.0,7200.0,20.0,),
208 PROL_DROITE='CONSTANT',
209 PROL_GAUCHE='CONSTANT',);
210 transi1 = DEFI_LIST_REEL(DEBUT=0.0,
211 INTERVALLE=(_F(JUSQU_A=1.0,
224 if CHAR_THER != None:
226 if m['TYPE']=="BRIDE_FLUIDE":
227 self.DeclareOut('cl_th1',m['CHARGE'])
228 if m['TYPE']=="BRIDE_AIR":
229 self.DeclareOut('cl_th2',m['CHARGE'])
230 if m['TYPE']=="ECROU_GOUJON":
231 self.DeclareOut('cl_th3',m['CHARGE'])
232 if m['TYPE']=="BRIDE_JOINT":
233 self.DeclareOut('cl_th4',m['CHARGE'])
235 # Echanges thermiques internes entre le fluide et la bride
236 cl_th1=AFFE_CHAR_THER_F(MODELE=modther,
237 ECHANGE=_F(GROUP_MA = 'M_INT',
239 TEMP_EXT = temp_int,),);
241 # Echanges thermiques externes entre bride et air ambiant
242 cl_th2=AFFE_CHAR_THER_F(MODELE=modther,
243 ECHANGE=_F(GROUP_MA='M_EXT',
245 TEMP_EXT=temp_ext,),);
247 # Echanges thermiques entre ecrou et goujon
248 cl_th3=AFFE_CHAR_THER(MODELE=modther,
249 LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
257 # Echanges thermiques entre bride et joint
258 cl_th4=AFFE_CHAR_THER(MODELE=modther,
259 LIAISON_GROUP=_F(GROUP_NO_1='N_SCBJ',
269 #################################################################
270 ########## CALCUL THERMIQUE
271 #################################################################
272 if RESU_THER != None:
273 self.DeclareOut('resuther',RESU_THER)
275 resuther=THER_LINEAIRE(MODELE=modther,
277 EXCIT=(_F(CHARGE=cl_th1,),
280 _F(CHARGE=cl_th4,),),
281 INCREMENT=_F(LIST_INST=transi1,),
282 TEMP_INIT=_F(VALE=temp_ini,),
283 TITRE='CABRI THERMIQUE &DATE &HEURE',);
285 #################################################################
286 ########## CONDITIONS AUX LIMITES MECANIQUES
287 #################################################################
288 # Recuperation des parametres mecaniques
289 if DEFI_CHAR_MECA != None:
290 if DEFI_CHAR_MECA['PRETENS']!=None:
291 f_pret = DEFI_CHAR_MECA['PRETENS']
293 f_pret=DEFI_FONCTION(NOM_PARA='INST',
294 VALE=(0.0,0.0,1.0,-0.02,),
295 PROL_DROITE='CONSTANT',
296 PROL_GAUCHE='CONSTANT',);
297 if DEFI_CHAR_MECA['PRES_REP']!=None:
298 pre_int = DEFI_CHAR_MECA['PRES_REP']
300 pre_int = DEFI_FONCTION(NOM_PARA='INST',
301 VALE=(0.0,0.0,1.0,0.0,11.0,16.0,),
302 PROL_DROITE='CONSTANT',
303 PROL_GAUCHE='CONSTANT',);
304 if DEFI_CHAR_MECA['EFFE_FOND']!=None:
305 eff_fond = DEFI_CHAR_MECA['EFFE_FOND']
307 eff_fond=DEFI_FONCTION(NOM_PARA='INST',
308 VALE=(0.0,-0.0,1.0,-0.0,11.0,-20.607059,),
309 PROL_DROITE='CONSTANT',
310 PROL_GAUCHE='CONSTANT',);
312 f_pret=DEFI_FONCTION(NOM_PARA='INST',
313 VALE=(0.0,0.0,1.0,-0.02,),
314 PROL_DROITE='CONSTANT',
315 PROL_GAUCHE='CONSTANT',);
317 pre_int = DEFI_FONCTION(NOM_PARA='INST',
318 VALE=(0.0,0.0,1.0,0.0,11.0,16.0,),
319 PROL_DROITE='CONSTANT',
320 PROL_GAUCHE='CONSTANT',);
322 eff_fond=DEFI_FONCTION(NOM_PARA='INST',
323 VALE=(0.0,-0.0,1.0,-0.0,11.0,-20.607059,),
324 PROL_DROITE='CONSTANT',
325 PROL_GAUCHE='CONSTANT',);
327 if CHAR_MECA != None:
329 if m['TYPE']=="BLOC_BAS_GOUJ":
330 self.DeclareOut('cl_me1',m['CHARGE'])
331 if m['TYPE']=="BLOC_BAS_JOINT":
332 self.DeclareOut('cl_me2',m['CHARGE'])
333 if m['TYPE']=="BLOC_LAT_ALES":
334 self.DeclareOut('cl_me3',m['CHARGE'])
335 if m['TYPE']=="BLOC_LAT_NALES":
336 self.DeclareOut('cl_me4',m['CHARGE'])
337 if m['TYPE']=="PLAN_TUBE":
338 self.DeclareOut('cl_me5',m['CHARGE'])
339 if m['TYPE']=="PRES_FLU":
340 self.DeclareOut('cl_me6',m['CHARGE'])
341 if m['TYPE']=="EFFET_FOND":
342 self.DeclareOut('cl_me7',m['CHARGE'])
343 if m['TYPE']=="CONT_JOINT":
344 self.DeclareOut('cl_me8',m['CHARGE'])
345 if m['TYPE']=="DEFO_THER":
346 self.DeclareOut('cl_me9',m['CHARGE'])
347 if m['TYPE']=="SERR_ECROU_1":
348 self.DeclareOut('cl_me10',m['CHARGE'])
349 if m['TYPE']=="SERR_ECROU_2":
350 self.DeclareOut('cl_me11',m['CHARGE'])
353 # Blocage bas du goujon
354 cl_me1=AFFE_CHAR_MECA(MODELE=modmeca,
355 DDL_IMPO=_F(GROUP_NO='N_M_GOU',
358 # Blocage bas du joint
359 cl_me2=AFFE_CHAR_MECA(MODELE=modmeca,
360 DDL_IMPO=_F(GROUP_NO='N_M_JOI',
364 # Blocage lateral, face laterale avec alesage
365 cl_me3=AFFE_CHAR_MECA(MODELE=modmeca,
366 DDL_IMPO=_F(GROUP_NO='N_M_L_AA',
370 # Face laterale sans alesage
371 cl_me4=AFFE_CHAR_MECA(MODELE=modmeca,
372 FACE_IMPO=_F(GROUP_MA='M_L_SA',
376 # Condition de planeite de la face de coupe du tube
377 cl_me5=AFFE_CHAR_MECA(MODELE=modmeca,
378 LIAISON_UNIF=_F(GROUP_MA='M_TUB',
381 # Pression due au fluide
382 cl_me6=AFFE_CHAR_MECA_F(MODELE=modmeca,
383 PRES_REP=_F(GROUP_MA='M_INT',
388 cl_me7=AFFE_CHAR_MECA_F(MODELE=modmeca,
389 PRES_REP=_F(GROUP_MA='M_TUB',
393 # Contact zone de joint
394 cl_me8=AFFE_CHAR_MECA(MODELE=modmeca,
395 CONTACT=_F(GROUP_MA_MAIT='SCBJ',
396 GROUP_MA_ESCL='SCJB',),
398 # Deformation thermique
399 cl_me9=AFFE_CHAR_MECA( MODELE=modmeca,
400 TEMP_CALCULEE=resuther,
403 # Serrage ecrou/goujon (pre-tensionnement)
404 cl_me10=AFFE_CHAR_MECA_F(MODELE=modmeca,
405 LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
414 cl_me11=AFFE_CHAR_MECA(MODELE=modmeca,
415 LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
425 #################################################################
426 ########## CALCUL MECANIQUE
427 #################################################################
428 # Options de convergence
429 solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
431 # Elimination des valeurs "None"
432 for i in solveur.keys():
433 if solveur[i]==None : del solveur[i]
436 transi2 = DEFI_LIST_REEL(DEBUT=0.0,
437 INTERVALLE=(_F(JUSQU_A=1.0,
450 # Options d'incrementation
451 if INCREMENT != None:
452 if INCREMENT['LIST_INST'] != None:
453 listinst = INCREMENT['LIST_INST']
457 increment=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
459 # Elimination des valeurs "None"
460 for i in increment.keys():
461 if increment[i]==None : del increment[i]
463 increment['LIST_INST'] = listinst
468 LIST_INST = listinst,
472 newton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
473 # Elimination des valeurs "None"
474 for i in newton.keys():
475 if newton[i]==None : del newton[i]
477 # Options de convergence
478 convergence=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
479 # Elimination des valeurs "None"
480 for i in convergence.keys():
481 if convergence[i]==None : del convergence[i]
483 # Options de comportement
484 # Type incremental (=1) ou elastique (=0)
488 if relation == 'VMIS_ISOT_TRAC':
497 # Parametres du calcul
499 resumeca=STAT_NON_LINE(MODELE=modmeca,
501 EXCIT=(_F(CHARGE=cl_me1,),
514 COMP_INCR =_F(RELATION=relation,),
516 INCREMENT = increment,
517 CONVERGENCE = convergence,
518 TITRE='CABRI THERMOM\xe9CANIQUE &DATE &HEURE',);
520 resumeca=STAT_NON_LINE(MODELE=modmeca,
522 EXCIT=(_F(CHARGE=cl_me1,),
535 COMP_ELAS =_F(RELATION=relation,),
537 INCREMENT = increment,
538 CONVERGENCE = convergence,
539 TITRE='CABRI THERMOM\xe9CANIQUE &DATE &HEURE',);