*IF DEF,CONTROL,OR,DEF,RECON                                               UIE3F404.50     
C ******************************COPYRIGHT******************************    GTS2F400.12718  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.12719  
C                                                                          GTS2F400.12720  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.12721  
C restrictions as set forth in the contract.                               GTS2F400.12722  
C                                                                          GTS2F400.12723  
C                Meteorological Office                                     GTS2F400.12724  
C                London Road                                               GTS2F400.12725  
C                BRACKNELL                                                 GTS2F400.12726  
C                Berkshire UK                                              GTS2F400.12727  
C                RG12 2SZ                                                  GTS2F400.12728  
C                                                                          GTS2F400.12729  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.12730  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.12731  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.12732  
C Modelling at the above address.                                          GTS2F400.12733  
C                                                                          GTS2F400.12734  
!+Read the basis file information                                          RDBASIS1.3      
! Subroutine Interface:                                                    RDBASIS1.4      
                                                                           RDBASIS1.5      

      SUBROUTINE RDBASIS                                                    1,4GSS3F401.984    
     & (IU,CMESSAGE,ErrorStatus)                                           GSS3F401.985    
      IMPLICIT NONE                                                        RDBASIS1.7      
                                                                           RDBASIS1.8      
! Description:                                                             RDBASIS1.9      
!                                                                          RDBASIS1.10     
! Method:                                                                  RDBASIS1.11     
!                                                                          RDBASIS1.12     
! Current code owner:  S.J.Swarbrick                                       RDBASIS1.13     
!                                                                          RDBASIS1.14     
! History:                                                                 RDBASIS1.15     
! Version   Date       Comment                                             RDBASIS1.16     
! =======   ====       =======                                             RDBASIS1.17     
!   3.5     Mar. 95    Original code.  S.J.Swarbrick                       RDBASIS1.18     
!   4.0     Sept.95    Original code.  S.J.Swarbrick                       GSS1F400.495    
!  4.0  18/10/95  Add ErrorStatus to GET_FILE call. RTHBarnes              GRB2F400.12     
!   4.1     June 96    DISCT_LEV function used to check for model          GSS3F401.986    
!                         levels       S.J.Swarbrick                       GSS3F401.987    
!   4.4     Sep. 97    Add IOFF to namelist for offset to sampling         GSM5F404.19     
!                      frequency. S.D. Mullerworth                         GSM5F404.20     
!   4.5     July 98    Remove call to INTRFACE (A Van der Wal)             GAV0F405.7      
!   4.5    30/10/97    Read stash data on PE 0 for the T3E                 GBCVF405.166    
!                      and distribute it.                                  GBCVF405.167    
!                        Author: Bob Carruthers, Cray Research             GBCVF405.168    
!                                                                          RDBASIS1.19     
!  Code description:                                                       RDBASIS1.20     
!    FORTRAN 77 + common Fortran 90 extensions.                            RDBASIS1.21     
!    Written to UM programming standards version 7.                        RDBASIS1.22     
!                                                                          RDBASIS1.23     
!  System component covered:                                               RDBASIS1.24     
!  System task:               Sub-Models Project                           RDBASIS1.25     
!                                                                          RDBASIS1.26     
! Global variables:                                                        RDBASIS1.27     
                                                                           RDBASIS1.28     
*CALL C_MDI                                                                GSS1F400.496    
*CALL LENFIL                                                               RDBASIS1.29     
*CALL CSUBMODL                                                             RDBASIS1.30     
*CALL VERSION                                                              RDBASIS1.31     
*CALL CSTASH                                                               GRB0F401.13     
*CALL TYPSIZE                                                              GSS3F401.988    
*CALL MODEL                                                                RDBASIS1.34     
*CALL STEXTEND                                                             GSS1F400.497    
*CALL COCNINDX                                                             ORH6F402.11     
                                                                           RDBASIS1.35     
! Subroutine arguments                                                     RDBASIS1.36     
                                                                           RDBASIS1.37     
!   Scalar arguments with intent(in):                                      RDBASIS1.38     
      INTEGER IU       ! Unit no. of stash basis file                      RDBASIS1.39     
      INTEGER IE                                                           RDBASIS1.40     
!   Scalar arguments with intent(out):                                     GSS1F400.498    
      CHARACTER*80 CMESSAGE      ! Error return message                    GSS1F400.499    
                                                                           RDBASIS1.41     
!   Error status:                                                          RDBASIS1.42     
      INTEGER        ErrorStatus ! Error return code                       RDBASIS1.43     
                                                                           RDBASIS1.44     
! Local variables:                                                         RDBASIS1.45     
      LOGICAL MODEL_LEV  !TRUE for model levels                            GSS3F401.989    
      INTEGER I,J,L                                                        GSS3F401.990    
      INTEGER IDUM                                                         RDBASIS1.49     
      INTEGER IOSTAT                                                       RDBASIS1.50     
      INTEGER NtsRecs    !Counter for time series records                  GSS1F400.500    
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.169    
c                                                                          GBCVF405.170    
      integer shmem_n_pes, msg, info, nproc, shmem_my_pe, mype, k          GBCVF405.171    
*ENDIF                                                                     GBCVF405.172    
                                                                           RDBASIS1.51     
!   Namelist STASHNUM                                                      RDBASIS1.52     
      INTEGER            NUM_REQ,NUM_DOM,NUM_TIM,NUM_USE                   RDBASIS1.53     
      NAMELIST/STASHNUM/ NUM_REQ,NUM_DOM,NUM_TIM,NUM_USE                   RDBASIS1.54     
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.173    
      common/shmem_stashnum/ num_req,num_dom,num_tim,num_use               GBCVF405.174    
cdir$ cache_align /shmem_stashnum/                                         GBCVF405.175    
*ENDIF                                                                     GBCVF405.176    
                                                                           RDBASIS1.55     
