*IF DEF,CONTROL,OR,DEF,RECON,OR,DEF,UTILS,OR,DEF,SCMA                      GKR1F405.22     
C ******************************COPYRIGHT******************************    GTS2F400.10351  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.10352  
C                                                                          GTS2F400.10353  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.10354  
C restrictions as set forth in the contract.                               GTS2F400.10355  
C                                                                          GTS2F400.10356  
C                Meteorological Office                                     GTS2F400.10357  
C                London Road                                               GTS2F400.10358  
C                BRACKNELL                                                 GTS2F400.10359  
C                Berkshire UK                                              GTS2F400.10360  
C                RG12 2SZ                                                  GTS2F400.10361  
C                                                                          GTS2F400.10362  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.10363  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.10364  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.10365  
C Modelling at the above address.                                          GTS2F400.10366  
C ******************************COPYRIGHT******************************    GTS2F400.10367  
C                                                                          GTS2F400.10368  
CLL  Routine: TIME2SEC -------------------------------------------------   TIME2SC1.3      
CLL                                                                        TIME2SC1.4      
CLL  Purpose: Converts from calendar date/time to an integer number        TIME2SC1.5      
CLL           of elapsed seconds since the model basis time, using the     TIME2SC1.6      
CLL           absolute calendar zero point as a reference.  30-day         TIME2SC1.7      
CLL           month or standard calendar may be used.                      TIME2SC1.8      
CLL           NB: BASIS_TIME_SECS is the number of seconds from the        TIME2SC1.9      
CLL           calendar zero point to the basis time for the model, and     TIME2SC1.10     
CLL           is calculated in INITTIME.                                   TIME2SC1.11     
CLL                                                                        TIME2SC1.12     
CLL  Tested under compiler:   cft77                                        TIME2SC1.13     
CLL  Tested under OS version: UNICOS 5.1                                   TIME2SC1.14     
CLL                                                                        TIME2SC1.15     
CLL  Author:   T.C.Johns                                                   TIME2SC1.16     
CLL                                                                        TIME2SC1.17     
CLL  Model            Modification history from model version 3.0:         TIME2SC1.18     
CLL version  date                                                          TIME2SC1.19     
CLL   3.3  01/02/94  Modify calling arguments and internal calculations    TJ080294.7      
CLL                  to split days/seconds, for 32-bit portability. TCJ    TJ080294.8      
CLL   3.4  20/06/94  DEF CAL360 replaced by LOGICAL LCAL360                GSS1F304.704    
CLL                                                  S.J.Swarbrick         GSS1F304.705    
CLL   4.5  28/10/98  Changed def line to use superdef UTILS instead of     GKR1F405.19     
CLL                  DEF,UTILHIST,OR,DEF,FLDIO,OR,DEF,UTILIO which         GKR1F405.20     
CLL                  allowed addition of SCMA def.  K Rogers               GKR1F405.21     
CLL                                                                        TIME2SC1.20     
CLL  Programming standard: UM Doc Paper 3, version 1 (15/1/90)             TIME2SC1.21     
CLL                                                                        TIME2SC1.22     
CLL  Logical components covered: S62                                       TIME2SC1.23     
CLL                                                                        TIME2SC1.24     
CLL  Project task: S62                                                     TIME2SC1.25     
CLL                                                                        TIME2SC1.26     
CLL  External documentation: On-line UM document C0 - The top-level        TIME2SC1.27     
CLL                          control system                                TIME2SC1.28     
CLL                                                                        TIME2SC1.29     
CLL  -------------------------------------------------------------------   TIME2SC1.30     
C*L  Interface and arguments: ------------------------------------------   TIME2SC1.31     
C                                                                          TIME2SC1.32     

      SUBROUTINE TIME2SEC (I_YEAR,I_MONTH,I_DAY,I_HOUR,I_MINUTE,I_SECOND    83TIME2SC1.33     
     &,                    BASIS_TIME_DAYS,BASIS_TIME_SECS                 TJ080294.9      
     &,                    ELAPSED_DAYS,ELAPSED_SECS,LCAL360)              GSS1F304.706    
C                                                                          TIME2SC1.35     
      IMPLICIT NONE                                                        TIME2SC1.36     
      LOGICAL LCAL360                                                      GSS1F304.707    
C                                                                          TIME2SC1.37     
      INTEGER                                                              TIME2SC1.38     
     1     I_YEAR,                 ! IN  - model time (years)              TIME2SC1.39     
     2     I_MONTH,                ! IN  - model time (months)             TIME2SC1.40     
     3     I_DAY,                  ! IN  - model time (days)               TIME2SC1.41     
     4     I_HOUR,                 ! IN  - model time (hours)              TIME2SC1.42     
     5     I_MINUTE,               ! IN  - model time (minutes)            TIME2SC1.43     
     6     I_SECOND,               ! IN  - model time (seconds)            TIME2SC1.44     
     &     BASIS_TIME_DAYS,        ! IN  - whole days to basis time        TJ080294.11     
     7     BASIS_TIME_SECS,        ! IN  - secs in day at basis time       TJ080294.12     
     &     ELAPSED_DAYS,           ! OUT - elapsed days since basis time   TJ080294.13     
     8     ELAPSED_SECS            ! OUT - elapsed secs in part of day     TJ080294.14     
