]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA9/Macro/calc_modal_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA9 / Macro / calc_modal_ops.py
1 #@ MODIF calc_modal_ops Macro  DATE 27/04/2009   AUTEUR NISTOR I.NISTOR 
2
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2008  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 #-*- coding: iso-8859-1 -*-
21
22
23 def calc_modal_ops(self,MODELE,CHAM_MATER,CARA_ELEM,AMORTISSEMENT,
24                         SOLVEUR,CHARGE,INST,METHODE,CALC_FREQ, MODE_RIGIDE,
25                         VERI_MODE,INFO,**args):
26   """
27      Ecriture de la macro CALC_MODAL
28   """
29   from Accas import _F
30   ier=0
31   from Utilitai.Utmess     import  UTMESS
32
33   # On importe les definitions des commandes a utiliser dans la macro
34   # Le nom de la variable doit etre obligatoirement le nom de la commande
35   CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM')
36   NUME_DDL      =self.get_cmd('NUME_DDL')
37   ASSE_MATRICE  =self.get_cmd('ASSE_MATRICE')  
38   MODE_ITER_SIMULT  =self.get_cmd('MODE_ITER_SIMULT')
39   # La macro compte pour 1 dans la numerotation des commandes
40   self.set_icmd(1)
41
42
43   # on defini la liste des mots cle pour les appels aux CALC_MATR_ELEM
44   motsclece={}
45   if CHARGE     != None: motsclece['CHARGE']      =CHARGE
46   if CHAM_MATER != None: motsclece['CHAM_MATER']  =CHAM_MATER
47   if CARA_ELEM  != None: motsclece['CARA_ELEM']   =CARA_ELEM
48   if INST       != None: motsclece['INST']        =INST
49
50   #c'est avec le mot cle AMORTISSEMENT qu'on decide si on calcule la matrice C
51   # d'amortissement 
52
53   
54   _a=CALC_MATR_ELEM(MODELE=MODELE, OPTION='RIGI_MECA', **motsclece)
55   _b=CALC_MATR_ELEM(MODELE=MODELE, OPTION='MASS_MECA', **motsclece)
56   if AMORTISSEMENT=='OUI':  
57     _c=CALC_MATR_ELEM(MODELE=MODELE, OPTION='AMOR_MECA',
58                        RIGI_MECA=_a, MASS_MECA=_b,**motsclece)
59
60   #on produit en local le concept NUME_DDL, il n'est pas visible pour l'utilisateur
61   
62   # Les mots cles simples sous SOLVEUR sont par defaut MULT_FRONT/METIS
63   methode=SOLVEUR['METHODE']
64   renum=SOLVEUR['RENUM'] 
65
66   _num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum,INFO=INFO)
67   
68   #assemblages des matrices 
69   _rigas=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=_num)
70   _masas=ASSE_MATRICE(MATR_ELEM=_b,NUME_DDL=_num)
71   if AMORTISSEMENT=='OUI':     
72     _amoras=ASSE_MATRICE(MATR_ELEM=_c,NUME_DDL=_num)
73
74   #lancement du calcul des modes propres
75   # on defini la liste des mots cle pour l'appel au MODE_ITER_SIMULT
76
77   motscit={}
78   motscfa={}
79
80   if METHODE=='TRI_DIAG':
81      if args.has_key('NMAX_ITER_ORTHO'):
82         motscit['NMAX_ITER_ORTHO'] =args['NMAX_ITER_ORTHO']
83      if args.has_key('PREC_ORTHO'):
84         motscit['PREC_ORTHO']      =args['PREC_ORTHO']
85      if args.has_key('PREC_LANCZOS'):
86         motscit['PREC_LANCZOS']    =args['PREC_LANCZOS']
87      if args.has_key('MAX_ITER_QR'):
88         motscit['NMAX_ITER_QR']    =args['NMAX_ITER_QR']
89   elif METHODE=='JACOBI':
90      if args.has_key('NMAX_ITER_BATHE'):
91         motscit['NMAX_ITER_BATHE'] =args['NMAX_ITER_BATHE']
92      if args.has_key('PREC_BATHE'):
93         motscit['PREC_BATHE']      =args['PREC_BATHE']
94      if args.has_key('NMAX_ITER_JACOBI'):
95         motscit['NMAX_ITER_JACOBI']=args['NMAX_ITER_JACOBI']
96      if args.has_key('PREC_JACOBI'):
97         motscit['PREC_JACOBI']     =args['PREC_JACOBI']
98   elif METHODE=='SORENSEN':
99      if args.has_key('NMAX_ITER_SOREN'):
100         motscit['NMAX_ITER_SOREN'] =args['NMAX_ITER_SOREN']
101      if args.has_key('PARA_ORTHO_SOREN'):
102         motscit['PARA_ORTHO_SOREN']=args['PARA_ORTHO_SOREN']
103      if args.has_key('PREC_SOREN'):
104         motscit['PREC_SOREN']      =args['PREC_SOREN']
105   elif METHODE=='QZ':
106      if args.has_key('TYPE_QZ'):
107         motscit['TYPE_QZ'] =args['TYPE_QZ']
108   
109   if CALC_FREQ['DIM_SOUS_ESPACE']: motscfa['DIM_SOUS_ESPACE']=CALC_FREQ['DIM_SOUS_ESPACE']
110   if CALC_FREQ['COEF_DIM_ESPACE']: motscfa['COEF_DIM_ESPACE']=CALC_FREQ['COEF_DIM_ESPACE']
111   
112   if CALC_FREQ['OPTION']=='PLUS_PETITE':
113      motscfa['NMAX_FREQ']=CALC_FREQ['NMAX_FREQ']
114
115   if CALC_FREQ['OPTION']=='CENTRE':
116      motscfa['FREQ']=CALC_FREQ['FREQ']
117      if CALC_FREQ['AMOR_REDUIT']: motscfa['AMOR_REDUIT']=CALC_FREQ['AMOR_REDUIT']
118      motscfa['NMAX_FREQ']=CALC_FREQ['NMAX_FREQ']
119      
120   if CALC_FREQ['OPTION']=='BANDE':
121      motscfa['FREQ']=CALC_FREQ['FREQ']
122      
123   motscit['CALC_FREQ'] = _F(OPTION          =CALC_FREQ['OPTION'],
124                             SEUIL_FREQ      =CALC_FREQ['SEUIL_FREQ'],
125                             NPREC_SOLVEUR   =CALC_FREQ['NPREC_SOLVEUR'],
126                             NMAX_ITER_SHIFT =CALC_FREQ['NMAX_ITER_SHIFT'],
127                             PREC_SHIFT      =CALC_FREQ['PREC_SHIFT'],
128                             APPROCHE        =CALC_FREQ['APPROCHE'],
129                             **motscfa)
130
131   motscit['VERI_MODE'] = _F(STOP_ERREUR=VERI_MODE['STOP_ERREUR'],
132                             SEUIL      =VERI_MODE['SEUIL'],
133                             STURM      =VERI_MODE['STURM'],
134                             PREC_SHIFT =VERI_MODE['PREC_SHIFT'])
135
136   motscit['STOP_FREQ_VIDE'] = CALC_FREQ['STOP_FREQ_VIDE']
137
138  
139   if MODE_RIGIDE=='OUI':
140     mode_rigi='MODE_RIGIDE'
141   elif MODE_RIGIDE=='NON':
142     mode_rigi='SANS' 
143  
144   self.DeclareOut('modes',self.sd)
145   
146   if AMORTISSEMENT=='NON':
147      modes=MODE_ITER_SIMULT(MATR_A  =_rigas,
148                             MATR_B  =_masas,
149                             METHODE =METHODE,
150                             OPTION  =mode_rigi,
151                             INFO    =INFO,
152                             **motscit)
153   elif AMORTISSEMENT=='OUI':
154      modes=MODE_ITER_SIMULT(MATR_A  =_rigas,
155                             MATR_B  =_masas,
156                             MATR_C  =_amoras,
157                             METHODE =METHODE,
158                             OPTION  =mode_rigi,
159                             INFO    =INFO,
160                             **motscit)
161  
162   return ier