*IF DEF,CONTROL                                                            OUTPTL1.2      
C ******************************COPYRIGHT******************************    GTS2F400.12565  
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.12566  
C                                                                          GTS2F400.12567  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.12568  
C restrictions as set forth in the contract.                               GTS2F400.12569  
C                                                                          GTS2F400.12570  
C                Meteorological Office                                     GTS2F400.12571  
C                London Road                                               GTS2F400.12572  
C                BRACKNELL                                                 GTS2F400.12573  
C                Berkshire UK                                              GTS2F400.12574  
C                RG12 2SZ                                                  GTS2F400.12575  
C                                                                          GTS2F400.12576  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.12577  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.12578  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.12579  
C Modelling at the above address.                                          GTS2F400.12580  
C                                                                          GTS2F400.12581  
!+Calc stash list output lens; reset boundary spec for full area output.   OUTPTL1.3      
                                                                           OUTPTL1.4      
! Subroutine Interface:                                                    OUTPTL1.5      
                                                                           OUTPTL1.6      

      SUBROUTINE OUTPTL(                                                    1,9OUTPTL1.7      
*CALL ARGPPX                                                               OUTPTL1.8      
     &                  NRECS,ErrorStatus,CMESSAGE)                        OUTPTL1.9      
      IMPLICIT NONE                                                        OUTPTL1.10     
                                                                           OUTPTL1.11     
! Description:                                                             OUTPTL1.12     
!                                                                          OUTPTL1.13     
! Method:                                                                  OUTPTL1.14     
!                                                                          OUTPTL1.15     
! Current code owner:  S.J.Swarbrick                                       OUTPTL1.16     
!                                                                          OUTPTL1.17     
! History:                                                                 OUTPTL1.18     
! Version   Date       Comment                                             OUTPTL1.19     
! =======   ====       =======                                             OUTPTL1.20     
!   3.5     Apr. 95    Original code.  S.J.Swarbrick                       OUTPTL1.21     
!   4.1     Apr. 96    Inclusion of wave model.  S.J.Swarbrick             GSS3F401.763    
!   4.2     03/09/96   MPP code : Made addressing local - a processor      GPB1F402.458    
!                      only holds data in its geographical area.           GPB1F402.459    
!                                                            P. Burton     GPB1F402.460    
!   4.3     13/03/97   MPP fixes                             P.Burton      GPB0F403.3076   
!LL 4.4     22/11/96   Altered for new case of daily mean timeseries       GRS1F404.130    
!                      R A Stratton.                                       GRS1F404.131    
!   4.4     12/06/97   Corrected code for global wrap around P.Burton      GPB0F404.63     
!   4.5     03/09/98   Don't set the decomposition for the                 SCH0F405.20     
!                      slab model. Prior to this there would be an         SCH0F405.21     
!                      error message if the slab model was selected        SCH0F405.22     
!                      for mpp runs. Slab model can now be run with        SCH0F405.23     
!                      mpp selected.        C. D. Hewitt                   SCH0F405.24     
!   4.5     23/01/98   Set up st_dump_level_output_length.  P.Burton       GPB2F405.150    
!                                                                          OUTPTL1.22     
!  Code description:                                                       OUTPTL1.23     
!    FORTRAN 77 + common Fortran 90 extensions.                            OUTPTL1.24     
!    Written to UM programming standards version 7.                        OUTPTL1.25     
!                                                                          OUTPTL1.26     
!  System component covered:                                               OUTPTL1.27     
!  System task:               Sub-Models Project                           OUTPTL1.28     
!                                                                          OUTPTL1.29     
! Global variables:                                                        OUTPTL1.30     
*CALL CSUBMODL                                                             OUTPTL1.32     
*CALL CPPXREF                                                              GSS3F401.764    
*CALL PPXLOOK                                                              GSS3F401.765    
*CALL CSTASH                                                               GRB0F401.7      
*CALL STEXTEND                                                             OUTPTL1.35     
*CALL STPARAM                                                              OUTPTL1.36     
*IF DEF,MPP                                                                OUTPTL1.39     
*CALL PARVARS                                                              OUTPTL1.40     
*CALL DECOMPTP                                                             GPB1F402.461    
*ENDIF                                                                     OUTPTL1.41     
                                                                           OUTPTL1.42     
