rdb_ocean_bt_budget_probe Module

print_bt_budget walks the per-kernel slow-tendency arrays before they sum into F_slow_u/v, decomposes the BT-mode work rate by source term (PGF, Coriolis-adv, hvisc, bottom drag, surface stress), splits the basin into a N/S region triple (subpolar / jet / subtropical for double_gyre), and prints a tabular per-region snapshot. Diagnoses which slow-term over/under-energizes a gyre.

Gated by bt_work%debug_bt_budget (namelist ocean_debug_bt_budget). Default off ⇒ existing runs unchanged. Best paired with serial multicore builds so prints land in causal order.


Uses

  • module~~rdb_ocean_bt_budget_probe~~UsesGraph module~rdb_ocean_bt_budget_probe rdb_ocean_bt_budget_probe module~rdb_barotropic_workstate rdb_barotropic_workstate module~rdb_ocean_bt_budget_probe->module~rdb_barotropic_workstate module~rdb_constants rdb_constants module~rdb_ocean_bt_budget_probe->module~rdb_constants module~rdb_coriolis_adv rdb_coriolis_adv module~rdb_ocean_bt_budget_probe->module~rdb_coriolis_adv module~rdb_grid rdb_grid module~rdb_ocean_bt_budget_probe->module~rdb_grid module~rdb_multilayer_state rdb_multilayer_state module~rdb_ocean_bt_budget_probe->module~rdb_multilayer_state module~rdb_ocean_bottom_drag rdb_ocean_bottom_drag module~rdb_ocean_bt_budget_probe->module~rdb_ocean_bottom_drag module~rdb_ocean_horizontal_viscosity rdb_ocean_horizontal_viscosity module~rdb_ocean_bt_budget_probe->module~rdb_ocean_horizontal_viscosity module~rdb_ocean_pressure_force rdb_ocean_pressure_force module~rdb_ocean_bt_budget_probe->module~rdb_ocean_pressure_force module~rdb_ocean_surface_stress rdb_ocean_surface_stress module~rdb_ocean_bt_budget_probe->module~rdb_ocean_surface_stress module~rdb_barotropic_workstate->module~rdb_constants module~rdb_barotropic_workstate->module~rdb_grid iso_fortran_env iso_fortran_env module~rdb_barotropic_workstate->iso_fortran_env module~rdb_mem_report rdb_mem_report module~rdb_barotropic_workstate->module~rdb_mem_report pic_types pic_types module~rdb_constants->pic_types module~rdb_coriolis_adv->module~rdb_constants module~rdb_coriolis_adv->module~rdb_grid module~rdb_coriolis_adv->module~rdb_multilayer_state module~rdb_coriolis_adv->iso_fortran_env module~rdb_barotropic_state rdb_barotropic_state module~rdb_coriolis_adv->module~rdb_barotropic_state module~rdb_coriolis_adv->module~rdb_mem_report module~rdb_ocean_metrics rdb_ocean_metrics module~rdb_coriolis_adv->module~rdb_ocean_metrics module~rdb_ocean_porous rdb_ocean_porous module~rdb_coriolis_adv->module~rdb_ocean_porous module~rdb_scratch_3d rdb_scratch_3d module~rdb_coriolis_adv->module~rdb_scratch_3d module~rdb_grid->module~rdb_constants module~rdb_multilayer_state->module~rdb_constants module~rdb_multilayer_state->module~rdb_grid module~rdb_multilayer_state->iso_fortran_env module~rdb_efp rdb_efp module~rdb_multilayer_state->module~rdb_efp module~rdb_error_ring rdb_error_ring module~rdb_multilayer_state->module~rdb_error_ring module~rdb_multilayer_state->module~rdb_mem_report module~rdb_tracer rdb_tracer module~rdb_multilayer_state->module~rdb_tracer pic_logger pic_logger module~rdb_multilayer_state->pic_logger module~rdb_ocean_bottom_drag->module~rdb_constants module~rdb_ocean_bottom_drag->module~rdb_grid module~rdb_ocean_bottom_drag->module~rdb_multilayer_state module~rdb_ocean_bottom_drag->iso_fortran_env module~rdb_ocean_bottom_drag->module~rdb_mem_report module~rdb_ocean_bottom_drag->module~rdb_ocean_metrics module~rdb_ocean_bottom_drag->module~rdb_scratch_3d module~rdb_ocean_horizontal_viscosity->module~rdb_constants module~rdb_ocean_horizontal_viscosity->module~rdb_grid module~rdb_ocean_horizontal_viscosity->module~rdb_multilayer_state module~rdb_ocean_horizontal_viscosity->iso_fortran_env module~rdb_ocean_horizontal_viscosity->module~rdb_mem_report module~rdb_ocean_lateral_mix rdb_ocean_lateral_mix module~rdb_ocean_horizontal_viscosity->module~rdb_ocean_lateral_mix module~rdb_ocean_horizontal_viscosity->module~rdb_ocean_metrics module~rdb_ocean_horizontal_viscosity->module~rdb_scratch_3d module~rdb_ocean_pressure_force->module~rdb_constants module~rdb_ocean_pressure_force->module~rdb_grid module~rdb_ocean_pressure_force->module~rdb_multilayer_state module~rdb_ocean_pressure_force->iso_fortran_env module~rdb_eos rdb_eos module~rdb_ocean_pressure_force->module~rdb_eos module~rdb_ocean_pressure_force->module~rdb_mem_report module~rdb_ocean_pressure_force->module~rdb_ocean_metrics module~rdb_ocean_pgf_reconstruct rdb_ocean_pgf_reconstruct module~rdb_ocean_pressure_force->module~rdb_ocean_pgf_reconstruct module~rdb_ocean_pressure_force->module~rdb_scratch_3d module~rdb_ocean_surface_stress->module~rdb_constants module~rdb_ocean_surface_stress->module~rdb_grid module~rdb_ocean_surface_stress->module~rdb_multilayer_state module~rdb_ocean_surface_stress->iso_fortran_env module~rdb_ocean_surface_stress->module~rdb_mem_report module~rdb_ocean_surface_stress->module~rdb_scratch_3d module~rdb_barotropic_state->module~rdb_constants module~rdb_barotropic_state->module~rdb_grid module~rdb_barotropic_state->iso_fortran_env module~rdb_barotropic_state->module~rdb_mem_report module~rdb_efp->iso_fortran_env ieee_arithmetic ieee_arithmetic module~rdb_efp->ieee_arithmetic module~rdb_eos->module~rdb_constants module~rdb_eos->module~rdb_grid module~rdb_error_ring->pic_logger module~rdb_mem_report->module~rdb_constants module~rdb_mem_report->iso_fortran_env module~rdb_mem_report->pic_logger pic_strings pic_strings module~rdb_mem_report->pic_strings module~rdb_ocean_lateral_mix->module~rdb_constants module~rdb_ocean_lateral_mix->module~rdb_grid module~rdb_ocean_lateral_mix->module~rdb_multilayer_state module~rdb_ocean_lateral_mix->iso_fortran_env module~rdb_ocean_lateral_mix->module~rdb_mem_report module~rdb_ocean_lateral_mix->module~rdb_ocean_metrics module~rdb_ocean_lateral_mix->module~rdb_scratch_3d module~rdb_ocean_metrics->module~rdb_constants module~rdb_ocean_metrics->module~rdb_grid module~rdb_ocean_metrics->iso_fortran_env module~rdb_ocean_metrics->module~rdb_error_ring module~rdb_ocean_metrics->module~rdb_mem_report module~rdb_ocean_metrics->pic_logger module~rdb_io_netcdf rdb_io_netcdf module~rdb_ocean_metrics->module~rdb_io_netcdf module~rdb_ocean_bipolar rdb_ocean_bipolar module~rdb_ocean_metrics->module~rdb_ocean_bipolar module~rdb_ocean_fold rdb_ocean_fold module~rdb_ocean_metrics->module~rdb_ocean_fold module~rdb_ocean_status rdb_ocean_status module~rdb_ocean_metrics->module~rdb_ocean_status netcdf netcdf module~rdb_ocean_metrics->netcdf module~rdb_ocean_metrics->pic_strings module~rdb_ocean_pgf_reconstruct->module~rdb_constants module~rdb_ocean_pgf_reconstruct->module~rdb_eos module~rdb_ocean_porous->module~rdb_constants module~rdb_ocean_porous->ieee_arithmetic module~rdb_scratch_3d->module~rdb_constants module~rdb_scratch_3d->iso_fortran_env module~rdb_scratch_3d->module~rdb_mem_report module~rdb_tracer->module~rdb_constants module~rdb_tracer->module~rdb_grid module~rdb_tracer->iso_fortran_env module~rdb_tracer->module~rdb_mem_report module~rdb_io_netcdf->module~rdb_constants module~rdb_io_netcdf->iso_fortran_env module~rdb_io_netcdf->module~rdb_error_ring module~rdb_io_netcdf->pic_logger module~rdb_io_netcdf->netcdf module~rdb_io_netcdf->pic_strings iso_c_binding iso_c_binding module~rdb_io_netcdf->iso_c_binding module~rdb_ocean_bipolar->module~rdb_constants module~rdb_ocean_fold->module~rdb_constants

