rdb_ocean_state Module

Composes every type the ocean dynamical core needs into a single object the driver builds and passes around for sim_type='ocean' runs. Each component owns its allocations + bound init/destroy. GPU mapping is dispatched via the free ocean_state_enter_data / ocean_state_exit_data orchestrator below — adding a slot requires wiring it into both.


Uses

  • module~~rdb_ocean_state~~UsesGraph module~rdb_ocean_state rdb_ocean_state iso_fortran_env iso_fortran_env module~rdb_ocean_state->iso_fortran_env module~rdb_barotropic_state rdb_barotropic_state module~rdb_ocean_state->module~rdb_barotropic_state module~rdb_bathymetry rdb_bathymetry module~rdb_ocean_state->module~rdb_bathymetry module~rdb_comm_env rdb_comm_env module~rdb_ocean_state->module~rdb_comm_env module~rdb_config rdb_config module~rdb_ocean_state->module~rdb_config module~rdb_constants rdb_constants module~rdb_ocean_state->module~rdb_constants module~rdb_continuity rdb_continuity module~rdb_ocean_state->module~rdb_continuity module~rdb_coriolis_adv rdb_coriolis_adv module~rdb_ocean_state->module~rdb_coriolis_adv module~rdb_decomp rdb_decomp module~rdb_ocean_state->module~rdb_decomp module~rdb_eos rdb_eos module~rdb_ocean_state->module~rdb_eos module~rdb_error_ring rdb_error_ring module~rdb_ocean_state->module~rdb_error_ring module~rdb_grid rdb_grid module~rdb_ocean_state->module~rdb_grid module~rdb_ice_state rdb_ice_state module~rdb_ocean_state->module~rdb_ice_state module~rdb_multilayer_state rdb_multilayer_state module~rdb_ocean_state->module~rdb_multilayer_state module~rdb_ocean_bathymetry_inject rdb_ocean_bathymetry_inject module~rdb_ocean_state->module~rdb_ocean_bathymetry_inject module~rdb_ocean_bottom_drag rdb_ocean_bottom_drag module~rdb_ocean_state->module~rdb_ocean_bottom_drag module~rdb_ocean_boundary_types rdb_ocean_boundary_types module~rdb_ocean_state->module~rdb_ocean_boundary_types module~rdb_ocean_cavity rdb_ocean_cavity module~rdb_ocean_state->module~rdb_ocean_cavity module~rdb_ocean_cavity_flux rdb_ocean_cavity_flux module~rdb_ocean_state->module~rdb_ocean_cavity_flux module~rdb_ocean_data_forcing rdb_ocean_data_forcing module~rdb_ocean_state->module~rdb_ocean_data_forcing module~rdb_ocean_data_input rdb_ocean_data_input module~rdb_ocean_state->module~rdb_ocean_data_input module~rdb_ocean_diag rdb_ocean_diag module~rdb_ocean_state->module~rdb_ocean_diag module~rdb_ocean_dyn rdb_ocean_dyn module~rdb_ocean_state->module~rdb_ocean_dyn module~rdb_ocean_epbl rdb_ocean_epbl module~rdb_ocean_state->module~rdb_ocean_epbl module~rdb_ocean_fold rdb_ocean_fold module~rdb_ocean_state->module~rdb_ocean_fold 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_horizontal_viscosity rdb_ocean_horizontal_viscosity 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_lateral_mix rdb_ocean_lateral_mix 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_metrics rdb_ocean_metrics module~rdb_ocean_state->module~rdb_ocean_metrics module~rdb_ocean_mle rdb_ocean_mle module~rdb_ocean_state->module~rdb_ocean_mle module~rdb_ocean_obc rdb_ocean_obc module~rdb_ocean_state->module~rdb_ocean_obc module~rdb_ocean_p_surf rdb_ocean_p_surf module~rdb_ocean_state->module~rdb_ocean_p_surf module~rdb_ocean_periodic rdb_ocean_periodic module~rdb_ocean_state->module~rdb_ocean_periodic module~rdb_ocean_pressure_force rdb_ocean_pressure_force module~rdb_ocean_state->module~rdb_ocean_pressure_force module~rdb_ocean_pseudo_salt rdb_ocean_pseudo_salt module~rdb_ocean_state->module~rdb_ocean_pseudo_salt module~rdb_ocean_redi rdb_ocean_redi module~rdb_ocean_state->module~rdb_ocean_redi module~rdb_ocean_restart rdb_ocean_restart module~rdb_ocean_state->module~rdb_ocean_restart module~rdb_ocean_restart_io rdb_ocean_restart_io module~rdb_ocean_state->module~rdb_ocean_restart_io module~rdb_ocean_sponge rdb_ocean_sponge module~rdb_ocean_state->module~rdb_ocean_sponge module~rdb_ocean_status rdb_ocean_status module~rdb_ocean_state->module~rdb_ocean_status module~rdb_ocean_surface_flux rdb_ocean_surface_flux module~rdb_ocean_state->module~rdb_ocean_surface_flux module~rdb_ocean_surface_stress rdb_ocean_surface_stress 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_tides rdb_ocean_tides module~rdb_ocean_state->module~rdb_ocean_tides module~rdb_ocean_top_drag rdb_ocean_top_drag 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_vcoord rdb_ocean_vcoord module~rdb_ocean_state->module~rdb_ocean_vcoord module~rdb_ocean_vdiff rdb_ocean_vdiff 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_vmix rdb_ocean_vmix 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 rdb_ocean_z_init module~rdb_ocean_state->module~rdb_ocean_z_init module~rdb_profiler rdb_profiler module~rdb_ocean_state->module~rdb_profiler pic_logger pic_logger module~rdb_ocean_state->pic_logger pic_strings pic_strings module~rdb_ocean_state->pic_strings module~rdb_barotropic_state->iso_fortran_env module~rdb_barotropic_state->module~rdb_constants module~rdb_barotropic_state->module~rdb_grid module~rdb_mem_report rdb_mem_report module~rdb_barotropic_state->module~rdb_mem_report module~rdb_bathymetry->module~rdb_constants module~rdb_bathymetry->module~rdb_grid module~rdb_bathymetry->module~rdb_ocean_status module~rdb_bathymetry->pic_logger module~rdb_bathymetry->pic_strings module~rdb_io_netcdf rdb_io_netcdf module~rdb_bathymetry->module~rdb_io_netcdf netcdf netcdf module~rdb_bathymetry->netcdf module~rdb_comm_env->iso_fortran_env module~rdb_comm_env->module~rdb_constants pic_mpi_lib pic_mpi_lib module~rdb_comm_env->pic_mpi_lib module~rdb_config->module~rdb_constants module~rdb_config->module~rdb_error_ring module~rdb_config->module~rdb_ocean_status module~rdb_config->pic_logger module~rdb_config->pic_strings module~rdb_ice_enthalpy rdb_ice_enthalpy module~rdb_config->module~rdb_ice_enthalpy module~rdb_ice_init rdb_ice_init module~rdb_config->module~rdb_ice_init module~rdb_nml_schema rdb_nml_schema module~rdb_config->module~rdb_nml_schema pic_ascii pic_ascii module~rdb_config->pic_ascii pic_types pic_types module~rdb_constants->pic_types module~rdb_continuity->iso_fortran_env module~rdb_continuity->module~rdb_barotropic_state module~rdb_continuity->module~rdb_constants module~rdb_continuity->module~rdb_grid module~rdb_continuity->module~rdb_multilayer_state module~rdb_continuity->module~rdb_ocean_boundary_types module~rdb_continuity->module~rdb_ocean_fold module~rdb_continuity->module~rdb_ocean_gm module~rdb_continuity->module~rdb_ocean_metrics module~rdb_continuity->module~rdb_ocean_mle module~rdb_continuity->module~rdb_ocean_periodic module~rdb_continuity->module~rdb_profiler module~rdb_continuity->module~rdb_mem_report module~rdb_ocean_fold_apply rdb_ocean_fold_apply module~rdb_continuity->module~rdb_ocean_fold_apply module~rdb_ocean_fold_exchange rdb_ocean_fold_exchange module~rdb_continuity->module~rdb_ocean_fold_exchange module~rdb_ocean_halo rdb_ocean_halo module~rdb_continuity->module~rdb_ocean_halo module~rdb_recon_weno rdb_recon_weno module~rdb_continuity->module~rdb_recon_weno 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_coriolis_adv->iso_fortran_env module~rdb_coriolis_adv->module~rdb_barotropic_state module~rdb_coriolis_adv->module~rdb_constants module~rdb_coriolis_adv->module~rdb_grid module~rdb_coriolis_adv->module~rdb_multilayer_state module~rdb_coriolis_adv->module~rdb_ocean_metrics module~rdb_coriolis_adv->module~rdb_mem_report module~rdb_ocean_porous rdb_ocean_porous module~rdb_coriolis_adv->module~rdb_ocean_porous module~rdb_coriolis_adv->module~rdb_scratch_3d module~rdb_decomp->module~rdb_config module~rdb_eos->module~rdb_constants module~rdb_eos->module~rdb_grid module~rdb_error_ring->pic_logger module~rdb_grid->module~rdb_constants module~rdb_ice_state->iso_fortran_env module~rdb_ice_state->module~rdb_constants module~rdb_ice_state->module~rdb_grid module~rdb_ice_column rdb_ice_column module~rdb_ice_state->module~rdb_ice_column module~rdb_ice_state->module~rdb_ice_enthalpy module~rdb_ice_state->module~rdb_mem_report module~rdb_multilayer_state->iso_fortran_env module~rdb_multilayer_state->module~rdb_constants module~rdb_multilayer_state->module~rdb_error_ring module~rdb_multilayer_state->module~rdb_grid module~rdb_multilayer_state->pic_logger module~rdb_efp rdb_efp module~rdb_multilayer_state->module~rdb_efp module~rdb_multilayer_state->module~rdb_mem_report module~rdb_multilayer_state->module~rdb_tracer module~rdb_ocean_bathymetry_inject->module~rdb_constants module~rdb_ocean_bathymetry_inject->module~rdb_error_ring module~rdb_ocean_bathymetry_inject->module~rdb_grid module~rdb_ocean_bathymetry_inject->module~rdb_ocean_status module~rdb_ocean_bathymetry_inject->pic_strings module~rdb_ocean_bottom_drag->iso_fortran_env module~rdb_ocean_bottom_drag->module~rdb_constants module~rdb_ocean_bottom_drag->module~rdb_grid module~rdb_ocean_bottom_drag->module~rdb_multilayer_state module~rdb_ocean_bottom_drag->module~rdb_ocean_metrics module~rdb_ocean_bottom_drag->module~rdb_mem_report module~rdb_ocean_bottom_drag->module~rdb_scratch_3d module~rdb_ocean_boundary_types->iso_fortran_env module~rdb_ocean_boundary_types->module~rdb_constants module~rdb_ocean_boundary_types->module~rdb_grid module~rdb_ocean_boundary_types->module~rdb_ocean_status module~rdb_ocean_boundary_types->pic_logger module~rdb_ocean_boundary_types->module~rdb_mem_report module~rdb_ocean_tide_astro rdb_ocean_tide_astro module~rdb_ocean_boundary_types->module~rdb_ocean_tide_astro module~rdb_ocean_boundary_types->pic_ascii module~rdb_ocean_cavity->module~rdb_constants module~rdb_ocean_cavity->module~rdb_grid module~rdb_ocean_cavity_flux->iso_fortran_env module~rdb_ocean_cavity_flux->module~rdb_constants module~rdb_ocean_cavity_flux->module~rdb_eos module~rdb_ocean_cavity_flux->module~rdb_grid 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_cavity_flux->module~rdb_mem_report module~rdb_ocean_cavity_melt rdb_ocean_cavity_melt module~rdb_ocean_cavity_flux->module~rdb_ocean_cavity_melt module~rdb_ocean_data_forcing->module~rdb_config module~rdb_ocean_data_forcing->module~rdb_constants module~rdb_ocean_data_forcing->module~rdb_error_ring module~rdb_ocean_data_forcing->module~rdb_grid 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_status 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->pic_logger module~rdb_ocean_data_forcing->pic_strings module~rdb_ocean_halo_state rdb_ocean_halo_state module~rdb_ocean_data_forcing->module~rdb_ocean_halo_state module~rdb_ocean_data_input->iso_fortran_env module~rdb_ocean_data_input->module~rdb_config module~rdb_ocean_data_input->module~rdb_constants module~rdb_ocean_data_input->module~rdb_error_ring module~rdb_ocean_data_input->module~rdb_grid module~rdb_ocean_data_input->module~rdb_ocean_status module~rdb_ocean_data_input->pic_logger module~rdb_ocean_data_input->pic_strings module~rdb_ocean_data_input->module~rdb_io_netcdf module~rdb_ocean_data_input->module~rdb_mem_report module~rdb_ocean_data_input->netcdf module~rdb_ocean_data_input->pic_ascii module~rdb_ocean_diag->iso_fortran_env module~rdb_ocean_diag->module~rdb_constants module~rdb_ocean_diag->module~rdb_error_ring module~rdb_ocean_diag->module~rdb_grid module~rdb_ocean_diag->module~rdb_ocean_status module~rdb_ocean_diag->pic_logger ieee_arithmetic ieee_arithmetic module~rdb_ocean_diag->ieee_arithmetic module~rdb_ocean_diag->module~rdb_mem_report module~rdb_ocean_diag_mask rdb_ocean_diag_mask module~rdb_ocean_diag->module~rdb_ocean_diag_mask module~rdb_ocean_dyn->iso_fortran_env module~rdb_ocean_dyn->module~rdb_barotropic_state module~rdb_ocean_dyn->module~rdb_constants module~rdb_ocean_dyn->module~rdb_continuity module~rdb_ocean_dyn->module~rdb_coriolis_adv module~rdb_ocean_dyn->module~rdb_eos module~rdb_ocean_dyn->module~rdb_grid 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_cavity_flux module~rdb_ocean_dyn->module~rdb_ocean_epbl module~rdb_ocean_dyn->module~rdb_ocean_gm module~rdb_ocean_dyn->module~rdb_ocean_hdiff_tracer module~rdb_ocean_dyn->module~rdb_ocean_horizontal_viscosity module~rdb_ocean_dyn->module~rdb_ocean_isopycnal_slopes module~rdb_ocean_dyn->module~rdb_ocean_kappa_shear module~rdb_ocean_dyn->module~rdb_ocean_lateral_mix 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_dyn->module~rdb_ocean_p_surf 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_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_tides module~rdb_ocean_dyn->module~rdb_ocean_top_drag module~rdb_ocean_dyn->module~rdb_ocean_varmix module~rdb_ocean_dyn->module~rdb_ocean_vcoord 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_dyn->module~rdb_profiler module~rdb_ocean_dyn->pic_logger module~rdb_ocean_dyn->pic_strings module~rdb_ocean_dyn->ieee_arithmetic module~rdb_barotropic_coupling rdb_barotropic_coupling module~rdb_ocean_dyn->module~rdb_barotropic_coupling module~rdb_barotropic_substep rdb_barotropic_substep module~rdb_ocean_dyn->module~rdb_barotropic_substep module~rdb_barotropic_workstate rdb_barotropic_workstate module~rdb_ocean_dyn->module~rdb_barotropic_workstate module~rdb_ocean_dyn->module~rdb_efp module~rdb_ocean_dyn->module~rdb_mem_report module~rdb_ocean_bt_budget_probe rdb_ocean_bt_budget_probe module~rdb_ocean_dyn->module~rdb_ocean_bt_budget_probe module~rdb_ocean_bt_wide rdb_ocean_bt_wide module~rdb_ocean_dyn->module~rdb_ocean_bt_wide module~rdb_ocean_chksum rdb_ocean_chksum module~rdb_ocean_dyn->module~rdb_ocean_chksum module~rdb_ocean_console_stats rdb_ocean_console_stats 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_dyn->module~rdb_ocean_halo 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_porous module~rdb_ocean_remap rdb_ocean_remap module~rdb_ocean_dyn->module~rdb_ocean_remap module~rdb_ocean_epbl->iso_fortran_env module~rdb_ocean_epbl->module~rdb_constants module~rdb_ocean_epbl->module~rdb_eos module~rdb_ocean_epbl->module~rdb_grid 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_mem_report module~rdb_ocean_epbl->module~rdb_scratch_3d module~rdb_ocean_fold->module~rdb_constants module~rdb_ocean_gm->iso_fortran_env module~rdb_ocean_gm->module~rdb_constants module~rdb_ocean_gm->module~rdb_grid 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_gm->ieee_arithmetic module~rdb_ocean_gm->module~rdb_mem_report module~rdb_ocean_hdiff_tracer->iso_fortran_env module~rdb_ocean_hdiff_tracer->module~rdb_constants module~rdb_ocean_hdiff_tracer->module~rdb_grid 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_mem_report module~rdb_ocean_hdiff_tracer->module~rdb_scratch_3d module~rdb_ocean_hdiff_tracer->module~rdb_tracer module~rdb_ocean_horizontal_viscosity->iso_fortran_env module~rdb_ocean_horizontal_viscosity->module~rdb_constants module~rdb_ocean_horizontal_viscosity->module~rdb_grid module~rdb_ocean_horizontal_viscosity->module~rdb_multilayer_state module~rdb_ocean_horizontal_viscosity->module~rdb_ocean_lateral_mix module~rdb_ocean_horizontal_viscosity->module~rdb_ocean_metrics module~rdb_ocean_horizontal_viscosity->module~rdb_mem_report module~rdb_ocean_horizontal_viscosity->module~rdb_scratch_3d module~rdb_ocean_isopycnal_slopes->iso_fortran_env module~rdb_ocean_isopycnal_slopes->module~rdb_constants module~rdb_ocean_isopycnal_slopes->module~rdb_eos module~rdb_ocean_isopycnal_slopes->module~rdb_grid module~rdb_ocean_isopycnal_slopes->module~rdb_multilayer_state module~rdb_ocean_isopycnal_slopes->module~rdb_ocean_metrics module~rdb_ocean_isopycnal_slopes->module~rdb_mem_report module~rdb_ocean_kappa_shear->iso_fortran_env module~rdb_ocean_kappa_shear->module~rdb_constants module~rdb_ocean_kappa_shear->module~rdb_eos module~rdb_ocean_kappa_shear->module~rdb_grid module~rdb_ocean_kappa_shear->module~rdb_multilayer_state module~rdb_ocean_kappa_shear->ieee_arithmetic module~rdb_massless rdb_massless module~rdb_ocean_kappa_shear->module~rdb_massless module~rdb_ocean_kappa_shear->module~rdb_mem_report module~rdb_ocean_lateral_mix->iso_fortran_env module~rdb_ocean_lateral_mix->module~rdb_constants module~rdb_ocean_lateral_mix->module~rdb_grid module~rdb_ocean_lateral_mix->module~rdb_multilayer_state module~rdb_ocean_lateral_mix->module~rdb_ocean_metrics module~rdb_ocean_lateral_mix->module~rdb_mem_report module~rdb_ocean_lateral_mix->module~rdb_scratch_3d module~rdb_ocean_meke->iso_fortran_env module~rdb_ocean_meke->module~rdb_constants module~rdb_ocean_meke->module~rdb_grid 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_meke->module~rdb_mem_report module~rdb_ocean_metrics->iso_fortran_env module~rdb_ocean_metrics->module~rdb_constants module~rdb_ocean_metrics->module~rdb_error_ring module~rdb_ocean_metrics->module~rdb_grid module~rdb_ocean_metrics->module~rdb_ocean_fold module~rdb_ocean_metrics->module~rdb_ocean_status module~rdb_ocean_metrics->pic_logger module~rdb_ocean_metrics->pic_strings module~rdb_ocean_metrics->module~rdb_io_netcdf module~rdb_ocean_metrics->module~rdb_mem_report module~rdb_ocean_bipolar rdb_ocean_bipolar module~rdb_ocean_metrics->module~rdb_ocean_bipolar module~rdb_ocean_metrics->netcdf module~rdb_ocean_mle->iso_fortran_env module~rdb_ocean_mle->module~rdb_constants module~rdb_ocean_mle->module~rdb_grid 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_mle->module~rdb_mem_report module~rdb_ocean_obc->iso_fortran_env module~rdb_ocean_obc->module~rdb_constants module~rdb_ocean_obc->module~rdb_grid module~rdb_ocean_obc->module~rdb_mem_report module~rdb_ocean_p_surf->iso_fortran_env module~rdb_ocean_p_surf->module~rdb_constants module~rdb_ocean_p_surf->module~rdb_grid module~rdb_ocean_p_surf->module~rdb_mem_report module~rdb_ocean_periodic->module~rdb_constants module~rdb_ocean_periodic->module~rdb_grid module~rdb_ocean_periodic->module~rdb_multilayer_state module~rdb_ocean_periodic->module~rdb_ocean_boundary_types module~rdb_ocean_pressure_force->iso_fortran_env module~rdb_ocean_pressure_force->module~rdb_constants module~rdb_ocean_pressure_force->module~rdb_eos module~rdb_ocean_pressure_force->module~rdb_grid 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_mem_report module~rdb_ocean_pgf_reconstruct rdb_ocean_pgf_reconstruct module~rdb_ocean_pressure_force->module~rdb_ocean_pgf_reconstruct module~rdb_ocean_pressure_force->module~rdb_scratch_3d module~rdb_ocean_pseudo_salt->module~rdb_constants module~rdb_ocean_pseudo_salt->module~rdb_error_ring module~rdb_ocean_pseudo_salt->module~rdb_grid module~rdb_ocean_pseudo_salt->module~rdb_multilayer_state module~rdb_ocean_pseudo_salt->pic_logger module~rdb_ocean_redi->iso_fortran_env module~rdb_ocean_redi->module~rdb_constants module~rdb_ocean_redi->module~rdb_eos module~rdb_ocean_redi->module~rdb_grid 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_mem_report module~rdb_ocean_redi->module~rdb_tracer module~rdb_ocean_restart->module~rdb_constants module~rdb_ocean_restart->pic_logger module~rdb_ocean_restart->pic_strings module~rdb_ocean_restart_io->module~rdb_constants module~rdb_ocean_restart_io->module~rdb_decomp module~rdb_ocean_restart_io->module~rdb_error_ring module~rdb_ocean_restart_io->module~rdb_ocean_restart module~rdb_ocean_restart_io->module~rdb_ocean_status module~rdb_ocean_restart_io->pic_logger module~rdb_ocean_restart_io->pic_strings iso_c_binding iso_c_binding module~rdb_ocean_restart_io->iso_c_binding module~rdb_ocean_restart_io->module~rdb_io_netcdf module~rdb_ocean_restart_io->netcdf module~rdb_ocean_sponge->iso_fortran_env module~rdb_ocean_sponge->module~rdb_constants module~rdb_ocean_sponge->module~rdb_grid module~rdb_ocean_sponge->module~rdb_multilayer_state module~rdb_ocean_sponge->module~rdb_ocean_boundary_types module~rdb_ocean_sponge->module~rdb_mem_report module~rdb_ocean_surface_flux->iso_fortran_env module~rdb_ocean_surface_flux->module~rdb_constants module~rdb_ocean_surface_flux->module~rdb_grid module~rdb_ocean_surface_flux->module~rdb_multilayer_state module~rdb_ocean_surface_flux->module~rdb_mem_report module~rdb_ocean_surface_stress->iso_fortran_env module~rdb_ocean_surface_stress->module~rdb_constants module~rdb_ocean_surface_stress->module~rdb_grid module~rdb_ocean_surface_stress->module~rdb_multilayer_state module~rdb_ocean_surface_stress->module~rdb_mem_report module~rdb_ocean_surface_stress->module~rdb_scratch_3d module~rdb_ocean_tidal_mixing->iso_fortran_env module~rdb_ocean_tidal_mixing->module~rdb_constants module~rdb_ocean_tidal_mixing->module~rdb_eos module~rdb_ocean_tidal_mixing->module~rdb_grid module~rdb_ocean_tidal_mixing->module~rdb_multilayer_state module~rdb_ocean_tidal_mixing->module~rdb_mem_report module~rdb_ocean_tides->iso_fortran_env module~rdb_ocean_tides->module~rdb_constants module~rdb_ocean_tides->module~rdb_grid module~rdb_ocean_tides->module~rdb_mem_report module~rdb_ocean_tides->module~rdb_ocean_tide_astro module~rdb_ocean_top_drag->iso_fortran_env module~rdb_ocean_top_drag->module~rdb_constants module~rdb_ocean_top_drag->module~rdb_grid module~rdb_ocean_top_drag->module~rdb_multilayer_state module~rdb_ocean_top_drag->module~rdb_mem_report module~rdb_ocean_top_drag->module~rdb_scratch_3d module~rdb_ocean_varmix->iso_fortran_env module~rdb_ocean_varmix->module~rdb_constants module~rdb_ocean_varmix->module~rdb_grid 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_varmix->module~rdb_mem_report module~rdb_ocean_vcoord->iso_fortran_env module~rdb_ocean_vcoord->module~rdb_constants module~rdb_ocean_vcoord->module~rdb_eos module~rdb_ocean_vcoord->module~rdb_grid module~rdb_ocean_vcoord->module~rdb_mem_report module~rdb_vcoord rdb_vcoord module~rdb_ocean_vcoord->module~rdb_vcoord module~rdb_ocean_vdiff->iso_fortran_env module~rdb_ocean_vdiff->module~rdb_constants module~rdb_ocean_vdiff->module~rdb_eos module~rdb_ocean_vdiff->module~rdb_grid module~rdb_ocean_vdiff->module~rdb_multilayer_state module~rdb_ocean_vdiff->pic_logger module~rdb_ocean_vdiff->module~rdb_mem_report module~rdb_ocean_vdiff->module~rdb_scratch_3d module~rdb_ocean_vdiff->module~rdb_tracer module~rdb_ocean_vertical_advection->iso_fortran_env module~rdb_ocean_vertical_advection->module~rdb_constants module~rdb_ocean_vertical_advection->module~rdb_grid module~rdb_ocean_vertical_advection->module~rdb_multilayer_state module~rdb_ocean_vertical_advection->module~rdb_mem_report module~rdb_ocean_vertical_advection->module~rdb_scratch_3d module~rdb_ocean_vertical_advection->module~rdb_tracer module~rdb_ocean_vmix->iso_fortran_env module~rdb_ocean_vmix->module~rdb_constants module~rdb_ocean_vmix->module~rdb_eos module~rdb_ocean_vmix->module~rdb_grid 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_vmix->module~rdb_mem_report module~rdb_ocean_wave_speed->iso_fortran_env module~rdb_ocean_wave_speed->module~rdb_constants module~rdb_ocean_wave_speed->module~rdb_grid module~rdb_ocean_wave_speed->module~rdb_multilayer_state module~rdb_ocean_wave_speed->module~rdb_ocean_metrics module~rdb_ocean_wave_speed->module~rdb_mem_report module~rdb_ocean_z_init->module~rdb_config module~rdb_ocean_z_init->module~rdb_constants module~rdb_ocean_z_init->module~rdb_error_ring module~rdb_ocean_z_init->module~rdb_grid module~rdb_ocean_z_init->module~rdb_multilayer_state module~rdb_ocean_z_init->module~rdb_ocean_status module~rdb_ocean_z_init->pic_logger module~rdb_ocean_z_init->pic_strings module~rdb_ocean_z_init->module~rdb_io_netcdf module~rdb_ocean_z_init->netcdf module~rdb_profiler->iso_fortran_env module~rdb_profiler->pic_logger module~rdb_barotropic_coupling->module~rdb_constants module~rdb_barotropic_coupling->module~rdb_coriolis_adv module~rdb_barotropic_coupling->module~rdb_grid 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_coupling->ieee_arithmetic module~rdb_barotropic_coupling->module~rdb_barotropic_workstate module~rdb_barotropic_substep->module~rdb_constants module~rdb_barotropic_substep->module~rdb_grid module~rdb_barotropic_substep->module~rdb_ocean_boundary_types module~rdb_barotropic_substep->module~rdb_ocean_metrics module~rdb_barotropic_substep->module~rdb_profiler module~rdb_barotropic_substep->module~rdb_barotropic_workstate module~rdb_barotropic_substep->module~rdb_ocean_fold_exchange module~rdb_barotropic_substep->module~rdb_ocean_halo module~rdb_bt_cont_type rdb_bt_cont_type module~rdb_barotropic_substep->module~rdb_bt_cont_type module~rdb_ocean_halo_counters rdb_ocean_halo_counters module~rdb_barotropic_substep->module~rdb_ocean_halo_counters module~rdb_barotropic_workstate->iso_fortran_env module~rdb_barotropic_workstate->module~rdb_constants module~rdb_barotropic_workstate->module~rdb_grid module~rdb_barotropic_workstate->module~rdb_mem_report module~rdb_efp->iso_fortran_env module~rdb_efp->ieee_arithmetic module~rdb_ice_column->module~rdb_constants module~rdb_ice_column->module~rdb_ice_enthalpy module~rdb_ice_mass rdb_ice_mass module~rdb_ice_column->module~rdb_ice_mass module~rdb_ice_optics rdb_ice_optics module~rdb_ice_column->module~rdb_ice_optics module~rdb_ice_enthalpy->module~rdb_constants module~rdb_ice_init->module~rdb_constants module~rdb_ice_init->module~rdb_grid 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_init->module~rdb_ice_column module~rdb_ice_init->module~rdb_ice_enthalpy module~rdb_io_netcdf->iso_fortran_env module~rdb_io_netcdf->module~rdb_constants module~rdb_io_netcdf->module~rdb_error_ring module~rdb_io_netcdf->pic_logger module~rdb_io_netcdf->pic_strings module~rdb_io_netcdf->iso_c_binding module~rdb_io_netcdf->netcdf module~rdb_massless->module~rdb_constants module~rdb_mem_report->iso_fortran_env module~rdb_mem_report->module~rdb_constants module~rdb_mem_report->pic_logger module~rdb_mem_report->pic_strings module~rdb_nml_schema->module~rdb_constants module~rdb_nml_schema->module~rdb_error_ring module~rdb_nml_schema->pic_logger module~rdb_ocean_bipolar->module~rdb_constants module~rdb_ocean_bt_budget_probe->module~rdb_constants module~rdb_ocean_bt_budget_probe->module~rdb_coriolis_adv module~rdb_ocean_bt_budget_probe->module~rdb_grid 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_bt_budget_probe->module~rdb_barotropic_workstate module~rdb_ocean_bt_wide->iso_fortran_env module~rdb_ocean_bt_wide->module~rdb_constants module~rdb_ocean_bt_wide->module~rdb_grid module~rdb_ocean_bt_wide->module~rdb_ocean_boundary_types module~rdb_ocean_bt_wide->module~rdb_ocean_metrics module~rdb_ocean_bt_wide->module~rdb_profiler module~rdb_ocean_bt_wide->pic_logger module~rdb_ocean_bt_wide->module~rdb_barotropic_substep module~rdb_ocean_bt_wide->module~rdb_barotropic_workstate module~rdb_ocean_bt_wide->module~rdb_mem_report module~rdb_ocean_bt_wide->module~rdb_ocean_halo module~rdb_ocean_cavity_melt->module~rdb_constants module~rdb_ocean_cavity_melt->module~rdb_eos module~rdb_ocean_cavity_melt->ieee_arithmetic module~rdb_ocean_chksum->iso_fortran_env module~rdb_ocean_chksum->module~rdb_constants module~rdb_ocean_chksum->module~rdb_grid module~rdb_ocean_chksum->module~rdb_multilayer_state module~rdb_ocean_chksum->module~rdb_barotropic_workstate module~rdb_halo rdb_halo module~rdb_ocean_chksum->module~rdb_halo module~rdb_ocean_console_stats->iso_fortran_env module~rdb_ocean_console_stats->module~rdb_constants module~rdb_ocean_console_stats->module~rdb_grid module~rdb_ocean_console_stats->module~rdb_multilayer_state module~rdb_ocean_console_stats->module~rdb_ocean_metrics module~rdb_ocean_console_stats->pic_logger module~rdb_ocean_console_stats->pic_strings module~rdb_ocean_console_stats->ieee_arithmetic module~rdb_ocean_console_stats->module~rdb_efp module~rdb_ocean_console_stats->module~rdb_ice_column module~rdb_console_stats rdb_console_stats module~rdb_ocean_console_stats->module~rdb_console_stats module~rdb_ocean_console_stats->module~rdb_halo module~rdb_ocean_console_stats->module~rdb_ocean_halo_counters module~rdb_ocean_diag_mask->iso_fortran_env module~rdb_ocean_diag_mask->module~rdb_constants module~rdb_ocean_diag_mask->module~rdb_grid module~rdb_ocean_diag_mask->module~rdb_mem_report module~rdb_ocean_eos_compute->module~rdb_eos module~rdb_ocean_eos_compute->module~rdb_multilayer_state module~rdb_ocean_fold_apply->module~rdb_constants module~rdb_ocean_fold_apply->module~rdb_grid module~rdb_ocean_fold_apply->module~rdb_multilayer_state module~rdb_ocean_fold_apply->module~rdb_ocean_boundary_types module~rdb_ocean_fold_apply->module~rdb_ocean_fold module~rdb_ocean_fold_apply->module~rdb_ocean_fold_exchange module~rdb_ocean_fold_exchange->module~rdb_comm_env module~rdb_ocean_fold_exchange->module~rdb_constants module~rdb_ocean_fold_exchange->module~rdb_decomp module~rdb_ocean_fold_exchange->module~rdb_error_ring module~rdb_ocean_fold_exchange->module~rdb_ocean_fold module~rdb_ocean_fold_exchange->module~rdb_ocean_status module~rdb_ocean_fold_exchange->pic_logger module~rdb_ocean_fold_exchange->pic_strings module~rdb_ocean_fold_exchange->pic_mpi_lib module~rdb_ocean_fold_plan rdb_ocean_fold_plan module~rdb_ocean_fold_exchange->module~rdb_ocean_fold_plan module~rdb_ocean_geothermal->module~rdb_constants module~rdb_ocean_geothermal->module~rdb_grid module~rdb_ocean_geothermal->module~rdb_multilayer_state module~rdb_ocean_geothermal->module~rdb_ocean_surface_flux module~rdb_ocean_ghost_poison->module~rdb_constants module~rdb_ocean_ghost_poison->module~rdb_grid module~rdb_ocean_ghost_poison->module~rdb_multilayer_state module~rdb_ocean_ghost_poison->module~rdb_ocean_surface_stress module~rdb_ocean_ghost_poison->ieee_arithmetic module~rdb_ocean_ghost_poison->module~rdb_barotropic_workstate module~rdb_ocean_halo->module~rdb_comm_env module~rdb_ocean_halo->module~rdb_constants module~rdb_ocean_halo->module~rdb_decomp module~rdb_ocean_halo->module~rdb_error_ring module~rdb_ocean_halo->module~rdb_ocean_periodic module~rdb_ocean_halo->module~rdb_ocean_status module~rdb_ocean_halo->pic_logger module~rdb_ocean_halo->pic_strings module~rdb_ocean_halo->pic_mpi_lib module~rdb_ocean_halo->module~rdb_ocean_halo_counters module~rdb_ocean_halo_state->module~rdb_constants module~rdb_ocean_halo_state->module~rdb_grid 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_periodic module~rdb_ocean_halo_state->module~rdb_ocean_surface_stress module~rdb_ocean_halo_state->module~rdb_profiler module~rdb_ocean_halo_state->module~rdb_ocean_fold_apply module~rdb_ocean_halo_state->module~rdb_ocean_halo module~rdb_ocean_halo_state->module~rdb_ocean_halo_counters module~rdb_ocean_ideal_age->module~rdb_constants module~rdb_ocean_ideal_age->module~rdb_grid module~rdb_ocean_ideal_age->module~rdb_multilayer_state module~rdb_ocean_ke_probe->module~rdb_constants module~rdb_ocean_ke_probe->module~rdb_coriolis_adv module~rdb_ocean_ke_probe->module~rdb_grid 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_constants module~rdb_ocean_min_thickness->module~rdb_grid module~rdb_ocean_min_thickness->module~rdb_multilayer_state module~rdb_remap_column rdb_remap_column module~rdb_ocean_min_thickness->module~rdb_remap_column module~rdb_ocean_obc_baroclinic->module~rdb_constants module~rdb_ocean_obc_baroclinic->module~rdb_grid module~rdb_ocean_obc_baroclinic->module~rdb_multilayer_state module~rdb_ocean_obc_baroclinic->module~rdb_ocean_boundary_types module~rdb_ocean_obc_baroclinic->module~rdb_barotropic_workstate module~rdb_ocean_pgf_reconstruct->module~rdb_constants module~rdb_ocean_pgf_reconstruct->module~rdb_eos module~rdb_ocean_porous->module~rdb_constants module~rdb_ocean_porous->ieee_arithmetic module~rdb_ocean_remap->module~rdb_constants module~rdb_ocean_remap->module~rdb_eos module~rdb_ocean_remap->module~rdb_grid 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_remap->module~rdb_remap_column module~rdb_ocean_tide_astro->iso_fortran_env module~rdb_ocean_tide_astro->module~rdb_constants module~rdb_recon_weno->module~rdb_constants module~rdb_recon_weno->module~rdb_grid module~rdb_scratch_3d->iso_fortran_env module~rdb_scratch_3d->module~rdb_constants module~rdb_scratch_3d->module~rdb_mem_report module~rdb_tracer->iso_fortran_env module~rdb_tracer->module~rdb_constants module~rdb_tracer->module~rdb_grid module~rdb_tracer->module~rdb_mem_report module~rdb_vcoord->module~rdb_constants module~rdb_vcoord->pic_logger module~rdb_vcoord->pic_strings module~rdb_bt_cont_type->module~rdb_constants module~rdb_bt_cont_type->module~rdb_barotropic_workstate module~rdb_console_stats->module~rdb_constants module~rdb_console_stats->pic_logger module~rdb_console_stats->pic_strings module~rdb_console_stats->ieee_arithmetic module~rdb_console_stats->module~rdb_efp module~rdb_halo->iso_fortran_env module~rdb_halo->module~rdb_comm_env module~rdb_halo->module~rdb_constants module~rdb_halo->module~rdb_decomp module~rdb_halo->pic_logger module~rdb_halo->module~rdb_efp module~rdb_halo->pic_mpi_lib module~rdb_ice_mass->module~rdb_constants module~rdb_ice_mass->module~rdb_ice_enthalpy module~rdb_ice_optics->module~rdb_constants module~rdb_ice_optics->module~rdb_ice_enthalpy module~rdb_ocean_halo_counters->iso_fortran_env module~rdb_ocean_halo_counters->pic_strings module~rdb_remap_column->module~rdb_constants

