Weird Fortran 77 line

  • Fortran
  • Thread starter kanato
  • Start date
  • #1
415
0

Main Question or Discussion Point

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:

Answers and Replies

  • #2
alphysicist
Homework Helper
2,238
1
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.
 
  • #3
415
0
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.
 

Related Threads for: Weird Fortran 77 line

  • Last Post
Replies
1
Views
2K
  • Last Post
Replies
7
Views
5K
Replies
8
Views
2K
  • Last Post
Replies
1
Views
4K
  • Last Post
Replies
2
Views
2K
  • Last Post
Replies
4
Views
2K
  • Last Post
Replies
6
Views
5K
  • Last Post
Replies
2
Views
537
Top