*IF DEF,CONTROL                                                            MEANDIA2.2      
C ******************************COPYRIGHT******************************    GTS2F400.5869   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.5870   
C                                                                          GTS2F400.5871   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.5872   
C restrictions as set forth in the contract.                               GTS2F400.5873   
C                                                                          GTS2F400.5874   
C                Meteorological Office                                     GTS2F400.5875   
C                London Road                                               GTS2F400.5876   
C                BRACKNELL                                                 GTS2F400.5877   
C                Berkshire UK                                              GTS2F400.5878   
C                RG12 2SZ                                                  GTS2F400.5879   
C                                                                          GTS2F400.5880   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.5881   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.5882   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.5883   
C Modelling at the above address.                                          GTS2F400.5884   
C ******************************COPYRIGHT******************************    GTS2F400.5885   
C                                                                          GTS2F400.5886   
CLL  Routine: MEANDIAG -------------------------------------------------   MEANDIA2.3      
CLL                                                                        MEANDIA2.4      
CLL  Purpose: Outputs mean diagnostic PPfiles from within the means        MEANDIA2.5      
CLL           program.  Fields are generated by the normal operation of    MEANDIA2.6      
CLL           the climate meaning system (ie. all fields in D1 except      MEANDIA2.7      
CLL           integer and logical data are averaged).  Section 0 fields    MEANDIA2.8      
CLL           and fields which can be derived from them by the PCR's       MEANDIA2.9      
CLL           DYN_DIAG and PHY_DIAG (as used in sections 15/16 for         MEANDIA2.10     
CLL           instantaneous diagnostics) are available to STASH as         MEANDIA2.11     
CLL           section 21-24 diagnostics in this routine, but the UI        MEANDIA2.12     
CLL           ensures that only spatial processing is requested and the    MEANDIA2.13     
CLL           output is forced to go to the designated mean PPfile.  In    MEANDIA2.14     
CLL           the case of the ocean model, there is no equivalent of       MEANDIA2.15     
CLL           DYN_DIAG and PHY_DIAG so only "section 0" fields can be      MEANDIA2.16     
CLL           processed (but now as sections 41-44).                       MEANDIA2.17     
CLL           Fields which were already processed by STASH, stored in D1   MEANDIA2.18     
CLL           and then meaned further by the meaning system are only       MEANDIA2.19     
CLL           extracted to the mean PPfile if the STASH usage profile of   MEANDIA2.20     
CLL           the original diagnostic processing record so indicates.      MEANDIA2.21     
CLL           This is determined by a loop over all STASH records with a   MEANDIA2.22     
CLL           check on the STASH tag field, with a further loop over the   MEANDIA2.23     
CLL           number of output levels associated with the STASH record.    MEANDIA2.24     
CLL                                                                        MEANDIA2.25     
CLL  Tested under compiler:   cft77                                        MEANDIA2.26     
CLL  Tested under OS version: UNICOS 6.1.5A                                MEANDIA2.27     
CLL                                                                        MEANDIA2.28     
CLL  Author:   T.C.Johns                                                   MEANDIA2.29     
CLL                                                                        MEANDIA2.30     
CLL  Model            Modification history from model version 3.0:         MEANDIA2.31     
CLL version  Date                                                          MEANDIA2.32     
CLL  3.1   3/02/93  : added comdeck CHSUNITS to define NUNITS for i/o      RS030293.121    
CLL 3.4  16/6/94 : Change CHARACTER*(*) to CHARACTER*(80) N.Farnon         ANF0F304.28     
CLL   3.3  08/02/94  Modify calls to TIME2SEC/SEC2TIME to output/input     TJ080294.219    
CLL                  elapsed times in days & secs, for portability. TCJ    TJ080294.220    
CLL  3.3   26/10/93  M. Carter. Part of an extensive mod that:             MC261093.225    
CLL                  1.Removes the limit on primary STASH item numbers.    MC261093.226    
CLL                  2.Removes the assumption that (section,item)          MC261093.227    
CLL                    defines the sub-model.                              MC261093.228    
CLL                  3.Thus allows for user-prognostics.                   MC261093.229    
CLL  3.4   04/08/94  No packing indicator change from -26 to -99  PJS      APS1F304.1      
CLL  3.4   17/06/94  Argument LCAL360 added and passed to SEC2TIME,        GSS1F304.472    
CLL                                                       TIME2SEC         GSS1F304.473    
CLL                                                      S.J.Swarbrick     GSS1F304.474    
CLL  3.4 10/10/94 : Add option to encode output in GRIB (R A Stratton)     GRS3F304.210    
CLL   3.5  24/03/95    Changed OPEN to FILE_OPEN and                       GPB1F305.82     
CLL                    CLOSE to FILE_CLOSE    P.Burton                     GPB1F305.83     
CLL  3.5   May 95      Submodels project.                                  GSS1F305.546    
CLL                  Internal model identifiers now read from STASH list   GSS1F305.547    
CLL                    array; reference to INDEX_PPXREF removed.           GSS1F305.548    
CLL                  References to PP_XREF array replaced by EXPPXI        GSS1F305.549    
CLL                    function calls.                                     GSS1F305.550    
CLL                  *CALLs introduced in conjunction with the above -     GSS1F305.551    
CLL                    ARGPPX, PPXLOOK.                                    GSS1F305.552    
CLL                    S.J.Swarbrick                                       GSS1F305.553    
!    4.0 10/03/95 : Allow alternative packing method for grib (R A         GRS3F400.290    
!                   Stratton).                                             GRS3F400.291    
CLL  4.0  06/09/95  Correct setting up of im_index. D. Robinson            GDR5F400.1      
CLL  4.3  31-01-97  Parallelise writes to the pipe.   LCWiles              GLW2F403.25     
!LL  4.3   30/04/97  Added code to use UM_SECTOR_SIZE to make transfers    GBC0F403.89     
!LL                  well-formed.                                          GBC0F403.90     
!LL                  B. Carruthers  Cray Research.                         GBC0F403.91     
CLL  4.3  30/05/96  Correction to dumps being wrongly deleted L Wiles      GLW6F403.1      
!LL  4.4  06/05/97  Correct header timestamps for real-period means        GMG1F404.287    
!LL                 Author: M. Gallani                                     GMG1F404.288    
CLL  4.4  15/10/97  Enable slab mean diagnostics be processed for          SDR1F404.179    
CLL                 a MEAN PP file. D. Robinson.                           SDR1F404.180    
CLL                                                                        MEANDIA2.33     
!LL  4.4  04/09/97  Use GENERAL_GATHER_FIELD to get fields to be written   GSM2F404.6      
!LL                 out by PP_FILE and GRIB_FILE. S.D.Mullerworth          GSM2F404.7      
!LL  4.5  21/04/97  Pass ARGFLDPT to ST_MEAN. S.D.Mullerworth              GSM1F405.484    
!LL  4.5  13/01/98  Add MAX_SIZE argument, and use to dimension dynamic    GPB2F405.123    
!LL                 array for I/O buffer, and remove SHMEM common          GPB2F405.124    
!LL                 block.                                    P.Burton     GPB2F405.125    
!LL  4.5  28/05/98  Code for parallel processing in COEX Packing           GBCQF405.25     
!LL                   Author: Paul Burton & Bob Carruthers                 GBCQF405.26     
!LL  4.5  29/07/98  Rename CINTF to CINTFA. D. Robinson.                   GDR2F405.118    
!LL  4.5  10/10/98  Add ARGINFO to argument list. Pass ARGINFO/ARGPPX      GMB1F405.407    
!LL                 to PPCTL. D. Robinson.                                 GMB1F405.408    
CLL  Programming standard: UM Doc Paper 3, version 2 (7/9/90)              MEANDIA2.34     
CLL                                                                        MEANDIA2.35     
CLL  Logical components covered: C5                                        MEANDIA2.36     
CLL                                                                        MEANDIA2.37     
CLL  Project task: C5                                                      MEANDIA2.38     
CLL                                                                        MEANDIA2.39     
CLL  External documentation:                                               MEANDIA2.40     
CLL    UM Doc Paper C0 - The top-level control system                      MEANDIA2.41     
CLL    UM Doc Paper C5 - Calculation of means                              MEANDIA2.42     
CLL                                                                        MEANDIA2.43     
CLL  -------------------------------------------------------------------   MEANDIA2.44     
C*L  Interface and arguments: ------------------------------------------   MEANDIA2.45     
C                                                                          MEANDIA2.46     

      SUBROUTINE MEANDIAG (                                                 2,29@DYALLOC.2378   
*CALL ARGSIZE                                                              @DYALLOC.2379   
*CALL ARGD1                                                                @DYALLOC.2380   
*CALL ARGDUMA                                                              @DYALLOC.2381   
*CALL ARGDUMO                                                              @DYALLOC.2382   
*CALL ARGDUMW                                                              GKR1F401.231    
*CALL ARGSTS                                                               @DYALLOC.2383   
*CALL ARGPTRA                                                              @DYALLOC.2384   
*CALL ARGPTRO                                                              @DYALLOC.2385   
*CALL ARGCONA                                                              @DYALLOC.2386   
*CALL ARGINFA                                                              @DYALLOC.2387   
*CALL ARGINFO                                                              GMB1F405.409    
*CALL ARGPPX                                                               GSS1F305.554    
*IF DEF,ATMOS                                                              GSM1F405.485    
*CALL ARGFLDPT                                                             GSM1F405.486    
*ENDIF                                                                     GSM1F405.487    
     *           I_AO,MEANLEV,PP_LEN_MEAN,STEP_DUMPS,MEAN_PERIOD,          @DYALLOC.2388   
*IF DEF,MPP                                                                GPB2F405.126    
     &           MAX_SIZE,                                                 GPB2F405.127    
*ENDIF                                                                     GPB2F405.128    
     *           ICODE,CMESSAGE)                                           GDR3F305.272    