Used by

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

Variables

Type Visibility Attributes Name Initial
real(kind=wp), public, parameter :: ISOMIP_B0 = -150.0_wp

B0, bedrock elevation at x = 0 (m). Table 1.

real(kind=wp), public, parameter :: ISOMIP_B2 = -728.8_wp

B2, second bedrock coefficient (m). Table 1.

real(kind=wp), public, parameter :: ISOMIP_B4 = 343.91_wp

B4, third bedrock coefficient (m). Table 1.

real(kind=wp), public, parameter :: ISOMIP_B6 = -50.57_wp

B6, fourth bedrock coefficient (m). Table 1.

real(kind=wp), public, parameter :: ISOMIP_DC = 500.0_wp

d_c, depth of the trough relative to the side walls (m). Table 1.

real(kind=wp), public, parameter :: ISOMIP_FC = 4.0e3_wp

f_c, characteristic width of the channel side walls (m). Table 1.

real(kind=wp), public, parameter :: ISOMIP_WC = 24.0e3_wp

w_c, half-width of the trough (m). Table 1.

real(kind=wp), public, parameter :: ISOMIP_XBAR = 300.0e3_wp

x_bar, along-flow length scale of the bedrock (m). Table 1.

real(kind=wp), public, parameter :: ISOMIP_ZB_DEEP = -720.0_wp