! Subroutine arguments                                                     OUTPTL1.43     
!   Array arguments with intent(in):                                       OUTPTL1.45     
      INTEGER NRECS                                                        OUTPTL1.46     
                                                                           OUTPTL1.47     
!   Array arguments with intent(out):                                      OUTPTL1.48     
      CHARACTER*80 CMESSAGE                                                OUTPTL1.49     
                                                                           OUTPTL1.50     
! ErrorStatus:                                                             OUTPTL1.51     
      INTEGER ErrorStatus                                                  OUTPTL1.52     
                                                                           OUTPTL1.53     
! Local variables                                                          OUTPTL1.54     
      INTEGER output_length                                                OUTPTL1.56     
      INTEGER IE                                                           OUTPTL1.57     
      INTEGER IN                                                           OUTPTL1.58     
      INTEGER IP_DIM                                                       OUTPTL1.59     
      INTEGER IREC                                                         OUTPTL1.60     
      INTEGER IS                                                           OUTPTL1.61     
      INTEGER MODL                                                         OUTPTL1.62     
      INTEGER ISEC                                                         OUTPTL1.63     
      INTEGER ITEM                                                         OUTPTL1.64     
      INTEGER IT_DIM                                                       OUTPTL1.65     
      INTEGER IW                                                           OUTPTL1.66     
      INTEGER IX_DIM                                                       OUTPTL1.67     
      INTEGER IY_DIM                                                       OUTPTL1.68     
      INTEGER IZ_DIM                                                       OUTPTL1.69     
*IF DEF,MPP                                                                GPB1F402.462    
      INTEGER                                                              GPB1F402.463    
! local versions of the global subdomain boundaries                        GPB1F402.464    
     &  local_north,local_east,local_south,local_west                      GPB1F402.465    
     &, local_IN,local_IE,local_IS,local_IW                                GPB1F402.466    
! global versions of the X and Y horizontal dimensions, and                GPB1F402.467    
! total output size                                                        GPB1F402.468    
     &, global_IX_DIM,global_IY_DIM,global_output_length                   GPB1F402.469    
! variables indicating the decomposition type at various stages            GPB1F402.470    
     &, orig_decomp,decomp_type                                            GPB1F402.471    
*ENDIF                                                                     GPB1F402.472    
                                                                           OUTPTL1.70     
! Function and subroutine calls:                                           OUTPTL1.71     
      INTEGER  EXPPXI                                                      OUTPTL1.73     
      EXTERNAL EXPPXI,LLTORC                                               OUTPTL1.74     
                                                                           OUTPTL1.75     
!- End of Header --------------------------------------------------        OUTPTL1.76     
                                                                           OUTPTL1.77     
*IF DEF,MPP                                                                GPB1F402.473    
      orig_decomp=current_decomp_type                                      GPB1F402.474    
*ENDIF                                                                     GPB1F402.475    
                                                                           GPB1F402.476    
! Loop over STASH records                                                  OUTPTL1.78     
      DO IREC=1,NRECS                                                      OUTPTL1.80     
                                                                           OUTPTL1.81     
! Obtain model, section, item for this record                              OUTPTL1.82     
        MODL = LIST_S(st_model_code  ,IREC)                                OUTPTL1.84     
        ISEC = LIST_S(st_sect_no_code,IREC)                                OUTPTL1.85     
        ITEM = LIST_S(st_item_code   ,IREC)                                OUTPTL1.86     
                                                                           GPB1F402.477    
*IF DEF,MPP                                                                GPB1F402.478    
! Set the correct decomposition type for this model                        GPB1F402.479    
      IF (MODL .EQ. ATMOS_IM) THEN                                         GPB1F402.480    
        decomp_type=decomp_standard_atmos                                  GPB1F402.481    
      ELSEIF (MODL .EQ. OCEAN_IM) THEN                                     GPB1F402.482    
        decomp_type=decomp_nowrap_ocean                                    GPB0F403.3077   
      ELSEIF (MODL. EQ. SLAB_IM) THEN                                      SCH0F405.25     
        WRITE(6,*) 'OUTPTL1 : Slab model not actually running MPP',        SCH0F405.26     
     &             ' but will run on PE0 while atmosphere runs MPP'        SCH0F405.27     
      ELSE                                                                 GPB1F402.484    
