fail Subroutine

public subroutine fail(msg, ierr, code)

Push msg to the error ring, log it (unchanged behaviour), then either set ierr = code and return (caller must return immediately after this call) or error stop msg when ierr is absent. See the module docstring for the full contract.

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: msg
integer, intent(out), optional :: ierr
integer, intent(in) :: code

Calls

proc~~fail~~CallsGraph proc~fail fail error error proc~fail->error proc~error_ring_push error_ring_push proc~fail->proc~error_ring_push

Called by

proc~~fail~~CalledByGraph proc~fail fail proc~apply_layer_rho_init apply_layer_rho_init proc~apply_layer_rho_init->proc~fail proc~bathymetry_normalise_sign bathymetry_normalise_sign proc~bathymetry_normalise_sign->proc~fail proc~check_time_mode check_time_mode proc~check_time_mode->proc~fail proc~configure_obc_edge_nodal configure_obc_edge_nodal proc~configure_obc_edge_nodal->proc~fail proc~configure_ocean_bc configure_ocean_bc proc~configure_ocean_bc->proc~fail proc~configure_ocean_bc->proc~configure_obc_edge_nodal proc~configure_ocean_cavity configure_ocean_cavity proc~configure_ocean_cavity->proc~fail proc~configure_ocean_cavity_melt configure_ocean_cavity_melt proc~configure_ocean_cavity_melt->proc~fail proc~configure_ocean_closed_faces configure_ocean_closed_faces proc~configure_ocean_closed_faces->proc~fail proc~refuse_open_zfixed_staircase refuse_open_zfixed_staircase proc~configure_ocean_closed_faces->proc~refuse_open_zfixed_staircase proc~configure_ocean_conv configure_ocean_conv proc~configure_ocean_conv->proc~fail proc~configure_ocean_ddiff configure_ocean_ddiff proc~configure_ocean_ddiff->proc~fail proc~configure_ocean_drag configure_ocean_drag proc~configure_ocean_drag->proc~fail proc~configure_ocean_epbl configure_ocean_epbl proc~configure_ocean_epbl->proc~fail proc~configure_ocean_foxkemper configure_ocean_foxkemper proc~configure_ocean_foxkemper->proc~fail proc~configure_ocean_kappa_shear configure_ocean_kappa_shear proc~configure_ocean_kappa_shear->proc~fail proc~configure_ocean_lateral configure_ocean_lateral proc~configure_ocean_lateral->proc~fail proc~configure_ocean_lateral->proc~configure_ocean_conv proc~configure_ocean_lateral->proc~configure_ocean_ddiff proc~configure_ocean_lateral->proc~configure_ocean_epbl proc~configure_ocean_lateral->proc~configure_ocean_foxkemper proc~configure_ocean_lateral->proc~configure_ocean_kappa_shear proc~configure_ocean_tidal_mixing configure_ocean_tidal_mixing proc~configure_ocean_lateral->proc~configure_ocean_tidal_mixing proc~configure_ocean_wavespeed configure_ocean_wavespeed proc~configure_ocean_lateral->proc~configure_ocean_wavespeed proc~configure_ocean_metrics configure_ocean_metrics proc~configure_ocean_metrics->proc~fail proc~metrics_fill_from_supergrid metrics_fill_from_supergrid proc~configure_ocean_metrics->proc~metrics_fill_from_supergrid proc~configure_ocean_pgf configure_ocean_pgf proc~configure_ocean_pgf->proc~fail proc~eos_validate eos_validate proc~configure_ocean_pgf->proc~eos_validate proc~configure_ocean_porous configure_ocean_porous proc~configure_ocean_porous->proc~fail proc~configure_ocean_tidal_mixing->proc~fail proc~configure_ocean_tides configure_ocean_tides proc~configure_ocean_tides->proc~fail proc~parse_constituent_list parse_constituent_list proc~configure_ocean_tides->proc~parse_constituent_list proc~configure_ocean_vmix configure_ocean_vmix proc~configure_ocean_vmix->proc~fail proc~configure_ocean_wave_drag configure_ocean_wave_drag proc~configure_ocean_wave_drag->proc~fail proc~configure_ocean_wavespeed->proc~fail proc~engine_setup engine_setup proc~engine_setup->proc~fail proc~engine_setup->proc~configure_ocean_bc proc~engine_setup->proc~configure_ocean_cavity proc~engine_setup->proc~configure_ocean_cavity_melt proc~engine_setup->proc~configure_ocean_closed_faces proc~engine_setup->proc~configure_ocean_drag proc~engine_setup->proc~configure_ocean_lateral proc~engine_setup->proc~configure_ocean_metrics proc~engine_setup->proc~configure_ocean_pgf proc~engine_setup->proc~configure_ocean_porous proc~engine_setup->proc~configure_ocean_tides proc~engine_setup->proc~configure_ocean_vmix proc~engine_setup->proc~configure_ocean_wave_drag proc~ocean_fold_exchange_init ocean_fold_exchange_init proc~engine_setup->proc~ocean_fold_exchange_init 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_stability_audit ocean_stability_audit proc~engine_setup->proc~ocean_stability_audit 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~engine_configure_diag engine_configure_diag proc~engine_setup->proc~engine_configure_diag proc~ocean_data_forcing_configure ocean_data_forcing_configure proc~engine_setup->proc~ocean_data_forcing_configure proc~eos_validate->proc~fail proc~find_var find_var proc~find_var->proc~fail proc~nc_close nc_close proc~find_var->proc~nc_close proc~metrics_fill_from_supergrid->proc~fail proc~metrics_fill_from_supergrid->proc~nc_close proc~nc_get_dim_len nc_get_dim_len proc~metrics_fill_from_supergrid->proc~nc_get_dim_len proc~nc_get_var_slab_2d nc_get_var_slab_2d proc~metrics_fill_from_supergrid->proc~nc_get_var_slab_2d proc~nc_get_varid~2 nc_get_varid proc~metrics_fill_from_supergrid->proc~nc_get_varid~2 proc~nc_open_read nc_open_read proc~metrics_fill_from_supergrid->proc~nc_open_read proc~supergrid_io_ok supergrid_io_ok proc~metrics_fill_from_supergrid->proc~supergrid_io_ok proc~nc_check nc_check proc~nc_check->proc~fail proc~ocean_cavity_flux_step ocean_cavity_flux_step proc~ocean_cavity_flux_step->proc~fail proc~ocean_cavity_mass_step ocean_cavity_mass_step proc~ocean_cavity_mass_step->proc~fail proc~ocean_diag_set_output_density_levels ocean_diag_t%ocean_diag_set_output_density_levels proc~ocean_diag_set_output_density_levels->proc~fail proc~ocean_diag_set_output_sigma_levels ocean_diag_t%ocean_diag_set_output_sigma_levels proc~ocean_diag_set_output_sigma_levels->proc~fail proc~ocean_diag_set_output_z_levels ocean_diag_t%ocean_diag_set_output_z_levels proc~ocean_diag_set_output_z_levels->proc~fail proc~ocean_diag_set_output_zstar_levels ocean_diag_t%ocean_diag_set_output_zstar_levels proc~ocean_diag_set_output_zstar_levels->proc~fail proc~ocean_fold_exchange_init->proc~fail proc~ocean_halo_init->proc~fail proc~ocean_halo_reserve->proc~fail proc~ocean_stability_audit->proc~fail proc~ocean_state_restart_read->proc~fail proc~ocean_restart_read_local ocean_restart_read_local proc~ocean_state_restart_read->proc~ocean_restart_read_local proc~ocean_state_seed_from_cfg->proc~fail proc~ocean_state_seed_from_cfg->proc~apply_layer_rho_init proc~ocean_state_seed_from_cfg->proc~bathymetry_normalise_sign proc~seed_baroclinic_jet_ic seed_baroclinic_jet_ic proc~ocean_state_seed_from_cfg->proc~seed_baroclinic_jet_ic proc~seed_cavity_draft seed_cavity_draft proc~ocean_state_seed_from_cfg->proc~seed_cavity_draft proc~seed_eady_ic seed_eady_ic proc~ocean_state_seed_from_cfg->proc~seed_eady_ic proc~seed_geostrophic_adjustment_ic seed_geostrophic_adjustment_ic proc~ocean_state_seed_from_cfg->proc~seed_geostrophic_adjustment_ic proc~load_bathymetry_into_array load_bathymetry_into_array proc~ocean_state_seed_from_cfg->proc~load_bathymetry_into_array proc~seed_zinit_overlay seed_zinit_overlay proc~ocean_state_seed_from_cfg->proc~seed_zinit_overlay proc~parse_constituent_list->proc~fail proc~rdb_ocean_get_diagnostic_ptr rdb_ocean_get_diagnostic_ptr proc~rdb_ocean_get_diagnostic_ptr->proc~fail proc~rdb_ocean_get_tracer_ptr rdb_ocean_get_tracer_ptr proc~rdb_ocean_get_tracer_ptr->proc~fail proc~rdb_ocean_set_bathymetry rdb_ocean_set_bathymetry proc~rdb_ocean_set_bathymetry->proc~fail proc~rdb_ocean_set_h rdb_ocean_set_h proc~rdb_ocean_set_h->proc~fail proc~rdb_ocean_set_heat_flux rdb_ocean_set_heat_flux proc~rdb_ocean_set_heat_flux->proc~fail proc~rdb_ocean_set_salt_flux rdb_ocean_set_salt_flux proc~rdb_ocean_set_salt_flux->proc~fail proc~rdb_ocean_set_tracer rdb_ocean_set_tracer proc~rdb_ocean_set_tracer->proc~fail proc~rdb_ocean_set_u rdb_ocean_set_u proc~rdb_ocean_set_u->proc~fail proc~rdb_ocean_set_v rdb_ocean_set_v proc~rdb_ocean_set_v->proc~fail proc~rdb_ocean_set_wind rdb_ocean_set_wind proc~rdb_ocean_set_wind->proc~fail proc~read_dims read_dims proc~read_dims->proc~fail proc~read_dims->proc~nc_check proc~read_dims->proc~nc_close proc~zinit_io_ok zinit_io_ok proc~read_dims->proc~zinit_io_ok proc~refuse_open_zfixed_staircase->proc~fail proc~register_common register_common proc~register_common->proc~fail proc~register_common->proc~nc_check proc~register_common->proc~nc_close proc~nc_get_var_1d nc_get_var_1d proc~register_common->proc~nc_get_var_1d proc~register_common->proc~nc_open_read proc~data_input_read_slab_impl data_input_read_slab_impl proc~register_common->proc~data_input_read_slab_impl proc~reg_io_ok reg_io_ok proc~register_common->proc~reg_io_ok proc~register_tag register_tag proc~register_tag->proc~fail proc~ocean_data_input_register_2d ocean_data_input_register_2d proc~register_tag->proc~ocean_data_input_register_2d proc~resolve_flux_targets resolve_flux_targets proc~resolve_flux_targets->proc~fail proc~seed_baroclinic_jet_ic->proc~fail proc~seed_cavity_draft->proc~fail proc~ocean_data_input_load_static_2d ocean_data_input_load_static_2d proc~seed_cavity_draft->proc~ocean_data_input_load_static_2d proc~seed_eady_ic->proc~fail proc~seed_geostrophic_adjustment_ic->proc~fail proc~seed_ts_from_zfile seed_ts_from_zfile proc~seed_ts_from_zfile->proc~fail proc~seed_ts_from_zfile->proc~find_var proc~seed_ts_from_zfile->proc~read_dims proc~seed_ts_from_zfile->proc~nc_close proc~seed_ts_from_zfile->proc~nc_get_var_1d proc~seed_ts_from_zfile->proc~nc_open_read proc~read_field_xyz read_field_xyz proc~seed_ts_from_zfile->proc~read_field_xyz proc~seed_ts_from_zfile->proc~zinit_io_ok proc~seed_ts_linear_z seed_ts_linear_z proc~seed_ts_linear_z->proc~fail proc~segment_geometry segment_geometry proc~segment_geometry->proc~fail proc~validate_config validate_config proc~validate_config->proc~fail proc~build_pending_handle build_pending_handle proc~build_pending_handle->proc~validate_config proc~complete_ocean_create complete_ocean_create proc~complete_ocean_create->proc~engine_setup proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_setup proc~engine_step_finalize engine_step_finalize proc~driver_run_ocean->proc~engine_step_finalize proc~ocean_state_restart_write ocean_state_restart_write proc~driver_run_ocean->proc~ocean_state_restart_write proc~engine_step engine_step proc~driver_run_ocean->proc~engine_step proc~engine_teardown engine_teardown proc~driver_run_ocean->proc~engine_teardown proc~driver_validate driver_validate proc~driver_validate->proc~engine_setup proc~driver_validate->proc~engine_teardown proc~engine_configure_diag->proc~ocean_diag_set_output_density_levels proc~engine_configure_diag->proc~ocean_diag_set_output_sigma_levels proc~engine_configure_diag->proc~ocean_diag_set_output_z_levels proc~engine_configure_diag->proc~ocean_diag_set_output_zstar_levels proc~open_stream open_stream proc~engine_configure_diag->proc~open_stream proc~engine_step_finalize->proc~ocean_cavity_flux_step proc~load_bathymetry_into_array->proc~nc_check proc~load_bathymetry_into_array->proc~nc_close proc~load_bathymetry_into_array->proc~nc_get_dim_len proc~load_bathymetry_into_array->proc~nc_get_var_slab_2d proc~load_bathymetry_into_array->proc~nc_open_read proc~bathy_io_ok bathy_io_ok proc~load_bathymetry_into_array->proc~bathy_io_ok proc~nc_close->proc~nc_check proc~nc_create_file nc_create_file proc~nc_create_file->proc~nc_check proc~nc_def_dim nc_def_dim proc~nc_def_dim->proc~nc_check proc~nc_def_var_2d nc_def_var_2d proc~nc_def_var_2d->proc~nc_check proc~nc_def_var_3d nc_def_var_3d proc~nc_def_var_3d->proc~nc_check proc~nc_def_var_4d nc_def_var_4d proc~nc_def_var_4d->proc~nc_check proc~nc_emit_post_fire nc_emit_post_fire proc~nc_emit_post_fire->proc~nc_check proc~nc_put_var_3d_slice nc_put_var_3d_slice proc~nc_emit_post_fire->proc~nc_put_var_3d_slice proc~nc_put_var_3d_slice_r4 nc_put_var_3d_slice_r4 proc~nc_emit_post_fire->proc~nc_put_var_3d_slice_r4 proc~nc_put_var_4d_slice nc_put_var_4d_slice proc~nc_emit_post_fire->proc~nc_put_var_4d_slice proc~nc_put_var_4d_slice_r4 nc_put_var_4d_slice_r4 proc~nc_emit_post_fire->proc~nc_put_var_4d_slice_r4 proc~nc_enddef nc_enddef proc~nc_enddef->proc~nc_check proc~nc_get_att_int nc_get_att_int proc~nc_get_att_int->proc~nc_check proc~nc_get_dim_len->proc~nc_check proc~nc_get_var_1d->proc~nc_check proc~nc_get_var_2d nc_get_var_2d proc~nc_get_var_2d->proc~nc_check proc~nc_get_var_3d nc_get_var_3d proc~nc_get_var_3d->proc~nc_check proc~nc_get_var_slab_2d->proc~nc_check proc~nc_get_var_slab_3d nc_get_var_slab_3d proc~nc_get_var_slab_3d->proc~nc_check proc~nc_get_varid nc_get_varid proc~nc_get_varid->proc~nc_check proc~nc_get_varid~2->proc~nc_check proc~nc_open_read->proc~nc_check proc~nc_open_write nc_open_write proc~nc_open_write->proc~nc_check proc~nc_put_att nc_put_att proc~nc_put_att->proc~nc_check proc~nc_put_att_global nc_put_att_global proc~nc_put_att_global->proc~nc_check proc~nc_put_att_global_int nc_put_att_global_int proc~nc_put_att_global_int->proc~nc_check proc~nc_put_att_int nc_put_att_int proc~nc_put_att_int->proc~nc_check proc~nc_put_att_real nc_put_att_real proc~nc_put_att_real->proc~nc_check proc~nc_put_att_real_r4 nc_put_att_real_r4 proc~nc_put_att_real_r4->proc~nc_check proc~nc_put_var_2d nc_put_var_2d proc~nc_put_var_2d->proc~nc_check proc~nc_put_var_3d_slice->proc~nc_check proc~nc_put_var_3d_slice_r4->proc~nc_check proc~nc_put_var_4d_slice->proc~nc_check proc~nc_put_var_4d_slice_r4->proc~nc_check proc~ocean_data_forcing_configure->proc~check_time_mode proc~ocean_data_forcing_configure->proc~register_tag proc~ocean_data_forcing_configure->proc~resolve_flux_targets proc~ocean_data_input_register_2d->proc~register_common proc~ocean_data_input_register_3d ocean_data_input_register_3d proc~ocean_data_input_register_3d->proc~register_common proc~ocean_data_input_register_segment_2d ocean_data_input_register_segment_2d proc~ocean_data_input_register_segment_2d->proc~register_common proc~ocean_data_input_register_segment_2d->proc~segment_geometry proc~ocean_data_input_register_segment_3d ocean_data_input_register_segment_3d proc~ocean_data_input_register_segment_3d->proc~register_common proc~ocean_data_input_register_segment_3d->proc~segment_geometry proc~ocean_restart_read_local->proc~nc_check proc~ocean_restart_read_local->proc~nc_close proc~ocean_restart_read_local->proc~nc_get_varid proc~ocean_restart_read_local->proc~nc_open_read proc~ocean_restart_check_decomp ocean_restart_check_decomp proc~ocean_restart_read_local->proc~ocean_restart_check_decomp proc~ocean_restart_write_local ocean_restart_write_local proc~ocean_restart_write_local->proc~nc_check proc~ocean_restart_write_local->proc~nc_close proc~ocean_restart_write_local->proc~nc_create_file proc~ocean_restart_write_local->proc~nc_def_dim proc~ocean_restart_write_local->proc~nc_enddef proc~ocean_restart_write_local->proc~nc_put_att_global proc~ocean_restart_write_local->proc~nc_put_att_global_int proc~restart_io_ok restart_io_ok proc~ocean_restart_write_local->proc~restart_io_ok proc~rdb_def_var_1d rdb_def_var_1d proc~rdb_def_var_1d->proc~nc_check proc~rdb_put_var_1d rdb_put_var_1d proc~rdb_put_var_1d->proc~nc_check proc~rdb_put_var_2d_slice rdb_put_var_2d_slice proc~rdb_put_var_2d_slice->proc~nc_check proc~run_stage run_stage proc~run_stage->proc~ocean_cavity_mass_step proc~run_stage_split run_stage_split proc~run_stage_split->proc~ocean_cavity_mass_step proc~seed_zinit_overlay->proc~seed_ts_from_zfile proc~seed_zinit_overlay->proc~seed_ts_linear_z proc~bathy_io_ok->proc~nc_close proc~close_stream close_stream proc~close_stream->proc~nc_close proc~data_input_read_slab_impl->proc~nc_get_var_slab_3d proc~diag_io_ok diag_io_ok proc~diag_io_ok->proc~nc_close proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean proc~ocean_data_input_destroy ocean_data_input_t%ocean_data_input_destroy proc~ocean_data_input_destroy->proc~nc_close proc~ocean_data_input_load_static_2d->proc~ocean_data_input_register_2d proc~ocean_data_input_load_static_2d->proc~ocean_data_input_destroy proc~ocean_data_input_init ocean_data_input_t%ocean_data_input_init proc~ocean_data_input_load_static_2d->proc~ocean_data_input_init proc~ocean_dyn_step ocean_dyn_step proc~ocean_dyn_step->proc~run_stage proc~ocean_dyn_step_split ocean_dyn_step_split proc~ocean_dyn_step_split->proc~run_stage_split proc~ocean_restart_check_decomp->proc~nc_close proc~ocean_restart_check_decomp->proc~nc_get_att_int proc~ocean_restart_check_decomp->proc~nc_open_read proc~ocean_state_restart_write->proc~ocean_restart_write_local proc~ocean_state_restart_write_drop_field ocean_state_restart_write_drop_field proc~ocean_state_restart_write_drop_field->proc~ocean_restart_write_local proc~open_stream->proc~nc_create_file proc~open_stream->proc~nc_def_dim proc~open_stream->proc~nc_def_var_3d proc~open_stream->proc~nc_def_var_4d proc~open_stream->proc~nc_enddef proc~open_stream->proc~nc_put_att proc~open_stream->proc~nc_put_att_global proc~open_stream->proc~nc_put_att_global_int proc~open_stream->proc~nc_put_att_real proc~open_stream->proc~nc_put_att_real_r4 proc~open_stream->proc~rdb_def_var_1d proc~open_stream->proc~diag_io_ok proc~rdb_ocean_create_finalize rdb_ocean_create_finalize proc~rdb_ocean_create_finalize->proc~complete_ocean_create 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_from_string->proc~complete_ocean_create proc~rdb_ocean_create_pending rdb_ocean_create_pending proc~rdb_ocean_create_pending->proc~build_pending_handle proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~engine_step_finalize proc~rdb_ocean_step->proc~engine_step proc~read_field_xyz->proc~nc_get_var_slab_3d proc~reg_io_ok->proc~nc_close proc~restart_io_ok->proc~nc_close proc~supergrid_io_ok->proc~nc_close proc~zinit_io_ok->proc~nc_close proc~data_input_refresh_brackets data_input_refresh_brackets proc~data_input_refresh_brackets->proc~data_input_read_slab_impl proc~engine_step->proc~ocean_dyn_step proc~engine_step->proc~ocean_dyn_step_split proc~engine_teardown->proc~close_stream proc~ocean_data_input_init->proc~ocean_data_input_destroy proc~ocean_data_input_update_all ocean_data_input_update_all proc~ocean_data_input_update_all->proc~data_input_refresh_brackets proc~rdb_ocean_destroy rdb_ocean_destroy proc~rdb_ocean_destroy->proc~engine_teardown

Source Code

   subroutine fail(msg, ierr, code)
      !! Push `msg` to the error ring, log it (unchanged behaviour), then
      !! either set `ierr = code` and return (caller must `return`
      !! immediately after this call) or `error stop msg` when `ierr` is
      !! absent. See the module docstring for the full contract.
      character(len=*), intent(in) :: msg
      integer, intent(out), optional :: ierr
      integer, intent(in) :: code

      call error_ring_push(msg)
      call logger%error(msg)
      if (present(ierr)) then
         ierr = code
      else
         error stop msg
      end if
   end subroutine fail