P0/P0.1 gave every setup procedure an optional, intent(out) :: ierr
returning a coarse STAGE code (rdb_ocean_status) while the specific
reason went only to global_logger%error — reachable from a Fortran
log, not from a C-ABI caller. RuntimeError: error 3 is exactly the
failure this module exists to prevent.
A RING, not a single last-error slot: the P0 review (finding F2) found
that at ~23 sites an outer configure_ocean_* wrapper calls an inner
procedure with ierr= unconditionally, so the inner SPECIFIC sentence
(e.g. a NetCDF dimension-mismatch message) is immediately followed by
an outer GENERIC one. A single slot keeps only the last write and loses
the specific sentence; the ring keeps both, in push order, so a caller
renders index 0 (most recent = deepest/most specific push) as the
headline message.
fail(msg, ierr, code) (below) is the single entry point that replaces
the hand-written logger%error(msg) + if (present(ierr)) then; ierr =
code; return; else; error stop msg; end if triple that P0 scattered
across ~99 call sites. It ALWAYS pushes msg to the ring and logs it
(unchanged behaviour for anyone still reading the buffered log), then:
ierr present -> sets ierr = code and returns to the caller (which
must itself return immediately — this routine cannot return from ITS
caller); ierr absent -> error stop msg, so the abort text and the
ring both carry the SAME specific message (previously these could
diverge: the error stop text was often a shorter, separately
hand-written string).
Cleared at the top of every bind(c) entry point in rdb_ocean_api
that begins a fresh operation, so a stale message from a previous call
never masquerades as the cause of a later, unrelated one.
module~~rdb_error_ring~~UsesGraph
module~rdb_error_ring
rdb_error_ring
pic_logger
pic_logger
module~rdb_error_ring->pic_logger
Nodes of different colours represent the following:
Graph Key
Module
Module
Submodule
Submodule
Subroutine
Subroutine
Function
Function
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
module~~rdb_error_ring~~UsedByGraph
module~rdb_error_ring
rdb_error_ring
module~rdb_config
rdb_config
module~rdb_config->module~rdb_error_ring
module~rdb_nml_schema
rdb_nml_schema
module~rdb_config->module~rdb_nml_schema
module~rdb_ice_init
rdb_ice_init
module~rdb_config->module~rdb_ice_init
module~rdb_io_netcdf
rdb_io_netcdf
module~rdb_io_netcdf->module~rdb_error_ring
module~rdb_multilayer_state
rdb_multilayer_state
module~rdb_multilayer_state->module~rdb_error_ring
module~rdb_nml_schema->module~rdb_error_ring
module~rdb_ocean_api
rdb_ocean_api
module~rdb_ocean_api->module~rdb_error_ring
module~rdb_ocean_api->module~rdb_config
module~rdb_ocean_bathymetry_inject
rdb_ocean_bathymetry_inject
module~rdb_ocean_api->module~rdb_ocean_bathymetry_inject
module~rdb_ocean_diag_derived
rdb_ocean_diag_derived
module~rdb_ocean_api->module~rdb_ocean_diag_derived
module~rdb_ocean_engine
rdb_ocean_engine
module~rdb_ocean_api->module~rdb_ocean_engine
module~rdb_handle
rdb_handle
module~rdb_ocean_api->module~rdb_handle
module~rdb_ocean_diag_fills
rdb_ocean_diag_fills
module~rdb_ocean_api->module~rdb_ocean_diag_fills
module~rdb_ocean_dyn
rdb_ocean_dyn
module~rdb_ocean_api->module~rdb_ocean_dyn
module~rdb_ocean_eos_compute
rdb_ocean_eos_compute
module~rdb_ocean_api->module~rdb_ocean_eos_compute
module~rdb_ocean_fold_apply
rdb_ocean_fold_apply
module~rdb_ocean_api->module~rdb_ocean_fold_apply
module~rdb_ocean_periodic
rdb_ocean_periodic
module~rdb_ocean_api->module~rdb_ocean_periodic
module~rdb_ocean_halo_width
rdb_ocean_halo_width
module~rdb_ocean_api->module~rdb_ocean_halo_width
module~rdb_ocean_bathymetry_inject->module~rdb_error_ring
module~rdb_ocean_data_forcing
rdb_ocean_data_forcing
module~rdb_ocean_data_forcing->module~rdb_error_ring
module~rdb_ocean_data_forcing->module~rdb_config
module~rdb_ocean_data_input
rdb_ocean_data_input
module~rdb_ocean_data_forcing->module~rdb_ocean_data_input
module~rdb_ocean_halo_state
rdb_ocean_halo_state
module~rdb_ocean_data_forcing->module~rdb_ocean_halo_state
module~rdb_ocean_surface_flux
rdb_ocean_surface_flux
module~rdb_ocean_data_forcing->module~rdb_ocean_surface_flux
module~rdb_ocean_surface_stress
rdb_ocean_surface_stress
module~rdb_ocean_data_forcing->module~rdb_ocean_surface_stress
module~rdb_ocean_data_input->module~rdb_error_ring
module~rdb_ocean_data_input->module~rdb_config
module~rdb_ocean_data_input->module~rdb_io_netcdf
module~rdb_ocean_diag
rdb_ocean_diag
module~rdb_ocean_diag->module~rdb_error_ring
module~rdb_ocean_diag_derived->module~rdb_error_ring
module~rdb_ocean_diag_derived->module~rdb_ocean_diag
module~rdb_ocean_state
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_engine->module~rdb_error_ring
module~rdb_ocean_engine->module~rdb_config
module~rdb_ocean_engine->module~rdb_io_netcdf
module~rdb_ocean_engine->module~rdb_ocean_data_forcing
module~rdb_ocean_engine->module~rdb_ocean_data_input
module~rdb_ocean_engine->module~rdb_ocean_diag
module~rdb_ocean_engine->module~rdb_ocean_diag_derived
module~rdb_ocean_fold_exchange
rdb_ocean_fold_exchange
module~rdb_ocean_engine->module~rdb_ocean_fold_exchange
module~rdb_ocean_halo
rdb_ocean_halo
module~rdb_ocean_engine->module~rdb_ocean_halo
module~rdb_ocean_metrics
rdb_ocean_metrics
module~rdb_ocean_engine->module~rdb_ocean_metrics
module~rdb_ocean_setup
rdb_ocean_setup
module~rdb_ocean_engine->module~rdb_ocean_setup
module~rdb_ocean_stability_audit
rdb_ocean_stability_audit
module~rdb_ocean_engine->module~rdb_ocean_stability_audit
module~rdb_ocean_engine->module~rdb_ocean_state
module~rdb_decomp
rdb_decomp
module~rdb_ocean_engine->module~rdb_decomp
module~rdb_ice_basal_flux
rdb_ice_basal_flux
module~rdb_ocean_engine->module~rdb_ice_basal_flux
module~rdb_ice_evp
rdb_ice_evp
module~rdb_ocean_engine->module~rdb_ice_evp
module~rdb_ice_frazil
rdb_ice_frazil
module~rdb_ocean_engine->module~rdb_ice_frazil
module~rdb_ice_frazil_uptake
rdb_ice_frazil_uptake
module~rdb_ocean_engine->module~rdb_ice_frazil_uptake
module~rdb_ocean_engine->module~rdb_ice_init
module~rdb_ice_itd
rdb_ice_itd
module~rdb_ocean_engine->module~rdb_ice_itd
module~rdb_ice_ocean_coupler
rdb_ice_ocean_coupler
module~rdb_ocean_engine->module~rdb_ice_ocean_coupler
module~rdb_ice_thermo_driver
rdb_ice_thermo_driver
module~rdb_ocean_engine->module~rdb_ice_thermo_driver
module~rdb_ice_transport
rdb_ice_transport
module~rdb_ocean_engine->module~rdb_ice_transport
module~rdb_ocean_cavity_flux
rdb_ocean_cavity_flux
module~rdb_ocean_engine->module~rdb_ocean_cavity_flux
module~rdb_ocean_engine->module~rdb_ocean_diag_fills
module~rdb_ocean_diag_netcdf
rdb_ocean_diag_netcdf
module~rdb_ocean_engine->module~rdb_ocean_diag_netcdf
module~rdb_ocean_engine->module~rdb_ocean_dyn
module~rdb_ocean_engine->module~rdb_ocean_fold_apply
module~rdb_ocean_geothermal
rdb_ocean_geothermal
module~rdb_ocean_engine->module~rdb_ocean_geothermal
module~rdb_ocean_engine->module~rdb_ocean_halo_state
module~rdb_ocean_engine->module~rdb_ocean_periodic
module~rdb_ocean_sponge
rdb_ocean_sponge
module~rdb_ocean_engine->module~rdb_ocean_sponge
module~rdb_ocean_engine->module~rdb_ocean_surface_flux
module~rdb_ocean_engine->module~rdb_ocean_surface_stress
module~rdb_state
rdb_state
module~rdb_ocean_engine->module~rdb_state
module~rdb_halo
rdb_halo
module~rdb_ocean_engine->module~rdb_halo
module~rdb_ocean_fold_exchange->module~rdb_error_ring
module~rdb_ocean_fold_exchange->module~rdb_decomp
module~rdb_ocean_halo->module~rdb_error_ring
module~rdb_ocean_halo->module~rdb_decomp
module~rdb_ocean_halo->module~rdb_ocean_periodic
module~rdb_ocean_metrics->module~rdb_error_ring
module~rdb_ocean_metrics->module~rdb_io_netcdf
module~rdb_ocean_pseudo_salt
rdb_ocean_pseudo_salt
module~rdb_ocean_pseudo_salt->module~rdb_error_ring
module~rdb_ocean_pseudo_salt->module~rdb_multilayer_state
module~rdb_ocean_restart_io
rdb_ocean_restart_io
module~rdb_ocean_restart_io->module~rdb_error_ring
module~rdb_ocean_restart_io->module~rdb_io_netcdf
module~rdb_ocean_restart_io->module~rdb_decomp
module~rdb_ocean_setup->module~rdb_error_ring
module~rdb_ocean_setup->module~rdb_config
module~rdb_ocean_setup->module~rdb_ocean_fold_exchange
module~rdb_ocean_setup->module~rdb_ocean_halo
module~rdb_ocean_setup->module~rdb_ocean_metrics
module~rdb_ocean_setup->module~rdb_ocean_state
module~rdb_coriolis_adv
rdb_coriolis_adv
module~rdb_ocean_setup->module~rdb_coriolis_adv
module~rdb_ocean_setup->module~rdb_decomp
module~rdb_ocean_bottom_drag
rdb_ocean_bottom_drag
module~rdb_ocean_setup->module~rdb_ocean_bottom_drag
module~rdb_ocean_setup->module~rdb_ocean_dyn
module~rdb_ocean_epbl
rdb_ocean_epbl
module~rdb_ocean_setup->module~rdb_ocean_epbl
module~rdb_ocean_setup->module~rdb_ocean_fold_apply
module~rdb_ocean_setup->module~rdb_ocean_geothermal
module~rdb_ocean_setup->module~rdb_ocean_halo_state
module~rdb_ocean_horizontal_viscosity
rdb_ocean_horizontal_viscosity
module~rdb_ocean_setup->module~rdb_ocean_horizontal_viscosity
module~rdb_ocean_lateral_mix
rdb_ocean_lateral_mix
module~rdb_ocean_setup->module~rdb_ocean_lateral_mix
module~rdb_ocean_pressure_force
rdb_ocean_pressure_force
module~rdb_ocean_setup->module~rdb_ocean_pressure_force
module~rdb_ocean_setup->module~rdb_ocean_sponge
module~rdb_ocean_setup->module~rdb_ocean_surface_flux
module~rdb_ocean_setup->module~rdb_ocean_surface_stress
module~rdb_ocean_top_drag
rdb_ocean_top_drag
module~rdb_ocean_setup->module~rdb_ocean_top_drag
module~rdb_ocean_vdiff
rdb_ocean_vdiff
module~rdb_ocean_setup->module~rdb_ocean_vdiff
module~rdb_ocean_vmix
rdb_ocean_vmix
module~rdb_ocean_setup->module~rdb_ocean_vmix
module~rdb_ocean_setup->module~rdb_halo
module~rdb_ocean_stability_audit->module~rdb_error_ring
module~rdb_ocean_stability_audit->module~rdb_config
module~rdb_ocean_stability_audit->module~rdb_ocean_metrics
module~rdb_ocean_state->module~rdb_error_ring
module~rdb_ocean_state->module~rdb_config
module~rdb_ocean_state->module~rdb_multilayer_state
module~rdb_ocean_state->module~rdb_ocean_bathymetry_inject
module~rdb_ocean_state->module~rdb_ocean_data_forcing
module~rdb_ocean_state->module~rdb_ocean_data_input
module~rdb_ocean_state->module~rdb_ocean_diag
module~rdb_ocean_state->module~rdb_ocean_metrics
module~rdb_ocean_state->module~rdb_ocean_pseudo_salt
module~rdb_ocean_state->module~rdb_ocean_restart_io
module~rdb_ocean_z_init
rdb_ocean_z_init
module~rdb_ocean_state->module~rdb_ocean_z_init
module~rdb_bathymetry
rdb_bathymetry
module~rdb_ocean_state->module~rdb_bathymetry
module~rdb_continuity
rdb_continuity
module~rdb_ocean_state->module~rdb_continuity
module~rdb_ocean_state->module~rdb_coriolis_adv
module~rdb_ocean_state->module~rdb_decomp
module~rdb_ocean_state->module~rdb_ocean_bottom_drag
module~rdb_ocean_state->module~rdb_ocean_cavity_flux
module~rdb_ocean_state->module~rdb_ocean_dyn
module~rdb_ocean_state->module~rdb_ocean_epbl
module~rdb_ocean_gm
rdb_ocean_gm
module~rdb_ocean_state->module~rdb_ocean_gm
module~rdb_ocean_hdiff_tracer
rdb_ocean_hdiff_tracer
module~rdb_ocean_state->module~rdb_ocean_hdiff_tracer
module~rdb_ocean_state->module~rdb_ocean_horizontal_viscosity
module~rdb_ocean_isopycnal_slopes
rdb_ocean_isopycnal_slopes
module~rdb_ocean_state->module~rdb_ocean_isopycnal_slopes
module~rdb_ocean_kappa_shear
rdb_ocean_kappa_shear
module~rdb_ocean_state->module~rdb_ocean_kappa_shear
module~rdb_ocean_state->module~rdb_ocean_lateral_mix
module~rdb_ocean_meke
rdb_ocean_meke
module~rdb_ocean_state->module~rdb_ocean_meke
module~rdb_ocean_mle
rdb_ocean_mle
module~rdb_ocean_state->module~rdb_ocean_mle
module~rdb_ocean_state->module~rdb_ocean_periodic
module~rdb_ocean_state->module~rdb_ocean_pressure_force
module~rdb_ocean_redi
rdb_ocean_redi
module~rdb_ocean_state->module~rdb_ocean_redi
module~rdb_ocean_state->module~rdb_ocean_sponge
module~rdb_ocean_state->module~rdb_ocean_surface_flux
module~rdb_ocean_state->module~rdb_ocean_surface_stress
module~rdb_ocean_tidal_mixing
rdb_ocean_tidal_mixing
module~rdb_ocean_state->module~rdb_ocean_tidal_mixing
module~rdb_ocean_state->module~rdb_ocean_top_drag
module~rdb_ocean_varmix
rdb_ocean_varmix
module~rdb_ocean_state->module~rdb_ocean_varmix
module~rdb_ocean_state->module~rdb_ocean_vdiff
module~rdb_ocean_vertical_advection
rdb_ocean_vertical_advection
module~rdb_ocean_state->module~rdb_ocean_vertical_advection
module~rdb_ocean_state->module~rdb_ocean_vmix
module~rdb_ocean_wave_speed
rdb_ocean_wave_speed
module~rdb_ocean_state->module~rdb_ocean_wave_speed
module~rdb_ocean_z_init->module~rdb_error_ring
module~rdb_ocean_z_init->module~rdb_config
module~rdb_ocean_z_init->module~rdb_io_netcdf
module~rdb_ocean_z_init->module~rdb_multilayer_state
proc~eos_validate
eos_validate
proc~eos_validate->module~rdb_error_ring
proc~ocean_cavity_flux_step
ocean_cavity_flux_step
proc~ocean_cavity_flux_step->module~rdb_error_ring
proc~ocean_cavity_mass_step
ocean_cavity_mass_step
proc~ocean_cavity_mass_step->module~rdb_error_ring
proc~ocean_cavity_mass_step->module~rdb_halo
module~rdb_barotropic_coupling
rdb_barotropic_coupling
module~rdb_barotropic_coupling->module~rdb_multilayer_state
module~rdb_barotropic_coupling->module~rdb_ocean_metrics
module~rdb_barotropic_coupling->module~rdb_coriolis_adv
module~rdb_barotropic_coupling->module~rdb_ocean_bottom_drag
module~rdb_barotropic_coupling->module~rdb_ocean_horizontal_viscosity
module~rdb_barotropic_coupling->module~rdb_ocean_pressure_force
module~rdb_barotropic_coupling->module~rdb_ocean_surface_stress
module~rdb_barotropic_coupling->module~rdb_ocean_top_drag
module~rdb_barotropic_substep
rdb_barotropic_substep
module~rdb_barotropic_substep->module~rdb_ocean_fold_exchange
module~rdb_barotropic_substep->module~rdb_ocean_halo
module~rdb_barotropic_substep->module~rdb_ocean_metrics
module~rdb_bathymetry->module~rdb_io_netcdf
module~rdb_config_schema
rdb_config_schema
module~rdb_config_schema->module~rdb_config
module~rdb_continuity->module~rdb_multilayer_state
module~rdb_continuity->module~rdb_ocean_fold_exchange
module~rdb_continuity->module~rdb_ocean_halo
module~rdb_continuity->module~rdb_ocean_metrics
module~rdb_continuity->module~rdb_ocean_fold_apply
module~rdb_continuity->module~rdb_ocean_gm
module~rdb_continuity->module~rdb_ocean_mle
module~rdb_continuity->module~rdb_ocean_periodic
module~rdb_coriolis_adv->module~rdb_multilayer_state
module~rdb_coriolis_adv->module~rdb_ocean_metrics
module~rdb_decomp->module~rdb_config
module~rdb_driver
rdb_driver
module~rdb_driver->module~rdb_config
module~rdb_driver->module~rdb_io_netcdf
module~rdb_driver->module~rdb_ocean_engine
module~rdb_driver->module~rdb_ocean_state
module~rdb_ocean_console_stats
rdb_ocean_console_stats
module~rdb_driver->module~rdb_ocean_console_stats
module~rdb_driver->module~rdb_ocean_dyn
module~rdb_driver->module~rdb_halo
module~rdb_handle->module~rdb_config
module~rdb_handle->module~rdb_ocean_engine
module~rdb_handle->module~rdb_ocean_state
module~rdb_ice_basal_flux->module~rdb_multilayer_state
module~rdb_ice_basal_flux->module~rdb_ocean_surface_flux
module~rdb_ice_evp->module~rdb_multilayer_state
module~rdb_ice_evp->module~rdb_ocean_halo
module~rdb_ice_evp->module~rdb_ocean_metrics
module~rdb_ice_evp->module~rdb_ocean_periodic
module~rdb_ice_frazil->module~rdb_multilayer_state
module~rdb_ice_frazil->module~rdb_ocean_surface_flux
module~rdb_ice_frazil_uptake->module~rdb_multilayer_state
module~rdb_ice_init->module~rdb_multilayer_state
module~rdb_ice_init->module~rdb_ocean_metrics
module~rdb_ice_itd->module~rdb_multilayer_state
module~rdb_ice_ocean_coupler->module~rdb_ocean_metrics
module~rdb_ice_ocean_coupler->module~rdb_ocean_halo_state
module~rdb_ice_ocean_coupler->module~rdb_ocean_surface_flux
module~rdb_ice_ocean_coupler->module~rdb_ocean_surface_stress
module~rdb_ice_thermo_driver->module~rdb_multilayer_state
module~rdb_ice_transport->module~rdb_multilayer_state
module~rdb_ice_transport->module~rdb_ocean_halo
module~rdb_ice_transport->module~rdb_ocean_metrics
module~rdb_ice_transport->module~rdb_continuity
module~rdb_ice_transport->module~rdb_ice_itd
module~rdb_ice_transport->module~rdb_ocean_halo_state
module~rdb_ice_transport->module~rdb_halo
module~rdb_ocean_bottom_drag->module~rdb_multilayer_state
module~rdb_ocean_bottom_drag->module~rdb_ocean_metrics
module~rdb_ocean_bt_budget_probe
rdb_ocean_bt_budget_probe
module~rdb_ocean_bt_budget_probe->module~rdb_multilayer_state
module~rdb_ocean_bt_budget_probe->module~rdb_coriolis_adv
module~rdb_ocean_bt_budget_probe->module~rdb_ocean_bottom_drag
module~rdb_ocean_bt_budget_probe->module~rdb_ocean_horizontal_viscosity
module~rdb_ocean_bt_budget_probe->module~rdb_ocean_pressure_force
module~rdb_ocean_bt_budget_probe->module~rdb_ocean_surface_stress
module~rdb_ocean_bt_wide
rdb_ocean_bt_wide
module~rdb_ocean_bt_wide->module~rdb_ocean_halo
module~rdb_ocean_bt_wide->module~rdb_ocean_metrics
module~rdb_ocean_bt_wide->module~rdb_barotropic_substep
module~rdb_ocean_budgets
rdb_ocean_budgets
module~rdb_ocean_budgets->module~rdb_multilayer_state
module~rdb_ocean_cavity_flux->module~rdb_multilayer_state
module~rdb_ocean_cavity_flux->module~rdb_ocean_metrics
module~rdb_ocean_cavity_flux->module~rdb_ocean_surface_flux
module~rdb_ocean_chksum
rdb_ocean_chksum
module~rdb_ocean_chksum->module~rdb_multilayer_state
module~rdb_ocean_chksum->module~rdb_halo
module~rdb_ocean_console_stats->module~rdb_multilayer_state
module~rdb_ocean_console_stats->module~rdb_ocean_metrics
module~rdb_ocean_console_stats->module~rdb_halo
module~rdb_ocean_diag_fills->module~rdb_ocean_diag
module~rdb_ocean_diag_fills->module~rdb_ocean_pseudo_salt
module~rdb_ocean_diag_fills->module~rdb_ocean_state
module~rdb_ocean_diag_netcdf->module~rdb_io_netcdf
module~rdb_ocean_diag_netcdf->module~rdb_ocean_diag
module~rdb_ocean_dyn->module~rdb_multilayer_state
module~rdb_ocean_dyn->module~rdb_ocean_halo
module~rdb_ocean_dyn->module~rdb_ocean_metrics
module~rdb_ocean_dyn->module~rdb_barotropic_coupling
module~rdb_ocean_dyn->module~rdb_barotropic_substep
module~rdb_ocean_dyn->module~rdb_continuity
module~rdb_ocean_dyn->module~rdb_coriolis_adv
module~rdb_ocean_dyn->module~rdb_ocean_bottom_drag
module~rdb_ocean_dyn->module~rdb_ocean_bt_budget_probe
module~rdb_ocean_dyn->module~rdb_ocean_bt_wide
module~rdb_ocean_dyn->module~rdb_ocean_cavity_flux
module~rdb_ocean_dyn->module~rdb_ocean_chksum
module~rdb_ocean_dyn->module~rdb_ocean_console_stats
module~rdb_ocean_dyn->module~rdb_ocean_eos_compute
module~rdb_ocean_dyn->module~rdb_ocean_epbl
module~rdb_ocean_dyn->module~rdb_ocean_fold_apply
module~rdb_ocean_dyn->module~rdb_ocean_geothermal
module~rdb_ocean_ghost_poison
rdb_ocean_ghost_poison
module~rdb_ocean_dyn->module~rdb_ocean_ghost_poison
module~rdb_ocean_dyn->module~rdb_ocean_gm
module~rdb_ocean_dyn->module~rdb_ocean_halo_state
module~rdb_ocean_dyn->module~rdb_ocean_hdiff_tracer
module~rdb_ocean_dyn->module~rdb_ocean_horizontal_viscosity
module~rdb_ocean_ideal_age
rdb_ocean_ideal_age
module~rdb_ocean_dyn->module~rdb_ocean_ideal_age
module~rdb_ocean_dyn->module~rdb_ocean_isopycnal_slopes
module~rdb_ocean_dyn->module~rdb_ocean_kappa_shear
module~rdb_ocean_ke_probe
rdb_ocean_ke_probe
module~rdb_ocean_dyn->module~rdb_ocean_ke_probe
module~rdb_ocean_dyn->module~rdb_ocean_lateral_mix
module~rdb_ocean_dyn->module~rdb_ocean_meke
module~rdb_ocean_min_thickness
rdb_ocean_min_thickness
module~rdb_ocean_dyn->module~rdb_ocean_min_thickness
module~rdb_ocean_dyn->module~rdb_ocean_mle
module~rdb_ocean_obc_baroclinic
rdb_ocean_obc_baroclinic
module~rdb_ocean_dyn->module~rdb_ocean_obc_baroclinic
module~rdb_ocean_dyn->module~rdb_ocean_periodic
module~rdb_ocean_dyn->module~rdb_ocean_pressure_force
module~rdb_ocean_dyn->module~rdb_ocean_redi
module~rdb_ocean_remap
rdb_ocean_remap
module~rdb_ocean_dyn->module~rdb_ocean_remap
module~rdb_ocean_dyn->module~rdb_ocean_sponge
module~rdb_ocean_dyn->module~rdb_ocean_surface_flux
module~rdb_ocean_dyn->module~rdb_ocean_surface_stress
module~rdb_ocean_dyn->module~rdb_ocean_tidal_mixing
module~rdb_ocean_dyn->module~rdb_ocean_top_drag
module~rdb_ocean_dyn->module~rdb_ocean_varmix
module~rdb_ocean_dyn->module~rdb_ocean_vdiff
module~rdb_ocean_dyn->module~rdb_ocean_vertical_advection
module~rdb_ocean_dyn->module~rdb_ocean_vmix
module~rdb_ocean_dyn->module~rdb_ocean_wave_speed
module~rdb_ocean_eos_compute->module~rdb_multilayer_state
module~rdb_ocean_epbl->module~rdb_multilayer_state
module~rdb_ocean_epbl->module~rdb_ocean_surface_flux
module~rdb_ocean_epbl->module~rdb_ocean_surface_stress
module~rdb_ocean_fold_apply->module~rdb_multilayer_state
module~rdb_ocean_fold_apply->module~rdb_ocean_fold_exchange
module~rdb_ocean_geothermal->module~rdb_multilayer_state
module~rdb_ocean_geothermal->module~rdb_ocean_surface_flux
module~rdb_ocean_ghost_poison->module~rdb_multilayer_state
module~rdb_ocean_ghost_poison->module~rdb_ocean_surface_stress
module~rdb_ocean_gm->module~rdb_multilayer_state
module~rdb_ocean_gm->module~rdb_ocean_metrics
module~rdb_ocean_gm->module~rdb_ocean_isopycnal_slopes
module~rdb_ocean_halo_state->module~rdb_multilayer_state
module~rdb_ocean_halo_state->module~rdb_ocean_halo
module~rdb_ocean_halo_state->module~rdb_ocean_fold_apply
module~rdb_ocean_halo_state->module~rdb_ocean_periodic
module~rdb_ocean_halo_state->module~rdb_ocean_surface_stress
module~rdb_ocean_hdiff_tracer->module~rdb_multilayer_state
module~rdb_ocean_hdiff_tracer->module~rdb_ocean_metrics
module~rdb_ocean_horizontal_viscosity->module~rdb_multilayer_state
module~rdb_ocean_horizontal_viscosity->module~rdb_ocean_metrics
module~rdb_ocean_horizontal_viscosity->module~rdb_ocean_lateral_mix
module~rdb_ocean_ideal_age->module~rdb_multilayer_state
module~rdb_ocean_isopycnal_slopes->module~rdb_multilayer_state
module~rdb_ocean_isopycnal_slopes->module~rdb_ocean_metrics
module~rdb_ocean_kappa_shear->module~rdb_multilayer_state
module~rdb_ocean_ke_probe->module~rdb_multilayer_state
module~rdb_ocean_ke_probe->module~rdb_ocean_metrics
module~rdb_ocean_ke_probe->module~rdb_coriolis_adv
module~rdb_ocean_lateral_mix->module~rdb_multilayer_state
module~rdb_ocean_lateral_mix->module~rdb_ocean_metrics
module~rdb_ocean_meke->module~rdb_multilayer_state
module~rdb_ocean_meke->module~rdb_ocean_metrics
module~rdb_ocean_meke->module~rdb_ocean_gm
module~rdb_ocean_meke->module~rdb_ocean_varmix
module~rdb_ocean_meke->module~rdb_ocean_wave_speed
module~rdb_ocean_min_thickness->module~rdb_multilayer_state
module~rdb_ocean_mle->module~rdb_multilayer_state
module~rdb_ocean_mle->module~rdb_ocean_metrics
module~rdb_ocean_mle->module~rdb_ocean_epbl
module~rdb_ocean_mle->module~rdb_ocean_surface_stress
module~rdb_ocean_obc_baroclinic->module~rdb_multilayer_state
module~rdb_ocean_periodic->module~rdb_multilayer_state
module~rdb_ocean_pressure_force->module~rdb_multilayer_state
module~rdb_ocean_pressure_force->module~rdb_ocean_metrics
module~rdb_ocean_redi->module~rdb_multilayer_state
module~rdb_ocean_redi->module~rdb_ocean_metrics
module~rdb_ocean_remap->module~rdb_multilayer_state
module~rdb_ocean_sponge->module~rdb_multilayer_state
module~rdb_ocean_surface_flux->module~rdb_multilayer_state
module~rdb_ocean_surface_stress->module~rdb_multilayer_state
module~rdb_ocean_tidal_mixing->module~rdb_multilayer_state
module~rdb_ocean_top_drag->module~rdb_multilayer_state
module~rdb_ocean_varmix->module~rdb_multilayer_state
module~rdb_ocean_varmix->module~rdb_ocean_metrics
module~rdb_ocean_varmix->module~rdb_ocean_isopycnal_slopes
module~rdb_ocean_varmix->module~rdb_ocean_wave_speed
module~rdb_ocean_vdiff->module~rdb_multilayer_state
module~rdb_ocean_vertical_advection->module~rdb_multilayer_state
module~rdb_ocean_vmix->module~rdb_multilayer_state
module~rdb_ocean_vmix->module~rdb_ocean_surface_flux
module~rdb_ocean_vmix->module~rdb_ocean_surface_stress
module~rdb_ocean_wave_speed->module~rdb_multilayer_state
module~rdb_ocean_wave_speed->module~rdb_ocean_metrics
module~rdb_state->module~rdb_config
proc~validate_config
validate_config
proc~validate_config->module~rdb_ocean_pseudo_salt
proc~validate_config->module~rdb_coriolis_adv
proc~validate_config->module~rdb_ocean_bottom_drag
proc~validate_config->module~rdb_ocean_horizontal_viscosity
proc~validate_config->module~rdb_ocean_lateral_mix
proc~validate_config->module~rdb_ocean_pressure_force
proc~validate_config->module~rdb_ocean_surface_flux
proc~validate_config->module~rdb_ocean_tidal_mixing
proc~validate_config->module~rdb_ocean_top_drag
proc~validate_config->module~rdb_ocean_vmix
module~rdb_halo->module~rdb_decomp
module~rdb_ocean_halo_width->module~rdb_coriolis_adv
Nodes of different colours represent the following:
Graph Key
Module
Module
Submodule
Submodule
Subroutine
Subroutine
Function
Function
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
Variables
Type
Visibility Attributes
Name
Initial
integer,
public,
parameter
::
ERROR_RING_MSG_LEN
=
512
Matches the C-ABI buffer contract documented at
rdb_ocean_last_error (include/rdb_ocean.h).
integer,
public,
parameter
::
ERROR_RING_SLOTS
=
16
Comfortably deeper than the deepest ierr= threading chain on the
create() path (a handful of frames at most).
character(len=ERROR_RING_MSG_LEN),
private,
save
::
ring (ERROR_RING_SLOTS)
=
""
integer,
private,
save
::
ring_count
=
0
Number of live slots, saturating at ERROR_RING_SLOTS.
integer,
private,
save
::
ring_head
=
0
1-based index of the MOST RECENT push; wraps modulo ERROR_RING_SLOTS.
Functions
Number of live messages in the ring (0..ERROR_RING_SLOTS).
Arguments
None
Return Value
integer
Message at ring-relative index i (0 = most recent, 1 =
next-most-recent, …). Empty string if i is out of
[0, error_ring_count()).
Arguments
Type
Intent Optional Attributes
Name
integer,
intent(in)
::
i
Return Value
character(len=ERROR_RING_MSG_LEN)
Subroutines
Reset the ring to empty.
Arguments
None
Push one message; error_ring_get(0) is always the most recent.
Overwrites the oldest slot once full.
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
msg
Push msg to the error ring, log it (unchanged behaviour), then
either set ierr = code and return (caller must return
immediately after this call) or error stop msg when ierr is
absent. See the module docstring for the full contract.
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
msg
integer,
intent(out),
optional
::
ierr
integer,
intent(in)
::
code