]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA8/Macro/lire_inte_spec_ops.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA8 / Macro / lire_inte_spec_ops.py
1 #@ MODIF lire_inte_spec_ops Macro  DATE 10/10/2006   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     UTMESS('F', nompro, "la dimension DIM n est pas précisée dans le fichier lu")
54
55   if len(list_fonc)!=(dim*(dim+1)/2):
56     UTMESS('F', nompro, "nombre de fonctions incorrect")
57
58   nume_i=[]
59   nume_j=[]
60   l_fonc=[]
61   for i in range(dim*(dim+1)/2):
62     numi=list_fonc[i][list_fonc[i].index('I =')+3:]
63     numi=numi[:numi.index('\n')]
64     nume_i.append(int(numi))
65     numj=list_fonc[i][list_fonc[i].index('J =')+3:]
66     numj=numj[:numj.index('\n')]
67     nume_j.append(int(numj))
68     try : 
69       vale_fonc=list_fonc[i][list_fonc[i].index('VALEUR =\n')+9:list_fonc[i].index('FINSF\n')]
70       vale_fonc=vale_fonc.replace('\n',' ')
71       vale_fonc=map(float,vale_fonc.split())
72     except ValueError : 
73       UTMESS('F', nompro, "erreur dans les données de fonctions")
74
75     liste=[]
76     if   FORMAT=='REEL_IMAG':
77       liste=vale_fonc
78     elif FORMAT=='MODULE_PHASE':
79       for i in range(len(vale_fonc)/3) :
80         module=vale_fonc[3*i+1]
81         phase =vale_fonc[3*i+2]
82         liste=liste+[vale_fonc[3*i],module*cos(phase),module*sin(phase)]
83
84     # création de la fonction ASTER :
85     _fonc=DEFI_FONCTION( NOM_PARA   =NOM_PARA,
86                          NOM_RESU   =NOM_RESU,
87                          PROL_DROITE=PROL_DROITE,
88                          PROL_GAUCHE=PROL_GAUCHE,
89                          INTERPOL   =INTERPOL,
90                          INFO       =INFO,
91                          TITRE      =TITRE,
92                          VALE_C     =liste,)
93     l_fonc.append(_fonc.nom)
94
95   nume_ib=[]
96   nume_jb=[]
97   for i in range(dim):
98     for j in range(i,dim):
99       nume_ib.append(i+1)
100       nume_jb.append(j+1)
101   if nume_i!=nume_ib or nume_j!=nume_jb : 
102       UTMESS('F', nompro, "erreur dans les indices")
103   mcfact=[]
104   mcfact.append(_F(PARA='NOM_CHAM'    ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,)))
105   mcfact.append(_F(PARA='OPTION'      ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,)))
106   mcfact.append(_F(PARA='DIMENSION'   ,LISTE_I=(dim,)    ,NUME_LIGN=(1,)))
107   mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i    ,NUME_LIGN=range(2,len(nume_i)+2)))
108   mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j    ,NUME_LIGN=range(2,len(nume_j)+2)))
109   mcfact.append(_F(PARA='FONCTION_C'  ,LISTE_K=l_fonc    ,NUME_LIGN=range(2,len(list_fonc)+2)))
110   self.DeclareOut('tab_inte',self.sd)
111   tab_inte=CREA_TABLE(LISTE=mcfact,
112                       TITRE=TITRE,
113                       TYPE_TABLE='TABLE_FONCTION')
114
115   # remet UNITE dans son état initial
116   UL.EtatInit()
117   return ier