C                                                                          MEANDIA2.50     
      IMPLICIT NONE                                                        MEANDIA2.51     
C                                                                          MEANDIA2.52     
*CALL CMAXSIZE                                                             @DYALLOC.2390   
*CALL CSUBMODL                                                             GSS1F305.555    
*CALL CINTFA                                                               GDR2F405.119    
*CALL TYPSIZE                                                              @DYALLOC.2391   
*CALL TYPD1                                                                @DYALLOC.2392   
*CALL TYPDUMA                                                              @DYALLOC.2393   
*CALL TYPDUMO                                                              @DYALLOC.2394   
*CALL TYPDUMW                                                              GKR1F401.232    
*CALL TYPSTS                   ! Contains *CALL CPPXREF                    GSS1F305.556    
*CALL TYPPTRA                                                              @DYALLOC.2396   
*CALL TYPPTRO                                                              @DYALLOC.2397   
*CALL TYPCONA                                                              @DYALLOC.2398   
*CALL TYPINFA                                                              @DYALLOC.2399   
*IF DEF,ATMOS                                                              GSM1F405.488    
*CALL TYPFLDPT                                                             GSM1F405.489    
*ENDIF                                                                     GSM1F405.490    
*CALL TYPINFO                                                              GMB1F405.410    
*IF DEF,MPP                                                                GSM1F403.269    
*CALL PARVARS                                                              GSM1F403.270    
*CALL DECOMPTP                                                             GSM1F403.271    
*ENDIF                                                                     GSM1F403.274    
                                                                           @DYALLOC.2400   
      INTEGER                                                              MEANDIA2.53     
     *       I_AO,             ! IN  Atmosphere/Ocean indicator            MEANDIA2.54     
     *       MEANLEV,          ! IN  Mean level indicator                  MEANDIA2.55     
     *       PP_LEN_MEAN,      ! IN  Number of fields in output PPfile     MEANDIA2.60     
     *       STEP_DUMPS,       ! IN  Timestep in multiples of restart      MEANDIA2.61     
C                              ! dump frequency.                           MEANDIA2.62     
     *       MEAN_PERIOD,      ! IN meaning frequency.                     MEANDIA2.63     
*IF DEF,MPP                                                                GPB2F405.129    
     &       MAX_SIZE,         ! IN maximum dump field size                GPB2F405.130    
*ENDIF                                                                     GPB2F405.131    
     *       ICODE             ! OUT return code; successful=0, error> 0   MEANDIA2.64     
C                                                                          MEANDIA2.65     
      CHARACTER*(80)                                                       ANF0F304.29     
     *       CMESSAGE          ! OUT Error message if ICODE > 0            MEANDIA2.67     
C*                                                                         MEANDIA2.68     
C                                                                          MEANDIA2.69     
C Common blocks and parameters                                             MEANDIA2.70     
C                                                                          MEANDIA2.71     
*CALL CLOOKADD                                                             MEANDIA2.75     
*CALL STPARAM                                                              MEANDIA2.76     
*CALL CHSUNITS                                                             RS030293.122    
*CALL CHISTORY                                                             GDR3F305.273    
*CALL CCONTROL                                                             GDR3F305.274    
*CALL CTIME                                                                MEANDIA2.80     
*CALL C_MDI                                                                MEANDIA2.81     
                                                                           GSS1F305.557    
! PPXREF lookup arrays                                                     GSS1F305.558    
*CALL PPXLOOK                                                              GSS1F305.559    
                                                                           GSS1F305.560    
C External subroutines called:                                             MEANDIA2.83     
      INTEGER  EXPPXI                                                      GSS1F305.561    
      EXTERNAL PPCTL,PP_FILE,SETPOS,IOERROR,SEC2TIME,TIME2SEC,STP2TIME,    TJ080294.221    
     *         BUFFIN,BUFFOUT,GRIB_FILE,EXPPXI                             GSS1F305.562    
*IF DEF,ATMOS                                                              MEANDIA2.87     
      EXTERNAL ST_MEAN                                                     MEANDIA2.88     
*ENDIF                                                                     MEANDIA2.89     
*IF DEF,OCEAN                                                              MEANDIA2.90     
      EXTERNAL STASH                                                       MEANDIA2.91     
*ENDIF                                                                     MEANDIA2.92     
C                                                                          MEANDIA2.93     
C Dynamic allocated workspace                                              @DYALLOC.2401   
C                                                                          MEANDIA2.95     
      INTEGER PP_FIXHD(LEN_FIXHD)           ! PPfile fixed length header   @DYALLOC.2402   
      INTEGER PPLOOK(LEN1_LOOKUP,PP_LEN_MEAN) !PPfile lookup headers       @DYALLOC.2403   
*IF DEF,MPP                                                                GPB2F405.132    
      REAL buf(MAX_SIZE)  ! I/O buffer space                               GPB2F405.133    
CDIR$ CACHE_ALIGN buf                                                      GPB2F405.134    
*ENDIF                                                                     GPB2F405.135    
C                                                                          MEANDIA2.98     
cdir$ cache_align pplook, pp_fixhd                                         GBC0F403.92     
*CALL CNTL_IO                                                              GBC0F403.93     
C                                                                          GBC0F403.94     
      INTEGER IPPLOOK(LEN1_LOOKUP)          ! Copy of D1 field header      MEANDIA2.99     
C      Local variables and arrays                                          MEANDIA2.103    
C                                                                          MEANDIA2.104    
      CHARACTER*14                                                         MEANDIA2.105    
     *       PPNAME              ! Name of PPfile                          MEANDIA2.106    
      REAL                                                                 MEANDIA2.107    
     *       A_IO                ! IO error return code on BUFFER IO       MEANDIA2.108    
      INTEGER                                                              MEANDIA2.109    
     *       WORD_ADDRESS,       ! IO word address on BUFFER IO            MEANDIA2.110    
     *       LEN_IO,             ! IO transfer length on BUFFER IO         MEANDIA2.111    
     *       NFTPIPE,            ! FORTRAN unit number for named pipe      MEANDIA2.112    
     *       PPUNIT,             ! FORTRAN unit number for PPfile          MEANDIA2.113    
     *       INDEXM,             ! Mean level index                        MEANDIA2.114    
     *       FIELD,              ! Index over field number in LOOKUP       MEANDIA2.115    
     *       FIELD_ADDRESS,      ! Address of field in D1                  MEANDIA2.116    
     *       FIELD_LENGTH,       ! Length of single field                  MEANDIA2.117    
     *       BUFFER_LENGTH,      ! Length of buffer for field              MEANDIA2.118    
     *       IS,IM,              ! STASH section,item codes for field      MEANDIA2.119    
     *       IE,                 ! STLIST index over entries               MEANDIA2.120    
     *       modl,               ! Int. model no. read from STASH record   GSS1F305.563    
     *       TAG,                ! STLIST tag used to identify field       MEANDIA2.123    
     *       N_ROWS,             ! No of rows in field                     MEANDIA2.124    
     *       N_COLS,             ! No of columns in field                  MEANDIA2.125    
     *       NO,N_LEVS,          ! Bottom level and number of levels       MEANDIA2.126    
     *       LEVEL,              ! Index over levels                       MEANDIA2.127    
     *       COMP_ACCRCY,        ! Packing accracy                         MEANDIA2.128    
     *       LBTIM_IA,           ! Sampling period in hours for LBTIM      MEANDIA2.129    
     *       IWA,                ! Word address used in SETPOS             MEANDIA2.130    
     *       ICURRLL,            ! Current position in PP LOOKUP table     MEANDIA2.131    
     *       ICURRL1,            ! Current position in PP LOOKUP table     GRS3F304.212    
     *       LEN_BUF_WORDS,      ! NUM_WORDS rounded to 512                MEANDIA2.132    
     *       NUM_WORDS,          ! Number of words reqd to hold the data   MEANDIA2.133    
     *       I,                  ! Loop index                              MEANDIA2.134    
     *       START_DAY,          ! Start time for mean period (days)       TJ080294.223    
     *       START_SECOND,       ! Start time for mean period (seconds)    MEANDIA2.135    
     *       PERIOD_DAYS,        ! Start time for mean period (days)       TJ080294.224    
     *       PERIOD_SECS,        ! Start time for mean period (seconds)    TJ080294.225    
     *       START_TIME(7)       ! Start time for mean period(date/time)   MEANDIA2.136    
     &      ,im_ident            !  Internal Model Identifier              GDR4F305.122    
     &      ,im_index            !  Internal Model Index for stash         GDR4F305.123    
     &      ,LEN_PPNAME                                                    GO261093.74     
     &      ,PACKING_TYPE       ! 0=unpacked, 1=WGDOS, 3=GRIB              GO261093.75     
     &      ,GRIB_PACKING       ! packing profile used for grib packing    GRS3F400.292    
     &      ,D1POS              ! Position of info in D1_ADDR array        GSM2F404.8      
     &      ,orig_decomp        ! Used to check for change in              GSM2F404.9      
     &      ,new_decomp         ! decomposition                            GSM2F404.10     
      LOGICAL                                                              MEANDIA2.138    
     *       PACKING,            ! Switch to enable optional packing       MEANDIA2.139    
     &       LPACKFIELD         ! Per-field packing indicator              GO261093.76     
     &       ,GRIB_OUT          ! .True. if output to be in grib           GRS3F304.213    
                                                                           @DYALLOC.2404   
