sll_m_errors.F90 Source File


Files dependent on this one

sourcefile~~sll_m_errors.f90~~AfferentGraph sourcefile~sll_m_errors.f90 sll_m_errors.F90 sourcefile~sll_m_bsplines.f90 sll_m_bsplines.F90 sourcefile~sll_m_bsplines.f90->sourcefile~sll_m_errors.f90 sourcefile~sll_m_bsplines_uniform.f90 sll_m_bsplines_uniform.F90 sourcefile~sll_m_bsplines.f90->sourcefile~sll_m_bsplines_uniform.f90 sourcefile~sll_m_bsplines_uniform.f90->sourcefile~sll_m_errors.f90 sourcefile~sll_m_spline_interpolator_1d.f90 sll_m_spline_interpolator_1d.F90 sourcefile~sll_m_spline_interpolator_1d.f90->sourcefile~sll_m_errors.f90 sourcefile~sll_m_spline_matrix.f90 sll_m_spline_matrix.F90 sourcefile~sll_m_spline_interpolator_1d.f90->sourcefile~sll_m_spline_matrix.f90 sourcefile~sll_m_spline_matrix.f90->sourcefile~sll_m_errors.f90 sourcefile~sll_m_spline_matrix_banded.f90 sll_m_spline_matrix_banded.F90 sourcefile~sll_m_spline_matrix.f90->sourcefile~sll_m_spline_matrix_banded.f90 sourcefile~sll_m_spline_matrix_dense.f90 sll_m_spline_matrix_dense.F90 sourcefile~sll_m_spline_matrix.f90->sourcefile~sll_m_spline_matrix_dense.f90 sourcefile~sll_m_spline_matrix_banded.f90->sourcefile~sll_m_errors.f90 sourcefile~sll_m_spline_matrix_dense.f90->sourcefile~sll_m_errors.f90 sourcefile~cubic_spline.f90 cubic_spline.F90 sourcefile~cubic_spline.f90->sourcefile~sll_m_bsplines.f90 sourcefile~cubic_spline.f90->sourcefile~sll_m_spline_matrix.f90 sourcefile~mhd3d_evalfunc.f90 mhd3d_evalfunc.F90 sourcefile~mhd3d_evalfunc.f90->sourcefile~sll_m_spline_matrix.f90 sourcefile~mhd3d_evalfunc.f90->sourcefile~sll_m_spline_matrix_banded.f90 sourcefile~base.f90 base.F90 sourcefile~mhd3d_evalfunc.f90->sourcefile~base.f90 sourcefile~mhd3d_vars.f90 mhd3d_vars.F90 sourcefile~mhd3d_evalfunc.f90->sourcefile~mhd3d_vars.f90 sourcefile~rprofile_bspline.f90 rprofile_bspline.F90 sourcefile~rprofile_bspline.f90->sourcefile~sll_m_bsplines.f90 sourcefile~sbase.f90 sbase.F90 sourcefile~sbase.f90->sourcefile~sll_m_bsplines.f90 sourcefile~sbase.f90->sourcefile~sll_m_spline_interpolator_1d.f90 sourcefile~sbase.f90->sourcefile~sll_m_spline_matrix.f90 sourcefile~analyze.f90 analyze.F90 sourcefile~analyze.f90->sourcefile~cubic_spline.f90 sourcefile~vmec.f90 vmec.F90 sourcefile~analyze.f90->sourcefile~vmec.f90 sourcefile~vmec_readin.f90 vmec_readin.F90 sourcefile~analyze.f90->sourcefile~vmec_readin.f90 sourcefile~vmec_vars.f90 vmec_vars.F90 sourcefile~analyze.f90->sourcefile~vmec_vars.f90 sourcefile~analyze.f90->sourcefile~mhd3d_vars.f90 sourcefile~base.f90->sourcefile~sbase.f90 sourcefile~gvec_post.f90 gvec_post.F90 sourcefile~gvec_post.f90->sourcefile~mhd3d_evalfunc.f90 sourcefile~gvec_post.f90->sourcefile~analyze.f90 sourcefile~mhd3d.f90 mhd3d.F90 sourcefile~gvec_post.f90->sourcefile~mhd3d.f90 sourcefile~readstate_vars.f90 readstate_vars.F90 sourcefile~gvec_post.f90->sourcefile~readstate_vars.f90 sourcefile~restart.f90 restart.F90 sourcefile~gvec_post.f90->sourcefile~restart.f90 sourcefile~mhd3d.f90->sourcefile~cubic_spline.f90 sourcefile~mhd3d.f90->sourcefile~mhd3d_evalfunc.f90 sourcefile~mhd3d.f90->sourcefile~rprofile_bspline.f90 sourcefile~mhd3d.f90->sourcefile~analyze.f90 sourcefile~mhd3d.f90->sourcefile~base.f90 sourcefile~mhd3d_minimize.f90 mhd3d_minimize.F90 sourcefile~mhd3d.f90->sourcefile~mhd3d_minimize.f90 sourcefile~mhd3d.f90->sourcefile~restart.f90 sourcefile~mhd3d.f90->sourcefile~vmec.f90 sourcefile~mhd3d.f90->sourcefile~vmec_readin.f90 sourcefile~mhd3d.f90->sourcefile~vmec_vars.f90 sourcefile~lambda_solve.f90 lambda_solve.F90 sourcefile~mhd3d.f90->sourcefile~lambda_solve.f90 sourcefile~mhd3d.f90->sourcefile~mhd3d_vars.f90 sourcefile~mhd3d_minimize.f90->sourcefile~mhd3d_evalfunc.f90 sourcefile~mhd3d_minimize.f90->sourcefile~analyze.f90 sourcefile~mhd3d_minimize.f90->sourcefile~restart.f90 sourcefile~readstate.f90 readstate.F90 sourcefile~readstate.f90->sourcefile~sbase.f90 sourcefile~readstate.f90->sourcefile~base.f90 sourcefile~readstate.f90->sourcefile~readstate_vars.f90 sourcefile~readstate_vars.f90->sourcefile~sbase.f90 sourcefile~readstate_vars.f90->sourcefile~base.f90 sourcefile~restart.f90->sourcefile~mhd3d_evalfunc.f90 sourcefile~restart.f90->sourcefile~base.f90 sourcefile~restart.f90->sourcefile~readstate.f90 sourcefile~restart.f90->sourcefile~readstate_vars.f90 sourcefile~restart.f90->sourcefile~mhd3d_vars.f90 sourcefile~vmec.f90->sourcefile~cubic_spline.f90 sourcefile~vmec.f90->sourcefile~rprofile_bspline.f90 sourcefile~vmec.f90->sourcefile~vmec_readin.f90 sourcefile~vmec.f90->sourcefile~vmec_vars.f90 sourcefile~vmec_readin.f90->sourcefile~cubic_spline.f90 sourcefile~vmec_vars.f90->sourcefile~cubic_spline.f90 sourcefile~gvec_to_jorek.f90 gvec_to_jorek.F90 sourcefile~gvec_to_jorek.f90->sourcefile~base.f90 sourcefile~gvec_to_jorek.f90->sourcefile~readstate.f90 sourcefile~gvec_to_jorek.f90->sourcefile~readstate_vars.f90 sourcefile~gvec_to_jorek_vars.f90 gvec_to_jorek_vars.F90 sourcefile~gvec_to_jorek.f90->sourcefile~gvec_to_jorek_vars.f90 sourcefile~gvec_to_jorek_vars.f90->sourcefile~base.f90 sourcefile~lambda_solve.f90->sourcefile~base.f90 sourcefile~mhd3d_vars.f90->sourcefile~base.f90 sourcefile~run.f90 run.F90 sourcefile~run.f90->sourcefile~analyze.f90 sourcefile~run.f90->sourcefile~restart.f90 sourcefile~rungvec.f90 rungvec.F90 sourcefile~run.f90->sourcefile~rungvec.f90 sourcefile~rungvec.f90->sourcefile~analyze.f90 sourcefile~rungvec.f90->sourcefile~mhd3d.f90 sourcefile~rungvec.f90->sourcefile~restart.f90 sourcefile~sfl_boozer.f90 sfl_boozer.F90 sourcefile~sfl_boozer.f90->sourcefile~base.f90 sourcefile~sfl_boozer.f90->sourcefile~lambda_solve.f90 sourcefile~state.f90 state.F90 sourcefile~state.f90->sourcefile~analyze.f90 sourcefile~state.f90->sourcefile~base.f90 sourcefile~state.f90->sourcefile~mhd3d.f90 sourcefile~state.f90->sourcefile~readstate_vars.f90 sourcefile~state.f90->sourcefile~restart.f90 sourcefile~state.f90->sourcefile~mhd3d_vars.f90 sourcefile~state.f90->sourcefile~sfl_boozer.f90 sourcefile~transform_sfl.f90 transform_sfl.F90 sourcefile~state.f90->sourcefile~transform_sfl.f90 sourcefile~transform_sfl.f90->sourcefile~base.f90 sourcefile~transform_sfl.f90->sourcefile~sfl_boozer.f90 sourcefile~convert_gvec_to_jorek.f90 convert_gvec_to_jorek.F90 sourcefile~convert_gvec_to_jorek.f90->sourcefile~gvec_to_jorek.f90 sourcefile~gvec.f90 gvec.F90 sourcefile~gvec.f90->sourcefile~rungvec.f90 sourcefile~gvec_to_castor3d_vars.f90 gvec_to_castor3d_vars.F90 sourcefile~gvec_to_castor3d_vars.f90->sourcefile~transform_sfl.f90 sourcefile~gvec_to_gene_vars.f90 gvec_to_gene_vars.F90 sourcefile~gvec_to_gene_vars.f90->sourcefile~transform_sfl.f90 sourcefile~gvec_to_hopr_vars.f90 gvec_to_hopr_vars.F90 sourcefile~gvec_to_hopr_vars.f90->sourcefile~transform_sfl.f90

