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

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

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


Revision 1.1 - (hide annotations) (download)
Wed Apr 22 19:15:30 1998 UTC (26 years, 1 month ago) by cnh
Branch: MAIN
Branch point for: cnh
Initial revision

1 cnh 1.1 C $Id$
2    
3     #include "CPP_EEOPTIONS.h"
4    
5     C-- File utils.F: General purpose support routines
6     C-- Contents
7     C-- U DATE - Returns date and time.
8     C-- IFNBLNK - Returns index of first non-blank string character.
9     C-- ILNBLNK - Returns index of last non-blank string character.
10     C-- LCASE - Translates to lower case.
11     C--UM MACHINE - Returns character string identifying computer.
12     C-- TIMER_INDEX - Returns index associated with timer name.
13     C-- M TIMER_CONTROL - Implements timer functions for given machine.
14     C-- TIMER_PRINT - Print CPU timer statitics.
15     C-- TIMER_PRINTALL - Prints all CPU timers statistics.
16     C-- TIMER_START - Starts CPU timer for code section.
17     C-- TIMER_STOP - Stop CPU tier for code section.
18     C-- UCASE - Translates to upper case.
19     C-- Routines marked "M" contain specific machine dependent code.
20     C-- Routines marked "U" contain UNIX OS calls.
21    
22     CStartOfInterface
23     SUBROUTINE DATE ( string , myThreadId )
24     C /==========================================================\
25     C | SUBROUTINE DATE |
26     C | o Return current date |
27     C \==========================================================/
28     #include "SIZE.h"
29     #include "EEPARAMS.h"
30     C
31     CHARACTER*(*) string
32     INTEGER myThreadId
33     CEndOfInterface
34     C
35     INTEGER lDate
36     CHARACTER*(MAX_LEN_MBUF) msgBuffer
37     C
38     lDate = 24
39     IF ( LEN(string) .LT. lDate ) GOTO 901
40     string = ' '
41     CALL FDATE( string )
42     C
43     1000 CONTINUE
44     RETURN
45     901 CONTINUE
46     WRITE(msgBuffer,'(A)')
47     &' '
48     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
49     WRITE(msgBuffer,'(A)')
50     &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
51     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
52     WRITE(msgBuffer,'(A)')
53     &'procedure: "DATE".'
54     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
55     WRITE(msgBuffer,'(A)')
56     &'Variable passed to S/R DATE is too small.'
57     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
58     WRITE(msgBuffer,'(A)')
59     &' Argument must be at least',lDate,'characters long.'
60     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
61     WRITE(msgBuffer,'(A)')
62     &'*******************************************************'
63     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
64     GOTO 1000
65     END
66    
67     CStartOfInterface
68     INTEGER FUNCTION IFNBLNK( string )
69     C /==========================================================\
70     C | FUNCTION IFNBLNK |
71     C | o Find first non-blank in character string. |
72     C \==========================================================/
73     C
74     CHARACTER*(*) string
75     CEndOfInterface
76     C
77     INTEGER L, LS
78     C
79     LS = LEN(string)
80     IFNBLNK = 0
81     DO 10 L = 1, LS
82     IF ( string(L:L) .EQ. ' ' ) GOTO 10
83     IFNBLNK = L
84     GOTO 11
85     10 CONTINUE
86     11 CONTINUE
87     C
88     RETURN
89     END
90    
91     CStartOfInterface
92     INTEGER FUNCTION ILNBLNK( string )
93     C /==========================================================\
94     C | FUNCTION ILNBLNK |
95     C | o Find last non-blank in character string. |
96     C \==========================================================/
97     CHARACTER*(*) string
98     CEndOfInterface
99     INTEGER L, LS
100     C
101     LS = LEN(string)
102     ILNBLNK = LS
103     DO 10 L = LS, 1, -1
104     IF ( string(L:L) .EQ. ' ' ) GOTO 10
105     ILNBLNK = L
106     GOTO 11
107     10 CONTINUE
108     11 CONTINUE
109     C
110     RETURN
111     END
112    
113     CStartOfInterface
114     SUBROUTINE LCASE ( string )
115     C /==========================================================\
116     C | SUBROUTINE LCASE |
117     C | o Convert character string to all lower case. |
118     C \==========================================================/
119     CHARACTER*(*) string
120     CEndOfInterface
121     CHARACTER*26 LOWER
122     DATA LOWER /'abcdefghijklmnopqrstuvwxyz'/
123     SAVE LOWER
124     CHARACTER*26 UPPER
125     DATA UPPER /'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
126     SAVE UPPER
127     INTEGER I, L
128     C
129     DO 10 I = 1, LEN(string)
130     L = INDEX(UPPER,string(I:I))
131     IF ( L .EQ. 0 ) GOTO 10
132     string(I:I) = LOWER(L:L)
133     10 CONTINUE
134     C
135     RETURN
136     END
137    
138     CStartOfInterface
139     SUBROUTINE MACHINE ( string )
140     C /==========================================================\
141     C | SUBROUTINE MACHINE |
142     C | o Return computer identifier in string. |
143     C \==========================================================/
144     #include "SIZE.h"
145     #include "EEPARAMS.h"
146     CHARACTER*(*) string
147     CEndOfInterface
148     C
149     INTEGER IFNBLNK
150     INTEGER ILNBLNK
151     EXTERNAL IFNBLNK
152     EXTERNAL ILNBLNK
153     C
154     INTEGER iFirst
155     INTEGER iLast
156     INTEGER iEnd
157     INTEGER iFree
158     INTEGER idSize
159     CHARACTER*1024 strTmp
160     CHARACTER*1024 idString
161    
162     strTmp = 'UNKNOWN'
163     iFree = 1
164     idSize = LEN(string)
165     CALL GETENV('USER',strTmp )
166     IF ( strTmp .NE. ' ' ) THEN
167     iFirst = IFNBLNK(strTmp)
168     iLast = ILNBLNK(strTmp)
169     iEnd = iLast-iFirst+1
170     IF (iEnd .GE. 0 ) THEN
171     idString(iFree:) = strTmp(iFirst:iFirst+iEnd)
172     ENDIF
173     iFree = iFree+iEnd+1
174     IF ( iFree .LE. idSize ) THEN
175     idString(iFree:iFree) = '@'
176     iFree = iFree+1
177     ENDIF
178     ENDIF
179     strTmp = 'UNKNOWN'
180     CALL GETENV('HOST',strtmp )
181     IF ( strTmp .NE. ' ' ) THEN
182     iFirst = IFNBLNK(strTmp)
183     iLast = ILNBLNK(strTmp)
184     iEnd = iLast-iFirst+1
185     iEnd = MIN(iEnd,idSize-iFree)
186     iEnd = iEnd-1
187     IF (iEnd .GE. 0 ) THEN
188     idString(iFree:) = strTmp(iFirst:iFirst+iEnd)
189     ENDIF
190     iFree = iFree+iEnd+1
191     ENDIF
192     C
193     string = idString
194     C
195     1000 CONTINUE
196     RETURN
197     END
198    
199     CStartOfInterface
200     INTEGER FUNCTION TIMER_INDEX (
201     I name,timerNames,maxTimers,nTimers )
202     C /==========================================================\
203     C | FUNCTION TIMER_INDEX |
204     C | o Timing support routine. |
205     C |==========================================================|
206     C | Return index in timer data structure of timer named |
207     C | by the function argument "name". |
208     C \==========================================================/
209     INTEGER maxTimers
210     INTEGER nTimers
211     CHARACTER*(*) name
212     CHARACTER*(*) timerNames(maxTimers)
213     CEndOfInterface
214     INTEGER I
215     C
216     TIMER_INDEX = 0
217     IF ( name .EQ. ' ' ) THEN
218     TIMER_INDEX = -1
219     ELSE
220     DO 10 I = 1, nTimers
221     IF ( name .NE. timerNames(I) ) GOTO 10
222     TIMER_INDEX = I
223     GOTO 11
224     10 CONTINUE
225     11 CONTINUE
226     ENDIF
227     RETURN
228     END
229    
230     CStartOfInterface
231     SUBROUTINE TIMER_CONTROL ( name , action , callProc , myThreadId )
232     C /==========================================================\
233     C | SUBROUTINE TIMER_CONTROL |
234     C | o Timing routine. |
235     C |==========================================================|
236     C | User callable interface to timing routines. Timers are |
237     C | created, stopped, started and queried only through this |
238     C | rtouine. |
239     C \==========================================================/
240     #include "SIZE.h"
241     #include "EEPARAMS.h"
242     #include "EESUPPORT.h"
243     CHARACTER*(*) name
244     CHARACTER*(*) action
245     CHARACTER*(*) callProc
246     INTEGER myThreadId
247     CEndOfInterface
248     C
249     INTEGER TIMER_INDEX
250     INTEGER IFNBLNK
251     INTEGER ILNBLNK
252     EXTERNAL TIMER_INDEX
253     EXTERNAL IFNBLNK
254     EXTERNAL ILNBLNK
255     C
256     INTEGER maxTimers
257     INTEGER maxString
258     PARAMETER ( maxTimers = 40 )
259     PARAMETER ( maxString = 80 )
260     C
261     INTEGER timerStarts( maxTimers , MAX_NO_THREADS)
262     SAVE timerStarts
263     INTEGER timerStops ( maxTimers , MAX_NO_THREADS)
264     SAVE timerStops
265     Real*8 timerUser ( maxTimers , MAX_NO_THREADS)
266     SAVE timerUser
267     Real*8 timerWall ( maxTimers , MAX_NO_THREADS)
268     SAVE timerWall
269     Real*8 timerSys ( maxTimers , MAX_NO_THREADS)
270     SAVE timerSys
271     Real*8 timerT0User( maxTimers , MAX_NO_THREADS)
272     SAVE timerT0User
273     Real*8 timerT0Wall( maxTimers , MAX_NO_THREADS)
274     SAVE timerT0Wall
275     Real*8 timerT0Sys ( maxTimers , MAX_NO_THREADS)
276     SAVE timerT0Sys
277     C ===============================================================
278     C
279     INTEGER timerStatus( maxTimers , MAX_NO_THREADS)
280     SAVE timerStatus
281     INTEGER timerNameLen( maxTimers , MAX_NO_THREADS)
282     SAVE timerNameLen
283     CHARACTER*(maxString) timerNames( maxTimers , MAX_NO_THREADS)
284     SAVE timerNames
285     CHARACTER*(maxString) timerAction
286     INTEGER nTimers(MAX_NO_THREADS)
287     CHARACTER*(maxString) tmpName
288     CHARACTER*(maxString) tmpAction
289     INTEGER iTimer
290     INTEGER ISTART
291     INTEGER IEND
292     INTEGER STOPPED
293     PARAMETER ( STOPPED = 0 )
294     INTEGER RUNNING
295     PARAMETER ( RUNNING = 1 )
296     CHARACTER*(*) STOP
297     PARAMETER ( STOP = 'STOP' )
298     CHARACTER*(*) START
299     PARAMETER ( START = 'START' )
300     CHARACTER*(*) PRINT
301     PARAMETER ( PRINT = 'PRINT' )
302     CHARACTER*(*) PRINTALL
303     PARAMETER ( PRINTALL = 'PRINTALL' )
304     INTEGER I
305     Real*8 userTime
306     Real*8 systemTime
307     Real*8 wallClockTime
308     CHARACTER*(MAX_LEN_MBUF) msgBuffer
309     C
310     DATA nTimers /MAX_NO_THREADS*0/
311     SAVE nTimers
312     C
313     ISTART = IFNBLNK(name)
314     IEND = ILNBLNK(name)
315     IF ( IEND - ISTART + 1 .GT. maxString ) GOTO 901
316     IF ( ISTART .NE. 0 ) THEN
317     tmpName = name(ISTART:IEND)
318     CALL UCASE( tmpName )
319     ELSE
320     tmpName = ' '
321     ENDIF
322     ISTART = IFNBLNK(action)
323     IEND = ILNBLNK(action)
324     IF ( ISTART .EQ. 0 ) GOTO 902
325     IF ( IEND - ISTART + 1 .GT. maxString ) GOTO 903
326     tmpAction = action(ISTART:IEND)
327     CALL UCASE( tmpAction )
328     C
329     iTimer=TIMER_INDEX(tmpName,timerNames(myThreadId,1),maxTimers,nTimers(myThreadId))
330     C
331     IF ( tmpAction .EQ. START ) THEN
332     IF ( iTimer .EQ. 0 ) THEN
333     IF ( nTimers(myThreadId) .EQ. maxTimers ) GOTO 904
334     nTimers(myThreadId) = nTimers(myThreadId) + 1
335     iTimer = nTimers(myThreadId)
336     timerNames(iTimer,myThreadId) = tmpName
337     timerNameLen(iTimer,myThreadId) = ILNBLNK(tmpName)-IFNBLNK(tmpName)+1
338     timerUser(iTimer,myThreadId) = 0.
339     timerSys (iTimer,myThreadId) = 0.
340     timerWall(iTimer,myThreadId) = 0.
341     timerStarts(iTimer,myThreadId) = 0
342     timerStops (iTimer,myThreadId) = 0
343     timerStatus(iTimer,myThreadId) = STOPPED
344     ENDIF
345     IF ( timerStatus(iTimer,myThreadId) .NE. RUNNING ) THEN
346     CALL TIMER_GET_TIME( userTime, systemTime, wallClockTime )
347     timerT0User(iTimer,myThreadId) = userTime
348     timerT0Sys(iTimer,myThreadId) = systemTime
349     timerT0Wall(iTimer,myThreadId) = wallClockTime
350     timerStatus(iTimer,myThreadId) = RUNNING
351     timerStarts(iTimer,myThreadId) = timerStarts(iTimer,myThreadId)+1
352     ENDIF
353     ELSEIF ( tmpAction .EQ. STOP ) THEN
354     IF ( iTimer .EQ. 0 ) GOTO 905
355     IF ( timerStatus(iTimer,myThreadId) .EQ. RUNNING ) THEN
356     CALL TIMER_GET_TIME( userTime, systemTime, wallClockTime )
357     timerUser(iTimer,myThreadId) = timerUser(iTimer,myThreadId) +
358     & userTime -
359     & timerT0User(iTimer,myThreadId)
360     timerSys (iTimer,myThreadId) = timerSys(iTimer,myThreadId) +
361     & systemTime -
362     & timerT0Sys(iTimer,myThreadId)
363     timerWall(iTimer,myThreadId) = timerWall(iTimer,myThreadId) +
364     & wallClockTime -
365     & timerT0Wall(iTimer,myThreadId)
366     timerStatus(iTimer,myThreadId) = STOPPED
367     timerStops (iTimer,myThreadId) = timerStops (iTimer,myThreadId)+1
368     ENDIF
369     ELSEIF ( tmpAction .EQ. PRINT ) THEN
370     IF ( iTimer .EQ. 0 ) GOTO 905
371     WRITE(msgBuffer,*)
372     & ' Seconds in section "',
373     & timerNames(iTimer,myThreadId)(1:timerNameLen(iTimer,myThreadId)),'":'
374     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
375     WRITE(msgBuffer,*) ' User time:',timerUser(iTimer,myThreadId)
376     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
377     WRITE(msgBuffer,*) ' System time:',timerSys(iTimer,myThreadId)
378     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
379     WRITE(msgBuffer,*) ' Wall clock time:',timerWall(iTimer,myThreadId)
380     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
381     WRITE(msgBuffer,*) ' No. starts:',timerStarts(iTimer,myThreadId)
382     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
383     WRITE(msgBuffer,*) ' No. stops:',timerStops(iTimer,myThreadId)
384     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
385     ELSEIF ( tmpAction .EQ. PRINTALL ) THEN
386     DO 10 I = 1, nTimers(myThreadId)
387     WRITE(msgBuffer,*) ' Seconds in section "',
388     & timerNames(I,myThreadId)(1:timerNameLen(I,myThreadId)),'":'
389     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
390     WRITE(msgBuffer,*) ' User time:',timerUser(I,myThreadId)
391     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
392     WRITE(msgBuffer,*) ' System time:',timerSys(I,myThreadId)
393     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
394     WRITE(msgBuffer,*) ' Wall clock time:',timerWall(I,myThreadId)
395     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
396     WRITE(msgBuffer,*) ' No. starts:',timerStarts(I,myThreadId)
397     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
398     WRITE(msgBuffer,*) ' No. stops:',timerStops(I,myThreadId)
399     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
400     10 CONTINUE
401     ELSE
402     GOTO 903
403     ENDIF
404     C
405     1000 CONTINUE
406     C
407     RETURN
408     901 CONTINUE
409     WRITE(msgBuffer,'(A)')
410     &' '
411     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
412     WRITE(msgBuffer,*)
413     &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
414     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
415     WRITE(msgBuffer,*)
416     &'procedure: "',callProc,'".'
417     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
418     WRITE(msgBuffer,*)
419     &'Timer name "',name(ISTART:IEND),'" is invalid.'
420     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
421     WRITE(msgBuffer,*)
422     &' Names must have fewer than',maxString+1,' characters.'
423     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
424     WRITE(msgBuffer,*)
425     &'*******************************************************'
426     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
427     GOTO 1000
428     902 CONTINUE
429     WRITE(msgBuffer,*)
430     &' '
431     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
432     WRITE(msgBuffer,*)
433     &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
434     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
435     WRITE(msgBuffer,*)
436     &'procedure: "',callProc,'".'
437     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
438     WRITE(msgBuffer,*)
439     &' No timer action specified.'
440     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
441     WRITE(msgBuffer,*)
442     &' Valid actions are:'
443     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
444     WRITE(msgBuffer,*)
445     &' "START", "STOP", "PRINT" and "PRINTALL".'
446     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
447     WRITE(msgBuffer,*)
448     &'*******************************************************'
449     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
450     GOTO 1000
451     903 CONTINUE
452     WRITE(msgBuffer,*)
453     &' '
454     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
455     WRITE(msgBuffer,*)
456     &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
457     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
458     WRITE(msgBuffer,*)
459     &'procedure: "',callProc,'".'
460     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
461     WRITE(msgBuffer,*)
462     &'Timer action"',name(ISTART:IEND),'" is invalid.'
463     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
464     WRITE(msgBuffer,*)
465     &' Valid actions are:'
466     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
467     WRITE(msgBuffer,*)
468     &' "START", "STOP", "PRINT" and "PRINTALL".'
469     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
470     WRITE(msgBuffer,*)
471     &'*******************************************************'
472     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
473     GOTO 1000
474     904 CONTINUE
475     WRITE(msgBuffer,*)
476     &' '
477     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
478     WRITE(msgBuffer,*)
479     &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
480     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
481     WRITE(msgBuffer,*)
482     &'procedure: "',callProc,'".'
483     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
484     WRITE(msgBuffer,*)
485     &'Timer "',name(ISTART:IEND),'" cannot be created.'
486     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
487     WRITE(msgBuffer,*)
488     &' Only ',maxTimers,' timers are allowed.'
489     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
490     WRITE(msgBuffer,*)
491     &'*******************************************************'
492     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
493     GOTO 1000
494     905 CONTINUE
495     WRITE(msgBuffer,*)
496     &' '
497     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
498     WRITE(msgBuffer,*)
499     &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
500     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
501     WRITE(msgBuffer,*)
502     &'procedure: "',callProc,'".'
503     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
504     WRITE(msgBuffer,*)
505     &'Timer name is blank.'
506     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
507     WRITE(msgBuffer,*)
508     &' A name must be used with "START", "STOP" or "PRINT".'
509     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
510     WRITE(msgBuffer,*)
511     &'*******************************************************'
512     CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,SQUEEZE_RIGHT,myThreadId)
513     GOTO 1000
514     END
515    
516     CStartOfInterface
517     SUBROUTINE TIMER_GET_TIME(
518     O userTime,
519     O systemTime,
520     O wallClockTime )
521     C /==========================================================\
522     C | SUBROUTINE TIMER_GET_TIME |
523     C | o Query system timer routines. |
524     C |==========================================================|
525     C | Routine returns total elapsed time for program so far. |
526     C | Three times are returned that conventionally are used as |
527     C | user time, system time and wall-clock time. Not all these|
528     C | numbers are available on all machines. |
529     C \==========================================================/
530     Real*8 userTime
531     Real*8 systemTime
532     Real*8 wallClockTime
533     CEndOfInterface
534     Real*4 ETIME, ACTUAL, TARRAY(2)
535     EXTERNAL ETIME
536     Real*8 wtime
537     Real*8 MPI_Wtime
538     EXTERNAL MPI_Wtime
539    
540     ACTUAL = ETIME(TARRAY)
541    
542     userTime = TARRAY(1)
543     systemTime = TARRAY(2)
544     #ifdef ALLOW_USE_MPI
545     wtime = MPI_Wtime()
546     WRITE(0,*) ' Wtime = ', wtime
547     wallClockTime = wtime
548     WRITE(0,*) ' WallClocktime = ', wallClockTime
549     #endif /* ALLOW_USE_MPI */
550     #ifndef ALLOW_USE_MPI
551     wallClockTime = 0.
552     #endif
553    
554     RETURN
555     END
556    
557     CStartOfInterface
558     SUBROUTINE TIMER_PRINTALL( myThreadId )
559     C /==========================================================\
560     C | SUBROUTINE TIMER_PRINTALL |
561     C | o Print timer information |
562     C |==========================================================|
563     C | Request print out of table of timing from all timers. |
564     C \==========================================================/
565     INTEGER myThreadId
566     CEndOfInterface
567     C Print out value for every timer.
568     C
569     CALL TIMER_CONTROL( ' ', 'PRINTALL', 'TIMER_PRINTALL' , myThreadId )
570     C
571     RETURN
572     END
573     C***********************************************************************
574     SUBROUTINE TIMER_START ( string , myThreadId )
575     C Return start timer named "string".
576     CHARACTER*(*) string
577     INTEGER myThreadId
578     C
579     CALL TIMER_CONTROL( string, 'START', 'TIMER_START' , myThreadId)
580     C
581     RETURN
582     END
583     C***********************************************************************
584     SUBROUTINE TIMER_STOP ( string , myThreadId)
585     C Return start timer named "string".
586     CHARACTER*(*) string
587     INTEGER myThreadId
588     C
589     CALL TIMER_CONTROL( string, 'STOP', 'TIMER_STOP' , myThreadId )
590     C
591     RETURN
592     END
593     C***********************************************************************
594     SUBROUTINE UCASE ( string )
595     C Translate string to upper case.
596     CHARACTER*(*) string
597     CHARACTER*26 LOWER
598     DATA LOWER /'abcdefghijklmnopqrstuvwxyz'/
599     SAVE LOWER
600     CHARACTER*26 UPPER
601     DATA UPPER /'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
602     SAVE UPPER
603     INTEGER I, L
604     C
605     DO 10 I = 1, LEN(string)
606     L = INDEX(LOWER,string(I:I))
607     IF ( L .EQ. 0 ) GOTO 10
608     string(I:I) = UPPER(L:L)
609     10 CONTINUE
610     C
611     RETURN
612     END
613     C************************************************************************

  ViewVC Help
Powered by ViewVC 1.1.22