1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| Subroutine D006(SM,N,T,DT,Y)
C
C***********************************************************************
C
C Bibliothèque JMBPACK
C
C Série D: Equations différentielles
C
C***********************************************************************
C
C Méthode de Runge-Kutta d'ordre 4 (1/6 + 2/6 + 2/6 + 1/6)
C
C***********************************************************************
C
C Version 3.0: Jean-Marc Blanc, juillet 2004
C
C **********************************************************************
C
C SM Nom d'un sous-programme fourni par l'utilisateur pour le
C calcul des dérivées à partir des valeurs de la variable
C indépendante et des variables d'état. Ce sous-programme
C doit être de la forme
C Subroutine SM(N,T,Y,DY)
C DY(1)= ...
C DY(2)= ...
C .
C .
C DY(N)= ...
C Return
C End
C et avoir été déclaré dans une instruction External.
C
C N Ordre du système différentiel.
C
C T Variable indépendante.
C
C DT Pas d'intégration.
C
C Y Vecteur des variables d'état.
C
C **********************************************************************
C
Implicit None
C
Integer N
Real*8 DT,T,Y(N)
C
Integer I
Real*8 DY(N),K1(N),K2(N),K3(N),K4(N),Z(N)
C
Call SM(N,T,Y,DY)
Do I=1,N
K1(I)=DT*DY(I)
Z(I)=Y(I)+K1(I)/2.d0
End Do
C
Call SM(N,T+DT/2.d0,Z,DY)
Do I=1,N
K2(I)=DT*DY(I)
Z(I)=Y(I)+K2(I)/2.d0
End Do
C
Call SM(N,T+DT/2.d0,Z,DY)
Do I=1,N
K3(I)=DT*DY(I)
Z(I)=Y(I)+K3(I)
End Do
C
Call SM(N,T+DT,Z,DY)
Do I=1,N
K4(I)=DT*DY(I)
Y(I)=Y(I)+(K1(I)+2.d0*K2(I)+2.d0*K3(I)+K4(I))/6.d0
End Do
C
T=T+DT
Return
C
End |
Partager