1 #@ MODIF macr_ascouf_calc_ops Macro DATE 02/02/2011 AUTEUR PELLET J.PELLET
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2011 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 # ======================================================================
22 def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MATER,CARA_ELEM,
23 FOND_FISS,RESU_THER,AFFE_MATERIAU,
24 PRES_REP,ECHANGE,TORS_P1,COMP_ELAS,
25 SOLVEUR,CONVERGENCE,NEWTON,RECH_LINEAIRE,
26 INCREMENT,THETA_3D,IMPR_TABLE,IMPRESSION,INFO,TITRE ,**args):
28 Ecriture de la macro MACR_ASCOUF_CALC
34 from math import pi,sin,cos,sqrt,atan2
35 from Utilitai.Utmess import UTMESS
37 # On recopie les mots cles affe_materiau et impr_table pour les proteger
38 mc_AFFE_MATERIAU=AFFE_MATERIAU
39 mc_IMPR_TABLE =IMPR_TABLE
40 # On importe les definitions des commandes a utiliser dans la macro
41 AFFE_MODELE =self.get_cmd('AFFE_MODELE' )
42 AFFE_MATERIAU =self.get_cmd('AFFE_MATERIAU' )
43 AFFE_CARA_ELEM =self.get_cmd('AFFE_CARA_ELEM' )
44 AFFE_CHAR_THER_F =self.get_cmd('AFFE_CHAR_THER_F')
45 DEFI_CONTACT =self.get_cmd('DEFI_CONTACT')
46 THER_LINEAIRE =self.get_cmd('THER_LINEAIRE' )
47 AFFE_CHAR_MECA =self.get_cmd('AFFE_CHAR_MECA' )
48 STAT_NON_LINE =self.get_cmd('STAT_NON_LINE' )
49 CALC_ELEM =self.get_cmd('CALC_ELEM' )
50 IMPR_RESU =self.get_cmd('IMPR_RESU' )
51 IMPR_TABLE =self.get_cmd('IMPR_TABLE' )
52 DEFI_FOND_FISS =self.get_cmd('DEFI_FOND_FISS' )
53 CALC_THETA =self.get_cmd('CALC_THETA' )
54 CALC_G =self.get_cmd('CALC_G' )
55 POST_RCCM =self.get_cmd('POST_RCCM' )
56 POST_RELEVE_T =self.get_cmd('POST_RELEVE_T' )
58 # La macro compte pour 1 dans la numerotation des commandes
60 #------------------------------------------------------------------
62 GRMAIL = ('COUDE','PEAUINT','PEAUEXT','EXTUBE','CLGV','FACE1','FACE2')
63 #------------------------------------------------------------------
65 if CL_BOL_P2_GV!=None :
66 if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE' :
67 message= ' la condition aux limites sur bol a section conique \n'
68 message=message+' est ignoree pour un coude avec sous-epaisseurs \n'
69 UTMESS('A','ASCOUF0_1')
70 elif (TYPE_MAILLAGE[:4]!='FISS') and (CL_BOL_P2_GV['AZIMUT']!=None) :
71 UTMESS('E','ASCOUF0_2')
73 if mc_IMPR_TABLE!=None :
75 if (mc_IMPR_TABLE['NOM_PARA']==None) and (mc_IMPR_TABLE['POSI_ANGUL']==None) and (mc_IMPR_TABLE['POSI_CURV_LONGI']==None) :
76 UTMESS('E','ASCOUF0_3')
78 if (mc_IMPR_TABLE['NOM_PARA']!=None) :
79 impr_table_nom_para= mc_IMPR_TABLE['NOM_PARA']
80 for impt in impr_table_nom_para :
81 if impt in ('SI_LONG','SI_CIRC','SI_RADI') :
83 if (((impt['ANGLE']==None) and (impt['POSI_ANGUL']==None) and (impt['R_CINTR' ]==None)) or
84 ((impt['ANGLE']==None) and (impt['R_CINTR' ]==None) and (impt['POSI_CURV_LONGI']==None)) ) :
85 UTMESS('E','ASCOUF0_4')
86 if (mc_IMPR_TABLE['NOM_PARA']==None) : FLAG = 1
87 if not FLAG : UTMESS('A','ASCOUF0_5')
89 #------------------------------------------------------------------
91 # --- commande AFFE_MODELE ---
93 self.DeclareOut('modele',MODELE)
95 if (TYPE_MAILLAGE[:4]=='FISS') :
96 mcfact.append(_F(GROUP_MA=GRMAIL ,PHENOMENE='MECANIQUE',MODELISATION='3D' ))
98 mcfact.append(_F(GROUP_MA=GRMAIL[:5] ,PHENOMENE='MECANIQUE',MODELISATION='3D' ))
100 mcfact.append(_F(GROUP_MA='P1' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
101 if CL_BOL_P2_GV==None :
102 mcfact.append(_F(GROUP_MA='P2' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
103 modele = AFFE_MODELE( MAILLAGE = MAILLAGE ,
105 if ECHANGE!=None : # modele thermique
106 __modthe = AFFE_MODELE( MAILLAGE = MAILLAGE ,
107 AFFE = _F(TOUT ='OUI',
108 PHENOMENE ='THERMIQUE',
109 MODELISATION='3D' ) )
111 #------------------------------------------------------------------
113 # --- commande AFFE_MATERIAU (thermique)---
116 for mater in mc_AFFE_MATERIAU :
117 if mater['TOUT']!=None :
118 mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER']))
119 rccmat = mater['MATER']
121 mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER']))
122 if mater['GROUP_MA'][:5]=='COUDE' :
124 mcfact.append(_F(GROUP_MA='P1',MATER=mater['MATER']))
125 mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER']))
126 elif (len(mc_AFFE_MATERIAU)==1) and (CL_BOL_P2_GV==None) :
127 mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER']))
128 elif (mater['BOL' ][:3]=='BOL' ) and (CL_BOL_P2_GV==None) :
129 mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER']))
131 __affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
135 #------------------------------------------------------------------
137 # --- commande AFFE_CARA_ELEM ---
139 if (TORS_P1!=None) or (CL_BOL_P2_GV==None) :
140 if CARA_ELEM!=None : self.DeclareOut('carael',CARA_ELEM)
142 motscles['DISCRET']=[]
143 if (TORS_P1!=None) : motscles['DISCRET'].append(_F( GROUP_MA='P1' ,
145 VALE = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),)
146 if (CL_BOL_P2_GV==None) : motscles['DISCRET'].append(_F( GROUP_MA='P2' ,
148 VALE = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),)
150 carael = AFFE_CARA_ELEM( MODELE = modele ,**motscles)
153 #------------------------------------------------------------------
155 # --- commande AFFE_CHAR_THER_F ---
156 # condition aux limites
158 __chther = AFFE_CHAR_THER_F( MODELE = __modthe ,
159 ECHANGE= _F(GROUP_MA='PEAUINT',
160 COEF_H =ECHANGE['COEF_H'],
161 TEMP_EXT=ECHANGE['TEMP_EXT'],), )
162 #------------------------------------------------------------------
164 # --- calcul thermique ---
166 if RESU_THER!=None : self.DeclareOut('resuth',RESU_THER)
168 if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INST_INIT']=INCREMENT['NUME_INST_INIT']
169 if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_INST_FIN' ]=INCREMENT['NUME_INST_FIN' ]
170 mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp)
171 resuth = THER_LINEAIRE( MODELE = __modthe ,
172 CHAM_MATER = __affmat ,
173 ETAT_INIT = _F(STATIONNAIRE='OUI',),
174 EXCIT = _F(CHARGE=__chther,),
175 INCREMENT = mcfact, )
177 #------------------------------------------------------------------
179 # --- commande AFFE_MATERIAU (mécanique)---
181 if CHAM_MATER!=None : self.DeclareOut('affmth',CHAM_MATER)
185 for mater in mc_AFFE_MATERIAU :
186 if mater['TOUT']!=None :
187 mcfact.append(_F(TOUT =mater['TOUT' ],MATER=mater['MATER'],))
189 mcfac2.append(_F(NOM_VARC='TEMP',TOUT='OUI',
190 EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
191 rccmat = mater['MATER']
193 mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],))
195 mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA=mater['GROUP_MA'],
196 EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
197 if mater['GROUP_MA'][:5]=='COUDE' :
199 mcfact.append(_F(GROUP_MA='P1',MATER=mater['MATER'],))
200 mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],))
202 mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P1',
203 EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
204 mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P2',
205 EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
206 elif (len(mc_AFFE_MATERIAU)==1) and (CL_BOL_P2_GV==None) :
207 mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],))
209 mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P2',
210 EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
211 elif (mater['BOL' ][:3]=='BOL' ) and (CL_BOL_P2_GV==None) :
212 mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],))
214 mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P2',
215 EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
218 affmth = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
226 #------------------------------------------------------------------
228 # --- commande AFFE_CHAR_MECA ---
229 # condition aux limites de type raccord 3d-poutre
230 # ou bien blocage de mouvements rigides en cas d embout
231 # a section conique, bol de type gv
234 motscles['LIAISON_ELEM']=[]
236 motscles['LIAISON_ELEM'].append(_F( OPTION ='3D_POU' ,
239 if CL_BOL_P2_GV==None :
240 motscles['LIAISON_ELEM'].append(_F( OPTION ='3D_POU' ,
243 motscles['DDL_IMPO' ]=_F( GROUP_NO ='P2' ,
251 motscles['FACE_IMPO' ]=_F( GROUP_MA ='CLGV' ,
253 ALPHA = CL_BOL_P2_GV['ANGLE' ]
254 AZIM = CL_BOL_P2_GV['AZIMUT']
255 ALPHAR = ALPHA*pi/180.0
256 AZIMR = AZIM *pi/180.0
259 if (AZIM!=0.0) and (AZIM!=180.0) and (ALPHA!=90.0) :
261 COEFB1.append(SIN(AZIMR)*COS(ALPHAR))
264 COEFB1.append(COS(AZIMR))
265 if (AZIM!=0.) and (AZIM!=180.) and (ALPHA!=0.):
267 COEFB1.append(-SIN(AZIMR)*SIN(ALPHAR))
268 POINT=['BOUT1',]*len(DDLB1)
269 motscles['LIAISON_DDL']=_F( GROUP_NO = POINT ,
274 _conlim = AFFE_CHAR_MECA( MODELE = modele ,**motscles)
276 # --- commande AFFE_CHAR_MECA ---
277 # chargement mecanique : pres_rep, effet de fond
281 if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[:4]=='FISS') :
282 motscles['PRES_REP']=_F( GROUP_MA = ('PEAUINT','FACE1','FACE2') ,
283 PRES = PRES_REP['PRES'] ,)
285 motscles['PRES_REP']=_F( GROUP_MA = 'PEAUINT',
286 PRES = PRES_REP['PRES'] ,)
287 if PRES_REP['EFFE_FOND_P1']!='NON' :
288 motscles['EFFE_FOND']=_F( GROUP_MA_INT = 'BORDTU' ,
289 GROUP_MA = 'EXTUBE' ,
290 PRES = PRES_REP['PRES'] ,)
292 _chpres = AFFE_CHAR_MECA( MODELE = modele ,**motscles)
294 # --- commande AFFE_CHAR_MECA ---
295 # chargement mecanique : torseur d efforts
302 if tors['FX']!=None : mcsimp['FX']=tors['FX']
303 if tors['FY']!=None : mcsimp['FY']=tors['FY']
304 if tors['FZ']!=None : mcsimp['FZ']=tors['FZ']
305 if tors['MX']!=None : mcsimp['MX']=tors['MX']
306 if tors['MY']!=None : mcsimp['MY']=tors['MY']
307 if tors['MZ']!=None : mcsimp['MZ']=tors['MZ']
308 mcfact=_F(GROUP_NO='P1',**mcsimp)
309 _chtor[i] = AFFE_CHAR_MECA( MODELE = modele ,
310 FORCE_NODALE = mcfact , )
313 # --- commande AFFE_CHAR_MECA ---
314 # chargement mecanique : verif contact levres
316 if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
317 _chcont = DEFI_CONTACT( MODELE = modele ,
318 FORMULATION = 'DISCRETE',
319 ZONE =_F(GROUP_MA_MAIT = 'FACE1',
320 GROUP_MA_ESCL = 'FACE2',
322 TOLE_INTERP = -1.E-6,
323 SANS_GROUP_MA = 'FONDFISS'),)
325 # --- commande STAT_NON_LINE ---
329 mcfex=[] # mot clé facteur EXCIT
330 mcfex.append(_F(CHARGE=_conlim,))
332 if PRES_REP['FONC_MULT']!=None :
333 mcfex.append(_F(CHARGE=_chpres,FONC_MULT=PRES_REP['FONC_MULT']))
335 mcfex.append(_F(CHARGE=_chpres,))
338 for tors in TORS_P1 :
339 if tors['FONC_MULT']!=None :
340 mcfex.append(_F(CHARGE=_chtor[i],FONC_MULT=tors['FONC_MULT']))
342 mcfex.append(_F(CHARGE=_chtor[i],))
346 if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
348 motscles['EXCIT'] =mcfex
350 mcfci=[] # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets dans STAT_NON_LINE
352 motscles['COMP_ELAS'] =_F(GROUP_MA='COUDE',RELATION=COMP_ELAS['RELATION'])
353 if TORS_P1!=None : mcfci.append( _F(GROUP_MA='P1',RELATION='ELAS'))
354 if CL_BOL_P2_GV==None: mcfci.append( _F(GROUP_MA='P2',RELATION='ELAS'))
355 motscles['COMP_INCR'] =mcfci
357 dSolveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
358 for i in dSolveur.keys():
359 if dSolveur[i]==None : del dSolveur[i]
361 dConverg=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
362 for i in dConverg.keys():
363 if dConverg[i]==None : del dConverg[i]
365 dNewton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
366 for i in dNewton.keys():
367 if dNewton[i]==None : del dNewton[i]
370 if RECH_LINEAIRE != None:
371 dRechlin=RECH_LINEAIRE[0].cree_dict_valeurs(RECH_LINEAIRE[0].mc_liste)
372 for i in dRechlin.keys():
373 if dRechlin[i]==None : del dRechlin[i]
375 dIncrem=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
376 for i in dIncrem.keys():
377 if dIncrem[i]==None : del dIncrem[i]
380 motscles['TITRE' ] =TITRE
381 motscles ['SOLVEUR' ] =dSolveur
382 motscles ['CONVERGENCE' ] =dConverg
383 motscles ['NEWTON' ] =dNewton
384 motscles ['RECH_LINEAIRE'] =dRechlin
385 motscles ['INCREMENT' ] =dIncrem
386 self.DeclareOut('nomres',self.sd)
389 nomres = STAT_NON_LINE( MODELE = modele ,
390 CHAM_MATER = affmth ,
392 INFO = INFO , **motscles)
394 nomres = STAT_NON_LINE( MODELE = modele ,
395 CHAM_MATER = affmth ,
398 INFO = INFO , **motscles)
400 # --- commande CALC_ELEM ---
402 nomres = CALC_ELEM( reuse = nomres,
405 OPTION = ('SIEF_ELNO','SIEQ_ELNO') ,
408 # --- post-traitements ---
410 if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE':
412 # --- post traitement sous-epaisseurs: ligaments ---
414 if mc_IMPR_TABLE!=None:
416 SECT=('MI','TU','GV')
417 LIG=('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR')
418 if mc_IMPR_TABLE['POSI_ANGUL']==None:
419 ASEP=(mc_IMPR_TABLE['POSI_CURV_LONGI']/mc_IMPR_TABLE['R_CINTR'])*(180./pi)
421 ASEP=mc_IMPR_TABLE['POSI_ANGUL']
423 # moyenne_rccm, invariant et moyenne sur les ligaments dans
426 l_grno=MAILLAGE.LIST_GROUP_NO()
430 # prelevements des ligaments circonferentiels et longitudinaux
431 # de la sous-epaisseur
434 for tgrno in l_grno :
435 if tgrno[0][:3] in ('CIR','LON') : lgrno.append(tgrno[0])
436 elif tgrno[0][:5]=='PCENT' : lgrno.append(tgrno[0])
437 elif (tgrno[0][:4] in LIG) and (tgrno[0][4:6] not in ('GV','TU','MI')): lgrno.append(tgrno[0])
440 motscles['ACTION']=[]
442 motscles['ACTION'].append(_F(RESULTAT=nomres,
443 NOM_CHAM='SIEF_ELNO',
447 OPERATION='EXTRACTION',))
448 motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
449 tabprl[1]=POST_RELEVE_T(**motscles)
450 tablig[1]=POST_RCCM(MATER = rccmat,
451 TYPE_RESU_MECA = 'EVOLUTION',
453 TRANSITOIRE=_F(TABL_RESU_MECA = tabprl[1],),)
456 motscles['ACTION']=[]
458 motscles['ACTION'].append(_F(RESULTAT=nomres,
459 NOM_CHAM='SIEF_ELNO',
463 OPERATION='EXTRACTION',))
464 motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
466 tablig[2]=POST_RELEVE_T(**motscles)
470 coord =aster.getvectjev(nommail.ljust(8)+'.COORDO .VALE')
471 linomno =aster.getvectjev(nommail.ljust(8)+'.NOMNOE')
472 collgrno=aster.getcolljev(nommail.ljust(8)+'.GROUPENO')
474 motscles['ACTION']=[]
476 if tgrno[:3]!='LON' :
477 if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
478 else : vecty=(sin(ASEP*pi/180.),0.,cos(ASEP*pi/180.))
480 if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
482 grpn=collgrno['FGAUTU ']
483 LT1=coord[3*(grpn[0]-1)+2]
485 X = coord[3*(node-1)]
486 Y = coord[3*(node-1)+1]
487 Z = coord[3*(node-1)+2]
488 RCIN = mc_IMPR_TABLE['R_CINTR']
490 elif X<(-1*RCIN) : ANGSEC=mc_IMPR_TABLE['ANGLE']*pi/180.
492 VCOS = cos((-LT1-Z)/(sqrt((X+RCIN)**2+Y**2 )))
493 VSIN = sin((-LT1-Z)/(sqrt((X+RCIN)**2+Y**2 )))
494 ANGSEC = atan2(VSIN,VCOS)
495 vecty=(sin(ANGSEC),0.,cos(ANGSEC))
496 motscles['ACTION'].append(_F(RESULTAT=nomres,
497 NOM_CHAM='SIEF_ELNO',
500 NOM_CMP=('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ',),
503 OPERATION='MOYENNE',))
504 motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
505 tablig[3]=POST_RELEVE_T(**motscles)
507 # prelevements des ligaments sur les sections MI,TU et GV
508 # les 8 ligaments sont tous les 45 degres
510 ACOUR = mc_IMPR_TABLE['ANGLE']*pi/180.0
516 if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
518 if i==0 : vecty=(sin(ACOUR/2.),0.,cos(ACOUR/2.))
519 if i==1 : vecty=(0.,0.,1.)
520 if i==2 : vecty=(sin(ACOUR),0.,cos(ACOUR))
522 motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE RCCM SECTION '+SECT[i]
524 # moyenne RCCM sur les sections MI,TU et GV
527 motscles['ACTION']=[]
529 motscles['ACTION'].append(_F(RESULTAT=nomres,
530 NOM_CHAM='SIEF_ELNO',
532 INTITULE=LIG[j]+SECT[i],
533 GROUP_NO=LIG[j]+SECT[i],
534 OPERATION='EXTRACTION',))
535 motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE RCCM SECTION '+SECT[i]
536 secprl[i]=POST_RELEVE_T(**motscles)
537 secrcm[i]=POST_RCCM(MATER = rccmat,
538 TYPE_RESU_MECA = 'EVOLUTION',
540 TRANSITOIRE=_F(TABL_RESU_MECA = secprl[i],),)
542 # invariants sur les sections MI,TU et GV
545 motscles['TITRE']='TABLE DE POST-TRAITEMENT INVARIANTS SECTION '+SECT[i]
546 motscles['ACTION']=[]
547 for j in range(8) : motscles['ACTION'].append(_F(INTITULE =LIG[j]+SECT[i],
548 GROUP_NO =LIG[j]+SECT[i],
550 NOM_CHAM ='SIEF_ELNO',
552 OPERATION='EXTRACTION'))
553 secinv[i] = POST_RELEVE_T(**motscles)
555 # moyennes contraintes sur les sections MI,TU et GV
558 motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE SECTION '+SECT[i]
559 motscles['ACTION']=[]
560 for j in range(8) : motscles['ACTION'].append(_F(INTITULE =LIG[j]+SECT[i],
563 GROUP_NO =LIG[j]+SECT[i],
565 NOM_CHAM ='SIEF_ELNO',
566 NOM_CMP =('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),
567 OPERATION='MOYENNE'))
568 secmoy[i] = POST_RELEVE_T(**motscles)
571 # impression des valeurs maximales pour chaque sous-epaisseur
573 if mc_IMPR_TABLE['TOUT_PARA']=='OUI' :
574 list_para=['TRESCA_MEMBRANE','TRESCA_MFLE','TRESCA','SI_LONG','SI_RADI','SI_CIRC']
575 else : list_para=mc_IMPR_TABLE['NOM_PARA']
576 if 'TRESCA_MEMBRANE' in list_para:
577 IMPR_TABLE(TABLE = tablig[1],
578 FILTRE = _F( NOM_PARA ='PM', CRIT_COMP ='MAXI'),
579 NOM_PARA = ('INTITULE','PM'));
580 if 'TRESCA_MFLE' in list_para:
581 IMPR_TABLE(TABLE = tablig[1],
582 FILTRE =(_F( NOM_PARA ='LIEU',VALE_K ='ORIG'),
583 _F( NOM_PARA ='PMB', CRIT_COMP='MAXI'),),
584 NOM_PARA = ('INTITULE','PMB'));
585 IMPR_TABLE(TABLE = tablig[1],
586 FILTRE =(_F( NOM_PARA='LIEU', VALE_K ='EXTR'),
587 _F( NOM_PARA ='PMB', CRIT_COMP='MAXI'),),
588 NOM_PARA = ('INTITULE','PMB'));
589 if 'SI_RADI' in list_para:
590 IMPR_TABLE(TABLE = tablig[3],
591 FILTRE =(_F( NOM_PARA='QUANTITE',VALE_K ='MOMENT_0'),
592 _F( NOM_PARA ='SIXX', CRIT_COMP='MAXI'),),
593 NOM_PARA = ('INTITULE','SIXX'));
594 if 'SI_LONG' in list_para:
595 IMPR_TABLE(TABLE = tablig[3],
596 FILTRE =(_F( NOM_PARA='QUANTITE',VALE_K ='MOMENT_0'),
597 _F( NOM_PARA ='SIYY', CRIT_COMP='MAXI'),),
598 NOM_PARA = ('INTITULE','SIYY'));
599 if 'SI_CIRC' in list_para:
600 IMPR_TABLE(TABLE = tablig[3],
601 FILTRE =(_F( NOM_PARA='QUANTITE',VALE_K ='MOMENT_0'),
602 _F( NOM_PARA ='SIZZ', CRIT_COMP='MAXI'),),
603 NOM_PARA = ('INTITULE','SIZZ'));
604 if 'TRESCA' in list_para:
605 IMPR_TABLE(TABLE = tablig[2],
606 NOM_PARA = ('INTITULE','NOEUD','TRESCA',),
607 PAGINATION = 'INTITULE',
608 FILTRE = _F( NOM_PARA = 'TRESCA',
609 CRIT_COMP = 'MAXI' ) ) ;
611 # impression des resultats pour chaque sous-epaisseur
613 if 'TRESCA_MEMBRANE' in list_para:
614 IMPR_TABLE(TABLE = tablig[1],
615 FILTRE = _F( NOM_PARA='LIEU', VALE_K ='ORIG'),
616 NOM_PARA = ('INTITULE','PM'));
617 if 'TRESCA_MFLE' in list_para:
618 IMPR_TABLE(TABLE = tablig[1],
619 FILTRE = _F( NOM_PARA='LIEU', VALE_K ='ORIG'),
620 NOM_PARA = ('INTITULE','PMB'));
621 IMPR_TABLE(TABLE = tablig[1],
622 FILTRE = _F( NOM_PARA='LIEU', VALE_K ='EXTR'),
623 NOM_PARA = ('INTITULE','PMB'));
624 if 'SI_RADI' in list_para:
625 IMPR_TABLE(TABLE = tablig[3],
626 FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
627 NOM_PARA = ('INTITULE','SIXX'));
628 if 'SI_LONG' in list_para:
629 IMPR_TABLE(TABLE = tablig[3],
630 FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
631 NOM_PARA = ('INTITULE','SIYY'));
632 if 'SI_CIRC' in list_para:
633 IMPR_TABLE(TABLE = tablig[3],
634 FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
635 NOM_PARA = ('INTITULE','SIZZ'));
636 if 'TRESCA' in list_para:
637 IMPR_TABLE(TABLE = tablig[2],
638 NOM_PARA = ('INTITULE','NOEUD','TRESCA',),
639 PAGINATION = 'INTITULE');
641 # impression des resultats pour les sections MI, TU et GV
644 if 'TRESCA_MEMBRANE' in list_para:
645 IMPR_TABLE(TABLE = secrcm[k],
646 FILTRE = _F( NOM_PARA='LIEU', VALE_K ='ORIG'),
647 NOM_PARA = ('INTITULE','PM'));
648 if 'TRESCA_MFLE' in list_para:
649 IMPR_TABLE(TABLE = secrcm[k],
650 FILTRE = _F( NOM_PARA='LIEU', VALE_K ='ORIG'),
651 NOM_PARA = ('INTITULE','PMB'));
652 IMPR_TABLE(TABLE = secrcm[k],
653 FILTRE = _F( NOM_PARA='LIEU', VALE_K ='EXTR'),
654 NOM_PARA = ('INTITULE','PMB'));
655 if 'SI_RADI' in list_para:
656 IMPR_TABLE(TABLE = secmoy[k],
657 FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
658 NOM_PARA = ('INTITULE','SIXX'));
659 if 'SI_LONG' in list_para:
660 IMPR_TABLE(TABLE = secmoy[k],
661 FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
662 NOM_PARA = ('INTITULE','SIYY'));
663 if 'SI_CIRC' in list_para:
664 IMPR_TABLE(TABLE = secmoy[k],
665 FILTRE = _F( NOM_PARA='QUANTITE', VALE_K ='MOMENT_0'),
666 NOM_PARA = ('INTITULE','SIZZ'));
667 if 'TRESCA' in list_para:
668 IMPR_TABLE(TABLE = secinv[k],
669 NOM_PARA = ('INTITULE','NOEUD','TRESCA',),
670 PAGINATION = 'INTITULE');
672 if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
674 # --- post traitement fissure : interpénétration des lèvres ----
676 __tcont=POST_RELEVE_T( ACTION=_F( INTITULE = 'Contact levres',
680 NOM_CHAM = 'VALE_CONT',
682 OPERATION = 'EXTRACTION'))
683 tcont=__tcont.EXTR_TABLE()
684 numo = tcont['NUME_ORDRE'].values()['NUME_ORDRE']
685 numo=dict([(i,0) for i in numo]).keys()
687 for i in range(1,nbinst+1) :
688 tabi = tcont.NUME_ORDRE==i
690 cont_actif=tabi.CONT>0.
691 nb_no_cont = len(cont_actif)
693 UTMESS('A','ASCOUF0_58',vali=[i,nbtot,nb_no_cont])
695 # --- post traitement fissure : calcul de g ----
698 if FOND_FISS != None : self.DeclareOut('fonfis',FOND_FISS)
699 if TYPE_MAILLAGE =='FISS_COUDE' :
700 motscles['FOND_FISS']=_F(GROUP_NO='FONDFISS')
701 motscles['VECT_GRNO_ORIG']= ('PFOR','THOR')
702 motscles['VECT_GRNO_EXTR']= ('PFEX','THEX')
704 motscles['FOND_FERME']=_F(GROUP_MA='FONDFISS',
705 GROUP_NO_ORIG='PFOR',
706 GROUP_MA_ORIG='MAIL_ORI')
707 fonfis=DEFI_FOND_FISS(MAILLAGE=MAILLAGE,
708 LEVRE_SUP=_F(GROUP_MA='FACE1'),
709 LEVRE_INF=_F(GROUP_MA='FACE2'),
713 for thet in THETA_3D:
714 _nothet=CALC_THETA(MODELE=modele,
716 THETA_3D=_F(TOUT = 'OUI',
718 R_INF = thet['R_INF'],
719 R_SUP = thet['R_SUP'],),
722 if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
723 _nogthe=CALC_G( RESULTAT =nomres,
724 OPTION='CALC_G_GLOB',
726 THETA =_F(THETA=_nothet),**motscles);
728 IMPR_TABLE(TABLE=_nogthe,);
730 for thet in THETA_3D:
732 if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
733 if TYPE_MAILLAGE =='FISS_COUDE' :
734 motscles['LISSAGE']=_F(LISSAGE_THETA='LEGENDRE',
735 LISSAGE_G='LEGENDRE',
737 elif TYPE_MAILLAGE =='FISS_AXIS_DEB' :
738 motscles['LISSAGE']=_F(LISSAGE_THETA='LAGRANGE',
739 LISSAGE_G='LAGRANGE',
741 _nogloc=CALC_G (RESULTAT =nomres,
743 THETA=_F( FOND_FISS =fonfis,
744 R_INF = thet['R_INF'],
745 R_SUP = thet['R_SUP'],),**motscles);
747 IMPR_TABLE(TABLE=_nogloc,);
749 # --- commande IMPR_RESU ---
754 if IMPRESSION['FORMAT']=='IDEAS' :
755 motscles['VERSION' ]= IMPRESSION['VERSION']
756 if IMPRESSION['FORMAT']=='CASTEM' :
757 motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
758 mcfresu.append(_F(MAILLAGE=MAILLAGE,RESULTAT=nomres,))
761 if IMPRESSION['FORMAT']=='IDEAS' :
762 motscles['VERSION' ]= IMPRESSION['VERSION']
763 if IMPRESSION['FORMAT']=='CASTEM' :
764 motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
765 mcfresu.append(_F(RESULTAT=resuth,))
766 IMPR_RESU( MODELE = modele,
768 FORMAT=IMPRESSION['FORMAT'],**motscles)