Fortran Solving Fortran 77 Mystery: nran(i)=mod(int(i*ranw(Idum)),i) + 1

AI Thread Summary
The discussion centers on a line of code in a Fortran 77 program: nran(i)=mod(int(i*ranw(Idum)),i) + 1. The user is puzzled about how nran is treated as a variable without explicit dimensioning and why it only works when placed immediately after variable declarations. The clarification provided explains that nran is a statement function, a feature in Fortran 77 that allows for one-line function declarations before executable statements. This function can be called later in the program, which resolves the user's confusion regarding its use as an array and the syntax similarities between array access and function calls. The user acknowledges this understanding, noting the distinction between reading from an array and invoking a function.
kanato
Messages
415
Reaction score
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" .

(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:
Technology news on Phys.org
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.
 
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.
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
Thread 'Project Documentation'
Trying to package up a small bank account manager project that I have been tempering on for a while. One that is certainly worth something to me. Although I have created methods to whip up quick documents with all fields and properties. I would like something better to reference in order to express the mechanical functions. It is unclear to me about any standardized format for code documentation that exists. I have tried object orientated diagrams with shapes to try and express the...

Similar threads

Replies
4
Views
2K
Replies
13
Views
1K
Replies
6
Views
2K
Replies
6
Views
2K
Replies
36
Views
3K
Replies
17
Views
2K
Replies
2
Views
2K
Back
Top