/[MITgcm]/MITgcm/eesupp/src/timers.F
ViewVC logotype

Annotation of /MITgcm/eesupp/src/timers.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.9 - (hide annotations) (download)
Sun Feb 4 14:38:44 2001 UTC (23 years, 4 months ago) by cnh
Branch: MAIN
CVS Tags: checkpoint40pre3, checkpoint40pre1, checkpoint40pre7, checkpoint40pre6, checkpoint40pre9, checkpoint40pre8, checkpoint38, checkpoint40pre2, checkpoint40pre4, pre38tag1, c37_adj, pre38-close, checkpoint39, checkpoint37, checkpoint36, checkpoint35, checkpoint40pre5, checkpoint40
Branch point for: pre38
Changes since 1.8: +2 -1 lines
Made sure each .F and .h file had
the CVS keywords Header and Name at its start.
Most had header but very few currently have Name, so
lots of changes!

1 cnh 1.9 C $Header: /u/gcmpack/models/MITgcmUV/eesupp/src/timers.F,v 1.8 2000/06/21 20:44:06 heimbach Exp $
2     C $Name: $
3 adcroft 1.1
4     #include "CPP_EEOPTIONS.h"
5    
6     C-- File utils.F: General purpose support routines
7     C-- Contents
8     C-- TIMER_INDEX - Returns index associated with timer name.
9     C-- M TIMER_CONTROL - Implements timer functions for given machine.
10     C-- TIMER_PRINT - Print CPU timer statitics.
11     C-- TIMER_PRINTALL - Prints all CPU timers statistics.
12     C-- TIMER_START - Starts CPU timer for code section.
13     C-- TIMER_STOP - Stop CPU tier for code section.
14     C-- Routines marked "M" contain specific machine dependent code.
15     C-- Routines marked "U" contain UNIX OS calls.
16    
17     CStartOfInterface
18     INTEGER FUNCTION TIMER_INDEX (
19     I name,timerNames,maxTimers,nTimers )
20     C /==========================================================\
21     C | FUNCTION TIMER_INDEX |
22     C | o Timing support routine. |
23     C |==========================================================|
24     C | Return index in timer data structure of timer named |
25     C | by the function argument "name". |
26     C \==========================================================/
27 adcroft 1.5 IMPLICIT NONE
28 adcroft 1.1 INTEGER maxTimers
29     INTEGER nTimers
30     CHARACTER*(*) name
31     CHARACTER*(*) timerNames(maxTimers)
32     CEndOfInterface
33     INTEGER I
34     C
35     TIMER_INDEX = 0
36     IF ( name .EQ. ' ' ) THEN
37     TIMER_INDEX = -1
38     ELSE
39     DO 10 I = 1, nTimers
40     IF ( name .NE. timerNames(I) ) GOTO 10
41     TIMER_INDEX = I
42     GOTO 11
43     10 CONTINUE
44     11 CONTINUE
45     ENDIF
46     RETURN
47     END
48    
49     CStartOfInterface
50     SUBROUTINE TIMER_CONTROL ( name , action , callProc , myThreadId )
51     C /==========================================================\
52     C | SUBROUTINE TIMER_CONTROL |
53     C | o Timing routine. |
54     C |==========================================================|
55     C | User callable interface to timing routines. Timers are |
56     C | created, stopped, started and queried only through this |
57     C | rtouine. |
58     C \==========================================================/
59 adcroft 1.5 IMPLICIT NONE
60 adcroft 1.1 #include "SIZE.h"
61     #include "EEPARAMS.h"
62     #include "EESUPPORT.h"
63     CHARACTER*(*) name
64     CHARACTER*(*) action
65     CHARACTER*(*) callProc
66     INTEGER myThreadId
67     CEndOfInterface
68     C
69     INTEGER TIMER_INDEX
70     INTEGER IFNBLNK
71     INTEGER ILNBLNK
72     EXTERNAL TIMER_INDEX
73     EXTERNAL IFNBLNK
74     EXTERNAL ILNBLNK
75     C
76     INTEGER maxTimers
77     INTEGER maxString
78     PARAMETER ( maxTimers = 40 )
79     PARAMETER ( maxString = 80 )
80     C
81     INTEGER timerStarts( maxTimers , MAX_NO_THREADS)
82     SAVE timerStarts
83     INTEGER timerStops ( maxTimers , MAX_NO_THREADS)
84     SAVE timerStops
85     Real*8 timerUser ( maxTimers , MAX_NO_THREADS)
86     SAVE timerUser
87     Real*8 timerWall ( maxTimers , MAX_NO_THREADS)
88     SAVE timerWall
89     Real*8 timerSys ( maxTimers , MAX_NO_THREADS)
90     SAVE timerSys
91     Real*8 timerT0User( maxTimers , MAX_NO_THREADS)
92     SAVE timerT0User
93     Real*8 timerT0Wall( maxTimers , MAX_NO_THREADS)
94     SAVE timerT0Wall
95     Real*8 timerT0Sys ( maxTimers , MAX_NO_THREADS)
96     SAVE timerT0Sys
97     C ===============================================================
98     C
99     INTEGER timerStatus( maxTimers , MAX_NO_THREADS)
100     SAVE timerStatus
101     INTEGER timerNameLen( maxTimers , MAX_NO_THREADS)
102     SAVE timerNameLen
103     CHARACTER*(maxString) timerNames( maxTimers , MAX_NO_THREADS)
104     SAVE timerNames
105     INTEGER nTimers(MAX_NO_THREADS)
106     CHARACTER*(maxString) tmpName
107     CHARACTER*(maxString) tmpAction
108     INTEGER iTimer
109     INTEGER ISTART
110     INTEGER IEND
111     INTEGER STOPPED
112     PARAMETER ( STOPPED = 0 )
113     INTEGER RUNNING
114     PARAMETER ( RUNNING = 1 )
115     CHARACTER*(*) STOP
116     PARAMETER ( STOP = 'STOP' )
117     CHARACTER*(*) START
118     PARAMETER ( START = 'START' )
119     CHARACTER*(*) PRINT
120     PARAMETER ( PRINT = 'PRINT' )
121     CHARACTER*(*) PRINTALL
122     PARAMETER ( PRINTALL = 'PRINTALL' )
123     INTEGER I
124     Real*8 userTime
125     Real*8 systemTime
126     Real*8 wallClockTime
127     CHARACTER*(MAX_LEN_MBUF) msgBuffer
128     C
129     DATA nTimers /MAX_NO_THREADS*0/
130     SAVE nTimers
131     C
132     ISTART = IFNBLNK(name)
133     IEND = ILNBLNK(name)
134     IF ( IEND - ISTART + 1 .GT. maxString ) GOTO 901
135     IF ( ISTART .NE. 0 ) THEN
136     tmpName = name(ISTART:IEND)
137     CALL UCASE( tmpName )
138     ELSE
139     tmpName = ' '
140     ENDIF
141     ISTART = IFNBLNK(action)
142     IEND = ILNBLNK(action)
143     IF ( ISTART .EQ. 0 ) GOTO 902
144     IF ( IEND - ISTART + 1 .GT. maxString ) GOTO 903
145     tmpAction = action(ISTART:IEND)
146     CALL UCASE( tmpAction )
147     C
148 cnh 1.4 iTimer=TIMER_INDEX(tmpName,timerNames(1,myThreadId),
149     & maxTimers,nTimers(myThreadId))
150 adcroft 1.1 C
151     IF ( tmpAction .EQ. START ) THEN
152     IF ( iTimer .EQ. 0 ) THEN
153     IF ( nTimers(myThreadId) .EQ. maxTimers ) GOTO 904
154     nTimers(myThreadId) = nTimers(myThreadId) + 1
155     iTimer = nTimers(myThreadId)
156     timerNames(iTimer,myThreadId) = tmpName
157 cnh 1.4 timerNameLen(iTimer,myThreadId) =
158     & ILNBLNK(tmpName)-IFNBLNK(tmpName)+1
159 adcroft 1.1 timerUser(iTimer,myThreadId) = 0.
160     timerSys (iTimer,myThreadId) = 0.
161     timerWall(iTimer,myThreadId) = 0.
162     timerStarts(iTimer,myThreadId) = 0
163     timerStops (iTimer,myThreadId) = 0
164     timerStatus(iTimer,myThreadId) = STOPPED
165     ENDIF
166     IF ( timerStatus(iTimer,myThreadId) .NE. RUNNING ) THEN
167     CALL TIMER_GET_TIME( userTime, systemTime, wallClockTime )
168     timerT0User(iTimer,myThreadId) = userTime
169     timerT0Sys(iTimer,myThreadId) = systemTime
170     timerT0Wall(iTimer,myThreadId) = wallClockTime
171     timerStatus(iTimer,myThreadId) = RUNNING
172 cnh 1.4 timerStarts(iTimer,myThreadId) =
173     & timerStarts(iTimer,myThreadId)+1
174 adcroft 1.1 ENDIF
175     ELSEIF ( tmpAction .EQ. STOP ) THEN
176     IF ( iTimer .EQ. 0 ) GOTO 905
177     IF ( timerStatus(iTimer,myThreadId) .EQ. RUNNING ) THEN
178     CALL TIMER_GET_TIME( userTime, systemTime, wallClockTime )
179 cnh 1.4 timerUser(iTimer,myThreadId) =
180     & timerUser(iTimer,myThreadId) +
181 adcroft 1.1 & userTime -
182     & timerT0User(iTimer,myThreadId)
183 cnh 1.4 timerSys (iTimer,myThreadId) =
184     & timerSys(iTimer,myThreadId) +
185 adcroft 1.1 & systemTime -
186     & timerT0Sys(iTimer,myThreadId)
187 cnh 1.4 timerWall(iTimer,myThreadId) =
188     & timerWall(iTimer,myThreadId) +
189 adcroft 1.1 & wallClockTime -
190     & timerT0Wall(iTimer,myThreadId)
191     timerStatus(iTimer,myThreadId) = STOPPED
192 cnh 1.4 timerStops (iTimer,myThreadId) =
193     & timerStops (iTimer,myThreadId)+1
194 adcroft 1.1 ENDIF
195     ELSEIF ( tmpAction .EQ. PRINT ) THEN
196     IF ( iTimer .EQ. 0 ) GOTO 905
197     WRITE(msgBuffer,*)
198     & ' Seconds in section "',
199 cnh 1.4 & timerNames(iTimer,myThreadId)(1:timerNameLen(iTimer,myThreadId))
200     & ,'":'
201     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
202     & SQUEEZE_RIGHT,myThreadId)
203     WRITE(msgBuffer,*) ' User time:',
204     & timerUser(iTimer,myThreadId)
205     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
206     & SQUEEZE_RIGHT,myThreadId)
207     WRITE(msgBuffer,*) ' System time:',
208     & timerSys(iTimer,myThreadId)
209     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
210     & SQUEEZE_RIGHT,myThreadId)
211     WRITE(msgBuffer,*) ' Wall clock time:',
212     & timerWall(iTimer,myThreadId)
213     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
214     & SQUEEZE_RIGHT,myThreadId)
215     WRITE(msgBuffer,*) ' No. starts:',
216     & timerStarts(iTimer,myThreadId)
217     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
218     & SQUEEZE_RIGHT,myThreadId)
219     WRITE(msgBuffer,*) ' No. stops:',
220     & timerStops(iTimer,myThreadId)
221     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
222     & SQUEEZE_RIGHT,myThreadId)
223 adcroft 1.1 ELSEIF ( tmpAction .EQ. PRINTALL ) THEN
224     DO 10 I = 1, nTimers(myThreadId)
225     WRITE(msgBuffer,*) ' Seconds in section "',
226 cnh 1.4 & timerNames(I,myThreadId)(1:timerNameLen(I,myThreadId))
227     & ,'":'
228     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
229     & SQUEEZE_RIGHT,myThreadId)
230     WRITE(msgBuffer,*) ' User time:',
231     & timerUser(I,myThreadId)
232     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
233     & SQUEEZE_RIGHT,myThreadId)
234     WRITE(msgBuffer,*) ' System time:',
235     & timerSys(I,myThreadId)
236     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
237     & SQUEEZE_RIGHT,myThreadId)
238     WRITE(msgBuffer,*) ' Wall clock time:',
239     & timerWall(I,myThreadId)
240     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
241     & SQUEEZE_RIGHT,myThreadId)
242     WRITE(msgBuffer,*) ' No. starts:',
243     & timerStarts(I,myThreadId)
244     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
245     & SQUEEZE_RIGHT,myThreadId)
246     WRITE(msgBuffer,*) ' No. stops:',
247     & timerStops(I,myThreadId)
248     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
249     & SQUEEZE_RIGHT,myThreadId)
250 adcroft 1.1 10 CONTINUE
251     ELSE
252     GOTO 903
253     ENDIF
254     C
255     1000 CONTINUE
256     C
257     RETURN
258     901 CONTINUE
259     WRITE(msgBuffer,'(A)')
260     &' '
261 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
262     & SQUEEZE_RIGHT,myThreadId)
263 adcroft 1.1 WRITE(msgBuffer,*)
264     &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
265 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
266     & SQUEEZE_RIGHT,myThreadId)
267 adcroft 1.1 WRITE(msgBuffer,*)
268     &'procedure: "',callProc,'".'
269 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
270     & SQUEEZE_RIGHT,myThreadId)
271 adcroft 1.1 WRITE(msgBuffer,*)
272     &'Timer name "',name(ISTART:IEND),'" is invalid.'
273 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
274     & SQUEEZE_RIGHT,myThreadId)
275 adcroft 1.1 WRITE(msgBuffer,*)
276     &' Names must have fewer than',maxString+1,' characters.'
277 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
278     & SQUEEZE_RIGHT,myThreadId)
279 adcroft 1.1 WRITE(msgBuffer,*)
280     &'*******************************************************'
281 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
282     & SQUEEZE_RIGHT,myThreadId)
283 adcroft 1.1 GOTO 1000
284     902 CONTINUE
285     WRITE(msgBuffer,*)
286     &' '
287 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
288     & SQUEEZE_RIGHT,myThreadId)
289 adcroft 1.1 WRITE(msgBuffer,*)
290     &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
291 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
292     & SQUEEZE_RIGHT,myThreadId)
293 adcroft 1.1 WRITE(msgBuffer,*)
294     &'procedure: "',callProc,'".'
295 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
296     & SQUEEZE_RIGHT,myThreadId)
297 adcroft 1.1 WRITE(msgBuffer,*)
298     &' No timer action specified.'
299 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
300     & SQUEEZE_RIGHT,myThreadId)
301 adcroft 1.1 WRITE(msgBuffer,*)
302     &' Valid actions are:'
303 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
304     & SQUEEZE_RIGHT,myThreadId)
305 adcroft 1.1 WRITE(msgBuffer,*)
306     &' "START", "STOP", "PRINT" and "PRINTALL".'
307 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
308     & SQUEEZE_RIGHT,myThreadId)
309 adcroft 1.1 WRITE(msgBuffer,*)
310     &'*******************************************************'
311 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
312     & SQUEEZE_RIGHT,myThreadId)
313 adcroft 1.1 GOTO 1000
314     903 CONTINUE
315     WRITE(msgBuffer,*)
316     &' '
317 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
318     & SQUEEZE_RIGHT,myThreadId)
319 adcroft 1.1 WRITE(msgBuffer,*)
320     &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
321 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
322     & SQUEEZE_RIGHT,myThreadId)
323 adcroft 1.1 WRITE(msgBuffer,*)
324     &'procedure: "',callProc,'".'
325 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
326     & SQUEEZE_RIGHT,myThreadId)
327 adcroft 1.1 WRITE(msgBuffer,*)
328     &'Timer action"',name(ISTART:IEND),'" is invalid.'
329 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
330     & SQUEEZE_RIGHT,myThreadId)
331 adcroft 1.1 WRITE(msgBuffer,*)
332     &' Valid actions are:'
333 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
334     & SQUEEZE_RIGHT,myThreadId)
335 adcroft 1.1 WRITE(msgBuffer,*)
336     &' "START", "STOP", "PRINT" and "PRINTALL".'
337 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
338     & SQUEEZE_RIGHT,myThreadId)
339 adcroft 1.1 WRITE(msgBuffer,*)
340     &'*******************************************************'
341 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
342     & SQUEEZE_RIGHT,myThreadId)
343 adcroft 1.1 GOTO 1000
344     904 CONTINUE
345     WRITE(msgBuffer,*)
346     &' '
347 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
348     & SQUEEZE_RIGHT,myThreadId)
349 adcroft 1.1 WRITE(msgBuffer,*)
350     &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
351 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
352     & SQUEEZE_RIGHT,myThreadId)
353 adcroft 1.1 WRITE(msgBuffer,*)
354     &'procedure: "',callProc,'".'
355 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
356     & SQUEEZE_RIGHT,myThreadId)
357 adcroft 1.1 WRITE(msgBuffer,*)
358     &'Timer "',name(ISTART:IEND),'" cannot be created.'
359 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
360     & SQUEEZE_RIGHT,myThreadId)
361 adcroft 1.1 WRITE(msgBuffer,*)
362     &' Only ',maxTimers,' timers are allowed.'
363 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
364     & SQUEEZE_RIGHT,myThreadId)
365 adcroft 1.1 WRITE(msgBuffer,*)
366     &'*******************************************************'
367 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
368     & SQUEEZE_RIGHT,myThreadId)
369 adcroft 1.1 GOTO 1000
370     905 CONTINUE
371     WRITE(msgBuffer,*)
372     &' '
373 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
374     & SQUEEZE_RIGHT,myThreadId)
375 adcroft 1.1 WRITE(msgBuffer,*)
376     &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
377 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
378     & SQUEEZE_RIGHT,myThreadId)
379 adcroft 1.1 WRITE(msgBuffer,*)
380     &'procedure: "',callProc,'".'
381 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
382     & SQUEEZE_RIGHT,myThreadId)
383 adcroft 1.1 WRITE(msgBuffer,*)
384     &'Timer name is blank.'
385 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
386     & SQUEEZE_RIGHT,myThreadId)
387 adcroft 1.1 WRITE(msgBuffer,*)
388     &' A name must be used with "START", "STOP" or "PRINT".'
389 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
390     & SQUEEZE_RIGHT,myThreadId)
391 adcroft 1.1 WRITE(msgBuffer,*)
392     &'*******************************************************'
393 cnh 1.4 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
394     & SQUEEZE_RIGHT,myThreadId)
395 adcroft 1.1 GOTO 1000
396     END
397    
398     CStartOfInterface
399     SUBROUTINE TIMER_GET_TIME(
400     O userTime,
401     O systemTime,
402     O wallClockTime )
403     C /==========================================================\
404     C | SUBROUTINE TIMER_GET_TIME |
405     C | o Query system timer routines. |
406     C |==========================================================|
407     C | Routine returns total elapsed time for program so far. |
408     C | Three times are returned that conventionally are used as |
409     C | user time, system time and wall-clock time. Not all these|
410     C | numbers are available on all machines. |
411     C \==========================================================/
412 adcroft 1.5 IMPLICIT NONE
413 adcroft 1.1 Real*8 userTime
414     Real*8 systemTime
415     Real*8 wallClockTime
416     CEndOfInterface
417     Real*4 ETIME, ACTUAL, TARRAY(2)
418 adcroft 1.6 #ifndef TARGET_T3E
419 heimbach 1.8 #ifndef TARGET_CRAY_VECTOR
420 adcroft 1.1 EXTERNAL ETIME
421 adcroft 1.6 #endif
422 heimbach 1.8 #endif
423 adcroft 1.1 Real*8 wtime
424 cnh 1.4 C Real*8 MPI_Wtime
425     C EXTERNAL MPI_Wtime
426 adcroft 1.1
427 heimbach 1.8 #if (defined (TARGET_T3E) || defined (TARGET_CRAY_VECTOR))
428 adcroft 1.6 userTime = 0.
429     systemTime = 0.
430     #else
431 adcroft 1.1 ACTUAL = ETIME(TARRAY)
432     userTime = TARRAY(1)
433     systemTime = TARRAY(2)
434 adcroft 1.6 #endif
435    
436 heimbach 1.8 #if (defined (TARGET_T3E) || defined (TARGET_CRAY_VECTOR))
437 adcroft 1.6 wallClockTime = 0.
438     #else
439 cnh 1.3 CALL CLOC(wTime)
440     wallClockTime = wtime
441 adcroft 1.6 #endif
442 cnh 1.3
443 adcroft 1.1 #ifdef ALLOW_USE_MPI
444 cnh 1.3 C wtime = MPI_Wtime()
445     C wallClockTime = wtime
446 adcroft 1.1 #endif /* ALLOW_USE_MPI */
447     #ifndef ALLOW_USE_MPI
448 cnh 1.3 C wallClockTime = 0.
449 adcroft 1.1 #endif
450    
451     RETURN
452     END
453    
454     CStartOfInterface
455     SUBROUTINE TIMER_PRINTALL( myThreadId )
456     C /==========================================================\
457     C | SUBROUTINE TIMER_PRINTALL |
458     C | o Print timer information |
459     C |==========================================================|
460     C | Request print out of table of timing from all timers. |
461     C \==========================================================/
462 adcroft 1.5 IMPLICIT NONE
463 adcroft 1.1 INTEGER myThreadId
464     CEndOfInterface
465     C Print out value for every timer.
466     C
467 cnh 1.4 CALL TIMER_CONTROL( ' ', 'PRINTALL', 'TIMER_PRINTALL' ,
468     & myThreadId )
469 adcroft 1.1 C
470     RETURN
471     END
472     C***********************************************************************
473     SUBROUTINE TIMER_START ( string , myThreadId )
474     C Return start timer named "string".
475 adcroft 1.5 IMPLICIT NONE
476 adcroft 1.1 CHARACTER*(*) string
477     INTEGER myThreadId
478     C
479     CALL TIMER_CONTROL( string, 'START', 'TIMER_START' , myThreadId)
480     C
481     RETURN
482     END
483     C***********************************************************************
484     SUBROUTINE TIMER_STOP ( string , myThreadId)
485     C Return start timer named "string".
486 adcroft 1.5 IMPLICIT NONE
487 adcroft 1.1 CHARACTER*(*) string
488     INTEGER myThreadId
489     C
490     CALL TIMER_CONTROL( string, 'STOP', 'TIMER_STOP' , myThreadId )
491     C
492     RETURN
493     END
494     C***********************************************************************

  ViewVC Help
Powered by ViewVC 1.1.22