*IF DEF,MPP                                                                GSM1F403.275    
      INTEGER                                                              GSM1F403.276    
     &  GR                      ! Gridtype code                            GSM1F403.277    
     &, GLOBAL_PPHORIZ_OUT      ! Size of global field                     GSM1F403.278    
     &, info                    ! Unused arg in GCOM calls                 GSM1F403.279    
     &, LOCAL_LEN               ! Length of field:                         GSM2F404.11     
     &                          ! from GENERAL_GATHER_FIELD                GSM2F404.12     
     &, SUBM                    ! Submodel number for internal model id    GSM1F403.282    
                                                                           GSM1F403.283    
      REAL A                    ! To hold return code                      GSM2F404.13     
     &                          ! from GENERAL_GATHER_FIELD                GSM2F404.14     
*ENDIF                                                                     GSM1F403.285    
                                                                           GSM1F403.286    
      INTEGER IPPVAL                                                       @DYALLOC.2405   
      REAL    RPPVAL                                                       @DYALLOC.2406   
      EQUIVALENCE (IPPVAL,RPPVAL)                                          @DYALLOC.2407   
C                                                                          @DYALLOC.2408   
      im_ident = I_AO                                                      GDR4F305.124    
      im_index = internal_model_index(im_ident)                            GDR5F400.2      
                                                                           GDR4F305.126    
CL----------------------------------------------------------------------   MEANDIA2.143    
CL 1. Initialise output ppfile for mean data at level MEANLEV.             MEANDIA2.144    
CL    OPEN the file ready to receive mean PPfields from STASH.             MEANDIA2.145    
CL                                                                         MEANDIA2.146    
      CALL PPCTL (                                                         @DYALLOC.2409   
*CALL ARGSIZE                                                              @DYALLOC.2410   
*CALL ARGD1                                                                @DYALLOC.2411   
*CALL ARGDUMA                                                              @DYALLOC.2412   
*CALL ARGDUMO                                                              @DYALLOC.2413   
*CALL ARGDUMW                                                              GKR1F401.233    
*CALL ARGINFA                                                              @DYALLOC.2414   
*CALL ARGINFO                                                              GMB1F405.411    
*CALL ARGPPX                                                               GMB1F405.412    
     *             I_AO,MEANLEV,.FALSE.,PPNAME,ICODE,CMESSAGE)             @DYALLOC.2415   
      IF (ICODE.GT.0) GOTO 999                                             MEANDIA2.148    
      IF (I_AO.EQ.1 .or. I_AO.EQ.2) THEN                                   GDR3F305.275    
        PPUNIT = FT_MEANim(I_AO)                                           GDR3F305.276    
      ELSE                                                                 GDR3F305.277    
        ICODE = 311                                                        GDR3F305.278    
        CMESSAGE='MEANDIAG : I_AO has invalid value'                       GDR3F305.279    
        GOTO 999                                                           GDR3F305.280    
      ENDIF                                                                GDR3F305.281    
      LEN_PPNAME=LEN(PPNAME)                                               MEANDIA2.155    
      CALL FILE_OPEN(PPUNIT,PPNAME,LEN_PPNAME,1,1,ICODE)                   GPB1F305.84     
      IF(ICODE.NE.0)GOTO999                                                MEANDIA2.157    
CL----------------------------------------------------------------------   MEANDIA2.158    
CL 2. Extract mean fields from mean dump fields in D1, and append to       MEANDIA2.159    
CL    mean PPfile.  The fields dealt with in this section are the          MEANDIA2.160    
CL    prognostic fields as meaned by the climate meaning system, plus      MEANDIA2.161    
CL    fields derived from them (in the case of the atmosphere).            MEANDIA2.162    
CL    The STASH section number depends on the mean level and whether       MEANDIA2.163    
CL    atmosphere or ocean.  Different sets of fields can be requested      MEANDIA2.164    
CL    from different mean periods.                                         MEANDIA2.165    
CL                                                                         MEANDIA2.166    
*IF DEF,ATMOS                                                              MEANDIA2.167    
      IF (I_AO.EQ.1) THEN                                                  MEANDIA2.168    
        CALL ST_MEAN (                                                     @DYALLOC.2416   
*CALL ARGSIZE                                                              @DYALLOC.2417   
*CALL ARGD1                                                                @DYALLOC.2418   
*CALL ARGDUMA                                                              @DYALLOC.2419   
*CALL ARGDUMO                                                              @DYALLOC.2420   
*CALL ARGDUMW                                                              GKR1F401.234    
*CALL ARGSTS                                                               @DYALLOC.2421   
*CALL ARGPTRA                                                              @DYALLOC.2422   
*CALL ARGPTRO                                                              @DYALLOC.2423   
*CALL ARGCONA                                                              @DYALLOC.2424   
*CALL ARGPPX                                                               GKR0F305.950    
*CALL ARGFLDPT                                                             GSM1F405.491    
     *                20+MEANLEV,STASH_MAXLEN(20+MEANLEV,im_index),        GDR4F305.127    
     & NUM_STASH_LEVELS, P_FIELD,   ! for dynamic array                    NF171193.55     
     *                ICODE,CMESSAGE)                                      @DYALLOC.2426   
      ENDIF                                                                MEANDIA2.171    
*ENDIF                                                                     MEANDIA2.172    
*IF DEF,OCEAN                                                              MEANDIA2.173    
      IF (I_AO.EQ.2) THEN                                                  MEANDIA2.174    
        CALL STASH(o_sm,o_im,40+MEANLEV,D1,                                GKR0F305.951    
*CALL ARGSIZE                                                              @DYALLOC.2428   
*CALL ARGD1                                                                @DYALLOC.2429   
*CALL ARGDUMA                                                              @DYALLOC.2430   
*CALL ARGDUMO                                                              @DYALLOC.2431   
*CALL ARGDUMW                                                              GKR1F401.235    
*CALL ARGSTS                                                               @DYALLOC.2432   
*CALL ARGPPX                                                               GKR0F305.952    
     *                                    ICODE,CMESSAGE)                  @DYALLOC.2436   
      ENDIF                                                                MEANDIA2.176    
*ENDIF                                                                     MEANDIA2.177    
      IF (ICODE.GT.0) GOTO 999                                             MEANDIA2.178    
CL----------------------------------------------------------------------   MEANDIA2.179    
CL 3. Loop over STASHlist entries and extract tagged fields which are      MEANDIA2.180    
CL already processed into D1 by STASH to the mean PP file                  MEANDIA2.181    
CL                                                                         MEANDIA2.182    
CL 3.1 Buffer in PPfile fixed length header to get address of lookup       MEANDIA2.183    
CL                                                                         MEANDIA2.184    
      CALL SETPOS(PPUNIT,0,ICODE)                                          GTD0F400.102    
      CALL BUFFIN(PPUNIT,PP_FIXHD(1),LEN_FIXHD,LEN_IO,A_IO)                MEANDIA2.186    
      IF(A_IO.NE.-1.0.OR.LEN_IO.NE.LEN_FIXHD) THEN                         MEANDIA2.187    
        CALL IOERROR('Buffer in fixed length header',A_IO,LEN_IO,          MEANDIA2.188    
     *                LEN_FIXHD)                                           MEANDIA2.189    
        CMESSAGE='MEANDIAG: Error reading PPfile header'                   MEANDIA2.190    
        ICODE=1                                                            MEANDIA2.191    
        GOTO 999                                                           MEANDIA2.192    
      ENDIF                                                                MEANDIA2.193    
      WORD_ADDRESS=PP_FIXHD(150)-1                                         MEANDIA2.194    
CL                                                                         MEANDIA2.195    
CL 3.2 Buffer in PPfile lookup header to PPLOOK work array                 MEANDIA2.196    
CL                                                                         MEANDIA2.197    
      CALL SETPOS(PPUNIT,WORD_ADDRESS,ICODE)                               GTD0F400.103    
      CALL BUFFIN(PPUNIT,PPLOOK(1,1),LEN1_LOOKUP*PP_LEN_MEAN,LEN_IO,A_IO   MEANDIA2.199    
     *       )                                                             MEANDIA2.200    
      IF(A_IO.NE.-1.0.OR.LEN_IO.NE.LEN1_LOOKUP*PP_LEN_MEAN) THEN           MEANDIA2.201    
        CALL IOERROR('Buffer in of LOOKUP table    ',A_IO,LEN_IO,          MEANDIA2.202    
     *                LEN1_LOOKUP*PP_LEN_MEAN)                             MEANDIA2.203    
        CMESSAGE='MEANDIAG: Error reading PPfile LOOKUP table'             MEANDIA2.204    
        ICODE=1                                                            MEANDIA2.205    
        GOTO 999                                                           MEANDIA2.206    
      ENDIF                                                                MEANDIA2.207    
CL                                                                         MEANDIA2.208    
CL 3.3 Initialise output address and LOOKUP entry number in the PPfile     MC261093.231    
CL                                                                         MEANDIA2.213    
C                                                                          MEANDIA2.236    
      ICURRLL=FT_LASTFIELD(PPUNIT)                                         MEANDIA2.237    
      ICURRL1=FT_LASTFIELD(PPUNIT)  ! required if grib output              GRS3F304.214    
      IF (ICURRLL.EQ.0) THEN  ! this is the first field                    MEANDIA2.238    
        IWA=PP_FIXHD(150)-1+LEN1_LOOKUP*PP_LEN_MEAN                        MEANDIA2.239    
