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

FORTRAN 90: Peculiar bug (?)

  1. Apr 8, 2010 #1
    Hi all,
    I encountered a problem while running a FORTRAN 90 program, which appears (to me) to be quite surprising. Can someone please explain the following things:
    1. Why the (4,1) element of the beta matrix is 5.0 instead of being 2.0 ??
    2. Why the (5,8) element of the beta matrix is non-zero instead of being zero ??

    Here comes the program with the results at the end:

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    PROGRAM hamiltonian
    IMPLICIT NONE
    INTEGER :: N,i,j,k
    REAL, ALLOCATABLE, DIMENSION (:,:) :: alpha,beta
    COMPLEX, ALLOCATABLE, DIMENSION (:,:) :: hk


    N=8

    ALLOCATE (alpha(N,N),beta(N,N),hk(N,N))

    alpha=0.
    beta=0.
    hk=(0.,0.)

    DO k=0,(N-4)/4

    alpha(4*k+1,4*k+1-3)=5.
    alpha(4*k+1,4*k+1+1)=5.
    alpha(4*k+2,4*k+2-1)=5.
    alpha(4*k+2,4*k+2+1)=5.
    alpha(4*k+2,4*k+2+3)=5.
    alpha(4*k+3,4*k+3-1)=5.
    alpha(4*k+3,4*k+3+1)=5.
    alpha(4*k+3,4*k+3+5)=5.
    alpha(4*k+4,4*k+4-5)=5.
    alpha(4*k+4,4*k+4-1)=5.

    beta(4*k+4,4*k+4-3)=2.

    END DO

    DO i=1,N
    OPEN (UNIT=10,FILE='alpha.dat')
    WRITE(10,100)(alpha(i,j),j=1,N)
    100 FORMAT(8(3X,F3.1))
    OPEN (UNIT=20,FILE='beta.dat')
    WRITE(20,200)(beta(i,j),j=1,N)
    200 FORMAT(8(3X,F3.1))
    END DO

    CLOSE (10)
    CLOSE (20)

    END PROGRAM

    ============================================================
    ~ RESULTS ~

    alpha.dat :


    0.0 5.0 0.0 0.0 0.0 0.0 0.0 0.0
    5.0 0.0 5.0 0.0 5.0 0.0 0.0 0.0
    0.0 5.0 0.0 5.0 0.0 0.0 0.0 5.0
    0.0 0.0 5.0 0.0 0.0 0.0 0.0 0.0
    0.0 5.0 0.0 0.0 0.0 5.0 0.0 0.0
    0.0 0.0 0.0 0.0 5.0 0.0 5.0 0.0
    0.0 0.0 0.0 0.0 0.0 5.0 0.0 5.0
    0.0 0.0 5.0 0.0 0.0 0.0 5.0 0.0


    beta.dat :

    0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
    0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
    0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
    5.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
    0.0 0.0 0.0 5.0 0.0 0.0 0.0 0.0
    0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
    0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
     
  2. jcsd
  3. Apr 8, 2010 #2
    For some reason the above post doesn't have the last row of the beta matrix which is:

    0.0 0.0 0.0 0.0 2.0 0.0 0.0 0.0

    So, the total form of the beta matrix is :

    beta.dat :

    0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
    0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
    0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
    5.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
    0.0 0.0 0.0 5.0 0.0 0.0 0.0 0.0
    0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
    0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
    0.0 0.0 0.0 0.0 2.0 0.0 0.0 0.0
     
  4. Apr 8, 2010 #3
    This line is probably a problem:

    alpha(4*k+3,4*k+3+5)=5.

    When k = N-4/4 then the second index is 4*k+8 = N+4 which is out of bounds of alpha. So you are writing to something else in the heap which is probably beta. Generally writing out of bounds is a very bad thing, and a variety of strange things can happen as a result.

    You're getting a value at row 8, column 5 in your beta matrix because of this one:
    beta(4*k+4,4*k+4-3)=2.
    When N = 1 the indices evaluate to beta(8,5).

    You could make your code a bit easier to read by defining a quantity like index = 4*k+1 inside your loop.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: FORTRAN 90: Peculiar bug (?)
  1. Fortran 90 (Replies: 7)

  2. Fortran 77 output bugs (Replies: 2)

  3. Fortran 90 (Replies: 1)

  4. Fortran 90 (Replies: 1)

Loading...