1 #@ MODIF lire_inte_spec_ops Macro DATE 26/03/2008 AUTEUR BODEL C.BODEL
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.
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 lire_inte_spec_ops(self,
37 from math import cos,sin,sqrt
38 from Utilitai.Utmess import UTMESS
39 from Utilitai.UniteAster import UniteAster
40 # On importe les definitions des commandes a utiliser dans la macro
41 DEFI_FONCTION =self.get_cmd('DEFI_FONCTION')
42 CREA_TABLE =self.get_cmd('CREA_TABLE')
44 # La macro compte pour 1 dans la numerotation des commandes
46 nompro='LIRE_INTE_SPEC'
48 # Lecture de la fonction dans un fichier d unité logique UNITE
51 if not os.path.isfile(nomfich):
52 UTMESS('F','SPECTRAL0_4',valk=nomfich)
53 file=open(nomfich,'r')
59 # fabrication d'une liste de data sets 58
60 list_fonc = texte.split(' -1')
62 for ind_fonc in range(len(list_fonc)):
64 tmp = list_fonc[j].split()
72 nb_fonc = len(list_fonc)
74 UTMESS('F', 'SPECTRAL0_9')
81 for ind_fonc in range(nb_fonc):
82 # Extraction des en-tete : nom des noeuds, composantes (=ddl), de leur sens
83 fonc = list_fonc[ind_fonc]
84 ligne = fonc.split('\n')
86 record_6 = ligne[7].split()
87 if record_6[0] != '2' and record_6[0] != '3' and record_6[0] != '9' :
88 UTMESS('F', 'SPECTRAL0_10')
89 nono = record_6[4] # nom du noeud
90 nuno = int(record_6[5]) # numero
91 ddlno = float(record_6[6])/10 # DDL
92 noref = record_6[7] # nom du noeud de reference
93 nuref = int(record_6[8]) # numero
94 ddlref = float(record_6[9])/10 # DDL
95 # On traduit les ddl "chiffres" en vrais ddl. Avec le sens des capteurs.
96 sens_no,ddl_no = comp(ddlno)
97 sens_ref,ddl_ref = comp(ddlref)
98 signe = sens_no*sens_ref
100 # On ne garde que la triang sup de la matrice inter-spectrale
102 crit2 = nuref + ddlref
105 record_7 = ligne[8].split()
106 nbpairs = int(record_7[1])
108 UTMESS('F', 'SPECTRAL0_11')
109 f0 = float(record_7[3])
110 df = float(record_7[4])
113 liste = fonc.split('\n')
115 for ind in range(13):
117 for ind_lign in range(len(liste)):
118 valeurs = valeurs + liste[ind_lign]
119 tmp = valeurs.split()
120 valeurs = [signe*float(tmp[ind]) for ind in range(len(tmp))]
124 for ind_freq in range(nbpairs):
126 liste.append(valeurs[2*ind_freq])
127 liste.append(valeurs[2*ind_freq+1])
130 # création de la fonction ASTER :
131 _fonc=DEFI_FONCTION( NOM_PARA = NOM_PARA,
133 PROL_DROITE= PROL_DROITE,
134 PROL_GAUCHE= PROL_GAUCHE,
139 l_fonc.append(_fonc.nom) # Liste des fonctions
140 l_noi.append('N'+str(nuno)) # Liste des noeuds de mesure
141 l_cmpi.append(ddl_no) # DDL associes
142 l_noj.append('N'+str(nuref)) # Liste des noeuds de ref
143 l_cmpj.append(ddl_ref) # DDL associes
145 # Verification a posteriori de la dimension de l'inter-spectre
146 tmp = 0.5*(-1+sqrt(1+8*len(l_fonc)))
148 nb_fonc = 0.5*dim*(dim+1)
151 UTMESS('F', 'SPECTRAL0_6')
155 mcfact.append(_F(PARA='NOM_CHAM' ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,)))
156 mcfact.append(_F(PARA='OPTION' ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,)))
157 mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(dim) ,NUME_LIGN=(1,)))
158 mcfact.append(_F(PARA='NOEUD_I' ,LISTE_K=l_noi ,NUME_LIGN=range(2,nb_fonc+2)))
159 mcfact.append(_F(PARA='NOM_CMP_I' ,LISTE_K=l_cmpi ,NUME_LIGN=range(2,nb_fonc+2)))
160 mcfact.append(_F(PARA='NOEUD_J' ,LISTE_K=l_noj ,NUME_LIGN=range(2,nb_fonc+2)))
161 mcfact.append(_F(PARA='NOM_CMP_J' ,LISTE_K=l_cmpj ,NUME_LIGN=range(2,nb_fonc+2)))
162 mcfact.append(_F(PARA='FONCTION_C' ,LISTE_K=l_fonc ,NUME_LIGN=range(2,nb_fonc+2)))
163 self.DeclareOut('tab_inte',self.sd)
164 tab_inte=CREA_TABLE(LISTE=mcfact,
166 TYPE_TABLE='TABLE_FONCTION')
169 elif FORMAT == 'ASTER':
170 list_fonc=texte.split('FONCTION_C')
171 entete=list_fonc.pop(0)
173 entete=entete[entete.index('DIM'):]
174 dim=int(entete[entete.index('=')+1:entete.index('\n')])
176 UTMESS('F', 'SPECTRAL0_5')
178 if len(list_fonc)!=(dim*(dim+1)/2):
179 UTMESS('F', 'SPECTRAL0_6')
184 for i in range(dim*(dim+1)/2):
185 numi=list_fonc[i][list_fonc[i].index('I =')+3:]
186 numi=numi[:numi.index('\n')]
187 nume_i.append(int(numi))
188 numj=list_fonc[i][list_fonc[i].index('J =')+3:]
189 numj=numj[:numj.index('\n')]
190 nume_j.append(int(numj))
192 vale_fonc=list_fonc[i][list_fonc[i].index('VALEUR =\n')+9:list_fonc[i].index('FINSF\n')]
193 vale_fonc=vale_fonc.replace('\n',' ')
194 vale_fonc=map(float,vale_fonc.split())
196 UTMESS('F', 'SPECTRAL0_7')
199 if FORMAT_C=='REEL_IMAG':
201 elif FORMAT_C=='MODULE_PHASE':
202 for i in range(len(vale_fonc)/3) :
203 module=vale_fonc[3*i+1]
204 phase =vale_fonc[3*i+2]
205 liste=liste+[vale_fonc[3*i],module*cos(phase),module*sin(phase)]
208 # création de la fonction ASTER :
209 _fonc=DEFI_FONCTION( NOM_PARA =NOM_PARA,
211 PROL_DROITE=PROL_DROITE,
212 PROL_GAUCHE=PROL_GAUCHE,
217 l_fonc.append(_fonc.nom)
222 for j in range(i,dim):
225 if nume_i!=nume_ib or nume_j!=nume_jb :
226 UTMESS('F', 'SPECTRAL0_3')
228 mcfact.append(_F(PARA='NOM_CHAM' ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,)))
229 mcfact.append(_F(PARA='OPTION' ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,)))
230 mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(dim,) ,NUME_LIGN=(1,)))
231 mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i ,NUME_LIGN=range(2,len(nume_i)+2)))
232 mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j ,NUME_LIGN=range(2,len(nume_j)+2)))
233 mcfact.append(_F(PARA='FONCTION_C' ,LISTE_K=l_fonc ,NUME_LIGN=range(2,len(list_fonc)+2)))
234 self.DeclareOut('tab_inte',self.sd)
235 tab_inte=CREA_TABLE(LISTE=mcfact,
237 TYPE_TABLE='TABLE_FONCTION')
240 # mot-clé != 'ASTER', ou 'IDEAS' => ERREUR !
241 UTMESS('F', 'SPECTRAL0_12')
244 # remet UNITE dans son état initial
254 if ddlno == .1:return sens,'DX'
255 elif ddlno == .2:return sens,'DY'
256 elif ddlno == .3:return sens,'DZ'
257 elif ddlno == .4:return sens,'DRX'
258 elif ddlno == .5:return sens,'DRY'
259 elif ddlno == .6:return sens,'DRZ'
261 print "Probleme pour l'attribution des composantes"