1 #@ MODIF post_k_trans_ops Macro DATE 31/10/2006 AUTEUR REZETTE C.REZETTE
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())['ABS_CURV'].values()['ABS_CURV'][0:nbno]
118 if nmodtr != n_mode :
119 n_mode = min(nmodtr,n_mode)
120 message = 'NOMBRE DE MODES DIFFERENT ENTRE LA BASE MODALE'
121 message = message +'ET %s : ON PREND LE MINIMUM DES DEUX (%i)\n'%(nomresu,n_mode)
122 UTMESS('A', macro, message)
125 # Traitement des mots clés ORDRE/INST/LIST_INST et LIST_ORDRE
127 l0_inst = aster.getvectjev(nomresu.ljust(19)+'.INST')
128 l0_ord = aster.getvectjev(nomresu.ljust(19)+'.ORDR')
129 nbtrans = len(l0_ord)
130 li = [[l0_ord[i],l0_inst[i]] for i in range(nbtrans)]
131 ln = [[l0_ord[i],i] for i in range(nbtrans)]
132 lo = [[l0_inst[i],l0_ord[i]] for i in range(nbtrans)]
133 li = [(i[0],i[1:]) for i in li]
134 ln = [(i[0],i[1:]) for i in ln]
135 lo = [(i[0],i[1:]) for i in lo]
143 if LIST_ORDRE or NUME_ORDRE :
145 if type(NUME_ORDRE) not in EnumTypes : NUME_ORDRE=(NUME_ORDRE,)
146 ltmp = list(NUME_ORDRE)
148 ltmp = aster.getvectjev(string.ljust(LIST_ORDRE.nom,19)+'.VALE')
152 l_inst.append(d_ins[ord][0])
154 message = 'LE NUMERO D ORDRE %i N APPARTIENT PAS AU RESULTAT %s'%(ord,nomresu)
155 UTMESS('A', macro, message)
156 elif LIST_INST or INST :
157 CRITERE = args['CRITERE']
158 PRECISION = args['PRECISION']
160 if type(INST) not in EnumTypes : INST=(INST,)
163 ltmp = aster.getvectjev(string.ljust(LIST_INST.nom,19)+'.VALE')
165 if CRITERE=='RELATIF' and ins!=0.: match=[x for x in l0_inst if abs((ins-x)/ins)<PRECISION]
166 else : match=[x for x in l0_inst if abs(ins-x)<PRECISION]
168 message = 'PAS D INSTANT TROUVE DANS LA TABLE POUR L INSTANT %f\n'%ins
169 UTMESS('A', macro, message)
171 message = 'PLUSIEURS INSTANTS TROUVES DANS LA TABLE POUR L INSTANT %f\n'%ins
172 UTMESS('A', macro, message)
174 l_inst.append(match[0])
175 l_ord.append(d_ord[match[0]][0])
180 if nbarch ==0 : UTMESS('F', macro, 'AUCUN INSTANT OU NUMERO D ORDRE TROUVE')
187 K1mod = [None]*n_mode*nbno
188 K2mod = [None]*n_mode*nbno
189 K1t = [None]*nbarch*nbno
190 K2t = [None]*nbarch*nbno
192 K3mod = [None]*n_mode*nbno
193 K3t = [None]*nbarch*nbno
202 for x in range(0,nbno) :
203 for k in range(0,n_mode) :
204 K1mod[k*nbno + x] = __kgtheta[k1,k*nbno + x+1]
205 K2mod[k*nbno + x] = __kgtheta[k2,k*nbno + x+1]
206 if F3D : K3mod[k*nbno + x] = __kgtheta[k3,k*nbno + x+1]
208 for num in range(0,nbarch) :
209 K1t[num*nbno + x] = 0.0
210 K2t[num*nbno + x] = 0.0
211 if F3D : K3t[num*nbno + x] = 0.0
212 for k in range(0,n_mode) :
213 num_ord = d_num[l_ord[num]][0]
214 alpha = coef[n_mode*num_ord+k]
215 K1t[num*nbno + x] = K1t[num*nbno + x] + alpha*K1mod[k*nbno + x]
216 K2t[num*nbno + x] = K2t[num*nbno + x] + alpha*K2mod[k*nbno + x]
217 if F3D : K3t[num*nbno + x] = K3t[num*nbno + x] + alpha*K3mod[k*nbno + x]
219 v = aster.__version__
220 titre = 'ASTER %s - CONCEPT CALCULE PAR POST_K_TRANS LE &DATE A &HEURE \n'%v
222 tabout = CREA_TABLE(LISTE = (_F(LISTE_I =l_ord, PARA = 'NUME_ORDRE'),
223 _F(LISTE_R =l_inst, PARA = 'INST'),
224 _F(LISTE_R =K1t, PARA = k1),
225 _F(LISTE_R =K2t, PARA = k2),),
230 for i in range(nbarch) :
231 for j in range(nbno) :
234 tabout = CREA_TABLE(LISTE = (_F(LISTE_I =lo, PARA = 'NUME_ORDRE'),
235 _F(LISTE_R =li, PARA = 'INST'),
236 _F(LISTE_I =range(nbno)*nbarch, PARA ='NUM_PT' ),
237 _F(LISTE_R =labsc*nbarch, PARA = 'ABS_CURV'),
238 _F(LISTE_R =K1t, PARA = k1),
239 _F(LISTE_R =K2t, PARA = k2),
240 _F(LISTE_R =K3t, PARA = k3),),
244 #------------------------------------------------------------------