*IF DEF,CONTROL,OR,DEF,FLDOP,OR,DEF,FLDC                                   UIE3F404.61     
C ******************************COPYRIGHT******************************    GTS2F400.10387  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.10388  
C                                                                          GTS2F400.10389  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.10390  
C restrictions as set forth in the contract.                               GTS2F400.10391  
C                                                                          GTS2F400.10392  
C                Meteorological Office                                     GTS2F400.10393  
C                London Road                                               GTS2F400.10394  
C                BRACKNELL                                                 GTS2F400.10395  
C                Berkshire UK                                              GTS2F400.10396  
C                RG12 2SZ                                                  GTS2F400.10397  
C                                                                          GTS2F400.10398  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.10399  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.10400  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.10401  
C Modelling at the above address.                                          GTS2F400.10402  
C ******************************COPYRIGHT******************************    GTS2F400.10403  
C                                                                          GTS2F400.10404  
CLL  Routine: TIME_LT --------------------------------------------------   TIMELTE1.3      
CLL                                                                        TIMELTE1.4      
CLL  Purpose: Function to compare two model times in days/seconds, and     TIMELTE1.5      
CLL           return a value .TRUE. or .FALSE. depending on whether the    TIMELTE1.6      
CLL           first time is earlier than the second time.  NOTE: If the    TIMELTE1.7      
CLL           days are more than 10 years apart, only days are compared.   TIMELTE1.8      
CLL           Forms a service routine for model date/time and internal     TIMELTE1.9      
CLL           clock purposes, written for 32-bit portability.              TIMELTE1.10     
CLL                                                                        TIMELTE1.11     
CLL  Tested under compiler:   cft77                                        TIMELTE1.12     
CLL  Tested under OS version: UNICOS 6.0                                   TIMELTE1.13     
CLL                                                                        TIMELTE1.14     
CLL  Author:   T.C.Johns                                                   TIMELTE1.15     
CLL                                                                        TIMELTE1.16     
CLL  Model            Modification history from model version 3.2:         TIMELTE1.17     
CLL version  date                                                          TIMELTE1.18     
CLL   3.3  05/05/94  Introduced as new deck in association with changes    TIMELTE1.19     
CLL                  to internal clock for 32-bit portability. TCJ         TIMELTE1.20     
CLL                                                                        TIMELTE1.21     
CLL                                                                        TIMELTE1.22     
CLL  Programming standard: UM Doc Paper 3, version 1 (15/1/90)             TIMELTE1.23     
CLL                                                                        TIMELTE1.24     
CLL  Logical components covered: S620                                      TIMELTE1.25     
CLL                                                                        TIMELTE1.26     
CLL  Project task: S62                                                     TIMELTE1.27     
CLL                                                                        TIMELTE1.28     
CLL  External documentation: On-line UM document C0 - The top-level        TIMELTE1.29     
CLL                          control system                                TIMELTE1.30     
CLL                                                                        TIMELTE1.31     
CLL  -------------------------------------------------------------------   TIMELTE1.32     
C*L  Interface and arguments: ------------------------------------------   TIMELTE1.33     
C                                                                          TIMELTE1.34     

      LOGICAL FUNCTION TIME_LT(DAYS1,SECS1,DAYS2,SECS2)                     8TIMELTE1.35     
C                                                                          TIMELTE1.36     
      IMPLICIT NONE                                                        TIMELTE1.37     
C                                                                          TIMELTE1.38     
      INTEGER                                                              TIMELTE1.39     
     &     DAYS1,SECS1,            ! IN  - days/seconds (first time)       TIMELTE1.40     
     &     DAYS2,SECS2             ! IN  - days/seconds (second time)      TIMELTE1.41     
C                                                                          TIMELTE1.42     
      IF (DAYS1.GE.DAYS2 .AND. SECS1.GE.SECS2) THEN                        TIMELTE1.43     
        TIME_LT = .FALSE.                                                  TIMELTE1.44     
      ELSEIF (DAYS1.LT.DAYS2 .AND. SECS1.LT.SECS2) THEN                    TIMELTE1.45     
        TIME_LT = .TRUE.                                                   TIMELTE1.46     
      ELSEIF (ABS(DAYS1-DAYS2).GT.3600) THEN                               TIMELTE1.47     
        TIME_LT = DAYS1.LT.DAYS2                                           TIMELTE1.48     
      ELSE                                                                 TIMELTE1.49     
        TIME_LT = ((DAYS1-DAYS2)*86400 + SECS1-SECS2).LT.0                 TIMELTE1.50     
      ENDIF                                                                TIMELTE1.51     
