forums.silverfrost.com Forum Index forums.silverfrost.com
Welcome to the Silverfrost forums
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

How to store variable-dimension arays in a module (or central memory location)?

 
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> General
View previous topic :: View next topic  
Author Message
Anonymous
Guest





PostPosted: Wed May 17, 2006 9:45 am    Post subject: How to store variable-dimension arays in a module (or centra Reply with quote

Hello. Quick Q. Among the different ways to set up an array with
*variable* dimensions (automatic, allocatable, etc.), I cannot
figure out how to store such an array in a common, central
location for several subroutines to operate on. A module does
not allow variable dimensions, and subroutines (which do allow
variable dimensions) do not allow global, or even territorial,
access to their variables.

Is there a quick solution, or am I trying to do the impossible?

With many thanks,
Ludwig

Back to top
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7923
Location: Salford, UK

PostPosted: Thu May 18, 2006 1:54 am    Post subject: How to store variable-dimension arays in a module (or centra Reply with quote

Ludwig

Are you sure that you want to access one data array as having different dimensions in different contexts?
Fortran allows you to do this via EQUIVALENCE statements or via COMMON blocks that are defined differently in different context but this is only because Fortran is a very old language.

The only other way that I can think of is to use a one-dimensional array and to calculate the offsets manually (i.e in the code) for other dimensions.
Back to top
View user's profile Send private message AIM Address
Anonymous
Guest





PostPosted: Thu May 18, 2006 11:48 am    Post subject: How to store variable-dimension arays in a module (or centra Reply with quote

Dear Paul,

Many thanks for your commentary. The array would have consistent dimensions among all the subroutines that access it in a particular program. My reason for wanting variable array dimension is so that I don't have to change the array dimensions in the module that defines the array (i.e., a general math utility placed in a library) when I want to USE it in different programs for different purposes. I am beginning to suspect that what I seek cannot be done....

With many thanks and best regards,
Ludwig
Back to top
brucebowler
Guest





PostPosted: Thu May 18, 2006 12:32 pm    Post subject: How to store variable-dimension arays in a module (or centra Reply with quote

You can create an allocatable array in your main program, decide how big it needs to be, allocate it and then pass it, as an argument, from routine to routine which, unless you're dealing with multiple threads, does what you want to do. That is unless I missed something (entirely possible).

Also, I'm not sure your assertion that a "module does not allow variable dimensions" is correct. From Fortran 90/95 Explained by Metcalf and Reid (page 107 in my copy), they have an example that looks like...

module work_array
integer :: n
real, dimension(:,:,Smile, allocatable :: work
end module work_array
program main
use work_array
read *,n
allocate (work(n,2*n,3*n))
.
.
.
end program main

Again, maybe I'm missing something but that sounds like what you're looking for

Bruce
Back to top
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7923
Location: Salford, UK

PostPosted: Thu May 18, 2006 2:18 pm    Post subject: How to store variable-dimension arays in a module (or centra Reply with quote

My comment was based on the assumption that you wanted to access some data as a one dimensional array (say) a(Smile in one context and a two dimensional array a(:,Smile in another. If you have a fixed number of dimensions (indexes) and simply want to vary the range in each dimension then that is quite a different thing.
Back to top
View user's profile Send private message AIM Address
Display posts from previous:   
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> General All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group