1 #@ MODIF post_k_trans_ops Macro DATE 07/10/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.
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 # ======================================================================
21 def post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE,
22 INST, LIST_INST,INFO,**args):
24 Ecriture de la macro post_k_trans
29 from Utilitai.Utmess import UTMESS
30 from types import ListType, TupleType
31 from Utilitai.Table import Table, merge
32 EnumTypes = (ListType, TupleType)
34 macro = 'POST_K_TRANS'
36 #------------------------------------------------------------------
37 # On importe les definitions des commandes a utiliser dans la macro
38 CALC_G =self.get_cmd('CALC_G' )
39 IMPR_TABLE =self.get_cmd('IMPR_TABLE' )
40 CREA_TABLE =self.get_cmd('CREA_TABLE' )
42 # La macro compte pour 1 dans la numerotation des commandes
45 # Le concept sortant (de type table_sdaster ou dérivé) est tab
46 self.DeclareOut('tabout', self.sd)
48 #------------------------------------------------------------------
49 TABK = K_MODAL['TABL_K_MODA']
50 F2D = K_MODAL['FOND_FISS']
51 F3D = K_MODAL['FISSURE']
53 # Calcul du tableau des K modaux
56 montit = 'Calcul des K modaux'
57 resumod = K_MODAL['RESU_MODA']
58 thet = K_MODAL['THETA']
62 motscles['THETA'] = []
64 if F2D != None : mcthet['FOND_FISS'] = F2D
65 if thet != None : mcthet['THETA'] = thet
66 if F3D != None : mcthet['FISSURE'] = F3D
67 if K_MODAL['DIRECTION']!=None : mcthet['DIRECTION'] = K_MODAL['DIRECTION']
68 if K_MODAL['DIRE_THETA']!=None: mcthet['DIRE_THETA'] = K_MODAL['DIRE_THETA']
69 if K_MODAL['R_SUP']!=None : mcthet['R_SUP'] = K_MODAL['R_SUP']
70 if K_MODAL['R_SUP_FO']!=None : mcthet['R_SUP_FO'] = K_MODAL['R_SUP_FO']
71 if K_MODAL['R_INF']!=None : mcthet['R_INF'] = K_MODAL['R_INF']
72 if K_MODAL['R_INF_FO']!=None : mcthet['R_INF_FO'] = K_MODAL['R_INF_FO']
73 if K_MODAL['MODULE']!=None : mcthet['MODULE'] = K_MODAL['MODULE']
74 if K_MODAL['MODULE']==None and F2D : mcthet['MODULE'] = 1
75 if K_MODAL['MODULE_FO']!=None : mcthet['MODULE_FO'] = K_MODAL['MODULE_FO']
77 if thet == None and F3D :
78 motscles2['LISSAGE'] = []
79 if K_MODAL['LISSAGE_G'] == None : K_MODAL['LISSAGE_G']='LEGENDRE'
80 if K_MODAL['LISSAGE_THETA'] == None : K_MODAL['LISSAGE_THETA']='LEGENDRE'
81 if K_MODAL['DEGRE'] : K_MODAL['DEGRE'] = 5
82 motscles2['LISSAGE'].append(_F(LISSAGE_G =K_MODAL['LISSAGE_G'],
83 LISSAGE_THETA =K_MODAL['LISSAGE_G'],
84 DEGRE = K_MODAL['DEGRE'] ))
86 __kgtheta = CALC_G( RESULTAT = resumod,
96 # Recuperation du tableau des K modaux
101 #-----------------------------------------
103 # Verification de cohérence sur le nombre de modes
105 # RESULTAT TRANSITOIRE
106 nomresu=RESU_TRANS.nom
107 coef=aster.getvectjev(nomresu.ljust(19)+'.DEPL')
108 nmodtr=aster.getvectjev(nomresu.ljust(19)+'.DESC')[1]
111 n_mode = len((__kgtheta.EXTR_TABLE())['K1'])
114 n_mode = max((__kgtheta.EXTR_TABLE())['NUME_MODE'].values()['NUME_MODE'])
115 nbno = max((__kgtheta.EXTR_TABLE())['NUM_PT'].values()['NUM_PT'])
116 labsc = (__kgtheta.EXTR_TABLE())['ABSC_CURV'].values()['ABSC_CURV'][0:nbno]
118 if nmodtr != n_mode :
119 n_mode = min(nmodtr,n_mode)
120 UTMESS('A','RUPTURE0_50',valk=nomresu,vali=n_mode)
123 # Traitement des mots clés ORDRE/INST/LIST_INST et LIST_ORDRE
125 l0_inst = aster.getvectjev(nomresu.ljust(19)+'.INST')
126 l0_ord = aster.getvectjev(nomresu.ljust(19)+'.ORDR')
127 nbtrans = len(l0_ord)
128 li = [[l0_ord[i],l0_inst[i]] for i in range(nbtrans)]
129 ln = [[l0_ord[i],i] for i in range(nbtrans)]
130 lo = [[l0_inst[i],l0_ord[i]] for i in range(nbtrans)]
131 li = [(i[0],i[1:]) for i in li]
132 ln = [(i[0],i[1:]) for i in ln]
133 lo = [(i[0],i[1:]) for i in lo]
141 if LIST_ORDRE or NUME_ORDRE :
143 if type(NUME_ORDRE) not in EnumTypes : NUME_ORDRE=(NUME_ORDRE,)
144 ltmp = list(NUME_ORDRE)
146 ltmp = aster.getvectjev(string.ljust(LIST_ORDRE.nom,19)+'.VALE')
150 l_inst.append(d_ins[ord][0])
152 UTMESS('A','RUPTURE0_51',vali=ord,valk=nomresu)
153 elif LIST_INST or INST :
154 CRITERE = args['CRITERE']
155 PRECISION = args['PRECISION']
157 if type(INST) not in EnumTypes : INST=(INST,)
160 ltmp = aster.getvectjev(string.ljust(LIST_INST.nom,19)+'.VALE')
162 if CRITERE=='RELATIF' and ins!=0.: match=[x for x in l0_inst if abs((ins-x)/ins)<PRECISION]
163 else : match=[x for x in l0_inst if abs(ins-x)<PRECISION]
165 UTMESS('A','RUPTURE0_38',valr=ins)
167 UTMESS('A','RUPTURE0_39',valr=ins)
169 l_inst.append(match[0])
170 l_ord.append(d_ord[match[0]][0])
175 if nbarch ==0 : UTMESS('F','RUPTURE0_54')
182 K1mod = [None]*n_mode*nbno
183 K2mod = [None]*n_mode*nbno
184 K1t = [None]*nbarch*nbno
185 K2t = [None]*nbarch*nbno
187 K3mod = [None]*n_mode*nbno
188 K3t = [None]*nbarch*nbno
197 for x in range(0,nbno) :
198 for k in range(0,n_mode) :
199 K1mod[k*nbno + x] = __kgtheta[k1,k*nbno + x+1]
200 K2mod[k*nbno + x] = __kgtheta[k2,k*nbno + x+1]
201 if F3D : K3mod[k*nbno + x] = __kgtheta[k3,k*nbno + x+1]
203 for num in range(0,nbarch) :
204 K1t[num*nbno + x] = 0.0
205 K2t[num*nbno + x] = 0.0
206 if F3D : K3t[num*nbno + x] = 0.0
207 for k in range(0,n_mode) :
208 num_ord = d_num[l_ord[num]][0]
209 alpha = coef[n_mode*num_ord+k]
210 K1t[num*nbno + x] = K1t[num*nbno + x] + alpha*K1mod[k*nbno + x]
211 K2t[num*nbno + x] = K2t[num*nbno + x] + alpha*K2mod[k*nbno + x]
212 if F3D : K3t[num*nbno + x] = K3t[num*nbno + x] + alpha*K3mod[k*nbno + x]
214 v = aster.__version__
215 titre = 'ASTER %s - CONCEPT CALCULE PAR POST_K_TRANS LE &DATE A &HEURE \n'%v
217 tabout = CREA_TABLE(LISTE = (_F(LISTE_I =l_ord, PARA = 'NUME_ORDRE'),
218 _F(LISTE_R =l_inst, PARA = 'INST'),
219 _F(LISTE_R =K1t, PARA = k1),
220 _F(LISTE_R =K2t, PARA = k2),),
225 for i in range(nbarch) :
226 for j in range(nbno) :
229 tabout = CREA_TABLE(LISTE = (_F(LISTE_I =lo, PARA = 'NUME_ORDRE'),
230 _F(LISTE_R =li, PARA = 'INST'),
231 _F(LISTE_I =range(nbno)*nbarch, PARA ='NUM_PT' ),
232 _F(LISTE_R =labsc*nbarch, PARA = 'ABSC_CURV'),
233 _F(LISTE_R =K1t, PARA = k1),
234 _F(LISTE_R =K2t, PARA = k2),
235 _F(LISTE_R =K3t, PARA = k3),),
239 #------------------------------------------------------------------