cable_error_handler_base.F90 Source File


Files dependent on this one

sourcefile~~cable_error_handler_base.f90~~AfferentGraph sourcefile~cable_error_handler_base.f90 cable_error_handler_base.F90 sourcefile~cable_error_handler.f90 cable_error_handler.F90 sourcefile~cable_error_handler.f90->sourcefile~cable_error_handler_base.f90 sourcefile~cable_error_handler_mpi.f90 cable_error_handler_mpi.F90 sourcefile~cable_error_handler_mpi.f90->sourcefile~cable_error_handler_base.f90 sourcefile~cable_mpi.f90 cable_mpi.F90 sourcefile~cable_error_handler_mpi.f90->sourcefile~cable_mpi.f90 sourcefile~cable_mpi.f90->sourcefile~cable_error_handler.f90 sourcefile~cable_netcdf.f90 cable_netcdf.F90 sourcefile~cable_netcdf.f90->sourcefile~cable_error_handler.f90 sourcefile~cable_netcdf.f90->sourcefile~cable_mpi.f90 sourcefile~cable_netcdf_decomp_util.f90 cable_netcdf_decomp_util.F90 sourcefile~cable_netcdf_decomp_util.f90->sourcefile~cable_error_handler.f90 sourcefile~cable_netcdf_decomp_util.f90->sourcefile~cable_netcdf.f90 sourcefile~cable_netcdf_nf90.f90 cable_netcdf_nf90.F90 sourcefile~cable_netcdf_nf90.f90->sourcefile~cable_error_handler.f90 sourcefile~cable_netcdf_nf90.f90->sourcefile~cable_netcdf.f90 sourcefile~cable_netcdf_pio.f90 cable_netcdf_pio.F90 sourcefile~cable_netcdf_pio.f90->sourcefile~cable_error_handler.f90 sourcefile~cable_netcdf_pio.f90->sourcefile~cable_mpi.f90 sourcefile~cable_netcdf_pio.f90->sourcefile~cable_netcdf.f90 sourcefile~cable_netcdf_pio_stub.f90 cable_netcdf_pio_stub.F90 sourcefile~cable_netcdf_pio_stub.f90->sourcefile~cable_error_handler.f90 sourcefile~cable_netcdf_pio_stub.f90->sourcefile~cable_mpi.f90 sourcefile~cable_netcdf_pio_stub.f90->sourcefile~cable_netcdf.f90 sourcefile~cable_netcdf_stub_types.f90 cable_netcdf_stub_types.F90 sourcefile~cable_netcdf_pio_stub.f90->sourcefile~cable_netcdf_stub_types.f90 sourcefile~cable_offline_driver.f90 cable_offline_driver.F90 sourcefile~cable_offline_driver.f90->sourcefile~cable_error_handler.f90 sourcefile~cable_offline_driver.f90->sourcefile~cable_error_handler_mpi.f90 sourcefile~cable_offline_driver.f90->sourcefile~cable_mpi.f90 sourcefile~cable_driver_common.f90 cable_driver_common.F90 sourcefile~cable_offline_driver.f90->sourcefile~cable_driver_common.f90 sourcefile~cable_mpimaster_stub.f90 cable_mpimaster_stub.F90 sourcefile~cable_offline_driver.f90->sourcefile~cable_mpimaster_stub.f90 sourcefile~cable_serial.f90 cable_serial.F90 sourcefile~cable_offline_driver.f90->sourcefile~cable_serial.f90 sourcefile~cable_driver_common.f90->sourcefile~cable_mpi.f90 sourcefile~cable_input.f90 cable_input.F90 sourcefile~cable_driver_common.f90->sourcefile~cable_input.f90 sourcefile~cable_input.f90->sourcefile~cable_mpi.f90 sourcefile~cable_mpimaster.f90 cable_mpimaster.F90 sourcefile~cable_mpimaster.f90->sourcefile~cable_mpi.f90 sourcefile~cable_mpimaster.f90->sourcefile~cable_driver_common.f90 sourcefile~cable_mpimaster.f90->sourcefile~cable_input.f90 sourcefile~cable_mpimaster_stub.f90->sourcefile~cable_mpi.f90 sourcefile~cable_netcdf_init.f90 cable_netcdf_init.F90 sourcefile~cable_netcdf_init.f90->sourcefile~cable_netcdf.f90 sourcefile~cable_netcdf_init.f90->sourcefile~cable_netcdf_nf90.f90 sourcefile~cable_netcdf_init.f90->sourcefile~cable_netcdf_pio.f90 sourcefile~cable_netcdf_stub_types.f90->sourcefile~cable_mpi.f90 sourcefile~cable_netcdf_stub_types.f90->sourcefile~cable_netcdf.f90 sourcefile~cable_serial.f90->sourcefile~cable_mpi.f90 sourcefile~cable_serial.f90->sourcefile~cable_driver_common.f90 sourcefile~cable_serial.f90->sourcefile~cable_input.f90 sourcefile~cable_mpiworker.f90 cable_mpiworker.F90 sourcefile~cable_mpiworker.f90->sourcefile~cable_driver_common.f90 sourcefile~cable_mpiworker.f90->sourcefile~cable_input.f90

Source Code

! CSIRO Open Source Software License Agreement (variation of the BSD / MIT License)
! Copyright (c) 2015, Commonwealth Scientific and Industrial Research Organisation
! (CSIRO) ABN 41 687 119 230.

module cable_error_handler_base_mod
  !* This module defines the base error handler type for CABLE.
  ! It provides a default implementation of the error handling behaviour, which
  ! can be extended to provide custom error handling.
  use iso_fortran_env, only: error_unit
  implicit none
  private

  public :: cable_error_handler_base_t

  integer, parameter, public :: DEFAULT_ERROR_CODE = 999 !! Default error code to use when none is provided

  type cable_error_handler_base_t
    !* Base error handler type for CABLE.
    ! This type provides a default implementation of the error handling behaviour.
  contains
    procedure :: build_error_message => cable_error_handler_base_build_error_message
    procedure :: abort => cable_error_handler_base_abort
  end type cable_error_handler_base_t

contains

  function cable_error_handler_base_build_error_message(this, message, file, line, error_code) result(error_message)
    !! Build an error message string.
    class(cable_error_handler_base_t), intent(inout) :: this
    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
    character(len=:), allocatable :: error_message
    character(5) :: line_string

    write (line_string, "(I5)") line
    error_message = "Error: " // file // ":" // "L" // trim(adjustl(line_string)) // ": " // message

  end function cable_error_handler_base_build_error_message

  subroutine cable_error_handler_base_abort(this, message, file, line, error_code)
    !! Default implementation of the abort procedure for the base error handler.
    class(cable_error_handler_base_t), intent(inout) :: this
    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

    write(unit=error_unit, fmt="(A)") this%build_error_message(message, file, line, DEFAULT_ERROR_CODE)
    error stop DEFAULT_ERROR_CODE

  end subroutine

end module