Search code examples
arraysfortranfortran90

array of arrays in fortran


I am trying to define a array of arrays. I have defined:

  integer,dimension(2,2):: & 
    x=reshape(source= (/0,1,1,0/),  shape=(/2,2/)), & 
    y=reshape(source= (/1,0,0,1/),  shape=(/2,2/)), & 
    z=reshape(source= (/1,1,1,1/),  shape=(/2,2/)) 

I want to define an array, say, s(3), of which, (x/y/z) are components, i.e.

s(1)=x 
s(2)=y 
and s(3)=z

how can I achieve that?


Solution

  • The simplest approach might be to define s as a rank-3 array, perhaps

    integer, dimension(3,2,2) :: s
    

    and then you can write statements such as

    s(1,:,:) = x
    s(2,:,:) = y
    ...
    

    This is the 'natural' way to implement an array of arrays in Fortran. An alternative, which might appeal to you more would be something like:

    type :: twodarray
       integer, dimension(2,2) :: elements
    end type twodarray
    
    type(twodarray), dimension(3) :: s
    
    s(1)%elements = x
    

    If you don't like the wordiness of s(1)%elements = x you could redefine the operation = for your type twodarray, I don't have time right now to write that code for you.