rdb_ocean_api Module


Uses

  • module~~rdb_ocean_api~~UsesGraph module~rdb_ocean_api rdb_ocean_api iso_c_binding iso_c_binding module~rdb_ocean_api->iso_c_binding iso_fortran_env iso_fortran_env module~rdb_ocean_api->iso_fortran_env module~rdb_comm_env rdb_comm_env module~rdb_ocean_api->module~rdb_comm_env module~rdb_config rdb_config module~rdb_ocean_api->module~rdb_config module~rdb_constants rdb_constants module~rdb_ocean_api->module~rdb_constants module~rdb_error_ring rdb_error_ring module~rdb_ocean_api->module~rdb_error_ring module~rdb_handle rdb_handle module~rdb_ocean_api->module~rdb_handle module~rdb_ocean_bathymetry_inject rdb_ocean_bathymetry_inject module~rdb_ocean_api->module~rdb_ocean_bathymetry_inject module~rdb_ocean_diag_derived rdb_ocean_diag_derived module~rdb_ocean_api->module~rdb_ocean_diag_derived module~rdb_ocean_diag_fills rdb_ocean_diag_fills module~rdb_ocean_api->module~rdb_ocean_diag_fills module~rdb_ocean_dyn rdb_ocean_dyn module~rdb_ocean_api->module~rdb_ocean_dyn module~rdb_ocean_engine rdb_ocean_engine module~rdb_ocean_api->module~rdb_ocean_engine module~rdb_ocean_eos_compute rdb_ocean_eos_compute module~rdb_ocean_api->module~rdb_ocean_eos_compute module~rdb_ocean_fold_apply rdb_ocean_fold_apply module~rdb_ocean_api->module~rdb_ocean_fold_apply module~rdb_ocean_halo_width rdb_ocean_halo_width module~rdb_ocean_api->module~rdb_ocean_halo_width module~rdb_ocean_periodic rdb_ocean_periodic module~rdb_ocean_api->module~rdb_ocean_periodic module~rdb_ocean_status rdb_ocean_status module~rdb_ocean_api->module~rdb_ocean_status 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_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_logger pic_logger module~rdb_config->pic_logger pic_strings pic_strings module~rdb_config->pic_strings pic_types pic_types module~rdb_constants->pic_types module~rdb_error_ring->pic_logger module~rdb_handle->iso_c_binding module~rdb_handle->module~rdb_config module~rdb_handle->module~rdb_constants module~rdb_handle->module~rdb_ocean_engine module~rdb_grid rdb_grid module~rdb_handle->module~rdb_grid module~rdb_ocean_state rdb_ocean_state module~rdb_handle->module~rdb_ocean_state module~rdb_ocean_bathymetry_inject->module~rdb_constants module~rdb_ocean_bathymetry_inject->module~rdb_error_ring module~rdb_ocean_bathymetry_inject->module~rdb_ocean_status module~rdb_ocean_bathymetry_inject->module~rdb_grid module~rdb_ocean_bathymetry_inject->pic_strings module~rdb_ocean_diag_derived->module~rdb_constants module~rdb_ocean_diag_derived->module~rdb_error_ring module~rdb_ocean_diag_derived->module~rdb_ocean_diag_fills ieee_arithmetic ieee_arithmetic module~rdb_ocean_diag_derived->ieee_arithmetic module~rdb_ocean_diag rdb_ocean_diag module~rdb_ocean_diag_derived->module~rdb_ocean_diag module~rdb_ocean_diag_derived->module~rdb_ocean_state module~rdb_ocean_diag_derived->pic_logger module~rdb_ocean_diag_fills->module~rdb_constants module~rdb_ocean_diag_fills->ieee_arithmetic module~rdb_eos rdb_eos module~rdb_ocean_diag_fills->module~rdb_eos module~rdb_ice_column rdb_ice_column module~rdb_ocean_diag_fills->module~rdb_ice_column module~rdb_ocean_diag_fills->module~rdb_ocean_diag 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_vcoord rdb_ocean_vcoord module~rdb_ocean_diag_fills->module~rdb_ocean_vcoord module~rdb_remap_column rdb_remap_column module~rdb_ocean_diag_fills->module~rdb_remap_column module~rdb_ocean_dyn->iso_fortran_env module~rdb_ocean_dyn->module~rdb_constants module~rdb_ocean_dyn->module~rdb_ocean_eos_compute module~rdb_ocean_dyn->module~rdb_ocean_fold_apply module~rdb_ocean_dyn->module~rdb_ocean_periodic module~rdb_ocean_dyn->ieee_arithmetic module~rdb_barotropic_coupling rdb_barotropic_coupling module~rdb_ocean_dyn->module~rdb_barotropic_coupling module~rdb_barotropic_state rdb_barotropic_state module~rdb_ocean_dyn->module~rdb_barotropic_state 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_continuity rdb_continuity module~rdb_ocean_dyn->module~rdb_continuity module~rdb_coriolis_adv rdb_coriolis_adv module~rdb_ocean_dyn->module~rdb_coriolis_adv module~rdb_efp rdb_efp module~rdb_ocean_dyn->module~rdb_efp module~rdb_ocean_dyn->module~rdb_eos module~rdb_ocean_dyn->module~rdb_grid module~rdb_mem_report rdb_mem_report module~rdb_ocean_dyn->module~rdb_mem_report module~rdb_multilayer_state rdb_multilayer_state module~rdb_ocean_dyn->module~rdb_multilayer_state module~rdb_ocean_bottom_drag rdb_ocean_bottom_drag module~rdb_ocean_dyn->module~rdb_ocean_bottom_drag module~rdb_ocean_boundary_types rdb_ocean_boundary_types module~rdb_ocean_dyn->module~rdb_ocean_boundary_types 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_cavity_flux rdb_ocean_cavity_flux module~rdb_ocean_dyn->module~rdb_ocean_cavity_flux 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_epbl rdb_ocean_epbl module~rdb_ocean_dyn->module~rdb_ocean_epbl 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_gm rdb_ocean_gm module~rdb_ocean_dyn->module~rdb_ocean_gm module~rdb_ocean_halo rdb_ocean_halo module~rdb_ocean_dyn->module~rdb_ocean_halo module~rdb_ocean_halo_state rdb_ocean_halo_state module~rdb_ocean_dyn->module~rdb_ocean_halo_state 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_ideal_age rdb_ocean_ideal_age module~rdb_ocean_dyn->module~rdb_ocean_ideal_age 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_ke_probe rdb_ocean_ke_probe module~rdb_ocean_dyn->module~rdb_ocean_ke_probe 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_metrics rdb_ocean_metrics module~rdb_ocean_dyn->module~rdb_ocean_metrics module~rdb_ocean_min_thickness rdb_ocean_min_thickness module~rdb_ocean_dyn->module~rdb_ocean_min_thickness module~rdb_ocean_mle rdb_ocean_mle module~rdb_ocean_dyn->module~rdb_ocean_mle module~rdb_ocean_obc_baroclinic rdb_ocean_obc_baroclinic module~rdb_ocean_dyn->module~rdb_ocean_obc_baroclinic module~rdb_ocean_p_surf rdb_ocean_p_surf module~rdb_ocean_dyn->module~rdb_ocean_p_surf module~rdb_ocean_porous rdb_ocean_porous module~rdb_ocean_dyn->module~rdb_ocean_porous 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_remap rdb_ocean_remap module~rdb_ocean_dyn->module~rdb_ocean_remap module~rdb_ocean_sponge rdb_ocean_sponge module~rdb_ocean_dyn->module~rdb_ocean_sponge module~rdb_ocean_surface_flux rdb_ocean_surface_flux 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_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_profiler rdb_profiler module~rdb_ocean_dyn->module~rdb_profiler module~rdb_ocean_dyn->pic_logger module~rdb_ocean_dyn->pic_strings module~rdb_ocean_engine->iso_fortran_env module~rdb_ocean_engine->module~rdb_config module~rdb_ocean_engine->module~rdb_constants module~rdb_ocean_engine->module~rdb_error_ring 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_dyn module~rdb_ocean_engine->module~rdb_ocean_fold_apply module~rdb_ocean_engine->module~rdb_ocean_periodic module~rdb_ocean_engine->module~rdb_ocean_status module~rdb_decomp rdb_decomp module~rdb_ocean_engine->module~rdb_decomp module~rdb_ocean_engine->module~rdb_grid module~rdb_halo rdb_halo module~rdb_ocean_engine->module~rdb_halo module~rdb_ice_atm_forcing rdb_ice_atm_forcing module~rdb_ocean_engine->module~rdb_ice_atm_forcing module~rdb_ice_basal_flux rdb_ice_basal_flux module~rdb_ocean_engine->module~rdb_ice_basal_flux module~rdb_ice_evp rdb_ice_evp module~rdb_ocean_engine->module~rdb_ice_evp module~rdb_ice_frazil rdb_ice_frazil module~rdb_ocean_engine->module~rdb_ice_frazil module~rdb_ice_frazil_uptake rdb_ice_frazil_uptake module~rdb_ocean_engine->module~rdb_ice_frazil_uptake module~rdb_ocean_engine->module~rdb_ice_init module~rdb_ice_itd rdb_ice_itd module~rdb_ocean_engine->module~rdb_ice_itd module~rdb_ice_ocean_coupler rdb_ice_ocean_coupler module~rdb_ocean_engine->module~rdb_ice_ocean_coupler module~rdb_ice_snow rdb_ice_snow module~rdb_ocean_engine->module~rdb_ice_snow module~rdb_ice_thermo_driver rdb_ice_thermo_driver module~rdb_ocean_engine->module~rdb_ice_thermo_driver module~rdb_ice_transport rdb_ice_transport module~rdb_ocean_engine->module~rdb_ice_transport module~rdb_io_netcdf rdb_io_netcdf module~rdb_ocean_engine->module~rdb_io_netcdf module~rdb_ocean_boundary_data rdb_ocean_boundary_data module~rdb_ocean_engine->module~rdb_ocean_boundary_data module~rdb_ocean_engine->module~rdb_ocean_boundary_types module~rdb_ocean_engine->module~rdb_ocean_cavity_flux module~rdb_ocean_data_forcing rdb_ocean_data_forcing module~rdb_ocean_engine->module~rdb_ocean_data_forcing module~rdb_ocean_data_input rdb_ocean_data_input module~rdb_ocean_engine->module~rdb_ocean_data_input module~rdb_ocean_engine->module~rdb_ocean_diag module~rdb_ocean_diag_netcdf rdb_ocean_diag_netcdf module~rdb_ocean_engine->module~rdb_ocean_diag_netcdf module~rdb_ocean_fold_exchange rdb_ocean_fold_exchange module~rdb_ocean_engine->module~rdb_ocean_fold_exchange module~rdb_ocean_engine->module~rdb_ocean_geothermal module~rdb_ocean_engine->module~rdb_ocean_halo module~rdb_ocean_engine->module~rdb_ocean_halo_state module~rdb_ocean_engine->module~rdb_ocean_metrics module~rdb_ocean_setup rdb_ocean_setup module~rdb_ocean_engine->module~rdb_ocean_setup module~rdb_ocean_engine->module~rdb_ocean_sponge 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_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_profiler module~rdb_state rdb_state module~rdb_ocean_engine->module~rdb_state module~rdb_vcoord rdb_vcoord module~rdb_ocean_engine->module~rdb_vcoord module~rdb_ocean_engine->pic_logger module~rdb_ocean_engine->pic_strings 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 rdb_ocean_fold module~rdb_ocean_fold_apply->module~rdb_ocean_fold module~rdb_ocean_fold_apply->module~rdb_ocean_fold_exchange module~rdb_ocean_halo_width->module~rdb_coriolis_adv module~rdb_recon_weno rdb_recon_weno module~rdb_ocean_halo_width->module~rdb_recon_weno 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_barotropic_coupling->module~rdb_constants module~rdb_barotropic_coupling->ieee_arithmetic module~rdb_barotropic_coupling->module~rdb_barotropic_workstate 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_state->iso_fortran_env module~rdb_barotropic_state->module~rdb_constants module~rdb_barotropic_state->module~rdb_grid module~rdb_barotropic_state->module~rdb_mem_report module~rdb_barotropic_substep->module~rdb_constants module~rdb_barotropic_substep->module~rdb_barotropic_workstate module~rdb_barotropic_substep->module~rdb_grid module~rdb_barotropic_substep->module~rdb_ocean_boundary_types module~rdb_barotropic_substep->module~rdb_ocean_fold_exchange module~rdb_barotropic_substep->module~rdb_ocean_halo module~rdb_barotropic_substep->module~rdb_ocean_metrics module~rdb_barotropic_substep->module~rdb_profiler 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_continuity->iso_fortran_env module~rdb_continuity->module~rdb_constants module~rdb_continuity->module~rdb_ocean_fold_apply module~rdb_continuity->module~rdb_ocean_periodic module~rdb_continuity->module~rdb_barotropic_state module~rdb_continuity->module~rdb_grid module~rdb_continuity->module~rdb_mem_report 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_fold_exchange module~rdb_continuity->module~rdb_ocean_gm module~rdb_continuity->module~rdb_ocean_halo module~rdb_continuity->module~rdb_ocean_metrics module~rdb_continuity->module~rdb_ocean_mle module~rdb_continuity->module~rdb_profiler 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_constants module~rdb_coriolis_adv->module~rdb_barotropic_state module~rdb_coriolis_adv->module~rdb_grid module~rdb_coriolis_adv->module~rdb_mem_report module~rdb_coriolis_adv->module~rdb_multilayer_state module~rdb_coriolis_adv->module~rdb_ocean_metrics module~rdb_coriolis_adv->module~rdb_ocean_porous module~rdb_coriolis_adv->module~rdb_scratch_3d module~rdb_decomp->module~rdb_config module~rdb_efp->iso_fortran_env module~rdb_efp->ieee_arithmetic module~rdb_eos->module~rdb_constants module~rdb_eos->module~rdb_grid module~rdb_grid->module~rdb_constants 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->module~rdb_efp module~rdb_halo->pic_logger module~rdb_halo->pic_mpi_lib module~rdb_ice_atm_forcing->module~rdb_constants module~rdb_ice_state rdb_ice_state module~rdb_ice_atm_forcing->module~rdb_ice_state module~rdb_ice_basal_flux->module~rdb_constants module~rdb_ice_basal_flux->module~rdb_eos module~rdb_ice_basal_flux->module~rdb_grid module~rdb_ice_basal_flux->module~rdb_ice_column module~rdb_ice_basal_flux->module~rdb_multilayer_state module~rdb_ice_basal_flux->module~rdb_ocean_surface_flux module~rdb_ice_basal_flux->module~rdb_ice_state 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_evp->module~rdb_constants module~rdb_ice_evp->module~rdb_ocean_periodic module~rdb_ice_evp->module~rdb_grid module~rdb_ice_evp->module~rdb_ice_column module~rdb_ice_evp->module~rdb_multilayer_state module~rdb_ice_evp->module~rdb_ocean_boundary_types module~rdb_ice_evp->module~rdb_ocean_halo module~rdb_ice_evp->module~rdb_ocean_metrics module~rdb_ice_evp->module~rdb_ice_state module~rdb_ice_frazil->module~rdb_constants module~rdb_ice_frazil->module~rdb_eos module~rdb_ice_frazil->module~rdb_grid module~rdb_ice_frazil->module~rdb_multilayer_state module~rdb_ice_frazil->module~rdb_ocean_surface_flux module~rdb_ice_frazil_uptake->module~rdb_constants module~rdb_ice_frazil_uptake->module~rdb_eos module~rdb_ice_frazil_uptake->module~rdb_grid module~rdb_ice_frazil_uptake->module~rdb_ice_column module~rdb_ice_frazil_uptake->module~rdb_ice_enthalpy module~rdb_ice_frazil_uptake->module~rdb_multilayer_state module~rdb_ice_frazil_uptake->module~rdb_ice_mass module~rdb_ice_frazil_uptake->module~rdb_ice_state module~rdb_ice_init->module~rdb_constants module~rdb_ice_init->module~rdb_grid module~rdb_ice_init->module~rdb_ice_column module~rdb_ice_init->module~rdb_ice_enthalpy module~rdb_ice_init->module~rdb_multilayer_state module~rdb_ice_init->module~rdb_ocean_metrics module~rdb_ice_init->module~rdb_ice_state module~rdb_ice_itd->module~rdb_constants module~rdb_ice_itd->module~rdb_grid module~rdb_ice_itd->module~rdb_multilayer_state module~rdb_ice_itd->module~rdb_ice_state module~rdb_ice_ocean_coupler->module~rdb_constants module~rdb_ice_ocean_coupler->module~rdb_grid module~rdb_ice_ocean_coupler->module~rdb_ocean_boundary_types module~rdb_ice_ocean_coupler->module~rdb_ocean_halo_state 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_ice_state module~rdb_ice_snow->module~rdb_constants module~rdb_ice_snow->module~rdb_grid module~rdb_ice_snow->module~rdb_ice_enthalpy module~rdb_ice_snow->module~rdb_ice_state module~rdb_ice_thermo_driver->module~rdb_constants module~rdb_ice_thermo_driver->module~rdb_eos module~rdb_ice_thermo_driver->module~rdb_grid module~rdb_ice_thermo_driver->module~rdb_ice_column module~rdb_ice_thermo_driver->module~rdb_multilayer_state module~rdb_ice_thermo_driver->module~rdb_ice_state module~rdb_ice_transport->module~rdb_constants module~rdb_ice_transport->module~rdb_continuity module~rdb_ice_transport->module~rdb_grid module~rdb_ice_transport->module~rdb_halo module~rdb_ice_transport->module~rdb_ice_column module~rdb_ice_transport->module~rdb_ice_itd module~rdb_ice_transport->module~rdb_multilayer_state module~rdb_ice_transport->module~rdb_ocean_boundary_types module~rdb_ice_transport->module~rdb_ocean_halo module~rdb_ice_transport->module~rdb_ocean_halo_state module~rdb_ice_transport->module~rdb_ocean_metrics module~rdb_ice_transport->module~rdb_ice_state module~rdb_io_netcdf->iso_c_binding 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 netcdf netcdf module~rdb_io_netcdf->netcdf 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_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_efp module~rdb_multilayer_state->module~rdb_grid module~rdb_multilayer_state->module~rdb_mem_report module~rdb_multilayer_state->pic_logger module~rdb_multilayer_state->module~rdb_tracer module~rdb_nml_schema->module~rdb_constants module~rdb_nml_schema->module~rdb_error_ring module~rdb_nml_schema->pic_logger 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_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_data->module~rdb_constants module~rdb_ocean_boundary_data->module~rdb_ocean_boundary_types module~rdb_ocean_boundary_types->iso_fortran_env module~rdb_ocean_boundary_types->module~rdb_constants module~rdb_ocean_boundary_types->module~rdb_ocean_status module~rdb_ocean_boundary_types->module~rdb_grid module~rdb_ocean_boundary_types->module~rdb_mem_report module~rdb_ocean_boundary_types->pic_ascii module~rdb_ocean_boundary_types->pic_logger module~rdb_ocean_tide_astro rdb_ocean_tide_astro module~rdb_ocean_boundary_types->module~rdb_ocean_tide_astro module~rdb_ocean_bt_budget_probe->module~rdb_constants 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_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_wide->iso_fortran_env module~rdb_ocean_bt_wide->module~rdb_constants 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_grid module~rdb_ocean_bt_wide->module~rdb_mem_report module~rdb_ocean_bt_wide->module~rdb_ocean_boundary_types module~rdb_ocean_bt_wide->module~rdb_ocean_halo module~rdb_ocean_bt_wide->module~rdb_ocean_metrics module~rdb_ocean_bt_wide->module~rdb_profiler module~rdb_ocean_bt_wide->pic_logger 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_mem_report 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_melt rdb_ocean_cavity_melt module~rdb_ocean_cavity_flux->module~rdb_ocean_cavity_melt module~rdb_ocean_chksum->iso_fortran_env module~rdb_ocean_chksum->module~rdb_constants module~rdb_ocean_chksum->module~rdb_barotropic_workstate module~rdb_ocean_chksum->module~rdb_grid module~rdb_ocean_chksum->module~rdb_halo module~rdb_ocean_chksum->module~rdb_multilayer_state module~rdb_ocean_console_stats->iso_fortran_env module~rdb_ocean_console_stats->module~rdb_constants module~rdb_ocean_console_stats->ieee_arithmetic module~rdb_ocean_console_stats->module~rdb_efp module~rdb_ocean_console_stats->module~rdb_grid module~rdb_ocean_console_stats->module~rdb_halo module~rdb_ocean_console_stats->module~rdb_ice_column 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_console_stats rdb_console_stats module~rdb_ocean_console_stats->module~rdb_console_stats module~rdb_ocean_console_stats->module~rdb_ocean_halo_counters 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_ocean_status 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_halo_state 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_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_ocean_status module~rdb_ocean_data_input->module~rdb_grid module~rdb_ocean_data_input->module~rdb_io_netcdf module~rdb_ocean_data_input->module~rdb_mem_report module~rdb_ocean_data_input->pic_ascii module~rdb_ocean_data_input->pic_logger module~rdb_ocean_data_input->pic_strings module~rdb_ocean_data_input->netcdf 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_ocean_status module~rdb_ocean_diag->ieee_arithmetic module~rdb_ocean_diag->module~rdb_grid module~rdb_ocean_diag->module~rdb_mem_report module~rdb_ocean_diag->pic_logger module~rdb_ocean_diag_mask rdb_ocean_diag_mask module~rdb_ocean_diag->module~rdb_ocean_diag_mask module~rdb_ocean_diag_netcdf->iso_fortran_env module~rdb_ocean_diag_netcdf->module~rdb_constants module~rdb_ocean_diag_netcdf->module~rdb_ocean_status module~rdb_ocean_diag_netcdf->module~rdb_io_netcdf module~rdb_ocean_diag_netcdf->module~rdb_ocean_diag module~rdb_ocean_diag_netcdf->pic_logger module~rdb_ocean_diag_netcdf->netcdf 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_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_fold->module~rdb_constants module~rdb_ocean_fold_exchange->module~rdb_comm_env module~rdb_ocean_fold_exchange->module~rdb_constants module~rdb_ocean_fold_exchange->module~rdb_error_ring module~rdb_ocean_fold_exchange->module~rdb_ocean_status module~rdb_ocean_fold_exchange->module~rdb_decomp module~rdb_ocean_fold_exchange->module~rdb_ocean_fold module~rdb_ocean_fold_exchange->pic_logger module~rdb_ocean_fold_exchange->pic_mpi_lib module~rdb_ocean_fold_exchange->pic_strings 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->ieee_arithmetic module~rdb_ocean_ghost_poison->module~rdb_barotropic_workstate 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_gm->iso_fortran_env module~rdb_ocean_gm->module~rdb_constants module~rdb_ocean_gm->ieee_arithmetic module~rdb_ocean_gm->module~rdb_grid 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_halo->module~rdb_comm_env module~rdb_ocean_halo->module~rdb_constants 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->module~rdb_decomp module~rdb_ocean_halo->pic_logger module~rdb_ocean_halo->pic_mpi_lib module~rdb_ocean_halo->pic_strings module~rdb_ocean_halo->module~rdb_ocean_halo_counters module~rdb_ocean_halo_state->module~rdb_constants 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_grid 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_halo 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_ice_state module~rdb_ocean_halo_state->module~rdb_ocean_halo_counters 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_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->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_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_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_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_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->iso_fortran_env module~rdb_ocean_kappa_shear->module~rdb_constants module~rdb_ocean_kappa_shear->ieee_arithmetic module~rdb_ocean_kappa_shear->module~rdb_eos module~rdb_ocean_kappa_shear->module~rdb_grid module~rdb_ocean_kappa_shear->module~rdb_mem_report module~rdb_ocean_kappa_shear->module~rdb_multilayer_state module~rdb_massless rdb_massless module~rdb_ocean_kappa_shear->module~rdb_massless 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_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_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->iso_fortran_env module~rdb_ocean_meke->module~rdb_constants module~rdb_ocean_meke->module~rdb_grid 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->iso_fortran_env module~rdb_ocean_metrics->module~rdb_constants module~rdb_ocean_metrics->module~rdb_error_ring module~rdb_ocean_metrics->module~rdb_ocean_status module~rdb_ocean_metrics->module~rdb_grid module~rdb_ocean_metrics->module~rdb_io_netcdf module~rdb_ocean_metrics->module~rdb_mem_report module~rdb_ocean_metrics->module~rdb_ocean_fold module~rdb_ocean_metrics->pic_logger module~rdb_ocean_metrics->pic_strings module~rdb_ocean_bipolar rdb_ocean_bipolar module~rdb_ocean_metrics->module~rdb_ocean_bipolar module~rdb_ocean_metrics->netcdf 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_ocean_min_thickness->module~rdb_remap_column 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_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_baroclinic->module~rdb_constants module~rdb_ocean_obc_baroclinic->module~rdb_barotropic_workstate 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_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_porous->module~rdb_constants module~rdb_ocean_porous->ieee_arithmetic 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_mem_report module~rdb_ocean_pressure_force->module~rdb_multilayer_state module~rdb_ocean_pressure_force->module~rdb_ocean_metrics module~rdb_ocean_pgf_reconstruct rdb_ocean_pgf_reconstruct module~rdb_ocean_pressure_force->module~rdb_ocean_pgf_reconstruct module~rdb_ocean_pressure_force->module~rdb_scratch_3d module~rdb_ocean_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_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_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_remap_column module~rdb_ocean_remap->module~rdb_tracer module~rdb_ocean_setup->module~rdb_config module~rdb_ocean_setup->module~rdb_constants module~rdb_ocean_setup->module~rdb_error_ring module~rdb_ocean_setup->module~rdb_ocean_dyn module~rdb_ocean_setup->module~rdb_ocean_fold_apply module~rdb_ocean_setup->module~rdb_ocean_status module~rdb_ocean_setup->module~rdb_coriolis_adv module~rdb_ocean_setup->module~rdb_decomp module~rdb_ocean_setup->module~rdb_eos module~rdb_ocean_setup->module~rdb_grid module~rdb_ocean_setup->module~rdb_halo 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_epbl module~rdb_ocean_setup->module~rdb_ocean_fold module~rdb_ocean_setup->module~rdb_ocean_fold_exchange module~rdb_ocean_setup->module~rdb_ocean_geothermal module~rdb_ocean_setup->module~rdb_ocean_halo module~rdb_ocean_setup->module~rdb_ocean_halo_state 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_porous module~rdb_ocean_setup->module~rdb_ocean_pressure_force module~rdb_ocean_setup->module~rdb_ocean_sponge module~rdb_ocean_setup->module~rdb_ocean_state 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_recon_weno module~rdb_ocean_setup->module~rdb_vcoord module~rdb_ocean_setup->pic_logger module~rdb_ocean_setup->pic_strings module~rdb_ocean_cavity rdb_ocean_cavity module~rdb_ocean_setup->module~rdb_ocean_cavity module~rdb_ocean_setup->module~rdb_ocean_cavity_melt module~rdb_ocean_setup->module~rdb_ocean_tide_astro 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_mem_report module~rdb_ocean_sponge->module~rdb_multilayer_state module~rdb_ocean_sponge->module~rdb_ocean_boundary_types module~rdb_ocean_stability_audit->module~rdb_config module~rdb_ocean_stability_audit->module~rdb_constants module~rdb_ocean_stability_audit->module~rdb_error_ring module~rdb_ocean_stability_audit->module~rdb_ocean_status module~rdb_ocean_stability_audit->module~rdb_grid module~rdb_ocean_stability_audit->module~rdb_ocean_metrics module~rdb_ocean_stability_audit->module~rdb_vcoord module~rdb_ocean_stability_audit->pic_logger module~rdb_ocean_stability_audit->pic_strings module~rdb_ocean_state->iso_fortran_env module~rdb_ocean_state->module~rdb_comm_env module~rdb_ocean_state->module~rdb_config module~rdb_ocean_state->module~rdb_constants module~rdb_ocean_state->module~rdb_error_ring module~rdb_ocean_state->module~rdb_ocean_bathymetry_inject module~rdb_ocean_state->module~rdb_ocean_dyn module~rdb_ocean_state->module~rdb_ocean_periodic module~rdb_ocean_state->module~rdb_ocean_status 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_decomp module~rdb_ocean_state->module~rdb_eos module~rdb_ocean_state->module~rdb_grid 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_forcing module~rdb_ocean_state->module~rdb_ocean_data_input module~rdb_ocean_state->module~rdb_ocean_diag module~rdb_ocean_state->module~rdb_ocean_epbl module~rdb_ocean_state->module~rdb_ocean_fold 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_p_surf module~rdb_ocean_state->module~rdb_ocean_pressure_force module~rdb_ocean_state->module~rdb_ocean_pseudo_salt 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_profiler module~rdb_ocean_state->pic_logger module~rdb_ocean_state->pic_strings module~rdb_bathymetry rdb_bathymetry module~rdb_ocean_state->module~rdb_bathymetry module~rdb_ocean_state->module~rdb_ice_state module~rdb_ocean_state->module~rdb_ocean_cavity module~rdb_ocean_obc rdb_ocean_obc module~rdb_ocean_state->module~rdb_ocean_obc 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_z_init rdb_ocean_z_init module~rdb_ocean_state->module~rdb_ocean_z_init 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_mem_report module~rdb_ocean_surface_flux->module~rdb_multilayer_state 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_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->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_mem_report module~rdb_ocean_tidal_mixing->module~rdb_multilayer_state 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_mem_report module~rdb_ocean_top_drag->module~rdb_multilayer_state 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_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->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_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_mem_report module~rdb_ocean_vdiff->module~rdb_multilayer_state module~rdb_ocean_vdiff->pic_logger 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_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->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_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->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_mem_report module~rdb_ocean_wave_speed->module~rdb_multilayer_state module~rdb_ocean_wave_speed->module~rdb_ocean_metrics module~rdb_profiler->iso_fortran_env module~rdb_profiler->pic_logger module~rdb_recon_weno->module~rdb_constants module~rdb_recon_weno->module~rdb_grid module~rdb_remap_column->module~rdb_constants module~rdb_state->module~rdb_config module~rdb_state->module~rdb_tracer module~rdb_vcoord->module~rdb_constants module~rdb_vcoord->pic_logger module~rdb_vcoord->pic_strings module~rdb_bathymetry->module~rdb_constants module~rdb_bathymetry->module~rdb_ocean_status module~rdb_bathymetry->module~rdb_grid module~rdb_bathymetry->module~rdb_io_netcdf module~rdb_bathymetry->pic_logger module~rdb_bathymetry->pic_strings module~rdb_bathymetry->netcdf 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->ieee_arithmetic module~rdb_console_stats->module~rdb_efp module~rdb_console_stats->pic_logger module~rdb_console_stats->pic_strings 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_ice_state->iso_fortran_env module~rdb_ice_state->module~rdb_constants module~rdb_ice_state->module~rdb_grid 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_massless->module~rdb_constants module~rdb_ocean_bipolar->module~rdb_constants module~rdb_ocean_cavity->module~rdb_constants module~rdb_ocean_cavity->module~rdb_grid module~rdb_ocean_cavity_melt->module~rdb_constants module~rdb_ocean_cavity_melt->ieee_arithmetic module~rdb_ocean_cavity_melt->module~rdb_eos 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_halo_counters->iso_fortran_env module~rdb_ocean_halo_counters->pic_strings 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_pgf_reconstruct->module~rdb_constants module~rdb_ocean_pgf_reconstruct->module~rdb_eos module~rdb_ocean_restart->module~rdb_constants module~rdb_ocean_restart->pic_logger module~rdb_ocean_restart->pic_strings module~rdb_ocean_restart_io->iso_c_binding module~rdb_ocean_restart_io->module~rdb_constants module~rdb_ocean_restart_io->module~rdb_error_ring module~rdb_ocean_restart_io->module~rdb_ocean_status module~rdb_ocean_restart_io->module~rdb_decomp module~rdb_ocean_restart_io->module~rdb_io_netcdf module~rdb_ocean_restart_io->pic_logger module~rdb_ocean_restart_io->pic_strings module~rdb_ocean_restart_io->module~rdb_ocean_restart module~rdb_ocean_restart_io->netcdf module~rdb_ocean_tide_astro->iso_fortran_env module~rdb_ocean_tide_astro->module~rdb_constants 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_ocean_status module~rdb_ocean_z_init->module~rdb_grid module~rdb_ocean_z_init->module~rdb_io_netcdf module~rdb_ocean_z_init->module~rdb_multilayer_state module~rdb_ocean_z_init->pic_logger module~rdb_ocean_z_init->pic_strings module~rdb_ocean_z_init->netcdf 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

