SURFEX v8.1
General documentation of Surfex
sdl_mod.F90
Go to the documentation of this file.
1 MODULE sdl_mod
2 
3 ! Interface between user applications and system-dependent intrinsic
4 ! routines, provided by the computer vendors.
5 
6 ! All routines which wish to call these routines must contain:
7 ! USE SDL_MOD
8 
9 ! Author :
10 ! ------
11 ! 11-Apr-2005 R. El Khatib *METEO-FRANCE*
12 ! 26-Apr-2006 S.T.Saarinen Dr.Hook trace, calls to EC_RAISE, Intel/ifort traceback
13 
14 USE parkind1 ,ONLY : jpim ,jprb
15 USE yomhook ,ONLY : lhook ,dr_hook
16 USE oml_mod, ONLY : oml_my_thread
17 
18 IMPLICIT NONE
19 
20 SAVE
21 
22 PRIVATE
23 
24 INTEGER, PARAMETER :: sigabrt = 6 ! Hardcoded
25 
27 
28 CONTAINS
29 
30 !-----------------------------------------------------------------------------
31 SUBROUTINE sdl_traceback(KTID)
32 
33 ! Purpose :
34 ! -------
35 ! Traceback
36 
37 ! KTID : thread
38 
39 INTEGER(KIND=JPIM), INTENT(IN), OPTIONAL :: KTID
40 INTEGER(KIND=JPIM) ITID, IPRINT_OPTION, ILEVEL
41 #ifdef NECSX
42 CHARACTER(LEN=*), PARAMETER :: CLNECMSG = '*** Calling NEC traceback ***'
43 #endif
44 
45 IF (PRESENT(ktid)) THEN
46  itid = ktid
47 ELSE
48  itid = oml_my_thread()
49 ENDIF
50 
51 IF (lhook) THEN
52  iprint_option = 2
53  ilevel = 0
54  CALL c_drhook_print(0, itid, iprint_option, ilevel) ! from drhook.c
55 ENDIF
56 
57 #if defined(VPP)
58  CALL errtra
59  IF (PRESENT(ktid)) CALL sleep(28)
60 #elif defined(RS6K)
61  WRITE(0,*)'SDL_TRACEBACK: Calling XL_TRBK, THRD = ',itid
62  CALL xl__trbk()
63  WRITE(0,*)'SDL_TRACEBACK: Done XL_TRBK, THRD = ',itid
64 #elif defined(__INTEL_COMPILER)
65  WRITE(0,*)'SDL_TRACEBACK: Calling INTEL_TRBK, THRD = ',itid
66  CALL intel_trbk() ! See ifsaux/utilities/gentrbk.F90
67  WRITE(0,*)'SDL_TRACEBACK: Done INTEL_TRBK, THRD = ',itid
68 #elif defined(LINUX) || defined(SUN4)
69  WRITE(0,*)'SDL_TRACEBACK: Calling LINUX_TRBK, THRD = ',itid
70  CALL linux_trbk() ! See ifsaux/utilities/linuxtrbk.c
71  WRITE(0,*)'SDL_TRACEBACK: Done LINUX_TRBK, THRD = ',itid
72 #elif defined(NECSX)
73 ! MESPUT writes out onto unit 6
74  WRITE(6,*)'SDL_TRACEBACK: Calling NEC/MESPUT, THRD = ',itid
75  CALL necsx_trbk(clnecmsg)
76  CALL flush(6)
77  WRITE(6,*)'SDL_TRACEBACK: Done NEC/MESPUT, THRD = ',itid
78 #else
79  WRITE(0,*)'SDL_TRACEBACK: No proper traceback implemented.'
80  ! A traceback using dbx-debugger, if available AND
81  ! activated via 'export DBXDEBUGGER=1'
82  WRITE(0,*)'SDL_TRACEBACK: Calling DBX_TRBK, THRD = ',itid
83  CALL dbx_trbk() ! See ifsaux/utilities/linuxtrbk.c
84  WRITE(0,*)'SDL_TRACEBACK: Done DBX_TRBK, THRD = ',itid
85  ! A traceback using gdb-debugger, if available AND
86  ! activated via 'export GDBDEBUGGER=1'
87  WRITE(0,*)'SDL_TRACEBACK: Calling GDB_TRBK, THRD = ',itid
88  CALL gdb_trbk() ! See ifsaux/utilities/linuxtrbk.c
89  WRITE(0,*)'SDL_TRACEBACK: Done GDB_TRBK, THRD = ',itid
90 #endif
91 
92 END SUBROUTINE sdl_traceback
93 !-----------------------------------------------------------------------------
94 SUBROUTINE sdl_srlabort
95 
96 ! Purpose :
97 ! -------
98 ! To abort in serial environment
99 
100 CALL ec_raise(sigabrt)
101 stop 'SDL_SRLABORT'
102 
103 END SUBROUTINE sdl_srlabort
104 !-----------------------------------------------------------------------------
105 SUBROUTINE sdl_disabort(KCOMM)
107 ! Purpose :
108 ! -------
109 ! To abort in distributed environment
110 
111 ! KCOMM : communicator
112 
113 INTEGER(KIND=JPIM), INTENT(IN) :: KCOMM
114 
115 INTEGER(KIND=JPIM) :: IRETURN_CODE,IERROR
116 
117 #ifdef VPP
118 
119 CALL vpp_abort()
120 
121 #else
122 
123 ireturn_code=1
124 #ifdef SFX_MPI
125 CALL mpi_abort(kcomm,ireturn_code,ierror)
126 #endif
127 #endif
128 
129 CALL ec_raise(sigabrt) ! In case ever ends up here
130 stop 'SDL_DISABORT'
131 
132 END SUBROUTINE sdl_disabort
133 !-----------------------------------------------------------------------------
134 
135 END MODULE sdl_mod
void dbx_trbk()
Definition: linuxtrbk.c:487
integer, parameter jpim
Definition: parkind1.F90:13
subroutine errtra
Definition: gentrbk.F90:54
subroutine, public sdl_traceback(KTID)
Definition: sdl_mod.F90:32
subroutine, public sdl_disabort(KCOMM)
Definition: sdl_mod.F90:106
integer, parameter jprb
Definition: parkind1.F90:32
integer, parameter sigabrt
Definition: sdl_mod.F90:24
void linux_trbk(void)
Definition: linuxtrbk.c:391
integer(kind=jpim) function, public oml_my_thread()
Definition: oml_mod.F90:249
logical lhook
Definition: yomhook.F90:15
void gdb_trbk()
Definition: linuxtrbk.c:439
subroutine necsx_trbk(CDMESS)
Definition: gentrbk.F90:59
void ec_raise(const int *sig)
Definition: endian.c:97
subroutine intel_trbk()
Definition: gentrbk.F90:8
subroutine sdl_srlabort
Definition: sdl_srlabort.F90:2