*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.34LOGICAL 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