This is an old revision of the document!
Table of Contents
Fonction d'évolution
Des fonctions sont utiles pour décrire la manière dont varient certains paramètres. Elles interviennent par exemple dans la définition des déplacements imposés ou dans la définition d'une loi d'écrouissage.
PieceWiseLinearFunction
On définit une fonction linéaire par morceaux - PieceWiseLinearFunction - point par point de la manière suivante:
fct = PieceWiseLinearFunction() fct.setData(abs1, ord1) fct.setData(abs2, ord2) ...
où
abs1 , abs2 , … | liste des abscisses |
ord1 , ord2 , … | liste des ordonnées |
Remarque #1: Les fonctions d'évolution sont des objets dérivant de refCounted
. Une fois associée à un chargement, ou une dépendance de propriété, leur référence est incrémentée et la gestion de leur mémoire associée aux objets la référenciant. Il n'est donc PLUS nécessaire (comme auparavant) de les définir globale dans le module python.
Remarque #2: Comme le montre le schéma ci-dessus, les segments extrêmes (premier et dernier) sont extrapolés dans le cas de l'évaluation hors du domaine de définition.
PythonOneParameterFunction
Lorsqu'une fonction est trop complexe pour être définie par une PieceWiseLinearFunction
, il faut passer par une définition analytique de la fonction. C'est possible grâce à python et les PythonOneParameterFunction
.
Le but est de pouvoir faire passer une fonction python (ou tout objet appelable) comme OneParameterFunction
.
Ceci permet de, par exemple, de:
- Configurer le mailleur (1D Meshers (Curves)).
- Piloter la plupart des objets metafor de manière plus évoluée (Prescribed Displacements).
- Définir une fonction d'écrouissage par python (General Points).
Exemple: la fonction “rampe”:
fct1 = PieceWiseLinearFunction() fct1.setdata(0,0) fct1.setdata(1,1)
devient, en version interprétée python:
def f(a): return a fct1 = PythonOneParameterFunction(f)
ou, en utilisant les fonctions lambda
de python:
f = lambda x: x fct1 = PythonOneParameterFunction(f)
On peut aussi afficher une valeur à chaque évaluation ou modifier créer une fonction spéciale (en utilisant tout l'arsenal de python). Par exemple, on démarre une fonction de mise en charge avec une parabole et on la termine avec une droite - le changement de formule se fait par un if
python.
def f(a): val=0 if(a‹0.5): val=a*a else: x=0.5*0.5; val=x+(a-0.5)/(1-0.5)*(1-x) print 'value=', val return val fct1 = PythonOneParameterFunction(f)