*IF DEF,C70_1A                                                             GLW1F404.18     
C ******************************COPYRIGHT******************************    GTS2F400.2071   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.2072   
C                                                                          GTS2F400.2073   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.2074   
C restrictions as set forth in the contract.                               GTS2F400.2075   
C                                                                          GTS2F400.2076   
C                Meteorological Office                                     GTS2F400.2077   
C                London Road                                               GTS2F400.2078   
C                BRACKNELL                                                 GTS2F400.2079   
C                Berkshire UK                                              GTS2F400.2080   
C                RG12 2SZ                                                  GTS2F400.2081   
C                                                                          GTS2F400.2082   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.2083   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.2084   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.2085   
C Modelling at the above address.                                          GTS2F400.2086   
C ******************************COPYRIGHT******************************    GTS2F400.2087   
C                                                                          GTS2F400.2088   
CLL  Subroutine DIAGDESC -----------------------------------------------   DIAGDES1.3      
CLL                                                                        DIAGDES1.4      
CLL  Purpose: Prints a formatted diagnostic description using the name     DIAGDES1.5      
CLL           of a diagnostic plus it's PPXREF and STASH record.  Gives    DIAGDES1.6      
CLL           a hardcopy record of the diagnostics included in a run.      DIAGDES1.7      
CLL                                                                        DIAGDES1.8      
CLL  Tested under compiler:   cft77                                        DIAGDES1.9      
CLL  Tested under OS version: UNICOS 6.1                                   DIAGDES1.10     
CLL                                                                        DIAGDES1.11     
CLL  Author:   T.Johns            Date:           14 January 1992          DIAGDES1.12     
CLL                                                                        DIAGDES1.13     
CLL  Model            Modification history from model version 3.0:         DIAGDES1.14     
CLL version  Date                                                          DIAGDES1.15     
CLL   3.1  05/02/93  Correct minor bug in printout for climate mean tag.   TJ140193.107    
CLL                  Print out pseudo-level information.                   TJ140193.108    
CLL  3.1   3/02/93 : added comdeck CHSUNITS to define NUNITS for i/o.      RS030293.140    
CLL  3.3   26/10/93  M. Carter. Part of an extensive mod that:             MC261093.21     
CLL                  1.Removes the limit on primary STASH item numbers.    MC261093.22     
CLL                  2.Removes the assumption that (section,item)          MC261093.23     
CLL                    defines the sub-model.                              MC261093.24     
CLL                  3.Thus allows for user-prognostics.                   MC261093.25     
CLL   3.4  13/01/94  Replace hardwired gridcodes by ppx_ parameters, and   GTJ1F304.1      
CLL                  cover all options.   T. Johns                         GTJ1F304.2      
!     4.4  02/12/96 Add daily mean timeseries R. A. Stratton.              GRS1F404.246    
CLL                                                                        DIAGDES1.16     
CLL  Programming standard: UM Doc Paper 3, version 2 (7/9/90)              DIAGDES1.17     
CLL                                                                        DIAGDES1.18     
CLL  Logical components covered: C401                                      DIAGDES1.19     
CLL                                                                        DIAGDES1.20     
CLL  Project task: C4                                                      DIAGDES1.21     
CLL                                                                        DIAGDES1.22     
CLL  External documentation:                                               DIAGDES1.23     
CLL    Unified Model Doc Paper C4 - Storage handling and diagnostic        DIAGDES1.24     
CLL                                 system (STASH)                         DIAGDES1.25     
CLLEND --------------------------------------------------------------      DIAGDES1.26     
C                                                                          DIAGDES1.27     
C*L  Interface and arguments: ------------------------------------------   DIAGDES1.28     
C                                                                          DIAGDES1.29     

      SUBROUTINE DIAGDESC(seqno,name,stlist,ppxref,                         1DIAGDES1.30     
     &           stash_levels,num_stash_levels,num_level_lists,            DIAGDES1.31     
     &           stash_pseudo_levels,num_stash_pseudo,num_pseudo_lists,    TJ140193.109    
     &           sttabl,nsttims,nsttabl,                                   DIAGDES1.32     
     &           stash_series,stash_series_rec_len,stash_series_len,       DIAGDES1.33     
     &           stash_series_index,stash_ser_index_size)                  DIAGDES1.34     
C                                                                          DIAGDES1.35     
      IMPLICIT NONE                                                        DIAGDES1.36     
C                                                                          DIAGDES1.37     
      CHARACTER*36                                                         DIAGDES1.38     
     *    name                                  ! IN  diagnostic name      DIAGDES1.39     
      INTEGER                                                              DIAGDES1.40     
     *    seqno,                                ! IN  sequence number      DIAGDES1.41     
     *    stlist(*),                            ! IN  STASHlist record     DIAGDES1.42     
     *    ppxref(*)                             ! IN  PPXREF record        DIAGDES1.43     
C                                                                          DIAGDES1.44     
C STASH levels list information                                            DIAGDES1.45     
      INTEGER                                                              DIAGDES1.46     
     &       num_stash_levels                 ! IN Max levels in a list    DIAGDES1.47     
     &,      num_level_lists                  ! IN Number of lists         DIAGDES1.48     
     &,      stash_levels(num_stash_levels+1,num_level_lists)              DIAGDES1.49     
