Fortran 90 places several restrictions on array assignments. In
particular, it requires that operands of the right side expressions be
conformable with the left hand side array. These restrictions can be
relaxed by introducing the element array assignment statement, usually
referred to as the FORALL statement.
This statement is used to specify an array assignment in
terms of array elements or groups of array sections, possibly masked
with a scalar logical expression.
In functionality, it is similar to
array assignment statements and WHERE statements.
The FORALL statement essentially
preserves the semantics of Fortran 90 array assignments and allows for
convenient assignments like
FORALL ( i=1:n, j=1:m ) a(i,j)=i+j
as opposed to standard Fortran 90
a = SPREAD((/(i,i=1,n)/), DIM=2, NCOPIES=m) + &
SPREAD((/(i,i=1,m)/), DIM=1, NCOPIES=n)
It can also express more general array sections than the standard triplet
notation for array expressions.
For example,
FORALL ( i = 1:n ) a(i,i) = b(i)
assigns to the elements on the main diagonal of array a.