1 #@ MODIF macr_ascouf_mail_ops Macro DATE 06/09/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.
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.
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 # ======================================================================
23 from math import sqrt,cos,sin,pi,tan,log,fabs,ceil,fmod,floor
25 # ------------------------------------------------------------------------------
26 def ASCFON(RC,RM,EP,ORIEN,AZIM,AXEC,POS,Y):
29 OU CC EST LA TAILLE DE LA FISSURE SUR LE COUDE
30 ET CP LA TAILLE DE FISSURE SUR LA PLAQUE
32 AZIMR = AZIM*2.*pi/360.
33 if POS=='DEB_INT': X = RM-EP/2.
35 if abs(ORIEN-45.0)<0.01: 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 ) \
43 - log ( RM/X+RM/RC*cos(AZIMR) \
44 + sqrt( 1. +(RM/X+RM/RC*cos(AZIMR))**2) \
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) \
57 # ------------------------------------------------------------------------------
58 def ASCFIS(ALPHA, RM, RC, EP, SUREP, GEOM, AXEA,
59 AXEC, AZIM, POS, SF, DSF, BETA, ORIEN):
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
66 ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
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
83 -----------------DONNEES RENVOYEES-----------------------
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
91 from Utilitai import funct_root
93 if (AZIM>=120.) and (AZIM<=240.0): X = RM-EP/2.0 - SUREP
96 AZIMR = AZIM*2.0*pi/360.0
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
103 if GEOM=='COUDE': SFP = SF/(1.0+X/RC*cos(AZIMR))
106 BETAR = BETA*2.0*pi/360.0
108 SF = BETAR*(RC+X*cos(AZIMR))
109 SFP = SF/(1.0+X/RC*cos(AZIMR))
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
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.
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
126 # -- FISSURE LONGITUDINALE (0 DEGRE)
135 elif (BINF>=0. and BSUP<=DIST):
137 elif abs(ORIEN-90.)<0.01:
138 # -- FISSURE CIRCONFERENTIELLE (90 DEGRES)
147 elif (BINF>=0. and BSUP<=DIST):
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
154 BCOUD = (DIST - BINF)*sqrt(2.0)
155 BEMB = (BSUP - DIST)*sqrt(2.0)
157 BCOUD = BSUP *sqrt(2.0)
158 BEMB = abs(BINF)*sqrt(2.0)
159 elif (BINF>=0. and BSUP<=DIST):
161 print 'PARTIE DU GRAND AXE DANS LE COUDE : %.2f'%BCOUD
162 print 'PARTIE DU GRAND AXE DANS L EMBOUT : %.2f'%BEMB
164 # -- CALCUL DE LA TAILLE DU GRAND AXE FISSURE SUR LA PLAQUE
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
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 )
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
188 AXECP = (BCOUD+BEMB)*sqrt( (1.+(X/RM)**2)*0.5 )
193 print 'TAILLE GRAND AXE COUDE DONNE : %.2f'%(2.*AXEC)
195 print 'TAILLE GRAND AXE TUBE DONNE : %.2f'%(2.*AXEC)
196 print 'TAILLE GRAND AXE PLAQUE DEDUIT : %.2f'%AXECP
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
209 # -- CORRECTION DU PETIT AXE DE LA FISSURE QUAND CELLE-CI SE TROUVE SUR
210 # LA ZONE DE SUREPAISSEUR
212 ALPHAR = ALPHA*2.*pi/360.
213 ZSUR1 = ALPHAR*RC/10.
214 ZSUR2 = ALPHAR*RC*9./10.
215 YFISS = (AZIMR-pi/2.)*RM
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)
231 AXEAP = AXEA * EP / ( EP + MU*SUREP )
232 print '--> CORRECTION DUE A LA SUREPAISSEUR'
233 print '--> TAILLE PETIT AXE PLAQUE : %.2f'%AXEAP
236 return AXEAP,AXECP,SFP
239 # ------------------------------------------------------------------------------
240 def ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP,GEOM,SYME):
242 MACR_ASCOUF_MAIL ASCSEP
243 taille initiale sur la plaque des sous-epaisseurs
245 ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
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'
258 # --- BOUCLE SUR L ENSEMBLE DES SOUS-EPAISSEURS
261 for ssep in MCL_SOUS_EPAIS :
263 print '-------------------------------------'
264 print 'SOUS-EPAISSEUR NUMERO %d'%i
265 print '-------------------------------------'
267 # --- CAS DES SOUS-EPAISSEURS AXISYMETRIQUES
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
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
283 if ssep['POSI_CURV_CIRC']!=None:
284 ssep.ISCP = ssep['POSI_CURV_CIRC']*RM/(RM+EP/2.)
286 ssep.IPHIC = ssep['POSI_CURV_CIRC']/(RM+EP/2.)*180./pi
287 print 'AZIMUT CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f'%ssep.IPHIC
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.))
293 # PASSAGE DANS LE REPERE PLAQUE (0,2PI) AVEC ORIGINE FLANC DROIT
294 # CAR L ORIGINE DES DONNEES CIRCONF. EST EN EXTRADOS
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
300 # -- CALCUL DE LA TAILLE CIRCONFERENTIELLE
301 # NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
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 ")
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))
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
320 if ssep['POSI_CURV_LONGI']!=None:
322 ssep.ISLP = ssep['POSI_CURV_LONGI']/(1.+(RM+EP/2.)/RC*cos(AZIMC))
324 print 'ANGLE COUDE CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f'%(AZIML*180./pi)
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 ")
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
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 ")
346 print 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f'%ssep.ISLP
348 # -- CALCUL DE LA TAILLE LONGITUDINALE
349 # NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
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.
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.
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.
365 BSUP = ssep.BETA*CG*RC + ssep['AXE_LONGI']/2.
366 BINF = ssep.BETA*CG*RC - ssep['AXE_LONGI']/2.
371 if BINF<0. and BSUP>DIST :
373 BEMB1 = abs(BINF) + BSUP-DIST
380 elif (BINF>=0. and BSUP<=DIST) :
381 BCOUD1 = ssep['AXE_LONGI']
382 BCOUD = BCOUD1+ BCOUD2
384 if GEOM=='COUDE' : BPLAQ = BCOUD/(1.+(RM+EP/2.)/RC*cos(AZIMC))
386 ssep.ILONP = BPLAQ+BEMB
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
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
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)
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))
407 # ------------------------------------------------------------------------------
408 def ASCTCI(MCL_SOUS_EPAIS,RM):
410 MACR_ASCOUF_MAIL ASCTCI
411 APPELEE DANS : ASCSYM et ASCPRE
412 CALCUL TABLEAU TRIE DES ABSCISSES DES CENTRES DE SOUS-EPAISSEURS
414 ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
416 RM = RAYON MOYEN DU COUDE
418 -----------------DONNEES RENVOYEES-----------------------
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
427 # --- tri du tableau des abscisses curvilignes circonf. plaque
433 for ssep in MCL_SOUS_EPAIS :
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 ")
443 TAMPON.append((ssep.ISCP,i))
447 IABSC1.append(TAMPON[j][1])
449 print 'TRI DES CENTRES ABSC. CURV. CIRCONF. :'
450 print '------------------------------------'
454 print '%d) SOUS-EP NO %d <> XC = %.2f'%(i,ssep[1],ssep[0])
456 # --- calcul des abcisses droites et gauches des sous-epaisseurs
461 XG=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
462 if XG<0. : XG=XG+2.*pi*RM
464 XD=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
465 if XD>2.*pi*RM : XD=XD-2.*pi*RM
468 # --- tri des bornes d'intervalles en abscisse
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))
476 for j in range(2*len(MCL_SOUS_EPAIS)):
477 IABSC2.append(TAMPON[j][1])
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])
485 print '%d) SOUS-EP NO %d <> XD = %.2f'%(j+1,IABSC1[IABSC2[j]/2-1],TAMPON[j][0])
487 return TAMPON,IABSC1,IABSC2,COORXD,COORXG
489 # ------------------------------------------------------------------------------
490 def ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM):
492 MACR_ASCOUF_MAIL ASCTLO
493 APPELEE DANS : ASCSYM et ASCPRE
494 CALCUL TABLEAU TRIE DES ORDONNEES DES CENTRES DE SOUS-EPAISSEURS
496 ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
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
503 -----------------DONNEES RENVOYEES-----------------------
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
512 # tri du tableau des abscisses curvilignes axiales plaque
514 ALPHAR = 2.*ALPHA*pi/360.
517 for ssep in MCL_SOUS_EPAIS :
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 ")
527 TAMPON.append((ssep.ISLP,i))
531 IORDO1.append(TAMPON[j][1])
533 print 'TRI DES CENTRES ABSC. CURV. LONGIT. :'
534 print '------------------------------------'
538 print '%d) SOUS-EP NO %d <> YC = %.2f'%(i,ssep[1],ssep[0])
540 # calcul des abscisses sup. et inf. des sous-ep.
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.
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 ")
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 ")
574 # tri des bornes d'intervalles en abscisse
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))
582 for j in range(2*len(MCL_SOUS_EPAIS)):
583 IORDO2.append(TAMPON[j][1])
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])
591 print '%d) SOUS-EP NO %d <> YS = %.2f'%(j+1,IORDO1[IORDO2[j]/2-1],TAMPON[j][0])
593 return TAMPON,IORDO1,IORDO2,COORYI,COORYS
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
603 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
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
622 #----------------------DONNEES RENVOYEES-----------------------
624 # NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
625 # NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
627 # ------------------------------------------------------------------------------
628 def ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,DNX,DNY,RM,RC,
629 INDSEX,INDSEY,IABSC1,IORDO1):
631 # calcul du nombre d'elements longi. et circonf. dans les sous-epaisseurs:
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)):
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)):
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]))):
652 print 'SOUS-EP NO %d ZONE CIRC. NO %d NB ELEM. = %d'%(i+1,j+1,NBEL)
654 for j in range(len(BS)):
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.
664 for i in range(len(MCL_SOUS_EPAIS)):
666 if (BI[j]>=COORYI[l] and BS[j]<=COORYS[l]):
668 print 'SOUS-EP NO %d ZONE LONGI. NO %d NB ELEM. = %d'%(i+1,j+1,NBEL)
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])
677 ################################################################################
678 ################################################################################
679 ################################################################################
680 # MACR_ASCOUF_MAIL ASCSYM
681 # PREPARATION DES DONNEES POUR LE MAILLAGE DE PLAQUE AVEC
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
688 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
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
697 #----------------------DONNEES RENVOYEES-----------------------
699 # NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
700 # NZONEY = NOMBRE DE ZONES LONGITUDINALES
702 # ------------------------------------------------------------------------------
703 def ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM):
716 # --- tri des donnees sous-ep. en circonferentiel
717 TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
719 # --- calcul des zones en circonferentiel
721 ssep=MCL_SOUS_EPAIS[0]
722 if (ssep.ISCP<pi*RM) :
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
727 # zone (centre sous-ep , bord droit)
730 BG.append(ssep.ISCP+ssep.ICIRP/2.)
731 BD.append(ssep.ISCP+ssep.ICIRP/2.)
732 BD.append(ssep.ISCP+pi*RM)
737 DNX.append(ssep.IDENC)
743 elif (ssep.ISCP+pi*RM==2.*pi*RM) :
745 # sous-ep axisymetrique : on preleve pi*RM a droite
747 # zone (centre sous-ep , bord droit)
750 BD.append(ssep.ISCP+ssep.ICIRP/2.)
753 DNX.append(ssep.IDENC)
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
762 # zone (centre -pi*RM, bord gauche)
764 BG.append(ssep.ISCP-pi*RM)
765 BG.append(ssep.ISCP-ssep.ICIRP/2.)
766 BD.append(ssep.ISCP-ssep.ICIRP/2.)
774 DNX.append(ssep.IDENC)
781 print 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. :'
782 print '---------------------------------------------'
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])
790 print 'ZONE NO %d BORNE GAUCHE = %.2f'\
791 ' / BORNE DROITE = %.2f'%(j+1,BG[j],BD[j])
794 # tri des donnees sous-epaisseurs en axial
795 TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
797 # calcul des zones en axial:
804 ssep = MCL_SOUS_EPAIS[0]
806 BI.append(ssep.ISLP-ssep.ILONP/2.)
807 BS.append(ssep.ISLP-ssep.ILONP/2.)
815 DNY.append(ssep.IDENL)
820 print 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. :'
821 print '-----------------------------------------------'
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])
828 print 'ZONE NO %d <> BORNE INF. = %.2f'\
829 ' / BORNE SUP. = %.2f'%(j+1,BI[j],BS[j])
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)
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
843 # - CALCUL TABLEAU TRIE DES ABSCISSES ET ORDONNEES DES CENTRES
844 # - CALCUL TABLEAU DES ZONES COUVERTES PAR LES SOUS-EPAISSEURS
846 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
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"
856 #----------------------DONNEES RENVOYEES-----------------------
858 # NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
859 # NZONEY = NOMBRE DE ZONES LONGITUDINALES
861 # ------------------------------------------------------------------------------
862 def ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM):
864 ALPHAR = 2.*ALPHA*pi/360.
868 NBSEP = len(MCL_SOUS_EPAIS)
869 print 'RECHERCHE DES ZONES DE SOUS-EPAISSEURS DANS LE COUDE\n'
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
897 # definition de la zone courante (borne gauche, borne droite)
899 # TYPG = type de la borne:
900 # 0 : borne gauche sous-epaisseur
901 # 1 : borne droite sous-epaisseur
902 # 2 : centre sous-epaisseur
904 if j>2*NBSEP and ICE<NBSEP :
905 # cas ou il ne reste plus que des centres a caser
911 # cas ou la borne droite de la zone precedente etait un centre
915 MIND = TAMPON[j-1][0]
916 if fmod(IABSC2[j-1],2):
918 NUMD = IABSC1[IABSC2[j-1]/2]
921 NUMD = IABSC1[IABSC2[j-1]/2-1]
925 MIND = TAMPON[2*NBSEP-1][0]
927 if fmod(IABSC2[2*NBSEP-1],2):
929 NUMG = IABSC1[IABSC2[2*NBSEP-1]/2]
932 NUMG = IABSC1[IABSC2[2*NBSEP-1]/2-1]
938 if fmod(IABSC2[j-1],2):
940 NUMG = IABSC1[IABSC2[j-1]/2]
943 NUMG = IABSC1[IABSC2[j-1]/2-1]
944 if fmod(IABSC2[j],2):
946 NUMD = IABSC1[IABSC2[j]/2]
949 NUMD = IABSC1[IABSC2[j]/2-1]
950 if fabs(MING-MIND)<EPSI :
953 if j>2*NBSEP and ICE>=NBSEP:
954 break #on sort de la boucle
959 # recherche des centres a intercaler
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 :
966 if MCL_SOUS_EPAIS[INDC-1].ISCP < MING :
967 # le centre est la nouvelle borne gauche
972 MING = MCL_SOUS_EPAIS[INDC-1].ISCP
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
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
992 # cas ou la premiere zone ne commence pas au bord de la plaque
993 if MING>0. and NZONEX==1 :
1002 elif TYPG==1 or TYPG==2:
1005 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1015 # borne gauche zone = borne gauche ssep
1020 # borne droite zone = borne gauche ssep
1021 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1024 elif TYPD == 1 or TYPD == 2:
1025 # borne droite zone = borne droite ssep : TYPD=1
1026 # borne droite zone = centre ssep : TYPD=2
1028 LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
1029 LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
1031 DNX.append(LTMP[0][0])
1033 INDSEX.append(LTMP[0][1])
1037 # borne gauche zone = borne droite ssep
1040 # borne droite zone = borne gauche ssep
1048 # cas tordu: une sous-ep enveloppe le tout
1051 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1054 elif TYPD == 1 or TYPD == 2:
1055 # borne droite zone = borne droite ssep : TYPD=1
1056 # borne droite zone = centre ssep : TYPD=2
1059 DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
1065 # borne gauche zone = centre ssep
1069 # borne droite zone = borne gauche ssep
1070 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1073 elif TYPD == 1 or TYPD == 2:
1074 # borne droite zone = borne droite ssep : TYPD=1
1075 # borne droite zone = centre ssep : TYPD=2
1077 LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
1078 LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
1080 DNX.append(LTMP[0][0])
1082 INDSEX.append(LTMP[0][1])
1085 if j<=(2*NBSEP-2) or ICE<=NBSEP or (TYPD==2 and j<2*NBSEP):
1087 break #on retourne dans la boucle go10
1090 break #on sort definitivement
1097 if TYPD==0 or TYPD==2:
1100 DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
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
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])
1123 print 'ZONE NO',j+1,'<> BORNE GAUCHE = %.2f'\
1124 ' / BORNE DROITE = %.2f'%(BG[j],BD[j])
1127 # --- tri des donnees sous-ep. en axial
1128 TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
1138 # calcul des zones en axial :
1139 # zones (0,bord inferieur) et (bord inferieur,centre sous-ep.)
1140 ssep = MCL_SOUS_EPAIS[0]
1142 BI.append(ssep.ISLP-ssep.ILONP/2.)
1143 BS.append(ssep.ISLP-ssep.ILONP/2.)
1144 BS.append(ssep.ISLP)
1151 DNY.append(ssep.IDENL)
1159 # calcul des recouvrements de zones en axial
1173 # definition de la zone courante (borne inf, borne sup)
1175 # typi = type de la borne
1176 # 0 : borne inf. sous-ep.
1177 # 1 : borne sup. sous-ep.
1178 # 2 : centre sous-ep.
1181 # cas ou la borne sup. de la zone prec. etait un centre
1186 if fmod(IORDO2[j-1],2):
1188 NUMS = IORDO1[IORDO2[j-1]/2]
1191 NUMS = IORDO1[IORDO2[j-1]/2-1]
1195 MINI = TAMPON[2*NBSEP-1][0]
1197 if fmod(IORDO2[2*NBSEP-1],2):
1199 NUMI = IORDO1[IORDO2[2*NBSEP-1]/2]
1202 NUMI = IORDO1[IORDO2[2*NBSEP-1]/2-1]
1208 if fmod(IORDO2[j-1],2):
1210 NUMI = IORDO1[IORDO2[j-1]/2]
1213 NUMI = IORDO1[IORDO2[j-1]/2-1]
1214 if fmod(IORDO2[j],2):
1216 NUMS = IORDO1[IORDO2[j]/2]
1219 NUMS = IORDO1[IORDO2[j]/2-1]
1220 if fabs(MINI-MINS)<EPSI:
1227 # recherche des centres a intercaler
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:
1234 if MCL_SOUS_EPAIS[INDC-1].ISLP<MINI:
1235 # le centre est la nouvelle borne inf.
1240 MINI = MCL_SOUS_EPAIS[INDC-1].ISLP
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
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
1260 # cas ou la premiere zone ne commence pas au bord de la plaque
1261 if MINI>0. and NZONEY==1:
1271 elif TYPI==1 or TYPI==2:
1274 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1284 # borne inferieure zone = borne inferieure ssep
1289 # borne superieure zone = borne inferieur ssep
1290 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1293 elif TYPS==1 or TYPS==2:
1294 # borne superieure zone = borne superieure ssep:TYPS==1
1295 # borne superieure zone = centre ssep:TYPS==2
1297 LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
1298 LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
1300 DNY.append(LTMP[0][0])
1302 INDSEY.append(LTMP[0][1])
1305 # borne inferieure zone=borne superieure ssep
1308 # borne superieure zone = borne inferieur ssep
1316 # cas tordu: une sous-ep. enveloppe le tout
1319 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1322 elif TYPS==1 or TYPS==2:
1323 # borne superieure zone = borne superieure ssep:TYPS==1
1324 # borne superieure zone = centre ssep:TYPS==2
1327 DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
1332 # borne inferieure zone = centre ssep
1336 # borne superieure zone = borne inferieure ssep
1337 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1340 elif TYPS==1 or TYPS==2:
1341 # borne superieure zone = borne superieure ssep
1343 LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
1344 LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
1346 DNY.append(LTMP[0][0])
1348 INDSEY.append(LTMP[0][1])
1351 if j<=(2*NBSEP-2) or TYPS==2:
1353 break #on retourne dans la boucle go40
1356 break #on sort definitivement
1359 # cas ou la derniere zone ne finit pas au bout de la plaque
1363 BS.append(ALPHAR*RC)
1364 if TYPS==0 or TYPS==2:
1367 DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
1379 print 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. :'
1380 print '-----------------------------------------------'
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])
1387 print 'ZONE NO',j+1,'<> BORNE INF. = %.2f'\
1388 ' / BORNE SUP. = %.2f '%(BI[j],BS[j])
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)
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
1401 # ECRIT DANS UN FICHIER LES DONNES GIBI DE LA PROCEDURE
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) :
1411 if TYPBOL=='CUVE' : TYPEMB = 'typcuv'
1412 if TYPBOL=='GV' : TYPEMB = 'typegv'
1413 if TYPBOL=='ASP_MPP' : TYPEMB = 'typapp'
1417 if POSIT =='DEB_INT' :
1421 if SYME[:6]=='ENTIER' : ZSYME = 'entier'
1422 elif SYME[:5]=='QUART' : ZSYME = 'quart'
1423 else : ZSYME = 'demi'
1428 texte='* DEBUT PARAMETRES UTILISATEUR\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
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')
1468 ################################################################################
1469 ################################################################################
1470 ################################################################################
1471 # MACR_ASCOUF_MAIL write_file_dgib_ASCSQO
1473 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1474 # "PLAQUE SOUS-EPAISSEUR"
1476 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
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
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) :
1501 ssep= MCL_SOUS_EPAIS[0]
1503 texte=' nivmag = '+str(NIVMAG) +POIVIR
1504 texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
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
1517 texte=texte+'* DEBUT PARAMETRES UTILISATEUR\n'
1519 texte=texte+'* parametres generaux\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
1535 texte=texte+" zcoude = 'oui' "+POIVIR
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
1543 texte=texte+" zsyme = 'demi' "+POIVIR
1544 if TYPELE == 'CU20':
1545 texte=texte+" zquad = 'oui' "+POIVIR
1547 texte=texte+" zquad = 'non' "+POIVIR
1549 texte=texte+' nxep = '+str(NBEP) +POIVIR
1551 texte=texte+'* Caracteristiques de la sous-epaisseur\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
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
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
1573 texte=texte+" zaxis = 'non' "+POIVIR
1574 if ssep['EMPREINTE'] == 'OUI':
1575 texte=texte+" sousep . 1 = 'oui'"+POIVIR
1577 texte=texte+" sousep . 1 = 'non'"+POIVIR
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')
1586 ################################################################################
1587 ################################################################################
1588 ################################################################################
1589 # MACR_ASCOUF_MAIL write_subpart_file_pgib_POST
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
1595 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1597 # NLX = NOMBRE D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR
1598 # NLY = NOMBRE D'ELEMENTS LONGI DE LA SOUS-EPAISSEUR
1600 #-----------------DONNEE RENVOYEE PAR ASTER--------------------
1602 # texte = chaine de caracteres contenant des instructions gibi
1603 # de post-traitements
1605 # ------------------------------------------------------------------------------
1606 def write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY):
1607 CAR3 = ('fdro','exdr','extr','exga','fgau','inga','intr','indr')
1610 texte='* DEBUT POINTS DE POST-TRAITEMENT\n'
1613 for ssep in MCL_SOUS_EPAIS:
1616 texte=texte+'* sous-epaisseur No '+str( issep)+'\n'
1618 if ssep['TYPE'] == 'ELLI':
1620 texte=texte+'* plans circonf longi et colonne centrale \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
1626 texte=texte+'* ligaments tous les 45 degres a epaisseur minimale \n'
1628 texte=texte+'isep = '+str( issep)+POIVIR
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':
1635 texte=texte+"* ligaments circonferentiels a l'epaisseur minimale\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
1643 texte=texte+"* ligaments longitudinaux a l'epaisseur minimale\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'
1652 ################################################################################
1653 ################################################################################
1654 ################################################################################
1655 # MACR_ASCOUF_MAIL write_file_pgib_ASCSQ2
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 )
1662 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1664 # NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
1665 # NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
1667 # ------------------------------------------------------------------------------
1668 def write_file_pgib_ASCSQ2(MCL_SOUS_EPAIS,NLX,NLY):
1670 texte=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
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')
1683 ################################################################################
1684 ################################################################################
1685 ################################################################################
1686 # MACR_ASCOUF_MAIL write_file_pgib_ASCSP1
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 )
1693 # ------------------------------------------------------------------------------
1694 def write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg):
1697 texte=' nivmag = '+str(NIVMAG)+POIVIR
1698 texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0 '+POIVIR
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
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')
1730 ################################################################################
1731 ################################################################################
1732 ################################################################################
1733 # MACR_ASCOUF_MAIL write_file_pgib_ASCSDO
1735 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1736 # "PLAQUE SOUS-EPAISSEURS"
1738 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
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
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):
1773 if 0<ceil(x)-x<=0.5:
1776 return int(floor(x))
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)
1786 texte='* DEBUT PARAMETRES UTILISATEUR \n'
1788 texte=texte+'* parametres generaux\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
1799 texte=texte+"zcoude = 'oui' " +POIVIR
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
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
1815 texte=texte+'* Zones couvertes en circonference\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
1826 texte=texte+'* Zones couvertes longitudinalement\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
1837 texte=texte+'* Caracteristiques des sous-epaisseurs\n'
1840 for ssep in MCL_SOUS_EPAIS:
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
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
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
1861 texte=texte+'sousep .'+str(issep).rjust(23)+" = 'non'"+POIVIR
1863 texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
1864 fpgib=open('fort.71','w')
1870 ################################################################################
1871 ################################################################################
1872 ################################################################################
1874 # ------------------------------------------------------------------------------
1875 def write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY):
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
1914 text2=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
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')
1934 ################################################################################
1935 ################################################################################
1936 ################################################################################
1938 # ------------------------------------------------------------------------------
1939 def write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP,SUREP,
1940 LTCLIM,LTCHAR,NBEP,loc_datg):
1944 NZC=int((ALPHA+0.00001)/5.)
1947 DENEXT=int(LTCHAR/DELTAY)*DELTAY/4.
1952 if TYPBOL=='CUVE' : TYPEMB = 'typcuv'
1953 if TYPBOL=='GV' : TYPEMB = 'typegv'
1954 if TYPBOL=='ASP_MPP' : TYPEMB = 'typapp'
1959 texte='* DEBUT PARAMETRES UTILISATEUR\n'
1961 texte=texte+'* Parametres generaux\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
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')
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):
2008 Ecriture de la macro MACR_ASCOUF_MAIL
2010 from Accas import _F
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')
2027 # La macro compte pour 1 dans la numerotation des commandes
2032 NIVMAG = EXEC_MAILLAGE['NIVE_GIBI']
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')
2042 ################################################################################
2043 # --- caracteristiques du coude ---
2044 ################################################################################
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']
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']
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 ")
2078 DEXT = COUDE['DEXT_T1']
2079 EP1 = COUDE['EPAIS_T1']
2080 EP2 = COUDE['EPAIS_T2']
2081 TETA1 = COUDE['ANGL_TETA1']
2084 if COUDE['ANGL_TETA2']!=None :
2086 TETA2 = COUDE['ANGL_TETA2']
2087 EPI = COUDE['EPAIS_TI']
2089 if COUDE['ABSC_CURV_TRAN']!=None :
2090 LTRAN = COUDE['ABSC_CURV_TRAN']
2092 LTRAN = COUDE['POSI_ANGU_TRAN']* RC * pi / 180.0
2095 RM2 = RM + (EP2-EP1)/2.0
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 ")
2107 LAMOR = 3.0/2.0 * sqrt( RM*RM*RM / EP1)
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'
2113 LAMOR = 3.0/2.0 * sqrt( RM2*RM2*RM2 / EP2)
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'
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'
2127 ################################################################################
2128 # --- caracteristiques de la fissure ---
2129 ################################################################################
2131 if FISS_COUDE!=None:
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 ")
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']
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']
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']
2170 if FISS_COUDE['COEF_MULT_RC2']!=None : RC2 = FISS_COUDE['COEF_MULT_RC2']
2172 if FISS_COUDE['COEF_MULT_RC3']!=None : RC3 = FISS_COUDE['COEF_MULT_RC3']
2174 EPSI = FISS_COUDE['ANGL_OUVERTURE']
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 ")
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 ")
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 ")
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 ")
2206 ################################################################################
2207 # --- caracteristiques des sous epaisseurs ---
2208 ################################################################################
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 ")
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 ")
2229 if MCL_SOUS_EPAIS!=None :
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 ")
2238 for ssep in MCL_SOUS_EPAIS :
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 ")
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 ")
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 ")
2263 LDEFAU = ssep['POSI_CURV_LONGI'] + ssep['AXE_LONGI']/2.0
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 ")
2275 LDEFAU = (BETA*RC*pi/180.0) + ssep['AXE_LONGI']/2.0
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 ")
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 ")
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 ")
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)
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' ])
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'
2322 ################################################################################
2323 # --- verifications de coherences ---
2324 ################################################################################
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 ")
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 ")
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 ")
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 ")
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 ")
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 ")
2374 # transition d epaisseur
2377 LCOUDE = ALPHA * RC * pi / 180.0
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 ")
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 ")
2396 # transition d epaisseur a une pente
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 ")
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 ")
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 ")
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 ")
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 ")
2439 # transition d epaisseur a une pente
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 ")
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 ")
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 ")
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 ")
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 ")
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 ")
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 ")
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 ")
2506 ################################################################################
2507 # --- calcul taille initiale des defauts sur la plaque ---
2508 ################################################################################
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)
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)
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)
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'
2537 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> seuls gibi98 et gibi2000 sont appelableS")
2541 # --- ecriture sur le fichier .datg de la procedure ---
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()
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)
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)
2569 # procedure coude regle
2570 write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP1,SUREP,
2571 LTCLIM,LTCHAR,NBEP,loc_datg)
2575 DEFI_FICHIER(ACTION='LIBERER',UNITE=19)
2576 DEFI_FICHIER(ACTION='LIBERER',UNITE=20)
2577 EXEC_LOGICIEL( LOGICIEL = logiel ,
2578 ARGUMENT = ( _F(NOM_PARA=nomFichierDATG),
2579 _F(NOM_PARA=nomFichierGIBI), ), )
2584 __nomres=LIRE_MAILLAGE(INFO=INFO)
2590 l_CREA_GROUP_NO.append('BORD1')
2591 l_CREA_GROUP_NO.append('CLGV')
2592 l_CREA_GROUP_NO.append('BORD2')
2593 l_CREA_GROUP_NO.append('PEAUINT')
2594 l_CREA_GROUP_NO.append('PEAUEXT')
2596 # cas des fissures axisymetriques
2597 if FISS_COUDE!=None:
2598 if FISS_COUDE['AXIS']=='OUI':
2599 motscles['CREA_GROUP_MA']=[]
2600 motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
2602 POSITION = 'INIT' , ),)
2604 # conversion des groupes de mailles en groupes du bloc fissure
2605 if FISS_COUDE!=None:
2606 if SYME == 'ENTIER':
2607 l_CREA_GROUP_NO.append('NOLIG1')
2608 l_CREA_GROUP_NO.append('FACE1')
2609 l_CREA_GROUP_NO.append('NOLIG2')
2610 l_CREA_GROUP_NO.append('FACE2')
2611 l_CREA_GROUP_NO.append('FONDFISS')
2613 motscles['CREA_GROUP_NO']=[]
2614 motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=tuple(l_CREA_GROUP_NO)))
2616 # conversion des groupes de mailles en groupes de noeuds pour les
2617 # ligaments des sous-ep.
2618 if MCL_SOUS_EPAIS!=None:
2620 for ssep in MCL_SOUS_EPAIS:
2622 if ssep['TYPE']=='ELLI':
2623 for k in range(2*NLX[issep-1]+1):
2624 chtmp=str(issep)+'_'+str(k+1)
2627 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2629 motscles['CREA_GROUP_NO'].append(_F(NOM = 'IPCEN'+str(issep),
2630 GROUP_MA = 'PCENT'+str(issep),),)
2631 for k in range(2*NLY[issep-1]+1):
2632 chtmp=str(issep)+'_'+str(k+1)
2635 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2637 for k in range(2*NLX[issep-1]+1):
2638 chtmp=str(issep)+'_'+str(k+1)
2642 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2643 INTERSEC = ('PEAUEXT',ch1),),)
2644 motscles['CREA_GROUP_NO'].append(_F(NOM = ch3,
2645 INTERSEC = ('PEAUINT',ch1),),)
2646 motscles['CREA_GROUP_NO'].append(_F(NOM = 'OPCEN'+str(issep),
2647 INTERSEC = ('PEAUEXT','IPCEN'+str(issep),),),)
2648 motscles['CREA_GROUP_NO'].append(_F(NOM = 'EPCEN'+str(issep),
2649 INTERSEC = ('PEAUINT','IPCEN'+str(issep),),),)
2650 for k in range(2*NLY[issep-1]+1):
2651 chtmp=str(issep)+'_'+str(k+1)
2655 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2656 INTERSEC = ('PEAUEXT',ch1),),)
2657 motscles['CREA_GROUP_NO'].append(_F(NOM = ch3,
2658 INTERSEC = ('PEAUINT',ch1),),)
2659 for k in range(2*NLX[issep-1]+1):
2660 chtmp=str(issep)+'_'+str(k+1)
2665 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2668 GROUP_NO_ORIG = ch3,
2669 GROUP_NO_EXTR = ch4,
2671 CRITERE = CRITER,),)
2672 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2673 NOM = 'PCENT'+str(issep),
2674 GROUP_NO = 'IPCEN'+str(issep),
2675 GROUP_NO_ORIG = 'OPCEN'+str(issep),
2676 GROUP_NO_EXTR = 'EPCEN'+str(issep),
2678 CRITERE = CRITER,),)
2679 for k in range(2*NLY[issep-1]+1):
2680 chtmp=str(issep)+'_'+str(k+1)
2685 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2688 GROUP_NO_ORIG = ch3,
2689 GROUP_NO_EXTR = ch4,
2691 CRITERE = CRITER,),)
2692 # 1/ noms intermediaires des groupes de noeuds representant les ligaments
2693 # des sections: TU,MI,GV et sous-ep.
2695 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR3[k]+str(issep),
2696 GROUP_MA = CAR6[k]+str(issep),),)
2699 if SYME == 'ENTIER' or k!=2:
2701 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR3[j]+SECT[k],
2702 GROUP_MA = CAR6[j]+SECT[k],),)
2704 # 2/ determination et nommage des noeuds origine et extremite des groupes de noeuds
2705 # representant les ligaments de la ou des sections: sous-ep.
2707 for ssep in MCL_SOUS_EPAIS:
2710 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR4[k]+str(issep),
2711 INTERSEC = ('PEAUEXT',CAR3[k]+str(issep),),),)
2712 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR5[k]+str(issep),
2713 INTERSEC = ('PEAUINT',CAR3[k]+str(issep),),),)
2714 # 3/ nommage final des groupes de noeuds representant les ligaments
2715 # de la ou des sections: sous-ep.
2717 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2718 NOM = CAR6[k]+str(issep),
2719 GROUP_NO = CAR3[k]+str(issep),
2720 GROUP_NO_ORIG = CAR4[k]+str(issep),
2721 GROUP_NO_EXTR = CAR5[k]+str(issep),
2723 CRITERE = CRITER,),)
2725 # 4/ determination et nommage des noeuds origine et extremite des groupes de noeuds
2726 # representant les ligaments des sections: TU,MI,GV
2728 if SYME == 'ENTIER' or k!=2:
2730 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR4[j]+SECT[k],
2731 INTERSEC = ('PEAUEXT',CAR3[j]+SECT[k],),),)
2732 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR5[j]+SECT[k],
2733 INTERSEC = ('PEAUINT',CAR3[j]+SECT[k],),),)
2734 # 5/ nommage final des groupes de noeuds representant les ligaments des sections: TU,MI,GV
2736 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2737 NOM = CAR6[j]+SECT[k],
2738 GROUP_NO = CAR3[j]+SECT[k],
2739 GROUP_NO_ORIG = CAR4[j]+SECT[k],
2740 GROUP_NO_EXTR = CAR5[j]+SECT[k],
2742 CRITERE = CRITER,),)
2745 __nomres=DEFI_GROUP(reuse =__nomres,
2750 if FISS_COUDE!=None:
2751 # creation des groupes petit axe et grand axe fissure par
2752 # intersection de groupes existants
2754 motscles['CREA_GROUP_NO']=[]
2757 if POSIT == 'DEB_INT':
2758 l_peau.append('PEAUINT')
2760 l_peau.append('PEAUEXT')
2762 if SYME == 'ENTIER' :
2763 l_intersec.append('FACE1')
2764 motscles['CREA_GROUP_NO'].append(_F(NOM = 'P_AXE_1',
2765 INTERSEC = ('NOLIG1','FACE1'),),)
2766 motscles['CREA_GROUP_NO'].append(_F(NOM = 'G_AXE_1',
2767 INTERSEC = tuple(l_peau+l_intersec),),)
2769 l_intersec.append('FACE2')
2770 motscles['CREA_GROUP_NO'].append(_F(NOM = 'P_AXE_2',
2771 INTERSEC = ('NOLIG2','FACE2'),),)
2772 motscles['CREA_GROUP_NO'].append(_F(NOM = 'G_AXE_2',
2773 INTERSEC = tuple(l_peau+l_intersec),),)
2775 __nomres=DEFI_GROUP(reuse =__nomres,
2780 __MODELE=AFFE_MODELE( MAILLAGE=__nomres,
2781 AFFE=_F( GROUP_MA = 'COUDE' ,
2782 PHENOMENE = 'MECANIQUE' ,
2783 MODELISATION = '3D' , )
2789 motscles['TUBE_COUDE']=[]
2790 motscles['TUBE_COUDE'].append(_F(ANGLE=ALPHA,
2793 motscles['PLAQ_TUBE']=[]
2795 D_PLAQ_TUBE['DEXT']=DEXT
2796 D_PLAQ_TUBE['EPAIS']=EP1
2797 D_PLAQ_TUBE['L_TUBE_P1']=LTCHAR
2798 if SYME == 'QUART' : D_PLAQ_TUBE['COUTURE']='NON'
2799 if FISS_COUDE!=None:
2800 D_PLAQ_TUBE['AZIMUT']=AZIM
2801 elif SOUS_EPAIS_COUDE!=None :
2802 D_PLAQ_TUBE['AZIMUT']=MCL_SOUS_EPAIS[0].IPHIC
2804 motscles['PLAQ_TUBE'].append(_F(**D_PLAQ_TUBE),)
2805 __nomres=MODI_MAILLAGE( reuse =__nomres,
2811 motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE'),)
2812 if FISS_COUDE!=None:
2813 if FISS_COUDE['FISSURE'] == 'DEB_INIT':
2814 motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE','FACE1','FACE2'),)
2815 __nomres=MODI_MAILLAGE(reuse =__nomres,
2821 self.DeclareOut('nomre2',self.sd)
2823 motscles['CREA_POI1']=[]
2824 motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P1',
2827 motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P2',
2829 nomre2=CREA_MAILLAGE( MAILLAGE=__nomres,
2832 if IMPRESSION!=None:
2833 if IMPRESSION.__class__.__name__ !='MCList' : IMPRESSION =[IMPRESSION,]
2834 for impr in IMPRESSION :
2837 if impr['FORMAT']=='IDEAS' : motscles['VERSION'] =impr['VERSION']
2838 if impr['FORMAT']=='CASTEM' : motscles['NIVE_GIBI'] =impr['NIVE_GIBI']
2839 if impr['UNITE']!=None : motscles['UNITE'] =impr['UNITE']
2840 impr_resu = _F( MAILLAGE = nomre2,)
2842 IMPR_RESU( RESU = impr_resu,
2843 FORMAT= impr['FORMAT'],**motscles)