! round address up to um_sector_size-words                                 GBC0F403.95     
        IWA=((IWA+um_sector_size-1)/um_sector_size)*um_sector_size         GBC0F403.96     
      ELSE                    ! append to the previous field               MEANDIA2.241    
        IWA=PPLOOK(LBEGIN,ICURRLL)+PPLOOK(LBNREC,ICURRLL)                  MEANDIA2.242    
      ENDIF                                                                GRS3F304.215    
                                                                           GRS3F304.216    
! Use PP_PACK_CODE to set packing type and GRIB flag                       GRS3F304.217    
! For GRB output reset PP_PACK_CODE to give packing profile.               GRS3F304.218    
      IF (PP_PACK_CODE(PPUNIT).GE.100) THEN                                GRS3F304.219    
        GRIB_OUT=.TRUE.                                                    GRS3F304.220    
        PP_PACK_CODE(PPUNIT)=PP_PACK_CODE(PPUNIT)-100                      GRS3F304.221    
        GRIB_PACKING=PP_PACK_CODE(PPUNIT)                                  GRS3F400.293    
        PACKING_TYPE=3                                                     GRS3F304.222    
      ELSE                                                                 GRS3F304.223    
        GRIB_OUT=.FALSE.                                                   GRS3F304.224    
      ENDIF                                                                MEANDIA2.243    
C                                                                          MEANDIA2.244    
C Set packing switch : profile 0 means no packing                          MEANDIA2.245    
C                                                                          MEANDIA2.246    
      IF (PP_PACK_CODE(PPUNIT).EQ.0) THEN                                  MEANDIA2.247    
        PACKING=.FALSE.                                                    MEANDIA2.248    
      ELSE                                                                 MEANDIA2.249    
        PACKING=.TRUE.                                                     MEANDIA2.250    
      ENDIF                                                                MEANDIA2.251    
CL                                                                         MEANDIA2.252    
CL 3.4 Start loop over STASHlist entries.                                  MEANDIA2.253    
CL                                                                         MEANDIA2.254    
! Note in the case of grib output this loop is used to set up pp headers   GRS3F304.225    
! only                                                                     GRS3F304.226    
!                                                                          GRS3F304.227    
      DO IE =1,TOTITEMS                                                    GSS1F305.564    
        modl=STLIST(st_model_code  ,IE)                                    GSS1F305.565    
        IS  =STLIST(st_sect_no_code,IE)                                    GSS1F305.566    
        IM  =STLIST(st_item_code   ,IE)                                    GSS1F305.567    
        TAG =STLIST(st_macrotag    ,IE)/1000                               GSS1F305.568    
        IF ( (MOD(TAG/(2**(MEANLEV-1)),2) .EQ.1) .AND.                     GSS1F305.569    
*IF DEF,SLAB                                                               SDR1F404.181    
     & ((modl.eq.atmos_im .or. modl.eq.slab_im) .and.                      SDR1F404.182    
     &  (I_AO.EQ.atmos_sm)) ) THEN                                         SDR1F404.183    
*ELSE                                                                      SDR1F404.184    
     &                             (I_AO.EQ.modl) ) THEN                   SDR1F404.185    
*ENDIF                                                                     SDR1F404.186    
                                                                           SDR1F404.187    
                                                                           GSS1F305.571    
C The Tag matches this mean period and the item is in this dump  .         MC261093.235    
C                                                                          MEANDIA2.263    
C Determine the number of output levels and starting LOOKUP header         MEANDIA2.264    
C (Number of levels now includes possible pseudo_levels)                   MEANDIA2.265    
C NB: Note that vertical means (single output level) are a special case    MEANDIA2.266    
C     as are timeseries (also single output level)                         MEANDIA2.267    
C                                                                          MEANDIA2.268    
          IF (STLIST(st_input_bottom,IE).EQ.st_special_code) THEN          MEANDIA2.269    
            N_LEVS=1                       ! Output is a special level     MEANDIA2.270    
          ELSEIF (STLIST(st_gridpoint_code,IE).LT.vert_mean_top .AND.      MEANDIA2.271    
     &            STLIST(st_gridpoint_code,IE).GT.vert_mean_base) THEN     MEANDIA2.272    
            N_LEVS=1                       ! Output is a vertical mean     MEANDIA2.273    
          ELSEIF (STLIST(st_series_ptr,IE).GT.0) THEN                      MEANDIA2.274    
            N_LEVS=1                       ! Output is a timeseries        MEANDIA2.275    
          ELSE                                                             MEANDIA2.276    
            NO=STLIST(st_output_bottom,IE)                                 MEANDIA2.277    
            IF (NO.LT.0) THEN              ! Output is level list          MEANDIA2.278    
              N_LEVS=STASH_LEVELS(1,-NO)                                   MEANDIA2.279    
            ELSE                           ! Output is level range         MEANDIA2.280    
              N_LEVS=STLIST(st_output_top,IE)-                             MEANDIA2.281    
     &               STLIST(st_output_bottom,IE)+1                         MEANDIA2.282    
            ENDIF                                                          MEANDIA2.283    
          ENDIF                                                            MEANDIA2.284    
          IF (STLIST(st_pseudo_out,IE).GT.0) THEN                          MEANDIA2.285    
            NO=STLIST(st_pseudo_out,IE)                                    MEANDIA2.286    
            N_LEVS=N_LEVS*STASH_PSEUDO_LEVELS(1,NO)                        MEANDIA2.287    
          ENDIF                                                            MEANDIA2.288    
          FIELD=STLIST(st_lookup_ptr,IE)                                   MEANDIA2.289    
*IF DEF,MPP                                                                GSM1F403.287    
C Address of distributed field in D1                                       GSM1F403.288    
          FIELD_ADDRESS=stlist(st_output_addr,IE)                          GSM1F403.289    
*ENDIF                                                                     GSM1F403.290    
C                                                                          MEANDIA2.290    
C Loop over the number of output levels                                    MEANDIA2.291    
          DO LEVEL=1,N_LEVS                                                MEANDIA2.292    
C Copy LOOKUP header for field from A_LOOKUP or O_LOOKUP to work header    MEANDIA2.293    
*IF DEF,ATMOS                                                              MEANDIA2.294    
            IF (I_AO.EQ.1) THEN                                            MEANDIA2.295    
              DO I=1,LEN1_LOOKUP                                           MEANDIA2.296    
                IPPLOOK(I)=A_LOOKUP(I,FIELD+LEVEL-1)                       MEANDIA2.297    
              ENDDO                                                        MEANDIA2.298    
            ENDIF                                                          MEANDIA2.299    
*ENDIF                                                                     MEANDIA2.300    
*IF DEF,OCEAN                                                              MEANDIA2.301    
            IF (I_AO.EQ.2) THEN                                            MEANDIA2.302    
              DO I=1,LEN1_LOOKUP                                           MEANDIA2.303    
                IPPLOOK(I)=O_LOOKUP(I,FIELD+LEVEL-1)                       MEANDIA2.304    
              ENDDO                                                        MEANDIA2.305    
            ENDIF                                                          MEANDIA2.306    
*ENDIF                                                                     MEANDIA2.307    
C Field and buffer sizes, and field address in D1                          MEANDIA2.308    
            FIELD_LENGTH =IPPLOOK(LBLREC)                                  MEANDIA2.309    
*IF DEF,MPP                                                                GPB2F405.136    
            IF (FIELD_LENGTH .GT. MAX_SIZE) THEN                           GPB2F405.137    
              WRITE(6,*) 'Error in MEANDIAG : MAX_SIZE too small.'         GPB2F405.138    
              WRITE(6,*) 'MAX_SIZE= ',MAX_SIZE                             GPB2F405.139    
              WRITE(6,*) 'FIELD_LENGTH= ',FIELD_LENGTH                     GPB2F405.140    
              ICODE=1                                                      GPB2F405.141    
              CMESSAGE='MEANDIAG: MAX_SIZE too small'                      GPB2F405.142    
              GOTO 999                                                     GPB2F405.143    
            ENDIF                                                          GPB2F405.144    
*ENDIF                                                                     GPB2F405.145    
            N_ROWS=IPPLOOK(LBROW)                                          MEANDIA2.310    
            N_COLS=IPPLOOK(LBNPT)                                          MEANDIA2.311    
*IF -DEF,MPP                                                               GSM1F403.291    
            FIELD_ADDRESS=IPPLOOK(NADDR)                                   MEANDIA2.313    
*ENDIF                                                                     GSM1F403.292    
            BUFFER_LENGTH=((FIELD_LENGTH+um_sector_size-1)/                GBC0F403.97     
     2       um_sector_size)*um_sector_size                                GBC0F403.98     
C Section/Item codes                                                       MEANDIA2.314    
            IS=IPPLOOK(ITEM_CODE)/1000                                     MEANDIA2.315    
            IM=IPPLOOK(ITEM_CODE)-1000*IS                                  MEANDIA2.316    
