fold_plan_t Derived Type

type, public :: fold_plan_t

One north-row tile’s routing for the distributed fold. Entries of family f for peer p live at start(p,f)+1 .. start(p,f)+n(p,f) of the flat entry arrays (send and receive separately).


Components

Type Visibility Attributes Name Initial
integer, public :: ng = 0

Ghost width.

integer, public :: ni = 0

Global physical width of the fold row.

integer, public :: nmax = 0

Largest entry count of any (peer, family) list, send or receive.

integer, public :: npeer = 0

Peer tiles this tile sends to or receives from (self included when its own mirror falls in its window).

integer, public :: nrecv(FOLD_NFAM) = 0

Total receive entries per family.

integer, public :: nsend(FOLD_NFAM) = 0

Total send entries per family.

integer, public, allocatable :: peer_rx(:)

Peer tile x-coordinates, ascending, shape (npeer).

integer, public :: px = 0

Tiles along the fold row.

integer, public, allocatable :: recv_cls(:)

Fold-row class of each receive entry (FOLD_ROW_*), flat.

integer, public, allocatable :: recv_col(:)

Local storage column this tile writes, flat (all families).

integer, public, allocatable :: recv_e(:)

1-based position within its (peer, family) list, flat.

integer, public, allocatable :: recv_n(:,:)

Receive entry counts, shape (npeer, FOLD_NFAM).

integer, public, allocatable :: recv_peer(:)

Peer index of each receive entry, flat.

integer, public, allocatable :: recv_start(:,:)

Offsets into the flat receive arrays, shape (npeer, FOLD_NFAM).

integer, public :: rx = -1

This tile’s x-coordinate (0-based).

integer, public :: self_peer = 0

Index into peer_rx of this tile itself (0 if not a peer).

integer, public, allocatable :: send_col(:)

Local storage column this tile reads, flat (all families).

integer, public, allocatable :: send_e(:)

1-based position of each send entry within its (peer, family) list, flat.

integer, public, allocatable :: send_n(:,:)

Send entry counts, shape (npeer, FOLD_NFAM).

integer, public, allocatable :: send_peer(:)

Peer index of each send entry, flat.

integer, public, allocatable :: send_start(:,:)

Offsets into the flat send arrays, shape (npeer, FOLD_NFAM).


Type-Bound Procedures

procedure, public :: destroy => fold_plan_destroy

  • private pure subroutine fold_plan_destroy(this)

    Free the plan’s lists and reset it to the empty default. Safe on a plan that was never built.

    Arguments

    Type IntentOptional Attributes Name
    class(fold_plan_t), intent(inout) :: this

Source Code

   type :: fold_plan_t
      !! One north-row tile's routing for the distributed fold.  Entries of
      !! family `f` for peer `p` live at `start(p,f)+1 .. start(p,f)+n(p,f)`
      !! of the flat entry arrays (send and receive separately).
      integer :: ni = 0
         !! Global physical width of the fold row.
      integer :: px = 0
         !! Tiles along the fold row.
      integer :: ng = 0
         !! Ghost width.
      integer :: rx = -1
         !! This tile's x-coordinate (0-based).
      integer :: npeer = 0
         !! Peer tiles this tile sends to or receives from (self included
         !! when its own mirror falls in its window).
      integer :: self_peer = 0
         !! Index into `peer_rx` of this tile itself (0 if not a peer).
      integer :: nmax = 0
         !! Largest entry count of any (peer, family) list, send or receive.
      integer, allocatable :: peer_rx(:)
         !! Peer tile x-coordinates, ascending, shape (npeer).
      integer, allocatable :: send_n(:, :)
         !! Send entry counts, shape (npeer, FOLD_NFAM).
      integer, allocatable :: send_start(:, :)
         !! Offsets into the flat send arrays, shape (npeer, FOLD_NFAM).
      integer, allocatable :: recv_n(:, :)
         !! Receive entry counts, shape (npeer, FOLD_NFAM).
      integer, allocatable :: recv_start(:, :)
         !! Offsets into the flat receive arrays, shape (npeer, FOLD_NFAM).
      integer :: nsend(FOLD_NFAM) = 0
         !! Total send entries per family.
      integer :: nrecv(FOLD_NFAM) = 0
         !! Total receive entries per family.
      integer, allocatable :: send_col(:)
         !! Local storage column this tile reads, flat (all families).
      integer, allocatable :: send_peer(:)
         !! Peer index of each send entry, flat.
      integer, allocatable :: send_e(:)
         !! 1-based position of each send entry within its (peer, family)
         !! list, flat.
      integer, allocatable :: recv_col(:)
         !! Local storage column this tile writes, flat (all families).
      integer, allocatable :: recv_peer(:)
         !! Peer index of each receive entry, flat.
      integer, allocatable :: recv_e(:)
         !! 1-based position within its (peer, family) list, flat.
      integer, allocatable :: recv_cls(:)
         !! Fold-row class of each receive entry (`FOLD_ROW_*`), flat.
   contains
      procedure :: destroy => fold_plan_destroy
   end type fold_plan_t