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