cable_error_handler_mod Module

This module provides error handling functionality that can be used throughout the CABLE codebase.

Error handling behaviour is controlled internally by either the global error handler instance (error_handler_global) or the fallback error handler instance (error_handler_fallback). The global error handler instance can be set via cable_error_handler_set to provide custom error handling behaviour, while the fallback error handler instance provides a default implementation of the error handling behaviour. The global error handler is polymorphic which allows for customising the error handling behaviour dynamically at runtime. To do this we can create a new type that extends cable_error_handler_base_t with the new error handling behaviour and set the global error handler to an instance of the extended type.


Uses

  • module~~cable_error_handler_mod~~UsesGraph module~cable_error_handler_mod cable_error_handler_mod module~cable_error_handler_base_mod cable_error_handler_base_mod module~cable_error_handler_mod->module~cable_error_handler_base_mod iso_fortran_env iso_fortran_env module~cable_error_handler_base_mod->iso_fortran_env

Used by

  • module~~cable_error_handler_mod~~UsedByGraph module~cable_error_handler_mod cable_error_handler_mod module~cable_mpi_mod cable_mpi_mod module~cable_mpi_mod->module~cable_error_handler_mod module~cable_netcdf_decomp_util_mod cable_netcdf_decomp_util_mod module~cable_netcdf_decomp_util_mod->module~cable_error_handler_mod module~cable_netcdf_mod cable_netcdf_mod module~cable_netcdf_decomp_util_mod->module~cable_netcdf_mod module~cable_netcdf_mod->module~cable_error_handler_mod module~cable_netcdf_mod->module~cable_mpi_mod module~cable_netcdf_nf90_mod cable_netcdf_nf90_mod module~cable_netcdf_nf90_mod->module~cable_error_handler_mod module~cable_netcdf_nf90_mod->module~cable_netcdf_mod module~cable_netcdf_pio_mod cable_netcdf_pio_mod module~cable_netcdf_pio_mod->module~cable_error_handler_mod module~cable_netcdf_pio_mod->module~cable_mpi_mod module~cable_netcdf_pio_mod->module~cable_netcdf_mod module~cable_netcdf_pio_mod~2 cable_netcdf_pio_mod module~cable_netcdf_pio_mod~2->module~cable_error_handler_mod module~cable_netcdf_pio_mod~2->module~cable_mpi_mod module~cable_netcdf_pio_mod~2->module~cable_netcdf_mod module~cable_netcdf_stub_types_mod cable_netcdf_stub_types_mod module~cable_netcdf_pio_mod~2->module~cable_netcdf_stub_types_mod program~cable_offline_driver cable_offline_driver program~cable_offline_driver->module~cable_error_handler_mod program~cable_offline_driver->module~cable_mpi_mod module~cable_driver_common_mod cable_driver_common_mod program~cable_offline_driver->module~cable_driver_common_mod module~cable_error_handler_mpi_mod cable_error_handler_mpi_mod program~cable_offline_driver->module~cable_error_handler_mpi_mod module~cable_mpimaster cable_mpimaster program~cable_offline_driver->module~cable_mpimaster module~cable_serial cable_serial program~cable_offline_driver->module~cable_serial module~cable_driver_common_mod->module~cable_mpi_mod module~cable_input_module cable_input_module module~cable_driver_common_mod->module~cable_input_module module~cable_error_handler_mpi_mod->module~cable_mpi_mod module~cable_input_module->module~cable_mpi_mod module~cable_mpimaster->module~cable_mpi_mod module~cable_mpimaster~2 cable_mpimaster module~cable_mpimaster~2->module~cable_mpi_mod module~cable_mpimaster~2->module~cable_driver_common_mod module~cable_netcdf_init_smod cable_netcdf_init_smod module~cable_netcdf_init_smod->module~cable_netcdf_mod module~cable_netcdf_init_smod->module~cable_netcdf_nf90_mod module~cable_netcdf_init_smod->module~cable_netcdf_pio_mod module~cable_netcdf_stub_types_mod->module~cable_mpi_mod module~cable_netcdf_stub_types_mod->module~cable_netcdf_mod module~cable_serial->module~cable_mpi_mod module~cable_serial->module~cable_driver_common_mod module~cable_serial->module~cable_input_module module~cable_mpiworker~2 cable_mpiworker module~cable_mpiworker~2->module~cable_driver_common_mod proc~mpidrv_master~2 mpidrv_master proc~mpidrv_master~2->module~cable_input_module proc~mpidrv_worker~2 mpidrv_worker proc~mpidrv_worker~2->module~cable_input_module proc~worker_cable_params worker_cable_params proc~worker_cable_params->module~cable_input_module

Variables

Type Visibility Attributes Name Initial
type(cable_error_handler_base_t), private, target :: error_handler_fallback = cable_error_handler_base_t()
class(cable_error_handler_base_t), private, allocatable, target :: error_handler_global

Subroutines

public subroutine cable_error_handler_set(new_error_handler)

Set the global error handler instance.

Arguments

Type IntentOptional Attributes Name
class(cable_error_handler_base_t), intent(in) :: new_error_handler

New error handler instance to set as the global error handler.

public subroutine cable_error_handler_free()

Free the global error handler instance.

Arguments

None

public subroutine cable_abort(message, file, line, error_code)

Abort CABLE with an error message.

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: message

Error message to display

character(len=*), intent(in) :: file

Source file where the error occurred

integer, intent(in) :: line

Line number where the error occurred

integer, intent(in), optional :: error_code

Optional error code