Variables

Type Visibility Attributes Name Initial
real(kind=wp), private, parameter :: RHO0_DIAG = 1025.0_wp

Reference density used ONLY to give the total-mass diagnostic (rdb_ocean_get_total_mass) units of kg. The solver itself is Boussinesq (continuity conserves volume/thickness, not mass), so this constant does not feed back into the dynamics anywhere — it exists purely so the diagnostic is dimensionally a mass rather than a bare volume, and cancels out of any before/after conservation check a caller does with it.

logical, private, save :: g_handle_live = .false.

True from a successful create() until destroy(). Guards the single- live-ocean-handle invariant (see module header). Module-save state is the correct tool here — it mirrors the process-global singletons it is protecting against, not a design smell.


Functions

public function rdb_ocean_canonical_catalog_name(idx, buf, cap) result(len_out) bind(c, name="rdb_ocean_canonical_catalog_name")

Name of canonical-catalog entry idx (0-based, < the size above).

Arguments

Type IntentOptional Attributes Name
integer(kind=c_int), intent(in), value :: idx
character(kind=c_char, len=1), intent(out) :: buf(cap)
integer(kind=c_int), intent(in), value :: cap

Return Value integer(kind=c_int)

public function rdb_ocean_canonical_catalog_size() result(n) bind(c, name="rdb_ocean_canonical_catalog_size")

