1 #@ MODIF macr_ascouf_mail_ops Macro DATE 19/11/2007 AUTEUR COURTOIS 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
28 from Utilitai.Utmess import UTMESS
32 # ------------------------------------------------------------------------------
33 def ASCFON(RC,RM,EP,ORIEN,AZIM,AXEC,POS,Y):
36 OU CC EST LA TAILLE DE LA FISSURE SUR LE COUDE
37 ET CP LA TAILLE DE FISSURE SUR LA PLAQUE
39 AZIMR = AZIM*2.*pi/360.
40 if POS=='DEB_INT': X = RM-EP/2.
42 if abs(ORIEN-45.0)<0.01: SIG = 1.
44 f_ASCFON = - SIG*X*RC/(2.*RM*sin(AZIMR)) * ( \
45 log ( RM/X+RM/RC*(cos(AZIMR)- \
46 sin(AZIMR)*SIG*Y/(sqrt(2.)*RM)) + \
47 sqrt( 1.+( RM/X+RM/RC*(cos(AZIMR)- \
48 sin(AZIMR)*SIG*Y/(sqrt(2.)*RM)) )**2 ) \
50 - log ( RM/X+RM/RC*cos(AZIMR) \
51 + sqrt( 1. +(RM/X+RM/RC*cos(AZIMR))**2) \
53 - SIG*X*RC/(2.*RM*SIN(AZIMR)) * \
54 ( ( RM/X+RM/RC* ( cos(AZIMR)- \
55 sin(AZIMR)*SIG*Y/(sqrt(2.0)*RM) ) \
56 ) * sqrt( 1. + ( RM/X+RM/RC*(cos(AZIMR)- \
57 sin(AZIMR)*SIG*Y/(SQRT(2.)*RM)) )**2 ) \
58 - ( RM/X+RM/RC*COS(AZIMR) ) \
59 * sqrt( 1. +(RM/X+RM/RC*cos(AZIMR))**2) \
64 # ------------------------------------------------------------------------------
65 def ASCFIS(ALPHA, RM, RC, EP, SUREP, GEOM, AXEA,
66 AXEC, AZIM, POS, SF, DSF, BETA, ORIEN):
68 MACR_ASCOUF_MAIL ASCFIS
69 taille initiale du defaut fissure sur la plaque en
70 fonction des donnees sur le coude ou le tube suivant la
71 transformation choisie
73 ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
75 ALPHA = ANGLE DU COUDE
76 RM = RAYON MOYEN DU COUDE
77 RC = RAYON DE CINTRAGE DU COUDE
78 EP = EPAISSEUR DU COUDE
79 SUREP = VALEUR DE LA SUREPAISSEUR
80 GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
81 AXEA = PROFONDEUR FISSURE (DEMI PETIT AXE)
82 AXEC = DEMI GRAND AXE FISSURE
83 AZIM = POSITION AZIMUTALE DU CENTRE DE LA FISSURE
84 POS = POSITION EN PEAU (EXTERNE OU INTERNE)
85 SF = ABCISSE CURVILIGNE LONGITUDINALE DU CENTRE DE LA FISSURE
86 DSF = BOOLEEN EXPRESSION POSITION CENTRE FISSURE
87 BETA = POSITION ANGULAIRE DU CENTRE DE LA FISSURE
88 ORIEN = ORIENTATION DE LA FISSURE
90 -----------------DONNEES RENVOYEES-----------------------
92 AXEAP = PROFONDEUR DE LA FISSURE (PETIT AXE) SUR LA PLAQUE
93 AXECP = LONGUEUR DE LA FISSURE (GRAND AXE) SUR LA PLAQUE
94 SFP = ABCISSE CURVILIGNE LONGITUDINALE CENTRE FISSURE
98 from Utilitai import funct_root
99 echo_mess=['MACR_ASCOUF_MAIL ASCFIS \n',]
101 if (AZIM>=120.) and (AZIM<=240.0): X = RM-EP/2.0 - SUREP
104 AZIMR = AZIM*2.0*pi/360.0
106 # -- CALCUL COTE AXIALE DU CENTRE FISSURE SUR LA PLAQUE EN FONCTION
107 # DE L ABSCISSE CURVILIGNE DONNEE SUR LE COUDE OU DE LA POSITION
111 if GEOM=='COUDE': SFP = SF/(1.0+X/RC*cos(AZIMR))
114 BETAR = BETA*2.0*pi/360.0
116 SF = BETAR*(RC+X*cos(AZIMR))
117 SFP = SF/(1.0+X/RC*cos(AZIMR))
121 if (GEOM=='COUDE'): echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR COUDE : %.2f \n'%SF)
122 if (GEOM=='TUBE') : echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR TUBE : %.2f \n'%SF )
123 echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%SFP)
125 # ON ENVISAGE LE CAS OU UNE PARTIE DE L AXE EST DANS LES
126 # DROITES DES EMBOUTS. LA TRANSFORMATION N EST FAITE QUE SUR LA
127 # PARTIE RESTANT DANS LE COUDE.
129 if (GEOM=='COUDE'): DIST = ALPHA*2.0*pi/360.0*(RC+X*cos(AZIMR))
130 else : DIST = ALPHA*2.0*pi/360.0*RC
134 # -- FISSURE LONGITUDINALE (0 DEGRE)
143 elif (BINF>=0. and BSUP<=DIST):
145 elif abs(ORIEN-90.)<0.01:
146 # -- FISSURE CIRCONFERENTIELLE (90 DEGRES)
155 elif (BINF>=0. and BSUP<=DIST):
158 # -- FISSURE A +/- 45 DEGRES SUR INTRADOS OU EXTRADOS
159 BSUP = SF + sqrt(2.0)/2.0*AXEC
160 BINF = SF - sqrt(2.0)/2.0*AXEC
162 BCOUD = (DIST - BINF)*sqrt(2.0)
163 BEMB = (BSUP - DIST)*sqrt(2.0)
165 BCOUD = BSUP *sqrt(2.0)
166 BEMB = abs(BINF)*sqrt(2.0)
167 elif (BINF>=0. and BSUP<=DIST):
169 echo_mess.append( 'PARTIE DU GRAND AXE DANS LE COUDE : %.2f \n'%BCOUD)
170 echo_mess.append( 'PARTIE DU GRAND AXE DANS L EMBOUT : %.2f \n'%BEMB)
172 # -- CALCUL DE LA TAILLE DU GRAND AXE FISSURE SUR LA PLAQUE
176 # -- FISSURE LONGITUDINALE (0 DEGRE)
177 if GEOM=='COUDE': AXECP = BCOUD/(1.0+X/RC*cos(AZIMR)) + BEMB
178 else : AXECP = BCOUD + BEMB
179 elif abs(ORIEN-90.)<0.01:
180 # -- FISSURE CIRCONFERENTIELLE (90 DEGRES)
181 AXECP = (BCOUD+BEMB)*RM/X
184 # ------- TRANSFORMATION COUDE
185 if AZIM in (0.,180.):
186 # -- FISSURE A +/- 45 DEGRES SUR INTRADOS OU EXTRADOS
187 AXECP = BCOUD*RM*sqrt(2.)/( X*sqrt(1.+(RM/X+RM/RC*cos(AZIMR))**2) )+\
188 BEMB*sqrt( (1.0+(X/RM)**2)*0.5 )
190 # -- FISSURE A +/- 45 DEGRES AILLEURS
191 AXECP = funct_root.root(ASCFON,(BCOUD-1.,BCOUD+1.))
192 AXECP = AXECP + BEMB*sqrt( (1.+(X/RM)**2)*0.5 )
193 AXECC = ASCFON(AXECP)+BCOUD
196 AXECP = (BCOUD+BEMB)*sqrt( (1.+(X/RM)**2)*0.5 )
201 echo_mess.append( 'TAILLE GRAND AXE COUDE DONNE : %.2f \n'%(2.*AXEC))
203 echo_mess.append( 'TAILLE GRAND AXE TUBE DONNE : %.2f \n'%(2.*AXEC))
204 echo_mess.append( 'TAILLE GRAND AXE PLAQUE DEDUIT : %.2f \n'%AXECP)
206 echo_mess.append( 'METHODE DE NEWTON FISSURE A 45 DEGRES --> \n')
207 echo_mess.append( 'TAILLE GRAND AXE COUDE RECALCULE : %.2f \n'%AXECC)
208 if GEOM=='COUDE' and BEMB>0. and BSUP>DIST :
209 SFP = ALPHA*2.*pi*RC/360. - AXECP/2. + BEMB
210 echo_mess.append( 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT \n')
211 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%SFP)
212 if GEOM=='COUDE' and BEMB>0. and BINF<0. :
213 SFP = + AXECP/2. - BEMB
214 echo_mess.append( 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT \n')
215 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%SFP)
217 # -- CORRECTION DU PETIT AXE DE LA FISSURE QUAND CELLE-CI SE TROUVE SUR
218 # LA ZONE DE SUREPAISSEUR
220 ALPHAR = ALPHA*2.*pi/360.
221 ZSUR1 = ALPHAR*RC/10.
222 ZSUR2 = ALPHAR*RC*9./10.
223 YFISS = (AZIMR-pi/2.)*RM
225 if (AZIM>=120.) and (AZIM<=240.):
226 if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = 1.
227 elif (SFP<=ZSUR1): MU = SFP/ZSUR1
228 elif (SFP>ZSUR2): MU = (ALPHAR*RC-SFP)/ZSUR1
229 elif (AZIM>=90.) and (AZIM<=120.):
230 if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = YFISS/(pi/6.*RM)
231 elif (SFP<=ZSUR1): MU = YFISS*SFP/(pi/6.*RM*ZSUR1)
232 elif (SFP>ZSUR2): MU = YFISS*(ALPHAR*RC-SFP)/(pi/6.*RM*ZSUR1)
233 elif (AZIM>=240.) and (AZIM<=270.):
234 if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = (YFISS-5.*pi/6.*RM)/(pi/6.*RM)
235 elif (SFP<=ZSUR1): MU = (YFISS-5.*pi/6.*RM)*SFP/(pi/6.*RM*ZSUR1)
236 elif (SFP>ZSUR2): MU = (YFISS-5.*pi/6.*RM)*(ALPHAR*RC-SFP)/(pi/6.*RM*ZSUR1)
239 AXEAP = AXEA * EP / ( EP + MU*SUREP )
240 echo_mess.append( '--> CORRECTION DUE A LA SUREPAISSEUR \n' )
241 echo_mess.append( '--> TAILLE PETIT AXE PLAQUE : %.2f \n'%AXEAP )
244 texte_final=string.join(echo_mess)
245 aster.affiche('MESSAGE',texte_final)
246 return AXEAP,AXECP,SFP
249 # ------------------------------------------------------------------------------
250 def ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP,GEOM,SYME):
252 MACR_ASCOUF_MAIL ASCSEP
253 taille initiale sur la plaque des sous-epaisseurs
255 ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
257 ALPHA = ANGLE DU COUDE
258 RM = RAYON MOYEN DU COUDE
259 RC = RAYON DE CINTRAGE DU COUDE
260 EP = EPAISSEUR DU COUDE
261 GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
262 SYME = QUART DE STRUCTURE SI 'OUI'
267 echo_mess=['MACR_ASCOUF_MAIL ASCSEP \n',]
269 # --- BOUCLE SUR L ENSEMBLE DES SOUS-EPAISSEURS
272 for ssep in MCL_SOUS_EPAIS :
274 echo_mess.append( '-------------------------------------\n')
275 echo_mess.append( 'SOUS-EPAISSEUR NUMERO %d\n'%i)
276 echo_mess.append( '-------------------------------------\n')
278 # --- CAS DES SOUS-EPAISSEURS AXISYMETRIQUES
280 if ssep['TYPE']=='AXIS':
281 echo_mess.append( 'SOUS-EPAISSEUR AXISYMETRIQUE : \n')
282 echo_mess.append( 'CALCUL DE LA TAILLE LONGI ENVELOPPE EN INTRADOS (AZIMUT PI)\n')
283 ssep.ICIRP = 2.*pi*RM
289 # -- CALCUL DE L ABSCISSE CURVILIGNE CIRCONF.SUR LA PLAQUE
290 # EN FONCTION DE L AZIMUT OU DE L ABSCISSE CURVIL.CIRCONF
291 # SUR LE COUDE DU CENTRE DE LA SOUS-EPAISSEUR
292 # NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
294 if ssep['POSI_CURV_CIRC']!=None:
295 ssep.ISCP = ssep['POSI_CURV_CIRC']*RM/(RM+EP/2.)
297 ssep.IPHIC = ssep['POSI_CURV_CIRC']/(RM+EP/2.)*180./pi
298 echo_mess.append( 'AZIMUT CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f \n'%ssep.IPHIC)
300 ssep.ISCP = ssep['AZIMUT']*pi*RM/180.
301 AZIMC = ssep['AZIMUT']*pi/180.
302 echo_mess.append( 'ABSC. CURV. CIRCONF. CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f \n'%(AZIMC*(RM+EP/2.)))
304 # PASSAGE DANS LE REPERE PLAQUE (0,2PI) AVEC ORIGINE FLANC DROIT
305 # CAR L ORIGINE DES DONNEES CIRCONF. EST EN EXTRADOS
307 if ssep.ISCP>(3.*pi*RM/2.): ssep.ISCP = ssep.ISCP - 3.*pi*RM/2.
308 else: ssep.ISCP = ssep.ISCP + pi*RM/2.
309 echo_mess.append( 'ABSC. CURV. CIRCONF. CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISCP)
311 # -- CALCUL DE LA TAILLE CIRCONFERENTIELLE
312 # NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
314 ssep.ICIRP = ssep['AXE_CIRC']*(RM/(RM+EP/2.))
315 if ssep.ICIRP>(2.*pi*RM) :
316 texte_final=string.join(echo_mess)
317 aster.affiche("MESSAGE",texte_final)
318 UTMESS('F','ASCOUF0_6',vali=[i],valr=[ssep.ICIRP,2*pi*RM])
319 echo_mess.append( 'TAILLE CIRCONFERENTIELLE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ICIRP)
320 echo_mess.append( '<=> TAILLE EQUIVALENTE SUR LA CIRCONFERENCE (DEGRES) : %.2f \n'%(ssep.ICIRP*360./(2.*pi*RM)))
323 # -- CALCUL COTE AXIALE DU CENTRE SOUS-EPAISSEUR SUR LA PLAQUE
324 # EN FONCTION DE L ABSCISSE CURVILIGNE DONNEE SUR LE COUDE
325 # OU DE LA POSITION ANGULAIRE
326 # NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
328 if ssep['POSI_CURV_LONGI']!=None:
330 ssep.ISLP = ssep['POSI_CURV_LONGI']/(1.+(RM+EP/2.)/RC*cos(AZIMC))
332 echo_mess.append( 'ANGLE COUDE CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f \n'%(AZIML*180./pi))
334 ssep.ISLP = ssep['POSI_CURV_LONGI']
335 if (SYME in ('QUART','DEMI')) and (ssep.ISLP!=ALPHA*CG*RC/2.) :
336 texte_final=string.join(echo_mess)
337 aster.affiche("MESSAGE",texte_final)
338 UTMESS('F','ASCOUF0_7')
341 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f \n'%((ssep.BETA)*CG*(RC+(RM+EP/2.)*cos(AZIMC))))
342 AZIML = (ssep.BETA)*CG
344 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR TUBE : %.2f \n'%((ssep.BETA)*CG*RC) )
345 ssep.ISLP = (ssep.BETA)*CG*RC
346 if (SYME in ('QUART','DEMI')) and (ssep.BETA!=ALPHA/2.) :
347 texte_final=string.join(echo_mess)
348 aster.affiche("MESSAGE",texte_final)
349 UTMESS('F','ASCOUF0_7')
350 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
352 # -- CALCUL DE LA TAILLE LONGITUDINALE
353 # NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
355 # ON ENVISAGE LE CAS OU UNE PARTIE DE L AXE EST DANS LES
356 # DROITES DES EMBOUTS. LA TRANSFORMATION N EST FAITE QUE SUR LA
357 # PARTIE RESTANT DANS LE COUDE.
359 if GEOM=='COUDE' : DIST = ALPHA*CG*(RC+(RM+EP/2.)*cos(AZIMC))
360 else : DIST = ALPHA*CG*RC
361 if ssep['POSI_CURV_LONGI']!=None:
362 BSUP = ssep['POSI_CURV_LONGI']+ssep['AXE_LONGI']/2.
363 BINF = ssep['POSI_CURV_LONGI']-ssep['AXE_LONGI']/2.
366 BSUP = ssep.BETA*CG*(RC+(RM+EP/2.)*cos(AZIMC))+ssep['AXE_LONGI']/2.
367 BINF = ssep.BETA*CG*(RC+(RM+EP/2.)*cos(AZIMC))-ssep['AXE_LONGI']/2.
369 BSUP = ssep.BETA*CG*RC + ssep['AXE_LONGI']/2.
370 BINF = ssep.BETA*CG*RC - ssep['AXE_LONGI']/2.
375 if BINF<0. and BSUP>DIST :
377 BEMB1 = abs(BINF) + BSUP-DIST
384 elif (BINF>=0. and BSUP<=DIST) :
385 BCOUD1 = ssep['AXE_LONGI']
386 BCOUD = BCOUD1+ BCOUD2
388 if GEOM=='COUDE' : BPLAQ = BCOUD/(1.+(RM+EP/2.)/RC*cos(AZIMC))
390 ssep.ILONP = BPLAQ+BEMB
392 ssep.ISLP = ALPHA*CG*RC - ssep.ILONP/2. + BEMB1
393 echo_mess.append( 'CORRECTION CENTRE : SOUS-EP. A CHEVAL SUR EMBOUT \n')
394 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
396 ssep.ISLP = ssep.ILONP/2. - BEMB2
397 echo_mess.append( 'CORRECTION CENTRE : SOUS-EP. A CHEVAL SUR EMBOUT \n')
398 echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
399 if ssep.ISLP<0. : ssep.ISLP = 0.
400 if (ssep.ISLP>ALPHA*CG*RC) : ssep.ISLP = ALPHA*CG*RC
402 # SI LE CENTRE DE LA SOUS-EP CALCULE SUR LA PLAQUE EST DANS L EMBOUT
403 # ON CORRIGE SA POSITION EN LE METTANT A L INTERFACE SINON CA PLANTE
404 # DANS LA PROC DE MAILLAGE (A AMELIORER)
406 echo_mess.append( 'TAILLE LONGITUDINALE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ILONP)
407 echo_mess.append( '<=> TAILLE EQUIVALENTE PAR RAPPORT A L ANGLE DU COUDE (DEGRES): %.2f \n'%(ssep.ILONP*360/(2*pi*RC)))
409 texte_final=string.join(echo_mess)
410 aster.affiche('MESSAGE',texte_final)
413 # ------------------------------------------------------------------------------
414 def ASCTCI(MCL_SOUS_EPAIS,RM):
416 MACR_ASCOUF_MAIL ASCTCI
417 APPELEE DANS : ASCSYM et ASCPRE
418 CALCUL TABLEAU TRIE DES ABSCISSES DES CENTRES DE SOUS-EPAISSEURS
420 ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
422 RM = RAYON MOYEN DU COUDE
424 -----------------DONNEES RENVOYEES-----------------------
426 IABSC1 = CORRESPONDANCE ABSC. CURVI. CIRCONF. SOUS-EP. I
427 IABSC2 = CORRESPONDANCE ABSC. GAUCHE ET DROITE CIRCONF. SOUS-EP. I
428 COORXD = ABSC. DU BORD DROIT DE LA SOUS-EP I
429 COORXG = ABSC. DU BORD GAUCHE DE LA SOUS-EP I
433 # --- tri du tableau des abscisses curvilignes circonf. plaque
435 echo_mess=['MACR_ASCOUF_MAIL ASCTCI \n',]
440 for ssep in MCL_SOUS_EPAIS :
442 if (ssep.ISCP>2.*pi*RM) or (ssep.ISCP<0.) :
443 texte_final=string.join(echo_mess)
444 aster.affiche("MESSAGE",texte_final)
445 UTMESS('F','ASCOUF0_9',vali=[MCL_SOUS_EPAIS.index(ssep)],valr=[ssep.ISCP,2.*pi*RM])
446 TAMPON.append((ssep.ISCP,i))
450 IABSC1.append(TAMPON[j][1])
451 echo_mess.append( ' \n')
452 echo_mess.append( 'TRI DES CENTRES ABSC. CURV. CIRCONF. :\n ')
453 echo_mess.append( '------------------------------------\n')
457 echo_mess.append( '%d) SOUS-EP NO %d <> XC = %.2f \n'%(i,ssep[1],ssep[0]) )
459 # --- calcul des abcisses droites et gauches des sous-epaisseurs
464 XG=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
465 if XG<0. : XG=XG+2.*pi*RM
467 XD=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
468 if XD>2.*pi*RM : XD=XD-2.*pi*RM
471 # --- tri des bornes d'intervalles en abscisse
474 for j in range(len(MCL_SOUS_EPAIS)):
475 TAMPON.append((COORXG[j],2*j+1))
476 TAMPON.append((COORXD[j],2*j+2))
479 for j in range(2*len(MCL_SOUS_EPAIS)):
480 IABSC2.append(TAMPON[j][1])
481 echo_mess.append( '\n')
482 echo_mess.append( 'TRI DES INTERVALLES G ET D ABSC. CURV. CIRCONF. :\n')
483 echo_mess.append( '-----------------------------------------------\n' )
484 for j in range(2*len(MCL_SOUS_EPAIS)):
485 if fmod(IABSC2[j],2):
486 echo_mess.append( '%d) SOUS-EP NO %d <> XG = %.2f \n'%(j+1,IABSC1[IABSC2[j]/2],TAMPON[j][0]))
488 echo_mess.append( '%d) SOUS-EP NO %d <> XD = %.2f \n'%(j+1,IABSC1[IABSC2[j]/2-1],TAMPON[j][0]))
490 texte_final=string.join(echo_mess)
491 aster.affiche('MESSAGE',texte_final)
492 return TAMPON,IABSC1,IABSC2,COORXD,COORXG
494 # ------------------------------------------------------------------------------
495 def ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM):
497 MACR_ASCOUF_MAIL ASCTLO
498 APPELEE DANS : ASCSYM et ASCPRE
499 CALCUL TABLEAU TRIE DES ORDONNEES DES CENTRES DE SOUS-EPAISSEURS
501 ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
503 RC = RAYON MOYEN DU COUDE
504 ALPHA = ANGLE DU COUDE
505 LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
506 LTCLIM = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
508 -----------------DONNEES RENVOYEES-----------------------
510 IORDO1 = CORRESPONDANCE ORDO. CURVI. LONGIT. SOUS-EP. I
511 IORDO2 = CORRESPONDANCE ORDO. GAUCHE ET DROITE LONGIT. SOUS-EP. I
512 COORYI = ORDONNEE. DU BORD INTERIEUR DE LA SOUS-EP I
513 COORYS = ORDONNEE. DU BORD SUPERIEUR DE LA SOUS-EP I
517 # tri du tableau des abscisses curvilignes axiales plaque
519 echo_mess=['MACR_ASCOUF_MAIL ASCTLO \n',]
520 ALPHAR = 2.*ALPHA*pi/360.
523 for ssep in MCL_SOUS_EPAIS :
525 if (ssep.ISLP>ALPHAR*RC) or (ssep.ISLP<0.) :
526 texte_final=string.join(echo_mess)
527 aster.affiche("MESSAGE",texte_final)
528 UTMESS('F','ASCOUF0_10',vali=[MCL_SOUS_EPAIS.index(ssep)],valr=[ssep.ISLP,ALPHAR*RC])
529 TAMPON.append((ssep.ISLP,i))
533 IORDO1.append(TAMPON[j][1])
534 echo_mess.append( '\n')
535 echo_mess.append( 'TRI DES CENTRES ABSC. CURV. LONGIT. : \n')
536 echo_mess.append( '------------------------------------ \n')
540 echo_mess.append( '%d) SOUS-EP NO %d <> YC = %.2f \n'%(i,ssep[1],ssep[0]))
542 # calcul des abscisses sup. et inf. des sous-ep.
549 YI=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
550 YS=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
551 if fabs(bid[0])<EPS :
552 YI=-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
553 YS=MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
554 if fabs(bid[0]-ALPHAR*RC)<EPS :
555 YI=ALPHAR*RC-(MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.)
556 YS=ALPHAR*RC+(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
558 texte_final=string.join(echo_mess)
559 aster.affiche("MESSAGE",texte_final)
560 UTMESS('F','ASCOUF0_11',vali=[bid[1]],valr=[YI,-1*LTCHAR])
561 if YS>(ALPHAR*RC+LTCLIM):
562 texte_final=string.join(echo_mess)
563 aster.affiche("MESSAGE",texte_final)
564 UTMESS('F','ASCOUF0_11',vali=[bid[1]],valr=[YI,ALPHAR*RC+LTCLIM])
568 # tri des bornes d'intervalles en abscisse
571 for j in range(len(MCL_SOUS_EPAIS)):
572 TAMPON.append((COORYI[j],2*j+1))
573 TAMPON.append((COORYS[j],2*j+2))
576 for j in range(2*len(MCL_SOUS_EPAIS)):
577 IORDO2.append(TAMPON[j][1])
578 echo_mess.append( '\n')
579 echo_mess.append( 'TRI DES INTERVALLES I ET S ABSC. CURV. LONGIT. : \n')
580 echo_mess.append( '----------------------------------------------- \n')
581 for j in range(2*len(MCL_SOUS_EPAIS)):
582 if fmod(IORDO2[j],2):
583 echo_mess.append( '%d) SOUS-EP NO %d <> YI = %.2f \n'%(j+1,IORDO1[IORDO2[j]/2],TAMPON[j][0]))
585 echo_mess.append( '%d) SOUS-EP NO %d <> YS = %.2f \n'%(j+1,IORDO1[IORDO2[j]/2-1],TAMPON[j][0]))
587 texte_final=string.join(echo_mess)
588 aster.affiche('MESSAGE',texte_final)
589 return TAMPON,IORDO1,IORDO2,COORYI,COORYS
592 ################################################################################
593 ################################################################################
594 ################################################################################
595 # MACR_ASCOUF_MAIL ASCNBE
596 # APPELEE DANS : ASCSYM et ASCPRE
597 # CALCUL DU NOMBRE D'ELEMENTS LONGI ET CIRCONF. DANS LES SOUS-EPAISSEURS
599 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
601 # COORXG = ABSCISSE DU BORD GAUCHE DE LA SOUS-EPAISSEUR I
602 # COORXD = ABSCISSE DU BORD DROIT DE LA SOUS-EPAISSEUR I
603 # COORYI = ORDONNEE DU BORD INFERIEUR DE LA SOUS-EPAISSEUR I
604 # COORYS = ORDONNEE DU BORD SUPERIEUR DE LA SOUS-EPAISSEUR I
605 # BD = ABSCISSE DU BORD DROIT DE LA ZONE CIRCONF J
606 # BG = ABSCISSE DU BORD GAUCHE DE LA ZONE CIRCONF J
607 # BS = ORDONNEE DU BORD SUPERIEUR DE LA ZONE LONGI J
608 # BI = ORDONNEE DU BORD INFERIEUR DE LA ZONE LONGI J
609 # DNX = DENSITE ET NOMBRE D'ELEMENTS CIRCONF. DE LA ZONE J
610 # DNY = DENSITE ET NOMBRE D'ELEMENTS LONGIT. DE LA ZONE J
611 # INDSEX = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE CIRCONF J
612 # INDSEY = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE LONGI J
613 # RM = RAYON MOYEN DU COUDE
614 # RC = RAYON DE CINTRAGE DU COUDE
615 # IABSC1 = CORRESPONDANCE ABSCISSE CURVILIGNE CIRCONF. SOUS-EP. I
616 # IORDO1 = CORRESPONDANCE ABSCISSE CURVILIGNE LONGIT. SOUS-EP. I
618 #----------------------DONNEES RENVOYEES-----------------------
620 # NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
621 # NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
623 # ------------------------------------------------------------------------------
624 def ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,DNX,DNY,RM,RC,
625 INDSEX,INDSEY,IABSC1,IORDO1):
627 # calcul du nombre d'elements longi. et circonf. dans les sous-epaisseurs:
629 echo_mess=['MACR_ASCOUF_MAIL ASCNBE \n',]
630 echo_mess.append( '\n')
631 echo_mess.append( 'DETERMINATION DU NOMBRE D''ELEMENTS DANS LES SOUS-EPAISSEURS :\n')
632 echo_mess.append( '------------------------------------------------------------\n')
633 NLX=[0]*len(MCL_SOUS_EPAIS)
634 NLY=[0]*len(MCL_SOUS_EPAIS)
635 for j in range(len(BD)):
637 # calcul au passage du nombre d'elements sur chaque zone circonf.
638 RNBEL = (BD[j]-BG[j])*360./(DNX[2*j]*2.*pi*RM)
639 RNBEL2 = RNBEL - floor(RNBEL)
640 if RNBEL2 <= 0.5 : NBEL=int(floor(RNBEL))
641 else : NBEL=int(floor(RNBEL))+1
642 if NBEL <= 1 : NBEL=2
643 # calcul au passage du nombre d'elements sur chaque sous-epaisseur circonf.
644 for i in range(len(MCL_SOUS_EPAIS)):
646 if ((COORXG[l]<COORXD[l] and BG[j]>=COORXG[l] and BD[j]<=COORXD[l])\
647 or (COORXG[l]>=COORXD[l] and (BG[j]<=COORXG[l] or BD[j]>=COORXD[l]))):
649 echo_mess.append( 'SOUS-EP NO %d ZONE CIRC. NO %d NB ELEM. = %d \n'%(i+1,j+1,NBEL))
651 for j in range(len(BS)):
653 # calcul au passage du nombre d'elements sur chaque zone longi.
654 RNBEL = ((BS[j]-BI[j])*360.)/(DNY[2*j]*2.*pi*RC)
655 RNBEL2 = RNBEL - floor(RNBEL)
656 if RNBEL2 <= 0.5 : NBEL=int(floor(RNBEL))
657 else : NBEL=int(floor(RNBEL))+1
658 if NBEL <= 1 : NBEL=2
659 # calcul au passage du nombre d'elements sur chaque sous-epaisseur circonf.
661 for i in range(len(MCL_SOUS_EPAIS)):
663 if (BI[j]>=COORYI[l] and BS[j]<=COORYS[l]):
665 echo_mess.append( 'SOUS-EP NO %d ZONE LONGI. NO %d NB ELEM. = %d \n'%(i+1,j+1,NBEL) )
667 for j in range(len(NLX)):
668 echo_mess.append( 'SOUS-EP NO %d NBE TOTAL ELEMENTS CIRCONF. : %d \n'%(j+1,NLX[j]))
669 echo_mess.append( 'SOUS-EP NO %d NBE TOTAL ELEMENTS LONGI. : %d \n'%(j+1,NLY[j]))
672 texte_final=string.join(echo_mess)
673 aster.affiche('MESSAGE',texte_final)
676 ################################################################################
677 ################################################################################
678 ################################################################################
679 # MACR_ASCOUF_MAIL ASCSYM
680 # PREPARATION DES DONNEES POUR LE MAILLAGE DE PLAQUE AVEC
682 # CAS D UNE SOUS-EPAISSEUR DANS LE PLAN DE SYMETRIE
683 # CONSTRUCTION D UN QUART DU MAILLAGE
684 # - CALCUL TABLEAU TRIE DES ABSCISSES ET ORDONNEES DES CENTRES
685 # - CALCUL TABLEAU DES ZONES COUVERTES PAR LES SOUS-EPAISSEURS
687 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
689 # RM = RAYON MOYEN DU COUDE
690 # RC = RAYON DE CINTRAGE DU COUDE
691 # ALPHA = ANGLE DU COUDE
692 # LT = LONGUEUR DE L EMBOUT DU COTE CHARGEMENT
693 # LGV = LONGUEUR DE L EMBOUT DU COTE CONDITIONS AUX LIMITES
694 # NBSEP = NOMBRE DE SOUS-EPAISSEURS
696 #----------------------DONNEES RENVOYEES-----------------------
698 # NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
699 # NZONEY = NOMBRE DE ZONES LONGITUDINALES
701 # ------------------------------------------------------------------------------
702 def ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM):
704 echo_mess=['MACR_ASCOUF_MAIL ASCSYM \n',]
716 # --- tri des donnees sous-ep. en circonferentiel
717 TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
719 # --- calcul des zones en circonferentiel
721 ssep=MCL_SOUS_EPAIS[0]
722 if (ssep.ISCP<pi*RM) :
724 # le centre sous-ep est dans la zone flanc droit/extrados/flanc
725 # gauche, on preleve pi*RM a droite de la sous-epaisseur
727 # zone (centre sous-ep , bord droit)
730 BG.append(ssep.ISCP+ssep.ICIRP/2.)
731 BD.append(ssep.ISCP+ssep.ICIRP/2.)
732 BD.append(ssep.ISCP+pi*RM)
737 DNX.append(ssep.IDENC)
743 elif (ssep.ISCP+pi*RM==2.*pi*RM) :
745 # sous-ep axisymetrique : on preleve pi*RM a droite
747 # zone (centre sous-ep , bord droit)
750 BD.append(ssep.ISCP+ssep.ICIRP/2.)
753 DNX.append(ssep.IDENC)
759 # le centre sous-ep est dans la zone flanc gauche/intrados/flanc
760 # droit : on preleve pi*RM a gauche de la sous-epaisseur
762 # zone (centre -pi*RM, bord gauche)
764 BG.append(ssep.ISCP-pi*RM)
765 BG.append(ssep.ISCP-ssep.ICIRP/2.)
766 BD.append(ssep.ISCP-ssep.ICIRP/2.)
774 DNX.append(ssep.IDENC)
780 echo_mess.append( '\n')
781 echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. :\n')
782 echo_mess.append( '--------------------------------------------- \n')
785 for j in range(NZONEX) :
786 if ( fabs(BG[j]) < EPS ) and ( fabs(BD[j]) < EPS ) :
787 echo_mess.append( 'ZONE NO %d BORNE GAUCHE = %.2f'\
788 ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR \n'%(j+1,BG[j],BD[j]) )
790 echo_mess.append( 'ZONE NO %d BORNE GAUCHE = %.2f \n'\
791 ' / BORNE DROITE = %.2f \n'%(j+1,BG[j],BD[j]))
794 # tri des donnees sous-epaisseurs en axial
795 TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
797 # calcul des zones en axial:
804 ssep = MCL_SOUS_EPAIS[0]
806 BI.append(ssep.ISLP-ssep.ILONP/2.)
807 BS.append(ssep.ISLP-ssep.ILONP/2.)
815 DNY.append(ssep.IDENL)
819 echo_mess.append( '\n')
820 echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. : \n')
821 echo_mess.append( '----------------------------------------------- \n')
823 for j in range(NZONEY) :
824 if ( fabs(BI[j]) < EPS ) and ( fabs(BS[j]) < EPS ) :
825 echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
826 ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(j+1,BI[j],BS[j]))
828 echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
829 ' / BORNE SUP. = %.2f'%(j+1,BI[j],BS[j]))
831 # calcul du nombre d'elements longi. et circonf. dans les soue-ep
832 NLX,NLY=ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,
833 DNX,DNY,RM,RC,INDSEX,INDSEY,IABSC1,IORDO1)
835 texte_final=string.join(echo_mess)
836 aster.affiche('MESSAGE',texte_final)
837 return ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY
838 ################################################################################
839 ################################################################################
840 ################################################################################
841 ################################################################################
842 # MACR_ASCOUF_MAIL ASCPRE
843 # PREPARATION DES DONNEES POUR LE MAILLAGE DE PLAQUE
845 # - CALCUL TABLEAU TRIE DES ABSCISSES ET ORDONNEES DES CENTRES
846 # - CALCUL TABLEAU DES ZONES COUVERTES PAR LES SOUS-EPAISSEURS
848 #-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
850 # RM = RAYON MOYEN DU COUDE
851 # RC = RAYON DE CINTRAGE DU COUDE
852 # ALPHA = ANGLE DU COUDE
853 # LT = LONGUEUR DE L EMBOUT DU COTE CHARGEMENT
854 # LGV = LONGUEUR DE L EMBOUT DU COTE CONDITIONS AUX LIMITES
855 # NBSEP = NOMBRE DE SOUS-EPAISSEURS
856 # SYME = "QUART" DE STRUCTURE, "DEMI" STRUCTURE OU BIEN "ENTIER"
858 #----------------------DONNEES RENVOYEES-----------------------
860 # NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
861 # NZONEY = NOMBRE DE ZONES LONGITUDINALES
862 # ------------------------------------------------------------------------------
863 def ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM):
865 echo_mess=['MACR_ASCOUF_MAIL ASCPRE \n',]
866 ALPHAR = 2.*ALPHA*pi/360.
870 NBSEP = len(MCL_SOUS_EPAIS)
871 echo_mess.append( 'RECHERCHE DES ZONES DE SOUS-EPAISSEURS DANS LE COUDE\n' )
873 # tri des donnees sous-epaisseurs en circonferentiel
874 TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
875 # --- calcul des recouvrements de zones en circonferentiel
899 # definition de la zone courante (borne gauche, borne droite)
901 # TYPG = type de la borne:
902 # 0 : borne gauche sous-epaisseur
903 # 1 : borne droite sous-epaisseur
904 # 2 : centre sous-epaisseur
906 if j>2*NBSEP and ICE<NBSEP :
907 # cas ou il ne reste plus que des centres a caser
913 # cas ou la borne droite de la zone precedente etait un centre
917 MIND = TAMPON[j-1][0]
918 if fmod(IABSC2[j-1],2):
920 NUMD = IABSC1[IABSC2[j-1]/2]
923 NUMD = IABSC1[IABSC2[j-1]/2-1]
927 MIND = TAMPON[2*NBSEP-1][0]
929 if fmod(IABSC2[2*NBSEP-1],2):
931 NUMG = IABSC1[IABSC2[2*NBSEP-1]/2]
934 NUMG = IABSC1[IABSC2[2*NBSEP-1]/2-1]
940 if fmod(IABSC2[j-1],2):
942 NUMG = IABSC1[IABSC2[j-1]/2]
945 NUMG = IABSC1[IABSC2[j-1]/2-1]
946 if fmod(IABSC2[j],2):
948 NUMD = IABSC1[IABSC2[j]/2]
951 NUMD = IABSC1[IABSC2[j]/2-1]
952 if fabs(MING-MIND)<EPSI :
955 if j>2*NBSEP and ICE>=NBSEP:
956 break #on sort de la boucle
961 # recherche des centres a intercaler
964 # le centre est deja le meme que precedent
965 if fabs(MCL_SOUS_EPAIS[INDC-1].ISCP-MCL_SOUS_EPAIS[IABSC1[i-2]-1].ISCP) < EPSI :
968 if MCL_SOUS_EPAIS[INDC-1].ISCP < MING :
969 # le centre est la nouvelle borne gauche
974 MING = MCL_SOUS_EPAIS[INDC-1].ISCP
978 elif MCL_SOUS_EPAIS[INDC-1].ISCP < MIND :
979 # le centre est la nouvelle borne droite
980 MIND = MCL_SOUS_EPAIS[INDC-1].ISCP
988 # codes d'intervalles de zones
989 # 0 0 = zone sous-ep.
990 # 0 1 = sous-ep. a droite de la zone
991 # 1 0 = sous-ep. a gauche de la zone
992 # 1 1 = sous-ep. a droite et a gauche de la zone
994 # cas ou la premiere zone ne commence pas au bord de la plaque
995 if MING>0. and NZONEX==1 :
1004 elif TYPG==1 or TYPG==2:
1007 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1017 # borne gauche zone = borne gauche ssep
1022 # borne droite zone = borne gauche ssep
1023 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1026 elif TYPD == 1 or TYPD == 2:
1027 # borne droite zone = borne droite ssep : TYPD=1
1028 # borne droite zone = centre ssep : TYPD=2
1030 LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
1031 LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
1033 DNX.append(LTMP[0][0])
1035 INDSEX.append(LTMP[0][1])
1039 # borne gauche zone = borne droite ssep
1042 # borne droite zone = borne gauche ssep
1050 # cas tordu: une sous-ep enveloppe le tout
1053 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1056 elif TYPD == 1 or TYPD == 2:
1057 # borne droite zone = borne droite ssep : TYPD=1
1058 # borne droite zone = centre ssep : TYPD=2
1061 DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
1067 # borne gauche zone = centre ssep
1071 # borne droite zone = borne gauche ssep
1072 DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
1075 elif TYPD == 1 or TYPD == 2:
1076 # borne droite zone = borne droite ssep : TYPD=1
1077 # borne droite zone = centre ssep : TYPD=2
1079 LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
1080 LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
1082 DNX.append(LTMP[0][0])
1084 INDSEX.append(LTMP[0][1])
1087 if j<=(2*NBSEP-2) or ICE<=NBSEP or (TYPD==2 and j<2*NBSEP):
1089 break #on retourne dans la boucle go10
1092 break #on sort definitivement
1099 if TYPD==0 or TYPD==2:
1102 DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
1113 # au cas ou 2.*pi*RM correspond a une borne d'intevalle de sous-ep ou a
1114 # un centre de sous-ep.
1115 if fabs(BG[NZONEX-1]-BD[NZONEX-1])<EPSI: NZONEX = NZONEX-1
1117 echo_mess.append( '\n')
1118 echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. : \n')
1119 echo_mess.append( '----------------------------------------------- \n')
1120 for j in range(NZONEX) :
1121 if INDBG[j]==0 and INDBD[j]==0 :
1122 echo_mess.append( 'ZONE NO %d <> BORNE GAUCHE = %.2f \n'\
1123 ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR'%(j+1,BG[j],BD[j]))
1125 echo_mess.append( 'ZONE NO %d <> BORNE GAUCHE = %.2f \n'\
1126 ' / BORNE DROITE = %.2f'%(j+1,BG[j],BD[j]))
1129 # --- tri des donnees sous-ep. en axial
1130 TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
1140 # calcul des zones en axial :
1141 # zones (0,bord inferieur) et (bord inferieur,centre sous-ep.)
1142 ssep = MCL_SOUS_EPAIS[0]
1144 BI.append(ssep.ISLP-ssep.ILONP/2.)
1145 BS.append(ssep.ISLP-ssep.ILONP/2.)
1146 BS.append(ssep.ISLP)
1153 DNY.append(ssep.IDENL)
1161 # calcul des recouvrements de zones en axial
1175 # definition de la zone courante (borne inf, borne sup)
1177 # typi = type de la borne
1178 # 0 : borne inf. sous-ep.
1179 # 1 : borne sup. sous-ep.
1180 # 2 : centre sous-ep.
1183 # cas ou la borne sup. de la zone prec. etait un centre
1188 if fmod(IORDO2[j-1],2):
1190 NUMS = IORDO1[IORDO2[j-1]/2]
1193 NUMS = IORDO1[IORDO2[j-1]/2-1]
1197 MINI = TAMPON[2*NBSEP-1][0]
1199 if fmod(IORDO2[2*NBSEP-1],2):
1201 NUMI = IORDO1[IORDO2[2*NBSEP-1]/2]
1204 NUMI = IORDO1[IORDO2[2*NBSEP-1]/2-1]
1210 if fmod(IORDO2[j-1],2):
1212 NUMI = IORDO1[IORDO2[j-1]/2]
1215 NUMI = IORDO1[IORDO2[j-1]/2-1]
1216 if fmod(IORDO2[j],2):
1218 NUMS = IORDO1[IORDO2[j]/2]
1221 NUMS = IORDO1[IORDO2[j]/2-1]
1222 if fabs(MINI-MINS)<EPSI:
1229 # recherche des centres a intercaler
1232 # le centre est deja le meme que le precedent
1233 if fabs(MCL_SOUS_EPAIS[INDC-1].ISLP-MCL_SOUS_EPAIS[IORDO1[i-2]-1].ISLP)<EPSI:
1236 if MCL_SOUS_EPAIS[INDC-1].ISLP<MINI:
1237 # le centre est la nouvelle borne inf.
1242 MINI = MCL_SOUS_EPAIS[INDC-1].ISLP
1246 elif MCL_SOUS_EPAIS[INDC-1].ISLP<MINS:
1247 # le centre est la nouvelle borne sup.
1248 MINS = MCL_SOUS_EPAIS[INDC-1].ISLP
1256 # code d'intervalles de zone
1257 # 0 0 = ZONE SOUS-EPAISSEUR
1258 # 0 1 = SOUS-EPAISSEUR A SUPERIEURE DE LA ZONE
1259 # 1 0 = SOUS-EPAISSEUR A INFERIEURE DE LA ZONE
1260 # 1 1 = SOUS EPAISSEUR A SUPERIEURE ET A INFERIEURE DE LA ZONE
1262 # cas ou la premiere zone ne commence pas au bord de la plaque
1263 if MINI>0. and NZONEY==1:
1273 elif TYPI==1 or TYPI==2:
1276 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1286 # borne inferieure zone = borne inferieure ssep
1291 # borne superieure zone = borne inferieur ssep
1292 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1295 elif TYPS==1 or TYPS==2:
1296 # borne superieure zone = borne superieure ssep:TYPS==1
1297 # borne superieure zone = centre ssep:TYPS==2
1299 LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
1300 LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
1302 DNY.append(LTMP[0][0])
1304 INDSEY.append(LTMP[0][1])
1307 # borne inferieure zone=borne superieure ssep
1310 # borne superieure zone = borne inferieur ssep
1318 # cas tordu: une sous-ep. enveloppe le tout
1321 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1324 elif TYPS==1 or TYPS==2:
1325 # borne superieure zone = borne superieure ssep:TYPS==1
1326 # borne superieure zone = centre ssep:TYPS==2
1329 DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
1334 # borne inferieure zone = centre ssep
1338 # borne superieure zone = borne inferieure ssep
1339 DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
1342 elif TYPS==1 or TYPS==2:
1343 # borne superieure zone = borne superieure ssep
1345 LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
1346 LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
1348 DNY.append(LTMP[0][0])
1350 INDSEY.append(LTMP[0][1])
1353 if j<=(2*NBSEP-2) or TYPS==2:
1355 break #on retourne dans la boucle go40
1358 break #on sort definitivement
1361 # cas ou la derniere zone ne finit pas au bout de la plaque
1365 BS.append(ALPHAR*RC)
1366 if TYPS==0 or TYPS==2:
1369 DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
1380 echo_mess.append( '\n')
1381 echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. :\n')
1382 echo_mess.append( '----------------------------------------------- \n')
1384 for j in range(NZONEY) :
1385 if INDBI[j]==0 and INDBS[j]==0 :
1386 echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
1387 ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(j+1,BI[j],BS[j]))
1389 echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
1390 ' / BORNE SUP. = %.2f '%(j+1,BI[j],BS[j]))
1392 # calcul du nombre d'elements longi. et circonf. dans les sous-ep
1393 NLX,NLY=ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,
1394 DNX,DNY,RM,RC,INDSEX,INDSEY,IABSC1,IORDO1)
1397 texte_final=string.join(echo_mess)
1398 aster.affiche('MESSAGE',texte_final)
1399 return ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY
1401 ################################################################################
1402 ################################################################################
1403 ################################################################################
1404 # MACR_ASCOUF_MAIL write_file_dgib_ASCFDO
1406 # ECRIT DANS UN FICHIER LES DONNES GIBI DE LA PROCEDURE
1410 # ------------------------------------------------------------------------------
1411 def write_file_dgib_ASCFDO(nomFichierDATG,RM,RC,ALPHA,NBTRAN,EP1,EP2,EPI,TETA1,
1412 TETA2,LTRAN,SUREP,LTCHAR,LTCLIM,TYPBOL,AXEAP,AXECP,NT,NS,NC,
1413 SFP,ORIEN,AZIM,RC0,RC2,RC3,POSIT,EPSI,NIVMAG,SYME, loc_datg) :
1416 if TYPBOL=='CUVE' : TYPEMB = 'typcuv'
1417 if TYPBOL=='GV' : TYPEMB = 'typegv'
1418 if TYPBOL=='ASP_MPP' : TYPEMB = 'typapp'
1422 if POSIT =='DEB_INT' :
1426 if SYME[:6]=='ENTIER' : ZSYME = 'entier'
1427 elif SYME[:5]=='QUART' : ZSYME = 'quart'
1428 else : ZSYME = 'demi'
1433 texte='* DEBUT PARAMETRES UTILISATEUR\n'
1435 texte=texte+'c = '+str(C) +POIVIR
1436 texte=texte+'a = '+str(AXEAP) +POIVIR
1437 texte=texte+'nt = '+str(NT) +POIVIR
1438 texte=texte+'ns = '+str(NS) +POIVIR
1439 texte=texte+'nc = '+str(NC) +POIVIR
1440 texte=texte+'rm = '+str(RM) +POIVIR
1441 texte=texte+'rc = '+str(RC) +POIVIR
1442 texte=texte+'alphac = '+str(ALPHA) +POIVIR
1443 texte=texte+'nbtranep = '+str(NBTRAN) +POIVIR
1444 texte=texte+'ep1 = '+str(EP1) +POIVIR
1445 texte=texte+'ep2 = '+str(EP2) +POIVIR
1446 texte=texte+'epi = '+str(EPI) +POIVIR
1447 texte=texte+'teta1 = '+str(TETA1) +POIVIR
1448 texte=texte+'teta2 = '+str(TETA2) +POIVIR
1449 texte=texte+'ltran = '+str(LTRAN) +POIVIR
1450 texte=texte+'posfis = '+str(SFP) +POIVIR
1451 texte=texte+'ksiref = '+str(ORIEN) +POIVIR
1452 texte=texte+'surep = '+str(SUREP) +POIVIR
1453 texte=texte+'teta_f = '+str(TETAF) +POIVIR
1454 texte=texte+'rc0 = '+str(RC0) +POIVIR
1455 texte=texte+'rc2 = '+str(RC2) +POIVIR
1456 texte=texte+'rc3 = '+str(RC3) +POIVIR
1457 texte=texte+"pos = '"+POSIT2+"'" +POIVIR
1458 texte=texte+'lt = '+str(LTCHAR) +POIVIR
1459 texte=texte+'lgv = '+str(LTCLIM) +POIVIR
1460 texte=texte+"typembou = '"+TYPEMB+"'" +POIVIR
1461 texte=texte+"zsyme = '"+ZSYME+"'" +POIVIR
1462 texte=texte+'epsif = '+str(EPSI) +POIVIR
1463 texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
1465 texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
1466 texte = texte + open(os.path.join(loc_datg, 'ascouf_fiss_v4.datg'), 'r').read()
1467 fdgib=open(nomFichierDATG,'w')
1471 ################################################################################
1472 ################################################################################
1473 ################################################################################
1474 # MACR_ASCOUF_MAIL write_file_dgib_ASCSQO
1476 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1477 # "PLAQUE SOUS-EPAISSEUR"
1479 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1481 # RM = RAYON MOYEN DU COUDE
1482 # RC = RAYON DE CINTRAGE DU COUDE
1483 # ALPHA = ANGLE DU COUDE
1484 # NBTRAN = NOMBRE DE TRANSITION D'EPAISSEUR (0, 1 OU 2)
1485 # EP1 = EPAISSEUR DU COUDE (COTE EMBOUT 1 SI TRANSITION)
1486 # EP2 = EPAISSEUR DU COUDE (COTE EMBOUT 2 SI TRANSITION)
1487 # EPI = EPAISSEUR DU COUDE INTERMEDIAIRE SI TRANSITION A 2 PENTES
1488 # TETA1 = ANGLE DE LA PREMIERE TRANSITION D'EPAISSEUR EVENTUELLE
1489 # TETA2 = ANGLE DE LA DEUXIEME TRANSITION D'EPAISSEUR EVENTUELLE
1490 # LTRAN = LONGUEUR ENTRE FIN DE L'EMBOUT 1 ET DEBUT DE TRANSITION
1491 # LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
1492 # LCLIM = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
1493 # GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
1494 # SYME = "QUART" DE STRUCTURE, "DEMI" STRUCTURE OU BIEN "ENTIER"
1495 # NBEP = NOMBRE D'ELEMENTS DANS LE COUDE
1496 # NLX = NOMBRE D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR
1497 # NLY = NOMBRE D'ELEMENTS LONGI DE LA SOUS-EPAISSEUR
1498 # SUREP = SUR EPAISSEUR
1500 # ------------------------------------------------------------------------------
1501 def write_file_dgib_ASCSQO(nomFichierDATG,TYPELE,RM,RC,ALPHA,NBTRAN,EP1,EP2,
1502 EPI,TETA1,MCL_SOUS_EPAIS,TETA2,LTRAN,LTCHAR,LTCLIM,GEOM,
1503 SYME,NBEP,NLX,NLY,NIVMAG,SUREP,AZIMC,loc_datg) :
1505 ssep= MCL_SOUS_EPAIS[0]
1506 print 'AZIMC', AZIMC;
1508 texte=' nivmag = '+str(NIVMAG) +POIVIR
1509 texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
1511 texte=texte+'coory = table '+POIVIR
1512 texte=texte+'coorz = table '+POIVIR
1513 texte=texte+'prof = table '+POIVIR
1514 texte=texte+'posit = table '+POIVIR
1515 texte=texte+'axisym = table '+POIVIR
1516 texte=texte+'axecir = table '+POIVIR
1517 texte=texte+'axelon = table '+POIVIR
1518 texte=texte+'sousep = table '+POIVIR
1519 texte=texte+'coorzc = table '+POIVIR
1520 texte=texte+'axelonc = table '+POIVIR
1522 texte=texte+'* DEBUT PARAMETRES UTILISATEUR\n'
1524 texte=texte+'* parametres generaux\n'
1526 texte=texte+' pirad = '+str(pi) +POIVIR
1527 texte=texte+' rm = '+str(RM) +POIVIR
1528 texte=texte+' rc = '+str(RC) +POIVIR
1529 texte=texte+' alpha = '+str(ALPHA) +POIVIR
1530 texte=texte+' lt1 = '+str(LTCHAR) +POIVIR
1531 texte=texte+' lt2 = '+str(LTCLIM) +POIVIR
1532 texte=texte+' nbtranep = '+str(NBTRAN) +POIVIR
1533 texte=texte+' ep1 = '+str(EP1) +POIVIR
1534 texte=texte+' ep2 = '+str(EP2) +POIVIR
1535 texte=texte+' epI = '+str(EPI) +POIVIR
1536 texte=texte+' teta1 = '+str(TETA1) +POIVIR
1537 texte=texte+' teta2 = '+str(TETA2) +POIVIR
1538 texte=texte+' ltran = '+repr(LTRAN) +POIVIR
1539 texte=texte+' surep = '+str(SUREP) +POIVIR
1541 texte=texte+" zcoude = 'oui' "+POIVIR
1543 texte=texte+" zcoude = 'non' "+POIVIR
1544 if SYME == 'ENTIER':
1545 texte=texte+" zsyme = 'entier' "+POIVIR
1546 elif SYME == 'QUART':
1547 texte=texte+" zsyme = 'quart' "+POIVIR
1549 texte=texte+" zsyme = 'demi' "+POIVIR
1550 if TYPELE == 'CU20':
1551 texte=texte+" zquad = 'oui' "+POIVIR
1553 texte=texte+" zquad = 'non' "+POIVIR
1555 texte=texte+' nxep = '+str(NBEP) +POIVIR
1557 texte=texte+'* Caracteristiques de la sous-epaisseur\n'
1559 texte=texte+' azimc = '+str(AZIMC) +POIVIR
1560 texte=texte+' tysep = '+str(ssep.ICIRP) +POIVIR
1561 texte=texte+' tzsep = '+str(ssep.ILONP) +POIVIR
1562 texte=texte+' prof . 1 = '+str(ssep['PROFONDEUR']) +POIVIR
1563 texte=texte+' ycsep = '+str(SCP-pi*RM) +POIVIR
1564 texte=texte+' theta = '+str(ssep.IPHIC) +POIVIR
1565 texte=texte+' zcsep = '+repr(ssep.ISLP) +POIVIR
1567 texte=texte+" posit . 1 = '"+str(ssep['SOUS_EPAIS'].lower())+"'"+POIVIR
1568 texte=texte+' nby = '+str(int(NLX[0])) +POIVIR
1569 texte=texte+' nbz = '+str(int(NLY[0])) +POIVIR
1570 texte=texte+' nbxse = '+str(ssep['NB_ELEM_RADI']) +POIVIR
1571 texte=texte+' axelonc . 1 = '+str(ssep['AXE_LONGI'])+POIVIR
1572 if ssep['POSI_CURV_LONGI']!=None:
1573 texte=texte+' coorzc . 1 = '+repr(ssep['POSI_CURV_LONGI'])+POIVIR
1575 DZC=ssep.BETA*pi*(RC+(RM+EP1/2.)*cos(pi/2.))/180.
1576 texte=texte+' coorzc . 1 = '+repr(DZC)+POIVIR
1577 if ssep['TYPE']=='AXIS':
1578 texte=texte+" zaxis = 'oui' "+POIVIR
1580 texte=texte+" zaxis = 'non' "+POIVIR
1581 if ssep['EMPREINTE'] == 'OUI':
1582 texte=texte+" sousep . 1 = 'oui'"+POIVIR
1584 texte=texte+" sousep . 1 = 'non'"+POIVIR
1586 texte=texte+'* FIN PARAMETRES UTILISATEUR \n'
1587 texte = texte + open(os.path.join(loc_datg, 'ascouf_ssep_mono_v1.datg'), 'r').read()
1588 fdgib=open(nomFichierDATG,'w')
1591 ################################################################################
1592 ################################################################################
1593 ################################################################################
1594 # MACR_ASCOUF_MAIL write_subpart_file_pgib_POST
1596 # APPELEE DANS : write_file_pgib_ASCSQ2 , write_file_pgib_ASCSD2
1597 # DEFINIE UNE CHAINE DE CARACTERES UTILISEE LORS DE L'ECRITURE DU
1598 # FICHIER GIBI DE POST-TRAITEMENTS
1600 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1602 # NLX = NOMBRE D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR
1603 # NLY = NOMBRE D'ELEMENTS LONGI DE LA SOUS-EPAISSEUR
1605 #-----------------DONNEE RENVOYEE PAR ASTER--------------------
1607 # texte = chaine de caracteres contenant des instructions gibi
1608 # de post-traitements
1610 # ------------------------------------------------------------------------------
1611 def write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY):
1612 CAR3 = ('fdro','exdr','extr','exga','fgau','inga','intr','indr')
1615 texte='* DEBUT POINTS DE POST-TRAITEMENT\n'
1618 for ssep in MCL_SOUS_EPAIS:
1621 texte=texte+'* sous-epaisseur No '+str( issep)+'\n'
1623 if ssep['TYPE'] == 'ELLI':
1625 texte=texte+'* plans circonf longi et colonne centrale \n'
1627 texte=texte+'pcirc'+str( issep)+' = circo .'+str(issep).rjust(4)+POIVIR
1628 texte=texte+'plong'+str( issep)+' = longi .'+str(issep).rjust(4)+POIVIR
1629 texte=texte+'pcent'+str( issep)+' = centr .'+str(issep).rjust(4)+POIVIR
1631 texte=texte+'* ligaments tous les 45 degres a epaisseur minimale \n'
1633 texte=texte+'isep = '+str( issep)+POIVIR
1635 texte=texte+'ilig = '+str(k+1)+POIVIR
1636 texte=texte+'rlig = ilig/10. + isep'+POIVIR
1637 texte=texte+str(CAR3[k])+str( issep)+' = lig45 . rlig'+POIVIR
1638 if ssep['TYPE'] == 'ELLI':
1640 texte=texte+"* ligaments circonferentiels a l'epaisseur minimale\n"
1642 texte=texte+'isep = '+str(issep)+POIVIR
1643 for k in range(2*NLX[issep-1]+1):
1644 texte=texte+'ilig = '+str(k+1)+POIVIR
1645 texte=texte+'rlig = ilig/100. + isep'+POIVIR
1646 texte=texte+'cir'+str(issep)+'_'+str(k+1)+' = ligcir . rlig'+POIVIR
1648 texte=texte+"* ligaments longitudinaux a l'epaisseur minimale\n"
1650 for k in range(2*NLY[issep-1]+1):
1651 texte=texte+'ilig = '+str(k+1)+POIVIR
1652 texte=texte+'rlig = ilig/100. + isep'+POIVIR
1653 texte=texte+'lon'+str(issep)+'_'+str(k+1)+' = liglon . rlig'+POIVIR
1654 texte=texte+'* FIN POINTS DE POST-TRAITEMENT\n'
1657 ################################################################################
1658 ################################################################################
1659 ################################################################################
1660 # MACR_ASCOUF_MAIL write_file_pgib_ASCSQ2
1662 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1663 # "PLAQUE SOUS-EPAISSEURS"
1664 # IL S'AGIT DE LA DEUXIEME PARTIE ( APRES LES DONNEES UTILISATEUR )
1667 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1669 # NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
1670 # NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
1672 # ------------------------------------------------------------------------------
1673 def write_file_pgib_ASCSQ2(MCL_SOUS_EPAIS,NLX,NLY):
1675 texte=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
1677 texte=texte+'p1 = 0. 0. (-1.*lt1)'+POIVIR
1678 texte=texte+'p2 = 0. 0. (coor 3 bou3)'+POIVIR
1679 texte=texte+'ma = coude et p1 et p2'+POIVIR
1680 texte=texte+"opti sauv form 'fort.8'"+POIVIR
1681 texte=texte+'sort ma'+POIVIR
1682 texte=texte+'sauv form ma'+POIVIR
1683 texte=texte+'fin'+POIVIR
1684 fpgib=open('fort.71','w')
1688 ################################################################################
1689 ################################################################################
1690 ################################################################################
1691 # MACR_ASCOUF_MAIL write_file_pgib_ASCSP1
1693 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1694 # "PLAQUE SOUS-EPAISSEURS"
1695 # IL S'AGIT DE LA PREMIERE PARTIE ( AVANT LES DONNEES UTILISATEUR )
1698 # ------------------------------------------------------------------------------
1699 def write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg):
1702 texte=' nivmag = '+str(NIVMAG)+POIVIR
1703 texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0 '+POIVIR
1705 texte=texte+'bg = table '+POIVIR
1706 texte=texte+'bd = table '+POIVIR
1707 texte=texte+'bi = table '+POIVIR
1708 texte=texte+'bs = table '+POIVIR
1709 texte=texte+'indbg = table '+POIVIR
1710 texte=texte+'indbd = table '+POIVIR
1711 texte=texte+'indbi = table '+POIVIR
1712 texte=texte+'indbs = table '+POIVIR
1713 texte=texte+'axecir = table '+POIVIR
1714 texte=texte+'axelon = table '+POIVIR
1715 texte=texte+'axelonc = table '+POIVIR
1716 texte=texte+'coorzc = table '+POIVIR
1717 texte=texte+'prof = table '+POIVIR
1718 texte=texte+'posit = table '+POIVIR
1719 texte=texte+'coory = table '+POIVIR
1720 texte=texte+'coorz = table '+POIVIR
1721 texte=texte+'deny = table '+POIVIR
1722 texte=texte+'nbely = table '+POIVIR
1723 texte=texte+'denz = table '+POIVIR
1724 texte=texte+'nbelz = table '+POIVIR
1725 texte=texte+'axisym = table '+POIVIR
1726 texte=texte+'sousep = table '+POIVIR
1728 texte = texte + open(os.path.join(loc_datg, 'ascouf_ssep_mult_v1.datg'), 'r').read()
1729 fdgib=open(nomFichierDATG,'w')
1733 ################################################################################
1734 ################################################################################
1735 ################################################################################
1736 # MACR_ASCOUF_MAIL write_file_pgib_ASCSDO
1738 # ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE
1739 # "PLAQUE SOUS-EPAISSEURS"
1741 #-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
1743 # RM = RAYON MOYEN DU COUDE
1744 # RC = RAYON DE CINTRAGE DU COUDE
1745 # ALPHA = ANGLE DU COUDE
1746 # EP = EPAISSEUR DU COUDE
1747 # LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
1748 # LCLIM = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
1749 # GEOM = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)
1750 # SYME = QUART DE STRUCTURE SI 'OUI'
1751 # INDBG = INDICATEUR BORD GAUCHE DE LA ZONE CIRCONF J
1752 # INDBD = INDICATEUR BORD DROIT DE LA ZONE CIRCONF J
1753 # BG = ABSCISSE DU BORD GAUCHE DE LA ZONE CIRCONF J
1754 # BD = ABSCISSE DU BORD DROIT DE LA ZONE CIRCONF J
1755 # BI = ORDONNEE DU BORD INFERIEUR DE LA ZONE LONGI J
1756 # BS = ORDONNEE DU BORD SUPERIEUR DE LA ZONE LONGI J
1757 # INDBI = INDICATEUR BORD INFERIEUR DE LA ZONE LONGI J
1758 # INDBS = INDICATEUR BORD SUPERIEUR DE LA ZONE LONGI J
1759 # INDSEX = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE CIRCONF J
1760 # INDSEY = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE LONGI J
1761 # DNX = DENSITE ET NOMBRE D'ELEMENTS CIRCONF. DE LA ZONE J
1762 # DNY = DENSITE ET NOMBRE D'ELEMENTS LONGIT. DE LA ZONE J
1763 # NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
1764 # NZONEY = NOMBRE DE ZONES LONGITUDINALES
1766 # ------------------------------------------------------------------------------
1767 def write_file_pgib_ASCSDO(RM,RC,ALPHA,EP,LTCLIM,LTCHAR,NBEP,SUREP,
1768 NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,
1769 DNX,DNY,MCL_SOUS_EPAIS,GEOM,SYME):
1776 if 0<ceil(x)-x<=0.5:
1779 return int(floor(x))
1781 # conversion des densites de raffinement des embout en degres par rapport
1782 # a l'angle du coude
1783 RTMP=nint(LTCHAR/DELTAY)*DELTAY/4.
1784 DENSTU = RTMP*360./(2.*pi*RC)
1789 texte='* DEBUT PARAMETRES UTILISATEUR \n'
1791 texte=texte+'* parametres generaux\n'
1793 texte=texte+'rm = '+str(RM) +POIVIR
1794 texte=texte+'rc = '+str(RC) +POIVIR
1795 texte=texte+'alphac = '+str(ALPHA) +POIVIR
1796 texte=texte+'epc = '+str(EP) +POIVIR
1797 texte=texte+'pirad = '+str(pi) +POIVIR
1798 texte=texte+'lgv = '+str(LTCLIM) +POIVIR
1799 texte=texte+'lt = '+str(LTCHAR) +POIVIR
1800 texte=texte+'lcoude = '+str(ALPHA*pi/180.*RC) +POIVIR
1802 texte=texte+"zcoude = 'oui' " +POIVIR
1804 texte=texte+"zcoude = 'non' " +POIVIR
1805 if SYME == 'ENTIER':
1806 texte=texte+"zsyme = 'entier' " +POIVIR
1807 elif SYME == 'QUART':
1808 texte=texte+"zsyme = 'quart' " +POIVIR
1810 texte=texte+"zsyme = 'demi' " +POIVIR
1811 texte=texte+'nxep = '+str(NBEP) +POIVIR
1812 texte=texte+'nzt = '+str(NZT) +POIVIR
1813 texte=texte+'nzgv = '+str(NZGV) +POIVIR
1814 texte=texte+'daxhtu = '+str(DENSTU) +POIVIR
1815 texte=texte+'daxhgv = '+str(DENSGV) +POIVIR
1818 texte=texte+'* Zones couvertes en circonference\n'
1820 for j in range(NZONEX):
1821 texte=texte+'bg .' +str(j+1).rjust(23)+' = '+str(BG[j]-pi*RM) +POIVIR
1822 texte=texte+'bd .' +str(j+1).rjust(23)+' = '+str(BD[j]-pi*RM) +POIVIR
1823 texte=texte+'indbg .'+str(j+1).rjust(23)+' = '+str(INDBG[j]) +POIVIR
1824 texte=texte+'indbd .'+str(j+1).rjust(23)+' = '+str(INDBD[j]) +POIVIR
1825 texte=texte+'deny .' +str(j+1).rjust(23)+' = '+str(DNX[2*j]) +POIVIR
1826 texte=texte+'nbely .'+str(j+1).rjust(23)+' = '+str(int(DNX[2*j+1])) +POIVIR
1829 texte=texte+'* Zones couvertes longitudinalement\n'
1831 for j in range(NZONEY):
1832 texte=texte+'bi .' +str(j+1).rjust(23)+' = '+str(BI[j]) +POIVIR
1833 texte=texte+'bs .' +str(j+1).rjust(23)+' = '+str(BS[j]) +POIVIR
1834 texte=texte+'indbi .'+str(j+1).rjust(23)+' = '+str(INDBI[j]) +POIVIR
1835 texte=texte+'indbs .'+str(j+1).rjust(23)+' = '+str(INDBS[j]) +POIVIR
1836 texte=texte+'denz .' +str(j+1).rjust(23)+' = '+str(DNY[2*j]) +POIVIR
1837 texte=texte+'nbelz .'+str(j+1).rjust(23)+' = '+str(int(DNY[2*j+1])) +POIVIR
1840 texte=texte+'* Caracteristiques des sous-epaisseurs\n'
1843 for ssep in MCL_SOUS_EPAIS:
1845 texte=texte+'axecir .' +str(issep).rjust(23)+' = '+str(ssep.ICIRP) +POIVIR
1846 texte=texte+'axelon .' +str(issep).rjust(23)+' = '+str(ssep.ILONP) +POIVIR
1847 texte=texte+'prof .' +str(issep).rjust(23)+' = '+str(ssep['PROFONDEUR'])+POIVIR
1848 texte=texte+'coory .' +str(issep).rjust(23)+' = '+str(ssep.ISCP-pi*RM) +POIVIR
1849 texte=texte+'coorz .' +str(issep).rjust(23)+' = '+str(ssep.ISLP) +POIVIR
1850 texte=texte+'posit .' +str(issep).rjust(23)+" = '"+str(ssep['SOUS_EPAIS'].lower())+"'"+POIVIR
1851 texte=texte+'axelonc .'+str(issep).rjust(23)+' = '+str(ssep['AXE_LONGI']) +POIVIR
1852 if ssep['POSI_CURV_LONGI']!=None:
1853 texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(ssep['POSI_CURV_LONGI'])+POIVIR
1855 DZC=ssep.BETA*pi*(RC+(RM+EP/2.)*cos(pi/2.))/180.
1856 texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(DZC)+POIVIR
1857 if ssep['TYPE']=='AXIS':
1858 texte=texte+'axisym .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
1860 texte=texte+'axisym .'+str(issep).rjust(23)+" = 'non'"+POIVIR
1861 if ssep['EMPREINTE'] == 'OUI':
1862 texte=texte+'sousep .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
1864 texte=texte+'sousep .'+str(issep).rjust(23)+" = 'non'"+POIVIR
1867 texte=texte+'* Caracteristique de sur-epaisseur\n'
1868 texte=texte+'surep = '+str(SUREP) +POIVIR
1870 texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
1871 fpgib=open('fort.71','w')
1876 ################################################################################
1877 ################################################################################
1878 ################################################################################
1880 # ------------------------------------------------------------------------------
1881 def write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY):
1885 texte=texte+'coude extube bord1 clgv bord2 peauext peauint placoude platube\n'
1886 texte=texte+'plagv longi circo centr bou1 bou3 ligmed ligtub liggv lig45\n'
1887 texte=texte+'ligcir liglon bordtu\n'
1888 texte=texte+'= PLAQSEP bg bd bi bs indbg indbd indbi indbs rm rc\n'
1889 texte=texte+'alphac pirad epc lt lgv coory coorz axecir axelon prof zsyme posit\n'
1890 texte=texte+'lcoude nxep sousep deny nbely denz nbelz axelonc coorzc axisym\n'
1891 texte=texte+'daxhtu daxhgv nzt nzgv zcoude surep'+POIVIR
1892 texte=texte+'fdromi = ligmed . 1'+POIVIR
1893 texte=texte+'exdrmi = ligmed . 2'+POIVIR
1894 texte=texte+'extrmi = ligmed . 3'+POIVIR
1895 texte=texte+'exgami = ligmed . 4'+POIVIR
1896 texte=texte+'fgaumi = ligmed . 5'+POIVIR
1897 texte=texte+'ingami = ligmed . 6'+POIVIR
1898 texte=texte+'intrmi = ligmed . 7'+POIVIR
1899 texte=texte+'indrmi = ligmed . 8'+POIVIR
1900 texte=texte+'fdrotu = ligtub . 1'+POIVIR
1901 texte=texte+'exdrtu = ligtub . 2'+POIVIR
1902 texte=texte+'extrtu = ligtub . 3'+POIVIR
1903 texte=texte+'exgatu = ligtub . 4'+POIVIR
1904 texte=texte+'fgautu = ligtub . 5'+POIVIR
1905 texte=texte+'ingatu = ligtub . 6'+POIVIR
1906 texte=texte+'intrtu = ligtub . 7'+POIVIR
1907 texte=texte+'indrtu = ligtub . 8'+POIVIR
1908 texte=texte+"si (ega zsyme 'entier')"+POIVIR
1909 texte=texte+' fdrogv = liggv . 1'+POIVIR
1910 texte=texte+' exdrgv = liggv . 2'+POIVIR
1911 texte=texte+' extrgv = liggv . 3'+POIVIR
1912 texte=texte+' exgagv = liggv . 4'+POIVIR
1913 texte=texte+' fgaugv = liggv . 5'+POIVIR
1914 texte=texte+' ingagv = liggv . 6'+POIVIR
1915 texte=texte+' intrgv = liggv . 7'+POIVIR
1916 texte=texte+' indrgv = liggv . 8'+POIVIR
1917 texte=texte+'finsi'+POIVIR
1920 text2=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
1924 texte=texte+'*oeil = 10000. 0. 0.' +POIVIR
1925 texte=texte+'*trac oeil cach coude'+POIVIR
1926 texte=texte+'*opti donn 5' +POIVIR
1927 texte=texte+'p1 = 0. 0. (-1.*lt)'+POIVIR
1928 texte=texte+'p2 = 0. 0. (coor 3 bou3)'+POIVIR
1929 texte=texte+'ma = coude et p1 et p2'+POIVIR
1930 texte=texte+'sort ma'+POIVIR
1931 texte=texte+'neu = nbno ma'+POIVIR
1932 texte=texte+"mess 'nombre de noeuds : 'neu"+POIVIR
1933 texte=texte+"opti sauv form 'fort.8'"+POIVIR
1934 texte=texte+'sauv form ma'+POIVIR
1935 texte=texte+'fin'+POIVIR
1936 fpgib=open('fort.71','a')
1940 ################################################################################
1941 ################################################################################
1942 ################################################################################
1944 # ------------------------------------------------------------------------------
1945 def write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP,SUREP,
1946 LTCLIM,LTCHAR,NBEP,loc_datg):
1950 NZC=int((ALPHA+0.00001)/5.)
1953 DENEXT=int(LTCHAR/DELTAY)*DELTAY/4.
1958 if TYPBOL=='CUVE' : TYPEMB = 'typcuv'
1959 if TYPBOL=='GV' : TYPEMB = 'typegv'
1960 if TYPBOL=='ASP_MPP' : TYPEMB = 'typapp'
1965 texte='* DEBUT PARAMETRES UTILISATEUR\n'
1967 texte=texte+'* Parametres generaux\n'
1969 texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
1970 texte=texte+'option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
1971 texte=texte+'rm = '+str(RM) +POIVIR
1972 texte=texte+'rc = '+str(RC) +POIVIR
1973 texte=texte+'alphac = '+str(ALPHA) +POIVIR
1974 texte=texte+'epc = '+str(EP) +POIVIR
1975 texte=texte+'surep = '+str(SUREP) +POIVIR
1976 texte=texte+'lgv = '+str(LTCLIM) +POIVIR
1977 texte=texte+'lt = '+str(LTCHAR) +POIVIR
1978 texte=texte+"typembou = '"+TYPEMB+"'" +POIVIR
1979 texte=texte+'nx = '+str(NBEP) +POIVIR
1980 texte=texte+'ny = '+str(NY) +POIVIR
1981 texte=texte+"pos = 'bidon'" +POIVIR
1982 texte=texte+'l1 = 0.' +POIVIR
1983 texte=texte+'lbloc = 0.' +POIVIR
1984 texte=texte+'crit = 0.0001' +POIVIR
1985 texte=texte+'crit2 = 0.01' +POIVIR
1986 texte=texte+'epsit = 1.e-3' +POIVIR
1987 texte=texte+'pirad = '+str(pi) +POIVIR
1988 texte=texte+'nzc = '+str(NZC) +POIVIR
1989 texte=texte+'teta_f = '+str(pi/2.) +POIVIR
1990 texte=texte+'zpp31 = '+str(CZ) +POIVIR
1991 texte=texte+'daxbtu = '+str(DENEXT) +POIVIR
1992 texte=texte+'daxhtu = '+str(DELTAZ) +POIVIR
1993 texte=texte+'daxbgv = '+str(DELTAZ) +POIVIR
1994 texte=texte+'daxhgv = '+str(DENEXT) +POIVIR
1995 texte=texte+'nzt = '+str(NZT) +POIVIR
1996 texte=texte+'nzgv = '+str(NZGV) +POIVIR
1998 texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
1999 texte = texte + open(os.path.join(loc_datg, 'ascouf_regl_v1.datg'), 'r').read()
2000 fdgib=open(nomFichierDATG,'w')
2004 ################################################################################
2005 ################################################################################
2006 ################################################################################
2007 # ------------------------------------------------------------------------------
2008 def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
2009 SOUS_EPAIS_COUDE,SOUS_EPAIS_MULTI,
2010 FISS_COUDE,IMPRESSION,INFO,**args):
2012 Ecriture de la macro MACR_ASCOUF_MAIL
2014 from Accas import _F
2020 # On importe les definitions des commandes a utiliser dans la macro
2021 EXEC_LOGICIEL =self.get_cmd('EXEC_LOGICIEL')
2022 PRE_GIBI =self.get_cmd('PRE_GIBI')
2023 LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
2024 DEFI_GROUP =self.get_cmd('DEFI_GROUP')
2025 MODI_MAILLAGE =self.get_cmd('MODI_MAILLAGE')
2026 CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
2027 DEFI_FICHIER =self.get_cmd('DEFI_FICHIER')
2028 IMPR_RESU =self.get_cmd('IMPR_RESU')
2030 # La macro compte pour 1 dans la numerotation des commandes
2035 NIVMAG = EXEC_MAILLAGE['NIVE_GIBI']
2038 CAR3 = ('IFDRO','IEXDR','IEXTR','IEXGA','IFGAU','IINGA','IINTR','IINDR')
2039 CAR4 = ('NOFDRO','NOEXDR','NOEXTR','NOEXGA','NOFGAU','NOINGA','NOINTR','NOINDR')
2040 CAR5 = ('NEFDRO','NEEXDR','NEEXTR','NEEXGA','NEFGAU','NEINGA','NEINTR','NEINDR')
2041 CAR6 = ('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR')
2042 SECT = ('MI','TU','GV')
2045 ################################################################################
2046 # --- caracteristiques du coude ---
2047 ################################################################################
2049 GEOM =COUDE['TRANSFORMEE']
2050 ALPHA =COUDE['ANGLE']
2051 RC =COUDE['R_CINTR']
2052 LTCHAR =COUDE['L_TUBE_P1']
2053 LTCLIM =COUDE['L_TUBE_P2']
2054 NBEP =COUDE['NB_ELEM_EPAIS']
2059 if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
2060 SUREP=COUDE['SUR_EPAIS']
2061 TYPBOL =COUDE['BOL_P2']
2062 DEXT = COUDE['DEXT']
2063 EP1 = COUDE['EPAIS']
2072 if COUDE['SYME']!='ENTIER':
2073 UTMESS('F','ASCOUF0_13')
2075 DEXT = COUDE['DEXT_T1']
2076 EP1 = COUDE['EPAIS_T1']
2077 EP2 = COUDE['EPAIS_T2']
2078 TETA1 = COUDE['ANGL_TETA1']
2081 if COUDE['ANGL_TETA2']!=None :
2083 TETA2 = COUDE['ANGL_TETA2']
2084 EPI = COUDE['EPAIS_TI']
2086 if COUDE['ABSC_CURV_TRAN']!=None :
2087 LTRAN = COUDE['ABSC_CURV_TRAN']
2089 LTRAN = COUDE['POSI_ANGU_TRAN']* RC * pi / 180.0
2092 RM2 = RM + (EP2-EP1)/2.0
2097 if COUDE['SYME']!='ENTIER' and (LTCHAR!=LTCLIM) :
2098 UTMESS('F','ASCOUF0_14')
2100 LAMOR = 3.0/2.0 * sqrt( RM*RM*RM / EP1)
2102 UTMESS('A','ASCOUF0_15',valr=LAMOR)
2104 LAMOR = 3.0/2.0 * sqrt( RM2*RM2*RM2 / EP2)
2106 UTMESS('A','ASCOUF0_16',valr=LAMOR)
2109 if TYPBOL[:1]=='GV' :
2110 UTMESS('A','ASCOUF0_17')
2112 ################################################################################
2113 # --- caracteristiques de la fissure ---
2114 ################################################################################
2116 if FISS_COUDE!=None:
2118 UTMESS('A','ASCOUF0_18')
2119 FPROF = FISS_COUDE['PROFONDEUR']
2120 FAXI = FISS_COUDE['AXIS']
2121 if FAXI=='NON' and FISS_COUDE['LONGUEUR']==None :
2122 UTMESS('F','ASCOUF0_19')
2123 if FAXI=='OUI' and FISS_COUDE['LONGUEUR']!=None :
2124 UTMESS('A','ASCOUF0_20')
2125 if FISS_COUDE['LONGUEUR']!=None : FLONG = FISS_COUDE['LONGUEUR']
2127 #### on prend une marge de securite a cause des modifs dans ascfis
2128 FLONG = 2.0 * pi * (RM + EP1)
2129 if FISS_COUDE['ABSC_CURV']!=None :
2130 SF = FISS_COUDE['ABSC_CURV']
2135 BETA = FISS_COUDE['POSI_ANGUL']
2136 LDEFAU = BETA * RC * pi / 180.0
2137 AZIM = FISS_COUDE['AZIMUT']
2138 ORIEN = FISS_COUDE['ORIEN']
2139 POSIT = FISS_COUDE['FISSURE']
2140 NT = FISS_COUDE['NB_TRANCHE']
2141 NS = FISS_COUDE['NB_SECTEUR']
2142 NC = FISS_COUDE['NB_COURONNE']
2143 if FISS_COUDE['RAYON_TORE']!=None : RC0 = FISS_COUDE['RAYON_TORE']
2145 if FISS_COUDE['COEF_MULT_RC2']!=None : RC2 = FISS_COUDE['COEF_MULT_RC2']
2147 if FISS_COUDE['COEF_MULT_RC3']!=None : RC3 = FISS_COUDE['COEF_MULT_RC3']
2149 EPSI = FISS_COUDE['ANGL_OUVERTURE']
2155 if ORIEN!=90.0 and NBTRAN!=0 :
2156 UTMESS('F','ASCOUF0_21')
2157 if ORIEN!=90.0 and NBTRAN!=0 :
2158 UTMESS('F','ASCOUF0_21')
2159 if ORIEN!=90.0 and COUDE['SYME']!='ENTIER' :
2160 UTMESS('F','ASCOUF0_23')
2161 if ORIEN!=90.0 and FAXI=='OUI' :
2162 UTMESS('F','ASCOUF0_24')
2164 ################################################################################
2165 # --- caracteristiques des sous epaisseurs ---
2166 ################################################################################
2169 MCL_SOUS_EPAIS = None
2170 if SOUS_EPAIS_MULTI!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_MULTI
2171 if SOUS_EPAIS_COUDE!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_COUDE
2172 if SOUS_EPAIS_MULTI!=None and NBTRAN!=0 :
2173 UTMESS('F','ASCOUF0_25')
2174 if SOUS_EPAIS_COUDE!=None and FISS_COUDE!=None and NBTRAN!=0 :
2175 UTMESS('F','ASCOUF0_26')
2176 if MCL_SOUS_EPAIS!=None :
2178 if MCL_SOUS_EPAIS.__class__.__name__ !='MCList' : MCL_SOUS_EPAIS=[MCL_SOUS_EPAIS,]
2179 if len(MCL_SOUS_EPAIS)!=1 and COUDE['SYME']!='ENTIER' :
2180 UTMESS('F','ASCOUF0_27')
2181 for ssep in MCL_SOUS_EPAIS :
2183 if ssep['AXE_CIRC']!=None and ssep['TYPE']=='AXIS' :
2184 UTMESS('F','ASCOUF0_28')
2185 if ssep['AXE_CIRC']==None and ssep['TYPE']=='ELLI' :
2186 UTMESS('F','ASCOUF0_29')
2187 if ssep['POSI_CURV_LONGI']!=None:
2188 if ssep['POSI_CURV_LONGI']>(ALPHA*RC*pi/180.0) :
2189 UTMESS('F','ASCOUF0_30',vali=[isep],valr=[ssep['POSI_CURV_LONGI'],ALPHA*RC*pi/180.0])
2190 LDEFAU = ssep['POSI_CURV_LONGI'] + ssep['AXE_LONGI']/2.0
2193 BETA=ssep['POSI_ANGUL']
2194 if (BETA<0.) or (BETA>ALPHA) :
2195 UTMESS('F','ASCOUF0_31',vali=[isep],valr=[BETA,ALPHA])
2196 LDEFAU = (BETA*RC*pi/180.0) + ssep['AXE_LONGI']/2.0
2198 if ssep['POSI_CURV_CIRC']!=None:
2199 if ssep['POSI_CURV_CIRC']>(2*pi*RM) :
2200 UTMESS('F','ASCOUF0_32',vali=[isep],valr=[ssep['POSI_CURV_CIRC'],2*pi*RM])
2201 if ssep['POSI_CURV_CIRC']!=(pi*RM) and ssep['TYPE']=='AXIS':
2202 UTMESS('F','ASCOUF0_33')
2204 ssep.IPHIC=ssep['AZIMUT']
2205 if ssep['AZIMUT']!=180. and ssep['TYPE']=='AXIS':
2206 UTMESS('F','ASCOUF0_34')
2207 # l_ITYPE.append(ssep['TYPE' ])
2208 # l_ICIRC.append(ssep['AXE_CIRC' ])
2209 # l_ILONC.append(ssep['AXE_LONGI' ])
2210 # l_IPROC.append(ssep['PROFONDEUR' ])
2211 # l_ISLC.append( ssep['POSI_CURV_LONGI'])
2212 # l_IBETC.append(BETA)
2214 # l_ISCC.append( ssep['POSI_CURV_CIRC' ])
2215 # l_IPHIC.append(ssep['AZIMUT' ])
2216 # l_IPOS.append( ssep['SOUS_EPAIS' ])
2217 # l_INBEL.append(ssep['NB_ELEM_LONGI' ])
2218 # l_INBEC.append(ssep['NB_ELEM_CIRC' ])
2219 # l_IEVID.append(ssep['EMPREINTE' ])
2221 if SOUS_EPAIS_COUDE!=None and COUDE['NB_ELEM_EPAIS']!=3 :
2222 UTMESS('A','ASCOUF0_35')
2224 ################################################################################
2225 # --- verifications de coherences ---
2226 ################################################################################
2229 if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
2230 if SUREP<0. or SUREP>(RM-EP1/2.0):
2232 UTMESS('F','ASCOUF0_36',vali=SUREP,valr=RM-EP1/2.0)
2233 if RC<=(RM+EP1/2.0):
2234 UTMESS('F','ASCOUF0_37',valr=[RC,RM+EP1/2.0])
2238 if FISS_COUDE!=None:
2239 if (RM/EP1)<5. or (RM/EP1)>50.:
2240 UTMESS('F','ASCOUF0_38',valr=RM/EP1)
2241 if FISS_COUDE['ABSC_CURV']!=None:
2242 if SF<0. or SF>(ALPHA*RC*pi/180.0) :
2243 UTMESS('F','ASCOUF0_39',valr=[SF,ALPHA*RC*pi/180.0])
2244 if (NT-2*(NT/2))!=0:
2245 UTMESS('F','ASCOUF0_40',vali=NT)
2246 if FISS_COUDE['ABSC_CURV'] and ((BETA<0.) or (BETA>ALPHA)):
2247 UTMESS('F','ASCOUF0_41',valr=[BETA,ALPHA])
2249 # transition d epaisseur
2252 LCOUDE = ALPHA * RC * pi / 180.0
2254 if (LTRAN<LDEFAU) and (LTRAN>LCOUDE) :
2255 UTMESS('F','ASCOUF0_42',valr=[LTRAN,LDEFAU,LCOUDE])
2256 if (TETA1<0.) or (TETA1>30.) :
2257 UTMESS('F','ASCOUF0_43',valr=[TETA1])
2259 # transition d epaisseur a une pente
2262 if (EP1<12.) or (EP1>80.) :
2263 UTMESS('F','ASCOUF0_44',valr=[EP1])
2264 if (EP2<20.) or (EP2>110.) :
2265 UTMESS('F','ASCOUF0_45',valr=[EP2])
2267 UTMESS('F','ASCOUF0_46')
2268 LTRANF = LTRAN + ((EP2-EP1)/(tan(TETA1)))
2269 if (LTRANF>LCOUDE) :
2270 UTMESS('F','ASCOUF0_47',valr=[LTRANF,LCOUDE])
2271 if DEXT<112. or DEXT>880. :
2272 UTMESS('F','ASCOUF0_48',valr=[DEXT])
2274 # transition d epaisseur a une pente
2277 if (TETA2<0.) or (TETA2>45.) :
2278 UTMESS('F','ASCOUF0_49',valr=[TETA2])
2279 if (EP1<7.) or (EP1>35.) :
2280 UTMESS('F','ASCOUF0_50',valr=[EP1])
2281 if (EP2<15.) or (EP2>40.) :
2282 UTMESS('F','ASCOUF0_51',valr=[EP2])
2283 if (EPI<15.) or (EPI>40.) :
2284 UTMESS('F','ASCOUF0_52',valr=[EPI])
2286 UTMESS('F','ASCOUF0_53')
2288 UTMESS('F','ASCOUF0_54')
2289 LTRANF = LTRAN + (EPI-EP1)/(tan(TETA1))
2290 LTRANF = LTRANF + (EP2-EPI)/(tan(TETA2))
2291 if (LTRANF>LCOUDE) :
2292 UTMESS('F','ASCOUF0_55',valr=[LTRANF,LCOUDE])
2293 if (DEXT<77.) or (DEXT>355.) :
2294 UTMESS('F','ASCOUF0_56',valr=[LTRANF])
2296 ################################################################################
2297 # --- calcul taille initiale des defauts sur la plaque ---
2298 ################################################################################
2301 if FISS_COUDE!=None:
2302 DSF=(FISS_COUDE['ABSC_CURV']!=None)
2303 AXEAP,AXECP,SFP = ASCFIS(ALPHA, RM, RC, EP1, SUREP, GEOM, FPROF,
2304 DGAXEC, AZIM, POSIT, SF, DSF, BETA, ORIEN)
2305 elif MCL_SOUS_EPAIS!=None :
2306 ier,AZIMC= ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP1,GEOM,SYME)
2307 for ssep in MCL_SOUS_EPAIS:
2308 ssep.IDENL = ssep.ILONP/ssep['NB_ELEM_LONGI']*180./(pi*RC)
2309 ssep.IDENC = ssep.ICIRP/ssep['NB_ELEM_CIRC']*180./(pi*RM)
2311 # quart de structure
2312 ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY\
2313 = ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM)
2315 # demi-structure ou entiere
2316 ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY\
2317 = ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM)
2320 loc_gibi=aster.repout()
2321 logiel = EXEC_MAILLAGE['LOGICIEL' ]
2322 UNITD = EXEC_MAILLAGE['UNITE_DATG']
2323 UNITP = EXEC_MAILLAGE['UNITE_MGIB']
2324 if logiel=='GIBI98' : logiel = loc_gibi+'gibi98'
2325 elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000'
2328 UTMESS('F','ASCOUF0_57')
2330 # --- ecriture sur le fichier .datg de la procedure ---
2332 # Nom du fichier de commandes pour GIBI
2333 nomFichierDATG = 'fort.'+str(UNITD)
2334 # Nom du fichier de maillage GIBI
2335 nomFichierGIBI = 'fort.'+str(UNITP)
2336 loc_datg = aster.repdex()
2338 if FISS_COUDE!=None:
2339 # procedure coude fissure (MOT-CLE FISS_COUDE)
2340 write_file_dgib_ASCFDO(nomFichierDATG,RM,RC,ALPHA,NBTRAN,EP1,EP2,EPI,TETA1,
2341 TETA2,LTRAN,SUREP,LTCHAR,LTCLIM,TYPBOL,AXEAP,AXECP,NT,NS,NC,SFP,
2342 ORIEN,AZIM,RC0,RC2,RC3,POSIT,EPSI,NIVMAG,SYME,loc_datg)
2343 elif MCL_SOUS_EPAIS!=None :
2344 if SOUS_EPAIS_MULTI==None :
2345 # procedure coude sous-ep.: (MOT-CLE SOUS_EPAIS_COUDE)
2346 write_file_dgib_ASCSQO(nomFichierDATG,TYPELE,RM,RC,ALPHA,NBTRAN,EP1,EP2,
2347 EPI,TETA1,MCL_SOUS_EPAIS,TETA2,LTRAN,LTCHAR,LTCLIM,GEOM,
2348 SYME,NBEP,NLX,NLY,NIVMAG,SUREP,AZIMC,loc_datg)
2349 write_file_pgib_ASCSQ2(MCL_SOUS_EPAIS,NLX,NLY)
2351 # procedure coude sous-ep.:(MOT-CLE SOUS_EPAIS_MULTI)
2352 write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg)
2353 write_file_pgib_ASCSDO(RM,RC,ALPHA,EP1,LTCLIM,LTCHAR,NBEP,SUREP,
2354 NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,
2355 DNX,DNY,MCL_SOUS_EPAIS,GEOM,SYME)
2356 write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY)
2358 # procedure coude regle
2359 write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP1,SUREP,
2360 LTCLIM,LTCHAR,NBEP,loc_datg)
2364 DEFI_FICHIER(ACTION='LIBERER',UNITE=19)
2365 DEFI_FICHIER(ACTION='LIBERER',UNITE=20)
2366 EXEC_LOGICIEL( LOGICIEL = logiel ,
2367 ARGUMENT = (nomFichierDATG,
2373 __nomres=LIRE_MAILLAGE(INFO=INFO)
2379 l_CREA_GROUP_NO.append('BORD1')
2380 l_CREA_GROUP_NO.append('CLGV')
2381 l_CREA_GROUP_NO.append('BORD2')
2382 l_CREA_GROUP_NO.append('PEAUINT')
2383 l_CREA_GROUP_NO.append('PEAUEXT')
2385 # cas des fissures axisymetriques
2386 if FISS_COUDE!=None:
2387 if FISS_COUDE['AXIS']=='OUI':
2388 motscles['CREA_GROUP_MA']=[]
2389 motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
2391 POSITION = 'INIT' , ),)
2393 # conversion des groupes de mailles en groupes du bloc fissure
2394 if FISS_COUDE!=None:
2395 if SYME == 'ENTIER':
2396 l_CREA_GROUP_NO.append('NOLIG1')
2397 l_CREA_GROUP_NO.append('FACE1')
2398 l_CREA_GROUP_NO.append('NOLIG2')
2399 l_CREA_GROUP_NO.append('FACE2')
2400 l_CREA_GROUP_NO.append('FONDFISS')
2402 motscles['CREA_GROUP_NO']=[]
2403 motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=tuple(l_CREA_GROUP_NO)))
2405 # conversion des groupes de mailles en groupes de noeuds pour les
2406 # ligaments des sous-ep.
2407 if MCL_SOUS_EPAIS!=None:
2409 for ssep in MCL_SOUS_EPAIS:
2411 if ssep['TYPE']=='ELLI':
2412 for k in range(2*NLX[issep-1]+1):
2413 chtmp=str(issep)+'_'+str(k+1)
2416 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2418 motscles['CREA_GROUP_NO'].append(_F(NOM = 'IPCEN'+str(issep),
2419 GROUP_MA = 'PCENT'+str(issep),),)
2420 for k in range(2*NLY[issep-1]+1):
2421 chtmp=str(issep)+'_'+str(k+1)
2424 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2426 for k in range(2*NLX[issep-1]+1):
2427 chtmp=str(issep)+'_'+str(k+1)
2431 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2432 INTERSEC = ('PEAUEXT',ch1),),)
2433 motscles['CREA_GROUP_NO'].append(_F(NOM = ch3,
2434 INTERSEC = ('PEAUINT',ch1),),)
2435 motscles['CREA_GROUP_NO'].append(_F(NOM = 'OPCEN'+str(issep),
2436 INTERSEC = ('PEAUEXT','IPCEN'+str(issep),),),)
2437 motscles['CREA_GROUP_NO'].append(_F(NOM = 'EPCEN'+str(issep),
2438 INTERSEC = ('PEAUINT','IPCEN'+str(issep),),),)
2439 for k in range(2*NLY[issep-1]+1):
2440 chtmp=str(issep)+'_'+str(k+1)
2444 motscles['CREA_GROUP_NO'].append(_F(NOM = ch2,
2445 INTERSEC = ('PEAUEXT',ch1),),)
2446 motscles['CREA_GROUP_NO'].append(_F(NOM = ch3,
2447 INTERSEC = ('PEAUINT',ch1),),)
2448 for k in range(2*NLX[issep-1]+1):
2449 chtmp=str(issep)+'_'+str(k+1)
2454 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2457 GROUP_NO_ORIG = ch3,
2458 GROUP_NO_EXTR = ch4,
2460 CRITERE = CRITER,),)
2461 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2462 NOM = 'PCENT'+str(issep),
2463 GROUP_NO = 'IPCEN'+str(issep),
2464 GROUP_NO_ORIG = 'OPCEN'+str(issep),
2465 GROUP_NO_EXTR = 'EPCEN'+str(issep),
2467 CRITERE = CRITER,),)
2468 for k in range(2*NLY[issep-1]+1):
2469 chtmp=str(issep)+'_'+str(k+1)
2474 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2477 GROUP_NO_ORIG = ch3,
2478 GROUP_NO_EXTR = ch4,
2480 CRITERE = CRITER,),)
2481 # 1/ noms intermediaires des groupes de noeuds representant les ligaments
2482 # des sections: TU,MI,GV et sous-ep.
2484 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR3[k]+str(issep),
2485 GROUP_MA = CAR6[k]+str(issep),),)
2488 if SYME == 'ENTIER' or k!=2:
2490 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR3[j]+SECT[k],
2491 GROUP_MA = CAR6[j]+SECT[k],),)
2493 # 2/ determination et nommage des noeuds origine et extremite des groupes de noeuds
2494 # representant les ligaments de la ou des sections: sous-ep.
2496 for ssep in MCL_SOUS_EPAIS:
2499 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR4[k]+str(issep),
2500 INTERSEC = ('PEAUEXT',CAR3[k]+str(issep),),),)
2501 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR5[k]+str(issep),
2502 INTERSEC = ('PEAUINT',CAR3[k]+str(issep),),),)
2503 # 3/ nommage final des groupes de noeuds representant les ligaments
2504 # de la ou des sections: sous-ep.
2506 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2507 NOM = CAR6[k]+str(issep),
2508 GROUP_NO = CAR3[k]+str(issep),
2509 GROUP_NO_ORIG = CAR4[k]+str(issep),
2510 GROUP_NO_EXTR = CAR5[k]+str(issep),
2512 CRITERE = CRITER,),)
2514 # 4/ determination et nommage des noeuds origine et extremite des groupes de noeuds
2515 # representant les ligaments des sections: TU,MI,GV
2517 if SYME == 'ENTIER' or k!=2:
2519 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR4[j]+SECT[k],
2520 INTERSEC = ('PEAUEXT',CAR3[j]+SECT[k],),),)
2521 motscles['CREA_GROUP_NO'].append(_F( NOM = CAR5[j]+SECT[k],
2522 INTERSEC = ('PEAUINT',CAR3[j]+SECT[k],),),)
2523 # 5/ nommage final des groupes de noeuds representant les ligaments des sections: TU,MI,GV
2525 motscles['CREA_GROUP_NO'].append(_F(OPTION = 'SEGM_DROI_ORDO',
2526 NOM = CAR6[j]+SECT[k],
2527 GROUP_NO = CAR3[j]+SECT[k],
2528 GROUP_NO_ORIG = CAR4[j]+SECT[k],
2529 GROUP_NO_EXTR = CAR5[j]+SECT[k],
2531 CRITERE = CRITER,),)
2534 __nomres=DEFI_GROUP(reuse =__nomres,
2539 if FISS_COUDE!=None:
2540 # creation des groupes petit axe et grand axe fissure par
2541 # intersection de groupes existants
2543 motscles['CREA_GROUP_NO']=[]
2546 if POSIT == 'DEB_INT':
2547 l_peau.append('PEAUINT')
2549 l_peau.append('PEAUEXT')
2551 if SYME == 'ENTIER' :
2552 l_intersec.append('FACE1')
2553 motscles['CREA_GROUP_NO'].append(_F(NOM = 'P_AXE_1',
2554 INTERSEC = ('NOLIG1','FACE1'),),)
2555 motscles['CREA_GROUP_NO'].append(_F(NOM = 'G_AXE_1',
2556 INTERSEC = tuple(l_peau+l_intersec),),)
2558 l_intersec.append('FACE2')
2559 motscles['CREA_GROUP_NO'].append(_F(NOM = 'P_AXE_2',
2560 INTERSEC = ('NOLIG2','FACE2'),),)
2561 motscles['CREA_GROUP_NO'].append(_F(NOM = 'G_AXE_2',
2562 INTERSEC = tuple(l_peau+l_intersec),),)
2564 __nomres=DEFI_GROUP(reuse =__nomres,
2571 motscles['TUBE_COUDE']=[]
2572 motscles['TUBE_COUDE'].append(_F(ANGLE=ALPHA,
2575 motscles['PLAQ_TUBE']=[]
2577 D_PLAQ_TUBE['DEXT']=DEXT
2578 D_PLAQ_TUBE['EPAIS']=EP1
2579 D_PLAQ_TUBE['L_TUBE_P1']=LTCHAR
2580 if SYME == 'QUART' : D_PLAQ_TUBE['COUTURE']='NON'
2581 if FISS_COUDE!=None:
2582 D_PLAQ_TUBE['AZIMUT']=AZIM
2583 elif SOUS_EPAIS_COUDE!=None :
2584 D_PLAQ_TUBE['AZIMUT']=MCL_SOUS_EPAIS[0].IPHIC
2586 motscles['PLAQ_TUBE'].append(_F(**D_PLAQ_TUBE),)
2587 __nomres=MODI_MAILLAGE( reuse =__nomres,
2593 motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE'),)
2594 if FISS_COUDE!=None:
2595 if FISS_COUDE['FISSURE'] == 'DEB_INIT':
2596 motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE','FACE1','FACE2'),)
2597 __nomres=MODI_MAILLAGE(reuse =__nomres,
2602 self.DeclareOut('nomre2',self.sd)
2604 motscles['CREA_POI1']=[]
2605 motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P1',
2608 motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P2',
2610 nomre2=CREA_MAILLAGE( MAILLAGE=__nomres,
2615 if IMPRESSION!=None:
2616 if IMPRESSION.__class__.__name__ !='MCList' : IMPRESSION =[IMPRESSION,]
2617 for impr in IMPRESSION :
2620 if impr['FORMAT']=='IDEAS' : motscles['VERSION'] =impr['VERSION']
2621 if impr['FORMAT']=='CASTEM' : motscles['NIVE_GIBI'] =impr['NIVE_GIBI']
2622 if impr['UNITE']!=None : motscles['UNITE'] =impr['UNITE']
2623 impr_resu = _F( MAILLAGE = nomre2,)
2625 IMPR_RESU( RESU = impr_resu,
2626 FORMAT= impr['FORMAT'],**motscles)