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.
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
Thread 'Project Documentation'
Trying to package up a small bank account manager project that I have been tempering on for a while. One that is certainly worth something to me. Although I have created methods to whip up quick documents with all fields and properties. I would like something better to reference in order to express the mechanical functions. It is unclear to me about any standardized format for code documentation that exists. I have tried object orientated diagrams with shapes to try and express the...

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