]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA8/Macro/macro_matr_ajou_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA8 / Macro / macro_matr_ajou_ops.py
1 #@ MODIF macro_matr_ajou_ops Macro  DATE 05/09/2005   AUTEUR DURAND C.DURAND 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2004  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 def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATION,MODE_MECA,DEPL_IMPO,
23                              NUME_DDL_GENE,MODELE_GENE,MATR_MASS_AJOU,MATR_AMOR_AJOU,MATR_RIGI_AJOU,
24                              NOEUD_DOUBLE,FLUIDE,DDL_IMPO,DIST_REFE,SOLVEUR,INFO,AVEC_MODE_STAT,
25                              MODE_STAT,MONO_APPUI,
26                              FORC_AJOU,ECOULEMENT,**args):
27   """
28      Ecriture de la macro MACRO_MATR_AJOU
29   """
30   from Accas import _F
31   import types
32   import aster
33   from Utilitai.Utmess     import UTMESS
34   ier=0
35   
36   # On importe les definitions des commandes a utiliser dans la macro
37   DEFI_MATERIAU      =self.get_cmd('DEFI_MATERIAU')
38   AFFE_MATERIAU      =self.get_cmd('AFFE_MATERIAU')
39   AFFE_MODELE        =self.get_cmd('AFFE_MODELE')
40   AFFE_CHAR_THER     =self.get_cmd('AFFE_CHAR_THER')
41   CALC_MATR_AJOU     =self.get_cmd('CALC_MATR_AJOU')
42   THER_LINEAIRE      =self.get_cmd('THER_LINEAIRE')
43   CALC_FORC_AJOU     =self.get_cmd('CALC_FORC_AJOU')
44
45   # La macro compte pour 1 dans la numerotation des commandes
46   self.set_icmd(1)
47  
48   if len(FLUIDE)==1 :
49      message=         '<I> <MACRO_MATR_AJOU> tout le domaine fluide specifie dans GROUP_MA_INTERF et GROUP_MA_FLUIDE \n'
50      message=message+ '                      sera affecte par la masse volumique RHO = '+str(FLUIDE['RHO'])+' \n'
51      aster.affiche('MESSAGE',message)
52      if FLUIDE['GROUP_MA']!=None :
53        message=         '<I> <MACRO_MATR_AJOU> cas fluide simple : le group_ma dans lequel vous affectez la masse \n'
54        message=message+ 'volumique RHO doit etre la reunion de GROUP_MA_INTERF et GROUP_MA_FLUIDE. \n'
55        aster.affiche('MESSAGE',message)
56   else :
57      for flu in FLUIDE :
58          if flu['GROUP_MA']==None :
59             UTMESS('F', "MACRO_MATR_AJOU", "cas fluides multiples : precisez le GROUP_MA dans lequel vous affectez  la masse volumique RHO")
60
61   IOCFLU=len(FLUIDE)
62
63 #  ---------------------------------------------------------------
64 #  definition du materiau fluide par caracteristique
65 #  thermique equivalente
66
67 # CAS FLUIDE SIMPLE
68   if IOCFLU==1 :
69      __NOMMAT=DEFI_MATERIAU( THER = _F( LAMBDA = 1.0,
70                                         RHO_CP = FLUIDE[0]['RHO']))
71      __NOMCMA=AFFE_MATERIAU( MAILLAGE = MAILLAGE,
72                              AFFE     = _F( GROUP_MA = (GROUP_MA_FLUIDE,GROUP_MA_INTERF),
73                                             MATER    =  __NOMMAT),    )
74
75 #  ---------------------------------------------------------------
76 #  cas fluides multiples
77   else :
78      affmat=[]
79      for flu in FLUIDE:
80         __NOMMAT=DEFI_MATERIAU( THER = _F( LAMBDA = 1.0,
81                                            RHO_CP = flu['RHO']))
82         mfact=_F(GROUP_MA=flu['GROUP_MA'],MATER=__NOMMAT)
83         affmat.append(mfact)
84
85      __NOMCMA=AFFE_MATERIAU( MAILLAGE = MAILLAGE,
86                              AFFE     = affmat  )
87
88 #  ---------------------------------------------------------------
89 #  commande AFFE_MODELE modele fluide
90   __NOMFLU=AFFE_MODELE( MAILLAGE = MAILLAGE,
91                         AFFE     = _F( GROUP_MA     = (GROUP_MA_FLUIDE,GROUP_MA_INTERF),
92                                        MODELISATION = MODELISATION,
93                                        PHENOMENE    = 'THERMIQUE'    ), )
94
95 #  ---------------------------------------------------------------
96 #  commande AFFE_MODELE modele interface
97   __NOMINT=AFFE_MODELE( MAILLAGE = MAILLAGE,
98                         AFFE     = _F( GROUP_MA     = GROUP_MA_INTERF,
99                                        MODELISATION = MODELISATION,
100                                        PHENOMENE    = 'THERMIQUE'    ), )
101
102 #  ---------------------------------------------------------------
103 #  commande AFFE_CHAR_THER condition de pression imposee
104 #  en un point ou un groupe du fluide
105   affimp=[]
106   nflui=0
107   for DDL in DDL_IMPO :
108      if DDL['PRES_FLUIDE']!=None :
109         nflui=nflui+1
110         if DDL['NOEUD']   !=None : mfact=_F(NOEUD   =DDL['NOEUD'],   TEMP=DDL['PRES_FLUIDE'])
111         if DDL['GROUP_NO']!=None : mfact=_F(GROUP_NO=DDL['GROUP_NO'],TEMP=DDL['PRES_FLUIDE'])
112         affimp.append(mfact)
113   if nflui==0:
114      UTMESS('F', "MACRO_MATR_AJOU", "PRES_FLUIDE obligatoire une fois")
115
116   __CHARGE=AFFE_CHAR_THER( MODELE    = __NOMFLU,
117                            TEMP_IMPO = affimp )
118
119 #  ---------------------------------------------------------------
120 #  calcul des masses, rigidites et amortissements ajoutes en theorie
121 #  potentielle
122 #  commande CALC_MATR_AJOU, calcul de la masse ajoutee
123
124   if MATR_MASS_AJOU!=None :
125      self.DeclareOut('MASSAJ',MATR_MASS_AJOU)
126      solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
127      mostcles={}
128      if   NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
129      if   INFO         !=None : mostcles['INFO']          =INFO
130      if   MODE_MECA    !=None : mostcles['MODE_MECA']     =MODE_MECA
131      elif DEPL_IMPO    !=None : mostcles['CHAM_NO']       =DEPL_IMPO
132      elif MODELE_GENE  !=None :
133                                 mostcles['MODELE_GENE']   =MODELE_GENE
134                                 mostcles['AVEC_MODE_STAT']=AVEC_MODE_STAT
135                                 mostcles['DIST_REFE']     =DIST_REFE
136      if   NOEUD_DOUBLE !=None : mostcles['NOEUD_DOUBLE']  =NOEUD_DOUBLE
137
138      MASSAJ = CALC_MATR_AJOU(MODELE_FLUIDE    = __NOMFLU,
139                              MODELE_INTERFACE = __NOMINT,
140                              CHARGE           = __CHARGE,
141                              CHAM_MATER       = __NOMCMA,
142                              OPTION           = 'MASS_AJOU',
143                              SOLVEUR          = solveur,
144                              **mostcles)
145
146 #  ---------------------------------------------------------------
147 #  calcul de l amortissement ajoute
148   if (MATR_AMOR_AJOU!=None ) or (MATR_RIGI_AJOU!=None ):
149
150 #  ---------------------------------------------------------------
151 #  on definit un nouveau modele fluide pour calculer
152 #  le potentiel stationnaire - AFFE_MODELE
153      grma=[GROUP_MA_FLUIDE,]
154      if ECOULEMENT!=None :
155         grma.append(ECOULEMENT['GROUP_MA_1'])
156         grma.append(ECOULEMENT['GROUP_MA_2'])
157      __NOFLUI=AFFE_MODELE( MAILLAGE = MAILLAGE,
158                            AFFE     = _F( GROUP_MA     = grma,
159                                           MODELISATION = MODELISATION,
160                                           PHENOMENE    = 'THERMIQUE'    ), )
161      affimp=[]
162      for DDL in DDL_IMPO :
163         if DDL['PRES_SORTIE']!=None :
164            if DDL['NOEUD']   !=None : mfact=_F(NOEUD   =DDL['NOEUD'],   TEMP=DDL['PRES_SORTIE'])
165            if DDL['GROUP_NO']!=None : mfact=_F(GROUP_NO=DDL['GROUP_NO'],TEMP=DDL['PRES_SORTIE'])
166            affimp.append(mfact)
167
168      affecl=[]
169      for ECL in ECOULEMENT :
170            mfact=_F(GROUP_MA=ECL['GROUP_MA_1'],FLUN=ECL['VNOR_1'])
171            affecl.append(mfact)
172            mfact=_F(GROUP_MA=ECL['GROUP_MA_2'],FLUN=ECL['VNOR_2'])
173            affecl.append(mfact)
174      __CHARG2=AFFE_CHAR_THER( MODELE    = __NOFLUI,
175                               TEMP_IMPO = affimp ,
176                               FLUX_REP  = affecl )
177
178      __POTEN = THER_LINEAIRE( MODELE     = __NOFLUI,
179                               CHAM_MATER = __NOMCMA ,
180                               EXCIT      = _F( CHARGE = __CHARG2 ) )
181
182 #  ---------------------------------------------------------------
183 #  calcul amortissement proprement dit
184   if MATR_AMOR_AJOU!=None :
185      self.DeclareOut('AMORAJ',MATR_AMOR_AJOU)
186      solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
187      mostcles={}
188      if   NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
189      if   INFO         !=None : mostcles['INFO']          =INFO
190      if   MODE_MECA    !=None : mostcles['MODE_MECA']     =MODE_MECA
191      elif DEPL_IMPO    !=None : mostcles['CHAM_NO']       =DEPL_IMPO
192      else :
193        UTMESS('F', "MACRO_MATR_AJOU", "amortissement ajoute sur modele generalise non encore implante")
194
195      AMORAJ = CALC_MATR_AJOU(MODELE_FLUIDE    = __NOMFLU,
196                              MODELE_INTERFACE = __NOMINT,
197                              CHARGE           = __CHARGE,
198                              CHAM_MATER       = __NOMCMA,
199                              OPTION           = 'AMOR_AJOU',
200                              SOLVEUR          = solveur,
201                              POTENTIEL        = __POTEN,
202                              **mostcles)
203
204 #  ---------------------------------------------------------------
205 #  calcul de la rigidite ajoutee
206   if MATR_RIGI_AJOU!=None :
207      self.DeclareOut('RIGIAJ',MATR_RIGI_AJOU)
208      solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
209      mostcles={}
210      if   NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
211      if   INFO         !=None : mostcles['INFO']          =INFO
212      if   MODE_MECA    !=None : mostcles['MODE_MECA']     =MODE_MECA
213      elif DEPL_IMPO    !=None : mostcles['CHAM_NO']       =DEPL_IMPO
214      else :
215        UTMESS('F', "MACRO_MATR_AJOU", "rigidite ajoute sur modele generalise non encore implante")
216
217      RIGIAJ = CALC_MATR_AJOU(MODELE_FLUIDE    = __NOMFLU,
218                              MODELE_INTERFACE = __NOMINT,
219                              CHARGE           = __CHARGE,
220                              CHAM_MATER       = __NOMCMA,
221                              OPTION           = 'RIGI_AJOU',
222                              SOLVEUR          = solveur,
223                              POTENTIEL        = __POTEN,
224                              **mostcles)
225
226 #  ---------------------------------------------------------------
227 #  boucle sur le nombre de vecteurs a projeter, commande CALC_FORC_AJOU
228   if FORC_AJOU!=None :
229      for FORCAJ in FORC_AJOU:
230        self.DeclareOut('VECTAJ',FORCAJ['VECTEUR'])
231        solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
232        mostcles={}
233        if   NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
234        if   MODE_MECA    !=None : mostcles['MODE_MECA']     =MODE_MECA
235        elif MODELE_GENE  !=None :
236                                   mostcles['MODELE_GENE']   =MODELE_GENE
237                                   mostcles['AVEC_MODE_STAT']=AVEC_MODE_STAT
238                                   mostcles['DIST_REFE']     =DIST_REFE
239        if   NOEUD_DOUBLE !=None : mostcles['NOEUD_DOUBLE']  =NOEUD_DOUBLE
240        if   MODE_STAT    !=None :
241          mostcles['MODE_STAT']                                =MODE_STAT
242          if FORCAJ['NOEUD']    !=None : mostcles['NOEUD']     =FORCAJ['NOEUD']
243          if FORCAJ['GROUP_NO'] !=None : mostcles['GROUP_NO']  =FORCAJ['GROUP_NO']
244        else                     :
245                                   mostcles['MONO_APPUI']    =MONO_APPUI
246
247        VECTAJ = CALC_FORC_AJOU(DIRECTION        = FORCAJ['DIRECTION'],
248                                MODELE_FLUIDE    = __NOMFLU,
249                                MODELE_INTERFACE = __NOMINT,
250                                CHARGE           = __CHARGE,
251                                CHAM_MATER       = __NOMCMA,
252                                SOLVEUR          = solveur,
253                                **mostcles)
254
255
256   return ier