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