!   Namelist STREQ: STASH requests                                         RDBASIS1.56     
      INTEGER         IMOD,ISEC,ITEM,IDOM,ITIM,IUSE                        RDBASIS1.57     
      NAMELIST/STREQ/ IMOD,ISEC,ITEM,IDOM,ITIM,IUSE                        RDBASIS1.58     
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.177    
      common/shmem_streq/ imod,isec,item,idom,itim,iuse                    GBCVF405.178    
cdir$ cache_align /shmem_streq/                                            GBCVF405.179    
*ENDIF                                                                     GBCVF405.180    
                                                                           RDBASIS1.59     
!   Namelist TIME: Time profiles                                           GSS1F400.501    
      CHARACTER*8 NAME                                                     RDBASIS1.61     
      CHARACTER*2 UNT1,UNT2,UNT3                                           RDBASIS1.62     
      INTEGER     ITYP,ISAM,INTV,IOPT                                      RDBASIS1.63     
      INTEGER     ISTR,IEND,IFRE,IOFF,ITIMES,ISER(NTIMEP)                  GSM5F404.21     
      NAMELIST/TIME/ITYP,ISAM,INTV,UNT1  ,UNT2,UNT3,IOPT                   RDBASIS1.65     
     &             ,ISTR,IEND,IFRE,IOFF,ITIMES,ISER,NAME                   GSM5F404.22     
                                                                           RDBASIS1.67     
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.181    
      common/shmem_time/ ityp,isam,intv,iopt                               GBCVF405.182    
     &             ,istr,iend,ifre,ioff,itimes,iser                        GBCVF405.183    
cdir$ cache_align /shmem_time/                                             GBCVF405.184    
      common/shmem_time_c/ name, unt1, unt2, unt3                          GBCVF405.185    
cdir$ cache_align /shmem_time_c/                                           GBCVF405.186    
*ENDIF                                                                     GBCVF405.187    
!   Namelist DOMAIN: Domain profiles                                       GSS1F400.502    
      INTEGER     IOPL           !Level type code                          GSS1F400.503    
      INTEGER     ILEVS          !Flag for range/selected model levels     GSS1F400.504    
      INTEGER     LEVB,LEVT      !Bottom/top levels for range              GSS1F400.505    
      INTEGER     PLT            !Pseudo level type code                   GSS1F400.506    
      INTEGER     IOPA                !Horizontal domain type code         GSS1F400.507    
      INTEGER     INTH,ISTH,IEST,IWST !Horiz domain limits (IOPA=9,10)     GSS1F400.508    
      INTEGER     IMSK                !Grid type code                      GSS1F400.509    
      INTEGER     IMN                 !Spatial meaning code                GSS1F400.510    
      INTEGER     IWT                 !Weighting code                      GSS1F400.511    
      INTEGER     LEVLST (NLEVP)      !Levels lists array: integer         GSS1F400.512    
      REAL        RLEVLST(NLEVP)      !                    real            GSS1F400.513    
      INTEGER     PSLIST (NPSLEVP)    !                    pseudo          GSS1F400.514    
      CHARACTER*1 TS                    !Flag for time series domain       GSS1F400.515    
      INTEGER     TSNUM                 !No. of time ser doms in prof      GSS1F400.516    
      INTEGER     TBLIM (tsdp),TTLIM (tsdp) !TS dom limits (top/bottom)    GSS1F400.517    
      REAL        TBLIMR(tsdp),TTLIMR(tsdp) !ditto for real levels         GSS1F400.518    
      INTEGER     TNLIM (tsdp),TSLIM (tsdp) !TS dom limits (N/S)           GSS1F400.519    
      INTEGER     TWLIM (tsdp),TELIM (tsdp) !TS dom limits (E/W)           GSS1F400.520    
                                                                           GSS1F400.521    
      NAMELIST/DOMAIN/IOPL ,ILEVS ,LEVB  ,LEVT  ,PLT    ,IOPA ,IMSK ,      GSS1F400.522    
     &                IMN  ,IWT   ,TS    ,LEVLST,RLEVLST,NAME ,            GSS1F400.523    
     &                INTH ,ISTH  ,IEST  ,IWST  ,PSLIST ,                  GSS1F400.524    
     &                TSNUM,TBLIM ,TTLIM ,TNLIM ,TSLIM  ,TELIM,TWLIM,      GSS1F400.525    
     &                      TBLIMR,TTLIMR                                  GSS1F400.526    
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.188    
                                                                           GBCVF405.189    
      common/shmem_domain/ IOPL ,ILEVS ,LEVB  ,LEVT  ,PLT    ,IOPA ,       GBCVF405.190    
     &              IMSK ,                                                 GBCVF405.191    
     &              IMN  ,IWT   ,LEVLST,RLEVLST,                           GBCVF405.192    
     &              INTH ,ISTH  ,IEST  ,IWST  ,PSLIST ,                    GBCVF405.193    
     &              TSNUM,TBLIM ,TTLIM ,TNLIM ,TSLIM  ,TELIM,TWLIM,        GBCVF405.194    
     &                    TBLIMR,TTLIMR                                    GBCVF405.195    
cdir$ cache_align /shmem_domain/                                           GBCVF405.196    
      common/shmem_domain_c/ ts                                            GBCVF405.197    
cdir$ cache_align /shmem_domain_c/                                         GBCVF405.198    
*ENDIF                                                                     GBCVF405.199    
                                                                           GSS1F400.527    
!   Namelist USE: Useage profiles                                          GSS1F400.528    
      INTEGER      LOCN,IUNT                                               RDBASIS1.80     
      NAMELIST/USE/LOCN,IUNT,NAME                                          RDBASIS1.81     
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.200    
      common/shmem_use/locn, iunt                                          GBCVF405.201    
