*IF DEF,CONTROL                                                            INCRTIM1.2      
C ******************************COPYRIGHT******************************    GTS2F400.4555   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.4556   
C                                                                          GTS2F400.4557   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.4558   
C restrictions as set forth in the contract.                               GTS2F400.4559   
C                                                                          GTS2F400.4560   
C                Meteorological Office                                     GTS2F400.4561   
C                London Road                                               GTS2F400.4562   
C                BRACKNELL                                                 GTS2F400.4563   
C                Berkshire UK                                              GTS2F400.4564   
C                RG12 2SZ                                                  GTS2F400.4565   
C                                                                          GTS2F400.4566   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.4567   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.4568   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.4569   
C Modelling at the above address.                                          GTS2F400.4570   
C ******************************COPYRIGHT******************************    GTS2F400.4571   
C                                                                          GTS2F400.4572   
CLL  Routine: INCRTIME -------------------------------------------------   INCRTIM1.3      
CLL                                                                        INCRTIM1.4      
CLL  Purpose: Increments the model time by one atmosphere or ocean         INCRTIM1.5      
CLL           timestep according to which is currently being               INCRTIM1.6      
CLL           integrated.  Also updates timestamps in dump LOOKUP          INCRTIM1.7      
CLL           headers of PROGNOSTIC fields (diagnostic LOOKUP headers      INCRTIM1.8      
CLL           are updated exclusively by STASH).                           INCRTIM1.9      
CLL                                                                        INCRTIM1.10     
CLL  Tested under compiler:   cft77                                        INCRTIM1.11     
CLL  Tested under OS version: UNICOS 5.1                                   INCRTIM1.12     
CLL                                                                        INCRTIM1.13     
CLL  Author:   T.C.Johns                                                   INCRTIM1.14     
CLL                                                                        INCRTIM1.15     
CLL  Model            Modification history from model version 3.0:         INCRTIM1.16     
CLL version  date                                                          INCRTIM1.17     
CLL   3.1   03/02/93 : added comdeck CHSUNITS to define NUNITS for i/o     RS030293.111    
CLL 3.2    27/03/93 Dynamic allocation of main data arrays. R. Rawlins     @DYALLOC.1306   
CLL   3.3  08/02/94  Modify calls to TIME2SEC/SEC2TIME to output/input     TJ080294.177    
CLL                  elapsed times in days & secs, for portability. TCJ    TJ080294.178    
CLL   3.4  17/06/94  Argument LCAL360 passed to SEC2TIME                   GSS1F304.393    
CLL                                                    S.J.Swarbrick       GSS1F304.394    
CLL   3.5  18/04/95  Stage 1 of Submodel project: introduce internal       GRB1F305.48     
CLL                  model as argument and increase generalisation.        GRB1F305.49     
CLL                  R. Rawlins                                            GRB1F305.50     
CLL  4.1  29/02/96  Introduce Wave sub-model.  RTHBarnes.                  WRB1F401.201    
CLL  4.4  21/10/97  Correction to FORECAST_HRS calculation for IAU runs.   VSB2F404.20     
CLL                 Adam Clayton.                                          VSB2F404.21     
CLL  4.5  17/08/98  Determine forecast hour with respect to T+0.           GDR3F405.841    
CLL                 Required in glob-mes parallel running. D. Robinson.    GDR3F405.842    
CLL                                                                        INCRTIM1.18     
CLL  Programming standard: UM Doc Paper 3, version 1 (15/1/90)             INCRTIM1.19     
CLL                                                                        INCRTIM1.20     
CLL  Logical components covered: C0                                        INCRTIM1.21     
CLL                                                                        INCRTIM1.22     
CLL  Project task: C0                                                      INCRTIM1.23     
CLL                                                                        INCRTIM1.24     
CLL  External documentation: On-line UM document C0 - The top-level        INCRTIM1.25     
CLL                          control system                                INCRTIM1.26     
CLL                                                                        INCRTIM1.27     
CLL  -------------------------------------------------------------------   INCRTIM1.28     
C*L  Interface and arguments: ------------------------------------------   INCRTIM1.29     
C                                                                          INCRTIM1.30     

      SUBROUTINE INCRTIME(                                                  1,4@DYALLOC.1307   
*CALL ARGSIZE                                                              @DYALLOC.1308   
*CALL ARGDUMA                                                              @DYALLOC.1309   
*CALL ARGDUMO                                                              @DYALLOC.1310   
*CALL ARGDUMW                                                              WRB1F401.202    
     &       internal_model,ICODE,CMESSAGE )                               GRB1F305.51     
