Intel® Fortran Compiler Classic and Intel® Fortran Compiler Developer Guide and Reference

ID 767251
Date 3/22/2024
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

IMAGE_INDEX

Transformational Intrinsic Function (Generic): Converts cosubscripts to an image index.

result = IMAGE_INDEX (coarray, sub)

result = IMAGE_INDEX (coarray, sub, team)

result = IMAGE_INDEX (coarray, sub, team_number)

coarray

(Input) Must be a coarray; it can be of any type.

sub

(Input) Must be a rank-one integer array of size equal to the corank of coarray.

team

(Input) Must be a scalar of type TEAM_TYPE defined in the intrinsic module ISO_FORTRAN_ENV. Its value must identify the current or an ancestor team.

team_number

(Input) Must be an integer scalar. It must identify the initial team (-1) or a team formed by the same execution of the FORM TEAM statement that created the current team (a sibling team of the current team).

Results

The result is default integer scalar. The result is the index of the corresponding image if the value of sub is a valid sequence of cosubscripts for coarray on the team specified by team or team_number, or for the current team if neither team nor team_number is specified. Otherwise, the result is zero.

Examples

If coarray D is declared as D [0:*] and coarray C is declared as C(5,10) [10, 0:9, 0:*], IMAGE_INDEX (D, [0]) has the value 1 and IMAGE_INDEX (C, [3, 1, 2]) has the value 213 (on any image).

Consider the following program:

  PROGRAM main
  USE, INTRINSIC       :: ISO_FORTRAN_ENV
  TYPE (TEAM_TYPE)     :: initial, odd_even
  REAL                 :: ca1[4:*], ca2[2, *]
  INTEGER              :: i, j, k, l
  initial = GET_TEAM (CURRENT_TEAM)
  FORM TEAM (2-MOD(THIS_IMAGE(), 2), odd_even)
  PRINT *, THIS_IMAGE()
  PRINT *, THIS_IMAGE (coarray1)
  PRINT *, THIS_IMAGE (coarray2, 2)
  CHANGE TEAM (odd_even)
    . . .
    i = IMAGE_INDEX(ca1, [6], 2)
    j = IMAGE_INDEX(ca1, [6], 1)
    k = IMAGE_INDEX(ca2, [2, 4], initial)
    l = IMAGE_INDEX(ca1, [12], -1)
    . . . 
  END TEAM
  . . .
  END PROGRAM

If there are 10 images on the initial team, ca1[4] will be on image 1, ca1[5] on image 2, and ca1[13] will be on image 10. Similarly, ca2[1, 1] will be on image 1, ca[2, 1] on image 2, ending with ca2[2, 5] will be on image 10. The FORM TEAM statement divides the images into two teams, with team 1 having images [1, 3, 5, 7, 9] with image numbers [1, 2, 3, 4, 5] respectively, and team 2 having images [2, 4, 6, 8, 10] with image numbers [1, 2, 3, 4, 5] respectively.

After the 4 calls to IMAGE_INDEX, the value of i will be zero (ca1[6] is not on an image in team 2), j will have the value 2, k will have the value 8, and l will have the value 9. Note that the team number -1 always refers to the initial team. Note also that if the FORM TEAM does not specify NEW_INDEX, the image numbers on the new teams formed by the FORM TEAM are assigned in a processor-dependent manner.

See Also