LCOV - code coverage report
Current view: top level - cicecore/cicedyn/infrastructure/comm/serial - ice_exit.F90 (source / functions) Hit Total Coverage
Test: 231018-211459:8916b9ff2c:1:quick Lines: 2 17 11.76 %
Date: 2023-10-18 15:30:36 Functions: 1 2 50.00 %

          Line data    Source code
       1             : 
       2             : #define SERIAL_REMOVE_MPI
       3             : 
       4             : !=======================================================================
       5             : !
       6             : ! Exit the model.
       7             : ! authors William H. Lipscomb (LANL)
       8             : !         Elizabeth C. Hunke (LANL)
       9             : ! 2006 ECH: separated serial and mpi functionality
      10             : 
      11             :       module ice_exit
      12             : 
      13             :       use ice_kinds_mod
      14             :       use ice_fileunits, only: nu_diag, ice_stderr, flush_fileunit
      15             :       use icepack_intfc, only: icepack_warnings_flush, icepack_warnings_aborted
      16             : #if (defined CESMCOUPLED)
      17             :       use shr_sys_mod
      18             : #else
      19             : #ifndef SERIAL_REMOVE_MPI
      20             :       use mpi   ! MPI Fortran module
      21             : #endif
      22             : #endif
      23             : 
      24             :       implicit none
      25             :       public
      26             : 
      27             : !=======================================================================
      28             : 
      29             :       contains
      30             : 
      31             : !=======================================================================
      32             : 
      33           0 :       subroutine abort_ice(error_message, file, line, doabort)
      34             : 
      35             : !  This routine aborts the ice model and prints an error message.
      36             : 
      37             :       character (len=*), intent(in),optional :: error_message  ! error message
      38             :       character (len=*), intent(in),optional :: file           ! file
      39             :       integer (kind=int_kind), intent(in), optional :: line    ! line number
      40             :       logical (kind=log_kind), intent(in), optional :: doabort ! abort flag
      41             : 
      42             :       ! local variables
      43             : 
      44             :       integer (int_kind) :: &
      45             :          ierr,       & ! MPI error flag   ! LCOV_EXCL_LINE
      46             :          outunit,    & ! output unit   ! LCOV_EXCL_LINE
      47             :          error_code    ! return code
      48             :       logical (log_kind) :: ldoabort   ! local doabort flag
      49             :       character(len=*), parameter :: subname='(abort_ice)'
      50             : 
      51           0 :       ldoabort = .true.
      52           0 :       if (present(doabort)) ldoabort = doabort
      53             : 
      54             : #if (defined CESMCOUPLED)
      55             :       outunit = nu_diag
      56             : #else
      57           0 :       outunit = ice_stderr
      58             : #endif
      59             : 
      60           0 :       call flush_fileunit(nu_diag)
      61           0 :       call icepack_warnings_flush(nu_diag)
      62           0 :       write(outunit,*) ' '
      63           0 :       write(outunit,*) subname, 'ABORTED: '
      64           0 :       if (present(file))   write (outunit,*) subname,' called from ',trim(file)
      65           0 :       if (present(line))   write (outunit,*) subname,' line number ',line
      66           0 :       if (present(error_message)) write (outunit,*) subname,' error = ',trim(error_message)
      67           0 :       call flush_fileunit(outunit)
      68             : 
      69           0 :       if (ldoabort) then
      70             : #if (defined CESMCOUPLED)
      71             :          call shr_sys_abort(subname//trim(error_message))
      72             : #else
      73             : #ifndef SERIAL_REMOVE_MPI
      74             :          error_code = 128
      75             :          call MPI_ABORT(MPI_COMM_WORLD, error_code, ierr)
      76             : #endif
      77           0 :          stop
      78             : #endif
      79             :       endif
      80             : 
      81           0 :       end subroutine abort_ice
      82             : 
      83             : !=======================================================================
      84             : 
      85           1 :       subroutine end_run
      86             : 
      87             : ! Ends run by calling MPI_FINALIZE
      88             : ! Does nothing in serial runs
      89             : 
      90             :       integer (int_kind) :: ierr ! MPI error flag
      91             :       character(len=*), parameter :: subname = '(end_run)'
      92             : 
      93             : #ifndef SERIAL_REMOVE_MPI
      94             :       call MPI_FINALIZE(ierr)
      95             : #endif
      96             : 
      97           1 :       end subroutine end_run
      98             : 
      99             : !=======================================================================
     100             : 
     101             :       end module ice_exit
     102             : 
     103             : !=======================================================================

Generated by: LCOV version 1.14-6-g40580cd