Polja deklratiramo i atributom dimension. Pomnite, da so polja shranjena v spominu kot kolone, kar pri izpisu izgleda kot transponiran izpis. Tako bo pri definiciji
real, dimension(3,2) :: a
write(*,*) a
izpisalo polja v naslednjem vrstnem redu: 1,3, 5, 2, 4, 6
Če želimo pravilen matematični izpis po vrsticah je potrebno izpisati v zanki
do i = 1,3
write(*,*) (a(i,j), j = 1,2) ) ! vgrajena zanka
end do
Za primer polja
real, dimension(1:10) :: a
lahko dele polja naslovimo z
Tako lahko tudi cele range uporabljamo v artimetiki
Lahko tudi inicializiramo ob začetku programa s konstruktorjem (/.../)
ali z vsebovano zanko
Za medsebojno delo morajo biti polja skladna (konformna)
Za polja obstajajo tudi pogojni operatorji, ji se izvajajo na polju kot celota
where (logical array-expression) array assignments [else where] (logical array-expression) array assignments end where
Namesto
do i = 1, n
a(i, i) = x(i)
end do
lahko uporabimo tudi
forall(i = 1:n) a(i, i) = x(i)
ali celo bolj zahtevne izvedbe
forall(i = 1:n)
where (a(i, :) == 0) a(i, :) = i
b(i, :) = i / a(i, :)
end forall
lahko apliciramo tudi na polja kot celoto s tem da npr. a = sqrt(a) izračuna korene za vse elemente polja. Za polja imamo tudi vgrajene funkcije za poizvedovanje (size, lbound, ubound,shape) in pretvorbo:
Fortran omogoča prilagodljive velikosti polj
real, dimension(:) :: a! 1D polje
real, dimension(:,:) :: b! 2D polje
real, dimension(:,:,:) :: c ! 3D polje
Lokalne spremenljivke, ki so spremenljive velikosti so avtomatske. Velikost je lahko predpostavljana
subroutine swap(a, b)
real, dimension(:), intent(inout) :: a, b
Deklarira se jih z:
real, dimension(:), allocatable:: names ! 1D polje
real, dimension(:,:), allocatable:: grid ! 2D polje
Spomin se alocira (priredi) in dealocira (sprosti) z ukazom
allocate(work(n,2*n,3*n))
deallocate(work)
Primer dimaničih polj v modulu:
module work_array
implicit none
integer :: n
real, dimension(:,:,:), allocatable:: work
end module work_array
program main
use work_array
implicit none
read(*,*) n
allocate(work(n,2*n,3*n))
. . .
deallocate(work)
end program main