]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA8/Macro/macr_ascouf_calc_ops.py
Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
[tools/eficas.git] / Aster / Cata / cataSTA8 / Macro / macr_ascouf_calc_ops.py
1 #@ MODIF macr_ascouf_calc_ops Macro  DATE 05/09/2007   AUTEUR SALMONA L.SALMONA 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
9 # (AT YOUR OPTION) ANY LATER VERSION.                                                  
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,CHARGE,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   THER_LINEAIRE    =self.get_cmd('THER_LINEAIRE'   )
46   AFFE_CHAR_MECA   =self.get_cmd('AFFE_CHAR_MECA'  )
47   STAT_NON_LINE    =self.get_cmd('STAT_NON_LINE'   )
48   CALC_ELEM        =self.get_cmd('CALC_ELEM'       )
49   IMPR_RESU        =self.get_cmd('IMPR_RESU'       )
50   IMPR_TABLE       =self.get_cmd('IMPR_TABLE'      )
51   DEFI_FOND_FISS   =self.get_cmd('DEFI_FOND_FISS'  )
52   CALC_THETA       =self.get_cmd('CALC_THETA'      )
53   CALC_G           =self.get_cmd('CALC_G'          )
54   POST_RCCM        =self.get_cmd('POST_RCCM'       )
55   POST_RELEVE_T    =self.get_cmd('POST_RELEVE_T'   )
56
57   # La macro compte pour 1 dans la numerotation des commandes
58   self.set_icmd(1)
59 #------------------------------------------------------------------
60 # DATA
61   GRMAIL = ('COUDE','PEAUINT','PEAUEXT','EXTUBE','CLGV','FACE1','FACE2')
62 #------------------------------------------------------------------
63 #  
64   if CL_BOL_P2_GV!=None :
65     if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE' :
66        message=        ' la condition aux limites sur bol a section conique \n'
67        message=message+' est ignoree pour un coude avec sous-epaisseurs \n'
68        UTMESS('A', "MACR_ASCOUF_CALC", message)
69     elif (TYPE_MAILLAGE[:4]!='FISS') and (CL_BOL_P2_GV['AZIMUT']!=None) :
70        UTMESS('E', "MACR_ASCOUF_CALC", "mot-cle AZIMUT non autorise dans le cas d un coude sain")
71 #
72   if mc_IMPR_TABLE!=None :
73     FLAG = 0
74     if (mc_IMPR_TABLE['NOM_PARA']==None) and (mc_IMPR_TABLE['POSI_ANGUL']==None) and (mc_IMPR_TABLE['POSI_CURV_LONGI']==None) :
75        UTMESS('E', "MACR_ASCOUF_CALC", "POSI_ANGUL POSI_CURV_LONGI est obligatoire")
76        return ier
77     if (mc_IMPR_TABLE['NOM_PARA']!=None) :
78        impr_table_nom_para= mc_IMPR_TABLE['NOM_PARA']
79        for impt in impr_table_nom_para : 
80          if impt in ('SI_LONG','SI_CIRC','SI_RADI') :
81            FLAG = 1
82            if (((impt['ANGLE']==None) and (impt['POSI_ANGUL']==None) and (impt['R_CINTR'        ]==None)) or
83                ((impt['ANGLE']==None) and (impt['R_CINTR'   ]==None) and (impt['POSI_CURV_LONGI']==None))   )  :
84              UTMESS('E', "MACR_ASCOUF_CALC", "il faut renseigner : ANGLE, R_CINTR et POSI_ANGUL ou ANGLE, R_CINTR et POSI_CURV_LONGI")
85     if (mc_IMPR_TABLE['NOM_PARA']==None) : FLAG = 1
86     if not FLAG : UTMESS('A', "MACR_ASCOUF_CALC","ANGL_COUDE et ANGL_SOUS_EPAI sont inutiles dans ce cas")
87 #
88 #------------------------------------------------------------------
89 #
90 #     --- commande AFFE_MODELE ---
91 #
92   self.DeclareOut('modele',MODELE)
93   mcfact=[]
94   if (PRES_REP!=None) and (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[:4]=='FISS') :
95      mcfact.append(_F(GROUP_MA=GRMAIL     ,PHENOMENE='MECANIQUE',MODELISATION='3D'    ))
96   else:
97      mcfact.append(_F(GROUP_MA=GRMAIL[:5] ,PHENOMENE='MECANIQUE',MODELISATION='3D'    ))
98   if TORS_P1!=None :
99      mcfact.append(_F(GROUP_MA='P1' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
100   if CL_BOL_P2_GV==None :
101      mcfact.append(_F(GROUP_MA='P2' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
102   modele = AFFE_MODELE( MAILLAGE = MAILLAGE ,
103                         AFFE     = mcfact    )
104   if ECHANGE!=None :                                # modele thermique
105      __modthe = AFFE_MODELE( MAILLAGE = MAILLAGE ,
106                              AFFE     = _F(TOUT        ='OUI',
107                                            PHENOMENE   ='THERMIQUE',
108                                            MODELISATION='3D' )       )
109 #------------------------------------------------------------------
110 #
111 #     --- commande AFFE_MATERIAU ---
112 #
113   if CHAM_MATER!=None : self.DeclareOut('affmat',CHAM_MATER)
114   mcfact=[]
115   for mater in mc_AFFE_MATERIAU :
116      if mater['TOUT']!=None :
117        mcfact.append(_F(TOUT    =mater['TOUT'    ],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
118        rccmat = mater['MATER']
119      else                   :
120        mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
121        if    mater['GROUP_MA'][:5]=='COUDE' :
122          if TORS_P1!=None :
123            mcfact.append(_F(GROUP_MA='P1',MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
124            mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
125          elif (len(mc_AFFE_MATERIAU)==1) and (CL_BOL_P2_GV==None) :
126            mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
127        elif (mater['BOL'     ][:3]=='BOL'  ) and (CL_BOL_P2_GV==None) :
128          mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],TEMP_REF=mater['TEMP_REF']))
129   affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
130                           MODELE   = modele ,
131                           AFFE     = mcfact    )
132 #------------------------------------------------------------------
133 #
134 #     --- commande AFFE_CARA_ELEM ---
135 #
136   if (TORS_P1!=None) or (CL_BOL_P2_GV==None) :
137     if CARA_ELEM!=None : self.DeclareOut('carael',CARA_ELEM)
138     motscles={}
139     motscles['DISCRET']=[]
140     if (TORS_P1!=None)      : motscles['DISCRET'].append(_F( GROUP_MA='P1' ,
141                                                              CARA    ='K_TR_D_N',
142                                                              VALE    = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),)
143     if (CL_BOL_P2_GV==None) : motscles['DISCRET'].append(_F( GROUP_MA='P2' ,
144                                                              CARA    ='K_TR_D_N',
145                                                              VALE    = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),)
146
147     carael = AFFE_CARA_ELEM( MODELE   = modele ,**motscles)
148 #
149   if ECHANGE!=None :
150 #------------------------------------------------------------------
151 #
152 #     --- commande AFFE_CHAR_THER_F ---
153 #         condition aux limites
154 #
155      __chther = AFFE_CHAR_THER_F( MODELE = __modthe ,
156                                   ECHANGE= _F(GROUP_MA='PEAUINT',
157                                               COEF_H  =ECHANGE['COEF_H'],
158                                               TEMP_EXT=ECHANGE['TEMP_EXT'],), )
159 #------------------------------------------------------------------
160 #
161 #     --- calcul thermique ---
162 #
163      if RESU_THER!=None : self.DeclareOut('resuth',RESU_THER)
164      mcsimp={}
165      if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INIT']=INCREMENT['NUME_INST_INIT']
166      if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_FIN' ]=INCREMENT['NUME_INST_FIN' ]
167      mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp)
168      resuth = THER_LINEAIRE( MODELE     = __modthe ,
169                              CHAM_MATER = affmat ,
170                              TEMP_INIT  = _F(STATIONNAIRE='OUI',),
171                              EXCIT      = _F(CHARGE=__chther,),
172                              INCREMENT  = mcfact, )
173 #
174      if CHARGE!=None : self.DeclareOut('chmeth',CHARGE)
175      chmeth = AFFE_CHAR_MECA( MODELE        = modele ,
176                               TEMP_CALCULEE = resuth )
177 #------------------------------------------------------------------
178 #
179 #     --- commande AFFE_CHAR_MECA ---
180 #         condition aux limites de type raccord 3d-poutre
181 #         ou bien blocage de mouvements rigides en cas d embout
182 #         a section conique, bol de type gv
183 #
184   motscles={}
185   motscles['LIAISON_ELEM']=[]
186   if TORS_P1!=None :
187     motscles['LIAISON_ELEM'].append(_F( OPTION    ='3D_POU'  ,
188                                          GROUP_MA_1='EXTUBE',
189                                          GROUP_NO_2='P1') )
190   if CL_BOL_P2_GV==None :
191     motscles['LIAISON_ELEM'].append(_F( OPTION    ='3D_POU'  ,
192                                          GROUP_MA_1='CLGV',
193                                          GROUP_NO_2='P2') )
194     motscles['DDL_IMPO'    ]=_F( GROUP_NO  ='P2' ,
195                                  DX        = 0.0 ,
196                                  DY        = 0.0 ,
197                                  DZ        = 0.0 ,
198                                  DRX       = 0.0 ,
199                                  DRY       = 0.0 ,
200                                  DRZ       = 0.0 , )
201   else :
202     motscles['FACE_IMPO'   ]=_F( GROUP_MA  ='CLGV' ,
203                                  DNOR      = 0.0 , )
204     ALPHA  = CL_BOL_P2_GV['ANGLE' ]
205     AZIM   = CL_BOL_P2_GV['AZIMUT']
206     ALPHAR = ALPHA*pi/180.0
207     AZIMR  = AZIM *pi/180.0
208     DDLB1  = []
209     COEFB1 = []
210     if (AZIM!=0.0) and (AZIM!=180.0) and (ALPHA!=90.0) :
211       DDLB1.append('DX')
212       COEFB1.append(SIN(AZIMR)*COS(ALPHAR))
213     if (AZIM!=90.0) :
214       DDLB1.append('DY')
215       COEFB1.append(COS(AZIMR))
216     if (AZIM!=0.) and (AZIM!=180.) and (ALPHA!=0.):
217       DDLB1.append('DZ')
218       COEFB1.append(-SIN(AZIMR)*SIN(ALPHAR))
219     POINT=['BOUT1',]*len(DDLB1)
220     motscles['LIAISON_DDL']=_F( GROUP_NO  = POINT  ,
221                                 DDL       = DDLB1  ,
222                                 COEF_MULT = COEFB1 ,
223                                 COEF_IMPO = 0.0    , )
224
225   _conlim = AFFE_CHAR_MECA( MODELE   = modele ,**motscles)
226 #
227 #     --- commande AFFE_CHAR_MECA ---
228 #         chargement mecanique :  pres_rep, effet de fond 
229 #
230   if PRES_REP!=None :
231     motscles={}
232     if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[:4]=='FISS') :
233       motscles['PRES_REP']=_F( GROUP_MA  = ('PEAUINT','FACE1','FACE2') ,
234                                PRES      = PRES_REP['PRES'] ,)
235     else :
236       motscles['PRES_REP']=_F( GROUP_MA  = 'PEAUINT',
237                                PRES      = PRES_REP['PRES'] ,)
238     if PRES_REP['EFFE_FOND_P1']!='NON' :
239       motscles['EFFE_FOND']=_F( GROUP_MA_INT  = 'BORDTU'  ,
240                                 GROUP_MA      = 'EXTUBE'  ,
241                                 PRES          = PRES_REP['PRES'] ,)
242 #
243     _chpres = AFFE_CHAR_MECA( MODELE   = modele ,**motscles)
244 #
245 #     --- commande AFFE_CHAR_MECA ---
246 #         chargement mecanique : torseur d efforts 
247 #
248   if TORS_P1!=None :
249     _chtor = [None]*6
250     i=0
251     for tors in TORS_P1:
252       mcsimp={}
253       if tors['FX']!=None : mcsimp['FX']=tors['FX']
254       if tors['FY']!=None : mcsimp['FY']=tors['FY']
255       if tors['FZ']!=None : mcsimp['FZ']=tors['FZ']
256       if tors['MX']!=None : mcsimp['MX']=tors['MX']
257       if tors['MY']!=None : mcsimp['MY']=tors['MY']
258       if tors['MZ']!=None : mcsimp['MZ']=tors['MZ']
259       mcfact=_F(GROUP_NO='P1',**mcsimp)
260       _chtor[i] = AFFE_CHAR_MECA( MODELE       = modele ,
261                                   FORCE_NODALE = mcfact , )
262       i=i+1
263 #
264 #     --- commande STAT_NON_LINE ---
265 #
266   motscles={}
267 #
268   mcfex=[]  # mot clé facteur EXCIT
269   mcfex.append(_F(CHARGE=_conlim,))
270   if ECHANGE!=None :
271      mcfex.append(_F(CHARGE=chmeth,))
272   if PRES_REP!=None:
273     if PRES_REP['FONC_MULT']!=None :
274       mcfex.append(_F(CHARGE=_chpres,FONC_MULT=PRES_REP['FONC_MULT']))
275     else :
276       mcfex.append(_F(CHARGE=_chpres,))
277   if TORS_P1!=None:
278      i=0
279      for tors in TORS_P1 :
280        if tors['FONC_MULT']!=None :
281           mcfex.append(_F(CHARGE=_chtor[i],FONC_MULT=tors['FONC_MULT']))
282        else :
283           mcfex.append(_F(CHARGE=_chtor[i],))
284        i=i+1
285   motscles['EXCIT'] =mcfex
286 #
287   mcfci=[]  # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets
288   if COMP_INCR!=None :
289     mcfci.append(_F(TOUT='OUI' ,RELATION=COMP_INCR['RELATION']))
290   elif COMP_ELAS!=None :
291     motscles['COMP_ELAS'] =_F(GROUP_MA='COUDE',RELATION=COMP_ELAS['RELATION'])
292     if TORS_P1!=None     : mcfci.append(  _F(GROUP_MA='P1',RELATION='ELAS'))
293     if CL_BOL_P2_GV==None: mcfci.append(  _F(GROUP_MA='P2',RELATION='ELAS'))
294   motscles['COMP_INCR'] =mcfci
295 #
296   dSolveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
297   for i in dSolveur.keys():
298       if dSolveur[i]==None : del dSolveur[i]
299 #
300   dConverg=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
301   for i in dConverg.keys():
302       if dConverg[i]==None : del dConverg[i]
303 #
304   dNewton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
305   for i in dNewton.keys():
306       if dNewton[i]==None : del dNewton[i]
307 #
308   dRechlin=RECH_LINEAIRE[0].cree_dict_valeurs(RECH_LINEAIRE[0].mc_liste)
309   for i in dRechlin.keys():
310       if dRechlin[i]==None : del dRechlin[i]
311 #
312   dIncrem=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
313   for i in dIncrem.keys():
314       if dIncrem[i]==None : del dIncrem[i]
315 #
316   if TITRE!=None :
317     motscles['TITRE'        ] =TITRE
318   motscles  ['SOLVEUR'      ] =dSolveur
319   motscles  ['CONVERGENCE'  ] =dConverg
320   motscles  ['NEWTON'       ] =dNewton
321   motscles  ['RECH_LINEAIRE'] =dRechlin
322   motscles  ['INCREMENT'    ] =dIncrem
323   self.DeclareOut('nomres',self.sd)
324   nomres = STAT_NON_LINE( MODELE     = modele ,
325                           CHAM_MATER = affmat ,
326                           CARA_ELEM  = carael ,
327                           INFO       = INFO   , **motscles)
328 #
329 #     --- commande CALC_ELEM ---
330 #
331   nomres = CALC_ELEM( reuse      = nomres,
332                       RESULTAT   = nomres ,
333                       MODELE     = modele ,
334                       TOUT_ORDRE = 'OUI'  ,
335                       OPTION     = ('SIEF_ELNO_ELGA','EQUI_ELNO_SIGM') ,
336                       INFO       = INFO   ,)
337 #
338 #     --- post-traitements ---
339 #
340   if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE':
341 #
342 #     --- post traitement sous-epaisseurs:  ligaments  ---
343 #
344      if mc_IMPR_TABLE!=None:       
345 #
346       SECT=('MI','TU','GV')
347       LIG=('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR')
348       if   mc_IMPR_TABLE['POSI_ANGUL']==None:
349          ASEP=(mc_IMPR_TABLE['POSI_CURV_LONGI']/mc_IMPR_TABLE['R_CINTR'])*(180./pi)
350       else :
351          ASEP=mc_IMPR_TABLE['POSI_ANGUL']
352 #
353 #     moyenne_rccm, invariant et moyenne sur les ligaments dans
354 #     l epaisseur
355 #
356       l_grno=MAILLAGE.LIST_GROUP_NO()
357       tabprl=[None]*4
358       tablig=[None]*4
359 #
360 #     prelevements des ligaments circonferentiels et longitudinaux
361 #     de la sous-epaisseur
362 #
363       lgrno=[]
364       for tgrno in l_grno : 
365         if tgrno[0][:3] in ('CIR','LON')    : lgrno.append(tgrno[0])
366         elif tgrno[0][:5]=='PCENT'          : lgrno.append(tgrno[0])
367         elif (tgrno[0][:4] in LIG) and (tgrno[0][4:6] not in ('GV','TU','MI')): lgrno.append(tgrno[0])
368 #
369       motscles={}
370       motscles['ACTION']=[]
371       for grno in lgrno : 
372          motscles['ACTION'].append(_F(RESULTAT=nomres,
373                                       NOM_CHAM='SIEF_ELNO_ELGA',
374                                       TOUT_CMP='OUI',
375                                       INTITULE=grno,
376                                       GROUP_NO=grno,
377                                       OPERATION='EXTRACTION',))
378       motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
379       tabprl[1]=POST_RELEVE_T(**motscles)
380       tablig[1]=POST_RCCM(MATER          = rccmat,
381                           TYPE_RESU_MECA = 'EVOLUTION',
382                           OPTION         = 'PM_PB',
383                           TRANSITOIRE=_F(TABL_RESU_MECA = tabprl[1],),)
384 #
385       motscles={}
386       motscles['ACTION']=[]
387       for tgrno in lgrno : 
388          motscles['ACTION'].append(_F(RESULTAT=nomres,
389                                       NOM_CHAM='SIEF_ELNO_ELGA',
390                                       INTITULE=tgrno,
391                                       GROUP_NO=tgrno,
392                                       INVARIANT='OUI',
393                                       OPERATION='EXTRACTION',))
394       motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
395       
396       tablig[2]=POST_RELEVE_T(**motscles)
397 #
398       motscles={}
399       nommail=MAILLAGE.nom
400       coord   =aster.getvectjev(nommail.ljust(8)+'.COORDO    .VALE')
401       linomno =aster.getvectjev(nommail.ljust(8)+'.NOMNOE')
402       collgrno=aster.getcolljev(nommail.ljust(8)+'.GROUPENO')
403
404       motscles['ACTION']=[]
405       for tgrno in lgrno : 
406          if tgrno[:3]!='LON' :
407           if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
408           else                                   : vecty=(sin(ASEP*pi/180.),0.,cos(ASEP*pi/180.))
409          else :
410           if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
411           else :
412                  grpn=collgrno['FGAUTU  ']
413                  LT1=coord[3*(grpn[0]-1)+2]
414                  for node in grpn:
415                   X = coord[3*(node-1)]
416                   Y = coord[3*(node-1)+1]
417                   Z = coord[3*(node-1)+2]
418                   RCIN = mc_IMPR_TABLE['R_CINTR']
419                   if   Z<LT1                           : ANGSEC=0.
420                   elif X<(-1*RCIN) : ANGSEC=mc_IMPR_TABLE['ANGLE']*pi/180.
421                   else :
422                       VCOS = cos((-LT1-Z)/(sqrt((X+RCIN)**2+Y**2 )))
423                       VSIN = sin((-LT1-Z)/(sqrt((X+RCIN)**2+Y**2 )))
424                       ANGSEC = atan2(VSIN,VCOS)
425                  vecty=(sin(ANGSEC),0.,cos(ANGSEC))
426          motscles['ACTION'].append(_F(RESULTAT=nomres,
427                                       NOM_CHAM='SIEF_ELNO_ELGA',
428                                       INTITULE=tgrno,
429                                       GROUP_NO=tgrno,
430                                       NOM_CMP=('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ',),
431                                       REPERE='LOCAL',
432                                       VECT_Y=vecty,
433                                       OPERATION='MOYENNE',))
434       motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
435       tablig[3]=POST_RELEVE_T(**motscles)
436 #
437 #     prelevements des ligaments sur les sections MI,TU et GV
438 #     les 8 ligaments sont tous les 45 degres
439 #
440       ACOUR = mc_IMPR_TABLE['ANGLE']*pi/180.0
441       secprl=[None]*3
442       secrcm=[None]*3
443       secinv=[None]*3
444       secmoy=[None]*3
445       for i in range(3):
446          if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
447          else :
448              if i==0  : vecty=(sin(ACOUR/2.),0.,cos(ACOUR/2.))
449              if i==1  : vecty=(0.,0.,1.)
450              if i==2  : vecty=(sin(ACOUR),0.,cos(ACOUR))
451          motscles = {}
452          motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE RCCM SECTION '+SECT[i]
453 #
454 #        moyenne RCCM sur les sections MI,TU et GV
455 #
456          motscles={}
457          motscles['ACTION']=[]
458          for j in range(8) :
459             motscles['ACTION'].append(_F(RESULTAT=nomres,
460                                          NOM_CHAM='SIEF_ELNO_ELGA',
461                                          TOUT_CMP='OUI',
462                                          INTITULE=LIG[j]+SECT[i],
463                                          GROUP_NO=LIG[j]+SECT[i],
464                                          OPERATION='EXTRACTION',))
465          motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE RCCM SECTION '+SECT[i]
466          secprl[i]=POST_RELEVE_T(**motscles)
467          secrcm[i]=POST_RCCM(MATER          = rccmat,
468                              TYPE_RESU_MECA = 'EVOLUTION',
469                              OPTION         = 'PM_PB',
470                              TRANSITOIRE=_F(TABL_RESU_MECA = secprl[i],),)
471 #
472 #        invariants sur les sections MI,TU et GV
473 #
474          motscles = {}
475          motscles['TITRE']='TABLE DE POST-TRAITEMENT INVARIANTS SECTION '+SECT[i]
476          motscles['ACTION']=[]
477          for j in range(8) : motscles['ACTION'].append(_F(INTITULE =LIG[j]+SECT[i],
478                                                           GROUP_NO =LIG[j]+SECT[i],
479                                                           RESULTAT =nomres,
480                                                           NOM_CHAM ='SIEF_ELNO_ELGA',
481                                                           INVARIANT='OUI',
482                                                           OPERATION='EXTRACTION'))
483          secinv[i] = POST_RELEVE_T(**motscles)
484 #
485 #        moyennes contraintes sur les sections MI,TU et GV
486 #
487          motscles = {}
488          motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE SECTION '+SECT[i]
489          motscles['ACTION']=[]
490          for j in range(8) : motscles['ACTION'].append(_F(INTITULE =LIG[j]+SECT[i],
491                                                           REPERE   ='LOCAL',
492                                                           VECT_Y   =vecty,
493                                                           GROUP_NO =LIG[j]+SECT[i],
494                                                           RESULTAT =nomres,
495                                                           NOM_CHAM ='SIEF_ELNO_ELGA',
496                                                           NOM_CMP  =('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),
497                                                           OPERATION='MOYENNE'))
498          secmoy[i] = POST_RELEVE_T(**motscles)
499
500 #
501 #     impression des valeurs maximales pour chaque sous-epaisseur
502 #
503       if mc_IMPR_TABLE['TOUT_PARA']=='OUI' :
504              list_para=['TRESCA_MEMBRANE','TRESCA_MFLE','TRESCA','SI_LONG','SI_RADI','SI_CIRC']
505       else : list_para=mc_IMPR_TABLE['NOM_PARA']
506       if 'TRESCA_MEMBRANE' in list_para:
507         IMPR_TABLE(TABLE    = tablig[1],
508                    FILTRE   = _F( NOM_PARA  ='PM', CRIT_COMP ='MAXI'),
509                    NOM_PARA = ('INTITULE','PM'));
510       if 'TRESCA_MFLE'     in list_para:
511         IMPR_TABLE(TABLE    = tablig[1],
512                    FILTRE   =(_F( NOM_PARA ='LIEU',VALE_K   ='ORIG'),
513                               _F( NOM_PARA ='PMB', CRIT_COMP='MAXI'),),
514                    NOM_PARA = ('INTITULE','PMB'));
515         IMPR_TABLE(TABLE    = tablig[1],
516                    FILTRE   =(_F( NOM_PARA='LIEU', VALE_K  ='EXTR'),
517                               _F( NOM_PARA ='PMB', CRIT_COMP='MAXI'),),
518                    NOM_PARA = ('INTITULE','PMB'));
519       if 'SI_RADI'         in list_para:
520         IMPR_TABLE(TABLE    = tablig[3],
521                    FILTRE   =(_F( NOM_PARA='QUANTITE',VALE_K  ='MOMENT_0'),
522                               _F( NOM_PARA ='SIXX',   CRIT_COMP='MAXI'),),
523                    NOM_PARA = ('INTITULE','SIXX'));
524       if 'SI_LONG'         in list_para:
525         IMPR_TABLE(TABLE    = tablig[3],
526                    FILTRE   =(_F( NOM_PARA='QUANTITE',VALE_K  ='MOMENT_0'),
527                               _F( NOM_PARA ='SIYY',   CRIT_COMP='MAXI'),),
528                    NOM_PARA = ('INTITULE','SIYY'));
529       if 'SI_CIRC'         in list_para:
530         IMPR_TABLE(TABLE    = tablig[3],
531                    FILTRE   =(_F( NOM_PARA='QUANTITE',VALE_K  ='MOMENT_0'),
532                               _F( NOM_PARA ='SIZZ',   CRIT_COMP='MAXI'),),
533                    NOM_PARA = ('INTITULE','SIZZ'));
534       if 'TRESCA'          in list_para:
535         IMPR_TABLE(TABLE      = tablig[2],
536                    NOM_PARA   = ('INTITULE','NOEUD','TRESCA',),
537                    PAGINATION = 'INTITULE',
538                    FILTRE     = _F( NOM_PARA   = 'TRESCA',
539                                     CRIT_COMP  = 'MAXI'     ) )  ;
540 #
541 #     impression des resultats pour chaque sous-epaisseur
542 #
543       if 'TRESCA_MEMBRANE' in list_para:
544         IMPR_TABLE(TABLE    = tablig[1],
545                    FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='ORIG'),
546                    NOM_PARA = ('INTITULE','PM'));
547       if 'TRESCA_MFLE'     in list_para:
548         IMPR_TABLE(TABLE    = tablig[1],
549                    FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='ORIG'),
550                    NOM_PARA = ('INTITULE','PMB'));
551         IMPR_TABLE(TABLE    = tablig[1],
552                    FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='EXTR'),
553                    NOM_PARA = ('INTITULE','PMB'));
554       if 'SI_RADI'         in list_para:
555         IMPR_TABLE(TABLE    = tablig[3],
556                    FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
557                    NOM_PARA = ('INTITULE','SIXX'));
558       if 'SI_LONG'         in list_para:
559         IMPR_TABLE(TABLE    = tablig[3],
560                    FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
561                    NOM_PARA = ('INTITULE','SIYY'));
562       if 'SI_CIRC'         in list_para:
563         IMPR_TABLE(TABLE    = tablig[3],
564                    FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
565                    NOM_PARA = ('INTITULE','SIZZ'));
566       if 'TRESCA'          in list_para:
567         IMPR_TABLE(TABLE      = tablig[2],
568                    NOM_PARA   = ('INTITULE','NOEUD','TRESCA',),
569                    PAGINATION = 'INTITULE');
570 #
571 #     impression des resultats pour les sections MI, TU et GV
572 #
573       for k in range(3):
574        if 'TRESCA_MEMBRANE' in list_para:
575          IMPR_TABLE(TABLE    = secrcm[k],
576                     FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='ORIG'),
577                     NOM_PARA = ('INTITULE','PM'));
578        if 'TRESCA_MFLE'     in list_para:
579          IMPR_TABLE(TABLE    = secrcm[k],
580                     FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='ORIG'),
581                     NOM_PARA = ('INTITULE','PMB'));
582          IMPR_TABLE(TABLE    = secrcm[k],
583                     FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='EXTR'),
584                     NOM_PARA = ('INTITULE','PMB'));
585        if 'SI_RADI'         in list_para:
586          IMPR_TABLE(TABLE    = secmoy[k],
587                     FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
588                     NOM_PARA = ('INTITULE','SIXX'));
589        if 'SI_LONG'         in list_para:
590          IMPR_TABLE(TABLE    = secmoy[k],
591                     FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
592                     NOM_PARA = ('INTITULE','SIYY'));
593        if 'SI_CIRC'         in list_para:
594          IMPR_TABLE(TABLE    = secmoy[k],
595                     FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
596                     NOM_PARA = ('INTITULE','SIZZ'));
597        if 'TRESCA'          in list_para:
598          IMPR_TABLE(TABLE      = secinv[k],
599                     NOM_PARA   = ('INTITULE','NOEUD','TRESCA',),
600                     PAGINATION = 'INTITULE');
601 #
602   if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
603 #
604 #   --- post traitement fissure :  calcul de g ----
605 #
606     motscles = {}
607     if FOND_FISS != None : self.DeclareOut('fonfis',FOND_FISS)
608     if TYPE_MAILLAGE =='FISS_COUDE' :
609        motscles['FOND_FISS']=_F(GROUP_NO='FONDFISS')
610        motscles['VECT_GRNO_ORIG']= ('PFOR','THOR')
611        motscles['VECT_GRNO_EXTR']= ('PFEX','THEX')
612     else :
613        motscles['FOND_FERME']=_F(GROUP_MA='FONDFISS',
614                                  GROUP_NO_ORIG='PFOR',
615                                  GROUP_MA_ORIG='MAIL_ORI')
616     fonfis=DEFI_FOND_FISS(MAILLAGE=MAILLAGE,
617                           LEVRE_SUP=_F(GROUP_MA='FACE1'),
618                           LEVRE_INF=_F(GROUP_MA='FACE2'),
619                           INFO=INFO,**motscles
620                           );
621     if THETA_3D!=None :
622       for thet in THETA_3D:
623         _nothet=CALC_THETA(MODELE=modele,
624                            FOND_FISS=fonfis,
625                            THETA_3D=_F(TOUT   = 'OUI',
626                                        MODULE = 1.,
627                                        R_INF  = thet['R_INF'],
628                                        R_SUP  = thet['R_SUP'],),
629                            );
630         motscles = {}
631         if COMP_INCR!=None : motscles['COMP_INCR']=_F(RELATION=COMP_INCR['RELATION'])
632         if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
633         _nogthe=CALC_G( RESULTAT   =nomres,
634                         OPTION='CALC_G_GLOB',
635                         TOUT_ORDRE ='OUI',
636                         THETA      =_F(THETA=_nothet),**motscles);
637 #
638         IMPR_TABLE(TABLE=_nogthe,);
639 #
640       for thet in THETA_3D:
641         motscles = {}
642         if COMP_INCR!=None : motscles['COMP_INCR']=_F(RELATION=COMP_INCR['RELATION'])
643         if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
644         if   TYPE_MAILLAGE =='FISS_COUDE' :
645                              motscles['LISSAGE']=_F(LISSAGE_THETA='LEGENDRE',
646                                                     LISSAGE_G='LEGENDRE',
647                                                     DEGRE=4,)
648         elif TYPE_MAILLAGE =='FISS_AXIS_DEB' :
649                              motscles['LISSAGE']=_F(LISSAGE_THETA='LAGRANGE',
650                                                     LISSAGE_G='LAGRANGE',
651                                                     DEGRE=4,)
652         _nogloc=CALC_G (RESULTAT   =nomres,
653                         TOUT_ORDRE ='OUI',
654                         THETA=_F( FOND_FISS  =fonfis,
655                                   R_INF      = thet['R_INF'],
656                                   R_SUP      = thet['R_SUP'],),**motscles);
657
658         IMPR_TABLE(TABLE=_nogloc,);
659 #
660 #     --- commande IMPR_RESU  ---
661 #
662   if IMPRESSION!=None:
663     mcfresu =[]
664     motscles={}
665     if IMPRESSION['FORMAT']=='IDEAS' :
666                                   motscles['VERSION'   ]= IMPRESSION['VERSION']
667     if IMPRESSION['FORMAT']=='CASTEM' :
668                                   motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
669     mcfresu.append(_F(MAILLAGE=MAILLAGE,RESULTAT=nomres,))
670     if ECHANGE!=None:
671       motscles={}
672       if IMPRESSION['FORMAT']=='IDEAS' :
673                                     motscles['VERSION'   ]= IMPRESSION['VERSION']
674       if IMPRESSION['FORMAT']=='CASTEM' :
675                                     motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
676       mcfresu.append(_F(RESULTAT=resuth,))
677     IMPR_RESU( MODELE = modele,
678                RESU   = mcfresu,
679                FORMAT=IMPRESSION['FORMAT'],**motscles)
680 #
681   return ier