*IF DEF,CONTROL                                                            WSTLST1.2      
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GSS1F400.990    
C                                                                          GSS1F400.991    
C Use, duplication or disclosure of this code is subject to the            GSS1F400.992    
C restrictions as set forth in the contract.                               GSS1F400.993    
C                                                                          GSS1F400.994    
C                Meteorological Office                                     GSS1F400.995    
C                London Road                                               GSS1F400.996    
C                BRACKNELL                                                 GSS1F400.997    
C                Berkshire UK                                              GSS1F400.998    
C                RG12 2SZ                                                  GSS1F400.999    
C                                                                          GSS1F400.1000   
C If no contract has been raised with this copy of the code, the use,      GSS1F400.1001   
C duplication or disclosure of it is strictly prohibited.  Permission      GSS1F400.1002   
C to do so must first be obtained in writing from the Head of Numerical    GSS1F400.1003   
C Modelling at the the above address.                                      GSS1F400.1004   
C                                                                          GSS1F400.1005   
!Subroutine interface:                                                     GSS1F400.1006   

      SUBROUTINE WSTLST(NRECS,NTIMES,NLEVELS)                               1GSS1F400.1007   
      IMPLICIT NONE                                                        WSTLST1.4      
! Description:                                                             GSS1F400.1008   
!                                                                          GSS1F400.1009   
! Method:                                                                  GSS1F400.1010   
!                                                                          GSS1F400.1011   
! Current code owner:  S.J.Swarbrick                                       GSS1F400.1012   
!                                                                          GSS1F400.1013   
! History:                                                                 GSS1F400.1014   
! Version   Date       Comment                                             GSS1F400.1015   
! =======   ====       =======                                             GSS1F400.1016   
!   3.5     Mar. 95    Original code.     S.J.Swarbrick                    GSS3F401.2003   
!   4.0     Sept.95                       S.J.Swarbrick                    GSS3F401.2004   
!   4.1     Apr. 96    Mods relating to code                               GSS3F401.2005   
!                       generalisation.   S.J.Swarbrick                    GSS3F401.2006   
!   4.2     29/11/96   MPP code : Added global version of A_LEN_DATA       GPB1F402.651    
!                      P.Burton                                            GPB1F402.652    
!   4.2      11/10/96  Enable atmos-ocean coupling for MPP.                GRR1F402.73     
!                      (2): Swap D1 memory. Add copies of D1 for atmos     GRR1F402.74     
!                      and ocean.                         R.Rawlins        GRR1F402.75     
!                      Initialise O_LEN_DUALDATA.         S.Ineson         GRR1F402.76     
!   4.5      05/08/98  Remove redundant code. Ft_Output for                GDR2F405.155    
!                      boundary files now initialised in                   GDR2F405.156    
!                      INTF_CTL. D. Robinson.                              GDR2F405.157    
!                                                                          GSS1F400.1019   
!  Code description:                                                       GSS1F400.1020   
!    FORTRAN 77 + common Fortran 90 extensions.                            GSS1F400.1021   
!    Written to UM programming standards version 7.                        GSS1F400.1022   
!                                                                          GSS1F400.1023   
!  System component covered:                                               GSS1F400.1024   
!  System task:               Sub-Models Project                           GSS1F400.1025   
!                                                                          GSS1F400.1026   
! Global variables:                                                        GSS1F400.1027   
                                                                           WSTLST1.5      
*CALL LENFIL                                                               WSTLST1.6      
*CALL CSUBMODL                                                             WSTLST1.7      
*CALL VERSION                                                              WSTLST1.8      
*CALL STPARAM                                                              WSTLST1.9      
*CALL CSTASH                                                               GRB0F401.9      
*CALL STEXTEND                                                             WSTLST1.11     
*CALL TYPSIZE                                                              GSS3F401.2007   
*CALL MODEL                                                                GSS3F401.2008   
                                                                           WSTLST1.15     
      INTEGER  NUMBER_TIMES                                                WSTLST1.16     
      INTEGER  I,J,K                                                       GSS3F401.2009   
      INTEGER  ft_unit                                                     WSTLST1.20     
      INTEGER  IZERO                                                       WSTLST1.21     
      INTEGER  LEND1A                                                      WSTLST1.22     
      INTEGER  LEND1O                                                      WSTLST1.23     
      INTEGER  LEND1S                                                      GSS3F401.2010   
      INTEGER  LEND1W                                                      GSS3F401.2011   
      INTEGER  NLEVELS                                                     WSTLST1.24     
      INTEGER  NRECS                                                       WSTLST1.25     
      INTEGER  NTIMES                                                      WSTLST1.27     
      INTEGER  BlkId           !Time series block identifier               GSS1F400.1028   
      INTEGER  BlkSt           !Start position of ts block data            GSS1F400.1029   
      INTEGER  IDP             !Domain profile loop counter                GSS1F400.1030   
      INTEGER  IPOS                                                        GSS1F400.1031   
      INTEGER  Nrecs_prev      !No of recs in previous time ser block      GSS1F400.1032   
                                                                           WSTLST1.28     
