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