*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.33     

      SUBROUTINE 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