]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA7/Macro/lire_inte_spec_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA7 / Macro / lire_inte_spec_ops.py
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.                                                  
10 #                                                                       
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.                              
15 #                                                                       
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 # ======================================================================
20
21 def lire_inte_spec_ops(self,UNITE,FORMAT,NOM_PARA,NOM_RESU,INTERPOL,
22                             PROL_DROITE,PROL_GAUCHE,TITRE,INFO,**args):
23   ier=0
24
25   from Accas import _F
26   import os
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')
33
34   # La macro compte pour 1 dans la numerotation des commandes
35   self.set_icmd(1)
36   nompro='LIRE_INTE_SPEC'
37
38   # Lecture de la fonction dans un fichier d unité logique UNITE
39   UL = UniteAster()
40   nomfich=UL.Nom(UNITE)
41   if not os.path.isfile(nomfich):
42      UTMESS('F', nompro, "le fichier '%s' est introuvable" % nomfich)
43   file=open(nomfich,'r')
44   texte=file.read()
45   file.close()
46   
47   list_fonc=texte.split('FONCTION_C')
48   entete=list_fonc.pop(0)
49   try : 
50     entete=entete[entete.index('DIM'):]
51     dim=int(entete[entete.index('=')+1:entete.index('\n')])
52   except ValueError : 
53     ier=ier+1
54     self.cr.fatal("<F> <LIRE_INTE_SPEC> la dimension DIM n est pas précisée dans le fichier lu")
55     return ier
56
57   if len(list_fonc)!=(dim*(dim+1)/2):
58     ier=ier+1
59     self.cr.fatal("<F> <LIRE_INTE_SPEC> nombre de fonctions incorrect")
60     return ier
61
62   nume_i=[]
63   nume_j=[]
64   l_fonc=[]
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))
72     try : 
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())
76     except ValueError : 
77       ier=ier+1
78       self.cr.fatal("<F> <LIRE_INTE_SPEC> erreur dans les données de fonctions")
79       return ier
80
81     liste=[]
82     if   FORMAT=='REEL_IMAG':
83       liste=vale_fonc
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)]
89
90     # création de la fonction ASTER :
91     _fonc=DEFI_FONCTION( NOM_PARA   =NOM_PARA,
92                          NOM_RESU   =NOM_RESU,
93                          PROL_DROITE=PROL_DROITE,
94                          PROL_GAUCHE=PROL_GAUCHE,
95                          INTERPOL   =INTERPOL,
96                          INFO       =INFO,
97                          TITRE      =TITRE,
98                          VALE_C     =liste,)
99     l_fonc.append(_fonc.nom)
100
101   nume_ib=[]
102   nume_jb=[]
103   for i in range(dim):
104     for j in range(i,dim):
105       nume_ib.append(i+1)
106       nume_jb.append(j+1)
107   if nume_i!=nume_ib or nume_j!=nume_jb : 
108       ier=ier+1
109       self.cr.fatal("<F> <LIRE_INTE_SPEC> erreur dans les indices")
110       return ier
111   mcfact=[]
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',
120                       LISTE=mcfact,
121                       TITRE=TITRE,)
122
123   # remet UNITE dans son état initial
124   UL.EtatInit()
125   return ier