C
C PAGE 394-396: NUMERICAL MATHEMATICS AND COMPUTING, CHENEY/KINCAID, 1985
C
C FILE: RK4SYS.FOR
C
C RUNGE-KUTTA METHOD OF ORDER 4 FOR A SYSTEM OF ODE'S (RK4SYS,XPSYS)
C
      DIMENSION  X(3) 
      DATA  N/3/, T/0.0/, X/0.0,1.0,0.0/
      DATA  H/0.01/, NSTEP/100/ 
      CALL RK4SYS(N,T,X,H,NSTEP)
      STOP
      END 
  
      SUBROUTINE XPSYS(X,F) 
      DIMENSION  X(3),F(3)  
      F(1) = 1.0
      F(2) = X(2) - X(3) + X(1)*(2.0 - X(1)*(1.0+ X(1)))  
      F(3) = X(2) + X(3) - X(1)*X(1)*(4.0 - X(1)) 
      RETURN
      END 

      SUBROUTINE RK4SYS(N,T,X,H,NSTEP)
      DIMENSION  X(10),Y(10),F1(10),F2(10),F3(10),F4(10)  
      PRINT 7,T,(X(I),I=1,N)
      H2 = 0.5*H  
      START = T   
      DO 6 K = 1,NSTEP      
        CALL XPSYS(X,F1)    
        DO 2 I = 1,N
          Y(I) = X(I) + H2*F1(I)      
   2    CONTINUE
        CALL XPSYS(Y,F2)    
        DO 3 I = 1,N
          Y(I) = X(I) + H2*F2(I)      
   3    CONTINUE
        CALL XPSYS(Y,F3)    
        DO 4 I = 1,N
          Y(I) = X(I) + H*F3(I)       
   4    CONTINUE
        CALL XPSYS(Y,F4)    
        DO 5 I = 1,N
          X(I) = X(I) + H*(F1(I) + 2.0*(F2(I) + F3(I)) + F4(I))/6.0 
   5    CONTINUE
        T = START + REAL(K)*H 
        PRINT 7,T,(X(I),I = 1,N)      
   6  CONTINUE
   7  FORMAT(2X,'T,X:',E10.3,5(2X,E22.14))
      RETURN      
      END 

