1 SUBROUTINE dr_hook_util(LDHOOK,CDNAME,KCASE,PKEY,CDFILENAME,KSIZEINFO)
16 LOGICAL,
INTENT(INOUT) :: LDHOOK
17 CHARACTER(LEN=*),
INTENT(IN) :: CDNAME,CDFILENAME
18 INTEGER(KIND=JPIM),
INTENT(IN) :: KCASE,KSIZEINFO
19 REAL(KIND=JPRB),
INTENT(INOUT) :: PKEY
21 INTEGER(KIND=JPIM) :: INEWMASK, IOLDMASK, UMASK
24 INTEGER(KIND=JPIM) :: IRET, SETVBUF3F
26 LOGICAL,
SAVE :: LL_FIRST_TIME = .true.
27 CHARACTER(LEN=512) :: CLENV
28 INTEGER(KIND=JPIM) INUMTIDS, IMYTID
31 INTEGER*8 :: GETMAXMEM
33 LOGICAL :: LLFINDSUMB=.false.
34 REAL(KIND=JPRD) :: ZCLOCK
35 REAL(KIND=JPRB) :: ZDIFF
36 CHARACTER(LEN=7) CLSTR
39 CHARACTER(LEN=3) CHEAP
43 #include "user_clock.h" 48 IF (.NOT.ldhook)
RETURN 52 IF (ll_first_time)
THEN 53 ll_first_time = .false.
55 iret = setvbuf3f(0, 1, 0)
58 CALL get_environment_variable(
'DR_HOOK_NOT_MPI',clenv)
59 IF (clenv ==
' ' .OR. clenv ==
'0' .OR. &
60 & clenv ==
'false' .OR. clenv ==
'FALSE')
THEN 68 CALL get_environment_variable(
'DR_HOOK',clenv)
69 IF (clenv ==
' ' .OR. clenv ==
'0' .OR. &
70 & clenv ==
'false' .OR. clenv ==
'FALSE')
THEN 72 CALL c_drhook_set_lhook(0)
81 IF (.NOT.ldhook)
RETURN 83 CALL c_drhook_init(clenv, inumtids)
86 CALL get_environment_variable(
'DR_HOOK_STACKCHECK',
cstack)
90 ALLOCATE(
isave(inumtids))
100 CALL get_environment_variable(
'DR_HOOK_HEAPCHECK',cheap)
101 IF (cheap ==
'yes' .OR. cheap ==
'YES' ) jheap=1
102 IF (cheap ==
'trb' .OR. cheap ==
'TRB' ) jheap=2
119 isave(imytid)=loc(llmpi)
124 WRITE(0,
'(A,I3,A,I12,2X,A)')
"STACKCHECK Max stack usage by thread",imytid,
" =",
imaxstack(imytid),cdname
132 CALL c_drhook_start(cdname, imytid, pkey, cdfilename, ksizeinfo)
134 IF(imytid == 1 .AND.
myproc_stats == 1 .AND. jheap>0)
THEN 135 getmaxmem=getmaxloc()
136 IF(getmaxmem .GT. maxmem)
THEN 138 WRITE(0,*)
"HEAPCHECK Max heap at beg of routine =",maxmem,
" ",cdname
140 IF(jheap == 2)
CALL xl__trbk()
145 ELSE IF (kcase == 1)
THEN 147 IF(imytid == 1 .AND.
myproc_stats == 1 .AND. jheap>0)
THEN 148 getmaxmem=getmaxloc()
149 IF(getmaxmem .GT. maxmem)
THEN 151 WRITE(0,*)
"HEAPCHECK Max heap at end of routine =",maxmem,
" ",cdname
153 IF(jheap == 2)
CALL xl__trbk()
158 CALL c_drhook_end (cdname, imytid, pkey, cdfilename, ksizeinfo)
167 IF( zdiff > 0.1_jprb )
THEN 174 WRITE(0,
'("DR_HOOK_UTIL: ",A,2X,A," TIMESUMB=",F10.6)')cdname,clstr,zdiff
integer(kind=jpim) myproc_stats
integer(kind=jpib), dimension(:), allocatable isave
logical, dimension(:), allocatable ll_thread_first
subroutine user_clock(PELAPSED_TIME, PELAPSED_TIME_SINCE, PVECTOR_CP, PTOTAL_CP)
real(kind=jprd) time_last_call
subroutine, public mpl_init(KOUTPUT, KUNIT, KERROR, KPROCS, LDINFO, LDENV)
integer(kind=jpim) last_knum
integer(kind=jpim) function, public oml_my_thread()
subroutine getarg(IARG, CLARG)
integer(kind=jpim) nhook_messages
integer(kind=jpib), dimension(:), allocatable imaxstack
subroutine dr_hook_util(LDHOOK, CDNAME, KCASE, PKEY, CDFILENAME, KSIZEINFO)
integer(kind=jpim) last_kswitch
integer(kind=jpim) function, public oml_max_threads()
subroutine, public mpl_getarg(KARG, CDARG)
subroutine, public oml_init()