1 #@ MODIF macr_ascouf_mail_ops Macro DATE 14/09/2004 AUTEUR MCOURTOI M.COURTOIS
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
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 ################################################################################
27 ################################################################################
28 def ASCFON(RC,RM,EP,ORIEN,AZIM,AXEC,POS,Y):
30 # OU CC EST LA TAILLE DE LA FISSURE SUR LE COUDE
31 # 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 ################################################################################
59 ################################################################################
60 # MACR_ASCOUF_MAIL ASCFIS
61 # taille initiale du defaut fissure sur la plaque en
62 # fonction des donnees sur le coude ou le tube suivant la
63 # transformation choisie
65 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
67 # ALPHA = ANGLE DU COUDE
68 # RM = RAYON MOYEN DU COUDE
69 # RC = RAYON DE CINTRAGE DU COUDE
70 # EP = EPAISSEUR DU COUDE
71 # SUREP = VALEUR DE LA SUREPAISSEUR
72 # GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
73 # AXEA = PROFONDEUR FISSURE (DEMI PETIT AXE)
74 # AXEC = DEMI GRAND AXE FISSURE
75 # AZIM = POSITION AZIMUTALE DU CENTRE DE LA FISSURE
76 # POS = POSITION EN PEAU (EXTERNE OU INTERNE)
77 # SF = ABCISSE CURVILIGNE LONGITUDINALE DU CENTRE DE LA FISSURE
78 # DSF = BOOLEEN EXPRESSION POSITION CENTRE FISSURE
79 # BETA = POSITION ANGULAIRE DU CENTRE DE LA FISSURE
80 # ORIEN = ORIENTATION DE LA FISSURE
82 #----------------------DONNEES RENVOYEES-----------------------
84 # AXEAP = PROFONDEUR DE LA FISSURE (PETIT AXE) SUR LA PLAQUE
85 # AXECP = LONGUEUR DE LA FISSURE (GRAND AXE) SUR LA PLAQUE
86 # SFP = ABCISSE CURVILIGNE LONGITUDINALE CENTRE FISSURE
89 def ASCFIS(ALPHA, RM, RC, EP, SUREP, GEOM, AXEA,
90 AXEC, AZIM, POS, SF, DSF, BETA, ORIEN):
92 from Utilitai import funct_root
94 if (AZIM>=120.) and (AZIM<=240.0): X = RM-EP/2.0 - SUREP
97 AZIMR = AZIM*2.0*pi/360.0
99 # -- CALCUL COTE AXIALE DU CENTRE FISSURE SUR LA PLAQUE EN FONCTION
100 # DE L ABSCISSE CURVILIGNE DONNEE SUR LE COUDE OU DE LA POSITION
104 if GEOM=='COUDE': SFP = SF/(1.0+X/RC*cos(AZIMR))
107 BETAR = BETA*2.0*pi/360.0
109 SF = BETAR*(RC+X*cos(AZIMR))
110 SFP = SF/(1.0+X/RC*cos(AZIMR))
114 if (GEOM=='COUDE'): print 'COTE AXIALE CENTRE FISSURE SUR COUDE : %.2f'%SF
115 if (GEOM=='TUBE') : print 'COTE AXIALE CENTRE FISSURE SUR TUBE : %.2f'%SF
116 print 'COTE AXIALE CENTRE FISSURE SUR PLAQUE : %.2f'%SFP
118 # ON ENVISAGE LE CAS OU UNE PARTIE DE L AXE EST DANS LES
119 # DROITES DES EMBOUTS. LA TRANSFORMATION N EST FAITE QUE SUR LA
120 # PARTIE RESTANT DANS LE COUDE.
122 if (GEOM=='COUDE'): DIST = ALPHA*2.0*pi/360.0*(RC+X*cos(AZIMR))
123 else : DIST = ALPHA*2.0*pi/360.0*RC
127 # -- FISSURE LONGITUDINALE (0 DEGRE)
136 elif (BINF>=0. and BSUP<=DIST):
138 elif abs(ORIEN-90.)<0.01:
139 # -- FISSURE CIRCONFERENTIELLE (90 DEGRES)
148 elif (BINF>=0. and BSUP<=DIST):
151 # -- FISSURE A +/- 45 DEGRES SUR INTRADOS OU EXTRADOS
152 BSUP = SF + sqrt(2.0)/2.0*AXEC
153 BINF = SF - sqrt(2.0)/2.0*AXEC
155 BCOUD = (DIST - BINF)*sqrt(2.0)
156 BEMB = (BSUP - DIST)*sqrt(2.0)
158 BCOUD = BSUP *sqrt(2.0)
159 BEMB = abs(BINF)*sqrt(2.0)
160 elif (BINF>=0. and BSUP<=DIST):
162 print 'PARTIE DU GRAND AXE DANS LE COUDE : %.2f'%BCOUD
163 print 'PARTIE DU GRAND AXE DANS L EMBOUT : %.2f'%BEMB
165 # -- CALCUL DE LA TAILLE DU GRAND AXE FISSURE SUR LA PLAQUE
169 # -- FISSURE LONGITUDINALE (0 DEGRE)
170 if GEOM=='COUDE': AXECP = BCOUD/(1.0+X/RC*cos(AZIMR)) + BEMB
171 else : AXECP = BCOUD + BEMB
172 elif abs(ORIEN-90.)<0.01:
173 # -- FISSURE CIRCONFERENTIELLE (90 DEGRES)
174 AXECP = (BCOUD+BEMB)*RM/X
177 # ------- TRANSFORMATION COUDE
178 if AZIM in (0.,180.):
179 # -- FISSURE A +/- 45 DEGRES SUR INTRADOS OU EXTRADOS
180 AXECP = BCOUD*RM*sqrt(2.)/( X*sqrt(1.+(RM/X+RM/RC*cos(AZIMR))**2) )+\
181 BEMB*sqrt( (1.0+(X/RM)**2)*0.5 )
183 # -- FISSURE A +/- 45 DEGRES AILLEURS
184 AXECP = funct_root.root(ASCFON,(BCOUD-1.,BCOUD+1.))
185 AXECP = AXECP + BEMB*sqrt( (1.+(X/RM)**2)*0.5 )
186 AXECC = ASCFON(AXECP)+BCOUD
189 AXECP = (BCOUD+BEMB)*sqrt( (1.+(X/RM)**2)*0.5 )
194 print 'TAILLE GRAND AXE COUDE DONNE : %.2f'%(2.*AXEC)
196 print 'TAILLE GRAND AXE TUBE DONNE : %.2f'%(2.*AXEC)
197 print 'TAILLE GRAND AXE PLAQUE DEDUIT : %.2f'%AXECP
199 print 'METHODE DE NEWTON FISSURE A 45 DEGRES -->'
200 print 'TAILLE GRAND AXE COUDE RECALCULE : %.2f'%AXECC
201 if GEOM=='COUDE' and BEMB>0. and BSUP>DIST :
202 SFP = ALPHA*2.*pi*RC/360. - AXECP/2. + BEMB
203 print 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT'
204 print 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f'%SFP
205 if GEOM=='COUDE' and BEMB>0. and BINF<0. :
206 SFP = + AXECP/2. - BEMB
207 print 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT'
208 print 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f'%SFP
210 # -- CORRECTION DU PETIT AXE DE LA FISSURE QUAND CELLE-CI SE TROUVE SUR
211 # LA ZONE DE SUREPAISSEUR
213 ALPHAR = ALPHA*2.*pi/360.
214 ZSUR1 = ALPHAR*RC/10.
215 ZSUR2 = ALPHAR*RC*9./10.
216 YFISS = (AZIMR-pi/2.)*RM
218 if (AZIM>=120.) and (AZIM<=240.):
219 if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = 1.
220 elif (SFP<=ZSUR1): MU = SFP/ZSUR1
221 elif (SFP>ZSUR2): MU = (ALPHAR*RC-SFP)/ZSUR1
222 elif (AZIM>=90.) and (AZIM<=120.):
223 if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = YFISS/(pi/6.*RM)
224 elif (SFP<=ZSUR1): MU = YFISS*SFP/(pi/6.*RM*ZSUR1)
225 elif (SFP>ZSUR2): MU = YFISS*(ALPHAR*RC-SFP)/(pi/6.*RM*ZSUR1)
226 elif (AZIM>=240.) and (AZIM<=270.):
227 if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = (YFISS-5.*pi/6.*RM)/(pi/6.*RM)
228 elif (SFP<=ZSUR1): MU = (YFISS-5.*pi/6.*RM)*SFP/(pi/6.*RM*ZSUR1)
229 elif (SFP>ZSUR2): MU = (YFISS-5.*pi/6.*RM)*(ALPHAR*RC-SFP)/(pi/6.*RM*ZSUR1)
232 AXEAP = AXEA * EP / ( EP + MU*SUREP )
233 print '--> CORRECTION DUE A LA SUREPAISSEUR'
234 print '--> TAILLE PETIT AXE PLAQUE : %.2f'%AXEAP
237 return AXEAP,AXECP,SFP
238 ################################################################################
239 ################################################################################
240 ################################################################################
241 # MACR_ASCOUF_MAIL ASCSEP
242 # taille initiale sur la plaque des sous-epaisseurs
244 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
246 # ALPHA = ANGLE DU COUDE
247 # RM = RAYON MOYEN DU COUDE
248 # RC = RAYON DE CINTRAGE DU COUDE
249 # EP = EPAISSEUR DU COUDE
250 # GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
251 # SYME = QUART DE STRUCTURE SI 'OUI'
254 def ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP,GEOM,SYME):
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))
406 ################################################################################
407 ################################################################################
408 ################################################################################
409 # MACR_ASCOUF_MAIL ASCTCI
410 # APPELEE DANS : ASCSYM et ASCPRE
411 # CALCUL TABLEAU TRIE DES ABSCISSES DES CENTRES DE SOUS-EPAISSEURS
413 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
415 # RM = RAYON MOYEN DU COUDE
417 #----------------------DONNEES RENVOYEES-----------------------
419 # IABSC1 = CORRESPONDANCE ABSC. CURVI. CIRCONF. SOUS-EP. I
420 # IABSC2 = CORRESPONDANCE ABSC. GAUCHE ET DROITE CIRCONF. SOUS-EP. I
421 # COORXD = ABSC. DU BORD DROIT DE LA SOUS-EP I
422 # COORXG = ABSC. DU BORD GAUCHE DE LA SOUS-EP I
424 def ASCTCI(MCL_SOUS_EPAIS,RM):
426 # --- tri du tableau des abscisses curvilignes circonf. plaque
432 for ssep in MCL_SOUS_EPAIS :
434 if (ssep.ISCP>2.*pi*RM) or (ssep.ISCP<0.) :
435 print ' <MACR_ASCOUF_MAIL> valeur hors domaine'
436 print ' <MACR_ASCOUF_MAIL> SOUS-EPAISSEUR NUMERO :%d'%MCL_SOUS_EPAIS.index(ssep)
437 print ' <MACR_ASCOUF_MAIL> ABSC. CURV. CIRCONF. :%.2f'%ssep.ISCP
438 print ' <MACR_ASCOUF_MAIL> BORD PLAQUE :%.2f'%(2.*pi*RM)
439 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
442 TAMPON.append((ssep.ISCP,i))
446 IABSC1.append(TAMPON[j][1])
448 print 'TRI DES CENTRES ABSC. CURV. CIRCONF. :'
449 print '------------------------------------'
453 print '%d) SOUS-EP NO %d <> XC = %.2f'%(i,ssep[1],ssep[0])
455 # --- calcul des abcisses droites et gauches des sous-epaisseurs
460 XG=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
461 if XG<0. : XG=XG+2.*pi*RM
463 XD=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
464 if XD>2.*pi*RM : XD=XD-2.*pi*RM
467 # --- tri des bornes d'intervalles en abscisse
470 for j in range(len(MCL_SOUS_EPAIS)):
471 TAMPON.append((COORXG[j],2*j+1))
472 TAMPON.append((COORXD[j],2*j+2))
475 for j in range(2*len(MCL_SOUS_EPAIS)):
476 IABSC2.append(TAMPON[j][1])
478 print 'TRI DES INTERVALLES G ET D ABSC. CURV. CIRCONF. :'
479 print '-----------------------------------------------'
480 for j in range(2*len(MCL_SOUS_EPAIS)):
481 if fmod(IABSC2[j],2):
482 print '%d) SOUS-EP NO %d <> XG = %.2f'%(j+1,IABSC1[IABSC2[j]/2],TAMPON[j][0])
484 print '%d) SOUS-EP NO %d <> XD = %.2f'%(j+1,IABSC1[IABSC2[j]/2-1],TAMPON[j][0])
486 return TAMPON,IABSC1,IABSC2,COORXD,COORXG
488 ################################################################################
489 ################################################################################
490 ################################################################################
491 # MACR_ASCOUF_MAIL ASCTLO
492 # APPELEE DANS : ASCSYM et ASCPRE
493 # CALCUL TABLEAU TRIE DES ORDONNEES DES CENTRES DE SOUS-EPAISSEURS
495 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
497 # RC = RAYON MOYEN DU COUDE
498 # ALPHA = ANGLE DU COUDE
499 # LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
500 # LTCLIM = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
502 #----------------------DONNEES RENVOYEES-----------------------
504 # IORDO1 = CORRESPONDANCE ORDO. CURVI. LONGIT. SOUS-EP. I
505 # IORDO2 = CORRESPONDANCE ORDO. GAUCHE ET DROITE LONGIT. SOUS-EP. I
506 # COORYI = ORDONNEE. DU BORD INTERIEUR DE LA SOUS-EP I
507 # COORYS = ORDONNEE. DU BORD SUPERIEUR DE LA SOUS-EP I
509 def ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM):
511 # tri du tableau des abscisses curvilignes axiales plaque
513 ALPHAR = 2.*ALPHA*pi/360.
516 for ssep in MCL_SOUS_EPAIS :
518 if (ssep.ISLP>ALPHAR*RC) or (ssep.ISLP<0.) :
519 print ' <MACR_ASCOUF_MAIL> valeur hors domaine'
520 print ' <MACR_ASCOUF_MAIL> SOUS-EPAISSEUR NUMERO :%d'%MCL_SOUS_EPAIS.index(ssep)
521 print ' <MACR_ASCOUF_MAIL> ABSC. CURV. LONGIT. :%.2f'%ssep.ISLP
522 print ' <MACR_ASCOUF_MAIL> BORDS PLAQUE :%.2f'%(ALPHAR*RC)
523 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
526 TAMPON.append((ssep.ISLP,i))
530 IORDO1.append(TAMPON[j][1])
532 print 'TRI DES CENTRES ABSC. CURV. LONGIT. :'
533 print '------------------------------------'
537 print '%d) SOUS-EP NO %d <> YC = %.2f'%(i,ssep[1],ssep[0])
539 # calcul des abscisses sup. et inf. des sous-ep.
546 YI=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
547 YS=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
548 if fabs(bid[0])<EPS :
549 YI=-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
550 YS=MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
551 if fabs(bid[0]-ALPHAR*RC)<EPS :
552 YI=ALPHAR*RC-(MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.)
553 YS=ALPHAR*RC+(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
555 print ' <MACR_ASCOUF_MAIL> valeur hors domaine'
556 print ' <MACR_ASCOUF_MAIL> SOUS-EPAISSEUR NUMERO :',bid[1]
557 print ' <MACR_ASCOUF_MAIL> BORD INFERIEUR :',YI
558 print ' <MACR_ASCOUF_MAIL> BORD PLAQUE :',-LTCHAR
559 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
562 if YS>(ALPHAR*RC+LTCLIM):
563 print ' <MACR_ASCOUF_MAIL> valeur hors domaine'
564 print ' <MACR_ASCOUF_MAIL> SOUS-EPAISSEUR NUMERO :',bid[1]
565 print ' <MACR_ASCOUF_MAIL> BORD INFERIEUR :',YS
566 print ' <MACR_ASCOUF_MAIL> BORD PLAQUE :',ALPHAR*RC+LTCLIM
567 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
573 # tri des bornes d'intervalles en abscisse
576 for j in range(len(MCL_SOUS_EPAIS)):
577 TAMPON.append((COORYI[j],2*j+1))
578 TAMPON.append((COORYS[j],2*j+2))
581 for j in range(2*len(MCL_SOUS_EPAIS)):
582 IORDO2.append(TAMPON[j][1])
584 print 'TRI DES INTERVALLES I ET S ABSC. CURV. LONGIT. :'
585 print '-----------------------------------------------'
586 for j in range(2*len(MCL_SOUS_EPAIS)):
587 if fmod(IORDO2[j],2):
588 print '%d) SOUS-EP NO %d <> YI = %.2f'%(j+1,IORDO1[IORDO2[j]/2],TAMPON[j][0])
590 print '%d) SOUS-EP NO %d <> YS = %.2f'%(j+1,IORDO1[IORDO2[j]/2-1],TAMPON[j][0])
592 return TAMPON,IORDO1,IORDO2,COORYI,COORYS
595 ################################################################################
596 ################################################################################
597 ################################################################################
598 # MACR_ASCOUF_MAIL ASCNBE
599 # APPELEE DANS : ASCSYM et ASCPRE
600 # CALCUL DU NOMBRE D'ELEMENTS LONGI ET CIRCONF. DANS LES SOUS-EPAISSEURS
602 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
604 # COORXG = ABSCISSE DU BORD GAUCHE DE LA SOUS-EPAISSEUR I
605 # COORXD = ABSCISSE DU BORD DROIT DE LA SOUS-EPAISSEUR I
606 # COORYI = ORDONNEE DU BORD INFERIEUR DE LA SOUS-EPAISSEUR I
607 # COORYS = ORDONNEE DU BORD SUPERIEUR DE LA SOUS-EPAISSEUR I
608 # BD = ABSCISSE DU BORD DROIT DE LA ZONE CIRCONF J
609 # BG = ABSCISSE DU BORD GAUCHE DE LA ZONE CIRCONF J
610 # BS = ORDONNEE DU BORD SUPERIEUR DE LA ZONE LONGI J
611 # BI = ORDONNEE DU BORD INFERIEUR DE LA ZONE LONGI J
612 # DNX = DENSITE ET NOMBRE D'ELEMENTS CIRCONF. DE LA ZONE J
613 # DNY = DENSITE ET NOMBRE D'ELEMENTS LONGIT. DE LA ZONE J
614 # INDSEX = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE CIRCONF J
615 # INDSEY = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE LONGI J
616 # RM = RAYON MOYEN DU COUDE
617 # RC = RAYON DE CINTRAGE DU COUDE
618 # IABSC1 = CORRESPONDANCE ABSCISSE CURVILIGNE CIRCONF. SOUS-EP. I
619 # IORDO1 = CORRESPONDANCE ABSCISSE CURVILIGNE LONGIT. SOUS-EP. I
621 #----------------------DONNEES RENVOYEES-----------------------
623 # NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
624 # NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
626 def ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,DNX,DNY,RM,RC,
627 INDSEX,INDSEY,IABSC1,IORDO1):
629 # calcul du nombre d'elements longi. et circonf. dans les sous-epaisseurs:
632 print 'DETERMINATION DU NOMBRE D''ELEMENTS DANS LES SOUS-EPAISSEURS :'
633 print '------------------------------------------------------------'
634 NLX=[0]*len(MCL_SOUS_EPAIS)
635 NLY=[0]*len(MCL_SOUS_EPAIS)
636 for j in range(len(BD)):
638 # calcul au passage du nombre d'elements sur chaque zone circonf.
639 RNBEL = (BD[j]-BG[j])*360./(DNX[2*j]*2.*pi*RM)
640 RNBEL2 = RNBEL - floor(RNBEL)
641 if RNBEL2 <= 0.5 : NBEL=int(floor(RNBEL))
642 else : NBEL=int(floor(RNBEL))+1
643 if NBEL <= 1 : NBEL=2
644 # calcul au passage du nombre d'elements sur chaque sous-epaisseur circonf.
645 for i in range(len(MCL_SOUS_EPAIS)):
647 if ((COORXG[l]<COORXD[l] and BG[j]>=COORXG[l] and BD[j]<=COORXD[l])\
648 or (COORXG[l]>=COORXD[l] and (BG[j]<=COORXG[l] or BD[j]>=COORXD[l]))):
650 print 'SOUS-EP NO %d ZONE CIRC. NO %d NB ELEM. = %d'%(i+1,j+1,NBEL)
652 for j in range(len(BS)):
654 # calcul au passage du nombre d'elements sur chaque zone longi.
655 RNBEL = ((BS[j]-BI[j])*360.)/(DNY[2*j]*2.*pi*RC)
656 RNBEL2 = RNBEL - floor(RNBEL)
657 if RNBEL2 <= 0.5 : NBEL=int(floor(RNBEL))
658 else : NBEL=int(floor(RNBEL))+1
659 if NBEL <= 1 : NBEL=2
660 # calcul au passage du nombre d'elements sur chaque sous-epaisseur circonf.
662 for i in range(len(MCL_SOUS_EPAIS)):
664 if (BI[j]>=COORYI[l] and BS[j]<=COORYS[l]):
666 print 'SOUS-EP NO %d ZONE LONGI. NO %d NB ELEM. = %d'%(i+1,j+1,NBEL)
668 for j in range(len(NLX)):
669 print 'SOUS-EP NO %d NBE TOTAL ELEMENTS CIRCONF. : %d'%(j+1,NLX[j])
670 print 'SOUS-EP NO %d NBE TOTAL ELEMENTS LONGI. : %d'%(j+1,NLY[j])
675 ################################################################################
676 ################################################################################
677 ################################################################################
678 # MACR_ASCOUF_MAIL ASCSYM
679 # PREPARATION DES DONNEES POUR LE MAILLAGE DE PLAQUE AVEC
681 # CAS D UNE SOUS-EPAISSEUR DANS LE PLAN DE SYMETRIE
682 # CONSTRUCTION D UN QUART DU MAILLAGE
683 # - CALCUL TABLEAU TRIE DES ABSCISSES ET ORDONNEES DES CENTRES
684 # - CALCUL TABLEAU DES ZONES COUVERTES PAR LES SOUS-EPAISSEURS
686 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
688 # RM = RAYON MOYEN DU COUDE
689 # RC = RAYON DE CINTRAGE DU COUDE
690 # ALPHA = ANGLE DU COUDE
691 # LT = LONGUEUR DE L EMBOUT DU COTE CHARGEMENT
692 # LGV = LONGUEUR DE L EMBOUT DU COTE CONDITIONS AUX LIMITES
693 # NBSEP = NOMBRE DE SOUS-EPAISSEURS
695 #----------------------DONNEES RENVOYEES-----------------------
697 # NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
698 # NZONEY = NOMBRE DE ZONES LONGITUDINALES
700 def ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM):
713 # --- tri des donnees sous-ep. en circonferentiel
714 TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
716 # --- calcul des zones en circonferentiel
718 ssep=MCL_SOUS_EPAIS[0]
719 if (ssep.ISCP<pi*RM) :
721 # le centre sous-ep est dans la zone flanc droit/extrados/flanc
722 # gauche, on preleve pi*RM a droite de la sous-epaisseur
724 # zone (centre sous-ep , bord droit)
727 BG.append(ssep.ISCP+ssep.ICIRP/2.)
728 BD.append(ssep.ISCP+ssep.ICIRP/2.)
729 BD.append(ssep.ISCP+pi*RM)
734 DNX.append(ssep.IDENC)
740 elif (ssep.ISCP+pi*RM==2.*pi*RM) :
742 # sous-ep axisymetrique : on preleve pi*RM a droite
744 # zone (centre sous-ep , bord droit)
747 BD.append(ssep.ISCP+ssep.ICIRP/2.)
750 DNX.append(ssep.IDENC)
756 # le centre sous-ep est dans la zone flanc gauche/intrados/flanc
757 # droit : on preleve pi*RM a gauche de la sous-epaisseur
759 # zone (centre -pi*RM, bord gauche)
761 BG.append(ssep.ISCP-pi*RM)
762 BG.append(ssep.ISCP-ssep.ICIRP/2.)
763 BD.append(ssep.ISCP-ssep.ICIRP/2.)
771 DNX.append(ssep.IDENC)
778 print 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. :'
779 print '---------------------------------------------'
782 for j in range(NZONEX) :
783 if ( fabs(BG[j]) < EPS ) and ( fabs(BD[j]) < EPS ) :
784 print 'ZONE NO %d BORNE GAUCHE = %.2f'\
785 ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR'%(j+1,BG[j],BD[j])
787 print 'ZONE NO %d BORNE GAUCHE = %.2f'\
788 ' / BORNE DROITE = %.2f'%(j+1,BG[j],BD[j])
791 # tri des donnees sous-epaisseurs en axial
792 TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
794 # calcul des zones en axial:
801 ssep = MCL_SOUS_EPAIS[0]
803 BI.append(ssep.ISLP-ssep.ILONP/2.)
804 BS.append(ssep.ISLP-ssep.ILONP/2.)
812 DNY.append(ssep.IDENL)
817 print 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. :'
818 print '-----------------------------------------------'
820 for j in range(NZONEY) :
821 if ( fabs(BI[j]) < EPS ) and ( fabs(BS[j]) < EPS ) :
822 print 'ZONE NO %d <> BORNE INF. = %.2f'\
823 ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(j+1,BI[j],BS[j])
825 print 'ZONE NO %d <> BORNE INF. = %.2f'\
826 ' / BORNE SUP. = %.2f'%(j+1,BI[j],BS[j])
828 # calcul du nombre d'elements longi. et circonf. dans les soue-ep
829 NLX,NLY=ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,
830 DNX,DNY,RM,RC,INDSEX,INDSEY,IABSC1,IORDO1)
832 return ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY
833 ################################################################################
834 ################################################################################
835 ################################################################################
836 ################################################################################
837 # MACR_ASCOUF_MAIL ASCPRE
838 # PREPARATION DES DONNEES POUR LE MAILLAGE DE PLAQUE
840 # - CALCUL TABLEAU TRIE DES ABSCISSES ET ORDONNEES DES CENTRES
841 # - CALCUL TABLEAU DES ZONES COUVERTES PAR LES SOUS-EPAISSEURS
843 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
845 # RM = RAYON MOYEN DU COUDE
846 # RC = RAYON DE CINTRAGE DU COUDE
847 # ALPHA = ANGLE DU COUDE
848 # LT = LONGUEUR DE L EMBOUT DU COTE CHARGEMENT
849 # LGV = LONGUEUR DE L EMBOUT DU COTE CONDITIONS AUX LIMITES
850 # NBSEP = NOMBRE DE SOUS-EPAISSEURS
851 # SYME = "QUART" DE STRUCTURE, "DEMI" STRUCTURE OU BIEN "ENTIER"
853 #----------------------DONNEES RENVOYEES-----------------------
855 # NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
856 # NZONEY = NOMBRE DE ZONES LONGITUDINALES
858 def ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM):
860 ALPHAR = 2.*ALPHA*pi/360.
864 NBSEP = len(MCL_SOUS_EPAIS)
865 print 'RECHERCHE DES ZONES DE SOUS-EPAISSEURS DANS LE COUDE\n'
867 # tri des donnees sous-epaisseurs en circonferentiel
868 TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
869 # --- calcul des recouvrements de zones en circonferentiel
893 # definition de la zone courante (borne gauche, borne droite)
895 # TYPG = type de la borne:
896 # 0 : borne gauche sous-epaisseur
897 # 1 : borne droite sous-epaisseur
898 # 2 : centre sous-epaisseur
900 if j>2*NBSEP and ICE<NBSEP :
901 # cas ou il ne reste plus que des centres a caser
907 # cas ou la borne droite de la zone precedente etait un centre
911 MIND = TAMPON[j-1][0]
912 if fmod(IABSC2[j-1],2):
914 NUMD = IABSC1[IABSC2[j-1]/2]
917 NUMD = IABSC1[IABSC2[j-1]/2-1]
921 MIND = TAMPON[2*NBSEP-1][0]
923 if fmod(IABSC2[2*NBSEP-1],2):
925 NUMG = IABSC1[IABSC2[2*NBSEP-1]/2]
928 NUMG = IABSC1[IABSC2[2*NBSEP-1]/2-1]
934 if fmod(IABSC2[j-1],2):
936 NUMG = IABSC1[IABSC2[j-1]/2]
939 NUMG = IABSC1[IABSC2[j-1]/2-1]
940 if fmod(IABSC2[j],2):
942 NUMD = IABSC1[IABSC2[j]/2]
945 NUMD = IABSC1[IABSC2[j]/2-1]
946 if fabs(MING-MIND)<EPSI :
949 if j>2*NBSEP and ICE>=NBSEP:
950 break #on sort de la boucle
955 # recherche des centres a intercaler
958 # le centre est deja le meme que precedent
959 if fabs(MCL_SOUS_EPAIS[INDC-1].ISCP-MCL_SOUS_EPAIS[IABSC1[i-2]-1].ISCP) < EPSI :
962 if MCL_SOUS_EPAIS[INDC-1].ISCP < MING :
963 # le centre est la nouvelle borne gauche
968 MING = MCL_SOUS_EPAIS[INDC-1].ISCP
972 elif MCL_SOUS_EPAIS[INDC-1].ISCP < MIND :
973 # le centre est la nouvelle borne droite
974 MIND = MCL_SOUS_EPAIS[INDC-1].ISCP
982 # codes d'intervalles de zones
983 # 0 0 = zone sous-ep.
984 # 0 1 = sous-ep. a droite de la zone
985 # 1 0 = sous-ep. a gauche de la zone
986 # 1 1 = sous-ep. a droite et a gauche de la zone
988 # cas ou la premiere zone ne commence pas au bord de la plaque
989 if MING>0. and NZONEX==1 :
998 elif TYPG==1 or TYPG==2:
1001 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1011 # borne gauche zone = borne gauche ssep
1016 # borne droite zone = borne gauche ssep
1017 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1020 elif TYPD == 1 or TYPD == 2:
1021 # borne droite zone = borne droite ssep : TYPD=1
1022 # borne droite zone = centre ssep : TYPD=2
1024 LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
1025 LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
1027 DNX.append(LTMP[0][0])
1029 INDSEX.append(LTMP[0][1])
1033 # borne gauche zone = borne droite ssep
1036 # borne droite zone = borne gauche ssep
1044 # cas tordu: une sous-ep enveloppe le tout
1047 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1050 elif TYPD == 1 or TYPD == 2:
1051 # borne droite zone = borne droite ssep : TYPD=1
1052 # borne droite zone = centre ssep : TYPD=2
1055 DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
1061 # borne gauche zone = centre ssep
1065 # borne droite zone = borne gauche ssep
1066 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1069 elif TYPD == 1 or TYPD == 2:
1070 # borne droite zone = borne droite ssep : TYPD=1
1071 # borne droite zone = centre ssep : TYPD=2
1073 LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
1074 LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
1076 DNX.append(LTMP[0][0])
1078 INDSEX.append(LTMP[0][1])
1081 if j<=(2*NBSEP-2) or ICE<=NBSEP or (TYPD==2 and j<2*NBSEP):
1083 break #on retourne dans la boucle go10
1086 break #on sort definitivement
1093 if TYPD==0 or TYPD==2:
1096 DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
1107 # au cas ou 2.*pi*RM correspond a une borne d'intevalle de sous-ep ou a
1108 # un centre de sous-ep.
1109 if fabs(BG[NZONEX-1]-BD[NZONEX-1])<EPSI: NZONEX = NZONEX-1
1112 print 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. :'
1113 print '-----------------------------------------------'
1114 for j in range(NZONEX) :
1115 if INDBG[j]==0 and INDBD[j]==0 :
1116 print 'ZONE NO',j+1,'<> BORNE GAUCHE = %.2f'\
1117 ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR'%(BG[j],BD[j])
1119 print 'ZONE NO',j+1,'<> BORNE GAUCHE = %.2f'\
1120 ' / BORNE DROITE = %.2f'%(BG[j],BD[j])
1123 # --- tri des donnees sous-ep. en axial
1124 TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
1134 # calcul des zones en axial :
1135 # zones (0,bord inferieur) et (bord inferieur,centre sous-ep.)
1136 ssep = MCL_SOUS_EPAIS[0]
1138 BI.append(ssep.ISLP-ssep.ILONP/2.)
1139 BS.append(ssep.ISLP-ssep.ILONP/2.)
1140 BS.append(ssep.ISLP)
1147 DNY.append(ssep.IDENL)
1155 # calcul des recouvrements de zones en axial
1169 # definition de la zone courante (borne inf, borne sup)
1171 # typi = type de la borne
1172 # 0 : borne inf. sous-ep.
1173 # 1 : borne sup. sous-ep.
1174 # 2 : centre sous-ep.
1177 # cas ou la borne sup. de la zone prec. etait un centre
1182 if fmod(IORDO2[j-1],2):
1184 NUMS = IORDO1[IORDO2[j-1]/2]
1187 NUMS = IORDO1[IORDO2[j-1]/2-1]
1191 MINI = TAMPON[2*NBSEP-1][0]
1193 if fmod(IORDO2[2*NBSEP-1],2):
1195 NUMI = IORDO1[IORDO2[2*NBSEP-1]/2]
1198 NUMI = IORDO1[IORDO2[2*NBSEP-1]/2-1]
1204 if fmod(IORDO2[j-1],2):
1206 NUMI = IORDO1[IORDO2[j-1]/2]
1209 NUMI = IORDO1[IORDO2[j-1]/2-1]
1210 if fmod(IORDO2[j],2):
1212 NUMS = IORDO1[IORDO2[j]/2]
1215 NUMS = IORDO1[IORDO2[j]/2-1]
1216 if fabs(MINI-MINS)<EPSI:
1223 # recherche des centres a intercaler
1226 # le centre est deja le meme que le precedent
1227 if fabs(MCL_SOUS_EPAIS[INDC-1].ISLP-MCL_SOUS_EPAIS[IORDO1[i-2]-1].ISLP)<EPSI:
1230 if MCL_SOUS_EPAIS[INDC-1].ISLP<MINI:
1231 # le centre est la nouvelle borne inf.
1236 MINI = MCL_SOUS_EPAIS[INDC-1].ISLP
1240 elif MCL_SOUS_EPAIS[INDC-1].ISLP<MINS:
1241 # le centre est la nouvelle borne sup.
1242 MINS = MCL_SOUS_EPAIS[INDC-1].ISLP
1250 # code d'intervalles de zone
1251 # 0 0 = ZONE SOUS-EPAISSEUR
1252 # 0 1 = SOUS-EPAISSEUR A SUPERIEURE DE LA ZONE
1253 # 1 0 = SOUS-EPAISSEUR A INFERIEURE DE LA ZONE
1254 # 1 1 = SOUS EPAISSEUR A SUPERIEURE ET A INFERIEURE DE LA ZONE
1256 # cas ou la premiere zone ne commence pas au bord de la plaque
1257 if MINI>0. and NZONEY==1:
1267 elif TYPI==1 or TYPI==2:
1270 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1280 # borne inferieure zone = borne inferieure ssep
1285 # borne superieure zone = borne inferieur ssep
1286 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1289 elif TYPS==1 or TYPS==2:
1290 # borne superieure zone = borne superieure ssep:TYPS==1
1291 # borne superieure zone = centre ssep:TYPS==2
1293 LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
1294 LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
1296 DNY.append(LTMP[0][0])
1298 INDSEY.append(LTMP[0][1])
1301 # borne inferieure zone=borne superieure ssep
1304 # borne superieure zone = borne inferieur ssep
1312 # cas tordu: une sous-ep. enveloppe le tout
1315 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1318 elif TYPS==1 or TYPS==2:
1319 # borne superieure zone = borne superieure ssep:TYPS==1
1320 # borne superieure zone = centre ssep:TYPS==2
1323 DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
1328 # borne inferieure zone = centre ssep
1332 # borne superieure zone = borne inferieure ssep
1333 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1336 elif TYPS==1 or TYPS==2:
1337 # borne superieure zone = borne superieure ssep
1339 LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
1340 LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
1342 DNY.append(LTMP[0][0])
1344 INDSEY.append(LTMP[0][1])
1347 if j<=(2*NBSEP-2) or TYPS==2:
1349 break #on retourne dans la boucle go40
1352 break #on sort definitivement
1355 # cas ou la derniere zone ne finit pas au bout de la plaque
1359 BS.append(ALPHAR*RC)
1360 if TYPS==0 or TYPS==2:
1363 DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
1375 print 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. :'
1376 print '-----------------------------------------------'
1378 for j in range(NZONEY) :
1379 if INDBI[j]==0 and INDBS[j]==0 :
1380 print 'ZONE NO',j+1,'<> BORNE INF. = %.2f'\
1381 ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(BI[j],BS[j])
1383 print 'ZONE NO',j+1,'<> BORNE INF. = %.2f'\
1384 ' / BORNE SUP. = %.2f '%(BI[j],BS[j])
1386 # calcul du nombre d'elements longi. et circonf. dans les sous-ep
1387 NLX,NLY=ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,
1388 DNX,DNY,RM,RC,INDSEX,INDSEY,IABSC1,IORDO1)
1391 return ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY
1392 ################################################################################
1393 ################################################################################
1394 ################################################################################
1395 # MACR_ASCOUF_MAIL write_file_dgib_ASCFDO
1397 # ECRIT DANS UN FICHIER LES DONNES GIBI DE LA PROCEDURE
1401 def write_file_dgib_ASCFDO(nomFichierDATG,RM,RC,ALPHA,NBTRAN,EP1,EP2,EPI,TETA1,
1402 TETA2,LTRAN,SUREP,LTCHAR,LTCLIM,TYPBOL,AXEAP,AXECP,NT,NS,NC,
1403 SFP,ORIEN,AZIM,RC0,RC2,RC3,POSIT,EPSI,NIVMAG,SYME, loc_datg) :
1406 if TYPBOL=='CUVE' : TYPEMB = 'typcuv'
1407 if TYPBOL=='GV' : TYPEMB = 'typegv'
1408 if TYPBOL=='ASP_MPP' : TYPEMB = 'typapp'
1412 if POSIT =='DEB_INT' :
1416 if SYME[:6]=='ENTIER' : ZSYME = 'entier'
1417 elif SYME[:5]=='QUART' : ZSYME = 'quart'
1418 else : ZSYME = 'demi'
1423 texte='* DEBUT PARAMETRES UTILISATEUR\n'
1425 texte=texte+'c = '+str(C) +POIVIR
1426 texte=texte+'a = '+str(AXEAP) +POIVIR
1427 texte=texte+'nt = '+str(NT) +POIVIR
1428 texte=texte+'ns = '+str(NS) +POIVIR
1429 texte=texte+'nc = '+str(NC) +POIVIR
1430 texte=texte+'rm = '+str(RM) +POIVIR
1431 texte=texte+'rc = '+str(RC) +POIVIR
1432 texte=texte+'alphac = '+str(ALPHA) +POIVIR
1433 texte=texte+'nbtranep = '+str(NBTRAN) +POIVIR
1434 texte=texte+'ep1 = '+str(EP1) +POIVIR
1435 texte=texte+'ep2 = '+str(EP2) +POIVIR
1436 texte=texte+'epi = '+str(EPI) +POIVIR
1437 texte=texte+'teta1 = '+str(TETA1) +POIVIR
1438 texte=texte+'teta2 = '+str(TETA2) +POIVIR
1439 texte=texte+'ltran = '+str(LTRAN) +POIVIR
1440 texte=texte+'posfis = '+str(SFP) +POIVIR
1441 texte=texte+'ksiref = '+str(ORIEN) +POIVIR
1442 texte=texte+'surep = '+str(SUREP) +POIVIR
1443 texte=texte+'teta_f = '+str(TETAF) +POIVIR
1444 texte=texte+'rc0 = '+str(RC0) +POIVIR
1445 texte=texte+'rc2 = '+str(RC2) +POIVIR
1446 texte=texte+'rc3 = '+str(RC3) +POIVIR
1447 texte=texte+"pos = '"+POSIT2+"'" +POIVIR
1448 texte=texte+'lt = '+str(LTCHAR) +POIVIR
1449 texte=texte+'lgv = '+str(LTCLIM) +POIVIR
1450 texte=texte+"typembou = '"+TYPEMB+"'" +POIVIR
1451 texte=texte+"zsyme = '"+ZSYME+"'" +POIVIR
1452 texte=texte+'epsif = '+str(EPSI) +POIVIR
1453 texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
1455 texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
1456 texte=texte+'opti donn '
1457 texte=texte+"'"+loc_datg+'ascouf_fiss_v4.datg'+"';\n"
1458 fdgib=open(nomFichierDATG,'w')
1462 ################################################################################
1463 ################################################################################
1464 ################################################################################
1465 # MACR_ASCOUF_MAIL write_file_dgib_ASCSQO
1467 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1468 # "PLAQUE SOUS-EPAISSEUR"
1470 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1472 # RM = RAYON MOYEN DU COUDE
1473 # RC = RAYON DE CINTRAGE DU COUDE
1474 # ALPHA = ANGLE DU COUDE
1475 # NBTRAN = NOMBRE DE TRANSITION D'EPAISSEUR (0, 1 OU 2)
1476 # EP1 = EPAISSEUR DU COUDE (COTE EMBOUT 1 SI TRANSITION)
1477 # EP2 = EPAISSEUR DU COUDE (COTE EMBOUT 2 SI TRANSITION)
1478 # EPI = EPAISSEUR DU COUDE INTERMEDIAIRE SI TRANSITION A 2 PENTES
1479 # TETA1 = ANGLE DE LA PREMIERE TRANSITION D'EPAISSEUR EVENTUELLE
1480 # TETA2 = ANGLE DE LA DEUXIEME TRANSITION D'EPAISSEUR EVENTUELLE
1481 # LTRAN = LONGUEUR ENTRE FIN DE L'EMBOUT 1 ET DEBUT DE TRANSITION
1482 # LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
1483 # LCLIM = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
1484 # GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
1485 # SYME = "QUART" DE STRUCTURE, "DEMI" STRUCTURE OU BIEN "ENTIER"
1486 # NBEP = NOMBRE D'ELEMENTS DANS LE COUDE
1487 # NLX = NOMBRE D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR
1488 # NLY = NOMBRE D'ELEMENTS LONGI DE LA SOUS-EPAISSEUR
1490 def write_file_dgib_ASCSQO(nomFichierDATG,TYPELE,RM,RC,ALPHA,NBTRAN,EP1,EP2,
1491 EPI,TETA1,MCL_SOUS_EPAIS,TETA2,LTRAN,LTCHAR,LTCLIM,GEOM,
1492 SYME,NBEP,NLX,NLY,NIVMAG,loc_datg) :
1494 ssep= MCL_SOUS_EPAIS[0]
1496 texte=' nivmag = '+str(NIVMAG) +POIVIR
1497 texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
1499 texte=texte+'coory = table '+POIVIR
1500 texte=texte+'coorz = table '+POIVIR
1501 texte=texte+'prof = table '+POIVIR
1502 texte=texte+'posit = table '+POIVIR
1503 texte=texte+'axisym = table '+POIVIR
1504 texte=texte+'axecir = table '+POIVIR
1505 texte=texte+'axelon = table '+POIVIR
1506 texte=texte+'sousep = table '+POIVIR
1507 texte=texte+'coorzc = table '+POIVIR
1508 texte=texte+'axelonc = table '+POIVIR
1510 texte=texte+'* DEBUT PARAMETRES UTILISATEUR\n'
1512 texte=texte+'* parametres generaux\n'
1514 texte=texte+' pirad = '+str(pi) +POIVIR
1515 texte=texte+' rm = '+str(RM) +POIVIR
1516 texte=texte+' rc = '+str(RC) +POIVIR
1517 texte=texte+' alpha = '+str(ALPHA) +POIVIR
1518 texte=texte+' lt1 = '+str(LTCHAR) +POIVIR
1519 texte=texte+' lt2 = '+str(LTCLIM) +POIVIR
1520 texte=texte+' nbtranep = '+str(NBTRAN) +POIVIR
1521 texte=texte+' ep1 = '+str(EP1) +POIVIR
1522 texte=texte+' ep2 = '+str(EP2) +POIVIR
1523 texte=texte+' epI = '+str(EPI) +POIVIR
1524 texte=texte+' teta1 = '+str(TETA1) +POIVIR
1525 texte=texte+' teta2 = '+str(TETA2) +POIVIR
1526 texte=texte+' ltran = '+repr(LTRAN) +POIVIR
1528 texte=texte+" zcoude = 'oui' "+POIVIR
1530 texte=texte+" zcoude = 'non' "+POIVIR
1531 if SYME == 'ENTIER':
1532 texte=texte+" zsyme = 'entier' "+POIVIR
1533 elif SYME == 'QUART':
1534 texte=texte+" zsyme = 'quart' "+POIVIR
1536 texte=texte+" zsyme = 'demi' "+POIVIR
1537 if TYPELE == 'CU20':
1538 texte=texte+" zquad = 'oui' "+POIVIR
1540 texte=texte+" zquad = 'non' "+POIVIR
1542 texte=texte+' nxep = '+str(NBEP) +POIVIR
1544 texte=texte+'* Caracteristiques de la sous-epaisseur\n'
1546 texte=texte+' tysep = '+str(ssep.ICIRP) +POIVIR
1547 texte=texte+' tzsep = '+str(ssep.ILONP) +POIVIR
1548 texte=texte+' prof . 1 = '+str(ssep['PROFONDEUR']) +POIVIR
1549 texte=texte+' ycsep = '+str(SCP-pi*RM) +POIVIR
1550 texte=texte+' theta = '+str(ssep.IPHIC) +POIVIR
1551 texte=texte+' zcsep = '+repr(ssep.ISLP) +POIVIR
1553 texte=texte+" posit . 1 = '"+str(ssep['SOUS_EPAIS'].lower())+"'"+POIVIR
1554 texte=texte+' nby = '+str(int(NLX[0])) +POIVIR
1555 texte=texte+' nbz = '+str(int(NLY[0])) +POIVIR
1556 texte=texte+' nbxse = '+str(ssep['NB_ELEM_RADI']) +POIVIR
1557 texte=texte+' axelonc . 1 = '+str(ssep['AXE_LONGI'])+POIVIR
1558 if ssep['POSI_CURV_LONGI']!=None:
1559 texte=texte+' coorzc . 1 = '+repr(ssep['POSI_CURV_LONGI'])+POIVIR
1561 DZC=ssep.BETA*pi*(RC+(RM+EP1/2.)*cos(pi/2.))/180.
1562 texte=texte+' coorzc . 1 = '+repr(DZC)+POIVIR
1563 if ssep['TYPE']=='AXIS':
1564 texte=texte+" zaxis = 'oui' "+POIVIR
1566 texte=texte+" zaxis = 'non' "+POIVIR
1567 if ssep['EMPREINTE'] == 'OUI':
1568 texte=texte+" sousep . 1 = 'oui'"+POIVIR
1570 texte=texte+" sousep . 1 = 'non'"+POIVIR
1572 texte=texte+'* FIN PARAMETRES UTILISATEUR \n'
1573 texte=texte+'opti donn '
1574 texte=texte+"'"+loc_datg+'ascouf_ssep_mono_v1.datg'+"'"+POIVIR
1575 fdgib=open(nomFichierDATG,'w')
1578 ################################################################################
1579 ################################################################################
1580 ################################################################################
1581 # MACR_ASCOUF_MAIL write_subpart_file_pgib_POST
1583 # APPELEE DANS : write_file_pgib_ASCSQ2 , write_file_pgib_ASCSD2
1584 # DEFINIE UNE CHAINE DE CARACTERES UTILISEE LORS DE L'ECRITURE DU
1585 # FICHIER GIBI DE POST-TRAITEMENTS
1587 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1589 # NLX = NOMBRE D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR
1590 # NLY = NOMBRE D'ELEMENTS LONGI DE LA SOUS-EPAISSEUR
1592 #-----------------DONNEE RENVOYEE PAR ASTER--------------------
1594 # texte = chaine de caracteres contenant des instructions gibi
1595 # de post-traitements
1597 def write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY):
1598 CAR3 = ('fdro','exdr','extr','exga','fgau','inga','intr','indr')
1601 texte='* DEBUT POINTS DE POST-TRAITEMENT\n'
1604 for ssep in MCL_SOUS_EPAIS:
1607 texte=texte+'* sous-epaisseur No '+str( issep)+'\n'
1609 if ssep['TYPE'] == 'ELLI':
1611 texte=texte+'* plans circonf longi et colonne centrale \n'
1613 texte=texte+'pcirc'+str( issep)+' = circo .'+str(issep).rjust(4)+POIVIR
1614 texte=texte+'plong'+str( issep)+' = longi .'+str(issep).rjust(4)+POIVIR
1615 texte=texte+'pcent'+str( issep)+' = centr .'+str(issep).rjust(4)+POIVIR
1617 texte=texte+'* ligaments tous les 45 degres a epaisseur minimale \n'
1619 texte=texte+'isep = '+str( issep)+POIVIR
1621 texte=texte+'ilig = '+str(k+1)+POIVIR
1622 texte=texte+'rlig = ilig/10. + isep'+POIVIR
1623 texte=texte+str(CAR3[k])+str( issep)+' = lig45 . rlig'+POIVIR
1624 if ssep['TYPE'] == 'ELLI':
1626 texte=texte+"* ligaments circonferentiels a l'epaisseur minimale\n"
1628 texte=texte+'isep = '+str(issep)+POIVIR
1629 for k in range(2*NLX[issep-1]+1):
1630 texte=texte+'ilig = '+str(k+1)+POIVIR
1631 texte=texte+'rlig = ilig/100. + isep'+POIVIR
1632 texte=texte+'cir'+str(issep)+'_'+str(k+1)+' = ligcir . rlig'+POIVIR
1634 texte=texte+"* ligaments longitudinaux a l'epaisseur minimale\n"
1636 for k in range(2*NLY[issep-1]+1):
1637 texte=texte+'ilig = '+str(k+1)+POIVIR
1638 texte=texte+'rlig = ilig/100. + isep'+POIVIR
1639 texte=texte+'lon'+str(issep)+'_'+str(k+1)+' = liglon . rlig'+POIVIR
1640 texte=texte+'* FIN POINTS DE POST-TRAITEMENT\n'
1643 ################################################################################
1644 ################################################################################
1645 ################################################################################
1646 # MACR_ASCOUF_MAIL write_file_pgib_ASCSQ2
1648 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1649 # "PLAQUE SOUS-EPAISSEURS"
1650 # IL S'AGIT DE LA DEUXIEME PARTIE ( APRES LES DONNEES UTILISATEUR )
1653 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1655 # NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
1656 # NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
1658 def write_file_pgib_ASCSQ2(MCL_SOUS_EPAIS,NLX,NLY):
1660 texte=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
1662 texte=texte+'p1 = 0. 0. (-1.*lt1)'+POIVIR
1663 texte=texte+'p2 = 0. 0. (coor 3 bou3)'+POIVIR
1664 texte=texte+'ma = coude et p1 et p2'+POIVIR
1665 texte=texte+"opti sauv form 'fort.8'"+POIVIR
1666 texte=texte+'sort ma'+POIVIR
1667 texte=texte+'sauv form ma'+POIVIR
1668 texte=texte+'fin'+POIVIR
1669 fpgib=open('fort.71','w')
1673 ################################################################################
1674 ################################################################################
1675 ################################################################################
1676 # MACR_ASCOUF_MAIL write_file_pgib_ASCSP1
1678 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1679 # "PLAQUE SOUS-EPAISSEURS"
1680 # IL S'AGIT DE LA PREMIERE PARTIE ( AVANT LES DONNEES UTILISATEUR )
1683 def write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg):
1686 texte=' nivmag = '+str(NIVMAG)+POIVIR
1687 texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0 '+POIVIR
1689 texte=texte+'bg = table '+POIVIR
1690 texte=texte+'bd = table '+POIVIR
1691 texte=texte+'bi = table '+POIVIR
1692 texte=texte+'bs = table '+POIVIR
1693 texte=texte+'indbg = table '+POIVIR
1694 texte=texte+'indbd = table '+POIVIR
1695 texte=texte+'indbi = table '+POIVIR
1696 texte=texte+'indbs = table '+POIVIR
1697 texte=texte+'axecir = table '+POIVIR
1698 texte=texte+'axelon = table '+POIVIR
1699 texte=texte+'axelonc = table '+POIVIR
1700 texte=texte+'coorzc = table '+POIVIR
1701 texte=texte+'prof = table '+POIVIR
1702 texte=texte+'posit = table '+POIVIR
1703 texte=texte+'coory = table '+POIVIR
1704 texte=texte+'coorz = table '+POIVIR
1705 texte=texte+'deny = table '+POIVIR
1706 texte=texte+'nbely = table '+POIVIR
1707 texte=texte+'denz = table '+POIVIR
1708 texte=texte+'nbelz = table '+POIVIR
1709 texte=texte+'axisym = table '+POIVIR
1710 texte=texte+'sousep = table '+POIVIR
1712 texte=texte+'opti donn '
1713 texte=texte+"'"+loc_datg+'ascouf_ssep_mult_v1.datg'+"';\n"
1714 fdgib=open(nomFichierDATG,'w')
1718 ################################################################################
1719 ################################################################################
1720 ################################################################################
1721 # MACR_ASCOUF_MAIL write_file_pgib_ASCSDO
1723 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1724 # "PLAQUE SOUS-EPAISSEURS"
1726 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1728 # RM = RAYON MOYEN DU COUDE
1729 # RC = RAYON DE CINTRAGE DU COUDE
1730 # ALPHA = ANGLE DU COUDE
1731 # EP = EPAISSEUR DU COUDE
1732 # LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
1733 # LCLIM = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
1734 # GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
1735 # SYME = QUART DE STRUCTURE SI 'OUI'
1736 # INDBG = INDICATEUR BORD GAUCHE DE LA ZONE CIRCONF J
1737 # INDBD = INDICATEUR BORD DROIT DE LA ZONE CIRCONF J
1738 # BG = ABSCISSE DU BORD GAUCHE DE LA ZONE CIRCONF J
1739 # BD = ABSCISSE DU BORD DROIT DE LA ZONE CIRCONF J
1740 # BI = ORDONNEE DU BORD INFERIEUR DE LA ZONE LONGI J
1741 # BS = ORDONNEE DU BORD SUPERIEUR DE LA ZONE LONGI J
1742 # INDBI = INDICATEUR BORD INFERIEUR DE LA ZONE LONGI J
1743 # INDBS = INDICATEUR BORD SUPERIEUR DE LA ZONE LONGI J
1744 # INDSEX = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE CIRCONF J
1745 # INDSEY = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE LONGI J
1746 # DNX = DENSITE ET NOMBRE D'ELEMENTS CIRCONF. DE LA ZONE J
1747 # DNY = DENSITE ET NOMBRE D'ELEMENTS LONGIT. DE LA ZONE J
1748 # NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
1749 # NZONEY = NOMBRE DE ZONES LONGITUDINALES
1751 def write_file_pgib_ASCSDO(RM,RC,ALPHA,EP,LTCLIM,LTCHAR,NBEP,
1752 NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,
1753 DNX,DNY,MCL_SOUS_EPAIS,GEOM,SYME):
1760 if 0<ceil(x)-x<=0.5:
1763 return int(floor(x))
1765 # conversion des densites de raffinement des embout en degres par rapport
1766 # a l'angle du coude
1767 RTMP=nint(LTCHAR/DELTAY)*DELTAY/4.
1768 DENSTU = RTMP*360./(2.*pi*RC)
1773 texte='* DEBUT PARAMETRES UTILISATEUR \n'
1775 texte=texte+'* parametres generaux\n'
1777 texte=texte+'rm = '+str(RM) +POIVIR
1778 texte=texte+'rc = '+str(RC) +POIVIR
1779 texte=texte+'alphac = '+str(ALPHA) +POIVIR
1780 texte=texte+'epc = '+str(EP) +POIVIR
1781 texte=texte+'pirad = '+str(pi) +POIVIR
1782 texte=texte+'lgv = '+str(LTCLIM) +POIVIR
1783 texte=texte+'lt = '+str(LTCHAR) +POIVIR
1784 texte=texte+'lcoude = '+str(ALPHA*pi/180.*RC) +POIVIR
1786 texte=texte+"zcoude = 'oui' " +POIVIR
1788 texte=texte+"zcoude = 'non' " +POIVIR
1789 if SYME == 'ENTIER':
1790 texte=texte+"zsyme = 'entier' " +POIVIR
1791 elif SYME == 'QUART':
1792 texte=texte+"zsyme = 'quart' " +POIVIR
1794 texte=texte+"zsyme = 'demi' " +POIVIR
1795 texte=texte+'nxep = '+str(NBEP) +POIVIR
1796 texte=texte+'nzt = '+str(NZT) +POIVIR
1797 texte=texte+'nzgv = '+str(NZGV) +POIVIR
1798 texte=texte+'daxhtu = '+str(DENSTU) +POIVIR
1799 texte=texte+'daxhgv = '+str(DENSGV) +POIVIR
1802 texte=texte+'* Zones couvertes en circonference\n'
1804 for j in range(NZONEX):
1805 texte=texte+'bg .' +str(j+1).rjust(23)+' = '+str(BG[j]-pi*RM) +POIVIR
1806 texte=texte+'bd .' +str(j+1).rjust(23)+' = '+str(BD[j]-pi*RM) +POIVIR
1807 texte=texte+'indbg .'+str(j+1).rjust(23)+' = '+str(INDBG[j]) +POIVIR
1808 texte=texte+'indbd .'+str(j+1).rjust(23)+' = '+str(INDBD[j]) +POIVIR
1809 texte=texte+'deny .' +str(j+1).rjust(23)+' = '+str(DNX[2*j]) +POIVIR
1810 texte=texte+'nbely .'+str(j+1).rjust(23)+' = '+str(int(DNX[2*j+1])) +POIVIR
1813 texte=texte+'* Zones couvertes longitudinalement\n'
1815 for j in range(NZONEY):
1816 texte=texte+'bi .' +str(j+1).rjust(23)+' = '+str(BI[j]) +POIVIR
1817 texte=texte+'bs .' +str(j+1).rjust(23)+' = '+str(BS[j]) +POIVIR
1818 texte=texte+'indbi .'+str(j+1).rjust(23)+' = '+str(INDBI[j]) +POIVIR
1819 texte=texte+'indbs .'+str(j+1).rjust(23)+' = '+str(INDBS[j]) +POIVIR
1820 texte=texte+'denz .' +str(j+1).rjust(23)+' = '+str(DNY[2*j]) +POIVIR
1821 texte=texte+'nbelz .'+str(j+1).rjust(23)+' = '+str(int(DNY[2*j+1])) +POIVIR
1824 texte=texte+'* Caracteristiques des sous-epaisseurs\n'
1827 for ssep in MCL_SOUS_EPAIS:
1829 texte=texte+'axecir .' +str(issep).rjust(23)+' = '+str(ssep.ICIRP) +POIVIR
1830 texte=texte+'axelon .' +str(issep).rjust(23)+' = '+str(ssep.ILONP) +POIVIR
1831 texte=texte+'prof .' +str(issep).rjust(23)+' = '+str(ssep['PROFONDEUR'])+POIVIR
1832 texte=texte+'coory .' +str(issep).rjust(23)+' = '+str(ssep.ISCP-pi*RM) +POIVIR
1833 texte=texte+'coorz .' +str(issep).rjust(23)+' = '+str(ssep.ISLP) +POIVIR
1834 texte=texte+'posit .' +str(issep).rjust(23)+" = '"+str(ssep['SOUS_EPAIS'].lower())+"'"+POIVIR
1835 texte=texte+'axelonc .'+str(issep).rjust(23)+' = '+str(ssep['AXE_LONGI']) +POIVIR
1836 if ssep['POSI_CURV_LONGI']!=None:
1837 texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(ssep['POSI_CURV_LONGI'])+POIVIR
1839 DZC=ssep.BETA*pi*(RC+(RM+EP/2.)*cos(pi/2.))/180.
1840 texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(DZC)+POIVIR
1841 if ssep['TYPE']=='AXIS':
1842 texte=texte+'axisym .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
1844 texte=texte+'axisym .'+str(issep).rjust(23)+" = 'non'"+POIVIR
1845 if ssep['EMPREINTE'] == 'OUI':
1846 texte=texte+'sousep .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
1848 texte=texte+'sousep .'+str(issep).rjust(23)+" = 'non'"+POIVIR
1850 texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
1851 fpgib=open('fort.71','w')
1857 ################################################################################
1858 ################################################################################
1859 ################################################################################
1861 def write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY):
1865 texte=texte+'coude extube bord1 clgv bord2 peauext peauint placoude platube\n'
1866 texte=texte+'plagv longi circo centr bou1 bou3 ligmed ligtub liggv lig45\n'
1867 texte=texte+'ligcir liglon bordtu\n'
1868 texte=texte+'= PLAQSEP bg bd bi bs indbg indbd indbi indbs rm rc\n'
1869 texte=texte+'alphac pirad epc lt lgv coory coorz axecir axelon prof zsyme posit\n'
1870 texte=texte+'lcoude nxep sousep deny nbely denz nbelz axelonc coorzc axisym\n'
1871 texte=texte+'daxhtu daxhgv nzt nzgv zcoude'+POIVIR
1872 texte=texte+'fdromi = ligmed . 1'+POIVIR
1873 texte=texte+'exdrmi = ligmed . 2'+POIVIR
1874 texte=texte+'extrmi = ligmed . 3'+POIVIR
1875 texte=texte+'exgami = ligmed . 4'+POIVIR
1876 texte=texte+'fgaumi = ligmed . 5'+POIVIR
1877 texte=texte+'ingami = ligmed . 6'+POIVIR
1878 texte=texte+'intrmi = ligmed . 7'+POIVIR
1879 texte=texte+'indrmi = ligmed . 8'+POIVIR
1880 texte=texte+'fdrotu = ligtub . 1'+POIVIR
1881 texte=texte+'exdrtu = ligtub . 2'+POIVIR
1882 texte=texte+'extrtu = ligtub . 3'+POIVIR
1883 texte=texte+'exgatu = ligtub . 4'+POIVIR
1884 texte=texte+'fgautu = ligtub . 5'+POIVIR
1885 texte=texte+'ingatu = ligtub . 6'+POIVIR
1886 texte=texte+'intrtu = ligtub . 7'+POIVIR
1887 texte=texte+'indrtu = ligtub . 8'+POIVIR
1888 texte=texte+"si (ega zsyme 'entier')"+POIVIR
1889 texte=texte+' fdrogv = liggv . 1'+POIVIR
1890 texte=texte+' exdrgv = liggv . 2'+POIVIR
1891 texte=texte+' extrgv = liggv . 3'+POIVIR
1892 texte=texte+' exgagv = liggv . 4'+POIVIR
1893 texte=texte+' fgaugv = liggv . 5'+POIVIR
1894 texte=texte+' ingagv = liggv . 6'+POIVIR
1895 texte=texte+' intrgv = liggv . 7'+POIVIR
1896 texte=texte+' indrgv = liggv . 8'+POIVIR
1897 texte=texte+'finsi'+POIVIR
1900 text2=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
1904 texte=texte+'*oeil = 10000. 0. 0.' +POIVIR
1905 texte=texte+'*trac oeil cach coude'+POIVIR
1906 texte=texte+'*opti donn 5' +POIVIR
1907 texte=texte+'p1 = 0. 0. (-1.*lt)'+POIVIR
1908 texte=texte+'p2 = 0. 0. (coor 3 bou3)'+POIVIR
1909 texte=texte+'ma = coude et p1 et p2'+POIVIR
1910 texte=texte+'sort ma'+POIVIR
1911 texte=texte+'neu = nbno ma'+POIVIR
1912 texte=texte+"mess 'nombre de noeuds : 'neu"+POIVIR
1913 texte=texte+"opti sauv form 'fort.8'"+POIVIR
1914 texte=texte+'sauv form ma'+POIVIR
1915 texte=texte+'fin'+POIVIR
1916 fpgib=open('fort.71','a')
1920 ################################################################################
1921 ################################################################################
1922 ################################################################################
1924 def write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP,SUREP,
1925 LTCLIM,LTCHAR,NBEP,loc_datg):
1929 NZC=int((ALPHA+0.00001)/5.)
1932 DENEXT=int(LTCHAR/DELTAY)*DELTAY/4.
1937 if TYPBOL=='CUVE' : TYPEMB = 'typcuv'
1938 if TYPBOL=='GV' : TYPEMB = 'typegv'
1939 if TYPBOL=='ASP_MPP' : TYPEMB = 'typapp'
1944 texte='* DEBUT PARAMETRES UTILISATEUR\n'
1946 texte=texte+'* Parametres generaux\n'
1948 texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
1949 texte=texte+'option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
1950 texte=texte+'rm = '+str(RM) +POIVIR
1951 texte=texte+'rc = '+str(RC) +POIVIR
1952 texte=texte+'alphac = '+str(ALPHA) +POIVIR
1953 texte=texte+'epc = '+str(EP) +POIVIR
1954 texte=texte+'surep = '+str(SUREP) +POIVIR
1955 texte=texte+'lgv = '+str(LTCLIM) +POIVIR
1956 texte=texte+'lt = '+str(LTCHAR) +POIVIR
1957 texte=texte+"typembou = '"+TYPEMB+"'" +POIVIR
1958 texte=texte+'nx = '+str(NBEP) +POIVIR
1959 texte=texte+'ny = '+str(NY) +POIVIR
1960 texte=texte+"pos = 'bidon'" +POIVIR
1961 texte=texte+'l1 = 0.' +POIVIR
1962 texte=texte+'lbloc = 0.' +POIVIR
1963 texte=texte+'crit = 0.0001' +POIVIR
1964 texte=texte+'crit2 = 0.01' +POIVIR
1965 texte=texte+'epsit = 1.e-3' +POIVIR
1966 texte=texte+'pirad = '+str(pi) +POIVIR
1967 texte=texte+'nzc = '+str(NZC) +POIVIR
1968 texte=texte+'teta_f = '+str(pi/2.) +POIVIR
1969 texte=texte+'zpp31 = '+str(CZ) +POIVIR
1970 texte=texte+'daxbtu = '+str(DENEXT) +POIVIR
1971 texte=texte+'daxhtu = '+str(DELTAZ) +POIVIR
1972 texte=texte+'daxbgv = '+str(DELTAZ) +POIVIR
1973 texte=texte+'daxhgv = '+str(DENEXT) +POIVIR
1974 texte=texte+'nzt = '+str(NZT) +POIVIR
1975 texte=texte+'nzgv = '+str(NZGV) +POIVIR
1977 texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
1978 texte=texte+'opti donn '
1979 texte=texte+"'"+loc_datg+'ascouf_regl_v1.datg'+"';\n"
1980 fdgib=open(nomFichierDATG,'w')
1984 ################################################################################
1985 ################################################################################
1986 ################################################################################
1987 def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
1988 SOUS_EPAIS_COUDE,SOUS_EPAIS_MULTI,
1989 FISS_COUDE,IMPRESSION,INFO,**args):
1991 Ecriture de la macro MACR_ASCOUF_MAIL
1993 from Accas import _F
1999 # On importe les definitions des commandes a utiliser dans la macro
2000 EXEC_LOGICIEL =self.get_cmd('EXEC_LOGICIEL')
2001 PRE_GIBI =self.get_cmd('PRE_GIBI')
2002 LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
2003 DEFI_GROUP =self.get_cmd('DEFI_GROUP')
2004 MODI_MAILLAGE =self.get_cmd('MODI_MAILLAGE')
2005 AFFE_MODELE =self.get_cmd('AFFE_MODELE')
2006 CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
2007 DEFI_FICHIER =self.get_cmd('DEFI_FICHIER')
2008 IMPR_RESU =self.get_cmd('IMPR_RESU')
2010 # La macro compte pour 1 dans la numerotation des commandes
2015 NIVMAG = EXEC_MAILLAGE['NIVE_GIBI']
2018 CAR3 = ('IFDRO','IEXDR','IEXTR','IEXGA','IFGAU','IINGA','IINTR','IINDR')
2019 CAR4 = ('NOFDRO','NOEXDR','NOEXTR','NOEXGA','NOFGAU','NOINGA','NOINTR','NOINDR')
2020 CAR5 = ('NEFDRO','NEEXDR','NEEXTR','NEEXGA','NEFGAU','NEINGA','NEINTR','NEINDR')
2021 CAR6 = ('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR')
2022 SECT = ('MI','TU','GV')
2025 ################################################################################
2026 # --- caracteristiques du coude ---
2027 ################################################################################
2029 GEOM =COUDE['TRANSFORMEE']
2030 ALPHA =COUDE['ANGLE']
2031 RC =COUDE['R_CINTR']
2032 LTCHAR =COUDE['L_TUBE_P1']
2033 LTCLIM =COUDE['L_TUBE_P2']
2034 NBEP =COUDE['NB_ELEM_EPAIS']
2039 if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
2040 SUREP=COUDE['SUR_EPAIS']
2041 TYPBOL =COUDE['BOL_P2']
2042 DEXT = COUDE['DEXT']
2043 EP1 = COUDE['EPAIS']
2052 if COUDE['SYME']!='ENTIER':
2053 print ' <MACR_ASCOUF_MAIL> les quart et demi structure'
2054 print ' <MACR_ASCOUF_MAIL> ne peuvent etre realisees '
2055 print ' <MACR_ASCOUF_MAIL> sur un modele comportant une transition '
2056 print ' <MACR_ASCOUF_MAIL> d epaisseur '
2057 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2061 DEXT = COUDE['DEXT_T1']
2062 EP1 = COUDE['EPAIS_T1']
2063 EP2 = COUDE['EPAIS_T2']
2064 TETA1 = COUDE['ANGL_TETA1']
2067 if COUDE['ANGL_TETA2']!=None :
2069 TETA2 = COUDE['ANGL_TETA2']
2070 EPI = COUDE['EPAIS_TI']
2072 if COUDE['ABSC_CURV_TRAN']!=None :
2073 LTRAN = COUDE['ABSC_CURV_TRAN']
2075 LTRAN = COUDE['POSI_ANGU_TRAN']* RC * pi / 180.0
2078 RM2 = RM + (EP2-EP1)/2.0
2083 if COUDE['SYME']!='ENTIER' and (LTCHAR!=LTCLIM) :
2084 print ' <MACR_ASCOUF_MAIL> les deux embouts doivent etre'
2085 print ' <MACR_ASCOUF_MAIL> de meme longueur pour les cas de symetrie '
2086 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2090 LAMOR = 3.0/2.0 * sqrt( RM*RM*RM / EP1)
2092 print ' <MACR_ASCOUF_MAIL> longueur d embout P1 inferieure'
2093 print ' <MACR_ASCOUF_MAIL> a la longueur d amortissement = ',LAMOR
2094 print ' <A> <MACR_ASCOUF_MAIL> alarme'
2096 LAMOR = 3.0/2.0 * sqrt( RM2*RM2*RM2 / EP2)
2098 print ' <MACR_ASCOUF_MAIL> longueur d embout P2 inferieure'
2099 print ' <MACR_ASCOUF_MAIL> a la longueur d amortissement = ',LAMOR
2100 print ' <A> <MACR_ASCOUF_MAIL> alarme'
2103 if TYPBOL[:1]=='GV' :
2104 print ' <MACR_ASCOUF_MAIL> la condition aux limites raccord'
2105 print ' <MACR_ASCOUF_MAIL> 3d-poutre appliquee avec la macro de calcul'
2106 print ' <MACR_ASCOUF_MAIL> ascouf n est pas licite avec un embout'
2107 print ' <MACR_ASCOUF_MAIL> de type conique'
2108 print ' <A> <MACR_ASCOUF_MAIL> alarme'
2110 ################################################################################
2111 # --- caracteristiques de la fissure ---
2112 ################################################################################
2114 if FISS_COUDE!=None:
2116 print ' <MACR_ASCOUF_MAIL> le nombre d elements dans l epaisseur'
2117 print ' <MACR_ASCOUF_MAIL> du coude n est pas parametrable pour'
2118 print ' <MACR_ASCOUF_MAIL> un coude avec fissure'
2119 print ' <MACR_ASCOUF_MAIL> mot-cle NB_ELEM_EPAIS ignore'
2120 print ' <A> <MACR_ASCOUF_MAIL> alarme'
2121 FPROF = FISS_COUDE['PROFONDEUR']
2122 FAXI = FISS_COUDE['AXIS']
2123 if FAXI=='NON' and FISS_COUDE['LONGUEUR']==None :
2124 print ' <MACR_ASCOUF_MAIL> pour les fissures non axisymetriques'
2125 print ' <MACR_ASCOUF_MAIL> la longueur doit etre specifiee '
2126 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2129 if FAXI=='OUI' and FISS_COUDE['LONGUEUR']!=None :
2130 print ' <MACR_ASCOUF_MAIL> la fissure est axisymetrique : on ne'
2131 print ' <MACR_ASCOUF_MAIL> tient pas compte de la longueur specifiee'
2132 print ' <A> <MACR_ASCOUF_MAIL> alarme'
2133 if FISS_COUDE['LONGUEUR']!=None : FLONG = FISS_COUDE['LONGUEUR']
2135 #### on prend une marge de securite a cause des modifs dans ascfis
2136 FLONG = 2.0 * pi * (RM + EP1)
2137 if FISS_COUDE['ABSC_CURV']!=None :
2138 SF = FISS_COUDE['ABSC_CURV']
2143 BETA = FISS_COUDE['POSI_ANGUL']
2144 LDEFAU = BETA * RC * pi / 180.0
2145 AZIM = FISS_COUDE['AZIMUT']
2146 ORIEN = FISS_COUDE['ORIEN']
2147 POSIT = FISS_COUDE['FISSURE']
2148 NT = FISS_COUDE['NB_TRANCHE']
2149 NS = FISS_COUDE['NB_SECTEUR']
2150 NC = FISS_COUDE['NB_COURONNE']
2151 if FISS_COUDE['RAYON_TORE']!=None : RC0 = FISS_COUDE['RAYON_TORE']
2153 if FISS_COUDE['COEF_MULT_RC2']!=None : RC2 = FISS_COUDE['COEF_MULT_RC2']
2155 if FISS_COUDE['COEF_MULT_RC3']!=None : RC3 = FISS_COUDE['COEF_MULT_RC3']
2157 EPSI = FISS_COUDE['ANGL_OUVERTURE']
2163 if ORIEN!=90.0 and NBTRAN!=0 :
2164 print ' <MACR_ASCOUF_MAIL> avec une transition d epaisseur'
2165 print ' <MACR_ASCOUF_MAIL> la fissure doit obligatoirement etre transverse '
2166 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2169 if ORIEN!=90.0 and NBTRAN!=0 :
2170 print ' <MACR_ASCOUF_MAIL> avec une transition d epaisseur'
2171 print ' <MACR_ASCOUF_MAIL> la fissure doit obligatoirement etre transverse '
2172 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2175 if ORIEN!=90.0 and COUDE['SYME']!='ENTIER' :
2176 print ' <MACR_ASCOUF_MAIL> l orientation de la fissure doit'
2177 print ' <MACR_ASCOUF_MAIL> etre transverse (orien : 90.) pour modeliser '
2178 print ' <MACR_ASCOUF_MAIL> un quart ou une demi structure '
2179 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2182 if ORIEN!=90.0 and FAXI=='OUI' :
2183 print ' <MACR_ASCOUF_MAIL> la fissure est axisymetrique : son'
2184 print ' <MACR_ASCOUF_MAIL> orientation doit etre transverse (ORIEN : 90.)'
2185 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2189 ################################################################################
2190 # --- caracteristiques des sous epaisseurs ---
2191 ################################################################################
2194 MCL_SOUS_EPAIS = None
2195 if SOUS_EPAIS_MULTI!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_MULTI
2196 if SOUS_EPAIS_COUDE!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_COUDE
2197 if SOUS_EPAIS_MULTI!=None and NBTRAN!=0 :
2198 print ' <MACR_ASCOUF_MAIL> il ne peut pas y avoir plusieurs'
2199 print ' <MACR_ASCOUF_MAIL> sous-epaisseurs en meme temps qu une'
2200 print ' <MACR_ASCOUF_MAIL> transition d epaisseur : si une seule'
2201 print ' <MACR_ASCOUF_MAIL> sous-epaisseur utiliser sous_epais_coude'
2202 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2205 if SOUS_EPAIS_COUDE!=None and FISS_COUDE!=None and NBTRAN!=0 :
2206 print ' <MACR_ASCOUF_MAIL> avec une transition d epaisseur'
2207 print ' <MACR_ASCOUF_MAIL> il doit obligatoirement y avoir un defaut'
2208 print ' <MACR_ASCOUF_MAIL> soit une fissure soit une sous-epaisseur'
2209 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2212 if MCL_SOUS_EPAIS!=None :
2214 if MCL_SOUS_EPAIS.__class__.__name__ !='MCList' : MCL_SOUS_EPAIS=[MCL_SOUS_EPAIS,]
2215 if len(MCL_SOUS_EPAIS)!=1 and COUDE['SYME']!='ENTIER' :
2216 print ' <MACR_ASCOUF_MAIL> ne modeliser qu une seule'
2217 print ' <MACR_ASCOUF_MAIL> sous-epaisseur pour un quart ou demi-coude'
2218 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2221 for ssep in MCL_SOUS_EPAIS :
2223 if ssep['AXE_CIRC']!=None and ssep['TYPE']=='AXIS' :
2224 print ' <MACR_ASCOUF_MAIL> vous ne pouvez declarer la sous-'
2225 print ' <MACR_ASCOUF_MAIL> epaisseur comme axisymetrique et donner'
2226 print ' <MACR_ASCOUF_MAIL> une taille d axe circonferentiel'
2227 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2230 if ssep['AXE_CIRC']==None and ssep['TYPE']=='ELLI' :
2231 print ' <MACR_ASCOUF_MAIL> vous devez donner une taille d axe'
2232 print ' <MACR_ASCOUF_MAIL> circonferentiel pour une sous-epaisseur de'
2233 print ' <MACR_ASCOUF_MAIL> type elliptique'
2234 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2237 if ssep['POSI_CURV_LONGI']!=None:
2238 if ssep['POSI_CURV_LONGI']>(ALPHA*RC*pi/180.0) :
2239 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2240 print ' <MACR_ASCOUF_MAIL> sous-epaisseur numero :',isep
2241 print ' <MACR_ASCOUF_MAIL> abscisse curv. longit. :',ssep['POSI_CURV_LONGI']
2242 print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',(ALPHA*RC*pi/180.0)
2243 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2246 LDEFAU = ssep['POSI_CURV_LONGI'] + ssep['AXE_LONGI']/2.0
2249 BETA=ssep['POSI_ANGUL']
2250 if (BETA<0.) or (BETA>ALPHA) :
2251 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2252 print ' <MACR_ASCOUF_MAIL> sous-epaisseur numero :',isep
2253 print ' <MACR_ASCOUF_MAIL> position angulaire centre sous-ep :',BETA
2254 print ' <MACR_ASCOUF_MAIL> valeur limite autorisee :',ALPHA
2255 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2258 LDEFAU = (BETA*RC*pi/180.0) + ssep['AXE_LONGI']/2.0
2260 if ssep['POSI_CURV_CIRC']!=None:
2261 if ssep['POSI_CURV_CIRC']>(2*pi*RM) :
2262 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2263 print ' <MACR_ASCOUF_MAIL> sous-epaisseur numero :',isep
2264 print ' <MACR_ASCOUF_MAIL> abscisse curv. circonf. :',ssep['POSI_CURV_CIRC']
2265 print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',(2*pi*RM)
2266 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2269 if ssep['POSI_CURV_CIRC']!=(pi*RM) and ssep['TYPE']=='AXIS':
2270 print ' <MACR_ASCOUF_MAIL> le centre d une sous-epaisseur'
2271 print ' <MACR_ASCOUF_MAIL> axisymetrique est impose en intrados (pi*RM)'
2272 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2276 ssep.IPHIC=ssep['AZIMUT']
2277 if ssep['AZIMUT']!=180. and ssep['TYPE']=='AXIS':
2278 print ' <MACR_ASCOUF_MAIL> le centre d une sous-epaisseur'
2279 print ' <MACR_ASCOUF_MAIL> axisymetrique est impose en intrados'
2280 print ' <MACR_ASCOUF_MAIL> l azimut est fixe a 180 degres'
2281 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2284 # l_ITYPE.append(ssep['TYPE' ])
2285 # l_ICIRC.append(ssep['AXE_CIRC' ])
2286 # l_ILONC.append(ssep['AXE_LONGI' ])
2287 # l_IPROC.append(ssep['PROFONDEUR' ])
2288 # l_ISLC.append( ssep['POSI_CURV_LONGI'])
2289 # l_IBETC.append(BETA)
2291 # l_ISCC.append( ssep['POSI_CURV_CIRC' ])
2292 # l_IPHIC.append(ssep['AZIMUT' ])
2293 # l_IPOS.append( ssep['SOUS_EPAIS' ])
2294 # l_INBEL.append(ssep['NB_ELEM_LONGI' ])
2295 # l_INBEC.append(ssep['NB_ELEM_CIRC' ])
2296 # l_IEVID.append(ssep['EMPREINTE' ])
2298 if SOUS_EPAIS_COUDE!=None and COUDE['NB_ELEM_EPAIS']!=3 :
2299 print ' <MACR_ASCOUF_MAIL> le nombre d elements dans l'
2300 print ' <MACR_ASCOUF_MAIL> epaisseur du coude n est pas parametrable pour'
2301 print ' <MACR_ASCOUF_MAIL> la version 2 de la procedure de plaque avec sous'
2302 print ' <MACR_ASCOUF_MAIL> -epaisseur : mot-cle NB_ELEM_EPAIS ignore'
2303 print ' <A> <MACR_ASCOUF_MAIL> alarme'
2305 ################################################################################
2306 # --- verifications de coherences ---
2307 ################################################################################
2310 if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
2311 if SUREP<0. or SUREP>(RM-EP1/2.0):
2312 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2313 print ' <MACR_ASCOUF_MAIL> surepaisseur :',SUREP
2314 print ' <MACR_ASCOUF_MAIL> valeur limite autorisee (RM-EP1/2) :',(RM-EP1/2.0)
2315 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2318 if RC<=(RM+EP1/2.0):
2319 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2320 print ' <MACR_ASCOUF_MAIL> le rayon de cintrage :',RC
2321 print ' <MACR_ASCOUF_MAIL> doit etre superieur a (RM+EP1/2) :',(RM+EP1/2.0)
2322 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2328 if FISS_COUDE!=None:
2329 if (RM/EP1)<5. or (RM/EP1)>12.:
2330 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite (5,12)'
2331 print ' <MACR_ASCOUF_MAIL> rapport RM/EP1 :',(RM/EP1)
2332 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2335 if FISS_COUDE['ABSC_CURV']!=None:
2336 if SF<0. or SF>(ALPHA*RC*pi/180.0) :
2337 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2338 print ' <MACR_ASCOUF_MAIL> abscisse curviligne centre fissure :',SF
2339 print ' <MACR_ASCOUF_MAIL> valeur limite autorisee :',(ALPHA*RC*pi/180.0)
2340 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2343 if (NT-2*(NT/2))!=0:
2344 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2345 print ' <MACR_ASCOUF_MAIL> nombre de tranches :',NT
2346 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2349 if FISS_COUDE['ABSC_CURV'] and ((BETA<0.) or (BETA>ALPHA)):
2350 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2351 print ' <MACR_ASCOUF_MAIL> position angulaire centre fissure :',BETA
2352 print ' <MACR_ASCOUF_MAIL> posi_angul doit etre >= 0 et <= ',ALPHA
2353 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2357 # transition d epaisseur
2360 LCOUDE = ALPHA * RC * pi / 180.0
2362 if (LTRAN<LDEFAU) and (LTRAN>LCOUDE) :
2363 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2364 print ' <MACR_ASCOUF_MAIL> debut transition d epaisseur :',LTRAN
2365 print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',LDEFAU
2366 print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',LCOUDE
2367 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2370 if (TETA1<0.) or (TETA1>30.) :
2371 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2372 print ' <MACR_ASCOUF_MAIL> angle de transition TETA1 :',TETA1
2373 print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',0.
2374 print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',30.
2375 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2379 # transition d epaisseur a une pente
2382 if (EP1<12.) or (EP1>80.) :
2383 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2384 print ' <MACR_ASCOUF_MAIL> epaisseur avant la transition :',EP1
2385 print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',12.
2386 print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',80.
2387 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2390 if (EP2<20.) or (EP2>110.) :
2391 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2392 print ' <MACR_ASCOUF_MAIL> epaisseur apres la transition :',EP2
2393 print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',20.
2394 print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',110.
2395 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2399 print ' <MACR_ASCOUF_MAIL> l epaisseur avant la transition'
2400 print ' <MACR_ASCOUF_MAIL> doit etre inferieure '
2401 print ' <MACR_ASCOUF_MAIL> a celle apres la transition'
2402 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2405 LTRANF = LTRAN + ((EP2-EP1)/(tan(TETA1)))
2406 if (LTRANF>LCOUDE) :
2407 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2408 print ' <MACR_ASCOUF_MAIL> fin transition d epaisseur :',LTRANF
2409 print ' <MACR_ASCOUF_MAIL> valeur limite autorisee :',LCOUDE
2410 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2413 if DEXT<112. or DEXT>880. :
2414 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2415 print ' <MACR_ASCOUF_MAIL> diam ext du tube avant transition:',DEXT
2416 print ' <MACR_ASCOUF_MAIL> valeur minimum autorisee :',112.
2417 print ' <MACR_ASCOUF_MAIL> valeur maximum autorisee :',880.
2418 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2422 # transition d epaisseur a une pente
2425 if (TETA2<0.) or (TETA2>45.) :
2426 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2427 print ' <MACR_ASCOUF_MAIL> angle de transition TETA2 :',TETA2
2428 print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',0.
2429 print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',45.
2430 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2433 if (EP1<7.) or (EP1>35.) :
2434 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2435 print ' <MACR_ASCOUF_MAIL> epaisseur avant 1ere transition :',EP1
2436 print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',7.
2437 print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',35.
2438 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2441 if (EP2<15.) or (EP2>40.) :
2442 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2443 print ' <MACR_ASCOUF_MAIL> epaisseur avant 2eme transition :',EP2
2444 print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',15.
2445 print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',40.
2446 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2449 if (EPI<15.) or (EPI>40.) :
2450 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2451 print ' <MACR_ASCOUF_MAIL> epaisseur intermediaire :',EPI
2452 print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',15.
2453 print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',40.
2454 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2458 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2459 print ' <MACR_ASCOUF_MAIL> l epaisseur avant la transition'
2460 print ' <MACR_ASCOUF_MAIL> doit etre inferieure a l epaisseur intermediaire'
2461 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2465 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2466 print ' <MACR_ASCOUF_MAIL> l epaisseur apres la transition'
2467 print ' <MACR_ASCOUF_MAIL> doit etre inferieure a l epaisseur intermediaire'
2468 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2471 LTRANF = LTRAN + (EPI-EP1)/(tan(TETA1))
2472 LTRANF = LTRANF + (EP2-EPI)/(tan(TETA2))
2473 if (LTRANF>LCOUDE) :
2474 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2475 print ' <MACR_ASCOUF_MAIL> fin transition d epaisseur :',LTRANF
2476 print ' <MACR_ASCOUF_MAIL> valeur limite autorisee :',LCOUDE
2477 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2480 if (DEXT<77.) or (DEXT>355.) :
2481 print ' <MACR_ASCOUF_MAIL> valeur hors domaine de validite'
2482 print ' <MACR_ASCOUF_MAIL> diam ext du tube avant transition:',LTRANF
2483 print ' <MACR_ASCOUF_MAIL> valeur minimale autorisee :',77.
2484 print ' <MACR_ASCOUF_MAIL> valeur maximale autorisee :',355.
2485 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> erreur donnees ")
2489 ################################################################################
2490 # --- calcul taille initiale des defauts sur la plaque ---
2491 ################################################################################
2494 if FISS_COUDE!=None:
2495 DSF=(FISS_COUDE['ABSC_CURV']!=None)
2496 AXEAP,AXECP,SFP = ASCFIS(ALPHA, RM, RC, EP1, SUREP, GEOM, FPROF,
2497 DGAXEC, AZIM, POSIT, SF, DSF, BETA, ORIEN)
2498 elif MCL_SOUS_EPAIS!=None :
2499 ier= ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP1,GEOM,SYME)
2500 for ssep in MCL_SOUS_EPAIS:
2501 ssep.IDENL = ssep.ILONP/ssep['NB_ELEM_LONGI']*180./(pi*RC)
2502 ssep.IDENC = ssep.ICIRP/ssep['NB_ELEM_CIRC']*180./(pi*RM)
2504 # quart de structure
2505 ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY\
2506 = ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM)
2508 # demi-structure ou entiere
2509 ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY\
2510 = ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM)
2513 loc_gibi=aster.repout()
2514 logiel = EXEC_MAILLAGE['LOGICIEL' ]
2515 UNITD = EXEC_MAILLAGE['UNITE_DATG']
2516 UNITP = EXEC_MAILLAGE['UNITE_MGIB']
2517 if logiel=='GIBI98' : logiel = loc_gibi+'gibi98'
2518 elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000'
2520 self.cr.fatal("<F> <MACR_ASCOUF_MAIL> seuls gibi98 et gibi2000 sont appelableS")
2524 # --- ecriture sur le fichier .datg de la procedure ---
2526 # Nom du fichier de commandes pour GIBI
2527 nomFichierDATG = 'fort.'+str(UNITD)
2528 # Nom du fichier de maillage GIBI
2529 nomFichierGIBI = 'fort.'+str(UNITP)
2530 loc_datg = aster.repdex()
2532 if FISS_COUDE!=None:
2533 # procedure coude fissure (MOT-CLE FISS_COUDE)
2534 write_file_dgib_ASCFDO(nomFichierDATG,RM,RC,ALPHA,NBTRAN,EP1,EP2,EPI,TETA1,
2535 TETA2,LTRAN,SUREP,LTCHAR,LTCLIM,TYPBOL,AXEAP,AXECP,NT,NS,NC,SFP,
2536 ORIEN,AZIM,RC0,RC2,RC3,POSIT,EPSI,NIVMAG,SYME,loc_datg)
2537 elif MCL_SOUS_EPAIS!=None :
2538 if SOUS_EPAIS_MULTI==None :
2539 # procedure coude sous-ep.: (MOT-CLE SOUS_EPAIS_COUDE)
2540 write_file_dgib_ASCSQO(nomFichierDATG,TYPELE,RM,RC,ALPHA,NBTRAN,EP1,EP2,
2541 EPI,TETA1,MCL_SOUS_EPAIS,TETA2,LTRAN,LTCHAR,LTCLIM,GEOM,
2542 SYME,NBEP,NLX,NLY,NIVMAG,loc_datg)
2543 write_file_pgib_ASCSQ2(MCL_SOUS_EPAIS,NLX,NLY)
2545 # procedure coude sous-ep.:(MOT-CLE SOUS_EPAIS_MULTI)
2546 write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg)
2547 write_file_pgib_ASCSDO(RM,RC,ALPHA,EP1,LTCLIM,LTCHAR,NBEP,
2548 NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,
2549 DNX,DNY,MCL_SOUS_EPAIS,GEOM,SYME)
2550 write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY)
2552 # procedure coude regle
2553 write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP1,SUREP,
2554 LTCLIM,LTCHAR,NBEP,loc_datg)
2558 EXEC_LOGICIEL( LOGICIEL = logiel ,
2559 ARGUMENT = ( _F(NOM_PARA=nomFichierDATG),
2560 _F(NOM_PARA=nomFichierGIBI), ), )
2564 if SYME == 'QUART' : self.DeclareOut('nomres',self.sd)
2566 nomres=LIRE_MAILLAGE(INFO=INFO)
2572 l_CREA_GROUP_NO.append('BORD1')
2573 l_CREA_GROUP_NO.append('CLGV')
2574 l_CREA_GROUP_NO.append('BORD2')
2575 l_CREA_GROUP_NO.append('PEAUINT')
2576 l_CREA_GROUP_NO.append('PEAUEXT')
2578 # cas des fissures axisymetriques
2579 if FISS_COUDE!=None:
2580 if FISS_COUDE['AXIS']=='OUI':
2581 motscles['CREA_GROUP_MA']=[]
2582 motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
2584 POSITION = 'INIT' , ),)
2586 # conversion des groupes de mailles en groupes du bloc fissure
2587 if FISS_COUDE!=None:
2588 if SYME == 'ENTIER':
2589 l_CREA_GROUP_NO.append('NOLIG1')
2590 l_CREA_GROUP_NO.append('FACE1')
2591 l_CREA_GROUP_NO.append('NOLIG2')
2592 l_CREA_GROUP_NO.append('FACE2')
2593 l_CREA_GROUP_NO.append('FONDFISS')
2595 motscles['CREA_GROUP_NO']=[]
2596 motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=tuple(l_CREA_GROUP_NO)))
2598 # conversion des groupes de mailles en groupes de noeuds pour les
2599 # ligaments des sous-ep.
2600 if MCL_SOUS_EPAIS!=None:
2602 for ssep in MCL_SOUS_EPAIS:
2604 if ssep['TYPE']=='ELLI':
2605 for k in range(2*NLX[issep-1]+1):
2606 chtmp=str(issep)+'_'+str(k+1)
2609 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2611 motscles['CREA_GROUP_NO'].append(_F(NOM = 'IPCEN'+str(issep),
2612 GROUP_MA = 'PCENT'+str(issep),),)
2613 for k in range(2*NLY[issep-1]+1):
2614 chtmp=str(issep)+'_'+str(k+1)
2617 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2619 for k in range(2*NLX[issep-1]+1):
2620 chtmp=str(issep)+'_'+str(k+1)
2624 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2625 INTERSEC = ('PEAUEXT',ch1),),)
2626 motscles['CREA_GROUP_NO'].append(_F(NOM = ch3,
2627 INTERSEC = ('PEAUINT',ch1),),)
2628 motscles['CREA_GROUP_NO'].append(_F(NOM = 'OPCEN'+str(issep),
2629 INTERSEC = ('PEAUEXT','IPCEN'+str(issep),),),)
2630 motscles['CREA_GROUP_NO'].append(_F(NOM = 'EPCEN'+str(issep),
2631 INTERSEC = ('PEAUINT','IPCEN'+str(issep),),),)
2632 for k in range(2*NLY[issep-1]+1):
2633 chtmp=str(issep)+'_'+str(k+1)
2637 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2638 INTERSEC = ('PEAUEXT',ch1),),)
2639 motscles['CREA_GROUP_NO'].append(_F(NOM = ch3,
2640 INTERSEC = ('PEAUINT',ch1),),)
2641 for k in range(2*NLX[issep-1]+1):
2642 chtmp=str(issep)+'_'+str(k+1)
2647 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2650 GROUP_NO_ORIG = ch3,
2651 GROUP_NO_EXTR = ch4,
2653 CRITERE = CRITER,),)
2654 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2655 NOM = 'PCENT'+str(issep),
2656 GROUP_NO = 'IPCEN'+str(issep),
2657 GROUP_NO_ORIG = 'OPCEN'+str(issep),
2658 GROUP_NO_EXTR = 'EPCEN'+str(issep),
2660 CRITERE = CRITER,),)
2661 for k in range(2*NLY[issep-1]+1):
2662 chtmp=str(issep)+'_'+str(k+1)
2667 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2670 GROUP_NO_ORIG = ch3,
2671 GROUP_NO_EXTR = ch4,
2673 CRITERE = CRITER,),)
2674 # 1/ noms intermediaires des groupes de noeuds representant les ligaments
2675 # des sections: TU,MI,GV et sous-ep.
2677 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR3[k]+str(issep),
2678 GROUP_MA = CAR6[k]+str(issep),),)
2681 if SYME == 'ENTIER' or k!=2:
2683 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR3[j]+SECT[k],
2684 GROUP_MA = CAR6[j]+SECT[k],),)
2686 # 2/ determination et nommage des noeuds origine et extremite des groupes de noeuds
2687 # representant les ligaments de la ou des sections: sous-ep.
2689 for ssep in MCL_SOUS_EPAIS:
2692 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR4[k]+str(issep),
2693 INTERSEC = ('PEAUEXT',CAR3[k]+str(issep),),),)
2694 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR5[k]+str(issep),
2695 INTERSEC = ('PEAUINT',CAR3[k]+str(issep),),),)
2696 # 3/ nommage final des groupes de noeuds representant les ligaments
2697 # de la ou des sections: sous-ep.
2699 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2700 NOM = CAR6[k]+str(issep),
2701 GROUP_NO = CAR3[k]+str(issep),
2702 GROUP_NO_ORIG = CAR4[k]+str(issep),
2703 GROUP_NO_EXTR = CAR5[k]+str(issep),
2705 CRITERE = CRITER,),)
2707 # 4/ determination et nommage des noeuds origine et extremite des groupes de noeuds
2708 # representant les ligaments des sections: TU,MI,GV
2710 if SYME == 'ENTIER' or k!=2:
2712 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR4[j]+SECT[k],
2713 INTERSEC = ('PEAUEXT',CAR3[j]+SECT[k],),),)
2714 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR5[j]+SECT[k],
2715 INTERSEC = ('PEAUINT',CAR3[j]+SECT[k],),),)
2716 # 5/ nommage final des groupes de noeuds representant les ligaments des sections: TU,MI,GV
2718 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2719 NOM = CAR6[j]+SECT[k],
2720 GROUP_NO = CAR3[j]+SECT[k],
2721 GROUP_NO_ORIG = CAR4[j]+SECT[k],
2722 GROUP_NO_EXTR = CAR5[j]+SECT[k],
2724 CRITERE = CRITER,),)
2727 nomres=DEFI_GROUP(reuse =nomres,
2732 if FISS_COUDE!=None:
2733 # creation des groupes petit axe et grand axe fissure par
2734 # intersection de groupes existants
2736 motscles['CREA_GROUP_NO']=[]
2739 if POSIT == 'DEB_INT':
2740 l_peau.append('PEAUINT')
2742 l_peau.append('PEAUEXT')
2744 if SYME == 'ENTIER' :
2745 l_intersec.append('FACE1')
2746 motscles['CREA_GROUP_NO'].append(_F(NOM = 'P_AXE_1',
2747 INTERSEC = ('NOLIG1','FACE1'),),)
2748 motscles['CREA_GROUP_NO'].append(_F(NOM = 'G_AXE_1',
2749 INTERSEC = tuple(l_peau+l_intersec),),)
2751 l_intersec.append('FACE2')
2752 motscles['CREA_GROUP_NO'].append(_F(NOM = 'P_AXE_2',
2753 INTERSEC = ('NOLIG2','FACE2'),),)
2754 motscles['CREA_GROUP_NO'].append(_F(NOM = 'G_AXE_2',
2755 INTERSEC = tuple(l_peau+l_intersec),),)
2757 nomres=DEFI_GROUP(reuse =nomres,
2762 __MODELE=AFFE_MODELE( MAILLAGE=nomres,
2763 AFFE=_F( GROUP_MA = 'COUDE' ,
2764 PHENOMENE = 'MECANIQUE' ,
2765 MODELISATION = '3D' , )
2771 motscles['TUBE_COUDE']=[]
2772 motscles['TUBE_COUDE'].append(_F(ANGLE=ALPHA,
2775 motscles['PLAQ_TUBE']=[]
2777 D_PLAQ_TUBE['DEXT']=DEXT
2778 D_PLAQ_TUBE['EPAIS']=EP1
2779 D_PLAQ_TUBE['L_TUBE_P1']=LTCHAR
2780 if SYME == 'QUART' : D_PLAQ_TUBE['COUTURE']='NON'
2781 if FISS_COUDE!=None:
2782 D_PLAQ_TUBE['AZIMUT']=AZIM
2783 elif SOUS_EPAIS_COUDE!=None :
2784 D_PLAQ_TUBE['AZIMUT']=MCL_SOUS_EPAIS[0].IPHIC
2786 motscles['PLAQ_TUBE'].append(_F(**D_PLAQ_TUBE),)
2787 nomres=MODI_MAILLAGE( reuse =nomres,
2793 motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE'),)
2794 if FISS_COUDE!=None:
2795 if FISS_COUDE['FISSURE'] == 'DEB_INIT':
2796 motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE','FACE1','FACE2'),)
2797 nomres=MODI_MAILLAGE(reuse =nomres,
2804 self.DeclareOut('nomre2',self.sd)
2806 motscles['CREA_POI1']=[]
2807 motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P1',
2810 motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P2',
2812 nomre2=CREA_MAILLAGE( MAILLAGE=nomres,
2819 if IMPRESSION!=None:
2820 if IMPRESSION.__class__.__name__ !='MCList' : IMPRESSION =[IMPRESSION,]
2821 for impr in IMPRESSION :
2824 if impr['FORMAT']=='IDEAS' : motscles['VERSION'] =impr['VERSION']
2825 if impr['FORMAT']=='CASTEM' : motscles['NIVE_GIBI'] =impr['NIVE_GIBI']
2826 if impr['UNITE']!=None : motscles['UNITE'] =impr['UNITE']
2827 impr_resu = _F( MAILLAGE = nomre2,)
2829 IMPR_RESU( RESU = impr_resu,
2830 FORMAT= impr['FORMAT'],**motscles)