C                                                                          INCRTIM1.32     
      IMPLICIT NONE                                                        INCRTIM1.33     
C                                                                          @DYALLOC.1312   
C*L Arguments                                                              @DYALLOC.1313   
CL                                                                         @DYALLOC.1314   
*CALL TYPSIZE                                                              @DYALLOC.1315   
*CALL TYPDUMA                                                              @DYALLOC.1316   
*CALL TYPDUMO                                                              @DYALLOC.1317   
*CALL TYPDUMW                                                              WRB1F401.203    
C                                                                          @DYALLOC.1318   
      INTEGER       internal_model    ! IN : internal model identifier     GRB1F305.52     
      INTEGER       ICODE             ! OUT: Error return code             @DYALLOC.1319   
      CHARACTER*80  CMESSAGE          ! OUT: Error return message          WRB1F401.204    
C                                                                          INCRTIM1.34     
C*----------------------------------------------------------------------   INCRTIM1.35     
C  Common blocks                                                           INCRTIM1.36     
C                                                                          INCRTIM1.37     
*CALL CMAXSIZE                                                             GRB1F305.53     
*CALL CSUBMODL                                                             GRB1F305.54     
*CALL CHSUNITS                                                             RS030293.112    
*CALL CLOOKADD                                                             INCRTIM1.38     
*CALL CCONTROL                                                             INCRTIM1.39     
*CALL CHISTORY                                                             GRB1F305.55     
*CALL CTIME                                                                INCRTIM1.42     
*CALL LBC_COUP                                                             GDR3F405.843    
C                                                                          INCRTIM1.44     
C  Subroutines called                                                      INCRTIM1.45     
C                                                                          INCRTIM1.46     
      EXTERNAL SEC2TIME,STP2TIME                                           TJ080294.179    
C                                                                          INCRTIM1.48     
C  Local variables                                                         INCRTIM1.49     
C                                                                          INCRTIM1.50     
      INTEGER                                                              INCRTIM1.51     
     1     ELAPSED_DAYS,           ! Elapsed days since basis time         TJ080294.180    
     1     ELAPSED_SECS,           ! Elapsed secs since basis time         TJ080294.181    
     &     ELAPSED_DAYS_PREV,      ! Elapsed days, end of previous step    TJ080294.182    
     &     ELAPSED_SECS_PREV,      ! Elapsed secs, end of previous step    TJ080294.183    
     &     I                       ! Loop index                            INCRTIM1.54     
      INTEGER                      ! Local scalars of internal model       GRB1F305.56     
     *  STEP                       !  arrays.                              GRB1F305.57     
     *, STEPS_PER_PERIOD                                                   GRB1F305.58     
     *, SECS_PER_PERIOD                                                    GRB1F305.59     
                                                                           GRB1F305.60     