C                                                                          TIMELTE1.52     
      RETURN                                                               TIMELTE1.53     
      END                                                                  TIMELTE1.54     
                                                                           TIMELTE1.55     
CLL  Routine: TIME_EQ --------------------------------------------------   TIMELTE1.56     
CLL                                                                        TIMELTE1.57     
CLL  Purpose: Function to compare two model times in days/seconds, and     TIMELTE1.58     
CLL           return a value .TRUE. or .FALSE. depending on whether the    TIMELTE1.59     
CLL           first time is equal to the second time.  NOTE: If the days   TIMELTE1.60     
CLL           are more than 10 years apart, seconds are not checked.       TIMELTE1.61     
CLL           Forms a service routine for model date/time and internal     TIMELTE1.62     
CLL           clock purposes, written for 32-bit portability.              TIMELTE1.63     
CLL                                                                        TIMELTE1.64     
CLL  Tested under compiler:   cft77                                        TIMELTE1.65     
CLL  Tested under OS version: UNICOS 6.0                                   TIMELTE1.66     
CLL                                                                        TIMELTE1.67     
CLL  Author:   T.C.Johns                                                   TIMELTE1.68     
CLL                                                                        TIMELTE1.69     
CLL  Model            Modification history from model version 3.2:         TIMELTE1.70     
CLL version  date                                                          TIMELTE1.71     
CLL   3.3  05/05/94  Introduced as new deck in association with changes    TIMELTE1.72     
CLL                  to internal clock for 32-bit portability. TCJ         TIMELTE1.73     
CLL                                                                        TIMELTE1.74     
CLL                                                                        TIMELTE1.75     
CLL  Programming standard: UM Doc Paper 3, version 1 (15/1/90)             TIMELTE1.76     
CLL                                                                        TIMELTE1.77     
CLL  Logical components covered: S620                                      TIMELTE1.78     
CLL                                                                        TIMELTE1.79     
CLL  Project task: S62                                                     TIMELTE1.80     
CLL                                                                        TIMELTE1.81     
CLL  External documentation: On-line UM document C0 - The top-level        TIMELTE1.82     
CLL                          control system                                TIMELTE1.83     
CLL                                                                        TIMELTE1.84     
CLL  -------------------------------------------------------------------   TIMELTE1.85     
C*L  Interface and arguments: ------------------------------------------   TIMELTE1.86     
C                                                                          TIMELTE1.87     

      LOGICAL FUNCTION TIME_EQ(DAYS1,SECS1,DAYS2,SECS2)                     5TIMELTE1.88     
C                                                                          TIMELTE1.89     
      IMPLICIT NONE                                                        TIMELTE1.90     
C                                                                          TIMELTE1.91     
      INTEGER                                                              TIMELTE1.92     
     &     DAYS1,SECS1,            ! IN  - days/seconds (first time)       TIMELTE1.93     
     &     DAYS2,SECS2             ! IN  - days/seconds (second time)      TIMELTE1.94     
C                                                                          TIMELTE1.95     
      IF (DAYS1.GT.DAYS2 .AND. SECS1.GT.SECS2) THEN                        TIMELTE1.96     
        TIME_EQ = .FALSE.                                                  TIMELTE1.97     
      ELSEIF (DAYS1.LT.DAYS2 .AND. SECS1.LT.SECS2) THEN                    TIMELTE1.98     
        TIME_EQ = .FALSE.                                                  TIMELTE1.99     
      ELSEIF (ABS(DAYS1-DAYS2).GT.3600) THEN                               TIMELTE1.100    
        TIME_EQ = .FALSE.                                                  TIMELTE1.101    
      ELSE                                                                 TIMELTE1.102    
        TIME_EQ = ((DAYS1-DAYS2)*86400 + SECS1-SECS2).EQ.0                 TIMELTE1.103    
      ENDIF                                                                TIMELTE1.104    
C                                                                          TIMELTE1.105    
      RETURN                                                               TIMELTE1.106    
      END                                                                  TIMELTE1.107    
