bt_wide_substep Subroutine

public subroutine bt_wide_substep(bt_wide, bt_work, n_steps, dt_inner, bc)

Wide-halo (march-in) entry point for the nonlinear barotropic fast loop. Unpacks the wide shadow arrays (w_*, wide grid/metrics, wide f_corner) and forwards them to barotropic_substep_nonlinear with bt_halo = bt_wide%bt_halo, so the ~20-array plumbing lives here once rather than at the call site. bc propagates by absence. Tides (eta_forcing) are a configure-time exclusion on the wide path, so none is forwarded. Interior twin: barotropic_substep_nonlinear_interior.

Arguments

Type IntentOptional Attributes Name
type(bt_wide_t), intent(inout) :: bt_wide
type(barotropic_workstate_t), intent(inout) :: bt_work
integer, intent(in) :: n_steps
real(kind=wp), intent(in) :: dt_inner
type(ocean_bc_state_t), intent(inout), optional :: bc

Calls

proc~~bt_wide_substep~~CallsGraph proc~bt_wide_substep bt_wide_substep proc~barotropic_substep_nonlinear barotropic_substep_nonlinear proc~bt_wide_substep->proc~barotropic_substep_nonlinear interface~ocean_fold_north_v_face ocean_fold_north_v_face proc~barotropic_substep_nonlinear->interface~ocean_fold_north_v_face interface~ocean_fold_pack ocean_fold_pack proc~barotropic_substep_nonlinear->interface~ocean_fold_pack interface~ocean_fold_unpack ocean_fold_unpack proc~barotropic_substep_nonlinear->interface~ocean_fold_unpack interface~ocean_halo_face_x ocean_halo_face_x proc~barotropic_substep_nonlinear->interface~ocean_halo_face_x local local proc~barotropic_substep_nonlinear->local proc~find_uhbt find_uhbt proc~barotropic_substep_nonlinear->proc~find_uhbt proc~find_vhbt find_vhbt proc~barotropic_substep_nonlinear->proc~find_vhbt proc~ocean_fold_begin ocean_fold_begin proc~barotropic_substep_nonlinear->proc~ocean_fold_begin proc~ocean_fold_end ocean_fold_end proc~barotropic_substep_nonlinear->proc~ocean_fold_end proc~ocean_fold_exchange ocean_fold_exchange proc~barotropic_substep_nonlinear->proc~ocean_fold_exchange proc~ocean_fold_is_distributed ocean_fold_is_distributed proc~barotropic_substep_nonlinear->proc~ocean_fold_is_distributed proc~ocean_halo_bt_group_2d ocean_halo_bt_group_2d proc~barotropic_substep_nonlinear->proc~ocean_halo_bt_group_2d proc~ocean_halo_bt_group_2d_wide ocean_halo_bt_group_2d_wide proc~barotropic_substep_nonlinear->proc~ocean_halo_bt_group_2d_wide proc~ocean_halo_is_decomposed ocean_halo_is_decomposed proc~barotropic_substep_nonlinear->proc~ocean_halo_is_decomposed proc~ocean_halo_is_decomposed_x ocean_halo_is_decomposed_x proc~barotropic_substep_nonlinear->proc~ocean_halo_is_decomposed_x proc~ocean_halo_is_decomposed_y ocean_halo_is_decomposed_y proc~barotropic_substep_nonlinear->proc~ocean_halo_is_decomposed_y proc~oh_count_bt_u_mid oh_count_bt_u_mid proc~barotropic_substep_nonlinear->proc~oh_count_bt_u_mid proc~oh_count_suppress_off oh_count_suppress_off proc~barotropic_substep_nonlinear->proc~oh_count_suppress_off proc~oh_count_suppress_on oh_count_suppress_on proc~barotropic_substep_nonlinear->proc~oh_count_suppress_on proc~profiler_start profiler_start proc~barotropic_substep_nonlinear->proc~profiler_start proc~profiler_stop profiler_stop proc~barotropic_substep_nonlinear->proc~profiler_stop proc~fold_v_2d fold_v_2d interface~ocean_fold_north_v_face->proc~fold_v_2d proc~fold_v_3d fold_v_3d interface~ocean_fold_north_v_face->proc~fold_v_3d proc~ocean_fold_pack_2d ocean_fold_pack_2d interface~ocean_fold_pack->proc~ocean_fold_pack_2d proc~ocean_fold_pack_3d ocean_fold_pack_3d interface~ocean_fold_pack->proc~ocean_fold_pack_3d proc~ocean_fold_unpack_2d ocean_fold_unpack_2d interface~ocean_fold_unpack->proc~ocean_fold_unpack_2d proc~ocean_fold_unpack_3d ocean_fold_unpack_3d interface~ocean_fold_unpack->proc~ocean_fold_unpack_3d proc~ocean_halo_face_x_2d ocean_halo_face_x_2d interface~ocean_halo_face_x->proc~ocean_halo_face_x_2d proc~ocean_halo_face_x_3d ocean_halo_face_x_3d interface~ocean_halo_face_x->proc~ocean_halo_face_x_3d proc~grow_buffers grow_buffers proc~ocean_fold_begin->proc~grow_buffers to_string to_string proc~ocean_fold_begin->to_string warning warning proc~ocean_fold_begin->warning comm_irecv_real_sp_array_n comm_irecv_real_sp_array_n proc~ocean_fold_exchange->comm_irecv_real_sp_array_n comm_isend_real_sp_array_n comm_isend_real_sp_array_n proc~ocean_fold_exchange->comm_isend_real_sp_array_n proc~comm_env_compute_comm comm_env_compute_comm proc~ocean_fold_exchange->proc~comm_env_compute_comm waitall waitall proc~ocean_fold_exchange->waitall proc~ocean_halo_bt_group_2d->proc~oh_count_suppress_off proc~ocean_halo_bt_group_2d->proc~oh_count_suppress_on proc~ocean_halo_centre_2d ocean_halo_centre_2d proc~ocean_halo_bt_group_2d->proc~ocean_halo_centre_2d proc~ocean_halo_bt_group_2d->proc~ocean_halo_face_x_2d proc~ocean_halo_face_y_2d ocean_halo_face_y_2d proc~ocean_halo_bt_group_2d->proc~ocean_halo_face_y_2d proc~oh_count_bt_group oh_count_bt_group proc~ocean_halo_bt_group_2d->proc~oh_count_bt_group proc~ocean_halo_bt_group_2d_wide->proc~oh_count_suppress_off proc~ocean_halo_bt_group_2d_wide->proc~oh_count_suppress_on proc~ocean_halo_buffers_ensure_wide ocean_halo_buffers_ensure_wide proc~ocean_halo_bt_group_2d_wide->proc~ocean_halo_buffers_ensure_wide proc~ocean_halo_centre_2d_impl ocean_halo_centre_2d_impl proc~ocean_halo_bt_group_2d_wide->proc~ocean_halo_centre_2d_impl proc~ocean_halo_face_x_2d_impl ocean_halo_face_x_2d_impl proc~ocean_halo_bt_group_2d_wide->proc~ocean_halo_face_x_2d_impl proc~ocean_halo_face_y_2d_impl ocean_halo_face_y_2d_impl proc~ocean_halo_bt_group_2d_wide->proc~ocean_halo_face_y_2d_impl proc~ocean_halo_bt_group_2d_wide->proc~oh_count_bt_group proc~wide_halo_guards wide_halo_guards proc~ocean_halo_bt_group_2d_wide->proc~wide_halo_guards proc~find_or_create_region find_or_create_region proc~profiler_start->proc~find_or_create_region proc~get_wall_time get_wall_time proc~profiler_start->proc~get_wall_time proc~nvtx_range_push nvtx_range_push proc~profiler_start->proc~nvtx_range_push proc~profiler_stop->proc~get_wall_time proc~nvtx_range_pop nvtx_range_pop proc~profiler_stop->proc~nvtx_range_pop comm_world comm_world proc~comm_env_compute_comm->comm_world proc~fold_v_2d->interface~ocean_fold_pack proc~fold_v_2d->interface~ocean_fold_unpack proc~fold_v_2d->proc~ocean_fold_begin proc~fold_v_2d->proc~ocean_fold_end proc~fold_v_2d->proc~ocean_fold_exchange proc~fold_v_2d->proc~ocean_fold_is_distributed interface~fold_north_v_face fold_north_v_face proc~fold_v_2d->interface~fold_north_v_face proc~fold_stagger_nrows fold_stagger_nrows proc~fold_v_2d->proc~fold_stagger_nrows proc~fold_v_3d->interface~ocean_fold_pack proc~fold_v_3d->interface~ocean_fold_unpack proc~fold_v_3d->proc~ocean_fold_begin proc~fold_v_3d->proc~ocean_fold_end proc~fold_v_3d->proc~ocean_fold_exchange proc~fold_v_3d->proc~ocean_fold_is_distributed proc~fold_v_3d->interface~fold_north_v_face proc~fold_v_3d->proc~fold_stagger_nrows proc~ocean_fold_pack_2d->proc~ocean_fold_pack_3d proc~fold_stagger_family fold_stagger_family proc~ocean_fold_pack_3d->proc~fold_stagger_family proc~ocean_fold_pack_3d->proc~fold_stagger_nrows proc~ocean_fold_unpack_2d->proc~ocean_fold_unpack_3d proc~ocean_fold_unpack_3d->proc~fold_stagger_family proc~ocean_fold_unpack_3d->proc~fold_stagger_nrows proc~ocean_halo_buffers_ensure_wide->to_string proc~ocean_halo_buffers_ensure_wide->warning 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 proc~ocean_halo_centre_2d_impl->comm_irecv_real_sp_array_n proc~ocean_halo_centre_2d_impl->comm_isend_real_sp_array_n proc~ocean_halo_centre_2d_impl->proc~comm_env_compute_comm proc~ocean_halo_centre_2d_impl->waitall 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 proc~ocean_halo_face_x_2d->proc~ocean_halo_face_x_2d_impl proc~oh_count_face_x_2d oh_count_face_x_2d proc~ocean_halo_face_x_2d->proc~oh_count_face_x_2d proc~ocean_halo_face_x_2d_impl->comm_irecv_real_sp_array_n proc~ocean_halo_face_x_2d_impl->comm_isend_real_sp_array_n proc~ocean_halo_face_x_2d_impl->proc~comm_env_compute_comm proc~ocean_halo_face_x_2d_impl->waitall proc~ocean_halo_face_x_2d_impl->proc~ew_rank_east proc~ocean_halo_face_x_2d_impl->proc~ew_rank_west proc~ocean_halo_face_x_2d_impl->proc~needs_flags proc~ocean_halo_face_x_2d_impl->proc~ns_rank_north proc~ocean_halo_face_x_2d_impl->proc~ns_rank_south proc~ocean_periodic_wrap_face_x_2d ocean_periodic_wrap_face_x_2d proc~ocean_halo_face_x_2d_impl->proc~ocean_periodic_wrap_face_x_2d proc~ocean_halo_face_x_2d_impl->proc~oh_count_msgs proc~ocean_halo_face_x_3d->comm_irecv_real_sp_array_n proc~ocean_halo_face_x_3d->comm_isend_real_sp_array_n proc~ocean_halo_face_x_3d->proc~comm_env_compute_comm proc~ocean_halo_face_x_3d->waitall proc~ocean_halo_face_x_3d->proc~ew_rank_east proc~ocean_halo_face_x_3d->proc~ew_rank_west proc~ocean_halo_face_x_3d->proc~needs_flags proc~ocean_halo_face_x_3d->proc~ns_rank_north proc~ocean_halo_face_x_3d->proc~ns_rank_south proc~ocean_halo_buffers_ensure_nz ocean_halo_buffers_ensure_nz proc~ocean_halo_face_x_3d->proc~ocean_halo_buffers_ensure_nz proc~ocean_periodic_wrap_face_x_3d ocean_periodic_wrap_face_x_3d proc~ocean_halo_face_x_3d->proc~ocean_periodic_wrap_face_x_3d proc~oh_count_face_x_3d oh_count_face_x_3d proc~ocean_halo_face_x_3d->proc~oh_count_face_x_3d proc~ocean_halo_face_x_3d->proc~oh_count_msgs proc~ocean_halo_face_y_2d->proc~ocean_halo_face_y_2d_impl proc~oh_count_face_y_2d oh_count_face_y_2d proc~ocean_halo_face_y_2d->proc~oh_count_face_y_2d proc~ocean_halo_face_y_2d_impl->comm_irecv_real_sp_array_n proc~ocean_halo_face_y_2d_impl->comm_isend_real_sp_array_n proc~ocean_halo_face_y_2d_impl->proc~comm_env_compute_comm proc~ocean_halo_face_y_2d_impl->waitall proc~ocean_halo_face_y_2d_impl->proc~ew_rank_east proc~ocean_halo_face_y_2d_impl->proc~ew_rank_west proc~ocean_halo_face_y_2d_impl->proc~needs_flags proc~ocean_halo_face_y_2d_impl->proc~ns_rank_north proc~ocean_halo_face_y_2d_impl->proc~ns_rank_south proc~ocean_periodic_wrap_face_y_2d ocean_periodic_wrap_face_y_2d proc~ocean_halo_face_y_2d_impl->proc~ocean_periodic_wrap_face_y_2d proc~ocean_halo_face_y_2d_impl->proc~oh_count_msgs proc~wide_halo_guards->to_string error error proc~wide_halo_guards->error proc~fold_north_v_face_2d fold_north_v_face_2d interface~fold_north_v_face->proc~fold_north_v_face_2d proc~fold_north_v_face_3d fold_north_v_face_3d interface~fold_north_v_face->proc~fold_north_v_face_3d 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 proc~ocean_halo_buffers_ensure_nz->to_string proc~ocean_halo_buffers_ensure_nz->warning