C Packing accuracy of the data :-                                          MEANDIA2.317    
C NB: Presence of extra data disables packing for this field               MEANDIA2.318    
            IF (PACKING.AND.(IPPLOOK(LBEXT).LE.0)) THEN                    MEANDIA2.319    
               COMP_ACCRCY=                                                GSS1F305.572    
     &    EXPPXI(modl,IS,IM,ppx_packing_acc+PP_PACK_CODE(PPUNIT)-1,        GSS1F305.573    
*CALL ARGPPX                                                               GSS1F305.574    
     &                                 ICODE,CMESSAGE)                     GSS1F305.575    
              LPACKFIELD=.TRUE.                                            MEANDIA2.322    
            ELSE                                                           MEANDIA2.323    
              COMP_ACCRCY=-99                                              APS1F304.2      
              LPACKFIELD=.FALSE.                                           MEANDIA2.325    
            ENDIF                                                          MEANDIA2.326    
            IF (.NOT.GRIB_OUT) THEN                                        GRS3F304.228    
*IF DEF,MPP                                                                GSM1F403.293    
              IF(mype.eq.0)THEN                                            GSM1F403.294    
                CALL SETPOS_single(PPUNIT,IWA,ICODE)                       GSM1F403.295    
              ENDIF                                                        GSM1F403.296    
              SUBM=SUBMODEL_FOR_SM(im_ident)                               GSM2F404.15     
!             Reuse decomposition type if it is unchanged. Otherwise       GSM2F404.16     
!             change it to the new type.                                   GSM2F404.17     
              D1POS=STLIST(st_d1pos,IE)                                    GSM2F404.18     
              orig_decomp=current_decomp_type                              GSM2F404.19     
              new_decomp=orig_decomp                                       GSM2F404.20     
                                                                           GSM2F404.21     
              IF ((D1_ADDR(d1_imodl,D1POS,SUBM) .EQ. ATMOS_IM) .AND.       GSM2F404.22     
     &          (orig_decomp .NE. decomp_standard_atmos)) THEN             GSM2F404.23     
                                                                           GSM2F404.24     
                new_decomp=decomp_standard_atmos                           GSM2F404.25     
                                                                           GSM2F404.26     
              ELSEIF ((D1_ADDR(d1_imodl,D1POS,SUBM) .EQ. OCEAN_IM) .AND.   GSM2F404.27     
     &            (D1_ADDR(d1_object_type,D1POS,SUBM) .EQ. prognostic)     GSM2F404.28     
     &            .AND. (orig_decomp .NE. decomp_standard_ocean)) THEN     GSM2F404.29     
                                                                           GSM2F404.30     
                new_decomp=decomp_standard_ocean                           GSM2F404.31     
                                                                           GSM2F404.32     
              ELSEIF ((D1_ADDR(d1_imodl,D1POS,SUBM) .EQ. OCEAN_IM) .AND.   GSM2F404.33     
     &            (D1_ADDR(d1_object_type,D1POS,SUBM) .NE. prognostic)     GSM2F404.34     
     &            .AND. (orig_decomp .NE. decomp_nowrap_ocean)) THEN       GSM2F404.35     
                                                                           GSM2F404.36     
                new_decomp=decomp_nowrap_ocean                             GSM2F404.37     
                                                                           GSM2F404.38     
              ENDIF                                                        GSM2F404.39     
                                                                           GSM2F404.40     
              IF (new_decomp .NE. orig_decomp) THEN                        GSM2F404.41     
                icode=0                                                    GSM2F404.42     
                CALL CHANGE_DECOMPOSITION(new_decomp,icode)                GSM2F404.43     
                                                                           GSM2F404.44     
                IF (icode .NE. 0) THEN                                     GSM2F404.45     
                  IF (mype .EQ. 0) THEN                                    GSM2F404.46     
                    WRITE(6,*) 'ERROR : MEAN_DIAG'                         GSM2F404.47     
                    WRITE(6,*) 'Failed to change decomposition to ',       GSM2F404.48     
     &                new_decomp                                           GSM2F404.49     
                    WRITE(6,*) 'Field M,S,I ',                             GSM2F404.50     
     &                D1_ADDR(d1_imodl,D1POS,SUBM),                        GSM2F404.51     
     &                D1_ADDR(d1_section,D1POS,SUBM),                      GSM2F404.52     
     &                D1_ADDR(d1_item,D1POS,SUBM)                          GSM2F404.53     
                  ENDIF                                                    GSM2F404.54     
                  CMESSAGE='MEANDIA2 : Failed to change decomposition'     GSM2F404.55     
                  GOTO 999                                                 GSM2F404.56     
                ENDIF                                                      GSM2F404.57     
                                                                           GSM2F404.58     
              ENDIF                                                        GSM2F404.59     
!             Gather full field to PE0                                     GSM2F404.60     
              CALL GENERAL_GATHER_FIELD(D1(FIELD_ADDRESS),buf,LOCAL_LEN,   GSM2F404.61     
     &          FIELD_LENGTH,D1_ADDR(1,STLIST(st_d1pos,IE),SUBM),0,        GSM2F404.62     
     &          ICODE,CMESSAGE)                                            GSM2F404.63     
              IF (ICODE .EQ. 1) THEN                                       GSM2F404.64     
                WRITE(6,*)'MEANDIA2: Field number ',IS,                    GSM2F404.65     
     &            'with dimensions ', N_COLS,' x ',                        GSM2F404.66     
     &            N_ROWS,' and gridtype ',                                 GSM2F404.67     
     &            D1_ADDR(d1_grid_type,STLIST(st_d1pos,IE),SUBM),          GSM2F404.68     
     &            'was unrecognized and not gathered.'                     GSM2F404.69     
                CMESSAGE='MEANDIA2: Unrecognized field on write'           GSM2F404.70     
                GOTO 999                                                   GSM2F404.71     
              ELSEIF (ICODE .NE. 0) THEN                                   GSM2F404.72     
                GOTO 999                                                   GSM2F404.73     
              ENDIF                                                        GSM2F404.74     
              ICODE=0                                                      GBCQF405.27     
*IF DEF,MPP,AND,DEF,T3E                                                    GBCQF405.28     
c--call the parallel version of 'COEX'                                     GBCQF405.29     
*ELSE                                                                      GBCQF405.30     
              IF (mype .EQ. 0) THEN                                        GSM2F404.75     
*ENDIF                                                                     GBCQF405.31     
                CALL PP_FILE(BUF,BUFFER_LENGTH,NUM_WORDS,RMDI,             GSM2F404.76     
     &            COMP_ACCRCY,FIELD_LENGTH,PPUNIT,IWA,N_COLS,N_ROWS,       GSM2F404.77     
*IF DEF,MPP,AND,DEF,T3E                                                    GBCQF405.32     
     &            PACKING,PACKING_TYPE,0,ICODE,CMESSAGE)                   GBCQF405.33     
*ELSE                                                                      GBCQF405.34     
     &            PACKING,PACKING_TYPE,ICODE,CMESSAGE)                     GSM2F404.78     
*ENDIF                                                                     GBCQF405.35     
*IF DEF,MPP,AND,DEF,T3E                                                    GBCQF405.36     
c--end of the call to the parallel version of COEX                         GBCQF405.37     
*ELSE                                                                      GBCQF405.38     
              ENDIF                                                        GSM2F404.79     
*ENDIF                                                                     GBCQF405.39     
              CALL GC_ISUM(1, nproc, info, icode)                          GBCQF405.40     
                                                                           GSM2F404.81     
              IF(ICODE.GT.0) THEN                                          GSM2F404.82     
                CMESSAGE=                                                  GSM2F404.83     
     &            'MEANDIA2: Error in PP_FILE - see ICODE for item'        GSM2F404.84     
                ICODE=1000*IS+IM                                           GSM2F404.85     
                GOTO 999                                                   GSM2F404.86     
              ENDIF                                                        GSM2F404.87     
                                                                           GSM2F404.88     
C Increment field address to point to next level if there is one.          GSM1F403.316    
              FIELD_ADDRESS=FIELD_ADDRESS+LOCAL_LEN                        GSM1F403.317    
*ELSE                                                                      GSM1F403.318    
C Output the field from D1 to the PPfile with the requisite packing        MEANDIA2.327    
              CALL PP_FILE(D1(FIELD_ADDRESS),BUFFER_LENGTH,NUM_WORDS,      GRS3F304.229    
     &           RMDI,COMP_ACCRCY,FIELD_LENGTH,PPUNIT,IWA,N_COLS,N_ROWS,   MEANDIA2.329    
     &           PACKING,PACKING_TYPE,ICODE,CMESSAGE)                      GO261093.77     
              IF(ICODE.GT.0) THEN                                          GRS3F304.230    
              CMESSAGE='MEANDIA1: Error in PP_FILE - see ICODE for item'   GRS3F304.231    
                ICODE=1000*IS+IM                                           GRS3F304.232    
                GOTO 999                                                   GRS3F304.233    
              ENDIF                                                        GRS3F304.234    
*ENDIF                                                                     GSM1F403.319    
            ENDIF                                                          MEANDIA2.335    
C Copy work header for field to next PPfile header                         MEANDIA2.336    
            ICURRLL=ICURRLL+1                           ! Next field       MEANDIA2.337    
            DO I=1,LEN1_LOOKUP                                             MEANDIA2.338    
              PPLOOK(I,ICURRLL)=IPPLOOK(I)                                 MEANDIA2.339    
            ENDDO                                                          MEANDIA2.340    
