En écrivant l'équation de Newton de la masse m et en se rappelant que
l est constant, on peut montrer que l'angle
θ obéit à l'équation suivante:
rkf45
, il est nécessaire de la réduire à un système d'équations du premier ordre.
Cela se fait simplement en posant:
subroutine
rkf45(f,neqn,y,t,tout,relerr,abserr,iflag,work,iwork)
rkf45
intègre un système de
neqn
équations différentielles
du 1er ordre de la forme dy(i)/dt=f(t,y(1),...,y(neqn)) où
les y(i) sont calculés en t
.
t
est la variable d'intégration et
l'intégration se fait depuis la valeur initiale de
t
jusque tout
.
f(t,y,yp)
est une sous-routine qui fournit la valeur des
dérivées premières yp(i) (valeurs de sortie)
au point t pour des valeurs données des y(i) (valeurs
d'entrée). y(1:neqn) et yp(1:neqn) sont donc des vecteurs qui contiennent
respectivement les fonctions yi ainsi que leur dérivée
y'i.
Cette sous-routine doit être construite
par l'utilisateur. Vous trouverez l'interface de cette sous-routine
dans le code de rkf45.
abserr
et relerr
sont respectivement les
erreurs absolues et relatives demandées par
l'utilisateur. Prenez abserr
=0. et
relerr
=1.E-8.
work
est un vecteur réel utilisé par la routine, qui doit
être de dimension 3+6*neqn
.
iwork
est un vecteur
d'entiers, qui doit être de dimension 5.
iflag
en entrée indique à la sous-routine
ce qu'elle doit faire et en sortie ce qu'elle a fait.
En entrée:
iflag=1
: si on veut intégrer entre la valeur
initiale de t
et tout
en un seul appel
à la sous-routine (c'est ce que l'on veut).
iflag=-1
: si on ne veut effectuer qu'un seul pas
d'intégration dans la direction de
tout
(ne pas utiliser cela).
iflag=2
: indique que l'intégration continue
s'est bien déroulée.
iflag=-2
: indique que l'intégration d'un seul
pas s'est bien déroulée.
Le tout est donc d'initialiser les valeurs de
y1=θ et
y2=θ'
en rkf45
pour propager
ces valeurs sur la période de temps souhaitée.
Nous allons étudier les oscillations du pendule sur une période de temps allant de t=0 jusque t=2.T. Vous prendrez 10.000 points intermédiaires.
Votre programme devra pouvoir représenter θ en fonction de t, θ' en fonction de t, ainsi que θ' en fonction de θ.
Voici les résultats à retrouver pour quatre situations différentes :
Pour votre rapport, vous me remettrez le graphique de θ'-θ pour le mouvement propre du pendule (premier cas) ainsi que le graphique de θ'-θ pour une excitation rapide et forte du pendule (quatrième cas).
Travaillez en double précision.
L'interface de rkf45
se trouve dans le module
forsythe
. Faites-y appel par:
use forsythe, only: rkf45
Comme dit précédemment, prenez abserr
=0.
et relerr
=1.E-8.
Mettez iflag
= 1 en
entrée et vérifiez en sortie que
iflag
= 2.
Voici le Makefile à utiliser avec le gfortran (le programme principal doit s'appeler Pendule.f90).
tout
=2.T).