Array: istruzione FORALL

F95 introduce il costrutto FORALL come alternativa ai cicli DO per facilitare l'uso della notazione vettoriale.

Sulla riga del FORALL ci possono stare una o più assegnazioni di triplette del tipo [start]:[stop][:incr] a variabili intere che saranno gli indici del ciclo, più un'eventuale espressione logica scalare che può fare uso delle suddette variabili intere e funge da maschera.

All'interno del blocco FORALL possono esistere solo operazioni di assegnazione facenti eventualmente uso delle variabili intere indici del FORALL, oppure altri FORALL o WHERE innestati. Tali assegnazioni verranno effettuate per i valori specificati sopra delle variabili intere e sotto il controllo dell'eventuale maschera presente.

Il tutto termina ovviamente con END FORALL.

Il costrutto FORALL rende i cicli con assegnazioni vettoriali più compatti e più facilmente ottimizzabili dai compilatori, specie su architetture di tipo vettoriale.

PROGRAM pertutti
IMPLICIT NONE

INTEGER, PARAMETER :: ie=20, je=30, ke=60
REAL, PARAMETER :: rmiss=-1.0E15
REAL :: p(ie,je,ke), pp(ie,je,ke), p0(ke)
INTEGER, i, j, k

FORALL(i=1:ie, j=1:je, k=1:ke, pp(i,j,k) /= rmiss)
  p(i,j,k) = pp(i,j,k) + p0(k)
END FORALL

END PROGRAM pertutti