1 #@ MODIF defi_inte_spec_ops Macro DATE 16/10/2007 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 # ======================================================================
22 if arg[0]=='RI' : return complex(arg[1],arg[2])
23 if arg[0]=='MP' : return complex(arg[1]*cos(arg[2]),arg[1]*sin(arg[2]))
25 def defi_inte_spec_ops(self,DIMENSION,PAR_FONCTION,KANAI_TAJIMI,
26 CONSTANT,TITRE,INFO,**args):
27 # ------------------------------------------------------------------
28 # Définition d'une matrice interspectrale
29 # à partir de fonctions complexes
32 from types import ListType, TupleType
33 EnumTypes = (ListType, TupleType)
35 from Utilitai.Utmess import UTMESS
38 commande='DEFI_INTE_SPEC'
41 # La macro compte pour 1 dans la numerotation des commandes
44 # Le concept sortant (de type table_sdaster ou dérivé) est tab
45 self.DeclareOut('tabout', self.sd)
47 # On importe les definitions des commandes a utiliser dans la macro
48 # Le nom de la variable doit etre obligatoirement le nom de la commande
49 CREA_TABLE = self.get_cmd('CREA_TABLE')
50 CALC_TABLE = self.get_cmd('CALC_TABLE')
51 DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
55 if PAR_FONCTION==None : PAR_FONCTION=[]
56 if KANAI_TAJIMI==None : KANAI_TAJIMI=[]
57 if CONSTANT ==None : CONSTANT =[]
59 nfntot = len(PAR_FONCTION)+len(KANAI_TAJIMI)+len(CONSTANT)
60 dimh = (DIMENSION*(DIMENSION+1))/2
62 UTMESS('F','SPECTRAL0_1')
65 for occ in PAR_FONCTION : l_f.append(('PAR_FONCTION',occ))
66 for occ in KANAI_TAJIMI : l_f.append(('KANAI_TAJIMI',occ))
67 for occ in CONSTANT : l_f.append(('CONSTANT' ,occ))
69 if occ[0]!='PAR_FONCTION' and occ[1]['FREQ_MAX']<occ[1]['FREQ_MIN'] :
70 UTMESS('F','SPECTRAL0_2',valk=occ[0])
71 l_is=[occ[1]['NUME_ORDRE_I'] for occ in l_f]
72 l_js=[occ[1]['NUME_ORDRE_J'] for occ in l_f]
76 #--- pour une matrice hermitienne ---
77 l_ih=[k*(DIMENSION-k+1) for k in range(1,DIMENSION+1)]
78 l_jh=[k*k for k in range(1,DIMENSION+1)]
81 if ((iis!=ih) or (ijs!=jh)) :
82 UTMESS('F','SPECTRAL0_3')
84 #--- Construction de la liste de fonctions complexes
90 if occ[0]=='PAR_FONCTION' :
91 l_fc.append(occ[1]['FONCTION'].nom)
93 #--- KANAI_TAJIMI et CONSTANT
95 if occ[0] in ('KANAI_TAJIMI','CONSTANT') :
96 if occ[1]['VALE_R']!=None :
99 elif occ[1]['VALE_C']!=None :
100 cmpl=tocomplex(occ[1]['VALE_C'])
106 x1=Numeric.arange(occ[1]['FREQ_MIN'],occ[1]['FREQ_MAX'],occ[1]['PAS'])
107 x1=x1.tolist()+[occ[1]['FREQ_MAX'],]
109 for absc in x1 : valc=valc+[absc,valr,vali]
113 if occ[0]=='KANAI_TAJIMI' :
114 amor = occ[1]['AMOR_REDUIT']
115 frqmoy = occ[1]['FREQ_MOY']
116 x11 =Numeric.array([4*(amor**2)*(frqmoy**2)*FREQ**2 \
119 denom=Numeric.array([ (frqmoy**2-FREQ**2)**2 \
122 g0=Numeric.array([valr]*len(denom))
125 for i in range(len(x1)): valc=valc+[x1[i],g0[i],0.]
126 if occ[0] in ('KANAI_TAJIMI','CONSTANT') :
127 _f=DEFI_FONCTION(PROL_GAUCHE=occ[1]['PROL_GAUCHE'],
128 PROL_DROITE=occ[1]['PROL_DROITE'],
129 INTERPOL =occ[1]['INTERPOL'],
136 mcfact.append(_F(PARA='NOM_CHAM' ,LISTE_K='DSP' ))
137 mcfact.append(_F(PARA='OPTION' ,LISTE_K='TOUT' ))
138 mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(DIMENSION,) ))
139 tabout=CREA_TABLE(LISTE=mcfact, TITRE='',
140 TYPE_TABLE='TABLE_FONCTION')
142 mcfact.append(_F(PARA='NUME_ORDRE_I' ,LISTE_I=l_is ))
143 mcfact.append(_F(PARA='NUME_ORDRE_J' ,LISTE_I=l_js ))
144 mcfact.append(_F(PARA='FONCTION_C' ,LISTE_K=l_fc ,TYPE_K='K24' ))
145 __l_fonc=CREA_TABLE(LISTE=mcfact, TITRE='')
146 tabout=CALC_TABLE(reuse=tabout,TABLE=tabout,
147 TITRE=self.sd.nom+' : interspectre obtenu par DEFI_INTE_SPEC',
148 ACTION=_F(OPERATION='COMB',TABLE=__l_fonc,))