About overall loop indexes
Why does language demand use of shift? Could we just write:
overall (i = x for 1 : N - 2)
overall (j = y for 1 : N - 2)
u[i, j] = 0.25 * (u[i-1, j] + u[i+1, j] +
u[i, j-1] + u[i, j+1]);
Generally, no. Symbols i, j are not integer loop indexes. They are distributed indexes.
Value of a distributed index is a location—an abstract element of a distributed range.