C Reset PPheader words that differ from dump LOOKUP header conventions     MEANDIA2.341    
            PPLOOK(LBREL,ICURRLL)=2                     ! PP release no    MEANDIA2.342    
            PPLOOK(DATA_TYPE,ICURRLL)=1                 ! Real field       MEANDIA2.343    
            IF (PACKING_TYPE.EQ.1) THEN                                    GO261093.78     
              PPLOOK(LBPACK,ICURRLL)=02001              ! WGDOS packed     MEANDIA2.347    
            ELSE IF (PACKING_TYPE.EQ.3) THEN                               GRS3F304.235    
              PPLOOK(LBPACK,ICURRLL)=02003              ! GRIB packed      GRS3F304.236    
            ELSE                                                           MEANDIA2.348    
              PPLOOK(LBPACK,ICURRLL)=02000              ! Unpacked         MEANDIA2.349    
            ENDIF                                                          MEANDIA2.350    
            RPPVAL = COMP_ACCRCY                        ! Accuracy         @DYALLOC.2437   
            PPLOOK(BACC,ICURRLL) = IPPVAL                                  @DYALLOC.2438   
            RPPVAL=RMDI                                 ! Missing data     @DYALLOC.2439   
            PPLOOK(BMDI,ICURRLL)=IPPVAL                                    @DYALLOC.2440   
            RPPVAL = 1.0                                ! MKS scale fac    @DYALLOC.2441   
            PPLOOK(BMKS,ICURRLL)=IPPVAL                                    @DYALLOC.2442   
            IF (.NOT.GRIB_OUT) THEN                                        GRS3F304.237    
              PPLOOK(LBLREC,ICURRLL)=NUM_WORDS         ! Packed length     GRS3F304.238    
              PPLOOK(LBNREC,ICURRLL)=((NUM_WORDS+um_sector_size-1)/        GBC0F403.99     
     2         um_sector_size)*um_sector_size                              GBC0F403.100    
C                                                      ! Rounded length    GRS3F304.240    
              PPLOOK(LBEGIN,ICURRLL)=IWA                 ! Address         GRS3F304.241    
              PPLOOK(NADDR,ICURRLL)=IWA                  ! Address         GRS3F304.242    
              IWA=IWA+PPLOOK(LBNREC,ICURRLL)             ! Next address    GRS3F304.243    
            ENDIF                                                          GRS3F304.244    
          ENDDO  ! End of loop over levels                                 MEANDIA2.361    
        ENDIF                                                              MEANDIA2.362    
C                                                                          MEANDIA2.363    
      ENDDO      ! End of loop over STASHlist entries                      MEANDIA2.364    
C Update FT_LASTFIELD                                                      MEANDIA2.365    
      FT_LASTFIELD(PPUNIT)=ICURRLL                                         MEANDIA2.366    
CL----------------------------------------------------------------------   MEANDIA2.367    
CL 4.  Finally loop over PP headers and set correct timestamps for the     MEANDIA2.368    
CL     mean period concerned, and also reset LBTIM and LBPROC codes to     MEANDIA2.369    
CL     reflect the mean period for the individual fields.                  MEANDIA2.370    
CL     NB: This loop deals with fields from both sections 2 and 3 above.   MEANDIA2.371    
CL                                                                         MEANDIA2.372    
CL 4.1 Calculate start time of meaning period from current time            MEANDIA2.373    
CL                                                                         MEANDIA2.374    
      CALL TIME2SEC(I_YEAR,I_MONTH,I_DAY,I_HOUR,I_MINUTE,I_SECOND,         MEANDIA2.375    
     &              BASIS_TIME_DAYS,BASIS_TIME_SECS,                       TJ080294.226    
     &              START_DAY,START_SECOND,LCAL360)                        GSS1F304.477    
C                                                                          MEANDIA2.377    
      I=1                                                                  MEANDIA2.378    
      IF (I_AO.EQ.1 .or. I_AO.EQ.2) THEN                                   GDR3F305.282    
        DO INDEXM=1,MEANLEV                                                GDR3F305.283    
          I=I*MEANFREQim(INDEXM,I_AO)                                      GDR3F305.284    
        ENDDO                                                              GDR3F305.285    
        CALL STP2TIME(I*DUMPFREQim(I_AO),                                  GDR3F305.286    
     &        STEPS_PER_PERIODim(I_AO),SECS_PER_PERIODim(I_AO),            GDR3F305.287    
     &                PERIOD_DAYS,PERIOD_SECS)                             TJ080294.231    
      ELSE                                                                 MEANDIA2.390    
        ICODE=312                                                          MEANDIA2.391    
        CMESSAGE='MEANDIAG : I_AO has invalid value'                       MEANDIA2.392    
        GOTO 999                                                           MEANDIA2.393    
      ENDIF                                                                MEANDIA2.394    
      START_SECOND=START_SECOND - PERIOD_SECS                              TJ080294.232    
      START_DAY   =START_DAY    - PERIOD_DAYS                              TJ080294.233    
C                                                                          MEANDIA2.395    
C Note: START_TIME(6) is set to Day Number, not seconds                    MEANDIA2.396    
      CALL SEC2TIME(START_DAY,START_SECOND,                                TJ080294.234    
     &              BASIS_TIME_DAYS,BASIS_TIME_SECS,                       TJ080294.235    
     &              START_TIME(1),START_TIME(2),START_TIME(3),             MEANDIA2.398    
     &              START_TIME(4),START_TIME(5),START_TIME(7),             MEANDIA2.399    
     &              START_TIME(6),LCAL360)                                 GSS1F304.478    
CL                                                                         MEANDIA2.401    
CL 4.2 Set start and end times in mean PP headers from START_TIME          MEANDIA2.402    
CL     and current time from CTIME.                                        MEANDIA2.403    
CL     Recalculate LBTIM and LBPROC if necessary.                          MEANDIA2.404    
CL                                                                         MEANDIA2.405    
      DO INDEXM=1,FT_LASTFIELD(PPUNIT)                                     MEANDIA2.406    
        DO I=LBYR,LBDAY                                                    MEANDIA2.407    
          PPLOOK(I,INDEXM)=START_TIME(I)                                   MEANDIA2.408    
        ENDDO                                                              MEANDIA2.409    
        PPLOOK(LBYRD ,INDEXM)=I_YEAR                                       MEANDIA2.410    
        PPLOOK(LBMOND,INDEXM)=I_MONTH                                      MEANDIA2.411    
        PPLOOK(LBDATD,INDEXM)=I_DAY                                        MEANDIA2.412    
        PPLOOK(LBHRD ,INDEXM)=I_HOUR                                       MEANDIA2.413    
        PPLOOK(LBMIND,INDEXM)=I_MINUTE                                     MEANDIA2.414    
        PPLOOK(LBDAYD,INDEXM)=I_DAY_NUMBER                                 MEANDIA2.415    
        IF (lclimrealyr) then      ! real-period means always start        GMG1F404.289    
          PPLOOK(LBDAT,INDEXM)=1   ! on 1st of month                       GMG1F404.290    
          if (PPLOOK(LBMON,INDEXM) .eq. 1 .and.                            GMG1F404.291    
     &        PPLOOK(LBMOND,INDEXM) .eq. 3) then                           GMG1F404.292    
            PPLOOK(LBMON,INDEXM)=2 ! correct start month for Feb mean      GMG1F404.293    
          endif                                                            GMG1F404.294    
        ENDIF                                                              GMG1F404.295    
C                                                                          MEANDIA2.416    
        LBTIM_IA=PPLOOK(LBTIM,INDEXM)/100            ! Sample period       MEANDIA2.417    
        IF (LBTIM_IA.EQ.0) THEN                     ! Reset to dump        MEANDIA2.418    
          LBTIM_IA = (DUMPFREQim(I_AO)*SECS_PER_PERIODim(I_AO))/           GDR3F305.288    
     &               (STEPS_PER_PERIODim(I_AO)*3600)                       GDR3F305.289    
        ENDIF                                                              MEANDIA2.425    
*IF DEF,ATMOS                                                              MEANDIA2.426    
        IF (I_AO.EQ.1)                                                     MEANDIA2.427    
     &    PPLOOK(LBTIM,INDEXM)=A_FIXHD(8)+20+        ! Calendar+20+        MEANDIA2.428    
     &                        100*LBTIM_IA          ! 100*sample_prd       MEANDIA2.429    
*ENDIF                                                                     MEANDIA2.430    
*IF DEF,OCEAN                                                              MEANDIA2.431    
        IF (I_AO.EQ.2)                                                     MEANDIA2.432    
     &    PPLOOK(LBTIM,INDEXM)=O_FIXHD(8)+20+        ! Calendar+20+        MEANDIA2.433    
     &                        100*LBTIM_IA          ! 100*sample_prd       MEANDIA2.434    
*ENDIF                                                                     MEANDIA2.435    
                                                                           MEANDIA2.436    
C                                                                          MEANDIA2.437    
        IF (MOD(PPLOOK(LBPROC,INDEXM)/128,2).EQ.0)     ! not a mean        MEANDIA2.438    
     &    PPLOOK(LBPROC,INDEXM)=PPLOOK(LBPROC,INDEXM)+128                  MEANDIA2.439    
      ENDDO                                                                MEANDIA2.440    
! --------------------------------------------------------------------     GRS3F304.245    
!  4.2A Section to output fields in grib code                              GRS3F304.246    
!  NOTE - pp headers must be correct in everything except field lengths    GRS3F304.247    
!         before call to GRIB_FILE                                         GRS3F304.248    
                                                                           GRS3F304.249    
      IF (GRIB_OUT) THEN                                                   GRS3F304.250    
                                                                           GRS3F304.251    