z_b,deep, maximum depth of the bedrock (m, ELEVATION so negative). Table 1. The dispatch does NOT hard-code this: the clip comes from &ocean_topo_nml max_depth, so the protocol value is max_depth = 720.0. Exported for the unit test and for anyone writing an ISOMIP+ namelist.


Derived Types

type, public ::  ocean_state_t

Components

Type Visibility Attributes Name Initial
type(barotropic_state_t), public :: barotropic

Depth-integrated C-grid prognostic state.

type(ocean_bc_state_t), public :: bc

Per-edge OBC config + per-step boundary data. Defaults to all-OBC_WALL (closed wall) until config opens an edge or a data source populates the data_* buffers.

type(ocean_bottom_drag_t), public :: bdrag

Bottom-drag kernel (linear Rayleigh or quadratic log-layer). Acts on the k=1 layer only.

type(ocean_cavity_flux_t), public :: cavity_flux

Ice-shelf basal-melt slot (&ocean_cavity_melt_nml, default off). Holds the sampled far field, u*, the interface state, the melt mass flux and the per-column solver status; its driver fills surface_flux%heat_cavity/salt_cavity. Gated: off ⇒ (1,1) placeholders, no kernel, bit-identical.

integer, public :: column_stride = 1

Outer tile size for column-local kernels. 1 = column, nx = plane. Drives slot workspace allocation shape. Inform restart-roundtrip + cross-rank assertions whether bit-for-bit checks are expected to succeed.