C STASH pseudo-levels list information                                     TJ140193.110    
      INTEGER                                                              TJ140193.111    
     &       num_stash_pseudo                 ! IN Max ps-levs in a list   TJ140193.112    
     &,      num_pseudo_lists                 ! IN No of ps-lev lists      TJ140193.113    
     &,      stash_pseudo_levels(num_stash_pseudo+1,num_pseudo_lists)      TJ140193.114    
C STASH time list information                                              DIAGDES1.50     
      INTEGER                                                              DIAGDES1.51     
     &       nsttims                          ! IN Max times in a list     DIAGDES1.52     
     &,      nsttabl                          ! IN Number of lists         DIAGDES1.53     
     &,      sttabl(nsttims,nsttabl)                                       DIAGDES1.54     
C STASH timeseries information                                             DIAGDES1.55     
      INTEGER                                                              DIAGDES1.56     
     &       stash_series_len                 ! IN Total no of records     DIAGDES1.57     
     &,      stash_series_rec_len             ! IN Length of each record   DIAGDES1.58     
     &,      stash_series(stash_series_rec_len,stash_series_len)           DIAGDES1.59     
C                                             ! IN array of records        DIAGDES1.60     
     &,      stash_ser_index_size             ! IN No of index records     DIAGDES1.61     
     &,      stash_series_index(2,stash_ser_index_size)                    DIAGDES1.62     
C                                                                          DIAGDES1.63     
*CALL STPARAM                                                              DIAGDES1.64     
*CALL CPPXREF                                                              DIAGDES1.65     
*CALL CSUBMODL                                                             GDR3F305.17     
*CALL CHSUNITS                                                             GDR3F305.18     
*CALL CCONTROL                                                             GDR3F305.19     
C                                                                          DIAGDES1.67     
C Local variables                                                          DIAGDES1.68     
C                                                                          DIAGDES1.69     
      CHARACTER*132 line,line1,line2 ! Encoded line of information         DIAGDES1.70     
      CHARACTER*80  ch            ! Working character string variable      DIAGDES1.71     
      INTEGER i1,i2,k             ! Array indices                          DIAGDES1.72     
      INTEGER j                   ! Code value                             DIAGDES1.73     
      INTEGER time_list,lev_list  ! pointers to time and levels lists      DIAGDES1.74     
     &,       plev_list           ! pointer  to pseudo-level list          TJ140193.115    
     &,       tser_list           ! pointer  to time series record list    DIAGDES1.75     
      INTEGER ntimes              ! no of times in a time list             DIAGDES1.76     
      INTEGER packing_profile     ! packing profile for output PPfield     DIAGDES1.77     
