*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