!       Shouldn't get to this                                              GPB1F402.485    
        decomp_type=decomp_unset                                           GPB1F402.486    
        WRITE(6,*) 'OUTPTL : Error'                                        GPB1F402.487    
        WRITE(6,*) 'Unsupported Model ',MODL,' for MPP code'               GPB1F402.488    
        CMESSAGE='Unsupported Model for MPP code'                          GPB1F402.489    
        ErrorStatus=-1                                                     GPB1F402.490    
        GOTO 999                                                           GPB1F402.491    
      ENDIF                                                                GPB1F402.492    
                                                                           GPB1F402.493    
      IF (current_decomp_type .NE. decomp_type) THEN                       GPB1F402.494    
        CALL CHANGE_DECOMPOSITION(decomp_type,ErrorStatus)                 GPB1F402.495    
        IF (ErrorStatus .NE. 0) THEN                                       GPB1F402.496    
          WRITE(6,*) 'OUTPUTL : Error'                                     GPB1F402.497    
          WRITE(6,*) 'Call to CHANGE_DECOMPOSITION failed with ',          GPB1F402.498    
     &               'decomposition type ',decomp_type                     GPB1F402.499    
          CMESSAGE='Unsupported decomposition for MPP code'                GPB1F402.500    
          GOTO 999                                                         GPB1F402.501    
        ENDIF                                                              GPB1F402.502    
      ENDIF                                                                GPB1F402.503    
*ENDIF                                                                     GPB1F402.504    
                                                                           GPB1F402.505    
                                                                           OUTPTL1.87     
! Extract level code, grid type code from ppx lookup array                 OUTPTL1.88     
        ILEV    = EXPPXI(MODL,ISEC,ITEM,ppx_lv_code,                       OUTPTL1.90     
*CALL ARGPPX                                                               OUTPTL1.91     
     &                                ErrorStatus,CMESSAGE)                OUTPTL1.92     
        IGP     = EXPPXI(MODL,ISEC,ITEM,ppx_grid_type,                     OUTPTL1.93     
*CALL ARGPPX                                                               OUTPTL1.94     
     &                                ErrorStatus,CMESSAGE)                OUTPTL1.95     
        IPSEUDO = EXPPXI(MODL ,ISEC ,ITEM,ppx_pt_code      ,               GSS3F401.766    
*CALL ARGPPX                                                               ORH5F400.22     
     &                                ErrorStatus,CMESSAGE)                GSS3F401.767    
        IF (LIST_S(st_proc_no_code,IREC).EQ.0) THEN                        OUTPTL1.97     
! Dummy record - output length zero                                        GSS3F401.768    
          LIST_S(st_output_length,IREC)=0                                  OUTPTL1.99     
*IF -DEF,MPP                                                               GPB0F403.3078   
        ELSE IF(LIST_S(st_input_code,IREC).LT.0.and.                       GRS1F404.132    
     &         LIST_S(st_proc_no_code,IREC).ne.8) THEN                     GRS1F404.133    
                                                                           GRS1F404.134    
*ELSE                                                                      GPB0F403.3079   
        ELSE IF(LIST_S(st_input_code,IREC).LT.0.and.                       GRS1F404.135    
     &         LIST_S(st_proc_no_code,IREC).ne.8.and.                      GRS1F404.136    
     &           (LIST_S(st_output_code,IREC) .NE. -89)) THEN              GPB0F403.3081   
! Only copy parent's length for non MOS data. MOS data is                  GPB0F403.3082   
! stored as a global field, so is longer than the parent data              GPB0F403.3083   
! which is distributed across fields                                       GPB0F403.3084   
*ENDIF                                                                     GPB0F403.3085   
! Child record - get output length from parent                             GSS3F401.769    
          LIST_S(st_output_length,IREC)=                                   OUTPTL1.103    
     &    LIST_S(st_output_length,-LIST_S(st_input_code,IREC))             OUTPTL1.104    
                                                                           GRS1F404.137    
        ELSE                                                               OUTPTL1.106    
