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