!     EXTERNAL FILNAM                                                      WSTLST1.29     
                                                                           WSTLST1.30     
      NAMELIST/STSIZES/                                                    WSTLST1.31     
     &        A_LEN2_LOOKUP,A_LEN_DATA,A_LEN_D1,                           GRR1F402.77     
     &        S_LEN2_LOOKUP,S_LEN_DATA,                                    GSS1F400.1033   
     &        O_LEN2_LOOKUP,O_LEN_DATA,O_LEN_DUALDATA,O_LEN_D1,            GRR1F402.78     
     &        W_LEN2_LOOKUP,W_LEN_DATA,W_LEN_D1,                           GRR1F402.79     
     &        LEN_TOT,                                                     WSTLST1.34     
     &        NSECTS,N_REQ_ITEMS,NITEMS,TOTITEMS,                          WSTLST1.35     
     &        NSTTABL,NUM_STASH_LEVELS,NUM_LEVEL_LISTS,                    WSTLST1.36     
     &        NUM_STASH_PSEUDO,NUM_PSEUDO_LISTS,                           WSTLST1.37     
     &        NSTTIMS,NSTASH_SERIES_BLOCK,                                 WSTLST1.38     
     &        NSTASH_SERIES_RECORDS,N_PPXRECS                              WSTLST1.39     
C                                                                          WSTLST1.40     
C                                                                          WSTLST1.41     
      LEND1A=0                                                             GSS3F401.2013   
      LEND1O=0                                                             GSS3F401.2014   
      LEND1S=0                                                             GSS3F401.2015   
      LEND1W=0                                                             GSS3F401.2016   
                                                                           GSS3F401.2017   
      write(6,120) NRECS                                                   WSTLST1.42     
  120 FORMAT(I5,' STASH LIST RECORDS')                                     WSTLST1.43     
      DO 100 J=1,NRECS                                                     WSTLST1.44     
      WRITE(6,*) ' '                                                       GSS3F401.2018   
      write(6,110)(LIST_S(I,J),I=1,NELEMP)                                 WSTLST1.45     
  110 FORMAT(10I8)                                                         WSTLST1.46     
  100 CONTINUE                                                             WSTLST1.47     
C                                                                          WSTLST1.48     
      write(6,310) NTIMES                                                  WSTLST1.49     
  310 FORMAT(I4,' STASH TIMES')                                            WSTLST1.50     
      DO I=1,NTIMES                                                        WSTLST1.51     
        NUMBER_TIMES=0                                                     WSTLST1.52     
        DO J=1,NTIMEP                                                      WSTLST1.53     
          IF (ITIM_S(J,I).GT.0) THEN                                       WSTLST1.54     
            NUMBER_TIMES=NUMBER_TIMES+1                                    WSTLST1.55     
          END IF                                                           WSTLST1.56     
        END DO                                                             WSTLST1.57     
      write(6,320) (ITIM_S(J,I),J=1,NUMBER_TIMES)                          WSTLST1.58     
      END DO                                                               WSTLST1.59     
  320 FORMAT(100I5)                                                        WSTLST1.60     
