rdb_error_ring Module

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.


Uses

    • pic_logger
  • module~~rdb_error_ring~~UsesGraph module~rdb_error_ring rdb_error_ring pic_logger pic_logger module~rdb_error_ring->pic_logger

Used by

  • 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

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

public pure function error_ring_count() result(n)

Number of live messages in the ring (0..ERROR_RING_SLOTS).

Arguments

None

Return Value integer

public pure function error_ring_get(i) result(msg)

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 IntentOptional Attributes Name
integer, intent(in) :: i

Return Value character(len=ERROR_RING_MSG_LEN)


Subroutines

public subroutine error_ring_clear()

Reset the ring to empty.

Arguments

None

public subroutine error_ring_push(msg)

Push one message; error_ring_get(0) is always the most recent. Overwrites the oldest slot once full.

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: msg

public subroutine fail(msg, ierr, code)

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 IntentOptional Attributes Name
character(len=*), intent(in) :: msg
integer, intent(out), optional :: ierr
integer, intent(in) :: code