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

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

Generated by: LCOV version 1.14-6-g40580cd