get_local_offset Function

public pure function get_local_offset(nrows, ncols, nranks, row, col) result(offset)

Get local offset in owner’s window for a given (row, col)

Returns the displacement in the owner’s local_data array for the element at (row, col) in the global array. Data is stored column-major: offset = row + (local_col * nrows)

Arguments

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

Number of rows in array

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

Number of rows in array Number of columns in array

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

Number of rows in array Number of columns in array Number of MPI ranks

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

Number of rows in array Number of columns in array Number of MPI ranks Row index (0-indexed)

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

Number of rows in array Number of columns in array Number of MPI ranks Row index (0-indexed) Column index (0-indexed)

Return Value integer(kind=MPI_ADDRESS_KIND)


Calls

proc~~get_local_offset~~CallsGraph proc~get_local_offset get_local_offset proc~calculate_distribution calculate_distribution proc~get_local_offset->proc~calculate_distribution proc~get_owner get_owner proc~get_local_offset->proc~get_owner

Called by

proc~~get_local_offset~~CalledByGraph proc~get_local_offset get_local_offset proc~darray_acc_dp darray_acc_dp proc~darray_acc_dp->proc~get_local_offset proc~darray_acc_i32 darray_acc_i32 proc~darray_acc_i32->proc~get_local_offset proc~darray_acc_i64 darray_acc_i64 proc~darray_acc_i64->proc~get_local_offset proc~darray_acc_sp darray_acc_sp proc~darray_acc_sp->proc~get_local_offset proc~darray_get_dp darray_get_dp proc~darray_get_dp->proc~get_local_offset proc~darray_get_i32 darray_get_i32 proc~darray_get_i32->proc~get_local_offset proc~darray_get_i64 darray_get_i64 proc~darray_get_i64->proc~get_local_offset proc~darray_get_sp darray_get_sp proc~darray_get_sp->proc~get_local_offset proc~darray_put_dp darray_put_dp proc~darray_put_dp->proc~get_local_offset proc~darray_put_i32 darray_put_i32 proc~darray_put_i32->proc~get_local_offset proc~darray_put_i64 darray_put_i64 proc~darray_put_i64->proc~get_local_offset proc~darray_put_sp darray_put_sp proc~darray_put_sp->proc~get_local_offset 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 :: local_col
integer(kind=int32), private :: owner_first_col
integer(kind=int32), private :: owner_ncols

Source Code

   pure function get_local_offset(nrows, ncols, nranks, row, col) result(offset)
      integer(int32), intent(in) :: nrows, ncols, nranks, row, col
      integer(MPI_ADDRESS_KIND) :: offset
      integer(int32) :: owner_first_col, owner_ncols, local_col

      call calculate_distribution(ncols, nranks, get_owner(ncols, nranks, col), &
                                  owner_first_col, owner_ncols)
      local_col = col - owner_first_col
      offset = int(row, MPI_ADDRESS_KIND) + int(local_col, MPI_ADDRESS_KIND)*int(nrows, MPI_ADDRESS_KIND)
   end function get_local_offset