1 |
|
|
SUBROUTINE USER_CLOCK(PELAPSED_TIME,PELAPSED_TIME_SINCE,PVECTOR_CP,PTOTAL_CP) |
2 |
|
|
|
3 |
|
|
!**** *USER_CLOCK* - interface to system dependent timer routines |
4 |
|
|
|
5 |
|
|
! Purpose. |
6 |
|
|
! -------- |
7 |
|
|
! Returns elapsed and CP from the start of execution. |
8 |
|
|
! Elapsed time is made relative to the first call to USER_CLOCK. |
9 |
|
|
|
10 |
|
|
!** Interface. |
11 |
|
|
! ---------- |
12 |
|
|
! ZTIME=USER_CLOCK(PELAPSED_TIME,PELAPSED_TIME_SINCE, |
13 |
|
|
! PVECTOR_CP,PTOTAL_CP) |
14 |
|
|
|
15 |
|
|
! Explicit arguments: (All are optional arguments) |
16 |
|
|
! PELAPSED_TIME=wall clock time (seconds) |
17 |
|
|
! PELAPSED_TIME_SINCE=wall clock time (seconds) |
18 |
|
|
! change from input value of this parameter |
19 |
|
|
! PVECTOR_CP=CP vector time (seconds) |
20 |
|
|
! PTOTAL_CP=total CP time (seconds) |
21 |
|
|
|
22 |
|
|
! Author. |
23 |
|
|
! ------- |
24 |
|
|
! D.Dent *ECMWF* |
25 |
|
|
|
26 |
|
|
! External References: |
27 |
|
|
! ------------------- |
28 |
|
|
|
29 |
|
|
! TIMEF,CPTIME |
30 |
|
|
|
31 |
|
|
! Modifications. |
32 |
|
|
! -------------- |
33 |
|
|
! Original : 97-09-25 |
34 |
|
|
! ---------------------------------------------------------- |
35 |
|
|
|
36 |
|
|
|
37 |
|
|
USE PARKIND1 ,ONLY : JPIM ,JPRB |
38 |
|
|
|
39 |
|
|
IMPLICIT NONE |
40 |
|
|
|
41 |
|
|
REAL(KIND=JPRB),INTENT(OUT) :: PELAPSED_TIME,PVECTOR_CP,PTOTAL_CP |
42 |
|
|
REAL(KIND=JPRB),INTENT(INOUT) :: PELAPSED_TIME_SINCE |
43 |
|
|
OPTIONAL PELAPSED_TIME,PELAPSED_TIME_SINCE |
44 |
|
|
OPTIONAL PVECTOR_CP,PTOTAL_CP |
45 |
|
|
REAL(KIND=JPRB) :: ZVECTOR_CP,ZTOTAL_CP,ZWALL |
46 |
|
|
REAL(KIND=JPRB),EXTERNAL :: TIMEF |
47 |
|
|
|
48 |
|
|
|
49 |
|
|
! === END OF INTERFACE BLOCK === |
50 |
|
|
IF(PRESENT(PELAPSED_TIME).OR. PRESENT(PELAPSED_TIME_SINCE)) THEN |
51 |
|
|
|
52 |
|
|
ZWALL=TIMEF() |
53 |
|
|
! TIMEF returns milliseconds since first call to TIMEF |
54 |
|
|
IF(PRESENT(PELAPSED_TIME)) THEN |
55 |
|
|
PELAPSED_TIME=ZWALL*1.0E-3_JPRB |
56 |
|
|
ENDIF |
57 |
|
|
IF(PRESENT(PELAPSED_TIME_SINCE)) THEN |
58 |
|
|
PELAPSED_TIME_SINCE=ZWALL*1.0E-3_JPRB - PELAPSED_TIME_SINCE |
59 |
|
|
ENDIF |
60 |
|
|
ENDIF |
61 |
|
|
|
62 |
|
|
IF( PRESENT(PVECTOR_CP) .OR. PRESENT(PTOTAL_CP) ) THEN |
63 |
|
|
CALL CPTIME(ZVECTOR_CP,ZTOTAL_CP) |
64 |
|
|
ENDIF |
65 |
|
|
IF( PRESENT(PVECTOR_CP) ) THEN |
66 |
|
|
PVECTOR_CP=ZVECTOR_CP |
67 |
|
|
ENDIF |
68 |
|
|
IF( PRESENT(PTOTAL_CP) ) THEN |
69 |
|
|
PTOTAL_CP=ZTOTAL_CP |
70 |
|
|
ENDIF |
71 |
|
|
|
72 |
|
|
RETURN |
73 |
|
|
END SUBROUTINE USER_CLOCK |
74 |
|
|
|
75 |
|
|
|
76 |
|
|
|