Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
[tools/eficas.git] / Aster / Cata / cataSTA9 / Macro / macro_mode_meca_ops.py
1 #@ MODIF macro_mode_meca_ops Macro  DATE 30/10/2007   AUTEUR BOYERE E.BOYERE 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2002  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
23 def macro_mode_meca_ops(self,MATR_A,MATR_B,INFO,METHODE,OPTION,CALC_FREQ,
24                         VERI_MODE,NORM_MODE,FILTRE_MODE,IMPRESSION,**args):
25   """
26      Ecriture de la macro MACRO_MODE_MECA
27   """
28   from Accas import _F
29   ier=0
30     
31   #  on protege le contenu du mot cle NORM_MODE pour eviter les confusions
32   #  avec la commande du meme nom
33   
34   normode=NORM_MODE
35   
36   # On importe les definitions des commandes a utiliser dans la macro
37   MODE_ITER_SIMULT  =self.get_cmd('MODE_ITER_SIMULT')
38   NORM_MODE         =self.get_cmd('NORM_MODE')
39   IMPR_RESU         =self.get_cmd('IMPR_RESU')
40   EXTR_MODE         =self.get_cmd('EXTR_MODE')
41   DETRUIRE          =self.get_cmd('DETRUIRE')
42   # La macro compte pour 1 dans la numerotation des commandes
43   self.set_icmd(1)
44
45   nompro=None
46   iocc=0
47   if CALC_FREQ['FREQ']:
48      nnfreq=len(CALC_FREQ['FREQ'])
49   else:
50      lborne=[]
51      nnfreq= CALC_FREQ['NB_BLOC_FREQ']+1
52      zlborn=(CALC_FREQ['FREQ_MAX']-CALC_FREQ['FREQ_MIN'])/(nnfreq-1)
53      for i in range(0,nnfreq):
54          lborne.append(CALC_FREQ['FREQ_MIN']+i*zlborn)
55
56   motscles={}
57   motscles['FILTRE_MODE']=[]
58   for i in range(0,nnfreq-1):
59      motscit={}
60      motscfa={}
61      if CALC_FREQ['DIM_SOUS_ESPACE']: motscfa['DIM_SOUS_ESPACE']=CALC_FREQ['DIM_SOUS_ESPACE']
62      if CALC_FREQ['COEF_DIM_ESPACE']: motscfa['COEF_DIM_ESPACE']=CALC_FREQ['COEF_DIM_ESPACE']
63      if CALC_FREQ['FREQ']:
64         motscfa['FREQ']=(CALC_FREQ['FREQ'][i],CALC_FREQ['FREQ'][i+1])
65      else:
66         motscfa['FREQ']=(lborne[i],lborne[i+1])
67      motscit['CALC_FREQ']=_F(OPTION          ='BANDE',
68                              SEUIL_FREQ      =CALC_FREQ['SEUIL_FREQ'],
69                              NPREC_SOLVEUR   =CALC_FREQ['NPREC_SOLVEUR'],
70                              NMAX_ITER_SHIFT =CALC_FREQ['NMAX_ITER_SHIFT'],
71                              PREC_SHIFT      =CALC_FREQ['PREC_SHIFT'],
72                              **motscfa)
73      motscit['VERI_MODE']=_F(STOP_ERREUR=VERI_MODE['STOP_ERREUR'],
74                              SEUIL      =VERI_MODE['SEUIL'],
75                              STURM      =VERI_MODE['STURM'],
76                              PREC_SHIFT =VERI_MODE['PREC_SHIFT'])
77      motscit['STOP_FREQ_VIDE']=CALC_FREQ['STOP_FREQ_VIDE']
78
79      if METHODE=='TRI_DIAG':
80         if args.has_key('NMAX_ITER_ORTHO'):
81            motscit['NMAX_ITER_ORTHO'] =args['NMAX_ITER_ORTHO']
82         if args.has_key('PREC_ORTHO'):
83            motscit['PREC_ORTHO']      =args['PREC_ORTHO']
84         if args.has_key('PREC_LANCZOS'):
85            motscit['PREC_LANCZOS']    =args['PREC_LANCZOS']
86         if args.has_key('MAX_ITER_QR'):
87            motscit['NMAX_ITER_QR']    =args['NMAX_ITER_QR']
88      elif METHODE=='JACOBI':
89         if args.has_key('NMAX_ITER_BATHE'):
90            motscit['NMAX_ITER_BATHE'] =args['NMAX_ITER_BATHE']
91         if args.has_key('PREC_BATHE'):
92            motscit['PREC_BATHE']      =args['PREC_BATHE']
93         if args.has_key('NMAX_ITER_JACOBI'):
94            motscit['NMAX_ITER_JACOBI']=args['NMAX_ITER_JACOBI']
95         if args.has_key('PREC_JACOBI'):
96            motscit['PREC_JACOBI']     =args['PREC_JACOBI']
97      elif METHODE=='SORENSEN':
98         if args.has_key('NMAX_ITER_SOREN'):
99            motscit['NMAX_ITER_SOREN'] =args['NMAX_ITER_SOREN']
100         if args.has_key('PARA_ORTHO_SOREN'):
101            motscit['PARA_ORTHO_SOREN']=args['PARA_ORTHO_SOREN']
102         if args.has_key('PREC_SOREN'):
103            motscit['PREC_SOREN']      =args['PREC_SOREN']
104
105      __nomre0=MODE_ITER_SIMULT(MATR_A  =MATR_A,
106                                   MATR_B  =MATR_B,
107                                   INFO    =INFO,
108                                   METHODE =METHODE,
109                                   OPTION  =OPTION,
110                                   **motscit)
111
112      __nomre0=NORM_MODE(reuse     =__nomre0,
113                         MODE      =__nomre0,
114                         NORME     =normode['NORME'],
115                         INFO      =normode['INFO'],)
116
117      if IMPRESSION['TOUT_PARA']=='OUI':
118         IMPR_RESU(RESU=_F(RESULTAT=__nomre0,
119                           TOUT_ORDRE='OUI',
120                           TOUT_CHAM ='NON',
121                           TOUT_PARA ='OUI',) )
122
123      if FILTRE_MODE :
124         motscles['FILTRE_MODE'].append(_F(MODE      =__nomre0,
125                                           CRIT_EXTR =FILTRE_MODE['CRIT_EXTR'],
126                                           SEUIL     =FILTRE_MODE['SEUIL'], ))
127      else:
128         motscles['FILTRE_MODE'].append(_F(MODE      =__nomre0,
129                                           TOUT_ORDRE='OUI',) )
130      
131
132   motscles['IMPRESSION']=_F(CUMUL    =IMPRESSION['CUMUL'],
133                             CRIT_EXTR=IMPRESSION['CRIT_EXTR'],)
134   self.DeclareOut('nomres',self.sd)
135   nomres=EXTR_MODE(**motscles)
136   DETRUIRE(CONCEPT=_F(NOM='__nomre0',),ALARME='NON')
137   return ier