]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA7/Macro/macro_matr_ajou_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA7 / Macro / macro_matr_ajou_ops.py
1 #@ MODIF macro_matr_ajou_ops Macro  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
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   ier=0
33   
34   # On importe les definitions des commandes a utiliser dans la macro
35   DEFI_MATERIAU      =self.get_cmd('DEFI_MATERIAU')
36   AFFE_MATERIAU      =self.get_cmd('AFFE_MATERIAU')
37   AFFE_MODELE        =self.get_cmd('AFFE_MODELE')
38   AFFE_CHAR_THER     =self.get_cmd('AFFE_CHAR_THER')
39   CALC_MATR_AJOU     =self.get_cmd('CALC_MATR_AJOU')
40   THER_LINEAIRE      =self.get_cmd('THER_LINEAIRE')
41   CALC_FORC_AJOU     =self.get_cmd('CALC_FORC_AJOU')
42
43   # La macro compte pour 1 dans la numerotation des commandes
44   self.set_icmd(1)
45  
46   if len(FLUIDE)==1 :
47      print '<I> <MACRO_MATR_AJOU> tout le domaine fluide specifie dans GROUP_MA_INTERF et GROUP_MA_FLUIDE'
48      print '                      sera affecte par la masse volumique RHO = ',FLUIDE['RHO']
49      if FLUIDE['GROUP_MA']!=None :
50        print '<I> <MACRO_MATR_AJOU> cas fluide simple : le group_ma dans lequel vous affectez la masse'
51        print 'volumique RHO doit etre la reunion de GROUP_MA_INTERF et GROUP_MA_FLUIDE.'
52   else :
53      for flu in FLUIDE :
54          if flu['GROUP_MA']==None :
55             self.cr.fatal("<F> <MACRO_MATR_AJOU> cas fluides multiples : precisez le GROUP_MA dans lequel vous affectez  la masse volumique RHO.")
56             ier=ier+1
57             return ier
58
59   IOCFLU=len(FLUIDE)
60
61 #  ---------------------------------------------------------------
62 #  definition du materiau fluide par caracteristique
63 #  thermique equivalente
64
65 # CAS FLUIDE SIMPLE
66   if IOCFLU==1 :
67      __NOMMAT=DEFI_MATERIAU( THER = _F( LAMBDA = 1.0,
68                                         RHO_CP = FLUIDE[0]['RHO']))
69      __NOMCMA=AFFE_MATERIAU( MAILLAGE = MAILLAGE,
70                              AFFE     = _F( GROUP_MA = (GROUP_MA_FLUIDE,GROUP_MA_INTERF),
71                                             MATER    =  __NOMMAT),    )
72
73 #  ---------------------------------------------------------------
74 #  cas fluides multiples
75   else :
76      affmat=[]
77      for flu in FLUIDE:
78         __NOMMAT=DEFI_MATERIAU( THER = _F( LAMBDA = 1.0,
79                                            RHO_CP = flu['RHO']))
80         mfact=_F(GROUP_MA=flu['GROUP_MA'],MATER=__NOMMAT)
81         affmat.append(mfact)
82
83      __NOMCMA=AFFE_MATERIAU( MAILLAGE = MAILLAGE,
84                              AFFE     = affmat  )
85
86 #  ---------------------------------------------------------------
87 #  commande AFFE_MODELE modele fluide
88   __NOMFLU=AFFE_MODELE( MAILLAGE = MAILLAGE,
89                         AFFE     = _F( GROUP_MA     = (GROUP_MA_FLUIDE,GROUP_MA_INTERF),
90                                        MODELISATION = MODELISATION,
91                                        PHENOMENE    = 'THERMIQUE'    ), )
92
93 #  ---------------------------------------------------------------
94 #  commande AFFE_MODELE modele interface
95   __NOMINT=AFFE_MODELE( MAILLAGE = MAILLAGE,
96                         AFFE     = _F( GROUP_MA     = GROUP_MA_INTERF,
97                                        MODELISATION = MODELISATION,
98                                        PHENOMENE    = 'THERMIQUE'    ), )
99
100 #  ---------------------------------------------------------------
101 #  commande AFFE_CHAR_THER condition de pression imposee
102 #  en un point ou un groupe du fluide
103   affimp=[]
104   nflui=0
105   for DDL in DDL_IMPO :
106      if DDL['PRES_FLUIDE']!=None :
107         nflui=nflui+1
108         if DDL['NOEUD']   !=None : mfact=_F(NOEUD   =DDL['NOEUD'],   TEMP=DDL['PRES_FLUIDE'])
109         if DDL['GROUP_NO']!=None : mfact=_F(GROUP_NO=DDL['GROUP_NO'],TEMP=DDL['PRES_FLUIDE'])
110         affimp.append(mfact)
111   if nflui==0:
112      self.cr.fatal("<F> <MACRO_MATR_AJOU> PRES_FLUIDE obligatoire une fois")
113      ier=ier+1
114      return ier
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        self.cr.fatal("<F> <MACRO_MATR_AJOU> amortissement ajoute sur modele generalise non encore implante")
194        ier=ier+1
195        return ier
196
197      AMORAJ = CALC_MATR_AJOU(MODELE_FLUIDE    = __NOMFLU,
198                              MODELE_INTERFACE = __NOMINT,
199                              CHARGE           = __CHARGE,
200                              CHAM_MATER       = __NOMCMA,
201                              OPTION           = 'AMOR_AJOU',
202                              SOLVEUR          = solveur,
203                              POTENTIEL        = __POTEN,
204                              **mostcles)
205
206 #  ---------------------------------------------------------------
207 #  calcul de la rigidite ajoutee
208   if MATR_RIGI_AJOU!=None :
209      self.DeclareOut('RIGIAJ',MATR_RIGI_AJOU)
210      solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
211      mostcles={}
212      if   NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
213      if   INFO         !=None : mostcles['INFO']          =INFO
214      if   MODE_MECA    !=None : mostcles['MODE_MECA']     =MODE_MECA
215      elif DEPL_IMPO    !=None : mostcles['CHAM_NO']       =DEPL_IMPO
216      else :
217        self.cr.fatal("<F> <MACRO_MATR_AJOU> rigidite ajoutee sur modele generalise non encore implante")
218        ier=ier+1
219        return ier
220
221      RIGIAJ = CALC_MATR_AJOU(MODELE_FLUIDE    = __NOMFLU,
222                              MODELE_INTERFACE = __NOMINT,
223                              CHARGE           = __CHARGE,
224                              CHAM_MATER       = __NOMCMA,
225                              OPTION           = 'RIGI_AJOU',
226                              SOLVEUR          = solveur,
227                              POTENTIEL        = __POTEN,
228                              **mostcles)
229
230 #  ---------------------------------------------------------------
231 #  boucle sur le nombre de vecteurs a projeter, commande CALC_FORC_AJOU
232   if FORC_AJOU!=None :
233      for FORCAJ in FORC_AJOU:
234        self.DeclareOut('VECTAJ',FORCAJ['VECTEUR'])
235        solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
236        mostcles={}
237        if   NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
238        if   MODE_MECA    !=None : mostcles['MODE_MECA']     =MODE_MECA
239        elif MODELE_GENE  !=None :
240                                   mostcles['MODELE_GENE']   =MODELE_GENE
241                                   mostcles['AVEC_MODE_STAT']=AVEC_MODE_STAT
242                                   mostcles['DIST_REFE']     =DIST_REFE
243        if   NOEUD_DOUBLE !=None : mostcles['NOEUD_DOUBLE']  =NOEUD_DOUBLE
244        if   MODE_STAT    !=None :
245          mostcles['MODE_STAT']                                =MODE_STAT
246          if FORCAJ['NOEUD']    !=None : mostcles['NOEUD']     =FORCAJ['NOEUD']
247          if FORCAJ['GROUP_NO'] !=None : mostcles['GROUP_NO']  =FORCAJ['GROUP_NO']
248        else                     :
249                                   mostcles['MONO_APPUI']    =MONO_APPUI
250
251        VECTAJ = CALC_FORC_AJOU(DIRECTION        = FORCAJ['DIRECTION'],
252                                MODELE_FLUIDE    = __NOMFLU,
253                                MODELE_INTERFACE = __NOMINT,
254                                CHARGE           = __CHARGE,
255                                CHAM_MATER       = __NOMCMA,
256                                SOLVEUR          = solveur,
257                                **mostcles)
258
259
260   return ier