]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA9/Macro/calc_ecrevisse_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA9 / Macro / calc_ecrevisse_ops.py
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.                                                  
10 #                                                                       
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.                              
15 #                                                                       
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 # ======================================================================
20
21
22 # ------------------OUTILS ------------------------------
23
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
28 #   -180< theta <=180
29 # beta : angle par rapport a la horizontale (degres)
30 #         positif si sens anti-horaire
31 #         -180< beta <=180
32 def dirfiss(Xa,Ya,Xb,Yb) :
33     from math import atan2, degrees
34
35     xia = Xa[0]
36     yia = Ya[0]
37     xea = Xa[-1]
38     yea = Ya[-1]
39     xib = Xb[0]
40     yib = Yb[0]
41     xeb = Xb[-1]
42     yeb = Yb[-1]
43
44     xi = (xia+xib)/2.
45     yi = (yia+yib)/2.
46     xe = (xea+xeb)/2.
47     ye = (yea+yeb)/2.
48
49     dx = xe -xi
50     dy = ye -yi
51
52     try :
53         tangA= dy/dx
54     except ZeroDivisionError :
55         if (dy>0.) :
56             theta = 0.
57             beta  = 90.
58         else :
59             theta = 180.
60             beta  = -90.
61     else :
62         beta = atan2(dy,dx)
63         beta = degrees(beta)
64         theta = 90.-beta
65         if (theta>180.):
66             theta=theta-360.
67
68     if (abs(beta)<45. or abs(beta)>135.) :
69         DIR_PREV = 'X'
70     else:
71         DIR_PREV = 'Y'
72
73     if (round(abs(beta))==0. or round(abs(beta))==180.):
74         DIR_FISS = 'X'
75     elif (round(abs(beta))==90.):
76         DIR_FISS = 'Y'
77     else :
78         DIR_FISS = 'GEN'
79
80     return DIR_FISS, DIR_PREV, beta, theta, xi, yi
81
82
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
86
87     if DIR_FISS=='X' :
88         Ouv = map(lambda y1,y2: abs(y2-y1),Ya,Yb)
89         Gli = map(lambda x1,x2: abs(x2-x1),Xa,Xb)
90     elif DIR_FISS=='Y' :
91         Ouv = map(lambda x1,x2: abs(x2-x1),Xa,Xb)
92         Gli = map(lambda y1,y2: abs(y2-y1),Ya,Yb)
93     else :
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)
106     return Ouv, Gli
107
108
109
110
111
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,
116     CHARGE_MECA,
117     CHARGE_THER1,
118     CHARGE_THER2,
119     TABLE,
120     DEBIT,
121     MODELE_MECA,
122     MODELE_THER,
123     RESULTAT,
124     FISSURE,
125     ECOULEMENT,
126     MODELE_ECRE,
127     CONVERGENCE,
128     LOGICIEL,
129     VERSION,
130     ENTETE,
131     IMPRESSION,
132     INFO,
133     COURBES,
134     **args):
135
136     """
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
140     """
141
142     import os, string, types, shutil
143     import aster
144     from Accas import _F
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
150
151     ier=0
152
153     # Concepts sortant
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)
159
160     # La macro compte pour 1 dans la numerotation des commandes
161     self.set_icmd(1)
162
163     # Parametres debug
164     debug = False
165
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
172     oldVersion = False
173     chargeLin  = False
174
175
176     # Parametres developpeur
177     tmp_ecrevisse = "tmp_ecrevisse"
178
179     # Info
180     info2 = (INFO==2)
181     InfoAster = 1
182     if debug :
183         info2=True
184
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")
200
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]
205
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]
209
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]
213
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]
217
218
219     # INSTANTS
220     _l_inst = dRESULTAT['MECANIQUE'].LIST_VARI_ACCES()
221     if dRESULTAT.has_key('INST'):
222         Inst_Ecrevisse = dRESULTAT['INST']
223     else:
224         pass
225
226
227     # INITIATION DES CHARGEMENTS ECREVISSE --> ASTER :
228     #     liste des mots cles facteurs de PRES_REP pour chaque fissure
229     l_PRES_REP = []
230     if oldVersion :
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])
233         l_FLUX_REP_F1 = []
234         l_FLUX_REP_F2 = []
235     else :
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])
238         l_ECHANGE_F1 = []
239         l_ECHANGE_F2 = []
240
241
242
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() )
246
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]
251
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]),),);
257
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]),),);
262
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):
265             sys.exit(1)
266
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',
273                                         NOM=_nom_gno_1,
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],
277                                         PRECISION=0.01,
278                                         CRITERE='RELATIF',),
279                        INFO=InfoAster,);
280
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',
286                                         NOM=_nom_gno_2,
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],
290                                         PRECISION=0.01,
291                                         CRITERE='RELATIF',),
292                         INFO=InfoAster,);
293
294
295
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
299
300         # premiere levre de fissure
301         _T_DPL=POST_RELEVE_T(ACTION=_F(INTITULE='DEP_FIS1',
302                                       GROUP_NO=_nom_gno_1,
303                                       RESULTAT=dRESULTAT['MECANIQUE'],
304                                       NOM_CHAM='DEPL',
305                                       NOM_CMP=('DX','DY',),
306                                       INST = Inst_Ecrevisse,
307                                       OPERATION='EXTRACTION',),
308                                       );
309
310         _T_TEMP=POST_RELEVE_T(ACTION=_F(INTITULE='TEMP_FI1',
311                                         GROUP_NO=_nom_gno_1,
312                                         RESULTAT=dRESULTAT['THERMIQUE'],
313                                         NOM_CHAM='TEMP',
314                                         TOUT_CMP='OUI',
315                                         INST = Inst_Ecrevisse,
316                                         OPERATION='EXTRACTION',),);
317
318         # deuxieme levre de la fissure
319         _T_DPL_B=POST_RELEVE_T(ACTION=_F(INTITULE='DEP_FIS2',
320                                         GROUP_NO=_nom_gno_2,
321                                         RESULTAT=dRESULTAT['MECANIQUE'],
322                                         NOM_CHAM='DEPL',
323                                         NOM_CMP=('DX','DY',),
324                                         INST = Inst_Ecrevisse,
325                                         OPERATION='EXTRACTION',),);
326
327         _T_TEMPB=POST_RELEVE_T(ACTION=_F(INTITULE='TEMP_FI2',
328                                           GROUP_NO=_nom_gno_2,
329                                           RESULTAT=dRESULTAT['THERMIQUE'],
330                                           NOM_CHAM='TEMP',
331                                           TOUT_CMP='OUI',
332                                           INST = Inst_Ecrevisse,
333                                           OPERATION='EXTRACTION',),);
334
335         if ( debug ) :
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()
344
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')
352
353
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']
358         try :
359             _l_absz_m   = map(lambda x,y: 0.5*(x+y), _l_tang,_l_tang_b)
360         except TypeError :
361             UTMESS('F','ECREVISSE0_40')
362         #
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)
366
367
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)]
377
378
379         # Determination de la direction de la fissure
380         (DIR_FISS, DIR_PREV, beta, theta, _xi, _yi) = dirfiss(_X,_Y,_X_b,_Y_b)
381         if oldVersion :
382             (DIR_FISS, DIR_PREV, beta, theta, _xi, _yi) = dirfiss(_X0,_Y0,_X0_b,_Y0_b)
383
384         if (DIR_FISS == 'GEN') and oldVersion :
385             UTMESS('F','ECREVISSE0_23', valr=[theta])
386
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')
394
395
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)
399             if info2 :
400                 nbOuvRem = _l_ouv.count(dFISSURE['OUVERT_REMANENTE'])
401                 if nbOuvRem != 0 :
402                     UTMESS('I', 'ECREVISSE0_41',valr=[nbOuvRem])
403
404
405
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')
412                 break
413
414
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)
420
421
422         # Infos / Debug : fichier .mess ou .resu
423         if (info2) :
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)])
430
431
432         if ( debug ) :
433             print "\n INFORMATIONS DE DEBUG: "
434             print 'Inst_Ecrevisse=', Inst_Ecrevisse
435             print 'theta:', theta
436             print 'beta:', beta
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
457
458
459 # ----------------------------------------------------------------------------
460 #       PREPARATION ET LANCEMENT D ECREVISSE
461
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])
466             __TAB = None
467             break
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)])
471             __TAB = None
472             break
473         elif max(_l_t2) > 700:
474             UTMESS('F','ECREVISSE0_5', valr=[Inst_Ecrevisse, max(_l_t2)])
475             __TAB = None
476             break
477         elif max(_l_t2_b) > 700:
478             UTMESS('F','ECREVISSE0_5', valr=[Inst_Ecrevisse, max(_l_t2_b )])
479             __TAB = None
480             break
481         elif min(_l_t2) < 0:
482             UTMESS('F','ECREVISSE0_6', valr=[Inst_Ecrevisse, min(_l_t2 )])
483             __TAB = None
484             break
485         elif min(_l_t2_b) < 0:
486             UTMESS('F','ECREVISSE0_6', valr=[Inst_Ecrevisse, min(_l_t2_b )])
487             __TAB = None
488             break
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']) ) ] )
491             __TAB = None
492             break
493         # On lance Ecrevisse!
494         else:
495             UTMESS('I','ECREVISSE0_8', valr=[Inst_Ecrevisse])
496
497             # On efface le rep
498             try:
499                 for fic in os.listdir(os.path.join(os.getcwd(),tmp_ecrevisse)):
500                     try:
501                         os.remove( os.path.join(os.getcwd(),tmp_ecrevisse) + '/' + fic )
502                     except:
503                         pass
504             except:
505                 pass
506
507             # Recalcul des cotes par rapport a la tortuoiste
508             tort = dFISSURE['TORTUOSITE']
509             try :
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')
514
515
516             if dFISSURE.has_key('LISTE_COTES_BL'):
517                 __LISTE_COTES_BL = dFISSURE['LISTE_COTES_BL']
518             else:
519                 __LISTE_COTES_BL = (0., max(_l_absz_m))
520
521             # Mot-cle ECOULEMENT
522             txt = {}
523             txt = { 'PRES_ENTREE' : dECOULEMENT['PRES_ENTREE'],
524                     'PRES_SORTIE' : dECOULEMENT['PRES_SORTIE'],
525                     'FLUIDE_ENTREE'   : dECOULEMENT['FLUIDE_ENTREE'],
526                     }
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']
533
534
535             # Traitement des cas ou les mots cles reynold, xminch, etc... ne doivent pas apparaitre
536             # Mot-cle MODELE_ECRE
537             txt2 = {}
538             txt2['ECOULEMENT'] = dMODELE_ECRE['ECOULEMENT']
539             if dMODELE_ECRE['ECOULEMENT'] == 'GELE' :
540                 txt2['PRESS_EBULLITION'] = dMODELE_ECRE['PRESS_EBULLITION']
541
542             txt2['FROTTEMENT'] = dMODELE_ECRE['FROTTEMENT']
543
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']
547
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']
552
553             try :
554                 if dMODELE_ECRE['IVENAC'] in [0, 1]:
555                     txt2['IVENAC'] = dMODELE_ECRE['IVENAC']
556                 else :
557                     txt2['IVENAC'] = 0
558             except :
559                 txt2['IVENAC'] = 0
560
561             motscle2= {'ECOULEMENT': txt, 'MODELE_ECRE' : txt2 }
562
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')
567
568             MACR_ECRE_CALC(TABLE      = __TAB_i,
569                            DEBIT      = __DEB_i,
570                            ENTETE     = ENTETE,
571                            COURBES    = COURBES,
572                            IMPRESSION = IMPRESSION,
573                            INFO       = INFO,
574                            LOGICIEL   = LOGICIEL,
575                            VERSION    = VERSION,
576                            FISSURE    = _F(LONGUEUR        = max(_l_absz_m),
577                                             ANGLE              = theta,
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'],
585                                             ),
586                            TEMPERATURE=_F(GRADIENT       = 'FOURNI',
587                                         LISTE_COTES_TEMP = _l_absz_t,
588                                         LISTE_VAL_TEMP   = _l_temp_aster,
589                                        ),
590                            CONVERGENCE=_F(KGTEST         = dCONVERGENCE['KGTEST'],
591                                           ITER_GLOB_MAXI = dCONVERGENCE['ITER_GLOB_MAXI'],
592                                           CRIT_CONV_DEBI = dCONVERGENCE['CRIT_CONV_DEBI'],
593                                        ),
594                            **motscle2
595                            );
596
597
598 #-------------------------------------------------------------
599 #           EXTRACTION DES RESULTATS D ECREVISSE
600
601
602
603             # Creation de la table
604             __TABFISS_i = __TAB_i.EXTR_TABLE()
605
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']
611
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'],),
618                             ),)
619
620             DETRUIRE(OBJET=_F(CHAINE = '__TAB_i' ),INFO=1,ALARME='NON')
621             DETRUIRE(OBJET=_F(CHAINE = '__DEB_i' ),INFO=1,ALARME='NON')
622
623             if ( debug ):
624                os.system('ls -al ' + os.path.join(os.getcwd(),tmp_ecrevisse) )
625
626             if dFISSURE['PREFIXE_FICHIER'] :
627                 pref_fic = dFISSURE['PREFIXE_FICHIER']
628             else :
629                 pref_fic = 'FISSURE'+str(k+1)
630
631             ## Ecriture du fichier debits en fonction du temps:
632             #try:
633                 ## on lit le fichier debit produit par ecrevisse
634                 #f_ast = open(os.path.join(tmp_ecrevisse, 'debits'),'r')
635                 #_txt = f_ast.read()
636                 #f_ast.close()
637                 #nomfic = str(pref_fic) + '_debits'
638                 ## on concatene
639                 #fw = open( os.getcwd() + os.sep + 'REPE_OUT' + os.sep + nomfic, 'a')
640                 #fw.write( str(Inst_Ecrevisse) + ' ' + _txt )
641                 #fw.close()
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')
645                 #fw.write( _txt )
646                 #fw.close()
647             #except Exception, e:
648                 #print e
649
650             # CREATION DES COURBES:
651             if COURBES != "AUCUNE":
652                 # Pour masquer certaines alarmes
653
654                 MasquerAlarme('TABLE0_6')
655
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'
658                 else: acces='APPEND'
659
660                 DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
661                 IMPR_TABLE(FORMAT='XMGRACE',
662                           TABLE=__TABFISS_i,
663                           UNITE=55,
664                           PILOTE=COURBES,
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)',
669                           COULEUR  = 1,
670                           MARQUEUR = 1,
671                           );
672                 DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
673
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'
676                 else: acces='APPEND'
677
678                 DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
679                 IMPR_TABLE(FORMAT='XMGRACE',
680                           TABLE=__TABFISS_i,
681                           UNITE=55,
682                           PILOTE=COURBES,
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)',
687                           COULEUR  = 2,
688                           MARQUEUR = 2,
689                           );
690                 DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
691
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'
694                 else: acces='APPEND'
695
696                 DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
697                 IMPR_TABLE(FORMAT='XMGRACE',
698                           TABLE=__TABFISS_i,
699                           UNITE=55,
700                           PILOTE=COURBES,
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)',
705                           COULEUR  = 3,
706                           MARQUEUR = 3,
707                           );
708                 DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
709
710
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'
713                 else: acces='APPEND'
714
715                 DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
716                 IMPR_TABLE(FORMAT='XMGRACE',
717                           TABLE=__TABFISS_i,
718                           UNITE=55,
719                           PILOTE=COURBES,
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)',
724                           COULEUR  = 4,
725                           MARQUEUR = 4,
726                           );
727                 DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
728
729                 # Pour la gestion des alarmes
730                 RetablirAlarme('TABLE0_6')
731
732
733
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)
742
743             # Creation de la table resultat sur toutes les fissures :
744             #  Nom de la fissure
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]
750
751             if k==0 :
752                 __TABFISS_tot = __TABFISS_i
753                 __DEBFISS_tot = __DEBFISS_i
754             else :
755                 __TABFISS_tot = merge(__TABFISS_tot, __TABFISS_i)
756                 __DEBFISS_tot = merge(__DEBFISS_tot, __DEBFISS_i)
757
758
759             if ( debug ):
760                 os.system('ls -al ' + os.path.join(os.getcwd(),tmp_ecrevisse) )
761
762 #--------------------------------------------------------------
763 #           CREATIONS DES CHARGEMENTS ASTER
764
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()
771
772
773             try:
774                 a=len(_lst_c)
775             except:
776                 _lst_c = []
777                 _lst_f = []
778                 _lst_p = []
779                 _lst_t = []
780                 _lst_cc = []
781             try:
782                 if _lst_c[1]==0:
783                     _lst_c = []
784                     _lst_f = []
785                     _lst_p = []
786                     _lst_t = []
787                     _lst_cc = []
788             except:
789                 pass
790
791
792
793             # ------------------------------------------------------
794             # Extraction des conditions limites du calcul Ecrevisse
795             #
796             if len(_lst_c)>=2:
797                 if not chargeLin :
798                     nbCotes     = len(_l_absz_m)
799                     nbCotesEcre = nbCotes-1
800
801                     # epsilon pour le decalage :
802                     #   le chargement est uniforme par maille
803                     if _X0[1]>=_X0[0] :
804                         epsx = 1.e-8
805                     else :
806                         epsx = -1.e-8
807                     if _Y0[1]>=_Y0[0] :
808                         epsy = 1.e-8
809                     else :
810                         epsy = -1.e-8
811
812                     _lst_x0   = []
813                     _lst_y0   = []
814                     _lst_x0_b = []
815                     _lst_y0_b = []
816                     ly        = []
817                     ly2       = []
818                     ly3       = []
819                     ly4       = []
820
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] )
829
830                     for i in range(nbCotes-2):
831                         x = _X0[i+1]
832                         y = _Y0[i+1]
833                         toto1 =  x - epsx
834                         toto2 =  x + epsx
835
836                         _lst_x0.append( x - epsx )
837                         _lst_x0.append( x + epsx )
838                         _lst_y0.append( y - epsy )
839                         _lst_y0.append( y + epsy )
840                         x = _X0_b[i+1]
841                         y = _Y0_b[i+1]
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] )
854
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] )
863                     _lst_f = ly
864                     _lst_p = ly2
865                     _lst_t = ly3
866                     _lst_cc = ly4
867                 else :
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])
876
877                 # ANCIENNE VERSION (TRANSMISSION DES FLUX THERMIQUES
878                 if(oldVersion) :
879                     alpha = round(theta)
880                     if DIR_FISS == 'X' :
881                         levre1pos = ((_Y0[0]-_yi)>=0.)
882                         if alpha == -90. :
883                             _lst_x0.reverse()
884                             _lst_p.reverse()
885                             _lst_f.reverse()
886                         _lst_dir = _lst_x0
887                     else :
888                         levre1pos = ((_X0[0]-_xi)>=0.)
889                         if abs(alpha) == 180. :
890                             _lst_y0.reverse()
891                             _lst_p.reverse()
892                             _lst_f.reverse()
893                         _lst_dir = _lst_y0
894
895                     # Creation des listes pour les chargements aster :
896                     #     (x1, y1, x2, y2, ...)
897                     _tmp1=[]
898                     _tmp2=[]
899                     _tmp3=[]
900
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] )
905
906                         _tmp2.append( _lst_p[i] )
907                         if levre1pos :
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] )
912                         else :
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] )
917
918
919
920                     # Flux en provenance d'Ecrevisse
921                     _L_F1=DEFI_FONCTION(NOM_PARA=DIR_FISS,
922                                         VALE=_tmp1,
923                                         PROL_GAUCHE='LINEAIRE',
924                                         PROL_DROITE='LINEAIRE');
925
926                     _L_F2=DEFI_FONCTION(NOM_PARA=DIR_FISS,
927                                         VALE=_tmp3,
928                                         PROL_GAUCHE='LINEAIRE',
929                                         PROL_DROITE='LINEAIRE' );
930
931                     if DIR_FISS == 'X':
932                         l_FLUX_REP_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
933                                                                 FLUX_Y=_L_F1,))
934                         l_FLUX_REP_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
935                                                                 FLUX_Y=_L_F2,))
936                     else :
937                         l_FLUX_REP_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
938                                                                 FLUX_X=_L_F1,))
939                         l_FLUX_REP_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
940                                                                 FLUX_X=_L_F2,))
941
942                     # Pressions en provenance d'Ecrevisse
943                     _L_P=DEFI_FONCTION(NOM_PARA = DIR_FISS,
944                                         VALE    = _tmp2,
945                                         PROL_GAUCHE = 'LINEAIRE',
946                                         PROL_DROITE = 'LINEAIRE');
947
948                     l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][0],dFISSURE['GROUP_MA'][1]),
949                                                             PRES=_L_P,))
950
951
952
953                 # NOUVELLE VERSION
954                 else :
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
961                     _tmp1=[]
962                     _tmp2=[]
963                     _tmp3=[]
964                     _tmp4=[]
965                     _tmp5=[]
966                     _tmp6=[]
967
968                     for i in range(len(_lst_f)) :
969                         ix = copy(i)
970                         iy = copy(i)
971                         if _X0[1]<_X0[0] :
972                             ix = len(_lst_f)-1-i
973                         if _Y0[1]<_Y0[0] :
974                             iy = len(_lst_f)-1-i
975
976                         if (DIR_PREV=='X'):
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] )
989                         else :
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] )
1002
1003
1004
1005
1006
1007                     # Couplage thermique : Temperature et coefficients d'echange en provenance d'Ecrevisse
1008                     _L_T1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
1009                                         VALE=_tmp1,
1010                                         PROL_GAUCHE='LINEAIRE',
1011                                         PROL_DROITE='LINEAIRE')
1012
1013                     _L_T2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
1014                                         VALE=_tmp2,
1015                                         PROL_GAUCHE='LINEAIRE',
1016                                         PROL_DROITE='LINEAIRE')
1017
1018                     _L_CC1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
1019                                         VALE=_tmp3,
1020                                         PROL_GAUCHE='LINEAIRE',
1021                                         PROL_DROITE='LINEAIRE')
1022
1023                     _L_CC2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
1024                                         VALE=_tmp4,
1025                                         PROL_GAUCHE='LINEAIRE',
1026                                         PROL_DROITE='LINEAIRE')
1027
1028                     l_ECHANGE_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
1029                                                             TEMP_EXT=_L_T1,
1030                                                             COEF_H=_L_CC2))
1031
1032                     l_ECHANGE_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
1033                                                             TEMP_EXT=_L_T2,
1034                                                             COEF_H=_L_CC2))
1035
1036                     # Couplage mecanique : Pressions en provenance d'Ecrevisse
1037                     _L_P1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
1038                                         VALE=_tmp5,
1039                                         PROL_GAUCHE='LINEAIRE',
1040                                         PROL_DROITE='LINEAIRE')
1041
1042                     _L_P2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
1043                                         VALE=_tmp6,
1044                                         PROL_GAUCHE='LINEAIRE',
1045                                         PROL_DROITE='LINEAIRE')
1046
1047                     l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][0]),
1048                                                             PRES=_L_P1,))
1049                     l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][1]),
1050                                                             PRES=_L_P2,))
1051
1052             # Fin extraction des conditions limites du calcul Ecrevisse
1053             # ----------------------------------------------------------
1054
1055         if debug :
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
1073
1074         #Fin du boucle sur la fissure for k
1075
1076
1077     # Assemblage des concepts sortants
1078     if(oldVersion) :
1079         __ECR_F1=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
1080                                   FLUX_REP=l_FLUX_REP_F1);
1081
1082         __ECR_F2=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
1083                                   FLUX_REP=l_FLUX_REP_F2);
1084     else:
1085         __ECR_F1=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
1086                                   ECHANGE=l_ECHANGE_F1);
1087
1088         __ECR_F2=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
1089                                   ECHANGE=l_ECHANGE_F2);
1090
1091     __ECR_P=AFFE_CHAR_MECA_F(MODELE=MODELE_MECA,
1092                              PRES_REP=l_PRES_REP);
1093
1094     # Table resultat
1095     try:
1096        dprod = __TABFISS_tot.dict_CREA_TABLE()
1097        __TAB = CREA_TABLE(**dprod)
1098        debprod = __DEBFISS_tot.dict_CREA_TABLE()
1099        __DEB = CREA_TABLE(**debprod)
1100     except:
1101        UTMESS('F','ECREVISSE0_9', valr=[Inst_Ecrevisse])