handle_check Function

public function handle_check(c_handle, h) result(status)

Resolve an opaque c_ptr to a Fortran pointer and verify it.

On success: h is associated and status == HANDLE_OK. On failure: h is null and status is one of HANDLE_ERR_*. Callers in rdb_ocean_api translate this into the ocean status code table (OCEAN_STATUS_ERR_BAD_HANDLE).

Arguments

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

Return Value integer


Called by

proc~~handle_check~~CalledByGraph proc~handle_check handle_check proc~build_pending_handle build_pending_handle proc~build_pending_handle->proc~handle_check proc~rdb_ocean_create_finalize rdb_ocean_create_finalize proc~rdb_ocean_create_finalize->proc~handle_check proc~rdb_ocean_destroy rdb_ocean_destroy proc~rdb_ocean_destroy->proc~handle_check proc~resolve_ocean resolve_ocean proc~resolve_ocean->proc~handle_check proc~resolve_ocean_pending resolve_ocean_pending proc~resolve_ocean_pending->proc~handle_check proc~rdb_ocean_create_from_string rdb_ocean_create_from_string proc~rdb_ocean_create_from_string->proc~build_pending_handle proc~rdb_ocean_create_pending rdb_ocean_create_pending proc~rdb_ocean_create_pending->proc~build_pending_handle proc~rdb_ocean_get_b_ptr rdb_ocean_get_b_ptr proc~rdb_ocean_get_b_ptr->proc~resolve_ocean proc~rdb_ocean_get_bt_eta_ptr rdb_ocean_get_bt_eta_ptr proc~rdb_ocean_get_bt_eta_ptr->proc~resolve_ocean proc~rdb_ocean_get_diag_count rdb_ocean_get_diag_count proc~rdb_ocean_get_diag_count->proc~resolve_ocean proc~rdb_ocean_get_diagnostic_ptr rdb_ocean_get_diagnostic_ptr proc~rdb_ocean_get_diagnostic_ptr->proc~resolve_ocean proc~rdb_ocean_get_grid_info rdb_ocean_get_grid_info proc~rdb_ocean_get_grid_info->proc~resolve_ocean proc~rdb_ocean_get_h_layer_ptr rdb_ocean_get_h_layer_ptr proc~rdb_ocean_get_h_layer_ptr->proc~resolve_ocean proc~rdb_ocean_get_hu_ptr rdb_ocean_get_hu_ptr proc~rdb_ocean_get_hu_ptr->proc~resolve_ocean proc~rdb_ocean_get_hv_ptr rdb_ocean_get_hv_ptr proc~rdb_ocean_get_hv_ptr->proc~resolve_ocean proc~rdb_ocean_get_kinetic_energy rdb_ocean_get_kinetic_energy proc~rdb_ocean_get_kinetic_energy->proc~resolve_ocean proc~rdb_ocean_get_ks_ptr rdb_ocean_get_ks_ptr proc~rdb_ocean_get_ks_ptr->proc~resolve_ocean proc~rdb_ocean_get_kt_ptr rdb_ocean_get_kt_ptr proc~rdb_ocean_get_kt_ptr->proc~resolve_ocean proc~rdb_ocean_get_kv_ptr rdb_ocean_get_kv_ptr proc~rdb_ocean_get_kv_ptr->proc~resolve_ocean proc~rdb_ocean_get_q_heat_ptr rdb_ocean_get_q_heat_ptr proc~rdb_ocean_get_q_heat_ptr->proc~resolve_ocean proc~rdb_ocean_get_q_salt_ptr rdb_ocean_get_q_salt_ptr proc~rdb_ocean_get_q_salt_ptr->proc~resolve_ocean proc~rdb_ocean_get_rho_layer_ptr rdb_ocean_get_rho_layer_ptr proc~rdb_ocean_get_rho_layer_ptr->proc~resolve_ocean proc~rdb_ocean_get_step_count rdb_ocean_get_step_count proc~rdb_ocean_get_step_count->proc~resolve_ocean proc~rdb_ocean_get_tau_x_ptr rdb_ocean_get_tau_x_ptr proc~rdb_ocean_get_tau_x_ptr->proc~resolve_ocean proc~rdb_ocean_get_tau_y_ptr rdb_ocean_get_tau_y_ptr proc~rdb_ocean_get_tau_y_ptr->proc~resolve_ocean proc~rdb_ocean_get_time rdb_ocean_get_time proc~rdb_ocean_get_time->proc~resolve_ocean proc~rdb_ocean_get_total_mass rdb_ocean_get_total_mass proc~rdb_ocean_get_total_mass->proc~resolve_ocean proc~rdb_ocean_get_tracer_count rdb_ocean_get_tracer_count proc~rdb_ocean_get_tracer_count->proc~resolve_ocean proc~rdb_ocean_get_tracer_ptr rdb_ocean_get_tracer_ptr proc~rdb_ocean_get_tracer_ptr->proc~resolve_ocean proc~rdb_ocean_get_u_face_x_layer_ptr rdb_ocean_get_u_face_x_layer_ptr proc~rdb_ocean_get_u_face_x_layer_ptr->proc~resolve_ocean proc~rdb_ocean_get_v_face_y_layer_ptr rdb_ocean_get_v_face_y_layer_ptr proc~rdb_ocean_get_v_face_y_layer_ptr->proc~resolve_ocean proc~rdb_ocean_get_w_interface_ptr rdb_ocean_get_w_interface_ptr proc~rdb_ocean_get_w_interface_ptr->proc~resolve_ocean proc~rdb_ocean_get_wet_t_ptr rdb_ocean_get_wet_t_ptr proc~rdb_ocean_get_wet_t_ptr->proc~resolve_ocean proc~rdb_ocean_list_diags rdb_ocean_list_diags proc~rdb_ocean_list_diags->proc~resolve_ocean proc~rdb_ocean_list_tracers rdb_ocean_list_tracers proc~rdb_ocean_list_tracers->proc~resolve_ocean proc~rdb_ocean_refresh_host rdb_ocean_refresh_host proc~rdb_ocean_refresh_host->proc~resolve_ocean proc~rdb_ocean_set_bathymetry rdb_ocean_set_bathymetry proc~rdb_ocean_set_bathymetry->proc~resolve_ocean proc~rdb_ocean_set_h rdb_ocean_set_h proc~rdb_ocean_set_h->proc~resolve_ocean proc~rdb_ocean_set_heat_flux rdb_ocean_set_heat_flux proc~rdb_ocean_set_heat_flux->proc~resolve_ocean proc~rdb_ocean_set_salt_flux rdb_ocean_set_salt_flux proc~rdb_ocean_set_salt_flux->proc~resolve_ocean proc~rdb_ocean_set_tracer rdb_ocean_set_tracer proc~rdb_ocean_set_tracer->proc~resolve_ocean proc~rdb_ocean_set_u rdb_ocean_set_u proc~rdb_ocean_set_u->proc~resolve_ocean proc~rdb_ocean_set_v rdb_ocean_set_v proc~rdb_ocean_set_v->proc~resolve_ocean proc~rdb_ocean_set_wind rdb_ocean_set_wind proc~rdb_ocean_set_wind->proc~resolve_ocean proc~rdb_ocean_stage_bathymetry rdb_ocean_stage_bathymetry proc~rdb_ocean_stage_bathymetry->proc~resolve_ocean_pending proc~rdb_ocean_stage_metrics rdb_ocean_stage_metrics proc~rdb_ocean_stage_metrics->proc~resolve_ocean_pending proc~rdb_ocean_stage_topology rdb_ocean_stage_topology proc~rdb_ocean_stage_topology->proc~resolve_ocean_pending proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~resolve_ocean

Source Code

   function handle_check(c_handle, h) result(status)
      !! Resolve an opaque `c_ptr` to a Fortran pointer and verify it.
      !!
      !! On success: `h` is associated and `status == HANDLE_OK`.
      !! On failure: `h` is null and `status` is one of `HANDLE_ERR_*`.
      !! Callers in `rdb_ocean_api` translate this into the ocean status
      !! code table (`OCEAN_STATUS_ERR_BAD_HANDLE`).
      type(c_ptr), intent(in) :: c_handle
      type(ocean_handle_t), pointer, intent(out) :: h
      integer :: status

      h => null()
      if (.not. c_associated(c_handle)) then
         status = HANDLE_ERR_NULL
         return
      end if
      call c_f_pointer(c_handle, h)
      if (h%magic /= MAGIC_OCEAN) then
         h => null()
         status = HANDLE_ERR_INVALID
         return
      end if
      status = HANDLE_OK
   end function handle_check