Salome HOME
5464de33ca8868b9f8f18d55d1af870f8cdaa17b
[tools/eficas.git] / Aster / Cata / cataSTA10 / Macro / macr_ascouf_calc_ops.py
1 #@ MODIF macr_ascouf_calc_ops Macro  DATE 22/12/2009   AUTEUR ABBAS M.ABBAS 
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.
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_INCR,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                             TOLE_INTERP = -1.E-6,
320                             ZONE =_F(GROUP_MA_MAIT = 'FACE1',
321                                      GROUP_MA_ESCL = 'FACE2',
322                                      ALGO_CONT     = 'VERIF',
323                                      GROUP_MA_FOND = '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
351   if COMP_INCR!=None :
352     mcfci.append(_F(TOUT='OUI' ,RELATION=COMP_INCR['RELATION']))
353   elif COMP_ELAS!=None :
354     motscles['COMP_ELAS'] =_F(GROUP_MA='COUDE',RELATION=COMP_ELAS['RELATION'])
355     if TORS_P1!=None     : mcfci.append(  _F(GROUP_MA='P1',RELATION='ELAS'))
356     if CL_BOL_P2_GV==None: mcfci.append(  _F(GROUP_MA='P2',RELATION='ELAS'))
357   motscles['COMP_INCR'] =mcfci
358 #
359   dSolveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
360   for i in dSolveur.keys():
361       if dSolveur[i]==None : del dSolveur[i]
362 #
363   dConverg=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
364   for i in dConverg.keys():
365       if dConverg[i]==None : del dConverg[i]
366 #
367   dNewton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
368   for i in dNewton.keys():
369       if dNewton[i]==None : del dNewton[i]
370 #
371   dRechlin = {}
372   if RECH_LINEAIRE != None:
373      dRechlin=RECH_LINEAIRE[0].cree_dict_valeurs(RECH_LINEAIRE[0].mc_liste)
374      for i in dRechlin.keys():
375          if dRechlin[i]==None : del dRechlin[i]
376 #
377   dIncrem=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
378   for i in dIncrem.keys():
379       if dIncrem[i]==None : del dIncrem[i]
380 #
381   if TITRE!=None :
382     motscles['TITRE'        ] =TITRE
383   motscles  ['SOLVEUR'      ] =dSolveur
384   motscles  ['CONVERGENCE'  ] =dConverg
385   motscles  ['NEWTON'       ] =dNewton
386   motscles  ['RECH_LINEAIRE'] =dRechlin
387   motscles  ['INCREMENT'    ] =dIncrem
388   self.DeclareOut('nomres',self.sd)
389   
390   if contact==None:
391     nomres = STAT_NON_LINE( MODELE     = modele ,
392                             CHAM_MATER = affmth ,
393                             CARA_ELEM  = carael ,
394                             INFO       = INFO   , **motscles)
395   else :
396     nomres = STAT_NON_LINE( MODELE     = modele ,
397                             CHAM_MATER = affmth ,
398                             CARA_ELEM  = carael ,
399                             CONTACT    = contact,
400                             INFO       = INFO   , **motscles)   
401 #
402 #     --- commande CALC_ELEM ---
403 #
404   nomres = CALC_ELEM( reuse      = nomres,
405                       RESULTAT   = nomres ,
406                       MODELE     = modele ,
407                       TOUT_ORDRE = 'OUI'  ,
408                       OPTION     = ('SIEF_ELNO_ELGA','EQUI_ELNO_SIGM') ,
409                       INFO       = INFO   ,)
410 #
411 #     --- post-traitements ---
412 #
413   if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE':
414 #
415 #     --- post traitement sous-epaisseurs:  ligaments  ---
416 #
417      if mc_IMPR_TABLE!=None:
418 #
419       SECT=('MI','TU','GV')
420       LIG=('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR')
421       if   mc_IMPR_TABLE['POSI_ANGUL']==None:
422          ASEP=(mc_IMPR_TABLE['POSI_CURV_LONGI']/mc_IMPR_TABLE['R_CINTR'])*(180./pi)
423       else :
424          ASEP=mc_IMPR_TABLE['POSI_ANGUL']
425 #
426 #     moyenne_rccm, invariant et moyenne sur les ligaments dans
427 #     l epaisseur
428 #
429       l_grno=MAILLAGE.LIST_GROUP_NO()
430       tabprl=[None]*4
431       tablig=[None]*4
432 #
433 #     prelevements des ligaments circonferentiels et longitudinaux
434 #     de la sous-epaisseur
435 #
436       lgrno=[]
437       for tgrno in l_grno :
438         if tgrno[0][:3] in ('CIR','LON')    : lgrno.append(tgrno[0])
439         elif tgrno[0][:5]=='PCENT'          : lgrno.append(tgrno[0])
440         elif (tgrno[0][:4] in LIG) and (tgrno[0][4:6] not in ('GV','TU','MI')): lgrno.append(tgrno[0])
441 #
442       motscles={}
443       motscles['ACTION']=[]
444       for grno in lgrno :
445          motscles['ACTION'].append(_F(RESULTAT=nomres,
446                                       NOM_CHAM='SIEF_ELNO_ELGA',
447                                       TOUT_CMP='OUI',
448                                       INTITULE=grno,
449                                       GROUP_NO=grno,
450                                       OPERATION='EXTRACTION',))
451       motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
452       tabprl[1]=POST_RELEVE_T(**motscles)
453       tablig[1]=POST_RCCM(MATER          = rccmat,
454                           TYPE_RESU_MECA = 'EVOLUTION',
455                           OPTION         = 'PM_PB',
456                           TRANSITOIRE=_F(TABL_RESU_MECA = tabprl[1],),)
457 #
458       motscles={}
459       motscles['ACTION']=[]
460       for tgrno in lgrno :
461          motscles['ACTION'].append(_F(RESULTAT=nomres,
462                                       NOM_CHAM='SIEF_ELNO_ELGA',
463                                       INTITULE=tgrno,
464                                       GROUP_NO=tgrno,
465                                       INVARIANT='OUI',
466                                       OPERATION='EXTRACTION',))
467       motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
468
469       tablig[2]=POST_RELEVE_T(**motscles)
470 #
471       motscles={}
472       nommail=MAILLAGE.nom
473       coord   =aster.getvectjev(nommail.ljust(8)+'.COORDO    .VALE')
474       linomno =aster.getvectjev(nommail.ljust(8)+'.NOMNOE')
475       collgrno=aster.getcolljev(nommail.ljust(8)+'.GROUPENO')
476
477       motscles['ACTION']=[]
478       for tgrno in lgrno :
479          if tgrno[:3]!='LON' :
480           if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
481           else                                   : vecty=(sin(ASEP*pi/180.),0.,cos(ASEP*pi/180.))
482          else :
483           if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
484           else :
485                  grpn=collgrno['FGAUTU  ']
486                  LT1=coord[3*(grpn[0]-1)+2]
487                  for node in grpn:
488                   X = coord[3*(node-1)]
489                   Y = coord[3*(node-1)+1]
490                   Z = coord[3*(node-1)+2]
491                   RCIN = mc_IMPR_TABLE['R_CINTR']
492                   if   Z<LT1                           : ANGSEC=0.
493                   elif X<(-1*RCIN) : ANGSEC=mc_IMPR_TABLE['ANGLE']*pi/180.
494                   else :
495                       VCOS = cos((-LT1-Z)/(sqrt((X+RCIN)**2+Y**2 )))
496                       VSIN = sin((-LT1-Z)/(sqrt((X+RCIN)**2+Y**2 )))
497                       ANGSEC = atan2(VSIN,VCOS)
498                  vecty=(sin(ANGSEC),0.,cos(ANGSEC))
499          motscles['ACTION'].append(_F(RESULTAT=nomres,
500                                       NOM_CHAM='SIEF_ELNO_ELGA',
501                                       INTITULE=tgrno,
502                                       GROUP_NO=tgrno,
503                                       NOM_CMP=('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ',),
504                                       REPERE='LOCAL',
505                                       VECT_Y=vecty,
506                                       OPERATION='MOYENNE',))
507       motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
508       tablig[3]=POST_RELEVE_T(**motscles)
509 #
510 #     prelevements des ligaments sur les sections MI,TU et GV
511 #     les 8 ligaments sont tous les 45 degres
512 #
513       ACOUR = mc_IMPR_TABLE['ANGLE']*pi/180.0
514       secprl=[None]*3
515       secrcm=[None]*3
516       secinv=[None]*3
517       secmoy=[None]*3
518       for i in range(3):
519          if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
520          else :
521              if i==0  : vecty=(sin(ACOUR/2.),0.,cos(ACOUR/2.))
522              if i==1  : vecty=(0.,0.,1.)
523              if i==2  : vecty=(sin(ACOUR),0.,cos(ACOUR))
524          motscles = {}
525          motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE RCCM SECTION '+SECT[i]
526 #
527 #        moyenne RCCM sur les sections MI,TU et GV
528 #
529          motscles={}
530          motscles['ACTION']=[]
531          for j in range(8) :
532             motscles['ACTION'].append(_F(RESULTAT=nomres,
533                                          NOM_CHAM='SIEF_ELNO_ELGA',
534                                          TOUT_CMP='OUI',
535                                          INTITULE=LIG[j]+SECT[i],
536                                          GROUP_NO=LIG[j]+SECT[i],
537                                          OPERATION='EXTRACTION',))
538          motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE RCCM SECTION '+SECT[i]
539          secprl[i]=POST_RELEVE_T(**motscles)
540          secrcm[i]=POST_RCCM(MATER          = rccmat,
541                              TYPE_RESU_MECA = 'EVOLUTION',
542                              OPTION         = 'PM_PB',
543                              TRANSITOIRE=_F(TABL_RESU_MECA = secprl[i],),)
544 #
545 #        invariants sur les sections MI,TU et GV
546 #
547          motscles = {}
548          motscles['TITRE']='TABLE DE POST-TRAITEMENT INVARIANTS SECTION '+SECT[i]
549          motscles['ACTION']=[]
550          for j in range(8) : motscles['ACTION'].append(_F(INTITULE =LIG[j]+SECT[i],
551                                                           GROUP_NO =LIG[j]+SECT[i],
552                                                           RESULTAT =nomres,
553                                                           NOM_CHAM ='SIEF_ELNO_ELGA',
554                                                           INVARIANT='OUI',
555                                                           OPERATION='EXTRACTION'))
556          secinv[i] = POST_RELEVE_T(**motscles)
557 #
558 #        moyennes contraintes sur les sections MI,TU et GV
559 #
560          motscles = {}
561          motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE SECTION '+SECT[i]
562          motscles['ACTION']=[]
563          for j in range(8) : motscles['ACTION'].append(_F(INTITULE =LIG[j]+SECT[i],
564                                                           REPERE   ='LOCAL',
565                                                           VECT_Y   =vecty,
566                                                           GROUP_NO =LIG[j]+SECT[i],
567                                                           RESULTAT =nomres,
568                                                           NOM_CHAM ='SIEF_ELNO_ELGA',
569                                                           NOM_CMP  =('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),
570                                                           OPERATION='MOYENNE'))
571          secmoy[i] = POST_RELEVE_T(**motscles)
572
573 #
574 #     impression des valeurs maximales pour chaque sous-epaisseur
575 #
576       if mc_IMPR_TABLE['TOUT_PARA']=='OUI' :
577              list_para=['TRESCA_MEMBRANE','TRESCA_MFLE','TRESCA','SI_LONG','SI_RADI','SI_CIRC']
578       else : list_para=mc_IMPR_TABLE['NOM_PARA']
579       if 'TRESCA_MEMBRANE' in list_para:
580         IMPR_TABLE(TABLE    = tablig[1],
581                    FILTRE   = _F( NOM_PARA  ='PM', CRIT_COMP ='MAXI'),
582                    NOM_PARA = ('INTITULE','PM'));
583       if 'TRESCA_MFLE'     in list_para:
584         IMPR_TABLE(TABLE    = tablig[1],
585                    FILTRE   =(_F( NOM_PARA ='LIEU',VALE_K   ='ORIG'),
586                               _F( NOM_PARA ='PMB', CRIT_COMP='MAXI'),),
587                    NOM_PARA = ('INTITULE','PMB'));
588         IMPR_TABLE(TABLE    = tablig[1],
589                    FILTRE   =(_F( NOM_PARA='LIEU', VALE_K  ='EXTR'),
590                               _F( NOM_PARA ='PMB', CRIT_COMP='MAXI'),),
591                    NOM_PARA = ('INTITULE','PMB'));
592       if 'SI_RADI'         in list_para:
593         IMPR_TABLE(TABLE    = tablig[3],
594                    FILTRE   =(_F( NOM_PARA='QUANTITE',VALE_K  ='MOMENT_0'),
595                               _F( NOM_PARA ='SIXX',   CRIT_COMP='MAXI'),),
596                    NOM_PARA = ('INTITULE','SIXX'));
597       if 'SI_LONG'         in list_para:
598         IMPR_TABLE(TABLE    = tablig[3],
599                    FILTRE   =(_F( NOM_PARA='QUANTITE',VALE_K  ='MOMENT_0'),
600                               _F( NOM_PARA ='SIYY',   CRIT_COMP='MAXI'),),
601                    NOM_PARA = ('INTITULE','SIYY'));
602       if 'SI_CIRC'         in list_para:
603         IMPR_TABLE(TABLE    = tablig[3],
604                    FILTRE   =(_F( NOM_PARA='QUANTITE',VALE_K  ='MOMENT_0'),
605                               _F( NOM_PARA ='SIZZ',   CRIT_COMP='MAXI'),),
606                    NOM_PARA = ('INTITULE','SIZZ'));
607       if 'TRESCA'          in list_para:
608         IMPR_TABLE(TABLE      = tablig[2],
609                    NOM_PARA   = ('INTITULE','NOEUD','TRESCA',),
610                    PAGINATION = 'INTITULE',
611                    FILTRE     = _F( NOM_PARA   = 'TRESCA',
612                                     CRIT_COMP  = 'MAXI'     ) )  ;
613 #
614 #     impression des resultats pour chaque sous-epaisseur
615 #
616       if 'TRESCA_MEMBRANE' in list_para:
617         IMPR_TABLE(TABLE    = tablig[1],
618                    FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='ORIG'),
619                    NOM_PARA = ('INTITULE','PM'));
620       if 'TRESCA_MFLE'     in list_para:
621         IMPR_TABLE(TABLE    = tablig[1],
622                    FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='ORIG'),
623                    NOM_PARA = ('INTITULE','PMB'));
624         IMPR_TABLE(TABLE    = tablig[1],
625                    FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='EXTR'),
626                    NOM_PARA = ('INTITULE','PMB'));
627       if 'SI_RADI'         in list_para:
628         IMPR_TABLE(TABLE    = tablig[3],
629                    FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
630                    NOM_PARA = ('INTITULE','SIXX'));
631       if 'SI_LONG'         in list_para:
632         IMPR_TABLE(TABLE    = tablig[3],
633                    FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
634                    NOM_PARA = ('INTITULE','SIYY'));
635       if 'SI_CIRC'         in list_para:
636         IMPR_TABLE(TABLE    = tablig[3],
637                    FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
638                    NOM_PARA = ('INTITULE','SIZZ'));
639       if 'TRESCA'          in list_para:
640         IMPR_TABLE(TABLE      = tablig[2],
641                    NOM_PARA   = ('INTITULE','NOEUD','TRESCA',),
642                    PAGINATION = 'INTITULE');
643 #
644 #     impression des resultats pour les sections MI, TU et GV
645 #
646       for k in range(3):
647        if 'TRESCA_MEMBRANE' in list_para:
648          IMPR_TABLE(TABLE    = secrcm[k],
649                     FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='ORIG'),
650                     NOM_PARA = ('INTITULE','PM'));
651        if 'TRESCA_MFLE'     in list_para:
652          IMPR_TABLE(TABLE    = secrcm[k],
653                     FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='ORIG'),
654                     NOM_PARA = ('INTITULE','PMB'));
655          IMPR_TABLE(TABLE    = secrcm[k],
656                     FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='EXTR'),
657                     NOM_PARA = ('INTITULE','PMB'));
658        if 'SI_RADI'         in list_para:
659          IMPR_TABLE(TABLE    = secmoy[k],
660                     FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
661                     NOM_PARA = ('INTITULE','SIXX'));
662        if 'SI_LONG'         in list_para:
663          IMPR_TABLE(TABLE    = secmoy[k],
664                     FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
665                     NOM_PARA = ('INTITULE','SIYY'));
666        if 'SI_CIRC'         in list_para:
667          IMPR_TABLE(TABLE    = secmoy[k],
668                     FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
669                     NOM_PARA = ('INTITULE','SIZZ'));
670        if 'TRESCA'          in list_para:
671          IMPR_TABLE(TABLE      = secinv[k],
672                     NOM_PARA   = ('INTITULE','NOEUD','TRESCA',),
673                     PAGINATION = 'INTITULE');
674 #
675   if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
676 #
677 #   --- post traitement fissure :  interpénétration des lèvres ----
678 #
679     __tcont=POST_RELEVE_T( ACTION=_F(  INTITULE = 'Contact levres',
680                                 GROUP_NO = 'FACE2',
681                                 RESULTAT = nomres,
682                                 TOUT_ORDRE = 'OUI',
683                                 NOM_CHAM = 'VALE_CONT',
684                                 NOM_CMP = 'CONT',
685                                 OPERATION = 'EXTRACTION'))
686     tcont=__tcont.EXTR_TABLE()
687     numo = tcont['NUME_ORDRE'].values()['NUME_ORDRE']
688     numo=dict([(i,0) for i in numo]).keys()
689     nbinst = len(numo)
690     for i in range(1,nbinst+1) :
691       tabi = tcont.NUME_ORDRE==i
692       nbtot = len(tabi)
693       cont_actif=tabi.CONT>0.
694       nb_no_cont = len(cont_actif)
695       if nb_no_cont > 0 :
696          UTMESS('A','ASCOUF0_58',vali=[i,nbtot,nb_no_cont])
697 #
698 #   --- post traitement fissure :  calcul de g ----
699 #
700     motscles = {}
701     if FOND_FISS != None : self.DeclareOut('fonfis',FOND_FISS)
702     if TYPE_MAILLAGE =='FISS_COUDE' :
703        motscles['FOND_FISS']=_F(GROUP_NO='FONDFISS')
704        motscles['VECT_GRNO_ORIG']= ('PFOR','THOR')
705        motscles['VECT_GRNO_EXTR']= ('PFEX','THEX')
706     else :
707        motscles['FOND_FERME']=_F(GROUP_MA='FONDFISS',
708                                  GROUP_NO_ORIG='PFOR',
709                                  GROUP_MA_ORIG='MAIL_ORI')
710     fonfis=DEFI_FOND_FISS(MAILLAGE=MAILLAGE,
711                           LEVRE_SUP=_F(GROUP_MA='FACE1'),
712                           LEVRE_INF=_F(GROUP_MA='FACE2'),
713                           INFO=INFO,**motscles
714                           );
715     if THETA_3D!=None :
716       for thet in THETA_3D:
717         _nothet=CALC_THETA(MODELE=modele,
718                            FOND_FISS=fonfis,
719                            THETA_3D=_F(TOUT   = 'OUI',
720                                        MODULE = 1.,
721                                        R_INF  = thet['R_INF'],
722                                        R_SUP  = thet['R_SUP'],),
723                            );
724         motscles = {}
725         if COMP_INCR!=None : motscles['COMP_INCR']=_F(RELATION=COMP_INCR['RELATION'])
726         if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
727         _nogthe=CALC_G( RESULTAT   =nomres,
728                         OPTION='CALC_G_GLOB',
729                         TOUT_ORDRE ='OUI',
730                         THETA      =_F(THETA=_nothet),**motscles);
731 #
732         IMPR_TABLE(TABLE=_nogthe,);
733 #
734       for thet in THETA_3D:
735         motscles = {}
736         if COMP_INCR!=None : motscles['COMP_INCR']=_F(RELATION=COMP_INCR['RELATION'])
737         if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
738         if   TYPE_MAILLAGE =='FISS_COUDE' :
739                              motscles['LISSAGE']=_F(LISSAGE_THETA='LEGENDRE',
740                                                     LISSAGE_G='LEGENDRE',
741                                                     DEGRE=4,)
742         elif TYPE_MAILLAGE =='FISS_AXIS_DEB' :
743                              motscles['LISSAGE']=_F(LISSAGE_THETA='LAGRANGE',
744                                                     LISSAGE_G='LAGRANGE',
745                                                     DEGRE=4,)
746         _nogloc=CALC_G (RESULTAT   =nomres,
747                         TOUT_ORDRE ='OUI',
748                         THETA=_F( FOND_FISS  =fonfis,
749                                   R_INF      = thet['R_INF'],
750                                   R_SUP      = thet['R_SUP'],),**motscles);
751
752         IMPR_TABLE(TABLE=_nogloc,);
753 #
754 #     --- commande IMPR_RESU  ---
755 #
756   if IMPRESSION!=None:
757     mcfresu =[]
758     motscles={}
759     if IMPRESSION['FORMAT']=='IDEAS' :
760                                   motscles['VERSION'   ]= IMPRESSION['VERSION']
761     if IMPRESSION['FORMAT']=='CASTEM' :
762                                   motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
763     mcfresu.append(_F(MAILLAGE=MAILLAGE,RESULTAT=nomres,))
764     if ECHANGE!=None:
765       motscles={}
766       if IMPRESSION['FORMAT']=='IDEAS' :
767                                     motscles['VERSION'   ]= IMPRESSION['VERSION']
768       if IMPRESSION['FORMAT']=='CASTEM' :
769                                     motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
770       mcfresu.append(_F(RESULTAT=resuth,))
771     IMPR_RESU( MODELE = modele,
772                RESU   = mcfresu,
773                FORMAT=IMPRESSION['FORMAT'],**motscles)
774 #
775   return ier