barotropic_substep_nonlinear_interior Subroutine

public subroutine barotropic_substep_nonlinear_interior(grid, metrics, bt_work, f_corner, n_steps, dt_inner, bc, t, eta_forcing)

Interior (normal-width) entry point for the nonlinear barotropic fast loop. Unpacks the bt_work fast-loop arrays and forwards them to barotropic_substep_nonlinear (bt_halo=0), so the ~20-array plumbing lives here once instead of at every call site. The optional bc/t/eta_forcing propagate by absence (F2018 15.5.2.13), so this single entry reproduces the former present()-branch call variants bit-for-bit. See bt_wide_substep for the wide-halo march-in twin.

Arguments

Type IntentOptional Attributes Name
type(hgrid_t), intent(in) :: grid
type(ocean_metrics_t), intent(in) :: metrics
type(barotropic_workstate_t), intent(inout) :: bt_work
real(kind=wp), intent(in) :: f_corner(grid%nx_total+1,grid%ny_total+1)

Coriolis at corners (coriolis_adv_t%f_corner); forwarded read-only.

integer, intent(in) :: n_steps
real(kind=wp), intent(in) :: dt_inner
type(ocean_bc_state_t), intent(inout), optional :: bc
real(kind=wp), intent(in), optional :: t
real(kind=wp), intent(in), optional :: eta_forcing(grid%nx_total,grid%ny_total)

Calls

proc~~barotropic_substep_nonlinear_interior~~CallsGraph proc~barotropic_substep_nonlinear_interior barotropic_substep_nonlinear_interior proc~barotropic_substep_nonlinear barotropic_substep_nonlinear proc~barotropic_substep_nonlinear_interior->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~~barotropic_substep_nonlinear_interior~~CalledByGraph proc~barotropic_substep_nonlinear_interior barotropic_substep_nonlinear_interior proc~run_stage_split run_stage_split proc~run_stage_split->proc~barotropic_substep_nonlinear_interior 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 barotropic_substep_nonlinear_interior(grid, metrics, bt_work, f_corner, &
                                                    n_steps, dt_inner, bc, t, eta_forcing)
      !! Interior (normal-width) entry point for the nonlinear barotropic
      !! fast loop.  Unpacks the `bt_work` fast-loop arrays and forwards them
      !! to `barotropic_substep_nonlinear` (bt_halo=0), so the ~20-array
      !! plumbing lives here once instead of at every call site.  The optional
      !! `bc`/`t`/`eta_forcing` propagate by absence (F2018 15.5.2.13), so this
      !! single entry reproduces the former present()-branch call variants
      !! bit-for-bit.  See `bt_wide_substep` for the wide-halo march-in twin.
      type(hgrid_t), intent(in) :: grid
      type(ocean_metrics_t), intent(in) :: metrics
      type(barotropic_workstate_t), intent(inout) :: bt_work
      real(wp), intent(in) :: f_corner(grid%nx_total + 1, grid%ny_total + 1)
         !! Coriolis at corners (`coriolis_adv_t%f_corner`); forwarded read-only.
      integer, intent(in) :: n_steps
      real(wp), intent(in) :: dt_inner
      type(ocean_bc_state_t), intent(inout), optional :: bc
      real(wp), intent(in), optional :: t
      real(wp), intent(in), optional :: eta_forcing(grid%nx_total, grid%ny_total)

      call barotropic_substep_nonlinear(grid, bt_work, &
                                        bt_work%F_bt_u_fast, bt_work%F_bt_v_fast, &
                                        n_steps, dt_inner, &
                                        bt_eta=bt_work%bt_eta, bt_H_ref=bt_work%bt_H_ref, &
                                        bt_eta_new=bt_work%bt_eta_new, bt_ke_centre=bt_work%bt_ke_centre, &
                                        eta_sum=bt_work%eta_sum, bt_eta_end=bt_work%bt_eta_end, &
                                        bt_ubt=bt_work%bt_ubt, bt_ubt_prev=bt_work%bt_ubt_prev, &
                                        bt_rem_u=bt_work%bt_rem_u, ubt_sum=bt_work%ubt_sum, &
                                        uhbt_sum=bt_work%uhbt_sum, bt_uhbt=bt_work%bt_uhbt, &
                                        bt_ubt_end=bt_work%bt_ubt_end, &
                                        bt_vbt=bt_work%bt_vbt, bt_vbt_prev=bt_work%bt_vbt_prev, &
                                        bt_rem_v=bt_work%bt_rem_v, vbt_sum=bt_work%vbt_sum, &
                                        vhbt_sum=bt_work%vhbt_sum, bt_vhbt=bt_work%bt_vhbt, &
                                        bt_vbt_end=bt_work%bt_vbt_end, &
                                        bt_zeta_corner=bt_work%bt_zeta_corner, &
                                        f_corner=f_corner, &
                                        area_cu=metrics%areaCu, area_cv=metrics%areaCv, &
                                        dx_cu=metrics%dxCu, dx_cv=metrics%dx_cv_bt, &
                                        dy_cu=metrics%dy_cu_bt, dy_cv=metrics%dyCv, &
                                        iarea_bu=metrics%iareaBu, iarea_t=metrics%iareaT, &
                                        idx_cu=metrics%idxCu, idy_cv=metrics%idyCv, &
                                        bc=bc, t=t, eta_forcing=eta_forcing)
   end subroutine barotropic_substep_nonlinear_interior