*ENDIF                                                                     TIMELTE1.108    
*IF DEF,FLDC,OR,DEF,CONTROL                                                GHM2F405.26     
CLL  Routine: TIME_DF --------------------------------------------------   TIMELTE1.110    
CLL                                                                        TIMELTE1.111    
CLL  Purpose: Subroutine to obtain a new model time in days and seconds    TIMELTE1.112    
CLL           from some reference point, given an increment in days and    TIMELTE1.113    
CLL           seconds.  Note that the seconds and days increments are      TIMELTE1.114    
CLL           treated independently so that -ve increments or seconds      TIMELTE1.115    
CLL           increments larger than the no of seconds in a day are        TIMELTE1.116    
CLL           handled correctly.                                           TIMELTE1.117    
CLL           Forms a service routine for model date/time and internal     TIMELTE1.118    
CLL           clock purposes, written for 32-bit portability.              TIMELTE1.119    
CLL                                                                        TIMELTE1.120    
CLL  Tested under compiler:   cft77                                        TIMELTE1.121    
CLL  Tested under OS version: UNICOS 6.0                                   TIMELTE1.122    
CLL                                                                        TIMELTE1.123    
CLL  Author:   R.Rawlins                                                   TIMELTE1.124    
CLL                                                                        TIMELTE1.125    
CLL  Model            Modification history from model version 3.2:         TIMELTE1.126    
CLL version  date                                                          TIMELTE1.127    
CLL   3.3  05/05/94  Introduced as new deck in association with changes    TIMELTE1.128    
CLL                  to internal clock for 32-bit portability. R.Rawlins   TIMELTE1.129    
CLL                                                                        TIMELTE1.130    
CLL                                                                        TIMELTE1.131    
CLL  Programming standard: UM Doc Paper 3, version 1 (15/1/90)             TIMELTE1.132    
CLL                                                                        TIMELTE1.133    
CLL  Logical components covered:                                           TIMELTE1.134    
CLL                                                                        TIMELTE1.135    
CLL  Project task:                                                         TIMELTE1.136    
CLL                                                                        TIMELTE1.137    
CLL  External documentation: On-line UM document C0 - The top-level        TIMELTE1.138    
CLL                          control system                                TIMELTE1.139    
CLL                                                                        TIMELTE1.140    
CLL  -------------------------------------------------------------------   TIMELTE1.141    
C*L  Interface and arguments: ------------------------------------------   TIMELTE1.142    
C                                                                          TIMELTE1.143    

      SUBROUTINE TIME_DF(DAYS1,SECS1,DEL_DAYS,DEL_SECS,DAYS2,SECS2)         17TIMELTE1.144    
C                                                                          TIMELTE1.145    
      IMPLICIT NONE                                                        TIMELTE1.146    
C                                                                          TIMELTE1.147    
      INTEGER                                                              TIMELTE1.148    
     &     DAYS1,SECS1,            ! IN  - days/seconds (input time)       TIMELTE1.149    
     &     DEL_DAYS,DEL_SECS,      ! IN  - days/seconds increments         TIMELTE1.150    
     &     DAYS2,SECS2             ! OUT - days/seconds (output time)      TIMELTE1.151    
C                                                                          TIMELTE1.152    
      INTEGER                                                              TIMELTE1.153    
     &     SECS_IN_DAY            ! No of seconds in a day                 TIMELTE1.154    
      PARAMETER                                                            TIMELTE1.155    
     &    (SECS_IN_DAY=24*60*60)                                           TIMELTE1.156    
C                                                                          TIMELTE1.157    
      DAYS2 = DAYS1 + DEL_DAYS + DEL_SECS/SECS_IN_DAY                      TIMELTE1.158    
      SECS2 = SECS1 + MOD(DEL_SECS,SECS_IN_DAY)                            TIMELTE1.159    
C                                                                          TIMELTE1.160    
      IF(SECS2.LT.0) THEN                                                  TIMELTE1.161    
         SECS2 = SECS2 + SECS_IN_DAY                                       TIMELTE1.162    
         DAYS2 = DAYS2 - 1                                                 TIMELTE1.163    
      ENDIF                                                                TIMELTE1.164    
C                                                                          TIMELTE1.165    
      IF(SECS2.GE.SECS_IN_DAY) THEN                                        TIMELTE1.166    
         SECS2 = SECS2 - SECS_IN_DAY                                       TIMELTE1.167    
         DAYS2 = DAYS2 + 1                                                 TIMELTE1.168    
      ENDIF                                                                TIMELTE1.169    
C                                                                          TIMELTE1.170    
      RETURN                                                               TIMELTE1.171    
      END                                                                  TIMELTE1.172    
*ENDIF                                                                     TIMELTE1.173