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

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

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


Revision 1.1 - (show 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 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