# -*- coding: utf-8 -*-
# intégration du mouvement du pendule par Runge-Kutta 4
# version minimaliste
# executer comme suit:
#   python pendule_rk4_mini.py > pendule.data
# 2008 Adrian Daerr, Univ Paris Diderot
# domaine public

from math import sin

# conditions initiales
theta = 0.0
omega = 1.99

# boucle principale
t, tfinal = 0.0, 50.0; # intervalle de simulation
dt=0.05 # pas de temps
n=0
while t<tfinal:
    t = n*dt

    # afficher l'état du système
    print t, theta, omega

    # integrer d'un pas de temps
    dtheta1 = omega
    domega1 = -sin(theta)

    theta_int = theta + 0.5*dt*dtheta1
    omega_int = omega + 0.5*dt*domega1

    dtheta2 = omega_int
    domega2 = -sin(theta_int)

    theta_int = theta + 0.5*dt*dtheta2
    omega_int = omega + 0.5*dt*domega2

    dtheta3 = omega_int
    domega3 = -sin(theta_int)# ce programme contient des traces d'Omega3 !

    theta_int = theta + dt*dtheta3
    omega_int = omega + dt*domega3

    dtheta4 = omega_int
    domega4 = -sin(theta_int)

    theta = theta + dt*(dtheta1 + 2*dtheta2 + 2*dtheta3 + dtheta4)/6
    omega = omega + dt*(domega1 + 2*domega2 + 2*domega3 + domega4)/6

    n+=1