CL                                                                         INCRTIM1.55     
CL----------------------------------------------------------------------   INCRTIM1.56     
CL 1. General timestep, increment STEP by one and update atmos             GRB1F305.61     
CL    elapsed seconds (integer) relative to basis time                     INCRTIM1.58     
CL                                                                         INCRTIM1.59     
        STEP            =STEPim(internal_model)                            GRB1F305.62     
        STEPS_PER_PERIOD=STEPS_PER_PERIODim(internal_model)                GRB1F305.63     
        SECS_PER_PERIOD =SECS_PER_PERIODim(internal_model)                 GRB1F305.64     
                                                                           GRB1F305.65     
        CALL STP2TIME(STEP,STEPS_PER_PERIOD,SECS_PER_PERIOD,               GRB1F305.66     
     &                ELAPSED_DAYS_PREV,ELAPSED_SECS_PREV)                 TJ080294.185    
        STEP = STEP+1                                                      GRB1F305.67     
        CALL STP2TIME(STEP,STEPS_PER_PERIOD,SECS_PER_PERIOD,               GRB1F305.68     
     &                ELAPSED_DAYS,ELAPSED_SECS)                           TJ080294.187    
                                                                           GRB1F305.69     
        STEPim(internal_model) = STEP                                      GRB1F305.70     
        H_STEPim(internal_model) = STEP                                    GRB1F305.71     
                                                                           GRB1F305.72     
                                                                           GRB1F305.73     
CL                                                                         INCRTIM1.66     
CL 1.1 Set FORECAST_HRS from ELAPSED_DAYS/SECS since basis time and        GRB1F305.74     
CL     subtract DATA_MINUS_BASIS_HRS to get validity time - data time      INCRTIM1.77     
      FORECAST_HRS= ELAPSED_SECS/3600 + ELAPSED_DAYS*24                    TJ080294.193    
     &            - DATA_MINUS_BASIS_HRS                                   TJ080294.194    
      IF (L_LBC_COUP) THEN                                                 GDR3F405.844    
!       Get forecast time with respect to analysis time.                   GDR3F405.845    
        LBC_FC_HRS = FORECAST_HRS - MODEL_ANALYSIS_HRS                     GDR3F405.846    
      ENDIF                                                                GDR3F405.847    
      IF (L_IAU) THEN                                                      VSB2F404.22     
        IF (FORECAST_HRS.GE.(MODEL_ANALYSIS_HRS-DATA_MINUS_BASIS_HRS))     VSB2F404.23     
     &    FORECAST_HRS=FORECAST_HRS-                                       VSB2F404.24     
     &                 (MODEL_ANALYSIS_HRS-DATA_MINUS_BASIS_HRS)           VSB2F404.25     
      ELSE                                                                 VSB2F404.26     
      IF (FORECAST_HRS.GE.MODEL_ANALYSIS_HRS)                              INCRTIM1.79     
     &    FORECAST_HRS=FORECAST_HRS-MODEL_ANALYSIS_HRS                     INCRTIM1.80     
      ENDIF                                                                VSB2F404.27     
CL----------------------------------------------------------------------   INCRTIM1.81     
CL 2. Convert elapsed seconds since basis time to calendar time/date       INCRTIM1.82     
CL                                                                         INCRTIM1.83     
      CALL SEC2TIME(ELAPSED_DAYS_PREV,ELAPSED_SECS_PREV,                   TJ080294.195    
     &              BASIS_TIME_DAYS,BASIS_TIME_SECS,                       TJ080294.196    
     1              PREVIOUS_TIME(1),PREVIOUS_TIME(2),PREVIOUS_TIME(3),    INCRTIM1.85     
     2              PREVIOUS_TIME(4),PREVIOUS_TIME(5),PREVIOUS_TIME(6),    INCRTIM1.86     
     3              PREVIOUS_TIME(7),LCAL360)                              GSS1F304.395    
      CALL SEC2TIME(ELAPSED_DAYS,ELAPSED_SECS,                             TJ080294.197    
     &              BASIS_TIME_DAYS,BASIS_TIME_SECS,                       TJ080294.198    
     1              I_YEAR,I_MONTH,I_DAY,I_HOUR,I_MINUTE,I_SECOND,         INCRTIM1.89     
     2              I_DAY_NUMBER,LCAL360)                                  GSS1F304.396    
