Intel® Fortran Compiler 18.0 Developer Guide and Reference

Assumed-Rank Specifications

An assumed-rank array is declared with array bounds.

You declare an assumed-rank object (a dummy variable) by using DIMENSION(..) or (..)array bounds in its declaration.

Its rank is assumed from its effective argument, which means it is passed by descriptor.

An assumed-rank entity must not have the CODIMENSION or VALUE attribute. It can have the CONTIGUOUS attribute.

An assumed-rank variable name must not appear in a designator or expression except as one of the following:

If an assumed-size or nonallocatable, nonpointer, assumed-rank array is an actual argument corresponding to a dummy argument that is an INTENT(OUT) assumed-rank array, it must not be polymorphic, finalizable, of a type with an allocatable ultimate component, or of a type for which default initialization is specified.

You can find the rank of an assumed-rank object by using the RANK intrinsic.

If a procedure has an assumed-rank argument, the procedure must have an explicit interface.

When an assumed-rank object is passed from Fortran to a BIND(C) routine, it is passed by C descriptor. A Fortran procedure that has the BIND(C) language-binding-spec attribute will also receive an assumed-rank object by C descriptor.

Examples

The following shows an assumed-rank object:

SUBROUTINE sub (foo, bar) 
! As sub does not have BIND, foo and bar are passed by "normal" descriptor
REAL, DIMENSION(..) :: foo
INTEGER :: bar(..)

INTERFACE
  SUBROUTINE csub (baz) BIND(C)
  REAL, DIMENSION(..) :: baz 
  END SUBROUTINE
END INTERFACE

CALL baz(foo)   ! Passed by C descriptor

See Also