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 | Intent | Optional | 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 ( |
||
| 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) |
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