Number of names in the CANONICAL diagnostic catalog (SSH, temperature, salinity, u, v, KE, … — the set register_default_diags MAY register at setup; some entries are gated by another namelist group, e.g. temperature needs &ocean_thermo_nml enable_thermodynamics). No handle required. Use rdb_ocean_get_diag_count/rdb_ocean_list_diags on a live handle to see what actually registered.

Arguments

None

Return Value integer(kind=c_int)

public function rdb_ocean_create_finalize(c_handle) result(status) bind(c, name="rdb_ocean_create_finalize")

P2.5 phase 2 of 2: complete a handle started by rdb_ocean_create_pending (optionally staged with rdb_ocean_stage_* geometry in between) — runs engine_setup (consuming any staged geometry) through device mapping, exactly like the tail of rdb_ocean_create_from_string.

Read more…

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(inout) :: c_handle

Return Value integer(kind=c_int)

public function rdb_ocean_create_from_string(nml_text, nml_len, handle_out) result(status) bind(c, name="rdb_ocean_create_from_string")

Build a config from an in-memory namelist string (no filesystem touch), set up the ocean dyn-core exactly as bench_ocean / driver_run_ocean do, map it onto the device, and hand back an opaque handle. On ANY failure, handle_out is c_null_ptr and the partially-built handle (if one was allocated) is freed — never a half-initialised handle escaping to the caller.