cdir$ cache_align /shmem_use/                                              GBCVF405.202    
*ENDIF                                                                     GBCVF405.203    
                                                                           RDBASIS1.82     
! Function and subroutine calls:                                           RDBASIS1.83     
      LOGICAL  DISCT_LEV                                                   GSS3F401.991    
      EXTERNAL GET_FILE                                                    RDBASIS1.84     
                                                                           RDBASIS1.85     
!- End of Header ------------------------------------------------------    RDBASIS1.86     
                                                                           RDBASIS1.87     
! Initialisation                                                           RDBASIS1.88     
      NDIAG   =0                                                           GSS1F400.529    
      NTPROF  =0                                                           GSS1F400.530    
      NDPROF  =0                                                           GSS1F400.531    
      NUPROF  =0                                                           GSS1F400.532    
      NUM_REQ =0                                                           GSS1F400.533    
      NUM_TIM =0                                                           GSS1F400.534    
      NUM_DOM =0                                                           GSS1F400.535    
      NUM_USE =0                                                           GSS1F400.536    
      NtsRecs =0                                                           GSS1F400.537    
                                                                           RDBASIS1.97     
      DO I = 1,NDIAGPM                                                     RDBASIS1.98     
        MODL_B(I)=0                                                        RDBASIS1.99     
        ISEC_B(I)=0                                                        RDBASIS1.100    
        ITEM_B(I)=0                                                        RDBASIS1.101    
        ITIM_B(I)=0                                                        RDBASIS1.102    
        IDOM_B(I)=0                                                        RDBASIS1.103    
        IUSE_B(I)=0                                                        RDBASIS1.104    
      END DO                                                               RDBASIS1.105    
                                                                           RDBASIS1.106    
        ITIMES   =0                                                        RDBASIS1.107    
      DO I=1,NPROFTP                                                       RDBASIS1.108    
        TIMPRO(I)='        '                                               RDBASIS1.109    
        ITYP_T(I)=0                                                        RDBASIS1.110    
        INTV_T(I)=0                                                        RDBASIS1.111    
        UNT1_T(I)='  '                                                     RDBASIS1.112    
        ISAM_T(I)=0                                                        RDBASIS1.113    
        UNT2_T(I)='  '                                                     RDBASIS1.114    
        IOPT_T(I)=0                                                        RDBASIS1.115    
        ISTR_T(I)=0                                                        RDBASIS1.116    
        IEND_T(I)=0                                                        RDBASIS1.117    
        IFRE_T(I)=0                                                        RDBASIS1.118    
        IOFF_T(I)=0                                                        GSM5F404.23     
        UNT3_T(I)='  '                                                     RDBASIS1.119    
        ITIM_T(I)=0                                                        RDBASIS1.120    
        MODL_T(I)=0                                                        GSS3F401.992    
        DO J = 1,NTIMEP                                                    RDBASIS1.121    
          ISER_T(J,I)=0                                                    RDBASIS1.122    
        END DO                                                             RDBASIS1.123    
      END DO                                                               RDBASIS1.124    
                                                                           RDBASIS1.125    
      DO I=1,NPROFDP                                                       RDBASIS1.126    
        DOMPRO  (I)='        '                                             RDBASIS1.127    
        IOPL_D  (I)=0                                                      RDBASIS1.128    
        LEVB_D  (I)=0                                                      RDBASIS1.129    
        LEVT_D  (I)=0                                                      RDBASIS1.130    
        PLT_D   (I)=0                                                      RDBASIS1.131    
        IOPA_D  (I)=0                                                      RDBASIS1.132    
        INTH_D  (I)=0                                                      RDBASIS1.133    
        ISTH_D  (I)=0                                                      RDBASIS1.134    
        IEST_D  (I)=0                                                      RDBASIS1.135    
        IWST_D  (I)=0                                                      RDBASIS1.136    
        IMSK_D  (I)=0                                                      RDBASIS1.137    
        IMN_D   (I)=0                                                      RDBASIS1.138    
        IWT_D   (I)=0                                                      RDBASIS1.139    
        TS_D    (I)=' '                                                    RDBASIS1.140    
        PLLEN_D (I)=0                                                      RDBASIS1.141    
        PLPOS_D (I)=0                                                      RDBASIS1.142    
        ILEV_D  (I)=0                                                      RDBASIS1.143    
      END DO                                                               RDBASIS1.144    
      DO I = 1,NLEVP                                                       RDBASIS1.145    
      DO J = 1,NPROFDP                                                     RDBASIS1.146    
        LEVLST_D (I,J)=0                                                   RDBASIS1.147    
        RLEVLST_D(I,J)=0                                                   RDBASIS1.148    
      END DO                                                               RDBASIS1.149    
      END DO                                                               RDBASIS1.150    
      DO I = 1,NPSLEVP                                                     RDBASIS1.151    
      DO J = 1,NPSLISTP                                                    RDBASIS1.152    
        PSLIST_D(I,J)=0                                                    RDBASIS1.153    
      END DO                                                               RDBASIS1.154    
      END DO                                                               RDBASIS1.155    
                                                                           RDBASIS1.156    
      DO I = 1,NPROFUP                                                     RDBASIS1.157    
        USEPRO(I)='        '                                               RDBASIS1.158    
        LOCN_U(I)=0                                                        RDBASIS1.159    
        IUNT_U(I)=0                                                        RDBASIS1.160    
      END DO                                                               RDBASIS1.161    
                                                                           RDBASIS1.162    
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.204    
      mype=shmem_my_pe()                                                   GBCVF405.205    
      nproc=shmem_n_pes()                                                  GBCVF405.206    
      if(mype.eq.0) then                                                   GBCVF405.207    
*ENDIF                                                                     GBCVF405.208    
      CALL GET_FILE(IU,FILE,80,ErrorStatus)   ! Get name for stash file    GRB2F400.13     
                                                                           RDBASIS1.164    
