Salome HOME
d9677c140ac2a80baf8bb541c6635f9f3d1ca3ea
[tools/eficas.git] / Aster / Cata / cataSTA10 / Macro / macr_ascouf_calc_ops.py
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.
10 #
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.
15 #
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 # ======================================================================
20
21
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):
27   """
28      Ecriture de la macro MACR_ASCOUF_CALC
29   """
30   from Accas import _F
31   import types
32   import math
33   import aster
34   from math import pi,sin,cos,sqrt,atan2
35   from Utilitai.Utmess     import  UTMESS
36   ier=0
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'   )
57
58   # La macro compte pour 1 dans la numerotation des commandes
59   self.set_icmd(1)
60 #------------------------------------------------------------------
61 # DATA
62   GRMAIL = ('COUDE','PEAUINT','PEAUEXT','EXTUBE','CLGV','FACE1','FACE2')
63 #------------------------------------------------------------------
64 #
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')
72  #
73   if mc_IMPR_TABLE!=None :
74     FLAG = 0
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')
77        return ier
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') :
82            FLAG = 1
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')
88 #
89 #------------------------------------------------------------------
90 #
91 #     --- commande AFFE_MODELE ---
92 #
93   self.DeclareOut('modele',MODELE)
94   mcfact=[]
95   if (TYPE_MAILLAGE[:4]=='FISS') :
96      mcfact.append(_F(GROUP_MA=GRMAIL     ,PHENOMENE='MECANIQUE',MODELISATION='3D'    ))
97   else:
98      mcfact.append(_F(GROUP_MA=GRMAIL[:5] ,PHENOMENE='MECANIQUE',MODELISATION='3D'    ))
99   if TORS_P1!=None :
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 ,
104                         AFFE     = mcfact    )
105   if ECHANGE!=None :                                # modele thermique
106      __modthe = AFFE_MODELE( MAILLAGE = MAILLAGE ,
107                              AFFE     = _F(TOUT        ='OUI',
108                                            PHENOMENE   ='THERMIQUE',
109                                            MODELISATION='3D' )       )
110
111 #------------------------------------------------------------------
112 #
113 #     --- commande AFFE_MATERIAU (thermique)---
114 #
115   mcfact=[]
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']
120      else                   :
121        mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER']))
122        if    mater['GROUP_MA'][:5]=='COUDE' :
123          if TORS_P1!=None :
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']))
130
131   __affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
132                           MODELE   = modele ,
133                           AFFE     = mcfact    )
134
135 #------------------------------------------------------------------
136 #
137 #     --- commande AFFE_CARA_ELEM ---
138 #
139   if (TORS_P1!=None) or (CL_BOL_P2_GV==None) :
140     if CARA_ELEM!=None : self.DeclareOut('carael',CARA_ELEM)
141     motscles={}
142     motscles['DISCRET']=[]
143     if (TORS_P1!=None)      : motscles['DISCRET'].append(_F( GROUP_MA='P1' ,
144                                                              CARA    ='K_TR_D_N',
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' ,
147                                                              CARA    ='K_TR_D_N',
148                                                              VALE    = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),)
149
150     carael = AFFE_CARA_ELEM( MODELE   = modele ,**motscles)
151 #
152   if ECHANGE!=None :
153 #------------------------------------------------------------------
154 #
155 #     --- commande AFFE_CHAR_THER_F ---
156 #         condition aux limites
157 #
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 #------------------------------------------------------------------
163 #
164 #     --- calcul thermique ---
165 #
166      if RESU_THER!=None : self.DeclareOut('resuth',RESU_THER)
167      mcsimp={}
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, )
176 #
177 #------------------------------------------------------------------
178 #
179 #     --- commande AFFE_MATERIAU (mécanique)---
180 #
181   if CHAM_MATER!=None : self.DeclareOut('affmth',CHAM_MATER)
182   indther= ECHANGE
183   mcfact=[]
184   mcfac2=[]
185   for mater in mc_AFFE_MATERIAU :
186      if mater['TOUT']!=None :
187        mcfact.append(_F(TOUT    =mater['TOUT'    ],MATER=mater['MATER'],))
188        if indther:
189          mcfac2.append(_F(NOM_VARC='TEMP',TOUT='OUI',
190                         EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
191        rccmat = mater['MATER']
192      else                   :
193        mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],))
194        if indther:
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' :
198          if TORS_P1!=None :
199            mcfact.append(_F(GROUP_MA='P1',MATER=mater['MATER'],))
200            mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],))
201            if indther:
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'],))
208            if indther:
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'],))
213          if indther:
214            mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P2',
215                           EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
216
217
218   affmth = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
219                           MODELE   = modele ,
220                           AFFE     = mcfact,
221                           AFFE_VARC= mcfac2,)
222
223
224
225
226 #------------------------------------------------------------------
227 #
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
232 #
233   motscles={}
234   motscles['LIAISON_ELEM']=[]
235   if TORS_P1!=None :
236     motscles['LIAISON_ELEM'].append(_F( OPTION    ='3D_POU'  ,
237                                          GROUP_MA_1='EXTUBE',
238                                          GROUP_NO_2='P1') )
239   if CL_BOL_P2_GV==None :
240     motscles['LIAISON_ELEM'].append(_F( OPTION    ='3D_POU'  ,
241                                          GROUP_MA_1='CLGV',
242                                          GROUP_NO_2='P2') )
243     motscles['DDL_IMPO'    ]=_F( GROUP_NO  ='P2' ,
244                                  DX        = 0.0 ,
245                                  DY        = 0.0 ,
246                                  DZ        = 0.0 ,
247                                  DRX       = 0.0 ,
248                                  DRY       = 0.0 ,
249                                  DRZ       = 0.0 , )
250   else :
251     motscles['FACE_IMPO'   ]=_F( GROUP_MA  ='CLGV' ,
252                                  DNOR      = 0.0 , )
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
257     DDLB1  = []
258     COEFB1 = []
259     if (AZIM!=0.0) and (AZIM!=180.0) and (ALPHA!=90.0) :
260       DDLB1.append('DX')
261       COEFB1.append(SIN(AZIMR)*COS(ALPHAR))
262     if (AZIM!=90.0) :
263       DDLB1.append('DY')
264       COEFB1.append(COS(AZIMR))
265     if (AZIM!=0.) and (AZIM!=180.) and (ALPHA!=0.):
266       DDLB1.append('DZ')
267       COEFB1.append(-SIN(AZIMR)*SIN(ALPHAR))
268     POINT=['BOUT1',]*len(DDLB1)
269     motscles['LIAISON_DDL']=_F( GROUP_NO  = POINT  ,
270                                 DDL       = DDLB1  ,
271                                 COEF_MULT = COEFB1 ,
272                                 COEF_IMPO = 0.0    , )
273
274   _conlim = AFFE_CHAR_MECA( MODELE   = modele ,**motscles)
275 #
276 #     --- commande AFFE_CHAR_MECA ---
277 #         chargement mecanique :  pres_rep, effet de fond
278 #
279   if PRES_REP!=None :
280     motscles={}
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'] ,)
284     else :
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'] ,)
291 #
292     _chpres = AFFE_CHAR_MECA( MODELE   = modele ,**motscles)
293 #
294 #     --- commande AFFE_CHAR_MECA ---
295 #         chargement mecanique : torseur d efforts
296 #
297   if TORS_P1!=None :
298     _chtor = [None]*6
299     i=0
300     for tors in TORS_P1:
301       mcsimp={}
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 , )
311       i=i+1
312 #
313 #     --- commande AFFE_CHAR_MECA ---
314 #         chargement mecanique :  verif contact levres
315 #
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',
321                                      RESOLUTION    = 'NON',
322                                      TOLE_INTERP   = -1.E-6,
323                                      SANS_GROUP_MA = 'FONDFISS'),)
324 #
325 #     --- commande STAT_NON_LINE ---
326 #
327   motscles={}
328 #
329   mcfex=[]  # mot clé facteur EXCIT
330   mcfex.append(_F(CHARGE=_conlim,))
331   if PRES_REP!=None:
332     if PRES_REP['FONC_MULT']!=None :
333       mcfex.append(_F(CHARGE=_chpres,FONC_MULT=PRES_REP['FONC_MULT']))
334     else :
335       mcfex.append(_F(CHARGE=_chpres,))
336   if TORS_P1!=None:
337      i=0
338      for tors in TORS_P1 :
339        if tors['FONC_MULT']!=None :
340           mcfex.append(_F(CHARGE=_chtor[i],FONC_MULT=tors['FONC_MULT']))
341        else :
342           mcfex.append(_F(CHARGE=_chtor[i],))
343        i=i+1
344
345   contact = None          
346   if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
347     contact = _chcont  
348   motscles['EXCIT'] =mcfex
349 #
350   mcfci=[]  # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets dans STAT_NON_LINE
351   if COMP_ELAS!=None :
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
356 #
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]
360 #
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]
364 #
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]
368 #
369   dRechlin = {}
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]
374 #
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]
378 #
379   if TITRE!=None :
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)
387   
388   if contact==None:
389     nomres = STAT_NON_LINE( MODELE     = modele ,
390                             CHAM_MATER = affmth ,
391                             CARA_ELEM  = carael ,
392                             INFO       = INFO   , **motscles)
393   else :
394     nomres = STAT_NON_LINE( MODELE     = modele ,
395                             CHAM_MATER = affmth ,
396                             CARA_ELEM  = carael ,
397                             CONTACT    = contact,
398                             INFO       = INFO   , **motscles)   
399 #
400 #     --- commande CALC_ELEM ---
401 #
402   nomres = CALC_ELEM( reuse      = nomres,
403                       RESULTAT   = nomres ,
404                       TOUT_ORDRE = 'OUI'  ,
405                       OPTION     = ('SIEF_ELNO','SIEQ_ELNO') ,
406                       INFO       = INFO   ,)
407 #
408 #     --- post-traitements ---
409 #
410   if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE':
411 #
412 #     --- post traitement sous-epaisseurs:  ligaments  ---
413 #
414      if mc_IMPR_TABLE!=None:
415 #
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)
420       else :
421          ASEP=mc_IMPR_TABLE['POSI_ANGUL']
422 #
423 #     moyenne_rccm, invariant et moyenne sur les ligaments dans
424 #     l epaisseur
425 #
426       l_grno=MAILLAGE.LIST_GROUP_NO()
427       tabprl=[None]*4
428       tablig=[None]*4
429 #
430 #     prelevements des ligaments circonferentiels et longitudinaux
431 #     de la sous-epaisseur
432 #
433       lgrno=[]
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])
438 #
439       motscles={}
440       motscles['ACTION']=[]
441       for grno in lgrno :
442          motscles['ACTION'].append(_F(RESULTAT=nomres,
443                                       NOM_CHAM='SIEF_ELNO',
444                                       TOUT_CMP='OUI',
445                                       INTITULE=grno,
446                                       GROUP_NO=grno,
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',
452                           OPTION         = 'PM_PB',
453                           TRANSITOIRE=_F(TABL_RESU_MECA = tabprl[1],),)
454 #
455       motscles={}
456       motscles['ACTION']=[]
457       for tgrno in lgrno :
458          motscles['ACTION'].append(_F(RESULTAT=nomres,
459                                       NOM_CHAM='SIEF_ELNO',
460                                       INTITULE=tgrno,
461                                       GROUP_NO=tgrno,
462                                       INVARIANT='OUI',
463                                       OPERATION='EXTRACTION',))
464       motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
465
466       tablig[2]=POST_RELEVE_T(**motscles)
467 #
468       motscles={}
469       nommail=MAILLAGE.nom
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')
473
474       motscles['ACTION']=[]
475       for tgrno in lgrno :
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.))
479          else :
480           if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
481           else :
482                  grpn=collgrno['FGAUTU  ']
483                  LT1=coord[3*(grpn[0]-1)+2]
484                  for node in grpn:
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']
489                   if   Z<LT1                           : ANGSEC=0.
490                   elif X<(-1*RCIN) : ANGSEC=mc_IMPR_TABLE['ANGLE']*pi/180.
491                   else :
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',
498                                       INTITULE=tgrno,
499                                       GROUP_NO=tgrno,
500                                       NOM_CMP=('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ',),
501                                       REPERE='LOCAL',
502                                       VECT_Y=vecty,
503                                       OPERATION='MOYENNE',))
504       motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
505       tablig[3]=POST_RELEVE_T(**motscles)
506 #
507 #     prelevements des ligaments sur les sections MI,TU et GV
508 #     les 8 ligaments sont tous les 45 degres
509 #
510       ACOUR = mc_IMPR_TABLE['ANGLE']*pi/180.0
511       secprl=[None]*3
512       secrcm=[None]*3
513       secinv=[None]*3
514       secmoy=[None]*3
515       for i in range(3):
516          if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
517          else :
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))
521          motscles = {}
522          motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE RCCM SECTION '+SECT[i]
523 #
524 #        moyenne RCCM sur les sections MI,TU et GV
525 #
526          motscles={}
527          motscles['ACTION']=[]
528          for j in range(8) :
529             motscles['ACTION'].append(_F(RESULTAT=nomres,
530                                          NOM_CHAM='SIEF_ELNO',
531                                          TOUT_CMP='OUI',
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',
539                              OPTION         = 'PM_PB',
540                              TRANSITOIRE=_F(TABL_RESU_MECA = secprl[i],),)
541 #
542 #        invariants sur les sections MI,TU et GV
543 #
544          motscles = {}
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],
549                                                           RESULTAT =nomres,
550                                                           NOM_CHAM ='SIEF_ELNO',
551                                                           INVARIANT='OUI',
552                                                           OPERATION='EXTRACTION'))
553          secinv[i] = POST_RELEVE_T(**motscles)
554 #
555 #        moyennes contraintes sur les sections MI,TU et GV
556 #
557          motscles = {}
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],
561                                                           REPERE   ='LOCAL',
562                                                           VECT_Y   =vecty,
563                                                           GROUP_NO =LIG[j]+SECT[i],
564                                                           RESULTAT =nomres,
565                                                           NOM_CHAM ='SIEF_ELNO',
566                                                           NOM_CMP  =('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),
567                                                           OPERATION='MOYENNE'))
568          secmoy[i] = POST_RELEVE_T(**motscles)
569
570 #
571 #     impression des valeurs maximales pour chaque sous-epaisseur
572 #
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'     ) )  ;
610 #
611 #     impression des resultats pour chaque sous-epaisseur
612 #
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');
640 #
641 #     impression des resultats pour les sections MI, TU et GV
642 #
643       for k in range(3):
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');
671 #
672   if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
673 #
674 #   --- post traitement fissure :  interpénétration des lèvres ----
675 #
676     __tcont=POST_RELEVE_T( ACTION=_F(  INTITULE = 'Contact levres',
677                                 GROUP_NO = 'FACE2',
678                                 RESULTAT = nomres,
679                                 TOUT_ORDRE = 'OUI',
680                                 NOM_CHAM = 'VALE_CONT',
681                                 NOM_CMP = '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()
686     nbinst = len(numo)
687     for i in range(1,nbinst+1) :
688       tabi = tcont.NUME_ORDRE==i
689       nbtot = len(tabi)
690       cont_actif=tabi.CONT>0.
691       nb_no_cont = len(cont_actif)
692       if nb_no_cont > 0 :
693          UTMESS('A','ASCOUF0_58',vali=[i,nbtot,nb_no_cont])
694 #
695 #   --- post traitement fissure :  calcul de g ----
696 #
697     motscles = {}
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')
703     else :
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'),
710                           INFO=INFO,**motscles
711                           );
712     if THETA_3D!=None :
713       for thet in THETA_3D:
714         _nothet=CALC_THETA(MODELE=modele,
715                            FOND_FISS=fonfis,
716                            THETA_3D=_F(TOUT   = 'OUI',
717                                        MODULE = 1.,
718                                        R_INF  = thet['R_INF'],
719                                        R_SUP  = thet['R_SUP'],),
720                            );
721         motscles = {}
722         if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
723         _nogthe=CALC_G( RESULTAT   =nomres,
724                         OPTION='CALC_G_GLOB',
725                         TOUT_ORDRE ='OUI',
726                         THETA      =_F(THETA=_nothet),**motscles);
727 #
728         IMPR_TABLE(TABLE=_nogthe,);
729 #
730       for thet in THETA_3D:
731         motscles = {}
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',
736                                                     DEGRE=4,)
737         elif TYPE_MAILLAGE =='FISS_AXIS_DEB' :
738                              motscles['LISSAGE']=_F(LISSAGE_THETA='LAGRANGE',
739                                                     LISSAGE_G='LAGRANGE',
740                                                     DEGRE=4,)
741         _nogloc=CALC_G (RESULTAT   =nomres,
742                         TOUT_ORDRE ='OUI',
743                         THETA=_F( FOND_FISS  =fonfis,
744                                   R_INF      = thet['R_INF'],
745                                   R_SUP      = thet['R_SUP'],),**motscles);
746
747         IMPR_TABLE(TABLE=_nogloc,);
748 #
749 #     --- commande IMPR_RESU  ---
750 #
751   if IMPRESSION!=None:
752     mcfresu =[]
753     motscles={}
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,))
759     if ECHANGE!=None:
760       motscles={}
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,
767                RESU   = mcfresu,
768                FORMAT=IMPRESSION['FORMAT'],**motscles)
769 #
770   return ier