      SUBROUTINE RK8(N,T,H,Y,DY,W,F)
C     ******************************************************************
C     EIGHTH ORDER RUNGE-KUTTA PROCEDURE FOR SOLVING DY=F(T,Y)
C     ******************************************************************
      REAL Y(N),DY(N),W(1)
      REAL A(7),B(8,7),C(7),D(9)
      EXTERNAL F
C     -------------------
      DATA A(1)/.3333333333333333/,  A(2)/.5/,  A(3)/.6666666666666666/,
     1     A(4)/.1666666666666666/,  A(5)/1./,  A(6)/.8333333333333333/,
     2     A(7)/1./
      DATA B(1,1)/1./,  B(2,1)/3./
      DATA B(1,2)/1./,  B(2,2)/0./,  B(3,2)/3./
      DATA B(1,3)/13./,  B(2,3)/-27./,  B(3,3)/42./,  B(4,3)/8./
      DATA B(1,4)/389./,  B(2,4)/-54./,  B(3,4)/966./,  B(4,4)/-824./,
     1     B(5,4)/243./
      DATA B(1,5)/-231./,  B(2,5)/81./,  B(3,5)/-1164./,  B(4,5)/656./,
     1     B(5,5)/-122./,  B(6,5)/800./
      DATA B(1,6)/-127./,  B(2,6)/18./,  B(3,6)/-678./,  B(4,6)/456./,
     1     B(5,6)/-9./,  B(6,6)/576./,  B(7,6)/4./
      DATA B(1,7)/1481./,  B(2,7)/-81./,  B(3,7)/7104./,
     1     B(4,7)/-3376./,  B(5,7)/72./,  B(6,7)/-5040./,
     2     B(7,7)/-60./,  B(8,7)/720./
      DATA C(1)/12./,  C(2)/8./,  C(3)/54./,  C(4)/4320./,  C(5)/20./,
     1     C(6)/288./,  C(7)/820./
      DATA D(1)/41./,  D(2)/0./,  D(3)/27./,  D(4)/272./,  D(5)/27./,
     1     D(6)/216./,  D(7)/0./,  D(8)/216./,  D(9)/41./
C     -------------------
      IF (H.EQ.0.) GO TO 40
      HA=H*4./27.
      DO 10 K=1,N
   10 W(K)=Y(K)+HA*DY(K)
      CALL F(T+HA,W(1))
      DO 11 K=1,N
   11 W(K)=Y(K)+H*(DY(K)/18.+W(K)/6.)
      CALL F(T+H*2./9.,W(1))
C
      I=1
      DO 22 M=2,8
      I=I+N
      M1=M-1
      DO 21 K=1,N
      SUM=B(1,M1)*DY(K)
      L=K
      DO 20 J=2,M
      SUM=SUM+B(J,M1)*W(L)
   20 L=L+N
   21 W(L)=Y(K)+SUM*H/C(M1)
   22 CALL F(T+A(M1)*H,W(I))
C
      DO 31 K=1,N
      SUM=D(1)*DY(K)
      L=K
      DO 30 M=2,9
      SUM=SUM+D(M)*W(L)
   30 L=L+N
      Y(K)=Y(K)+H*SUM/840.
   31 DY(K)=Y(K)
      T=T+H
      CALL F(T,DY)
      RETURN
C
   40 DO 41 K=1,N
   41 DY(K)=Y(K)
      CALL F(T,DY)
      RETURN
      END