! Rewind stash control file                                                GSS1F400.538    
      REWIND(IU)                                                           GSS1F400.539    
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.209    
      endif                                                                GBCVF405.210    
*ENDIF                                                                     GBCVF405.211    
                                                                           RDBASIS1.175    
!STASH control file header namelist                                        RDBASIS1.176    
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.212    
  99  continue                                                             GBCVF405.213    
      if(mype.eq.0) READ(IU,STASHNUM)                                      GBCVF405.214    
c                                                                          GBCVF405.215    
      msg=7010                                                             GBCVF405.216    
      info=0                                                               GBCVF405.217    
      call gc_ibcast(msg, 4, 0, nproc, info, num_req)                      GBCVF405.218    
*IF DEF,DIAG190                                                            GBCVF405.219    
        if(my_pe().le.1) write(190+my_pe(), STASHNUM)                      GBCVF405.220    
*ENDIF                                                                     GBCVF405.221    
c                                                                          GBCVF405.222    
*ELSE                                                                      GBCVF405.223    
  99  READ(IU,STASHNUM)                                                    RDBASIS1.177    
*ENDIF                                                                     GBCVF405.224    
      IF (NUM_REQ.EQ.-1) GOTO 999                                          RDBASIS1.178    
      NDIAG =NDIAG +NUM_REQ                                                RDBASIS1.179    
      NTPROF=NTPROF+NUM_TIM                                                RDBASIS1.180    
      NDPROF=NDPROF+NUM_DOM                                                RDBASIS1.181    
      NUPROF=NUPROF+NUM_USE                                                RDBASIS1.182    
      IF (NDIAG .GT.NRECDP ) THEN                                          GSS1F400.540    
        WRITE(6,*) 'NUMBER OF DIAGNOSTIC REQUESTS EXCEEDS LIMIT OF ',      GSS1F400.541    
     &  NRECDP ,' SOME HAVE BEEN IGNORED'                                  GSS1F400.542    
        GO TO 999                                                          GSS1F400.543    
      END IF                                                               GSS1F400.544    
      IF (NDPROF.GT.NPROFDP) THEN                                          GSS1F400.545    
        WRITE(6,*) 'ERROR IN STASHC:'                                      GSS1F400.546    
        WRITE(6,*) 'NUMBER OF DOMAIN PROFILES EXCEEDS LIMIT OF ',          GSS1F400.547    
     &  NPROFDP                                                            GSS1F400.548    
        WRITE(6,*) 'ARRAYS WILL BE OVERWRITTEN'                            GSS3F401.993    
        ErrorStatus=1                                                      GSS1F400.549    
        GO TO 9999                                                         GSS1F400.550    
      END IF                                                               GSS1F400.551    
      IF (NUPROF.GT.NPROFUP) THEN                                          GSS1F400.552    
        WRITE(6,*) 'ERROR IN STASHC:'                                      GSS1F400.553    
        WRITE(6,*) 'NUMBER OF USEAGE PROFILES EXCEEDS LIMIT OF ',          GSS1F400.554    
     &  NPROFUP                                                            GSS1F400.555    
        WRITE(6,*) 'ARRAYS WILL BE OVERWRITTEN'                            GSS3F401.994    
        ErrorStatus=1                                                      GSS1F400.556    
        GO TO 9999                                                         GSS1F400.557    
      END IF                                                               GSS1F400.558    
      IF (NTPROF.GT.NPROFTP) THEN                                          GSS1F400.559    
        WRITE(6,*) 'ERROR IN STASHC:'                                      GSS1F400.560    
        WRITE(6,*) 'NUMBER OF TIME PROFILES EXCEEDS LIMIT OF ',            GSS1F400.561    
     &  NPROFTP                                                            GSS1F400.562    
        WRITE(6,*) 'ARRAYS WILL BE OVERWRITTEN'                            GSS3F401.995    
        ErrorStatus=1                                                      GSS1F400.563    
        GO TO 9999                                                         GSS1F400.564    
      END IF                                                               GSS1F400.565    
                                                                           RDBASIS1.183    
!STASH request namelists                                                   RDBASIS1.184    
      IF (NUM_REQ.GT.0) THEN                                               RDBASIS1.185    
      DO I = NDIAG-NUM_REQ+1,NDIAG                                         RDBASIS1.186    
        IMOD=0                                                             RDBASIS1.187    
        ISEC=0                                                             RDBASIS1.188    
        ITEM=0                                                             RDBASIS1.189    
        ITIM=0                                                             RDBASIS1.190    
        IDOM=0                                                             RDBASIS1.191    
        IUSE=0                                                             RDBASIS1.192    
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.225    
        if(mype.eq.0) READ(IU,STREQ)                                       GBCVF405.226    
c                                                                          GBCVF405.227    
        msg=7011                                                           GBCVF405.228    
        info=0                                                             GBCVF405.229    
        call gc_ibcast(msg, 6, 0, nproc, info, imod)                       GBCVF405.230    
*IF DEF,DIAG190                                                            GBCVF405.231    
        if(my_pe().le.1) write(190+my_pe(), STREQ)                         GBCVF405.232    
*ENDIF                                                                     GBCVF405.233    
c                                                                          GBCVF405.234    
*ELSE                                                                      GBCVF405.235    
        READ(IU,STREQ)                                                     RDBASIS1.193    