CL----------------------------------------------------------------------   INCRTIM1.91     
CL 3. Copy date/time information into the dump header and update           INCRTIM1.92     
CL    VALIDITY TIME and FORECAST PERIOD in prognostic field LOOKUP         INCRTIM1.93     
CL    headers.                                                             INCRTIM1.94     
CL                                                                         INCRTIM1.95     
*IF DEF,ATMOS                                                              INCRTIM1.96     
      IF (internal_model.eq.atmos_im) THEN                                 GRB1F305.75     
        A_FIXHD(28) = I_YEAR                                               INCRTIM1.98     
        A_FIXHD(29) = I_MONTH                                              INCRTIM1.99     
        A_FIXHD(30) = I_DAY                                                INCRTIM1.100    
        A_FIXHD(31) = I_HOUR                                               INCRTIM1.101    
        A_FIXHD(32) = I_MINUTE                                             INCRTIM1.102    
        A_FIXHD(33) = I_SECOND                                             INCRTIM1.103    
        A_FIXHD(34) = I_DAY_NUMBER                                         INCRTIM1.104    
        DO I=1,A_PROG_LOOKUP                                               INCRTIM1.105    
          A_LOOKUP(LBYR  ,I)=I_YEAR                                        INCRTIM1.106    
          A_LOOKUP(LBMON ,I)=I_MONTH                                       INCRTIM1.107    
          A_LOOKUP(LBDAT ,I)=I_DAY                                         INCRTIM1.108    
          A_LOOKUP(LBHR  ,I)=I_HOUR                                        INCRTIM1.109    
          A_LOOKUP(LBMIN ,I)=I_MINUTE                                      INCRTIM1.110    
          A_LOOKUP(LBDAY ,I)=I_DAY_NUMBER                                  INCRTIM1.111    
          A_LOOKUP(LBFT,I)=FORECAST_HRS                                    INCRTIM1.112    
        ENDDO                                                              INCRTIM1.113    
CL Update run date time                                                    INCRTIM1.114    
! These appear not to be really used.                                      GDR3F305.101    
        ACTUAL_ENDT(1,A_IM) = I_YEAR                                       GDR3F305.102    
        ACTUAL_ENDT(2,A_IM) = I_MONTH                                      GDR3F305.103    
        ACTUAL_ENDT(3,A_IM) = I_DAY                                        GDR3F305.104    
        ACTUAL_ENDT(4,A_IM) = I_HOUR                                       GDR3F305.105    
        ACTUAL_ENDT(5,A_IM) = I_MINUTE                                     GDR3F305.106    
        ACTUAL_ENDT(6,A_IM) = I_SECOND                                     GDR3F305.107    
!       LENGTH(A_IM) = STEP(A_IM)                                          GDR3F305.108    
!       A_LENGTH=STEP                                                      GRB1F305.76     
      ENDIF                                                                INCRTIM1.122    
*ENDIF                                                                     INCRTIM1.123    
*IF DEF,OCEAN                                                              INCRTIM1.124    
      IF (internal_model.eq.ocean_im) THEN                                 GRB1F305.77     
        O_FIXHD(28) = I_YEAR                                               INCRTIM1.126    
        O_FIXHD(29) = I_MONTH                                              INCRTIM1.127    
        O_FIXHD(30) = I_DAY                                                INCRTIM1.128    
        O_FIXHD(31) = I_HOUR                                               INCRTIM1.129    
        O_FIXHD(32) = I_MINUTE                                             INCRTIM1.130    
        O_FIXHD(33) = I_SECOND                                             INCRTIM1.131    
        O_FIXHD(34) = I_DAY_NUMBER                                         INCRTIM1.132    
        DO I=1,O_PROG_LOOKUP                                               INCRTIM1.133    
          O_LOOKUP(LBYR ,I)=I_YEAR                                         INCRTIM1.134    
          O_LOOKUP(LBMON,I)=I_MONTH                                        INCRTIM1.135    
          O_LOOKUP(LBDAT,I)=I_DAY                                          INCRTIM1.136    
          O_LOOKUP(LBHR ,I)=I_HOUR                                         INCRTIM1.137    
          O_LOOKUP(LBMIN,I)=I_MINUTE                                       INCRTIM1.138    
          O_LOOKUP(LBDAY,I)=I_DAY_NUMBER                                   INCRTIM1.139    
          O_LOOKUP(LBFT,I)=FORECAST_HRS                                    INCRTIM1.140    
        ENDDO                                                              INCRTIM1.141    
