Code_Aster Version
default
Titre : Opérateur FORMULE Date : 18/10/2011 Page : 5/5
Responsable : COURTOIS Mathieu Clé : U4.31.05 Révision :
4ff0d9965f54
4.6 Exemple de définition de formules dans une boucle Python
Quand on définit, dans une boucle, des formules dont l'expression dépend de l'indice de la boucle, il
faut être vigilant et bien avoir compris le sens de PAR_LOT dans DEBUT/POURSUITE (cf. [U1.03.01]).
Exemple :
for i in range(3):
FO[i] = FORMULE(VALE='cos(i*INST)', NOM_PARA='INST')
CH[i] = CREA_CHAMP(OPERATION='AFFE', ..., VALE_F=FO[i])
Avec ces instructions, on a défini 3 formules qui ont toutes la même expression.
En PAR_LOT='OUI' (le jeu de données est entièrement construit puis exécuté), lors de l'appel à
CREA_CHAMP (que ce soit le premier ou le dernier), i vaut 2 (dernière valeur en sortant de la boucle),
donc la formule évaluée en fonction de INST est 'cos(2*INST)'.
Alors qu'en PAR_LOT='NON', le premier CREA_CHAMP est exécuté dès qu'il est construit, donc la
formule est évaluée avec i=0. Pour le second, i=1, pour le troisième, i=2.
En fait, le jeu de données utilisé est celui-ci :
i = 0
FO[0] = FORMULE(VALE='cos(i*INST)', NOM_PARA='INST')
CH[0] = CREA_CHAMP(OPERATION='AFFE', ..., VALE_F=FO[0])
i = 1
FO[1] = FORMULE(VALE='cos(i*INST)', NOM_PARA='INST')
CH[1] = CREA_CHAMP(OPERATION='AFFE', ..., VALE_F=FO[1])
i = 2
FO[2] = FORMULE(VALE='cos(i*INST)', NOM_PARA='INST')
CH[2] = CREA_CHAMP(OPERATION='AFFE', ..., VALE_F=FO[2])
On voit bien que l'indice de la boucle n'intervient pas dans l'expression de la formule.
Dans ce cas, ce que souhaite l'utilisateur serait obtenu en faisant :
for i in range(3):
FO[i] = FORMULE(VALE='cos(%d*INST)' % i, NOM_PARA='INST')
CH[i] = CREA_CHAMP(OPERATION='AFFE', ..., VALE_F=FO[i])
On définit ainsi 3 formules dont les expressions sont 'cos(0*INST)', 'cos(1*INST)' et
'cos(2*INST)'. De cette manière, qu'il soit exécuté en PAR_LOT='OUI' ou 'NON', le résultat sera
le même.
Manuel d'utilisation Fascicule u4.31: Tables et fonctions
Document diffusé sous licence GNU FDL (http://www.gnu.org/copyleft/fdl.html)