C                                                                          WSTLST1.61     
      write(6,410) NLEVELS                                                 WSTLST1.62     
  410 FORMAT(I4,' STASH LEVELS LIST(S)')                                   WSTLST1.63     
      DO 400 I=1,NLEVELS                                                   WSTLST1.64     
      write(6,420) LEVLST_S(1,I),LLISTTY(I)                                WSTLST1.65     
  420 FORMAT(I5,A1)                                                        WSTLST1.66     
      IF(LLISTTY(I).EQ.'I') THEN                                           WSTLST1.67     
      write(6,430) (LEVLST_S(J,I),J=2,LEVLST_S(1,I)+1)                     WSTLST1.68     
  430 FORMAT(16I4)                                                         WSTLST1.69     
      ELSE                                                                 WSTLST1.70     
      write(6,440) (RLEVLST_S(J,I),J=2,LEVLST_S(1,I)+1)                    WSTLST1.71     
  440 FORMAT(6F12.3)                                                       WSTLST1.72     
      END IF                                                               WSTLST1.73     
  400 CONTINUE                                                             WSTLST1.74     
C                                                                          WSTLST1.75     
C                                                                          WSTLST1.76     
      write(6,710) NPSLISTS                                                WSTLST1.77     
  710 FORMAT(I4,' STASH PSEUDO DIMENSION LIST(S)')                         WSTLST1.78     
      DO 700 I=1,NPSLISTS                                                  WSTLST1.79     
      write(6,720) LENPLST(I)                                              WSTLST1.80     
  720 FORMAT(I5)                                                           WSTLST1.81     
      write(6,730) (PSLIST_D(J,I),J=1,LENPLST(I))                          WSTLST1.82     
  730 FORMAT(16I4)                                                         WSTLST1.83     
  700 CONTINUE                                                             WSTLST1.84     
C                                                                          WSTLST1.85     
      write(6,510) NSERBLK_S                                               GSS1F400.1034   
  510 FORMAT(I4,' STASH TIME SERIES BLOCKS')                               WSTLST1.87     
C                                                                          WSTLST1.88     
      BlkSt =1                                                             GSS1F400.1035   
      DO IDP=1,NDPROF                                                      GSS1F400.1036   
        IF(NPOS_TS(IDP).GT.0) THEN                                         GSS1F400.1037   
          BlkId = NPOS_TS (IDP)                                            GSS1F400.1038   
          IF (BlkId.GT.1) THEN                                             GSS1F400.1039   
            BlkSt=BlkSt+Nrecs_prev                                         GSS1F400.1040   
          END IF                                                           GSS1F400.1041   
          WRITE(6,530) NPOS_TS(IDP),NRECS_TS(NPOS_TS(IDP))                 GSS1F400.1042   
  530     FORMAT('SERIES NUMBER',I4,' WITH ',I4,' RECORDS')                GSS1F400.1043   
          WRITE(6,*) '   NORTH   SOUTH    EAST    WEST  BOTTOM     TOP'    GSS1F400.1044   
          DO IPOS=BlkSt,BlkSt+NRECS_TS(NPOS_TS(IDP))-1                     GSS1F400.1045   
            WRITE(6,560) NLIM_TS(IPOS),SLIM_TS(IPOS),ELIM_TS(IPOS),        GSS1F400.1046   
     &                   WLIM_TS(IPOS),BLIM_TS(IPOS),TLIM_TS(IPOS)         GSS1F400.1047   
          END DO                                                           GSS1F400.1048   
  560     FORMAT(6I8)                                                      GSS1F400.1049   
          WRITE(6,*)                                                       GSS1F400.1050   
        Nrecs_prev=NRECS_TS(NPOS_TS(IDP)) ! For next TS block              GSS1F400.1051   
        END IF                                                             GSS1F400.1052   
      END DO                                                               GSS1F400.1053   
                                                                           WSTLST1.111    
      write(6,*)                                                           WSTLST1.112    
     &' MODL SECT ITEM   IN_S(1)   IN_S(2) INDX_S(1) INDX_S(2)',           WSTLST1.113    
     &'   PPIND_S'                                                         WSTLST1.114    
      write(6,*)                                                           GSS1F400.1054   
     &'                  St addr   St  len StListPos StListNum '           GSS1F400.1055   
      N_PPXRECS=0                                                          WSTLST1.115    
      ITEM_MAX_REQ=1                                                       WSTLST1.116    
                                                                           WSTLST1.117    
      DO K=1,N_INTERNAL_MODEL_MAX                                          WSTLST1.118    
      DO J=0,44                                                            WSTLST1.119    
      DO I=1,512                                                           WSTLST1.120    
        IF(IN_S(1,K,J,I).NE.0) THEN                                        WSTLST1.121    
          N_PPXRECS=N_PPXRECS+1                                            WSTLST1.122    
          ITEM_MAX_REQ=MAX(J,ITEM_MAX_REQ)                                 WSTLST1.123    
          IZERO=0                                                          WSTLST1.124    
          IF(J.EQ.0) THEN                                                  WSTLST1.125    
            write(6,610)                                                   WSTLST1.126    
     &        K,J,I,  IN_S(1,K,J,I),  IN_S(2,K,J,I),                       WSTLST1.127    
     &              INDX_S(1,K,J,I),INDX_S(2,K,J,I),PPIND_S(K,I)           WSTLST1.128    
  610       FORMAT(3I5,5I10)                                               WSTLST1.129    
          ELSE                                                             WSTLST1.130    
            write(6,610)                                                   WSTLST1.131    
     &        K,J,I,  IN_S(1,K,J,I),  IN_S(2,K,J,I),                       WSTLST1.132    
     &              INDX_S(1,K,J,I),INDX_S(2,K,J,I),IZERO                  WSTLST1.133    
          END IF                                                           WSTLST1.134    
        END IF                                                             WSTLST1.135    
      END DO                                                               WSTLST1.136    
      END DO                                                               WSTLST1.137    
      END DO                                                               WSTLST1.138    
                                                                           WSTLST1.139    
      I=-1                                                                 WSTLST1.140    
      write(6,610) I,I,I,I,I,I                                             WSTLST1.141    
                                                                           WSTLST1.142    