! Neither dummy nor child - calculate output length                        OUTPTL1.108    
!   T dimension (equals 1 except for the time series case)                 GSS3F401.770    
          IF((LIST_S(st_proc_no_code,IREC).EQ.1).OR.                       OUTPTL1.112    
     &       (LIST_S(st_proc_no_code,IREC).EQ.2).OR.                       OUTPTL1.113    
     &       (LIST_S(st_proc_no_code,IREC).EQ.3).OR.                       OUTPTL1.114    
     &       (LIST_S(st_proc_no_code,IREC).EQ.5).OR.                       OUTPTL1.115    
     &       (LIST_S(st_proc_no_code,IREC).EQ.6))     THEN                 OUTPTL1.116    
            IT_DIM=1                                                       OUTPTL1.118    
          ELSE IF (LIST_S(st_proc_no_code,IREC).EQ.4.or.                   GRS1F404.138    
     &            LIST_S(st_proc_no_code,IREC).EQ.8) THEN                  GRS1F404.139    
! Time series case                                                         GSS3F401.771    
            IT_DIM=                                                        OUTPTL1.122    
     &      LIST_S(st_period_code,IREC)/LIST_S(st_freq_code,IREC)          OUTPTL1.123    
                                                                           GRS1F404.140    
          ELSE                                                             GSS3F401.772    
            WRITE(6,*)'OUTPTL: ERROR UNEXPECTED PROCESSING CODE',          OUTPTL1.127    
     &      LIST_S(st_proc_no_code,IREC),'   FOR RECORD ',IREC             OUTPTL1.128    
          END IF                                                           OUTPTL1.131    
                                                                           OUTPTL1.132    
          IF( LIST_S(st_series_ptr,IREC).EQ.0) THEN                        OUTPTL1.133    
*IF DEF,MPP                                                                GPB1F402.506    
! Set up local versions of the boundaries of the subdomain                 GPB1F402.507    
                                                                           GPB1F402.508    
            CALL GLOBAL_TO_LOCAL_SUBDOMAIN( .TRUE., .TRUE.,                GPB1F402.509    
     &                               IGP,mype,                             GPB1F402.510    
     &                               LIST_S(st_north_code,IREC),           GPB1F402.511    
     &                               LIST_S(st_east_code,IREC),            GPB1F402.512    
     &                               LIST_S(st_south_code,IREC),           GPB1F402.513    
     &                               LIST_S(st_west_code,IREC),            GPB1F402.514    
     &                               local_north,local_east,               GPB1F402.515    
     &                               local_south,local_west)               GPB1F402.516    
*ENDIF                                                                     GPB1F402.517    
                                                                           GPB1F402.518    
! Not a time series profile                                                OUTPTL1.135    
!   X dimension                                                            OUTPTL1.137    
            IF(LIST_S(st_gridpoint_code,IREC).LT.0) THEN                   GSS3F401.773    
              WRITE(6,*)'OUTPTL: ERROR UNEXPECTED GRIDPOINT CODE',         OUTPTL1.141    
     &        LIST_S(st_gridpoint_code,IREC),'   FOR RECORD ',IREC         OUTPTL1.142    
            ELSE IF(LIST_S(st_gridpoint_code,IREC).LT.20) THEN             GSS3F401.774    
*IF -DEF,MPP                                                               GPB1F402.519    
              IX_DIM=LIST_S(st_east_code,IREC)-                            OUTPTL1.147    
     &               LIST_S(st_west_code,IREC)+1                           OUTPTL1.148    
*ELSE                                                                      GPB1F402.520    
              IX_DIM=local_east-local_west+1                               GPB1F402.521    
              global_IX_DIM=LIST_S(st_east_code,IREC)-                     GPB1F402.522    
     &                      LIST_S(st_west_code,IREC)+1                    GPB1F402.523    
*ENDIF                                                                     GPB1F402.524    
            ELSE IF(LIST_S(st_gridpoint_code,IREC).LT.30) THEN             OUTPTL1.150    
              IX_DIM=1                                                     OUTPTL1.152    
*IF DEF,MPP                                                                GPB1F402.525    
              global_IX_DIM=1                                              GPB1F402.526    
*ENDIF                                                                     GPB1F402.527    
            ELSE IF(LIST_S(st_gridpoint_code,IREC).LT.40) THEN             GSS3F401.775    
*IF -DEF,MPP                                                               GPB1F402.528    
              IX_DIM=LIST_S(st_east_code,IREC)-                            OUTPTL1.156    
     &               LIST_S(st_west_code,IREC)+1                           OUTPTL1.157    