Arguments

Type IntentOptional Attributes Name
character(kind=c_char, len=1), intent(in) :: nml_text(nml_len)
integer(kind=c_int), intent(in), value :: nml_len
type(c_ptr), intent(out) :: handle_out

Return Value integer(kind=c_int)

public function rdb_ocean_create_pending(nml_text, nml_len, handle_out) result(status) bind(c, name="rdb_ocean_create_pending")

P2.5 phase 1 of 2: build + validate a config and allocate a handle EXACTLY like rdb_ocean_create_from_string, but stop there — does NOT run engine_setup or map the device. Claims the single-live-handle guard immediately (a second concurrent create/create_pending is refused from this point on, even though engine_setup has not yet touched any process-global state — the invariant is “one handle mid-create at a time”, not merely “one finished one”).

Read more…

Arguments

Type IntentOptional Attributes Name
character(kind=c_char, len=1), intent(in) :: nml_text(nml_len)
integer(kind=c_int), intent(in), value :: nml_len
type(c_ptr), intent(out) :: handle_out

Return Value integer(kind=c_int)

public function rdb_ocean_derived_catalog_name(idx, buf, cap) result(len_out) bind(c, name="rdb_ocean_derived_catalog_name")

Name of derived-catalog entry idx (0-based, < the size above).