type(continuity_t), public :: continuity

Continuity-PPM kernel state.

type(coriolis_adv_t), public :: coriolis_adv

PV-conserving Coriolis+advection kernel state.

type(ocean_data_forcing_t), public :: data_forcing

File-backed surface forcing (PR-15) — the (file, variable) -> forcing slot binding over data_input. Holds only registration ids + logicals, all read host-side, so unlike every other slot here it deliberately adds NO term to ocean_state_enter_data: there is nothing to map. The arrays it writes are mapped by surface_stress / surface_flux.

type(ocean_data_input_t), public :: data_input

The shared time-varying NetCDF input reader (PR-14). NetCDF- only (mirrors zinit — the slot compiles out entirely with RDB_ENABLE_NETCDF=OFF, and no consumer path exists that would need it live in that build).

type(ocean_diag_t), public :: diag

Diagnostics manager (registry + remap + I/O server hand-off).

type(ocean_dyn_t), public :: dyn

Split-explicit RK2 driver state.

logical, public :: enable_ideal_age = .false.

MOM6 USE_IDEAL_AGE_TRACER. Set by the driver from cfg BEFORE calling init(grid) so the multilayer state registers the age tracer at index 3. Per-step aging + surface reset is then called by the dyn step driver.

logical, public :: enable_pseudo_salt = .false.

