1 #@ MODIF lire_inte_spec_ops Macro DATE 20/09/2004 AUTEUR DURAND C.DURAND
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,UNITE,FORMAT,NOM_PARA,NOM_RESU,INTERPOL,
22 PROL_DROITE,PROL_GAUCHE,TITRE,INFO,**args):
27 from math import cos,sin
28 # On importe les definitions des commandes a utiliser dans la macro
29 DEFI_FONCTION =self.get_cmd('DEFI_FONCTION')
30 CREA_TABLE =self.get_cmd('CREA_TABLE')
32 # La macro compte pour 1 dans la numerotation des commandes
35 # Lecture de la fonction dans un fichier d unité logique UNITE
37 file="./fort."+str(UNITE)
38 if not os.path.isfile(file) :
40 self.cr.fatal("<F> <LIRE_INTE_SPEC> le fichier d unité logique "+str(UNITE)+" est introuvable")
46 list_fonc=texte.split('FONCTION_C')
47 entete=list_fonc.pop(0)
49 entete=entete[entete.index('DIM'):]
50 dim=int(entete[entete.index('=')+1:entete.index('\n')])
53 self.cr.fatal("<F> <LIRE_INTE_SPEC> la dimension DIM n est pas précisée dans le fichier lu")
56 if len(list_fonc)!=(dim*(dim+1)/2):
58 self.cr.fatal("<F> <LIRE_INTE_SPEC> nombre de fonctions incorrect")
64 for i in range(dim*(dim+1)/2):
65 numi=list_fonc[i][list_fonc[i].index('I =')+3:]
66 numi=numi[:numi.index('\n')]
67 nume_i.append(int(numi))
68 numj=list_fonc[i][list_fonc[i].index('J =')+3:]
69 numj=numj[:numj.index('\n')]
70 nume_j.append(int(numj))
72 vale_fonc=list_fonc[i][list_fonc[i].index('VALEUR =\n')+9:list_fonc[i].index('FINSF\n')]
73 vale_fonc=vale_fonc.replace('\n',' ')
74 vale_fonc=map(float,vale_fonc.split())
77 self.cr.fatal("<F> <LIRE_INTE_SPEC> erreur dans les données de fonctions")
81 if FORMAT=='REEL_IMAG':
83 elif FORMAT=='MODULE_PHASE':
84 for i in range(len(vale_fonc)/3) :
85 module=vale_fonc[3*i+1]
86 phase =vale_fonc[3*i+2]
87 liste=liste+[vale_fonc[3*i],module*cos(phase),module*sin(phase)]
89 # création de la fonction ASTER :
90 _fonc=DEFI_FONCTION( NOM_PARA =NOM_PARA,
92 PROL_DROITE=PROL_DROITE,
93 PROL_GAUCHE=PROL_GAUCHE,
98 l_fonc.append(_fonc.nom)
103 for j in range(i,dim):
106 if nume_i!=nume_ib or nume_j!=nume_jb :
108 self.cr.fatal("<F> <LIRE_INTE_SPEC> erreur dans les indices")
111 mcfact.append(_F(PARA='NOM_CHAM' ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,)))
112 mcfact.append(_F(PARA='OPTION' ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,)))
113 mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(dim,) ,NUME_LIGN=(1,)))
114 mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i ,NUME_LIGN=range(2,len(nume_i)+2)))
115 mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j ,NUME_LIGN=range(2,len(nume_j)+2)))
116 mcfact.append(_F(PARA='FONCTION' ,LISTE_K=l_fonc ,NUME_LIGN=range(2,len(list_fonc)+2)))
117 self.DeclareOut('tab_inte',self.sd)
118 tab_inte=CREA_TABLE(TYPE_TABLE='TABL_INTE_SPEC',