comm_isend_real_dp_array_2d Subroutine

private subroutine comm_isend_real_dp_array_2d(comm, data, dest, tag, request)

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
real(kind=dp), intent(in) :: data(:,:)
integer(kind=int32), intent(in) :: dest
integer(kind=int32), intent(in) :: tag
type(request_t), intent(out) :: request

Calls

proc~~comm_isend_real_dp_array_2d~2~~CallsGraph proc~comm_isend_real_dp_array_2d~2 comm_isend_real_dp_array_2d mpi_isend mpi_isend proc~comm_isend_real_dp_array_2d~2->mpi_isend mpi_send mpi_send proc~comm_isend_real_dp_array_2d~2->mpi_send

Called by

proc~~comm_isend_real_dp_array_2d~2~~CalledByGraph proc~comm_isend_real_dp_array_2d~2 comm_isend_real_dp_array_2d interface~isend~2 isend interface~isend~2->proc~comm_isend_real_dp_array_2d~2

Variables

Type Visibility Attributes Name Initial
integer(kind=int32), private :: dim1
integer(kind=int32), private :: dim2
integer(kind=int32), private :: ierr

Source Code

   subroutine comm_isend_real_dp_array_2d(comm, data, dest, tag, request)
      type(comm_t), intent(in) :: comm
      real(dp), intent(in) :: data(:, :)
      integer(int32), intent(in) :: dest
      integer(int32), intent(in) :: tag
      type(request_t), intent(out) :: request
      integer(int32) :: ierr, dim1, dim2

      ! Send dimensions first (blocking - simple approach)
      dim1 = size(data, 1)
      dim2 = size(data, 2)
      call MPI_Send(dim1, 1_int32, MPI_INTEGER, dest, tag, comm%m_comm, ierr)
      call MPI_Send(dim2, 1_int32, MPI_INTEGER, dest, tag, comm%m_comm, ierr)

      ! Send data (non-blocking)
      call MPI_Isend(data, size(data), MPI_DOUBLE_PRECISION, dest, tag, comm%m_comm, request%m_request, ierr)
      request%is_valid = .true.
   end subroutine comm_isend_real_dp_array_2d