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