pack_rank_metadata Subroutine

private subroutine pack_rank_metadata(counts_all, displs_all, nactive, ranks, counts, displs)

Packs full per-rank metadata down to active communication partners.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: counts_all(:)
integer, intent(in) :: displs_all(:)
integer, intent(out) :: nactive
integer, intent(out), allocatable :: ranks(:)
integer, intent(out), allocatable :: counts(:)
integer, intent(out), allocatable :: displs(:)

Called by

proc~~pack_rank_metadata~~CalledByGraph proc~pack_rank_metadata mod_mpi_flow::pack_rank_metadata proc~setup_cell_halo mod_mpi_flow::setup_cell_halo proc~setup_cell_halo->proc~pack_rank_metadata proc~setup_face_halo mod_mpi_flow::setup_face_halo proc~setup_face_halo->proc~pack_rank_metadata proc~flow_mpi_initialize mod_mpi_flow::flow_mpi_initialize proc~flow_mpi_initialize->proc~setup_cell_halo proc~flow_mpi_initialize->proc~setup_face_halo program~lowmach_react_hex lowmach_react_hex program~lowmach_react_hex->proc~flow_mpi_initialize

Source Code

   subroutine pack_rank_metadata(counts_all, displs_all, nactive, ranks, counts, displs)
      integer, intent(in) :: counts_all(:), displs_all(:)
      integer, intent(out) :: nactive
      integer, allocatable, intent(out) :: ranks(:), counts(:), displs(:)
      integer :: r, i

      nactive = count(counts_all > 0)
      allocate(ranks(nactive))
      allocate(counts(nactive))
      allocate(displs(nactive))

      i = 0
      do r = 1, size(counts_all)
         if (counts_all(r) <= 0) cycle
         i = i + 1
         ranks(i) = r - 1
         counts(i) = counts_all(r)
         displs(i) = displs_all(r)
      end do
   end subroutine pack_rank_metadata