1 #@ MODIF calc_ecrevisse_ops Macro DATE 05/05/2010 AUTEUR MACOCCO K.MACOCCO
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2009 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 # ------------------OUTILS ------------------------------
24 # Determination de la direction de la fissure
25 # a partir du points initial et final :
26 # theta : angle par rapport a la verticale ascendente (degres)
27 # positif si sens horaire
29 # beta : angle par rapport a la horizontale (degres)
30 # positif si sens anti-horaire
32 def dirfiss(Xa,Ya,Xb,Yb) :
33 from math import atan2, degrees
54 except ZeroDivisionError :
68 if (abs(beta)<45. or abs(beta)>135.) :
73 if (round(abs(beta))==0. or round(abs(beta))==180.):
75 elif (round(abs(beta))==90.):
80 return DIR_FISS, DIR_PREV, beta, theta, xi, yi
83 # Determination de l ouverture de la fissure
84 def ouvFiss(DIR_FISS,beta,Xa,Ya,Xb,Yb) :
85 from math import sin, cos, sqrt, radians
88 Ouv = map(lambda y1,y2: abs(y2-y1),Ya,Yb)
89 Gli = map(lambda x1,x2: abs(x2-x1),Xa,Xb)
91 Ouv = map(lambda x1,x2: abs(x2-x1),Xa,Xb)
92 Gli = map(lambda y1,y2: abs(y2-y1),Ya,Yb)
94 xi = (Xa[0]+Xb[0])*0.5
95 yi = (Ya[0]+Yb[0])*0.5
96 Xa1 = [x-y for (x,y) in zip(Xa,[xi]*len(Xa))]
97 Ya1 = [x-y for (x,y) in zip(Ya,[yi]*len(Ya))]
98 Xb1 = [x-y for (x,y) in zip(Xb,[xi]*len(Xb))]
99 Yb1 = [x-y for (x,y) in zip(Yb,[yi]*len(Yb))]
100 Xa2 = [ x*cos(radians(beta)) + y*sin(radians(beta)) for (x,y) in zip(Xa,Ya)]
101 Ya2 = [-x*sin(radians(beta)) + y*cos(radians(beta)) for (x,y) in zip(Xa,Ya)]
102 Xb2 = [ x*cos(radians(beta)) + y*sin(radians(beta)) for (x,y) in zip(Xb,Yb)]
103 Yb2 = [-x*sin(radians(beta)) + y*cos(radians(beta)) for (x,y) in zip(Xb,Yb)]
104 Ouv = map(lambda x,y: abs(y-x), Ya2, Yb2)
105 Gli = map(lambda x,y: abs(y-x), Xa2, Xb2)
112 # ------------------DEBUT MACRO ------------------------------
113 # Debut de la macro, on impose en parametre les donnees placer
114 # dans T_EC, l'appel a ecrevisse
115 def calc_ecrevisse_ops(self,
137 Procedure de couplage Aster-Ecrevisse
138 Recuperation du profil de la fissure , appel de MACR_ECRE_CALC,
139 creation des tableaux de resultats et des chargements pour AsterGeneration par Aster
142 import os, string, types, shutil
145 from Noyau.N_utils import AsType
146 from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
147 from Utilitai.Table import Table, merge
148 from copy import copy
149 from math import atan, pi, sqrt, atan2, degrees, sin, cos
154 self.DeclareOut('__TAB',TABLE)
155 self.DeclareOut('__ECR_F1',CHARGE_THER1)
156 self.DeclareOut('__ECR_F2',CHARGE_THER2)
157 self.DeclareOut('__ECR_P',CHARGE_MECA)
158 self.DeclareOut('__DEB',DEBIT)
160 # La macro compte pour 1 dans la numerotation des commandes
166 # Fonctionnalitees cachees :
167 # 1- oldVersion : "=True" permet de retourner un chargement thermique defini selon l'ancien mode (flux thermique)
168 # ATTENTION!! L'ancienne version ne marche que avec la fissure orientee dans la direction Y,
169 # et avec le point initila en y=0!!
170 # 2- chargeLin : "=True" permet d'appliquer le chargement d'Ecrevisse avec interpolation lineaire sur le mailles,
171 # et non constant par maille, comme c'est par defaut
176 # Parametres developpeur
177 tmp_ecrevisse = "tmp_ecrevisse"
185 # IMPORTATION DE COMMANDES ASTER
186 DEFI_GROUP = self.get_cmd("DEFI_GROUP")
187 POST_RELEVE_T = self.get_cmd("POST_RELEVE_T")
188 MACR_ECRE_CALC = self.get_cmd("MACR_ECRE_CALC")
189 IMPR_TABLE = self.get_cmd("IMPR_TABLE")
190 DETRUIRE = self.get_cmd("DETRUIRE")
191 IMPR_CO = self.get_cmd("IMPR_CO")
192 DEFI_FONCTION = self.get_cmd("DEFI_FONCTION")
193 CREA_TABLE = self.get_cmd("CREA_TABLE")
194 IMPR_TABLE = self.get_cmd("IMPR_TABLE")
195 CO = self.get_cmd("CO")
196 AFFE_CHAR_THER_F = self.get_cmd("AFFE_CHAR_THER_F")
197 AFFE_CHAR_MECA_F = self.get_cmd("AFFE_CHAR_MECA_F")
198 DEFI_FICHIER = self.get_cmd("DEFI_FICHIER")
199 DEFI_CONSTANTE = self.get_cmd("DEFI_CONSTANTE")
201 # RECUPERATION DES MOTS-CLES FACTEURS
202 dRESULTAT=RESULTAT[0].cree_dict_valeurs(RESULTAT[0].mc_liste)
203 for i in dRESULTAT.keys():
204 if dRESULTAT[i]==None : del dRESULTAT[i]
206 dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
207 for i in dECOULEMENT.keys():
208 if dECOULEMENT[i]==None : del dECOULEMENT[i]
210 dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
211 for i in dMODELE_ECRE.keys():
212 if dMODELE_ECRE[i]==None : dMODELE_ECRE[i]=None #del dMODELE_ECRE[i]
214 dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
215 for i in dCONVERGENCE.keys():
216 if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
220 _l_inst = dRESULTAT['MECANIQUE'].LIST_VARI_ACCES()
221 if dRESULTAT.has_key('INST'):
222 Inst_Ecrevisse = dRESULTAT['INST']
227 # INITIATION DES CHARGEMENTS ECREVISSE --> ASTER :
228 # liste des mots cles facteurs de PRES_REP pour chaque fissure
231 # liste des mots cles facteurs de FLUX_REP pour le flux F1/F2
232 # de chaque fissure (soit sur les deux levres :GROUP_MA[0], GROUP_MA[1])
236 # liste des mots cles facteurs de ECHANGE pour le flux F1/F2
237 # de chaque fissure (soit sur les deux levres :GROUP_MA[0], GROUP_MA[1])
243 # ON CREE LES GROUP_NO ORDONNES DES LEVRES DE FISSURE
244 # Liste des noms des groupes de noeuds du maillage :
245 _lgno = map(lambda x: x[0], MODELE_MECA['MAILLAGE'].LIST_GROUP_NO() )
247 for k, fissure in enumerate(FISSURE):
248 dFISSURE=fissure.cree_dict_valeurs(fissure.mc_liste)
249 for i in dFISSURE.keys():
250 if dFISSURE[i]==None : del dFISSURE[i]
252 # On cree les group_no correspondant aux group_ma des levres de la fissure dans le cas ou ils n'existent pas deja
253 if not dFISSURE['GROUP_MA'][0] in _lgno:
254 DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
255 MAILLAGE=MODELE_MECA['MAILLAGE'],
256 CREA_GROUP_NO=_F(GROUP_MA=(dFISSURE['GROUP_MA'][0]),),);
258 if not dFISSURE['GROUP_MA'][1] in _lgno:
259 DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
260 MAILLAGE=MODELE_MECA['MAILLAGE'],
261 CREA_GROUP_NO=_F(GROUP_MA=(dFISSURE['GROUP_MA'][1]),),);
263 # Test sur le nombre de caracteres du nom des group_ma
264 if (len(dFISSURE['GROUP_MA'][0]) >7 or len(dFISSURE['GROUP_MA'][1]) >7):
267 # Creation des group_no ordonnes des levres des fissures
268 _nom_gno_1 = '_' + dFISSURE['GROUP_MA'][0]
269 if not _nom_gno_1 in _lgno:
270 DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
271 MAILLAGE=MODELE_MECA['MAILLAGE'],
272 CREA_GROUP_NO=_F(OPTION='SEGM_DROI_ORDO',
274 GROUP_NO=dFISSURE['GROUP_MA'][0],
275 GROUP_NO_ORIG=dFISSURE['GROUP_NO_ORIG'][0],
276 GROUP_NO_EXTR=dFISSURE['GROUP_NO_EXTR'][0],
281 _nom_gno_2 = '_' + dFISSURE['GROUP_MA'][1]
282 if not _nom_gno_2 in _lgno:
283 DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
284 MAILLAGE=MODELE_MECA['MAILLAGE'],
285 CREA_GROUP_NO=_F(OPTION='SEGM_DROI_ORDO',
287 GROUP_NO=dFISSURE['GROUP_MA'][1],
288 GROUP_NO_ORIG=dFISSURE['GROUP_NO_ORIG'][1],
289 GROUP_NO_EXTR=dFISSURE['GROUP_NO_EXTR'][1],
296 # EXTRACTIONS DE QUANTITES NECESSAIRES DES RESULTATS THERMIQUE ET MECANIQUE
297 # On cree les chargements Aster --> Ecrevisse :
298 # ouverture de fissure et temperature sur le materiau
300 # premiere levre de fissure
301 _T_DPL=POST_RELEVE_T(ACTION=_F(INTITULE='DEP_FIS1',
303 RESULTAT=dRESULTAT['MECANIQUE'],
305 NOM_CMP=('DX','DY',),
306 INST = Inst_Ecrevisse,
307 OPERATION='EXTRACTION',),
310 _T_TEMP=POST_RELEVE_T(ACTION=_F(INTITULE='TEMP_FI1',
312 RESULTAT=dRESULTAT['THERMIQUE'],
315 INST = Inst_Ecrevisse,
316 OPERATION='EXTRACTION',),);
318 # deuxieme levre de la fissure
319 _T_DPL_B=POST_RELEVE_T(ACTION=_F(INTITULE='DEP_FIS2',
321 RESULTAT=dRESULTAT['MECANIQUE'],
323 NOM_CMP=('DX','DY',),
324 INST = Inst_Ecrevisse,
325 OPERATION='EXTRACTION',),);
327 _T_TEMPB=POST_RELEVE_T(ACTION=_F(INTITULE='TEMP_FI2',
329 RESULTAT=dRESULTAT['THERMIQUE'],
332 INST = Inst_Ecrevisse,
333 OPERATION='EXTRACTION',),);
336 print '_T_DPL ==================================================='
337 print _T_DPL.EXTR_TABLE()
338 print '_T_DPL_B ================================================='
339 print _T_DPL_B.EXTR_TABLE()
340 print '_T_TEMP ================================================='
341 print _T_TEMP.EXTR_TABLE()
342 print '_T_TEMP_B ==============================================='
343 print _T_TEMPB.EXTR_TABLE()
345 # Extraction des tables Temperatures + deplacement levres fissure
346 _tbl_temp = _T_TEMP.EXTR_TABLE()
347 _tbl_dpl = _T_DPL.EXTR_TABLE()
348 DETRUIRE(CONCEPT=_F(NOM=(_T_DPL,_T_TEMP,)),INFO=1,ALARME='NON')
349 _tbl_dpl_b = _T_DPL_B.EXTR_TABLE()
350 _tbl_temp_b = _T_TEMPB.EXTR_TABLE()
351 DETRUIRE(CONCEPT=_F(NOM=(_T_DPL_B,_T_TEMPB,)),INFO=1,ALARME='NON')
354 # --Determination des cotes a donner a ecrevisse--
355 # a partir des resultats mecanique et thermique :
356 _l_tang = _tbl_dpl.values()['ABSC_CURV']
357 _l_tang_b = _tbl_dpl_b.values()['ABSC_CURV']
359 _l_absz_m = map(lambda x,y: 0.5*(x+y), _l_tang,_l_tang_b)
361 UTMESS('F','ECREVISSE0_40')
363 _l_tang_t = _tbl_temp.values()['ABSC_CURV']
364 _l_tang_t_b = _tbl_temp_b.values()['ABSC_CURV']
365 _l_absz_t = map(lambda x,y: 0.5*(x+y), _l_tang_t,_l_tang_t_b)
368 # Coordonnees des points des levres (initiales et a l instant actuel
369 _X0 = _tbl_dpl.values()['COOR_X']
370 _Y0 = _tbl_dpl.values()['COOR_Y']
371 _X0_b = _tbl_dpl_b.values()['COOR_X']
372 _Y0_b = _tbl_dpl_b.values()['COOR_Y']
373 _X = [x + y for (x,y) in zip(_tbl_dpl.values()['DX'],_X0)]
374 _Y = [x + y for (x,y) in zip(_tbl_dpl.values()['DY'],_Y0)]
375 _X_b = [x + y for (x,y) in zip(_tbl_dpl_b.values()['DX'],_X0_b)]
376 _Y_b = [x + y for (x,y) in zip(_tbl_dpl_b.values()['DY'],_Y0_b)]
379 # Determination de la direction de la fissure
380 (DIR_FISS, DIR_PREV, beta, theta, _xi, _yi) = dirfiss(_X,_Y,_X_b,_Y_b)
382 (DIR_FISS, DIR_PREV, beta, theta, _xi, _yi) = dirfiss(_X0,_Y0,_X0_b,_Y0_b)
384 if (DIR_FISS == 'GEN') and oldVersion :
385 UTMESS('F','ECREVISSE0_23', valr=[theta])
387 # --Calcul de l ouverture de fissure--
388 # une fissure refermee a une ouverture
389 # egale a l'ouverture remanente
390 (_l_ouv0,_l_gli0) = ouvFiss(DIR_FISS,beta,_X0,_Y0,_X0_b,_Y0_b)
391 for i in range(len(_l_ouv0)) :
392 if _l_ouv0[i] < dFISSURE['OUVERT_REMANENTE'] :
393 UTMESS('A','ECREVISSE0_39')
396 (_l_ouv,_l_gli) = ouvFiss(DIR_FISS,beta,_X,_Y,_X_b,_Y_b)
397 if dFISSURE['OUVERT_REMANENTE'] :
398 _l_ouv = map(lambda x: max(dFISSURE['OUVERT_REMANENTE'],x), _l_ouv)
400 nbOuvRem = _l_ouv.count(dFISSURE['OUVERT_REMANENTE'])
402 UTMESS('I', 'ECREVISSE0_41',valr=[nbOuvRem])
406 # Controle sur l entite du glissement entre les levres
407 DeltaMaille = [abs(y-x) for (x,y) in zip(_l_absz_m[1:len(_l_absz_m)], _l_absz_m[0:len(_l_absz_m)-1])]
408 for i in range(len(DeltaMaille)) :
409 deltamai = DeltaMaille[i]
410 if (deltamai <= _l_gli[i]) or (deltamai <= _l_gli[i+1]) :
411 UTMESS('A', 'ECREVISSE0_38')
415 # -- Calcul de la temperature sur le materiau (levres de la fissure) --
416 # on fait la moyenne des temperatures des deux levres
417 _l_t2 = _tbl_temp.values()['TEMP']
418 _l_t2_b = _tbl_temp_b.values()['TEMP']
419 _l_temp_aster = map(lambda x,y: 0.5*(x+y), _l_t2_b,_l_t2)
422 # Infos / Debug : fichier .mess ou .resu
424 UTMESS('I', 'ECREVISSE0_1', valk=["Premiere levre"],
425 valr=[Inst_Ecrevisse, min(_l_tang_t), max(_l_tang_t), min(_l_t2), max(_l_t2), min(_l_tang), max(_l_tang)])
426 UTMESS('I', 'ECREVISSE0_1',valk=["Deuxieme levre"],
427 valr=[Inst_Ecrevisse,min(_l_tang_t_b), max(_l_tang_t_b), min(_l_t2_b), max(_l_t2_b), min(_l_tang_b), max(_l_tang_b)])
428 UTMESS('I', 'ECREVISSE0_2',
429 valr=[Inst_Ecrevisse, min(_l_absz_t), max(_l_absz_t), min(_l_temp_aster), max(_l_temp_aster), min(_l_absz_m), max(_l_absz_m), min(_l_ouv), max(_l_ouv), min(_l_gli),max(_l_gli)])
433 print "\n INFORMATIONS DE DEBUG: "
434 print 'Inst_Ecrevisse=', Inst_Ecrevisse
435 print 'theta:', theta
437 print 'DIR_FISS:', DIR_FISS
438 print 'DIR_PREV:', DIR_PREV
439 print 'point initial de la fissure: (xi,yi) :', _xi,_yi
440 print len(_X0), '_X0 =', _X0
441 print len(_X0_b), '_X0_b=', _X0_b
442 print len(_Y0), '_Y0 =', _Y0
443 print len(_Y0_b), '_Y0_b=', _Y0_b
444 print len(_X), '_X =', _X
445 print len(_Y), '_Y =', _Y
446 print len(_X_b), '_X_b =', _X_b
447 print len(_Y_b), '_Y_b =', _Y_b
448 print 'Controle sur les abszisses curvilignes (mecaniques/thermiques) '
449 print '_l_absz_m==_l_absz_t?', _l_absz_m==_l_absz_t
450 print '_l_absz_m=', len(_l_absz_m),_l_absz_m
451 print '_l_absz_t=', len(_l_absz_t),_l_absz_t
452 print '_l_temp_aster=', len(_l_temp_aster),_l_temp_aster
453 print '_l_ouv=', len(_l_ouv),_l_ouv
454 print '_l_gli=', len(_l_gli),_l_gli
455 print '_l_tang=', _l_tang
456 print '_l_tang_b=', _l_tang
459 # ----------------------------------------------------------------------------
460 # PREPARATION ET LANCEMENT D ECREVISSE
462 # TESTS de non divergence, les messages sont assez explicites :
463 # Si toutes les listes sont bien definies
464 if len(_l_absz_m)*len(_l_ouv)*len(_l_absz_t)*len(_l_temp_aster) == 0:
465 UTMESS('F','ECREVISSE0_3', valr=[Inst_Ecrevisse])
468 # Si les ouvertures ne sont pas trop faibles
469 elif min(_l_ouv) < 1e-20:
470 UTMESS('F','ECREVISSE0_4', valr=[Inst_Ecrevisse, min(_l_ouv)])
473 elif max(_l_t2) > 700:
474 UTMESS('F','ECREVISSE0_5', valr=[Inst_Ecrevisse, max(_l_t2)])
477 elif max(_l_t2_b) > 700:
478 UTMESS('F','ECREVISSE0_5', valr=[Inst_Ecrevisse, max(_l_t2_b )])
482 UTMESS('F','ECREVISSE0_6', valr=[Inst_Ecrevisse, min(_l_t2 )])
485 elif min(_l_t2_b) < 0:
486 UTMESS('F','ECREVISSE0_6', valr=[Inst_Ecrevisse, min(_l_t2_b )])
489 elif abs( float(dECOULEMENT['PRES_ENTREE']) - float(dECOULEMENT['PRES_SORTIE']) )< 5:
490 UTMESS('F','ECREVISSE0_7', valr=[Inst_Ecrevisse, abs( float(dECOULEMENT['PRES_ENTREE']) - float(dECOULEMENT['PRES_SORTIE']) ) ] )
493 # On lance Ecrevisse!
495 UTMESS('I','ECREVISSE0_8', valr=[Inst_Ecrevisse])
499 for fic in os.listdir(os.path.join(os.getcwd(),tmp_ecrevisse)):
501 os.remove( os.path.join(os.getcwd(),tmp_ecrevisse) + '/' + fic )
507 # Recalcul des cotes par rapport a la tortuoiste
508 tort = dFISSURE['TORTUOSITE']
510 _l_absz_m = [x/tort for x in _l_absz_m]
511 _l_absz_t = [x/tort for x in _l_absz_t]
512 except ZeroDivisionError :
513 UTMESS('F','ECREVISSE0_42')
516 if dFISSURE.has_key('LISTE_COTES_BL'):
517 __LISTE_COTES_BL = dFISSURE['LISTE_COTES_BL']
519 __LISTE_COTES_BL = (0., max(_l_absz_m))
523 txt = { 'PRES_ENTREE' : dECOULEMENT['PRES_ENTREE'],
524 'PRES_SORTIE' : dECOULEMENT['PRES_SORTIE'],
525 'FLUIDE_ENTREE' : dECOULEMENT['FLUIDE_ENTREE'],
527 if int(dECOULEMENT['FLUIDE_ENTREE']) in [1, 3, 4, 6]:
528 txt['TEMP_ENTREE'] = dECOULEMENT['TEMP_ENTREE']
529 if int(dECOULEMENT['FLUIDE_ENTREE']) in [2, 5]:
530 txt['TITR_MASS'] = dECOULEMENT['TITR_MASS']
531 if int(dECOULEMENT['FLUIDE_ENTREE']) in [4, 5]:
532 txt['PRES_PART'] = dECOULEMENT['PRES_PART']
535 # Traitement des cas ou les mots cles reynold, xminch, etc... ne doivent pas apparaitre
536 # Mot-cle MODELE_ECRE
538 txt2['ECOULEMENT'] = dMODELE_ECRE['ECOULEMENT']
539 if dMODELE_ECRE['ECOULEMENT'] == 'GELE' :
540 txt2['PRESS_EBULLITION'] = dMODELE_ECRE['PRESS_EBULLITION']
542 txt2['FROTTEMENT'] = dMODELE_ECRE['FROTTEMENT']
544 if int(dMODELE_ECRE['FROTTEMENT']) in [-4,-3,-2,-1] :
545 txt2['REYNOLDS_LIM'] = dMODELE_ECRE['REYNOLDS_LIM']
546 txt2['FROTTEMENT_LIM'] = dMODELE_ECRE['FROTTEMENT_LIM']
548 txt2['TRANSFERT_CHAL'] = dMODELE_ECRE['TRANSFERT_CHAL']
549 if int(dMODELE_ECRE['TRANSFERT_CHAL']) in [-2,-1] :
550 txt2['XMINCH'] = dMODELE_ECRE['XMINCH']
551 txt2['XMAXCH'] = dMODELE_ECRE['XMAXCH']
554 if dMODELE_ECRE['IVENAC'] in [0, 1]:
555 txt2['IVENAC'] = dMODELE_ECRE['IVENAC']
561 motscle2= {'ECOULEMENT': txt, 'MODELE_ECRE' : txt2 }
563 DETRUIRE(OBJET=_F(CHAINE = '_TAB2' ),INFO=1,ALARME='NON')
564 DETRUIRE(OBJET=_F(CHAINE = '_DEB2' ),INFO=1,ALARME='NON')
565 __TAB_i = CO('_TAB2')
566 __DEB_i = CO('_DEB2')
568 MACR_ECRE_CALC(TABLE = __TAB_i,
572 IMPRESSION = IMPRESSION,
576 FISSURE = _F(LONGUEUR = max(_l_absz_m),
578 RUGOSITE = dFISSURE['RUGOSITE'],
579 ZETA = dFISSURE['ZETA'],
580 SECTION = dFISSURE['SECTION'],
581 LISTE_COTES_AH = _l_absz_m,
582 LISTE_VAL_AH = _l_ouv,
583 LISTE_COTES_BL = __LISTE_COTES_BL,
584 LISTE_VAL_BL = dFISSURE['LISTE_VAL_BL'],
586 TEMPERATURE=_F(GRADIENT = 'FOURNI',
587 LISTE_COTES_TEMP = _l_absz_t,
588 LISTE_VAL_TEMP = _l_temp_aster,
590 CONVERGENCE=_F(KGTEST = dCONVERGENCE['KGTEST'],
591 ITER_GLOB_MAXI = dCONVERGENCE['ITER_GLOB_MAXI'],
592 CRIT_CONV_DEBI = dCONVERGENCE['CRIT_CONV_DEBI'],
598 #-------------------------------------------------------------
599 # EXTRACTION DES RESULTATS D ECREVISSE
603 # Creation de la table
604 __TABFISS_i = __TAB_i.EXTR_TABLE()
606 nb_lignes_table = len(__TABFISS_i["COTES"])
607 # Re-definition des cotes utilisateur (on elimine l effet de la tortuosite)
608 _lst_c = __TABFISS_i.COTES.values()
609 _l_cotes = [x*tort for x in _lst_c]
610 dictTab = __TABFISS_i.dict_CREA_TABLE()['LISTE']
612 __TABFISS_i = CREA_TABLE(LISTE = (
613 _F(PARA = "COTES", LISTE_R = _l_cotes,),
614 _F(PARA = "FLUX", LISTE_R = dictTab[1]['LISTE_R'],),
615 _F(PARA = "PRESSION", LISTE_R = dictTab[2]['LISTE_R'],),
616 _F(PARA = "TEMP", LISTE_R = dictTab[3]['LISTE_R'],),
617 _F(PARA = "COEF_CONV", LISTE_R = dictTab[4]['LISTE_R'],),
620 DETRUIRE(OBJET=_F(CHAINE = '__TAB_i' ),INFO=1,ALARME='NON')
621 DETRUIRE(OBJET=_F(CHAINE = '__DEB_i' ),INFO=1,ALARME='NON')
624 os.system('ls -al ' + os.path.join(os.getcwd(),tmp_ecrevisse) )
626 if dFISSURE['PREFIXE_FICHIER'] :
627 pref_fic = dFISSURE['PREFIXE_FICHIER']
629 pref_fic = 'FISSURE'+str(k+1)
631 ## Ecriture du fichier debits en fonction du temps:
633 ## on lit le fichier debit produit par ecrevisse
634 #f_ast = open(os.path.join(tmp_ecrevisse, 'debits'),'r')
637 #nomfic = str(pref_fic) + '_debits'
639 #fw = open( os.getcwd() + os.sep + 'REPE_OUT' + os.sep + nomfic, 'a')
640 #fw.write( str(Inst_Ecrevisse) + ' ' + _txt )
642 ## On recopie le fichier debits pour reprise ulterieure
643 #nomfic2 = 'debits_dernier'
644 #fw = open( os.getcwd() + os.sep + 'REPE_OUT' + os.sep + nomfic2, 'w')
647 #except Exception, e:
650 # CREATION DES COURBES:
651 if COURBES != "AUCUNE":
652 # Pour masquer certaines alarmes
654 MasquerAlarme('TABLE0_6')
656 nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_flux'+ '_' + str(Inst_Ecrevisse))
657 if not os.path.isfile(nomfic): acces='NEW'
660 DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
661 IMPR_TABLE(FORMAT='XMGRACE',
665 NOM_PARA=('COTES','FLUX',),
666 TITRE='Flux de chaleur a l\'instant %s' % Inst_Ecrevisse,
667 LEGENDE_X='Abscisse curviligne (m)',
668 LEGENDE_Y='Flux (W/m2)',
672 DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
674 nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_temperature'+ '_' + str(Inst_Ecrevisse))
675 if not os.path.isfile(nomfic): acces='NEW'
678 DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
679 IMPR_TABLE(FORMAT='XMGRACE',
683 NOM_PARA=('COTES','TEMP',),
684 TITRE='Temperature a l\'instant %s' % Inst_Ecrevisse,
685 LEGENDE_X='Abscisse curviligne (m)',
686 LEGENDE_Y='Temperature (degres C)',
690 DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
692 nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_coeffconv'+ '_' + str(Inst_Ecrevisse))
693 if not os.path.isfile(nomfic): acces='NEW'
696 DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
697 IMPR_TABLE(FORMAT='XMGRACE',
701 NOM_PARA=('COTES','COEF_CONV',),
702 TITRE='Coefficient de convection a l\'instant %s' % Inst_Ecrevisse,
703 LEGENDE_X='Abscisse curviligne (m)',
704 LEGENDE_Y='Coefficient de convection (W/m2/K)',
708 DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
711 nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_pression'+ '_' + str(Inst_Ecrevisse))
712 if not os.path.isfile(nomfic): acces='NEW'
715 DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
716 IMPR_TABLE(FORMAT='XMGRACE',
720 NOM_PARA=('COTES','PRESSION',),
721 TITRE='Pression a l\'instant %s' % Inst_Ecrevisse,
722 LEGENDE_X='Abscisse curviligne (m)',
723 LEGENDE_Y='Pression (Pa)',
727 DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
729 # Pour la gestion des alarmes
730 RetablirAlarme('TABLE0_6')
734 # On recopie dans REPE_OUT les fichiers resultats d'Ecrevisse
735 tmp_ecrevisse_absolu = os.path.join(os.getcwd(),tmp_ecrevisse)
736 repe_out_absolu = os.path.join(os.getcwd(),'REPE_OUT')
737 for file in os.listdir(tmp_ecrevisse_absolu):
738 if not file in ['ecrevisse', 'ecrevisse.sh']:
739 old_file = os.path.join(tmp_ecrevisse_absolu, file)
740 new_file = os.path.join(repe_out_absolu, str(pref_fic) + '_' + file + '_' + str(Inst_Ecrevisse))
741 shutil.copy(old_file, new_file)
743 # Creation de la table resultat sur toutes les fissures :
745 nom_fiss = dFISSURE['GROUP_MA'][0] + "-" + dFISSURE['GROUP_MA'][1]
746 __TABFISS_i = __TABFISS_i.EXTR_TABLE()
747 __DEBFISS_i = __DEB_i.EXTR_TABLE()
748 __TABFISS_i["FISSURE"] = [nom_fiss]*nb_lignes_table
749 __DEBFISS_i["FISSURE"] = [nom_fiss]
752 __TABFISS_tot = __TABFISS_i
753 __DEBFISS_tot = __DEBFISS_i
755 __TABFISS_tot = merge(__TABFISS_tot, __TABFISS_i)
756 __DEBFISS_tot = merge(__DEBFISS_tot, __DEBFISS_i)
760 os.system('ls -al ' + os.path.join(os.getcwd(),tmp_ecrevisse) )
762 #--------------------------------------------------------------
763 # CREATIONS DES CHARGEMENTS ASTER
765 # Recuperation des valeurs dans la table (voir si il y a plus simple)
766 _lst_c = __TABFISS_i.COTES.values()
767 _lst_f = __TABFISS_i.FLUX.values()
768 _lst_p = __TABFISS_i.PRESSION.values()
769 _lst_t = __TABFISS_i.TEMP.values()
770 _lst_cc = __TABFISS_i.COEF_CONV.values()
793 # ------------------------------------------------------
794 # Extraction des conditions limites du calcul Ecrevisse
798 nbCotes = len(_l_absz_m)
799 nbCotesEcre = nbCotes-1
801 # epsilon pour le decalage :
802 # le chargement est uniforme par maille
821 _lst_x0.append(_X0[0])
822 _lst_y0.append(_Y0[0])
823 _lst_x0_b.append(_X0_b[0])
824 _lst_y0_b.append(_Y0_b[0])
825 ly.append( _lst_f[0] )
826 ly2.append( _lst_p[0] )
827 ly3.append( _lst_t[0] )
828 ly4.append( _lst_cc[0] )
830 for i in range(nbCotes-2):
836 _lst_x0.append( x - epsx )
837 _lst_x0.append( x + epsx )
838 _lst_y0.append( y - epsy )
839 _lst_y0.append( y + epsy )
842 _lst_x0_b.append( x - epsx )
843 _lst_x0_b.append( x + epsx )
844 _lst_y0_b.append( y - epsy )
845 _lst_y0_b.append( y + epsy )
846 ly.append( _lst_f[i] )
847 ly.append( _lst_f[i+1] )
848 ly2.append( _lst_p[i] )
849 ly2.append( _lst_p[i+1] )
850 ly3.append( _lst_t[i] )
851 ly3.append( _lst_t[i+1] )
852 ly4.append( _lst_cc[i] )
853 ly4.append( _lst_cc[i+1] )
855 _lst_x0.append( _X0[nbCotes-1] )
856 _lst_y0.append( _Y0[nbCotes-1] )
857 _lst_x0_b.append( _X0_b[nbCotes-1] )
858 _lst_y0_b.append( _Y0_b[nbCotes-1] )
859 ly.append( _lst_f[nbCotesEcre-1] )
860 ly2.append( _lst_p[nbCotesEcre-1] )
861 ly3.append( _lst_t[nbCotesEcre-1] )
862 ly4.append( _lst_cc[nbCotesEcre-1] )
868 _lst_x0 = [(x1+x2)*0.5 for (x1,x2) in zip(_X0[0:len(_X0)-1],_X0[1:len(_X0)])]
869 _lst_y0 = [(x1+x2)*0.5 for (x1,x2) in zip(_Y0[0:len(_Y0)-1],_Y0[1:len(_Y0)])]
870 _lst_x0_b = [(x1+x2)*0.5 for (x1,x2) in zip(_X0_b[0:len(_X0_b)-1],_X0_b[1:len(_X0_b)])]
871 _lst_y0_b = [(x1+x2)*0.5 for (x1,x2) in zip(_Y0_b[0:len(_Y0_b)-1],_Y0_b[1:len(_Y0_b)])]
872 _lst_x0.append(_X0[-1])
873 _lst_x0_b.append(_X0_b[-1])
874 _lst_y0.append(_Y0[-1])
875 _lst_y0_b.append(_Y0_b[-1])
877 # ANCIENNE VERSION (TRANSMISSION DES FLUX THERMIQUES
881 levre1pos = ((_Y0[0]-_yi)>=0.)
888 levre1pos = ((_X0[0]-_xi)>=0.)
889 if abs(alpha) == 180. :
895 # Creation des listes pour les chargements aster :
896 # (x1, y1, x2, y2, ...)
901 for i in range(len(_lst_p)) :
902 _tmp1.append( _lst_dir[i] )
903 _tmp2.append( _lst_dir[i] )
904 _tmp3.append( _lst_dir[i] )
906 _tmp2.append( _lst_p[i] )
908 #_tmp1.append( -1*_lst_f[i] )
909 #_tmp3.append( _lst_f[i] )
910 _tmp1.append( _lst_f[i] )
911 _tmp3.append( -1*_lst_f[i] )
913 #_tmp1.append( _lst_f[i] )
914 #_tmp3.append( -1*_lst_f[i] )
915 _tmp1.append( -1*_lst_f[i] )
916 _tmp3.append( _lst_f[i] )
920 # Flux en provenance d'Ecrevisse
921 _L_F1=DEFI_FONCTION(NOM_PARA=DIR_FISS,
923 PROL_GAUCHE='LINEAIRE',
924 PROL_DROITE='LINEAIRE');
926 _L_F2=DEFI_FONCTION(NOM_PARA=DIR_FISS,
928 PROL_GAUCHE='LINEAIRE',
929 PROL_DROITE='LINEAIRE' );
932 l_FLUX_REP_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
934 l_FLUX_REP_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
937 l_FLUX_REP_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
939 l_FLUX_REP_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
942 # Pressions en provenance d'Ecrevisse
943 _L_P=DEFI_FONCTION(NOM_PARA = DIR_FISS,
945 PROL_GAUCHE = 'LINEAIRE',
946 PROL_DROITE = 'LINEAIRE');
948 l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][0],dFISSURE['GROUP_MA'][1]),
955 # Creation des deux listes (x1, y1, x2, y2, ...)
956 # On cree trois/six listes :
957 # Les valeurs sont constant par maille sur les levres de la fissure,
958 # _tmp1/_tmp2 = temperature
959 # _tmp3/_tmp4 = coefficient d echange
960 # _tmp5/_tmp6 = pression
968 for i in range(len(_lst_f)) :
977 _tmp1.append( _lst_x0[ix] )
978 _tmp1.append( _lst_t[ix] )
979 _tmp3.append( _lst_x0[ix] )
980 _tmp3.append( _lst_cc[ix] )
981 _tmp5.append( _lst_x0[ix] )
982 _tmp5.append( _lst_p[ix] )
983 _tmp2.append( _lst_x0_b[ix] )
984 _tmp2.append( _lst_t[ix] )
985 _tmp4.append( _lst_x0_b[ix] )
986 _tmp4.append( _lst_cc[ix] )
987 _tmp6.append( _lst_x0_b[ix] )
988 _tmp6.append( _lst_p[ix] )
990 _tmp1.append( _lst_y0[iy] )
991 _tmp1.append( _lst_t[iy] )
992 _tmp3.append( _lst_y0[iy] )
993 _tmp3.append( _lst_cc[iy] )
994 _tmp5.append( _lst_y0[iy] )
995 _tmp5.append( _lst_p[iy] )
996 _tmp2.append( _lst_y0_b[iy] )
997 _tmp2.append( _lst_t[iy] )
998 _tmp4.append( _lst_y0_b[iy] )
999 _tmp4.append( _lst_cc[iy] )
1000 _tmp6.append( _lst_y0_b[iy] )
1001 _tmp6.append( _lst_p[iy] )
1007 # Couplage thermique : Temperature et coefficients d'echange en provenance d'Ecrevisse
1008 _L_T1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
1010 PROL_GAUCHE='LINEAIRE',
1011 PROL_DROITE='LINEAIRE')
1013 _L_T2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
1015 PROL_GAUCHE='LINEAIRE',
1016 PROL_DROITE='LINEAIRE')
1018 _L_CC1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
1020 PROL_GAUCHE='LINEAIRE',
1021 PROL_DROITE='LINEAIRE')
1023 _L_CC2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
1025 PROL_GAUCHE='LINEAIRE',
1026 PROL_DROITE='LINEAIRE')
1028 l_ECHANGE_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
1032 l_ECHANGE_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
1036 # Couplage mecanique : Pressions en provenance d'Ecrevisse
1037 _L_P1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
1039 PROL_GAUCHE='LINEAIRE',
1040 PROL_DROITE='LINEAIRE')
1042 _L_P2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
1044 PROL_GAUCHE='LINEAIRE',
1045 PROL_DROITE='LINEAIRE')
1047 l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][0]),
1049 l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][1]),
1052 # Fin extraction des conditions limites du calcul Ecrevisse
1053 # ----------------------------------------------------------
1056 print ('FISSURE-'+str(k+1))
1057 print '_lst_c:', len(_lst_c), _lst_c
1058 print '_lst_f:', len(_lst_f), _lst_f
1059 print '_lst_p:', len(_lst_p), _lst_p
1060 print '_lst_t:', len(_lst_t), _lst_t
1061 print '_lst_cc:', len(_lst_cc), _lst_cc
1062 print '_lst_x0:', len(_lst_x0), _lst_x0
1063 print '_lst_x0_b :', len(_lst_x0_b), _lst_x0_b
1064 print '_lst_y0:', len(_lst_y0), _lst_y0
1065 print '_lst_y0_b :', len(_lst_y0_b), _lst_y0_b
1066 print '_tmp1 :', len(_tmp1), _tmp1
1067 print '_tmp2 :', len(_tmp2), _tmp2
1068 print '_tmp3 :', len(_tmp3), _tmp3
1069 if (not oldVersion) :
1070 print '_tmp4 :', len(_tmp4), _tmp4
1071 print '_tmp5 :', len(_tmp5), _tmp5
1072 print '_tmp6 :', len(_tmp6), _tmp6
1074 #Fin du boucle sur la fissure for k
1077 # Assemblage des concepts sortants
1079 __ECR_F1=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
1080 FLUX_REP=l_FLUX_REP_F1);
1082 __ECR_F2=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
1083 FLUX_REP=l_FLUX_REP_F2);
1085 __ECR_F1=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
1086 ECHANGE=l_ECHANGE_F1);
1088 __ECR_F2=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
1089 ECHANGE=l_ECHANGE_F2);
1091 __ECR_P=AFFE_CHAR_MECA_F(MODELE=MODELE_MECA,
1092 PRES_REP=l_PRES_REP);
1096 dprod = __TABFISS_tot.dict_CREA_TABLE()
1097 __TAB = CREA_TABLE(**dprod)
1098 debprod = __DEBFISS_tot.dict_CREA_TABLE()
1099 __DEB = CREA_TABLE(**debprod)
1101 UTMESS('F','ECREVISSE0_9', valr=[Inst_Ecrevisse])