source: palm/trunk/SOURCE/cpu_log.f90 @ 260

Last change on this file since 260 was 254, checked in by heinze, 16 years ago

Output of messages replaced by message handling routine.

  • Property svn:keywords set to Id
File size: 4.5 KB
Line 
1 SUBROUTINE cpu_log( log_event, place, modus, barrierwait )
2
3!------------------------------------------------------------------------------!
4! Current revisions:
5! -----------------
6! Output of messages replaced by message handling routine.
7! Type of count and count_rate changed to default INTEGER on NEC machines
8!
9! Former revisions:
10! -----------------
11! $Id: cpu_log.f90 254 2009-03-05 15:33:42Z raasch $
12!
13! 225 2009-01-26 14:44:20Z raasch
14! Type of count and count_rate changed to INTEGER(8)
15!
16! 82 2007-04-16 15:40:52Z raasch
17! Preprocessor strings for different linux clusters changed to "lc",
18! preprocessor directives for old systems removed
19!
20! RCS Log replace by Id keyword, revision history cleaned up
21!
22! Revision 1.24  2006/06/02 15:12:17  raasch
23! cpp-directives extended for lctit
24!
25! Revision 1.1  1997/07/24 11:12:29  raasch
26! Initial revision
27!
28!
29! Description:
30! ------------
31! Cpu-time measurements for any program part whatever.
32!------------------------------------------------------------------------------!
33
34    USE control_parameters
35    USE cpulog
36    USE pegrid
37
38    IMPLICIT NONE
39
40    CHARACTER (LEN=*)           ::  modus, place
41    CHARACTER (LEN=*), OPTIONAL ::  barrierwait
42    LOGICAL, SAVE               ::  first = .TRUE.
43    REAL                        ::  mtime = 0.0, mtimevec = 0.0
44    TYPE(logpoint)              ::  log_event
45
46#if defined( __lc ) || defined( __decalpha )
47    INTEGER(8)                  ::  count, count_rate
48#elif defined( __nec )
49    INTEGER                     ::  count, count_rate
50#elif defined( __ibm )
51    INTEGER(8)                  ::  IRTC
52#endif
53
54
55!
56!-- Initialize and check, respectively, point of measurement
57    IF ( log_event%place == ' ' )  THEN
58       log_event%place = place
59    ELSEIF ( log_event%place /= place )  THEN
60       WRITE( message_string, * ) 'wrong argument & expected: ', &
61                         TRIM(log_event%place), '  given: ',  TRIM( place )
62       CALL message( 'cpu_log', 'PA0174', 1, 2, 0, 6, 0 )
63    ENDIF
64
65!
66!-- Take current time
67#if defined( __lc ) || defined( __decalpha ) || defined( __nec )
68    CALL SYSTEM_CLOCK( count, count_rate )
69    mtime = REAL( count ) / REAL( count_rate )
70#elif defined( __ibm )
71    mtime = IRTC( ) * 1E-9
72#else
73    message_string = 'no time measurement defined on this host'
74    CALL message( 'cpu_log', 'PA0175', 1, 2, 0, 6, 0 )
75#endif
76
77!
78!-- Start, stop or pause measurement
79    IF ( modus == 'start'  .OR.  modus == 'continue' )  THEN
80       log_event%mtime    = mtime
81       log_event%mtimevec = mtimevec
82    ELSEIF ( modus == 'pause' )  THEN
83       IF ( ( mtime - log_event%mtime ) < 0.0  .AND.  first )  THEN
84          WRITE( message_string, * ) 'negative time interval occured', &
85                                     ' &PE',myid,' L=PAUSE "',TRIM(log_event%place),'" new=', &
86                                      mtime,' last=',log_event%mtime
87          CALL message( 'cpu_log', 'PA0176', 0, 1, -1, 6, 0 )
88          first = .FALSE.
89       ENDIF
90       log_event%isum     = log_event%isum + mtime - log_event%mtime
91       log_event%ivect    = log_event%ivect  + mtimevec - log_event%mtimevec
92    ELSEIF ( modus == 'stop' )  THEN
93       IF ( ( mtime - log_event%mtime + log_event%isum ) < 0.0  .AND. &
94            first )  THEN
95          WRITE( message_string, * ) 'negative time interval occured', &
96                                     ' &PE',myid,' L=STOP "',TRIM(log_event%place),'" new=', &
97                                      mtime,' last=',log_event%mtime,' isum=',log_event%isum
98          CALL message( 'cpu_log', 'PA0177', 0, 1, -1, 6, 0 )
99          first = .FALSE.
100       ENDIF
101       log_event%mtime    = mtime    - log_event%mtime    + log_event%isum
102       log_event%mtimevec = mtimevec - log_event%mtimevec + log_event%ivect
103       log_event%sum      = log_event%sum  + log_event%mtime
104       IF ( log_event%sum < 0.0  .AND.  first )  THEN
105          WRITE( message_string, * ) 'negative time interval occured',&
106                                     ' &PE',myid,' L=STOP "',TRIM(log_event%place),'" sum=', &
107                                      log_event%sum,' mtime=',log_event%mtime
108          CALL message( 'cpu_log', 'PA0178', 0, 1, -1, 6, 0 )
109          first = .FALSE.
110       ENDIF
111       log_event%vector   = log_event%vector + log_event%mtimevec
112       log_event%counts   = log_event%counts + 1
113       log_event%isum     = 0.0
114       log_event%ivect    = 0.0
115    ELSE
116       message_string = 'unknown modus of time measurement: ' // TRIM( modus )
117       CALL message( 'cpu_log', 'PA0179', 0, 1, -1, 6, 0 )
118    ENDIF
119
120
121 END SUBROUTINE cpu_log
Note: See TracBrowser for help on using the repository browser.