]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA8/Macro/macr_aspic_mail_ops.py
Salome HOME
d1b14cb6f571fc7d93c6b93075e702d5b6d7335d
[tools/eficas.git] / Aster / Cata / cataSTA8 / Macro / macr_aspic_mail_ops.py
1 #@ MODIF macr_aspic_mail_ops Macro  DATE 25/09/2006   AUTEUR GALENNE E.GALENNE 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
9 # (AT YOUR OPTION) ANY LATER VERSION.                                                  
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 import os.path
23 from math import sqrt, cos, sin, pi, pow, tan
24
25 # Ecriture du fichier GIBI principal (dgib) - ASPID0
26 def write_file_dgib_ASPID0(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
27                            ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE,
28                            ITYPSO, DPENE, NIVMAG, loc_datg):
29   import aster
30 # Ouverture du fichier d'entrée de commandes
31   fdgib=open(nomFichierDATG,'w')
32   texte = """
33 ****************************************************************
34 opti echo 0;
35 epT1     = %s;
36 DeT1     = %s;
37 d1       = %s;
38 d2       = %s;
39 epT2     = %s;
40 DeT2     = %s;
41 Zmax     = %s;
42 type_s   = %s;
43 d_pene   = %s;
44 h        = %s;
45 angl_s   = %s;
46 jeu      = %s;
47 epC      = %s;
48 DeC      = %s;
49 Xmax     = %s;
50 typmai   = MOT %s;
51 theta    = %s;
52 typele   = MOT %s;
53 typ_eque = MOT SAINE;
54 nivmag   = %s;
55 ****************************************************************
56 """ % (EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, ITYPSO, DPENE, H,
57        ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE, NIVMAG)
58   aster.affiche('MESSAGE',texte + ' + aspic.datg...\n')
59   texte = texte + open(os.path.join(loc_datg, 'aspic.datg'), 'r').read()
60   fdgib.write(texte)
61   fdgib.close()
62
63 # Ecriture du fichier GIBI principal (dgib) - ASPID1
64 def write_file_dgib_ASPID1(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
65                            ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,THETA,
66                            A,C,EPS, RC0, NS,NC,NT,POSI, NDT,FETIRF,FETIRP,
67                            TFISS,ZETA,ITYPSO,DPENE, NIVMAG, loc_datg) :
68
69   import aster
70 # Ouverture du fichier d'entrée de commandes
71   fdgib=open(nomFichierDATG,'w')
72   POIVIR = ' ;                                         \n'
73   texte='****************************************************************\n'
74   texte=texte+'opti echo 0 ;                                                   \n'
75   texte=texte+'epT1   = '+str(EPT1)         +POIVIR
76   texte=texte+'DeT1   = '+str(DET1)         +POIVIR
77   texte=texte+'d1     = '+str(D1)           +POIVIR
78   texte=texte+'d2     = '+str(D2)           +POIVIR
79   texte=texte+'epT2   = '+str(EPT2)         +POIVIR
80   texte=texte+'DeT2   = '+str(DET2)         +POIVIR
81   texte=texte+'Zmax   = '+str(ZMAX)         +POIVIR
82   texte=texte+'type_s = '+str(ITYPSO)       +POIVIR
83   texte=texte+'d_pene = '+str(DPENE)        +POIVIR
84   texte=texte+'h      = '+str(H)            +POIVIR
85   texte=texte+'angl_s = '+str(ALPHA)        +POIVIR
86   texte=texte+'jeu    = '+str(JEU)          +POIVIR
87   texte=texte+'epC    = '+str(EPC)          +POIVIR
88   texte=texte+'DeC    = '+str(DEC)          +POIVIR
89   texte=texte+'Xmax   = '+str(XMAX)         +POIVIR
90   texte=texte+'typmai =  MOT '+TYPMAI       +POIVIR
91   texte=texte+'theta  = '+str(THETA)        +POIVIR
92   texte=texte+'a      = '+str(A)            +POIVIR
93   texte=texte+'c      = '+str(C)            +POIVIR
94   texte=texte+'zeta   = '+str(ZETA)         +POIVIR
95   texte=texte+'eps    = '+str(EPS)          +POIVIR
96   texte=texte+'rc0    = '+str(RC0)          +POIVIR
97   texte=texte+'ns     = '+str(NS)           +POIVIR
98   texte=texte+'nc     = '+str(NC)           +POIVIR
99   texte=texte+'nt     = '+str(NT)           +POIVIR
100   texte=texte+'dir_fiss = MOT '+POSI        +POIVIR
101   texte=texte+'pos_fiss = MOT '+TFISS       +POIVIR
102   texte=texte+'ndt    = '+str(NDT)          +POIVIR
103   texte=texte+'f_etir_f = '+str(FETIRF)     +POIVIR
104   texte=texte+'f_etir_p = '+str(FETIRP)     +POIVIR
105   texte=texte+'typ_eque = MOT '+'FISS_LON'  +POIVIR
106   texte=texte+'nivmag = '+str(NIVMAG)       +POIVIR
107   texte=texte+'*                                                               \n'
108   aster.affiche('MESSAGE',texte + ' + aspic_v2.datg...\n')
109   texte = texte + open(os.path.join(loc_datg, 'aspic_v2.datg'), 'r').read()
110   fdgib.write(texte)
111   fdgib.close()
112
113 # Ecriture du fichier GIBI principal (dgib) - ASPID2
114 def write_file_dgib_ASPID2(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX,
115                            H, ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,
116                            THETA, A, C, EPS, RC0, RC1, RC2, RC3,
117                            ALP,BETA, NS, NC, NT, POSI ,NDT,NSDT,TFISS,
118                            ZETA,ITYPSO,DPENE, NIVMAG, loc_datg) :
119
120   import aster
121   CALPHA = cos(ALPHA*pi/180.)
122   SALPHA = sin(ALPHA*pi/180.)
123   CTHETA = cos(THETA*pi/180.)
124   STHETA = sin(THETA*pi/180.)
125 #
126   AOLD = A
127 #
128   if (ITYPSO == 1) :
129 # PIQUAGE TYPE 1
130      if (POSI == 'DROIT') :
131 #    PIQUAGE DROIT
132         if (TFISS == 'DEB_INT') :
133 #       POSITION INTERNE
134            SGAMMA = STHETA * (DET1/2.0)/( (DEC/2.0) -EPC)
135            SGAMME = STHETA * (DET1/2.0)/( (DEC/2.0) )
136            RAPPA = sqrt(1.0 - pow(SGAMMA,2))
137            RAPPE = sqrt(1.0 - pow(SGAMME,2))
138            AP =  A - (1.0 - RAPPA)*A  
139            RAPP = (AP/EPC*RAPPE) + (1.0-(AP/EPC))*RAPPA
140            XA = (DET1/2.0) * CTHETA 
141            YA = (DET1/2.0) * STHETA      
142            ZA = ((DEC/2.0) -EPC) * sqrt(1.0 - pow(SGAMMA,2))
143            ZA0 = (DEC/2.0) - EPC
144            XA0 = DET1/2.0
145            XN0 = XA0
146            YN0 = 0.0 
147            ZN0 = ZA0 + A
148            XN = XN0 * CTHETA 
149            YN = XN0 * STHETA
150            SGAMN = YN / ZN0
151            ZN = ZN0 * sqrt(1.0 - (SGAMN*SGAMN))
152            D0N0 = sqrt( pow((XA0 - XN0),2) + pow((ZA0 - ZN0),2) )
153            DN = sqrt( pow((XA - XN),2) + pow((YA - YN),2) + pow((ZA - ZN),2) )
154            RAPP = D0N0 / DN
155            ECART = (1.0 - RAPP) * D0N0
156            A = A - ECART
157         elif (TFISS == 'DEB_EXT') :
158 #       POSITION EXTERNE
159            SGAMME = STHETA * (DET1/2.0)/ (DEC/2.0) 
160            RAPPE = sqrt(1.0 - pow(SGAMME,2))
161            A =  A  -(1.0 - RAPPE)*A  
162
163      elif (POSI == 'INCLINE') :
164 #    PIQUAGE INCLINE
165         SGAMMA = STHETA * (DET1/2.0)/ ( (DEC/2.0) -EPC)
166         XA = (DET1/2.0) * CTHETA 
167         YA = (DET1/2.0) * STHETA     
168         ZA = ((DEC/2.0) - EPC) * sqrt(1.0 - pow(SGAMMA,2))
169         ZA0 = (DEC/2.0) - EPC
170         ZD0 = DEC/2.0
171         XA0 = DET1/2.0
172         XD0 = XA0 + (tan(ALPHA*pi/180.0) * EPC)   
173         A0D0 = sqrt( pow((ZD0 - ZA0),2) + pow((XD0 - XA0),2) )
174         EPSIL = STHETA * tan(ALPHA*pi/180.0) 
175         PHI = (EPSIL * ZA) - YA
176         DELTA = pow(PHI,2) - ((1 + pow(EPSIL,2))*(pow(PHI,2) - (pow((DEC/2.0),2)*pow(EPSIL,2))))
177         if (STHETA > 0) :          
178            YD = ( sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
179         else :
180            YD = ( -1.0*sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
181
182         ZD = sqrt(pow((DEC/2.0),2) - pow(YD,2))  
183
184         if ( (abs(THETA - 0.0) < 1.e-3) or ((abs(THETA - 180.0)) < 1.e-3) ) :
185            XD = CTHETA * XD0
186         else :
187            XD = YD / tan(THETA*pi/180.0)
188
189         AD = sqrt( pow((XA - XD),2) + pow((YA - YD),2) + pow((ZA - ZD),2) )       
190         RAPP =  A0D0 / AD          
191
192         if (TFISS == 'DEB_EXT') :       
193            XN0 = XD0 - A*SALPHA 
194            YN0 = 0.0 
195            ZN0 = ZD0 - A*CALPHA 
196            XN = XN0 * CTHETA 
197            YN = XN0 * STHETA
198            DNXY = sqrt(pow(XD,2) + pow(YD,2)) - sqrt(pow(XN,2) + pow(YN,2))
199            DNXY0 = XD0 - XN0
200            RAPP = DNXY/DNXY0
201            # Correction necessaire dans le cas theta et/ou alpha grand
202            if (RAPP < 0.5) :
203               DXY = sqrt(pow(XD,2) + pow(YD,2) ) 
204               XN = XN * DXY/XD0
205               YN = YN * DXY/XD0
206            SGAMN = YN / ZN0
207            ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
208            D0N0 = sqrt( pow((XD0 - XN0),2) + pow((ZD0 - ZN0),2) )
209            DN = sqrt( pow((XD - XN),2) + pow((YD - YN),2) + pow((ZD - ZN),2) )       
210            RAPP = D0N0 / DN
211            ECART = (RAPP - 1.0) * D0N0
212            A = A + ECART
213            
214         if (TFISS == 'DEB_INT') :
215            XN0 = XA0 + A*SALPHA 
216            YN0 = 0.0
217            ZN0 = ZA0 + A*CALPHA 
218            XN = XN0 * CTHETA 
219            YN = XN0 * STHETA           
220            SGAMN = YN / ZN0
221            ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
222            D0N0 = sqrt( pow((XA0 - XN0),2) + pow((ZA0 - ZN0),2) )
223            DN = sqrt( pow((XA - XN),2) + pow((YA - YN),2) + pow((ZA - ZN),2) )       
224            RAPP = D0N0 / DN
225            ECART = (RAPP - 1.0) * D0N0
226            # Correction necessaire dans le cas theta grand (cf. AL9679)
227            if ( abs(STHETA) > 0.8) :
228               DXY = sqrt(pow(XD,2) + pow(YD,2) ) 
229               XN = XN * DXY/XD0
230               YN = YN * DXY/XD0
231               SGAMN = YN / ZN0
232               ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
233               D0N0 = sqrt( pow((XA0 - XN0),2) + pow((ZA0 - ZN0),2) )
234               DN = sqrt( pow((XA - XN),2) + pow((YA - YN),2) + pow((ZA - ZN),2) )       
235               RAPP = D0N0 / DN
236               ECART = (ECART + (RAPP - 1.0) * D0N0)/2
237            A = A + ECART
238
239
240   elif (ITYPSO == 2) :
241 # PIQUAGE TYPE 2
242      if (POSI == 'DROIT') :
243 #    PIQUAGE DROIT
244         SGAMMI = STHETA * ((DET1/2.0) - EPT1)/(DEC/2.0)
245         XI = ((DET1/2.0) - EPT1) * CTHETA 
246         YI = ((DET1/2.0) - EPT1) * STHETA
247         ZI =  (DEC/2.0)  * sqrt(1.0 - pow(SGAMMI,2))
248         XI0 = (DET1/2.0) -EPT1
249         YI0 = 0.0 
250         ZI0 = (DEC/2.0)
251         
252         SGAMMA = STHETA * (DET1/2.0)/((DEC/2.0) -EPC)
253         YA = (DET1/2.0) * STHETA     
254         ZA = ((DEC/2.0) - EPC) * sqrt(1.0 - pow(SGAMMA,2))
255         TGALP = H / EPC
256         EPSIL =  STHETA * TGALP
257         PHI = (EPSIL * ZA) - YA
258         DELTA = pow(PHI,2) - (1.0 + pow(EPSIL,2))*(pow(PHI,2) - pow((DEC/2.0),2)*pow(EPSIL,2)) 
259         if (STHETA > 0) :          
260            YD = (sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
261         else :
262            YD = (-1.0*sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
263
264         ZD = sqrt( pow((DEC/2.0),2) - pow(YD,2) )
265         if ( (abs(THETA - 0.0) < 1.0e-3) or
266              (abs(THETA - 180.0) < 1.0e-3) or
267              (abs(THETA + 180.0) < 1.0e-3) or
268              (abs(THETA + 90.0) < 1.0e-3) or
269              (abs(THETA - 90.0) < 1.0e-3) ) :
270            XD = CTHETA * ((DET1/2.0) + H)
271         else :
272            XD = YD / (tan(THETA*pi/180.0))
273
274         XD0 = (DET1/2.0) + H 
275         YD0 = 0.0 
276         ZD0 = (DEC/2.0) 
277         
278         if (TFISS == 'DEB_EXT') :
279            XN0 = XD0 - A
280            YN0 = 0.0 
281            ZN0 = ZI0 
282            XN = XN0 * CTHETA 
283            YN = XN0 * STHETA 
284            DZID = abs(ZI - ZD) 
285            DXYID = sqrt( pow((XD - XI),2) + pow((YD - YI),2) )
286            DXYIN = sqrt( pow((XN - XI),2) + pow((YN - YI),2) )
287            DZIN = (DXYIN * DZID) / DXYID
288            ZN = ZI - DZIN         
289            D0N0 = sqrt( pow((XD0 - XN0),2) + pow((ZD0 - ZN0),2) )
290            DN = sqrt( pow((XD - XN),2) + pow((YD - YN),2) + pow((ZD - ZN),2) ) 
291            RAPP = D0N0 / DN 
292            ECART = DN - D0N0 
293            A = A - ECART
294
295         if (TFISS == 'DEB_INT') :
296            XN0 = XI0 + A
297            YN0 = 0.0 
298            ZN0 = ZI0 
299            XN = XN0 * CTHETA
300            YN = XN0 * STHETA 
301            SGAMN = YN / ZN0 
302            ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
303            I0N0 = sqrt( pow((XI0 - XN0),2) + pow((ZI0 - ZN0),2) ) 
304            IN = sqrt( pow((XI - XN),2) + pow((YI - YN),2) + pow((ZI - ZN),2) ) 
305            RAPP = I0N0 / IN 
306            ECART = I0N0 * ( 1.0 - RAPP ) 
307            A = A - ECART
308         
309      elif (POSI == 'INCLINE') :
310 #    PIQUAGE INCLINE
311         TGALPHA = SALPHA/CALPHA
312         REPB = (DEC/2.0) + JEU + (EPT1*TGALPHA) 
313         SGAMB = (STHETA * DET1/2.0 ) / REPB 
314         CGAMB = sqrt(1.0 - pow(SGAMB,2)) 
315         XB = (DET1/2.0) * CTHETA
316         YB = (DET1/2.0) * STHETA
317         ZB = ( (DEC/2.0) + JEU + (EPT1*TGALPHA) ) * CGAMB
318         XB0 = (DET1/2.0)
319         YB0 = 0.0
320         ZB0 = (DEC/2.0) + JEU + (EPT1*TGALPHA)
321 #
322         RIT1 = (DET1/2.0) - EPT1 
323         REPG = (DEC/2.0) + JEU 
324         SGAMG = ((STHETA ) * RIT1) / REPG
325         CGAMG = sqrt(1.0 - pow(SGAMG,2))
326         XG = RIT1 * CTHETA
327         YG = RIT1 * STHETA
328         ZG = ((DEC/2.0) + JEU) * CGAMG
329         XG0 = RIT1
330         YG0 = 0.0
331         ZG0 = (DEC/2.0) + JEU
332 #
333         if (TFISS == 'DEB_INT')  :
334            XN0 = XG0 + A*CALPHA 
335            YN0 = 0.0
336            ZN0 = ZG0 + A*SALPHA 
337            XN = XN0 * CTHETA 
338            YN = XN0 * STHETA
339            SGAMN = YN / ZN0
340            ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
341            G0N0 = sqrt( pow((XG0 - XN0),2) + pow((ZG0 - ZN0),2) )
342            GN = sqrt( pow((XG - XN),2) + pow((YG - YN),2) + pow((ZG - ZN),2) )
343            RAPP = G0N0 / GN
344            ECART = (RAPP - 1.0) * G0N0
345            A = A + ECART
346
347         if (TFISS == 'DEB_EXT') :
348            XN0 = XB0 - A*CALPHA
349            YN0 = 0.0
350            ZN0 = ZB0 - A*SALPHA
351            XN = XN0 * CTHETA
352            YN = XN0 * STHETA
353            SGAMN = YN / ZN0
354            ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
355            B0N0 = sqrt( pow((XB0 - XN0),2) + pow((ZB0 - ZN0),2) )
356            BN = sqrt( pow((XB - XN),2) + pow((YB - YN),2) + pow((ZB - ZN),2) )
357            RAPP = B0N0 / BN
358            ECART = (RAPP - 1.0) * B0N0
359            A = A + ECART
360
361   message= ' <MACR_ASPIC_MAIL> CORRECTION PROFONDEUR DEFAUT \n'
362   message=message+ ' PROFONDEUR SUR PIQUAGE   : %.2f \n'%AOLD
363   message=message+ ' PROFONDEUR SUR EQUERRE   : %.2f \n'%A
364   aster.affiche('MESSAGE',message)
365
366 # Ouverture du fichier d'entrée de commandes
367
368   fdgib=open(nomFichierDATG,'w')
369   POIVIR = ' ;                                         \n'
370   texte='****************************************************************\n'
371   texte=texte+'opti echo 0 ;                                                   \n'
372   texte=texte+'epT1   = '+str(EPT1)         +POIVIR
373   texte=texte+'DeT1   = '+str(DET1)         +POIVIR
374   texte=texte+'d1     = '+str(D1)           +POIVIR
375   texte=texte+'d2     = '+str(D2)           +POIVIR
376   texte=texte+'epT2   = '+str(EPT2)         +POIVIR
377   texte=texte+'DeT2   = '+str(DET2)         +POIVIR
378   texte=texte+'Zmax   = '+str(ZMAX)         +POIVIR
379   texte=texte+'type_s = '+str(ITYPSO)       +POIVIR
380   texte=texte+'d_pene = '+str(DPENE)        +POIVIR
381   texte=texte+'h      = '+str(H)            +POIVIR
382   texte=texte+'angl_s = '+str(ALPHA)        +POIVIR
383   texte=texte+'jeu    = '+str(JEU)          +POIVIR
384   texte=texte+'epC    = '+str(EPC)          +POIVIR
385   texte=texte+'DeC    = '+str(DEC)          +POIVIR
386   texte=texte+'Xmax   = '+str(XMAX)         +POIVIR
387   texte=texte+'typmai =  MOT '+TYPMAI       +POIVIR
388   texte=texte+'theta  = '+str(THETA)        +POIVIR
389   texte=texte+'a      = '+str(A)            +POIVIR
390   texte=texte+'c      = '+str(C)            +POIVIR
391   texte=texte+'zeta   = '+str(ZETA)         +POIVIR
392   texte=texte+'eps    = '+str(EPS)          +POIVIR
393   texte=texte+'rc0    = '+str(RC0)          +POIVIR
394   texte=texte+'rc1    = '+str(RC1)          +POIVIR
395   texte=texte+'rc2    = '+str(RC2)          +POIVIR
396   texte=texte+'rc3    = '+str(RC3)          +POIVIR
397   texte=texte+'alpha  = '+str(ALP)          +POIVIR
398   texte=texte+'beta   = '+str(BETA)         +POIVIR
399   texte=texte+'ns     = '+str(NS)           +POIVIR
400   texte=texte+'nc     = '+str(NC)           +POIVIR
401   texte=texte+'nt     = '+str(NT)           +POIVIR
402   texte=texte+'dir_fiss = MOT '+POSI        +POIVIR
403   texte=texte+'pos_fiss = MOT '+TFISS       +POIVIR
404   texte=texte+'ndt    = '+str(NDT)          +POIVIR
405   texte=texte+'nsdt   = '+str(NSDT)         +POIVIR
406   texte=texte+'typ_eque = MOT '+'FISS_COU'  +POIVIR
407   texte=texte+'nivmag = '+str(NIVMAG)       +POIVIR
408   texte=texte+'*                                                               \n'
409   texte=texte+'list epc ;\n'
410   aster.affiche('MESSAGE',texte + ' + aspic.datg...\n')
411   texte = texte + open(os.path.join(loc_datg, 'aspic.datg'), 'r').read()
412   fdgib.write(texte)
413   fdgib.close()
414
415 def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
416                              SOUDURE,CORPS,FISS_SOUDURE,IMPRESSION,INFO,
417                         **args):
418   """
419      Ecriture de la macro MACR_ASPIC_MAIL
420   """
421   from Accas import _F
422   import types
423   import aster 
424   from Utilitai.Utmess import UTMESS
425   ier=0
426   
427 # On importe les definitions des commandes a utiliser dans la macro
428   EXEC_LOGICIEL =self.get_cmd('EXEC_LOGICIEL')
429   PRE_GIBI      =self.get_cmd('PRE_GIBI')
430   LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
431   DEFI_GROUP    =self.get_cmd('DEFI_GROUP')
432   MODI_MAILLAGE =self.get_cmd('MODI_MAILLAGE')
433   CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
434   IMPR_RESU     =self.get_cmd('IMPR_RESU')
435   DEFI_FICHIER  =self.get_cmd('DEFI_FICHIER')
436
437 # La macro compte pour 1 dans la numerotation des commandes
438   self.set_icmd(1)
439
440   TYPELE = TYPE_ELEM
441   NIVMAG = EXEC_MAILLAGE['NIVE_GIBI']
442 #
443 #     --- raffinement maillage ---
444 #
445   TYPMAI = RAFF_MAIL
446   GROS   = (TYPMAI=='GROS')
447   if GROS : NBAZIT = 40
448   else    : NBAZIT = 48
449 #
450 #     --- caracteristiques de la tubulure ---
451 #
452   EPT1  = TUBULURE['E_BASE'   ]
453   DET1  = TUBULURE['DEXT_BASE']
454   D1    = TUBULURE['L_BASE'   ]
455   D2    = TUBULURE['L_CHANF'  ]
456   EPT2  = TUBULURE['E_TUBU'   ]
457   DET2  = TUBULURE['DEXT_TUBU']
458   ZMAX  = TUBULURE['Z_MAX'    ]
459   TYPSOU= TUBULURE['TYPE'     ]
460   DPENE = TUBULURE['L_PENETR' ]
461   if TYPSOU=='TYPE_2' and DPENE>0.0 : 
462     UTMESS('F', "MACR_ASPIC_MAIL", "les piquages penetrants sont autorises uniquement avec les soudures de type 1")
463   if TYPSOU=='TYPE_2' :
464      ITYPSO = 2
465   else :
466      ITYPSO = 1
467 #
468 #     --- caracteristiques de la soudure ---
469 #
470   H     = SOUDURE['H_SOUD'   ]
471   ALPHA = SOUDURE['ANGL_SOUD']
472   JEU   = SOUDURE['JEU_SOUD' ]
473 #
474 #     --- caracteristiques du corps ---
475 #
476   EPC   = CORPS  ['E_CORP'   ]
477   DEC   = CORPS  ['DEXT_CORP']
478   XMAX  = CORPS  ['X_MAX'    ]
479   EPSI  = 1.E-03
480   RMB   = ( DET1 - EPT1 ) / 2.0
481   VAL1  = 1.5 * sqrt( RMB**3 / EPT1 )
482   VAL3  = 3.0 * sqrt( RMB    * EPT1 )
483   RMT   = ( DET2 - EPT2 ) / 2.0
484   VAL2  = 1.5 * sqrt( RMT**3 / EPT2 )
485   VAL4  = 3.0 * sqrt( RMT    * EPT2 )
486   LZMAX = max ( VAL1 , VAL2, VAL3, VAL4 )
487   ZMAXC = LZMAX + ( DEC/2.0 ) + D1 + D2
488   LOK = ( abs(ZMAX-ZMAXC) <= EPSI * abs(ZMAXC) )
489   if not LOK :
490     message=         ' erreur donnees \n'
491     message=message+ ' Z_MAX FOURNIE   :  %.2f \n'%ZMAX
492     message=message+ ' Z_MAX CALCULEE  :  %.2f \n'%ZMAXC
493     UTMESS('F', "MACR_ASPIC_MAIL", message)
494   RMC   = ( DEC - EPC ) / 2.0
495   VAL1  = 1.5 * sqrt( RMC**3 / EPC )
496   VAL2  = 3.0 * sqrt( RMC    * EPC )
497   LXMAX = max( VAL1 , VAL2 )
498   XMAXC = LXMAX + ( DET1 / 2.0 )
499   LOK = ( abs(XMAX-XMAXC) <= EPSI * abs(XMAXC) )
500   if not LOK :
501     message=         ' erreur donnees \n'
502     message=message+ ' Z_MAX FOURNIE   :  %.2f \n'%ZMAX
503     message=message+ ' Z_MAX CALCULEE  :  %.2f \n'%ZMAXC
504     UTMESS('F', "MACR_ASPIC_MAIL", message)
505   message=         ' MACR_ASPIC_MAIL / X_MAX CALCULEE : %.2f \n'%XMAX
506   message=message+ ' MACR_ASPIC_MAIL / Z_MAX CALCULEE : %.2f \n'%XMAXC
507   aster.affiche('MESSAGE',message)
508 #
509 #     --- caracteristiques de la fissure ---
510 #
511   SAIN   = 0
512   FISLON = 0
513   FISCOU = 0
514   THETA  = 0.0
515   TFISS  = None
516   if FISS_SOUDURE==None :
517      SAIN = 1
518   else :
519      if   FISS_SOUDURE['TYPE']=='LONGUE' : FISLON = 1
520      elif FISS_SOUDURE['TYPE']=='COURTE' : FISCOU = 1
521      THETA = FISS_SOUDURE['AZIMUT'        ]
522      EPS   = FISS_SOUDURE['ANGL_OUVERTURE']
523      AXIS  = FISS_SOUDURE['AXIS'          ]
524      POSI  = FISS_SOUDURE['POSITION'      ]
525      TFISS = FISS_SOUDURE['FISSURE'       ]
526      A     = FISS_SOUDURE['PROFONDEUR'    ]
527      if      FISS_SOUDURE['LONGUEUR'      ]!=None :
528         C  = FISS_SOUDURE['LONGUEUR'      ]
529         N1 = 1
530      else : N1 = 0
531      if (TFISS=='DEB_INT') and (POSI=='INCLINE') and (DPENE>0.0) and (JEU>0.0) : 
532        message=         ' erreur donnees \n'
533        message=message+ ' dans le cas de fissures \n'
534        message=message+ ' inclinees debouchant en peau interne avec \n'
535        message=message+ ' piquage penetrant le jeu doit etre nul \n'
536        UTMESS('F', "MACR_ASPIC_MAIL", message)
537      ZETA = 0.5
538      if TFISS not in ('DEB_INT','DEB_EXT') :
539         if FISS_SOUDURE['LIGA_INT']==None : 
540            message=         ' erreur donnees \n'
541            message=message+ ' dans le cas de fissures internes\n'
542            message=message+ ' (NON_DEB) le ligament inferieur est obligatoire \n'
543            UTMESS('F', "MACR_ASPIC_MAIL", message)
544         LIGA  = FISS_SOUDURE['LIGA_INT']
545         if POSI=='DROIT' :
546            if ITYPSO==1 : ZETA = (A+LIGA)/(EPC+H)
547            else         : ZETA = (A+LIGA)/(EPT1+H)
548         else :
549            if ITYPSO==1 : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPC
550            else         : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPT1
551         if ZETA < 0.1   :
552            UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop petit ")
553         if ZETA > 0.9   :
554            UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop grand ")
555         if LIGA < 0.1*EPC :
556            UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop petit ")
557         if (LIGA + 2.0*A) > 0.9*EPC :
558            UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop grand ")
559      if N1==0 :
560         if FISCOU      :
561            UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures courte il faut preciser la longueur")
562         if AXIS=='NON' :
563            UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de la fissure longue il faut preciser la longueur ou axis=oui ")
564         C = 0.0
565      else :
566         if AXIS=='OUI' : UTMESS('A', "MACR_ASPIC_MAIL", "fissure axisymetrique : le mot clef <LONGUEUR> ne doit pas etre renseigne")
567      C = 0.5 * C
568      LEQU=2.*(pi*(DEC-EPC)-DET1+2.*EPT1)
569 #
570 # LPIQ est une valeur qui depend theoriquement de la fissure. la valeur
571 # ci-dessous est approchee car elle ne sert qu'a calculer les facteurs d'etirement
572 #
573      LPIQ=pi*(DET1)
574      if AXIS=='OUI' : C=100.0*LPIQ
575      RAPL=LEQU/LPIQ
576      if FISCOU :
577         RAP=A/C
578         CAS1=RAP<0.3499
579         CAS3=RAP>0.4999
580         CAS2= not (CAS1 or CAS3)
581         if CAS1 : ALP=0.8
582         if CAS2 : ALP=0.4
583         if CAS3 : ALP=0.0
584         BETA=1.0
585         if GROS and not CAS1 :
586           NDT=1
587           NSDT=2
588         else :
589           NDT=2
590           NSDT=4
591 #
592      if FISLON :
593        if GROS :
594          NDT=2
595          FETIRF=30.*RAPL
596          FETIRP=60.*RAPL
597        else :
598          NDT=3
599          FETIRF=15.*RAPL
600          FETIRP=30.*RAPL
601 #
602      RC0 = FISS_SOUDURE['RAYON_TORE']
603      if (FISCOU and RC0==None) :
604        if GROS : RC0=0.12
605        else    : RC0=0.10
606        if CAS1 : RC0=0.08
607        RC0=RC0*A
608      if (FISLON and RC0==None) : RC0=A/(NDT+1)
609 #
610      RC1 = FISS_SOUDURE['COEF_MULT_RC1']
611      if (FISCOU and RC1==None) :
612        if GROS : RC1=1.2
613        else    : RC1=1.0
614 #
615      RC2 = FISS_SOUDURE['COEF_MULT_RC2']
616      if (FISCOU and RC2==None) :
617        if GROS : RC2=1.4
618        else    : RC2=1.2
619 #
620      RC3 = FISS_SOUDURE['COEF_MULT_RC3']
621      if (FISCOU and RC3==None) :
622        if GROS :
623           if CAS1 : RC3=2.5
624           else    : RC3=1.0  # valeur non utilisee
625        else : 
626           if CAS3 : RC3=2.2
627           else    : RC3=2.0
628 #
629      NT = FISS_SOUDURE['NB_TRANCHE']
630      if (FISCOU and NT==None) :
631        if GROS : NT = 8
632        else    : NT = 16
633        if CAS1 : NT = NT*2
634      if (FISLON and NT==None) : NT=0
635 #
636      NS = FISS_SOUDURE['NB_SECTEUR']
637      if (FISCOU and NS==None) :
638        if GROS : NS = 2
639        else    : NS = 4
640      if (FISLON and NS==None) :
641        if GROS : NS = 2
642        else    : NS = 4
643 #
644      NC = FISS_SOUDURE['NB_COURONNE']
645      if (FISCOU and NC==None) :
646        if GROS : NC = 3
647        else    : NC = 4
648      if (FISLON and NC==None) :
649        if GROS : NC = 3
650        else    : NC = 4
651 #
652   loc_gibi=aster.repout()
653   logiel = EXEC_MAILLAGE['LOGICIEL'  ]
654   UNITD  = EXEC_MAILLAGE['UNITE_DATG']
655   UNITS  = EXEC_MAILLAGE['UNITE_MGIB']
656   if   logiel=='GIBI98'  : logiel = loc_gibi+'gibi98'
657   elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000'
658   else                   :
659        UTMESS('F', "MACR_ASPIC_MAIL", "seuls gibi98 et gibi2000 sont appelables ")
660 #
661 #     --- ecriture sur le fichier .datg  de la procedure ---
662 #
663 # Nom du fichier de commandes pour GIBI
664   nomFichierDATG = 'fort.'+str(UNITD)
665 # Nom du fichier de maillage GIBI
666   nomFichierGIBI = 'fort.'+str(UNITS)
667   loc_datg = aster.repdex()
668   if SAIN   : write_file_dgib_ASPID0(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
669                                      ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE,
670                                      ITYPSO, DPENE, NIVMAG,loc_datg)
671   if FISLON : write_file_dgib_ASPID1(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
672                                      ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,THETA,
673                                      A,C,EPS, RC0,NS,NC,NT,POSI, NDT,FETIRF,FETIRP,
674                                      TFISS,ZETA,ITYPSO,DPENE, NIVMAG,loc_datg)
675   if FISCOU : write_file_dgib_ASPID2(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX,
676                                      H, ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,
677                                      THETA, A, C, EPS, RC0, RC1, RC2, RC3,
678                                      ALP,BETA, NS, NC, NT, POSI ,NDT,NSDT,TFISS,
679                                      ZETA,ITYPSO,DPENE, NIVMAG,loc_datg)
680
681   DEFI_FICHIER(ACTION='LIBERER',UNITE=19)
682   DEFI_FICHIER(ACTION='LIBERER',UNITE=20)
683   EXEC_LOGICIEL( LOGICIEL = logiel ,
684                  ARGUMENT = (nomFichierDATG,
685                              nomFichierGIBI), )
686 #
687   PRE_GIBI()
688 #
689   __MAPROV=LIRE_MAILLAGE(INFO=INFO)
690 #
691   motscles={}
692   motscles['CREA_GROUP_MA']=[]
693   l_CREA_GROUP_NO=[]
694   if SAIN :
695      l_CREA_GROUP_NO.append('S_LAT1')
696      l_CREA_GROUP_NO.append('S_LAT2')
697   else :
698      l_CREA_GROUP_NO.append('S_LAT1_C')
699      l_CREA_GROUP_NO.append('S_LAT2_C')
700      l_CREA_GROUP_NO.append('S_LAT1_T')
701      l_CREA_GROUP_NO.append('S_LAT2_T')
702      if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
703         l_CREA_GROUP_NO.append('PFONDINF')
704         l_CREA_GROUP_NO.append('PFONDSUP')
705      else :
706         l_CREA_GROUP_NO.append('PFONDFIS')
707      if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='COURTE') :
708         motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
709                                             NOM      = 'MAIL_ORI',
710                                             POSITION = 'INIT'     ))
711      if (TFISS[:4]=='DEB_') and (AXIS=='OUI') :
712         motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
713                                             NOM      = 'MAIL_ORI',
714                                             POSITION = 'INIT'     ))
715      if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
716         motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FOND_SUP',
717                                             NOM      = 'MA_ORI_S',
718                                             POSITION = 'INIT'     ))
719         motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FOND_INF',
720                                             NOM      = 'MA_ORI_I',
721                                             POSITION = 'INIT'     ))
722   l_CREA_GROUP_NO.append('S_FOND1')
723   l_CREA_GROUP_NO.append('S_FOND2')
724   l_CREA_GROUP_NO.append('EQUERRE')
725   motscles['CREA_GROUP_NO']=_F(GROUP_MA=l_CREA_GROUP_NO)
726 #
727   __MAPROV=DEFI_GROUP(reuse   =__MAPROV,
728                       MAILLAGE=__MAPROV,
729                       **motscles )
730 #
731   if not SAIN :
732      motscles={}
733      motscles['CREA_GROUP_NO']=[]
734      if not (TFISS=='NON_DEB')  :
735         motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = 'FONDFISS',))
736      if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
737         motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = ('FOND_SUP','FOND_INF',),))
738      __MAPROV=DEFI_GROUP(reuse   =__MAPROV,
739                          MAILLAGE=__MAPROV,
740                          **motscles )
741 #
742   __MAPROV=MODI_MAILLAGE(reuse   =__MAPROV,
743                          MAILLAGE=__MAPROV,
744                          EQUE_PIQUA=_F( GROUP_NO  = 'EQUERRE' ,
745                                         E_BASE    = EPT1  ,
746                                         DEXT_BASE = DET1  ,
747                                         L_BASE    = D1    ,
748                                         L_CHANF   = D2    ,
749                                         TYPE      = TYPSOU,
750                                         H_SOUD    = H     , 
751                                         ANGL_SOUD = ALPHA ,
752                                         JEU_SOUD  = JEU   ,
753                                         E_CORP    = EPC   , 
754                                         DEXT_CORP = DEC   ,
755                                         AZIMUT    = THETA ,
756                                         RAFF_MAIL = TYPMAI,
757                                         X_MAX     = XMAX  , )
758                          )
759 #
760
761   motscles={}
762   if TFISS=='DEB_INT' :
763      motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU','LEVRTUBU','LEVRCORP'),)
764   else :
765      motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU',),)
766   __MAPROV=MODI_MAILLAGE(reuse   =__MAPROV,
767                          MAILLAGE=__MAPROV,
768                          **motscles
769                          )
770 #
771   if SAIN :
772      __MAPROV=DEFI_GROUP(reuse         = __MAPROV,
773                          MAILLAGE      = __MAPROV,
774                          CREA_GROUP_NO = _F(GROUP_MA=('NIDXT','NEDXT','NIIXT','NEIXT')) )
775 #
776      for i in range(1,NBAZIT+1):
777        prec = EPC / 5.0
778        __MAPROV=DEFI_GROUP(reuse         = __MAPROV,
779                            MAILLAGE      = __MAPROV,
780                          CREA_GROUP_NO = ( _F( NOM       = 'NID'+str(i) ,
781                                                GROUP_NO  = 'NIDXT'      ,
782                                                NUME_INIT = i            ,
783                                                NUME_FIN  = i            ,),
784                                            _F( NOM       = 'NED'+str(i) ,
785                                                GROUP_NO  = 'NEDXT'      ,
786                                                NUME_INIT = i            ,
787                                                NUME_FIN  = i            ,),
788                                            _F( NOM       = 'NII'+str(i) ,
789                                                GROUP_NO  = 'NIIXT'      ,
790                                                NUME_INIT = i            ,
791                                                NUME_FIN  = i            ,),
792                                            _F( NOM       = 'NEI'+str(i) ,
793                                                GROUP_NO  = 'NEIXT'      ,
794                                                NUME_INIT = i            ,
795                                                NUME_FIN  = i            ,),
796                                            _F( NOM       = 'LDN'+str(i) ,
797                                                GROUP_MA  = 'LD' +str(i) ,),
798                                            _F( NOM       = 'LD' +str(i) ,
799                                                GROUP_NO  = 'LDN'+str(i) ,
800                                                OPTION    = 'SEGM_DROI_ORDO',
801                                                PRECISION =  prec        ,
802                                                CRITERE   = 'ABSOLU'     ,
803                                                GROUP_NO_ORIG   = 'NID'+str(i),
804                                                GROUP_NO_EXTR   = 'NED'+str(i),),
805                                            _F( NOM       = 'LIN'+str(i) ,
806                                                GROUP_MA  = 'LI' +str(i) ,),
807                                            _F( NOM       = 'LI' +str(i) ,
808                                                GROUP_NO  = 'LIN'+str(i) ,
809                                                OPTION    = 'SEGM_DROI_ORDO',
810                                                PRECISION =  prec        ,
811                                                CRITERE   = 'ABSOLU'     ,
812                                                GROUP_NO_ORIG   = 'NII'+str(i),
813                                                GROUP_NO_EXTR   = 'NEI'+str(i),),))
814 #
815 #
816 #     --- commande CREA_MAILLAGE ---
817 #
818   self.DeclareOut('nomres',self.sd)
819   nomres=CREA_MAILLAGE( MAILLAGE=__MAPROV,
820                         CREA_POI1 = ( _F( NOM_GROUP_MA = 'P1_CORP ' ,
821                                           GROUP_NO     = 'P1_CORP ' , ),
822                                       _F( NOM_GROUP_MA = 'P2_CORP ' ,
823                                           GROUP_NO     = 'P2_CORP ' , ),
824                                       _F( NOM_GROUP_MA = 'P_TUBU ' ,
825                                           GROUP_NO     = 'P_TUBU ' ,  ),)
826                          )
827 #
828   if IMPRESSION!=None:
829      for impr in IMPRESSION :
830 #
831          motscles={}
832          if impr['FORMAT']=='IDEAS'  : motscles['VERSION']  =impr['VERSION']
833          if impr['FORMAT']=='CASTEM' : motscles['NIVE_GIBI']=impr['NIVE_GIBI']
834          if impr['UNITE']!=None      : motscles['UNITE']    =impr['UNITE']
835          impr_resu = _F( MAILLAGE = nomres,)
836 #
837          IMPR_RESU( RESU = impr_resu, 
838                     FORMAT = impr['FORMAT'],**motscles )
839 #
840 #
841 #     --- Verification profondeur fissure (courte débouchante) ---
842 #
843   if FISCOU  and not (TFISS=='NON_DEB')    :
844       nomres=DEFI_GROUP( reuse=nomres,
845                          MAILLAGE=nomres,
846                          CREA_GROUP_NO=(_F( GROUP_MA = 'LEVRTUBU',),
847                                         _F( NOM = 'FONDORDO',
848                                             GROUP_MA = 'FONDFISS',
849                                             OPTION = 'NOEUD_ORDO',),),);
850
851       nommail=nomres.nom
852       coord   =aster.getvectjev(nommail.ljust(8)+'.COORDO    .VALE')
853       collgrno=aster.getcolljev(nommail.ljust(8)+'.GROUPENO')
854
855       grfo=collgrno['FONDORDO']
856       Nbno = len(grfo)  
857       listx = [None]*Nbno
858       listy = [None]*Nbno
859       listz = [None]*Nbno
860       k = 0
861       for node in grfo:
862          listx[k] = coord[3*(node-1)]
863          listy[k] = coord[3*(node-1)+1]
864          listz[k] = coord[3*(node-1)+2]
865          k = k+1
866
867       XAB = listx[Nbno-1] - listx[0]
868       YAB = listy[Nbno-1] - listy[0]
869       ZAB = listz[Nbno-1] - listz[0]
870       AB = sqrt(XAB*XAB + YAB*YAB +ZAB*ZAB)
871       d = 0
872       for k in range(0,Nbno) :
873          XAM = listx[k] - listx[0]
874          YAM = listy[k] - listy[0]
875          ZAM = listz[k] - listz[0]
876          Xvect = YAB*ZAM-ZAB*YAM
877          Yvect = ZAB*XAM-XAB*ZAM
878          Zvect = XAB*YAM-YAB*XAM
879          AM = sqrt(Xvect*Xvect+ Yvect*Yvect +Zvect*Zvect)
880          dk = AM/AB
881          if dk > d :
882             XC = listx[k]
883             YC = listy[k]
884             ZC = listz[k]
885          d = max(dk, d)
886    
887       grlev=collgrno['LEVRTUBU']
888       Nbnol = len(grlev)  
889       listxl = [None]*Nbnol
890       listyl = [None]*Nbnol
891       listzl = [None]*Nbnol
892       k = 0
893       for node in grlev:
894          listxl[k] = coord[3*(node-1)]
895          listyl[k] = coord[3*(node-1)+1]
896          listzl[k] = coord[3*(node-1)+2]
897          k = k+1
898       dist = 0
899       for k in range(0,Nbnol) :
900          XAM = listxl[k] - listx[0]
901          YAM = listyl[k] - listy[0]
902          ZAM = listzl[k] - listz[0]
903          Scal = (XAB*XAM + YAB*YAM + ZAB*ZAM)/(AB*AB)
904          if (abs(Scal) < 0.51) and (abs(Scal) > 0.49) :
905             Xk = listxl[k] -XC
906             Yk = listyl[k] -YC
907             Zk = listzl[k] -ZC
908             dk = sqrt(Xk**2+ Yk**2 +Zk**2)
909             dist = max(dk, dist)
910       
911       texte="<MACR_ASPIC_MAIL> PROFONDEUR DE LA FISSURE DANS LE MAILLAGE : %.2f \n"%dist
912       aster.affiche('MESSAGE',texte)
913 #      
914   return ier
915
916