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

FORTRAN error array bound is not scalar integer

  1. Feb 6, 2014 #1
    FORTRAN error "array bound is not scalar integer"

    I'd like to know if a loop can be created, inside which I can call a subroutine in which there are arrays to be defined whose size varies as a function of loop variable. I tried as following, but got error "array bound is not scalar integer".
    How to solve this issue?
    attaching my code snippet here....


    Code (Text):
     
        .
        .
        iloop: do i=5,24,0.5
        jloop: do j=5,20
        call check(i,j,divlen,Machexit,final)
        if (final.eq.1) exit iloop
        enddo jloop
        enddo iloop
        .
        .
        end program
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        Subroutine check(i,j,divlen,Machexit,final)
        INTEGER, PARAMETER :: IVLpts=10
        real :: i,divlen,Machexit
        integer :: final,j
        integer :: exppts,intstrtpts,contourstrtpts,totalpts,P1,P2,P3,P4,P5,P6,P7
        exppts=((j*IVLpts)+((j-1)*(IVLpts-1)))
        P2=(exppts-IVLpts)
        P3=(IVLpts-1)
        P6=(exppts-P2)

        call check2(IVLpts,i,j,divlen,Machexit,final,exppts,P2,P3,P6)

        End subroutine check
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        Subroutine check2(IVLpts,i,j,divlen,Machexit,final,exppts,P2,P3,P6)
        Real, PARAMETER :: gamma=1.4d0,Mini=1.02d0
        integer,allocatable :: expcontourpts(:),M(:),x(:),y(:)
        real,allocatable :: AoverAstar(:),Mvariance(:)
        allocate(expcontourpts(exppts))
        allocate(M(exppts))
        allocate(x(exppts))
        allocate(y(exppts))
        allocate(AoverAstar(P6))
        allocate(Mvariance(P6))
        .
        .
        .
        End subroutine check2
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
  2. jcsd
  3. Feb 6, 2014 #2

    SteamKing

    User Avatar
    Staff Emeritus
    Science Advisor
    Homework Helper

    Well for one thing, one index of your 2-dimensional array is real, the other index is an integer. This is BAAAAAD programming practice. All of your array indexes must be integers.
     
  4. Feb 6, 2014 #3
    but there are no 2-d arrays at all....
    all the arrays are 1-d and all the indexes are integers, which are functions of J (from main prog J=5,20).
    So am not sure of what you have mentioned.
    Anyway, thanks for the reply....
     
  5. Feb 6, 2014 #4

    SteamKing

    User Avatar
    Staff Emeritus
    Science Advisor
    Homework Helper

    Then the problem lies in a portion of your code not included in the snippets attached to the OP. If you want help tracking down the error, you'll have to post the complete source code.
     
  6. Feb 6, 2014 #5
    I think the error message is correct.

    The problem is that you seem to be using implicit typing; meaning, there are variables that you have no declared in your subroutine and hence they would end up being INTEGERs only and only if the first letter of the variable is in between I and N, inclusive; otherwise, they will be REALs.

    In your sub check2, the last 4 arguments do not start with I-N, so, they are real and you use them as indices during the allocation.

    Anyway, that's all I can gather on a 1-second look at the code.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: FORTRAN error array bound is not scalar integer
  1. Fortran error (Replies: 33)

Loading...