Add new fields XLAT_C and XLONG_C
[WPS-merge.git] / ungrib / src / ngl / w3 / instrument.f
blob0c936f994660831e212a02e56d2cb1930521b318
1 !-----------------------------------------------------------------------
2 SUBROUTINE INSTRUMENT(K,KALL,TTOT,TMIN,TMAX)
3 !$$$ SUBPROGRAM DOCUMENTATION BLOCK
4 ! . . . .
5 ! SUBPROGRAM: INSTRUMENT MONITOR WALL-CLOCK TIMES, ETC.
6 ! PRGMMR: IREDELL ORG: NP23 DATE:1998-07-16
8 ! ABSTRACT: THIS SUBPROGRAM IS USEFUL IN INSTRUMENTING A CODE
9 ! BY MONITORING THE NUMBER OF TIMES EACH GIVEN SECTION
10 ! OF A PROGRAM IS INVOKED AS WELL AS THE MINIMUM, MAXIMUM
11 ! AND TOTAL WALL-CLOCK TIME SPENT IN THE GIVEN SECTION.
13 ! PROGRAM HISTORY LOG:
14 ! 1998-07-16 IREDELL
16 ! USAGE: CALL INSTRUMENT(K,KALL,TTOT,TMIN,TMAX)
17 ! INPUT ARGUMENT LIST:
18 ! K - INTEGER POSITIVE SECTION NUMBER
19 ! OR MAXIMUM SECTION NUMBER IN THE FIRST INVOCATION
20 ! OR ZERO TO RESET ALL WALL-CLOCK STATISTICS
21 ! OR NEGATIVE SECTION NUMBER TO SKIP MONITORING
22 ! AND JUST RETURN STATISTICS.
24 ! OUTPUT ARGUMENT LIST:
25 ! KALL - INTEGER NUMBER OF TIMES SECTION IS CALLED
26 ! TTOT - REAL TOTAL SECONDS SPENT IN SECTION
27 ! TMIN - REAL MINIMUM SECONDS SPENT IN SECTION
28 ! TMAX - REAL MAXIMUM SECONDS SPENT IN SECTION
30 ! SUBPROGRAMS CALLED:
31 ! W3UTCDAT RETURN THE UTC DATE AND TIME
32 ! W3DIFDAT RETURN A TIME INTERVAL BETWEEN TWO DATES
34 ! REMARKS:
35 ! THIS SUBPROGRAM SHOULD NOT BE INVOKED FROM A MULTITASKING REGION.
36 ! NORMALLY, TIME SPENT INSIDE THIS SUBPROGRAM IS NOT COUNTED.
37 ! WALL-CLOCK TIMES ARE KEPT TO THE NEAREST MILLISECOND.
39 ! EXAMPLE.
40 ! CALL INSTRUMENT(2,KALL,TTOT,TMIN,TMAX) ! KEEP STATS FOR 2 SUBS
41 ! DO K=1,N
42 ! CALL SUB1
43 ! CALL INSTRUMENT(1,KALL,TTOT,TMIN,TMAX) ! ACCUM STATS FOR SUB1
44 ! CALL SUB2
45 ! CALL INSTRUMENT(2,KALL,TTOT,TMIN,TMAX) ! ACCUM STATS FOR SUB2
46 ! ENDDO
47 ! PRINT *,'SUB2 STATS: ',KALL,TTOT,TMIN,TMAX
48 ! CALL INSTRUMENT(-1,KALL,TTOT,TMIN,TMAX) ! RETURN STATS FOR SUB1
49 ! PRINT *,'SUB1 STATS: ',KALL,TTOT,TMIN,TMAX
51 ! ATTRIBUTES:
52 ! LANGUAGE: FORTRAN 90
54 !$$$
55 IMPLICIT NONE
56 INTEGER,INTENT(IN):: K
57 INTEGER,INTENT(OUT):: KALL
58 REAL,INTENT(OUT):: TTOT,TMIN,TMAX
59 INTEGER,SAVE:: KMAX=0
60 INTEGER,DIMENSION(:),ALLOCATABLE,SAVE:: KALLS
61 REAL,DIMENSION(:),ALLOCATABLE,SAVE:: TTOTS,TMINS,TMAXS
62 INTEGER,DIMENSION(8),SAVE:: IDAT
63 INTEGER,DIMENSION(8):: JDAT
64 REAL,DIMENSION(5):: RINC
65 INTEGER:: KA
66 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
67 KA=ABS(K)
68 ! ALLOCATE MONITORING ARRAYS IF INITIAL INVOCATION
69 IF(KMAX.EQ.0) THEN
70 KMAX=K
71 ALLOCATE(KALLS(KMAX))
72 ALLOCATE(TTOTS(KMAX))
73 ALLOCATE(TMINS(KMAX))
74 ALLOCATE(TMAXS(KMAX))
75 KALLS=0
76 KA=0
77 ! OR RESET ALL STATISTICS BACK TO ZERO
78 ELSEIF(K.EQ.0) THEN
79 KALLS=0
80 ! OR COUNT TIME SINCE LAST INVOCATION AGAINST THIS SECTION
81 ELSEIF(K.GT.0) THEN
82 CALL W3UTCDAT(JDAT)
83 CALL W3DIFDAT(JDAT,IDAT,4,RINC)
84 KALLS(K)=KALLS(K)+1
85 IF(KALLS(K).EQ.1) THEN
86 TTOTS(K)=RINC(4)
87 TMINS(K)=RINC(4)
88 TMAXS(K)=RINC(4)
89 ELSE
90 TTOTS(K)=TTOTS(K)+RINC(4)
91 TMINS(K)=MIN(TMINS(K),RINC(4))
92 TMAXS(K)=MAX(TMAXS(K),RINC(4))
93 ENDIF
94 ENDIF
95 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
96 ! RETURN STATISTICS
97 IF(KA.GE.1.AND.KA.LE.KMAX.AND.KALLS(KA).GT.0) THEN
98 KALL=KALLS(KA)
99 TTOT=TTOTS(KA)
100 TMIN=TMINS(KA)
101 TMAX=TMAXS(KA)
102 ELSE
103 KALL=0
104 TTOT=0
105 TMIN=0
106 TMAX=0
107 ENDIF
108 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
109 ! KEEP CURRENT TIME FOR NEXT INVOCATION
110 IF(K.GE.0) CALL W3UTCDAT(IDAT)
111 END SUBROUTINE INSTRUMENT