request_waitall Subroutine

private subroutine request_waitall(requests, statuses)

Arguments

Type IntentOptional Attributes Name
type(request_t), intent(inout) :: requests(:)
type(MPI_Status), intent(out), optional :: statuses(:)

Calls

proc~~request_waitall~2~~CallsGraph proc~request_waitall~2 request_waitall mpi_waitall mpi_waitall proc~request_waitall~2->mpi_waitall proc~status_array_to_type status_array_to_type proc~request_waitall~2->proc~status_array_to_type

Called by

proc~~request_waitall~2~~CalledByGraph proc~request_waitall~2 request_waitall interface~waitall~2 waitall interface~waitall~2->proc~request_waitall~2

Variables

Type Visibility Attributes Name Initial
integer(kind=int32), private :: count
integer(kind=int32), private :: i
integer(kind=int32), private :: ierr
integer, private, allocatable :: mpi_requests(:)
integer, private, allocatable :: stat_array(:,:)

Source Code

   subroutine request_waitall(requests, statuses)
      type(request_t), intent(inout) :: requests(:)
      type(MPI_Status), intent(out), optional :: statuses(:)
      integer, allocatable :: mpi_requests(:)
      integer, allocatable :: stat_array(:, :)
      integer(int32) :: i, count, ierr

      count = size(requests)
      allocate (mpi_requests(count))

      do i = 1, count
         if (requests(i)%is_valid) then
            mpi_requests(i) = requests(i)%m_request
         else
            mpi_requests(i) = MPI_REQUEST_NULL
         end if
      end do

      if (present(statuses)) then
         allocate (stat_array(MPI_STATUS_SIZE, count))
         call MPI_Waitall(count, mpi_requests, stat_array, ierr)
         do i = 1, count
            statuses(i) = status_array_to_type(stat_array(:, i))
         end do
      else
         allocate (stat_array(MPI_STATUS_SIZE, count))
         call MPI_Waitall(count, mpi_requests, stat_array, ierr)
      end if

      do i = 1, count
         call requests(i)%free()
      end do
   end subroutine request_waitall