Non-blocking send of logical vector data
Note
see mp_irecv_iv
Note
arrays can be pointers or assumed shape, but they must be contiguous!
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
logical, | DIMENSION(:), CONTIGUOUS | :: | msgin |
the input message |
||
integer, | intent(in) | :: | dest |
the destination processor |
||
type(mp_comm_type), | intent(in) | :: | comm |
the communicator object |
||
type(mp_request_type), | intent(out) | :: | request |
communication request index |
||
integer, | intent(in), | optional | :: | tag |
message tag |
SUBROUTINE mp_isend_bv(msgin, dest, comm, request, tag) !! Non-blocking send of logical vector data !! @note see mp_irecv_iv !! @endnote !! @note !! arrays can be pointers or assumed shape, but they must be contiguous! LOGICAL, DIMENSION(:), CONTIGUOUS :: msgin !! the input message INTEGER, INTENT(IN) :: dest !! the destination processor TYPE(mp_comm_type), INTENT(IN) :: comm !! the communicator object TYPE(mp_request_type), INTENT(out) :: request !! communication request index INTEGER, INTENT(in), OPTIONAL :: tag !! message tag CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_isend_bv' INTEGER :: handle, ierr #if defined(__parallel) INTEGER :: msglen, my_tag LOGICAL :: foo(1) #endif ierr = 0 CALL timeset(routineN, handle) #if defined(__parallel) my_tag = 0 IF (PRESENT(tag)) my_tag = tag msglen = SIZE(msgin, 1) IF (msglen > 0) THEN CALL mpi_isend(msgin, msglen, MPI_LOGICAL, dest, my_tag, & comm%handle, request%handle, ierr) ELSE CALL mpi_isend(foo, msglen, MPI_LOGICAL, dest, my_tag, & comm%handle, request%handle, ierr) END IF IF (ierr /= 0) CALL mp_stop(ierr, "mpi_isend @ "//routineN) CALL add_perf(perf_id=11, msg_size=msglen*loglen) #else DBCSR_ABORT("mp_isend called in non parallel case") MARK_USED(msgin) MARK_USED(dest) MARK_USED(comm) MARK_USED(request) MARK_USED(tag) request = mp_request_null #endif CALL timestop(handle) END SUBROUTINE mp_isend_bv