! Variables in COMMON STSIZES - for UMINDEX routine.                       WSTLST1.143    
!          N_PPXRECS was obtained in the loop above.                       WSTLST1.144    
                                                                           WSTLST1.145    
      A_LEN2_LOOKUP=NHEAD(A_IM)                                            GSS3F401.2019   
      A_LEN_DATA   =MAX(1,LPrimIM(A_IM)+LDumpIM(A_IM))                     GSS3F401.2020   
*IF DEF,MPP                                                                GPB1F402.653    
      global_A_LEN_DATA   =                                                GPB1F402.654    
     &  MAX(1,global_LPrimIM(A_IM)+global_LDumpIM(A_IM))                   GPB1F402.655    
*ENDIF                                                                     GPB1F402.656    
      LEND1A       =LPrimIM(A_IM)+LDumpIM(A_IM)+LSecdIM(A_IM)              GSS3F401.2021   
     &                                         +LEXTRA (A_SM)              GSS3F401.2022   
      S_LEN2_LOOKUP=NHEAD(S_IM)                                            GSS3F401.2023   
      S_LEN_DATA   =MAX(1,LPrimIM(S_IM)+LDumpIM(S_IM))                     GSS3F401.2024   
      LEND1S       =LPrimIM(S_IM)+LDumpIM(S_IM)+LSecdIM(S_IM)              GSS3F401.2025   
      O_LEN2_LOOKUP=NHEAD(O_IM)                                            GSS3F401.2026   
      O_LEN_DATA   =MAX(1,LPrimIM(O_IM)+LDumpIM(O_IM))                     GSS3F401.2027   
      LEND1O       =LPrimIM(O_IM)+LDumpIM(O_IM)+LSecdIM(O_IM)              GSS3F401.2028   
     &                           +LPRIM_O2                                 GSS3F401.2029   
*IF DEF,MPP                                                                GPB0F403.3111   
      global_O_LEN_DATA   =                                                GPB0F403.3112   
     &  MAX(1,global_LPrimIM(O_IM)+global_LDumpIM(O_IM))                   GPB0F403.3113   
*ENDIF                                                                     GPB0F403.3114   
      W_LEN2_LOOKUP=NHEAD(W_IM)                                            GSS3F401.2030   
      W_LEN_DATA   =MAX(1,LPrimIM(W_IM)+LDumpIM(W_IM))                     GSS3F401.2031   
      LEND1W       =LPrimIM(W_IM)+LDumpIM(W_IM)+LSecdIM(W_IM)              GSS3F401.2032   
      LEN_TOT      =MAX(LEND1A+LEND1S,LEND1O,LEND1W)                       GSS3F401.2033   
                                                                           GRR1F402.80     
      O_LEN_DUALDATA=LPRIM_O2                                              GRR1F402.81     
                                                                           GRR1F402.82     
      A_LEN_D1=LEND1A                                                      GRR1F402.83     
      O_LEN_D1=LEND1O                                                      GRR1F402.84     
      W_LEN_D1=LEND1W                                                      GRR1F402.85     
                                                                           GSS3F401.2034   
