# Runge-Kutta 4 order method. Severe 161: Array bounds exceeded.

1. Dec 16, 2013

### Metalman9

So here I am trying to solve Rayleigh's differential equation using Rungen-Kutta 4th order analytic method.

This is what the exercise gives me: X(0 to 40), Y1(0)=0.1, Y2(0)=0, H=0.1, μ=0.5

This is what I ve written and gives me this error:

Code (Text):
IMPLICIT REAL*8(A-K,O-Z)
DIMENSION X(401)
DIMENSION Y1(401)
DIMENSION Y2(401)

F2(X,Y1,Y2)=0.5D0*Y2-(0.5D0/3.0D0*(Y2**3))-Y1

H=0.1D0
X(0)=0
Y1(0)=0.01D0
Y2(0)=0

DO I=1,400
X(I)=X(I-1)+H
END DO

DO I=0,400

K1=H*Y2(I)
L1=H*F2(X(I),Y1(I),Y2(I))
K2=H*(Y2(I)+L1/2.0D0)
L2=H*F2(X(I)+H/2.0D0,Y1(I)+K1/2.0D0,Y2(I)+L1/2.0D0)
K3=H*(Y2(I)+L2/2.0D0)
L3=H*F2(X(I)+(H/2.0D0),Y1(I)+(K2/2.0D0),Y2(I)+(L2/2.0D0))
K4=H*(Y2(I)+L3)
L4=H*F2(X(I)+H,Y1(I)+K3,Y2(I)+L3)

Y1(I+1)=Y1(I)+(1.0D0/6.0D0)*(K1+2.0D0*K2+2.0D0*K3+K4)
Y2(I+1)=Y2(I)+(1.0D0/6.0D0)*(K1+2.0D0*K2+2.0D0*K3+K4)
END DO

WRITE(*,30)X(I),Y1(I),Y2(I)
30  FORMAT(2X,F8.6,2X,F8.6,2X,F8.6)

STOP
END
Any ideas why am I exceeding array bounds?

2. Dec 16, 2013

### D H

Staff Emeritus
Array indices in Fortran start at 1. You are setting and accessing x(0), y1(0), and y2(0). That index of 0 is out of bounds.

3. Dec 16, 2013

### Staff: Mentor

You can easily make the array indices start at zero, which may be easier than fixing your index-manipulating code so that it doesn't use a zero index value.

Code (Text):

DIMENSION X(0:401)
DIMENSION Y1(0:401)
DIMENSION Y2(0:401)

4. Dec 16, 2013

### AlephZero

Your next question will probably be "why doesn't the WRITE statement output the correct values"

To answer that yourself, print out the value of I after the DO loop. If I remember the FORTRAN standard correctly, it won't be equal to 400.