Used by

  • module~~rdb_ocean_bt_budget_probe~~UsedByGraph module~rdb_ocean_bt_budget_probe rdb_ocean_bt_budget_probe module~rdb_ocean_dyn rdb_ocean_dyn module~rdb_ocean_dyn->module~rdb_ocean_bt_budget_probe module~rdb_driver rdb_driver module~rdb_driver->module~rdb_ocean_dyn module~rdb_ocean_engine rdb_ocean_engine module~rdb_driver->module~rdb_ocean_engine module~rdb_ocean_state rdb_ocean_state module~rdb_driver->module~rdb_ocean_state module~rdb_ocean_api rdb_ocean_api module~rdb_ocean_api->module~rdb_ocean_dyn module~rdb_ocean_api->module~rdb_ocean_engine module~rdb_handle rdb_handle module~rdb_ocean_api->module~rdb_handle module~rdb_ocean_diag_derived rdb_ocean_diag_derived module~rdb_ocean_api->module~rdb_ocean_diag_derived module~rdb_ocean_diag_fills rdb_ocean_diag_fills module~rdb_ocean_api->module~rdb_ocean_diag_fills module~rdb_ocean_engine->module~rdb_ocean_dyn module~rdb_ocean_setup rdb_ocean_setup module~rdb_ocean_engine->module~rdb_ocean_setup module~rdb_ocean_engine->module~rdb_ocean_state module~rdb_ocean_engine->module~rdb_ocean_diag_derived module~rdb_ocean_engine->module~rdb_ocean_diag_fills module~rdb_ocean_setup->module~rdb_ocean_dyn module~rdb_ocean_setup->module~rdb_ocean_state module~rdb_ocean_state->module~rdb_ocean_dyn module~rdb_handle->module~rdb_ocean_engine module~rdb_handle->module~rdb_ocean_state module~rdb_ocean_diag_derived->module~rdb_ocean_state module~rdb_ocean_diag_derived->module~rdb_ocean_diag_fills module~rdb_ocean_diag_fills->module~rdb_ocean_state

