Fortran Arrays Basic notation


Any type can be declared as an array using either the dimension attribute or by just indicating directly the dimension(s) of the array:

! One dimensional array with 4 elements
integer, dimension(4) :: foo

! Two dimensional array with 4 rows and 2 columns
real, dimension(4, 2) :: bar

! Three dimensional array
type(mytype), dimension(6, 7, 8) :: myarray

! Same as above without using the dimension keyword
integer :: foo2(4)
real :: bar2(4, 2)
type(mytype) :: myarray2(6, 7, 8)

The latter way of declaring multidimensional array, allows the declaration of same-type different-rank/dimensions arrays in one line, as follows

real :: pencil(5), plate(3,-2:4), cuboid(0:3,-10:5,6)

The maximum rank (number of dimensions) allowed is 15 in Fortran 2008 standard and was 7 before.

Fortran stores arrays in column-major order. That is, the elements of bar are stored in memory as follows:

bar(1, 1), bar(2, 1), bar(3, 1), bar(4, 1), bar(1, 2), bar(2, 2), ...

In Fortran, array numbering starts at 1 by default, in contrast to C which starts at 0. In fact, in Fortran, you can specify the upper and lower bounds for each dimension explicitly:

integer, dimension(7:12, -3:-1) :: geese

This declares an array of shape (6, 3), whose first element is geese(7, -3).

Lower and upper bounds along the 2 (or more) dimensions can be accessed by the intrinsic functions ubound and lbound. Indeed lbound(geese,2) would return -3, whereas ubound(geese,1) would return 12.

Size of an array can be accessed by intrinsic function size. For example, size(geese, dim = 1) returns the size of first dimension which is 6.