*ENDIF                                                                     GBCVF405.236    
        MODL_B(I)=IMOD                                                     RDBASIS1.194    
        ISEC_B(I)=ISEC                                                     RDBASIS1.195    
        ITEM_B(I)=ITEM                                                     RDBASIS1.196    
        IF (ITIM.NE.0) THEN                                                GSS3F401.996    
          ITIM     =ITIM+NTPROF-NUM_TIM                                    GSS3F401.997    
        END IF                                                             GSS3F401.998    
        IDOM     =IDOM+NDPROF-NUM_DOM                                      GSS1F400.567    
        IUSE     =IUSE+NUPROF-NUM_USE                                      GSS1F400.568    
        ITIM_B(I)=ITIM                                                     RDBASIS1.197    
        IDOM_B(I)=IDOM                                                     RDBASIS1.198    
        IUSE_B(I)=IUSE                                                     RDBASIS1.199    
      END DO                                                               RDBASIS1.200    
      END IF                                                               RDBASIS1.201    
                                                                           RDBASIS1.202    
!Time profile namelists                                                    RDBASIS1.203    
      IF (NUM_TIM.GT.0) THEN                                               RDBASIS1.204    
      DO I = NTPROF-NUM_TIM+1,NTPROF                                       RDBASIS1.205    
        NAME='        '                                                    RDBASIS1.206    
        ISAM=0                                                             RDBASIS1.207    
        INTV=0                                                             RDBASIS1.208    
        IOPT=0                                                             RDBASIS1.209    
        ISTR=0                                                             RDBASIS1.210    
        IEND=0                                                             RDBASIS1.211    
        IFRE=0                                                             RDBASIS1.212    
        IOFF=0                                                             GSM5F404.24     
        DO J = 1,NTIMEP                                                    RDBASIS1.213    
          ISER(J)=0                                                        RDBASIS1.214    
        END DO                                                             RDBASIS1.215    
!  Read namelist                                                           RDBASIS1.216    
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.237    
        if(mype.eq.0) READ(IU,TIME)                                        GBCVF405.238    
c                                                                          GBCVF405.239    
        msg=7011                                                           GBCVF405.240    
        info=0                                                             GBCVF405.241    
        call gc_ibcast(msg, 9+ntimep, 0, nproc, info, ityp)                GBCVF405.242    
        msg=7012                                                           GBCVF405.243    
        info=0                                                             GBCVF405.244    
        call gc_cbcast(msg, 14, 0, nproc, info, name)                      GBCVF405.245    
*IF DEF,DIAG190                                                            GBCVF405.246    
        if(my_pe().le.1) write(190+my_pe(), TIME)                          GBCVF405.247    
*ENDIF                                                                     GBCVF405.248    
c                                                                          GBCVF405.249    
*ELSE                                                                      GBCVF405.250    
        READ(IU,TIME)                                                      RDBASIS1.217    
*ENDIF                                                                     GBCVF405.251    
        TIMPRO(I)=NAME                                                     RDBASIS1.218    
        ITYP_T(I)=ITYP                                                     RDBASIS1.219    
        IF (ITYP.NE.1) THEN                                                RDBASIS1.220    
!  Diagnostic output is time-processed                                     RDBASIS1.221    
          ISAM_T(I)=ISAM  !Sampling frequency                              RDBASIS1.222    
          UNT2_T(I)=UNT2                                                   RDBASIS1.223    
          INTV_T(I)=INTV  !Processing interval                             RDBASIS1.224    
          UNT1_T(I)=UNT1                                                   RDBASIS1.225    
        END IF                                                             RDBASIS1.226    
!  Diag. output time option                                                RDBASIS1.227    
        IOPT_T(I)=IOPT                                                     RDBASIS1.228    
        UNT3_T(I)=UNT3                                                     RDBASIS1.229    
        IF      (IOPT.EQ.1) THEN                                           RDBASIS1.230    
!    Regular output time interval                                          RDBASIS1.231    
          ISTR_T(I)=ISTR                                                   RDBASIS1.232    
          IEND_T(I)=IEND                                                   RDBASIS1.233    
          IFRE_T(I)=IFRE                                                   RDBASIS1.234    
          IOFF_T(I)=IOFF                                                   GSM5F404.25     
        ELSE IF (IOPT.EQ.2) THEN                                           RDBASIS1.235    
!    Specified list of output times                                        RDBASIS1.236    
!     Length of times table                                                GSS3F401.999    
          ITIM_T(I)=ITIMES                                                 RDBASIS1.237    
!     Internal model label for times table                                 GSS3F401.1000   
          IF (NDIAG.GT.0) THEN                                             GSS3F401.1001   
            MODL_T(I)=MODL_B(NDIAG)                                        GSS3F401.1002   
          END IF                                                           GSS3F401.1003   
!     Times table                                                          GSS3F401.1004   
          DO J = 1,ITIMES                                                  RDBASIS1.238    
            ISER_T(J,I)=ISER(J)                                            RDBASIS1.239    
          END DO                                                           RDBASIS1.240    
        END IF                                                             RDBASIS1.241    
      END DO                                                               RDBASIS1.242    
      END IF                                                               RDBASIS1.243    
                                                                           RDBASIS1.244    
!Domain profile namelists                                                  RDBASIS1.245    
      IF (NUM_DOM.GT.0) THEN                                               RDBASIS1.246    
      DO I = NDPROF-NUM_DOM+1,NDPROF                                       RDBASIS1.247    
!Initialise                                                                RDBASIS1.248    
        NAME ='        '                                                   RDBASIS1.249    
        IOPL =0                                                            RDBASIS1.250    
        LEVB =0                                                            RDBASIS1.251    
        LEVT =0                                                            RDBASIS1.252    
        ILEVS=0                                                            RDBASIS1.253    
          LEVLST (1)= IMDI                                                 GSS1F400.569    
         RLEVLST (1)= RMDI                                                 GSS1F400.570    
        DO J = 2,NLEVP                                                     GSS1F400.571    
          LEVLST (J)= 0                                                    GSS1F400.572    
          RLEVLST(J)= 0.0                                                  GSS1F400.573    
        END DO                                                             GSS1F400.574    
        DO J = 1,NPSLEVP                                                   RDBASIS1.258    
          PSLIST(J)=0                                                      RDBASIS1.259    
        END DO                                                             RDBASIS1.260    
        DO J = 1,tsdp                                                      GSS1F400.575    
          TBLIM (J)=0                                                      GSS1F400.576    
          TTLIM (J)=0                                                      GSS1F400.577    
          TBLIMR(J)=0.                                                     GSS1F400.578    
          TTLIMR(J)=0.                                                     GSS1F400.579    
          TNLIM (J)=0                                                      GSS1F400.580    
          TSLIM (J)=0                                                      GSS1F400.581    
          TELIM (J)=0                                                      GSS1F400.582    
          TWLIM (J)=0                                                      GSS1F400.583    
        END DO                                                             GSS1F400.584    