!L  loop over STASHlist entries.                                           GRS3F304.252    
!L                                                                         GRS3F304.253    
        DO IE  =1,TOTITEMS                                                 GSS1F305.576    
          modl =STLIST(st_model_code  ,IE)                                 GSS1F305.577    
          IS   =STLIST(st_sect_no_code,IE)                                 GSS1F305.578    
          IM   =STLIST(st_item_code   ,IE)                                 GSS1F305.579    
          TAG  =STLIST(st_macrotag    ,IE)/1000                            GSS1F305.580    
          IF ( (MOD(TAG/(2**(MEANLEV-1)),2).EQ.1) .AND.                    GSS1F305.581    
     &                               (I_AO.EQ.modl) ) THEN                 GSS1F305.582    
C The Tag matches this mean period and the item is in this dump  .         GRS3F304.261    
C                                                                          GRS3F304.262    
C Determine the number of output levels and starting LOOKUP header         GRS3F304.263    
C (Number of levels now includes possible pseudo_levels)                   GRS3F304.264    
C NB: Note that vertical means (single output level) are a special case    GRS3F304.265    
C     as are timeseries (also single output level)                         GRS3F304.266    
C                                                                          GRS3F304.267    
           IF (STLIST(st_input_bottom,IE).EQ.st_special_code) THEN         GRS3F304.268    
            N_LEVS=1                       ! Output is a special level     GRS3F304.269    
           ELSEIF (STLIST(st_gridpoint_code,IE).LT.vert_mean_top .AND.     GRS3F304.270    
     &            STLIST(st_gridpoint_code,IE).GT.vert_mean_base) THEN     GRS3F304.271    
            N_LEVS=1                       ! Output is a vertical mean     GRS3F304.272    
           ELSEIF (STLIST(st_series_ptr,IE).GT.0) THEN                     GRS3F304.273    
            N_LEVS=1                       ! Output is a timeseries        GRS3F304.274    
           ELSE                                                            GRS3F304.275    
            NO=STLIST(st_output_bottom,IE)                                 GRS3F304.276    
            IF (NO.LT.0) THEN              ! Output is level list          GRS3F304.277    
              N_LEVS=STASH_LEVELS(1,-NO)                                   GRS3F304.278    
            ELSE                           ! Output is level range         GRS3F304.279    
              N_LEVS=STLIST(st_output_top,IE)-                             GRS3F304.280    
     &               STLIST(st_output_bottom,IE)+1                         GRS3F304.281    
            ENDIF                                                          GRS3F304.282    
           ENDIF                                                           GRS3F304.283    
           IF (STLIST(st_pseudo_out,IE).GT.0) THEN                         GRS3F304.284    
            NO=STLIST(st_pseudo_out,IE)                                    GRS3F304.285    
            N_LEVS=N_LEVS*STASH_PSEUDO_LEVELS(1,NO)                        GRS3F304.286    
           ENDIF                                                           GRS3F304.287    
           FIELD=STLIST(st_lookup_ptr,IE)                                  GRS3F304.288    
*IF DEF,MPP                                                                GSM2F404.89     
! Address of distributed field in D1                                       GSM2F404.90     
           FIELD_ADDRESS=stlist(st_output_addr,IE)                         GSM2F404.91     
*ENDIF                                                                     GSM2F404.92     
C                                                                          GRS3F304.289    
C Loop over the number of output levels                                    GRS3F304.290    
           DO LEVEL=1,N_LEVS                                               GRS3F304.291    
! Copy  header for field ready to extract address information              GRS3F304.292    
            ICURRL1=ICURRL1+1                           ! Next field       GRS3F304.293    
            DO I=1,LEN1_LOOKUP                                             GRS3F304.294    
              IPPLOOK(I)=PPLOOK(I,ICURRL1)                                 GRS3F304.295    
            ENDDO                                                          GRS3F304.296    
C Field and buffer sizes, and field address in D1                          GRS3F304.297    
            FIELD_LENGTH =IPPLOOK(LBLREC)                                  GRS3F304.298    
            BUFFER_LENGTH=((FIELD_LENGTH+um_sector_size-1)/                GBC0F403.101    
     2       um_sector_size)*um_sector_size                                GBC0F403.102    
*IF -DEF,MPP                                                               GSM2F404.93     
            FIELD_ADDRESS=IPPLOOK(NADDR)                                   GRS3F304.300    
*ENDIF                                                                     GSM2F404.94     
C Section/Item codes                                                       GRS3F304.301    
            IS=IPPLOOK(ITEM_CODE)/1000                                     GRS3F304.302    
            IM=IPPLOOK(ITEM_CODE)-1000*IS                                  GRS3F304.303    
C Packing accuracy of the data :-                                          GRS3F304.304    
C NB: Presence of extra data disables packing for this field               GRS3F304.305    
            IF (PACKING.AND.(IPPLOOK(LBEXT).LE.0)) THEN                    GRS3F304.306    
              COMP_ACCRCY=                                                 GRS3F304.307    
     &     EXPPXI(modl,IS,IM,ppx_packing_acc+PP_PACK_CODE(PPUNIT)-1,       GSS1F305.583    
*CALL ARGPPX                                                               GSS1F305.584    
     &                                 ICODE,CMESSAGE)                     GSS1F305.585    
              LPACKFIELD=.TRUE.                                            GRS3F304.309    
            ELSE                                                           GRS3F304.310    
              COMP_ACCRCY=-99                                              GRS3F304.311    
              LPACKFIELD=.FALSE.                                           GRS3F304.312    
            ENDIF                                                          GRS3F304.313    
*IF DEF,MPP                                                                GSM2F404.95     
              IF(mype.eq.0)THEN                                            GSM2F404.96     
                CALL SETPOS_single(PPUNIT,IWA,ICODE)                       GSM2F404.97     
              ENDIF                                                        GSM2F404.98     
              SUBM=SUBMODEL_FOR_SM(im_ident)                               GSM2F404.99     
!             Check that decomposition type is up to date.                 GSM2F404.100    
              D1POS=STLIST(st_d1pos,IE)                                    GSM2F404.101    
              orig_decomp=current_decomp_type                              GSM2F404.102    
              new_decomp=orig_decomp                                       GSM2F404.103    
                                                                           GSM2F404.104    
              IF ((D1_ADDR(d1_imodl,D1POS,SUBM) .EQ. ATMOS_IM) .AND.       GSM2F404.105    
     &          (orig_decomp .NE. decomp_standard_atmos)) THEN             GSM2F404.106    
                                                                           GSM2F404.107    
                new_decomp=decomp_standard_atmos                           GSM2F404.108    
                                                                           GSM2F404.109    
              ELSEIF ((D1_ADDR(d1_imodl,D1POS,SUBM) .EQ. OCEAN_IM) .AND.   GSM2F404.110    
     &            (D1_ADDR(d1_object_type,D1POS,SUBM) .EQ. prognostic)     GSM2F404.111    
     &            .AND. (orig_decomp .NE. decomp_standard_ocean)) THEN     GSM2F404.112    
                                                                           GSM2F404.113    
                new_decomp=decomp_standard_ocean                           GSM2F404.114    
                                                                           GSM2F404.115    
              ELSEIF ((D1_ADDR(d1_imodl,D1POS,SUBM) .EQ. OCEAN_IM) .AND.   GSM2F404.116    
     &            (D1_ADDR(d1_object_type,D1POS,SUBM) .NE. prognostic)     GSM2F404.117    
     &            .AND. (orig_decomp .NE. decomp_nowrap_ocean)) THEN       GSM2F404.118    
                                                                           GSM2F404.119    
                new_decomp=decomp_nowrap_ocean                             GSM2F404.120    
                                                                           GSM2F404.121    
              ENDIF                                                        GSM2F404.122    
                                                                           GSM2F404.123    
              IF (new_decomp .NE. orig_decomp) THEN                        GSM2F404.124    
                                                                           GSM2F404.125    
                icode=0                                                    GSM2F404.126    
                CALL CHANGE_DECOMPOSITION(new_decomp,icode)                GSM2F404.127    
                                                                           GSM2F404.128    
                IF (icode .NE. 0) THEN                                     GSM2F404.129    
                  IF (mype .EQ. 0) THEN                                    GSM2F404.130    
                    WRITE(6,*) 'ERROR : MEAN_DIAG'                         GSM2F404.131    
                    WRITE(6,*) 'Failed to change decomposition to ',       GSM2F404.132    
     &                new_decomp                                           GSM2F404.133    
                    WRITE(6,*) 'Field M,S,I ',                             GSM2F404.134    
     &                D1_ADDR(d1_imodl,D1POS,SUBM),                        GSM2F404.135    
     &                D1_ADDR(d1_section,D1POS,SUBM),                      GSM2F404.136    
     &                D1_ADDR(d1_item,D1POS,SUBM)                          GSM2F404.137    
                  ENDIF                                                    GSM2F404.138    
                  CMESSAGE='MEANDIA2 : Failed to change decomposition'     GSM2F404.139    
                  GOTO 999                                                 GSM2F404.140    
                ENDIF                                                      GSM2F404.141    
                                                                           GSM2F404.142    
              ENDIF                                                        GSM2F404.143    