C                                                                          DIAGDES1.78     
CL----------------------------------------------------------------------   DIAGDES1.79     
CL 0. Write header if sequence no indicates first item                     DIAGDES1.80     
CL                                                                         DIAGDES1.81     
      IF (seqno.EQ.1) THEN                                                 DIAGDES1.82     
        WRITE(6,1000)                                                      DIAGDES1.83     
 1000   FORMAT(                                                            DIAGDES1.84     
     *  '   ********************************************************'/     DIAGDES1.85     
     *  '   ********************************************************'/     DIAGDES1.86     
     *  '   **                                                    **'/     DIAGDES1.87     
     *  '   **    LIST OF USER-DEFINED DIAGNOSTICS IN THIS RUN    **'/     DIAGDES1.88     
     *  '   **                                                    **'/     DIAGDES1.89     
     *  '   ********************************************************'/     DIAGDES1.90     
     *  '   ********************************************************'/     DIAGDES1.91     
     *  '   **                                                    **'/     DIAGDES1.92     
     *  '   ** NOTES:                                             **'/     DIAGDES1.93     
     *  '   **   Time processing details are in timesteps, where  **'/     DIAGDES1.94     
     *  '   **     ... represents "for ever".                     **'/     DIAGDES1.95     
     *  '   **   Spatial processing domain is in gridpoints.      **'/     DIAGDES1.96     
     *  '   **                                                    **'/     DIAGDES1.97     
     *  '   ********************************************************'/     DIAGDES1.98     
     *  '   ********************************************************'//    DIAGDES1.99     
     *'=================================================================   DIAGDES1.100    
     *==========================================================')         DIAGDES1.101    
      ENDIF                                                                DIAGDES1.102    
CL----------------------------------------------------------------------   DIAGDES1.103    
CL 1. For each diagnostic processing request in the STASHlist,             DIAGDES1.104    
CL    print the diagnostic name followed by a summary of the processing    DIAGDES1.105    
CL    information on 3 lines.                                              DIAGDES1.106    
CL                                                                         DIAGDES1.107    
CL 1.0 If diagnostic is not required for output, exit routine              DIAGDES1.108    
CL                                                                         DIAGDES1.109    
      IF (stlist(st_proc_no_code).EQ.0) GOTO 999                           DIAGDES1.110    
CL                                                                         DIAGDES1.111    
CL 1.1 Line 1.                                                             DIAGDES1.112    
CL                                                                         DIAGDES1.113    
      line=' '                                                             DIAGDES1.114    
C #No                                                                      DIAGDES1.115    
      i1=2                                                                 DIAGDES1.116    
      i2=4                                                                 DIAGDES1.117    
      write(ch,'(i3)') seqno                                               DIAGDES1.118    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.119    
C Name                                                                     DIAGDES1.120    
      i1=i2+2                                                              DIAGDES1.121    
      i2=i1+36-1                                                           DIAGDES1.122    
      line(i1:i2)=name                                                     DIAGDES1.123    
C Submodel                                                                 DIAGDES1.124    
      i1=i2+2                                                              DIAGDES1.125    
      i2=i1+8-1                                                            DIAGDES1.126    
      j=stlist(st_sect_no_code)                                            DIAGDES1.127    
      IF      (ppxref(ppx_model_number).EQ.ocean_im) THEN                  GDR3F305.20     
        ch=' OCEAN  '                                                      DIAGDES1.129    
      ELSE IF (ppxref(ppx_model_number).EQ. slab_im) THEN                  GDR3F305.21     
        ch=' SLAB   '                                                      MC261093.29     
      ELSE IF (ppxref(ppx_model_number).EQ.atmos_im) THEN                  GDR3F305.22     
        ch=' ATMOS  '                                                      MC261093.31     
      ELSE IF (ppxref(ppx_model_number).EQ.wave_im) THEN                   GSS3F401.1      
        ch=' WAVE   '                                                      GSS3F401.2      
      ELSE                                                                 DIAGDES1.130    
        WRITE(6,*)' Error in DIAGDES. Unknown model'                       MC261093.32     
        ch=' UNKNOWN'                                                      MC261093.33     
      ENDIF                                                                DIAGDES1.132    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.133    
C Item                                                                     DIAGDES1.134    
      i1=i2+2                                                              DIAGDES1.135    
      i2=i1+4-1                                                            DIAGDES1.136    
      j=stlist(st_item_code)                                               DIAGDES1.137    
      write(ch,'(i4)') j                                                   DIAGDES1.138    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.139    
C Section                                                                  DIAGDES1.140    
      i1=i2+2                                                              DIAGDES1.141    
      i2=i1+7-1                                                            DIAGDES1.142    
      j=stlist(st_sect_no_code)                                            DIAGDES1.143    
      write(ch,'(i7)') j                                                   DIAGDES1.144    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.145    
C PPfcode                                                                  DIAGDES1.146    
      i1=i2+2                                                              DIAGDES1.147    
      i2=i1+7-1                                                            DIAGDES1.148    
      j=ppxref(ppx_field_code)                                             DIAGDES1.149    
      write(ch,'(i7)') j                                                   DIAGDES1.150    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.151    
C Datatype                                                                 DIAGDES1.152    
      i1=i2+2                                                              DIAGDES1.153    
      i2=i1+8-1                                                            DIAGDES1.154    
      j=ppxref(ppx_data_type)                                              DIAGDES1.155    
      IF (j.EQ.1.OR.j.EQ.4) THEN                                           DIAGDES1.156    
        ch='  REAL  '                                                      DIAGDES1.157    
      ELSEIF (j.EQ.2.OR.j.EQ.5) THEN                                       DIAGDES1.158    
        ch='INTEGER '                                                      DIAGDES1.159    
      ELSEIF (j.EQ.3) THEN                                                 DIAGDES1.160    
        ch='LOGICAL '                                                      DIAGDES1.161    
      ELSE                                                                 DIAGDES1.162    
        ch='UNKNOWN '                                                      DIAGDES1.163    
      ENDIF                                                                DIAGDES1.164    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.165    
C Gridtype                                                                 DIAGDES1.166    
      i1=i2+2                                                              DIAGDES1.167    
      i2=i1+8-1                                                            DIAGDES1.168    
      j=ppxref(ppx_grid_type)                                              DIAGDES1.169    
      IF (j.EQ.ppx_atm_nonstd.OR.j.EQ.ppx_ocn_nonstd) THEN                 GTJ1F304.3      
        ch=' NONSTD '                                                      DIAGDES1.171    
      ELSEIF ((j.GT.ppx_atm_nonstd.AND.j.LE.ppx_atm_tsea) .OR.             GTJ1F304.4      
     &         j.EQ.ppx_atm_compressed.OR.j.EQ.ppx_atm_ozone) THEN         GTJ1F304.5      
        ch=' P-GRID '                                                      DIAGDES1.173    
      ELSEIF (j.GE.ppx_atm_uall.AND.j.LE.ppx_atm_usea) THEN                GTJ1F304.6      
        ch=' UV-GRID'                                                      DIAGDES1.175    
      ELSEIF (j.EQ.ppx_atm_cuall.OR.j.EQ.ppx_ocn_cuall) THEN               GTJ1F304.7      
        ch=' CU-GRID'                                                      DIAGDES1.177    
      ELSEIF (j.EQ.ppx_atm_cvall.OR.j.EQ.ppx_ocn_cvall) THEN               GTJ1F304.8      
        ch=' CV-GRID'                                                      DIAGDES1.179    
      ELSEIF (j.EQ.ppx_atm_tzonal) THEN                                    GTJ1F304.9      
        ch=' PZ-GRID'                                                      GTJ1F304.10     
      ELSEIF (j.EQ.ppx_atm_uzonal) THEN                                    GTJ1F304.11     
        ch=' UZ-GRID'                                                      GTJ1F304.12     
      ELSEIF (j.EQ.ppx_atm_tmerid) THEN                                    GTJ1F304.13     
        ch=' PM-GRID'                                                      GTJ1F304.14     
      ELSEIF (j.EQ.ppx_atm_umerid) THEN                                    GTJ1F304.15     
        ch=' UM-GRID'                                                      GTJ1F304.16     
      ELSEIF (j.EQ.ppx_atm_rim.OR.j.EQ.ppx_ocn_rim) THEN                   GTJ1F304.17     
        ch='   RIM  '                                                      DIAGDES1.181    
      ELSEIF (j.EQ.ppx_ocn_tcomp.OR.j.EQ.ppx_ocn_tall.OR.                  GTJ1F304.18     
     &        j.EQ.ppx_ocn_tfield) THEN                                    GTJ1F304.19     
        ch=' T-GRID '                                                      DIAGDES1.183    
      ELSEIF (j.EQ.ppx_ocn_tzonal) THEN                                    GTJ1F304.20     
        ch=' TZ-GRID'                                                      GTJ1F304.21     
      ELSEIF (j.EQ.ppx_ocn_uzonal) THEN                                    GTJ1F304.22     
        ch=' UZ-GRID'                                                      GTJ1F304.23     
      ELSEIF (j.EQ.ppx_ocn_tmerid) THEN                                    GTJ1F304.24     
        ch=' TM-GRID'                                                      GTJ1F304.25     
      ELSEIF (j.EQ.ppx_ocn_umerid) THEN                                    GTJ1F304.26     
        ch=' UM-GRID'                                                      GTJ1F304.27     
      ELSEIF (j.EQ.ppx_ocn_ucomp.OR.j.EQ.ppx_ocn_uall.OR.                  GTJ1F304.28     
     &        j.EQ.ppx_ocn_ufield) THEN                                    GTJ1F304.29     
        ch=' UV-GRID'                                                      DIAGDES1.185    
      ELSEIF (j.EQ.ppx_atm_scalar.OR.j.EQ.ppx_ocn_scalar) THEN             GTJ1F304.30     
        ch=' SCALAR '                                                      GTJ1F304.31     
      ELSEIF (j.EQ.ppx_wam_all.OR.j.EQ.ppx_wam_sea) THEN                   GSS3F401.3      
        ch=' WAVE   '                                                      GSS3F401.4      
      ELSEIF (j.EQ.ppx_wam_rim) THEN                                       GSS3F401.5      
        ch=' RIM    '                                                      GSS3F401.6      
      ELSE                                                                 DIAGDES1.186    
        ch=' UNKNOWN'                                                      DIAGDES1.187    
      ENDIF                                                                DIAGDES1.188    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.189    
C Leveltype                                                                DIAGDES1.190    
      i1=i2+2                                                              DIAGDES1.191    
      i2=i1+9-1                                                            DIAGDES1.192    
      j=ppxref(ppx_lv_code)                                                DIAGDES1.193    
      IF (j.EQ.ppx_full_level) THEN                                        DIAGDES1.194    
        ch='FULLLEVEL'                                                     DIAGDES1.195    
      ELSEIF (j.EQ.ppx_half_level) THEN                                    DIAGDES1.196    
        ch='HALFLEVEL'                                                     DIAGDES1.197    
      ELSE                                                                 DIAGDES1.198    
        ch='STD-LEVEL'                                                     DIAGDES1.199    
      ENDIF                                                                DIAGDES1.200    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.201    
C Meto8LV                                                                  DIAGDES1.202    
      i1=i2+2                                                              DIAGDES1.203    
      i2=i1+7-1                                                            DIAGDES1.204    
      j=ppxref(ppx_meto8_levelcode)                                        DIAGDES1.205    
      write(ch,'(i7)') j                                                   DIAGDES1.206    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.207    
C Meto8FC                                                                  DIAGDES1.208    
      i1=i2+2                                                              DIAGDES1.209    
      i2=i1+7-1                                                            DIAGDES1.210    
      j=ppxref(ppx_meto8_fieldcode)                                        DIAGDES1.211    
      write(ch,'(i7)') j                                                   DIAGDES1.212    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.213    
C PackAcc                                                                  DIAGDES1.214    
      i1=i2+2                                                              DIAGDES1.215    
      i2=i1+7-1                                                            DIAGDES1.216    
      j=stlist(st_output_code)                                             DIAGDES1.217    
      IF (j.EQ.1) THEN                                                     DIAGDES1.218    
        IF (stlist(st_macrotag).GE.1000) THEN                              TJ140193.116    
          packing_profile=pp_pack_code(27)                                 DIAGDES1.220    
        ELSE                                                               DIAGDES1.221    
          packing_profile=0                                                DIAGDES1.222    
        ENDIF                                                              DIAGDES1.223    
      ELSEIF(j.eq.2) THEN                                                  DIAGDES1.224    
        packing_profile=0                                                  DIAGDES1.225    
      ELSEIF(j.lt.0) THEN                                                  DIAGDES1.226    
        packing_profile=pp_pack_code(-j)                                   DIAGDES1.227    
      ELSE                                                                 DIAGDES1.228    
        packing_profile=0                                                  DIAGDES1.229    
      ENDIF                                                                DIAGDES1.230    
      IF (packing_profile.EQ.0) THEN                                       DIAGDES1.231    
        ch='       '                                                       DIAGDES1.232    
      ELSE                                                                 DIAGDES1.233    
        j=ppxref(ppx_packing_acc+packing_profile-1)                        DIAGDES1.234    
        write(ch,'(i7)') j                                                 DIAGDES1.235    
      ENDIF                                                                DIAGDES1.236    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.237    
C                                                                          DIAGDES1.238    
      line1=line                                                           DIAGDES1.239    
CL                                                                         DIAGDES1.240    
CL 1.2 Line 2.                                                             DIAGDES1.241    
CL                                                                         DIAGDES1.242    
      line=' '                                                             DIAGDES1.243    
C Time-processing                                                          DIAGDES1.244    
      i1=2                                                                 DIAGDES1.245    
      i2=16                                                                DIAGDES1.246    
      j=stlist(st_proc_no_code)                                            DIAGDES1.247    
      tser_list=0                                                          DIAGDES1.248    
      IF (j.EQ.st_replace_code) THEN                                       DIAGDES1.249    
        ch='   EXTRACT     '                                               DIAGDES1.250    
      ELSEIF (j.EQ.st_accum_code) THEN                                     DIAGDES1.251    
        ch=' ACCUMULATION  '                                               DIAGDES1.252    
      ELSEIF (j.EQ.st_time_mean_code) THEN                                 DIAGDES1.253    
        ch='  TIME MEAN    '                                               DIAGDES1.254    
      ELSEIF (j.EQ.st_time_series_code) THEN                               DIAGDES1.255    
        write(ch,'(''  TIME SERIES  '')')                                  DIAGDES1.256    
        tser_list=stlist(st_series_ptr)                                    DIAGDES1.257    
      ELSEIF (j.EQ.st_max_code) THEN                                       DIAGDES1.258    
        ch='MAX OVER PERIOD'                                               DIAGDES1.259    
      ELSEIF (j.EQ.st_min_code) THEN                                       DIAGDES1.260    
        ch='MIN OVER PERIOD'                                               DIAGDES1.261    
      ELSEIF (j.EQ.st_append_traj_code) THEN                               DIAGDES1.262    
        ch='  TRAJECTORY   '                                               DIAGDES1.263    
      ELSEIF (j.EQ.st_variance_code) THEN                                  DIAGDES1.264    
        ch=' TIME VARIANCE '                                               DIAGDES1.265    
      ELSEIF (j.EQ.st_time_series_mean) THEN                               GRS1F404.247    
        ch='MEAN TIMESERIES'                                               GRS1F404.248    
      ELSE                                                                 DIAGDES1.266    
        ch='  UNKNOWN      '                                               DIAGDES1.267    
      ENDIF                                                                DIAGDES1.268    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.269    
C -From-                                                                   DIAGDES1.270    
      i1=i2+2                                                              DIAGDES1.271    
      i2=i1+6-1                                                            DIAGDES1.272    
      IF (stlist(st_freq_code).LT.0) THEN                                  DIAGDES1.273    
        ch='      '                                                        DIAGDES1.274    
      ELSE                                                                 DIAGDES1.275    
        j=stlist(st_start_time_code)                                       DIAGDES1.276    
        write(ch,'(i6)') j                                                 DIAGDES1.277    
      ENDIF                                                                DIAGDES1.278    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.279    
C --To--                                                                   DIAGDES1.280    
      i1=i2+2                                                              DIAGDES1.281    
      i2=i1+6-1                                                            DIAGDES1.282    
      IF (stlist(st_freq_code).LT.0) THEN                                  DIAGDES1.283    
        ch='      '                                                        DIAGDES1.284    
      ELSE                                                                 DIAGDES1.285    
        j=stlist(st_end_time_code)                                         DIAGDES1.286    
        IF (j.EQ.st_infinite_time) THEN                                    DIAGDES1.287    
          ch='  ... '                                                      DIAGDES1.288    
        ELSE                                                               DIAGDES1.289    
          write(ch,'(i6)') j                                               DIAGDES1.290    
        ENDIF                                                              DIAGDES1.291    
      ENDIF                                                                DIAGDES1.292    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.293    
C Frequency                                                                DIAGDES1.294    
      i1=i2+2                                                              DIAGDES1.295    
      i2=i1+9-1                                                            DIAGDES1.296    
      j=stlist(st_freq_code)                                               DIAGDES1.297    
      IF (j.LT.0) THEN                                                     DIAGDES1.298    
        j=-j                                                               DIAGDES1.299    
        write(ch,'(''TIME LIST'')')                                        DIAGDES1.300    
        time_list=j                                                        DIAGDES1.301    
      ELSE                                                                 DIAGDES1.302    
        write(ch,'(i9)') j                                                 DIAGDES1.303    
        time_list=0                                                        DIAGDES1.304    
      ENDIF                                                                DIAGDES1.305    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.306    
C Period                                                                   DIAGDES1.307    
      i1=i2+2                                                              DIAGDES1.308    
      i2=i1+6-1                                                            DIAGDES1.309    
      IF (stlist(st_freq_code).LT.0) THEN                                  DIAGDES1.310    
        ch='      '                                                        DIAGDES1.311    
      ELSE                                                                 DIAGDES1.312    
        j=stlist(st_period_code)                                           DIAGDES1.313    
        IF (stlist(st_proc_no_code).EQ.st_replace_code) THEN               DIAGDES1.314    
          ch='      '                                                      DIAGDES1.315    
        ELSEIF (j.EQ.st_infinite_time) THEN                                DIAGDES1.316    
          ch='  ... '                                                      DIAGDES1.317    
        ELSE                                                               DIAGDES1.318    
          write(ch,'(i6)') j                                               DIAGDES1.319    
        ENDIF                                                              DIAGDES1.320    
      ENDIF                                                                DIAGDES1.321    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.322    
C __Source__                                                               DIAGDES1.323    
      i1=i2+2                                                              DIAGDES1.324    
      i2=i1+10-1                                                           DIAGDES1.325    
      j=stlist(st_input_code)                                              DIAGDES1.326    
      IF (j.EQ.0) THEN                                                     DIAGDES1.327    
        ch='PROGNOSTIC'                                                    DIAGDES1.328    
      ELSEIF(j.EQ.1) THEN                                                  DIAGDES1.329    
        ch='  STWORK  '                                                    DIAGDES1.330    
      ELSEIF(j.LT.0) THEN                                                  DIAGDES1.331    
        j=-j                                                               DIAGDES1.332    
        write(ch,'(''DUMP #'',i4)') j                                      DIAGDES1.333    
      ELSE                                                                 DIAGDES1.334    
        ch=' UNKNOWN  '                                                    DIAGDES1.335    
      ENDIF                                                                DIAGDES1.336    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.337    
C ___Destination___                                                        DIAGDES1.338    
      i1=i2+2                                                              DIAGDES1.339    
      i2=i1+17-1                                                           DIAGDES1.340    
      j=stlist(st_output_code)                                             DIAGDES1.341    
      IF (j.EQ.1) THEN                                                     DIAGDES1.342    
        IF (stlist(st_macrotag).GE.1000) THEN                              TJ140193.117    
          ch='MEAN PP VIA DUMP'                                            DIAGDES1.344    
        ELSEIF (stlist(st_macrotag).GT.0) THEN                             DIAGDES1.345    
          write(ch,'(''DUMP WITH TAG '',i3)') stlist(st_macrotag)          DIAGDES1.346    
        ELSE                                                               DIAGDES1.347    
          ch='      DUMP       '                                           DIAGDES1.348    
        ENDIF                                                              DIAGDES1.349    
      ELSEIF(j.eq.2) THEN                                                  DIAGDES1.350    
        ch='   SECONDARY     '                                             DIAGDES1.351    
      ELSEIF(j.lt.0) THEN                                                  DIAGDES1.352    
        j=-j                                                               DIAGDES1.353    
        IF (j.EQ.27) THEN                                                  DIAGDES1.354    
          ch='MEAN PP (DIRECT) '                                           DIAGDES1.355    
        ELSE                                                               DIAGDES1.356    
          write(ch,'(''   PP UNIT '',i2)') j                               DIAGDES1.357    
        ENDIF                                                              DIAGDES1.358    
      ELSE                                                                 DIAGDES1.359    
        ch='  UNKNOWN  '                                                   DIAGDES1.360    
      ENDIF                                                                DIAGDES1.361    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.362    
C                                                                          DIAGDES1.363    
      line2=line                                                           DIAGDES1.364    
CL                                                                         DIAGDES1.365    
CL 1.3 Line 3.                                                             DIAGDES1.366    
CL                                                                         DIAGDES1.367    
      line=' '                                                             DIAGDES1.368    
C Spatial-Processing                                                       DIAGDES1.369    
      i1=2                                                                 DIAGDES1.370    
      i2=19                                                                DIAGDES1.371    
      j=stlist(st_gridpoint_code)                                          DIAGDES1.372    
      IF (j.GE.extract_base.AND.j.LT.extract_top) THEN                     DIAGDES1.373    
        ch='    FULL FIELD    '                                            DIAGDES1.374    
      ELSEIF (j.GE.vert_mean_base.AND.j.LT.vert_mean_top) THEN             DIAGDES1.375    
        ch='  VERTICAL MEAN   '                                            DIAGDES1.376    
      ELSEIF (j.GE.zonal_mean_base.AND.j.LT.zonal_mean_top) THEN           DIAGDES1.377    
        ch='   ZONAL MEAN     '                                            DIAGDES1.378    
      ELSEIF (j.GE.merid_mean_base.AND.j.LT.merid_mean_top) THEN           DIAGDES1.379    
        ch=' MERIDIONAL MEAN  '                                            DIAGDES1.380    
      ELSEIF (j.GE.field_mean_base.AND.j.LT.field_mean_top) THEN           DIAGDES1.381    
        ch=' FIELD MEAN - 2D  '                                            DIAGDES1.382    
      ELSEIF (j.GE.global_mean_base.AND.j.LT.global_mean_top) THEN         DIAGDES1.383    
        ch=' GLOBAL MEAN - 3D '                                            DIAGDES1.384    
      ELSE                                                                 DIAGDES1.385    
        ch='  ** UNKNOWN **   '                                            DIAGDES1.386    
      ENDIF                                                                DIAGDES1.387    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.388    
C Levels-domain                                                            DIAGDES1.389    
      i1=i2+2                                                              DIAGDES1.390    
      i2=i1+13-1                                                           DIAGDES1.391    
      j=stlist(st_output_bottom)                                           DIAGDES1.392    
      lev_list=0                                                           DIAGDES1.393    
      IF (j.EQ.st_special_code) THEN                                       DIAGDES1.394    
        ch='STANDARD LEV '                                                 DIAGDES1.395    
      ELSEIF (j.gt.0) THEN                                                 DIAGDES1.396    
        write(ch,'(''LEVELS '',i2,''-'',i2)') j,stlist(st_output_top)      DIAGDES1.397    
      ELSEIF (j.lt.0) THEN                                                 DIAGDES1.398    
        j=-j                                                               DIAGDES1.399    
        write(ch,'('' LEVELS LIST '')')                                    DIAGDES1.400    
        lev_list=j                                                         DIAGDES1.401    
      ENDIF                                                                DIAGDES1.402    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.403    
C Pseudo-levels                                                            TJ140193.118    
      i1=i2+2                                                              TJ140193.119    
      i2=i1+15-1                                                           TJ140193.120    
      j=stlist(st_pseudo_out)                                              TJ140193.121    
      plev_list=0                                                          TJ140193.122    
      IF (j.GT.0) THEN                                                     TJ140193.123    
        ch='PSEUDO-LEV LIST'                                               TJ140193.124    
        plev_list=j                                                        TJ140193.125    
      ELSE                                                                 TJ140193.126    
        ch='     NONE      '                                               TJ140193.127    
      ENDIF                                                                TJ140193.128    
      line(i1:i2)=ch(1:1+i2-i1)                                            TJ140193.129    
C Horizontal-domain.....                                                   DIAGDES1.404    
      i1=i2+2                                                              DIAGDES1.405    
      i2=i1+23-1                                                           DIAGDES1.406    
      write(ch,'(''ROW:'',i3,''-'',i3,'' COL:'',i3,''-'',i3)')             DIAGDES1.407    
     *  stlist(st_north_code),stlist(st_south_code),                       DIAGDES1.408    
     *  stlist(st_west_code),stlist(st_east_code)                          DIAGDES1.409    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.410    
C Weighting                                                                DIAGDES1.411    
      i1=i2+2                                                              DIAGDES1.412    
      i2=i1+9-1                                                            DIAGDES1.413    
      j=stlist(st_weight_code)                                             DIAGDES1.414    
      IF (j.EQ.stash_weight_null_code) THEN                                DIAGDES1.415    
        ch='  NONE   '                                                     DIAGDES1.416    
      ELSEIF (j.EQ.stash_weight_area_code) THEN                            DIAGDES1.417    
        ch='  AREA   '                                                     DIAGDES1.418    
      ELSEIF (j.EQ.stash_weight_volume_code) THEN                          DIAGDES1.419    
        ch=' VOLUME  '                                                     DIAGDES1.420    
      ELSEIF (j.EQ.stash_weight_mass_code) THEN                            DIAGDES1.421    
        ch='  MASS   '                                                     DIAGDES1.422    
      ENDIF                                                                DIAGDES1.423    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.424    
C Masking                                                                  DIAGDES1.425    
      i1=i2+2                                                              DIAGDES1.426    
      i2=i1+7-1                                                            DIAGDES1.427    
      j=mod(stlist(st_gridpoint_code),block_size)                          DIAGDES1.428    
      IF (j.EQ.stash_null_mask_code) THEN                                  DIAGDES1.429    
        ch=' NONE  '                                                       DIAGDES1.430    
      ELSEIF (j.EQ.stash_land_mask_code) THEN                              DIAGDES1.431    
        ch=' LAND  '                                                       DIAGDES1.432    
      ELSEIF (j.EQ.stash_sea_mask_code) THEN                               DIAGDES1.433    
        ch='  SEA  '                                                       DIAGDES1.434    
      ELSE                                                                 DIAGDES1.435    
        ch='UNKNOWN'                                                       DIAGDES1.436    
      ENDIF                                                                DIAGDES1.437    
      line(i1:i2)=ch(1:1+i2-i1)                                            DIAGDES1.438    
CL                                                                         DIAGDES1.439    
CL 1.4 Print the main part of the summary                                  DIAGDES1.440    
CL                                                                         DIAGDES1.441    
      WRITE(6,1010) line1,line2,line                                       DIAGDES1.442    
 1010 FORMAT(' #No ',                                                      DIAGDES1.443    
     *      'Diagnostic Description-------------- Submodel Item Section    DIAGDES1.444    
     *PPfcode Datatype Gridtype Leveltype MetO8lv MetO8fc Packacc'/        DIAGDES1.445    
     *  a124/                                                              DIAGDES1.446    
     *' Time-processing -From- --To-- Frequency Period --Source-- ---Des   DIAGDES1.447    
     *tination---                                               '/         DIAGDES1.448    
     *  a124/                                                              DIAGDES1.449    
     *' Spatial-processing Levels-domain -Pseudo-levels- ---Horizontal-d   TJ140193.130    
     *omain--- Weighting Masking                                '/         TJ140193.131    
     *  a124)                                                              DIAGDES1.452    
CL                                                                         DIAGDES1.453    
CL 1.5 Print associated time and levels lists if appropriate               DIAGDES1.454    
CL                                                                         DIAGDES1.455    
CL 1.5.1 Time list                                                         DIAGDES1.456    
CL                                                                         DIAGDES1.457    
      IF (time_list.NE.0) THEN                                             DIAGDES1.458    
        DO j=1,nsttims                                                     DIAGDES1.459    
          IF (sttabl(j,time_list).EQ.st_end_of_list) THEN                  DIAGDES1.460    
            ntimes=j-1                                                     DIAGDES1.461    
            GOTO 210                                                       DIAGDES1.462    
          ENDIF                                                            DIAGDES1.463    
        ENDDO                                                              DIAGDES1.464    
  210   CONTINUE                                                           DIAGDES1.465    
        WRITE(6,'('' ***** TIME LIST ***** '',i3,                          DIAGDES1.466    
     &            '' times are as follows:-'')') ntimes                    DIAGDES1.467    
        i1=1                                                               DIAGDES1.468    
        i2=8                                                               DIAGDES1.469    
        DO j=1,ntimes                                                      DIAGDES1.470    
          IF (i1.EQ.1) line=' '                                            DIAGDES1.471    
          WRITE(ch,'(1x,i7)') sttabl(j,time_list)                          DIAGDES1.472    
          line(i1:i2)=ch(1:8)                                              DIAGDES1.473    
          i1=i1+8                                                          DIAGDES1.474    
          i2=i2+8                                                          DIAGDES1.475    
          IF (i2.GT.80) THEN                                               DIAGDES1.476    
            i1=1                                                           DIAGDES1.477    
            i2=8                                                           DIAGDES1.478    
            WRITE(6,'(a80)') line                                          DIAGDES1.479    
          ENDIF                                                            DIAGDES1.480    
        ENDDO                                                              DIAGDES1.481    
        IF (i2.LE.80) WRITE(6,'(a80)') line                                DIAGDES1.482    
      ENDIF                                                                DIAGDES1.483    
CL                                                                         DIAGDES1.484    
CL 1.5.2 Levels list                                                       DIAGDES1.485    
CL                                                                         DIAGDES1.486    
      IF (lev_list.NE.0) THEN                                              DIAGDES1.487    
        write(6,'('' ***** LEVELS LIST ***** '',i3,                        DIAGDES1.488    
     &          '' levels are as follows:-'')') stash_levels(1,lev_list)   DIAGDES1.489    
        i1=1                                                               DIAGDES1.490    
        i2=8                                                               DIAGDES1.491    
        DO j=2,1+stash_levels(1,lev_list)                                  DIAGDES1.492    
          IF (i1.EQ.1) line=' '                                            DIAGDES1.493    
          write(ch,'(1x,i7)') stash_levels(j,lev_list)                     DIAGDES1.494    
          line(i1:i2)=ch(1:8)                                              DIAGDES1.495    
          i1=i1+8                                                          DIAGDES1.496    
          i2=i2+8                                                          DIAGDES1.497    
          IF (i2.GT.80) THEN                                               DIAGDES1.498    
            i1=1                                                           DIAGDES1.499    
            i2=8                                                           DIAGDES1.500    
            write(6,'(a80)') line                                          DIAGDES1.501    
          ENDIF                                                            DIAGDES1.502    
        ENDDO                                                              DIAGDES1.503    
        IF (i2.LE.80) write(6,'(a80)') line                                DIAGDES1.504    
      ENDIF                                                                DIAGDES1.505    
CL                                                                         DIAGDES1.506    
CL 1.5.3 Pseudo-levels list                                                TJ140193.132    
CL                                                                         TJ140193.133    
      IF (plev_list.NE.0) THEN                                             TJ140193.134    
        write(6,'('' ***** PSEUDO-LEVELS LIST ***** '',i3,                 TJ140193.135    
     &          '' pseudo-levels are as follows:-'')')                     TJ140193.136    
     &          stash_pseudo_levels(1,plev_list)                           TJ140193.137    
        i1=1                                                               TJ140193.138    
        i2=8                                                               TJ140193.139    
        DO j=2,1+stash_pseudo_levels(1,plev_list)                          TJ140193.140    
          IF (i1.EQ.1) line=' '                                            TJ140193.141    
          write(ch,'(1x,i7)') stash_pseudo_levels(j,plev_list)             TJ140193.142    
          line(i1:i2)=ch(1:8)                                              TJ140193.143    
          i1=i1+8                                                          TJ140193.144    
          i2=i2+8                                                          TJ140193.145    
          IF (i2.GT.80) THEN                                               TJ140193.146    
            i1=1                                                           TJ140193.147    
            i2=8                                                           TJ140193.148    
            write(6,'(a80)') line                                          TJ140193.149    
          ENDIF                                                            TJ140193.150    
        ENDDO                                                              TJ140193.151    
        IF (i2.LE.80) write(6,'(a80)') line                                TJ140193.152    
      ENDIF                                                                TJ140193.153    
CL                                                                         TJ140193.154    
CL 1.5.4 Time series subdomain record list                                 TJ140193.155    
CL                                                                         DIAGDES1.508    
      IF (tser_list.NE.0) THEN                                             DIAGDES1.509    
        i1=stash_series_index(1,tser_list)                                 DIAGDES1.510    
        i2=stash_series_index(2,tser_list)                                 DIAGDES1.511    
        WRITE(6,'('' ***** TIME SERIES ***** '',i3,                        DIAGDES1.512    
     & '' subdomain records are as follows:-''/                            DIAGDES1.513    
     & '' Record      North/South       West/ East     Bottom/  Top'')')   DIAGDES1.514    
     &    i2                                                               DIAGDES1.515    
        DO j=1,i2                                                          DIAGDES1.516    
          WRITE(6,'(3x,i4,1x,3(5x,i5,1x,i5,1x))')                          DIAGDES1.517    
     &        j,(stash_series(3+k,i1+j-1),k=1,6)                           DIAGDES1.518    
        ENDDO                                                              DIAGDES1.519    
      ENDIF                                                                DIAGDES1.520    
CL                                                                         DIAGDES1.521    
CL 1.5.5 Print final ruler line                                            TJ140193.156    
CL                                                                         DIAGDES1.523    
      WRITE(6,1020)                                                        DIAGDES1.524    
 1020 FORMAT(                                                              DIAGDES1.525    
     *'=================================================================   DIAGDES1.526    
     *==========================================================')         DIAGDES1.527    
C                                                                          DIAGDES1.528    
 999  CONTINUE                                                             DIAGDES1.529    
      RETURN                                                               DIAGDES1.530    
      END                                                                  DIAGDES1.531    
*ENDIF                                                                     DIAGDES1.532