# Fortran Basic notation

## Example

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. PDF - Download Fortran for free