!Read namelist                                                             RDBASIS1.261    
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.252    
        if(mype.eq.0) READ(IU,DOMAIN)                                      GBCVF405.253    
c                                                                          GBCVF405.254    
        msg=7013                                                           GBCVF405.255    
        info=0                                                             GBCVF405.256    
        j=loc(ttlimr(tsdp))                                                GBCVF405.257    
        k=loc(iopl)                                                        GBCVF405.258    
        j=(j-k+8)/8                                                        GBCVF405.259    
        if(mype.eq.0) write(6,*) 'Length of DOMAIN is ',j,                 GBCVF405.260    
     2   ' Words'                                                          GBCVF405.261    
        call gc_ibcast(msg, j, 0, nproc, info, iopl)                       GBCVF405.262    
        msg=7014                                                           GBCVF405.263    
        info=0                                                             GBCVF405.264    
        call gc_cbcast(msg, 1, 0, nproc, info, ts)                         GBCVF405.265    
        msg=7015                                                           GBCVF405.266    
        info=0                                                             GBCVF405.267    
        call gc_cbcast(msg, 8, 0, nproc, info, name)                       GBCVF405.268    
*IF DEF,DIAG190                                                            GBCVF405.269    
        if(my_pe().le.1) write(190+my_pe(), DOMAIN)                        GBCVF405.270    
*ENDIF                                                                     GBCVF405.271    
c                                                                          GBCVF405.272    
*ELSE                                                                      GBCVF405.273    
        READ(IU,DOMAIN)                                                    RDBASIS1.262    
*ENDIF                                                                     GBCVF405.274    
!Check for errors in levels lists                                          GSS1F400.585    
        MODEL_LEV=DISCT_LEV(IOPL,ErrorStatus,CMESSAGE)                     GSS3F401.1005   
        IF (MODEL_LEV) THEN                                                GSS3F401.1006   
! Model levels                                                             GSS3F401.1007   
          IF (ILEVS.EQ.2) THEN                                             GSS1F400.587    
            IF ( LEVLST(1).EQ.IMDI ) THEN                                  GSS1F400.588    
              WRITE(6,*)                                                   GSS1F400.589    
     &       'ERROR,RDBASIS: LEVELS LIST IN DOMAIN PROFILE '               GSS1F400.590    
     &       ,I,' HAS NO ENTRIES'                                          GSS1F400.591    
              CMESSAGE='ERROR,RDBASIS: LEVELS LIST HAS NO ENTRIES'         GSS1F400.592    
              ErrorStatus=1                                                GSS1F400.593    
              GO TO 9999                                                   GSS1F400.594    
            END IF                                                         GSS1F400.595    
          END IF                                                           GSS1F400.596    
        ELSE IF (IOPL.NE.5) THEN                                           GSS3F401.1008   
          IF (RLEVLST(1).EQ.RMDI) THEN                                     GSS1F400.598    
            WRITE(6,*)                                                     GSS1F400.599    
     &     'ERROR,RDBASIS: LEVELS LIST IN DOMAIN PROFILE '                 GSS1F400.600    
     &     ,I,' HAS NO ENTRIES'                                            GSS1F400.601    
            CMESSAGE='ERROR,RDBASIS: LEVELS LIST HAS NO ENTRIES'           GSS1F400.602    
            ErrorStatus=1                                                  GSS1F400.603    
            GO TO 9999                                                     GSS1F400.604    
          END IF                                                           GSS1F400.605    
        END IF                                                             GSS1F400.606    
!Profile name                                                              GSS1F400.607    
        DOMPRO(I)=NAME                                                     RDBASIS1.263    
!Store level type code in IOPL_D                                           RDBASIS1.264    
        IOPL_D(I)=IOPL                                                     RDBASIS1.265    
        MODEL_LEV=DISCT_LEV(IOPL,ErrorStatus,CMESSAGE)                     GSS3F401.1009   
        IF (MODEL_LEV) THEN                                                GSS3F401.1010   
!Integer levels                                                            RDBASIS1.267    
          ILEV_D(I)=ILEVS                                                  RDBASIS1.268    
          IF (ILEVS.EQ.1) THEN                                             RDBASIS1.269    
!  Range of model levels                                                   RDBASIS1.270    
            LEVB_D(I)=LEVB                                                 RDBASIS1.271    
            LEVT_D(I)=LEVT                                                 RDBASIS1.272    
          END IF                                                           RDBASIS1.273    
          IF (ILEVS.EQ.2) THEN                                             RDBASIS1.274    
!  List of selected model levels                                           RDBASIS1.275    
            LEVB_D(I)=-1                                                   RDBASIS1.276    
            DO J=1,NLEVP                                                   RDBASIS1.277    
              LEVLST_D(J,I) = LEVLST(J)                                    RDBASIS1.278    
              IF (LEVLST(J).GT.0) THEN                                     RDBASIS1.279    
!  Store no. of levels in LEVT_D(I)                                        RDBASIS1.280    
                LEVT_D(I)=LEVT_D(I)+1                                      RDBASIS1.281    
              END IF                                                       RDBASIS1.282    
            END DO                                                         RDBASIS1.283    
          END IF                                                           RDBASIS1.284    
        ELSE IF (IOPL.NE.5) THEN                                           RDBASIS1.285    
