create_win_allocate_sp_1d Subroutine

private subroutine create_win_allocate_sp_1d(comm, length, baseptr, win)

Uses

  • proc~~create_win_allocate_sp_1d~2~~UsesGraph proc~create_win_allocate_sp_1d~2 create_win_allocate_sp_1d iso_c_binding iso_c_binding proc~create_win_allocate_sp_1d~2->iso_c_binding

Arguments

Type IntentOptional Attributes Name
type(comm_t), intent(in) :: comm
integer, intent(in) :: length
real(kind=sp), intent(out), pointer :: baseptr(:)
type(win_t), intent(out) :: win

Calls

proc~~create_win_allocate_sp_1d~2~~CallsGraph proc~create_win_allocate_sp_1d~2 create_win_allocate_sp_1d mpi_win_allocate mpi_win_allocate proc~create_win_allocate_sp_1d~2->mpi_win_allocate proc~comm_get~2 comm_t%comm_get proc~create_win_allocate_sp_1d~2->proc~comm_get~2

Called by

proc~~create_win_allocate_sp_1d~2~~CalledByGraph proc~create_win_allocate_sp_1d~2 create_win_allocate_sp_1d interface~win_allocate~2 win_allocate interface~win_allocate~2->proc~create_win_allocate_sp_1d~2

Variables

Type Visibility Attributes Name Initial
type(c_ptr), private :: cptr
integer, private :: disp_unit
integer, private :: ierr
integer(kind=MPI_ADDRESS_KIND), private :: win_size

Source Code

   subroutine create_win_allocate_sp_1d(comm, length, baseptr, win)
      use iso_c_binding, only: c_ptr, c_f_pointer
      type(comm_t), intent(in) :: comm
      integer, intent(in) :: length
      real(sp), pointer, intent(out) :: baseptr(:)
      type(win_t), intent(out) :: win
      type(c_ptr) :: cptr
      integer(MPI_ADDRESS_KIND) :: win_size
      integer :: disp_unit, ierr

      win_size = int(length, MPI_ADDRESS_KIND)*int(storage_size(1.0_sp)/8_int32, MPI_ADDRESS_KIND)
      disp_unit = int(storage_size(1.0_sp)/8_int32)

      call MPI_Win_allocate(win_size, disp_unit, MPI_INFO_NULL, &
                            comm%get(), cptr, win%m_win, ierr)
      call c_f_pointer(cptr, baseptr, [length])
      win%is_valid = .true.
   end subroutine create_win_allocate_sp_1d