La estructura FORALL se ejecuta en cuatro pasos:
Por ejemplo para siguiente código:
a = (/ 4, -1, 2, -6, 0, -2, 5, -4 /) FORALL(i=1:12:2,a(i) /= 0) b(i) = 1.0/a(i)
Primero se calcula el conjunto de índices en base a la tripleta que los define i=1:12:2
luego define el subconjunto de índices válidos de acuerdo a la condición lógica a(i) /= 0
despues evalua todos los valores del lado derecho de la asignación 1.0/a(i)
por último asigna los valores a las variables respectivas del lado izquierdo
Un código equivalente al anterior escrito utilizando la estructura DO es el siguiente:
a = (/ 4, -1, 2, -6, 0, -2, 5, -4 /) DO i=1,8,2 IF (a(i) =/ 0.0) b(i) = 1.0/a(i) END DO
Al comparar los gráficos de precedencia del DO, a la izquierda, y del FORALL, a la derecha, se ve claramente la gran diferencia que existe entre estos dos constructores.
Miestras que el DO ejecuta una iteración despues de otra, el FORALL ejecuta un pasos y cuando finalice su ejecución para cada uno de los elementos que intervienen en el se ejecuta el paso siguiente.
La estructura FORALL ... END FORALL permite además de asignaciones, estructuras WHERE y FORALL.