Source Code

! Copyright (c) INRIA
! License: CECILL-B
!
module sll_m_errors

!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  use iso_fortran_env, only: &
    error_unit

  implicit none

  public :: &
    sll_s_error_handler, &
    sll_s_warning_handler

  private
!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  ! Instead of using the non-standard subroutine abort() provided by the compiler,
  ! use abort() from the C standard library "stdlib.h"
  interface
    subroutine c_abort() bind(C, name="abort")
    end subroutine
  end interface

!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
contains
!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  !----------------------------------------------------------------------------
  !>  @brief
  !>  Print warning message to standard-error and continue execution.
  !>  @details
  !>
  !----------------------------------------------------------------------------
  subroutine sll_s_warning_handler( file_name, line_num, caller, message )
    character(len=*), intent(in) :: file_name !< file name
    integer         , intent(in) :: line_num  !< line number
    character(len=*), intent(in) :: caller    !< program/subroutine/function
    character(len=*), intent(in) :: message   !< error message

    call errout( error_unit, 'W', file_name, line_num, caller, message )

  end subroutine sll_s_warning_handler

  !----------------------------------------------------------------------------
  !>  @brief
  !>  Print error message to standard-error, stop execution and dump backtrace information.
  !>  @details
  !>
  !----------------------------------------------------------------------------
  subroutine sll_s_error_handler( file_name, line_num, caller, message )
    character(len=*), intent(in) :: file_name !< file name
    integer         , intent(in) :: line_num  !< line number
    character(len=*), intent(in) :: caller    !< program/subroutine/function
    character(len=*), intent(in) :: message   !< error message

    call errout( error_unit, 'F', file_name, line_num, caller, message )
    call c_abort()

  end subroutine sll_s_error_handler

  !----------------------------------------------------------------------------
  !>  @brief
  !>  Write error/warning message to a given unit.
  !>  @details
  !>
  !----------------------------------------------------------------------------
  subroutine errout( out_unit, severity, file_name, line_num, caller, message )

    integer         , intent(in) :: out_unit  !< output file unit number
    character(len=1), intent(in) :: severity  !< "W" or "F" : Warning or Fatal
    character(len=*), intent(in) :: file_name !< file name
    integer         , intent(in) :: line_num  !< line number
    character(len=*), intent(in) :: caller    !< program/subroutine/function
    character(len=*), intent(in) :: message   !< error message

    character(len=64) :: line_num_str


    write( out_unit,* )
    select case ( severity )  !     *** Severity ***
    case ( 'W' )!
      write( out_unit,"(/10x,a)" ) '*** WARNING ***'
    case ( 'F' )
      write( out_unit,"(/10x,a)" ) '*** FATAL ERROR ***'
    case default
      write( out_unit,"(/10x,a)" ) '*** FATAL ERROR ***'
      write( out_unit,"(/10x,a)" ) &
        'Error handler (ERROUT) called with unknown severity level: ', severity
    end select

    write( line_num_str,* ) line_num
    line_num_str = adjustl( line_num_str )

    write( out_unit,"(/10x,a)") &
      'Generated by program or subroutine: '// trim( caller )
    write( out_unit,"(/10x,a)") &
      'In '//trim( file_name )//':'// trim( line_num_str )
    write( out_unit,"(/10x,a)") trim( message )
    write( out_unit,*)

  end subroutine errout
  !----------------------------------------------------------------------------

end module sll_m_errors