1 #@ MODIF macr_cabri_calc_ops Macro DATE 09/05/2007 AUTEUR REZETTE C.REZETTE
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,
25 CHAR_MECA,RESU_THER,RESO_INTE,
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 (thermique)
117 for mat in affemateriau:
118 if mat['TOUT'] == None:
119 # Creation de mots-cles pour les AFFE_CHAR_MECA
120 motscles['AFFE'].append(_F(GROUP_MA=mat['GROUP_MA'],
121 MATER = mat['MATER'],
122 TEMP_REF = mat['TEMP_REF'],) )
124 # Creation de mots-cles pour les AFFE_CHAR_MECA
125 motscles['AFFE'].append(_F(TOUT='OUI',
126 MATER = mat['MATER'],
127 TEMP_REF = mat['TEMP_REF'],) )
129 __cham = AFFE_MATERIAU(MAILLAGE=mail,
131 AFFE=motscles['AFFE'],
134 #################################################################
135 ########## CONDITIONS AUX LIMITES THERMIQUES
136 #################################################################
137 # Recuperation des parametres thermiques
139 if DEFI_CHAR_THER != None:
140 temp_ini = DEFI_CHAR_THER['TEMP_INIT']
141 if DEFI_CHAR_THER['COEF_H_FLUI']!=None:
142 coef_int = DEFI_CHAR_THER['COEF_H_FLUI']
144 coef_int = DEFI_FONCTION(NOM_PARA='INST',
147 PROL_DROITE='CONSTANT',
148 PROL_GAUCHE='CONSTANT',);
149 if DEFI_CHAR_THER['TEMP_EXT_FLUI']!=None:
150 temp_int = DEFI_CHAR_THER['TEMP_EXT_FLUI']
152 temp_int = DEFI_FONCTION(NOM_PARA='INST',
153 VALE=(0.0,temp_ini,1.0,temp_ini,11.0,60.0,
154 600.0,60.0,610.0,280.0,1800.0,280.0,7200.0,280.0,),
155 PROL_DROITE='CONSTANT',
156 PROL_GAUCHE='CONSTANT',);
157 if DEFI_CHAR_THER['COEF_H_AIR']!=None:
158 coef_ext = DEFI_CHAR_THER['COEF_H_AIR']
160 coef_ext = DEFI_FONCTION(NOM_PARA='INST',
161 VALE=(0.0,1e-05,7200.0,1e-05,),
162 PROL_DROITE='CONSTANT',
163 PROL_GAUCHE='CONSTANT',);
165 if DEFI_CHAR_THER['TEMP_EXT_AIR']!=None:
166 temp_ext = DEFI_CHAR_THER['TEMP_EXT_AIR']
168 temp_ext = DEFI_FONCTION(NOM_PARA='INST',
169 VALE=(0.0,20.0,7200.0,20.0,),
170 PROL_DROITE='CONSTANT',
171 PROL_GAUCHE='CONSTANT',);
172 if DEFI_CHAR_THER['LIST_INST']!=None:
173 transi1 = DEFI_CHAR_THER['LIST_INST']
175 transi1 = DEFI_LIST_REEL(DEBUT=0.0,
176 INTERVALLE=(_F(JUSQU_A=1.0,
189 temp_ini = DEFI_CHAR_THER['TEMP_INIT']
190 coef_int = DEFI_FONCTION(NOM_PARA='INST',
193 PROL_DROITE='CONSTANT',
194 PROL_GAUCHE='CONSTANT',);
195 temp_int = DEFI_FONCTION(NOM_PARA='INST',
196 VALE=(0.0,temp_ini,1.0,temp_ini,11.0,60.0,
197 600.0,60.0,610.0,280.0,1800.0,280.0,7200.0,280.0,),
198 PROL_DROITE='CONSTANT',
199 PROL_GAUCHE='CONSTANT',);
200 coef_ext = DEFI_FONCTION(NOM_PARA='INST',
201 VALE=(0.0,1e-05,7200.0,1e-05,),
202 PROL_DROITE='CONSTANT',
203 PROL_GAUCHE='CONSTANT',);
204 temp_ext = DEFI_FONCTION(NOM_PARA='INST',
205 VALE=(0.0,20.0,7200.0,20.0,),
206 PROL_DROITE='CONSTANT',
207 PROL_GAUCHE='CONSTANT',);
208 transi1 = DEFI_LIST_REEL(DEBUT=0.0,
209 INTERVALLE=(_F(JUSQU_A=1.0,
222 if CHAR_THER != None:
224 if m['TYPE']=="BRIDE_FLUIDE":
225 self.DeclareOut('cl_th1',m['CHARGE'])
226 if m['TYPE']=="BRIDE_AIR":
227 self.DeclareOut('cl_th2',m['CHARGE'])
228 if m['TYPE']=="ECROU_GOUJON":
229 self.DeclareOut('cl_th3',m['CHARGE'])
230 if m['TYPE']=="BRIDE_JOINT":
231 self.DeclareOut('cl_th4',m['CHARGE'])
233 # Echanges thermiques internes entre le fluide et la bride
234 cl_th1=AFFE_CHAR_THER_F(MODELE=modther,
235 ECHANGE=_F(GROUP_MA = 'M_INT',
237 TEMP_EXT = temp_int,),);
239 # Echanges thermiques externes entre bride et air ambiant
240 cl_th2=AFFE_CHAR_THER_F(MODELE=modther,
241 ECHANGE=_F(GROUP_MA='M_EXT',
243 TEMP_EXT=temp_ext,),);
245 # Echanges thermiques entre ecrou et goujon
246 cl_th3=AFFE_CHAR_THER(MODELE=modther,
247 LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
255 # Echanges thermiques entre bride et joint
256 cl_th4=AFFE_CHAR_THER(MODELE=modther,
257 LIAISON_GROUP=_F(GROUP_NO_1='N_SCBJ',
267 #################################################################
268 ########## CALCUL THERMIQUE
269 #################################################################
270 if RESU_THER != None:
271 self.DeclareOut('resuther',RESU_THER)
273 resuther=THER_LINEAIRE(MODELE=modther,
275 EXCIT=(_F(CHARGE=cl_th1,),
278 _F(CHARGE=cl_th4,),),
279 INCREMENT=_F(LIST_INST=transi1,),
280 TEMP_INIT=_F(VALE=temp_ini,),
281 TITRE='CABRI THERMIQUE &DATE &HEURE',);
283 # Affectation des materiaux (mécanique)
284 if CHAM_MATER != None:
285 self.DeclareOut('_chamt',CHAM_MATER)
288 motscles['AFFE_VARC']=[]
289 for mat in affemateriau:
290 if mat['TOUT'] == None:
291 # Creation de mots-cles pour les AFFE_CHAR_MECA
292 motscles['AFFE'].append(_F(GROUP_MA=mat['GROUP_MA'],
293 MATER = mat['MATER'],) )
294 motscles['AFFE_VARC'].append(_F(NOM_VARC='TEMP',GROUP_MA=mat['GROUP_MA'],
295 EVOL=resuther,NOM_CHAM='TEMP',
296 VALE_REF = mat['TEMP_REF'],))
298 # Creation de mots-cles pour les AFFE_CHAR_MECA
299 motscles['AFFE'].append(_F(TOUT='OUI',
300 MATER = mat['MATER'],
301 TEMP_REF = mat['TEMP_REF'],) )
302 motscles['AFFE_VARC'].append(_F(NOM_VARC='TEMP',TOUT='OUI',
303 EVOL=resuther,NOM_CHAM='TEMP',
304 VALE_REF = mat['TEMP_REF'],))
306 _chamt = AFFE_MATERIAU(MAILLAGE=mail,
308 AFFE=motscles['AFFE'],
309 AFFE_VARC=motscles['AFFE_VARC'],
312 #################################################################
313 ########## CONDITIONS AUX LIMITES MECANIQUES
314 #################################################################
315 # Recuperation des parametres mecaniques
316 if DEFI_CHAR_MECA != None:
317 if DEFI_CHAR_MECA['PRETENS']!=None:
318 f_pret = DEFI_CHAR_MECA['PRETENS']
320 f_pret=DEFI_FONCTION(NOM_PARA='INST',
321 VALE=(0.0,0.0,1.0,-0.02,),
322 PROL_DROITE='CONSTANT',
323 PROL_GAUCHE='CONSTANT',);
324 if DEFI_CHAR_MECA['PRES_REP']!=None:
325 pre_int = DEFI_CHAR_MECA['PRES_REP']
327 pre_int = DEFI_FONCTION(NOM_PARA='INST',
328 VALE=(0.0,0.0,1.0,0.0,11.0,16.0,),
329 PROL_DROITE='CONSTANT',
330 PROL_GAUCHE='CONSTANT',);
331 if DEFI_CHAR_MECA['EFFE_FOND']!=None:
332 eff_fond = DEFI_CHAR_MECA['EFFE_FOND']
334 eff_fond=DEFI_FONCTION(NOM_PARA='INST',
335 VALE=(0.0,-0.0,1.0,-0.0,11.0,-20.607059,),
336 PROL_DROITE='CONSTANT',
337 PROL_GAUCHE='CONSTANT',);
339 f_pret=DEFI_FONCTION(NOM_PARA='INST',
340 VALE=(0.0,0.0,1.0,-0.02,),
341 PROL_DROITE='CONSTANT',
342 PROL_GAUCHE='CONSTANT',);
344 pre_int = DEFI_FONCTION(NOM_PARA='INST',
345 VALE=(0.0,0.0,1.0,0.0,11.0,16.0,),
346 PROL_DROITE='CONSTANT',
347 PROL_GAUCHE='CONSTANT',);
349 eff_fond=DEFI_FONCTION(NOM_PARA='INST',
350 VALE=(0.0,-0.0,1.0,-0.0,11.0,-20.607059,),
351 PROL_DROITE='CONSTANT',
352 PROL_GAUCHE='CONSTANT',);
354 if CHAR_MECA != None:
356 if m['TYPE']=="BLOC_BAS_GOUJ":
357 self.DeclareOut('cl_me1',m['CHARGE'])
358 if m['TYPE']=="BLOC_BAS_JOINT":
359 self.DeclareOut('cl_me2',m['CHARGE'])
360 if m['TYPE']=="BLOC_LAT_ALES":
361 self.DeclareOut('cl_me3',m['CHARGE'])
362 if m['TYPE']=="BLOC_LAT_NALES":
363 self.DeclareOut('cl_me4',m['CHARGE'])
364 if m['TYPE']=="PLAN_TUBE":
365 self.DeclareOut('cl_me5',m['CHARGE'])
366 if m['TYPE']=="PRES_FLU":
367 self.DeclareOut('cl_me6',m['CHARGE'])
368 if m['TYPE']=="EFFET_FOND":
369 self.DeclareOut('cl_me7',m['CHARGE'])
370 if m['TYPE']=="CONT_JOINT":
371 self.DeclareOut('cl_me8',m['CHARGE'])
372 if m['TYPE']=="SERR_ECROU_1":
373 self.DeclareOut('cl_me10',m['CHARGE'])
374 if m['TYPE']=="SERR_ECROU_2":
375 self.DeclareOut('cl_me11',m['CHARGE'])
378 # Blocage bas du goujon
379 cl_me1=AFFE_CHAR_MECA(MODELE=modmeca,
380 DDL_IMPO=_F(GROUP_NO='N_M_GOU',
383 # Blocage bas du joint
384 cl_me2=AFFE_CHAR_MECA(MODELE=modmeca,
385 DDL_IMPO=_F(GROUP_NO='N_M_JOI',
389 # Blocage lateral, face laterale avec alesage
390 cl_me3=AFFE_CHAR_MECA(MODELE=modmeca,
391 DDL_IMPO=_F(GROUP_NO='N_M_L_AA',
395 # Face laterale sans alesage
396 cl_me4=AFFE_CHAR_MECA(MODELE=modmeca,
397 FACE_IMPO=_F(GROUP_MA='M_L_SA',
401 # Condition de planeite de la face de coupe du tube
402 cl_me5=AFFE_CHAR_MECA(MODELE=modmeca,
403 LIAISON_UNIF=_F(GROUP_MA='M_TUB',
406 # Pression due au fluide
407 cl_me6=AFFE_CHAR_MECA_F(MODELE=modmeca,
408 PRES_REP=_F(GROUP_MA='M_INT',
413 cl_me7=AFFE_CHAR_MECA_F(MODELE=modmeca,
414 PRES_REP=_F(GROUP_MA='M_TUB',
418 # Contact zone de joint
419 cl_me8=AFFE_CHAR_MECA(MODELE=modmeca,
420 CONTACT=_F(GROUP_MA_MAIT='SCBJ',
421 GROUP_MA_ESCL='SCJB',),
424 # Serrage ecrou/goujon (pre-tensionnement)
425 cl_me10=AFFE_CHAR_MECA_F(MODELE=modmeca,
426 LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
435 cl_me11=AFFE_CHAR_MECA(MODELE=modmeca,
436 LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
446 #################################################################
447 ########## CALCUL MECANIQUE
448 #################################################################
449 # Options de convergence
450 solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
452 # Elimination des valeurs "None"
453 for i in solveur.keys():
454 if solveur[i]==None : del solveur[i]
457 transi2 = DEFI_LIST_REEL(DEBUT=0.0,
458 INTERVALLE=(_F(JUSQU_A=1.0,
471 # Options d'incrementation
472 if INCREMENT != None:
473 if INCREMENT['LIST_INST'] != None:
474 listinst = INCREMENT['LIST_INST']
478 increment=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
480 # Elimination des valeurs "None"
481 for i in increment.keys():
482 if increment[i]==None : del increment[i]
484 increment['LIST_INST'] = listinst
489 LIST_INST = listinst,
493 newton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
494 # Elimination des valeurs "None"
495 for i in newton.keys():
496 if newton[i]==None : del newton[i]
498 # Options de convergence
499 convergence=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
500 # Elimination des valeurs "None"
501 for i in convergence.keys():
502 if convergence[i]==None : del convergence[i]
504 # Options de comportement
505 # Type incremental (=1) ou elastique (=0)
509 if relation == 'VMIS_ISOT_TRAC':
518 # Parametres du calcul
520 resumeca=STAT_NON_LINE(MODELE=modmeca,
522 EXCIT=(_F(CHARGE=cl_me1,),
534 COMP_INCR =_F(RELATION=relation,RESO_INTE=resointe),
536 INCREMENT = increment,
537 CONVERGENCE = convergence,
538 TITRE='CABRI THERMOM\xe9CANIQUE &DATE &HEURE',);
540 resumeca=STAT_NON_LINE(MODELE=modmeca,
542 EXCIT=(_F(CHARGE=cl_me1,),
554 COMP_ELAS =_F(RELATION=relation,RESO_INTE=resointe),
556 INCREMENT = increment,
557 CONVERGENCE = convergence,
558 TITRE='CABRI THERMOM\xe9CANIQUE &DATE &HEURE',);