• Aucun résultat trouvé

Trajectoire et section de Poincaré

4.3 Implémentation des algorithmes

4.3.1 Trajectoire et section de Poincaré

l = ( 0.2 ∆0 ≥ ∆1 0.25 ∆0 < ∆1

où S est un safety factor, plus petit que 1. Il est introduit pour tenir compte du fait que les estimations de l'erreur ne sont pas exactes ; elles sont précises seulement à l'ordre de h.

4.3 Implémentation des algorithmes

La méthode RK à pas variable décrite dans la section précédente a été implémen- tée dans une routine qui, pendant le calcul des solutions des équations du mouvement, permet aussi d'obtenir les SP. Cette routine s'appelle POINCARE, et elle trouve une solution particulière et sa SP pour (α, E) donnés, et pour des conditions initiales choi- sies. Dans le but d'obtenir la carte de SP et les transformées de Fourier des solutions, nous avons introduit une autre routine, AUTOMATIC, qui emploie POINCARE comme sous- routine. AUTOMATIC calcule plusieurs trajectoires, leurs transformées de Fourier, et leurs SP pour un ensemble de conditions initiales, en créant la carte de SP.

Ces routines ont été écrites dans un langage de programmation propre du logiciel choisi pour l'approche numérique de notre système, Igor Pro. Dans la section ci-après, nous décrivons la partie de POINCARE destinée à l'obtention des solutions par la méthode RK à pas variable. Dans les sections suivantes, nous traitons la partie qui calcule les SP, et l'emploi d'AUTOMATIC pour la carte de SP et les transformées de Fourier.

4.3.1 Trajectoire et section de Poincaré

Pour obtenir une solution des équations du mouvement (4.9) (ou éqs. 4.5, pour les faibles vitesses) et la SP correspondante, l'intégration numérique est faite par notre

routine principale, POINCARE6. POINCARE appelle d'autres sous-routines : elle a besoin

d'une routine pour implémenter le contrôle du pas (Runge-Kutta Quality-controlled Step ou RKQS), d'une routine pour utiliser les RK4 et RK5 emboîtées dans un algorithme du type Cash-Karp (Runge-Kutta Cash-Karp ou RKCK), et de la routine qui calcule les dé- rivées (DERIVS). Toutes ces routines ont la forme trouvée dans la littérature [Press1992] pour implémenter les méthodes de RK emboîtées du type Cash-Karp ; mais elles ont été adaptées aux particularités de notre problème, donc nous les décrivons ici.

6. POINCARE incorpore la routine souvent appelée ODEINT, qui implémente la méthode RK à pas variable [Press1992].

4.3.1.1 POINCARE

La routine POINCARE calcule une solution de l'ensemble d'EDO décrite par le vecteur

X (X (t) , Y (t) , θ (t) , p (t)), et calcule aussi la SP de cette solution. La trajectoire X

sauvegardé contient un nombre N de points Xn(tn) (n = 0, 1, ...N − 1).

Paramètres d'entrée Les paramètres d'entrée pour cette routine sont la valeur de

α et celle de l'énergie E. Un point de départ de l'intégration X0 doit aussi être indiqué

(X0, Y0, θ0 susent)7, et on introduit la taille d'essai du premier pas, htry. Dans notre

cas, htry = 0.01.

Description Pour eectuer un pas d'intégration de tn à tn+1, qui avance la solution

de Xn à Xn+1, POINCARE appelle la routine RKQS. Après le pas, POINCARE garde les

valeurs de tn+1, les valeurs Xn+1, Yn+1, θn+1 intégrées pour ce pas, et la valeur de pn+1

calculée à partir de Xn+1, Yn+1 (et à partir des valeurs de α et de E). Les divers pas

d'intégration conduisent à des instants diérents, mais on garde les valeurs uniquement à intervalles de 0.1.

Comme nous l'avons vu, à faible vitesse, les coordonnées X, Y, θ, p ne conviennent plus, et il faut faire un changement de variables. La routine vérie la valeur de p avant

de faire le pas et, si la vitesse est faible (p < 0.02), on travaille avec X, Y, ˙X, ˙Y.

Après avoir intégré ces variables, POINCARE calcule et garde X, Y, θ, p. Si la vitesse est susamment grande (p > 0.02), on fait l'intégration des variables X, Y, θ. Après chaque pas, la routine vérie si la vitesse est devenue faible ou susante pour que ˙θ ne diverge pas, et elle change en conséquence de variables.

À la n du pas, POINCARE réintroduit les valeurs calculées comme les valeurs au début du point suivant, qui seront employées par la routine RKQS. POINCARE réintroduit aussi sur RKQS l'estimation de la taille du prochain pas donnée par cette routine, excepté

si la taille du pas proposée htry est trop grande par rapport à l'intervalle de temps entre

points sauvegardés (htry > 0.1) : dans ce cas, la taille d'essai pour le prochain pas est

0.1 − δt, où δt est le temps depuis le dernier pas sauvegardé. La boucle est répétée

jusqu'à ce que le nombre de points calculés est susant.

La routine POINCARE calcule aussi la SP de la trajectoire. Pour identier les points qui appartiennent aux SP, on introduit un contrôle supplémentaire pendant l'obtention des trajectoires. Chaque fois que POINCARE identie un changement du signe  de négatif à positif  de la variable ˙Y (ou bien du signe de sin θ, quand il s'agit de points où l'on travaille avec les coordonnées X, Y, θ, p), cette routine calcule le point de traversée du 0 par interpolation linéaire. De cette façon, on peut évaluer et sauvegarder les coordonnées

X, Y et ˙X du point de traversée, ainsi que l'instant de traversée.

Valeurs de retour Le retour de POINCARE est la SP et la solution X échantillonnée, pour les valeurs choisies de α, de E et de la position initiale.

4.3.1.2 RKQS

La routine RKQS avance d'un pas la résolution numérique. Elle appelle la routine RKCK, qui implémente la méthode de RK emboîtées du type Cash-Karp, et elle contrôle l'erreur de troncation locale pour garantir la précision et ajuster la taille du pas.

4.3. IMPLÉMENTATION DES ALGORITHMES 91 Paramètres d'entrée Les paramètres d'entrée sont les valeurs des variables qui

forment le vecteur Xn au point de départ tn. Il faut également introduire la taille

du pas à essayer htry. Toutes ces valeurs sont évaluées par POINCARE, en fonction du

pas précédent8. On doit aussi établir des paramètres xes comme la précision désirée

∆0, ∆0 = 1 × 10−8, et le safety factor S, que nous prenons égal à la valeur couramment utilisée, S = 0.9.

Description La routine appelle RKCK, en lui indiquant Xn et htry, pour que RKCK

avance d'un pas la solution par la méthode de RK emboîtées du type Cash-Karp. Une fois obtenues de RKCK Xn+1, la taille du pas h et les erreurs commises dans chaque variable, RKQS contrôle l'erreur, pour adapter h en conséquence. Pour faire cela, la routine dénit : e ∆1 = ∆1 ∆0 (4.36)

où ∆1 est pris égal à la valeur absolue de l'erreur maximale parmi les erreurs commises,

pour ce pas, dans les trois variables intégrées. On ajuste donc h en fonction de l'équation

avec la plus grande erreur. Si l'erreur est petite,∆1e < 1, on garde la taille du pas employé

hcomme hdid. Si l'erreur est trop grande (∆e1 > 1), on essaie un nouveau pas plus petit :

hdid = S × h × e∆−0.251 (4.37)

On vérie que cette réduction conduit à une erreur ∆1e < 1 (en appelant RKCK) avec

hdid; si ce n'est pas le cas, on répète (4.37) jusqu'à satisfaire le critère.

Finalement, on fait une estimation pour la taille du prochain pas, hnext, à partir

de la taille du pas que l'on vient d'employer, hdid. Il y a deux cas : si ∆e1 > ∆C, où

∆C = (5/S)

−1/0.2

est une erreur minimale de contrôle [Press1992], on incrémente la taille du pas :

hnext = S × hdid× e∆−0.21 (4.38)

Autrement, si ∆e1 < ∆C, on incrémente la taille du pas estimée pour le prochain pas à

cinq fois la valeur employée hdid.

Valeurs de retour Le retour de RKQS sera les nouvelles valeurs de Xn+1 du pas

actuel, la taille du pas employée hdid, et la taille du pas estimée pour le prochain pas, hnext.

4.3.1.3 RKCK

Cette routine avance d'un pas la solution par la méthode de RK emboîtées du type Cash-Karp, employant RK4 et RK5.

Paramètres d'entrée Comme paramètres d'entrée sur RKCK, on doit indiquer Xn et

h (ce qui est fait par RKQS).

8. Cela est vrai à partir du deuxième pas : les valeurs pour le premier pas ont été introduites par l'usager comme paramètres d'entrée sur POINCARE.

Description Pour calculer les dérivées dont on a besoin, RKCK appelle la sous-routine

DERIVS. RKCK donne une estimation de l'erreur de troncation locale de Xn+1 grâce à la

RK4 emboîtée.

Valeurs de retour En retour nous obtenons les valeurs à la n du pas, Xn+1, et

l'erreur commise dans chaque variable. 4.3.1.4 DERIVS

La routine DERIVS calcule les dérivées des variables, dX

dt, à chaque point X.

Paramètres d'entrée Les paramètres d'entrée sont Xn, Yn, θn ou Xn, Yn, ˙Xn, ˙Yn,

en fonction du module de la vitesse au début du pas (comme nous l'avons expliqué dans la description de la routine POINCARE).

Description et valeurs de retour Il existe les deux cas décrits auparavant :  Si la vitesse est susamment grande (p > 0.02), on travaille avec les variables

X, Y, θ. DERIVS nécessite aussi de calculer p (éq. 4.10) pour l'intégration des

autres variables. Les valeurs de retour données par DERIVS sont, dans ce cas, dX

dt, dYdt et dθdt.

 Si la vitesse est faible (p < 0.02), on travaille avec X, Y, ˙X, ˙Y. Les valeurs de

retour de DERIVS sont, dans ce cas, dX

dt, dYdt, d ˙dtX et d ˙Ydt.

Notons que le calcul des trajectoires avec les algorithmes décrits se fait en double précision. Cependant, à la sortie, on n'a pas besoin de double précision et on sauvegarde ces solutions échantillonnées en simple précision.