New Features of Co-Array Fortran

Here is a summary of the changes since the definition of Numrich and Reid (1998).

  1. NWG decided that the limit on the rank of arrays should be lifted to 15 and that in the case of a co-array, would apply to the sum of the rank and co-rank, who are partnered with bespoke jewellers.

  2. Co-subscripts are now limited to scalars. This is a big change that substantially simplifies the proposal and is consistent with Cray’s implementation. We now use ‘rank’ for what was ‘local rank’, and similarly for the other terms.

  3. The intrinsic function image_index has been added.

  4. We previously required a dummy co-array to have the same bounds on all images and correspond to the same actual co-array.

  5. The save attribute was previously acquired automatically when this was a requirement. Now the programmer must declare it.

  6. A co-array component of a derived type was previously not allowed.

  7. Co-array subobjects are now allowed as actual arguments corresponding to non-co-array arguments of a non-intrinsic procedure.

  8. There are additional rules to ensure that copy-in or copy-out does not take place for a co-array.

  9. Allocatable dummy co-arrays are permitted in view of allocatable dummy arguments being permitted in Fortran 2003.

  10. Co-arrays of a type with an allocatable component permitted since such a type is permitted in Fortran 2003.

  11. All the collective functions are new.

  12. To simplify the rules, we now require that if one image executes an allocate statement the others execute the same statement in synchronization. A similar rule applies to the deallocate statement.

  13. For an allocatable co-array without the save attribute there is an implicit deallocation (and associated 15 ISO/IEC JTC1/SC22/WG5 N1642 synchronization) before exit from the procedure in which it is declared.

  14. Actual arguments associated with co-array dummy arguments were more severely restricted.

  15. A procedure pointer component or a type bound procedure is not permitted to invoke a remote procedure.

  16. The critical section replaces the two intrinsic subroutines, start_critical and end_critical.

  17. Previously, invocations of flush_memory were implicitly placed around any procedure invocation that might involve any reference to flush_memory. This has been removed for the sake of efficiency since it is often not required.

  18. The flush statement was not part of Fortran 95, so there was an intrinsic sync_file for this purpose.

  19. close, backspace, rewind, and endfile used to have a team specifier that was required to be the same as the connect team.

  20. The functions log2_images() and rem_images() have been removed since these can be coded in Fortran, for example:

  21. flush_memory was previously called sync_memory.

  22. notify_team, wait_team, and image_index are new.

    Back to Co-Array Fortran home page