Can equations be used in Fortran array declarations with parameters?

  • Context: Fortran 
  • Thread starter Thread starter Matterwave
  • Start date Start date
  • Tags Tags
    Array Fortran
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
4 replies · 2K views
Messages
4,102
Reaction score
429
Hi, I'm just wondering real quick, are equations allowed in array declarations? For example:

int :: y=2
int, dimension(2*y):: x

?
 
Physics news on Phys.org
I don't think the equation you have would be permitted, as the array bounds must be INTEGER constants. However, constants declared with the PARAMETER statement are OK for array declarations, as long as the PARAMETER statement precedes the array declaration.

http://star-www.st-and.ac.uk/~spd3/Teaching/AS3013/lectures/AS3013_lecture5.pdf
 
So even if y were a parameter, probably I still can't do that?

EDIT: I looked at a later part of the lecture and he had something like what I have except y is a parameter. So I think I'm doing OK. Thanks. :)
 
The whole point of a parameter in Fortran is that the parameter's value is known at compile time, so the compiler knows how much memory to allocate for the array. For a variable (not a parameter), the variable gets its value at run time, I believe.

Minor point. A statement such as y = 2 is an assignment, or in this case an initialization, not an equation. It does not state that y and 2 are equal. Instead, it stores the constant value 2 in the location that is named y.

Most programming languages make distinctions between assignment and testing for equality by using different symbols. For example, Fortran uses .EQ. to test for equality, and uses = for assignment. Languages based on C, such as C++, C#, Java, and others, use == to test for equality and = for assignment. Newer versions of Fortran now support the C-style notation, in addition to the older .EQ., .LT., GT., and other spelled-out relational operators.
 
Yes, I forgot to include that y is a parameter, and my language is lazy because I'm not a programmer really. Sorry for the confusion. :P

I just wanted to make sure that the statement

real, dimension(2*y)::x

is legitimate if y is a parameter, and Steamking's link had something just like that in it.