*IF DEF,CONTROL,OR,DEF,FLDOP                                               UIE3F404.60     
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.15966  
C                                                                          GTS2F400.15967  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.15968  
C restrictions as set forth in the contract.                               GTS2F400.15969  
C                                                                          GTS2F400.15970  
C                Meteorological Office                                     GTS2F400.15971  
C                London Road                                               GTS2F400.15972  
C                BRACKNELL                                                 GTS2F400.15973  
C                Berkshire UK                                              GTS2F400.15974  
C                RG12 2SZ                                                  GTS2F400.15975  
C                                                                          GTS2F400.15976  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.15977  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.15978  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.15979  
C Modelling at the above address.                                          GTS2F400.15980  
C ******************************COPYRIGHT******************************    GTS2F400.15981  
C                                                                          GTS2F400.15982  
!+Process time-series domain data (if any)                                 TIMSER1.3      
! Subroutine interface:                                                    TIMSER1.4      

      SUBROUTINE TIMSER(CMESSAGE,ErrorStatus)                               1TIMSER1.5      
      IMPLICIT NONE                                                        TIMSER1.6      
                                                                           TIMSER1.7      
! Description:                                                             TIMSER1.8      
!                                                                          TIMSER1.9      
! Method:                                                                  TIMSER1.10     
!                                                                          TIMSER1.11     
! Current code owner:  S.J.Swarbrick                                       TIMSER1.12     
!                                                                          TIMSER1.13     
! History:                                                                 TIMSER1.14     
! Version   Date       Comment                                             TIMSER1.15     
! =======   ====       =======                                             TIMSER1.16     
!   4.0     Sept. 95   Original code.  S.J.Swarbrick                       TIMSER1.17     
!   4.1     Apr.  96   Rationalise MDI   S.J.Swarbrick                     GSS1F401.39     
!                                                                          TIMSER1.18     
!  Code description:                                                       TIMSER1.19     
!    FORTRAN 77 + common Fortran 90 extensions.                            TIMSER1.20     
!    Written to UM programming standards version 7.                        TIMSER1.21     
!                                                                          TIMSER1.22     
!  System component covered:                                               TIMSER1.23     
!  System task:               Sub-Models Project                           TIMSER1.24     
!                                                                          TIMSER1.25     
! Global variables:                                                        TIMSER1.26     
*CALL LENFIL                                                               TIMSER1.27     
*CALL CSUBMODL                                                             TIMSER1.28     
*CALL VERSION                                                              TIMSER1.29     
*CALL TYPSIZE                                                              GSS1F401.40     
*CALL MODEL                                                                TIMSER1.30     
*CALL CSTASH                                                               GRB0F401.23     
*CALL STEXTEND                                                             TIMSER1.32     
*CALL C_MDI                                                                GSS1F401.41     
                                                                           TIMSER1.33     
! Subroutine arguments                                                     TIMSER1.34     
!   Scalar arguments with intent(out):                                     TIMSER1.35     
      CHARACTER*80 CMESSAGE      ! Error return message                    TIMSER1.36     
                                                                           TIMSER1.37     
! Error status:                                                            TIMSER1.38     
      INTEGER        ErrorStatus ! Error return code                       TIMSER1.39     
                                                                           TIMSER1.40     
! Local variables:                                                         TIMSER1.41     
      INTEGER BlkId           !Time series block identifier                TIMSER1.42     
      INTEGER BlkSt           !Start position of ts block data             TIMSER1.43     
      INTEGER Nrecs_prev      !No of recs in previous time ser block       TIMSER1.44     
      INTEGER IDP             !Domain profile loop counter                 TIMSER1.45     
      INTEGER IPOS            !Position in ts limits arrays                TIMSER1.46     
      INTEGER ISBLIM,ISTLIM   !Used for converting vertical ts             TIMSER1.47     
      INTEGER IB,IT,IL,ILVL   !  domain limits to sequence nos.            TIMSER1.48     
                                                                           TIMSER1.49     
!- End of Header ------------------------------------------------------    TIMSER1.50     
                                                                           TIMSER1.51     
!Loop over domain profiles                                                 TIMSER1.52     
      BlkSt =1                                                             TIMSER1.53     
      DO IDP=1,NDPROF                                                      TIMSER1.54     
        IF(NPOS_TS(IDP).GT.0) THEN                                         TIMSER1.55     
!  This domain profile has a time series                                   TIMSER1.56     
!    Identify TS block using pointer array                                 TIMSER1.57     
          BlkId = NPOS_TS (IDP)                                            TIMSER1.58     
!    Find start position (in LIM_TS arrays) of data for this block         TIMSER1.59     
          IF (BlkId.GT.1) THEN                                             TIMSER1.60     
            BlkSt=BlkSt+Nrecs_prev                                         TIMSER1.61     
          END IF                                                           TIMSER1.62     
