The first form transfers the entire array; the second form, which just transfers a section starting at the specified element, is described in more detail further on.
The simplest, and most common, requirement is to make the entire contents of an array available in a procedure. If the actual argument arrays are always going to be the same size then the dummy arrays in the procedure can use fixed bounds. For example:
SUBROUTINE DOT(X, Y, Z) *Computes the dot product of arrays X and Y of 100 elements * producing array Z of the same size. REAL X(100), Y(100), Z(100) DO 15, I = 1,100 Z(I) = X(I) * Y(I) 15 CONTINUE ENDThis procedure could be used within a program unit like this:
PROGRAM PROD REAL A(100), B(100), C(100) READ(UNIT=*,FMT=*)A,B CALL DOT(A, B, C) WRITE(UNIT=*,FMT=*)C ENDThis is perfectly legitimate, if inflexible, since it will not work on arrays of any other size.