Receive rank-1 data from another process
see mp_recv_d
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=real_8), | intent(inout), | CONTIGUOUS | :: | msg(:) |
Place received data into this rank-1 array |
|
integer, | intent(inout) | :: | source | |||
integer, | intent(inout) | :: | tag | |||
integer, | intent(in) | :: | gid |
SUBROUTINE mp_recv_dv(msg, source, tag, gid)
!! Receive rank-1 data from another process
!! @note see mp_recv_d
REAL(kind=real_8), CONTIGUOUS, INTENT(INOUT) :: msg(:)
!! Place received data into this rank-1 array
INTEGER, INTENT(INOUT) :: source, tag
INTEGER, INTENT(IN) :: gid
CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_recv_dv'
INTEGER :: handle, ierr, msglen
#if defined(__parallel)
INTEGER, ALLOCATABLE, DIMENSION(:) :: status
#endif
ierr = 0
CALL timeset(routineN, handle)
msglen = SIZE(msg)
#if defined(__parallel)
ALLOCATE (status(MPI_STATUS_SIZE))
CALL mpi_recv(msg, msglen, MPI_DOUBLE_PRECISION, source, tag, gid, status, ierr)
IF (ierr /= 0) CALL mp_stop(ierr, "mpi_recv @ "//routineN)
CALL add_perf(perf_id=14, msg_size=msglen*real_8_size)
source = status(MPI_SOURCE)
tag = status(MPI_TAG)
DEALLOCATE (status)
#else
MARK_USED(msg)
MARK_USED(source)
MARK_USED(tag)
MARK_USED(gid)
! only defined in parallel
DBCSR_ABORT("not in parallel mode")
#endif
CALL timestop(handle)
END SUBROUTINE mp_recv_dv