!  4-th order Runge-Kutta for use with nb1step.
!
!  File:  rk4.fcm

      subroutine Onestep(h, S)
      USE nbrmod
      IMPLICIT NONE
      real h
      integer S

      INTERFACE
	subroutine Grav(X)
        USE nbrmod
        real, dimension(1:N, 1:3) :: X
	end subroutine Grav
      END INTERFACE

      real, dimension(1:N, 1:3) :: V2, V3, V4, A1, A2, A3, A4
      real h2
      integer u

      h2 = 0.5*h
      do, u = 1, S
	call Grav(X0);  A1 = Ac			! Z1 = [V0, A1]
	V2 = V0 + h2*A1
	call Grav(X0 + h2*V0);  A2 = Ac		! Z2 = [V2, A2]
	V3 = V0 + h2*A2
	call Grav(X0 + h2*V2);  A3 = Ac		! Z3 = [V3, A3]
	V4 = V0 + h*A3
	call Grav(X0 +  h*V3);  A4 = Ac		! Z4 = [V4, A4]
	X0 = X0 + h*(V0 + 2.0*(V2 + V3) + V4)/6.0
	V0 = V0 + h*(A1 + 2.0*(A2 + A3) + A4)/6.0
      end do
      end subroutine Onestep