!Real levels                                                               RDBASIS1.286    
          LEVB_D(I)=-1                                                     RDBASIS1.287    
          DO J=1,NLEVP                                                     RDBASIS1.288    
            RLEVLST_D(J,I) = RLEVLST(J)                                    RDBASIS1.289    
              IF (RLEVLST(J).GT.0.0) THEN                                  RDBASIS1.290    
!  Store no. of levels in LEVT_D(I)                                        RDBASIS1.291    
                LEVT_D(I)=LEVT_D(I)+1                                      RDBASIS1.292    
              END IF                                                       RDBASIS1.293    
          END DO                                                           RDBASIS1.294    
        END IF                                                             RDBASIS1.295    
!Store pseudo level type code in PLT_D                                     RDBASIS1.296    
        PLT_D (I)=PLT                                                      RDBASIS1.297    
        IF (PLT.GT.0) THEN                                                 RDBASIS1.298    
!Domain profile 'I' has pseudo levels list                                 RDBASIS1.299    
!    Count total no. of pseudo levels lists                                RDBASIS1.300    
        NPSLISTS = NPSLISTS + 1                                            RDBASIS1.301    
!    Store list in column 'NPSLISTS' of PSLIST_D                           RDBASIS1.302    
          DO J=1,NPSLEVP                                                   RDBASIS1.303    
            PSLIST_D(J,NPSLISTS) = PSLIST (J)                              RDBASIS1.304    
!    PPLEN_D(I) stores length of ps.lev.list for domain 'I'                RDBASIS1.305    
            IF (PSLIST(J).GT.0) THEN                                       RDBASIS1.306    
              PLLEN_D (I)        = PLLEN_D(I) + 1                          RDBASIS1.307    
            END IF                                                         RDBASIS1.308    
          END DO                                                           RDBASIS1.309    
!    PLPOS(I) stores the column no. in PSLIST_D for dom. prof. 'I'         RDBASIS1.310    
          PLPOS_D(I) = NPSLISTS                                            RDBASIS1.311    
        END IF                                                             RDBASIS1.312    
!Store horizontal domain type in IOPA_D                                    RDBASIS1.313    
        IOPA_D(I)=IOPA                                                     RDBASIS1.314    
        IF (IOPA.EQ.9.OR.IOPA.EQ.10) THEN                                  RDBASIS1.315    
!    Specified area                                                        RDBASIS1.316    
          INTH_D(I)=INTH                                                   RDBASIS1.317    
          ISTH_D(I)=ISTH                                                   RDBASIS1.318    
          IEST_D(I)=IEST                                                   RDBASIS1.319    
          IWST_D(I)=IWST                                                   RDBASIS1.320    
        END IF                                                             RDBASIS1.321    
        IMSK_D(I)=IMSK ! Gridpoint option                                  RDBASIS1.322    
        IMN_D (I)=IMN  ! Meaning option                                    RDBASIS1.323    
        IWT_D (I)=IWT  ! Weighting option                                  RDBASIS1.324    
        TS_D  (I)=TS   ! Time series domain                                RDBASIS1.325    
        IF (TS_D(I) .EQ. 'Y') THEN                                         GSS1F400.608    
!This domain profile has a block of time series domains                    GSS1F400.609    
!  Store time series data for current profile in _TS arrays                GSS1F400.610    
          NSERIES    = NSERIES+1        ! Time series block number:        GSS1F400.611    
          NPOS_TS(I) = NSERIES          !      used as a pointer           GSS1F400.612    
          NRECS_TS(NSERIES) = TSNUM     ! No. of records in ts block       GSS1F400.613    
          NSERREC_S  = NSERREC_S+TSNUM  ! Cumulative total ts records      GSS1F400.614    
          IF (NSERREC_S.LE.NTimSerP) THEN                                  GSS1F400.615    
            DO J = 1,TSNUM                                                 GSS1F400.616    
              IF (J.LE.tsdp) THEN                                          GSS1F400.617    
                NtsRecs = NtsRecs+1                                        GSS1F400.618    
                MODEL_LEV=DISCT_LEV(IOPL,ErrorStatus,CMESSAGE)             GSS3F401.1011   
                IF (MODEL_LEV) THEN                                        GSS3F401.1012   
                  BLIM_TS (NtsRecs)= TBLIM (J)                             GSS1F400.620    
                  TLIM_TS (NtsRecs)= TTLIM (J)                             GSS1F400.621    
                ELSE IF (IOPL.NE.5) THEN                                   GSS1F400.622    
                  BLIMR_TS(NtsRecs)= TBLIMR(J)                             GSS1F400.623    
                  TLIMR_TS(NtsRecs)= TTLIMR(J)                             GSS1F400.624    
                END IF                                                     GSS1F400.625    
                NLIM_TS(NtsRecs) = TNLIM(J)                                GSS1F400.626    
                SLIM_TS(NtsRecs) = TSLIM(J)                                GSS1F400.627    
                ELIM_TS(NtsRecs) = TELIM(J)                                GSS1F400.628    
                WLIM_TS(NtsRecs) = TWLIM(J)                                GSS1F400.629    
              ELSE                                                         GSS1F400.630    
                WRITE(6,*)                                                 GSS1F400.631    
     &         'MESSAGE FROM ROUTINE RDBASIS: ',                           GSS3F401.1013   
     &         'no. of time series in domain profile ',I,                  GSS3F401.1014   
     &         ' exceeds allowed limit of ',tsdp,' some will be',          GSS1F400.633    
     &         ' ignored'                                                  GSS1F400.634    
              END IF                                                       GSS1F400.635    
            END DO                                                         GSS1F400.636    
          ELSE                                                             GSS1F400.637    
            WRITE(6,*)                                                     GSS1F400.638    
     &     'TIMSER: total no. of time series requested exceeds ',          GSS1F400.639    
     &     'allowed limit of ',NTimSerP,'; some will be ignored.'          GSS1F400.640    
          END IF                                                           GSS1F400.641    
        ELSE                                                               GSS1F400.642    
          NPOS_TS  (I)=-1                                                  GSS1F400.643    
        END IF                                                             GSS1F400.644    
      END DO                                                               RDBASIS1.326    
      END IF                                                               RDBASIS1.327    
      NSERBLK_S = NSERIES                                                  GSS1F400.645    
                                                                           RDBASIS1.328    
