ocean_halo_centre_2d Subroutine

private subroutine ocean_halo_centre_2d(fld, device_resident)

Two-pass X-then-Y halo exchange for a cell-centred 2D field.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: fld(oh_nx_total,oh_ny_total)

Cell-centred 2D field (nx_total, ny_total)

logical, intent(in), optional :: device_resident

If .false., operate on host memory (no OpenACC directives). Default (.true.) is the normal device-resident path.


Calls

proc~~ocean_halo_centre_2d~~CallsGraph proc~ocean_halo_centre_2d ocean_halo_centre_2d proc~ocean_halo_centre_2d_impl ocean_halo_centre_2d_impl proc~ocean_halo_centre_2d->proc~ocean_halo_centre_2d_impl proc~oh_count_centre_2d oh_count_centre_2d proc~ocean_halo_centre_2d->proc~oh_count_centre_2d comm_irecv_real_sp_array_n comm_irecv_real_sp_array_n proc~ocean_halo_centre_2d_impl->comm_irecv_real_sp_array_n comm_isend_real_sp_array_n comm_isend_real_sp_array_n proc~ocean_halo_centre_2d_impl->comm_isend_real_sp_array_n proc~comm_env_compute_comm comm_env_compute_comm proc~ocean_halo_centre_2d_impl->proc~comm_env_compute_comm proc~ew_rank_east ew_rank_east proc~ocean_halo_centre_2d_impl->proc~ew_rank_east proc~ew_rank_west ew_rank_west proc~ocean_halo_centre_2d_impl->proc~ew_rank_west proc~needs_flags needs_flags proc~ocean_halo_centre_2d_impl->proc~needs_flags proc~ns_rank_north ns_rank_north proc~ocean_halo_centre_2d_impl->proc~ns_rank_north proc~ns_rank_south ns_rank_south proc~ocean_halo_centre_2d_impl->proc~ns_rank_south proc~ocean_periodic_wrap_centre_2d ocean_periodic_wrap_centre_2d proc~ocean_halo_centre_2d_impl->proc~ocean_periodic_wrap_centre_2d proc~oh_count_msgs oh_count_msgs proc~ocean_halo_centre_2d_impl->proc~oh_count_msgs waitall waitall proc~ocean_halo_centre_2d_impl->waitall comm_world comm_world proc~comm_env_compute_comm->comm_world proc~decomp_rank_from_coords decomp_rank_from_coords proc~ew_rank_east->proc~decomp_rank_from_coords proc~ew_rank_west->proc~decomp_rank_from_coords proc~ns_rank_north->proc~decomp_rank_from_coords proc~ns_rank_south->proc~decomp_rank_from_coords

Called by

