5 ! Contributed by Daniel Carrera
7 pure
function runge_kutta_step(t
, r_
, dr
, h
) result(res
)
8 real, intent(in
) :: t
, r_(:), h
9 real, dimension(:), allocatable
:: k1
, k2
, k3
, k4
, res
13 pure
function dr(t
, r_
) ! { dg-error "cannot have a deferred shape" }
14 real, intent(in
) :: t
, r_(:)
20 allocate(k1(N
),k2(N
),k3(N
),k4(N
),res(N
))
23 k2
= dr(t
+ h
/2, r_
+ k1
*h
/2)
24 k3
= dr(t
+ h
/2, r_
+ k2
*h
/2)
25 k4
= dr(t
+ h
, r_
+ k3
*h
)
27 res
= r_
+ (k1
+ 2*k2
+ 2*k3
+ k4
) * h
/6