!Useage profile namelists                                                  RDBASIS1.329    
      IF (NUM_USE.GT.0) THEN                                               RDBASIS1.330    
        NAME='        '                                                    RDBASIS1.331    
        LOCN=0                                                             RDBASIS1.332    
        IUNT=0                                                             RDBASIS1.333    
      DO I = NUPROF-NUM_USE+1,NUPROF                                       RDBASIS1.334    
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.275    
        if(mype.eq.0) READ(IU,USE)                                         GBCVF405.276    
c                                                                          GBCVF405.277    
        msg=7016                                                           GBCVF405.278    
        info=0                                                             GBCVF405.279    
        call gc_ibcast(msg, 2, 0, nproc, info, locn)                       GBCVF405.280    
        msg=7017                                                           GBCVF405.281    
        info=0                                                             GBCVF405.282    
        call gc_cbcast(msg, 8, 0, nproc, info, name)                       GBCVF405.283    
*IF DEF,DIAG190                                                            GBCVF405.284    
        if(my_pe().le.1) write(190+my_pe(), USE)                           GBCVF405.285    
*ENDIF                                                                     GBCVF405.286    
c                                                                          GBCVF405.287    
*ELSE                                                                      GBCVF405.288    
        READ(IU,USE)                                                       RDBASIS1.335    
*ENDIF                                                                     GBCVF405.289    
        USEPRO(I)=NAME                                                     RDBASIS1.336    
        LOCN_U(I)=LOCN                                                     RDBASIS1.337    
        IUNT_U(I)=IUNT                                                     RDBASIS1.338    
      END DO                                                               RDBASIS1.339    
      END IF                                                               RDBASIS1.340    
      GO TO 99                                                             RDBASIS1.341    
                                                                           RDBASIS1.342    
 999  CONTINUE                                                             RDBASIS1.343    
                                                                           GSS1F400.646    
!Initialise model config. arrays before reading STSHCOMP                   GSS3F401.1015   
      DO I = 0,NSECTP                                                      GSS1F400.648    
        ATMOS_SR(I)='  '                                                   GSS1F400.649    
        OCEAN_SR(I)='  '                                                   GSS1F400.650    
         SLAB_SR(I)='  '                                                   GSS1F400.651    
         WAVE_SR(I)='  '                                                   GSS3F401.1016   
        INDEP_SR(I)='  '                                                   GSS1F400.652    
      END DO                                                               GSS1F400.653    
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.290    
      if(mype.eq.0) then                                                   GBCVF405.291    
*ENDIF                                                                     GBCVF405.292    
      READ(5,STSHCOMP)                                                     GSS3F401.1017   
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.293    
      endif                                                                GBCVF405.294    
c                                                                          GBCVF405.295    
      msg=7018                                                             GBCVF405.296    
      info=0                                                               GBCVF405.297    
      j=loc(oasfldid(4))                                                   GBCVF405.298    
      k=loc(run_target_end)                                                GBCVF405.299    
      j=(j-k+8)/8                                                          GBCVF405.300    
      if(mype.eq.0) write(6,*) 'Length of STSHCOMM is ',j,                 GBCVF405.301    
     2 ' Words'                                                            GBCVF405.302    
      call gc_ibcast(msg, j, 0, nproc, info, run_target_end)               GBCVF405.303    
      msg=7019                                                             GBCVF405.304    
      info=0                                                               GBCVF405.305    
      j=loc(wave_sr(nsectp))                                               GBCVF405.306    
      k=loc(bspmsl)                                                        GBCVF405.307    
      j=j-k+1                                                              GBCVF405.308    
      if(mype.eq.0) write(6,*) 'Length of STSHCHAR is ',j,                 GBCVF405.309    
     2 ' Bytes'                                                            GBCVF405.310    
      call gc_cbcast(msg, j, 0, nproc, info, bspmsl)                       GBCVF405.311    
*IF DEF,DIAG190                                                            GBCVF405.312    
        if(my_pe().le.1) write(190+my_pe(), STSHCOMP)                      GBCVF405.313    
*ENDIF                                                                     GBCVF405.314    
c                                                                          GBCVF405.315    
*ENDIF                                                                     GBCVF405.316    
                                                                           RDBASIS1.345    
*IF DEF,MPP,AND,DEF,OCEAN                                                  ORH6F402.12     
        NROWSO = JFIN - JST + 1 + (2*O_NS_HALO)                            ORH6F402.13     
*ENDIF                                                                     ORH6F402.14     
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.317    
      if(mype.eq.0) then                                                   GBCVF405.318    
*ENDIF                                                                     GBCVF405.319    
      CLOSE(UNIT=IU,STATUS='KEEP',IOSTAT=IOSTAT)                           RDBASIS1.346    
*IF DEF,MPP,AND,DEF,T3E                                                    GBCVF405.320    
      endif                                                                GBCVF405.321    
*ENDIF                                                                     GBCVF405.322    
                                                                           RDBASIS1.347    
 9999 RETURN                                                               RDBASIS1.348    
      END                                                                  RDBASIS1.349    
                                                                           RDBASIS1.350    
!- End of subroutine code ------------------------------------------       RDBASIS1.351    
*ENDIF                                                                     RDBASIS1.352