1 #@ MODIF co_fonction SD DATE 05/01/2010 AUTEUR MACOCCO K.MACOCCO
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_aster
29 # -----------------------------------------------------------------------------
31 class fonction_class(ASSD):
36 Retourne un dictionnaire contenant les parametres de la fonction ;
37 le type jeveux (FONCTION, FONCT_C, NAPPE) n'est pas retourne,
38 le dictionnaire peut ainsi etre fourni a CALC_FONC_INTERP tel quel.
40 from Utilitai.Utmess import UTMESS
41 if not self.par_lot():
42 TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT' }
43 objev = '%-19s.PROL' % self.get_name()
44 prol = aster.getvectjev(objev)
46 UTMESS('F', 'SDVERI_2', valk=[objev])
48 'INTERPOL' : [prol[1][0:3],prol[1][4:7]],
49 'NOM_PARA' : prol[2][0:16].strip(),
50 'NOM_RESU' : prol[3][0:16].strip(),
51 'PROL_DROITE' : TypeProl[prol[4][1]],
52 'PROL_GAUCHE' : TypeProl[prol[4][0]],
54 elif hasattr(self,'etape') and self.etape.nom=='DEFI_FONCTION' :
56 'INTERPOL' : self.etape['INTERPOL'],
57 'NOM_PARA' : self.etape['NOM_PARA'],
58 'NOM_RESU' : self.etape['NOM_RESU'],
59 'PROL_DROITE' : self.etape['PROL_DROITE'],
60 'PROL_GAUCHE' : self.etape['PROL_GAUCHE'],
62 if type(dico['INTERPOL']) == tuple:
63 dico['INTERPOL']=list(dico['INTERPOL'])
64 elif type(dico['INTERPOL']) == str:
65 dico['INTERPOL']=[dico['INTERPOL'],]
66 if len(dico['INTERPOL'])==1 :
67 dico['INTERPOL']=dico['INTERPOL']*2
69 raise Accas.AsException("Erreur dans fonction.Parametres en PAR_LOT='OUI'")
71 def Trace(self,FORMAT='TABLEAU',**kargs):
72 """Tracé d'une fonction"""
74 raise Accas.AsException("Erreur dans fonction.Trace en PAR_LOT='OUI'")
75 from Utilitai.Graph import Graph
77 gr.AjoutCourbe(Val=self.Valeurs(),
78 Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU']],
79 Leg=os.linesep.join(self.TITR.get()) )
80 gr.Trace(FORMAT=FORMAT,**kargs)
82 # -----------------------------------------------------------------------------
83 class fonction_sdaster(fonction_class, sd_fonction_aster):
84 def convert(self,arg='real'):
86 Retourne un objet de la classe t_fonction
87 représentation python de la fonction
89 from Utilitai.t_fonction import t_fonction,t_fonction_c
91 return t_fonction(self.Absc(),
96 return t_fonction_c(self.Absc(),
102 Retourne deux listes de valeurs : abscisses et ordonnees
104 from Utilitai.Utmess import UTMESS
105 if not self.par_lot():
106 vale = '%-19s.VALE' % self.get_name()
107 lbl = aster.getvectjev(vale)
109 UTMESS('F', 'SDVERI_2', valk=[vale])
114 elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION' :
115 if self.etape['VALE'] is not None:
116 lbl = list(self.etape['VALE'])
118 lx = [lbl[i] for i in range(0,dim,2)]
119 ly = [lbl[i] for i in range(1,dim,2)]
120 elif self.etape['VALE_PARA'] is not None:
121 lx = self.etape['VALE_PARA'].Valeurs()
122 ly = self.etape['VALE_FONC'].Valeurs()
123 elif self.etape['ABSCISSE'] is not None:
124 lx = self.etape['ABSCISSE']
125 ly = self.etape['ORDONNEE']
127 raise Accas.AsException("Erreur (fonction.Valeurs) : ne fonctionne en " \
128 "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
129 "dans le fichier de commandes courant.")
131 raise Accas.AsException("Erreur (fonction.Valeurs) : ne fonctionne en " \
132 "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
133 "dans le fichier de commandes courant.")
136 """Retourne la liste des abscisses"""
137 return self.Valeurs()[0]
139 """Retourne la liste des ordonnées"""
140 return self.Valeurs()[1]
141 def __call__(self,val):
142 ### Pour EFICAS : substitution de l'instance de classe
143 ### parametre par sa valeur
144 if isinstance(val, ASSD):
150 # -----------------------------------------------------------------------------
151 class para_sensi(fonction_sdaster):
154 # -----------------------------------------------------------------------------
155 class fonction_c(fonction_class, sd_fonction_aster):
156 def convert(self,arg='real'):
158 Retourne un objet de la classe t_fonction ou t_fonction_c,
159 représentation python de la fonction complexe
161 from Utilitai.t_fonction import t_fonction,t_fonction_c
163 return t_fonction(self.Absc(),
168 return t_fonction(self.Absc(),
173 modul=Numeric.sqrt(Numeric.array(self.Ordo())**2+Numeric.array(self.OrdoImg())**2)
174 return t_fonction(self.Absc(),
179 phase=Numeric.arctan2(Numeric.array(self.OrdoImg()),Numeric.array(self.Ordo()))
181 return t_fonction(self.Absc(),
185 elif arg=='complex' :
186 return t_fonction_c(self.Absc(),
187 map(complex,self.Ordo(),self.OrdoImg()),
192 Retourne trois listes de valeurs : abscisses, parties reelles et imaginaires.
194 from Utilitai.Utmess import UTMESS
195 if not self.par_lot():
196 vale = '%-19s.VALE' % self.get_name()
197 lbl = aster.getvectjev(vale)
199 UTMESS('F', 'SDVERI_2', valk=[vale])
206 lr.append(lbl[dim+2*i])
207 li.append(lbl[dim+2*i+1])
208 elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION' \
209 and self.etape['VALE_C'] is not None:
210 lbl=list(self.etape['VALE_C'])
212 lx=[lbl[i] for i in range(0,dim,3)]
213 lr=[lbl[i] for i in range(1,dim,3)]
214 li=[lbl[i] for i in range(2,dim,3)]
216 raise Accas.AsException("Erreur (fonction_c.Valeurs) : ne fonctionne en " \
217 "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
218 "dans le jdc courant.")
221 """Retourne la liste des abscisses"""
222 return self.Valeurs()[0]
224 """Retourne la liste des parties réelles des ordonnées"""
225 return self.Valeurs()[1]
227 """Retourne la liste des parties imaginaires des ordonnées"""
228 return self.Valeurs()[2]
229 def Trace(self,FORMAT='TABLEAU',**kargs):
230 """Tracé d'une fonction complexe"""
232 raise Accas.AsException("Erreur dans fonction_c.Trace en PAR_LOT='OUI'")
233 from Utilitai.Graph import Graph
234 para = self.Parametres()
236 gr.AjoutCourbe(Val=self.Valeurs(),
237 Lab=[para['NOM_PARA'], '%s_R' % para['NOM_RESU'], '%s_I' % para['NOM_RESU']],
238 Leg=os.linesep.join(self.TITR.get()) )
239 gr.Trace(FORMAT=FORMAT,**kargs)
240 def __call__(self,val):
241 ### Pour EFICAS : substitution de l'instance de classe
242 ### parametre par sa valeur
243 if isinstance(val, ASSD):
246 __ff=self.convert(arg='complex')
249 # -----------------------------------------------------------------------------
250 class nappe_sdaster(fonction_class, sd_fonction_aster):
253 Retourne un objet de la classe t_nappe, représentation python de la nappe
255 from Utilitai.t_fonction import t_fonction,t_nappe
256 para=self.Parametres()
261 para_f={'INTERPOL' : pf['INTERPOL_FONC'],
262 'PROL_DROITE' : pf['PROL_DROITE_FONC'],
263 'PROL_GAUCHE' : pf['PROL_GAUCHE_FONC'],
264 'NOM_PARA' : para[0]['NOM_PARA_FONC'],
265 'NOM_RESU' : para[0]['NOM_RESU'],
267 l_fonc.append(t_fonction(vale[1][i][0],vale[1][i][1],para_f))
269 return t_nappe(vale[0],
275 Retourne la liste des valeurs du parametre,
276 et une liste de couples (abscisses,ordonnees) de chaque fonction.
278 from Utilitai.Utmess import UTMESS
280 raise Accas.AsException("Erreur dans nappe.Valeurs en PAR_LOT='OUI'")
281 nsd = '%-19s' % self.get_name()
282 dicv=aster.getcolljev(nsd+'.VALE')
283 # les cles de dicv sont 1,...,N (indice du parametre)
284 lpar=aster.getvectjev(nsd+'.PARA')
286 UTMESS('F', 'SDVERI_2', valk=[nsd+'.PARA'])
288 for k in range(len(dicv)):
291 lval.append([lbl[0:dim],lbl[dim:2*dim]])
292 return [list(lpar),lval]
293 def Parametres(self):
295 Retourne un dictionnaire contenant les parametres de la nappe,
296 le type jeveux (NAPPE) n'est pas retourne,
297 le dictionnaire peut ainsi etre fourni a CALC_FONC_INTERP tel quel,
298 et une liste de dictionnaire des parametres de chaque fonction.
300 from Utilitai.Utmess import UTMESS
302 raise Accas.AsException("Erreur dans nappe.Parametres en PAR_LOT='OUI'")
303 TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT' }
304 objev = '%-19s.PROL' % self.get_name()
305 prol=aster.getvectjev(objev)
307 UTMESS('F', 'SDVERI_2', valk=[objev])
309 'INTERPOL' : [prol[1][0:3],prol[1][4:7]],
310 'NOM_PARA' : prol[2][0:16].strip(),
311 'NOM_RESU' : prol[3][0:16].strip(),
312 'PROL_DROITE' : TypeProl[prol[4][1]],
313 'PROL_GAUCHE' : TypeProl[prol[4][0]],
314 'NOM_PARA_FONC' : prol[6][0:4].strip(),
320 'INTERPOL_FONC' : [prol[7+i*2][0:3],prol[7+i*2][4:7]],
321 'PROL_DROITE_FONC' : TypeProl[prol[8+i*2][1]],
322 'PROL_GAUCHE_FONC' : TypeProl[prol[8+i*2][0]],
327 """Retourne la liste des abscisses"""
328 return self.Valeurs()[0]
329 def Trace(self,FORMAT='TABLEAU',**kargs):
330 """Tracé d'une nappe"""
332 raise Accas.AsException("Erreur dans nappe.Trace en PAR_LOT='OUI'")
333 from Utilitai.Graph import Graph
336 dp=self.Parametres()[0]
338 gr.AjoutCourbe(Val=[lx,ly], Lab=[dp['NOM_PARA_FONC'],dp['NOM_RESU']],
339 Leg=os.linesep.join(self.TITR.get()) )
340 gr.Trace(FORMAT=FORMAT,**kargs)