!  Loop over records in ts block corresponding to domain profile IDP.      TIMSER1.63     
!  Adjust the TS records for domain profiles with vertical or horiz        TIMSER1.64     
!    averaging.                                                            TIMSER1.65     
!  Convert the ts domain vertical limits to sequence nos.                  TIMSER1.66     
!    in the domain profile levels range/levels list.                       TIMSER1.67     
          DO IPOS=BlkSt,BlkSt+NRECS_TS(NPOS_TS(IDP))-1                     TIMSER1.68     
!    Vertical levels                                                       TIMSER1.69     
            IF(IOPL_D(IDP).EQ.1 .OR. IOPL_D(IDP).EQ.2 .OR.                 TIMSER1.70     
     &                               IOPL_D(IDP).EQ.6) THEN                TIMSER1.71     
!           Model levels                                                   TIMSER1.72     
              IF(IMN_D(IDP).EQ.1) THEN                                     TIMSER1.73     
!             Vertical mean                                                TIMSER1.74     
                BLIM_TS(IPOS)=1                                            TIMSER1.75     
                TLIM_TS(IPOS)=1                                            TIMSER1.76     
              ELSE                                                         TIMSER1.77     
!             No vertical mean                                             TIMSER1.78     
                IF(LEVB_D(IDP).GE.0) THEN                                  TIMSER1.79     
!               Range of model levels                                      TIMSER1.80     
                  IF(BLIM_TS(IPOS).LT.LEVB_D(IDP) .OR.                     TIMSER1.81     
     &              TLIM_TS(IPOS).GT.LEVT_D(IDP)) THEN                     TIMSER1.82     
                    WRITE(6,*) 'ERROR, TIMSER: ',                          TIMSER1.83     
     &            ' TS_DOMAIN LEVEL LIMIT OUT OF RANGE; ',                 TIMSER1.84     
     &            ' DOM PROF: ',IDP,                                       GSS1F401.42     
     &            ' TS RECORD: ',IPOS                                      TIMSER1.86     
                    ErrorStatus=1                                          TIMSER1.87     
                    CMESSAGE='TS DOMAIN LEVEL LIMIT OUT OF RANGE'          TIMSER1.88     
                    GO TO 999                                              TIMSER1.89     
                  END IF                                                   TIMSER1.90     
                  BLIM_TS(IPOS)=BLIM_TS(IPOS)-LEVB_D(IDP)+1                TIMSER1.91     
                  TLIM_TS(IPOS)=TLIM_TS(IPOS)-LEVB_D(IDP)+1                TIMSER1.92     
                ELSE                                                       TIMSER1.93     
!               List of selected model levels;                             TIMSER1.94     
!               LEVT_D(IDP)=no. of levels in list                          TIMSER1.95     
                  ISBLIM=IMDI                                              GSS1F401.43     
                  ISTLIM=IMDI                                              GSS1F401.44     
                  DO IL=1,LEVT_D(IDP)                                      TIMSER1.98     
                    IF(BLIM_TS(IPOS).EQ.LEVLST_D(IL,IDP)) ISBLIM=IL        TIMSER1.99     
                    IF(TLIM_TS(IPOS).EQ.LEVLST_D(IL,IDP)) ISTLIM=IL        TIMSER1.100    
                  END DO                                                   TIMSER1.101    
                  IF((ISTLIM.EQ.IMDI).OR.                                  GSS1F401.45     
     &               (ISBLIM.EQ.IMDI)) THEN                                GSS1F401.46     
                    WRITE(6,*)                                             TIMSER1.104    
     &             'ERROR TIMSER:T-SERIES INTEGER LEVEL NOT IN ',          TIMSER1.105    
     &             'LEVELS LIST; DOM PROF: ',IDP,' TS RECORD: ',IPOS       TIMSER1.106    
                    WRITE(6,*) 'SPECIFIED TS LEVELS LIMITS: ',             TIMSER1.107    
     &              BLIM_TS(IPOS),TLIM_TS(IPOS)                            TIMSER1.108    
                    ErrorStatus = 1                                        TIMSER1.109    
                    CMESSAGE=                                              TIMSER1.110    
     &             'ERROR TIMSER:T-SERIES LEVEL NOT IN LEVELS LIST'        TIMSER1.111    
                    GO TO 999                                              TIMSER1.112    
                  END IF                                                   TIMSER1.113    
!                 Store seq. nos. of ts domain level limits                TIMSER1.114    
                  BLIM_TS(IPOS)=ISBLIM                                     TIMSER1.115    
                  TLIM_TS(IPOS)=ISTLIM                                     TIMSER1.116    
                END IF                                                     TIMSER1.117    
              END IF                                                       TIMSER1.118    
!           List of specified real levels                                  TIMSER1.119    
            ELSE IF((IOPL_D(IDP).NE.5).AND.(IOPL_D(IDP).LE.9)) THEN        TIMSER1.120    
              IF(IMN_D(IDP).EQ.1) THEN                                     TIMSER1.121    
                BLIM_TS(IPOS)=1                                            TIMSER1.122    
                TLIM_TS(IPOS)=1                                            TIMSER1.123    
              ELSE                                                         TIMSER1.124    
