Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Beginner
39 Views

Allocatable or pointer attribute missing

It seems like every time I try to allocate the dimensions of an array in a subroutine I get the following error message:

Error 3 error #6596: If a deferred-shape array is intended, then the ALLOCATABLE or POINTER attribute is missing; if an assumed-shape array is intended, the array must be a dummy argument. 
 
I do not wish to make a dummy argument. This array is local and needs to stay within the subroutine. Therefore I am left with the first option. Yes this is a deferred shape array and that is the intent. Do I need to add an intent statement to the declaration? How can I get the array to carray the allocatable attribute?
0 Kudos
6 Replies
Highlighted
Beginner
39 Views

Nevermind, I got it. The declaration must explicitly state that the array is in fact allocatable as follows:

double precision, dimension(:,:),allocatable :: ArrayName

 

0 Kudos
Highlighted
Valued Contributor III
39 Views

double precision, dimension(:,:),allocatable :: ArrayName

real(dp), allocatable :: ArrayName(:,:)

It is mainly a style thing but the dimension attribute is largely superfluous these days. "Double precision" is also rather old hat, the "modern" way is to use REAL of a specific KIND.  This is more flexible in that you can then easily change the real kind

0 Kudos
Highlighted
39 Views

>>It is mainly a style thing but the dimension attribute is largely superfluous these days

Not when you wish to apply the array shape to multiple arrays:

double precision, dimension(:,:),allocatable :: ArrayName. BrrayName, CrrayName

Jim Dempsey

0 Kudos
Highlighted
Valued Contributor III
39 Views

jimdempseyatthecove wrote:

>>It is mainly a style thing but the dimension attribute is largely superfluous these days

Not when you wish to apply the array shape to multiple arrays:

double precision, dimension(:,:),allocatable :: ArrayName. BrrayName, CrrayName

Jim Dempsey

True, I did say " mostly". The usage I object to most is when the dimension statement is on a separate line and even worse seperated several lines from the type declareration. Do be honest I wouldn't lose any sleep if dimension was deleted from the language and I would bet if the language was being defined today it would not exist. 

0 Kudos
Highlighted
Honored Contributor I
39 Views

jimdempseyatthecove wrote:

>>It is mainly a style thing but the dimension attribute is largely superfluous these days

Not when you wish to apply the array shape to multiple arrays:

double precision, dimension(:,:),allocatable :: ArrayName. BrrayName, CrrayName

Jim Dempsey

Since Andrew's comment was in connection with style, readers may want to note there is growing consensus from a style perspective in the programming community spanning different languages and paradigms to have only

    one variable per declaration

Some quick links on this view include Google Java Style Guide and C++ for Programmers, etc.  

Given all the attributes one can tack on to variable declarations in Fortran, I suggest the same style and avoid statements such as 

double precision, dimension(:,:),allocatable :: ArrayName. BrrayName, CrrayName

 

0 Kudos
Highlighted
Valued Contributor III
39 Views

I would agree with FF. Whilst I don't religiously follow one variable per declaration I do follow that rule for the most part particularly so with dummy args as it give much more clarity to see things at a glance IMO and also the option to tag a comment on the end .

0 Kudos