!  SVN:$Id: ice_exit.F90 929 2015-03-10 00:35:22Z eclare $
!=======================================================================
!
! Exit the model. 
! authors William H. Lipscomb (LANL)
!         Elizabeth C. Hunke (LANL)
! 2006 ECH: separated serial and mpi functionality

      module ice_exit

      use ice_kinds_mod

      implicit none
      public

!=======================================================================

      contains

!=======================================================================

      subroutine abort_ice(error_message)

!  This routine aborts the ice model and prints an error message.

#if (defined CCSMCOUPLED)
      use ice_fileunits, only: nu_diag, flush_fileunit
      use shr_sys_mod
#else
      use ice_fileunits, only: nu_diag, ice_stderr, flush_fileunit
      include 'mpif.h'   ! MPI Fortran include file
#endif

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

      ! local variables

#ifndef CCSMCOUPLED
      integer (int_kind) :: ierr ! MPI error flag
#endif

#if (defined CCSMCOUPLED)
      call flush_fileunit(nu_diag)
      write (nu_diag,*) error_message
      call flush_fileunit(nu_diag)
      call shr_sys_abort(error_message)
#else
      call flush_fileunit(nu_diag)

      write (ice_stderr,*) error_message
      call flush_fileunit(ice_stderr)

      call MPI_ABORT(MPI_COMM_WORLD, ierr)
      stop
#endif

      end subroutine abort_ice

!=======================================================================

      subroutine end_run

! Ends run by calling MPI_FINALIZE.

      integer (int_kind) :: ierr ! MPI error flag

      call MPI_FINALIZE(ierr)

      end subroutine end_run

!=======================================================================

      end module ice_exit

!=======================================================================
