1 #@ MODIF lire_inte_spec_ops Macro DATE 26/05/2005 AUTEUR MCOURTOI M.COURTOIS
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 from Utilitai.Utmess import UTMESS
29 from Utilitai.UniteAster import UniteAster
30 # On importe les definitions des commandes a utiliser dans la macro
31 DEFI_FONCTION =self.get_cmd('DEFI_FONCTION')
32 CREA_TABLE =self.get_cmd('CREA_TABLE')
34 # La macro compte pour 1 dans la numerotation des commandes
36 nompro='LIRE_INTE_SPEC'
38 # Lecture de la fonction dans un fichier d unité logique UNITE
41 if not os.path.isfile(nomfich):
42 UTMESS('F', nompro, "le fichier '%s' est introuvable" % nomfich)
43 file=open(nomfich,'r')
47 list_fonc=texte.split('FONCTION_C')
48 entete=list_fonc.pop(0)
50 entete=entete[entete.index('DIM'):]
51 dim=int(entete[entete.index('=')+1:entete.index('\n')])
54 self.cr.fatal("<F> <LIRE_INTE_SPEC> la dimension DIM n est pas précisée dans le fichier lu")
57 if len(list_fonc)!=(dim*(dim+1)/2):
59 self.cr.fatal("<F> <LIRE_INTE_SPEC> nombre de fonctions incorrect")
65 for i in range(dim*(dim+1)/2):
66 numi=list_fonc[i][list_fonc[i].index('I =')+3:]
67 numi=numi[:numi.index('\n')]
68 nume_i.append(int(numi))
69 numj=list_fonc[i][list_fonc[i].index('J =')+3:]
70 numj=numj[:numj.index('\n')]
71 nume_j.append(int(numj))
73 vale_fonc=list_fonc[i][list_fonc[i].index('VALEUR =\n')+9:list_fonc[i].index('FINSF\n')]
74 vale_fonc=vale_fonc.replace('\n',' ')
75 vale_fonc=map(float,vale_fonc.split())
78 self.cr.fatal("<F> <LIRE_INTE_SPEC> erreur dans les données de fonctions")
82 if FORMAT=='REEL_IMAG':
84 elif FORMAT=='MODULE_PHASE':
85 for i in range(len(vale_fonc)/3) :
86 module=vale_fonc[3*i+1]
87 phase =vale_fonc[3*i+2]
88 liste=liste+[vale_fonc[3*i],module*cos(phase),module*sin(phase)]
90 # création de la fonction ASTER :
91 _fonc=DEFI_FONCTION( NOM_PARA =NOM_PARA,
93 PROL_DROITE=PROL_DROITE,
94 PROL_GAUCHE=PROL_GAUCHE,
99 l_fonc.append(_fonc.nom)
104 for j in range(i,dim):
107 if nume_i!=nume_ib or nume_j!=nume_jb :
109 self.cr.fatal("<F> <LIRE_INTE_SPEC> erreur dans les indices")
112 mcfact.append(_F(PARA='NOM_CHAM' ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,)))
113 mcfact.append(_F(PARA='OPTION' ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,)))
114 mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(dim,) ,NUME_LIGN=(1,)))
115 mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i ,NUME_LIGN=range(2,len(nume_i)+2)))
116 mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j ,NUME_LIGN=range(2,len(nume_j)+2)))
117 mcfact.append(_F(PARA='FONCTION' ,LISTE_K=l_fonc ,NUME_LIGN=range(2,len(list_fonc)+2)))
118 self.DeclareOut('tab_inte',self.sd)
119 tab_inte=CREA_TABLE(TYPE_TABLE='TABL_INTE_SPEC',
123 # remet UNITE dans son état initial