*ELSE                                                                      GPB1F402.529    
              IX_DIM=local_east-local_west+1                               GPB1F402.530    
              global_IX_DIM=LIST_S(st_east_code,IREC)-                     GPB1F402.531    
     &                      LIST_S(st_west_code,IREC)+1                    GPB1F402.532    
*ENDIF                                                                     GPB1F402.533    
            ELSE IF(LIST_S(st_gridpoint_code,IREC).LE.43) THEN             OUTPTL1.159    
              IX_DIM=1                                                     OUTPTL1.161    
*IF DEF,MPP                                                                GPB1F402.534    
              global_IX_DIM=1                                              GPB1F402.535    
*ENDIF                                                                     GPB1F402.536    
            ELSE                                                           GSS3F401.776    
              WRITE(6,*)'OUTPTL: ERROR UNEXPECTED GRIDPOINT CODE',         OUTPTL1.165    
     &        LIST_S(st_gridpoint_code,IREC),'   FOR RECORD ',IREC         OUTPTL1.166    
            END IF  ! X dim                                                OUTPTL1.169    
                                                                           OUTPTL1.170    
            IF(IX_DIM.LT.1) THEN                                           GSS3F401.777    
! Area cut by global model                                                 GSS3F401.778    
              CALL LLTORC(IGP,90,-90,0,360,IN,IS,IW,IE)                    OUTPTL1.173    
*IF -DEF,MPP                                                               GPB1F402.537    
              IX_DIM=IX_DIM+IE                                             OUTPTL1.174    
*ELSE                                                                      GPB1F402.538    
              CALL GLOBAL_TO_LOCAL_SUBDOMAIN(                              GPB1F402.539    
     &          .TRUE. , .TRUE. , IGP , mype ,                             GPB1F402.540    
     &          IN,IE,IS,IW,                                               GPB1F402.541    
     &          local_IN,local_IE,local_IS,local_IW)                       GPB1F402.542    
              IX_DIM=IX_DIM+local_IE-2*Offx                                GPB0F403.3086   
! Subtract two halos, because we don't want wrap around to include         GPB0F403.3087   
! the halo at the end, and the beginning of field                          GPB0F403.3088   
*ENDIF                                                                     GPB1F402.545    
                                                                           GPB1F402.546    
            END IF                                                         OUTPTL1.176    
*IF DEF,MPP                                                                GPB0F404.64     
            IF (global_IX_DIM.LT.1) THEN                                   GPB0F404.65     
              CALL LLTORC(IGP,90,-90,0,360,IN,IS,IW,IE)                    GPB0F404.66     
              global_IX_DIM=global_IX_DIM+IE                               GPB0F404.67     
            ENDIF                                                          GPB0F404.68     
*ENDIF                                                                     GPB0F404.69     
                                                                           OUTPTL1.177    
!   Y dimension                                                            OUTPTL1.178    
            IF(LIST_S(st_gridpoint_code,IREC).LT.0) THEN                   GSS3F401.779    
              WRITE(6,*)'OUTPTL: ERROR UNEXPECTED GRIDPOINT CODE',         OUTPTL1.182    
     &        LIST_S(st_gridpoint_code,IREC),'   FOR RECORD ',IREC         OUTPTL1.183    
            ELSE IF(LIST_S(st_gridpoint_code,IREC).LT.30) THEN             GSS3F401.780    
              IF (IGP.GE.60.AND.IGP.LT.70) THEN                            GSS3F401.781    
! Wave model grid - first lat is southern most                             GSS3F401.782    
*IF -DEF,MPP                                                               GPB1F402.547    
                IY_DIM=LIST_S(st_north_code,IREC)-                         GSS3F401.783    
     &                 LIST_S(st_south_code,IREC)+1                        GSS3F401.784    
*ELSE                                                                      GPB1F402.548    
                IY_DIM=local_north-local_south+1                           GPB1F402.549    
                global_IY_DIM=LIST_S(st_north_code,IREC)-                  GPB1F402.550    
     &                        LIST_S(st_south_code,IREC)+1                 GPB1F402.551    
*ENDIF                                                                     GPB1F402.552    
              ELSE                                                         GSS3F401.785    
! Atmos grid - first lat is northern most                                  GSS3F401.786    
*IF -DEF,MPP                                                               GPB1F402.553    
                IY_DIM=LIST_S(st_south_code,IREC)-                         GSS3F401.787    
     &                 LIST_S(st_north_code,IREC)+1                        GSS3F401.788    