proc~~ocean_halo_centre_2d~~CalledByGraph proc~ocean_halo_centre_2d ocean_halo_centre_2d interface~ocean_halo_centre ocean_halo_centre interface~ocean_halo_centre->proc~ocean_halo_centre_2d proc~ocean_halo_bt_group_2d ocean_halo_bt_group_2d proc~ocean_halo_bt_group_2d->proc~ocean_halo_centre_2d proc~barotropic_substep_nonlinear barotropic_substep_nonlinear proc~barotropic_substep_nonlinear->proc~ocean_halo_bt_group_2d proc~configure_ocean_land_mask configure_ocean_land_mask proc~configure_ocean_land_mask->interface~ocean_halo_centre proc~continuity_gm_apply continuity_gm_apply proc~continuity_gm_apply->interface~ocean_halo_centre proc~continuity_tracer_step_split continuity_tracer_step_split proc~continuity_tracer_step_split->interface~ocean_halo_centre proc~engine_enter_data engine_enter_data proc~engine_enter_data->proc~ocean_halo_bt_group_2d proc~ocean_halo_exchange_ml_state ocean_halo_exchange_ml_state proc~engine_enter_data->proc~ocean_halo_exchange_ml_state proc~engine_setup engine_setup proc~engine_setup->interface~ocean_halo_centre proc~engine_setup->proc~configure_ocean_land_mask proc~engine_setup->proc~ocean_halo_exchange_ml_state proc~ocean_halo_exchange_ice_state ocean_halo_exchange_ice_state proc~engine_setup->proc~ocean_halo_exchange_ice_state proc~ice_halo_centre_flat ice_halo_centre_flat proc~ice_halo_centre_flat->interface~ocean_halo_centre proc~ocean_dyn_step_split ocean_dyn_step_split proc~ocean_dyn_step_split->interface~ocean_halo_centre proc~run_stage_split run_stage_split proc~ocean_dyn_step_split->proc~run_stage_split proc~run_gm_step run_gm_step proc~ocean_dyn_step_split->proc~run_gm_step proc~ocean_halo_exchange_ice_fluxes ocean_halo_exchange_ice_fluxes proc~ocean_halo_exchange_ice_fluxes->interface~ocean_halo_centre proc~ocean_halo_exchange_ml_state->interface~ocean_halo_centre proc~refresh_tracer_ghosts refresh_tracer_ghosts proc~refresh_tracer_ghosts->interface~ocean_halo_centre proc~run_continuity_chain run_continuity_chain proc~run_continuity_chain->interface~ocean_halo_centre proc~run_continuity_chain->proc~continuity_tracer_step_split proc~run_continuity_chain->proc~ocean_halo_exchange_ml_state proc~run_continuity_chain->proc~refresh_tracer_ghosts proc~run_stage_split->interface~ocean_halo_centre proc~run_stage_split->proc~ocean_halo_bt_group_2d proc~run_stage_split->proc~ocean_halo_exchange_ml_state proc~run_stage_split->proc~refresh_tracer_ghosts proc~run_stage_split->proc~run_continuity_chain proc~barotropic_substep_nonlinear_interior barotropic_substep_nonlinear_interior proc~run_stage_split->proc~barotropic_substep_nonlinear_interior proc~bt_wide_substep bt_wide_substep proc~run_stage_split->proc~bt_wide_substep proc~barotropic_substep_nonlinear_interior->proc~barotropic_substep_nonlinear proc~bt_wide_substep->proc~barotropic_substep_nonlinear proc~complete_ocean_create complete_ocean_create proc~complete_ocean_create->proc~engine_enter_data proc~complete_ocean_create->proc~engine_setup proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_enter_data proc~driver_run_ocean->proc~engine_setup proc~engine_step engine_step proc~driver_run_ocean->proc~engine_step proc~engine_step_ice engine_step_ice proc~driver_run_ocean->proc~engine_step_ice proc~driver_validate driver_validate proc~driver_validate->proc~engine_setup proc~engine_step->proc~ocean_dyn_step_split proc~ocean_dyn_step ocean_dyn_step proc~engine_step->proc~ocean_dyn_step proc~engine_step_ice->proc~ocean_halo_exchange_ice_fluxes proc~engine_step_ice->proc~ocean_halo_exchange_ice_state proc~ice_transport_step ice_transport_step proc~engine_step_ice->proc~ice_transport_step proc~ocean_halo_exchange_ice_state->proc~ice_halo_centre_flat proc~ocean_halo_exchange_ice_transport ocean_halo_exchange_ice_transport proc~ocean_halo_exchange_ice_transport->proc~ice_halo_centre_flat proc~run_gm_step->proc~continuity_gm_apply proc~run_gm_step->proc~ocean_halo_exchange_ml_state proc~run_stage run_stage proc~run_stage->proc~continuity_tracer_step_split proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean proc~ice_transport_step->proc~ocean_halo_exchange_ice_transport proc~ocean_dyn_step->proc~run_stage proc~rdb_ocean_create_finalize rdb_ocean_create_finalize proc~rdb_ocean_create_finalize->proc~complete_ocean_create proc~rdb_ocean_create_from_string rdb_ocean_create_from_string proc~rdb_ocean_create_from_string->proc~complete_ocean_create proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~engine_step proc~rdb_ocean_step->proc~engine_step_ice

Source Code

   subroutine ocean_halo_centre_2d(fld, device_resident)
      !! Two-pass X-then-Y halo exchange for a cell-centred 2D field.
      real(wp), intent(inout) :: fld(oh_nx_total, oh_ny_total)
         !! Cell-centred 2D field (nx_total, ny_total)
      logical, intent(in), optional :: device_resident
         !! If .false., operate on host memory (no OpenACC directives).
         !! Default (.true.) is the normal device-resident path.

      call oh_count_centre_2d()
      call ocean_halo_centre_2d_impl(fld, oh_nghost, device_resident)
   end subroutine ocean_halo_centre_2d