Visible to Intel only — GUID: GUID-5F67FE2C-7B78-42F4-B2AA-F932BADB858A
Visible to Intel only — GUID: GUID-5F67FE2C-7B78-42F4-B2AA-F932BADB858A
CODIMENSION
Statement and Attribute: Specifies that an entity is a coarray, and specifies its corank and cobounds, if any.
The CODIMENSION attribute can be specified in a type declaration statement or a CODIMENSION statement, and takes one of the following forms:
Type Declaration Statement:
type, [att-ls,] CODIMENSION [coarray-spec] :: var-list [(array-spec)]...
type, [att-ls,] var-list [(array-spec)] [coarray-spec]...
Statement:
CODIMENSION [::] var-list [coarray-spec]...
type |
Is a data type specifier. |
att-ls |
Is an optional list of attribute specifiers. |
coarray-spec |
Is an allocatable (deferred-coshape) coarray or an explicit-coshape coarray. |
var-list |
Is a list of variable names, separated by commas. |
Description
In Intel® Fortran, the sum of the rank and corank of an entity must not exceed 31. The Fortran 2018 Standard allows a combined rank of up to 15.
A coarray must be a component or a variable that is not a function result.
A coarray must not be of type C_PTR or C_FUNPTR from the intrinsic module ISO_C_BINDING or of type TEAM_TYPE from the intrinsic module ISO_FORTRAN_ENV.
An entity whose type has a coarray ultimate component must be a nonpointer nonallocatable scalar, must not be a coarray, and must not be a function result.
A coarray or an object with a coarray ultimate component must be an associate name, a dummy argument, or have the ALLOCATABLE or SAVE attribute.
A coarray must not be a dummy argument of a procedure that has a BIND attribute.
A coarray can be a derived type with pointer or allocatable components. The target of such a pointer component is always on the same image as the pointer.
Examples
Explicit-shape coarrays that are not dummy arguments must have the SAVE attribute. Because of this, automatic coarrays are not allowed. For example, coarray TASK in the following code is not valid:
SUBROUTINE SUBA(I,C,D)
INTEGER :: I
REAL :: C(I)[*], D(I)
REAL :: TASK(I)[*] ! Not permitted
The following lines show valid examples of CODIMENSION attribute specifications:
REAL, CODIMENSION[3,*] :: B(:) ! Assumed-shape coarray
REAL R(50,50)[0:5,*] ! Explicit-shape coarray
REAL, CODIMENSION[*] :: A ! Scalar coarray
REAL, CODIMENSION[:],ALLOCATABLE :: C(:,:) ! Allocatable coarray