get_owner Function

public pure function get_owner(ncols, nranks, col) result(owner)

Find which rank owns a given column

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: ncols

Total number of columns

integer(kind=int32), intent(in) :: nranks

Total number of columns Number of MPI ranks

integer(kind=int32), intent(in) :: col

Total number of columns Number of MPI ranks Column index (0-indexed)

Return Value integer(kind=int32)


Called by

proc~~get_owner~~CalledByGraph proc~get_owner get_owner proc~darray_acc_dp darray_acc_dp proc~darray_acc_dp->proc~get_owner proc~get_local_offset get_local_offset proc~darray_acc_dp->proc~get_local_offset proc~darray_acc_i32 darray_acc_i32 proc~darray_acc_i32->proc~get_owner proc~darray_acc_i32->proc~get_local_offset proc~darray_acc_i64 darray_acc_i64 proc~darray_acc_i64->proc~get_owner proc~darray_acc_i64->proc~get_local_offset proc~darray_acc_sp darray_acc_sp proc~darray_acc_sp->proc~get_owner proc~darray_acc_sp->proc~get_local_offset proc~darray_get_dp darray_get_dp proc~darray_get_dp->proc~get_owner proc~darray_get_dp->proc~get_local_offset proc~darray_get_i32 darray_get_i32 proc~darray_get_i32->proc~get_owner proc~darray_get_i32->proc~get_local_offset proc~darray_get_i64 darray_get_i64 proc~darray_get_i64->proc~get_owner proc~darray_get_i64->proc~get_local_offset proc~darray_get_sp darray_get_sp proc~darray_get_sp->proc~get_owner proc~darray_get_sp->proc~get_local_offset proc~darray_put_dp darray_put_dp proc~darray_put_dp->proc~get_owner proc~darray_put_dp->proc~get_local_offset proc~darray_put_i32 darray_put_i32 proc~darray_put_i32->proc~get_owner proc~darray_put_i32->proc~get_local_offset proc~darray_put_i64 darray_put_i64 proc~darray_put_i64->proc~get_owner proc~darray_put_i64->proc~get_local_offset proc~darray_put_sp darray_put_sp proc~darray_put_sp->proc~get_owner proc~darray_put_sp->proc~get_local_offset proc~get_local_offset->proc~get_owner interface~darray_acc darray_acc interface~darray_acc->proc~darray_acc_dp interface~darray_acc->proc~darray_acc_i32 interface~darray_acc->proc~darray_acc_i64 interface~darray_acc->proc~darray_acc_sp interface~darray_get darray_get interface~darray_get->proc~darray_get_dp interface~darray_get->proc~darray_get_i32 interface~darray_get->proc~darray_get_i64 interface~darray_get->proc~darray_get_sp interface~darray_put darray_put interface~darray_put->proc~darray_put_dp interface~darray_put->proc~darray_put_i32 interface~darray_put->proc~darray_put_i64 interface~darray_put->proc~darray_put_sp

Variables

Type Visibility Attributes Name Initial
integer(kind=int32), private :: base_cols
integer(kind=int32), private :: boundary
integer(kind=int32), private :: extra

Source Code

   pure function get_owner(ncols, nranks, col) result(owner)
      integer(int32), intent(in) :: ncols, nranks, col
      integer(int32) :: owner
      integer(int32) :: base_cols, extra, boundary

      base_cols = ncols/nranks
      extra = mod(ncols, nranks)

      ! Boundary where ranks switch from (base+1) to base columns
      boundary = extra*(base_cols + 1)

      if (col < boundary) then
         owner = col/(base_cols + 1)
      else
         owner = extra + (col - boundary)/base_cols
      end if
   end function get_owner