fold_tile_owner Function

public pure function fold_tile_owner(ni, px, c) result(rx)

Tile holding global cell c (1..ni), closed form of the decomp_init split.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: ni

Global physical width of the fold row (cells).

integer, intent(in) :: px

Tiles along the fold row.

integer, intent(in) :: c

Global cell index (1-based, 1..ni).

Return Value integer

Owning tile x-coordinate (0-based).


Called by

proc~~fold_tile_owner~~CalledByGraph proc~fold_tile_owner fold_tile_owner proc~fold_receiver_entries fold_receiver_entries proc~fold_receiver_entries->proc~fold_tile_owner proc~fold_plan_build fold_plan_build proc~fold_plan_build->proc~fold_receiver_entries proc~ocean_fold_exchange_init ocean_fold_exchange_init proc~ocean_fold_exchange_init->proc~fold_plan_build proc~engine_setup engine_setup proc~engine_setup->proc~ocean_fold_exchange_init proc~complete_ocean_create complete_ocean_create proc~complete_ocean_create->proc~engine_setup proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_setup proc~driver_validate driver_validate proc~driver_validate->proc~engine_setup

Variables

Type Visibility Attributes Name Initial
integer, private :: base
integer, private :: rem

Source Code

   pure function fold_tile_owner(ni, px, c) result(rx)
      !! Tile holding global cell `c` (1..ni), closed form of the
      !! `decomp_init` split.
      integer, intent(in) :: ni
         !! Global physical width of the fold row (cells).
      integer, intent(in) :: px
         !! Tiles along the fold row.
      integer, intent(in) :: c
         !! Global cell index (1-based, `1..ni`).
      integer :: rx
         !! Owning tile x-coordinate (0-based).

      integer :: base, rem

      base = ni/px
      rem = mod(ni, px)
      if (c <= rem*(base + 1)) then
         rx = (c - 1)/(base + 1)
      else
         rx = rem + (c - 1 - rem*(base + 1))/base
      end if
   end function fold_tile_owner