]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA10/Macro/macr_ascouf_mail_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA10 / Macro / macr_ascouf_mail_ops.py
1 #@ MODIF macr_ascouf_mail_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS 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 import os.path
23 from math import sqrt,cos,sin,pi,tan,log,fabs,ceil,fmod,floor
24 import string
25
26 try:
27    import aster
28    from Utilitai.Utmess     import  UTMESS
29 except:
30    pass
31
32 # ------------------------------------------------------------------------------
33 def ASCFON(RC,RM,EP,ORIEN,AZIM,AXEC,POS,Y):
34   """
35   FONCTION F(CP)=CC
36   OU CC EST LA TAILLE DE LA FISSURE SUR LE COUDE 
37   ET CP LA TAILLE DE FISSURE SUR LA PLAQUE
38   """
39   AZIMR = AZIM*2.*pi/360.
40   if POS=='DEB_INT': X = RM-EP/2.
41   else             : X = RM+EP/2.
42   if abs(ORIEN-45.0)<0.01: SIG =  1.
43   else                   : SIG = -1.
44   f_ASCFON = - SIG*X*RC/(2.*RM*sin(AZIMR)) * (                       \
45                   log ( RM/X+RM/RC*(cos(AZIMR)-                      \
46                          sin(AZIMR)*SIG*Y/(sqrt(2.)*RM)) +           \
47                         sqrt( 1.+( RM/X+RM/RC*(cos(AZIMR)-           \
48                          sin(AZIMR)*SIG*Y/(sqrt(2.)*RM)) )**2 )      \
49                        )                                             \
50                   - log ( RM/X+RM/RC*cos(AZIMR)                      \
51                        + sqrt( 1. +(RM/X+RM/RC*cos(AZIMR))**2)       \
52                                             )      )                 \
53                - SIG*X*RC/(2.*RM*SIN(AZIMR)) *                       \
54       (    ( RM/X+RM/RC* ( cos(AZIMR)-                               \
55                            sin(AZIMR)*SIG*Y/(sqrt(2.0)*RM) )         \
56                     )  * sqrt( 1. + ( RM/X+RM/RC*(cos(AZIMR)-        \
57                          sin(AZIMR)*SIG*Y/(SQRT(2.)*RM)) )**2 )      \
58                     - ( RM/X+RM/RC*COS(AZIMR) )                      \
59                        * sqrt( 1. +(RM/X+RM/RC*cos(AZIMR))**2)       \
60                                                   )                  \
61                     - 2.0*AXEC 
62   return f_ASCFON
63
64 # ------------------------------------------------------------------------------
65 def ASCFIS(ALPHA, RM, RC, EP, SUREP, GEOM, AXEA,
66            AXEC, AZIM, POS, SF, DSF, BETA, ORIEN):
67   """
68   MACR_ASCOUF_MAIL ASCFIS
69   taille initiale du defaut fissure sur la plaque en
70   fonction des donnees sur le coude ou le tube suivant la
71   transformation choisie
72
73   ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
74
75   ALPHA = ANGLE DU COUDE
76   RM    = RAYON MOYEN DU COUDE
77   RC    = RAYON DE CINTRAGE DU COUDE
78   EP    = EPAISSEUR DU COUDE
79   SUREP = VALEUR DE LA SUREPAISSEUR
80   GEOM  = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)   
81   AXEA  = PROFONDEUR FISSURE (DEMI PETIT AXE)
82   AXEC  = DEMI GRAND AXE FISSURE
83   AZIM  = POSITION AZIMUTALE DU CENTRE DE LA FISSURE 
84   POS   = POSITION EN PEAU (EXTERNE OU INTERNE)
85   SF    = ABCISSE CURVILIGNE LONGITUDINALE DU CENTRE DE LA FISSURE
86   DSF   = BOOLEEN EXPRESSION POSITION CENTRE FISSURE 
87   BETA  = POSITION ANGULAIRE DU CENTRE DE LA FISSURE
88   ORIEN = ORIENTATION DE LA FISSURE
89
90   -----------------DONNEES RENVOYEES-----------------------
91
92   AXEAP = PROFONDEUR DE LA FISSURE (PETIT AXE) SUR LA PLAQUE
93   AXECP = LONGUEUR DE LA FISSURE (GRAND AXE) SUR LA PLAQUE
94   SFP   = ABCISSE CURVILIGNE LONGITUDINALE CENTRE FISSURE
95           SUR LA PLAQUE
96
97   """
98   from Utilitai import funct_root
99   echo_mess=['MACR_ASCOUF_MAIL ASCFIS \n',]
100   if POS=='DEB_INT':
101      if (AZIM>=120.) and (AZIM<=240.0): X = RM-EP/2.0 - SUREP
102      else:                              X = RM-EP/2.0
103   else:                                 X = RM+EP/2.0
104   AZIMR = AZIM*2.0*pi/360.0 
105 #
106 # -- CALCUL COTE AXIALE DU CENTRE FISSURE SUR LA PLAQUE EN FONCTION
107 #    DE L ABSCISSE CURVILIGNE DONNEE SUR LE COUDE OU DE LA POSITION
108 #    ANGULAIRE 
109 #
110   if DSF:
111     if GEOM=='COUDE': SFP = SF/(1.0+X/RC*cos(AZIMR))
112     else :            SFP = SF
113   else :
114     BETAR = BETA*2.0*pi/360.0
115     if (GEOM=='COUDE'):
116        SF  = BETAR*(RC+X*cos(AZIMR))
117        SFP = SF/(1.0+X/RC*cos(AZIMR))
118     else:
119        SF  = BETAR*RC
120        SFP = SF
121   if (GEOM=='COUDE'): echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR COUDE : %.2f \n'%SF)
122   if (GEOM=='TUBE') : echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR TUBE  : %.2f \n'%SF )
123   echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%SFP)
124 #
125 #   ON ENVISAGE LE CAS OU UNE PARTIE DE L AXE EST DANS LES
126 #   DROITES DES EMBOUTS. LA TRANSFORMATION N EST FAITE QUE SUR LA 
127 #   PARTIE RESTANT DANS LE COUDE.
128 #
129   if (GEOM=='COUDE'): DIST = ALPHA*2.0*pi/360.0*(RC+X*cos(AZIMR))
130   else              : DIST = ALPHA*2.0*pi/360.0*RC
131   BCOUD = 0.0
132   BEMB  = 0.0
133   if abs(ORIEN)<0.01:
134 # -- FISSURE LONGITUDINALE (0 DEGRE)
135      BSUP = SF + AXEC
136      BINF = SF - AXEC
137      if BSUP>DIST:
138        BCOUD = DIST - BINF
139        BEMB  = BSUP - DIST
140      elif BINF<0. :
141        BCOUD = BSUP 
142        BEMB  = abs(BINF)
143      elif (BINF>=0. and BSUP<=DIST):
144        BCOUD = 2.0*AXEC
145   elif abs(ORIEN-90.)<0.01:
146 # -- FISSURE CIRCONFERENTIELLE (90 DEGRES)
147      BSUP = SF
148      BINF = SF
149      if BSUP>DIST:
150        BCOUD = DIST - BINF
151        BEMB  = BSUP - DIST
152      elif BINF<0. :
153        BCOUD = BSUP 
154        BEMB  = abs(BINF)
155      elif (BINF>=0. and BSUP<=DIST):
156        BCOUD = 2.0*AXEC
157   else:
158 # -- FISSURE A +/- 45 DEGRES SUR INTRADOS OU EXTRADOS
159      BSUP = SF + sqrt(2.0)/2.0*AXEC
160      BINF = SF - sqrt(2.0)/2.0*AXEC
161      if BSUP>DIST:
162        BCOUD = (DIST - BINF)*sqrt(2.0)
163        BEMB  = (BSUP - DIST)*sqrt(2.0)
164      elif BINF<0. :
165        BCOUD = BSUP *sqrt(2.0)
166        BEMB  = abs(BINF)*sqrt(2.0)
167      elif (BINF>=0. and BSUP<=DIST):
168        BCOUD = 2.0*AXEC
169   echo_mess.append( 'PARTIE DU GRAND AXE DANS LE COUDE  : %.2f \n'%BCOUD)
170   echo_mess.append( 'PARTIE DU GRAND AXE DANS L EMBOUT  : %.2f \n'%BEMB)
171 #
172 # -- CALCUL DE LA TAILLE DU GRAND AXE FISSURE SUR LA PLAQUE
173 #
174   NEWT=0
175   if abs(ORIEN)<0.01:
176 # -- FISSURE LONGITUDINALE (0 DEGRE)
177     if GEOM=='COUDE': AXECP = BCOUD/(1.0+X/RC*cos(AZIMR)) + BEMB
178     else            : AXECP = BCOUD + BEMB
179   elif abs(ORIEN-90.)<0.01:
180 # -- FISSURE CIRCONFERENTIELLE (90 DEGRES)
181     AXECP = (BCOUD+BEMB)*RM/X
182   else :
183     if GEOM=='COUDE':
184 #   ------- TRANSFORMATION COUDE
185        if AZIM in (0.,180.):
186 # -- FISSURE A +/- 45 DEGRES SUR INTRADOS OU EXTRADOS
187           AXECP = BCOUD*RM*sqrt(2.)/( X*sqrt(1.+(RM/X+RM/RC*cos(AZIMR))**2) )+\
188                   BEMB*sqrt( (1.0+(X/RM)**2)*0.5 )
189        else :
190 # -- FISSURE A +/- 45 DEGRES AILLEURS
191           AXECP = funct_root.root(ASCFON,(BCOUD-1.,BCOUD+1.))
192           AXECP = AXECP + BEMB*sqrt( (1.+(X/RM)**2)*0.5 )
193           AXECC = ASCFON(AXECP)+BCOUD
194           NEWT=1
195     elif GEOM=='TUBE':
196        AXECP = (BCOUD+BEMB)*sqrt( (1.+(X/RM)**2)*0.5 ) 
197     else :
198        AXECP = BCOUD + BEMB
199 #
200   if GEOM=='COUDE':
201     echo_mess.append( 'TAILLE GRAND AXE COUDE DONNE : %.2f \n'%(2.*AXEC))
202   elif GEOM=='TUBE':
203     echo_mess.append( 'TAILLE GRAND AXE TUBE  DONNE : %.2f \n'%(2.*AXEC))
204   echo_mess.append( 'TAILLE GRAND AXE PLAQUE DEDUIT : %.2f \n'%AXECP)
205   if NEWT:
206     echo_mess.append( 'METHODE DE NEWTON FISSURE A 45 DEGRES --> \n')
207     echo_mess.append( 'TAILLE GRAND AXE COUDE RECALCULE : %.2f \n'%AXECC)
208   if GEOM=='COUDE' and BEMB>0. and BSUP>DIST :
209     SFP =  ALPHA*2.*pi*RC/360. - AXECP/2. + BEMB
210     echo_mess.append( 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT \n')
211     echo_mess.append( 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%SFP)
212   if GEOM=='COUDE' and BEMB>0. and BINF<0. :
213     SFP = + AXECP/2. - BEMB
214     echo_mess.append( 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT \n')
215     echo_mess.append( 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%SFP)
216 #
217 # -- CORRECTION DU PETIT AXE DE LA FISSURE QUAND CELLE-CI SE TROUVE SUR
218 #    LA ZONE DE SUREPAISSEUR
219 #
220   ALPHAR = ALPHA*2.*pi/360.
221   ZSUR1  = ALPHAR*RC/10.
222   ZSUR2  = ALPHAR*RC*9./10.
223   YFISS  = (AZIMR-pi/2.)*RM
224   MU = 0.
225   if (AZIM>=120.) and (AZIM<=240.):
226      if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = 1.
227      elif (SFP<=ZSUR1):                MU = SFP/ZSUR1
228      elif (SFP>ZSUR2):                 MU = (ALPHAR*RC-SFP)/ZSUR1
229   elif (AZIM>=90.) and (AZIM<=120.):
230      if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = YFISS/(pi/6.*RM) 
231      elif (SFP<=ZSUR1):                MU = YFISS*SFP/(pi/6.*RM*ZSUR1)
232      elif (SFP>ZSUR2):                 MU = YFISS*(ALPHAR*RC-SFP)/(pi/6.*RM*ZSUR1)
233   elif (AZIM>=240.) and (AZIM<=270.):
234      if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = (YFISS-5.*pi/6.*RM)/(pi/6.*RM) 
235      elif (SFP<=ZSUR1):                MU = (YFISS-5.*pi/6.*RM)*SFP/(pi/6.*RM*ZSUR1)
236      elif (SFP>ZSUR2):                 MU = (YFISS-5.*pi/6.*RM)*(ALPHAR*RC-SFP)/(pi/6.*RM*ZSUR1)
237 #
238   if SUREP!=0.:
239      AXEAP = AXEA * EP / ( EP + MU*SUREP )
240      echo_mess.append( '--> CORRECTION DUE A LA SUREPAISSEUR \n' )
241      echo_mess.append( '--> TAILLE PETIT AXE PLAQUE : %.2f \n'%AXEAP )
242   else: AXEAP = AXEA
243 #
244   texte_final=string.join(echo_mess)
245   aster.affiche('MESSAGE',texte_final)
246   return AXEAP,AXECP,SFP 
247
248
249 # ------------------------------------------------------------------------------
250 def ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP,GEOM,SYME):
251   """
252   MACR_ASCOUF_MAIL ASCSEP
253   taille initiale sur la plaque des sous-epaisseurs
254
255   ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
256
257   ALPHA = ANGLE DU COUDE
258   RM    = RAYON MOYEN DU COUDE
259   RC    = RAYON DE CINTRAGE DU COUDE
260   EP    = EPAISSEUR DU COUDE
261   GEOM  = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)  
262   SYME  = QUART DE STRUCTURE SI 'OUI'
263  
264   """
265   ier=0
266   CG=pi/180.
267   echo_mess=['MACR_ASCOUF_MAIL ASCSEP \n',]
268 #
269 # --- BOUCLE SUR L ENSEMBLE DES SOUS-EPAISSEURS
270 #
271   i=0
272   for ssep in MCL_SOUS_EPAIS :
273       i=i+1
274       echo_mess.append( '-------------------------------------\n')
275       echo_mess.append( 'SOUS-EPAISSEUR NUMERO %d\n'%i)
276       echo_mess.append( '-------------------------------------\n')
277 #
278 # --- CAS DES SOUS-EPAISSEURS AXISYMETRIQUES 
279 #
280       if ssep['TYPE']=='AXIS':
281          echo_mess.append( 'SOUS-EPAISSEUR AXISYMETRIQUE : \n')
282          echo_mess.append( 'CALCUL DE LA TAILLE LONGI ENVELOPPE EN INTRADOS (AZIMUT PI)\n')
283          ssep.ICIRP = 2.*pi*RM
284          ssep.ISCP  =    pi*RM
285          ssep.IPHIC = 180.
286          AZIMC      = pi
287       else:
288 #
289 # -- CALCUL DE L ABSCISSE CURVILIGNE CIRCONF.SUR LA PLAQUE  
290 #    EN FONCTION DE L AZIMUT OU DE L ABSCISSE CURVIL.CIRCONF
291 #    SUR LE COUDE DU CENTRE DE LA SOUS-EPAISSEUR
292 #    NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
293 #
294          if ssep['POSI_CURV_CIRC']!=None:
295            ssep.ISCP  = ssep['POSI_CURV_CIRC']*RM/(RM+EP/2.)
296            AZIMC      = ssep.ISCP/RM
297            ssep.IPHIC = ssep['POSI_CURV_CIRC']/(RM+EP/2.)*180./pi
298            echo_mess.append( 'AZIMUT CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f \n'%ssep.IPHIC)
299          else:
300            ssep.ISCP  = ssep['AZIMUT']*pi*RM/180. 
301            AZIMC      = ssep['AZIMUT']*pi/180.
302            echo_mess.append( 'ABSC. CURV. CIRCONF. CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f \n'%(AZIMC*(RM+EP/2.)))
303 #
304 #    PASSAGE DANS LE REPERE PLAQUE (0,2PI) AVEC ORIGINE FLANC DROIT
305 #    CAR L ORIGINE DES DONNEES CIRCONF. EST EN EXTRADOS 
306 #
307          if ssep.ISCP>(3.*pi*RM/2.): ssep.ISCP = ssep.ISCP - 3.*pi*RM/2.
308          else:                       ssep.ISCP = ssep.ISCP + pi*RM/2.
309          echo_mess.append( 'ABSC. CURV. CIRCONF. CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISCP)
310 #
311 # -- CALCUL DE LA TAILLE CIRCONFERENTIELLE 
312 #    NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
313 #
314          ssep.ICIRP = ssep['AXE_CIRC']*(RM/(RM+EP/2.))
315          if ssep.ICIRP>(2.*pi*RM) :
316             texte_final=string.join(echo_mess)
317             aster.affiche("MESSAGE",texte_final)
318             UTMESS('F','ASCOUF0_6',vali=[i],valr=[ssep.ICIRP,2*pi*RM])
319          echo_mess.append( 'TAILLE CIRCONFERENTIELLE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ICIRP)
320          echo_mess.append( '<=> TAILLE EQUIVALENTE SUR LA CIRCONFERENCE (DEGRES) : %.2f \n'%(ssep.ICIRP*360./(2.*pi*RM)))  
321
322 #
323 # -- CALCUL COTE AXIALE DU CENTRE SOUS-EPAISSEUR SUR LA PLAQUE 
324 #    EN FONCTION DE L ABSCISSE CURVILIGNE DONNEE SUR LE COUDE 
325 #    OU DE LA POSITION ANGULAIRE
326 #    NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
327 #
328       if ssep['POSI_CURV_LONGI']!=None:
329          if GEOM=='COUDE':
330             ssep.ISLP = ssep['POSI_CURV_LONGI']/(1.+(RM+EP/2.)/RC*cos(AZIMC))
331             AZIML     = ssep.ISLP/RC
332             echo_mess.append( 'ANGLE COUDE CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f \n'%(AZIML*180./pi))
333          else :
334             ssep.ISLP = ssep['POSI_CURV_LONGI']
335          if (SYME in ('QUART','DEMI')) and (ssep.ISLP!=ALPHA*CG*RC/2.) :
336             texte_final=string.join(echo_mess)
337             aster.affiche("MESSAGE",texte_final)
338             UTMESS('F','ASCOUF0_7')
339       else :
340          if GEOM=='COUDE':
341             echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f \n'%((ssep.BETA)*CG*(RC+(RM+EP/2.)*cos(AZIMC))))
342             AZIML = (ssep.BETA)*CG
343          else :
344             echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR TUBE  : %.2f \n'%((ssep.BETA)*CG*RC) )
345          ssep.ISLP =  (ssep.BETA)*CG*RC
346          if (SYME in ('QUART','DEMI')) and (ssep.BETA!=ALPHA/2.) :
347             texte_final=string.join(echo_mess)
348             aster.affiche("MESSAGE",texte_final)
349             UTMESS('F','ASCOUF0_7')
350       echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
351 #
352 # -- CALCUL DE LA TAILLE LONGITUDINALE 
353 #    NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
354 #
355 #   ON ENVISAGE LE CAS OU UNE PARTIE DE L AXE EST DANS LES
356 #   DROITES DES EMBOUTS. LA TRANSFORMATION N EST FAITE QUE SUR LA 
357 #   PARTIE RESTANT DANS LE COUDE.
358 #
359       if GEOM=='COUDE' : DIST = ALPHA*CG*(RC+(RM+EP/2.)*cos(AZIMC))
360       else             : DIST = ALPHA*CG*RC
361       if ssep['POSI_CURV_LONGI']!=None:
362          BSUP = ssep['POSI_CURV_LONGI']+ssep['AXE_LONGI']/2.
363          BINF = ssep['POSI_CURV_LONGI']-ssep['AXE_LONGI']/2.
364       else:
365          if GEOM=='COUDE' :
366             BSUP = ssep.BETA*CG*(RC+(RM+EP/2.)*cos(AZIMC))+ssep['AXE_LONGI']/2.
367             BINF = ssep.BETA*CG*(RC+(RM+EP/2.)*cos(AZIMC))-ssep['AXE_LONGI']/2.
368          else:
369             BSUP = ssep.BETA*CG*RC + ssep['AXE_LONGI']/2.
370             BINF = ssep.BETA*CG*RC - ssep['AXE_LONGI']/2.
371       BCOUD1 = 0.
372       BCOUD2 = 0.
373       BEMB1  = 0.
374       BEMB2  = 0.
375       if BINF<0. and BSUP>DIST :
376          BCOUD1 = DIST
377          BEMB1  =  abs(BINF) + BSUP-DIST
378       elif BSUP>DIST :
379          BCOUD1 = DIST - BINF
380          BEMB1  = BSUP - DIST
381       elif BINF<0 :
382          BCOUD2 = BSUP
383          BEMB2  = abs(BINF)
384       elif (BINF>=0. and BSUP<=DIST) :
385          BCOUD1 = ssep['AXE_LONGI']
386       BCOUD = BCOUD1+ BCOUD2
387       BEMB  = BEMB1 + BEMB2
388       if GEOM=='COUDE' : BPLAQ = BCOUD/(1.+(RM+EP/2.)/RC*cos(AZIMC))
389       else             : BPLAQ = BCOUD
390       ssep.ILONP = BPLAQ+BEMB
391       if BEMB1>0.:
392          ssep.ISLP =  ALPHA*CG*RC - ssep.ILONP/2. + BEMB1
393          echo_mess.append(  'CORRECTION CENTRE : SOUS-EP. A CHEVAL SUR EMBOUT \n')
394          echo_mess.append(  'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
395       if BEMB2>0.:
396          ssep.ISLP =  ssep.ILONP/2. - BEMB2
397          echo_mess.append(  'CORRECTION CENTRE : SOUS-EP. A CHEVAL SUR EMBOUT \n')
398          echo_mess.append(  'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
399       if ssep.ISLP<0.            : ssep.ISLP = 0.
400       if (ssep.ISLP>ALPHA*CG*RC) : ssep.ISLP = ALPHA*CG*RC 
401 #
402 #     SI LE CENTRE DE LA SOUS-EP CALCULE SUR LA PLAQUE EST DANS L EMBOUT
403 #     ON CORRIGE SA POSITION EN LE METTANT A L INTERFACE SINON CA PLANTE
404 #     DANS LA PROC DE MAILLAGE (A AMELIORER)
405 #
406       echo_mess.append(  'TAILLE LONGITUDINALE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ILONP)
407       echo_mess.append(  '<=> TAILLE EQUIVALENTE PAR RAPPORT A L ANGLE DU COUDE (DEGRES): %.2f \n'%(ssep.ILONP*360/(2*pi*RC)))  
408 #
409   texte_final=string.join(echo_mess)
410   aster.affiche('MESSAGE',texte_final)
411   return ier,AZIMC
412
413 # ------------------------------------------------------------------------------
414 def ASCTCI(MCL_SOUS_EPAIS,RM):
415   """
416   MACR_ASCOUF_MAIL ASCTCI
417   APPELEE DANS : ASCSYM et ASCPRE
418   CALCUL TABLEAU TRIE DES ABSCISSES DES CENTRES DE SOUS-EPAISSEURS
419
420   ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
421
422   RM    = RAYON MOYEN DU COUDE
423
424   -----------------DONNEES RENVOYEES-----------------------
425
426   IABSC1 = CORRESPONDANCE ABSC. CURVI. CIRCONF. SOUS-EP. I
427   IABSC2 = CORRESPONDANCE ABSC. GAUCHE ET DROITE CIRCONF. SOUS-EP. I
428   COORXD = ABSC. DU BORD DROIT DE LA SOUS-EP I
429   COORXG = ABSC. DU BORD GAUCHE DE LA SOUS-EP I
430
431   """
432 #
433 # --- tri du tableau des abscisses curvilignes circonf. plaque
434 #
435   echo_mess=['MACR_ASCOUF_MAIL ASCTCI \n',]
436   TAMPON = []
437   COORXG = []
438   COORYG = []
439   i=0
440   for ssep in MCL_SOUS_EPAIS :
441       i=i+1
442       if (ssep.ISCP>2.*pi*RM) or (ssep.ISCP<0.) : 
443          texte_final=string.join(echo_mess)
444          aster.affiche("MESSAGE",texte_final)
445          UTMESS('F','ASCOUF0_9',vali=[MCL_SOUS_EPAIS.index(ssep)],valr=[ssep.ISCP,2.*pi*RM])
446       TAMPON.append((ssep.ISCP,i))
447   TAMPON.sort()
448   IABSC1=[]
449   for j in range(i):
450     IABSC1.append(TAMPON[j][1])
451   echo_mess.append( ' \n')
452   echo_mess.append( 'TRI DES CENTRES ABSC. CURV. CIRCONF. :\n ')
453   echo_mess.append( '------------------------------------\n')
454   i=0
455   for ssep in TAMPON :
456     i=i+1
457     echo_mess.append( '%d) SOUS-EP NO %d <> XC = %.2f \n'%(i,ssep[1],ssep[0]) )
458 #
459 # --- calcul des abcisses droites et gauches des sous-epaisseurs
460 #
461   COORXD=[]
462   COORXG=[]
463   for bid in TAMPON :
464       XG=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
465       if XG<0.       : XG=XG+2.*pi*RM
466       COORXG.append(XG)
467       XD=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
468       if XD>2.*pi*RM : XD=XD-2.*pi*RM
469       COORXD.append(XD)
470 #
471 # --- tri des bornes d'intervalles en abscisse
472 #
473   TAMPON = []
474   for j in range(len(MCL_SOUS_EPAIS)):
475     TAMPON.append((COORXG[j],2*j+1))
476     TAMPON.append((COORXD[j],2*j+2))
477   TAMPON.sort() 
478   IABSC2=[]
479   for j in range(2*len(MCL_SOUS_EPAIS)):
480     IABSC2.append(TAMPON[j][1])
481   echo_mess.append( '\n')
482   echo_mess.append( 'TRI DES INTERVALLES G ET D ABSC. CURV. CIRCONF. :\n')
483   echo_mess.append( '-----------------------------------------------\n' ) 
484   for j in range(2*len(MCL_SOUS_EPAIS)):
485     if fmod(IABSC2[j],2):
486        echo_mess.append( '%d) SOUS-EP NO %d <> XG = %.2f \n'%(j+1,IABSC1[IABSC2[j]/2],TAMPON[j][0]))
487     else:
488        echo_mess.append( '%d) SOUS-EP NO %d <> XD = %.2f \n'%(j+1,IABSC1[IABSC2[j]/2-1],TAMPON[j][0]))
489 #    
490   texte_final=string.join(echo_mess)
491   aster.affiche('MESSAGE',texte_final)
492   return TAMPON,IABSC1,IABSC2,COORXD,COORXG
493
494 # ------------------------------------------------------------------------------
495 def ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM):
496   """
497   MACR_ASCOUF_MAIL ASCTLO
498   APPELEE DANS : ASCSYM et ASCPRE
499   CALCUL TABLEAU TRIE DES ORDONNEES DES CENTRES DE SOUS-EPAISSEURS
500
501   ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
502
503   RC     = RAYON MOYEN DU COUDE
504   ALPHA  = ANGLE DU COUDE
505   LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
506   LTCLIM  = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
507
508   -----------------DONNEES RENVOYEES-----------------------
509
510   IORDO1 = CORRESPONDANCE ORDO. CURVI. LONGIT. SOUS-EP. I
511   IORDO2 = CORRESPONDANCE ORDO. GAUCHE ET DROITE LONGIT. SOUS-EP. I
512   COORYI = ORDONNEE. DU BORD INTERIEUR DE LA SOUS-EP I
513   COORYS = ORDONNEE. DU BORD SUPERIEUR DE LA SOUS-EP I
514
515   """
516 #
517 # tri du tableau des abscisses curvilignes axiales plaque
518 #
519   echo_mess=['MACR_ASCOUF_MAIL ASCTLO \n',]
520   ALPHAR = 2.*ALPHA*pi/360.
521   TAMPON = []
522   i=0
523   for ssep in MCL_SOUS_EPAIS :
524       i=i+1
525       if (ssep.ISLP>ALPHAR*RC) or (ssep.ISLP<0.) : 
526          texte_final=string.join(echo_mess)
527          aster.affiche("MESSAGE",texte_final)
528          UTMESS('F','ASCOUF0_10',vali=[MCL_SOUS_EPAIS.index(ssep)],valr=[ssep.ISLP,ALPHAR*RC])
529       TAMPON.append((ssep.ISLP,i))
530   TAMPON.sort()
531   IORDO1=[]
532   for j in range(i):
533     IORDO1.append(TAMPON[j][1])
534   echo_mess.append( '\n')
535   echo_mess.append( 'TRI DES CENTRES ABSC. CURV. LONGIT. : \n')
536   echo_mess.append( '------------------------------------ \n')
537   i=0
538   for ssep in TAMPON :
539     i=i+1
540     echo_mess.append( '%d) SOUS-EP NO %d <> YC = %.2f \n'%(i,ssep[1],ssep[0]))
541 #
542 # calcul des abscisses sup. et inf. des sous-ep.
543 #
544   COORYI=[]
545   COORYS=[]
546   EPS=0.000000000001
547   for bid in TAMPON :
548       i=i+1
549       YI=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
550       YS=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
551       if fabs(bid[0])<EPS : 
552          YI=-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
553          YS=MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
554       if fabs(bid[0]-ALPHAR*RC)<EPS :
555          YI=ALPHAR*RC-(MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.)
556          YS=ALPHAR*RC+(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
557       if YI<(-LTCHAR):
558          texte_final=string.join(echo_mess)
559          aster.affiche("MESSAGE",texte_final)
560          UTMESS('F','ASCOUF0_11',vali=[bid[1]],valr=[YI,-1*LTCHAR])
561       if YS>(ALPHAR*RC+LTCLIM):
562          texte_final=string.join(echo_mess)
563          aster.affiche("MESSAGE",texte_final)
564          UTMESS('F','ASCOUF0_11',vali=[bid[1]],valr=[YI,ALPHAR*RC+LTCLIM])
565       COORYI.append(YI) 
566       COORYS.append(YS)
567 #
568 # tri des bornes d'intervalles en abscisse
569 #
570   TAMPON = []
571   for j in range(len(MCL_SOUS_EPAIS)):
572     TAMPON.append((COORYI[j],2*j+1))
573     TAMPON.append((COORYS[j],2*j+2))
574   TAMPON.sort() 
575   IORDO2=[]
576   for j in range(2*len(MCL_SOUS_EPAIS)):
577     IORDO2.append(TAMPON[j][1])      
578   echo_mess.append( '\n')
579   echo_mess.append( 'TRI DES INTERVALLES I ET S ABSC. CURV. LONGIT. : \n')
580   echo_mess.append( '----------------------------------------------- \n')
581   for j in range(2*len(MCL_SOUS_EPAIS)):
582     if fmod(IORDO2[j],2):
583        echo_mess.append( '%d) SOUS-EP NO %d <> YI = %.2f \n'%(j+1,IORDO1[IORDO2[j]/2],TAMPON[j][0]))
584     else:
585        echo_mess.append( '%d) SOUS-EP NO %d <> YS = %.2f \n'%(j+1,IORDO1[IORDO2[j]/2-1],TAMPON[j][0]))
586 #
587   texte_final=string.join(echo_mess)
588   aster.affiche('MESSAGE',texte_final)
589   return TAMPON,IORDO1,IORDO2,COORYI,COORYS
590 #
591 #
592 ################################################################################
593 ################################################################################
594 ################################################################################
595 #     MACR_ASCOUF_MAIL ASCNBE
596 #     APPELEE DANS : ASCSYM et ASCPRE
597 #     CALCUL DU NOMBRE D'ELEMENTS LONGI ET CIRCONF. DANS LES SOUS-EPAISSEURS
598 #
599 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
600 #
601 #     COORXG = ABSCISSE DU BORD GAUCHE DE LA SOUS-EPAISSEUR I
602 #     COORXD = ABSCISSE DU BORD DROIT DE LA SOUS-EPAISSEUR I
603 #     COORYI = ORDONNEE DU BORD INFERIEUR DE LA SOUS-EPAISSEUR I
604 #     COORYS = ORDONNEE DU BORD SUPERIEUR DE LA SOUS-EPAISSEUR I
605 #     BD     = ABSCISSE DU BORD DROIT DE LA ZONE CIRCONF J
606 #     BG     = ABSCISSE DU BORD GAUCHE DE LA ZONE CIRCONF J
607 #     BS     = ORDONNEE DU BORD SUPERIEUR DE LA ZONE LONGI J
608 #     BI     = ORDONNEE DU BORD INFERIEUR DE LA ZONE LONGI J
609 #     DNX    = DENSITE ET NOMBRE D'ELEMENTS CIRCONF. DE LA ZONE J
610 #     DNY    = DENSITE ET NOMBRE D'ELEMENTS LONGIT. DE LA ZONE J
611 #     INDSEX = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE CIRCONF J
612 #     INDSEY = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE LONGI J
613 #     RM     = RAYON MOYEN DU COUDE
614 #     RC     = RAYON DE CINTRAGE DU COUDE
615 #     IABSC1 = CORRESPONDANCE ABSCISSE CURVILIGNE CIRCONF. SOUS-EP. I
616 #     IORDO1 = CORRESPONDANCE ABSCISSE CURVILIGNE LONGIT. SOUS-EP. I
617 #
618 #----------------------DONNEES RENVOYEES-----------------------
619 #
620 #     NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
621 #     NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
622 #
623 # ------------------------------------------------------------------------------
624 def ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,DNX,DNY,RM,RC,
625            INDSEX,INDSEY,IABSC1,IORDO1):
626 #
627 #  calcul du nombre d'elements longi. et circonf. dans les sous-epaisseurs:
628 #
629   echo_mess=['MACR_ASCOUF_MAIL ASCNBE \n',]
630   echo_mess.append( '\n')
631   echo_mess.append( 'DETERMINATION DU NOMBRE D''ELEMENTS DANS LES SOUS-EPAISSEURS :\n')
632   echo_mess.append( '------------------------------------------------------------\n')
633   NLX=[0]*len(MCL_SOUS_EPAIS)
634   NLY=[0]*len(MCL_SOUS_EPAIS)
635   for j in range(len(BD)):
636     if INDSEX[j]!=0:
637 #      calcul au passage du nombre d'elements sur chaque zone circonf.   
638        RNBEL = (BD[j]-BG[j])*360./(DNX[2*j]*2.*pi*RM)
639        RNBEL2 = RNBEL - floor(RNBEL)
640        if RNBEL2 <= 0.5 : NBEL=int(floor(RNBEL))
641        else             : NBEL=int(floor(RNBEL))+1
642        if NBEL <= 1 :     NBEL=2
643 #      calcul au passage du nombre d'elements sur chaque sous-epaisseur circonf.       
644        for i in range(len(MCL_SOUS_EPAIS)):
645          l=IABSC1[i]-1
646          if ((COORXG[l]<COORXD[l] and BG[j]>=COORXG[l] and BD[j]<=COORXD[l])\
647          or (COORXG[l]>=COORXD[l] and (BG[j]<=COORXG[l] or BD[j]>=COORXD[l]))):
648             NLX[i]=NLX[i]+NBEL
649             echo_mess.append( 'SOUS-EP NO %d ZONE CIRC. NO %d NB ELEM. = %d \n'%(i+1,j+1,NBEL))
650
651   for j in range(len(BS)):
652     if INDSEY[j]!=0:
653 #      calcul au passage du nombre d'elements sur chaque zone longi.      
654        RNBEL = ((BS[j]-BI[j])*360.)/(DNY[2*j]*2.*pi*RC)
655        RNBEL2 = RNBEL - floor(RNBEL)
656        if RNBEL2 <= 0.5 : NBEL=int(floor(RNBEL))
657        else             : NBEL=int(floor(RNBEL))+1
658        if NBEL <= 1 :     NBEL=2
659 #      calcul au passage du nombre d'elements sur chaque sous-epaisseur circonf.       
660        i=0
661        for i in range(len(MCL_SOUS_EPAIS)):
662          l=IORDO1[i]-1
663          if (BI[j]>=COORYI[l] and BS[j]<=COORYS[l]):
664             NLY[i]=NLY[i]+NBEL
665             echo_mess.append( 'SOUS-EP NO %d ZONE LONGI. NO %d NB ELEM. = %d \n'%(i+1,j+1,NBEL) )
666
667   for j in range(len(NLX)):
668     echo_mess.append( 'SOUS-EP NO %d NBE TOTAL ELEMENTS CIRCONF. : %d \n'%(j+1,NLX[j]))
669     echo_mess.append( 'SOUS-EP NO %d NBE TOTAL ELEMENTS LONGI.   : %d \n'%(j+1,NLY[j]))
670
671 #
672   texte_final=string.join(echo_mess)
673   aster.affiche('MESSAGE',texte_final)
674   return NLX,NLY
675 #
676 ################################################################################
677 ################################################################################
678 ################################################################################
679 #     MACR_ASCOUF_MAIL ASCSYM
680 #     PREPARATION DES DONNEES POUR LE MAILLAGE DE PLAQUE AVEC
681 #     SOUS-EPAISSEURS :
682 #     CAS D UNE SOUS-EPAISSEUR DANS LE PLAN DE SYMETRIE 
683 #     CONSTRUCTION D UN QUART DU MAILLAGE
684 #     - CALCUL TABLEAU TRIE DES ABSCISSES ET ORDONNEES DES CENTRES 
685 #     - CALCUL TABLEAU DES ZONES COUVERTES PAR LES SOUS-EPAISSEURS
686 #
687 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
688 #
689 #     RM    = RAYON MOYEN DU COUDE
690 #     RC    = RAYON DE CINTRAGE DU COUDE
691 #     ALPHA = ANGLE DU COUDE
692 #     LT    = LONGUEUR DE L EMBOUT DU COTE CHARGEMENT
693 #     LGV   = LONGUEUR DE L EMBOUT DU COTE CONDITIONS AUX LIMITES
694 #     NBSEP = NOMBRE DE SOUS-EPAISSEURS
695 #
696 #----------------------DONNEES RENVOYEES-----------------------
697 #
698 #     NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
699 #     NZONEY = NOMBRE DE ZONES LONGITUDINALES       
700 #
701 # ------------------------------------------------------------------------------
702 def ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM):
703   ier=0
704   echo_mess=['MACR_ASCOUF_MAIL ASCSYM \n',]
705   DERAFC = 18.
706   DERAFL =  5.       
707   INDSEX = []
708   INDSEY = []
709   BG     = []
710   BD     = []
711   INDBG  = []
712   INDBD  = []
713   DNX    = []
714
715 #
716 # --- tri des donnees sous-ep. en circonferentiel
717   TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
718 #
719 # --- calcul des zones en circonferentiel
720 #
721   ssep=MCL_SOUS_EPAIS[0]
722   if (ssep.ISCP<pi*RM) :
723 #
724 #     le centre sous-ep est dans la zone flanc droit/extrados/flanc
725 #     gauche, on preleve pi*RM a droite de la sous-epaisseur
726 #
727 #          zone (centre sous-ep , bord droit)
728 #
729      BG.append(ssep.ISCP)
730      BG.append(ssep.ISCP+ssep.ICIRP/2.)
731      BD.append(ssep.ISCP+ssep.ICIRP/2.)
732      BD.append(ssep.ISCP+pi*RM)
733      INDBG.append(0)
734      INDBG.append(1)
735      INDBD.append(0)
736      INDBD.append(0)
737      DNX.append(ssep.IDENC)
738      DNX.append(0)
739      DNX.append(DERAFC)
740      DNX.append(0)
741      INDSEX.append(1)
742      INDSEX.append(0)
743   elif (ssep.ISCP+pi*RM==2.*pi*RM) :
744 #
745 #     sous-ep axisymetrique : on preleve pi*RM a droite
746 #
747 #       zone (centre sous-ep , bord droit)
748 #
749      BG.append(ssep.ISCP)
750      BD.append(ssep.ISCP+ssep.ICIRP/2.)
751      INDBG.append(0)
752      INDBD.append(0)
753      DNX.append(ssep.IDENC)
754      DNX.append(0)
755      INDSEX.append(1)
756      INDSEX.append(0)
757   else :
758 #
759 #     le centre sous-ep est dans la zone flanc gauche/intrados/flanc 
760 #     droit : on preleve pi*RM a gauche de la sous-epaisseur
761 #
762 #            zone (centre -pi*RM, bord gauche)
763 #
764      BG.append(ssep.ISCP-pi*RM)
765      BG.append(ssep.ISCP-ssep.ICIRP/2.)
766      BD.append(ssep.ISCP-ssep.ICIRP/2.)
767      BD.append(ssep.ISCP)
768      INDBG.append(0)
769      INDBG.append(0)
770      INDBD.append(1)
771      INDBD.append(0)
772      DNX.append(DERAFC)
773      DNX.append(0)
774      DNX.append(ssep.IDENC)
775      DNX.append(0)     
776      INDSEX.append(0)
777      INDSEX.append(1)
778
779
780   echo_mess.append( '\n')
781   echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. :\n')
782   echo_mess.append( '--------------------------------------------- \n')
783   EPS=0.000000000001
784   NZONEX=len(BG)
785   for j in range(NZONEX) :
786     if ( fabs(BG[j]) < EPS ) and ( fabs(BD[j]) < EPS ) :
787       echo_mess.append( 'ZONE NO %d BORNE GAUCHE = %.2f'\
788       ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR \n'%(j+1,BG[j],BD[j]) )
789     else:
790       echo_mess.append( 'ZONE NO %d BORNE GAUCHE = %.2f \n'\
791       ' / BORNE DROITE = %.2f \n'%(j+1,BG[j],BD[j]))
792
793     
794 # tri des donnees sous-epaisseurs en axial
795   TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
796
797 # calcul des zones en axial:
798   BI     = []
799   BS     = []
800   INDBI  = []
801   INDBS  = []
802   DNY    = []
803   INDSEY = []
804   ssep   = MCL_SOUS_EPAIS[0]
805   BI.append(0.)
806   BI.append(ssep.ISLP-ssep.ILONP/2.)
807   BS.append(ssep.ISLP-ssep.ILONP/2.)
808   BS.append(ssep.ISLP)
809   INDBI.append(0)  
810   INDBI.append(0)
811   INDBS.append(1)
812   INDBS.append(0)
813   DNY.append(DERAFL)
814   DNY.append(0)
815   DNY.append(ssep.IDENL)
816   DNY.append(0)
817   INDSEY.append(0)
818   INDSEY.append(1)
819   echo_mess.append( '\n')
820   echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. : \n')
821   echo_mess.append( '----------------------------------------------- \n')
822   NZONEY=len(BI)
823   for j in range(NZONEY) :
824     if ( fabs(BI[j]) < EPS ) and ( fabs(BS[j]) < EPS ) :
825       echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
826       ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(j+1,BI[j],BS[j]))
827     else:
828       echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
829       ' / BORNE SUP. = %.2f'%(j+1,BI[j],BS[j]))
830  
831 # calcul du nombre d'elements longi. et circonf. dans les soue-ep
832   NLX,NLY=ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,
833                  DNX,DNY,RM,RC,INDSEX,INDSEY,IABSC1,IORDO1)
834
835   texte_final=string.join(echo_mess)
836   aster.affiche('MESSAGE',texte_final)
837   return ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY
838 ################################################################################
839 ################################################################################
840 ################################################################################
841 ################################################################################
842 #     MACR_ASCOUF_MAIL ASCPRE
843 #     PREPARATION DES DONNEES POUR LE MAILLAGE DE PLAQUE 
844 #     SOUS-EPAISSEURS :
845 #     - CALCUL TABLEAU TRIE DES ABSCISSES ET ORDONNEES DES CENTRES 
846 #     - CALCUL TABLEAU DES ZONES COUVERTES PAR LES SOUS-EPAISSEURS
847 #
848 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
849 #
850 #     RM    = RAYON MOYEN DU COUDE
851 #     RC    = RAYON DE CINTRAGE DU COUDE
852 #     ALPHA = ANGLE DU COUDE
853 #     LT    = LONGUEUR DE L EMBOUT DU COTE CHARGEMENT
854 #     LGV   = LONGUEUR DE L EMBOUT DU COTE CONDITIONS AUX LIMITES
855 #     NBSEP = NOMBRE DE SOUS-EPAISSEURS
856 #     SYME  = "QUART" DE STRUCTURE, "DEMI" STRUCTURE OU BIEN "ENTIER"
857 #
858 #----------------------DONNEES RENVOYEES-----------------------
859 #
860 #     NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
861 #     NZONEY = NOMBRE DE ZONES LONGITUDINALES       
862 # ------------------------------------------------------------------------------
863 def ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM):
864   ier=0
865   echo_mess=['MACR_ASCOUF_MAIL ASCPRE \n',]
866   ALPHAR = 2.*ALPHA*pi/360.
867   DERAFC = 18.
868   DERAFL =  5.
869   EPSI   =  0.001      
870   NBSEP  = len(MCL_SOUS_EPAIS)
871   echo_mess.append( 'RECHERCHE DES ZONES DE SOUS-EPAISSEURS DANS LE COUDE\n' )
872   
873 # tri des donnees sous-epaisseurs en circonferentiel
874   TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
875 # --- calcul des recouvrements de zones en circonferentiel
876 #
877   NZONEX=0
878   j=0
879   ICE=1
880   NBGAU=0
881   NBDRO=0
882   TYPG=0
883   TYPD=0
884   go10=1
885   go20=1
886 #
887   BG    =[]
888   BD    =[]
889   INDBG =[]
890   INDBD =[]
891   DNX   =[]
892   INDSEX=[]
893 #
894   
895   while go10:
896    
897     j=j+1      
898 #
899 #   definition de la zone courante (borne gauche, borne droite)
900 #    
901 #   TYPG = type de la borne:
902 #          0 : borne gauche sous-epaisseur
903 #          1 : borne droite sous-epaisseur
904 #          2 : centre sous-epaisseur
905 #
906     if j>2*NBSEP and ICE<NBSEP :
907 #     cas ou il ne reste plus que des centres a caser
908       MING = MIND
909       TYPG = TYPD
910       NUMG = NUMD
911       MIND = 2.*pi*RM+1
912     elif TYPD==2 :
913 #     cas ou la borne droite de la zone precedente etait un centre
914       MING = MIND
915       TYPG = TYPD
916       NUMG = NUMD
917       MIND = TAMPON[j-1][0]
918       if fmod(IABSC2[j-1],2):
919         TYPD = 0
920         NUMD = IABSC1[IABSC2[j-1]/2]
921       else:
922         TYPD = 1
923         NUMD = IABSC1[IABSC2[j-1]/2-1]
924       j=j-1
925     else:
926       if j>= 2*NBSEP :
927         MIND = TAMPON[2*NBSEP-1][0]
928         MING = MIND
929         if fmod(IABSC2[2*NBSEP-1],2):
930           TYPG = 0
931           NUMG = IABSC1[IABSC2[2*NBSEP-1]/2]
932         else:
933           TYPG = 1
934           NUMG = IABSC1[IABSC2[2*NBSEP-1]/2-1]
935         TYPD=TYPG
936         NUMD=NUMG
937       else:
938         MING=TAMPON[j-1][0]
939         MIND=TAMPON[j][0]
940         if fmod(IABSC2[j-1],2):
941           TYPG = 0
942           NUMG = IABSC1[IABSC2[j-1]/2]
943         else:
944           TYPG = 1
945           NUMG = IABSC1[IABSC2[j-1]/2-1]
946         if fmod(IABSC2[j],2):
947           TYPD = 0
948           NUMD = IABSC1[IABSC2[j]/2]
949         else:
950           TYPD = 1
951           NUMD = IABSC1[IABSC2[j]/2-1]
952     if fabs(MING-MIND)<EPSI : 
953       if j==2*NBSEP:break
954       else:continue
955     if j>2*NBSEP and ICE>=NBSEP: 
956         break #on sort de la boucle
957
958     while go20:
959       i=ICE
960       if i<=NBSEP:
961 #       recherche des centres a intercaler
962         INDC=IABSC1[i-1]
963         if i>1:
964 #         le centre est deja le meme que precedent
965           if fabs(MCL_SOUS_EPAIS[INDC-1].ISCP-MCL_SOUS_EPAIS[IABSC1[i-2]-1].ISCP) < EPSI :
966             ICE=ICE+1
967             continue
968         if MCL_SOUS_EPAIS[INDC-1].ISCP < MING :
969 #          le centre est la nouvelle borne gauche
970            j=j-1
971            MIND = MING
972            TYPD = TYPG
973            NUMD = NUMG
974            MING = MCL_SOUS_EPAIS[INDC-1].ISCP
975            TYPG = 2
976            NUMG = INDC
977            ICE = ICE+1
978         elif MCL_SOUS_EPAIS[INDC-1].ISCP < MIND : 
979 #          le centre est la nouvelle borne droite  
980            MIND = MCL_SOUS_EPAIS[INDC-1].ISCP
981            TYPD = 2
982            NUMD = INDC
983            ICE = ICE+1
984            continue
985         else:pass
986       NZONEX=NZONEX+1
987 #    
988 #     codes d'intervalles de zones
989 #        0 0 = zone sous-ep.
990 #        0 1 = sous-ep. a droite de la zone
991 #        1 0 = sous-ep. a gauche de la zone
992 #        1 1 = sous-ep. a droite et a gauche de la zone  
993 #
994 #     cas ou la premiere zone ne commence pas au bord de la plaque
995       if MING>0. and NZONEX==1 :
996         BG.append(0.)
997         BD.append(MING)
998         if TYPG==0:
999            INDBG.append(0)
1000            INDBD.append(1)
1001            DNX.append(DERAFC)
1002            DNX.append(0)
1003            INDSEX.append(0)
1004         elif TYPG==1 or TYPG==2:
1005            INDBG.append(0)
1006            INDBD.append(0)
1007            DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1008            DNX.append(0)
1009            INDSEX.append(NUMG)
1010         else: pass
1011         NZONEX=NZONEX+1
1012 #
1013       BG.append(MING)
1014       BD.append(MIND)  
1015 #
1016       if TYPG == 0:
1017 #       borne gauche zone = borne gauche ssep       
1018         NBGAU=NBGAU+1
1019         INDBG.append(0)
1020         INDBD.append(0)
1021         if TYPD == 0:
1022 #         borne droite zone = borne gauche ssep
1023           DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1024           DNX.append(0)
1025           INDSEX.append(NUMG)
1026         elif TYPD == 1 or TYPD == 2:
1027 #         borne droite zone = borne droite ssep : TYPD=1
1028 #         borne droite zone = centre ssep : TYPD=2
1029           LTMP=[]
1030           LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
1031           LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
1032           LTMP.sort()
1033           DNX.append(LTMP[0][0])
1034           DNX.append(0)
1035           INDSEX.append(LTMP[0][1])
1036         else: pass
1037 #
1038       elif TYPG == 1:
1039 #       borne gauche zone = borne droite ssep  
1040         NBDRO = NBDRO+1  
1041         if TYPD == 0:
1042 #         borne droite zone = borne gauche ssep
1043           if NBDRO==NBGAU:
1044             INDBG.append(1)
1045             INDBD.append(1)
1046             DNX.append(DERAFC)
1047             DNX.append(0)
1048             INDSEX.append(0)
1049           else:
1050 #           cas tordu: une sous-ep enveloppe le tout
1051             INDBG.append(0)
1052             INDBD.append(0)
1053             DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1054             DNX.append(0)    
1055             INDSEX.append(NUMG)
1056         elif TYPD == 1 or TYPD == 2:
1057 #         borne droite zone = borne droite ssep : TYPD=1
1058 #         borne droite zone = centre ssep : TYPD=2
1059           INDBG.append(0)
1060           INDBD.append(0)
1061           DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
1062           DNX.append(0)
1063           INDSEX.append(NUMD)  
1064         else: pass
1065 #                
1066       elif TYPG == 2:
1067 #       borne gauche zone = centre ssep  
1068         INDBG.append(0)
1069         INDBD.append(0)
1070         if TYPD == 0:
1071 #         borne droite zone = borne gauche ssep
1072           DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1073           DNX.append(0)
1074           INDSEX.append(NUMG)  
1075         elif TYPD == 1 or TYPD == 2:
1076 #         borne droite zone = borne droite ssep : TYPD=1
1077 #         borne droite zone = centre ssep : TYPD=2
1078           LTMP=[]
1079           LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
1080           LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
1081           LTMP.sort()
1082           DNX.append(LTMP[0][0])
1083           DNX.append(0)
1084           INDSEX.append(LTMP[0][1])
1085         else:pass
1086       else:pass
1087       if j<=(2*NBSEP-2) or ICE<=NBSEP or (TYPD==2 and j<2*NBSEP):
1088          iout=0       
1089          break #on retourne dans la boucle go10
1090       else :
1091          iout=1
1092          break #on sort definitivement 
1093     if iout:break
1094       
1095   if MIND<2.*pi*RM:
1096     NZONEX=NZONEX+1
1097     BG.append(MIND)
1098     BD.append(2.*pi*RM)
1099     if TYPD==0 or TYPD==2:
1100       INDBG.append(0)
1101       INDBD.append(0)
1102       DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
1103       DNX.append(0)
1104       INDSEX.append(NUMD)
1105     elif TYPD==1:
1106       INDBG.append(1)
1107       INDBD.append(0)
1108       DNX.append(DERAFC)
1109       DNX.append(0)
1110       INDSEX.append(0)
1111     else:pass
1112
1113 # au cas ou 2.*pi*RM correspond a une borne d'intevalle de sous-ep ou a
1114 #  un centre de sous-ep.
1115   if fabs(BG[NZONEX-1]-BD[NZONEX-1])<EPSI: NZONEX = NZONEX-1
1116
1117   echo_mess.append( '\n')
1118   echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. : \n')
1119   echo_mess.append( '----------------------------------------------- \n')
1120   for j in range(NZONEX) :
1121     if INDBG[j]==0 and INDBD[j]==0 :
1122       echo_mess.append( 'ZONE NO %d <> BORNE GAUCHE = %.2f \n'\
1123       ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR'%(j+1,BG[j],BD[j]))
1124     else:
1125       echo_mess.append( 'ZONE NO %d <> BORNE GAUCHE = %.2f \n'\
1126       ' / BORNE DROITE = %.2f'%(j+1,BG[j],BD[j]))
1127
1128       
1129 # --- tri des donnees sous-ep. en axial
1130   TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
1131
1132   BI     = []
1133   BS     = []
1134   INDBI  = []
1135   INDBS  = []
1136   DNY    = []
1137   INDSEY = []
1138
1139   if SYME == 'DEMI':
1140 #   calcul des zones en axial :
1141 #   zones  (0,bord inferieur) et (bord inferieur,centre sous-ep.) 
1142     ssep   = MCL_SOUS_EPAIS[0]
1143     BI.append(0.)
1144     BI.append(ssep.ISLP-ssep.ILONP/2.)
1145     BS.append(ssep.ISLP-ssep.ILONP/2.)
1146     BS.append(ssep.ISLP)
1147     INDBI.append(0)  
1148     INDBI.append(0)
1149     INDBS.append(1)
1150     INDBS.append(0)
1151     DNY.append(DERAFL)
1152     DNY.append(0)
1153     DNY.append(ssep.IDENL)
1154     DNY.append(0)
1155     INDSEY.append(0)
1156     INDSEY.append(1)
1157     NZONEY=1
1158 #     
1159   else:
1160 #
1161 #   calcul des recouvrements de zones en axial  
1162     j = 0
1163     ICE = 1
1164     NBINF = 0
1165     NBSUP = 0
1166     TYPI=0
1167     TYPS=0
1168     go40=1
1169     go50=1
1170     NZONEY=0
1171 #
1172     while go40:
1173       j=j+1      
1174 #
1175 #     definition de la zone courante (borne inf, borne sup)
1176 #
1177 #     typi = type de la borne
1178 #            0 : borne inf. sous-ep.
1179 #            1 : borne sup. sous-ep.
1180 #            2 : centre sous-ep.   
1181 #
1182       if TYPS==2:
1183 #       cas ou la borne sup. de la zone prec. etait un centre
1184         MINI=MINS
1185         TYPI=TYPS
1186         NUMI=NUMS
1187         MINS=TAMPON[j-1][0]
1188         if fmod(IORDO2[j-1],2):
1189           TYPS = 0
1190           NUMS = IORDO1[IORDO2[j-1]/2]
1191         else:
1192           TYPS = 1
1193           NUMS = IORDO1[IORDO2[j-1]/2-1]
1194         j=j-1
1195       else:
1196         if j>= 2*NBSEP :
1197           MINI = TAMPON[2*NBSEP-1][0]
1198           MINS = MINI
1199           if fmod(IORDO2[2*NBSEP-1],2):
1200             TYPI = 0
1201             NUMI = IORDO1[IORDO2[2*NBSEP-1]/2]
1202           else:
1203             TYPI = 1
1204             NUMI = IORDO1[IORDO2[2*NBSEP-1]/2-1]
1205           TYPS=TYPI
1206           NUMS=NUMI
1207         else:
1208           MINI=TAMPON[j-1][0]
1209           MINS=TAMPON[j][0]
1210           if fmod(IORDO2[j-1],2):
1211             TYPI = 0
1212             NUMI = IORDO1[IORDO2[j-1]/2]
1213           else:
1214             TYPI = 1
1215             NUMI = IORDO1[IORDO2[j-1]/2-1]
1216           if fmod(IORDO2[j],2):
1217             TYPS = 0
1218             NUMS = IORDO1[IORDO2[j]/2]
1219           else:
1220             TYPS = 1
1221             NUMS = IORDO1[IORDO2[j]/2-1]
1222       if fabs(MINI-MINS)<EPSI:
1223         if j==2*NBSEP:break
1224         else:continue
1225
1226       while go50:
1227         i=ICE
1228         if i<=NBSEP:
1229 #         recherche des centres a intercaler
1230           INDC=IORDO1[i-1]
1231           if i>1:
1232 #           le centre est deja le meme que le precedent
1233             if fabs(MCL_SOUS_EPAIS[INDC-1].ISLP-MCL_SOUS_EPAIS[IORDO1[i-2]-1].ISLP)<EPSI:
1234              ICE=ICE+1  
1235              continue
1236           if MCL_SOUS_EPAIS[INDC-1].ISLP<MINI:
1237 #            le centre est la nouvelle borne inf.
1238              j=j-1
1239              MINS = MINI
1240              TYPS = TYPI
1241              NUMS = NUMI
1242              MINI = MCL_SOUS_EPAIS[INDC-1].ISLP
1243              TYPI = 2
1244              NUMI = INDC
1245              ICE = ICE+1
1246           elif MCL_SOUS_EPAIS[INDC-1].ISLP<MINS:
1247 #            le centre est la nouvelle borne sup.
1248             MINS = MCL_SOUS_EPAIS[INDC-1].ISLP
1249             TYPS = 2
1250             NUMS = INDC
1251             ICE = ICE+1
1252             continue
1253           else:pass
1254         NZONEY=NZONEY+1
1255 #       
1256 #       code d'intervalles de zone
1257 #       0 0  = ZONE SOUS-EPAISSEUR
1258 #       0 1  = SOUS-EPAISSEUR A SUPERIEURE DE LA ZONE
1259 #       1 0  = SOUS-EPAISSEUR A INFERIEURE DE LA ZONE
1260 #       1 1  = SOUS EPAISSEUR A SUPERIEURE ET A INFERIEURE DE LA ZONE
1261 #
1262 #       cas ou la premiere zone ne commence pas au bord de la plaque
1263         if MINI>0. and NZONEY==1:
1264           first=0
1265           BI.append(0.)
1266           BS.append(MINI)
1267           if TYPI==0:
1268             INDBI.append(0)
1269             INDBS.append(1)
1270             DNY.append(DERAFL)
1271             DNY.append(0)
1272             INDSEY.append(0)
1273           elif TYPI==1 or TYPI==2:
1274             INDBI.append(0)
1275             INDBS.append(0)
1276             DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1277             DNY.append(0)
1278             INDSEY.append(NUMI)
1279           else:pass
1280           NZONEY = NZONEY+1
1281 #
1282         BI.append(MINI)
1283         BS.append(MINS)
1284
1285         if TYPI==0:
1286 #         borne inferieure zone = borne inferieure ssep
1287           NBINF = NBINF+1
1288           INDBI.append(0)
1289           INDBS.append(0)
1290           if TYPS==0:
1291 #           borne superieure zone = borne inferieur ssep
1292             DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1293             DNY.append(0)
1294             INDSEY.append(NUMI)
1295           elif TYPS==1 or TYPS==2:
1296 #           borne superieure zone = borne superieure ssep:TYPS==1
1297 #           borne superieure zone = centre ssep:TYPS==2
1298             LTMP=[]
1299             LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
1300             LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
1301             LTMP.sort()
1302             DNY.append(LTMP[0][0])
1303             DNY.append(0)
1304             INDSEY.append(LTMP[0][1])
1305           else:pass
1306         elif TYPI==1:  
1307 #         borne inferieure zone=borne superieure ssep
1308           NBSUP = NBSUP+1
1309           if TYPS==0:
1310 #           borne superieure zone = borne inferieur ssep
1311             if NBSUP==NBINF:
1312               INDBI.append(1)
1313               INDBS.append(1)        
1314               DNY.append(DERAFL)
1315               DNY.append(0)
1316               INDSEY.append(0)
1317             else:
1318 #             cas tordu: une sous-ep. enveloppe le tout
1319               INDBI.append(0)
1320               INDBS.append(0)        
1321               DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1322               DNY.append(0)
1323               INDSEY.append(NUMI)
1324           elif TYPS==1 or TYPS==2:
1325 #           borne superieure zone = borne superieure ssep:TYPS==1
1326 #           borne superieure zone = centre ssep:TYPS==2
1327             INDBI.append(0)
1328             INDBS.append(0)        
1329             DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
1330             DNY.append(0)
1331             INDSEY.append(NUMS)
1332           else:pass
1333         elif TYPI==2:
1334 #         borne inferieure zone = centre ssep  
1335           INDBI.append(0)
1336           INDBS.append(0)        
1337           if TYPS==0:
1338 #           borne superieure zone = borne inferieure ssep
1339             DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1340             DNY.append(0)
1341             INDSEY.append(NUMI)
1342           elif TYPS==1 or TYPS==2:
1343 #           borne superieure zone = borne superieure ssep
1344             LTMP=[]
1345             LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
1346             LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
1347             LTMP.sort()
1348             DNY.append(LTMP[0][0])
1349             DNY.append(0)
1350             INDSEY.append(LTMP[0][1])
1351           else:pass
1352         else:pass
1353         if j<=(2*NBSEP-2) or TYPS==2:
1354           iout=0  
1355           break #on retourne dans la boucle go40
1356         else:
1357           iout=1
1358           break #on sort definitivement 
1359       if iout:break
1360
1361 #   cas ou la derniere zone ne finit pas au bout de la plaque    
1362     if MINS<ALPHAR*RC:
1363        NZONEY=NZONEY+1
1364        BI.append(MINS)
1365        BS.append(ALPHAR*RC) 
1366        if TYPS==0 or TYPS==2:
1367           INDBI.append(0)
1368           INDBS.append(0)        
1369           DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
1370           DNY.append(0)
1371           INDSEY.append(NUMS)
1372        elif TYPS==1:
1373           INDBI.append(1)
1374           INDBS.append(0)        
1375           DNY.append(DERAFL)
1376           DNY.append(0)
1377           INDSEY.append(0)
1378        else:pass
1379
1380     echo_mess.append( '\n')
1381     echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. :\n')
1382     echo_mess.append( '----------------------------------------------- \n')
1383
1384     for j in range(NZONEY) :
1385       if INDBI[j]==0 and INDBS[j]==0 :
1386         echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
1387         ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(j+1,BI[j],BS[j]))
1388       else:
1389         echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
1390         ' / BORNE SUP. = %.2f '%(j+1,BI[j],BS[j]))
1391
1392 #   calcul du nombre d'elements longi. et circonf. dans les sous-ep
1393     NLX,NLY=ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,
1394                    DNX,DNY,RM,RC,INDSEX,INDSEY,IABSC1,IORDO1)
1395   
1396
1397   texte_final=string.join(echo_mess)
1398   aster.affiche('MESSAGE',texte_final)
1399   return ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY
1400
1401 ################################################################################
1402 ################################################################################
1403 ################################################################################
1404 #     MACR_ASCOUF_MAIL   write_file_dgib_ASCFDO
1405 #
1406 #     ECRIT DANS UN FICHIER LES DONNES GIBI DE LA PROCEDURE 
1407 #     "PLAQUE FISSUREE"
1408 #
1409
1410 # ------------------------------------------------------------------------------
1411 def write_file_dgib_ASCFDO(nomFichierDATG,RM,RC,ALPHA,NBTRAN,EP1,EP2,EPI,TETA1,
1412                            TETA2,LTRAN,SUREP,LTCHAR,LTCLIM,TYPBOL,AXEAP,AXECP,NT,NS,NC,
1413                            SFP,ORIEN,AZIM,RC0,RC2,RC3,POSIT,EPSI,NIVMAG,SYME, loc_datg) :
1414
1415   if TYPBOL!= None:
1416      if TYPBOL=='CUVE'     : TYPEMB = 'typcuv' 
1417      if TYPBOL=='GV'       : TYPEMB = 'typegv' 
1418      if TYPBOL=='ASP_MPP'  : TYPEMB = 'typapp' 
1419   else: 
1420      TYPEMB ='      '
1421    
1422   if POSIT =='DEB_INT'  :
1423          POSIT2 = 'interne'
1424   else:
1425          POSIT2 = 'externe'
1426   if   SYME[:6]=='ENTIER' : ZSYME = 'entier'
1427   elif SYME[:5]=='QUART'  : ZSYME = 'quart'
1428   else :                    ZSYME = 'demi'
1429   C=AXECP/2.
1430   TETAF=AZIM*pi/180.
1431
1432   POIVIR = ' ;\n'
1433   texte='* DEBUT PARAMETRES UTILISATEUR\n'
1434   texte=texte+'*\n'
1435   texte=texte+'c        = '+str(C)            +POIVIR
1436   texte=texte+'a        = '+str(AXEAP)        +POIVIR
1437   texte=texte+'nt       = '+str(NT)           +POIVIR
1438   texte=texte+'ns       = '+str(NS)           +POIVIR
1439   texte=texte+'nc       = '+str(NC)           +POIVIR
1440   texte=texte+'rm       = '+str(RM)           +POIVIR
1441   texte=texte+'rc       = '+str(RC)           +POIVIR
1442   texte=texte+'alphac   = '+str(ALPHA)        +POIVIR
1443   texte=texte+'nbtranep = '+str(NBTRAN)       +POIVIR
1444   texte=texte+'ep1      = '+str(EP1)          +POIVIR
1445   texte=texte+'ep2      = '+str(EP2)          +POIVIR
1446   texte=texte+'epi      = '+str(EPI)          +POIVIR
1447   texte=texte+'teta1    = '+str(TETA1)        +POIVIR
1448   texte=texte+'teta2    = '+str(TETA2)        +POIVIR
1449   texte=texte+'ltran    = '+str(LTRAN)        +POIVIR
1450   texte=texte+'posfis   = '+str(SFP)          +POIVIR
1451   texte=texte+'ksiref   = '+str(ORIEN)        +POIVIR
1452   texte=texte+'surep    = '+str(SUREP)        +POIVIR       
1453   texte=texte+'teta_f   = '+str(TETAF)        +POIVIR
1454   texte=texte+'rc0      = '+str(RC0)          +POIVIR
1455   texte=texte+'rc2      = '+str(RC2)          +POIVIR
1456   texte=texte+'rc3      = '+str(RC3)          +POIVIR
1457   texte=texte+"pos      = '"+POSIT2+"'"       +POIVIR
1458   texte=texte+'lt       = '+str(LTCHAR)       +POIVIR
1459   texte=texte+'lgv      = '+str(LTCLIM)       +POIVIR
1460   texte=texte+"typembou = '"+TYPEMB+"'"       +POIVIR
1461   texte=texte+"zsyme    = '"+ZSYME+"'"        +POIVIR
1462   texte=texte+'epsif    = '+str(EPSI)         +POIVIR
1463   texte=texte+'nivmag   = '+str(NIVMAG)       +POIVIR
1464   texte=texte+'*\n'
1465   texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
1466   texte = texte + open(os.path.join(loc_datg, 'ascouf_fiss_v4.datg'), 'r').read()
1467   fdgib=open(nomFichierDATG,'w')
1468   fdgib.write(texte)
1469   fdgib.close()
1470
1471 ################################################################################
1472 ################################################################################
1473 ################################################################################
1474 #     MACR_ASCOUF_MAIL   write_file_dgib_ASCSQO
1475 #
1476 #     ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE 
1477 #     "PLAQUE SOUS-EPAISSEUR"
1478 #
1479 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1480 #
1481 #     RM    = RAYON MOYEN DU COUDE
1482 #     RC    = RAYON DE CINTRAGE DU COUDE
1483 #     ALPHA = ANGLE DU COUDE
1484 #     NBTRAN = NOMBRE DE TRANSITION D'EPAISSEUR (0, 1 OU 2)
1485 #     EP1   = EPAISSEUR DU COUDE (COTE EMBOUT 1 SI TRANSITION)
1486 #     EP2   = EPAISSEUR DU COUDE (COTE EMBOUT 2 SI TRANSITION)
1487 #     EPI   = EPAISSEUR DU COUDE INTERMEDIAIRE SI TRANSITION A 2 PENTES
1488 #     TETA1  = ANGLE DE LA PREMIERE TRANSITION D'EPAISSEUR EVENTUELLE
1489 #     TETA2  = ANGLE DE LA DEUXIEME TRANSITION D'EPAISSEUR EVENTUELLE
1490 #     LTRAN  = LONGUEUR ENTRE FIN DE L'EMBOUT 1 ET DEBUT DE TRANSITION
1491 #     LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
1492 #     LCLIM  = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
1493 #     GEOM  = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)  
1494 #     SYME = "QUART" DE STRUCTURE, "DEMI" STRUCTURE OU BIEN "ENTIER"
1495 #     NBEP = NOMBRE D'ELEMENTS DANS LE COUDE
1496 #     NLX = NOMBRE D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR
1497 #     NLY = NOMBRE D'ELEMENTS LONGI DE LA SOUS-EPAISSEUR
1498 #     SUREP = SUR EPAISSEUR
1499
1500 # ------------------------------------------------------------------------------
1501 def write_file_dgib_ASCSQO(nomFichierDATG,TYPELE,RM,RC,ALPHA,NBTRAN,EP1,EP2,
1502                            EPI,TETA1,MCL_SOUS_EPAIS,TETA2,LTRAN,LTCHAR,LTCLIM,GEOM,
1503                            SYME,NBEP,NLX,NLY,NIVMAG,SUREP,AZIMC,loc_datg) :
1504
1505   ssep= MCL_SOUS_EPAIS[0] 
1506   print 'AZIMC', AZIMC;  
1507   POIVIR = ' ;\n'
1508   texte=' nivmag   = '+str(NIVMAG)       +POIVIR
1509   texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
1510   texte=texte+'*\n'
1511   texte=texte+'coory   = table '+POIVIR
1512   texte=texte+'coorz   = table '+POIVIR
1513   texte=texte+'prof    = table '+POIVIR
1514   texte=texte+'posit   = table '+POIVIR
1515   texte=texte+'axisym  = table '+POIVIR
1516   texte=texte+'axecir  = table '+POIVIR
1517   texte=texte+'axelon  = table '+POIVIR
1518   texte=texte+'sousep  = table '+POIVIR
1519   texte=texte+'coorzc  = table '+POIVIR
1520   texte=texte+'axelonc = table '+POIVIR
1521   texte=texte+'*\n'
1522   texte=texte+'* DEBUT PARAMETRES UTILISATEUR\n'
1523   texte=texte+'*\n'
1524   texte=texte+'* parametres generaux\n'
1525   texte=texte+'*\n'
1526   texte=texte+' pirad    = '+str(pi)            +POIVIR
1527   texte=texte+' rm       = '+str(RM)           +POIVIR
1528   texte=texte+' rc       = '+str(RC)           +POIVIR
1529   texte=texte+' alpha    = '+str(ALPHA)        +POIVIR
1530   texte=texte+' lt1      = '+str(LTCHAR)       +POIVIR
1531   texte=texte+' lt2      = '+str(LTCLIM)       +POIVIR
1532   texte=texte+' nbtranep = '+str(NBTRAN)       +POIVIR
1533   texte=texte+' ep1      = '+str(EP1)          +POIVIR
1534   texte=texte+' ep2      = '+str(EP2)          +POIVIR
1535   texte=texte+' epI      = '+str(EPI)          +POIVIR
1536   texte=texte+' teta1    = '+str(TETA1)        +POIVIR
1537   texte=texte+' teta2    = '+str(TETA2)        +POIVIR
1538   texte=texte+' ltran    = '+repr(LTRAN)       +POIVIR 
1539   texte=texte+' surep    = '+str(SUREP)        +POIVIR   
1540   if GEOM == 'COUDE':
1541     texte=texte+" zcoude = 'oui' "+POIVIR
1542   else:
1543     texte=texte+" zcoude = 'non' "+POIVIR
1544   if SYME == 'ENTIER':
1545     texte=texte+" zsyme = 'entier' "+POIVIR
1546   elif SYME == 'QUART':
1547     texte=texte+" zsyme = 'quart' "+POIVIR
1548   else:
1549     texte=texte+" zsyme = 'demi' "+POIVIR
1550   if TYPELE == 'CU20':
1551     texte=texte+" zquad = 'oui' "+POIVIR
1552   else:
1553     texte=texte+" zquad = 'non' "+POIVIR
1554   SCP=pi*RM
1555   texte=texte+' nxep   = '+str(NBEP)        +POIVIR
1556   texte=texte+'*\n'
1557   texte=texte+'* Caracteristiques de la sous-epaisseur\n'
1558   texte=texte+'*\n'
1559   texte=texte+' azimc = '+str(AZIMC)                                        +POIVIR
1560   texte=texte+' tysep = '+str(ssep.ICIRP)                                   +POIVIR
1561   texte=texte+' tzsep = '+str(ssep.ILONP)                                   +POIVIR
1562   texte=texte+' prof .                      1  = '+str(ssep['PROFONDEUR'])  +POIVIR
1563   texte=texte+' ycsep = '+str(SCP-pi*RM)                                    +POIVIR
1564   texte=texte+' theta = '+str(ssep.IPHIC)                                   +POIVIR
1565   texte=texte+' zcsep = '+repr(ssep.ISLP)                                    +POIVIR
1566
1567   texte=texte+" posit .                      1  = '"+str(ssep['SOUS_EPAIS'].lower())+"'"+POIVIR
1568   texte=texte+' nby   = '+str(int(NLX[0]))                                  +POIVIR
1569   texte=texte+' nbz   = '+str(int(NLY[0]))                                  +POIVIR
1570   texte=texte+' nbxse = '+str(ssep['NB_ELEM_RADI'])                         +POIVIR
1571   texte=texte+' axelonc .                      1  = '+str(ssep['AXE_LONGI'])+POIVIR
1572   if ssep['POSI_CURV_LONGI']!=None:
1573     texte=texte+' coorzc .                      1  = '+repr(ssep['POSI_CURV_LONGI'])+POIVIR
1574   else:
1575     DZC=ssep.BETA*pi*(RC+(RM+EP1/2.)*cos(pi/2.))/180.
1576     texte=texte+' coorzc .                      1  = '+repr(DZC)+POIVIR
1577   if ssep['TYPE']=='AXIS':
1578      texte=texte+" zaxis = 'oui' "+POIVIR
1579   else:
1580      texte=texte+" zaxis = 'non' "+POIVIR
1581   if ssep['EMPREINTE'] == 'OUI':
1582      texte=texte+" sousep .                      1  = 'oui'"+POIVIR
1583   else:
1584      texte=texte+" sousep .                      1  = 'non'"+POIVIR
1585   texte=texte+'*\n'
1586   texte=texte+'* FIN PARAMETRES UTILISATEUR \n'
1587   texte = texte + open(os.path.join(loc_datg, 'ascouf_ssep_mono_v1.datg'), 'r').read()
1588   fdgib=open(nomFichierDATG,'w')
1589   fdgib.write(texte)
1590   fdgib.close()
1591 ################################################################################
1592 ################################################################################
1593 ################################################################################
1594 #     MACR_ASCOUF_MAIL   write_subpart_file_pgib_POST
1595 #
1596 #     APPELEE DANS : write_file_pgib_ASCSQ2 , write_file_pgib_ASCSD2
1597 #     DEFINIE UNE CHAINE DE CARACTERES UTILISEE LORS DE L'ECRITURE DU
1598 #     FICHIER GIBI DE POST-TRAITEMENTS
1599 #
1600 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1601 #
1602 #     NLX = NOMBRE D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR
1603 #     NLY = NOMBRE D'ELEMENTS LONGI DE LA SOUS-EPAISSEUR
1604 #
1605 #-----------------DONNEE RENVOYEE PAR ASTER-------------------- 
1606
1607 #     texte = chaine de caracteres contenant des instructions gibi
1608 #             de post-traitements
1609 #
1610 # ------------------------------------------------------------------------------
1611 def write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY):
1612   CAR3 = ('fdro','exdr','extr','exga','fgau','inga','intr','indr')
1613   
1614   POIVIR = ' ;\n'
1615   texte='* DEBUT POINTS DE POST-TRAITEMENT\n'
1616   texte=texte+'*\n'
1617   issep=0
1618   for ssep in MCL_SOUS_EPAIS:
1619     issep=issep+1
1620     texte=texte+'*\n'
1621     texte=texte+'* sous-epaisseur No '+str( issep)+'\n'
1622     texte=texte+'*\n'
1623     if ssep['TYPE'] == 'ELLI':
1624       texte=texte+'*\n'
1625       texte=texte+'* plans circonf longi et colonne centrale \n'
1626       texte=texte+'*\n'
1627       texte=texte+'pcirc'+str( issep)+' = circo .'+str(issep).rjust(4)+POIVIR
1628       texte=texte+'plong'+str( issep)+' = longi .'+str(issep).rjust(4)+POIVIR
1629       texte=texte+'pcent'+str( issep)+' = centr .'+str(issep).rjust(4)+POIVIR
1630     texte=texte+'*\n'
1631     texte=texte+'* ligaments tous les 45 degres a epaisseur minimale \n'
1632     texte=texte+'*\n'
1633     texte=texte+'isep = '+str( issep)+POIVIR
1634     for k in range(8):
1635       texte=texte+'ilig = '+str(k+1)+POIVIR
1636       texte=texte+'rlig = ilig/10. + isep'+POIVIR
1637       texte=texte+str(CAR3[k])+str( issep)+' = lig45 . rlig'+POIVIR
1638     if ssep['TYPE'] == 'ELLI':
1639       texte=texte+'*\n'
1640       texte=texte+"* ligaments circonferentiels a l'epaisseur minimale\n"
1641       texte=texte+'*\n'
1642       texte=texte+'isep = '+str(issep)+POIVIR
1643       for k in range(2*NLX[issep-1]+1):
1644         texte=texte+'ilig = '+str(k+1)+POIVIR
1645         texte=texte+'rlig = ilig/100. + isep'+POIVIR
1646         texte=texte+'cir'+str(issep)+'_'+str(k+1)+' = ligcir . rlig'+POIVIR
1647       texte=texte+'*\n'
1648       texte=texte+"* ligaments longitudinaux a l'epaisseur minimale\n"                        
1649       texte=texte+'* \n'
1650       for k in range(2*NLY[issep-1]+1):
1651         texte=texte+'ilig = '+str(k+1)+POIVIR
1652         texte=texte+'rlig = ilig/100. + isep'+POIVIR
1653         texte=texte+'lon'+str(issep)+'_'+str(k+1)+' = liglon . rlig'+POIVIR
1654   texte=texte+'* FIN POINTS DE POST-TRAITEMENT\n'
1655   return texte
1656
1657 ################################################################################
1658 ################################################################################
1659 ################################################################################
1660 #     MACR_ASCOUF_MAIL   write_file_pgib_ASCSQ2
1661 #
1662 #     ECRIT DANS UN FICHIER  LES DONNEES GIBI DE LA PROCEDURE
1663 #     "PLAQUE SOUS-EPAISSEURS"
1664 #     IL S'AGIT DE LA DEUXIEME PARTIE ( APRES LES DONNEES UTILISATEUR )
1665 #
1666 #
1667 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1668 #
1669 #     NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
1670 #     NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
1671
1672 # ------------------------------------------------------------------------------
1673 def write_file_pgib_ASCSQ2(MCL_SOUS_EPAIS,NLX,NLY):
1674   POIVIR = ' ;\n'
1675   texte=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
1676   texte=texte+'*\n'
1677   texte=texte+'p1 = 0. 0. (-1.*lt1)'+POIVIR
1678   texte=texte+'p2 = 0. 0. (coor 3 bou3)'+POIVIR
1679   texte=texte+'ma = coude et p1 et p2'+POIVIR
1680   texte=texte+"opti sauv form 'fort.8'"+POIVIR
1681   texte=texte+'sort ma'+POIVIR
1682   texte=texte+'sauv form ma'+POIVIR
1683   texte=texte+'fin'+POIVIR
1684   fpgib=open('fort.71','w')
1685   fpgib.write(texte)
1686   fpgib.close()
1687
1688 ################################################################################
1689 ################################################################################
1690 ################################################################################
1691 #     MACR_ASCOUF_MAIL   write_file_pgib_ASCSP1
1692 #
1693 #     ECRIT DANS UN FICHIER  LES DONNEES GIBI DE LA PROCEDURE
1694 #     "PLAQUE SOUS-EPAISSEURS"
1695 #     IL S'AGIT DE LA PREMIERE PARTIE ( AVANT LES DONNEES UTILISATEUR )
1696 #
1697 #
1698 # ------------------------------------------------------------------------------
1699 def write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg):
1700
1701   POIVIR = ' ;\n'
1702   texte=' nivmag = '+str(NIVMAG)+POIVIR
1703   texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0 '+POIVIR
1704   texte=texte+'*\n'
1705   texte=texte+'bg      = table '+POIVIR
1706   texte=texte+'bd      = table '+POIVIR
1707   texte=texte+'bi      = table '+POIVIR
1708   texte=texte+'bs      = table '+POIVIR
1709   texte=texte+'indbg   = table '+POIVIR
1710   texte=texte+'indbd   = table '+POIVIR
1711   texte=texte+'indbi   = table '+POIVIR
1712   texte=texte+'indbs   = table '+POIVIR
1713   texte=texte+'axecir  = table '+POIVIR
1714   texte=texte+'axelon  = table '+POIVIR
1715   texte=texte+'axelonc = table '+POIVIR
1716   texte=texte+'coorzc  = table '+POIVIR
1717   texte=texte+'prof    = table '+POIVIR
1718   texte=texte+'posit   = table '+POIVIR
1719   texte=texte+'coory   = table '+POIVIR
1720   texte=texte+'coorz   = table '+POIVIR   
1721   texte=texte+'deny    = table '+POIVIR
1722   texte=texte+'nbely   = table '+POIVIR
1723   texte=texte+'denz    = table '+POIVIR
1724   texte=texte+'nbelz   = table '+POIVIR
1725   texte=texte+'axisym  = table '+POIVIR
1726   texte=texte+'sousep  = table '+POIVIR
1727   texte=texte+'* \n'  
1728   texte = texte + open(os.path.join(loc_datg, 'ascouf_ssep_mult_v1.datg'), 'r').read()
1729   fdgib=open(nomFichierDATG,'w')
1730   fdgib.write(texte)
1731   fdgib.close()
1732   
1733 ################################################################################
1734 ################################################################################
1735 ################################################################################
1736 #     MACR_ASCOUF_MAIL   write_file_pgib_ASCSDO
1737 #
1738 #     ECRIT DANS UN FICHIER  LES DONNEES GIBI DE LA PROCEDURE
1739 #     "PLAQUE SOUS-EPAISSEURS"
1740 #
1741 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1742 #
1743 #     RM    = RAYON MOYEN DU COUDE
1744 #     RC    = RAYON DE CINTRAGE DU COUDE
1745 #     ALPHA = ANGLE DU COUDE
1746 #     EP    = EPAISSEUR DU COUDE
1747 #     LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
1748 #     LCLIM  = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
1749 #     GEOM  = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)  
1750 #     SYME = QUART DE STRUCTURE SI 'OUI'
1751 #     INDBG = INDICATEUR BORD GAUCHE DE LA ZONE CIRCONF J
1752 #     INDBD = INDICATEUR BORD DROIT DE LA ZONE CIRCONF J
1753 #     BG = ABSCISSE DU BORD GAUCHE DE LA ZONE CIRCONF J
1754 #     BD = ABSCISSE DU BORD DROIT DE LA ZONE CIRCONF J
1755 #     BI = ORDONNEE DU BORD INFERIEUR DE LA ZONE LONGI J
1756 #     BS = ORDONNEE DU BORD SUPERIEUR DE LA ZONE LONGI J
1757 #     INDBI = INDICATEUR BORD INFERIEUR DE LA ZONE LONGI J
1758 #     INDBS = INDICATEUR BORD SUPERIEUR DE LA ZONE LONGI J
1759 #     INDSEX = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE CIRCONF J
1760 #     INDSEY = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE LONGI J
1761 #     DNX = DENSITE ET NOMBRE D'ELEMENTS CIRCONF. DE LA ZONE J
1762 #     DNY = DENSITE ET NOMBRE D'ELEMENTS LONGIT. DE LA ZONE J
1763 #     NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
1764 #     NZONEY = NOMBRE DE ZONES LONGITUDINALES  
1765 #
1766 # ------------------------------------------------------------------------------
1767 def write_file_pgib_ASCSDO(RM,RC,ALPHA,EP,LTCLIM,LTCHAR,NBEP,SUREP,
1768                            NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,
1769                            DNX,DNY,MCL_SOUS_EPAIS,GEOM,SYME):
1770
1771   POIVIR = ' ;\n'
1772   NY=20
1773   DELTAY=2.*pi*RM/NY
1774
1775   def nint(x):
1776     if 0<ceil(x)-x<=0.5:
1777       return int(ceil(x))
1778     else:
1779       return int(floor(x))
1780
1781 # conversion des densites de raffinement des embout en degres par rapport
1782 # a l'angle du coude
1783   RTMP=nint(LTCHAR/DELTAY)*DELTAY/4.
1784   DENSTU = RTMP*360./(2.*pi*RC)
1785   DENSGV = DENSTU
1786   NZT=0
1787   NZGV=0
1788
1789   texte='* DEBUT PARAMETRES UTILISATEUR \n'
1790   texte=texte+'*\n'
1791   texte=texte+'* parametres generaux\n'
1792   texte=texte+'*\n'
1793   texte=texte+'rm       = '+str(RM)               +POIVIR
1794   texte=texte+'rc       = '+str(RC)               +POIVIR
1795   texte=texte+'alphac   = '+str(ALPHA)            +POIVIR
1796   texte=texte+'epc      = '+str(EP)               +POIVIR
1797   texte=texte+'pirad    = '+str(pi)               +POIVIR
1798   texte=texte+'lgv      = '+str(LTCLIM)           +POIVIR
1799   texte=texte+'lt       = '+str(LTCHAR)           +POIVIR
1800   texte=texte+'lcoude   = '+str(ALPHA*pi/180.*RC) +POIVIR
1801   if GEOM == 'COUDE':
1802     texte=texte+"zcoude = 'oui' "     +POIVIR
1803   else:
1804     texte=texte+"zcoude = 'non' "     +POIVIR
1805   if SYME == 'ENTIER':
1806     texte=texte+"zsyme = 'entier' "   +POIVIR
1807   elif SYME == 'QUART':
1808     texte=texte+"zsyme = 'quart' "    +POIVIR
1809   else:
1810     texte=texte+"zsyme = 'demi' "     +POIVIR
1811   texte=texte+'nxep   = '+str(NBEP)   +POIVIR
1812   texte=texte+'nzt    = '+str(NZT)    +POIVIR
1813   texte=texte+'nzgv   = '+str(NZGV)   +POIVIR
1814   texte=texte+'daxhtu = '+str(DENSTU) +POIVIR
1815   texte=texte+'daxhgv = '+str(DENSGV) +POIVIR
1816   texte=texte+'*\n'
1817   
1818   texte=texte+'* Zones couvertes en circonference\n'
1819   texte=texte+'*\n'
1820   for j in range(NZONEX):
1821     texte=texte+'bg .'   +str(j+1).rjust(23)+' = '+str(BG[j]-pi*RM)     +POIVIR
1822     texte=texte+'bd .'   +str(j+1).rjust(23)+' = '+str(BD[j]-pi*RM)     +POIVIR
1823     texte=texte+'indbg .'+str(j+1).rjust(23)+' = '+str(INDBG[j])        +POIVIR
1824     texte=texte+'indbd .'+str(j+1).rjust(23)+' = '+str(INDBD[j])        +POIVIR
1825     texte=texte+'deny .' +str(j+1).rjust(23)+' = '+str(DNX[2*j])        +POIVIR
1826     texte=texte+'nbely .'+str(j+1).rjust(23)+' = '+str(int(DNX[2*j+1])) +POIVIR
1827     texte=texte+'*\n'
1828     
1829   texte=texte+'* Zones couvertes longitudinalement\n'
1830   texte=texte+'*\n'
1831   for j in range(NZONEY):
1832     texte=texte+'bi .'   +str(j+1).rjust(23)+' = '+str(BI[j])           +POIVIR
1833     texte=texte+'bs .'   +str(j+1).rjust(23)+' = '+str(BS[j])           +POIVIR
1834     texte=texte+'indbi .'+str(j+1).rjust(23)+' = '+str(INDBI[j])        +POIVIR
1835     texte=texte+'indbs .'+str(j+1).rjust(23)+' = '+str(INDBS[j])        +POIVIR
1836     texte=texte+'denz .' +str(j+1).rjust(23)+' = '+str(DNY[2*j])        +POIVIR
1837     texte=texte+'nbelz .'+str(j+1).rjust(23)+' = '+str(int(DNY[2*j+1])) +POIVIR
1838     texte=texte+'*\n'
1839  
1840   texte=texte+'* Caracteristiques des sous-epaisseurs\n'
1841   texte=texte+'*\n'
1842   issep=0
1843   for ssep in MCL_SOUS_EPAIS:
1844      issep=issep+1
1845      texte=texte+'axecir .' +str(issep).rjust(23)+' = '+str(ssep.ICIRP)        +POIVIR
1846      texte=texte+'axelon .' +str(issep).rjust(23)+' = '+str(ssep.ILONP)        +POIVIR
1847      texte=texte+'prof .'   +str(issep).rjust(23)+' = '+str(ssep['PROFONDEUR'])+POIVIR
1848      texte=texte+'coory .'  +str(issep).rjust(23)+' = '+str(ssep.ISCP-pi*RM)   +POIVIR
1849      texte=texte+'coorz .'  +str(issep).rjust(23)+' = '+str(ssep.ISLP)         +POIVIR
1850      texte=texte+'posit .'  +str(issep).rjust(23)+" = '"+str(ssep['SOUS_EPAIS'].lower())+"'"+POIVIR
1851      texte=texte+'axelonc .'+str(issep).rjust(23)+' = '+str(ssep['AXE_LONGI']) +POIVIR
1852      if ssep['POSI_CURV_LONGI']!=None:
1853        texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(ssep['POSI_CURV_LONGI'])+POIVIR
1854      else:
1855        DZC=ssep.BETA*pi*(RC+(RM+EP/2.)*cos(pi/2.))/180.
1856        texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(DZC)+POIVIR
1857      if ssep['TYPE']=='AXIS':
1858        texte=texte+'axisym .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
1859      else:
1860        texte=texte+'axisym .'+str(issep).rjust(23)+" = 'non'"+POIVIR
1861      if ssep['EMPREINTE'] == 'OUI':
1862        texte=texte+'sousep .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
1863      else:
1864        texte=texte+'sousep .'+str(issep).rjust(23)+" = 'non'"+POIVIR
1865   texte=texte+'*\n'  
1866
1867   texte=texte+'* Caracteristique de sur-epaisseur\n'
1868   texte=texte+'surep    = '+str(SUREP)            +POIVIR
1869   texte=texte+'* \n'
1870   texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
1871   fpgib=open('fort.71','w') 
1872   fpgib.write(texte)
1873   fpgib.close()
1874   
1875  
1876 ################################################################################
1877 ################################################################################
1878 ################################################################################
1879
1880 # ------------------------------------------------------------------------------
1881 def write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY):
1882
1883   POIVIR = ' ;\n'
1884   texte='*\n'
1885   texte=texte+'coude extube bord1 clgv  bord2 peauext peauint placoude platube\n'
1886   texte=texte+'plagv  longi  circo centr bou1  bou3  ligmed  ligtub liggv lig45\n'
1887   texte=texte+'ligcir liglon bordtu\n'
1888   texte=texte+'= PLAQSEP bg bd bi bs indbg indbd indbi indbs rm rc\n'
1889   texte=texte+'alphac pirad epc lt lgv coory coorz axecir axelon prof zsyme posit\n'
1890   texte=texte+'lcoude nxep sousep deny nbely denz nbelz axelonc coorzc axisym\n'
1891   texte=texte+'daxhtu daxhgv nzt nzgv zcoude surep'+POIVIR
1892   texte=texte+'fdromi   = ligmed .   1'+POIVIR
1893   texte=texte+'exdrmi   = ligmed .   2'+POIVIR
1894   texte=texte+'extrmi   = ligmed .   3'+POIVIR
1895   texte=texte+'exgami   = ligmed .   4'+POIVIR
1896   texte=texte+'fgaumi   = ligmed .   5'+POIVIR
1897   texte=texte+'ingami   = ligmed .   6'+POIVIR
1898   texte=texte+'intrmi   = ligmed .   7'+POIVIR
1899   texte=texte+'indrmi   = ligmed .   8'+POIVIR
1900   texte=texte+'fdrotu   = ligtub .   1'+POIVIR
1901   texte=texte+'exdrtu   = ligtub .   2'+POIVIR
1902   texte=texte+'extrtu   = ligtub .   3'+POIVIR
1903   texte=texte+'exgatu   = ligtub .   4'+POIVIR
1904   texte=texte+'fgautu   = ligtub .   5'+POIVIR
1905   texte=texte+'ingatu   = ligtub .   6'+POIVIR
1906   texte=texte+'intrtu   = ligtub .   7'+POIVIR
1907   texte=texte+'indrtu   = ligtub .   8'+POIVIR
1908   texte=texte+"si (ega zsyme 'entier')"+POIVIR
1909   texte=texte+'   fdrogv   = liggv  .  1'+POIVIR
1910   texte=texte+'   exdrgv   = liggv .   2'+POIVIR
1911   texte=texte+'   extrgv   = liggv .   3'+POIVIR
1912   texte=texte+'   exgagv   = liggv .   4'+POIVIR
1913   texte=texte+'   fgaugv   = liggv .   5'+POIVIR
1914   texte=texte+'   ingagv   = liggv .   6'+POIVIR
1915   texte=texte+'   intrgv   = liggv .   7'+POIVIR
1916   texte=texte+'   indrgv   = liggv .   8'+POIVIR
1917   texte=texte+'finsi'+POIVIR
1918   texte=texte+'*\n'
1919   
1920   text2=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
1921   texte=texte+text2
1922   
1923   texte=texte+'*\n'
1924   texte=texte+'*oeil = 10000. 0. 0.' +POIVIR
1925   texte=texte+'*trac oeil cach coude'+POIVIR
1926   texte=texte+'*opti donn 5'         +POIVIR
1927   texte=texte+'p1 = 0. 0. (-1.*lt)'+POIVIR
1928   texte=texte+'p2 = 0. 0. (coor 3 bou3)'+POIVIR
1929   texte=texte+'ma = coude et p1 et p2'+POIVIR
1930   texte=texte+'sort ma'+POIVIR
1931   texte=texte+'neu = nbno ma'+POIVIR
1932   texte=texte+"mess 'nombre de noeuds : 'neu"+POIVIR
1933   texte=texte+"opti sauv form 'fort.8'"+POIVIR
1934   texte=texte+'sauv form ma'+POIVIR
1935   texte=texte+'fin'+POIVIR
1936   fpgib=open('fort.71','a') 
1937   fpgib.write(texte)
1938   fpgib.close()  
1939
1940 ################################################################################
1941 ################################################################################
1942 ################################################################################
1943
1944 # ------------------------------------------------------------------------------
1945 def write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP,SUREP,
1946                            LTCLIM,LTCHAR,NBEP,loc_datg):
1947
1948   NY=20
1949   CZ=ALPHA*RC*pi/180.
1950   NZC=int((ALPHA+0.00001)/5.)
1951   DELTAY=2.*pi*RM/20
1952   DELTAZ=CZ/NZC
1953   DENEXT=int(LTCHAR/DELTAY)*DELTAY/4.
1954   NZT=0
1955   NZGV=0
1956   
1957   if TYPBOL!=None:
1958      if TYPBOL=='CUVE'     : TYPEMB = 'typcuv' 
1959      if TYPBOL=='GV'       : TYPEMB = 'typegv' 
1960      if TYPBOL=='ASP_MPP'  : TYPEMB = 'typapp' 
1961   else: 
1962      TYPEMB ='      '
1963    
1964   POIVIR = ' ;\n'
1965   texte='* DEBUT PARAMETRES UTILISATEUR\n'
1966   texte=texte+'*\n'
1967   texte=texte+'* Parametres generaux\n'
1968   texte=texte+'*\n'
1969   texte=texte+'nivmag   = '+str(NIVMAG)       +POIVIR
1970   texte=texte+'option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
1971   texte=texte+'rm       = '+str(RM)           +POIVIR
1972   texte=texte+'rc       = '+str(RC)           +POIVIR
1973   texte=texte+'alphac   = '+str(ALPHA)        +POIVIR
1974   texte=texte+'epc      = '+str(EP)           +POIVIR
1975   texte=texte+'surep    = '+str(SUREP)        +POIVIR       
1976   texte=texte+'lgv      = '+str(LTCLIM)       +POIVIR
1977   texte=texte+'lt       = '+str(LTCHAR)       +POIVIR
1978   texte=texte+"typembou = '"+TYPEMB+"'"       +POIVIR
1979   texte=texte+'nx       = '+str(NBEP)         +POIVIR
1980   texte=texte+'ny       = '+str(NY)           +POIVIR
1981   texte=texte+"pos      = 'bidon'"            +POIVIR
1982   texte=texte+'l1       = 0.'                 +POIVIR
1983   texte=texte+'lbloc    = 0.'                 +POIVIR
1984   texte=texte+'crit     = 0.0001'             +POIVIR
1985   texte=texte+'crit2    = 0.01'               +POIVIR
1986   texte=texte+'epsit    = 1.e-3'              +POIVIR
1987   texte=texte+'pirad    = '+str(pi)           +POIVIR
1988   texte=texte+'nzc      = '+str(NZC)          +POIVIR
1989   texte=texte+'teta_f   = '+str(pi/2.)        +POIVIR
1990   texte=texte+'zpp31    = '+str(CZ)           +POIVIR
1991   texte=texte+'daxbtu   = '+str(DENEXT)       +POIVIR
1992   texte=texte+'daxhtu   = '+str(DELTAZ)       +POIVIR
1993   texte=texte+'daxbgv   = '+str(DELTAZ)       +POIVIR
1994   texte=texte+'daxhgv   = '+str(DENEXT)       +POIVIR
1995   texte=texte+'nzt      = '+str(NZT)          +POIVIR
1996   texte=texte+'nzgv     = '+str(NZGV)         +POIVIR
1997   texte=texte+'*\n'
1998   texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
1999   texte = texte + open(os.path.join(loc_datg, 'ascouf_regl_v1.datg'), 'r').read()
2000   fdgib=open(nomFichierDATG,'w')
2001   fdgib.write(texte)
2002   fdgib.close()
2003   
2004 ################################################################################
2005 ################################################################################
2006 ################################################################################
2007 # ------------------------------------------------------------------------------
2008 def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
2009                               SOUS_EPAIS_COUDE,SOUS_EPAIS_MULTI,
2010                               FISS_COUDE,IMPRESSION,INFO,**args):
2011   """
2012      Ecriture de la macro MACR_ASCOUF_MAIL
2013   """
2014   from Accas import _F
2015   import types
2016   import aster 
2017
2018   ier=0
2019   
2020 # On importe les definitions des commandes a utiliser dans la macro
2021   EXEC_LOGICIEL =self.get_cmd('EXEC_LOGICIEL')
2022   PRE_GIBI      =self.get_cmd('PRE_GIBI')
2023   LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
2024   DEFI_GROUP    =self.get_cmd('DEFI_GROUP')
2025   MODI_MAILLAGE =self.get_cmd('MODI_MAILLAGE')
2026   CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
2027   DEFI_FICHIER  =self.get_cmd('DEFI_FICHIER')
2028   IMPR_RESU     =self.get_cmd('IMPR_RESU')
2029
2030 # La macro compte pour 1 dans la numerotation des commandes
2031   self.set_icmd(1)
2032
2033   
2034   TYPELE = TYPE_ELEM
2035   NIVMAG = EXEC_MAILLAGE['NIVE_GIBI']
2036   PRECIS = 0.01
2037   CRITER = 'RELATIF'
2038   CAR3   = ('IFDRO','IEXDR','IEXTR','IEXGA','IFGAU','IINGA','IINTR','IINDR')
2039   CAR4   = ('NOFDRO','NOEXDR','NOEXTR','NOEXGA','NOFGAU','NOINGA','NOINTR','NOINDR')
2040   CAR5   = ('NEFDRO','NEEXDR','NEEXTR','NEEXGA','NEFGAU','NEINGA','NEINTR','NEINDR')
2041   CAR6   = ('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR')
2042   SECT   = ('MI','TU','GV')  
2043   
2044 #
2045 ################################################################################
2046 #     --- caracteristiques du coude ---
2047 ################################################################################
2048 #
2049   GEOM    =COUDE['TRANSFORMEE']
2050   ALPHA   =COUDE['ANGLE']
2051   RC      =COUDE['R_CINTR']
2052   LTCHAR  =COUDE['L_TUBE_P1']
2053   LTCLIM  =COUDE['L_TUBE_P2']
2054   NBEP    =COUDE['NB_ELEM_EPAIS']
2055   SYME    =COUDE['SYME']
2056   SUREP   =0.0
2057   TYPBOL  = None
2058 #
2059   if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
2060      SUREP=COUDE['SUR_EPAIS']
2061      TYPBOL  =COUDE['BOL_P2']
2062      DEXT   = COUDE['DEXT']
2063      EP1    = COUDE['EPAIS']
2064      EP2    = EP1
2065      EPI    = 0.0
2066      TETA1  = 0.0
2067      TETA2  = 0.0
2068      LTRAN  = 0.0
2069      NBTRAN = 0
2070   else:
2071      NBTRAN = 1
2072      if COUDE['SYME']!='ENTIER':
2073         UTMESS('F','ASCOUF0_13')
2074 #
2075      DEXT  = COUDE['DEXT_T1']
2076      EP1   = COUDE['EPAIS_T1']
2077      EP2   = COUDE['EPAIS_T2']
2078      TETA1 = COUDE['ANGL_TETA1']
2079      TETA2 = 0.0
2080      EPI   = 0.0
2081      if COUDE['ANGL_TETA2']!=None :
2082        NBTRAN = 2
2083        TETA2 = COUDE['ANGL_TETA2']
2084        EPI   = COUDE['EPAIS_TI']
2085 #
2086      if COUDE['ABSC_CURV_TRAN']!=None :
2087        LTRAN   = COUDE['ABSC_CURV_TRAN']
2088      else :
2089        LTRAN   = COUDE['POSI_ANGU_TRAN']* RC * pi / 180.0
2090 #
2091   RM  = (DEXT-EP1)/2.0
2092   RM2 = RM + (EP2-EP1)/2.0
2093   R1  = RC
2094   R2  = RM
2095   E   = EP1
2096 #
2097   if COUDE['SYME']!='ENTIER' and (LTCHAR!=LTCLIM) :
2098      UTMESS('F','ASCOUF0_14')
2099 #
2100   LAMOR = 3.0/2.0 * sqrt( RM*RM*RM / EP1)
2101   if LTCHAR<LAMOR :
2102      UTMESS('A','ASCOUF0_15',valr=LAMOR)
2103 #
2104   LAMOR = 3.0/2.0 * sqrt( RM2*RM2*RM2 / EP2)
2105   if LTCLIM<LAMOR :
2106      UTMESS('A','ASCOUF0_16',valr=LAMOR)
2107 #
2108   if TYPBOL!=None:
2109    if TYPBOL[:1]=='GV' :
2110      UTMESS('A','ASCOUF0_17')
2111 #
2112 ################################################################################
2113 #     --- caracteristiques de la fissure ---
2114 ################################################################################
2115 #
2116   if FISS_COUDE!=None:
2117      if NBEP!=3:
2118         UTMESS('A','ASCOUF0_18')
2119      FPROF = FISS_COUDE['PROFONDEUR']
2120      FAXI  = FISS_COUDE['AXIS']
2121      if FAXI=='NON' and FISS_COUDE['LONGUEUR']==None :
2122         UTMESS('F','ASCOUF0_19')
2123      if FAXI=='OUI' and FISS_COUDE['LONGUEUR']!=None :
2124         UTMESS('A','ASCOUF0_20')
2125      if FISS_COUDE['LONGUEUR']!=None : FLONG = FISS_COUDE['LONGUEUR']
2126      if FAXI=='OUI' :
2127 ####    on prend une marge de securite a cause des modifs dans ascfis
2128         FLONG = 2.0 * pi * (RM + EP1)
2129      if FISS_COUDE['ABSC_CURV']!=None :
2130          SF     = FISS_COUDE['ABSC_CURV']
2131          LDEFAU = SF
2132          BETA   = 0.0
2133      else:
2134          SF     = 0.0
2135          BETA   = FISS_COUDE['POSI_ANGUL']
2136          LDEFAU = BETA * RC * pi / 180.0
2137      AZIM   = FISS_COUDE['AZIMUT']
2138      ORIEN  = FISS_COUDE['ORIEN']
2139      POSIT  = FISS_COUDE['FISSURE']
2140      NT     = FISS_COUDE['NB_TRANCHE']
2141      NS     = FISS_COUDE['NB_SECTEUR']
2142      NC     = FISS_COUDE['NB_COURONNE']
2143      if FISS_COUDE['RAYON_TORE']!=None    : RC0 = FISS_COUDE['RAYON_TORE']
2144      else :                                 RC0 = 0.
2145      if FISS_COUDE['COEF_MULT_RC2']!=None : RC2 = FISS_COUDE['COEF_MULT_RC2']
2146      else :                                 RC2 = 0.
2147      if FISS_COUDE['COEF_MULT_RC3']!=None : RC3 = FISS_COUDE['COEF_MULT_RC3']
2148      else :                                 RC3 = 0.
2149      EPSI   = FISS_COUDE['ANGL_OUVERTURE']
2150      OR     = ORIEN
2151      AZ     = AZIM
2152      POS    = POSIT
2153      DGAXEC = FLONG/2.0
2154      DC     = DGAXEC
2155      if ORIEN!=90.0 and NBTRAN!=0 :
2156         UTMESS('F','ASCOUF0_21')
2157      if ORIEN!=90.0 and NBTRAN!=0 :
2158         UTMESS('F','ASCOUF0_21')
2159      if ORIEN!=90.0 and COUDE['SYME']!='ENTIER' :
2160         UTMESS('F','ASCOUF0_23')
2161      if ORIEN!=90.0 and FAXI=='OUI' :
2162         UTMESS('F','ASCOUF0_24')
2163 #
2164 ################################################################################
2165 #     --- caracteristiques des sous epaisseurs ---
2166 ################################################################################
2167 #
2168   isep = 0
2169   MCL_SOUS_EPAIS = None
2170   if SOUS_EPAIS_MULTI!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_MULTI
2171   if SOUS_EPAIS_COUDE!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_COUDE
2172   if SOUS_EPAIS_MULTI!=None and NBTRAN!=0 :
2173      UTMESS('F','ASCOUF0_25')
2174   if SOUS_EPAIS_COUDE!=None and FISS_COUDE!=None and NBTRAN!=0 :
2175      UTMESS('F','ASCOUF0_26')
2176   if MCL_SOUS_EPAIS!=None :
2177      AZIM = 90.0
2178      if MCL_SOUS_EPAIS.__class__.__name__  !='MCList' : MCL_SOUS_EPAIS=[MCL_SOUS_EPAIS,]
2179      if len(MCL_SOUS_EPAIS)!=1 and COUDE['SYME']!='ENTIER' :
2180         UTMESS('F','ASCOUF0_27')
2181      for ssep in MCL_SOUS_EPAIS :
2182         isep=isep+1
2183         if ssep['AXE_CIRC']!=None and ssep['TYPE']=='AXIS' :
2184            UTMESS('F','ASCOUF0_28')
2185         if ssep['AXE_CIRC']==None and ssep['TYPE']=='ELLI' :
2186            UTMESS('F','ASCOUF0_29')
2187         if ssep['POSI_CURV_LONGI']!=None:
2188            if ssep['POSI_CURV_LONGI']>(ALPHA*RC*pi/180.0) :
2189               UTMESS('F','ASCOUF0_30',vali=[isep],valr=[ssep['POSI_CURV_LONGI'],ALPHA*RC*pi/180.0])
2190            LDEFAU = ssep['POSI_CURV_LONGI'] + ssep['AXE_LONGI']/2.0
2191            BETA = 0.0
2192         else:
2193            BETA=ssep['POSI_ANGUL']
2194            if (BETA<0.) or (BETA>ALPHA) :
2195               UTMESS('F','ASCOUF0_31',vali=[isep],valr=[BETA,ALPHA])
2196            LDEFAU = (BETA*RC*pi/180.0) + ssep['AXE_LONGI']/2.0
2197 #
2198         if ssep['POSI_CURV_CIRC']!=None:
2199            if ssep['POSI_CURV_CIRC']>(2*pi*RM) :
2200               UTMESS('F','ASCOUF0_32',vali=[isep],valr=[ssep['POSI_CURV_CIRC'],2*pi*RM])
2201            if ssep['POSI_CURV_CIRC']!=(pi*RM) and ssep['TYPE']=='AXIS':
2202               UTMESS('F','ASCOUF0_33')
2203         else:
2204            ssep.IPHIC=ssep['AZIMUT']
2205            if ssep['AZIMUT']!=180. and ssep['TYPE']=='AXIS':
2206               UTMESS('F','ASCOUF0_34')
2207 #        l_ITYPE.append(ssep['TYPE'           ])
2208 #        l_ICIRC.append(ssep['AXE_CIRC'       ])
2209 #        l_ILONC.append(ssep['AXE_LONGI'      ])
2210 #        l_IPROC.append(ssep['PROFONDEUR'     ])
2211 #        l_ISLC.append( ssep['POSI_CURV_LONGI'])
2212 #        l_IBETC.append(BETA)
2213         ssep.BETA=BETA
2214 #        l_ISCC.append( ssep['POSI_CURV_CIRC' ])
2215 #        l_IPHIC.append(ssep['AZIMUT'         ])
2216 #        l_IPOS.append( ssep['SOUS_EPAIS'     ])
2217 #        l_INBEL.append(ssep['NB_ELEM_LONGI'  ])
2218 #        l_INBEC.append(ssep['NB_ELEM_CIRC'   ])
2219 #        l_IEVID.append(ssep['EMPREINTE'      ])
2220
2221      if SOUS_EPAIS_COUDE!=None and COUDE['NB_ELEM_EPAIS']!=3 :
2222         UTMESS('A','ASCOUF0_35')
2223 #
2224 ################################################################################
2225 #     --- verifications de coherences ---
2226 ################################################################################
2227 #
2228 # donnees globales
2229   if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
2230     if SUREP<0. or SUREP>(RM-EP1/2.0):
2231
2232        UTMESS('F','ASCOUF0_36',vali=SUREP,valr=RM-EP1/2.0)
2233   if RC<=(RM+EP1/2.0):
2234      UTMESS('F','ASCOUF0_37',valr=[RC,RM+EP1/2.0])
2235 #
2236 # coude fissure
2237 #
2238   if FISS_COUDE!=None:
2239     if (RM/EP1)<5. or (RM/EP1)>50.:
2240        UTMESS('F','ASCOUF0_38',valr=RM/EP1)
2241     if FISS_COUDE['ABSC_CURV']!=None:
2242      if SF<0. or SF>(ALPHA*RC*pi/180.0) :
2243        UTMESS('F','ASCOUF0_39',valr=[SF,ALPHA*RC*pi/180.0])
2244     if (NT-2*(NT/2))!=0:
2245        UTMESS('F','ASCOUF0_40',vali=NT)
2246     if FISS_COUDE['ABSC_CURV'] and ((BETA<0.) or (BETA>ALPHA)):
2247        UTMESS('F','ASCOUF0_41',valr=[BETA,ALPHA])
2248 #
2249 # transition d epaisseur
2250 #
2251   if NBTRAN!=0:
2252     LCOUDE = ALPHA * RC * pi / 180.0
2253     DEXT = 2.0*RM + EP1
2254     if (LTRAN<LDEFAU) and (LTRAN>LCOUDE) :
2255        UTMESS('F','ASCOUF0_42',valr=[LTRAN,LDEFAU,LCOUDE])
2256     if (TETA1<0.) or (TETA1>30.) :
2257        UTMESS('F','ASCOUF0_43',valr=[TETA1])  
2258 #
2259 # transition d epaisseur a une pente
2260 #
2261     if NBTRAN==1:
2262        if (EP1<12.) or (EP1>80.) :
2263           UTMESS('F','ASCOUF0_44',valr=[EP1])
2264        if (EP2<20.) or (EP2>110.) :
2265           UTMESS('F','ASCOUF0_45',valr=[EP2])
2266        if (EP1>EP2) :
2267           UTMESS('F','ASCOUF0_46')
2268        LTRANF = LTRAN + ((EP2-EP1)/(tan(TETA1)))
2269        if (LTRANF>LCOUDE) :
2270           UTMESS('F','ASCOUF0_47',valr=[LTRANF,LCOUDE])
2271        if DEXT<112. or DEXT>880. :
2272           UTMESS('F','ASCOUF0_48',valr=[DEXT])
2273 #
2274 # transition d epaisseur a une pente
2275 #
2276     else:
2277        if (TETA2<0.) or (TETA2>45.) :
2278           UTMESS('F','ASCOUF0_49',valr=[TETA2])
2279        if (EP1<7.) or (EP1>35.) :
2280           UTMESS('F','ASCOUF0_50',valr=[EP1])
2281        if (EP2<15.) or (EP2>40.) :
2282           UTMESS('F','ASCOUF0_51',valr=[EP2])
2283        if (EPI<15.) or (EPI>40.) :
2284           UTMESS('F','ASCOUF0_52',valr=[EPI])
2285        if (EP1>EPI) :
2286           UTMESS('F','ASCOUF0_53')
2287        if (EP2<EPI) :
2288           UTMESS('F','ASCOUF0_54')
2289        LTRANF = LTRAN  + (EPI-EP1)/(tan(TETA1))
2290        LTRANF = LTRANF + (EP2-EPI)/(tan(TETA2))
2291        if (LTRANF>LCOUDE) :
2292           UTMESS('F','ASCOUF0_55',valr=[LTRANF,LCOUDE])
2293        if (DEXT<77.) or (DEXT>355.) :
2294           UTMESS('F','ASCOUF0_56',valr=[LTRANF])
2295 #
2296 ################################################################################
2297 #     --- calcul taille initiale des defauts sur la plaque ---
2298 ################################################################################
2299 #
2300 #
2301   if FISS_COUDE!=None:
2302      DSF=(FISS_COUDE['ABSC_CURV']!=None)
2303      AXEAP,AXECP,SFP = ASCFIS(ALPHA, RM, RC, EP1, SUREP, GEOM, FPROF,
2304                               DGAXEC, AZIM, POSIT, SF, DSF, BETA, ORIEN)
2305   elif MCL_SOUS_EPAIS!=None :
2306      ier,AZIMC= ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP1,GEOM,SYME)
2307      for ssep in MCL_SOUS_EPAIS:
2308          ssep.IDENL = ssep.ILONP/ssep['NB_ELEM_LONGI']*180./(pi*RC)
2309          ssep.IDENC = ssep.ICIRP/ssep['NB_ELEM_CIRC']*180./(pi*RM)
2310      if SYME=='QUART' :
2311 #       quart de structure     
2312         ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY\
2313         = ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM)
2314      else :
2315 #       demi-structure ou entiere
2316         ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY\
2317         = ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM)
2318 #
2319 #
2320   loc_gibi=aster.repout()
2321   logiel = EXEC_MAILLAGE['LOGICIEL'  ]
2322   UNITD  = EXEC_MAILLAGE['UNITE_DATG']
2323   UNITP  = EXEC_MAILLAGE['UNITE_MGIB']
2324   if   logiel=='GIBI98'  : logiel = loc_gibi+'gibi98'
2325   elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000'
2326   
2327   else                   :
2328        UTMESS('F','ASCOUF0_57')
2329 #
2330 #     --- ecriture sur le fichier .datg  de la procedure ---
2331 #
2332 # Nom du fichier de commandes pour GIBI
2333   nomFichierDATG = 'fort.'+str(UNITD)
2334 # Nom du fichier de maillage GIBI
2335   nomFichierGIBI = 'fort.'+str(UNITP)
2336   loc_datg = aster.repdex()
2337 #
2338   if FISS_COUDE!=None:
2339 #   procedure coude fissure (MOT-CLE FISS_COUDE)
2340     write_file_dgib_ASCFDO(nomFichierDATG,RM,RC,ALPHA,NBTRAN,EP1,EP2,EPI,TETA1,
2341                            TETA2,LTRAN,SUREP,LTCHAR,LTCLIM,TYPBOL,AXEAP,AXECP,NT,NS,NC,SFP,
2342                            ORIEN,AZIM,RC0,RC2,RC3,POSIT,EPSI,NIVMAG,SYME,loc_datg)
2343   elif MCL_SOUS_EPAIS!=None :
2344      if SOUS_EPAIS_MULTI==None :
2345 #      procedure coude sous-ep.: (MOT-CLE SOUS_EPAIS_COUDE)  
2346        write_file_dgib_ASCSQO(nomFichierDATG,TYPELE,RM,RC,ALPHA,NBTRAN,EP1,EP2,
2347                               EPI,TETA1,MCL_SOUS_EPAIS,TETA2,LTRAN,LTCHAR,LTCLIM,GEOM,
2348                               SYME,NBEP,NLX,NLY,NIVMAG,SUREP,AZIMC,loc_datg)
2349        write_file_pgib_ASCSQ2(MCL_SOUS_EPAIS,NLX,NLY)
2350      else:
2351 #      procedure coude sous-ep.:(MOT-CLE SOUS_EPAIS_MULTI)
2352        write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg)
2353        write_file_pgib_ASCSDO(RM,RC,ALPHA,EP1,LTCLIM,LTCHAR,NBEP,SUREP,
2354                               NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,
2355                               DNX,DNY,MCL_SOUS_EPAIS,GEOM,SYME)
2356        write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY)
2357   else:
2358 #   procedure coude regle
2359     write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP1,SUREP,
2360                            LTCLIM,LTCHAR,NBEP,loc_datg)
2361
2362   
2363 # GIBI  
2364   DEFI_FICHIER(ACTION='LIBERER',UNITE=19)
2365   DEFI_FICHIER(ACTION='LIBERER',UNITE=20)
2366   EXEC_LOGICIEL( LOGICIEL = logiel ,
2367                  ARGUMENT = (nomFichierDATG,
2368                              nomFichierGIBI), )
2369 # PRE_GIBI
2370   PRE_GIBI()
2371
2372 # LIRE_MAILLAGE
2373   __nomres=LIRE_MAILLAGE(INFO=INFO)
2374
2375 # DEFI_GROUP  1
2376
2377   motscles={}
2378   l_CREA_GROUP_NO=[]
2379   l_CREA_GROUP_NO.append('BORD1')
2380   l_CREA_GROUP_NO.append('CLGV')
2381   l_CREA_GROUP_NO.append('BORD2')
2382   l_CREA_GROUP_NO.append('PEAUINT')
2383   l_CREA_GROUP_NO.append('PEAUEXT') 
2384
2385 # cas des fissures axisymetriques
2386   if FISS_COUDE!=None:
2387     if FISS_COUDE['AXIS']=='OUI':
2388       motscles['CREA_GROUP_MA']=[]
2389       motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
2390                                           NOM      = 'MAIL_ORI',
2391                                           POSITION = 'INIT'    , ),) 
2392
2393 # conversion des groupes de mailles en groupes du bloc fissure  
2394   if FISS_COUDE!=None:
2395     if SYME == 'ENTIER':
2396       l_CREA_GROUP_NO.append('NOLIG1')
2397       l_CREA_GROUP_NO.append('FACE1')
2398     l_CREA_GROUP_NO.append('NOLIG2')
2399     l_CREA_GROUP_NO.append('FACE2')
2400     l_CREA_GROUP_NO.append('FONDFISS')
2401
2402   motscles['CREA_GROUP_NO']=[]
2403   motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=tuple(l_CREA_GROUP_NO)))
2404
2405 # conversion des groupes de mailles en groupes de noeuds pour les
2406 # ligaments des sous-ep.
2407   if MCL_SOUS_EPAIS!=None:
2408     issep=0
2409     for ssep in MCL_SOUS_EPAIS:
2410       issep=issep+1
2411       if ssep['TYPE']=='ELLI':
2412         for k in range(2*NLX[issep-1]+1):
2413           chtmp=str(issep)+'_'+str(k+1)
2414           ch1='CIR'+chtmp
2415           ch2='ICI'+chtmp
2416           motscles['CREA_GROUP_NO'].append(_F(NOM      = ch2,
2417                                               GROUP_MA = ch1,),)
2418         motscles['CREA_GROUP_NO'].append(_F(NOM      = 'IPCEN'+str(issep),
2419                                             GROUP_MA = 'PCENT'+str(issep),),)
2420         for k in range(2*NLY[issep-1]+1):
2421           chtmp=str(issep)+'_'+str(k+1)
2422           ch1='LON'+chtmp
2423           ch2='ILO'+chtmp
2424           motscles['CREA_GROUP_NO'].append(_F(NOM      = ch2,
2425                                               GROUP_MA = ch1,),)
2426         for k in range(2*NLX[issep-1]+1):
2427           chtmp=str(issep)+'_'+str(k+1)
2428           ch1='ICI'+chtmp
2429           ch2='OCI'+chtmp
2430           ch3='ECI'+chtmp
2431           motscles['CREA_GROUP_NO'].append(_F(NOM      = ch2,
2432                                               INTERSEC = ('PEAUEXT',ch1),),)
2433           motscles['CREA_GROUP_NO'].append(_F(NOM      = ch3,
2434                                               INTERSEC = ('PEAUINT',ch1),),)
2435         motscles['CREA_GROUP_NO'].append(_F(NOM      = 'OPCEN'+str(issep),
2436                                             INTERSEC = ('PEAUEXT','IPCEN'+str(issep),),),)
2437         motscles['CREA_GROUP_NO'].append(_F(NOM      = 'EPCEN'+str(issep),
2438                                             INTERSEC = ('PEAUINT','IPCEN'+str(issep),),),)
2439         for k in range(2*NLY[issep-1]+1):
2440           chtmp=str(issep)+'_'+str(k+1)
2441           ch1='ILO'+chtmp
2442           ch2='OLO'+chtmp
2443           ch3='ELO'+chtmp
2444           motscles['CREA_GROUP_NO'].append(_F(NOM      = ch2,
2445                                               INTERSEC =  ('PEAUEXT',ch1),),)
2446           motscles['CREA_GROUP_NO'].append(_F(NOM      = ch3,
2447                                               INTERSEC =  ('PEAUINT',ch1),),)
2448         for k in range(2*NLX[issep-1]+1):
2449           chtmp=str(issep)+'_'+str(k+1)
2450           ch1='CIR'+chtmp
2451           ch2='ICI'+chtmp
2452           ch3='OCI'+chtmp
2453           ch4='ECI'+chtmp  
2454           motscles['CREA_GROUP_NO'].append(_F(OPTION        = 'SEGM_DROI_ORDO',
2455                                               NOM           = ch1,
2456                                               GROUP_NO      = ch2,
2457                                               GROUP_NO_ORIG = ch3,
2458                                               GROUP_NO_EXTR = ch4,
2459                                               PRECISION     = PRECIS,
2460                                               CRITERE       = CRITER,),)
2461         motscles['CREA_GROUP_NO'].append(_F(OPTION        = 'SEGM_DROI_ORDO',
2462                                             NOM           = 'PCENT'+str(issep),
2463                                             GROUP_NO      = 'IPCEN'+str(issep),
2464                                             GROUP_NO_ORIG = 'OPCEN'+str(issep),
2465                                             GROUP_NO_EXTR = 'EPCEN'+str(issep),
2466                                             PRECISION     =  PRECIS,
2467                                             CRITERE       =  CRITER,),)
2468         for k in range(2*NLY[issep-1]+1):
2469            chtmp=str(issep)+'_'+str(k+1)
2470            ch1='LON'+chtmp
2471            ch2='ILO'+chtmp
2472            ch3='OLO'+chtmp
2473            ch4='ELO'+chtmp  
2474            motscles['CREA_GROUP_NO'].append(_F(OPTION        = 'SEGM_DROI_ORDO',
2475                                                NOM           = ch1,
2476                                                GROUP_NO      = ch2,
2477                                                GROUP_NO_ORIG = ch3,
2478                                                GROUP_NO_EXTR = ch4,
2479                                                PRECISION     = PRECIS,
2480                                                CRITERE       = CRITER,),)
2481 #     1/ noms intermediaires des groupes de noeuds representant les ligaments
2482 #        des sections: TU,MI,GV et sous-ep.     
2483       for k in range(8):
2484         motscles['CREA_GROUP_NO'].append(_F( NOM      = CAR3[k]+str(issep),
2485                                              GROUP_MA = CAR6[k]+str(issep),),)
2486
2487     for k in range(3):
2488       if SYME == 'ENTIER' or k!=2:
2489         for j in range(8):
2490           motscles['CREA_GROUP_NO'].append(_F( NOM      = CAR3[j]+SECT[k],
2491                                                GROUP_MA = CAR6[j]+SECT[k],),)
2492
2493 #   2/ determination et nommage des noeuds origine et extremite des groupes de noeuds
2494 #      representant les ligaments de la ou des sections: sous-ep.
2495     issep=0
2496     for ssep in MCL_SOUS_EPAIS:
2497       issep=issep+1
2498       for k in range(8):
2499         motscles['CREA_GROUP_NO'].append(_F( NOM      = CAR4[k]+str(issep),
2500                                              INTERSEC = ('PEAUEXT',CAR3[k]+str(issep),),),)
2501         motscles['CREA_GROUP_NO'].append(_F( NOM      = CAR5[k]+str(issep),
2502                                              INTERSEC = ('PEAUINT',CAR3[k]+str(issep),),),)        
2503 #     3/ nommage final des groupes de noeuds representant les ligaments 
2504 #        de la ou des sections: sous-ep.
2505       for k in range(8):
2506         motscles['CREA_GROUP_NO'].append(_F(OPTION        = 'SEGM_DROI_ORDO',
2507                                             NOM           = CAR6[k]+str(issep),
2508                                             GROUP_NO      = CAR3[k]+str(issep),
2509                                             GROUP_NO_ORIG = CAR4[k]+str(issep),
2510                                             GROUP_NO_EXTR = CAR5[k]+str(issep),
2511                                             PRECISION     = PRECIS,
2512                                             CRITERE       = CRITER,),)
2513
2514 #   4/ determination et nommage des noeuds origine et extremite des groupes de noeuds
2515 #      representant les ligaments des sections: TU,MI,GV
2516     for k in range(3):
2517       if SYME == 'ENTIER' or k!=2:
2518         for j in range(8):
2519            motscles['CREA_GROUP_NO'].append(_F( NOM      = CAR4[j]+SECT[k],
2520                                                 INTERSEC = ('PEAUEXT',CAR3[j]+SECT[k],),),) 
2521            motscles['CREA_GROUP_NO'].append(_F( NOM      = CAR5[j]+SECT[k],
2522                                                 INTERSEC = ('PEAUINT',CAR3[j]+SECT[k],),),) 
2523 #       5/ nommage final des groupes de noeuds representant les ligaments des sections: TU,MI,GV   
2524         for j in range(8):    
2525            motscles['CREA_GROUP_NO'].append(_F(OPTION        = 'SEGM_DROI_ORDO',
2526                                                NOM           = CAR6[j]+SECT[k],
2527                                                GROUP_NO      = CAR3[j]+SECT[k],
2528                                                GROUP_NO_ORIG = CAR4[j]+SECT[k],
2529                                                GROUP_NO_EXTR = CAR5[j]+SECT[k],
2530                                                PRECISION     = PRECIS,
2531                                                CRITERE       = CRITER,),)
2532     
2533
2534   __nomres=DEFI_GROUP(reuse   =__nomres,
2535                       MAILLAGE=__nomres,
2536                       **motscles )
2537 #
2538 # DEFI_GROUP  2
2539   if FISS_COUDE!=None:
2540 # creation des groupes petit axe et grand axe fissure par
2541 # intersection de groupes existants
2542     motscles={}
2543     motscles['CREA_GROUP_NO']=[]
2544     l_peau=[]
2545     l_intersec=[]
2546     if POSIT == 'DEB_INT':
2547         l_peau.append('PEAUINT')
2548     else:
2549         l_peau.append('PEAUEXT')
2550     
2551     if SYME == 'ENTIER' :
2552       l_intersec.append('FACE1')
2553       motscles['CREA_GROUP_NO'].append(_F(NOM      = 'P_AXE_1',
2554                                           INTERSEC = ('NOLIG1','FACE1'),),)
2555       motscles['CREA_GROUP_NO'].append(_F(NOM      = 'G_AXE_1',
2556                                           INTERSEC =  tuple(l_peau+l_intersec),),)  
2557     l_intersec=[]
2558     l_intersec.append('FACE2')  
2559     motscles['CREA_GROUP_NO'].append(_F(NOM      = 'P_AXE_2',
2560                                         INTERSEC = ('NOLIG2','FACE2'),),)
2561     motscles['CREA_GROUP_NO'].append(_F(NOM      = 'G_AXE_2',
2562                                         INTERSEC =  tuple(l_peau+l_intersec),),)
2563    
2564     __nomres=DEFI_GROUP(reuse   =__nomres,
2565                         MAILLAGE=__nomres,
2566                         **motscles )    
2567  
2568 # MODI_MAILLAGE  1
2569   motscles={}
2570   if GEOM == 'COUDE':
2571     motscles['TUBE_COUDE']=[]
2572     motscles['TUBE_COUDE'].append(_F(ANGLE=ALPHA,
2573                                     R_CINTR=RC,
2574                                     L_TUBE_P1=LTCHAR),)
2575   motscles['PLAQ_TUBE']=[]
2576   D_PLAQ_TUBE={}
2577   D_PLAQ_TUBE['DEXT']=DEXT
2578   D_PLAQ_TUBE['EPAIS']=EP1
2579   D_PLAQ_TUBE['L_TUBE_P1']=LTCHAR
2580   if SYME == 'QUART' : D_PLAQ_TUBE['COUTURE']='NON'
2581   if FISS_COUDE!=None:
2582       D_PLAQ_TUBE['AZIMUT']=AZIM
2583   elif SOUS_EPAIS_COUDE!=None :
2584       D_PLAQ_TUBE['AZIMUT']=MCL_SOUS_EPAIS[0].IPHIC
2585   else:pass
2586   motscles['PLAQ_TUBE'].append(_F(**D_PLAQ_TUBE),) 
2587   __nomres=MODI_MAILLAGE( reuse   =__nomres,
2588                           MAILLAGE=__nomres,
2589                           **motscles )
2590  
2591 # MODI_MAILLAGE  2
2592   motscles={}
2593   motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE'),)
2594   if FISS_COUDE!=None:
2595     if FISS_COUDE['FISSURE'] == 'DEB_INIT':
2596       motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE','FACE1','FACE2'),)  
2597   __nomres=MODI_MAILLAGE(reuse   =__nomres,
2598                        MAILLAGE=__nomres,
2599                        **motscles)
2600
2601 # CREA_MAILLAGE
2602   self.DeclareOut('nomre2',self.sd)
2603   motscles={}
2604   motscles['CREA_POI1']=[]
2605   motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P1',
2606                                   GROUP_NO='P1'),)
2607   if TYPBOL == None :
2608     motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P2',
2609                                   GROUP_NO='P2'),)    
2610   nomre2=CREA_MAILLAGE( MAILLAGE=__nomres,
2611                           **motscles)
2612
2613  
2614 # IMPRESSSION
2615   if IMPRESSION!=None:
2616      if IMPRESSION.__class__.__name__  !='MCList' : IMPRESSION  =[IMPRESSION,]
2617      for impr in IMPRESSION :
2618 #
2619          motscles={}
2620          if impr['FORMAT']=='IDEAS'  : motscles['VERSION']   =impr['VERSION']
2621          if impr['FORMAT']=='CASTEM' : motscles['NIVE_GIBI'] =impr['NIVE_GIBI']
2622          if impr['UNITE']!=None      : motscles['UNITE']     =impr['UNITE']
2623          impr_resu = _F( MAILLAGE = nomre2,)
2624 #
2625          IMPR_RESU( RESU = impr_resu,
2626                     FORMAT= impr['FORMAT'],**motscles)
2627
2628
2629
2630   return ier
2631
2632