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
Lower and upper bounds along the 2 (or more) dimensions can be accessed by the intrinsic functions
lbound(geese,2) would return
ubound(geese,1) would return
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.