CL Update run date time                                                    INCRTIM1.142    
! These appear not to be really used.                                      GDR3F305.109    
        ACTUAL_ENDT(1,O_IM) = I_YEAR                                       GDR3F305.110    
        ACTUAL_ENDT(2,O_IM) = I_MONTH                                      GDR3F305.111    
        ACTUAL_ENDT(3,O_IM) = I_DAY                                        GDR3F305.112    
        ACTUAL_ENDT(4,O_IM) = I_HOUR                                       GDR3F305.113    
        ACTUAL_ENDT(5,O_IM) = I_MINUTE                                     GDR3F305.114    
        ACTUAL_ENDT(6,O_IM) = I_SECOND                                     GDR3F305.115    
!       LENGTH(O_IM) = STEP(O_IM)                                          GDR3F305.116    
!       O_LENGTH=STEP                                                      GRB1F305.78     
      ENDIF                                                                WRB1F401.205    
*ENDIF                                                                     WRB1F401.206    
*IF DEF,WAVE                                                               WRB1F401.207    
      IF (internal_model.eq.wave_im) THEN                                  WRB1F401.208    
        W_FIXHD(28) = I_YEAR                                               WRB1F401.209    
        W_FIXHD(29) = I_MONTH                                              WRB1F401.210    
        W_FIXHD(30) = I_DAY                                                WRB1F401.211    
        W_FIXHD(31) = I_HOUR                                               WRB1F401.212    
        W_FIXHD(32) = I_MINUTE                                             WRB1F401.213    
        W_FIXHD(33) = I_SECOND                                             WRB1F401.214    
        W_FIXHD(34) = I_DAY_NUMBER                                         WRB1F401.215    
        DO I=1,W_PROG_LOOKUP                                               WRB1F401.216    
          W_LOOKUP(LBYR  ,I)=I_YEAR                                        WRB1F401.217    
          W_LOOKUP(LBMON ,I)=I_MONTH                                       WRB1F401.218    
          W_LOOKUP(LBDAT ,I)=I_DAY                                         WRB1F401.219    
          W_LOOKUP(LBHR  ,I)=I_HOUR                                        WRB1F401.220    
          W_LOOKUP(LBMIN ,I)=I_MINUTE                                      WRB1F401.221    
          W_LOOKUP(LBDAY ,I)=I_DAY_NUMBER                                  WRB1F401.222    
          W_LOOKUP(LBFT  ,I)=FORECAST_HRS                                  WRB1F401.223    
        ENDDO                                                              WRB1F401.224    
CL Update run date time                                                    WRB1F401.225    
! These appear not to be really used.                                      WRB1F401.226    
        ACTUAL_ENDT(1,W_IM) = I_YEAR                                       WRB1F401.227    
        ACTUAL_ENDT(2,W_IM) = I_MONTH                                      WRB1F401.228    
        ACTUAL_ENDT(3,W_IM) = I_DAY                                        WRB1F401.229    
        ACTUAL_ENDT(4,W_IM) = I_HOUR                                       WRB1F401.230    
        ACTUAL_ENDT(5,W_IM) = I_MINUTE                                     WRB1F401.231    
        ACTUAL_ENDT(6,W_IM) = I_SECOND                                     WRB1F401.232    
      ENDIF                                                                INCRTIM1.150    
*ENDIF                                                                     INCRTIM1.151    
      RETURN                                                               INCRTIM1.152    
CL----------------------------------------------------------------------   INCRTIM1.153    
      END                                                                  INCRTIM1.154    
C                                                                          INCRTIM1.155    
*ENDIF                                                                     INCRTIM1.156