Window initialization function for vector data
arrays can be pointers or assumed shape, but they must be contiguous!
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=real_4), | CONTIGUOUS, DIMENSION(:) | :: | base | |||
integer, | intent(in) | :: | comm | |||
integer, | intent(inout) | :: | win |
SUBROUTINE mp_win_create_rv(base, comm, win)
!! Window initialization function for vector data
!! @note
!! arrays can be pointers or assumed shape, but they must be contiguous!
REAL(kind=real_4), CONTIGUOUS, DIMENSION(:) :: base
INTEGER, INTENT(IN) :: comm
INTEGER, INTENT(INOUT) :: win
CHARACTER(LEN=*), PARAMETER :: routineN = 'mp_win_create_rv'
INTEGER :: ierr, handle
#if defined(__parallel)
INTEGER(kind=mpi_address_kind) :: len
REAL(kind=real_4) :: foo(1)
#endif
ierr = 0
CALL timeset(routineN, handle)
#if defined(__parallel)
len = SIZE(base)*real_4_size
IF (len > 0) THEN
CALL mpi_win_create(base(1), len, real_4_size, MPI_INFO_NULL, comm, win, ierr)
ELSE
CALL mpi_win_create(foo, len, real_4_size, MPI_INFO_NULL, comm, win, ierr)
END IF
IF (ierr /= 0) CALL mp_stop(ierr, "mpi_win_create @ "//routineN)
#else
MARK_USED(base)
MARK_USED(comm)
win = mp_win_null
#endif
CALL timestop(handle)
END SUBROUTINE mp_win_create_rv