!             Determine sequence nos. of top & bottom ts domain            TIMSER1.125    
!             levels in real levels list (ISBLIM, ISTLIM), by              TIMSER1.126    
!             representing real level values as integers.                  TIMSER1.127    
                ISBLIM=IMDI                                                GSS1F401.47     
                ISTLIM=IMDI                                                GSS1F401.48     
                IB=(BLIMR_TS(IPOS)*1000.+0.5)                              TIMSER1.130    
                IT=(TLIMR_TS(IPOS)*1000.+0.5)                              TIMSER1.131    
                DO IL=1,LEVT_D(IDP)                                        TIMSER1.132    
                  ILVL=(RLEVLST_D(IL,IDP)*1000.+0.5)                       TIMSER1.133    
                  IF(IB.EQ.ILVL) ISBLIM=IL                                 TIMSER1.134    
                  IF(IT.EQ.ILVL) ISTLIM=IL                                 TIMSER1.135    
                END DO                                                     TIMSER1.136    
                IF((ISTLIM.EQ.IMDI).OR.                                    GSS1F401.49     
     &             (ISBLIM.EQ.IMDI)) THEN                                  GSS1F401.50     
                  WRITE(6,*)                                               TIMSER1.139    
     &           'ERROR TIMSER:T-SERIES REAL LEVEL NOT IN ',               TIMSER1.140    
     &           'LEVELS LIST; DOM PROF: ',IDP,' TS RECORD: ',IPOS         TIMSER1.141    
                  WRITE(6,*) 'SPECIFIED TS LEVELS LIMITS: ',               TIMSER1.142    
     &            BLIMR_TS(IPOS),TLIMR_TS(IPOS)                            TIMSER1.143    
                  ErrorStatus = 1                                          TIMSER1.144    
                  CMESSAGE=                                                TIMSER1.145    
     &           'ERROR TIMSER:T-SERIES LEVEL NOT IN LEVELS LIST'          TIMSER1.146    
                END IF                                                     TIMSER1.147    
!               Store seq. nos. of ts domain level limits                  TIMSER1.148    
                BLIM_TS(IPOS)=ISBLIM                                       TIMSER1.149    
                TLIM_TS(IPOS)=ISTLIM                                       TIMSER1.150    
              END IF                                                       TIMSER1.151    
            ELSE IF(IOPL_D(IDP).EQ.5) THEN                                 TIMSER1.152    
!           Single level                                                   TIMSER1.153    
              BLIM_TS(IPOS)=1                                              TIMSER1.154    
              TLIM_TS(IPOS)=1                                              TIMSER1.155    
            ELSE                                                           TIMSER1.156    
              WRITE(6,*)                                                   TIMSER1.157    
     &       'ERROR TIMSER: UNEXPECTED LEVEL TYPE CODE',IOPL_D(IDP)        TIMSER1.158    
              ErrorStatus=1                                                TIMSER1.159    
              GO TO 999                                                    TIMSER1.160    
            END IF                                                         TIMSER1.161    
!    Horizontal area                                                       TIMSER1.162    
            IF(IMN_D(IDP).EQ.2) THEN                                       TIMSER1.163    
              ELIM_TS(IPOS)=1                                              TIMSER1.164    
              WLIM_TS(IPOS)=1                                              TIMSER1.165    
            ELSE IF(IMN_D(IDP).EQ.3) THEN                                  TIMSER1.166    
              NLIM_TS(IPOS)=1                                              TIMSER1.167    
              SLIM_TS(IPOS)=1                                              TIMSER1.168    
            ELSE IF(IMN_D(IDP).EQ.4) THEN                                  TIMSER1.169    
              ELIM_TS(IPOS)=1                                              TIMSER1.170    
              WLIM_TS(IPOS)=1                                              TIMSER1.171    
              NLIM_TS(IPOS)=1                                              TIMSER1.172    
              SLIM_TS(IPOS)=1                                              TIMSER1.173    
            END IF                                                         TIMSER1.174    
            IG_TS =0  ! These constants are left-overs from the            TIMSER1.175    
            I1_TS =1  !  pre-vn3.5 TIMSER routine: they are used           TIMSER1.176    
            I51_TS=51 !  in the UM time-series routines.                   TIMSER1.177    
          END DO      ! IPOS loop                                          TIMSER1.178    
        Nrecs_prev=NRECS_TS(NPOS_TS(IDP)) ! For next TS block              TIMSER1.179    
        END IF        ! TS(IDP).EQ.'Y'                                     TIMSER1.180    
      END DO          ! IDP loop                                           TIMSER1.181    
                                                                           TIMSER1.182    
 999  RETURN                                                               TIMSER1.183    
      END                                                                  TIMSER1.184    
*ENDIF                                                                     TIMSER1.185