]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA9/Macro/macro_expans_ops.py
Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
[tools/eficas.git] / Aster / Cata / cataSTA9 / Macro / macro_expans_ops.py
1 #@ MODIF macro_expans_ops Macro  DATE 26/03/2008   AUTEUR BODEL C.BODEL 
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_BASE_PHYS = self.get_cmd('REST_BASE_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     NUME_MODE_NUM = MODELE_CALCUL['NUME_MODE']
57     NUME_MODE_EXP = MODELE_MESURE['NUME_MODE']
58     
59     RESU_NUM = MODELE_CALCUL['BASE']
60     RESU_EXP = MODELE_MESURE['MESURE']
61
62     MOD_CALCUL = MODELE_CALCUL['MODELE']
63     MOD_MESURE = MODELE_MESURE['MODELE']
64
65     NOM_CHAM = MODELE_MESURE['NOM_CHAM']
66
67     # Extraction des modes numériques
68     # -------------------------------
69     self.DeclareOut( "RESU_NX", RESU_NX )
70     if not NUME_MODE_NUM:
71         RESU_NX = RESU_NUM
72     else:
73         RESU_NX = EXTR_MODE( FILTRE_MODE=_F( MODE=RESU_NUM,
74                                              NUME_MODE=NUME_MODE_NUM ) )
75
76     
77     # Extraction des modes expérimentaux
78     # ----------------------------------
79     self.DeclareOut( "RESU_EX", RESU_EX )
80     if not NUME_MODE_EXP:
81         RESU_EX = RESU_EXP
82     else:
83         RESU_EX = EXTR_MODE( FILTRE_MODE=_F( MODE=RESU_EXP,
84                                              NUME_MODE=NUME_MODE_EXP ) )
85
86
87     
88     # Projection des modes experimentaux - on passe le mot-clef
89     # RESOLUTION directement à PROJ_MESU_MODAL
90     # ---------------------------------------------------------
91
92     # Mot-clé facteur de résolution
93     mfact = []
94     for m in RESOLUTION:
95         if m['METHODE'] == 'SVD':
96             mfact.append({'METHODE':'SVD','EPS':m['EPS']})
97         if m['METHODE'] == 'LU':
98             mfact.append({'METHODE':'LU'})
99         if m['REGUL'] != 'NON':
100             if m['COEF_PONDER']:
101                 mfact.append({'COEF_PONDER':m['COEF_PONDER']})
102             if m['COEF_PONDER_F']:
103                 mfact.append({'COEF_PONDER_F':m['COEF_PONDER_F']})
104
105     # Paramètres à garder : si on étend des mode_meca, on conserve les
106     # freq propres, amortissements réduits, et masses généralisées. Pour
107     # les dyna_harmo, on conserve les fréquences uniquement
108     if isinstance(RESU_EXP, mode_meca):
109         paras = ('FREQ','AMOR_REDUIT','MASS_GENE',)
110     elif isinstance(RESU_EXP, dyna_harmo):
111         paras = ('FREQ')
112     else:
113         paras = None
114         #"LE MODELE MEDURE DOIT ETRE UN CONCEPT DE TYPE DYNA_HARMO OU MODE_MECA")
115         UTMESS('A','MEIDEE0_1')
116             
117     
118     try:
119         __PROJ = PROJ_MESU_MODAL(MODELE_CALCUL = _F( BASE=RESU_NX,
120                                                      MODELE=MOD_CALCUL,
121                                                    ),
122                                  MODELE_MESURE = _F( MESURE=RESU_EX,
123                                                      MODELE=MOD_MESURE,
124                                                      NOM_CHAM=NOM_CHAM,
125                                                    ),
126                                  RESOLUTION=mfact,
127                                  NOM_PARA=paras,
128                                  );
129     except Exception, err:
130         raise Exception, err
131     
132     # Phase de reconstruction des donnees mesurees sur le maillage
133     # numerique
134     # ------------------------------------------------------------
135     self.DeclareOut( "RESU_ET", RESU_ET )
136     RESU_ET = REST_BASE_PHYS( RESU_GENE  = __PROJ,
137                               MODE_MECA   = RESU_NX,
138                               TOUT_ORDRE  = 'OUI',
139                               NOM_CHAM    = NOM_CHAM);
140
141
142     
143     # Restriction des modes mesures etendus sur le maillage capteur
144     # -------------------------------------------------------------
145     self.DeclareOut( "RESU_RD", RESU_RD )
146     refd1 = aster.getvectjev(RESU_EXP.nom.ljust(19)+".REFD")
147     refd2 = aster.getvectjev(RESU_EX.nom.ljust(19)+".REFD")
148
149     if RESU_EX.REFD.get():
150         tmp = RESU_EX.REFD.get()[3]
151         nume = self.jdc.sds_dict[tmp.strip()]
152     elif NUME_DDL:
153         nume = NUME_DDL
154     else:
155         UTMESS('A','MEIDEE0_5')
156     RESU_RD = PROJ_CHAMP( METHODE    = 'ELEM',
157                           RESULTAT   = RESU_ET,
158                           MODELE_1   = MOD_CALCUL,
159                           MODELE_2   = MOD_MESURE,
160                           NOM_CHAM   = NOM_CHAM,
161                           TOUT_ORDRE = 'OUI',
162                           NUME_DDL   = nume,
163                           VIS_A_VIS  =_F( TOUT_1='OUI',
164                                           TOUT_2='OUI',),
165                           NOM_PARA   = paras,
166                         );
167
168    
169     return ier