1 #@ MODIF macr_ascouf_mail_ops Macro DATE 21/11/2007 AUTEUR MACOCCO K.MACOCCO
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2004 EDF R&D WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
9 # (AT YOUR OPTION) ANY LATER VERSION.
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
26 # protection pour eficas
29 from Utilitai.Utmess import UTMESS
33 # ------------------------------------------------------------------------------
34 def ASCFON(RC,RM,EP,ORIEN,AZIM,AXEC,POS,Y):
37 OU CC EST LA TAILLE DE LA FISSURE SUR LE COUDE
38 ET CP LA TAILLE DE FISSURE SUR LA PLAQUE
40 AZIMR = AZIM*2.*pi/360.
41 if POS=='DEB_INT': X = RM-EP/2.
43 if abs(ORIEN-45.0)<0.01: SIG = 1.
45 f_ASCFON = - SIG*X*RC/(2.*RM*sin(AZIMR)) * ( \
46 log ( RM/X+RM/RC*(cos(AZIMR)- \
47 sin(AZIMR)*SIG*Y/(sqrt(2.)*RM)) + \
48 sqrt( 1.+( RM/X+RM/RC*(cos(AZIMR)- \
49 sin(AZIMR)*SIG*Y/(sqrt(2.)*RM)) )**2 ) \
51 - log ( RM/X+RM/RC*cos(AZIMR) \
52 + sqrt( 1. +(RM/X+RM/RC*cos(AZIMR))**2) \
54 - SIG*X*RC/(2.*RM*SIN(AZIMR)) * \
55 ( ( RM/X+RM/RC* ( cos(AZIMR)- \
56 sin(AZIMR)*SIG*Y/(sqrt(2.0)*RM) ) \
57 ) * sqrt( 1. + ( RM/X+RM/RC*(cos(AZIMR)- \
58 sin(AZIMR)*SIG*Y/(SQRT(2.)*RM)) )**2 ) \
59 - ( RM/X+RM/RC*COS(AZIMR) ) \
60 * sqrt( 1. +(RM/X+RM/RC*cos(AZIMR))**2) \
65 # ------------------------------------------------------------------------------
66 def ASCFIS(ALPHA, RM, RC, EP, SUREP, GEOM, AXEA,
67 AXEC, AZIM, POS, SF, DSF, BETA, ORIEN):
69 MACR_ASCOUF_MAIL ASCFIS
70 taille initiale du defaut fissure sur la plaque en
71 fonction des donnees sur le coude ou le tube suivant la
72 transformation choisie
74 ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
76 ALPHA = ANGLE DU COUDE
77 RM = RAYON MOYEN DU COUDE
78 RC = RAYON DE CINTRAGE DU COUDE
79 EP = EPAISSEUR DU COUDE
80 SUREP = VALEUR DE LA SUREPAISSEUR
81 GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
82 AXEA = PROFONDEUR FISSURE (DEMI PETIT AXE)
83 AXEC = DEMI GRAND AXE FISSURE
84 AZIM = POSITION AZIMUTALE DU CENTRE DE LA FISSURE
85 POS = POSITION EN PEAU (EXTERNE OU INTERNE)
86 SF = ABCISSE CURVILIGNE LONGITUDINALE DU CENTRE DE LA FISSURE
87 DSF = BOOLEEN EXPRESSION POSITION CENTRE FISSURE
88 BETA = POSITION ANGULAIRE DU CENTRE DE LA FISSURE
89 ORIEN = ORIENTATION DE LA FISSURE
91 -----------------DONNEES RENVOYEES-----------------------
93 AXEAP = PROFONDEUR DE LA FISSURE (PETIT AXE) SUR LA PLAQUE
94 AXECP = LONGUEUR DE LA FISSURE (GRAND AXE) SUR LA PLAQUE
95 SFP = ABCISSE CURVILIGNE LONGITUDINALE CENTRE FISSURE
99 from Utilitai import funct_root
100 echo_mess=['MACR_ASCOUF_MAIL ASCFIS \n',]
102 if (AZIM>=120.) and (AZIM<=240.0): X = RM-EP/2.0 - SUREP
105 AZIMR = AZIM*2.0*pi/360.0
107 # -- CALCUL COTE AXIALE DU CENTRE FISSURE SUR LA PLAQUE EN FONCTION
108 # DE L ABSCISSE CURVILIGNE DONNEE SUR LE COUDE OU DE LA POSITION
112 if GEOM=='COUDE': SFP = SF/(1.0+X/RC*cos(AZIMR))
115 BETAR = BETA*2.0*pi/360.0
117 SF = BETAR*(RC+X*cos(AZIMR))
118 SFP = SF/(1.0+X/RC*cos(AZIMR))
122 if (GEOM=='COUDE'): echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR COUDE : %.2f \n'%SF)
123 if (GEOM=='TUBE') : echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR TUBE : %.2f \n'%SF )
124 echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%SFP)
126 # ON ENVISAGE LE CAS OU UNE PARTIE DE L AXE EST DANS LES
127 # DROITES DES EMBOUTS. LA TRANSFORMATION N EST FAITE QUE SUR LA
128 # PARTIE RESTANT DANS LE COUDE.
130 if (GEOM=='COUDE'): DIST = ALPHA*2.0*pi/360.0*(RC+X*cos(AZIMR))
131 else : DIST = ALPHA*2.0*pi/360.0*RC
135 # -- FISSURE LONGITUDINALE (0 DEGRE)
144 elif (BINF>=0. and BSUP<=DIST):
146 elif abs(ORIEN-90.)<0.01:
147 # -- FISSURE CIRCONFERENTIELLE (90 DEGRES)
156 elif (BINF>=0. and BSUP<=DIST):
159 # -- FISSURE A +/- 45 DEGRES SUR INTRADOS OU EXTRADOS
160 BSUP = SF + sqrt(2.0)/2.0*AXEC
161 BINF = SF - sqrt(2.0)/2.0*AXEC
163 BCOUD = (DIST - BINF)*sqrt(2.0)
164 BEMB = (BSUP - DIST)*sqrt(2.0)
166 BCOUD = BSUP *sqrt(2.0)
167 BEMB = abs(BINF)*sqrt(2.0)
168 elif (BINF>=0. and BSUP<=DIST):
170 echo_mess.append( 'PARTIE DU GRAND AXE DANS LE COUDE : %.2f \n'%BCOUD)
171 echo_mess.append( 'PARTIE DU GRAND AXE DANS L EMBOUT : %.2f \n'%BEMB)
173 # -- CALCUL DE LA TAILLE DU GRAND AXE FISSURE SUR LA PLAQUE
177 # -- FISSURE LONGITUDINALE (0 DEGRE)
178 if GEOM=='COUDE': AXECP = BCOUD/(1.0+X/RC*cos(AZIMR)) + BEMB
179 else : AXECP = BCOUD + BEMB
180 elif abs(ORIEN-90.)<0.01:
181 # -- FISSURE CIRCONFERENTIELLE (90 DEGRES)
182 AXECP = (BCOUD+BEMB)*RM/X
185 # ------- TRANSFORMATION COUDE
186 if AZIM in (0.,180.):
187 # -- FISSURE A +/- 45 DEGRES SUR INTRADOS OU EXTRADOS
188 AXECP = BCOUD*RM*sqrt(2.)/( X*sqrt(1.+(RM/X+RM/RC*cos(AZIMR))**2) )+\
189 BEMB*sqrt( (1.0+(X/RM)**2)*0.5 )
191 # -- FISSURE A +/- 45 DEGRES AILLEURS
192 AXECP = funct_root.root(ASCFON,(BCOUD-1.,BCOUD+1.))
193 AXECP = AXECP + BEMB*sqrt( (1.+(X/RM)**2)*0.5 )
194 AXECC = ASCFON(AXECP)+BCOUD
197 AXECP = (BCOUD+BEMB)*sqrt( (1.+(X/RM)**2)*0.5 )
202 echo_mess.append( 'TAILLE GRAND AXE COUDE DONNE : %.2f \n'%(2.*AXEC))
204 echo_mess.append( 'TAILLE GRAND AXE TUBE DONNE : %.2f \n'%(2.*AXEC))
205 echo_mess.append( 'TAILLE GRAND AXE PLAQUE DEDUIT : %.2f \n'%AXECP)
207 echo_mess.append( 'METHODE DE NEWTON FISSURE A 45 DEGRES --> \n')
208 echo_mess.append( 'TAILLE GRAND AXE COUDE RECALCULE : %.2f \n'%AXECC)
209 if GEOM=='COUDE' and BEMB>0. and BSUP>DIST :
210 SFP = ALPHA*2.*pi*RC/360. - AXECP/2. + BEMB
211 echo_mess.append( 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT \n')
212 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%SFP)
213 if GEOM=='COUDE' and BEMB>0. and BINF<0. :
214 SFP = + AXECP/2. - BEMB
215 echo_mess.append( 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT \n')
216 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%SFP)
218 # -- CORRECTION DU PETIT AXE DE LA FISSURE QUAND CELLE-CI SE TROUVE SUR
219 # LA ZONE DE SUREPAISSEUR
221 ALPHAR = ALPHA*2.*pi/360.
222 ZSUR1 = ALPHAR*RC/10.
223 ZSUR2 = ALPHAR*RC*9./10.
224 YFISS = (AZIMR-pi/2.)*RM
226 if (AZIM>=120.) and (AZIM<=240.):
227 if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = 1.
228 elif (SFP<=ZSUR1): MU = SFP/ZSUR1
229 elif (SFP>ZSUR2): MU = (ALPHAR*RC-SFP)/ZSUR1
230 elif (AZIM>=90.) and (AZIM<=120.):
231 if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = YFISS/(pi/6.*RM)
232 elif (SFP<=ZSUR1): MU = YFISS*SFP/(pi/6.*RM*ZSUR1)
233 elif (SFP>ZSUR2): MU = YFISS*(ALPHAR*RC-SFP)/(pi/6.*RM*ZSUR1)
234 elif (AZIM>=240.) and (AZIM<=270.):
235 if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = (YFISS-5.*pi/6.*RM)/(pi/6.*RM)
236 elif (SFP<=ZSUR1): MU = (YFISS-5.*pi/6.*RM)*SFP/(pi/6.*RM*ZSUR1)
237 elif (SFP>ZSUR2): MU = (YFISS-5.*pi/6.*RM)*(ALPHAR*RC-SFP)/(pi/6.*RM*ZSUR1)
240 AXEAP = AXEA * EP / ( EP + MU*SUREP )
241 echo_mess.append( '--> CORRECTION DUE A LA SUREPAISSEUR \n' )
242 echo_mess.append( '--> TAILLE PETIT AXE PLAQUE : %.2f \n'%AXEAP )
245 texte_final=string.join(echo_mess)
246 aster.affiche('MESSAGE',texte_final)
247 return AXEAP,AXECP,SFP
250 # ------------------------------------------------------------------------------
251 def ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP,GEOM,SYME):
253 MACR_ASCOUF_MAIL ASCSEP
254 taille initiale sur la plaque des sous-epaisseurs
256 ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
258 ALPHA = ANGLE DU COUDE
259 RM = RAYON MOYEN DU COUDE
260 RC = RAYON DE CINTRAGE DU COUDE
261 EP = EPAISSEUR DU COUDE
262 GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
263 SYME = QUART DE STRUCTURE SI 'OUI'
268 echo_mess=['MACR_ASCOUF_MAIL ASCSEP \n',]
270 # --- BOUCLE SUR L ENSEMBLE DES SOUS-EPAISSEURS
273 for ssep in MCL_SOUS_EPAIS :
275 echo_mess.append( '-------------------------------------\n')
276 echo_mess.append( 'SOUS-EPAISSEUR NUMERO %d\n'%i)
277 echo_mess.append( '-------------------------------------\n')
279 # --- CAS DES SOUS-EPAISSEURS AXISYMETRIQUES
281 if ssep['TYPE']=='AXIS':
282 echo_mess.append( 'SOUS-EPAISSEUR AXISYMETRIQUE : \n')
283 echo_mess.append( 'CALCUL DE LA TAILLE LONGI ENVELOPPE EN INTRADOS (AZIMUT PI)\n')
284 ssep.ICIRP = 2.*pi*RM
290 # -- CALCUL DE L ABSCISSE CURVILIGNE CIRCONF.SUR LA PLAQUE
291 # EN FONCTION DE L AZIMUT OU DE L ABSCISSE CURVIL.CIRCONF
292 # SUR LE COUDE DU CENTRE DE LA SOUS-EPAISSEUR
293 # NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
295 if ssep['POSI_CURV_CIRC']!=None:
296 ssep.ISCP = ssep['POSI_CURV_CIRC']*RM/(RM+EP/2.)
298 ssep.IPHIC = ssep['POSI_CURV_CIRC']/(RM+EP/2.)*180./pi
299 echo_mess.append( 'AZIMUT CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f \n'%ssep.IPHIC)
301 ssep.ISCP = ssep['AZIMUT']*pi*RM/180.
302 AZIMC = ssep['AZIMUT']*pi/180.
303 echo_mess.append( 'ABSC. CURV. CIRCONF. CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f \n'%(AZIMC*(RM+EP/2.)))
305 # PASSAGE DANS LE REPERE PLAQUE (0,2PI) AVEC ORIGINE FLANC DROIT
306 # CAR L ORIGINE DES DONNEES CIRCONF. EST EN EXTRADOS
308 if ssep.ISCP>(3.*pi*RM/2.): ssep.ISCP = ssep.ISCP - 3.*pi*RM/2.
309 else: ssep.ISCP = ssep.ISCP + pi*RM/2.
310 echo_mess.append( 'ABSC. CURV. CIRCONF. CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISCP)
312 # -- CALCUL DE LA TAILLE CIRCONFERENTIELLE
313 # NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
315 ssep.ICIRP = ssep['AXE_CIRC']*(RM/(RM+EP/2.))
316 if ssep.ICIRP>(2.*pi*RM) :
317 texte_final=string.join(echo_mess)
318 aster.affiche("MESSAGE",texte_final)
319 message= ' ASCSEP valeur hors domaine \n'
320 message=message+' sous-epaisseur numero : %d \n'%i
321 message=message+' taille axe circonferentiel : %.2f \n'%ssep.ICIRP
322 message=message+' bord plaque : %.2f \n'%2*pi*RM
323 UTMESS('F', "MACR_ASCOUF_MAIL", message)
324 echo_mess.append( 'TAILLE CIRCONFERENTIELLE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ICIRP)
325 echo_mess.append( '<=> TAILLE EQUIVALENTE SUR LA CIRCONFERENCE (DEGRES) : %.2f \n'%(ssep.ICIRP*360./(2.*pi*RM)))
328 # -- CALCUL COTE AXIALE DU CENTRE SOUS-EPAISSEUR SUR LA PLAQUE
329 # EN FONCTION DE L ABSCISSE CURVILIGNE DONNEE SUR LE COUDE
330 # OU DE LA POSITION ANGULAIRE
331 # NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
333 if ssep['POSI_CURV_LONGI']!=None:
335 ssep.ISLP = ssep['POSI_CURV_LONGI']/(1.+(RM+EP/2.)/RC*cos(AZIMC))
337 echo_mess.append( 'ANGLE COUDE CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f \n'%(AZIML*180./pi))
339 ssep.ISLP = ssep['POSI_CURV_LONGI']
340 if (SYME in ('QUART','DEMI')) and (ssep.ISLP!=ALPHA*CG*RC/2.) :
341 texte_final=string.join(echo_mess)
342 aster.affiche("MESSAGE",texte_final)
343 message= ' ASCSEP cas de symetrie :\n'
344 message=message+ ' la sous-epaisseur doit etre dans la section mediane du coude !\n'
345 UTMESS('F', "MACR_ASCOUF_MAIL", message)
348 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f \n'%((ssep.BETA)*CG*(RC+(RM+EP/2.)*cos(AZIMC))))
349 AZIML = (ssep.BETA)*CG
351 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR TUBE : %.2f \n'%((ssep.BETA)*CG*RC) )
352 ssep.ISLP = (ssep.BETA)*CG*RC
353 if (SYME in ('QUART','DEMI')) and (ssep.BETA!=ALPHA/2.) :
354 texte_final=string.join(echo_mess)
355 aster.affiche("MESSAGE",texte_final)
356 message= ' ASCSEP cas de symetrie :\n'
357 message=message+ ' la sous-epaisseur doit etre dans la section mediane du coude !\n'
358 UTMESS('F', "MACR_ASCOUF_MAIL", message)
359 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
361 # -- CALCUL DE LA TAILLE LONGITUDINALE
362 # NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
364 # ON ENVISAGE LE CAS OU UNE PARTIE DE L AXE EST DANS LES
365 # DROITES DES EMBOUTS. LA TRANSFORMATION N EST FAITE QUE SUR LA
366 # PARTIE RESTANT DANS LE COUDE.
368 if GEOM=='COUDE' : DIST = ALPHA*CG*(RC+(RM+EP/2.)*cos(AZIMC))
369 else : DIST = ALPHA*CG*RC
370 if ssep['POSI_CURV_LONGI']!=None:
371 BSUP = ssep['POSI_CURV_LONGI']+ssep['AXE_LONGI']/2.
372 BINF = ssep['POSI_CURV_LONGI']-ssep['AXE_LONGI']/2.
375 BSUP = ssep.BETA*CG*(RC+(RM+EP/2.)*cos(AZIMC))+ssep['AXE_LONGI']/2.
376 BINF = ssep.BETA*CG*(RC+(RM+EP/2.)*cos(AZIMC))-ssep['AXE_LONGI']/2.
378 BSUP = ssep.BETA*CG*RC + ssep['AXE_LONGI']/2.
379 BINF = ssep.BETA*CG*RC - ssep['AXE_LONGI']/2.
384 if BINF<0. and BSUP>DIST :
386 BEMB1 = abs(BINF) + BSUP-DIST
393 elif (BINF>=0. and BSUP<=DIST) :
394 BCOUD1 = ssep['AXE_LONGI']
395 BCOUD = BCOUD1+ BCOUD2
397 if GEOM=='COUDE' : BPLAQ = BCOUD/(1.+(RM+EP/2.)/RC*cos(AZIMC))
399 ssep.ILONP = BPLAQ+BEMB
401 ssep.ISLP = ALPHA*CG*RC - ssep.ILONP/2. + BEMB1
402 echo_mess.append( 'CORRECTION CENTRE : SOUS-EP. A CHEVAL SUR EMBOUT \n')
403 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
405 ssep.ISLP = ssep.ILONP/2. - BEMB2
406 echo_mess.append( 'CORRECTION CENTRE : SOUS-EP. A CHEVAL SUR EMBOUT \n')
407 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
408 if ssep.ISLP<0. : ssep.ISLP = 0.
409 if (ssep.ISLP>ALPHA*CG*RC) : ssep.ISLP = ALPHA*CG*RC
411 # SI LE CENTRE DE LA SOUS-EP CALCULE SUR LA PLAQUE EST DANS L EMBOUT
412 # ON CORRIGE SA POSITION EN LE METTANT A L INTERFACE SINON CA PLANTE
413 # DANS LA PROC DE MAILLAGE (A AMELIORER)
415 echo_mess.append( 'TAILLE LONGITUDINALE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ILONP)
416 echo_mess.append( '<=> TAILLE EQUIVALENTE PAR RAPPORT A L ANGLE DU COUDE (DEGRES): %.2f \n'%(ssep.ILONP*360/(2*pi*RC)))
418 texte_final=string.join(echo_mess)
419 aster.affiche('MESSAGE',texte_final)
422 # ------------------------------------------------------------------------------
423 def ASCTCI(MCL_SOUS_EPAIS,RM):
425 MACR_ASCOUF_MAIL ASCTCI
426 APPELEE DANS : ASCSYM et ASCPRE
427 CALCUL TABLEAU TRIE DES ABSCISSES DES CENTRES DE SOUS-EPAISSEURS
429 ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
431 RM = RAYON MOYEN DU COUDE
433 -----------------DONNEES RENVOYEES-----------------------
435 IABSC1 = CORRESPONDANCE ABSC. CURVI. CIRCONF. SOUS-EP. I
436 IABSC2 = CORRESPONDANCE ABSC. GAUCHE ET DROITE CIRCONF. SOUS-EP. I
437 COORXD = ABSC. DU BORD DROIT DE LA SOUS-EP I
438 COORXG = ABSC. DU BORD GAUCHE DE LA SOUS-EP I
442 # --- tri du tableau des abscisses curvilignes circonf. plaque
444 echo_mess=['MACR_ASCOUF_MAIL ASCTCI \n',]
449 for ssep in MCL_SOUS_EPAIS :
451 if (ssep.ISCP>2.*pi*RM) or (ssep.ISCP<0.) :
452 texte_final=string.join(echo_mess)
453 aster.affiche("MESSAGE",texte_final)
454 message= ' valeur hors domaine \n'
455 message=message+ ' SOUS-EPAISSEUR NUMERO :%d'%MCL_SOUS_EPAIS.index(ssep)
456 message=message+ ' ABSC. CURV. CIRCONF. :%.2f \n'%ssep.ISCP
457 message=message+ ' BORD PLAQUE :%.2f \n'%(2.*pi*RM)
458 UTMESS('F', "MACR_ASCOUF_MAIL", message)
459 TAMPON.append((ssep.ISCP,i))
463 IABSC1.append(TAMPON[j][1])
464 echo_mess.append( ' \n')
465 echo_mess.append( 'TRI DES CENTRES ABSC. CURV. CIRCONF. :\n ')
466 echo_mess.append( '------------------------------------\n')
470 echo_mess.append( '%d) SOUS-EP NO %d <> XC = %.2f \n'%(i,ssep[1],ssep[0]) )
472 # --- calcul des abcisses droites et gauches des sous-epaisseurs
477 XG=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
478 if XG<0. : XG=XG+2.*pi*RM
480 XD=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
481 if XD>2.*pi*RM : XD=XD-2.*pi*RM
484 # --- tri des bornes d'intervalles en abscisse
487 for j in range(len(MCL_SOUS_EPAIS)):
488 TAMPON.append((COORXG[j],2*j+1))
489 TAMPON.append((COORXD[j],2*j+2))
492 for j in range(2*len(MCL_SOUS_EPAIS)):
493 IABSC2.append(TAMPON[j][1])
494 echo_mess.append( '\n')
495 echo_mess.append( 'TRI DES INTERVALLES G ET D ABSC. CURV. CIRCONF. :\n')
496 echo_mess.append( '-----------------------------------------------\n' )
497 for j in range(2*len(MCL_SOUS_EPAIS)):
498 if fmod(IABSC2[j],2):
499 echo_mess.append( '%d) SOUS-EP NO %d <> XG = %.2f \n'%(j+1,IABSC1[IABSC2[j]/2],TAMPON[j][0]))
501 echo_mess.append( '%d) SOUS-EP NO %d <> XD = %.2f \n'%(j+1,IABSC1[IABSC2[j]/2-1],TAMPON[j][0]))
503 texte_final=string.join(echo_mess)
504 aster.affiche('MESSAGE',texte_final)
505 return TAMPON,IABSC1,IABSC2,COORXD,COORXG
507 # ------------------------------------------------------------------------------
508 def ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM):
510 MACR_ASCOUF_MAIL ASCTLO
511 APPELEE DANS : ASCSYM et ASCPRE
512 CALCUL TABLEAU TRIE DES ORDONNEES DES CENTRES DE SOUS-EPAISSEURS
514 ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
516 RC = RAYON MOYEN DU COUDE
517 ALPHA = ANGLE DU COUDE
518 LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
519 LTCLIM = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
521 -----------------DONNEES RENVOYEES-----------------------
523 IORDO1 = CORRESPONDANCE ORDO. CURVI. LONGIT. SOUS-EP. I
524 IORDO2 = CORRESPONDANCE ORDO. GAUCHE ET DROITE LONGIT. SOUS-EP. I
525 COORYI = ORDONNEE. DU BORD INTERIEUR DE LA SOUS-EP I
526 COORYS = ORDONNEE. DU BORD SUPERIEUR DE LA SOUS-EP I
530 # tri du tableau des abscisses curvilignes axiales plaque
532 echo_mess=['MACR_ASCOUF_MAIL ASCTLO \n',]
533 ALPHAR = 2.*ALPHA*pi/360.
536 for ssep in MCL_SOUS_EPAIS :
538 if (ssep.ISLP>ALPHAR*RC) or (ssep.ISLP<0.) :
539 texte_final=string.join(echo_mess)
540 aster.affiche("MESSAGE",texte_final)
541 message= ' valeur hors domaine \n'
542 message=message+ ' SOUS-EPAISSEUR NUMERO :%d \n'%MCL_SOUS_EPAIS.index(ssep)
543 message=message+ ' ABSC. CURV. LONGIT. :%.2f \n'%ssep.ISLP
544 message=message+ ' BORDS PLAQUE :%.2f \n'%(ALPHAR*RC)
545 UTMESS('F', "MACR_ASCOUF_MAIL", message)
546 TAMPON.append((ssep.ISLP,i))
550 IORDO1.append(TAMPON[j][1])
551 echo_mess.append( '\n')
552 echo_mess.append( 'TRI DES CENTRES ABSC. CURV. LONGIT. : \n')
553 echo_mess.append( '------------------------------------ \n')
557 echo_mess.append( '%d) SOUS-EP NO %d <> YC = %.2f \n'%(i,ssep[1],ssep[0]))
559 # calcul des abscisses sup. et inf. des sous-ep.
566 YI=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
567 YS=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
568 if fabs(bid[0])<EPS :
569 YI=-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
570 YS=MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
571 if fabs(bid[0]-ALPHAR*RC)<EPS :
572 YI=ALPHAR*RC-(MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.)
573 YS=ALPHAR*RC+(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
575 texte_final=string.join(echo_mess)
576 aster.affiche("MESSAGE",texte_final)
577 message= ' valeur hors domaine \n'
578 message=message+ ' SOUS-EPAISSEUR NUMERO :%d \n'%bid[1]
579 message=message+ ' BORD INFERIEUR :%.2f \n'%YI
580 message=message+ ' BORDS PLAQUE :%.2f \n'%(-1*LTCHAR)
581 UTMESS('F', "MACR_ASCOUF_MAIL", message)
582 if YS>(ALPHAR*RC+LTCLIM):
583 texte_final=string.join(echo_mess)
584 aster.affiche("MESSAGE",texte_final)
585 message= ' valeur hors domaine \n'
586 message=message+ ' SOUS-EPAISSEUR NUMERO :%d \n'%bid[1]
587 message=message+ ' BORD INFERIEUR :%.2f \n'%YI
588 message=message+ ' BORDS PLAQUE :%.2f \n'%(ALPHAR*RC+LTCLIM)
589 UTMESS('F', "MACR_ASCOUF_MAIL", message)
593 # tri des bornes d'intervalles en abscisse
596 for j in range(len(MCL_SOUS_EPAIS)):
597 TAMPON.append((COORYI[j],2*j+1))
598 TAMPON.append((COORYS[j],2*j+2))
601 for j in range(2*len(MCL_SOUS_EPAIS)):
602 IORDO2.append(TAMPON[j][1])
603 echo_mess.append( '\n')
604 echo_mess.append( 'TRI DES INTERVALLES I ET S ABSC. CURV. LONGIT. : \n')
605 echo_mess.append( '----------------------------------------------- \n')
606 for j in range(2*len(MCL_SOUS_EPAIS)):
607 if fmod(IORDO2[j],2):
608 echo_mess.append( '%d) SOUS-EP NO %d <> YI = %.2f \n'%(j+1,IORDO1[IORDO2[j]/2],TAMPON[j][0]))
610 echo_mess.append( '%d) SOUS-EP NO %d <> YS = %.2f \n'%(j+1,IORDO1[IORDO2[j]/2-1],TAMPON[j][0]))
612 texte_final=string.join(echo_mess)
613 aster.affiche('MESSAGE',texte_final)
614 return TAMPON,IORDO1,IORDO2,COORYI,COORYS
617 ################################################################################
618 ################################################################################
619 ################################################################################
620 # MACR_ASCOUF_MAIL ASCNBE
621 # APPELEE DANS : ASCSYM et ASCPRE
622 # CALCUL DU NOMBRE D'ELEMENTS LONGI ET CIRCONF. DANS LES SOUS-EPAISSEURS
624 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
626 # COORXG = ABSCISSE DU BORD GAUCHE DE LA SOUS-EPAISSEUR I
627 # COORXD = ABSCISSE DU BORD DROIT DE LA SOUS-EPAISSEUR I
628 # COORYI = ORDONNEE DU BORD INFERIEUR DE LA SOUS-EPAISSEUR I
629 # COORYS = ORDONNEE DU BORD SUPERIEUR DE LA SOUS-EPAISSEUR I
630 # BD = ABSCISSE DU BORD DROIT DE LA ZONE CIRCONF J
631 # BG = ABSCISSE DU BORD GAUCHE DE LA ZONE CIRCONF J
632 # BS = ORDONNEE DU BORD SUPERIEUR DE LA ZONE LONGI J
633 # BI = ORDONNEE DU BORD INFERIEUR DE LA ZONE LONGI J
634 # DNX = DENSITE ET NOMBRE D'ELEMENTS CIRCONF. DE LA ZONE J
635 # DNY = DENSITE ET NOMBRE D'ELEMENTS LONGIT. DE LA ZONE J
636 # INDSEX = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE CIRCONF J
637 # INDSEY = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE LONGI J
638 # RM = RAYON MOYEN DU COUDE
639 # RC = RAYON DE CINTRAGE DU COUDE
640 # IABSC1 = CORRESPONDANCE ABSCISSE CURVILIGNE CIRCONF. SOUS-EP. I
641 # IORDO1 = CORRESPONDANCE ABSCISSE CURVILIGNE LONGIT. SOUS-EP. I
643 #----------------------DONNEES RENVOYEES-----------------------
645 # NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
646 # NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
648 # ------------------------------------------------------------------------------
649 def ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,DNX,DNY,RM,RC,
650 INDSEX,INDSEY,IABSC1,IORDO1):
652 # calcul du nombre d'elements longi. et circonf. dans les sous-epaisseurs:
654 echo_mess=['MACR_ASCOUF_MAIL ASCNBE \n',]
655 echo_mess.append( '\n')
656 echo_mess.append( 'DETERMINATION DU NOMBRE D''ELEMENTS DANS LES SOUS-EPAISSEURS :\n')
657 echo_mess.append( '------------------------------------------------------------\n')
658 NLX=[0]*len(MCL_SOUS_EPAIS)
659 NLY=[0]*len(MCL_SOUS_EPAIS)
660 for j in range(len(BD)):
662 # calcul au passage du nombre d'elements sur chaque zone circonf.
663 RNBEL = (BD[j]-BG[j])*360./(DNX[2*j]*2.*pi*RM)
664 RNBEL2 = RNBEL - floor(RNBEL)
665 if RNBEL2 <= 0.5 : NBEL=int(floor(RNBEL))
666 else : NBEL=int(floor(RNBEL))+1
667 if NBEL <= 1 : NBEL=2
668 # calcul au passage du nombre d'elements sur chaque sous-epaisseur circonf.
669 for i in range(len(MCL_SOUS_EPAIS)):
671 if ((COORXG[l]<COORXD[l] and BG[j]>=COORXG[l] and BD[j]<=COORXD[l])\
672 or (COORXG[l]>=COORXD[l] and (BG[j]<=COORXG[l] or BD[j]>=COORXD[l]))):
674 echo_mess.append( 'SOUS-EP NO %d ZONE CIRC. NO %d NB ELEM. = %d \n'%(i+1,j+1,NBEL))
676 for j in range(len(BS)):
678 # calcul au passage du nombre d'elements sur chaque zone longi.
679 RNBEL = ((BS[j]-BI[j])*360.)/(DNY[2*j]*2.*pi*RC)
680 RNBEL2 = RNBEL - floor(RNBEL)
681 if RNBEL2 <= 0.5 : NBEL=int(floor(RNBEL))
682 else : NBEL=int(floor(RNBEL))+1
683 if NBEL <= 1 : NBEL=2
684 # calcul au passage du nombre d'elements sur chaque sous-epaisseur circonf.
686 for i in range(len(MCL_SOUS_EPAIS)):
688 if (BI[j]>=COORYI[l] and BS[j]<=COORYS[l]):
690 echo_mess.append( 'SOUS-EP NO %d ZONE LONGI. NO %d NB ELEM. = %d \n'%(i+1,j+1,NBEL) )
692 for j in range(len(NLX)):
693 echo_mess.append( 'SOUS-EP NO %d NBE TOTAL ELEMENTS CIRCONF. : %d \n'%(j+1,NLX[j]))
694 echo_mess.append( 'SOUS-EP NO %d NBE TOTAL ELEMENTS LONGI. : %d \n'%(j+1,NLY[j]))
697 texte_final=string.join(echo_mess)
698 aster.affiche('MESSAGE',texte_final)
701 ################################################################################
702 ################################################################################
703 ################################################################################
704 # MACR_ASCOUF_MAIL ASCSYM
705 # PREPARATION DES DONNEES POUR LE MAILLAGE DE PLAQUE AVEC
707 # CAS D UNE SOUS-EPAISSEUR DANS LE PLAN DE SYMETRIE
708 # CONSTRUCTION D UN QUART DU MAILLAGE
709 # - CALCUL TABLEAU TRIE DES ABSCISSES ET ORDONNEES DES CENTRES
710 # - CALCUL TABLEAU DES ZONES COUVERTES PAR LES SOUS-EPAISSEURS
712 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
714 # RM = RAYON MOYEN DU COUDE
715 # RC = RAYON DE CINTRAGE DU COUDE
716 # ALPHA = ANGLE DU COUDE
717 # LT = LONGUEUR DE L EMBOUT DU COTE CHARGEMENT
718 # LGV = LONGUEUR DE L EMBOUT DU COTE CONDITIONS AUX LIMITES
719 # NBSEP = NOMBRE DE SOUS-EPAISSEURS
721 #----------------------DONNEES RENVOYEES-----------------------
723 # NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
724 # NZONEY = NOMBRE DE ZONES LONGITUDINALES
726 # ------------------------------------------------------------------------------
727 def ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM):
729 echo_mess=['MACR_ASCOUF_MAIL ASCSYM \n',]
741 # --- tri des donnees sous-ep. en circonferentiel
742 TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
744 # --- calcul des zones en circonferentiel
746 ssep=MCL_SOUS_EPAIS[0]
747 if (ssep.ISCP<pi*RM) :
749 # le centre sous-ep est dans la zone flanc droit/extrados/flanc
750 # gauche, on preleve pi*RM a droite de la sous-epaisseur
752 # zone (centre sous-ep , bord droit)
755 BG.append(ssep.ISCP+ssep.ICIRP/2.)
756 BD.append(ssep.ISCP+ssep.ICIRP/2.)
757 BD.append(ssep.ISCP+pi*RM)
762 DNX.append(ssep.IDENC)
768 elif (ssep.ISCP+pi*RM==2.*pi*RM) :
770 # sous-ep axisymetrique : on preleve pi*RM a droite
772 # zone (centre sous-ep , bord droit)
775 BD.append(ssep.ISCP+ssep.ICIRP/2.)
778 DNX.append(ssep.IDENC)
784 # le centre sous-ep est dans la zone flanc gauche/intrados/flanc
785 # droit : on preleve pi*RM a gauche de la sous-epaisseur
787 # zone (centre -pi*RM, bord gauche)
789 BG.append(ssep.ISCP-pi*RM)
790 BG.append(ssep.ISCP-ssep.ICIRP/2.)
791 BD.append(ssep.ISCP-ssep.ICIRP/2.)
799 DNX.append(ssep.IDENC)
805 echo_mess.append( '\n')
806 echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. :\n')
807 echo_mess.append( '--------------------------------------------- \n')
810 for j in range(NZONEX) :
811 if ( fabs(BG[j]) < EPS ) and ( fabs(BD[j]) < EPS ) :
812 echo_mess.append( 'ZONE NO %d BORNE GAUCHE = %.2f'\
813 ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR \n'%(j+1,BG[j],BD[j]) )
815 echo_mess.append( 'ZONE NO %d BORNE GAUCHE = %.2f \n'\
816 ' / BORNE DROITE = %.2f \n'%(j+1,BG[j],BD[j]))
819 # tri des donnees sous-epaisseurs en axial
820 TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
822 # calcul des zones en axial:
829 ssep = MCL_SOUS_EPAIS[0]
831 BI.append(ssep.ISLP-ssep.ILONP/2.)
832 BS.append(ssep.ISLP-ssep.ILONP/2.)
840 DNY.append(ssep.IDENL)
844 echo_mess.append( '\n')
845 echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. : \n')
846 echo_mess.append( '----------------------------------------------- \n')
848 for j in range(NZONEY) :
849 if ( fabs(BI[j]) < EPS ) and ( fabs(BS[j]) < EPS ) :
850 echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
851 ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(j+1,BI[j],BS[j]))
853 echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
854 ' / BORNE SUP. = %.2f'%(j+1,BI[j],BS[j]))
856 # calcul du nombre d'elements longi. et circonf. dans les soue-ep
857 NLX,NLY=ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,
858 DNX,DNY,RM,RC,INDSEX,INDSEY,IABSC1,IORDO1)
860 texte_final=string.join(echo_mess)
861 aster.affiche('MESSAGE',texte_final)
862 return ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY
863 ################################################################################
864 ################################################################################
865 ################################################################################
866 ################################################################################
867 # MACR_ASCOUF_MAIL ASCPRE
868 # PREPARATION DES DONNEES POUR LE MAILLAGE DE PLAQUE
870 # - CALCUL TABLEAU TRIE DES ABSCISSES ET ORDONNEES DES CENTRES
871 # - CALCUL TABLEAU DES ZONES COUVERTES PAR LES SOUS-EPAISSEURS
873 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
875 # RM = RAYON MOYEN DU COUDE
876 # RC = RAYON DE CINTRAGE DU COUDE
877 # ALPHA = ANGLE DU COUDE
878 # LT = LONGUEUR DE L EMBOUT DU COTE CHARGEMENT
879 # LGV = LONGUEUR DE L EMBOUT DU COTE CONDITIONS AUX LIMITES
880 # NBSEP = NOMBRE DE SOUS-EPAISSEURS
881 # SYME = "QUART" DE STRUCTURE, "DEMI" STRUCTURE OU BIEN "ENTIER"
883 #----------------------DONNEES RENVOYEES-----------------------
885 # NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
886 # NZONEY = NOMBRE DE ZONES LONGITUDINALES
888 # ------------------------------------------------------------------------------
889 def ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM):
891 echo_mess=['MACR_ASCOUF_MAIL ASCPRE \n',]
892 ALPHAR = 2.*ALPHA*pi/360.
896 NBSEP = len(MCL_SOUS_EPAIS)
897 echo_mess.append( 'RECHERCHE DES ZONES DE SOUS-EPAISSEURS DANS LE COUDE\n' )
899 # tri des donnees sous-epaisseurs en circonferentiel
900 TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
901 # --- calcul des recouvrements de zones en circonferentiel
925 # definition de la zone courante (borne gauche, borne droite)
927 # TYPG = type de la borne:
928 # 0 : borne gauche sous-epaisseur
929 # 1 : borne droite sous-epaisseur
930 # 2 : centre sous-epaisseur
932 if j>2*NBSEP and ICE<NBSEP :
933 # cas ou il ne reste plus que des centres a caser
939 # cas ou la borne droite de la zone precedente etait un centre
943 MIND = TAMPON[j-1][0]
944 if fmod(IABSC2[j-1],2):
946 NUMD = IABSC1[IABSC2[j-1]/2]
949 NUMD = IABSC1[IABSC2[j-1]/2-1]
953 MIND = TAMPON[2*NBSEP-1][0]
955 if fmod(IABSC2[2*NBSEP-1],2):
957 NUMG = IABSC1[IABSC2[2*NBSEP-1]/2]
960 NUMG = IABSC1[IABSC2[2*NBSEP-1]/2-1]
966 if fmod(IABSC2[j-1],2):
968 NUMG = IABSC1[IABSC2[j-1]/2]
971 NUMG = IABSC1[IABSC2[j-1]/2-1]
972 if fmod(IABSC2[j],2):
974 NUMD = IABSC1[IABSC2[j]/2]
977 NUMD = IABSC1[IABSC2[j]/2-1]
978 if fabs(MING-MIND)<EPSI :
981 if j>2*NBSEP and ICE>=NBSEP:
982 break #on sort de la boucle
987 # recherche des centres a intercaler
990 # le centre est deja le meme que precedent
991 if fabs(MCL_SOUS_EPAIS[INDC-1].ISCP-MCL_SOUS_EPAIS[IABSC1[i-2]-1].ISCP) < EPSI :
994 if MCL_SOUS_EPAIS[INDC-1].ISCP < MING :
995 # le centre est la nouvelle borne gauche
1000 MING = MCL_SOUS_EPAIS[INDC-1].ISCP
1004 elif MCL_SOUS_EPAIS[INDC-1].ISCP < MIND :
1005 # le centre est la nouvelle borne droite
1006 MIND = MCL_SOUS_EPAIS[INDC-1].ISCP
1014 # codes d'intervalles de zones
1015 # 0 0 = zone sous-ep.
1016 # 0 1 = sous-ep. a droite de la zone
1017 # 1 0 = sous-ep. a gauche de la zone
1018 # 1 1 = sous-ep. a droite et a gauche de la zone
1020 # cas ou la premiere zone ne commence pas au bord de la plaque
1021 if MING>0. and NZONEX==1 :
1030 elif TYPG==1 or TYPG==2:
1033 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1043 # borne gauche zone = borne gauche ssep
1048 # borne droite zone = borne gauche ssep
1049 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1052 elif TYPD == 1 or TYPD == 2:
1053 # borne droite zone = borne droite ssep : TYPD=1
1054 # borne droite zone = centre ssep : TYPD=2
1056 LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
1057 LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
1059 DNX.append(LTMP[0][0])
1061 INDSEX.append(LTMP[0][1])
1065 # borne gauche zone = borne droite ssep
1068 # borne droite zone = borne gauche ssep
1076 # cas tordu: une sous-ep enveloppe le tout
1079 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1082 elif TYPD == 1 or TYPD == 2:
1083 # borne droite zone = borne droite ssep : TYPD=1
1084 # borne droite zone = centre ssep : TYPD=2
1087 DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
1093 # borne gauche zone = centre ssep
1097 # borne droite zone = borne gauche ssep
1098 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1101 elif TYPD == 1 or TYPD == 2:
1102 # borne droite zone = borne droite ssep : TYPD=1
1103 # borne droite zone = centre ssep : TYPD=2
1105 LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
1106 LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
1108 DNX.append(LTMP[0][0])
1110 INDSEX.append(LTMP[0][1])
1113 if j<=(2*NBSEP-2) or ICE<=NBSEP or (TYPD==2 and j<2*NBSEP):
1115 break #on retourne dans la boucle go10
1118 break #on sort definitivement
1125 if TYPD==0 or TYPD==2:
1128 DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
1139 # au cas ou 2.*pi*RM correspond a une borne d'intevalle de sous-ep ou a
1140 # un centre de sous-ep.
1141 if fabs(BG[NZONEX-1]-BD[NZONEX-1])<EPSI: NZONEX = NZONEX-1
1143 echo_mess.append( '\n')
1144 echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. : \n')
1145 echo_mess.append( '----------------------------------------------- \n')
1146 for j in range(NZONEX) :
1147 if INDBG[j]==0 and INDBD[j]==0 :
1148 echo_mess.append( 'ZONE NO %d <> BORNE GAUCHE = %.2f \n'\
1149 ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR'%(j+1,BG[j],BD[j]))
1151 echo_mess.append( 'ZONE NO %d <> BORNE GAUCHE = %.2f \n'\
1152 ' / BORNE DROITE = %.2f'%(j+1,BG[j],BD[j]))
1155 # --- tri des donnees sous-ep. en axial
1156 TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
1166 # calcul des zones en axial :
1167 # zones (0,bord inferieur) et (bord inferieur,centre sous-ep.)
1168 ssep = MCL_SOUS_EPAIS[0]
1170 BI.append(ssep.ISLP-ssep.ILONP/2.)
1171 BS.append(ssep.ISLP-ssep.ILONP/2.)
1172 BS.append(ssep.ISLP)
1179 DNY.append(ssep.IDENL)
1187 # calcul des recouvrements de zones en axial
1201 # definition de la zone courante (borne inf, borne sup)
1203 # typi = type de la borne
1204 # 0 : borne inf. sous-ep.
1205 # 1 : borne sup. sous-ep.
1206 # 2 : centre sous-ep.
1209 # cas ou la borne sup. de la zone prec. etait un centre
1214 if fmod(IORDO2[j-1],2):
1216 NUMS = IORDO1[IORDO2[j-1]/2]
1219 NUMS = IORDO1[IORDO2[j-1]/2-1]
1223 MINI = TAMPON[2*NBSEP-1][0]
1225 if fmod(IORDO2[2*NBSEP-1],2):
1227 NUMI = IORDO1[IORDO2[2*NBSEP-1]/2]
1230 NUMI = IORDO1[IORDO2[2*NBSEP-1]/2-1]
1236 if fmod(IORDO2[j-1],2):
1238 NUMI = IORDO1[IORDO2[j-1]/2]
1241 NUMI = IORDO1[IORDO2[j-1]/2-1]
1242 if fmod(IORDO2[j],2):
1244 NUMS = IORDO1[IORDO2[j]/2]
1247 NUMS = IORDO1[IORDO2[j]/2-1]
1248 if fabs(MINI-MINS)<EPSI:
1255 # recherche des centres a intercaler
1258 # le centre est deja le meme que le precedent
1259 if fabs(MCL_SOUS_EPAIS[INDC-1].ISLP-MCL_SOUS_EPAIS[IORDO1[i-2]-1].ISLP)<EPSI:
1262 if MCL_SOUS_EPAIS[INDC-1].ISLP<MINI:
1263 # le centre est la nouvelle borne inf.
1268 MINI = MCL_SOUS_EPAIS[INDC-1].ISLP
1272 elif MCL_SOUS_EPAIS[INDC-1].ISLP<MINS:
1273 # le centre est la nouvelle borne sup.
1274 MINS = MCL_SOUS_EPAIS[INDC-1].ISLP
1282 # code d'intervalles de zone
1283 # 0 0 = ZONE SOUS-EPAISSEUR
1284 # 0 1 = SOUS-EPAISSEUR A SUPERIEURE DE LA ZONE
1285 # 1 0 = SOUS-EPAISSEUR A INFERIEURE DE LA ZONE
1286 # 1 1 = SOUS EPAISSEUR A SUPERIEURE ET A INFERIEURE DE LA ZONE
1288 # cas ou la premiere zone ne commence pas au bord de la plaque
1289 if MINI>0. and NZONEY==1:
1299 elif TYPI==1 or TYPI==2:
1302 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1312 # borne inferieure zone = borne inferieure ssep
1317 # borne superieure zone = borne inferieur ssep
1318 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1321 elif TYPS==1 or TYPS==2:
1322 # borne superieure zone = borne superieure ssep:TYPS==1
1323 # borne superieure zone = centre ssep:TYPS==2
1325 LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
1326 LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
1328 DNY.append(LTMP[0][0])
1330 INDSEY.append(LTMP[0][1])
1333 # borne inferieure zone=borne superieure ssep
1336 # borne superieure zone = borne inferieur ssep
1344 # cas tordu: une sous-ep. enveloppe le tout
1347 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1350 elif TYPS==1 or TYPS==2:
1351 # borne superieure zone = borne superieure ssep:TYPS==1
1352 # borne superieure zone = centre ssep:TYPS==2
1355 DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
1360 # borne inferieure zone = centre ssep
1364 # borne superieure zone = borne inferieure ssep
1365 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1368 elif TYPS==1 or TYPS==2:
1369 # borne superieure zone = borne superieure ssep
1371 LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
1372 LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
1374 DNY.append(LTMP[0][0])
1376 INDSEY.append(LTMP[0][1])
1379 if j<=(2*NBSEP-2) or TYPS==2:
1381 break #on retourne dans la boucle go40
1384 break #on sort definitivement
1387 # cas ou la derniere zone ne finit pas au bout de la plaque
1391 BS.append(ALPHAR*RC)
1392 if TYPS==0 or TYPS==2:
1395 DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
1406 echo_mess.append( '\n')
1407 echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. :\n')
1408 echo_mess.append( '----------------------------------------------- \n')
1410 for j in range(NZONEY) :
1411 if INDBI[j]==0 and INDBS[j]==0 :
1412 echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
1413 ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(j+1,BI[j],BS[j]))
1415 echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
1416 ' / BORNE SUP. = %.2f '%(j+1,BI[j],BS[j]))
1418 # calcul du nombre d'elements longi. et circonf. dans les sous-ep
1419 NLX,NLY=ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,
1420 DNX,DNY,RM,RC,INDSEX,INDSEY,IABSC1,IORDO1)
1423 texte_final=string.join(echo_mess)
1424 aster.affiche('MESSAGE',texte_final)
1425 return ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY
1427 ################################################################################
1428 ################################################################################
1429 ################################################################################
1430 # MACR_ASCOUF_MAIL write_file_dgib_ASCFDO
1432 # ECRIT DANS UN FICHIER LES DONNES GIBI DE LA PROCEDURE
1436 # ------------------------------------------------------------------------------
1437 def write_file_dgib_ASCFDO(nomFichierDATG,RM,RC,ALPHA,NBTRAN,EP1,EP2,EPI,TETA1,
1438 TETA2,LTRAN,SUREP,LTCHAR,LTCLIM,TYPBOL,AXEAP,AXECP,NT,NS,NC,
1439 SFP,ORIEN,AZIM,RC0,RC2,RC3,POSIT,EPSI,NIVMAG,SYME, loc_datg) :
1442 if TYPBOL=='CUVE' : TYPEMB = 'typcuv'
1443 if TYPBOL=='GV' : TYPEMB = 'typegv'
1444 if TYPBOL=='ASP_MPP' : TYPEMB = 'typapp'
1448 if POSIT =='DEB_INT' :
1452 if SYME[:6]=='ENTIER' : ZSYME = 'entier'
1453 elif SYME[:5]=='QUART' : ZSYME = 'quart'
1454 else : ZSYME = 'demi'
1459 texte='* DEBUT PARAMETRES UTILISATEUR\n'
1461 texte=texte+'c = '+str(C) +POIVIR
1462 texte=texte+'a = '+str(AXEAP) +POIVIR
1463 texte=texte+'nt = '+str(NT) +POIVIR
1464 texte=texte+'ns = '+str(NS) +POIVIR
1465 texte=texte+'nc = '+str(NC) +POIVIR
1466 texte=texte+'rm = '+str(RM) +POIVIR
1467 texte=texte+'rc = '+str(RC) +POIVIR
1468 texte=texte+'alphac = '+str(ALPHA) +POIVIR
1469 texte=texte+'nbtranep = '+str(NBTRAN) +POIVIR
1470 texte=texte+'ep1 = '+str(EP1) +POIVIR
1471 texte=texte+'ep2 = '+str(EP2) +POIVIR
1472 texte=texte+'epi = '+str(EPI) +POIVIR
1473 texte=texte+'teta1 = '+str(TETA1) +POIVIR
1474 texte=texte+'teta2 = '+str(TETA2) +POIVIR
1475 texte=texte+'ltran = '+str(LTRAN) +POIVIR
1476 texte=texte+'posfis = '+str(SFP) +POIVIR
1477 texte=texte+'ksiref = '+str(ORIEN) +POIVIR
1478 texte=texte+'surep = '+str(SUREP) +POIVIR
1479 texte=texte+'teta_f = '+str(TETAF) +POIVIR
1480 texte=texte+'rc0 = '+str(RC0) +POIVIR
1481 texte=texte+'rc2 = '+str(RC2) +POIVIR
1482 texte=texte+'rc3 = '+str(RC3) +POIVIR
1483 texte=texte+"pos = '"+POSIT2+"'" +POIVIR
1484 texte=texte+'lt = '+str(LTCHAR) +POIVIR
1485 texte=texte+'lgv = '+str(LTCLIM) +POIVIR
1486 texte=texte+"typembou = '"+TYPEMB+"'" +POIVIR
1487 texte=texte+"zsyme = '"+ZSYME+"'" +POIVIR
1488 texte=texte+'epsif = '+str(EPSI) +POIVIR
1489 texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
1491 texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
1492 texte = texte + open(os.path.join(loc_datg, 'ascouf_fiss_v4.datg'), 'r').read()
1493 fdgib=open(nomFichierDATG,'w')
1497 ################################################################################
1498 ################################################################################
1499 ################################################################################
1500 # MACR_ASCOUF_MAIL write_file_dgib_ASCSQO
1502 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1503 # "PLAQUE SOUS-EPAISSEUR"
1505 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1507 # RM = RAYON MOYEN DU COUDE
1508 # RC = RAYON DE CINTRAGE DU COUDE
1509 # ALPHA = ANGLE DU COUDE
1510 # NBTRAN = NOMBRE DE TRANSITION D'EPAISSEUR (0, 1 OU 2)
1511 # EP1 = EPAISSEUR DU COUDE (COTE EMBOUT 1 SI TRANSITION)
1512 # EP2 = EPAISSEUR DU COUDE (COTE EMBOUT 2 SI TRANSITION)
1513 # EPI = EPAISSEUR DU COUDE INTERMEDIAIRE SI TRANSITION A 2 PENTES
1514 # TETA1 = ANGLE DE LA PREMIERE TRANSITION D'EPAISSEUR EVENTUELLE
1515 # TETA2 = ANGLE DE LA DEUXIEME TRANSITION D'EPAISSEUR EVENTUELLE
1516 # LTRAN = LONGUEUR ENTRE FIN DE L'EMBOUT 1 ET DEBUT DE TRANSITION
1517 # LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
1518 # LCLIM = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
1519 # GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
1520 # SYME = "QUART" DE STRUCTURE, "DEMI" STRUCTURE OU BIEN "ENTIER"
1521 # NBEP = NOMBRE D'ELEMENTS DANS LE COUDE
1522 # NLX = NOMBRE D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR
1523 # NLY = NOMBRE D'ELEMENTS LONGI DE LA SOUS-EPAISSEUR
1524 # SUREP = SUR EPAISSEUR
1526 # ------------------------------------------------------------------------------
1527 def write_file_dgib_ASCSQO(nomFichierDATG,TYPELE,RM,RC,ALPHA,NBTRAN,EP1,EP2,
1528 EPI,TETA1,MCL_SOUS_EPAIS,TETA2,LTRAN,LTCHAR,LTCLIM,GEOM,
1529 SYME,NBEP,NLX,NLY,NIVMAG,SUREP,AZIMC,loc_datg) :
1531 ssep= MCL_SOUS_EPAIS[0]
1532 print 'AZIMC', AZIMC;
1534 texte=' nivmag = '+str(NIVMAG) +POIVIR
1535 texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
1537 texte=texte+'coory = table '+POIVIR
1538 texte=texte+'coorz = table '+POIVIR
1539 texte=texte+'prof = table '+POIVIR
1540 texte=texte+'posit = table '+POIVIR
1541 texte=texte+'axisym = table '+POIVIR
1542 texte=texte+'axecir = table '+POIVIR
1543 texte=texte+'axelon = table '+POIVIR
1544 texte=texte+'sousep = table '+POIVIR
1545 texte=texte+'coorzc = table '+POIVIR
1546 texte=texte+'axelonc = table '+POIVIR
1548 texte=texte+'* DEBUT PARAMETRES UTILISATEUR\n'
1550 texte=texte+'* parametres generaux\n'
1552 texte=texte+' pirad = '+str(pi) +POIVIR
1553 texte=texte+' rm = '+str(RM) +POIVIR
1554 texte=texte+' rc = '+str(RC) +POIVIR
1555 texte=texte+' alpha = '+str(ALPHA) +POIVIR
1556 texte=texte+' lt1 = '+str(LTCHAR) +POIVIR
1557 texte=texte+' lt2 = '+str(LTCLIM) +POIVIR
1558 texte=texte+' nbtranep = '+str(NBTRAN) +POIVIR
1559 texte=texte+' ep1 = '+str(EP1) +POIVIR
1560 texte=texte+' ep2 = '+str(EP2) +POIVIR
1561 texte=texte+' epI = '+str(EPI) +POIVIR
1562 texte=texte+' teta1 = '+str(TETA1) +POIVIR
1563 texte=texte+' teta2 = '+str(TETA2) +POIVIR
1564 texte=texte+' ltran = '+repr(LTRAN) +POIVIR
1565 texte=texte+' surep = '+str(SUREP) +POIVIR
1567 texte=texte+" zcoude = 'oui' "+POIVIR
1569 texte=texte+" zcoude = 'non' "+POIVIR
1570 if SYME == 'ENTIER':
1571 texte=texte+" zsyme = 'entier' "+POIVIR
1572 elif SYME == 'QUART':
1573 texte=texte+" zsyme = 'quart' "+POIVIR
1575 texte=texte+" zsyme = 'demi' "+POIVIR
1576 if TYPELE == 'CU20':
1577 texte=texte+" zquad = 'oui' "+POIVIR
1579 texte=texte+" zquad = 'non' "+POIVIR
1581 texte=texte+' nxep = '+str(NBEP) +POIVIR
1583 texte=texte+'* Caracteristiques de la sous-epaisseur\n'
1585 texte=texte+' azimc = '+str(AZIMC) +POIVIR
1586 texte=texte+' tysep = '+str(ssep.ICIRP) +POIVIR
1587 texte=texte+' tzsep = '+str(ssep.ILONP) +POIVIR
1588 texte=texte+' prof . 1 = '+str(ssep['PROFONDEUR']) +POIVIR
1589 texte=texte+' ycsep = '+str(SCP-pi*RM) +POIVIR
1590 texte=texte+' theta = '+str(ssep.IPHIC) +POIVIR
1591 texte=texte+' zcsep = '+repr(ssep.ISLP) +POIVIR
1593 texte=texte+" posit . 1 = '"+str(ssep['SOUS_EPAIS'].lower())+"'"+POIVIR
1594 texte=texte+' nby = '+str(int(NLX[0])) +POIVIR
1595 texte=texte+' nbz = '+str(int(NLY[0])) +POIVIR
1596 texte=texte+' nbxse = '+str(ssep['NB_ELEM_RADI']) +POIVIR
1597 texte=texte+' axelonc . 1 = '+str(ssep['AXE_LONGI'])+POIVIR
1598 if ssep['POSI_CURV_LONGI']!=None:
1599 texte=texte+' coorzc . 1 = '+repr(ssep['POSI_CURV_LONGI'])+POIVIR
1601 DZC=ssep.BETA*pi*(RC+(RM+EP1/2.)*cos(pi/2.))/180.
1602 texte=texte+' coorzc . 1 = '+repr(DZC)+POIVIR
1603 if ssep['TYPE']=='AXIS':
1604 texte=texte+" zaxis = 'oui' "+POIVIR
1606 texte=texte+" zaxis = 'non' "+POIVIR
1607 if ssep['EMPREINTE'] == 'OUI':
1608 texte=texte+" sousep . 1 = 'oui'"+POIVIR
1610 texte=texte+" sousep . 1 = 'non'"+POIVIR
1612 texte=texte+'* FIN PARAMETRES UTILISATEUR \n'
1613 texte = texte + open(os.path.join(loc_datg, 'ascouf_ssep_mono_v1.datg'), 'r').read()
1614 fdgib=open(nomFichierDATG,'w')
1617 ################################################################################
1618 ################################################################################
1619 ################################################################################
1620 # MACR_ASCOUF_MAIL write_subpart_file_pgib_POST
1622 # APPELEE DANS : write_file_pgib_ASCSQ2 , write_file_pgib_ASCSD2
1623 # DEFINIE UNE CHAINE DE CARACTERES UTILISEE LORS DE L'ECRITURE DU
1624 # FICHIER GIBI DE POST-TRAITEMENTS
1626 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1628 # NLX = NOMBRE D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR
1629 # NLY = NOMBRE D'ELEMENTS LONGI DE LA SOUS-EPAISSEUR
1631 #-----------------DONNEE RENVOYEE PAR ASTER--------------------
1633 # texte = chaine de caracteres contenant des instructions gibi
1634 # de post-traitements
1636 # ------------------------------------------------------------------------------
1637 def write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY):
1638 CAR3 = ('fdro','exdr','extr','exga','fgau','inga','intr','indr')
1641 texte='* DEBUT POINTS DE POST-TRAITEMENT\n'
1644 for ssep in MCL_SOUS_EPAIS:
1647 texte=texte+'* sous-epaisseur No '+str( issep)+'\n'
1649 if ssep['TYPE'] == 'ELLI':
1651 texte=texte+'* plans circonf longi et colonne centrale \n'
1653 texte=texte+'pcirc'+str( issep)+' = circo .'+str(issep).rjust(4)+POIVIR
1654 texte=texte+'plong'+str( issep)+' = longi .'+str(issep).rjust(4)+POIVIR
1655 texte=texte+'pcent'+str( issep)+' = centr .'+str(issep).rjust(4)+POIVIR
1657 texte=texte+'* ligaments tous les 45 degres a epaisseur minimale \n'
1659 texte=texte+'isep = '+str( issep)+POIVIR
1661 texte=texte+'ilig = '+str(k+1)+POIVIR
1662 texte=texte+'rlig = ilig/10. + isep'+POIVIR
1663 texte=texte+str(CAR3[k])+str( issep)+' = lig45 . rlig'+POIVIR
1664 if ssep['TYPE'] == 'ELLI':
1666 texte=texte+"* ligaments circonferentiels a l'epaisseur minimale\n"
1668 texte=texte+'isep = '+str(issep)+POIVIR
1669 for k in range(2*NLX[issep-1]+1):
1670 texte=texte+'ilig = '+str(k+1)+POIVIR
1671 texte=texte+'rlig = ilig/100. + isep'+POIVIR
1672 texte=texte+'cir'+str(issep)+'_'+str(k+1)+' = ligcir . rlig'+POIVIR
1674 texte=texte+"* ligaments longitudinaux a l'epaisseur minimale\n"
1676 for k in range(2*NLY[issep-1]+1):
1677 texte=texte+'ilig = '+str(k+1)+POIVIR
1678 texte=texte+'rlig = ilig/100. + isep'+POIVIR
1679 texte=texte+'lon'+str(issep)+'_'+str(k+1)+' = liglon . rlig'+POIVIR
1680 texte=texte+'* FIN POINTS DE POST-TRAITEMENT\n'
1683 ################################################################################
1684 ################################################################################
1685 ################################################################################
1686 # MACR_ASCOUF_MAIL write_file_pgib_ASCSQ2
1688 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1689 # "PLAQUE SOUS-EPAISSEURS"
1690 # IL S'AGIT DE LA DEUXIEME PARTIE ( APRES LES DONNEES UTILISATEUR )
1693 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1695 # NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
1696 # NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
1698 # ------------------------------------------------------------------------------
1699 def write_file_pgib_ASCSQ2(MCL_SOUS_EPAIS,NLX,NLY):
1701 texte=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
1703 texte=texte+'p1 = 0. 0. (-1.*lt1)'+POIVIR
1704 texte=texte+'p2 = 0. 0. (coor 3 bou3)'+POIVIR
1705 texte=texte+'ma = coude et p1 et p2'+POIVIR
1706 texte=texte+"opti sauv form 'fort.8'"+POIVIR
1707 texte=texte+'sort ma'+POIVIR
1708 texte=texte+'sauv form ma'+POIVIR
1709 texte=texte+'fin'+POIVIR
1710 fpgib=open('fort.71','w')
1714 ################################################################################
1715 ################################################################################
1716 ################################################################################
1717 # MACR_ASCOUF_MAIL write_file_pgib_ASCSP1
1719 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1720 # "PLAQUE SOUS-EPAISSEURS"
1721 # IL S'AGIT DE LA PREMIERE PARTIE ( AVANT LES DONNEES UTILISATEUR )
1724 # ------------------------------------------------------------------------------
1725 def write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg):
1728 texte=' nivmag = '+str(NIVMAG)+POIVIR
1729 texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0 '+POIVIR
1731 texte=texte+'bg = table '+POIVIR
1732 texte=texte+'bd = table '+POIVIR
1733 texte=texte+'bi = table '+POIVIR
1734 texte=texte+'bs = table '+POIVIR
1735 texte=texte+'indbg = table '+POIVIR
1736 texte=texte+'indbd = table '+POIVIR
1737 texte=texte+'indbi = table '+POIVIR
1738 texte=texte+'indbs = table '+POIVIR
1739 texte=texte+'axecir = table '+POIVIR
1740 texte=texte+'axelon = table '+POIVIR
1741 texte=texte+'axelonc = table '+POIVIR
1742 texte=texte+'coorzc = table '+POIVIR
1743 texte=texte+'prof = table '+POIVIR
1744 texte=texte+'posit = table '+POIVIR
1745 texte=texte+'coory = table '+POIVIR
1746 texte=texte+'coorz = table '+POIVIR
1747 texte=texte+'deny = table '+POIVIR
1748 texte=texte+'nbely = table '+POIVIR
1749 texte=texte+'denz = table '+POIVIR
1750 texte=texte+'nbelz = table '+POIVIR
1751 texte=texte+'axisym = table '+POIVIR
1752 texte=texte+'sousep = table '+POIVIR
1754 texte = texte + open(os.path.join(loc_datg, 'ascouf_ssep_mult_v1.datg'), 'r').read()
1755 fdgib=open(nomFichierDATG,'w')
1759 ################################################################################
1760 ################################################################################
1761 ################################################################################
1762 # MACR_ASCOUF_MAIL write_file_pgib_ASCSDO
1764 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1765 # "PLAQUE SOUS-EPAISSEURS"
1767 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1769 # RM = RAYON MOYEN DU COUDE
1770 # RC = RAYON DE CINTRAGE DU COUDE
1771 # ALPHA = ANGLE DU COUDE
1772 # EP = EPAISSEUR DU COUDE
1773 # LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
1774 # LCLIM = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
1775 # GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
1776 # SYME = QUART DE STRUCTURE SI 'OUI'
1777 # INDBG = INDICATEUR BORD GAUCHE DE LA ZONE CIRCONF J
1778 # INDBD = INDICATEUR BORD DROIT DE LA ZONE CIRCONF J
1779 # BG = ABSCISSE DU BORD GAUCHE DE LA ZONE CIRCONF J
1780 # BD = ABSCISSE DU BORD DROIT DE LA ZONE CIRCONF J
1781 # BI = ORDONNEE DU BORD INFERIEUR DE LA ZONE LONGI J
1782 # BS = ORDONNEE DU BORD SUPERIEUR DE LA ZONE LONGI J
1783 # INDBI = INDICATEUR BORD INFERIEUR DE LA ZONE LONGI J
1784 # INDBS = INDICATEUR BORD SUPERIEUR DE LA ZONE LONGI J
1785 # INDSEX = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE CIRCONF J
1786 # INDSEY = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE LONGI J
1787 # DNX = DENSITE ET NOMBRE D'ELEMENTS CIRCONF. DE LA ZONE J
1788 # DNY = DENSITE ET NOMBRE D'ELEMENTS LONGIT. DE LA ZONE J
1789 # NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
1790 # NZONEY = NOMBRE DE ZONES LONGITUDINALES
1792 # ------------------------------------------------------------------------------
1793 def write_file_pgib_ASCSDO(RM,RC,ALPHA,EP,LTCLIM,LTCHAR,NBEP,SUREP,
1794 NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,
1795 DNX,DNY,MCL_SOUS_EPAIS,GEOM,SYME):
1802 if 0<ceil(x)-x<=0.5:
1805 return int(floor(x))
1807 # conversion des densites de raffinement des embout en degres par rapport
1808 # a l'angle du coude
1809 RTMP=nint(LTCHAR/DELTAY)*DELTAY/4.
1810 DENSTU = RTMP*360./(2.*pi*RC)
1815 texte='* DEBUT PARAMETRES UTILISATEUR \n'
1817 texte=texte+'* parametres generaux\n'
1819 texte=texte+'rm = '+str(RM) +POIVIR
1820 texte=texte+'rc = '+str(RC) +POIVIR
1821 texte=texte+'alphac = '+str(ALPHA) +POIVIR
1822 texte=texte+'epc = '+str(EP) +POIVIR
1823 texte=texte+'pirad = '+str(pi) +POIVIR
1824 texte=texte+'lgv = '+str(LTCLIM) +POIVIR
1825 texte=texte+'lt = '+str(LTCHAR) +POIVIR
1826 texte=texte+'lcoude = '+str(ALPHA*pi/180.*RC) +POIVIR
1828 texte=texte+"zcoude = 'oui' " +POIVIR
1830 texte=texte+"zcoude = 'non' " +POIVIR
1831 if SYME == 'ENTIER':
1832 texte=texte+"zsyme = 'entier' " +POIVIR
1833 elif SYME == 'QUART':
1834 texte=texte+"zsyme = 'quart' " +POIVIR
1836 texte=texte+"zsyme = 'demi' " +POIVIR
1837 texte=texte+'nxep = '+str(NBEP) +POIVIR
1838 texte=texte+'nzt = '+str(NZT) +POIVIR
1839 texte=texte+'nzgv = '+str(NZGV) +POIVIR
1840 texte=texte+'daxhtu = '+str(DENSTU) +POIVIR
1841 texte=texte+'daxhgv = '+str(DENSGV) +POIVIR
1844 texte=texte+'* Zones couvertes en circonference\n'
1846 for j in range(NZONEX):
1847 texte=texte+'bg .' +str(j+1).rjust(23)+' = '+str(BG[j]-pi*RM) +POIVIR
1848 texte=texte+'bd .' +str(j+1).rjust(23)+' = '+str(BD[j]-pi*RM) +POIVIR
1849 texte=texte+'indbg .'+str(j+1).rjust(23)+' = '+str(INDBG[j]) +POIVIR
1850 texte=texte+'indbd .'+str(j+1).rjust(23)+' = '+str(INDBD[j]) +POIVIR
1851 texte=texte+'deny .' +str(j+1).rjust(23)+' = '+str(DNX[2*j]) +POIVIR
1852 texte=texte+'nbely .'+str(j+1).rjust(23)+' = '+str(int(DNX[2*j+1])) +POIVIR
1855 texte=texte+'* Zones couvertes longitudinalement\n'
1857 for j in range(NZONEY):
1858 texte=texte+'bi .' +str(j+1).rjust(23)+' = '+str(BI[j]) +POIVIR
1859 texte=texte+'bs .' +str(j+1).rjust(23)+' = '+str(BS[j]) +POIVIR
1860 texte=texte+'indbi .'+str(j+1).rjust(23)+' = '+str(INDBI[j]) +POIVIR
1861 texte=texte+'indbs .'+str(j+1).rjust(23)+' = '+str(INDBS[j]) +POIVIR
1862 texte=texte+'denz .' +str(j+1).rjust(23)+' = '+str(DNY[2*j]) +POIVIR
1863 texte=texte+'nbelz .'+str(j+1).rjust(23)+' = '+str(int(DNY[2*j+1])) +POIVIR
1866 texte=texte+'* Caracteristiques des sous-epaisseurs\n'
1869 for ssep in MCL_SOUS_EPAIS:
1871 texte=texte+'axecir .' +str(issep).rjust(23)+' = '+str(ssep.ICIRP) +POIVIR
1872 texte=texte+'axelon .' +str(issep).rjust(23)+' = '+str(ssep.ILONP) +POIVIR
1873 texte=texte+'prof .' +str(issep).rjust(23)+' = '+str(ssep['PROFONDEUR'])+POIVIR
1874 texte=texte+'coory .' +str(issep).rjust(23)+' = '+str(ssep.ISCP-pi*RM) +POIVIR
1875 texte=texte+'coorz .' +str(issep).rjust(23)+' = '+str(ssep.ISLP) +POIVIR
1876 texte=texte+'posit .' +str(issep).rjust(23)+" = '"+str(ssep['SOUS_EPAIS'].lower())+"'"+POIVIR
1877 texte=texte+'axelonc .'+str(issep).rjust(23)+' = '+str(ssep['AXE_LONGI']) +POIVIR
1878 if ssep['POSI_CURV_LONGI']!=None:
1879 texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(ssep['POSI_CURV_LONGI'])+POIVIR
1881 DZC=ssep.BETA*pi*(RC+(RM+EP/2.)*cos(pi/2.))/180.
1882 texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(DZC)+POIVIR
1883 if ssep['TYPE']=='AXIS':
1884 texte=texte+'axisym .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
1886 texte=texte+'axisym .'+str(issep).rjust(23)+" = 'non'"+POIVIR
1887 if ssep['EMPREINTE'] == 'OUI':
1888 texte=texte+'sousep .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
1890 texte=texte+'sousep .'+str(issep).rjust(23)+" = 'non'"+POIVIR
1893 texte=texte+'* Caracteristique de sur-epaisseur\n'
1894 texte=texte+'surep = '+str(SUREP) +POIVIR
1896 texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
1897 fpgib=open('fort.71','w')
1902 ################################################################################
1903 ################################################################################
1904 ################################################################################
1906 # ------------------------------------------------------------------------------
1907 def write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY):
1911 texte=texte+'coude extube bord1 clgv bord2 peauext peauint placoude platube\n'
1912 texte=texte+'plagv longi circo centr bou1 bou3 ligmed ligtub liggv lig45\n'
1913 texte=texte+'ligcir liglon bordtu\n'
1914 texte=texte+'= PLAQSEP bg bd bi bs indbg indbd indbi indbs rm rc\n'
1915 texte=texte+'alphac pirad epc lt lgv coory coorz axecir axelon prof zsyme posit\n'
1916 texte=texte+'lcoude nxep sousep deny nbely denz nbelz axelonc coorzc axisym\n'
1917 texte=texte+'daxhtu daxhgv nzt nzgv zcoude surep'+POIVIR
1918 texte=texte+'fdromi = ligmed . 1'+POIVIR
1919 texte=texte+'exdrmi = ligmed . 2'+POIVIR
1920 texte=texte+'extrmi = ligmed . 3'+POIVIR
1921 texte=texte+'exgami = ligmed . 4'+POIVIR
1922 texte=texte+'fgaumi = ligmed . 5'+POIVIR
1923 texte=texte+'ingami = ligmed . 6'+POIVIR
1924 texte=texte+'intrmi = ligmed . 7'+POIVIR
1925 texte=texte+'indrmi = ligmed . 8'+POIVIR
1926 texte=texte+'fdrotu = ligtub . 1'+POIVIR
1927 texte=texte+'exdrtu = ligtub . 2'+POIVIR
1928 texte=texte+'extrtu = ligtub . 3'+POIVIR
1929 texte=texte+'exgatu = ligtub . 4'+POIVIR
1930 texte=texte+'fgautu = ligtub . 5'+POIVIR
1931 texte=texte+'ingatu = ligtub . 6'+POIVIR
1932 texte=texte+'intrtu = ligtub . 7'+POIVIR
1933 texte=texte+'indrtu = ligtub . 8'+POIVIR
1934 texte=texte+"si (ega zsyme 'entier')"+POIVIR
1935 texte=texte+' fdrogv = liggv . 1'+POIVIR
1936 texte=texte+' exdrgv = liggv . 2'+POIVIR
1937 texte=texte+' extrgv = liggv . 3'+POIVIR
1938 texte=texte+' exgagv = liggv . 4'+POIVIR
1939 texte=texte+' fgaugv = liggv . 5'+POIVIR
1940 texte=texte+' ingagv = liggv . 6'+POIVIR
1941 texte=texte+' intrgv = liggv . 7'+POIVIR
1942 texte=texte+' indrgv = liggv . 8'+POIVIR
1943 texte=texte+'finsi'+POIVIR
1946 text2=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
1950 texte=texte+'*oeil = 10000. 0. 0.' +POIVIR
1951 texte=texte+'*trac oeil cach coude'+POIVIR
1952 texte=texte+'*opti donn 5' +POIVIR
1953 texte=texte+'p1 = 0. 0. (-1.*lt)'+POIVIR
1954 texte=texte+'p2 = 0. 0. (coor 3 bou3)'+POIVIR
1955 texte=texte+'ma = coude et p1 et p2'+POIVIR
1956 texte=texte+'sort ma'+POIVIR
1957 texte=texte+'neu = nbno ma'+POIVIR
1958 texte=texte+"mess 'nombre de noeuds : 'neu"+POIVIR
1959 texte=texte+"opti sauv form 'fort.8'"+POIVIR
1960 texte=texte+'sauv form ma'+POIVIR
1961 texte=texte+'fin'+POIVIR
1962 fpgib=open('fort.71','a')
1966 ################################################################################
1967 ################################################################################
1968 ################################################################################
1970 # ------------------------------------------------------------------------------
1971 def write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP,SUREP,
1972 LTCLIM,LTCHAR,NBEP,loc_datg):
1976 NZC=int((ALPHA+0.00001)/5.)
1979 DENEXT=int(LTCHAR/DELTAY)*DELTAY/4.
1984 if TYPBOL=='CUVE' : TYPEMB = 'typcuv'
1985 if TYPBOL=='GV' : TYPEMB = 'typegv'
1986 if TYPBOL=='ASP_MPP' : TYPEMB = 'typapp'
1991 texte='* DEBUT PARAMETRES UTILISATEUR\n'
1993 texte=texte+'* Parametres generaux\n'
1995 texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
1996 texte=texte+'option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
1997 texte=texte+'rm = '+str(RM) +POIVIR
1998 texte=texte+'rc = '+str(RC) +POIVIR
1999 texte=texte+'alphac = '+str(ALPHA) +POIVIR
2000 texte=texte+'epc = '+str(EP) +POIVIR
2001 texte=texte+'surep = '+str(SUREP) +POIVIR
2002 texte=texte+'lgv = '+str(LTCLIM) +POIVIR
2003 texte=texte+'lt = '+str(LTCHAR) +POIVIR
2004 texte=texte+"typembou = '"+TYPEMB+"'" +POIVIR
2005 texte=texte+'nx = '+str(NBEP) +POIVIR
2006 texte=texte+'ny = '+str(NY) +POIVIR
2007 texte=texte+"pos = 'bidon'" +POIVIR
2008 texte=texte+'l1 = 0.' +POIVIR
2009 texte=texte+'lbloc = 0.' +POIVIR
2010 texte=texte+'crit = 0.0001' +POIVIR
2011 texte=texte+'crit2 = 0.01' +POIVIR
2012 texte=texte+'epsit = 1.e-3' +POIVIR
2013 texte=texte+'pirad = '+str(pi) +POIVIR
2014 texte=texte+'nzc = '+str(NZC) +POIVIR
2015 texte=texte+'teta_f = '+str(pi/2.) +POIVIR
2016 texte=texte+'zpp31 = '+str(CZ) +POIVIR
2017 texte=texte+'daxbtu = '+str(DENEXT) +POIVIR
2018 texte=texte+'daxhtu = '+str(DELTAZ) +POIVIR
2019 texte=texte+'daxbgv = '+str(DELTAZ) +POIVIR
2020 texte=texte+'daxhgv = '+str(DENEXT) +POIVIR
2021 texte=texte+'nzt = '+str(NZT) +POIVIR
2022 texte=texte+'nzgv = '+str(NZGV) +POIVIR
2024 texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
2025 texte = texte + open(os.path.join(loc_datg, 'ascouf_regl_v1.datg'), 'r').read()
2026 fdgib=open(nomFichierDATG,'w')
2030 ################################################################################
2031 ################################################################################
2032 ################################################################################
2033 # ------------------------------------------------------------------------------
2034 def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
2035 SOUS_EPAIS_COUDE,SOUS_EPAIS_MULTI,
2036 FISS_COUDE,IMPRESSION,INFO,**args):
2038 Ecriture de la macro MACR_ASCOUF_MAIL
2040 from Accas import _F
2046 # On importe les definitions des commandes a utiliser dans la macro
2047 EXEC_LOGICIEL =self.get_cmd('EXEC_LOGICIEL')
2048 PRE_GIBI =self.get_cmd('PRE_GIBI')
2049 LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
2050 DEFI_GROUP =self.get_cmd('DEFI_GROUP')
2051 MODI_MAILLAGE =self.get_cmd('MODI_MAILLAGE')
2052 CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
2053 DEFI_FICHIER =self.get_cmd('DEFI_FICHIER')
2054 IMPR_RESU =self.get_cmd('IMPR_RESU')
2056 # La macro compte pour 1 dans la numerotation des commandes
2061 NIVMAG = EXEC_MAILLAGE['NIVE_GIBI']
2064 CAR3 = ('IFDRO','IEXDR','IEXTR','IEXGA','IFGAU','IINGA','IINTR','IINDR')
2065 CAR4 = ('NOFDRO','NOEXDR','NOEXTR','NOEXGA','NOFGAU','NOINGA','NOINTR','NOINDR')
2066 CAR5 = ('NEFDRO','NEEXDR','NEEXTR','NEEXGA','NEFGAU','NEINGA','NEINTR','NEINDR')
2067 CAR6 = ('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR')
2068 SECT = ('MI','TU','GV')
2071 ################################################################################
2072 # --- caracteristiques du coude ---
2073 ################################################################################
2075 GEOM =COUDE['TRANSFORMEE']
2076 ALPHA =COUDE['ANGLE']
2077 RC =COUDE['R_CINTR']
2078 LTCHAR =COUDE['L_TUBE_P1']
2079 LTCLIM =COUDE['L_TUBE_P2']
2080 NBEP =COUDE['NB_ELEM_EPAIS']
2085 if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
2086 SUREP=COUDE['SUR_EPAIS']
2087 TYPBOL =COUDE['BOL_P2']
2088 DEXT = COUDE['DEXT']
2089 EP1 = COUDE['EPAIS']
2098 if COUDE['SYME']!='ENTIER':
2099 message= ' les quart et demi structure \n'
2100 message=message+' ne peuvent etre realisees \n'
2101 message=message+' sur un modele comportant une transition \n'
2102 message=message+' d epaisseur \n'
2103 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2105 DEXT = COUDE['DEXT_T1']
2106 EP1 = COUDE['EPAIS_T1']
2107 EP2 = COUDE['EPAIS_T2']
2108 TETA1 = COUDE['ANGL_TETA1']
2111 if COUDE['ANGL_TETA2']!=None :
2113 TETA2 = COUDE['ANGL_TETA2']
2114 EPI = COUDE['EPAIS_TI']
2116 if COUDE['ABSC_CURV_TRAN']!=None :
2117 LTRAN = COUDE['ABSC_CURV_TRAN']
2119 LTRAN = COUDE['POSI_ANGU_TRAN']* RC * pi / 180.0
2122 RM2 = RM + (EP2-EP1)/2.0
2127 if COUDE['SYME']!='ENTIER' and (LTCHAR!=LTCLIM) :
2128 message= ' les deux embouts doivent etre \n'
2129 message=message+' de meme longueur pour les cas de symetrie \n'
2130 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2132 LAMOR = 3.0/2.0 * sqrt( RM*RM*RM / EP1)
2134 message= ' longueur d embout P1 inferieure \n'
2135 message=message+' a la longueur d amortissement = %.2f \n'%LAMOR
2136 UTMESS('A', "MACR_ASCOUF_MAIL", message)
2138 LAMOR = 3.0/2.0 * sqrt( RM2*RM2*RM2 / EP2)
2140 message= ' longueur d embout P2 inferieure \n'
2141 message=message+' a la longueur d amortissement = %.2f \n'%LAMOR
2142 UTMESS('A', "MACR_ASCOUF_MAIL", message)
2145 if TYPBOL[:1]=='GV' :
2146 message= ' la condition aux limites raccord \n'
2147 message=message+' 3d-poutre appliquee avec la macro de calcul \n '
2148 message=message+' ascouf n est pas licite avec un embout \n'
2149 message=message+' de type conique \n'
2150 UTMESS('A', "MACR_ASCOUF_MAIL", message)
2152 ################################################################################
2153 # --- caracteristiques de la fissure ---
2154 ################################################################################
2156 if FISS_COUDE!=None:
2158 message= ' le nombre d elements dans l epaisseur \n'
2159 message=message+' du coude n est pas parametrable pour \n'
2160 message=message+' un coude avec fissure \n'
2161 message=message+' mot-cle NB_ELEM_EPAIS ignore \n'
2162 UTMESS('A', "MACR_ASCOUF_MAIL", message)
2163 FPROF = FISS_COUDE['PROFONDEUR']
2164 FAXI = FISS_COUDE['AXIS']
2165 if FAXI=='NON' and FISS_COUDE['LONGUEUR']==None :
2166 message= ' pour les fissures non axisymetriques \n'
2167 message=message+' la longueur doit etre specifiee \n'
2168 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2169 if FAXI=='OUI' and FISS_COUDE['LONGUEUR']!=None :
2170 message= ' la fissure est axisymetrique : on ne \n'
2171 message=message+' tient pas compte de la longueur specifiee \n'
2172 UTMESS('A', "MACR_ASCOUF_MAIL", message)
2173 if FISS_COUDE['LONGUEUR']!=None : FLONG = FISS_COUDE['LONGUEUR']
2175 #### on prend une marge de securite a cause des modifs dans ascfis
2176 FLONG = 2.0 * pi * (RM + EP1)
2177 if FISS_COUDE['ABSC_CURV']!=None :
2178 SF = FISS_COUDE['ABSC_CURV']
2183 BETA = FISS_COUDE['POSI_ANGUL']
2184 LDEFAU = BETA * RC * pi / 180.0
2185 AZIM = FISS_COUDE['AZIMUT']
2186 ORIEN = FISS_COUDE['ORIEN']
2187 POSIT = FISS_COUDE['FISSURE']
2188 NT = FISS_COUDE['NB_TRANCHE']
2189 NS = FISS_COUDE['NB_SECTEUR']
2190 NC = FISS_COUDE['NB_COURONNE']
2191 if FISS_COUDE['RAYON_TORE']!=None : RC0 = FISS_COUDE['RAYON_TORE']
2193 if FISS_COUDE['COEF_MULT_RC2']!=None : RC2 = FISS_COUDE['COEF_MULT_RC2']
2195 if FISS_COUDE['COEF_MULT_RC3']!=None : RC3 = FISS_COUDE['COEF_MULT_RC3']
2197 EPSI = FISS_COUDE['ANGL_OUVERTURE']
2203 if ORIEN!=90.0 and NBTRAN!=0 :
2204 message= ' avec une transition d epaisseur \n'
2205 message=message+' la fissure doit obligatoirement etre transverse \n'
2206 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2207 if ORIEN!=90.0 and NBTRAN!=0 :
2208 message= ' avec une transition d epaisseur \n'
2209 message=message+' la fissure doit obligatoirement etre transverse \n'
2210 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2211 if ORIEN!=90.0 and COUDE['SYME']!='ENTIER' :
2212 message= ' l orientation de la fissure doit \n'
2213 message=message+' etre transverse (orien : 90.) pour modeliser \n'
2214 message=message+' un quart ou une demi structure \n'
2215 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2216 if ORIEN!=90.0 and FAXI=='OUI' :
2217 message= ' la fissure est axisymetrique : son \n'
2218 message=message+' orientation doit etre transverse (ORIEN : 90.) \n'
2219 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2221 ################################################################################
2222 # --- caracteristiques des sous epaisseurs ---
2223 ################################################################################
2226 MCL_SOUS_EPAIS = None
2227 if SOUS_EPAIS_MULTI!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_MULTI
2228 if SOUS_EPAIS_COUDE!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_COUDE
2229 if SOUS_EPAIS_MULTI!=None and NBTRAN!=0 :
2230 message= ' il ne peut pas y avoir plusieurs \n'
2231 message=message+' sous-epaisseurs en meme temps qu une \n'
2232 message=message+' transition d epaisseur : si une seule \n'
2233 message=message+' sous-epaisseur utiliser sous_epais_coude \n'
2234 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2235 if SOUS_EPAIS_COUDE!=None and FISS_COUDE!=None and NBTRAN!=0 :
2236 message= ' avec une transition d epaisseur'
2237 message=message+' il doit obligatoirement y avoir un defaut \n'
2238 message=message+' soit une fissure soit une sous-epaisseur \n'
2239 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2240 if MCL_SOUS_EPAIS!=None :
2242 if MCL_SOUS_EPAIS.__class__.__name__ !='MCList' : MCL_SOUS_EPAIS=[MCL_SOUS_EPAIS,]
2243 if len(MCL_SOUS_EPAIS)!=1 and COUDE['SYME']!='ENTIER' :
2244 message= ' ne modeliser qu une seule \n'
2245 message=message+' sous-epaisseur pour un quart ou demi-coude\n '
2246 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2247 for ssep in MCL_SOUS_EPAIS :
2249 if ssep['AXE_CIRC']!=None and ssep['TYPE']=='AXIS' :
2250 message= ' vous ne pouvez declarer la sous- \n'
2251 message=message+' epaisseur comme axisymetrique et donner \n'
2252 message=message+' une taille d axe circonferentiel \n'
2253 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2254 if ssep['AXE_CIRC']==None and ssep['TYPE']=='ELLI' :
2255 message= ' vous devez donner une taille d axe \n'
2256 message=message+' circonferentiel pour une sous-epaisseur de \n'
2257 message=message+' type elliptique \n'
2258 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2259 if ssep['POSI_CURV_LONGI']!=None:
2260 if ssep['POSI_CURV_LONGI']>(ALPHA*RC*pi/180.0) :
2261 message= ' valeur hors domaine de validite \n'
2262 message=message+' sous-epaisseur numero : %d \n'%isep
2263 message=message+' abscisse curv. longit. : %.2f \n'%ssep['POSI_CURV_LONGI']
2264 message=message+' valeur maximale autorisee : %.2f \n'%(ALPHA*RC*pi/180.0)
2265 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2266 LDEFAU = ssep['POSI_CURV_LONGI'] + ssep['AXE_LONGI']/2.0
2269 BETA=ssep['POSI_ANGUL']
2270 if (BETA<0.) or (BETA>ALPHA) :
2271 message= ' valeur hors domaine de validite \n'
2272 message=message+' sous-epaisseur numero : %d \n'%isep
2273 message=message+' position angulaire centre sous-ep : %.2f \n'%BETA
2274 message=message+' valeur limite autorisee : %.2f \n'%ALPHA
2275 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2276 LDEFAU = (BETA*RC*pi/180.0) + ssep['AXE_LONGI']/2.0
2278 if ssep['POSI_CURV_CIRC']!=None:
2279 if ssep['POSI_CURV_CIRC']>(2*pi*RM) :
2280 message= ' valeur hors domaine de validite \n'
2281 message=message+' sous-epaisseur numero : %d \n'%isep
2282 message=message+' abscisse curv. circonf. : %.2f \n'%ssep['POSI_CURV_CIRC']
2283 message=message+' valeur limite autorisee : %.2f \n'%(2*pi*RM)
2284 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2285 if ssep['POSI_CURV_CIRC']!=(pi*RM) and ssep['TYPE']=='AXIS':
2286 message= ' le centre d une sous-epaisseur \n'
2287 message=message+' axisymetrique est impose en intrados (pi*RM) \n'
2288 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2290 ssep.IPHIC=ssep['AZIMUT']
2291 if ssep['AZIMUT']!=180. and ssep['TYPE']=='AXIS':
2292 message= ' le centre d une sous-epaisseur \n'
2293 message=message+' axisymetrique est impose en intrados \n'
2294 message=message+' l azimut est fixe a 180 degres \n'
2295 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2296 # l_ITYPE.append(ssep['TYPE' ])
2297 # l_ICIRC.append(ssep['AXE_CIRC' ])
2298 # l_ILONC.append(ssep['AXE_LONGI' ])
2299 # l_IPROC.append(ssep['PROFONDEUR' ])
2300 # l_ISLC.append( ssep['POSI_CURV_LONGI'])
2301 # l_IBETC.append(BETA)
2303 # l_ISCC.append( ssep['POSI_CURV_CIRC' ])
2304 # l_IPHIC.append(ssep['AZIMUT' ])
2305 # l_IPOS.append( ssep['SOUS_EPAIS' ])
2306 # l_INBEL.append(ssep['NB_ELEM_LONGI' ])
2307 # l_INBEC.append(ssep['NB_ELEM_CIRC' ])
2308 # l_IEVID.append(ssep['EMPREINTE' ])
2310 if SOUS_EPAIS_COUDE!=None and COUDE['NB_ELEM_EPAIS']!=3 :
2311 message= ' le nombre d elements dans l \n'
2312 message=message+' epaisseur du coude n est pas parametrable pour \n'
2313 message=message+' la version 2 de la procedure de plaque avec sous \n'
2314 message=message+' -epaisseur : mot-cle NB_ELEM_EPAIS ignore \n'
2315 UTMESS('A', "MACR_ASCOUF_MAIL", message)
2317 ################################################################################
2318 # --- verifications de coherences ---
2319 ################################################################################
2322 if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
2323 if SUREP<0. or SUREP>(RM-EP1/2.0):
2324 message= ' valeur hors domaine de validite \n'
2325 message=message+' surepaisseur : \n',SUREP
2326 message=message+' valeur limite autorisee (RM-EP1/2) : %.2f \n'%(RM-EP1/2.0)
2327 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2328 if RC<=(RM+EP1/2.0):
2329 message= ' valeur hors domaine de validite \n'
2330 message=message+' le rayon de cintrage : %.2f \n',RC
2331 message=message+' doit etre superieur a (RM+EP1/2) : %.2f \n'%(RM+EP1/2.0)
2332 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2336 if FISS_COUDE!=None:
2337 if (RM/EP1)<5. or (RM/EP1)>50.:
2338 message= ' valeur hors domaine de validite (5,50) \n'
2339 message=message+' rapport RM/EP1 : %.2f \n'%(RM/EP1)
2340 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2341 if FISS_COUDE['ABSC_CURV']!=None:
2342 if SF<0. or SF>(ALPHA*RC*pi/180.0) :
2343 message= ' valeur hors domaine de validite \n'
2344 message=message+' abscisse curviligne centre fissure : %.2f \n'%SF
2345 message=message+' valeur limite autorisee : %.2f \n'%(ALPHA*RC*pi/180.0)
2346 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2347 if (NT-2*(NT/2))!=0:
2348 message= ' valeur hors domaine de validite \n'
2349 message=message+' nombre de tranches : %d \n'%NT
2350 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2351 if FISS_COUDE['ABSC_CURV'] and ((BETA<0.) or (BETA>ALPHA)):
2352 message= ' valeur hors domaine de validite \n'
2353 message=message+' position angulaire centre fissure : %.2f \n'%BETA
2354 message=message+' posi_angul doit etre >= 0 et <= %.2f \n'%ALPHA
2355 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2357 # transition d epaisseur
2360 LCOUDE = ALPHA * RC * pi / 180.0
2362 if (LTRAN<LDEFAU) and (LTRAN>LCOUDE) :
2363 message= ' valeur hors domaine de validite \n'
2364 message=message+' debut transition d epaisseur : %.2f \n'%LTRAN
2365 message=message+' valeur minimale autorisee : %.2f \n'%LDEFAU
2366 message=message+' valeur maximale autorisee : %.2f \n'%LCOUDE
2367 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2368 if (TETA1<0.) or (TETA1>30.) :
2369 message= ' valeur hors domaine de validite \n'
2370 message=message+' angle de transition TETA1 : %.2f \n'%TETA1
2371 message=message+' valeur minimale autorisee : %.2f \n'%0.
2372 message=message+' valeur maximale autorisee : %.2f \n'%30.
2373 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2375 # transition d epaisseur a une pente
2378 if (EP1<12.) or (EP1>80.) :
2379 message= ' valeur hors domaine de validite \n'
2380 message=message+' epaisseur avant la transition : %.2f \n'%EP1
2381 message=message+' valeur minimale autorisee : %.2f \n'%12.
2382 message=message+' valeur maximale autorisee : %.2f \n'%80.
2383 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2384 if (EP2<20.) or (EP2>110.) :
2385 message= ' valeur hors domaine de validite \n'
2386 message=message+' epaisseur apres la transition : %.2f \n'%EP2
2387 message=message+' valeur minimale autorisee : %.2f \n'%20.
2388 message=message+' valeur maximale autorisee : %.2f \n'%110.
2389 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2391 message= ' l epaisseur avant la transition \n'
2392 message=message+' doit etre inferieure \n'
2393 message=message+' a celle apres la transition \n'
2394 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2395 LTRANF = LTRAN + ((EP2-EP1)/(tan(TETA1)))
2396 if (LTRANF>LCOUDE) :
2397 message= ' valeur hors domaine de validite \n'
2398 message=message+' fin transition d epaisseur : %.2f \n'%LTRANF
2399 message=message+' valeur limite autorisee : %.2f \n'%LCOUDE
2400 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2401 if DEXT<112. or DEXT>880. :
2402 message= ' valeur hors domaine de validite\n'
2403 message=message+' diam ext du tube avant transition: %.2f \n'%DEXT
2404 message=message+' valeur minimum autorisee : %.2f \n'%112.
2405 message=message+' valeur maximum autorisee : %.2f \n'%880.
2406 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2408 # transition d epaisseur a une pente
2411 if (TETA2<0.) or (TETA2>45.) :
2412 message= ' valeur hors domaine de validite\n'
2413 message=message+' angle de transition TETA2: %.2f \n'%TETA2
2414 message=message+' valeur minimum autorisee : %.2f \n'%0.
2415 message=message+' valeur maximum autorisee : %.2f \n'%45.
2416 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2417 if (EP1<7.) or (EP1>35.) :
2418 message= ' valeur hors domaine de validite\n'
2419 message=message+' epaisseur avant 1ere transition: %.2f \n'%EP1
2420 message=message+' valeur minimum autorisee : %.2f \n'%7.
2421 message=message+' valeur maximum autorisee : %.2f \n'%35.
2422 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2423 if (EP2<15.) or (EP2>40.) :
2424 message= ' valeur hors domaine de validite\n'
2425 message=message+' epaisseur avant 2eme transition: %.2f \n'%EP2
2426 message=message+' valeur minimum autorisee : %.2f \n'%15.
2427 message=message+' valeur maximum autorisee : %.2f \n'%40.
2428 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2429 if (EPI<15.) or (EPI>40.) :
2430 message= ' valeur hors domaine de validite\n'
2431 message=message+' epaisseur intermediaire: %.2f \n'%EPI
2432 message=message+' valeur minimum autorisee : %.2f \n'%15.
2433 message=message+' valeur maximum autorisee : %.2f \n'%40.
2434 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2436 message= ' valeur hors domaine de validite\n'
2437 message=message+' l epaisseur avant la transition \n'
2438 message=message+' doit etre inferieure a l epaisseur intermediaire \n'
2439 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2441 message= ' valeur hors domaine de validite\n'
2442 message=message+' l epaisseur apres la transition \n'
2443 message=message+' doit etre inferieure a l epaisseur intermediaire \n'
2444 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2445 LTRANF = LTRAN + (EPI-EP1)/(tan(TETA1))
2446 LTRANF = LTRANF + (EP2-EPI)/(tan(TETA2))
2447 if (LTRANF>LCOUDE) :
2448 message= ' valeur hors domaine de validite\n'
2449 message=message+' fin transition d epaisseur: %.2f \n'%LTRANF
2450 message=message+' valeur limite autorisee : %.2f \n'%LCOUDE
2451 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2452 if (DEXT<77.) or (DEXT>355.) :
2453 message= ' valeur hors domaine de validite\n'
2454 message=message+' diam ext du tube avant transition: %.2f \n'%LTRANF
2455 message=message+' valeur minimum autorisee : %.2f \n'%77.
2456 message=message+' valeur maximum autorisee : %.2f \n'%355.
2457 UTMESS('F', "MACR_ASCOUF_MAIL", message)
2459 ################################################################################
2460 # --- calcul taille initiale des defauts sur la plaque ---
2461 ################################################################################
2464 if FISS_COUDE!=None:
2465 DSF=(FISS_COUDE['ABSC_CURV']!=None)
2466 AXEAP,AXECP,SFP = ASCFIS(ALPHA, RM, RC, EP1, SUREP, GEOM, FPROF,
2467 DGAXEC, AZIM, POSIT, SF, DSF, BETA, ORIEN)
2468 elif MCL_SOUS_EPAIS!=None :
2469 ier,AZIMC= ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP1,GEOM,SYME)
2470 for ssep in MCL_SOUS_EPAIS:
2471 ssep.IDENL = ssep.ILONP/ssep['NB_ELEM_LONGI']*180./(pi*RC)
2472 ssep.IDENC = ssep.ICIRP/ssep['NB_ELEM_CIRC']*180./(pi*RM)
2474 # quart de structure
2475 ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY\
2476 = ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM)
2478 # demi-structure ou entiere
2479 ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY\
2480 = ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM)
2483 loc_gibi=aster.repout()
2484 logiel = EXEC_MAILLAGE['LOGICIEL' ]
2485 UNITD = EXEC_MAILLAGE['UNITE_DATG']
2486 UNITP = EXEC_MAILLAGE['UNITE_MGIB']
2487 if logiel=='GIBI98' : logiel = loc_gibi+'gibi98'
2488 elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000'
2491 UTMESS('F', "MACR_ASCOUF_MAIL", "seuls gibi98 et gibi2000 sont appelables")
2493 # --- ecriture sur le fichier .datg de la procedure ---
2495 # Nom du fichier de commandes pour GIBI
2496 nomFichierDATG = 'fort.'+str(UNITD)
2497 # Nom du fichier de maillage GIBI
2498 nomFichierGIBI = 'fort.'+str(UNITP)
2499 loc_datg = aster.repdex()
2501 if FISS_COUDE!=None:
2502 # procedure coude fissure (MOT-CLE FISS_COUDE)
2503 write_file_dgib_ASCFDO(nomFichierDATG,RM,RC,ALPHA,NBTRAN,EP1,EP2,EPI,TETA1,
2504 TETA2,LTRAN,SUREP,LTCHAR,LTCLIM,TYPBOL,AXEAP,AXECP,NT,NS,NC,SFP,
2505 ORIEN,AZIM,RC0,RC2,RC3,POSIT,EPSI,NIVMAG,SYME,loc_datg)
2506 elif MCL_SOUS_EPAIS!=None :
2507 if SOUS_EPAIS_MULTI==None :
2508 # procedure coude sous-ep.: (MOT-CLE SOUS_EPAIS_COUDE)
2509 write_file_dgib_ASCSQO(nomFichierDATG,TYPELE,RM,RC,ALPHA,NBTRAN,EP1,EP2,
2510 EPI,TETA1,MCL_SOUS_EPAIS,TETA2,LTRAN,LTCHAR,LTCLIM,GEOM,
2511 SYME,NBEP,NLX,NLY,NIVMAG,SUREP,AZIMC,loc_datg)
2512 write_file_pgib_ASCSQ2(MCL_SOUS_EPAIS,NLX,NLY)
2514 # procedure coude sous-ep.:(MOT-CLE SOUS_EPAIS_MULTI)
2515 write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg)
2516 write_file_pgib_ASCSDO(RM,RC,ALPHA,EP1,LTCLIM,LTCHAR,NBEP,SUREP,
2517 NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,
2518 DNX,DNY,MCL_SOUS_EPAIS,GEOM,SYME)
2519 write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY)
2521 # procedure coude regle
2522 write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP1,SUREP,
2523 LTCLIM,LTCHAR,NBEP,loc_datg)
2527 DEFI_FICHIER(ACTION='LIBERER',UNITE=19)
2528 DEFI_FICHIER(ACTION='LIBERER',UNITE=20)
2529 EXEC_LOGICIEL( LOGICIEL = logiel ,
2530 ARGUMENT = (nomFichierDATG,
2536 __nomres=LIRE_MAILLAGE(INFO=INFO)
2542 l_CREA_GROUP_NO.append('BORD1')
2543 l_CREA_GROUP_NO.append('CLGV')
2544 l_CREA_GROUP_NO.append('BORD2')
2545 l_CREA_GROUP_NO.append('PEAUINT')
2546 l_CREA_GROUP_NO.append('PEAUEXT')
2548 # cas des fissures axisymetriques
2549 if FISS_COUDE!=None:
2550 if FISS_COUDE['AXIS']=='OUI':
2551 motscles['CREA_GROUP_MA']=[]
2552 motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
2554 POSITION = 'INIT' , ),)
2556 # conversion des groupes de mailles en groupes du bloc fissure
2557 if FISS_COUDE!=None:
2558 if SYME == 'ENTIER':
2559 l_CREA_GROUP_NO.append('NOLIG1')
2560 l_CREA_GROUP_NO.append('FACE1')
2561 l_CREA_GROUP_NO.append('NOLIG2')
2562 l_CREA_GROUP_NO.append('FACE2')
2563 l_CREA_GROUP_NO.append('FONDFISS')
2565 motscles['CREA_GROUP_NO']=[]
2566 motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=tuple(l_CREA_GROUP_NO)))
2568 # conversion des groupes de mailles en groupes de noeuds pour les
2569 # ligaments des sous-ep.
2570 if MCL_SOUS_EPAIS!=None:
2572 for ssep in MCL_SOUS_EPAIS:
2574 if ssep['TYPE']=='ELLI':
2575 for k in range(2*NLX[issep-1]+1):
2576 chtmp=str(issep)+'_'+str(k+1)
2579 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2581 motscles['CREA_GROUP_NO'].append(_F(NOM = 'IPCEN'+str(issep),
2582 GROUP_MA = 'PCENT'+str(issep),),)
2583 for k in range(2*NLY[issep-1]+1):
2584 chtmp=str(issep)+'_'+str(k+1)
2587 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2589 for k in range(2*NLX[issep-1]+1):
2590 chtmp=str(issep)+'_'+str(k+1)
2594 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2595 INTERSEC = ('PEAUEXT',ch1),),)
2596 motscles['CREA_GROUP_NO'].append(_F(NOM = ch3,
2597 INTERSEC = ('PEAUINT',ch1),),)
2598 motscles['CREA_GROUP_NO'].append(_F(NOM = 'OPCEN'+str(issep),
2599 INTERSEC = ('PEAUEXT','IPCEN'+str(issep),),),)
2600 motscles['CREA_GROUP_NO'].append(_F(NOM = 'EPCEN'+str(issep),
2601 INTERSEC = ('PEAUINT','IPCEN'+str(issep),),),)
2602 for k in range(2*NLY[issep-1]+1):
2603 chtmp=str(issep)+'_'+str(k+1)
2607 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2608 INTERSEC = ('PEAUEXT',ch1),),)
2609 motscles['CREA_GROUP_NO'].append(_F(NOM = ch3,
2610 INTERSEC = ('PEAUINT',ch1),),)
2611 for k in range(2*NLX[issep-1]+1):
2612 chtmp=str(issep)+'_'+str(k+1)
2617 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2620 GROUP_NO_ORIG = ch3,
2621 GROUP_NO_EXTR = ch4,
2623 CRITERE = CRITER,),)
2624 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2625 NOM = 'PCENT'+str(issep),
2626 GROUP_NO = 'IPCEN'+str(issep),
2627 GROUP_NO_ORIG = 'OPCEN'+str(issep),
2628 GROUP_NO_EXTR = 'EPCEN'+str(issep),
2630 CRITERE = CRITER,),)
2631 for k in range(2*NLY[issep-1]+1):
2632 chtmp=str(issep)+'_'+str(k+1)
2637 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2640 GROUP_NO_ORIG = ch3,
2641 GROUP_NO_EXTR = ch4,
2643 CRITERE = CRITER,),)
2644 # 1/ noms intermediaires des groupes de noeuds representant les ligaments
2645 # des sections: TU,MI,GV et sous-ep.
2647 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR3[k]+str(issep),
2648 GROUP_MA = CAR6[k]+str(issep),),)
2651 if SYME == 'ENTIER' or k!=2:
2653 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR3[j]+SECT[k],
2654 GROUP_MA = CAR6[j]+SECT[k],),)
2656 # 2/ determination et nommage des noeuds origine et extremite des groupes de noeuds
2657 # representant les ligaments de la ou des sections: sous-ep.
2659 for ssep in MCL_SOUS_EPAIS:
2662 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR4[k]+str(issep),
2663 INTERSEC = ('PEAUEXT',CAR3[k]+str(issep),),),)
2664 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR5[k]+str(issep),
2665 INTERSEC = ('PEAUINT',CAR3[k]+str(issep),),),)
2666 # 3/ nommage final des groupes de noeuds representant les ligaments
2667 # de la ou des sections: sous-ep.
2669 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2670 NOM = CAR6[k]+str(issep),
2671 GROUP_NO = CAR3[k]+str(issep),
2672 GROUP_NO_ORIG = CAR4[k]+str(issep),
2673 GROUP_NO_EXTR = CAR5[k]+str(issep),
2675 CRITERE = CRITER,),)
2677 # 4/ determination et nommage des noeuds origine et extremite des groupes de noeuds
2678 # representant les ligaments des sections: TU,MI,GV
2680 if SYME == 'ENTIER' or k!=2:
2682 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR4[j]+SECT[k],
2683 INTERSEC = ('PEAUEXT',CAR3[j]+SECT[k],),),)
2684 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR5[j]+SECT[k],
2685 INTERSEC = ('PEAUINT',CAR3[j]+SECT[k],),),)
2686 # 5/ nommage final des groupes de noeuds representant les ligaments des sections: TU,MI,GV
2688 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2689 NOM = CAR6[j]+SECT[k],
2690 GROUP_NO = CAR3[j]+SECT[k],
2691 GROUP_NO_ORIG = CAR4[j]+SECT[k],
2692 GROUP_NO_EXTR = CAR5[j]+SECT[k],
2694 CRITERE = CRITER,),)
2697 __nomres=DEFI_GROUP(reuse =__nomres,
2702 if FISS_COUDE!=None:
2703 # creation des groupes petit axe et grand axe fissure par
2704 # intersection de groupes existants
2706 motscles['CREA_GROUP_NO']=[]
2709 if POSIT == 'DEB_INT':
2710 l_peau.append('PEAUINT')
2712 l_peau.append('PEAUEXT')
2714 if SYME == 'ENTIER' :
2715 l_intersec.append('FACE1')
2716 motscles['CREA_GROUP_NO'].append(_F(NOM = 'P_AXE_1',
2717 INTERSEC = ('NOLIG1','FACE1'),),)
2718 motscles['CREA_GROUP_NO'].append(_F(NOM = 'G_AXE_1',
2719 INTERSEC = tuple(l_peau+l_intersec),),)
2721 l_intersec.append('FACE2')
2722 motscles['CREA_GROUP_NO'].append(_F(NOM = 'P_AXE_2',
2723 INTERSEC = ('NOLIG2','FACE2'),),)
2724 motscles['CREA_GROUP_NO'].append(_F(NOM = 'G_AXE_2',
2725 INTERSEC = tuple(l_peau+l_intersec),),)
2727 __nomres=DEFI_GROUP(reuse =__nomres,
2734 motscles['TUBE_COUDE']=[]
2735 motscles['TUBE_COUDE'].append(_F(ANGLE=ALPHA,
2738 motscles['PLAQ_TUBE']=[]
2740 D_PLAQ_TUBE['DEXT']=DEXT
2741 D_PLAQ_TUBE['EPAIS']=EP1
2742 D_PLAQ_TUBE['L_TUBE_P1']=LTCHAR
2743 if SYME == 'QUART' : D_PLAQ_TUBE['COUTURE']='NON'
2744 if FISS_COUDE!=None:
2745 D_PLAQ_TUBE['AZIMUT']=AZIM
2746 elif SOUS_EPAIS_COUDE!=None :
2747 D_PLAQ_TUBE['AZIMUT']=MCL_SOUS_EPAIS[0].IPHIC
2749 motscles['PLAQ_TUBE'].append(_F(**D_PLAQ_TUBE),)
2750 __nomres=MODI_MAILLAGE( reuse =__nomres,
2756 motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE'),)
2757 if FISS_COUDE!=None:
2758 if FISS_COUDE['FISSURE'] == 'DEB_INIT':
2759 motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE','FACE1','FACE2'),)
2760 __nomres=MODI_MAILLAGE(reuse =__nomres,
2765 self.DeclareOut('nomre2',self.sd)
2767 motscles['CREA_POI1']=[]
2768 motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P1',
2771 motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P2',
2773 nomre2=CREA_MAILLAGE( MAILLAGE=__nomres,
2778 if IMPRESSION!=None:
2779 if IMPRESSION.__class__.__name__ !='MCList' : IMPRESSION =[IMPRESSION,]
2780 for impr in IMPRESSION :
2783 if impr['FORMAT']=='IDEAS' : motscles['VERSION'] =impr['VERSION']
2784 if impr['FORMAT']=='CASTEM' : motscles['NIVE_GIBI'] =impr['NIVE_GIBI']
2785 if impr['UNITE']!=None : motscles['UNITE'] =impr['UNITE']
2786 impr_resu = _F( MAILLAGE = nomre2,)
2788 IMPR_RESU( RESU = impr_resu,
2789 FORMAT= impr['FORMAT'],**motscles)