]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA9/Macro/macro_expans_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA9 / Macro / macro_expans_ops.py
1 #@ MODIF macro_expans_ops Macro  DATE 03/11/2008   AUTEUR PELLET J.PELLET 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2006  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 # MODIF : 24/07/2007. BODEL : suppression du mc NUME_DDL. Le nume_ddl par
23 # defaut pour PROJ_CHAMP est celui du modèle expérimental.
24
25 def macro_expans_ops( self,
26                       MODELE_CALCUL,
27                       MODELE_MESURE,
28                       NUME_DDL=None,
29                       RESU_NX=None,
30                       RESU_EX=None,
31                       RESU_ET=None,
32                       RESU_RD=None,
33                       MODES_NUM=None,
34                       MODES_EXP=None,
35                       RESOLUTION=None,
36                       *args
37                      ):
38     """!macro MACRO_EXPANS """
39     from Accas import _F
40     from Cata.cata import CO, mode_meca, dyna_harmo
41     from Utilitai.Utmess import UTMESS
42     from types import ListType, TupleType
43     ier = 0
44
45     import aster
46     EXTR_MODE = self.get_cmd('EXTR_MODE')
47     PROJ_MESU_MODAL = self.get_cmd('PROJ_MESU_MODAL')
48     REST_GENE_PHYS = self.get_cmd('REST_GENE_PHYS')
49     PROJ_CHAMP = self.get_cmd('PROJ_CHAMP')
50     NORM_MODE = self.get_cmd('NORM_MODE')
51
52
53     # La macro compte pour 1 dans la numerotation des commandes
54     self.set_icmd(1)
55
56     is_nume_num = is_nume_exp = 0
57     if MODELE_CALCUL['NUME_MODE'] or  MODELE_CALCUL['NUME_ORDRE']:
58         # on cree un resultat RESU_NX par extraction de NUME_ORDREs
59         is_nume_num = 1
60     else:
61         if RESU_NX: UTMESS('A','MEIDEE0_6',valk=['MODELE_MESURE','RESU_EX'])
62     if MODELE_MESURE['NUME_MODE'] or  MODELE_MESURE['NUME_ORDRE']:
63         # On cree un RESU_EX par extraction de NUME_ORDREs
64         is_nume_exp = 1
65     else:
66         if RESU_EX: UTMESS('A','MEIDEE0_6',valk=['MODELE_CALCUL','RESU_NX'])
67
68     RESU_NUM = MODELE_CALCUL['BASE']
69     RESU_EXP = MODELE_MESURE['MESURE']
70
71     MOD_CALCUL = MODELE_CALCUL['MODELE']
72     MOD_MESURE = MODELE_MESURE['MODELE']
73
74     NOM_CHAM = MODELE_MESURE['NOM_CHAM']
75
76     # Extraction des modes numériques
77     # -------------------------------
78     if not is_nume_num:
79         RESU_NX = RESU_NUM
80     else:
81         self.DeclareOut( "RESU_NX", RESU_NX )
82         mfact = {'MODE':RESU_NUM}
83         if MODELE_CALCUL['NUME_MODE']:
84             mfact.update({'NUME_MODE':MODELE_CALCUL['NUME_MODE']})
85         elif MODELE_CALCUL['NUME_ORDRE']:
86             mfact.update({'NUME_ORDRE':MODELE_CALCUL['NUME_ORDRE']})
87
88         RESU_NX = EXTR_MODE( FILTRE_MODE = mfact )
89
90
91     # Extraction des modes expérimentaux
92     # ----------------------------------
93     if not is_nume_exp:
94         RESU_EX = RESU_EXP
95     else:
96         self.DeclareOut( "RESU_EX", RESU_EX )
97         mfact = {'MODE':RESU_EXP}
98         if MODELE_MESURE['NUME_MODE']:
99             mfact.update({'NUME_MODE':MODELE_MESURE['NUME_MODE']})
100         elif MODELE_MESURE['NUME_ORDRE']:
101             mfact.update({'NUME_ORDRE':MODELE_MESURE['NUME_ORDRE']})
102
103         RESU_EX = EXTR_MODE( FILTRE_MODE = mfact )
104
105
106
107     # Projection des modes experimentaux - on passe le mot-clef
108     # RESOLUTION directement à PROJ_MESU_MODAL
109     # ---------------------------------------------------------
110
111     # Mot-clé facteur de résolution
112     mfact = []
113     for m in RESOLUTION:
114         if m['METHODE'] == 'SVD':
115             mfact.append({'METHODE':'SVD','EPS':m['EPS']})
116         if m['METHODE'] == 'LU':
117             mfact.append({'METHODE':'LU'})
118         if m['REGUL'] != 'NON':
119             if m['COEF_PONDER']:
120                 mfact.append({'COEF_PONDER':m['COEF_PONDER']})
121             if m['COEF_PONDER_F']:
122                 mfact.append({'COEF_PONDER_F':m['COEF_PONDER_F']})
123
124     # Paramètres à garder : si on étend des mode_meca, on conserve les
125     # freq propres, amortissements réduits, et masses généralisées. Pour
126     # les dyna_harmo, on conserve les fréquences uniquement
127     if isinstance(RESU_EXP, mode_meca):
128         paras = ('FREQ','AMOR_REDUIT','MASS_GENE',)
129     elif isinstance(RESU_EXP, dyna_harmo):
130         paras = ('FREQ')
131     else:
132         paras = None
133         #"LE MODELE MEDURE DOIT ETRE UN CONCEPT DE TYPE DYNA_HARMO OU MODE_MECA")
134         UTMESS('A','MEIDEE0_1')
135
136
137     try:
138         __PROJ = PROJ_MESU_MODAL(MODELE_CALCUL = _F( BASE=RESU_NX,
139                                                      MODELE=MOD_CALCUL,
140                                                    ),
141                                  MODELE_MESURE = _F( MESURE=RESU_EX,
142                                                      MODELE=MOD_MESURE,
143                                                      NOM_CHAM=NOM_CHAM,
144                                                    ),
145                                  RESOLUTION=mfact,
146                                  NOM_PARA=paras,
147                                  );
148     except Exception, err:
149         raise Exception, err
150
151     # Phase de reconstruction des donnees mesurees sur le maillage
152     # numerique
153     # ------------------------------------------------------------
154     self.DeclareOut( "RESU_ET", RESU_ET )
155     RESU_ET = REST_GENE_PHYS( RESU_GENE  = __PROJ,
156                               MODE_MECA   = RESU_NX,
157                               TOUT_ORDRE  = 'OUI',
158                               NOM_CHAM    = NOM_CHAM);
159
160
161
162     # Restriction des modes mesures etendus sur le maillage capteur
163     # -------------------------------------------------------------
164     self.DeclareOut( "RESU_RD", RESU_RD )
165     refd1 = aster.getvectjev(RESU_EXP.nom.ljust(19)+".REFD")
166     refd2 = aster.getvectjev(RESU_EX.nom.ljust(19)+".REFD")
167
168     nume=None
169     if RESU_EX.REFD.get():
170         tmp = RESU_EX.REFD.get()[3]
171         if tmp.strip() :
172             nume = self.jdc.sds_dict[tmp.strip()]
173     elif NUME_DDL:
174         nume = NUME_DDL
175     if not nume :
176         UTMESS('A','MEIDEE0_5')
177     RESU_RD = PROJ_CHAMP( METHODE    = 'ELEM',
178                           RESULTAT   = RESU_ET,
179                           MODELE_1   = MOD_CALCUL,
180                           MODELE_2   = MOD_MESURE,
181                           NOM_CHAM   = NOM_CHAM,
182                           TOUT_ORDRE = 'OUI',
183                           NUME_DDL   = nume,
184                           VIS_A_VIS  =_F( TOUT_1='OUI',
185                                           TOUT_2='OUI',),
186                           NOM_PARA   = paras,
187                         );
188
189
190     return ier