Subroutines

public subroutine print_bt_budget(grid, ms, bt_work, pgf, cor, hv, bd, ss, t_value, t_unit, stage_tag, header)

Compute + print the per-region BT-mode budget snapshot.

Read more…

Arguments

Type IntentOptional Attributes Name
type(hgrid_t), intent(in) :: grid
type(multilayer_state_t), intent(in) :: ms
type(barotropic_workstate_t), intent(in) :: bt_work
type(ocean_pressure_force_t), intent(in) :: pgf
type(coriolis_adv_t), intent(in) :: cor
type(ocean_horizontal_viscosity_t), intent(in) :: hv
type(ocean_bottom_drag_t), intent(in) :: bd
type(ocean_surface_stress_t), intent(in) :: ss
real(kind=wp), intent(in) :: t_value
character(len=*), intent(in) :: t_unit
character(len=*), intent(in) :: stage_tag
logical, intent(in) :: header

private subroutine emit_row(t_value, t_unit, stage_tag, region_tag, ke, eta_min, eta_max, usurf, ubed, vsurf, vbed, p_pgf, p_cor, p_hv, p_bd, p_ss)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: t_value
character(len=*), intent(in) :: t_unit
character(len=*), intent(in) :: stage_tag
character(len=*), intent(in) :: region_tag
real(kind=wp), intent(in) :: ke
real(kind=wp), intent(in) :: eta_min
real(kind=wp), intent(in) :: eta_max
real(kind=wp), intent(in) :: usurf
real(kind=wp), intent(in) :: ubed
real(kind=wp), intent(in) :: vsurf
real(kind=wp), intent(in) :: vbed
real(kind=wp), intent(in) :: p_pgf
real(kind=wp), intent(in) :: p_cor
real(kind=wp), intent(in) :: p_hv
real(kind=wp), intent(in) :: p_bd
real(kind=wp), intent(in) :: p_ss

