*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.32SUBROUTINE 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