Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

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

  1. Dec 16, 2013 #1
    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 (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. jcsd
  3. Dec 16, 2013 #2

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    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.
     
  4. Dec 16, 2013 #3

    jtbell

    User Avatar

    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)
     
     
  5. Dec 16, 2013 #4

    AlephZero

    User Avatar
    Science Advisor
    Homework Helper

    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.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Runge-Kutta 4 order method. Severe 161: Array bounds exceeded.
  1. Euler to Runge-Kutta 4 (Replies: 19)

Loading...