
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).