private subroutine region_eta_uv(grid, ms, bt_work, j_lo, j_hi, eta_min, eta_max, usurf_max, ubed_max, vsurf_max, vbed_max, ke_mean)

Walk cells (interior x-range, j in [j_lo, j_hi]); collect η extremes, |u|/|v| extremes at surface + bed, and the cell-area-averaged BT KE.

Arguments

Type IntentOptional Attributes Name
type(hgrid_t), intent(in) :: grid
type(multilayer_state_t), intent(in) :: ms
type(barotropic_workstate_t), intent(in) :: bt_work
integer, intent(in) :: j_lo
integer, intent(in) :: j_hi
real(kind=wp), intent(out) :: eta_min
real(kind=wp), intent(out) :: eta_max
real(kind=wp), intent(out) :: usurf_max
real(kind=wp), intent(out) :: ubed_max
real(kind=wp), intent(out) :: vsurf_max
real(kind=wp), intent(out) :: vbed_max
real(kind=wp), intent(out) :: ke_mean

private subroutine region_power(grid, ms, bt_work, F_u_3d, F_v_3d, j_lo, j_hi, p_mean)

Cell-centred BT power per region: P = ⟨u_bt·F_u + v_bt·F_v⟩. F_u_3d is per-layer at u-faces, shape (nx+1, ny, nz). Depth-averages with the centred face thickness as weight to get the BT-mode contribution, then dots with bt_ubt/bt_vbt at the same face, then averages east+west (north+south) into the cell.

Arguments

Type IntentOptional Attributes Name
type(hgrid_t), intent(in) :: grid
type(multilayer_state_t), intent(in) :: ms
type(barotropic_workstate_t), intent(in) :: bt_work
real(kind=wp), intent(in) :: F_u_3d(:,:,:)
real(kind=wp), intent(in) :: F_v_3d(:,:,:)
integer, intent(in) :: j_lo
integer, intent(in) :: j_hi
real(kind=wp), intent(out) :: p_mean

private subroutine region_power_drag_implicit(grid, ms, bt_work, rate_u, rate_v, j_lo, j_hi, p_mean)

Bottom drag in implicit mode: the slow tendency for u at a face is −rate_u(i,j,k)·u_face_layer(i,j,k) (1/s × m/s → m/s²). We construct that on the fly, depth-mean by face thickness, dot with bt_ubt (and v counterpart), sum the cell-centred result over the region. Sign comes out negative: drag removes BT-mode energy.

Arguments

Type IntentOptional Attributes Name
type(hgrid_t), intent(in) :: grid
type(multilayer_state_t), intent(in) :: ms
type(barotropic_workstate_t), intent(in) :: bt_work
real(kind=wp), intent(in) :: rate_u(:,:,:)
real(kind=wp), intent(in) :: rate_v(:,:,:)
integer, intent(in) :: j_lo
integer, intent(in) :: j_hi
real(kind=wp), intent(out) :: p_mean