Free procedures that estimate, log, and verify the device memory
footprint of the simulation state before the OpenACC
enter_data mapping is attempted — so an over-budget run reports
a readable diagnostic instead of dying opaquely inside the CUDA
runtime (the motivating failure: a 10M-cell ocean config that
exhausted device memory at enter_data with no setup-time hint).
Design decision (no hand-maintained per-slot byte counts — those
rot the moment a slot is added): the ONLY trustworthy figures are
the OpenACC runtime’s own free-memory queries. The device
footprint of the state mapping is measured , not estimated, as
the drop in free device memory across enter_data
(mem_log_state_budget snapshots free-before;
mem_log_device_actuals reports the delta). Host RSS growth
across state init is still logged, but ONLY as an advisory
host-side figure + a conservative upper bound for the pre-flight
OOM warning — it includes host-only allocations (NetCDF/HDF5
library pages, I/O buffers, host mirrors of the device arrays) and
measured 6-31x larger than the true device map (2026-07 audit), so
it must never be read as a device estimate.
Three structural offsets to keep in mind when reconciling these
figures against nvidia-smi (audited 2026-07 on V100):
1. CUDA context + CUBIN load : ~300-500 MB per process,
created at the first OpenACC API call / directive. It is
inside used = total - free and inside nvidia-smi’s
per-process figure, but is NOT state — a tiny config still
shows ~300 MB in use.
2. Device-wide accounting + pool granularity :
used = total - free counts EVERY process on the device
(shared-device activity perturbs it and the measured mapping
delta), and the NVHPC pool allocator rounds small maps up by
a few MB.
3. One-off CUDA runtime/kernel reservation at first launch :
the first time-loop step grows per-process device usage by
GBs (measured: ~3.0 GB coastal, ~8.6 GB ocean on V100) —
constant thereafter, independent of step count and of
NV_ACC_MEM_MANAGE, and NOT proportional to grid size.
Consistent with the driver’s local-memory/stack backing for
stack-heavy kernels (fixed-size local() arrays), which
scales with the binary’s kernels x device SM count. It is
real per-process usage (visible in nvidia-smi) but is not a
leak; the growth WARNING therefore measures against the
steady post-first-sample baseline, not the post-enter_data
one.
Post-setup growth (mem_log_device_growth) makes drift
self-announcing: kernels that lazy-allocate device workspaces on
first call (the coastal *_workspace_ensure pattern — measured at
~33% of the coastal device footprint) land AFTER enter_data, so
the periodic status re-checks and the end-of-run summary reports
the growth, warning above GROWTH_WARN_FRAC.
Device queries use the OpenACC property API
(acc_get_property with acc_property_memory /
acc_property_free_memory). They are compiled only when the
OpenACC runtime module is available (RDB_HAS_OPENACC_RUNTIME,
set by cmake/compiler_flags.cmake for NVHPC + Cray — covers both
the -acc=gpu and -mp=gpu NVHPC backends). On every other
toolchain (gfortran, ifx) the device functions return -1 and the
loggers degrade to the host-only line.
module~~rdb_mem_report~~UsesGraph
module~rdb_mem_report
rdb_mem_report
iso_fortran_env
iso_fortran_env
module~rdb_mem_report->iso_fortran_env
module~rdb_constants
rdb_constants
module~rdb_mem_report->module~rdb_constants
pic_logger
pic_logger
module~rdb_mem_report->pic_logger
pic_strings
pic_strings
module~rdb_mem_report->pic_strings
pic_types
pic_types
module~rdb_constants->pic_types
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_mem_report~~UsedByGraph
module~rdb_mem_report
rdb_mem_report
module~rdb_barotropic_state
rdb_barotropic_state
module~rdb_barotropic_state->module~rdb_mem_report
module~rdb_barotropic_workstate
rdb_barotropic_workstate
module~rdb_barotropic_workstate->module~rdb_mem_report
module~rdb_continuity
rdb_continuity
module~rdb_continuity->module~rdb_mem_report
module~rdb_continuity->module~rdb_barotropic_state
module~rdb_multilayer_state
rdb_multilayer_state
module~rdb_continuity->module~rdb_multilayer_state
module~rdb_ocean_boundary_types
rdb_ocean_boundary_types
module~rdb_continuity->module~rdb_ocean_boundary_types
module~rdb_ocean_gm
rdb_ocean_gm
module~rdb_continuity->module~rdb_ocean_gm
module~rdb_ocean_metrics
rdb_ocean_metrics
module~rdb_continuity->module~rdb_ocean_metrics
module~rdb_ocean_mle
rdb_ocean_mle
module~rdb_continuity->module~rdb_ocean_mle
module~rdb_scratch_3d
rdb_scratch_3d
module~rdb_continuity->module~rdb_scratch_3d
module~rdb_tracer
rdb_tracer
module~rdb_continuity->module~rdb_tracer
module~rdb_ocean_fold_apply
rdb_ocean_fold_apply
module~rdb_continuity->module~rdb_ocean_fold_apply
module~rdb_ocean_periodic
rdb_ocean_periodic
module~rdb_continuity->module~rdb_ocean_periodic
module~rdb_ocean_halo
rdb_ocean_halo
module~rdb_continuity->module~rdb_ocean_halo
module~rdb_coriolis_adv
rdb_coriolis_adv
module~rdb_coriolis_adv->module~rdb_mem_report
module~rdb_coriolis_adv->module~rdb_barotropic_state
module~rdb_coriolis_adv->module~rdb_multilayer_state
module~rdb_coriolis_adv->module~rdb_ocean_metrics
module~rdb_coriolis_adv->module~rdb_scratch_3d
module~rdb_driver
rdb_driver
module~rdb_driver->module~rdb_mem_report
module~rdb_ocean_dyn
rdb_ocean_dyn
module~rdb_driver->module~rdb_ocean_dyn
module~rdb_ocean_console_stats
rdb_ocean_console_stats
module~rdb_driver->module~rdb_ocean_console_stats
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_config
rdb_config
module~rdb_driver->module~rdb_config
module~rdb_ice_state
rdb_ice_state
module~rdb_ice_state->module~rdb_mem_report
module~rdb_multilayer_state->module~rdb_mem_report
module~rdb_multilayer_state->module~rdb_tracer
module~rdb_ocean_bottom_drag
rdb_ocean_bottom_drag
module~rdb_ocean_bottom_drag->module~rdb_mem_report
module~rdb_ocean_bottom_drag->module~rdb_multilayer_state
module~rdb_ocean_bottom_drag->module~rdb_ocean_metrics
module~rdb_ocean_bottom_drag->module~rdb_scratch_3d
module~rdb_ocean_boundary_types->module~rdb_mem_report
module~rdb_ocean_bt_wide
rdb_ocean_bt_wide
module~rdb_ocean_bt_wide->module~rdb_mem_report
module~rdb_ocean_bt_wide->module~rdb_barotropic_workstate
module~rdb_ocean_bt_wide->module~rdb_ocean_boundary_types
module~rdb_ocean_bt_wide->module~rdb_ocean_metrics
module~rdb_barotropic_substep
rdb_barotropic_substep
module~rdb_ocean_bt_wide->module~rdb_barotropic_substep
module~rdb_ocean_bt_wide->module~rdb_ocean_halo
module~rdb_ocean_budgets
rdb_ocean_budgets
module~rdb_ocean_budgets->module~rdb_mem_report
module~rdb_ocean_budgets->module~rdb_multilayer_state
module~rdb_ocean_diag_mask
rdb_ocean_diag_mask
module~rdb_ocean_budgets->module~rdb_ocean_diag_mask
module~rdb_ocean_cavity_flux
rdb_ocean_cavity_flux
module~rdb_ocean_cavity_flux->module~rdb_mem_report
module~rdb_ocean_cavity_flux->module~rdb_multilayer_state
module~rdb_ocean_cavity_flux->module~rdb_ocean_metrics
module~rdb_ocean_surface_flux
rdb_ocean_surface_flux
module~rdb_ocean_cavity_flux->module~rdb_ocean_surface_flux
module~rdb_ocean_data_input
rdb_ocean_data_input
module~rdb_ocean_data_input->module~rdb_mem_report
module~rdb_ocean_data_input->module~rdb_config
module~rdb_ocean_diag
rdb_ocean_diag
module~rdb_ocean_diag->module~rdb_mem_report
module~rdb_ocean_diag->module~rdb_ocean_diag_mask
module~rdb_ocean_diag_mask->module~rdb_mem_report
module~rdb_ocean_dyn->module~rdb_mem_report
module~rdb_ocean_dyn->module~rdb_barotropic_state
module~rdb_ocean_dyn->module~rdb_barotropic_workstate
module~rdb_ocean_dyn->module~rdb_continuity
module~rdb_ocean_dyn->module~rdb_coriolis_adv
module~rdb_ocean_dyn->module~rdb_multilayer_state
module~rdb_ocean_dyn->module~rdb_ocean_bottom_drag
module~rdb_ocean_dyn->module~rdb_ocean_boundary_types
module~rdb_ocean_dyn->module~rdb_ocean_bt_wide
module~rdb_ocean_dyn->module~rdb_ocean_cavity_flux
module~rdb_ocean_epbl
rdb_ocean_epbl
module~rdb_ocean_dyn->module~rdb_ocean_epbl
module~rdb_ocean_dyn->module~rdb_ocean_gm
module~rdb_ocean_hdiff_tracer
rdb_ocean_hdiff_tracer
module~rdb_ocean_dyn->module~rdb_ocean_hdiff_tracer
module~rdb_ocean_horizontal_viscosity
rdb_ocean_horizontal_viscosity
module~rdb_ocean_dyn->module~rdb_ocean_horizontal_viscosity
module~rdb_ocean_isopycnal_slopes
rdb_ocean_isopycnal_slopes
module~rdb_ocean_dyn->module~rdb_ocean_isopycnal_slopes
module~rdb_ocean_kappa_shear
rdb_ocean_kappa_shear
module~rdb_ocean_dyn->module~rdb_ocean_kappa_shear
module~rdb_ocean_lateral_mix
rdb_ocean_lateral_mix
module~rdb_ocean_dyn->module~rdb_ocean_lateral_mix
module~rdb_ocean_meke
rdb_ocean_meke
module~rdb_ocean_dyn->module~rdb_ocean_meke
module~rdb_ocean_dyn->module~rdb_ocean_metrics
module~rdb_ocean_dyn->module~rdb_ocean_mle
module~rdb_ocean_p_surf
rdb_ocean_p_surf
module~rdb_ocean_dyn->module~rdb_ocean_p_surf
module~rdb_ocean_pressure_force
rdb_ocean_pressure_force
module~rdb_ocean_dyn->module~rdb_ocean_pressure_force
module~rdb_ocean_redi
rdb_ocean_redi
module~rdb_ocean_dyn->module~rdb_ocean_redi
module~rdb_ocean_sponge
rdb_ocean_sponge
module~rdb_ocean_dyn->module~rdb_ocean_sponge
module~rdb_ocean_dyn->module~rdb_ocean_surface_flux
module~rdb_ocean_surface_stress
rdb_ocean_surface_stress
module~rdb_ocean_dyn->module~rdb_ocean_surface_stress
module~rdb_ocean_tidal_mixing
rdb_ocean_tidal_mixing
module~rdb_ocean_dyn->module~rdb_ocean_tidal_mixing
module~rdb_ocean_tides
rdb_ocean_tides
module~rdb_ocean_dyn->module~rdb_ocean_tides
module~rdb_ocean_top_drag
rdb_ocean_top_drag
module~rdb_ocean_dyn->module~rdb_ocean_top_drag
module~rdb_ocean_varmix
rdb_ocean_varmix
module~rdb_ocean_dyn->module~rdb_ocean_varmix
module~rdb_ocean_vcoord
rdb_ocean_vcoord
module~rdb_ocean_dyn->module~rdb_ocean_vcoord
module~rdb_ocean_vdiff
rdb_ocean_vdiff
module~rdb_ocean_dyn->module~rdb_ocean_vdiff
module~rdb_ocean_vertical_advection
rdb_ocean_vertical_advection
module~rdb_ocean_dyn->module~rdb_ocean_vertical_advection
module~rdb_ocean_vmix
rdb_ocean_vmix
module~rdb_ocean_dyn->module~rdb_ocean_vmix
module~rdb_ocean_wave_speed
rdb_ocean_wave_speed
module~rdb_ocean_dyn->module~rdb_ocean_wave_speed
module~rdb_barotropic_coupling
rdb_barotropic_coupling
module~rdb_ocean_dyn->module~rdb_barotropic_coupling
module~rdb_ocean_dyn->module~rdb_barotropic_substep
module~rdb_ocean_bt_budget_probe
rdb_ocean_bt_budget_probe
module~rdb_ocean_dyn->module~rdb_ocean_bt_budget_probe
module~rdb_ocean_chksum
rdb_ocean_chksum
module~rdb_ocean_dyn->module~rdb_ocean_chksum
module~rdb_ocean_dyn->module~rdb_ocean_console_stats
module~rdb_ocean_eos_compute
rdb_ocean_eos_compute
module~rdb_ocean_dyn->module~rdb_ocean_eos_compute
module~rdb_ocean_dyn->module~rdb_ocean_fold_apply
module~rdb_ocean_geothermal
rdb_ocean_geothermal
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_halo_state
rdb_ocean_halo_state
module~rdb_ocean_dyn->module~rdb_ocean_halo_state
module~rdb_ocean_ideal_age
rdb_ocean_ideal_age
module~rdb_ocean_dyn->module~rdb_ocean_ideal_age
module~rdb_ocean_ke_probe
rdb_ocean_ke_probe
module~rdb_ocean_dyn->module~rdb_ocean_ke_probe
module~rdb_ocean_min_thickness
rdb_ocean_min_thickness
module~rdb_ocean_dyn->module~rdb_ocean_min_thickness
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_remap
rdb_ocean_remap
module~rdb_ocean_dyn->module~rdb_ocean_remap
module~rdb_ocean_dyn->module~rdb_ocean_halo
module~rdb_ocean_epbl->module~rdb_mem_report
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_epbl->module~rdb_scratch_3d
module~rdb_ocean_gm->module~rdb_mem_report
module~rdb_ocean_gm->module~rdb_multilayer_state
module~rdb_ocean_gm->module~rdb_ocean_isopycnal_slopes
module~rdb_ocean_gm->module~rdb_ocean_metrics
module~rdb_ocean_hdiff_tracer->module~rdb_mem_report
module~rdb_ocean_hdiff_tracer->module~rdb_multilayer_state
module~rdb_ocean_hdiff_tracer->module~rdb_ocean_boundary_types
module~rdb_ocean_hdiff_tracer->module~rdb_ocean_metrics
module~rdb_ocean_hdiff_tracer->module~rdb_scratch_3d
module~rdb_ocean_hdiff_tracer->module~rdb_tracer
module~rdb_ocean_horizontal_viscosity->module~rdb_mem_report
module~rdb_ocean_horizontal_viscosity->module~rdb_multilayer_state
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_isopycnal_slopes->module~rdb_mem_report
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_mem_report
module~rdb_ocean_kappa_shear->module~rdb_multilayer_state
module~rdb_ocean_lateral_mix->module~rdb_mem_report
module~rdb_ocean_lateral_mix->module~rdb_multilayer_state
module~rdb_ocean_lateral_mix->module~rdb_ocean_metrics
module~rdb_ocean_lateral_mix->module~rdb_scratch_3d
module~rdb_ocean_meke->module~rdb_mem_report
module~rdb_ocean_meke->module~rdb_multilayer_state
module~rdb_ocean_meke->module~rdb_ocean_gm
module~rdb_ocean_meke->module~rdb_ocean_metrics
module~rdb_ocean_meke->module~rdb_ocean_varmix
module~rdb_ocean_meke->module~rdb_ocean_wave_speed
module~rdb_ocean_metrics->module~rdb_mem_report
module~rdb_ocean_mle->module~rdb_mem_report
module~rdb_ocean_mle->module~rdb_multilayer_state
module~rdb_ocean_mle->module~rdb_ocean_boundary_types
module~rdb_ocean_mle->module~rdb_ocean_epbl
module~rdb_ocean_mle->module~rdb_ocean_metrics
module~rdb_ocean_mle->module~rdb_ocean_surface_stress
module~rdb_ocean_obc
rdb_ocean_obc
module~rdb_ocean_obc->module~rdb_mem_report
module~rdb_ocean_p_surf->module~rdb_mem_report
module~rdb_ocean_pressure_force->module~rdb_mem_report
module~rdb_ocean_pressure_force->module~rdb_multilayer_state
module~rdb_ocean_pressure_force->module~rdb_ocean_metrics
module~rdb_ocean_pressure_force->module~rdb_scratch_3d
module~rdb_ocean_redi->module~rdb_mem_report
module~rdb_ocean_redi->module~rdb_multilayer_state
module~rdb_ocean_redi->module~rdb_ocean_boundary_types
module~rdb_ocean_redi->module~rdb_ocean_metrics
module~rdb_ocean_redi->module~rdb_tracer
module~rdb_ocean_sponge->module~rdb_mem_report
module~rdb_ocean_sponge->module~rdb_multilayer_state
module~rdb_ocean_sponge->module~rdb_ocean_boundary_types
module~rdb_ocean_surface_flux->module~rdb_mem_report
module~rdb_ocean_surface_flux->module~rdb_multilayer_state
module~rdb_ocean_surface_stress->module~rdb_mem_report
module~rdb_ocean_surface_stress->module~rdb_multilayer_state
module~rdb_ocean_surface_stress->module~rdb_scratch_3d
module~rdb_ocean_tidal_mixing->module~rdb_mem_report
module~rdb_ocean_tidal_mixing->module~rdb_multilayer_state
module~rdb_ocean_tides->module~rdb_mem_report
module~rdb_ocean_top_drag->module~rdb_mem_report
module~rdb_ocean_top_drag->module~rdb_multilayer_state
module~rdb_ocean_top_drag->module~rdb_scratch_3d
module~rdb_ocean_varmix->module~rdb_mem_report
module~rdb_ocean_varmix->module~rdb_multilayer_state
module~rdb_ocean_varmix->module~rdb_ocean_isopycnal_slopes
module~rdb_ocean_varmix->module~rdb_ocean_metrics
module~rdb_ocean_varmix->module~rdb_ocean_wave_speed
module~rdb_ocean_vcoord->module~rdb_mem_report
module~rdb_ocean_vdiff->module~rdb_mem_report
module~rdb_ocean_vdiff->module~rdb_multilayer_state
module~rdb_ocean_vdiff->module~rdb_scratch_3d
module~rdb_ocean_vdiff->module~rdb_tracer
module~rdb_ocean_vertical_advection->module~rdb_mem_report
module~rdb_ocean_vertical_advection->module~rdb_multilayer_state
module~rdb_ocean_vertical_advection->module~rdb_scratch_3d
module~rdb_ocean_vertical_advection->module~rdb_tracer
module~rdb_ocean_vmix->module~rdb_mem_report
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_mem_report
module~rdb_ocean_wave_speed->module~rdb_multilayer_state
module~rdb_ocean_wave_speed->module~rdb_ocean_metrics
module~rdb_scratch_3d->module~rdb_mem_report
module~rdb_tracer->module~rdb_mem_report
module~rdb_barotropic_coupling->module~rdb_barotropic_workstate
module~rdb_barotropic_coupling->module~rdb_coriolis_adv
module~rdb_barotropic_coupling->module~rdb_multilayer_state
module~rdb_barotropic_coupling->module~rdb_ocean_bottom_drag
module~rdb_barotropic_coupling->module~rdb_ocean_boundary_types
module~rdb_barotropic_coupling->module~rdb_ocean_horizontal_viscosity
module~rdb_barotropic_coupling->module~rdb_ocean_metrics
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->module~rdb_barotropic_workstate
module~rdb_barotropic_substep->module~rdb_ocean_boundary_types
module~rdb_barotropic_substep->module~rdb_ocean_metrics
module~rdb_bt_cont_type
rdb_bt_cont_type
module~rdb_barotropic_substep->module~rdb_bt_cont_type
module~rdb_barotropic_substep->module~rdb_ocean_halo
module~rdb_bt_cont_type->module~rdb_barotropic_workstate
module~rdb_ice_atm_forcing
rdb_ice_atm_forcing
module~rdb_ice_atm_forcing->module~rdb_ice_state
module~rdb_ice_basal_flux
rdb_ice_basal_flux
module~rdb_ice_basal_flux->module~rdb_ice_state
module~rdb_ice_basal_flux->module~rdb_multilayer_state
module~rdb_ice_basal_flux->module~rdb_ocean_surface_flux
module~rdb_ice_evp
rdb_ice_evp
module~rdb_ice_evp->module~rdb_ice_state
module~rdb_ice_evp->module~rdb_multilayer_state
module~rdb_ice_evp->module~rdb_ocean_boundary_types
module~rdb_ice_evp->module~rdb_ocean_metrics
module~rdb_ice_evp->module~rdb_ocean_periodic
module~rdb_ice_evp->module~rdb_ocean_halo
module~rdb_ice_frazil
rdb_ice_frazil
module~rdb_ice_frazil->module~rdb_multilayer_state
module~rdb_ice_frazil->module~rdb_ocean_surface_flux
module~rdb_ice_frazil_uptake
rdb_ice_frazil_uptake
module~rdb_ice_frazil_uptake->module~rdb_ice_state
module~rdb_ice_frazil_uptake->module~rdb_multilayer_state
module~rdb_ice_init
rdb_ice_init
module~rdb_ice_init->module~rdb_ice_state
module~rdb_ice_init->module~rdb_multilayer_state
module~rdb_ice_init->module~rdb_ocean_metrics
module~rdb_ice_itd
rdb_ice_itd
module~rdb_ice_itd->module~rdb_ice_state
module~rdb_ice_itd->module~rdb_multilayer_state
module~rdb_ice_ocean_coupler
rdb_ice_ocean_coupler
module~rdb_ice_ocean_coupler->module~rdb_ice_state
module~rdb_ice_ocean_coupler->module~rdb_ocean_boundary_types
module~rdb_ice_ocean_coupler->module~rdb_ocean_metrics
module~rdb_ice_ocean_coupler->module~rdb_ocean_surface_flux
module~rdb_ice_ocean_coupler->module~rdb_ocean_surface_stress
module~rdb_ice_ocean_coupler->module~rdb_ocean_halo_state
module~rdb_ice_snow
rdb_ice_snow
module~rdb_ice_snow->module~rdb_ice_state
module~rdb_ice_thermo_driver
rdb_ice_thermo_driver
module~rdb_ice_thermo_driver->module~rdb_ice_state
module~rdb_ice_thermo_driver->module~rdb_multilayer_state
module~rdb_ice_transport
rdb_ice_transport
module~rdb_ice_transport->module~rdb_continuity
module~rdb_ice_transport->module~rdb_ice_state
module~rdb_ice_transport->module~rdb_multilayer_state
module~rdb_ice_transport->module~rdb_ocean_boundary_types
module~rdb_ice_transport->module~rdb_ocean_metrics
module~rdb_ice_transport->module~rdb_ice_itd
module~rdb_ice_transport->module~rdb_ocean_halo_state
module~rdb_ice_transport->module~rdb_ocean_halo
module~rdb_ocean_api
rdb_ocean_api
module~rdb_ocean_api->module~rdb_ocean_dyn
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_api->module~rdb_ocean_engine
module~rdb_ocean_api->module~rdb_ocean_eos_compute
module~rdb_ocean_api->module~rdb_ocean_fold_apply
module~rdb_ocean_halo_width
rdb_ocean_halo_width
module~rdb_ocean_api->module~rdb_ocean_halo_width
module~rdb_ocean_api->module~rdb_ocean_periodic
module~rdb_ocean_api->module~rdb_config
module~rdb_handle
rdb_handle
module~rdb_ocean_api->module~rdb_handle
module~rdb_ocean_boundary_data
rdb_ocean_boundary_data
module~rdb_ocean_boundary_data->module~rdb_ocean_boundary_types
module~rdb_ocean_bt_budget_probe->module~rdb_barotropic_workstate
module~rdb_ocean_bt_budget_probe->module~rdb_coriolis_adv
module~rdb_ocean_bt_budget_probe->module~rdb_multilayer_state
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_chksum->module~rdb_barotropic_workstate
module~rdb_ocean_chksum->module~rdb_multilayer_state
module~rdb_ocean_console_stats->module~rdb_multilayer_state
module~rdb_ocean_console_stats->module~rdb_ocean_metrics
module~rdb_ocean_data_forcing
rdb_ocean_data_forcing
module~rdb_ocean_data_forcing->module~rdb_ocean_boundary_types
module~rdb_ocean_data_forcing->module~rdb_ocean_data_input
module~rdb_ocean_data_forcing->module~rdb_ocean_surface_flux
module~rdb_ocean_data_forcing->module~rdb_ocean_surface_stress
module~rdb_ocean_data_forcing->module~rdb_ocean_halo_state
module~rdb_ocean_data_forcing->module~rdb_config
module~rdb_ocean_diag_derived->module~rdb_ocean_diag
module~rdb_ocean_diag_derived->module~rdb_ocean_diag_fills
module~rdb_ocean_diag_derived->module~rdb_ocean_state
module~rdb_ocean_diag_fills->module~rdb_ocean_diag
module~rdb_ocean_diag_fills->module~rdb_ocean_vcoord
module~rdb_ocean_pseudo_salt
rdb_ocean_pseudo_salt
module~rdb_ocean_diag_fills->module~rdb_ocean_pseudo_salt
module~rdb_ocean_diag_fills->module~rdb_ocean_state
module~rdb_ocean_diag_netcdf
rdb_ocean_diag_netcdf
module~rdb_ocean_diag_netcdf->module~rdb_ocean_diag
module~rdb_ocean_engine->module~rdb_ocean_boundary_types
module~rdb_ocean_engine->module~rdb_ocean_cavity_flux
module~rdb_ocean_engine->module~rdb_ocean_data_input
module~rdb_ocean_engine->module~rdb_ocean_diag
module~rdb_ocean_engine->module~rdb_ocean_dyn
module~rdb_ocean_engine->module~rdb_ocean_metrics
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_ocean_engine->module~rdb_ocean_vcoord
module~rdb_ocean_engine->module~rdb_ice_atm_forcing
module~rdb_ocean_engine->module~rdb_ice_basal_flux
module~rdb_ocean_engine->module~rdb_ice_evp
module~rdb_ocean_engine->module~rdb_ice_frazil
module~rdb_ocean_engine->module~rdb_ice_frazil_uptake
module~rdb_ocean_engine->module~rdb_ice_init
module~rdb_ocean_engine->module~rdb_ice_itd
module~rdb_ocean_engine->module~rdb_ice_ocean_coupler
module~rdb_ocean_engine->module~rdb_ice_snow
module~rdb_ocean_engine->module~rdb_ice_thermo_driver
module~rdb_ocean_engine->module~rdb_ice_transport
module~rdb_ocean_engine->module~rdb_ocean_boundary_data
module~rdb_ocean_engine->module~rdb_ocean_data_forcing
module~rdb_ocean_engine->module~rdb_ocean_diag_derived
module~rdb_ocean_engine->module~rdb_ocean_diag_fills
module~rdb_ocean_engine->module~rdb_ocean_diag_netcdf
module~rdb_ocean_engine->module~rdb_ocean_fold_apply
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_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_state
rdb_state
module~rdb_ocean_engine->module~rdb_state
module~rdb_ocean_engine->module~rdb_config
module~rdb_ocean_engine->module~rdb_ocean_halo
module~rdb_decomp
rdb_decomp
module~rdb_ocean_engine->module~rdb_decomp
module~rdb_ocean_eos_compute->module~rdb_multilayer_state
module~rdb_ocean_fold_apply->module~rdb_multilayer_state
module~rdb_ocean_fold_apply->module~rdb_ocean_boundary_types
module~rdb_ocean_geothermal->module~rdb_multilayer_state
module~rdb_ocean_geothermal->module~rdb_ocean_surface_flux
module~rdb_ocean_ghost_poison->module~rdb_barotropic_workstate
module~rdb_ocean_ghost_poison->module~rdb_multilayer_state
module~rdb_ocean_ghost_poison->module~rdb_ocean_surface_stress
module~rdb_ocean_halo_state->module~rdb_ice_state
module~rdb_ocean_halo_state->module~rdb_multilayer_state
module~rdb_ocean_halo_state->module~rdb_ocean_boundary_types
module~rdb_ocean_halo_state->module~rdb_ocean_surface_stress
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_halo
module~rdb_ocean_halo_width->module~rdb_coriolis_adv
module~rdb_ocean_ideal_age->module~rdb_multilayer_state
module~rdb_ocean_ke_probe->module~rdb_coriolis_adv
module~rdb_ocean_ke_probe->module~rdb_multilayer_state
module~rdb_ocean_ke_probe->module~rdb_ocean_metrics
module~rdb_ocean_min_thickness->module~rdb_multilayer_state
module~rdb_ocean_obc_baroclinic->module~rdb_barotropic_workstate
module~rdb_ocean_obc_baroclinic->module~rdb_multilayer_state
module~rdb_ocean_obc_baroclinic->module~rdb_ocean_boundary_types
module~rdb_ocean_periodic->module~rdb_multilayer_state
module~rdb_ocean_periodic->module~rdb_ocean_boundary_types
module~rdb_ocean_pseudo_salt->module~rdb_multilayer_state
module~rdb_ocean_remap->module~rdb_multilayer_state
module~rdb_ocean_remap->module~rdb_ocean_vcoord
module~rdb_ocean_remap->module~rdb_tracer
module~rdb_ocean_setup->module~rdb_coriolis_adv
module~rdb_ocean_setup->module~rdb_ocean_bottom_drag
module~rdb_ocean_setup->module~rdb_ocean_boundary_types
module~rdb_ocean_setup->module~rdb_ocean_dyn
module~rdb_ocean_setup->module~rdb_ocean_epbl
module~rdb_ocean_setup->module~rdb_ocean_horizontal_viscosity
module~rdb_ocean_setup->module~rdb_ocean_lateral_mix
module~rdb_ocean_setup->module~rdb_ocean_metrics
module~rdb_ocean_setup->module~rdb_ocean_p_surf
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_setup->module~rdb_ocean_tides
module~rdb_ocean_setup->module~rdb_ocean_top_drag
module~rdb_ocean_setup->module~rdb_ocean_vcoord
module~rdb_ocean_setup->module~rdb_ocean_vdiff
module~rdb_ocean_setup->module~rdb_ocean_vmix
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_setup->module~rdb_ocean_state
module~rdb_ocean_setup->module~rdb_config
module~rdb_ocean_setup->module~rdb_ocean_halo
module~rdb_ocean_setup->module~rdb_decomp
module~rdb_ocean_stability_audit->module~rdb_ocean_metrics
module~rdb_ocean_stability_audit->module~rdb_config
module~rdb_ocean_state->module~rdb_barotropic_state
module~rdb_ocean_state->module~rdb_continuity
module~rdb_ocean_state->module~rdb_coriolis_adv
module~rdb_ocean_state->module~rdb_ice_state
module~rdb_ocean_state->module~rdb_multilayer_state
module~rdb_ocean_state->module~rdb_ocean_bottom_drag
module~rdb_ocean_state->module~rdb_ocean_boundary_types
module~rdb_ocean_state->module~rdb_ocean_cavity_flux
module~rdb_ocean_state->module~rdb_ocean_data_input
module~rdb_ocean_state->module~rdb_ocean_diag
module~rdb_ocean_state->module~rdb_ocean_dyn
module~rdb_ocean_state->module~rdb_ocean_epbl
module~rdb_ocean_state->module~rdb_ocean_gm
module~rdb_ocean_state->module~rdb_ocean_hdiff_tracer
module~rdb_ocean_state->module~rdb_ocean_horizontal_viscosity
module~rdb_ocean_state->module~rdb_ocean_isopycnal_slopes
module~rdb_ocean_state->module~rdb_ocean_kappa_shear
module~rdb_ocean_state->module~rdb_ocean_lateral_mix
module~rdb_ocean_state->module~rdb_ocean_meke
module~rdb_ocean_state->module~rdb_ocean_metrics
module~rdb_ocean_state->module~rdb_ocean_mle
module~rdb_ocean_state->module~rdb_ocean_obc
module~rdb_ocean_state->module~rdb_ocean_p_surf
module~rdb_ocean_state->module~rdb_ocean_pressure_force
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_state->module~rdb_ocean_tidal_mixing
module~rdb_ocean_state->module~rdb_ocean_tides
module~rdb_ocean_state->module~rdb_ocean_top_drag
module~rdb_ocean_state->module~rdb_ocean_varmix
module~rdb_ocean_state->module~rdb_ocean_vcoord
module~rdb_ocean_state->module~rdb_ocean_vdiff
module~rdb_ocean_state->module~rdb_ocean_vertical_advection
module~rdb_ocean_state->module~rdb_ocean_vmix
module~rdb_ocean_state->module~rdb_ocean_wave_speed
module~rdb_ocean_state->module~rdb_ocean_data_forcing
module~rdb_ocean_state->module~rdb_ocean_periodic
module~rdb_ocean_state->module~rdb_ocean_pseudo_salt
module~rdb_ocean_z_init
rdb_ocean_z_init
module~rdb_ocean_state->module~rdb_ocean_z_init
module~rdb_ocean_state->module~rdb_config
module~rdb_ocean_state->module~rdb_decomp
module~rdb_ocean_z_init->module~rdb_multilayer_state
module~rdb_ocean_z_init->module~rdb_config
module~rdb_state->module~rdb_tracer
module~rdb_state->module~rdb_config
proc~validate_config
validate_config
proc~validate_config->module~rdb_coriolis_adv
proc~validate_config->module~rdb_ocean_bottom_drag
proc~validate_config->module~rdb_ocean_boundary_types
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
proc~validate_config->module~rdb_ocean_pseudo_salt
module~rdb_config->module~rdb_ice_init
module~rdb_handle->module~rdb_ocean_engine
module~rdb_handle->module~rdb_ocean_state
module~rdb_handle->module~rdb_config
module~rdb_ocean_halo->module~rdb_ocean_periodic
module~rdb_ocean_halo->module~rdb_decomp
module~rdb_config_schema
rdb_config_schema
module~rdb_config_schema->module~rdb_config
module~rdb_decomp->module~rdb_config
module~rdb_halo
rdb_halo
module~rdb_halo->module~rdb_decomp
module~rdb_ocean_fold_exchange
rdb_ocean_fold_exchange
module~rdb_ocean_fold_exchange->module~rdb_decomp
module~rdb_ocean_restart_io
rdb_ocean_restart_io
module~rdb_ocean_restart_io->module~rdb_decomp
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(kind=int64),
private,
parameter
::
BYTES_PER_GIB
=
1024_int64*1024_int64*1024_int64
integer(kind=int64),
private,
parameter
::
BYTES_PER_KIB
=
1024_int64
integer(kind=int64),
private,
parameter
::
BYTES_PER_MIB
=
1024_int64*1024_int64
integer(kind=int64),
private,
parameter
::
COUNT_RECONCILE_FLOOR
=
64_int64*1024_int64*1024_int64
Absolute slack (64 MiB) added to the reconciliation tolerance so
tiny configs — where pool rounding dwarfs the relative margin —
never trip the drift warning.
real(kind=wp),
private,
parameter
::
COUNT_RECONCILE_FRAC
=
0.25_wp
The measured enter_data mapping may exceed the COUNTED state
footprint by this fraction (NVHPC pool granularity + any
device-only scratch mapped alongside the state) before the
reconciliation warns. Overshoot past it means the device mapped
significantly more than every bytes() term accounts for — a
state array is almost certainly missing from the count.
real(kind=wp),
private,
parameter
::
GROWTH_WARN_FRAC
=
0.15_wp
Device-memory growth above this fraction of the STEADY
post-setup baseline (first post-setup sample — after the
one-off first-launch reservation and lazy workspaces) triggers
a one-shot logger warning — progressive growth (a leak)
becomes self-announcing instead of silently skewing the
setup-time report.
integer(kind=int64),
private
::
counted_state_bytes
=
-1_int64
Counted state-array footprint latched by mem_log_computed_budget
(summed from every bytes() term BEFORE enter_data); reconciled
against the measured mapping in mem_log_device_actuals. -1 =
not counted this run.
integer(kind=int64),
private
::
free_before_map
=
-1_int64
Free device bytes just before enter_data (latched by
mem_log_state_budget); baseline for the measured mapping delta.
logical,
private
::
growth_warned
=
.false.
One-shot latch so the growth warning doesn’t spam every status
fire once the threshold is crossed.
integer(kind=int64),
private
::
used_after_map
=
-1_int64
Device bytes in use just after enter_data (latched by
mem_log_device_actuals); baseline for the “grew ~X after
setup” attribution line.
integer(kind=int64),
private
::
used_steady
=
-1_int64
Device bytes in use at the FIRST post-setup growth sample
(first status fire or end of run) — after the one-off
first-launch runtime reservation and the lazy kernel
workspaces have landed. Baseline for the leak WARNING:
growth past this is progressive, not the expected one-offs.
Interfaces
Byte footprint of an allocatable array (0 when unallocated), so a
gated-off slot naturally contributes nothing to a counted total.
The COUNTED companion to the runtime’s MEASURED free-memory
delta: each *_state_t sums its own arrays through this, the
driver reports the total before enter_data (works on CPU
builds too, where there is no device query), and
mem_log_device_actuals reconciles the count against the
measured mapping — a state array added without a matching
bytes() term makes the measured map exceed the count and
self-announces the drift (the anti-rot guard for the otherwise
rot-prone per-slot count).
private pure function arr_bytes_r1 (a) result(b)
Arguments
Type
Intent Optional Attributes
Name
real(kind=wp),
intent(in),
allocatable
::
a (:)
Return Value
integer(kind=int64)
private pure function arr_bytes_r2 (a) result(b)
Arguments
Type
Intent Optional Attributes
Name
real(kind=wp),
intent(in),
allocatable
::
a (:,:)
Return Value
integer(kind=int64)
private pure function arr_bytes_r3 (a) result(b)
Arguments
Type
Intent Optional Attributes
Name
real(kind=wp),
intent(in),
allocatable
::
a (:,:,:)
Return Value
integer(kind=int64)
private pure function arr_bytes_r4 (a) result(b)
Arguments
Type
Intent Optional Attributes
Name
real(kind=wp),
intent(in),
allocatable
::
a (:,:,:,:)
Return Value
integer(kind=int64)
private pure function arr_bytes_i1 (a) result(b)
Arguments
Type
Intent Optional Attributes
Name
integer,
intent(in),
allocatable
::
a (:)
Return Value
integer(kind=int64)
private pure function arr_bytes_i2 (a) result(b)
Arguments
Type
Intent Optional Attributes
Name
integer,
intent(in),
allocatable
::
a (:,:)
Return Value
integer(kind=int64)
private pure function arr_bytes_i3 (a) result(b)
Arguments
Type
Intent Optional Attributes
Name
integer,
intent(in),
allocatable
::
a (:,:,:)
Return Value
integer(kind=int64)
private pure function arr_bytes_l1 (a) result(b)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in),
allocatable
::
a (:)
Return Value
integer(kind=int64)
private pure function arr_bytes_l2 (a) result(b)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in),
allocatable
::
a (:,:)
Return Value
integer(kind=int64)
private pure function arr_bytes_l3 (a) result(b)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in),
allocatable
::
a (:,:,:)
Return Value
integer(kind=int64)
Functions
Free memory on the bound device, in bytes. Returns -1 when no
OpenACC runtime is present.
Arguments
None
Return Value
integer(kind=int64)
Total memory of the device that the OpenACC runtime is bound to,
in bytes. Returns -1 when no OpenACC runtime is present
(CPU / gfortran / ifx builds).
Arguments
None
Return Value
integer(kind=int64)
Device memory currently in use, in bytes (total - free).
DEVICE-WIDE: includes this process’s CUDA context (~300-500 MB)
and every other process on a shared device — see the module
header’s structural offsets. Returns -1 when no OpenACC
runtime is present.
Arguments
None
Return Value
integer(kind=int64)
Human-readable byte count: two decimals, GB at/above 1 GiB,
MB below. Used for every figure in the budget log so the
units stay consistent.
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
bytes
Return Value
character(len=:), allocatable
Resident set size of the current process, in bytes, parsed from
VmRSS in /proc/self/status (reported in kB → scaled to
bytes). Returns -1 if the file is unreadable or the field is
absent (non-Linux platforms). Never aborts.
Arguments
None
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer,
intent(in),
allocatable
::
a (:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer,
intent(in),
allocatable
::
a (:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
integer,
intent(in),
allocatable
::
a (:,:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in),
allocatable
::
a (:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in),
allocatable
::
a (:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
logical,
intent(in),
allocatable
::
a (:,:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
real(kind=wp),
intent(in),
allocatable
::
a (:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
real(kind=wp),
intent(in),
allocatable
::
a (:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
real(kind=wp),
intent(in),
allocatable
::
a (:,:,:)
Return Value
integer(kind=int64)
Arguments
Type
Intent Optional Attributes
Name
real(kind=wp),
intent(in),
allocatable
::
a (:,:,:,:)
Return Value
integer(kind=int64)
Active OpenACC device number, or -1 on CPU builds. Kept
private — only the budget logger needs it.
Arguments
None
Return Value
integer
Format a real to exactly two decimal places without leading
blanks (write with an f edit descriptor, then adjustl +
trim).
Arguments
Type
Intent Optional Attributes
Name
real(kind=wp),
intent(in)
::
x
Return Value
character(len=:), allocatable
Subroutines
Log the COUNTED state-array footprint. Unlike the RSS figure
(host-only I/O buffers + library pages) and the device query
(needs an OpenACC runtime), this is an exact sum of the state’s
allocatable arrays — available on every toolchain, so a CPU build
gets a real footprint line too. Latching for the reconciliation
is mem_set_counted_budget (separate, so the print can move to
the banner while the latch stays before enter_data).
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
label
integer(kind=int64),
intent(in)
::
total_bytes
Log one indented breakdown line for a component of the counted
footprint (barotropic / layers / closures / …). Skipped when the
component is empty so gated-off slots don’t clutter the report.
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
label
integer(kind=int64),
intent(in)
::
bytes
Log actual device memory after enter_data: the device-wide
usage (used = total - free — includes the CUDA context and
any other process on a shared device) plus the MEASURED state
mapping delta (free-before-mapping minus free-now; accurate to
NVHPC pool granularity, ~a few MB). Latches the post-mapping
usage as the baseline for mem_log_device_growth. Silent
no-op when device queries are unavailable (CPU build).
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
label
Report device-memory growth since the post-enter_data
baseline. Two allocations land AFTER the setup-time report and
would otherwise stay invisible: the lazy first-call kernel
workspaces (*_workspace_ensure, ~33% of the coastal device
footprint) and the one-off CUDA runtime/kernel reservation at
first launch (GBs — module-header offset 3). Call this in the
end-of-run summary (prints usage + the “grew ~X after setup”
attribution, so even a 10-step run shows the true footprint)
and at the periodic status with quiet=.true. (no info lines).
The one-shot leak WARNING measures PROGRESSIVE growth — past
GROWTH_WARN_FRAC of the steady baseline latched at the first
post-setup sample — so the expected one-offs never trip it.
Silent no-op on CPU builds or when the baseline was never
latched.
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
label
logical,
intent(in),
optional
::
quiet
Log the pre-mapping memory budget. Always logs the host-side
allocation growth (ADVISORY — includes host-only I/O buffers +
library pages, NOT a device estimate); when the device queries
succeed it also logs the device number + free/total and latches
the free-memory snapshot that mem_log_device_actuals turns
into the measured mapping delta. Warns when the host growth
(a conservative upper bound on what enter_data can map)
exceeds 95% of free device memory — the regime where
enter_data is likely to abort.
Arguments
Type
Intent Optional Attributes
Name
character(len=*),
intent(in)
::
label
integer(kind=int64),
intent(in)
::
host_growth_bytes
Latch the COUNTED state-array footprint for the enter_data
reconciliation, WITHOUT logging. Must run before
mem_log_device_actuals (the reconciliation reads this), even
when the human-readable budget is printed later (e.g. folded into
the driver’s post-setup banner). total_bytes is the sum of
every state bytes() term (0 for gated-off slots).
Arguments
Type
Intent Optional Attributes
Name
integer(kind=int64),
intent(in)
::
total_bytes