-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrk4.f90
50 lines (35 loc) · 1.31 KB
/
rk4.f90
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
subroutine rk4(theta1, theta2, chi1, chi2)
!==============================================================!
! Esta subrutina es el método del rk4. !
!==============================================================!
! En sí solo calcula el valor de las k's.
! Usamos el módulo 'vars' para tener información de los parámetros de entrada.
use vars
implicit none
! Declaramos los valores de entrada.
real(8) theta1, theta2, chi1, chi2
!-------------------------------------------
call derivadas( theta1, theta2, chi1, chi2 )
k1Th1 = dTh1
k1Th2 = dTh2
k1Xi1 = dXi1
k1Xi2 = dXi2
!-------------------------------------------
call derivadas( theta1 + medio*k1Th1*dt, theta2 + medio*k1Th2*dt, chi1 + medio*k1Xi1*dt, chi2 + medio*k1Xi2*dt )
k2Th1 = dTh1
k2Th2 = dTh2
k2Xi1 = dXi1
k2Xi2 = dXi2
!-------------------------------------------
call derivadas( theta1 + medio*k2Th1*dt, theta2 + medio*k2Th2*dt, chi1 + medio*k2Xi1*dt, chi2 + medio*k2Xi2*dt )
k3Th1 = dTh1
k3Th2 = dTh2
k3Xi1 = dXi1
k3Xi2 = dXi2
!-------------------------------------------
call derivadas( theta1 + k3Th1*dt, theta2 + k3Th2*dt, chi1 + k3Xi1*dt, chi2 + k3Xi2*dt )
k4Th1 = dTh1
k4Th2 = dTh2
k4Xi1 = dXi1
k4Xi2 = dXi2
end subroutine rk4