Arguments

Type IntentOptional Attributes Name
integer(kind=c_int), intent(in), value :: idx
character(kind=c_char, len=1), intent(out) :: buf(cap)
integer(kind=c_int), intent(in), value :: cap

Return Value integer(kind=c_int)

public function rdb_ocean_derived_catalog_size() result(n) bind(c, name="rdb_ocean_derived_catalog_size")

Number of names in the DERIVED diagnostic catalog (vorticity_z, ke_total, mld_density, … — rdb_ocean_diag_derived’s static table, opt-in via &ocean_diag_nml diags). No handle required: this is build-time information, reachable before create().

Arguments

None

Return Value integer(kind=c_int)

public function rdb_ocean_destroy(c_handle) result(status) bind(c, name="rdb_ocean_destroy")

success (so a Python __del__ can call this blind). On a live handle: unwind device residency (engine_exit_data) then release the god-state’s host-side allocations + the process-global ocean- halo module state (engine_teardown), then free the handle itself and clear the single-live-handle guard.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(inout) :: c_handle

Return Value integer(kind=c_int)

public function rdb_ocean_get_b_ptr(c_handle, ptr, nx, ny, gen) result(status) bind(c, name="rdb_ocean_get_b_ptr")

Bathymetry (m, POSITIVE DOWN — eta = sum(h) - b): barotropic%b, shape (nx_total, ny_total).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_bt_eta_ptr(c_handle, ptr, nx, ny, gen) result(status) bind(c, name="rdb_ocean_get_bt_eta_ptr")

Sea-surface height (m): dyn%bt_work%bt_eta, shape (nx_total, ny_total). Diagnostic (sum_k(h_layer) - bt_H_ref), not independently settable — write h or b instead.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_diag_count(c_handle, count_out) result(status) bind(c, name="rdb_ocean_get_diag_count")

Number of diagnostics REGISTERED on this live instance right now (canonical + derived + anything the &ocean_diag_nml diags token list added) — bounds for rdb_ocean_list_diags’s index argument. This is the “selected” set, as opposed to the two static “available” catalogs above.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
integer(kind=c_int), intent(out) :: count_out

Return Value integer(kind=c_int)

public function rdb_ocean_get_diagnostic_ptr(c_handle, name, name_len, ptr, nx, ny, nz, gen) result(status) bind(c, name="rdb_ocean_get_diagnostic_ptr")

Raw output_buffer for the diagnostic named name (LAYER vgrid: (nx_total, ny_total, nz_ml) for a layered var, (nx_total, ny_total, 1) for a 2D var; a non-LAYER output_vgrid reports the remapped shape, e.g. nz z-levels). OCEAN_STATUS_ERR_NOT_FOUND if name is not currently REGISTERED on this instance (it may still be a legal name on one of the two static catalogs, just gated off or not selected — see rdb_ocean_get_diag_count/ rdb_ocean_list_diags to discover what IS registered).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
character(kind=c_char, len=1), intent(in) :: name(name_len)
integer(kind=c_int), intent(in), value :: name_len
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_grid_info(c_handle, nx, ny, nz, nghost) result(status) bind(c, name="rdb_ocean_get_grid_info")

Physical (interior, ghost-excluded) grid shape + ghost width.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: nghost

Return Value integer(kind=c_int)

public function rdb_ocean_get_h_layer_ptr(c_handle, ptr, nx, ny, nz, gen) result(status) bind(c, name="rdb_ocean_get_h_layer_ptr")

Layer thickness (m), cell-centred, FULL extent (ghosts included): multilayer%h_layer, shape (nx_total, ny_total, nz_ml).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_hu_ptr(c_handle, ptr, nx, ny, nz, gen) result(status) bind(c, name="rdb_ocean_get_hu_ptr")

West-face x transport (h*u, m^2/s): multilayer%hu_face_x_layer, same shape/stagger as u_face_x_layer.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_hv_ptr(c_handle, ptr, nx, ny, nz, gen) result(status) bind(c, name="rdb_ocean_get_hv_ptr")

South-face y transport (h*v, m^2/s): multilayer%hv_face_y_layer, same shape/stagger as v_face_y_layer.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_kinetic_energy(c_handle, ke_out) result(status) bind(c, name="rdb_ocean_get_kinetic_energy")

Total kinetic energy (J, up to the Boussinesq reference-density factor — matches rdb_ocean_get_total_mass’s convention of leaving rho0 out) over the physical interior: sum(0.5 * h_layer * (u_centre^2 + v_centre^2) * areaT), faces averaged to centres — same formula as rdb_ocean_budgets::budget_total_ke, computed inline (weighted by the metrics’ areaT, so it is right on spherical / supergrid / tripolar grids too; grid%dx*grid%dy is only the fallback). Unlike the raw-pointer getters above, this refreshes the host itself — it hands back a NUMBER, not a pointer a caller could otherwise defer syncing for.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
real(kind=c_double), intent(out) :: ke_out

Return Value integer(kind=c_int)

public function rdb_ocean_get_ks_ptr(c_handle, ptr, nx, ny, nz, gen) result(status) bind(c, name="rdb_ocean_get_ks_ptr")

Vertical salt (+ every passive tracer) diffusivity (m^2/s): vmix%ks, shape (nx_total, ny_total, nz_ml+1) (layer INTERFACES). ks ≡ kt unless &ocean_ddiff_nml double diffusion is enabled.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_kt_ptr(c_handle, ptr, nx, ny, nz, gen) result(status) bind(c, name="rdb_ocean_get_kt_ptr")

Vertical heat diffusivity (m^2/s): vmix%kt, shape (nx_total, ny_total, nz_ml+1) (layer INTERFACES).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_kv_ptr(c_handle, ptr, nx, ny, nz, gen) result(status) bind(c, name="rdb_ocean_get_kv_ptr")

Vertical viscosity (m^2/s): vmix%kv, shape (nx_total, ny_total, nz_ml+1) (layer INTERFACES).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_q_heat_ptr(c_handle, ptr, nx, ny, gen) result(status) bind(c, name="rdb_ocean_get_q_heat_ptr")

Net surface heat flux (W/m^2): h%state%surface_flux%Q_heat. P2 called this the “STANDALONE sf slot” (a separate, minimally- seeded object from ocean_state%surface_flux) because the P1 step call never ran ocean_surface_flux_assemble. P2.4 unifies setup+step across all three callers via the shared engine (rdb_ocean_engine), so rdb_ocean_step now DOES run the assembler (via engine_step_finalize) against this SAME field — a write here is live-consumed the same way the driver’s is. Shape (nx_total, ny_total).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_q_salt_ptr(c_handle, ptr, nx, ny, gen) result(status) bind(c, name="rdb_ocean_get_q_salt_ptr")

Net surface salt flux: h%state%surface_flux%Q_salt — see rdb_ocean_get_q_heat_ptr for the P2.4 unification note. Shape (nx_total, ny_total).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_rho_layer_ptr(c_handle, ptr, nx, ny, nz, gen) result(status) bind(c, name="rdb_ocean_get_rho_layer_ptr")

In-situ density (kg/m^3): multilayer%rho_layer, same shape as h_layer. Filled by the EOS each thermo step (and by every P2 setter that touches T/S/h).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_step_count(c_handle, step_out) result(status) bind(c, name="rdb_ocean_get_step_count")

Outer-step counter. Reads dyn%outer_step_count directly (the kernel’s own bookkeeping) rather than keeping a second counter on the handle, so there is exactly one source of truth.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
integer(kind=c_int), intent(out) :: step_out

Return Value integer(kind=c_int)

public function rdb_ocean_get_tau_x_ptr(c_handle, ptr, nx, ny, gen) result(status) bind(c, name="rdb_ocean_get_tau_x_ptr")

East-face wind stress (N/m^2): surface_stress%tau_x, shape (nx_total+1, ny_total).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_tau_y_ptr(c_handle, ptr, nx, ny, gen) result(status) bind(c, name="rdb_ocean_get_tau_y_ptr")

North-face wind stress (N/m^2): surface_stress%tau_y, shape (nx_total, ny_total+1).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_time(c_handle, t_out) result(status) bind(c, name="rdb_ocean_get_time")

Current simulation time (seconds).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
real(kind=c_double), intent(out) :: t_out

Return Value integer(kind=c_int)

public function rdb_ocean_get_total_mass(c_handle, m_out) result(status) bind(c, name="rdb_ocean_get_total_mass")

One scalar diagnostic — total water mass over the physical domain (sum(h_layer * areaT) * RHO0_DIAG) — so a caller can prove the solver actually advanced (and, in a closed quiescent/wall basin, that it is conserving mass) without any state-array accessor (P2). !$acc update self on the leaf array via associate (never the aggregate ocean_state_t/multilayer_state_t) before summing, per the D<->H contract — inert on a host build, load-bearing on GPU.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
real(kind=c_double), intent(out) :: m_out

Return Value integer(kind=c_int)

public function rdb_ocean_get_tracer_count(c_handle, count_out) result(status) bind(c, name="rdb_ocean_get_tracer_count")

Number of registered tracers (S, T, + any passive tracers) — bounds for rdb_ocean_list_tracers’s index argument.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
integer(kind=c_int), intent(out) :: count_out

Return Value integer(kind=c_int)

public function rdb_ocean_get_tracer_ptr(c_handle, name, name_len, ptr, nx, ny, nz, gen) result(status) bind(c, name="rdb_ocean_get_tracer_ptr")

Raw h*Tr store (NOT concentration — D3.2) for the tracer named name, by NAME (never index — the recovered code had no tracer accessors, and index comparison is already the wrong idiom in the Fortran itself). OCEAN_STATUS_ERR_NOT_FOUND if no registered tracer matches. Shape (nx_total, ny_total, nz_ml).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
character(kind=c_char, len=1), intent(in) :: name(name_len)
integer(kind=c_int), intent(in), value :: name_len
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_u_face_x_layer_ptr(c_handle, ptr, nx, ny, nz, gen) result(status) bind(c, name="rdb_ocean_get_u_face_x_layer_ptr")

West-face x-velocity (m/s): multilayer%u_face_x_layer, shape (nx_total+1, ny_total, nz_ml).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_v_face_y_layer_ptr(c_handle, ptr, nx, ny, nz, gen) result(status) bind(c, name="rdb_ocean_get_v_face_y_layer_ptr")

South-face y-velocity (m/s): multilayer%v_face_y_layer, shape (nx_total, ny_total+1, nz_ml).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_w_interface_ptr(c_handle, ptr, nx, ny, nz, gen) result(status) bind(c, name="rdb_ocean_get_w_interface_ptr")

Vertical velocity at layer interfaces (m/s): multilayer%w_interface, shape (nx_total, ny_total, nz_ml+1), k=1 bed .. k=nz_ml+1 surface.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_get_wet_t_ptr(c_handle, ptr, nx, ny, gen) result(status) bind(c, name="rdb_ocean_get_wet_t_ptr")

Wet mask at T points (1 = wet, 0 = land): metrics%wet_T, shape (nx_total, ny_total). Read-only (no setter — land masking is a configure-time / bathymetry concern).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: gen

Return Value integer(kind=c_int)

public function rdb_ocean_last_error(idx, buf, cap) result(len_out) bind(c, name="rdb_ocean_last_error")

Read the error ring at ring-relative index idx (0 = most recent push). Copies up to cap bytes of the trimmed message into buf, NUL-terminating if room remains, and returns the FULL trimmed message length — a snprintf-style contract: a returned length >= cap means the copy was truncated. Returns 0 (buf untouched) if idx is out of [0, count) or cap <= 0.

Read more…

Arguments

Type IntentOptional Attributes Name
integer(kind=c_int), intent(in), value :: idx
character(kind=c_char, len=1), intent(out) :: buf(cap)
integer(kind=c_int), intent(in), value :: cap

Return Value integer(kind=c_int)

public function rdb_ocean_list_diags(c_handle, idx, buf, cap) result(len_out) bind(c, name="rdb_ocean_list_diags")

Name of the registered diagnostic at index idx (0-based). Same snprintf-style contract as rdb_ocean_list_tracers.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
integer(kind=c_int), intent(in), value :: idx
character(kind=c_char, len=1), intent(out) :: buf(cap)
integer(kind=c_int), intent(in), value :: cap

Return Value integer(kind=c_int)

public function rdb_ocean_list_tracers(c_handle, idx, buf, cap) result(len_out) bind(c, name="rdb_ocean_list_tracers")

Name of the tracer at registry index idx (0-based). Same snprintf-style contract as rdb_ocean_last_error: copies up to cap bytes, NUL-terminates if room remains, returns the FULL trimmed name length. Returns 0 (buf untouched) on a bad handle, an out-of-range idx, or cap <= 0.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
integer(kind=c_int), intent(in), value :: idx
character(kind=c_char, len=1), intent(out) :: buf(cap)
integer(kind=c_int), intent(in), value :: cap

Return Value integer(kind=c_int)

public function rdb_ocean_refresh_host(c_handle) result(status) bind(c, name="rdb_ocean_refresh_host")

Lazy device->host refresh of every P2-exposed leaf array, gated on host_is_current (a second call with nothing new on device is a cheap flag check, not a re-copy). !$acc update self runs on LEAF component names only, via associate — never the aggregate ocean_state_t/sub-state derived type (the documented rdb_ocean_dyn.F90:2949 segfault: an aggregate D->H copy overwrites the host allocatable descriptors with DEVICE addresses). Inert on a host-only build (no !$acc support) — see CLAUDE.md’s GPU-verification caveat.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle

Return Value integer(kind=c_int)

public function rdb_ocean_required_halo(pv_adv_scheme, pv_adv_scheme_len, tracer_recon, tracer_recon_len, periodic, tripolar_fold, decomposed, kappa_shear_at_vertex) result(ng) bind(c, name="rdb_ocean_required_halo")

Stateless (no handle required — like rdb_working_precision): the minimum nghost for a given scheme/topology selection, folding the six scattered per-scheme/per-topology minimums behind rdb_ocean_halo_width::required_halo so a Python caller sizing a grid’s halo before create() agrees with what engine_setup will itself enforce. A zero-length scheme string means “unset” (baseline 2), matching the Fortran function’s absent-optional-argument behaviour.

Arguments

Type IntentOptional Attributes Name
character(kind=c_char, len=1), intent(in) :: pv_adv_scheme(pv_adv_scheme_len)
integer(kind=c_int), intent(in), value :: pv_adv_scheme_len
character(kind=c_char, len=1), intent(in) :: tracer_recon(tracer_recon_len)
integer(kind=c_int), intent(in), value :: tracer_recon_len
integer(kind=c_int), intent(in), value :: periodic
integer(kind=c_int), intent(in), value :: tripolar_fold
integer(kind=c_int), intent(in), value :: decomposed
integer(kind=c_int), intent(in), value :: kappa_shear_at_vertex

Return Value integer(kind=c_int)

public function rdb_ocean_set_bathymetry(c_handle, b_data, nx_p, ny_p) result(status) bind(c, name="rdb_ocean_set_bathymetry")

Overwrite bathymetry b (m, POSITIVE DOWN) on the physical interior, fill ghosts, re-wrap the periodic/fold seam, re-derive bt_H_ref = b (the mode-split contract) and re-wrap IT too, then narrow-push b (+ bt_H_ref) — mirrors the init-time sequence at rdb_driver.F90 exactly, so a mid-run perturbation sees the same seam/BT-reference treatment the setup path does. No prognostic slot is touched.

Read more…

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
real(kind=c_double), intent(in) :: b_data(nx_p,ny_p)
integer(kind=c_int), intent(in), value :: nx_p
integer(kind=c_int), intent(in), value :: ny_p

Return Value integer(kind=c_int)

public function rdb_ocean_set_h(c_handle, h_data, nx_p, ny_p, nz_p) result(status) bind(c, name="rdb_ocean_set_h")

Overwrite h_layer on the physical interior (k=1 bed .. k=nz surface), narrow-push it, then recompute rho_layer from the new thickness against whatever T/S currently sit on device (pulling the recomputed density back to host so the host stays authoritative). No other prognostic slot is touched.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
real(kind=c_double), intent(in) :: h_data(nx_p,ny_p,nz_p)
integer(kind=c_int), intent(in), value :: nx_p
integer(kind=c_int), intent(in), value :: ny_p
integer(kind=c_int), intent(in), value :: nz_p

Return Value integer(kind=c_int)

public function rdb_ocean_set_heat_flux(c_handle, q_data, nx_p, ny_p) result(status) bind(c, name="rdb_ocean_set_heat_flux")

Overwrite net surface heat flux h%state%surface_flux%Q_heat (W/m^2) on the physical interior, narrow-push. See rdb_ocean_get_q_heat_ptr for the P2.4 unification note.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
real(kind=c_double), intent(in) :: q_data(nx_p,ny_p)
integer(kind=c_int), intent(in), value :: nx_p
integer(kind=c_int), intent(in), value :: ny_p

Return Value integer(kind=c_int)

public function rdb_ocean_set_salt_flux(c_handle, q_data, nx_p, ny_p) result(status) bind(c, name="rdb_ocean_set_salt_flux")

Overwrite net surface salt flux h%state%surface_flux%Q_salt on the physical interior, narrow-push. See rdb_ocean_get_q_heat_ptr for the P2.4 unification note.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
real(kind=c_double), intent(in) :: q_data(nx_p,ny_p)
integer(kind=c_int), intent(in), value :: nx_p
integer(kind=c_int), intent(in), value :: ny_p

Return Value integer(kind=c_int)

public function rdb_ocean_set_tracer(c_handle, name, name_len, data, nx_p, ny_p, nz_p) result(status) bind(c, name="rdb_ocean_set_tracer")

Set the tracer named name to data (its own units — degC for temperature, PSU for salinity) on the physical interior. Verbatim the recovered ocean_set_tracer_impl sequence, generalised from hardcoded S/T to any registered tracer BY NAME: flush the windowed-advection accumulator -> refresh host (need the LIVE h_layer to form hTr = h_layer*value) -> mutate hTr on the physical interior -> narrow-push hTr -> recompute rho_layer (pulled back to host so it stays authoritative). OCEAN_STATUS_ERR_NOT_FOUND if no registered tracer matches.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
character(kind=c_char, len=1), intent(in) :: name(name_len)
integer(kind=c_int), intent(in), value :: name_len
real(kind=c_double), intent(in) :: data(nx_p,ny_p,nz_p)
integer(kind=c_int), intent(in), value :: nx_p
integer(kind=c_int), intent(in), value :: ny_p
integer(kind=c_int), intent(in), value :: nz_p

Return Value integer(kind=c_int)

public function rdb_ocean_set_u(c_handle, u_data, nx_p, ny_p, nz_p) result(status) bind(c, name="rdb_ocean_set_u")

Overwrite u_face_x_layer on the physical interior faces (nx_p+1 west faces bracketing nx_p physical columns) and narrow-push it. Does NOT re-derive hu_face_x_layer (a separate prognostic transport slot) — that stays whatever it was until the next step recomputes it.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
real(kind=c_double), intent(in) :: u_data(nx_p+1,ny_p,nz_p)
integer(kind=c_int), intent(in), value :: nx_p
integer(kind=c_int), intent(in), value :: ny_p
integer(kind=c_int), intent(in), value :: nz_p

Return Value integer(kind=c_int)

public function rdb_ocean_set_v(c_handle, v_data, nx_p, ny_p, nz_p) result(status) bind(c, name="rdb_ocean_set_v")

Overwrite v_face_y_layer on the physical interior faces (ny_p+1 south faces bracketing ny_p physical rows) and narrow-push it. See rdb_ocean_set_u for the hv_face_y_layer caveat (not re-derived).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
real(kind=c_double), intent(in) :: v_data(nx_p,ny_p+1,nz_p)
integer(kind=c_int), intent(in), value :: nx_p
integer(kind=c_int), intent(in), value :: ny_p
integer(kind=c_int), intent(in), value :: nz_p

Return Value integer(kind=c_int)

public function rdb_ocean_set_wind(c_handle, taux_data, tauy_data, nx_p, ny_p) result(status) bind(c, name="rdb_ocean_set_wind")

Overwrite the C-grid surface wind stress (N/m^2) mid-run: taux_data is (nx_p+1, ny_p) (east faces), tauy_data is (nx_p, ny_p+1) (north faces) over the physical interior; ghost faces are left untouched (0 from init — wall faces see no spurious stress). Narrow-pushes tau_x/tau_y only. Settable repeatedly for a time-varying wind schedule.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
real(kind=c_double), intent(in) :: taux_data(nx_p+1,ny_p)
real(kind=c_double), intent(in) :: tauy_data(nx_p,ny_p+1)
integer(kind=c_int), intent(in), value :: nx_p
integer(kind=c_int), intent(in), value :: ny_p

Return Value integer(kind=c_int)

public function rdb_ocean_stage_bathymetry(c_handle, b_data, nx_p, ny_p, convention) result(status) bind(c, name="rdb_ocean_stage_bathymetry")

P2.5: stage an interior-sized (nx_p, ny_p) bathymetry array on the PENDING handle c_handle (rdb_ocean_create_pending). Consumed by engine_setup inside rdb_ocean_create_finalize — see rdb_ocean_bathymetry_inject for the sign-normalisation + wet-fraction validation the array goes through THERE (not here: shape can’t be checked against nx_phys/ny_phys until the grid exists, which engine_setup builds).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
real(kind=c_double), intent(in) :: b_data(nx_p,ny_p)
integer(kind=c_int), intent(in), value :: nx_p
integer(kind=c_int), intent(in), value :: ny_p
integer(kind=c_int), intent(in), value :: convention

BATHY_CONVENTION_DEPTH_POSITIVE_DOWN (1) or _HEIGHT_POSITIVE_UP (2) — REQUIRED, no default (D6.2: sign is the single most dangerous argument in this API). Any other value is rejected at create_finalize time (not here).

Return Value integer(kind=c_int)

public function rdb_ocean_stage_metrics(c_handle, x, y, dx, dy, area, nxp, nyp, nx, ny) result(status) bind(c, name="rdb_ocean_stage_metrics")

