Intel® Fortran Compiler

Developer Guide and Reference

ID 767251
Date 12/12/2025
Public
Document Table of Contents

Assumed-Shape Specifications

An assumed-shape array is a dummy argument array that assumes the shape of its associated actual argument array. An assumed-shape specification takes the following form:

([dl]:[, [dl]:] ...)

or

rank-clause

dl

Is a specification expression indicating the lower bound of the dimension. The expression can have a positive, negative, or zero value. If necessary, the value is converted to integer type.

If the lower bound is not specified, it is assumed to be 1.

rank-clause

Is a RANK clause specifying the number of dimensions, which may be zero. Each dimension has a lower bound of one.

The rank of the array is the number of colons (:) specified.

The value of the upper bound is the extent of the corresponding dimension of the associated actual argument array + lower-bound - 1.

Examples

The following is an example of an assumed-shape specification:

PROGRAM MAIN
INTERFACE
  SUBROUTINE SUB(M, N)
    INTEGER M(:, 1:, 5:)
    INTEGER, RANK (2) :: N
  END SUBROUTINE
END INTERFACE
INTEGER L(20, 5:25, 10)

CALL SUB(L)
... 
END PROGRAM

SUBROUTINE SUB(M)
  INTEGER M(:, 1:, 5:)
  INTEGER N(:, :)
END SUBROUTINE

Array M has the same extents as array L, but array M has bounds (1:20, 1:21, 5:14).

Note that an explicit interface is required when calling a routine that expects an assumed-shape or pointer array.

Consider the following:

 SUBROUTINE ASSUMED(A)
   REAL A(:, :, :)

Array A has rank 3, indicated by the three colons (:) separated by commas (,). However, the extent of each dimension is unspecified. When the subroutine is called, A takes its shape from the array passed to it. For example, consider the following:

 REAL X (4, 7, 9)
 ...
 CALL ASSUMED(X)

This declaration gives A the dimensions (4, 7, 9). The actual array and the assumed-shape array must have the same rank.

Consider the following:

 SUBROUTINE ASSUMED(A)
   REAL A(3:, 0:, -2:)
 ...

If the subroutine is called with the same actual array X(4, 7, 9), as in the previous example, the lower and upper bounds of A would be:

A(3:6, 0:6, -2:6)