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