Assumed-shape arrays are dummy argument arrays where the extent of each dimension is taken from the associated actual arguments. Because the names of assumed-shape arrays are dummy arguments, they must be declared inside subprograms.
Assumed_shape_spec_list |
---|
.-,------------------. V | >>---+-------------+--:-+-------------------------------------->< '-lower_bound-' |
Each lower bound defaults to one, or may be explicitly specified. Each upper bound is set on entry to the subprogram to the specified lower bound (not the lower bound of the actual argument array) plus the extent of the dimension minus one.
The extent of any dimension is the extent of the corresponding dimension of the associated actual argument.
The rank is the number of colons in the assumed_shape_spec_list.
The shape is assumed from the associated actual argument array.
The size is determined on entry to the subprogram where it is declared, and equals the size of the associated argument array.
INTERFACE SUBROUTINE SUB1(B) INTEGER B(1:,:,10:) END SUBROUTINE END INTERFACE INTEGER A(10,11:20,30) CALL SUB1 (A) END SUBROUTINE SUB1(B) INTEGER B(1:,:,10:) ! Inside the subroutine, B is associated with A. ! It has the same extents as A but different bounds (1:10,1:10,10:39). END SUBROUTINE