SURFEX v8.1
General documentation of Surfex
mpl_abort_mod.F90
Go to the documentation of this file.
2 
4 USE mpl_mpif
5 USE oml_mod
6 USE yomabrt
8 #ifdef NAG
9 USE f90_unix_io, ONLY: flush
10 #endif
11 USE parkind1 ,ONLY : jpim ,jprb
12 
13 PRIVATE
14 PUBLIC mpl_abort
15 
16 CONTAINS
17 
18 SUBROUTINE mpl_abort(CDMESSAGE)
19 
20 IMPLICIT NONE
21 
22 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDMESSAGE
23 INTEGER(KIND=JPIM) :: IRETURN_CODE,IERROR,ITID
24 itid=oml_my_thread()
25 
26 CLOSE(mpl_unit)
27 CALL flush(0)
28 CALL ec_sleep(1) ! This rather than 'CALL SYSTEM("sleep 1")' ; see code ../support/env.c
29 
30 !------Traceback from only one thread
31 CALL oml_set_lock(mylock=mab_lock(1))
32 IF(mab_cnt == 0) THEN
33  WRITE(mpl_errunit,'(A,I6,A,I6)') 'MPL_ABORT: CALLED FROM PROCESSOR ',mpl_rank,' THRD',itid
34  IF(PRESENT(cdmessage)) THEN
35  WRITE(mpl_errunit,*) 'MPL_ABORT: THRD',itid," ",cdmessage
36  ENDIF
37  mab_cnt=1
38  CALL sdl_traceback(itid)
39  CALL flush(0)
40  CALL ec_sleep(1) ! This rather than 'CALL SYSTEM("sleep 1")' ; see code ../support/env.c
41 ENDIF
42 CALL oml_unset_lock(mylock=mab_lock(1))
43 ! ------All threads wait till traceback done
44 CALL flush(0)
45 CALL ec_sleep(1) ! This rather than 'CALL SYSTEM("sleep 1")' ; see code ../support/env.c
46 
47 CALL sdl_disabort(mpl_comm_oml(itid))
48 
49 END SUBROUTINE mpl_abort
50 
51 END MODULE mpl_abort_mod
integer(kind=jpim) mab_cnt
Definition: yomabrt.F90:7
subroutine, public oml_set_lock(MYLOCK)
Definition: oml_mod.F90:160
integer, parameter jpim
Definition: parkind1.F90:13
subroutine, public mpl_abort(CDMESSAGE)
subroutine, public sdl_traceback(KTID)
Definition: sdl_mod.F90:32
subroutine, public oml_unset_lock(MYLOCK)
Definition: oml_mod.F90:148
integer(kind=jpim), dimension(:), allocatable mpl_comm_oml
subroutine, public sdl_disabort(KCOMM)
Definition: sdl_mod.F90:106
integer, parameter jprb
Definition: parkind1.F90:32
unsigned int ec_sleep(const int *nsec)
Definition: env.c:221
integer(kind=jpim) mpl_errunit
integer(kind=jpim) function, public oml_my_thread()
Definition: oml_mod.F90:249
integer(kind=jpim) mpl_rank
integer(kind=jpim) mpl_unit
integer(kind=oml_lock_kind), dimension(2) mab_lock
Definition: yomabrt.F90:8