Called by

proc~~bt_wide_substep~~CalledByGraph proc~bt_wide_substep bt_wide_substep proc~run_stage_split run_stage_split proc~run_stage_split->proc~bt_wide_substep proc~ocean_dyn_step_split ocean_dyn_step_split proc~ocean_dyn_step_split->proc~run_stage_split proc~engine_step engine_step proc~engine_step->proc~ocean_dyn_step_split proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_step proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~engine_step proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean

Source Code

   subroutine bt_wide_substep(bt_wide, bt_work, n_steps, dt_inner, bc)
      !! Wide-halo (march-in) entry point for the nonlinear barotropic fast
      !! loop.  Unpacks the wide shadow arrays (`w_*`, wide grid/metrics, wide
      !! `f_corner`) and forwards them to `barotropic_substep_nonlinear` with
      !! `bt_halo = bt_wide%bt_halo`, so the ~20-array plumbing lives here once
      !! rather than at the call site.  `bc` propagates by absence.  Tides
      !! (`eta_forcing`) are a configure-time exclusion on the wide path, so
      !! none is forwarded.  Interior twin: `barotropic_substep_nonlinear_interior`.
      type(bt_wide_t), intent(inout) :: bt_wide
      type(barotropic_workstate_t), intent(inout) :: bt_work
      integer, intent(in) :: n_steps
      real(wp), intent(in) :: dt_inner
      type(ocean_bc_state_t), intent(inout), optional :: bc

      call barotropic_substep_nonlinear(bt_wide%grid_w, &
                                        bt_work, &
                                        bt_wide%w_force_u, bt_wide%w_force_v, &
                                        n_steps, dt_inner, &
                                        bt_eta=bt_wide%w_eta, bt_H_ref=bt_wide%w_H_ref, &
                                        bt_eta_new=bt_wide%w_eta_new, &
                                        bt_ke_centre=bt_wide%w_ke, &
                                        eta_sum=bt_wide%w_eta_sum, &
                                        bt_eta_end=bt_wide%w_eta_end, &
                                        bt_ubt=bt_wide%w_ubt, &
                                        bt_ubt_prev=bt_wide%w_ubt_prev, &
                                        bt_rem_u=bt_wide%w_rem_u, &
                                        ubt_sum=bt_wide%w_ubt_sum, &
                                        uhbt_sum=bt_wide%w_uhbt_sum, &
                                        bt_uhbt=bt_wide%w_uhbt, &
                                        bt_ubt_end=bt_wide%w_ubt_end, &
                                        bt_vbt=bt_wide%w_vbt, &
                                        bt_vbt_prev=bt_wide%w_vbt_prev, &
                                        bt_rem_v=bt_wide%w_rem_v, &
                                        vbt_sum=bt_wide%w_vbt_sum, &
                                        vhbt_sum=bt_wide%w_vhbt_sum, &
                                        bt_vhbt=bt_wide%w_vhbt, &
                                        bt_vbt_end=bt_wide%w_vbt_end, &
                                        bt_zeta_corner=bt_wide%w_zeta, &
                                        f_corner=bt_wide%f_corner_w, &
                                        area_cu=bt_wide%metrics_w%areaCu, area_cv=bt_wide%metrics_w%areaCv, &
                                        dx_cu=bt_wide%metrics_w%dxCu, dx_cv=bt_wide%metrics_w%dx_cv, &
                                        dy_cu=bt_wide%metrics_w%dy_cu, dy_cv=bt_wide%metrics_w%dyCv, &
                                        iarea_bu=bt_wide%metrics_w%iareaBu, iarea_t=bt_wide%metrics_w%iareaT, &
                                        idx_cu=bt_wide%metrics_w%idxCu, idy_cv=bt_wide%metrics_w%idyCv, &
                                        bc=bc, bt_halo=bt_wide%bt_halo)
   end subroutine bt_wide_substep