*IF DEF,CONTROL,OR,DEF,RECON,OR,DEF,UTILHIST,OR,DEF,FLDC,OR,DEF,MAKEBC UIE3F404.57 C ******************************COPYRIGHT****************************** GTS2F400.9757 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.9758 C GTS2F400.9759 C Use, duplication or disclosure of this code is subject to the GTS2F400.9760 C restrictions as set forth in the contract. GTS2F400.9761 C GTS2F400.9762 C Meteorological Office GTS2F400.9763 C London Road GTS2F400.9764 C BRACKNELL GTS2F400.9765 C Berkshire UK GTS2F400.9766 C RG12 2SZ GTS2F400.9767 C GTS2F400.9768 C If no contract has been raised with this copy of the code, the use, GTS2F400.9769 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.9770 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.9771 C Modelling at the above address. GTS2F400.9772 C ******************************COPYRIGHT****************************** GTS2F400.9773 C GTS2F400.9774 CLL Routine: STP2TIME ------------------------------------------------- STP2TIM1.3 CLL STP2TIM1.4 CLL Purpose: Converts from an integer number of elapsed steps since STP2TIM1.5 CLL the model basis time to elapsed whole days and seconds, STP2TIM1.6 CLL (although the seconds may exceed a day in some cases). STP2TIM1.7 CLL Forms a service routine for model date/time and internal STP2TIM1.8 CLL clock purposes, written for 32-bit portability. STP2TIM1.9 CLL STP2TIM1.10 CLL Tested under compiler: cft77 STP2TIM1.11 CLL Tested under OS version: UNICOS 6.0 STP2TIM1.12 CLL STP2TIM1.13 CLL Author: T.C.Johns STP2TIM1.14 CLL STP2TIM1.15 CLL Model Modification history from model version 3.2: STP2TIM1.16 CLL version date STP2TIM1.17 CLL 3.3 08/02/94 Introduced as new deck in association with changes STP2TIM1.18 CLL to internal clock for 32-bit portability. TCJ STP2TIM1.19 CLL 3.5 07/04/95 Generalise code to allow SECS_IN_PERIOD to be a GRR2F305.669 CLL value corresponding to an exact multiple or exact GRR2F305.670 CLL numerator of seconds in a day. Previous code was GRR2F305.671 CLL only correct for a period of exactly 1 day. GRR2F305.672 CLL R.Rawlins GRR2F305.673 CLL STP2TIM1.21 CLL Programming standard: UM Doc Paper 3, version 1 (15/1/90) STP2TIM1.22 CLL STP2TIM1.23 CLL Logical components covered: S620 STP2TIM1.24 CLL STP2TIM1.25 CLL Project task: S62 STP2TIM1.26 CLL STP2TIM1.27 CLL External documentation: On-line UM document C0 - The top-level STP2TIM1.28 CLL control system STP2TIM1.29 CLL STP2TIM1.30 CLL ------------------------------------------------------------------- STP2TIM1.31 C*L Interface and arguments: ------------------------------------------ STP2TIM1.32 C STP2TIM1.33SUBROUTINE STP2TIME(ELAPSED_STEPS, 16STP2TIM1.34 & STEPS_IN_PERIOD,SECS_IN_PERIOD, STP2TIM1.35 & ELAPSED_DAYS,ELAPSED_SECS) STP2TIM1.36 C STP2TIM1.37 IMPLICIT NONE STP2TIM1.38 C STP2TIM1.39 INTEGER STP2TIM1.40 & ELAPSED_STEPS, ! IN - elapsed steps since ref time STP2TIM1.41 & STEPS_IN_PERIOD, ! IN - steps in period defining T/S STP2TIM1.42 & SECS_IN_PERIOD, ! IN - secs in period defining T/S STP2TIM1.43 & ELAPSED_DAYS, ! OUT - elapsed days since ref time STP2TIM1.44 & ELAPSED_SECS ! OUT - elapsed secs in part of day STP2TIM1.45 C ! or days since ref time STP2TIM1.46 C Local Parameters GRR2F305.674 INTEGER SECS_IN_DAY ! no. of seconds in 1 day GRR2F305.675 PARAMETER(SECS_IN_DAY=3600*24) GRR2F305.676 C Local Scalars GRR2F305.677 INTEGER FACTOR ! ratio of integers is exact factor GRR2F305.678 CL---------------------------------------------------------------------- STP2TIM1.47 CL 1. Perform integer arithmetic to compute elapsed days/seconds from STP2TIM1.48 CL elapsed steps and timestep definition. The subroutine assumes STP2TIM1.49 CL that SECS_IN_PERIOD is a whole number multiple of a day, or a GRR2F305.679 CL whole number divisor of a day, but does not check explicitly. GRR2F305.680 CL STP2TIM1.52 IF(SECS_IN_PERIOD.GE.SECS_IN_DAY) THEN GRR2F305.681 FACTOR = SECS_IN_PERIOD/SECS_IN_DAY ! no. days in period GRR2F305.682 ELAPSED_DAYS = (ELAPSED_STEPS*FACTOR)/STEPS_IN_PERIOD GRR2F305.683 ELSE GRR2F305.684 FACTOR = SECS_IN_DAY/SECS_IN_PERIOD GRR2F305.685 ELAPSED_DAYS = (ELAPSED_STEPS/FACTOR)/STEPS_IN_PERIOD GRR2F305.686 ENDIF GRR2F305.687 C GRR2F305.688 C Find number of steps per day GRR2F305.689 FACTOR=(SECS_IN_DAY*STEPS_IN_PERIOD)/SECS_IN_PERIOD GRR2F305.690 IF(FACTOR.GT.1) THEN ! Timestep is less than 1 day GRR2F305.691 ELAPSED_SECS = ( ELAPSED_STEPS - GRR2F305.692 & (ELAPSED_STEPS/FACTOR)*FACTOR )* GRR2F305.693 & (SECS_IN_PERIOD/STEPS_IN_PERIOD) GRR2F305.694 ELSE ! Timestep is multiple of 1 day GRR2F305.695 ELAPSED_SECS = 0 GRR2F305.696 ENDIF GRR2F305.697 C STP2TIM1.58 RETURN STP2TIM1.59 END STP2TIM1.60 *ENDIF STP2TIM1.61