&ocean_tracers_nml enable_pseudo_salt. Set by the driver from cfg BEFORE calling init(grid) — pseudo-salt is registered via register_passive_tracer right after multilayer%init, before ocean_bc_state_init sizes bc%n_tracers (registration-order contract, see rdb_ocean_pseudo_salt).

type(eos_t), public :: eos

Equation of state (Wright by default).

type(ocean_epbl_t), public :: epbl
type(ocean_gm_t), public :: gm

Gent-McWilliams thickness diffusion. Injects eddy bolus thickness transports into the continuity mass fluxes before the divergence; reads slopes%slope_x/y. Default off.

type(ocean_hdiff_tracer_t), public :: hdiff_tracer

Constant-coefficient Laplacian horizontal-tracer-diffusion kernel. Tracer-side counterpart of hvisc.

type(ocean_horizontal_viscosity_t), public :: hvisc

Constant-coefficient Laplacian horizontal-viscosity kernel. Reads scalar nu_h.

type(ocean_sea_ice_t), public :: ice

Gated sea-ice slot (SIS2 port, PLAN_SEA_ICE.md). PR 0 scaffold: knobs + lifecycle only, no arrays and no physics. &ocean_ice_nml enable default off ⇒ never initialised / mapped / stepped ⇒ byte-identical.

logical, public :: is_init = .false.

True once every nested slot has been initialised + GPU attached. Set only after the last child %init returns. Prefer this to walking the children with allocated(...).

type(ocean_kappa_shear_t), public :: kshear

Energetics-based PBL. Mutually exclusive with the KPP overlay; folds its interface diffusivity into vmix%kv / vmix%kt each stage.

type(ocean_lateral_mix_t), public :: lateral_mix

Lateral mixing closure (Leith / Smagorinsky / biharmonic); supplies face viscosity coefficients.

type(ocean_meke_t), public :: meke

Prognostic mesoscale eddy kinetic energy. Evolves a 2D eddy-energy field sourced by gm%gm_src, damped by implicit bottom drag, transported laterally, fed back (geom-mean) into varmix%khth_u/v (+ khtr). Requires GM. Default off ⇒ no-op; khth_fac=khtr_fac=0 ⇒ feedback inert even when enabled.

type(ocean_metrics_t), public :: metrics

Orthogonal curvilinear horizontal metrics (lengths, areas, inverses, geography, hvisc ratio bundle). Filled by configure_ocean_metrics.

type(ocean_mle_t), public :: mle

Fox-Kemper mixed-layer-eddy restratification. Injects ML-confined overturning transports into the continuity mass fluxes before the divergence; reads epbl%mld. Default off.

type(multilayer_state_t), public :: multilayer

Per-layer C-grid prognostic state.

type(ocean_obc_t), public :: obc

Open-boundary nest from parent run.

type(ocean_p_surf_t), public :: p_surf

Atmospheric surface-pressure loading / inverse barometer (PR-17). Folds eta_ib = -p_surf/(rho0 g) into the same eta_forcing barotropic seam the tide composes through.

type(ocean_pressure_force_t), public :: pressure_force

FV pressure-force kernel state.

type(ocean_redi_t), public :: redi

Redi continuous neutral (along-isopycnal) tracer diffusion. Two-phase: redi_calc_coeffs fills neutral-surface coeffs at thermo cadence, redi_apply_flux adds the rotated tracer flux after hdiff_tracer. Recomputes its own interface density derivs (does NOT read slopes). Default off.

type(ocean_restart_t), public :: restart

Restart / checkpoint manager.

type(ocean_slopes_t), public :: slopes

Isopycnal (neutral) slope diagnostics (Griffies 1998) at C-grid interfaces — gates the mesoscale-eddy params. Diagnostic, default off; refreshed at thermo cadence.

type(ocean_sponge_t), public :: sponge

Map-driven sponge (PR-23): per-cell idamp_h/u/v + 3-D reference state. enable (default .false.) gates BOTH the allocation (gated init call below, mirrors epbl/kshear) and the device mapping (gated enter_data/exit_data call in the orchestrator) — a disabled sponge costs nothing. Default off ⇒ the legacy bc%<edge>%sponge_* band kernels (rdb_ocean_sponge::ocean_sponge_apply{,_tracers}) run unchanged ⇒ bit-identical.

type(ocean_surface_flux_t), public :: surface_flux

Surface heat + salt flux slot. 2D Q_heat(:,:) / Q_salt(:,:) (W/m^2 and kg/m^2/s, positive downward / salinifying). Seeded at configure from &ocean_thermo_nml q_heat / q_salt; data-override / restoring may overwrite the fields after. Device-mapped via the orchestrator.

type(ocean_surface_stress_t), public :: surface_stress

Surface wind-stress kernel. Acts on the k=nz layer only.

type(ocean_top_drag_t), public :: tdrag

Ice-shelf TOP-drag kernel (&ocean_tdrag_nml, default off). The mirror of bdrag at k = nz, masked by ice cover on faces. Off ⇒ placeholder arrays, no kernel.

type(ocean_tides_t), public :: tides

Equilibrium + SAL + internal-tide drag.

logical, public :: use_multilayer = .true.

Whether the 3D multilayer state is active (always true on the ocean path; flag exposed for symmetry with the coastal state and so 2D-only debug runs can disable it later).

logical, public :: use_nonhydrostatic = .false.

NH-on-ocean toggle. Phase 5f.

type(ocean_varmix_t), public :: varmix

