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

AI Thread Summary
The discussion focuses on solving Rayleigh's differential equation using the 4th order Runge-Kutta method in Fortran. The user encounters an "array bounds exceeded" error due to accessing indices that start at zero, which is out of bounds in Fortran where arrays typically start at one. To resolve this, it's suggested to redefine the array dimensions to include zero, allowing for proper indexing. Additionally, there is a note on ensuring the WRITE statement outputs correct values by checking the value of the loop index after the DO loop, as it may not equal 400 due to the way the loop is structured. This highlights the importance of careful index management in Fortran programming to avoid runtime errors.
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?
 
Technology news on Phys.org
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.
 
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.
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...

Similar threads

Replies
15
Views
3K
Replies
1
Views
3K
Replies
4
Views
8K
Replies
8
Views
2K
Replies
2
Views
2K
Replies
5
Views
2K
Replies
13
Views
5K
Back
Top