Salome HOME
cd7ea66de5a15926e0ecc81072e6a8b2ea9ff459
[tools/eficas.git] / Aster / Cata / cataSTA8 / Macro / macr_aspic_mail_ops.py
1 #@ MODIF macr_aspic_mail_ops Macro  DATE 07/05/2008   AUTEUR MACOCCO K.MACOCCO 
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 = ( (ZMAX-ZMAXC) >= -1.* EPSI * abs(ZMAXC) )
489   if not LOK :
490     message= "La valeur de Z_MAX (cote maximale de la tubulure) est inférieure à la longueur\n" 
491     message=message+ " d'amortissement calculée :          \n"
492     message=message+ ' Z_MAX FOURNIE   :  %.2f \n'%ZMAX
493     message=message+ ' Z_MAX CALCULEE  :  %.2f \n'%ZMAXC
494     UTMESS('F', "MACR_ASPIC_MAIL", message)
495   RMC   = ( DEC - EPC ) / 2.0
496   VAL1  = 1.5 * sqrt( RMC**3 / EPC )
497   VAL2  = 3.0 * sqrt( RMC    * EPC )
498   LXMAX = max( VAL1 , VAL2 )
499   XMAXC = LXMAX + ( DET1 / 2.0 )
500   LOK = ( (XMAX-XMAXC) >= -1.* EPSI * abs(XMAXC) )
501   if not LOK :
502     message=         ' erreur donnees \n'
503     message=message+ ' Z_MAX FOURNIE   :  %.2f \n'%ZMAX
504     message=message+ ' Z_MAX CALCULEE  :  %.2f \n'%ZMAXC
505     UTMESS('F', "MACR_ASPIC_MAIL", message)
506   message=         ' MACR_ASPIC_MAIL / X_MAX CALCULEE : %.2f \n'%XMAX
507   message=message+ ' MACR_ASPIC_MAIL / Z_MAX CALCULEE : %.2f \n'%XMAXC
508   aster.affiche('MESSAGE',message)
509 #
510 #     --- caracteristiques de la fissure ---
511 #
512   SAIN   = 0
513   FISLON = 0
514   FISCOU = 0
515   THETA  = 0.0
516   TFISS  = None
517   if FISS_SOUDURE==None :
518      SAIN = 1
519   else :
520      if   FISS_SOUDURE['TYPE']=='LONGUE' : FISLON = 1
521      elif FISS_SOUDURE['TYPE']=='COURTE' : FISCOU = 1
522      THETA = FISS_SOUDURE['AZIMUT'        ]
523      EPS   = FISS_SOUDURE['ANGL_OUVERTURE']
524      AXIS  = FISS_SOUDURE['AXIS'          ]
525      POSI  = FISS_SOUDURE['POSITION'      ]
526      TFISS = FISS_SOUDURE['FISSURE'       ]
527      A     = FISS_SOUDURE['PROFONDEUR'    ]
528      if      FISS_SOUDURE['LONGUEUR'      ]!=None :
529         C  = FISS_SOUDURE['LONGUEUR'      ]
530         N1 = 1
531      else : N1 = 0
532      if (TFISS=='DEB_INT') and (POSI=='INCLINE') and (DPENE>0.0) and (JEU>0.0) : 
533        message=         ' erreur donnees \n'
534        message=message+ ' dans le cas de fissures \n'
535        message=message+ ' inclinees debouchant en peau interne avec \n'
536        message=message+ ' piquage penetrant le jeu doit etre nul \n'
537        UTMESS('F', "MACR_ASPIC_MAIL", message)
538      ZETA = 0.5
539      if TFISS not in ('DEB_INT','DEB_EXT') :
540         if FISS_SOUDURE['LIGA_INT']==None : 
541            message=         ' erreur donnees \n'
542            message=message+ ' dans le cas de fissures internes\n'
543            message=message+ ' (NON_DEB) le ligament inferieur est obligatoire \n'
544            UTMESS('F', "MACR_ASPIC_MAIL", message)
545         LIGA  = FISS_SOUDURE['LIGA_INT']
546         if POSI=='DROIT' :
547            if ITYPSO==1 : ZETA = (A+LIGA)/(EPC+H)
548            else         : ZETA = (A+LIGA)/(EPT1+H)
549         else :
550            if ITYPSO==1 : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPC
551            else         : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPT1
552         if ZETA < 0.1   :
553            UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop petit ")
554         if ZETA > 0.9   :
555            UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop grand ")
556         if LIGA < 0.1*EPC :
557            UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop petit ")
558         if (LIGA + 2.0*A) > 0.9*EPC :
559            UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures internes (NON_DEB) le ligament est trop grand ")
560      if N1==0 :
561         if FISCOU      :
562            UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de fissures courte il faut preciser la longueur")
563         if AXIS=='NON' :
564            UTMESS('F', "MACR_ASPIC_MAIL", "dans le cas de la fissure longue il faut preciser la longueur ou axis=oui ")
565         C = 0.0
566      else :
567         if AXIS=='OUI' : UTMESS('A', "MACR_ASPIC_MAIL", "fissure axisymetrique : le mot clef <LONGUEUR> ne doit pas etre renseigne")
568      C = 0.5 * C
569      LEQU=2.*(pi*(DEC-EPC)-DET1+2.*EPT1)
570 #
571 # LPIQ est une valeur qui depend theoriquement de la fissure. la valeur
572 # ci-dessous est approchee car elle ne sert qu'a calculer les facteurs d'etirement
573 #
574      LPIQ=pi*(DET1)
575      if AXIS=='OUI' : C=100.0*LPIQ
576      RAPL=LEQU/LPIQ
577      if FISCOU :
578         RAP=A/C
579         CAS1=RAP<0.3499
580         CAS3=RAP>0.4999
581         CAS2= not (CAS1 or CAS3)
582         if CAS1 : ALP=0.8
583         if CAS2 : ALP=0.4
584         if CAS3 : ALP=0.0
585         BETA=1.0
586         if GROS and not CAS1 :
587           NDT=1
588           NSDT=2
589         else :
590           NDT=2
591           NSDT=4
592 #
593      if FISLON :
594        if GROS :
595          NDT=2
596          FETIRF=30.*RAPL
597          FETIRP=60.*RAPL
598        else :
599          NDT=3
600          FETIRF=15.*RAPL
601          FETIRP=30.*RAPL
602 #
603      RC0 = FISS_SOUDURE['RAYON_TORE']
604      if (FISCOU and RC0==None) :
605        if GROS : RC0=0.12
606        else    : RC0=0.10
607        if CAS1 : RC0=0.08
608        RC0=RC0*A
609      if (FISLON and RC0==None) : RC0=A/(NDT+1)
610 #
611      RC1 = FISS_SOUDURE['COEF_MULT_RC1']
612      if (FISCOU and RC1==None) :
613        if GROS : RC1=1.2
614        else    : RC1=1.0
615 #
616      RC2 = FISS_SOUDURE['COEF_MULT_RC2']
617      if (FISCOU and RC2==None) :
618        if GROS : RC2=1.4
619        else    : RC2=1.2
620 #
621      RC3 = FISS_SOUDURE['COEF_MULT_RC3']
622      if (FISCOU and RC3==None) :
623        if GROS :
624           if CAS1 : RC3=2.5
625           else    : RC3=1.0  # valeur non utilisee
626        else : 
627           if CAS3 : RC3=2.2
628           else    : RC3=2.0
629 #
630      NT = FISS_SOUDURE['NB_TRANCHE']
631      if (FISCOU and NT==None) :
632        if GROS : NT = 8
633        else    : NT = 16
634        if CAS1 : NT = NT*2
635      if (FISLON and NT==None) : NT=0
636 #
637      NS = FISS_SOUDURE['NB_SECTEUR']
638      if (FISCOU and NS==None) :
639        if GROS : NS = 2
640        else    : NS = 4
641      if (FISLON and NS==None) :
642        if GROS : NS = 2
643        else    : NS = 4
644 #
645      NC = FISS_SOUDURE['NB_COURONNE']
646      if (FISCOU and NC==None) :
647        if GROS : NC = 3
648        else    : NC = 4
649      if (FISLON and NC==None) :
650        if GROS : NC = 3
651        else    : NC = 4
652 #
653   loc_gibi=aster.repout()
654   logiel = EXEC_MAILLAGE['LOGICIEL'  ]
655   UNITD  = EXEC_MAILLAGE['UNITE_DATG']
656   UNITS  = EXEC_MAILLAGE['UNITE_MGIB']
657   if   logiel=='GIBI98'  : logiel = loc_gibi+'gibi98'
658   elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000'
659   else                   :
660        UTMESS('F', "MACR_ASPIC_MAIL", "seuls gibi98 et gibi2000 sont appelables ")
661 #
662 #     --- ecriture sur le fichier .datg  de la procedure ---
663 #
664 # Nom du fichier de commandes pour GIBI
665   nomFichierDATG = 'fort.'+str(UNITD)
666 # Nom du fichier de maillage GIBI
667   nomFichierGIBI = 'fort.'+str(UNITS)
668   loc_datg = aster.repdex()
669   if SAIN   : write_file_dgib_ASPID0(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
670                                      ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE,
671                                      ITYPSO, DPENE, NIVMAG,loc_datg)
672   if FISLON : write_file_dgib_ASPID1(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
673                                      ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,THETA,
674                                      A,C,EPS, RC0,NS,NC,NT,POSI, NDT,FETIRF,FETIRP,
675                                      TFISS,ZETA,ITYPSO,DPENE, NIVMAG,loc_datg)
676   if FISCOU : write_file_dgib_ASPID2(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX,
677                                      H, ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,
678                                      THETA, A, C, EPS, RC0, RC1, RC2, RC3,
679                                      ALP,BETA, NS, NC, NT, POSI ,NDT,NSDT,TFISS,
680                                      ZETA,ITYPSO,DPENE, NIVMAG,loc_datg)
681
682   DEFI_FICHIER(ACTION='LIBERER',UNITE=19)
683   DEFI_FICHIER(ACTION='LIBERER',UNITE=20)
684   EXEC_LOGICIEL( LOGICIEL = logiel ,
685                  ARGUMENT = (nomFichierDATG,
686                              nomFichierGIBI), )
687 #
688   PRE_GIBI()
689 #
690   __MAPROV=LIRE_MAILLAGE(INFO=INFO)
691 #
692   motscles={}
693   motscles['CREA_GROUP_MA']=[]
694   l_CREA_GROUP_NO=[]
695   if SAIN :
696      l_CREA_GROUP_NO.append('S_LAT1')
697      l_CREA_GROUP_NO.append('S_LAT2')
698   else :
699      l_CREA_GROUP_NO.append('S_LAT1_C')
700      l_CREA_GROUP_NO.append('S_LAT2_C')
701      l_CREA_GROUP_NO.append('S_LAT1_T')
702      l_CREA_GROUP_NO.append('S_LAT2_T')
703      if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
704         l_CREA_GROUP_NO.append('PFONDINF')
705         l_CREA_GROUP_NO.append('PFONDSUP')
706      else :
707         l_CREA_GROUP_NO.append('PFONDFIS')
708      if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='COURTE') :
709         motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
710                                             NOM      = 'MAIL_ORI',
711                                             POSITION = 'INIT'     ))
712      if (TFISS[:4]=='DEB_') and (AXIS=='OUI') :
713         motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
714                                             NOM      = 'MAIL_ORI',
715                                             POSITION = 'INIT'     ))
716      if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
717         motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FOND_SUP',
718                                             NOM      = 'MA_ORI_S',
719                                             POSITION = 'INIT'     ))
720         motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FOND_INF',
721                                             NOM      = 'MA_ORI_I',
722                                             POSITION = 'INIT'     ))
723   l_CREA_GROUP_NO.append('S_FOND1')
724   l_CREA_GROUP_NO.append('S_FOND2')
725   l_CREA_GROUP_NO.append('EQUERRE')
726   motscles['CREA_GROUP_NO']=_F(GROUP_MA=l_CREA_GROUP_NO)
727 #
728   __MAPROV=DEFI_GROUP(reuse   =__MAPROV,
729                       MAILLAGE=__MAPROV,
730                       **motscles )
731 #
732   if not SAIN :
733      motscles={}
734      motscles['CREA_GROUP_NO']=[]
735      if not (TFISS=='NON_DEB')  :
736         motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = 'FONDFISS',))
737      if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
738         motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = ('FOND_SUP','FOND_INF',),))
739      __MAPROV=DEFI_GROUP(reuse   =__MAPROV,
740                          MAILLAGE=__MAPROV,
741                          **motscles )
742 #
743   __MAPROV=MODI_MAILLAGE(reuse   =__MAPROV,
744                          MAILLAGE=__MAPROV,
745                          EQUE_PIQUA=_F( GROUP_NO  = 'EQUERRE' ,
746                                         E_BASE    = EPT1  ,
747                                         DEXT_BASE = DET1  ,
748                                         L_BASE    = D1    ,
749                                         L_CHANF   = D2    ,
750                                         TYPE      = TYPSOU,
751                                         H_SOUD    = H     , 
752                                         ANGL_SOUD = ALPHA ,
753                                         JEU_SOUD  = JEU   ,
754                                         E_CORP    = EPC   , 
755                                         DEXT_CORP = DEC   ,
756                                         AZIMUT    = THETA ,
757                                         RAFF_MAIL = TYPMAI,
758                                         X_MAX     = XMAX  , )
759                          )
760 #
761
762   motscles={}
763   if TFISS=='DEB_INT' :
764      motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU','LEVRTUBU','LEVRCORP'),)
765   else :
766      motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU',),)
767   __MAPROV=MODI_MAILLAGE(reuse   =__MAPROV,
768                          MAILLAGE=__MAPROV,
769                          **motscles
770                          )
771 #
772   if SAIN :
773      __MAPROV=DEFI_GROUP(reuse         = __MAPROV,
774                          MAILLAGE      = __MAPROV,
775                          CREA_GROUP_NO = _F(GROUP_MA=('NIDXT','NEDXT','NIIXT','NEIXT')) )
776 #
777      for i in range(1,NBAZIT+1):
778        prec = EPC / 5.0
779        __MAPROV=DEFI_GROUP(reuse         = __MAPROV,
780                            MAILLAGE      = __MAPROV,
781                          CREA_GROUP_NO = ( _F( NOM       = 'NID'+str(i) ,
782                                                GROUP_NO  = 'NIDXT'      ,
783                                                NUME_INIT = i            ,
784                                                NUME_FIN  = i            ,),
785                                            _F( NOM       = 'NED'+str(i) ,
786                                                GROUP_NO  = 'NEDXT'      ,
787                                                NUME_INIT = i            ,
788                                                NUME_FIN  = i            ,),
789                                            _F( NOM       = 'NII'+str(i) ,
790                                                GROUP_NO  = 'NIIXT'      ,
791                                                NUME_INIT = i            ,
792                                                NUME_FIN  = i            ,),
793                                            _F( NOM       = 'NEI'+str(i) ,
794                                                GROUP_NO  = 'NEIXT'      ,
795                                                NUME_INIT = i            ,
796                                                NUME_FIN  = i            ,),
797                                            _F( NOM       = 'LDN'+str(i) ,
798                                                GROUP_MA  = 'LD' +str(i) ,),
799                                            _F( NOM       = 'LD' +str(i) ,
800                                                GROUP_NO  = 'LDN'+str(i) ,
801                                                OPTION    = 'SEGM_DROI_ORDO',
802                                                PRECISION =  prec        ,
803                                                CRITERE   = 'ABSOLU'     ,
804                                                GROUP_NO_ORIG   = 'NID'+str(i),
805                                                GROUP_NO_EXTR   = 'NED'+str(i),),
806                                            _F( NOM       = 'LIN'+str(i) ,
807                                                GROUP_MA  = 'LI' +str(i) ,),
808                                            _F( NOM       = 'LI' +str(i) ,
809                                                GROUP_NO  = 'LIN'+str(i) ,
810                                                OPTION    = 'SEGM_DROI_ORDO',
811                                                PRECISION =  prec        ,
812                                                CRITERE   = 'ABSOLU'     ,
813                                                GROUP_NO_ORIG   = 'NII'+str(i),
814                                                GROUP_NO_EXTR   = 'NEI'+str(i),),))
815 #
816 #
817 #     --- commande CREA_MAILLAGE ---
818 #
819   self.DeclareOut('nomres',self.sd)
820   nomres=CREA_MAILLAGE( MAILLAGE=__MAPROV,
821                         CREA_POI1 = ( _F( NOM_GROUP_MA = 'P1_CORP ' ,
822                                           GROUP_NO     = 'P1_CORP ' , ),
823                                       _F( NOM_GROUP_MA = 'P2_CORP ' ,
824                                           GROUP_NO     = 'P2_CORP ' , ),
825                                       _F( NOM_GROUP_MA = 'P_TUBU ' ,
826                                           GROUP_NO     = 'P_TUBU ' ,  ),)
827                          )
828 #
829   if IMPRESSION!=None:
830      for impr in IMPRESSION :
831 #
832          motscles={}
833          if impr['FORMAT']=='IDEAS'  : motscles['VERSION']  =impr['VERSION']
834          if impr['FORMAT']=='CASTEM' : motscles['NIVE_GIBI']=impr['NIVE_GIBI']
835          if impr['UNITE']!=None      : motscles['UNITE']    =impr['UNITE']
836          impr_resu = _F( MAILLAGE = nomres,)
837 #
838          IMPR_RESU( RESU = impr_resu, 
839                     FORMAT = impr['FORMAT'],**motscles )
840 #
841 #
842 #     --- Verification profondeur fissure (courte débouchante) ---
843 #
844   if FISCOU  and not (TFISS=='NON_DEB')    :
845       nomres=DEFI_GROUP( reuse=nomres,
846                          MAILLAGE=nomres,
847                          CREA_GROUP_NO=(_F( GROUP_MA = 'LEVRTUBU',),
848                                         _F( NOM = 'FONDORDO',
849                                             GROUP_MA = 'FONDFISS',
850                                             OPTION = 'NOEUD_ORDO',),),);
851
852       nommail=nomres.nom
853       coord   =aster.getvectjev(nommail.ljust(8)+'.COORDO    .VALE')
854       collgrno=aster.getcolljev(nommail.ljust(8)+'.GROUPENO')
855
856       grfo=collgrno['FONDORDO']
857       Nbno = len(grfo)  
858       listx = [None]*Nbno
859       listy = [None]*Nbno
860       listz = [None]*Nbno
861       k = 0
862       for node in grfo:
863          listx[k] = coord[3*(node-1)]
864          listy[k] = coord[3*(node-1)+1]
865          listz[k] = coord[3*(node-1)+2]
866          k = k+1
867
868       XAB = listx[Nbno-1] - listx[0]
869       YAB = listy[Nbno-1] - listy[0]
870       ZAB = listz[Nbno-1] - listz[0]
871       AB = sqrt(XAB*XAB + YAB*YAB +ZAB*ZAB)
872       d = 0
873       for k in range(0,Nbno) :
874          XAM = listx[k] - listx[0]
875          YAM = listy[k] - listy[0]
876          ZAM = listz[k] - listz[0]
877          Xvect = YAB*ZAM-ZAB*YAM
878          Yvect = ZAB*XAM-XAB*ZAM
879          Zvect = XAB*YAM-YAB*XAM
880          AM = sqrt(Xvect*Xvect+ Yvect*Yvect +Zvect*Zvect)
881          dk = AM/AB
882          if dk > d :
883             XC = listx[k]
884             YC = listy[k]
885             ZC = listz[k]
886          d = max(dk, d)
887    
888       grlev=collgrno['LEVRTUBU']
889       Nbnol = len(grlev)  
890       listxl = [None]*Nbnol
891       listyl = [None]*Nbnol
892       listzl = [None]*Nbnol
893       k = 0
894       for node in grlev:
895          listxl[k] = coord[3*(node-1)]
896          listyl[k] = coord[3*(node-1)+1]
897          listzl[k] = coord[3*(node-1)+2]
898          k = k+1
899       dist = 0
900       for k in range(0,Nbnol) :
901          XAM = listxl[k] - listx[0]
902          YAM = listyl[k] - listy[0]
903          ZAM = listzl[k] - listz[0]
904          Scal = (XAB*XAM + YAB*YAM + ZAB*ZAM)/(AB*AB)
905          if (abs(Scal) < 0.51) and (abs(Scal) > 0.49) :
906             Xk = listxl[k] -XC
907             Yk = listyl[k] -YC
908             Zk = listzl[k] -ZC
909             dk = sqrt(Xk**2+ Yk**2 +Zk**2)
910             dist = max(dk, dist)
911       
912       texte="<MACR_ASPIC_MAIL> PROFONDEUR DE LA FISSURE DANS LE MAILLAGE : %.2f \n"%dist
913       aster.affiche('MESSAGE',texte)
914 #      
915   return ier
916
917