Spatially-varying GM/Redi coefficient fields. Produces the pre-CFL base khth_u/v (+ khtr_u/v) face fields GM consumes as its optional external base. Reads slopes + wavespeed. Default off ⇒ GM uses the scalar khth.

type(ocean_vcoord_t), public :: vcoord

Vertical-coordinate config + per-step ALE remap state. Defaults to VCOORD_EULERIAN_Z (h_layer fixed).

type(ocean_vdiff_t), public :: vdiff

Backward-Euler vertical-diffusion solver (Thomas tridiagonal per column) for momentum + tracers, using the eddy coefficients in vmix%kv / vmix%kt / vmix%ks.

type(ocean_vertical_advection_t), public :: vert_advect

Vertical advection: diagnoses w_interface from horizontal continuity and advects tracers vertically with a matching h_layer update (Eulerian z — horizontal and vertical h updates cancel).

type(ocean_vmix_t), public :: vmix

Vertical mixing (KPP + interior closure).

type(ocean_tidal_mixing_t), public :: vmix_tidal

St-Laurent/Simmons internal-tide interior diapycnal mixing. INTERIOR closure: its Kd adds to the surface PBL + PP81/background/kappa-shear via the additive merge each stage; kd_int refreshes at thermo cadence. Default off.

type(ocean_wave_speed_t), public :: wavespeed

First-baroclinic wave speed + Rossby deformation radius. Diagnostic, default off.

Type-Bound Procedures

procedure, public, non_overridable :: bytes => ocean_state_bytes
procedure, public, non_overridable :: destroy => ocean_state_destroy
procedure, public, non_overridable :: init => ocean_state_init
procedure, public, non_overridable :: init_from_config => ocean_state_init_from_config

Functions

public pure function isomip_plus_bx(x) result(bx)

Along-flow bedrock elevation, Asay-Davis et al. (2016) Eq. (2):

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: x

Return Value real(kind=wp)

public pure function isomip_plus_by(y, y_len) result(by)

Across-flow bedrock elevation, Asay-Davis et al. (2016) Eq. (4):

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: y
real(kind=wp), intent(in) :: y_len

Return Value real(kind=wp)

public pure function ocean_linear_layer_density(rho_lightest, rho_range, nz_ml) result(rho)

Linearly-spaced layer densities for the MOM6 COORD_CONFIG="linear" IC analogue (set_coord_linear), re-derived for Roundabout’s bottom-up layer convention. Returns nz_ml densities, bed k=1 heaviest → surface k=nz_ml lightest, layer-centred:

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: rho_lightest

Surface (lightest) layer density [kg/m³].

real(kind=wp), intent(in) :: rho_range

Top-to-bottom density contrast [kg/m³].

integer, intent(in) :: nz_ml

Number of layers.

Return Value real(kind=wp), (nz_ml)

public pure function pgf_nonoverlap_gate_on(cfg, variant) result(on)

Single source of truth for “is the grounded-layer PGF gate armed?” (&ocean_isopycnal_nml pgf_skip_nonoverlap → ocean_pressure_force_t%skip_nonoverlap).

Read more…

Arguments

Type IntentOptional Attributes Name
type(config_t), intent(in) :: cfg
integer, intent(in) :: variant

OPGF_VARIANT_* code (already parsed from cfg%ocean%pgf%form).

Return Value logical

public pure function topo_length_to_grid_units(length_m, grid_config, rad_earth) result(len_grid)

Convert a metres length scale (slope_scale / half_width) into the GRID coordinate units the formula bathymetry setters operate in. Cartesian grids carry positions in metres, so the scale passes through unchanged. Spherical / supergrid / tripolar grids carry positions in DEGREES, so the metres scale is converted to degrees of latitude (meridional metres-per-degree = rad_earth · π/180). This keeps the seamount/spoon length scale commensurate with the grid coordinate; without it a metres scale divided by a degrees position underflows the Gaussian/exponential and the basin collapses flat. Zonal cells are narrower by cos(lat), so a degree-isotropic bump is mildly elongated zonally in physical space — acceptable for these idealised topographies; the degeneracy is what this fixes.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: length_m
character(len=*), intent(in) :: grid_config
real(kind=wp), intent(in) :: rad_earth

Return Value real(kind=wp)

private pure function cavity_bound_to_grid(bound_m, per_metre) result(bound_grid)

Convert ONE shelf-box bound from metres to grid coordinate units, leaving the CAVITY_BOUND_INF “no limit” sentinel alone. Without the guard the sentinel would be scaled by the degrees-per-metre factor on a spherical grid and come out as a finite (if absurd) bound — harmless numerically, but it would stop meaning what it says, and the next reader would have to re-derive that.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: bound_m
real(kind=wp), intent(in) :: per_metre

Grid units per metre (1 on Cartesian).

Return Value real(kind=wp)

private pure function isomip_logistic(t) result(r)

1/(1 + exp(t)), saturated instead of overflowing.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: t

Return Value real(kind=wp)

private pure function nw2_cosbell(x, L) result(c)

Cosine-bell kernel for the Neverworld2 basin: 0.5·(1 + cos(π·min(|x/L|,1))). Peaks at 1 for x=0, decays smoothly to 0 at |x|=L. Re-derived from Marques et al. (2022, GMD) “Neverworld2”; MOM6-inspired.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: x
real(kind=wp), intent(in) :: L

Return Value real(kind=wp)

private pure function nw2_spike(x, L) result(s)

Sin-spike kernel for the Neverworld2 basin: 1 − sin(π·min(|x/L|,0.5)). Equals 1 at x=0 and drops to 0 at |x|=L/2 (the 0.5 cap stops the sine re-ascending past its first zero). Re-derived from Marques et al. (2022, GMD); MOM6-inspired.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: x
real(kind=wp), intent(in) :: L

Return Value real(kind=wp)

private pure function ocean_state_bytes(this) result(nbytes)

Counted allocatable footprint of the whole ocean god state, summed from each slot’s own bytes() (each term is 0 when that slot’s arrays are unallocated, so the DEFAULT-OFF closures gated in ocean_state_init contribute nothing — the total tracks the conditional allocation directly). Reported before enter_data and reconciled against the measured device mapping — a new array added without a matching bytes() term makes the measured map exceed this count and self-announces the drift (see rdb_mem_report). Slots with no allocatables (eos, restart) carry no term. The diag%vars registry USED to be excluded — it is now counted, per registered variable, by diag_var_bytes (it was the single largest uncounted device block: ~3.2 GB for the default catalog at 1000x800x50). data_input (PR-14) DOES have allocatables (f0/f1 per registered field) and IS device-mapped, so it carries a real term below — zero registered fields on every shipped namelist keeps that term at 0.

Arguments

Type IntentOptional Attributes Name
class(ocean_state_t), intent(in) :: this

Return Value integer(kind=int64)

private pure function restart_mismatch_kind(code) result(kind)

Map the check-decomp ierr code (INTERNAL 1/2/3 convention — see ocean_restart_check_decomp) to a human-readable kind for the legacy error stop message.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: code

Return Value character(len=:), allocatable

private pure function restart_mismatch_status_code(code) result(status_code)

Map the check-decomp ierr code (INTERNAL 1/2/3 convention) onto the PUBLIC, collision-free OCEAN_STATUS_ERR_RESTART_* codes returned through ocean_state_restart_read’s ierr (P0.1 review F4).

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: code

Return Value integer

private pure function vcoord_type_name(code) result(name)

Human-readable tag for a VCOORD_* enum (mismatch messages only; the integer enum is what is validated).

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: code

Return Value character(len=32)


Subroutines

public subroutine apply_layer_rho_init(ms, layer_rho_init, nz_ml, ierr)

Public only for the unit-test suite (no production module imports it); ignore when developing production code in other modules. Helper: write per-layer density from layer_rho_init(:) when the caller has set at least one non-sentinel value. Sentinel is < 0; we expect exactly nz_ml non-sentinel entries listed in k=1..nz_ml order (bed → surface).

Arguments

Type IntentOptional Attributes Name
type(multilayer_state_t), intent(inout) :: ms
real(kind=wp), intent(in) :: layer_rho_init(:)
integer, intent(in) :: nz_ml
integer, intent(out), optional :: ierr

Non-zero when the non-sentinel count mismatches nz_ml, when present; absent behaves as today (error stop).

public subroutine ocean_state_build_restart_registry(state, grid, reg)

Walk the ocean god state and register every field that must checkpoint for a bit-exact step-(N+1) resume (ROADMAP A1).

Read more…

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(in), target :: state
type(hgrid_t), intent(in) :: grid
type(restart_registry_t), intent(inout) :: reg

public subroutine ocean_state_enter_data(state)

Attach the ocean god state’s allocatables to the device. Map the parent struct first so the device knows the shape of state, then call each slot’s bound enter_data. Only slots that own host allocations need to be visited; the Phase 0 shells (dyn, continuity, coriolis_adv, …) have no allocatables yet, so they’re skipped until they ship their own bound methods.

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(inout) :: state

public subroutine ocean_state_exit_data(state)

Reverse of ocean_state_enter_data. Walk components first, parent struct last.

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(inout) :: state

public subroutine ocean_state_restart_read(state, grid, decomp, filename, t, step, ierr)

Read a per-rank ocean restart into the (host) prognostic arrays. MUST run BEFORE ocean_state_enter_data — the subsequent H->D copy carries the restored values to the device. Restores dyn%outer_step_count (dt_therm alignment).

Read more…

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(inout), target :: state
type(hgrid_t), intent(in) :: grid
type(decomp_t), intent(in) :: decomp
character(len=*), intent(in) :: filename
real(kind=wp), intent(out) :: t
integer, intent(out) :: step
integer, intent(out), optional :: ierr

public subroutine ocean_state_restart_write(state, grid, decomp, filename, t, step, ierr)

