*IF DEF,C97_1A,OR,DEF,C97_3A,OR,DEF,RECON,OR,DEF,MAKEBC PXTIMEFN.1
*IF -DEF,CRAY,OR,DEF,MPP,OR,DEF,T3E GPB3F403.223
C ******************************COPYRIGHT****************************** GTS2F400.10369
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.10370
C GTS2F400.10371
C Use, duplication or disclosure of this code is subject to the GTS2F400.10372
C restrictions as set forth in the contract. GTS2F400.10373
C GTS2F400.10374
C Meteorological Office GTS2F400.10375
C London Road GTS2F400.10376
C BRACKNELL GTS2F400.10377
C Berkshire UK GTS2F400.10378
C RG12 2SZ GTS2F400.10379
C GTS2F400.10380
C If no contract has been raised with this copy of the code, the use, GTS2F400.10381
C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.10382
C to do so must first be obtained in writing from the Head of Numerical GTS2F400.10383
C Modelling at the above address. GTS2F400.10384
C ******************************COPYRIGHT****************************** GTS2F400.10385
C GTS2F400.10386
! Gets the CPU time TIMEFN2A.3
! TIMEFN2A.4
! Function interface: TIMEFN2A.5
*IF DEF,SUN,OR,DEF,LINUX PXTIMEFN.2
REAL*8 FUNCTION SECOND() 8PXTIMEFN.3
*ELSE PXTIMEFN.4
REAL FUNCTION SECOND() 8PXTIMEFN.5
*ENDIF PXTIMEFN.6
TIMEFN2A.7
IMPLICIT NONE TIMEFN2A.8
! TIMEFN2A.9
! Description: TIMEFN2A.10
! SECOND calls the HP system function ETIME which returns the number TIMEFN2A.11
! of CPU seconds which have elapsed. TIMEFN2A.12
! Function SECOND having a similarly named inbuilt cray function 'seco TIMEFN2A.13
! acts as an interface to ETIME thus allowing TIMER1A to replace the H TIMEFN2A.14
! version TIMER2A. TIMEFN2A.15
! TIMEFN2A.16
! Current Code Owner: Ian Edmond TIMEFN2A.17
! TIMEFN2A.18
! History: TIMEFN2A.19
! Version Date Comment TIMEFN2A.20
! ------- ---- ------- TIMEFN2A.21
! vn3.4 18/11/94 Original code. Ian Edmond TIMEFN2A.22
! 4.5 28/08/98 Remove call to TSECND. GDR8F405.44
! Bob Carruthers. Cray Research. GDR8F405.45
! TIMEFN2A.23
! Code Description: TIMEFN2A.24
! Language: FORTRAN 77 + some CRAY extensions TIMEFN2A.25
! This code is written to UMDP3 v6 programming standards. TIMEFN2A.26
! TIMEFN2A.27
! System component covered: TIMEFN2A.28
! System Task: TIMEFN2A.29
! TIMEFN2A.30
!- End of header TIMEFN2A.31
*IF DEF,T3E APB4F402.10
REAL TSECND APB4F402.11
*CALL T3ECLKTK
GDR8F405.46
c GDR8F405.47
second=rtc()/ticks_per_second GDR8F405.48
*ELSEIF DEF,SUN,OR,DEF,LINUX PXTIMEFN.7
REAL*4 ETIME, dummy(2), ELTIME2 PXTIMEFN.8
REAL*8 ELTIME PXTIMEFN.9
ELTIME2=ETIME(dummy) PXTIMEFN.10
ELTIME=ELTIME2 PXTIMEFN.11
SECOND=ELTIME PXTIMEFN.12
*ELSE APB4F402.13
REAL dummy(2) TIMEFN2A.32
REAL*4 ETIME PXTIMEFN.13
SECOND = ETIME(dummy) TIMEFN2A.34
*ENDIF APB4F402.14
RETURN TIMEFN2A.35
END TIMEFN2A.36
*IF -DEF,SGI PXTIMEFN.14
! Gets the elapsed time TIMEFN2A.37
! TIMEFN2A.38
! Subroutine Interface: TIMEFN2A.39
SUBROUTINE TIMEF(elptime) 7,1TIMEFN2A.40
TIMEFN2A.41
IMPLICIT NONE TIMEFN2A.42
! TIMEFN2A.43
! Description: TIMEFN2A.44
! TIMEF calls the HP system function SECNDS which returns the number TIMEFN2A.45
! of seconds which have elapsed. Subroutine TIMEF having a similarly n TIMEFN2A.46
! inbuilt cray function 'timef' acts as an interface to TIMEFN2A.47
! SECNDS thus allowing TIMER1A to replace the HP version TIMER2A. TIMEFN2A.48
! TIMEFN2A.49
! Current Code Owner: Ian Edmond TIMEFN2A.50
! TIMEFN2A.51
! History: TIMEFN2A.52
! Version Date Comment TIMEFN2A.53
! ------- ---- ------- TIMEFN2A.54
! vn3.4 18/11/94 Original code. Ian Edmond TIMEFN2A.55
! vn4.0 23/03/95 Required for 64bit precision, REAL*4 val ANF0F400.1
! vn4.3 19/03/97 Corrected scaling factor for T3E IRTC GPB3F403.224
! and added DEFS to allow compilation only on GPB3F403.225
! non CRAY PVP. P.Burton GPB3F403.226
! 4.5 12/06/98 Use GETTOD for elapsed time on Fujitsu. GRB1F405.1
! RBarnes@ecmwf.int GRB1F405.2
! TIMEFN2A.56
! Code Description: TIMEFN2A.57
! Language: FORTRAN 77 + common extensions. TIMEFN2A.58
! This code is written to UMDP3 v6 programming standards. TIMEFN2A.59
! TIMEFN2A.60
! System component covered: TIMEFN2A.61
! System Task: TIMEFN2A.62
! TIMEFN2A.63
!- End of header TIMEFN2A.64
! TIMEFN2A.65
REAL LAST_TIME ! value of ELPTIME last time we called GPB1F401.44
REAL OFFSET ! offset to add onto elptime to take account GPB1F401.45
! ! of clock reset at midnight GPB1F401.46
DATA LAST_TIME,OFFSET/0.0,0.0/ GPB1F401.47
SAVE LAST_TIME,OFFSET GPB1F401.48
GPB1F401.49
REAL ONE_DAY ! number of seconds in day GPB1F401.50
PARAMETER(ONE_DAY=24*60*60) GPB1F401.51
REAL ELPTIME TIMEFN2A.66
REAL*4 val ANF0F400.2
*IF DEF,SUN,OR,DEF,LINUX PXTIMEFN.15
REAL*8 SECOND PXTIMEFN.16
*ENDIF PXTIMEFN.17
*IF DEF,T3E GPB3F403.227
*CALL T3ECLKTK
GPB3F403.228
*ENDIF GPB3F403.229
val=0.0 ANF0F400.3
*IF DEF,T3E APB4F402.15
ELPTIME = RTC()/ticks_per_second + OFFSET GPB3F403.230
*ELSEIF DEF,SUN,OR,DEF,LINUX PXTIMEFN.18
ELPTIME=SECOND
(val)+ OFFSET PXTIMEFN.19
*ELSEIF DEF,FUJITSU PXTIMEFN.20
CALL GETTOD(
val) PXTIMEFN.21
ELPTIME = 0.000001*val + OFFSET PXTIMEFN.22
*ELSE PXTIMEFN.23
ELPTIME = SECNDS(val) + OFFSET PXTIMEFN.24
*ENDIF APB4F402.18
IF (ELPTIME .LT. LAST_TIME) THEN GPB1F401.53
ELPTIME=ELPTIME+ONE_DAY GPB1F401.54
OFFSET=OFFSET+ONE_DAY GPB1F401.55
ENDIF GPB1F401.56
LAST_TIME=ELPTIME GPB1F401.57
*IF -DEF,C97_3A GPB3F403.233
ELPTIME=ELPTIME*1000.0 GPB3F403.234
*ENDIF GPB3F403.235
RETURN TIMEFN2A.68
END TIMEFN2A.69
*ENDIF PXTIMEFN.25
*ENDIF GPB3F403.232
*ENDIF TIMEFN2A.70