*IF DEF,SLAB                                                               GSS3F401.2035   
      a_len2_lookup = a_len2_lookup + s_len2_lookup                        GSS3F401.2036   
      a_len_data    = a_len_data    + s_len_data                           GSS3F401.2037   
!      len_tot       = len_tot       + s_len_data                          GSS3F401.2038   
      write (6,*) ' wtslst ; slab: a_len2_lookup updated to ',             GSS3F401.2039   
     &              a_len2_lookup                                          GSS3F401.2040   
      write (6,*) ' wstlst ; slab: a_len_data updated to',                 GSS3F401.2041   
     &              a_len_data                                             GSS3F401.2042   
      write (6,*) ' wstlst ; slab: len_tot updated to',                    GSS3F401.2043   
     &              len_tot                                                GSS3F401.2044   
      write (6,*) ' slab: stsizes with updated values'                     GSS3F401.2045   
      write (6,stsizes)                                                    GSS3F401.2046   
*ENDIF                                                                     GSS3F401.2047   
      NSECTS       =NSECTP                                                 WSTLST1.153    
      N_REQ_ITEMS  =ITEM_MAX_REQ                                           WSTLST1.154    
      NITEMS       =NITEMP                                                 WSTLST1.155    
      TOTITEMS     =MAX(1,NRECS)                                           WSTLST1.156    
      NSTTABL      =MAX(1,NTIMES)                                          WSTLST1.157    
                                                                           WSTLST1.158    
      NUM_STASH_LEVELS=MAX(1,NMAXLEV_S)                                    WSTLST1.159    
      NUM_LEVEL_LISTS =MAX(1,NLEVL_S)                                      WSTLST1.160    
      NUM_STASH_PSEUDO=MAX(1,NMAXPSL_S)                                    WSTLST1.161    
      NUM_PSEUDO_LISTS=MAX(1,NPSLISTS_S)                                   WSTLST1.162    
      NSTTIMS         =NTIMEP                                              WSTLST1.163    
                                                                           WSTLST1.164    
      NSTASH_SERIES_BLOCK =MAX(1,NSERBLK_S)                                WSTLST1.165    
      NSTASH_SERIES_RECORDS=MAX(1,NSERREC_S)                               WSTLST1.166    
                                                                           WSTLST1.167    
!Assign values to PPlen2LkUp, FTOutUnit                                    WSTLST1.168    
      DO I = OUTFILE_S,OUTFILE_E                                           WSTLST1.169    
        PPlen2LkUp(I) = MAX(4096,NHEAD_FILE(I))                            WSTLST1.170    
        IF ((NHEAD_FILE(I).GT.0).AND.(I.NE.27)) THEN                       WSTLST1.171    
          FTOutUnit(I)='Y'                                                 WSTLST1.172    
        ELSE                                                               WSTLST1.173    
          FTOutUnit(I)='N'                                                 WSTLST1.174    
        END IF                                                             WSTLST1.175    
      END DO                                                               WSTLST1.176    
      PPlen2LkUp(27) = 4096                                                WSTLST1.177    
!Output unit numbers for pp files and macros                               WSTLST1.178    
      DO I = 1,NRECS                                                       WSTLST1.179    
        IF (LIST_S(st_output_code,I).LT.0) THEN                            WSTLST1.180    
!Note that for pp files                                                    GSS3F401.2048   
! -LIST_S(st_output_code,I)=LIST_S(st_output_addr,I)=FT unit no.           GSS3F401.2049   
          ft_unit             =-LIST_S(st_output_code,I)                   WSTLST1.181    
          IF (ft_unit .ne. 27) THEN                                        GSS1F400.1058   
          PPlen2LkUp(ft_unit) = 4096                                       WSTLST1.182    
          FTOutUnit (ft_unit) = 'Y'                                        WSTLST1.183    
          END IF                                                           GSS1F400.1059   
        END IF                                                             WSTLST1.184    
      END DO                                                               WSTLST1.185    
      write(6,STSIZES)                                                     WSTLST1.193    
                                                                           WSTLST1.194    
      RETURN                                                               WSTLST1.195    
      END                                                                  WSTLST1.196    
!- End of subroutine code --------------------------------------------     WSTLST1.197    
*ENDIF                                                                     WSTLST1.198