Build the registry, pull every DEVICE-MAPPED registered array down with !$acc update self, then write the per-rank file durably (tmp + rename). Safe to call mid-run (state is device-resident) — the D->H pulls leave the device copy authoritative. intent(inout): the update self mutates the host copy of state (review #12), and pointer association into state requires the target attribute.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(inout), target :: state
type(hgrid_t), intent(in) :: grid
type(decomp_t), intent(in) :: decomp
character(len=*), intent(in) :: filename
real(kind=wp), intent(in) :: t
integer, intent(in) :: step
integer, intent(out), optional :: ierr

public subroutine ocean_state_seed_from_cfg(state, grid, cfg, ierr, injected_b, injected_b_convention, periodic_x, periodic_y)

Populate the ocean prognostic state with an analytical IC derived from cfg scalars. Bathymetry is set per cfg%ocean%topo%topo_config ("flat" → uniform ocean_max_depth; "spoon" → MOM6 spoon shape) — UNLESS injected_b is present, in which case it overrides topo_config entirely (P2.5 pre-create geometry injection). Water column thickness h = b so the free surface starts at SSH = 0. Layers split the local depth evenly (h_layer(i,j,k) = b(i,j) / nz_ml). Tracers carry per-layer h * Tr at the configured initial T/S. Velocities zeroed.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(inout) :: state
type(hgrid_t), intent(in) :: grid
type(config_t), intent(in) :: cfg
integer, intent(out), optional :: ierr

Non-zero on an initial-condition configuration/data failure when present; absent behaves as today (error stop).

real(kind=wp), intent(in), optional :: injected_b(:,:)

P2.5 pre-create geometry injection: interior-sized (grid%nx_phys, grid%ny_phys) bathymetry, RAW in the caller’s own sign convention (see injected_b_convention) — REQUIRES injected_b_convention. When present, this OVERRIDES cfg%ocean%topo%topo_config entirely: sign-normalised to positive-down depth + wet-fraction validated (bathymetry_normalise_sign), written into the interior of state%barotropic%b, and ghost-filled by constant extrapolation (bathymetry_fill_ghosts_array) — mirroring topo_config='file' rather than trusting the caller (CLAUDE.md formula-bathymetry ghost-fill gotcha). Everything downstream in this routine (h=b, layer split, wet mask, T/S seed, IC overlays, the ALE z_ref table) then runs unchanged against the injected bathymetry.

integer, intent(in), optional :: injected_b_convention

REQUIRED alongside injected_b — no default (D6.2: sign is the single most dangerous argument in the geometry API). One of BATHY_CONVENTION_DEPTH_POSITIVE_DOWN / _HEIGHT_POSITIVE_UP (rdb_ocean_bathymetry_inject).

logical, intent(in), optional :: periodic_x

Grid topology the static geometry is wrapped with (see seed_wrap_static_2d). Absent ⇒ derived from the &ocean_bc_nml west/east tags, exactly as configure_ocean_bc derives bc%periodic_x. The engine passes it when a staged topology (rdb_ocean_stage_topology) overrides the tags.

logical, intent(in), optional :: periodic_y

As periodic_x, for south/north.

public subroutine ocean_state_seed_land_cells(state, grid)

Hold land T-cells (wet_mask==0) at FINITE reference values so the masked dyn-core never evaluates 0*NaN (a zeroed face metric times a NaN land contribution is still NaN). Spec §13.3 / land_mask_final_resolution.md R-land-state: * h_layer floored to H_VANISHED (never 0 — avoids 1/0); * tracer content zeroed (hTr = 0, so T = S = 0 — finite); * layer + barotropic face velocities zeroed at land faces.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(inout) :: state
type(hgrid_t), intent(in) :: grid

public subroutine seed_baroclinic_jet_ic(state, grid, cfg, ierr)

Two-layer reduced-gravity baroclinic-instability IC — a geostrophically-balanced tanh jet in the upper (surface) layer of a spherical re-entrant channel, plus a front-localised sech² meander seed that the instability grows. Reproduces the bc_inst spec (SIM_DETAILS.md §5), mapped to Roundabout’s bottom-up layer convention (k=1 bed, k=nz surface). The spec’s layers FLIP:

Read more…

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(inout) :: state
type(hgrid_t), intent(in) :: grid
type(config_t), intent(in) :: cfg
integer, intent(out), optional :: ierr

Non-zero on a baroclinic-jet IC configuration conflict when present; absent behaves as today (error stop).

Read more…

public subroutine seed_eady_ic(state, grid, cfg, ierr)

Eady-front overlay IC. Assumes flat bottom + uniform layer split already in place from ocean_state_seed_from_cfg.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(inout) :: state
type(hgrid_t), intent(in) :: grid
type(config_t), intent(in) :: cfg
integer, intent(out), optional :: ierr

Non-zero on an Eady-IC configuration conflict when present; absent behaves as today (error stop).

public subroutine seed_geostrophic_adjustment_ic(state, grid, cfg, ierr)

Rossby’s classic geostrophic-adjustment problem. Overlays a Gaussian SSH bump on a flat-bottom, single-layer (barotropic) state at rest: η(x, y) = A · exp(-r² / L²) h(i, j) = b(i, j) + η(i, j) u = v = 0 where r is the radial distance from the bump centre.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(inout) :: state
type(hgrid_t), intent(in) :: grid
type(config_t), intent(in) :: cfg
integer, intent(out), optional :: ierr

Non-zero on a geostrophic-adjustment IC configuration conflict when present; absent behaves as today (error stop).

public pure subroutine seed_h_layer_uniform_impl(h_layer, b, nz_ml, apply_wetdry_floor)

Even-split layer thickness per column. Pulled into a flat-impl so the do concurrent body works on plain allocatables — the outer shim reaches the multilayer + barotropic slot components once on the host.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: h_layer(:,:,:)
real(kind=wp), intent(in) :: b(:,:)
integer, intent(in) :: nz_ml
logical, intent(in), optional :: apply_wetdry_floor

When present and .true., floor each seeded layer to 2·H_VANISHED so an emerged intertidal rest-bed never seeds a negative column (and hence a negative barotropic depth) AND survives the strict h_old > H_VANISHED remap-drain gate. Absent ⇒ byte-identical.

public pure subroutine seed_h_layer_uniform_z_impl(h_layer, b, nz_ml, max_depth, angstrom_h)

thickness_config = "uniform_z": MOM6 initialize_thickness_uniform port. Lays uniform z interfaces over the GLOBAL max_depth, clips them bottom-up against the local bathymetry, and collapses whatever will not fit to a minimum-thickness floor:

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: h_layer(:,:,:)
real(kind=wp), intent(in) :: b(:,:)
integer, intent(in) :: nz_ml
real(kind=wp), intent(in) :: max_depth

Global basin depth the z interfaces are laid over (ocean_max_depth).

real(kind=wp), intent(in) :: angstrom_h

Isopycnal minimum-thickness floor (&ocean_isopycnal_nml angstrom_h).

public subroutine set_bathymetry_island(b, grid, max_depth, half_frac)

Flat-bottom basin at max_depth everywhere, except a central square of LAND (b = 0, well below LAND_DEPTH_THRESHOLD). The land square is centred on the physical domain and spans the central 2*half_frac fraction of each axis (e.g. half_frac=0.2 ⇒ the middle 40 % is land). half_frac is taken from &ocean_topo_nml slope_scale at the call site (no new knob).

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: b(:,:)
type(hgrid_t), intent(in) :: grid
real(kind=wp), intent(in) :: max_depth
real(kind=wp), intent(in) :: half_frac

public subroutine set_bathymetry_isomip_plus(b, grid, max_depth, x_origin, m_per_grid)

Public only for the unit-test suite (no production module imports it); ignore when developing production code in other modules.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: b(:,:)
type(hgrid_t), intent(in) :: grid
real(kind=wp), intent(in) :: max_depth

Deep clip (m, positive down) = -z_b,deep. Protocol: 720.

real(kind=wp), intent(in) :: x_origin

Absolute MISMIP+ x (m) of the domain’s west edge. Protocol (ISOMIP+): 320e3.

real(kind=wp), intent(in) :: m_per_grid

Metres per grid coordinate unit (1 on Cartesian).

public subroutine set_bathymetry_neverworld2(b, grid, max_depth, nl_continent_amp, nl_roughness_amp, min_depth)

Public only for the unit-test suite (no production module imports it); ignore when developing production code in other modules.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: b(:,:)
type(hgrid_t), intent(in) :: grid
real(kind=wp), intent(in) :: max_depth
real(kind=wp), intent(in) :: nl_continent_amp
real(kind=wp), intent(in) :: nl_roughness_amp
real(kind=wp), intent(in) :: min_depth

Floor on the resulting depth (m). The fractional-depth formula produces b in [0, ~1.1*max_depth]; the 1.1*spike walls and the continent terms drive b to 0 (land) at the basin edges. The ocean C-grid dyn-core does not yet carry a robust wet/dry path, and true zero-depth land + the resulting sub-metre surface layers blow up within ~12 h. Flooring every cell to min_depth (MOM6’s MINIMUM_DEPTH approach) turns the continents into shallow shelves that steer — rather than hard-block — the flow, keeping the basin all-wet and stable. Lower values give stronger topographic steering at the cost of thinner layers (min_depth/nz); true land barriers wait on the wet/dry-plumbing follow-up.

public subroutine set_bathymetry_seamount(b, grid, max_depth, peak_depth, half_width)

Public only for the unit-test suite (no production module imports it); ignore when developing production code in other modules. Fill b(:,:) with a centred Gaussian seamount bathymetry:

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: b(:,:)
type(hgrid_t), intent(in) :: grid
real(kind=wp), intent(in) :: max_depth
real(kind=wp), intent(in) :: peak_depth
real(kind=wp), intent(in) :: half_width

public subroutine set_bathymetry_spoon(b, grid, max_depth, edge_depth, slope_scale)

Public only for the unit-test suite (no production module imports it); ignore when developing production code in other modules. Fill b(:,:) with the MOM6 spoon bathymetry. In Cartesian terms (we collapse MOM6’s lat/lon factors of R_earth · π / 180 into a direct meters scale), the local depth is

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: b(:,:)
type(hgrid_t), intent(in) :: grid
real(kind=wp), intent(in) :: max_depth
real(kind=wp), intent(in) :: edge_depth
real(kind=wp), intent(in) :: slope_scale

private subroutine ocean_state_destroy(this)

Arguments

Type IntentOptional Attributes Name
class(ocean_state_t), intent(inout) :: this

private subroutine ocean_state_fill_restart_metadata(state, grid, meta)

Build the grid/vcoord/tracer fingerprint validated on resume (review #7).

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(in) :: state
type(hgrid_t), intent(in) :: grid
type(ocean_restart_metadata_t), intent(out) :: meta

private subroutine ocean_state_init(this, grid)

Construct the ocean god state. Each slot’s init allocates its own arrays; the DEFAULT-OFF closures (EPBL, kappa-shear, tidal mixing, GM, Redi, MLE/Fox-Kemper, VarMix, MEKE, isopycnal slopes) are gated on their enable flag so a plain run does not pay their multi-GB footprint. This requires the enable flags to be set BEFORE init — ocean_state_init_from_config hoists them above its call this%init(grid) for exactly this reason. The gated closures’ runtime kernels already early-return on .not. enable (and enter_data/exit_data are gated in the parent walk), so a gated-off slot is never touched with unallocated arrays.

Arguments

Type IntentOptional Attributes Name
class(ocean_state_t), intent(inout) :: this
type(hgrid_t), intent(in) :: grid

private subroutine ocean_state_init_from_config(this, cfg, grid)

Seed the cfg-derived scalars the slot inits read up front (layer count, ideal-age toggle), allocate via init(grid), then override the linear-EOS params (after eos%init has set its defaults). Carries the ocean branch that state_init_from_config held before the coastal / ocean state split — the order (nz_ml + ideal_age before init, eos after) is load-bearing and matches the pre-split behaviour.

Arguments

Type IntentOptional Attributes Name
class(ocean_state_t), intent(inout) :: this
type(config_t), intent(in) :: cfg
type(hgrid_t), intent(in) :: grid

private subroutine ocean_state_restart_write_drop_field(state, grid, decomp, filename, t, step, drop_tag, ierr)

Test-only sibling of ocean_state_restart_write: identical, except the ONE registered entry whose tag matches drop_tag is written under a mangled tag instead of its real one, so a subsequent ocean_state_restart_read/ocean_restart_read_local – which looks up variables by their REAL tag – finds nothing and takes exactly the “optional field absent” path it takes for a genuinely older checkpoint. error stops if drop_tag does not match any registered entry (a typo here must not silently test nothing).

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(inout), target :: state
type(hgrid_t), intent(in) :: grid
type(decomp_t), intent(in) :: decomp
character(len=*), intent(in) :: filename
real(kind=wp), intent(in) :: t
integer, intent(in) :: step
character(len=*), intent(in) :: drop_tag
integer, intent(out), optional :: ierr

private subroutine register_full_3d(reg, tag, arr)

Register a rank-3 field as a FULL local array (interior + ghosts) — ng=0 over the total extent. See the ghost-cell policy note in ocean_state_build_restart_registry.

Arguments

Type IntentOptional Attributes Name
type(restart_registry_t), intent(inout) :: reg
character(len=*), intent(in) :: tag
real(kind=wp), intent(in), target :: arr(:,:,:)

private subroutine register_full_3d_opt(reg, tag, arr)

register_full_3d, but OPTIONAL on read: a checkpoint written before the field was registered still resumes.

Arguments

Type IntentOptional Attributes Name
type(restart_registry_t), intent(inout) :: reg
character(len=*), intent(in) :: tag
real(kind=wp), intent(in), target :: arr(:,:,:)

private subroutine seed_cavity_draft(state, grid, cfg, ierr)

Fill metrics%z_draft (and its cover_frac companion) from &ocean_cavity_dyn_nml, then cross-validate the geometry against the seeded bathymetry. Runs from ocean_state_seed_from_cfg IMMEDIATELY after the bathymetry and BEFORE the layer split and the wet-mask seed, which both read b − z_draft.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(inout) :: state
type(hgrid_t), intent(in) :: grid
type(config_t), intent(in) :: cfg
integer, intent(out) :: ierr

private pure subroutine seed_land_face_vel_2d_impl(fld, wet_face)

2D (barotropic) variant of seed_land_face_vel_impl.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: fld(:,:)
real(kind=wp), intent(in) :: wet_face(:,:)

private pure subroutine seed_land_face_vel_impl(fld, wet_face, nz)

Zero a per-layer face field ((nf1,nf2,nz)) at land faces (wet_face==0). wet_face is the matching wet_u/wet_v.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: fld(:,:,:)
real(kind=wp), intent(in) :: wet_face(:,:)
integer, intent(in) :: nz

private pure subroutine seed_land_h_floor_impl(h_layer, wet_mask, nz)

Floor land-cell layer thickness to H_VANISHED (never 0 ⇒ no 1/0 in any per-layer divide). Wet cells untouched.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: h_layer(:,:,:)
real(kind=wp), intent(in) :: wet_mask(:,:)
integer, intent(in) :: nz

private pure subroutine seed_land_tracer_hold_impl(hTr, wet_mask, nz)

Zero the extensive tracer content hTr on land T-cells (wet_mask == 0). Wet cells untouched (bit-identical when wet_mask ≡ 1).

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: hTr(:,:,:)
real(kind=wp), intent(in) :: wet_mask(:,:)
integer, intent(in) :: nz

private pure subroutine seed_tracer_stratified_impl(hTr, h_layer, t_layer, nz_ml)

Seed hTr(i,j,k) = t_layer(k) * h_layer(i,j,k) for the per-layer stratified-IC tracer (temperature). t_layer(:) is a small 1D array pre-computed on host.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: hTr(:,:,:)
real(kind=wp), intent(in) :: h_layer(:,:,:)
real(kind=wp), intent(in) :: t_layer(:)
integer, intent(in) :: nz_ml

private pure subroutine seed_tracer_uniform_impl(hTr, h_layer, tracer_const, nz_ml)

Seed hTr = const * h_layer for a uniform-IC tracer (salinity).

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: hTr(:,:,:)
real(kind=wp), intent(in) :: h_layer(:,:,:)
real(kind=wp), intent(in) :: tracer_const
integer, intent(in) :: nz_ml

private pure subroutine seed_wet_mask_impl(wet_mask, b, land_cutoff)

1.0 where b >= cutoff (ocean), 0.0 elsewhere (land). Default (absent land_cutoff): cutoff = LAND_DEPTH_THRESHOLD (byte-identical to the pre-v2 path). When land_cutoff is present, a column is land iff b < land_cutoff; the wetdry-aware seed passes land_cutoff = -land_margin so intertidal columns (bed above rest MSL but below the flood headroom) stay wet_mask=1 and the dynamic wd_wet_dyn gate handles their wetting/drying.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: wet_mask(:,:)
real(kind=wp), intent(in) :: b(:,:)
real(kind=wp), intent(in), optional :: land_cutoff

When present, a column is land iff b < land_cutoff (used by the wetdry-aware seed: land_cutoff = -land_margin lets intertidal columns near/above rest MSL stay wet_mask=1). Absent ⇒ the default b >= LAND_DEPTH_THRESHOLD ocean test (byte-identical).

private pure subroutine seed_wrap_static_2d(fld, grid, per_x, per_y, north_fold)

Fill the seam ghosts of a static, cell-centred 2-D geometry field (bathymetry, ice draft, cover fraction) from their periodic / north-fold images, on the host, at seed time.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: fld(:,:)

Cell-centred field, shape (nx_total, ny_total).

type(hgrid_t), intent(in) :: grid
logical, intent(in) :: per_x

West/east edges are periodic.

logical, intent(in) :: per_y

South/north edges are periodic.

logical, intent(in) :: north_fold

North edge is the tripolar fold.

private subroutine seed_zinit_overlay(state, grid, cfg, ierr, z_top)

Dispatch the &ocean_zinit_nml T/S overlay across its two axes: the profile SOURCE ("file" — the pre-regridded NetCDF reader; "linear" — the analytic affine lin_* profile) and whether a cavity draft is present.

Read more…

Arguments

Type IntentOptional Attributes Name
type(ocean_state_t), intent(inout) :: state
type(hgrid_t), intent(in) :: grid
type(config_t), intent(in) :: cfg
integer, intent(out), optional :: ierr

Threaded straight through to the seeder; an ABSENT ierr stays absent there, so each keeps its own error stop text.

real(kind=wp), intent(in), optional :: z_top(:,:)

Column-top depth (m, positive down), FULL ghosted shape, in place of metrics%z_draft: the TRIMMED cavity IC (&ocean_cavity_dyn_nml trim_ic_for_p_surf) puts the top at z_draft - eta_trim. Absent => metrics%z_draft.

private subroutine set_bathymetry_double_drake(b, grid, max_depth, half_frac)

“Double Drake” idealised supercontinent (Ferreira, Marshall & Campin 2010, J. Climate): a flat-bottom global ocean at max_depth with TWO thin meridional wall-continents 90° of longitude apart, each running from the north pole down to a southern-channel latitude, leaving a reentrant circumpolar channel (Drake-Passage analogue) to the south. Used as the static-land-mask integration showcase on a spherical periodic-x sector grid.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: b(:,:)
type(hgrid_t), intent(in) :: grid
real(kind=wp), intent(in) :: max_depth
real(kind=wp), intent(in) :: half_frac