Gathers owned scalar cell values to rank 0 only.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(flow_mpi_t), | intent(inout) | :: | flow | |||
| real(kind=rk), | intent(in) | :: | field(:) | |||
| real(kind=rk), | intent(inout) | :: | root_field(:) |
subroutine flow_gather_owned_scalar_root(flow, field, root_field) use mod_profiler, only : profiler_start, profiler_stop type(flow_mpi_t), intent(inout) :: flow real(rk), intent(in) :: field(:) real(rk), intent(inout) :: root_field(:) integer :: ierr, r, first flow%gather_sendbuf = field(flow%first_cell:flow%last_cell) call profiler_start('MPI_Communication') call MPI_Gatherv(flow%gather_sendbuf, flow%nlocal, MPI_DOUBLE_PRECISION, & flow%gather_recvbuf, flow%gather_counts, flow%gather_displs, & MPI_DOUBLE_PRECISION, 0, flow%comm, ierr) call check_mpi(ierr, 'MPI_Gatherv owned scalar root') call profiler_stop('MPI_Communication') if (flow%rank == 0) then root_field = zero do r = 1, flow%nprocs first = flow%gather_firsts(r) root_field(first:first + flow%gather_counts(r) - 1) = & flow%gather_recvbuf(flow%gather_displs(r) + 1: & flow%gather_displs(r) + flow%gather_counts(r)) end do end if end subroutine flow_gather_owned_scalar_root