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

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
3 replies · 3K views
Metalman9
Messages
1
Reaction score
0
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:

ssd.png


Code:
	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?
 
on Phys.org
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:
	DIMENSION X(0:401)
	DIMENSION Y1(0:401)
	DIMENSION Y2(0:401)
 
Your next question will probably be "why doesn't the WRITE statement output the correct values" :smile:

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.