*ELSE                                                                      GPB1F402.554    
                IY_DIM=local_south-local_north+1                           GPB1F402.555    
                global_IY_DIM=LIST_S(st_south_code,IREC)-                  GPB1F402.556    
     &                        LIST_S(st_north_code,IREC)+1                 GPB1F402.557    
*ENDIF                                                                     GPB1F402.558    
              END IF                                                       GSS3F401.789    
            ELSE IF(LIST_S(st_gridpoint_code,IREC).LE.40) THEN             OUTPTL1.196    
              IY_DIM=1                                                     OUTPTL1.198    
*IF DEF,MPP                                                                GPB1F402.559    
              global_IY_DIM=1                                              GPB1F402.560    
*ENDIF                                                                     GPB1F402.561    
            ELSE IF(LIST_S(st_gridpoint_code,IREC).LE.43) THEN             OUTPTL1.200    
              IY_DIM=1                                                     OUTPTL1.202    
*IF DEF,MPP                                                                GPB1F402.562    
              global_IY_DIM=1                                              GPB1F402.563    
*ENDIF                                                                     GPB1F402.564    
            ELSE                                                           GSS3F401.790    
              WRITE(6,*)'OUTPTL: ERROR UNEXPECTED GRIDPOINT CODE',         OUTPTL1.206    
     &        LIST_S(st_gridpoint_code,IREC),'   FOR RECORD ',IREC         OUTPTL1.207    
            END IF  ! Y dim                                                OUTPTL1.210    
                                                                           OUTPTL1.211    
!   Z dimension                                                            OUTPTL1.212    
            IF(LIST_S(st_gridpoint_code,IREC).LT.0) THEN                   GSS3F401.791    
              WRITE(6,*)'OUTPTL: ERROR UNEXPECTED GRIDPOINT CODE',         OUTPTL1.216    
     &        LIST_S(st_gridpoint_code,IREC),'   FOR RECORD ',IREC         OUTPTL1.217    
            ELSE IF(LIST_S(st_gridpoint_code,IREC).LT.10) THEN             GSS3F401.792    
              IF(ILEV.EQ.5) THEN                                           OUTPTL1.222    
                IZ_DIM=1                                                   OUTPTL1.223    
              ELSE IF(LIST_S(st_output_bottom,IREC).LT.0) THEN             OUTPTL1.224    
                IZ_DIM=LEVLST_S(1,-LIST_S(st_output_bottom,IREC))          OUTPTL1.225    
              ELSE                                                         OUTPTL1.226    
                IZ_DIM=LIST_S(st_output_top,IREC)-                         OUTPTL1.227    
     &                 LIST_S(st_output_bottom,IREC)+1                     OUTPTL1.228    
              END IF                                                       OUTPTL1.229    
            ELSE IF(LIST_S(st_gridpoint_code,IREC).LT.20) THEN             OUTPTL1.231    
              IZ_DIM=1                                                     OUTPTL1.233    
            ELSE IF(LIST_S(st_gridpoint_code,IREC).LE.43) THEN             GSS3F401.793    
              IF(ILEV.EQ.5) THEN                                           OUTPTL1.237    
                IZ_DIM=1                                                   OUTPTL1.238    
              ELSE IF(LIST_S(st_output_bottom,IREC).LT.0) THEN             OUTPTL1.239    
                IZ_DIM=LEVLST_S(1,-LIST_S(st_output_bottom,IREC))          OUTPTL1.240    
              ELSE                                                         OUTPTL1.241    
                IZ_DIM=LIST_S(st_output_top,IREC)-                         OUTPTL1.242    
     &                 LIST_S(st_output_bottom,IREC)+1                     OUTPTL1.243    
              END IF                                                       OUTPTL1.244    
            ELSE                                                           GSS3F401.794    
              WRITE(6,*)'OUTPTL: ERROR UNEXPECTED GRIDPOINT CODE',         OUTPTL1.248    
     &        LIST_S(st_gridpoint_code,IREC),'   FOR RECORD ',IREC         OUTPTL1.249    
            END IF  ! Z dim                                                OUTPTL1.252    
                                                                           OUTPTL1.253    