!             Gather full field to PE0                                     GSM2F404.144    
              CALL GENERAL_GATHER_FIELD(D1(FIELD_ADDRESS),buf,LOCAL_LEN,   GSM2F404.145    
     &          FIELD_LENGTH,D1_ADDR(1,STLIST(st_d1pos,IE),SUBM),0,        GSM2F404.146    
     &          ICODE,CMESSAGE)                                            GSM2F404.147    
              IF (ICODE .EQ. 1) THEN                                       GSM2F404.148    
                WRITE(6,*)'MEANDIA2: Field number ',IS,                    GSM2F404.149    
     &            'with dimensions ', N_COLS,' x ',                        GSM2F404.150    
     &            N_ROWS,' and gridtype ',                                 GSM2F404.151    
     &            D1_ADDR(d1_grid_type,STLIST(st_d1pos,IE),SUBM),          GSM2F404.152    
     &            'was unrecognized and not gathered.'                     GSM2F404.153    
                CMESSAGE='MEANDIA2: Unrecognized field on write'           GSM2F404.154    
                GOTO 999                                                   GSM2F404.155    
              ELSEIF (ICODE .NE. 0) THEN                                   GSM2F404.156    
                GOTO 999                                                   GSM2F404.157    
              ENDIF                                                        GSM2F404.158    
              IF (mype .EQ. 0) THEN                                        GSM2F404.159    
                CALL GRIB_FILE(LEN1_LOOKUP,PP_LEN_MEAN,PPLOOK,PPLOOK,      GSM2F404.160    
     &            ICURRL1,BUF,FIELD_LENGTH,                                GSM2F404.161    
     &            BUFFER_LENGTH,NUM_WORDS,PPUNIT,IWA,                      GSM2F404.162    
     &            GRIB_PACKING,ICODE,CMESSAGE)                             GSM2F404.163    
              ENDIF                                                        GSM2F404.164    
                                                                           GSM2F404.165    
              CALL GC_IBCAST(999,1,0,nproc,info,ICODE)                     GSM2F404.166    
              IF(ICODE.GT.0) THEN                                          GSM2F404.167    
                CMESSAGE=                                                  GSM2F404.168    
     &    'MEANDIA2: Error in GRIB_FILE - see ICODE for item'              GJC0F405.31     
                ICODE=1000*IS+IM                                           GSM2F404.170    
                GOTO 999                                                   GSM2F404.171    
              ENDIF                                                        GSM2F404.172    
              IWA=IWA+PPLOOK(LBNREC,ICURRL1) ! Next address                GSM2F404.173    
*ELSE                                                                      GSM2F404.174    
C Output the field from D1 to the PPfile with the requisite packing        GRS3F304.314    
            CALL GRIB_FILE(LEN1_LOOKUP,PP_LEN_MEAN,PPLOOK,PPLOOK,          GRS3F304.315    
     &                     ICURRL1,D1(FIELD_ADDRESS),FIELD_LENGTH,         GRS3F304.316    
     &                     BUFFER_LENGTH,NUM_WORDS,PPUNIT,IWA,             GRS3F304.317    
     &                     GRIB_PACKING,ICODE,CMESSAGE)                    GRS3F400.294    
            IF(ICODE.GT.0) THEN                                            GRS3F304.319    
            CMESSAGE='MEANDIA1: Error in GRIB_FILE - see ICODE for item'   GRS3F304.320    
              ICODE=1000*IS+IM                                             GRS3F304.321    
              GOTO 999                                                     GRS3F304.322    
            ENDIF                                                          GRS3F304.323    
            IWA=IWA+PPLOOK(LBNREC,ICURRL1)              ! Next address     GRS3F304.324    
*ENDIF                                                                     GSM2F404.175    
           ENDDO  ! End of loop over levels                                GRS3F304.325    
          ENDIF                                                            GRS3F304.326    
C                                                                          GRS3F304.327    
        ENDDO      ! End of loop over STASHlist entries                    GRS3F304.328    
                                                                           GRS3F304.329    
! reset PP_PACK_CODE for future use                                        GRS3F304.330    
                                                                           GRS3F304.331    
        PP_PACK_CODE(PPUNIT)=PP_PACK_CODE(PPUNIT)+100                      GRS3F304.332    
      ENDIF                                                                GRS3F304.333    
! --------------------------------------------------------------------     GRS3F304.334    
CL                                                                         MEANDIA2.441    
CL 4.3 Buffer LOOKUP headers from work array back to file and close it     MEANDIA2.442    
CL                                                                         MEANDIA2.443    
      CALL SETPOS(PPUNIT,WORD_ADDRESS,ICODE)                               GTD0F400.104    
      CALL BUFFOUT(PPUNIT,PPLOOK(1,1),LEN1_LOOKUP*PP_LEN_MEAN,LEN_IO,      MEANDIA2.445    
     *                                                          A_IO)      MEANDIA2.446    
      IF(A_IO.NE.-1.0.OR.LEN_IO.NE.LEN1_LOOKUP*PP_LEN_MEAN) THEN           MEANDIA2.447    
        CALL IOERROR('Buffer out of LOOKUP table   ',A_IO,LEN_IO,          MEANDIA2.448    
     *                LEN1_LOOKUP*PP_LEN_MEAN)                             MEANDIA2.449    
        CMESSAGE='MEANDIAG : Error writing PPfile LOOKUP table'            MEANDIA2.450    
        ICODE=314                                                          MEANDIA2.451    
        GOTO 999                                                           MEANDIA2.452    
      ENDIF                                                                MEANDIA2.453    
      LEN_PPNAME=LEN(PPNAME)                                               MEANDIA2.454    
      CALL FILE_CLOSE(PPUNIT,PPNAME,LEN_PPNAME,1,0,ICODE)                  GTD0F400.23     
CL----------------------------------------------------------------------   MEANDIA2.456    
CL 5. Construct mean PPfile processing requests and output to server       MEANDIA2.457    
!L    This deals with both "normal" and section 21-24 etc period means     GMG1F404.296    
CL                                                                         MEANDIA2.458    
      NFTPIPE = 8                                                          MEANDIA2.459    
      INDEXM = MEANLEV                                                     MEANDIA2.460    
*IF DEF,MPP                                                                GLW2F403.26     
      IF(mype.eq.0) THEN                                                   GLW2F403.27     
*ENDIF                                                                     GLW2F403.28     
      IF (I_AO.EQ.1 .or. I_AO.EQ.2) THEN                                   GDR3F305.290    
        IF (PPSELECTim(INDEXM,I_AO).EQ.1) THEN                             GDR3F305.291    
          IF (ARCHPPSELim(INDEXM,I_AO).EQ.1) THEN                          PXMEAND.1      
            IF (PLOTSELim(INDEXM,I_AO).GE.1) THEN                          PXMEAND.2      
              IF (MOD(STEP_DUMPS,MEAN_PERIOD*PLOTSELim(INDEXM,I_AO))       PXMEAND.3      
     &           .EQ.0) THEN                                               PXMEAND.4      
                WRITE(NFTPIPE,410) PPNAME   ! Archive and plot charts      PXMEAND.5      
              ELSE                                                         PXMEAND.6      
                WRITE(NFTPIPE,420) PPNAME   ! Archive without plotting     PXMEAND.7      
              ENDIF                                                        PXMEAND.8      
            ELSE                                                           PXMEAND.9      
              WRITE(NFTPIPE,420) PPNAME     ! Archive without plotting     PXMEAND.10     
            ENDIF                                                          PXMEAND.11     
          ELSE                                                             PXMEAND.12     
            IF (PLOTSELim(INDEXM,I_AO).GE.1) THEN                          PXMEAND.13     
              IF (MOD(STEP_DUMPS,MEAN_PERIOD*PLOTSELim(INDEXM,I_AO))       PXMEAND.14     
     &           .EQ.0) THEN                                               PXMEAND.15     
                WRITE(NFTPIPE,430) PPNAME   ! No archiving but plot        PXMEAND.16     
              ENDIF                                                        PXMEAND.17     
            ENDIF                                                          PXMEAND.18     
          ENDIF                                                            PXMEAND.19     
          IF (MEANWSim(INDEXM,I_AO).EQ."Y") THEN                           GDR3F305.297    
              WRITE(NFTPIPE,450) PPNAME       ! Transfer to workstation    MEANDIA2.478    
          ENDIF                                                            MEANDIA2.479    
            IF (PPUNIT.EQ.22.OR.PPUNIT.EQ.42.OR.(PPUNIT.GT.59.AND.         GLW6F403.2      
     &        PPUNIT.LT.68)) THEN                                          GLW6F403.3      
              IF (FT_SELECT(PPUNIT).EQ."Y") THEN                           GLW6F403.4      
                WRITE(NFTPIPE,440) PPNAME       ! Delete from Cray         GLW6F403.5      
              ENDIF                                                        GLW6F403.6      
            ELSE                                                           GLW6F403.7      
              WRITE(NFTPIPE,440) PPNAME       ! Delete from Cray           MEANDIA2.480    
            ENDIF                                                          GLW6F403.8      
        ENDIF                                                              MEANDIA2.481    
      ENDIF                                                                MEANDIA2.482    
*IF DEF,MPP                                                                GLW2F403.29     
      ENDIF                                                                GLW2F403.30     
*ENDIF                                                                     GLW2F403.31     
 410  FORMAT("%%% ",A14," ARCHIVE PPCHART")                                MEANDIA2.507    
 420  FORMAT("%%% ",A14," ARCHIVE PPNOCHART")                              MEANDIA2.508    
 430  FORMAT("%%% ",A14," PLOTONLY PPCHART")                               MEANDIA2.509    
 440  FORMAT("%%% ",A14," DELETE")                                         MEANDIA2.510    
 450  FORMAT("%%% ",A14," HPSEND")                                         MEANDIA2.511    
CL----------------------------------------------------------------------   MEANDIA2.512    
 999  CONTINUE                                                             MEANDIA2.513    
      RETURN                                                               MEANDIA2.514    
      END                                                                  MEANDIA2.515    
*ENDIF                                                                     MEANDIA2.516