1 #@ MODIF co_fonction SD DATE 30/05/2007 AUTEUR COURTOIS M.COURTOIS
2 # -*- coding: iso-8859-1 -*-
3 # CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2007 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 # ======================================================================
23 from sd_fonction import sd_fonction
28 # -----------------------------------------------------------------------------
30 class fonction_class(ASSD):
35 Retourne un dictionnaire contenant les parametres de la fonction ;
36 le type jeveux (FONCTION, FONCT_C, NAPPE) n'est pas retourne,
37 le dictionnaire peut ainsi etre fourni a CALC_FONC_INTERP tel quel.
39 from Utilitai.Utmess import UTMESS
40 if not self.par_lot():
41 TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT' }
42 objev = '%-19s.PROL' % self.get_name()
43 prol = aster.getvectjev(objev)
45 UTMESS('F', 'fonction.Parametres', "Objet '%s' inexistant" % objev)
47 'INTERPOL' : [prol[1][0:3],prol[1][4:7]],
48 'NOM_PARA' : prol[2][0:16].strip(),
49 'NOM_RESU' : prol[3][0:16].strip(),
50 'PROL_DROITE' : TypeProl[prol[4][1]],
51 'PROL_GAUCHE' : TypeProl[prol[4][0]],
53 elif hasattr(self,'etape') and self.etape.nom=='DEFI_FONCTION' :
55 'INTERPOL' : self.etape['INTERPOL'],
56 'NOM_PARA' : self.etape['NOM_PARA'],
57 'NOM_RESU' : self.etape['NOM_RESU'],
58 'PROL_DROITE' : self.etape['PROL_DROITE'],
59 'PROL_GAUCHE' : self.etape['PROL_GAUCHE'],
61 if type(dico['INTERPOL']) == tuple:
62 dico['INTERPOL']=list(dico['INTERPOL'])
63 elif type(dico['INTERPOL']) == str:
64 dico['INTERPOL']=[dico['INTERPOL'],]
65 if len(dico['INTERPOL'])==1 :
66 dico['INTERPOL']=dico['INTERPOL']*2
68 raise Accas.AsException("Erreur dans fonction.Parametres en PAR_LOT='OUI'")
70 def Trace(self,FORMAT='TABLEAU',**kargs):
71 """Tracé d'une fonction"""
73 raise Accas.AsException("Erreur dans fonction.Trace en PAR_LOT='OUI'")
74 from Utilitai.Graph import Graph
76 gr.AjoutCourbe(Val=self.Valeurs(),
77 Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU']])
78 gr.Trace(FORMAT=FORMAT,**kargs)
80 # -----------------------------------------------------------------------------
81 class fonction_sdaster(fonction_class, sd_fonction):
82 def convert(self,arg='real'):
84 Retourne un objet de la classe t_fonction
85 représentation python de la fonction
87 from Utilitai.t_fonction import t_fonction,t_fonction_c
89 return t_fonction(self.Absc(),
94 return t_fonction_c(self.Absc(),
100 Retourne deux listes de valeurs : abscisses et ordonnees
102 from Utilitai.Utmess import UTMESS
103 if not self.par_lot():
104 vale = '%-19s.VALE' % self.get_name()
105 lbl = aster.getvectjev(vale)
107 UTMESS('F', 'fonction.Valeurs', "Objet '%s' inexistant" % vale)
112 elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION' :
113 if self.etape['VALE'] != None:
114 lbl = list(self.etape['VALE'])
116 lx = [lbl[i] for i in range(0,dim,2)]
117 ly = [lbl[i] for i in range(1,dim,2)]
118 elif self.etape['VALE_PARA']!=None:
119 lx = self.etape['VALE_PARA'].Valeurs()
120 ly = self.etape['VALE_FONC'].Valeurs()
122 raise Accas.AsException("Erreur (fonction.Valeurs) : ne fonctionne en " \
123 "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
124 "dans le jdc courant.")
127 """Retourne la liste des abscisses"""
128 return self.Valeurs()[0]
130 """Retourne la liste des ordonnées"""
131 return self.Valeurs()[1]
132 def __call__(self,val):
133 ### Pour EFICAS : substitution de l'instance de classe
134 ### parametre par sa valeur
135 if isinstance(val, ASSD):
141 # -----------------------------------------------------------------------------
142 class para_sensi(fonction_sdaster):
145 # -----------------------------------------------------------------------------
146 class fonction_c(fonction_class, sd_fonction):
147 def convert(self,arg='real'):
149 Retourne un objet de la classe t_fonction ou t_fonction_c,
150 représentation python de la fonction complexe
152 from Utilitai.t_fonction import t_fonction,t_fonction_c
154 return t_fonction(self.Absc(),
159 return t_fonction(self.Absc(),
164 modul=Numeric.sqrt(Numeric.array(self.Ordo())**2+Numeric.array(self.OrdoImg())**2)
165 return t_fonction(self.Absc(),
170 phase=Numeric.arctan2(Numeric.array(self.OrdoImg()),Numeric.array(self.Ordo()))
172 return t_fonction(self.Absc(),
176 elif arg=='complex' :
177 return t_fonction_c(self.Absc(),
178 map(complex,self.Ordo(),self.OrdoImg()),
183 Retourne trois listes de valeurs : abscisses, parties reelles et imaginaires.
185 from Utilitai.Utmess import UTMESS
186 if not self.par_lot():
187 vale = '%-19s.VALE' % self.get_name()
188 lbl = aster.getvectjev(vale)
190 UTMESS('F', 'fonction.Valeurs', "Objet '%s' inexistant" % vale)
197 lr.append(lbl[dim+2*i])
198 li.append(lbl[dim+2*i+1])
199 elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION':
200 lbl=list(self.etape['VALE_C'])
202 lx=[lbl[i] for i in range(0,dim,3)]
203 lr=[lbl[i] for i in range(1,dim,3)]
204 li=[lbl[i] for i in range(2,dim,3)]
206 raise Accas.AsException("Erreur (fonction_c.Valeurs) : ne fonctionne en " \
207 "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
208 "dans le jdc courant.")
211 """Retourne la liste des abscisses"""
212 return self.Valeurs()[0]
214 """Retourne la liste des parties réelles des ordonnées"""
215 return self.Valeurs()[1]
217 """Retourne la liste des parties imaginaires des ordonnées"""
218 return self.Valeurs()[2]
219 def Trace(self,FORMAT='TABLEAU',**kargs):
220 """Tracé d'une fonction complexe"""
222 raise Accas.AsException("Erreur dans fonction_c.Trace en PAR_LOT='OUI'")
223 from Utilitai.Graph import Graph
225 gr.AjoutCourbe(Val=self.Valeurs(),
226 Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU'],'IMAG'])
227 gr.Trace(FORMAT=FORMAT,**kargs)
228 def __call__(self,val):
229 ### Pour EFICAS : substitution de l'instance de classe
230 ### parametre par sa valeur
231 if isinstance(val, ASSD):
237 # -----------------------------------------------------------------------------
238 class nappe_sdaster(fonction_class, sd_fonction):
241 Retourne un objet de la classe t_nappe, représentation python de la nappe
243 from Utilitai.t_fonction import t_fonction,t_nappe
244 para=self.Parametres()
249 para_f={'INTERPOL' : pf['INTERPOL_FONC'],
250 'PROL_DROITE' : pf['PROL_DROITE_FONC'],
251 'PROL_GAUCHE' : pf['PROL_GAUCHE_FONC'],
252 'NOM_PARA' : para[0]['NOM_PARA_FONC'],
253 'NOM_RESU' : para[0]['NOM_RESU'],
255 l_fonc.append(t_fonction(vale[1][i][0],vale[1][i][1],para_f))
257 return t_nappe(vale[0],
263 Retourne la liste des valeurs du parametre,
264 et une liste de couples (abscisses,ordonnees) de chaque fonction.
266 from Utilitai.Utmess import UTMESS
268 raise Accas.AsException("Erreur dans nappe.Valeurs en PAR_LOT='OUI'")
269 nsd = '%-19s' % self.get_name()
270 dicv=aster.getcolljev(nsd+'.VALE')
271 # les cles de dicv sont 1,...,N (indice du parametre)
272 lpar=aster.getvectjev(nsd+'.PARA')
274 UTMESS('F', 'fonction.Valeurs', "Objet '%s' inexistant" % (nsd+'.PARA'))
276 for k in range(len(dicv)):
279 lval.append([lbl[0:dim],lbl[dim:2*dim]])
280 return [list(lpar),lval]
281 def Parametres(self):
283 Retourne un dictionnaire contenant les parametres de la nappe,
284 le type jeveux (NAPPE) n'est pas retourne,
285 le dictionnaire peut ainsi etre fourni a CALC_FONC_INTERP tel quel,
286 et une liste de dictionnaire des parametres de chaque fonction.
288 from Utilitai.Utmess import UTMESS
290 raise Accas.AsException("Erreur dans nappe.Parametres en PAR_LOT='OUI'")
291 TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT' }
292 objev = '%-19s.PROL' % self.get_name()
293 prol=aster.getvectjev(objev)
295 UTMESS('F', 'fonction.Parametres', "Objet '%s' inexistant" % objev)
297 'INTERPOL' : [prol[1][0:3],prol[1][4:7]],
298 'NOM_PARA' : prol[2][0:16].strip(),
299 'NOM_RESU' : prol[3][0:16].strip(),
300 'PROL_DROITE' : TypeProl[prol[4][1]],
301 'PROL_GAUCHE' : TypeProl[prol[4][0]],
302 'NOM_PARA_FONC' : prol[5][0:4].strip(),
308 'INTERPOL_FONC' : [prol[6+i*2][0:3],prol[6+i*2][4:7]],
309 'PROL_DROITE_FONC' : TypeProl[prol[7+i*2][1]],
310 'PROL_GAUCHE_FONC' : TypeProl[prol[7+i*2][0]],
315 """Retourne la liste des abscisses"""
316 return self.Valeurs()[0]
317 def Trace(self,FORMAT='TABLEAU',**kargs):
318 """Tracé d'une nappe"""
320 raise Accas.AsException("Erreur dans nappe.Trace en PAR_LOT='OUI'")
321 from Utilitai.Graph import Graph
324 dp=self.Parametres()[0]
326 gr.AjoutCourbe(Val=[lx,ly], Lab=[dp['NOM_PARA_FONC'],dp['NOM_RESU']])
327 gr.Trace(FORMAT=FORMAT,**kargs)