C                                  !       relative to basis time          TJ080294.15     
C                                                                          TIME2SC1.48     
C*----------------------------------------------------------------------   TIME2SC1.49     
C                                                                          TIME2SC1.51     
C  Common blocks                                                           TIME2SC1.52     
C                                                                          TIME2SC1.53     
*CALL CDAYDATA                                                             TIME2SC1.54     
C                                                                          TIME2SC1.56     
C  Local variables                                                         TIME2SC1.57     
C                                                                          TIME2SC1.58     
      INTEGER                                                              TIME2SC1.59     
     &       YEAR        ! years                                           TIME2SC1.60     
     &,      DAY         ! number of days since calendar zero              TIME2SC1.61     
C                                                                          TIME2SC1.62     
CL----------------------------------------------------------------------   TIME2SC1.63     
CL 1. Add up days from time zero to specified time                         TIME2SC1.64     
CL                                                                         TIME2SC1.65     
      IF (LCAL360) THEN                                                    GSS1F304.708    
CL                                                                         TIME2SC1.67     
CL 1.1 30-day month (360 day year) calendar                                TIME2SC1.68     
CL                                                                         TIME2SC1.69     
      DAY = 360*I_YEAR+30*(I_MONTH-1)+I_DAY-1                              TIME2SC1.70     
CL                                                                         TIME2SC1.72     
      ELSE                                                                 GSS1F304.709    
CL                                                                         GSS1F304.710    
CL 1.2 Gregorian calendar                                                  TIME2SC1.73     
CL                                                                         TIME2SC1.74     
CL     If leap year and after 28 February, adjust day number by one        TIME2SC1.75     
      IF (MOD(I_YEAR,4).EQ.0   .AND.                                       TIME2SC1.76     
     1   (MOD(I_YEAR,400).EQ.0 .OR. MOD(I_YEAR,100).NE.0) .AND.            TIME2SC1.77     
     2    I_MONTH.GT.2) THEN                                               TIME2SC1.78     
        DAY = I_DAY+1                                                      TIME2SC1.79     
      ELSE                                                                 TIME2SC1.80     
        DAY = I_DAY                                                        TIME2SC1.81     
      ENDIF                                                                TIME2SC1.82     
CL     Add on days in the preceding months in the year                     TIME2SC1.83     
      DAY = DAY + DAYS_TO_MONTH(I_MONTH) - 1                               TIME2SC1.84     
      YEAR = I_YEAR - 1                                                    TIME2SC1.85     
CL     Add on days up to the specified year                                TIME2SC1.86     
      DAY =  DAY+(YEAR/400)*DAYS_PER_4C                                    TIME2SC1.87     
      YEAR = YEAR-(YEAR/400)*400                                           TIME2SC1.88     
      DAY =  DAY+(YEAR/100)*DAYS_PER_C                                     TIME2SC1.89     
      YEAR = YEAR-(YEAR/100)*100                                           TIME2SC1.90     
      DAY =  DAY+(YEAR/4)*DAYS_PER_4Y                                      TIME2SC1.91     
      YEAR = YEAR-(YEAR/4)*4                                               TIME2SC1.92     
      DAY =  DAY+YEAR*DAYS_PER_Y                                           TIME2SC1.93     
CL                                                                         GSS1F304.711    
      END IF       ! LCAL360                                               GSS1F304.712    
CL----------------------------------------------------------------------   TIME2SC1.95     
CL 2. Convert days, hours and minutes to days/secs since calendar zero,    TJ080294.16     
CL     and subtract basis time in days/secs to get elapsed time since      TJ080294.17     
CL     basis, converted to whole days and +ve no of secs in partial day    TJ080294.18     
CL                                                                         TIME2SC1.98     
      ELAPSED_DAYS=DAY-BASIS_TIME_DAYS                                     TJ080294.19     
      ELAPSED_SECS=3600*I_HOUR+60*I_MINUTE+I_SECOND-BASIS_TIME_SECS        TJ080294.20     
      IF (ELAPSED_SECS.GE.86400) THEN                                      TJ080294.21     
        ELAPSED_DAYS=ELAPSED_DAYS+ELAPSED_SECS/86400                       TJ080294.22     
        ELAPSED_SECS=MOD(ELAPSED_SECS,86400)                               TJ080294.23     
      ELSEIF (ELAPSED_SECS.LT.0) THEN                                      TJ080294.24     
        ELAPSED_DAYS=ELAPSED_DAYS+(ELAPSED_SECS-86399)/86400               TJ080294.25     
        ELAPSED_SECS=MOD(ELAPSED_SECS,86400)+86400                         TJ080294.26     
      ENDIF                                                                TJ080294.27     
C                                                                          TJ080294.28     
      RETURN                                                               TIME2SC1.101    
CL----------------------------------------------------------------------   TIME2SC1.102    
      END                                                                  TIME2SC1.103    
*ENDIF                                                                     TIME2SC1.104