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