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

Weird Fortran 77 line

  1. Jun 10, 2008 #1
    I have this line in a Fortran 77 program, and I don't understand how it works:

    nran(i)=mod(int(i*ranw(Idum)),i) + 1

    What I don't understand is that nran is not a function, nor is it dimensioned anywhere (its type is implicitly an integer). This line only works if it comes right after the variable declarations in the function. If I put some non-declaration statement above it then the compiler (ifort 9.1, Linux ia64) complains that nran is not a function or dimensioned anywhere. That's sort of a big "duh" but I don't understand why this works if it's above with the variable declarations. It seems to be declaring an array for nran, but I have no idea how it knows what size/bounds to make it, as there is no indication of what values i should take.

    If you are interested, this is a program based off the lisaqmc.f program available http://www.physics.rutgers.edu/~udo/qmc/readme_lisaqmc.html" [Broken].

    (I should mention, I understand what mod and int are, and ranw is a function which returns a random real number using the seed given in Idum. This line would be totally clear to me if it was in a loop and nran was dimensioned somewhere.)
    Last edited by a moderator: May 3, 2017
  2. jcsd
  3. Jun 10, 2008 #2


    User Avatar
    Homework Helper

    Hi kanato,

    That is a statement function. In fortran 77 rather than write a separate function subprogram, you could use statement functions, which were one-line declarations of functions that had to come before the executable statements (and that were only accessible to the program part that called them). You should be able to find instances where nran() is being called later on in that same part of the program.

    So the line you are referring to is the definition of the function nran() that is being used elsewhere in the program.
  4. Jun 10, 2008 #3
    Ok, that makes a lot more sense. I was a little confused because it looks like it's being read as an array latter on, but of course reading from an array and calling a function have the same syntax. Thanks for the clarification.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook