rdb_ocean_create_finalize Function

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.

On success, c_handle is unchanged (same pointer value, now fully initialised) — call the ordinary P2 accessors/rdb_ocean_step on it from here. On failure, the WHOLE handle is destroyed (F9) and c_handle is set to c_null_ptr — same out-null convention as rdb_ocean_destroy, since (unlike create_from_string, whose caller only ever sees a handle on success) a caller here already holds a handle value going in.

Arguments

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

Return Value integer(kind=c_int)


Calls

proc~~rdb_ocean_create_finalize~~CallsGraph proc~rdb_ocean_create_finalize rdb_ocean_create_finalize proc~complete_ocean_create complete_ocean_create proc~rdb_ocean_create_finalize->proc~complete_ocean_create proc~error_ring_clear error_ring_clear proc~rdb_ocean_create_finalize->proc~error_ring_clear proc~error_ring_push error_ring_push proc~rdb_ocean_create_finalize->proc~error_ring_push proc~handle_check handle_check proc~rdb_ocean_create_finalize->proc~handle_check proc~complete_ocean_create->proc~error_ring_push proc~engine_enter_data engine_enter_data proc~complete_ocean_create->proc~engine_enter_data proc~engine_setup engine_setup proc~complete_ocean_create->proc~engine_setup proc~handle_destroy handle_destroy proc~complete_ocean_create->proc~handle_destroy interface~ocean_halo_face_x ocean_halo_face_x proc~engine_enter_data->interface~ocean_halo_face_x proc~ocean_dyn_enable_bt_wide ocean_dyn_enable_bt_wide proc~engine_enter_data->proc~ocean_dyn_enable_bt_wide proc~ocean_halo_bt_group_2d ocean_halo_bt_group_2d proc~engine_enter_data->proc~ocean_halo_bt_group_2d proc~ocean_halo_bt_group_2d_wide ocean_halo_bt_group_2d_wide proc~engine_enter_data->proc~ocean_halo_bt_group_2d_wide proc~ocean_halo_exchange_ml_state ocean_halo_exchange_ml_state proc~engine_enter_data->proc~ocean_halo_exchange_ml_state proc~ocean_state_enter_data ocean_state_enter_data proc~engine_enter_data->proc~ocean_state_enter_data f_rows f_rows proc~engine_setup->f_rows info info proc~engine_setup->info interface~ocean_fold_north_corner ocean_fold_north_corner proc~engine_setup->interface~ocean_fold_north_corner interface~ocean_halo_centre ocean_halo_centre proc~engine_setup->interface~ocean_halo_centre proc~engine_setup->interface~ocean_halo_face_x proc~bt_halo_auto_exclusion bt_halo_auto_exclusion proc~engine_setup->proc~bt_halo_auto_exclusion proc~configure_ocean_bc configure_ocean_bc proc~engine_setup->proc~configure_ocean_bc proc~configure_ocean_bt configure_ocean_bt proc~engine_setup->proc~configure_ocean_bt proc~configure_ocean_bt_split configure_ocean_bt_split proc~engine_setup->proc~configure_ocean_bt_split proc~configure_ocean_cavity configure_ocean_cavity proc~engine_setup->proc~configure_ocean_cavity proc~configure_ocean_cavity_melt configure_ocean_cavity_melt proc~engine_setup->proc~configure_ocean_cavity_melt proc~configure_ocean_closed_faces configure_ocean_closed_faces proc~engine_setup->proc~configure_ocean_closed_faces proc~configure_ocean_drag configure_ocean_drag proc~engine_setup->proc~configure_ocean_drag proc~configure_ocean_forcing configure_ocean_forcing proc~engine_setup->proc~configure_ocean_forcing proc~configure_ocean_hdiff configure_ocean_hdiff proc~engine_setup->proc~configure_ocean_hdiff proc~configure_ocean_k_bot configure_ocean_k_bot proc~engine_setup->proc~configure_ocean_k_bot proc~configure_ocean_k_top configure_ocean_k_top proc~engine_setup->proc~configure_ocean_k_top proc~configure_ocean_land_mask configure_ocean_land_mask proc~engine_setup->proc~configure_ocean_land_mask proc~configure_ocean_lateral configure_ocean_lateral proc~engine_setup->proc~configure_ocean_lateral proc~configure_ocean_metrics configure_ocean_metrics proc~engine_setup->proc~configure_ocean_metrics proc~configure_ocean_p_surf configure_ocean_p_surf proc~engine_setup->proc~configure_ocean_p_surf proc~configure_ocean_pgf configure_ocean_pgf proc~engine_setup->proc~configure_ocean_pgf proc~configure_ocean_porous configure_ocean_porous proc~engine_setup->proc~configure_ocean_porous proc~configure_ocean_reference_density configure_ocean_reference_density proc~engine_setup->proc~configure_ocean_reference_density proc~configure_ocean_sponge configure_ocean_sponge proc~engine_setup->proc~configure_ocean_sponge proc~configure_ocean_tides configure_ocean_tides proc~engine_setup->proc~configure_ocean_tides proc~configure_ocean_top_drag configure_ocean_top_drag proc~engine_setup->proc~configure_ocean_top_drag proc~configure_ocean_tracers configure_ocean_tracers proc~engine_setup->proc~configure_ocean_tracers proc~configure_ocean_vmix configure_ocean_vmix proc~engine_setup->proc~configure_ocean_vmix proc~configure_ocean_wave_drag configure_ocean_wave_drag proc~engine_setup->proc~configure_ocean_wave_drag proc~configure_ocean_wetdry configure_ocean_wetdry proc~engine_setup->proc~configure_ocean_wetdry proc~configure_ocean_z_fixed_profile configure_ocean_z_fixed_profile proc~engine_setup->proc~configure_ocean_z_fixed_profile proc~decomp_auto_factor decomp_auto_factor proc~engine_setup->proc~decomp_auto_factor proc~decomp_init_from_config decomp_init_from_config proc~engine_setup->proc~decomp_init_from_config proc~decomp_log_summary decomp_log_summary proc~engine_setup->proc~decomp_log_summary proc~engine_configure_diag engine_configure_diag proc~engine_setup->proc~engine_configure_diag proc~fail fail proc~engine_setup->proc~fail proc~grid_init hgrid_t%grid_init proc~engine_setup->proc~grid_init proc~ice_evp_params_from_config ice_evp_params_from_config proc~engine_setup->proc~ice_evp_params_from_config proc~ice_ic_params_from_config ice_ic_params_from_config proc~engine_setup->proc~ice_ic_params_from_config proc~ice_init_apply ice_init_apply proc~engine_setup->proc~ice_init_apply proc~ice_ocean_stress_resume_apply ice_ocean_stress_resume_apply proc~engine_setup->proc~ice_ocean_stress_resume_apply proc~isopycnal_vanish_tol isopycnal_vanish_tol proc~engine_setup->proc~isopycnal_vanish_tol proc~metrics_assemble_from_supergrid_arrays metrics_assemble_from_supergrid_arrays proc~engine_setup->proc~metrics_assemble_from_supergrid_arrays proc~metrics_finalize metrics_finalize proc~engine_setup->proc~metrics_finalize proc~metrics_fold_periodic_ghosts metrics_fold_periodic_ghosts proc~engine_setup->proc~metrics_fold_periodic_ghosts proc~ocean_bc_state_set_edges ocean_bc_state_set_edges proc~engine_setup->proc~ocean_bc_state_set_edges proc~ocean_bc_state_set_topology ocean_bc_state_set_topology proc~engine_setup->proc~ocean_bc_state_set_topology proc~ocean_bc_type_from_string ocean_bc_type_from_string proc~engine_setup->proc~ocean_bc_type_from_string proc~ocean_data_forcing_configure ocean_data_forcing_configure proc~engine_setup->proc~ocean_data_forcing_configure proc~ocean_fold_exchange_init ocean_fold_exchange_init proc~engine_setup->proc~ocean_fold_exchange_init proc~ocean_fold_exchange_reserve ocean_fold_exchange_reserve proc~engine_setup->proc~ocean_fold_exchange_reserve proc~ocean_fold_wrap_eta_2d ocean_fold_wrap_eta_2d proc~engine_setup->proc~ocean_fold_wrap_eta_2d proc~ocean_fold_wrap_state ocean_fold_wrap_state proc~engine_setup->proc~ocean_fold_wrap_state proc~ocean_halo_exchange_ice_state ocean_halo_exchange_ice_state proc~engine_setup->proc~ocean_halo_exchange_ice_state proc~engine_setup->proc~ocean_halo_exchange_ml_state proc~ocean_halo_init ocean_halo_init proc~engine_setup->proc~ocean_halo_init proc~ocean_halo_reserve ocean_halo_reserve proc~engine_setup->proc~ocean_halo_reserve proc~ocean_kappa_shear_init_vertex ocean_kappa_shear_t%ocean_kappa_shear_init_vertex proc~engine_setup->proc~ocean_kappa_shear_init_vertex proc~ocean_periodic_wrap_centre_2d ocean_periodic_wrap_centre_2d proc~engine_setup->proc~ocean_periodic_wrap_centre_2d proc~ocean_periodic_wrap_state ocean_periodic_wrap_state proc~engine_setup->proc~ocean_periodic_wrap_state proc~ocean_pressure_force_set_bathymetry ocean_pressure_force_t%ocean_pressure_force_set_bathymetry proc~engine_setup->proc~ocean_pressure_force_set_bathymetry proc~ocean_sponge_snapshot_reference ocean_sponge_snapshot_reference proc~engine_setup->proc~ocean_sponge_snapshot_reference proc~ocean_stability_audit ocean_stability_audit proc~engine_setup->proc~ocean_stability_audit proc~ocean_state_init_from_config ocean_state_t%ocean_state_init_from_config proc~engine_setup->proc~ocean_state_init_from_config proc~ocean_state_restart_read ocean_state_restart_read proc~engine_setup->proc~ocean_state_restart_read proc~ocean_state_seed_from_cfg ocean_state_seed_from_cfg proc~engine_setup->proc~ocean_state_seed_from_cfg proc~ocean_surfflux_set_components ocean_surface_flux_t%ocean_surfflux_set_components proc~engine_setup->proc~ocean_surfflux_set_components proc~ocean_surfflux_set_const ocean_surface_flux_t%ocean_surfflux_set_const proc~engine_setup->proc~ocean_surfflux_set_const proc~ocean_surfflux_set_p_surf_const ocean_surface_flux_t%ocean_surfflux_set_p_surf_const proc~engine_setup->proc~ocean_surfflux_set_p_surf_const proc~ocean_surfflux_set_restore ocean_surface_flux_t%ocean_surfflux_set_restore proc~engine_setup->proc~ocean_surfflux_set_restore proc~ocean_surfflux_set_sw ocean_surface_flux_t%ocean_surfflux_set_sw proc~engine_setup->proc~ocean_surfflux_set_sw proc~ocean_vcoord_build_zref_full ocean_vcoord_t%ocean_vcoord_build_zref_full proc~engine_setup->proc~ocean_vcoord_build_zref_full proc~output_rank_filename output_rank_filename proc~engine_setup->proc~output_rank_filename proc~parse_ocean_vcoord_type parse_ocean_vcoord_type proc~engine_setup->proc~parse_ocean_vcoord_type proc~parse_remap_method parse_remap_method proc~engine_setup->proc~parse_remap_method proc~register_default_tracers register_default_tracers proc~engine_setup->proc~register_default_tracers proc~resolve_bt_halo resolve_bt_halo proc~engine_setup->proc~resolve_bt_halo proc~setup_failed setup_failed proc~engine_setup->proc~setup_failed to_string to_string proc~engine_setup->to_string warning warning proc~engine_setup->warning

