1 #@ MODIF calc_modal_ops Macro DATE 27/04/2009 AUTEUR NISTOR I.NISTOR
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.
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.
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 -*-
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):
27 Ecriture de la macro CALC_MODAL
31 from Utilitai.Utmess import UTMESS
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
43 # on defini la liste des mots cle pour les appels aux CALC_MATR_ELEM
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
50 #c'est avec le mot cle AMORTISSEMENT qu'on decide si on calcule la matrice C
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)
60 #on produit en local le concept NUME_DDL, il n'est pas visible pour l'utilisateur
62 # Les mots cles simples sous SOLVEUR sont par defaut MULT_FRONT/METIS
63 methode=SOLVEUR['METHODE']
64 renum=SOLVEUR['RENUM']
66 _num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum,INFO=INFO)
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)
74 #lancement du calcul des modes propres
75 # on defini la liste des mots cle pour l'appel au MODE_ITER_SIMULT
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']
106 if args.has_key('TYPE_QZ'):
107 motscit['TYPE_QZ'] =args['TYPE_QZ']
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']
112 if CALC_FREQ['OPTION']=='PLUS_PETITE':
113 motscfa['NMAX_FREQ']=CALC_FREQ['NMAX_FREQ']
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']
120 if CALC_FREQ['OPTION']=='BANDE':
121 motscfa['FREQ']=CALC_FREQ['FREQ']
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'],
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'])
136 motscit['STOP_FREQ_VIDE'] = CALC_FREQ['STOP_FREQ_VIDE']
139 if MODE_RIGIDE=='OUI':
140 mode_rigi='MODE_RIGIDE'
141 elif MODE_RIGIDE=='NON':
144 self.DeclareOut('modes',self.sd)
146 if AMORTISSEMENT=='NON':
147 modes=MODE_ITER_SIMULT(MATR_A =_rigas,
153 elif AMORTISSEMENT=='OUI':
154 modes=MODE_ITER_SIMULT(MATR_A =_rigas,