P2.5: stage in-memory MOM6-style supergrid arrays on the PENDING handle c_handle — metrics_assemble_from_supergrid_arrays’s exact layout (x/y: (nxp,nyp) degrees; dx: (nx,nyp) m; dy: (nxp,ny) m; area: (nx,ny) m^2, where nxp=2*nx_phys+1, nyp=2*ny_phys+1, nx=2*nx_phys, ny=2*ny_phys). Consumed inside rdb_ocean_create_finalize, bypassing cfg%ocean%grid%grid_config entirely — exports the SAME assembler the NetCDF supergrid reader and the analytic tripolar generator already use, so this and a mosaic-file grid produce identical metrics for the identical arrays. Shape is validated at create_finalize time (against the grid, which does not exist yet here).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
real(kind=c_double), intent(in) :: x(nxp,nyp)
real(kind=c_double), intent(in) :: y(nxp,nyp)
real(kind=c_double), intent(in) :: dx(nx,nyp)
real(kind=c_double), intent(in) :: dy(nxp,ny)
real(kind=c_double), intent(in) :: area(nx,ny)
integer(kind=c_int), intent(in), value :: nxp
integer(kind=c_int), intent(in), value :: nyp
integer(kind=c_int), intent(in), value :: nx
integer(kind=c_int), intent(in), value :: ny

Return Value integer(kind=c_int)

public function rdb_ocean_stage_topology(c_handle, periodic_x, periodic_y) result(status) bind(c, name="rdb_ocean_stage_topology")

P2.5: stage Oceananigans-style grid topology (per-dimension periodicity — “the grid owns periodicity”, not the per-edge &ocean_bc_nml tags) on the PENDING handle c_handle. Consumed inside rdb_ocean_create_finalize via ocean_bc_state_set_topology, run AFTER the namelist edge tags are parsed and OVERRIDING whatever they derived for periodic_x/periodic_y (an axis NOT marked periodic here keeps whatever physical BC the namelist gave it).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
integer(kind=c_int), intent(in), value :: periodic_x

Nonzero = periodic on that axis.

integer(kind=c_int), intent(in), value :: periodic_y

Nonzero = periodic on that axis.

Return Value integer(kind=c_int)

public function rdb_ocean_step(c_handle, n_steps) result(status) bind(c, name="rdb_ocean_step")

Advance n_steps fixed-dt (cfg%dt_fixed) outer steps via the shared engine_step / engine_step_ice / engine_step_finalize sequence (P2.4 + P2.4b) — the SAME calls driver_run_ocean’s time loop makes: the dyn-core advance, then sea-ice per-step physics (engine_step_ice — a no-op when &ocean_ice_nml enable = .false., so this is bit-identical to before P2.4b for every non-ice config), then surface-flux-component assembly / the diag step. n_steps <= 0 is a successful no-op (mirrors an empty range, not an error).

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in), value :: c_handle
integer(kind=c_int), intent(in), value :: n_steps

Return Value integer(kind=c_int)

public function rdb_working_precision() result(bytes) bind(c, name="rdb_working_precision")

Bytes per wp (4 or 8) — so a Python caller resolves float32 vs float64 at load time instead of guessing. No handle needed: this is a build-time constant.

Arguments

None

Return Value integer(kind=c_int)

private pure function cell_area_weighted_sum(f, area, ng, nxp, nyp) result(total)

sum_k sum_ij f(i,j,k)*area(i,j) over the physical interior.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: f(:,:,:)
real(kind=wp), intent(in) :: area(:,:)
integer, intent(in) :: ng
integer, intent(in) :: nxp
integer, intent(in) :: nyp

Return Value real(kind=wp)

private function handle_has_area(h) result(has_area)

True when the handle’s metrics carry a full ghosted areaT (every grid the engine builds does); anything else falls back to grid%dx*grid%dy.

Arguments

Type IntentOptional Attributes Name
type(ocean_handle_t), intent(in), pointer :: h

Return Value logical

private function resolve_ocean(c_handle, h) result(status)

Resolve + verify a handle is a live, fully-initialised ocean simulation. Every query/step entry point funnels through this so the bad-handle and not-yet-initialised cases are reported with one consistent status code each, in one place.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in) :: c_handle
type(ocean_handle_t), intent(out), pointer :: h

Return Value integer(kind=c_int)

private function resolve_ocean_pending(c_handle, h) result(status)

P2.5: resolve + verify a handle is a live, PENDING (not yet finalised) ocean simulation — the window every rdb_ocean_stage_* geometry-injection call requires. Mirrors resolve_ocean’s shape, checking is_pending instead of is_initialised.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in) :: c_handle
type(ocean_handle_t), intent(out), pointer :: h

Return Value integer(kind=c_int)

private pure function shape_matches_interior(h, nx_p, ny_p, nz_p) result(ok)

True iff (nx_p, ny_p, nz_p) matches the live handle’s physical interior shape (grid%nx_phys, grid%ny_phys, multilayer%nz_ml) — the shape every P2 3D setter’s caller- supplied array must have.

Arguments

Type IntentOptional Attributes Name
type(ocean_handle_t), intent(in), pointer :: h
integer(kind=c_int), intent(in) :: nx_p
integer(kind=c_int), intent(in) :: ny_p
integer(kind=c_int), intent(in) :: nz_p

Return Value logical

private pure function tracer_index_by_name(h, name) result(idx)

Registry index (1-based) of the tracer named name, or 0 if none matches. Name comparison is trim-both-sides (registry names are fixed-length character(len=32)).

Arguments

Type IntentOptional Attributes Name
type(ocean_handle_t), intent(in), pointer :: h
character(len=*), intent(in) :: name

Return Value integer


Subroutines

public subroutine rdb_flush_logs() bind(c, name="rdb_flush_logs")

Flush the buffered log stream (unit 6 / stdout — what pic_logger’s global_logger writes to; it exposes no flush of its own). Call this in a finally around a C entry point if the human-readable log needs to be ordered relative to Python’s own stdout (D4.4) — the ring (above) is still the only channel to trust for the SPECIFIC failure reason.

Arguments

None

private subroutine build_pending_handle(text, c_handle, h, status)

Shared prefix of rdb_ocean_create_from_string AND rdb_ocean_create_pending (P2.5): allocate a handle, parse + validate the config, check dt_fixed. Does NOT touch g_handle_live — callers set it themselves once they know which of the two flows they are in (immediate complete_ocean_create vs staying pending for geometry injection).

Read more…

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: text
type(c_ptr), intent(out) :: c_handle
type(ocean_handle_t), intent(out), pointer :: h
integer(kind=c_int), intent(out) :: status

private subroutine c_to_f_string(c_str, c_len, f_str)

Convert a bind(c) character(kind=c_char) buffer + explicit length into a Fortran allocatable string. No null-termination assumption — c_len is authoritative (matches the recovered precedent’s convention).

Arguments

Type IntentOptional Attributes Name
character(kind=c_char, len=1), intent(in) :: c_str(c_len)
integer(kind=c_int), intent(in) :: c_len
character(len=:), intent(out), allocatable :: f_str

private subroutine complete_ocean_create(c_handle, h, status)

Shared tail of rdb_ocean_create_from_string AND rdb_ocean_create_finalize (P2.5): engine_setup -> resolved-n_inner check -> engine_enter_data -> finalize handle bookkeeping. Consumes whatever geometry h%engine%staged_* fields carry (empty/unset for the single-call path — byte-identical to before P2.5). On any failure, destroys the WHOLE handle (F9) and clears the single-live-handle guard; c_handle is c_null_ptr and h is null on return in that case, matching rdb_ocean_destroy’s out-null convention.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(inout) :: c_handle
type(ocean_handle_t), intent(inout), pointer :: h
integer(kind=c_int), intent(out) :: status

private subroutine fill_getter_2d(ptr, nx, ny, gen, arr, step)

2D counterpart of fill_getter_3d.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: gen
real(kind=wp), intent(in), pointer :: arr(:,:)
integer, intent(in) :: step

private subroutine fill_getter_3d(ptr, nx, ny, nz, gen, arr, step)

Shared tail of every 3D P2 getter: base-address c_loc, actual array extents (never assumed from grid metadata — read straight off the pointer), and the generation stamp. arr must already be pointer-associated with a live, non-empty state array.

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(out) :: ptr
integer(kind=c_int), intent(out) :: nx
integer(kind=c_int), intent(out) :: ny
integer(kind=c_int), intent(out) :: nz
integer(kind=c_int), intent(out) :: gen
real(kind=wp), intent(in), pointer :: arr(:,:,:)
integer, intent(in) :: step

private subroutine ocean_handle_refresh_host(h)

Lazy D->H refresh of every P2-exposed leaf array, gated on h%host_is_current. !$acc update self on LEAF component names only, via associate — never the aggregate ocean_state_t/ sub-state derived type (rdb_ocean_dyn.F90:2949). Inert on a host-only build.

Arguments

Type IntentOptional Attributes Name
type(ocean_handle_t), intent(inout), pointer :: h