!   P dimension - pseudo levels                                            OUTPTL1.254    
            IF(IPSEUDO.GT.0) THEN                                          OUTPTL1.256    
              IP_DIM=LENPLST(LIST_S(st_pseudo_out,IREC))                   OUTPTL1.257    
            ELSE                                                           OUTPTL1.258    
              IP_DIM=1                                                     OUTPTL1.259    
            END IF                                                         OUTPTL1.260    
                                                                           OUTPTL1.261    
! Output length - total number of points                                   OUTPTL1.262    
*IF -DEF,MPP                                                               GPB0F403.3089   
            output_length = IT_DIM*IX_DIM*IY_DIM*IZ_DIM*IP_DIM             OUTPTL1.265    
*ELSE                                                                      GPB0F403.3090   
            IF (LIST_S(st_output_code,IREC) .EQ. -89) THEN                 GPB0F403.3091   
! this is MOS data                                                         GPB0F403.3092   
!              output_length = IT_DIM*global_IX_DIM*global_IY_DIM*         GPB0F403.3093   
!     &                        IZ_DIM*IP_DIM                               GPB0F403.3094   
! The previous two lines replaced by the following - as this               GPB0F403.3095   
! size is just used to dimension work arrays in stwork which               GPB0F403.3096   
! deal with the field level by level. This makes the work array            GPB0F403.3097   
! considerably smaller.                                                    GPB0F403.3098   
                                                                           GPB0F403.3099   
              output_length = IT_DIM*global_IX_DIM*global_IY_DIM*          GPB0F403.3100   
     &                        IP_DIM                                       GPB0F403.3101   
                                                                           GPB0F403.3102   
            ELSE                                                           GPB0F403.3103   
              output_length = IT_DIM*IX_DIM*IY_DIM*IZ_DIM*IP_DIM           GPB0F403.3104   
            ENDIF                                                          GPB0F403.3105   
                                                                           GPB0F403.3106   
            global_output_length =                                         GPB1F402.566    
     &        IT_DIM*global_IX_DIM*global_IY_DIM*IZ_DIM*IP_DIM             GPB1F402.567    
*ENDIF                                                                     GPB1F402.568    
            LIST_S(st_output_length,IREC) = output_length                  OUTPTL1.275    
*IF DEF,MPP                                                                GPB1F402.569    
            LIST_S(st_dump_output_length,IREC) =                           GPB1F402.570    
     &        global_output_length                                         GPB1F402.571    
            LIST_S(st_dump_level_output_length,IREC) =                     GPB2F405.151    
     &        global_IX_DIM*global_IY_DIM  ! size of horizontal field      GPB2F405.152    
*ENDIF                                                                     GPB1F402.572    
          ELSE    ! Time series profile                                    GSS3F401.795    
            LIST_S(st_output_length,IREC)=                                 OUTPTL1.279    
     &       NRECS_TS(LIST_S(st_series_ptr,IREC))*IT_DIM+                  OUTPTL1.280    
     &      (NRECS_TS(LIST_S(st_series_ptr,IREC))+1)*6                     OUTPTL1.281    
                                                                           GRS1F404.141    
*IF DEF,MPP                                                                GPB0F403.3107   
            LIST_S(st_dump_output_length,IREC)=                            GPB0F403.3108   
     &        LIST_S(st_output_length,IREC)                                GPB0F403.3109   
*ENDIF                                                                     GPB0F403.3110   
          END IF                                                           OUTPTL1.283    
        END IF    ! Neither dummy nor child                                GSS3F401.796    
      END DO      ! Loop over STASH records                                OUTPTL1.287    
*IF DEF,MPP                                                                GPB1F402.573    
      IF ((orig_decomp .NE. current_decomp_type) .AND.                     GPB1F402.574    
     &    (orig_decomp .NE. decomp_unset)) THEN                            GPB1F402.575    
        CALL CHANGE_DECOMPOSITION(orig_decomp,ErrorStatus)                 GPB1F402.576    
      ENDIF                                                                GPB1F402.577    
*ENDIF                                                                     GPB1F402.578    
                                                                           OUTPTL1.288    
 999  RETURN                                                               OUTPTL1.289    
      END                                                                  OUTPTL1.290    
                                                                           OUTPTL1.291    
!- End of subroutine code -------------------------------------------      OUTPTL1.292    
*ENDIF                                                                     OUTPTL1.293