1 #@ MODIF macr_aspic_mail_ops Macro DATE 04/10/2006 AUTEUR CIBHHPD L.SALMONA
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, pow, tan
25 # Ecriture du fichier GIBI principal (dgib) - ASPID0
26 def write_file_dgib_ASPID0(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
27 ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE,
28 ITYPSO, DPENE, NIVMAG, loc_datg) :
31 # Ouverture du fichier d'entrée de commandes
32 fdgib=open(nomFichierDATG,'w')
34 texte='****************************************************************\n'
35 texte=texte+'opti echo 0 ; \n'
36 texte=texte+'epT1 = '+str(EPT1) +POIVIR
37 texte=texte+'DeT1 = '+str(DET1) +POIVIR
38 texte=texte+'d1 = '+str(D1) +POIVIR
39 texte=texte+'d2 = '+str(D2) +POIVIR
40 texte=texte+'epT2 = '+str(EPT2) +POIVIR
41 texte=texte+'DeT2 = '+str(DET2) +POIVIR
42 texte=texte+'Zmax = '+str(ZMAX) +POIVIR
43 texte=texte+'type_s = '+str(ITYPSO) +POIVIR
44 texte=texte+'d_pene = '+str(DPENE) +POIVIR
45 texte=texte+'h = '+str(H) +POIVIR
46 texte=texte+'angl_s = '+str(ALPHA) +POIVIR
47 texte=texte+'jeu = '+str(JEU) +POIVIR
48 texte=texte+'epC = '+str(EPC) +POIVIR
49 texte=texte+'DeC = '+str(DEC) +POIVIR
50 texte=texte+'Xmax = '+str(XMAX) +POIVIR
51 texte=texte+'typmai = MOT '+TYPMAI +POIVIR
52 texte=texte+'theta = '+str(THETA) +POIVIR
53 texte=texte+'typele = MOT '+TYPELE +POIVIR
54 texte=texte+'typ_eque = MOT '+'SAINE' +POIVIR
55 texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
57 texte = texte + open(os.path.join(loc_datg, 'aspic.datg'), 'r').read()
62 # Ecriture du fichier GIBI principal (dgib) - ASPID1
63 def write_file_dgib_ASPID1(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
64 ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,THETA,
65 A,C,EPS, RC0, NS,NC,NT,POSI, NDT,FETIRF,FETIRP,
66 TFISS,ZETA,ITYPSO,DPENE, NIVMAG, loc_datg) :
69 # Ouverture du fichier d'entrée de commandes
70 fdgib=open(nomFichierDATG,'w')
72 texte='****************************************************************\n'
73 texte=texte+'opti echo 0 ; \n'
74 texte=texte+'epT1 = '+str(EPT1) +POIVIR
75 texte=texte+'DeT1 = '+str(DET1) +POIVIR
76 texte=texte+'d1 = '+str(D1) +POIVIR
77 texte=texte+'d2 = '+str(D2) +POIVIR
78 texte=texte+'epT2 = '+str(EPT2) +POIVIR
79 texte=texte+'DeT2 = '+str(DET2) +POIVIR
80 texte=texte+'Zmax = '+str(ZMAX) +POIVIR
81 texte=texte+'type_s = '+str(ITYPSO) +POIVIR
82 texte=texte+'d_pene = '+str(DPENE) +POIVIR
83 texte=texte+'h = '+str(H) +POIVIR
84 texte=texte+'angl_s = '+str(ALPHA) +POIVIR
85 texte=texte+'jeu = '+str(JEU) +POIVIR
86 texte=texte+'epC = '+str(EPC) +POIVIR
87 texte=texte+'DeC = '+str(DEC) +POIVIR
88 texte=texte+'Xmax = '+str(XMAX) +POIVIR
89 texte=texte+'typmai = MOT '+TYPMAI +POIVIR
90 texte=texte+'theta = '+str(THETA) +POIVIR
91 texte=texte+'a = '+str(A) +POIVIR
92 texte=texte+'c = '+str(C) +POIVIR
93 texte=texte+'zeta = '+str(ZETA) +POIVIR
94 texte=texte+'eps = '+str(EPS) +POIVIR
95 texte=texte+'rc0 = '+str(RC0) +POIVIR
96 texte=texte+'ns = '+str(NS) +POIVIR
97 texte=texte+'nc = '+str(NC) +POIVIR
98 texte=texte+'nt = '+str(NT) +POIVIR
99 texte=texte+'dir_fiss = MOT '+POSI +POIVIR
100 texte=texte+'pos_fiss = MOT '+TFISS +POIVIR
101 texte=texte+'ndt = '+str(NDT) +POIVIR
102 texte=texte+'f_etir_f = '+str(FETIRF) +POIVIR
103 texte=texte+'f_etir_p = '+str(FETIRP) +POIVIR
104 texte=texte+'typ_eque = MOT '+'FISS_LON' +POIVIR
105 texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
107 texte = texte + open(os.path.join(loc_datg, 'aspic_v2.datg'), 'r').read()
112 # Ecriture du fichier GIBI principal (dgib) - ASPID2
113 def write_file_dgib_ASPID2(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX,
114 H, ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,
115 THETA, A, C, EPS, RC0, RC1, RC2, RC3,
116 ALP,BETA, NS, NC, NT, POSI ,NDT,NSDT,TFISS,
117 ZETA,ITYPSO,DPENE, NIVMAG, loc_datg) :
120 CALPHA = cos(ALPHA*pi/180.)
121 SALPHA = sin(ALPHA*pi/180.)
122 CTHETA = cos(THETA*pi/180.)
123 STHETA = sin(THETA*pi/180.)
129 if (POSI == 'DROIT') :
131 if (TFISS == 'DEB_INT') :
133 SGAMMA = STHETA * (DET1/2.0)/( (DEC/2.0) -EPC)
134 SGAMME = STHETA * (DET1/2.0)/( (DEC/2.0) )
135 RAPPA = sqrt(1.0 - pow(SGAMMA,2))
136 RAPPE = sqrt(1.0 - pow(SGAMME,2))
137 AP = A - (1.0 - RAPPA)*A
138 RAPP = (AP/EPC*RAPPE) + (1.0-(AP/EPC))*RAPPA
139 XA = (DET1/2.0) * CTHETA
140 YA = (DET1/2.0) * STHETA
141 ZA = ((DEC/2.0) -EPC) * sqrt(1.0 - pow(SGAMMA,2))
142 ZA0 = (DEC/2.0) - EPC
150 ZN = ZN0 * sqrt(1.0 - (SGAMN*SGAMN))
151 D0N0 = sqrt( pow((XA0 - XN0),2) + pow((ZA0 - ZN0),2) )
152 DN = sqrt( pow((XA - XN),2) + pow((YA - YN),2) + pow((ZA - ZN),2) )
154 ECART = (1.0 - RAPP) * D0N0
156 elif (TFISS == 'DEB_EXT') :
158 SGAMME = STHETA * (DET1/2.0)/ (DEC/2.0)
159 RAPPE = sqrt(1.0 - pow(SGAMME,2))
160 A = A -(1.0 - RAPPE)*A
162 elif (POSI == 'INCLINE') :
164 SGAMMA = STHETA * (DET1/2.0)/ ( (DEC/2.0) -EPC)
165 XA = (DET1/2.0) * CTHETA
166 YA = (DET1/2.0) * STHETA
167 ZA = ((DEC/2.0) - EPC) * sqrt(1.0 - pow(SGAMMA,2))
168 ZA0 = (DEC/2.0) - EPC
171 XD0 = XA0 + (tan(ALPHA*pi/180.0) * EPC)
172 A0D0 = sqrt( pow((ZD0 - ZA0),2) + pow((XD0 - XA0),2) )
173 EPSIL = STHETA * tan(ALPHA*pi/180.0)
174 PHI = (EPSIL * ZA) - YA
175 DELTA = pow(PHI,2) - ((1 + pow(EPSIL,2))*(pow(PHI,2) - (pow((DEC/2.0),2)*pow(EPSIL,2))))
177 YD = ( sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
179 YD = ( -1.0*sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
181 ZD = sqrt(pow((DEC/2.0),2) - pow(YD,2))
183 if ( (abs(THETA - 0.0) < 1.e-3) or ((abs(THETA - 180.0)) < 1.e-3) ) :
186 XD = YD / tan(THETA*pi/180.0)
188 AD = sqrt( pow((XA - XD),2) + pow((YA - YD),2) + pow((ZA - ZD),2) )
191 if (TFISS == 'DEB_EXT') :
197 DNXY = sqrt(pow(XD,2) + pow(YD,2)) - sqrt(pow(XN,2) + pow(YN,2))
200 # Correction necessaire dans le cas theta et/ou alpha grand
202 DXY = sqrt(pow(XD,2) + pow(YD,2) )
206 ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
207 D0N0 = sqrt( pow((XD0 - XN0),2) + pow((ZD0 - ZN0),2) )
208 DN = sqrt( pow((XD - XN),2) + pow((YD - YN),2) + pow((ZD - ZN),2) )
210 ECART = (RAPP - 1.0) * D0N0
213 if (TFISS == 'DEB_INT') :
220 ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
221 D0N0 = sqrt( pow((XA0 - XN0),2) + pow((ZA0 - ZN0),2) )
222 DN = sqrt( pow((XA - XN),2) + pow((YA - YN),2) + pow((ZA - ZN),2) )
224 ECART = (RAPP - 1.0) * D0N0
225 # Correction necessaire dans le cas theta grand (cf. AL9679)
226 if ( abs(STHETA) > 0.8) :
227 DXY = sqrt(pow(XD,2) + pow(YD,2) )
231 ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
232 D0N0 = sqrt( pow((XA0 - XN0),2) + pow((ZA0 - ZN0),2) )
233 DN = sqrt( pow((XA - XN),2) + pow((YA - YN),2) + pow((ZA - ZN),2) )
235 ECART = (ECART + (RAPP - 1.0) * D0N0)/2
240 if (POSI == 'DROIT') :
242 SGAMMI = STHETA * ((DET1/2.0) - EPT1)/(DEC/2.0)
243 XI = ((DET1/2.0) - EPT1) * CTHETA
244 YI = ((DET1/2.0) - EPT1) * STHETA
245 ZI = (DEC/2.0) * sqrt(1.0 - pow(SGAMMI,2))
246 XI0 = (DET1/2.0) -EPT1
250 SGAMMA = STHETA * (DET1/2.0)/((DEC/2.0) -EPC)
251 YA = (DET1/2.0) * STHETA
252 ZA = ((DEC/2.0) - EPC) * sqrt(1.0 - pow(SGAMMA,2))
254 EPSIL = STHETA * TGALP
255 PHI = (EPSIL * ZA) - YA
256 DELTA = pow(PHI,2) - (1.0 + pow(EPSIL,2))*(pow(PHI,2) - pow((DEC/2.0),2)*pow(EPSIL,2))
258 YD = (sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
260 YD = (-1.0*sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
262 ZD = sqrt( pow((DEC/2.0),2) - pow(YD,2) )
263 if ( (abs(THETA - 0.0) < 1.0e-3) or
264 (abs(THETA - 180.0) < 1.0e-3) or
265 (abs(THETA + 180.0) < 1.0e-3) or
266 (abs(THETA + 90.0) < 1.0e-3) or
267 (abs(THETA - 90.0) < 1.0e-3) ) :
268 XD = CTHETA * ((DET1/2.0) + H)
270 XD = YD / (tan(THETA*pi/180.0))
276 if (TFISS == 'DEB_EXT') :
283 DXYID = sqrt( pow((XD - XI),2) + pow((YD - YI),2) )
284 DXYIN = sqrt( pow((XN - XI),2) + pow((YN - YI),2) )
285 DZIN = (DXYIN * DZID) / DXYID
287 D0N0 = sqrt( pow((XD0 - XN0),2) + pow((ZD0 - ZN0),2) )
288 DN = sqrt( pow((XD - XN),2) + pow((YD - YN),2) + pow((ZD - ZN),2) )
293 if (TFISS == 'DEB_INT') :
300 ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
301 I0N0 = sqrt( pow((XI0 - XN0),2) + pow((ZI0 - ZN0),2) )
302 IN = sqrt( pow((XI - XN),2) + pow((YI - YN),2) + pow((ZI - ZN),2) )
304 ECART = I0N0 * ( 1.0 - RAPP )
307 elif (POSI == 'INCLINE') :
309 TGALPHA = SALPHA/CALPHA
310 REPB = (DEC/2.0) + JEU + (EPT1*TGALPHA)
311 SGAMB = (STHETA * DET1/2.0 ) / REPB
312 CGAMB = sqrt(1.0 - pow(SGAMB,2))
313 XB = (DET1/2.0) * CTHETA
314 YB = (DET1/2.0) * STHETA
315 ZB = ( (DEC/2.0) + JEU + (EPT1*TGALPHA) ) * CGAMB
318 ZB0 = (DEC/2.0) + JEU + (EPT1*TGALPHA)
320 RIT1 = (DET1/2.0) - EPT1
321 REPG = (DEC/2.0) + JEU
322 SGAMG = ((STHETA ) * RIT1) / REPG
323 CGAMG = sqrt(1.0 - pow(SGAMG,2))
326 ZG = ((DEC/2.0) + JEU) * CGAMG
329 ZG0 = (DEC/2.0) + JEU
331 if (TFISS == 'DEB_INT') :
338 ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
339 G0N0 = sqrt( pow((XG0 - XN0),2) + pow((ZG0 - ZN0),2) )
340 GN = sqrt( pow((XG - XN),2) + pow((YG - YN),2) + pow((ZG - ZN),2) )
342 ECART = (RAPP - 1.0) * G0N0
345 if (TFISS == 'DEB_EXT') :
352 ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
353 B0N0 = sqrt( pow((XB0 - XN0),2) + pow((ZB0 - ZN0),2) )
354 BN = sqrt( pow((XB - XN),2) + pow((YB - YN),2) + pow((ZB - ZN),2) )
356 ECART = (RAPP - 1.0) * B0N0
359 print ' <MACR_ASPIC_MAIL> CORRECTION PROFONDEUR DEFAUT'
360 print ' PROFONDEUR SUR PIQUAGE : ', AOLD
361 print ' PROFONDEUR SUR EQUERRE : ', A
363 # Ouverture du fichier d'entrée de commandes
365 fdgib=open(nomFichierDATG,'w')
367 texte='****************************************************************\n'
368 texte=texte+'opti echo 0 ; \n'
369 texte=texte+'epT1 = '+str(EPT1) +POIVIR
370 texte=texte+'DeT1 = '+str(DET1) +POIVIR
371 texte=texte+'d1 = '+str(D1) +POIVIR
372 texte=texte+'d2 = '+str(D2) +POIVIR
373 texte=texte+'epT2 = '+str(EPT2) +POIVIR
374 texte=texte+'DeT2 = '+str(DET2) +POIVIR
375 texte=texte+'Zmax = '+str(ZMAX) +POIVIR
376 texte=texte+'type_s = '+str(ITYPSO) +POIVIR
377 texte=texte+'d_pene = '+str(DPENE) +POIVIR
378 texte=texte+'h = '+str(H) +POIVIR
379 texte=texte+'angl_s = '+str(ALPHA) +POIVIR
380 texte=texte+'jeu = '+str(JEU) +POIVIR
381 texte=texte+'epC = '+str(EPC) +POIVIR
382 texte=texte+'DeC = '+str(DEC) +POIVIR
383 texte=texte+'Xmax = '+str(XMAX) +POIVIR
384 texte=texte+'typmai = MOT '+TYPMAI +POIVIR
385 texte=texte+'theta = '+str(THETA) +POIVIR
386 texte=texte+'a = '+str(A) +POIVIR
387 texte=texte+'c = '+str(C) +POIVIR
388 texte=texte+'zeta = '+str(ZETA) +POIVIR
389 texte=texte+'eps = '+str(EPS) +POIVIR
390 texte=texte+'rc0 = '+str(RC0) +POIVIR
391 texte=texte+'rc1 = '+str(RC1) +POIVIR
392 texte=texte+'rc2 = '+str(RC2) +POIVIR
393 texte=texte+'rc3 = '+str(RC3) +POIVIR
394 texte=texte+'alpha = '+str(ALP) +POIVIR
395 texte=texte+'beta = '+str(BETA) +POIVIR
396 texte=texte+'ns = '+str(NS) +POIVIR
397 texte=texte+'nc = '+str(NC) +POIVIR
398 texte=texte+'nt = '+str(NT) +POIVIR
399 texte=texte+'dir_fiss = MOT '+POSI +POIVIR
400 texte=texte+'pos_fiss = MOT '+TFISS +POIVIR
401 texte=texte+'ndt = '+str(NDT) +POIVIR
402 texte=texte+'nsdt = '+str(NSDT) +POIVIR
403 texte=texte+'typ_eque = MOT '+'FISS_COU' +POIVIR
404 texte=texte+'nivmag = '+str(NIVMAG) +POIVIR
406 texte=texte+'list epc ;\n'
407 texte = texte + open(os.path.join(loc_datg, 'aspic.datg'), 'r').read()
412 def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
413 SOUDURE,CORPS,FISS_SOUDURE,IMPRESSION,INFO,
416 Ecriture de la macro MACR_ASPIC_MAIL
423 # On importe les definitions des commandes a utiliser dans la macro
424 EXEC_LOGICIEL =self.get_cmd('EXEC_LOGICIEL')
425 PRE_GIBI =self.get_cmd('PRE_GIBI')
426 LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
427 DEFI_GROUP =self.get_cmd('DEFI_GROUP')
428 MODI_MAILLAGE =self.get_cmd('MODI_MAILLAGE')
429 AFFE_MODELE =self.get_cmd('AFFE_MODELE')
430 CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
431 IMPR_RESU =self.get_cmd('IMPR_RESU')
432 DEFI_FICHIER =self.get_cmd('DEFI_FICHIER')
434 # La macro compte pour 1 dans la numerotation des commandes
438 NIVMAG = EXEC_MAILLAGE['NIVE_GIBI']
440 # --- raffinement maillage ---
443 GROS = (TYPMAI=='GROS')
444 if GROS : NBAZIT = 40
447 # --- caracteristiques de la tubulure ---
449 EPT1 = TUBULURE['E_BASE' ]
450 DET1 = TUBULURE['DEXT_BASE']
451 D1 = TUBULURE['L_BASE' ]
452 D2 = TUBULURE['L_CHANF' ]
453 EPT2 = TUBULURE['E_TUBU' ]
454 DET2 = TUBULURE['DEXT_TUBU']
455 ZMAX = TUBULURE['Z_MAX' ]
456 TYPSOU= TUBULURE['TYPE' ]
457 DPENE = TUBULURE['L_PENETR' ]
458 if TYPSOU=='TYPE_2' and DPENE>0.0 :
459 self.cr.fatal("<F> <MACR_ASPIC_MAIL> les piquages penetrants sont autorises uniquement avec les soudures de type 1")
462 if TYPSOU=='TYPE_2' :
467 # --- caracteristiques de la soudure ---
469 H = SOUDURE['H_SOUD' ]
470 ALPHA = SOUDURE['ANGL_SOUD']
471 JEU = SOUDURE['JEU_SOUD' ]
473 # --- caracteristiques du corps ---
475 EPC = CORPS ['E_CORP' ]
476 DEC = CORPS ['DEXT_CORP']
477 XMAX = CORPS ['X_MAX' ]
479 RMB = ( DET1 - EPT1 ) / 2.0
480 VAL1 = 1.5 * sqrt( RMB**3 / EPT1 )
481 VAL3 = 3.0 * sqrt( RMB * EPT1 )
482 RMT = ( DET2 - EPT2 ) / 2.0
483 VAL2 = 1.5 * sqrt( RMT**3 / EPT2 )
484 VAL4 = 3.0 * sqrt( RMT * EPT2 )
485 LZMAX = max ( VAL1 , VAL2, VAL3, VAL4 )
486 ZMAXC = LZMAX + ( DEC/2.0 ) + D1 + D2
487 LOK = ( abs(ZMAX-ZMAXC) <= EPSI * abs(ZMAXC) )
489 print ' <MACR_ASPIC_MAIL> erreur donnees'
490 print ' <MACR_ASPIC_MAIL> Z_MAX FOURNIE : ', ZMAX
491 print ' <MACR_ASPIC_MAIL> Z_MAX CALCULEE : ', ZMAXC
492 self.cr.fatal("<F> <MACR_ASPIC_MAIL> erreur donnees ")
495 RMC = ( DEC - EPC ) / 2.0
496 VAL1 = 1.5 * sqrt( RMC**3 / EPC )
497 VAL2 = 3.0 * sqrt( RMC * EPC )
498 LXMAX = max( VAL1 , VAL2 )
499 XMAXC = LXMAX + ( DET1 / 2.0 )
500 LOK = ( abs(XMAX-XMAXC) <= EPSI * abs(XMAXC) )
502 print ' <MACR_ASPIC_MAIL> erreur donnees'
503 print ' <MACR_ASPIC_MAIL> Z_MAX FOURNIE : ', ZMAX
504 print ' <MACR_ASPIC_MAIL> Z_MAX CALCULEE : ', ZMAXC
505 self.cr.fatal("<F> <MACR_ASPIC_MAIL> erreur donnees ")
508 print ' MACR_ASPIC_MAIL / X_MAX CALCULEE : ',XMAX
509 print ' MACR_ASPIC_MAIL / Z_MAX CALCULEE : ',XMAXC
511 # --- caracteristiques de la fissure ---
518 if FISS_SOUDURE==None :
521 if FISS_SOUDURE['TYPE']=='LONGUE' : FISLON = 1
522 elif FISS_SOUDURE['TYPE']=='COURTE' : FISCOU = 1
523 THETA = FISS_SOUDURE['AZIMUT' ]
524 EPS = FISS_SOUDURE['ANGL_OUVERTURE']
525 AXIS = FISS_SOUDURE['AXIS' ]
526 POSI = FISS_SOUDURE['POSITION' ]
527 TFISS = FISS_SOUDURE['FISSURE' ]
528 A = FISS_SOUDURE['PROFONDEUR' ]
529 if FISS_SOUDURE['LONGUEUR' ]!=None :
530 C = FISS_SOUDURE['LONGUEUR' ]
533 if (TFISS=='DEB_INT') and (POSI=='INCLINE') and (DPENE>0.0) and (JEU>0.0) :
534 print ' <MACR_ASPIC_MAIL> erreur donnees'
535 print ' <MACR_ASPIC_MAIL> dans le cas de fissures'
536 print ' <MACR_ASPIC_MAIL> inclinees debouchant en peau interne avec'
537 print ' <MACR_ASPIC_MAIL> piquage penetrant le jeu doit etre nul'
538 self.cr.fatal("<F> <MACR_ASPIC_MAIL> erreur donnees ")
542 if TFISS not in ('DEB_INT','DEB_EXT') :
543 if FISS_SOUDURE['LIGA_INT']==None :
544 print ' <MACR_ASPIC_MAIL> erreur donnees'
545 print ' <MACR_ASPIC_MAIL> dans le cas de fissures internes'
546 print ' <MACR_ASPIC_MAIL> (NON_DEB) le ligament inferieur est obligatoire'
547 self.cr.fatal("<F> <MACR_ASPIC_MAIL> erreur donnees ")
550 LIGA = FISS_SOUDURE['LIGA_INT']
552 if ITYPSO==1 : ZETA = (A+LIGA)/(EPC+H)
553 else : ZETA = (A+LIGA)/(EPT1+H)
555 if ITYPSO==1 : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPC
556 else : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPT1
558 self.cr.fatal("<F> <MACR_ASPIC_MAIL> dans le cas de fissures internes (NON_DEB) le ligament est trop petit ")
562 self.cr.fatal("<F> <MACR_ASPIC_MAIL> dans le cas de fissures internes (NON_DEB) le ligament est trop grand ")
566 self.cr.fatal("<F> <MACR_ASPIC_MAIL> dans le cas de fissures internes (NON_DEB) le ligament est trop petit ")
569 if (LIGA + 2.0*A) > 0.9*EPC :
570 self.cr.fatal("<F> <MACR_ASPIC_MAIL> dans le cas de fissures internes (NON_DEB) le ligament est trop grand ")
575 self.cr.fatal("<F> <MACR_ASPIC_MAIL> dans le cas de fissures courte il faut preciser la longueur ")
579 self.cr.fatal("<F> <MACR_ASPIC_MAIL> dans le cas de la fissure longue il faut preciser la longueur ou axis=oui ")
584 if AXIS=='OUI' : print '<A> <MACR_ASPIC_MAIL> fissure axisymetrique : le mot clef <LONGUEUR> ne doit pas etre renseigne'
586 LEQU=2.*(pi*(DEC-EPC)-DET1+2.*EPT1)
588 # LPIQ est une valeur qui depend theoriquement de la fissure. la valeur
589 # ci-dessous est approchee car elle ne sert qu'a calculer les facteurs d'etirement
592 if AXIS=='OUI' : C=100.0*LPIQ
598 CAS2= not (CAS1 or CAS3)
603 if GROS and not CAS1 :
620 RC0 = FISS_SOUDURE['RAYON_TORE']
621 if (FISCOU and RC0==None) :
626 if (FISLON and RC0==None) : RC0=A/(NDT+1)
628 RC1 = FISS_SOUDURE['COEF_MULT_RC1']
629 if (FISCOU and RC1==None) :
633 RC2 = FISS_SOUDURE['COEF_MULT_RC2']
634 if (FISCOU and RC2==None) :
638 RC3 = FISS_SOUDURE['COEF_MULT_RC3']
639 if (FISCOU and RC3==None) :
642 else : RC3=1.0 # valeur non utilisee
647 NT = FISS_SOUDURE['NB_TRANCHE']
648 if (FISCOU and NT==None) :
652 if (FISLON and NT==None) : NT=0
654 NS = FISS_SOUDURE['NB_SECTEUR']
655 if (FISCOU and NS==None) :
658 if (FISLON and NS==None) :
662 NC = FISS_SOUDURE['NB_COURONNE']
663 if (FISCOU and NC==None) :
666 if (FISLON and NC==None) :
670 loc_gibi=aster.repout()
671 logiel = EXEC_MAILLAGE['LOGICIEL' ]
672 UNITD = EXEC_MAILLAGE['UNITE_DATG']
673 UNITS = EXEC_MAILLAGE['UNITE_MGIB']
674 if logiel=='GIBI98' : logiel = loc_gibi+'gibi98'
675 elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000'
677 self.cr.fatal("<F> <MACR_ASPIC_MAIL> seuls gibi98 et gibi2000 sont appelableS")
681 # --- ecriture sur le fichier .datg de la procedure ---
683 # Nom du fichier de commandes pour GIBI
684 nomFichierDATG = 'fort.'+str(UNITD)
685 # Nom du fichier de maillage GIBI
686 nomFichierGIBI = 'fort.'+str(UNITS)
687 loc_datg = aster.repdex()
688 if SAIN : write_file_dgib_ASPID0(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
689 ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE,
690 ITYPSO, DPENE, NIVMAG,loc_datg)
691 if FISLON : write_file_dgib_ASPID1(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
692 ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,THETA,
693 A,C,EPS, RC0,NS,NC,NT,POSI, NDT,FETIRF,FETIRP,
694 TFISS,ZETA,ITYPSO,DPENE, NIVMAG,loc_datg)
695 if FISCOU : write_file_dgib_ASPID2(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX,
696 H, ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,
697 THETA, A, C, EPS, RC0, RC1, RC2, RC3,
698 ALP,BETA, NS, NC, NT, POSI ,NDT,NSDT,TFISS,
699 ZETA,ITYPSO,DPENE, NIVMAG,loc_datg)
701 DEFI_FICHIER(ACTION='LIBERER',UNITE=19)
702 DEFI_FICHIER(ACTION='LIBERER',UNITE=20)
703 EXEC_LOGICIEL( LOGICIEL = logiel ,
704 ARGUMENT = ( _F(NOM_PARA=nomFichierDATG),
705 _F(NOM_PARA=nomFichierGIBI), ), )
709 __MAPROV=LIRE_MAILLAGE(INFO=INFO)
712 motscles['CREA_GROUP_MA']=[]
715 l_CREA_GROUP_NO.append('S_LAT1')
716 l_CREA_GROUP_NO.append('S_LAT2')
718 l_CREA_GROUP_NO.append('S_LAT1_C')
719 l_CREA_GROUP_NO.append('S_LAT2_C')
720 l_CREA_GROUP_NO.append('S_LAT1_T')
721 l_CREA_GROUP_NO.append('S_LAT2_T')
722 if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
723 l_CREA_GROUP_NO.append('PFONDINF')
724 l_CREA_GROUP_NO.append('PFONDSUP')
726 l_CREA_GROUP_NO.append('PFONDFIS')
727 if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='COURTE') :
728 motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
731 if (TFISS[:4]=='DEB_') and (AXIS=='OUI') :
732 motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
735 if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
736 motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FOND_SUP',
739 motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FOND_INF',
742 l_CREA_GROUP_NO.append('S_FOND1')
743 l_CREA_GROUP_NO.append('S_FOND2')
744 l_CREA_GROUP_NO.append('EQUERRE')
745 motscles['CREA_GROUP_NO']=_F(GROUP_MA=l_CREA_GROUP_NO)
747 __MAPROV=DEFI_GROUP(reuse =__MAPROV,
753 motscles['CREA_GROUP_NO']=[]
754 if not (TFISS=='NON_DEB') :
755 motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = 'FONDFISS',))
756 if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
757 motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = ('FOND_SUP','FOND_INF',),))
758 __MAPROV=DEFI_GROUP(reuse =__MAPROV,
762 __MAPROV=MODI_MAILLAGE(reuse =__MAPROV,
764 EQUE_PIQUA=_F( GROUP_NO = 'EQUERRE' ,
780 __MODELE=AFFE_MODELE( MAILLAGE=__MAPROV,
781 AFFE=_F( GROUP_MA = ('EQUERRE','PEAUINT','EXCORP1','EXCORP2','EXTUBU'),
782 PHENOMENE = 'MECANIQUE' ,
783 MODELISATION = '3D' , )
787 if TFISS=='DEB_INT' :
788 motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU','LEVRTUBU','LEVRCORP'),)
790 motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU',),)
791 __MAPROV=MODI_MAILLAGE(reuse =__MAPROV,
798 __MAPROV=DEFI_GROUP(reuse = __MAPROV,
800 CREA_GROUP_NO = _F(GROUP_MA=('NIDXT','NEDXT','NIIXT','NEIXT')) )
802 for i in range(1,NBAZIT+1):
804 __MAPROV=DEFI_GROUP(reuse = __MAPROV,
806 CREA_GROUP_NO = ( _F( NOM = 'NID'+str(i) ,
810 _F( NOM = 'NED'+str(i) ,
814 _F( NOM = 'NII'+str(i) ,
818 _F( NOM = 'NEI'+str(i) ,
822 _F( NOM = 'LDN'+str(i) ,
823 GROUP_MA = 'LD' +str(i) ,),
824 _F( NOM = 'LD' +str(i) ,
825 GROUP_NO = 'LDN'+str(i) ,
826 OPTION = 'SEGM_DROI_ORDO',
829 GROUP_NO_ORIG = 'NID'+str(i),
830 GROUP_NO_EXTR = 'NED'+str(i),),
831 _F( NOM = 'LIN'+str(i) ,
832 GROUP_MA = 'LI' +str(i) ,),
833 _F( NOM = 'LI' +str(i) ,
834 GROUP_NO = 'LIN'+str(i) ,
835 OPTION = 'SEGM_DROI_ORDO',
838 GROUP_NO_ORIG = 'NII'+str(i),
839 GROUP_NO_EXTR = 'NEI'+str(i),),))
842 # --- commande CREA_MAILLAGE ---
844 self.DeclareOut('nomres',self.sd)
845 nomres=CREA_MAILLAGE( MAILLAGE=__MAPROV,
846 CREA_POI1 = ( _F( NOM_GROUP_MA = 'P1_CORP ' ,
847 GROUP_NO = 'P1_CORP ' , ),
848 _F( NOM_GROUP_MA = 'P2_CORP ' ,
849 GROUP_NO = 'P2_CORP ' , ),
850 _F( NOM_GROUP_MA = 'P_TUBU ' ,
851 GROUP_NO = 'P_TUBU ' , ),)
855 for impr in IMPRESSION :
858 if impr['FORMAT']=='IDEAS' : motscles['VERSION'] =impr['VERSION']
859 if impr['FORMAT']=='CASTEM' : motscles['NIVE_GIBI']=impr['NIVE_GIBI']
860 if impr['UNITE']!=None : motscles['UNITE'] =impr['UNITE']
861 impr_resu = _F( MAILLAGE = nomres,)
863 IMPR_RESU( RESU = impr_resu,
864 FORMAT = impr['FORMAT'],**motscles )
867 # --- Verification profondeur fissure (courte debouchante) ---
869 if FISCOU and not (TFISS=='NON_DEB') :
870 nomres=DEFI_GROUP( reuse=nomres,
872 CREA_GROUP_NO=(_F( GROUP_MA = 'LEVRTUBU',),
873 _F( NOM = 'FONDORDO',
874 GROUP_MA = 'FONDFISS',
875 OPTION = 'NOEUD_ORDO',),),);
878 coord =aster.getvectjev(nommail.ljust(8)+'.COORDO .VALE')
879 collgrno=aster.getcolljev(nommail.ljust(8)+'.GROUPENO')
881 grfo=collgrno['FONDORDO']
888 listx[k] = coord[3*(node-1)]
889 listy[k] = coord[3*(node-1)+1]
890 listz[k] = coord[3*(node-1)+2]
893 XAB = listx[Nbno-1] - listx[0]
894 YAB = listy[Nbno-1] - listy[0]
895 ZAB = listz[Nbno-1] - listz[0]
896 AB = sqrt(XAB*XAB + YAB*YAB +ZAB*ZAB)
898 for k in range(0,Nbno) :
899 XAM = listx[k] - listx[0]
900 YAM = listy[k] - listy[0]
901 ZAM = listz[k] - listz[0]
902 Xvect = YAB*ZAM-ZAB*YAM
903 Yvect = ZAB*XAM-XAB*ZAM
904 Zvect = XAB*YAM-YAB*XAM
905 AM = sqrt(Xvect*Xvect+ Yvect*Yvect +Zvect*Zvect)
913 grlev=collgrno['LEVRTUBU']
915 listxl = [None]*Nbnol
916 listyl = [None]*Nbnol
917 listzl = [None]*Nbnol
920 listxl[k] = coord[3*(node-1)]
921 listyl[k] = coord[3*(node-1)+1]
922 listzl[k] = coord[3*(node-1)+2]
925 for k in range(0,Nbnol) :
926 XAM = listxl[k] - listx[0]
927 YAM = listyl[k] - listy[0]
928 ZAM = listzl[k] - listz[0]
929 Scal = (XAB*XAM + YAB*YAM + ZAB*ZAM)/(AB*AB)
930 if (abs(Scal) < 0.51) and (abs(Scal) > 0.49) :
934 dk = sqrt(Xk**2+ Yk**2 +Zk**2)
937 print '\n<MACR_ASPIC_MAIL> PROFONDEUR DE LA FISSURE DANS LE MAILLAGE : ', dist