Variables

Type Visibility Attributes Name Initial
type(ocean_handle_t), private, pointer :: h
integer, private :: hstat

Source Code

   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`.
      !!
      !! On success, `c_handle` is unchanged (same pointer value, now fully
      !! initialised) — call the ordinary P2 accessors/`rdb_ocean_step`
      !! on it from here. On failure, the WHOLE handle is destroyed (F9)
      !! and `c_handle` is set to `c_null_ptr` — same out-null convention
      !! as `rdb_ocean_destroy`, since (unlike `create_from_string`,
      !! whose caller only ever sees a handle on success) a caller here
      !! already holds a handle value going in.
      type(c_ptr), intent(inout) :: c_handle
      integer(c_int) :: status

      type(ocean_handle_t), pointer :: h
      integer :: hstat

      call error_ring_clear()
      hstat = handle_check(c_handle, h)
      if (hstat /= HANDLE_OK) then
         status = int(OCEAN_STATUS_ERR_BAD_HANDLE, c_int)
         return
      end if
      if (.not. h%is_pending) then
         call error_ring_push("rdb_ocean_create_finalize: handle is not in the "// &
                              "pending (staging) window — call rdb_ocean_create_pending "// &
                              "first (this handle may already have been finalised)")
         status = int(OCEAN_STATUS_ERR_NOT_PENDING, c_int)
         return
      end if

      call complete_ocean_create(c_handle, h, status)
   end function rdb_ocean_create_finalize