*IF DEF,C84_1A,OR,DEF,FLDOP                                                UIE3F404.41     
C ******************************COPYRIGHT******************************    GTS2F400.7471   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.7472   
C                                                                          GTS2F400.7473   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.7474   
C restrictions as set forth in the contract.                               GTS2F400.7475   
C                                                                          GTS2F400.7476   
C                Meteorological Office                                     GTS2F400.7477   
C                London Road                                               GTS2F400.7478   
C                BRACKNELL                                                 GTS2F400.7479   
C                Berkshire UK                                              GTS2F400.7480   
C                RG12 2SZ                                                  GTS2F400.7481   
C                                                                          GTS2F400.7482   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.7483   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.7484   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.7485   
C Modelling at the above address.                                          GTS2F400.7486   
C ******************************COPYRIGHT******************************    GTS2F400.7487   
C                                                                          GTS2F400.7488   
CLL  SUBROUTINE PPHEAD------------------------------------------           PPHEAD1A.3      
CLL                                                                        PPHEAD1A.4      
CLL  Creates a 64 word PP header from the the following:-                  PPHEAD1A.5      
CLL  1)  PP_XREF (PP cross-reference array record for this sect/item)      PPHEAD1A.6      
CLL  2)  FIXED length header                                               PPHEAD1A.7      
CLL  3)  INTEGER constants array                                           PPHEAD1A.8      
CLL  4)  REAL constants array                                              PPHEAD1A.9      
CLL  5)  Some input arguments                                              PPHEAD1A.10     
CLL                                                                        PPHEAD1A.11     
CLL  Tested under compiler CFT77                                           PPHEAD1A.12     
CLL  Tested under OS version 5.1                                           PPHEAD1A.13     
CLL                                                                        PPHEAD1A.14     
CLL T.Johns     <- programmer of some or all of previous code or changes   PPHEAD1A.15     
CLL                                                                        PPHEAD1A.16     
CLL  Model            Modification history from model version 3.0:         PPHEAD1A.17     
CLL version  Date                                                          PPHEAD1A.18     
CLL   3.2    13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for          TS150793.117    
CLL                   portability.  Author Tracey Smith.                   TS150793.118    
CLL   3.2  27/05/93  Code for new real missing data indicator. (TCJ)       TJ050593.127    
CLL   3.5  05/06/95  Remove PP_XREF from argument list and call            GKR0F305.843    
CLL                  EXPPXI instead, for submodels work. K Rogers          GKR0F305.844    
CLL   4.0  12/09/95  LBUSER(3) [PP_INT_HEAD(LBUSER3)] set to 0.            GAB1F400.13     
CLL                  LBCODE set to 31300 + 20 (for Gregorian calendar)     GAB1F400.14     
CLL                  or 31300 + 23 (for any other calendar type), if       GAB1F400.15     
CLL                  the field is a timeseries.                            GAB1F400.16     
CLL                  BRLEV, BHRLEV, BULEV[BRSVD1] and BHULEV[BRSVD2]       GAB1F400.17     
CLL                  contain lower level boundary and upper level bndry    GAB1F400.18     
CLL                  information. Above changes agreed by the WGDUM in     GAB1F400.19     
CLL                  first half of 1994. Code for new LBEXP experiment     GAB1F400.20     
CLL                  name encoding. Also removed RUN_INDIC_OP from arg     GAB1F400.21     
CLL                  list as it is called from CHISTORY  (Andy Brady)      GAB1F400.22     
CLL  4.0  12/10/95  Set Lookup(model_code) to internal model ident. RTHB   GRB1F400.92     
CLL  4.1  18/04/96  RUN_ID now declared in CHISTORY.  RTHBarnes.           WRB1F401.693    
CLL  4.1    Apr. 96  Rationalise *CALLs  S.J.Swarbrick                     GSS1F401.53     
!LL  4.3    14/02/97 Correct bug where ocean models can try to access      GPB0F403.26     
!LL                  uninitialised BKH array               P.Burton        GPB0F403.27     
!LL  4.5    14/05/98 Put the correct data type into PP header              GPB0F405.100    
!LL                                                  P.Burton              GPB0F405.101    
!LL  4.5  14/10/97   Set correct packing type for platform                 GDG1F405.1      
!LL                  Author D.M. Goddard                                   GDG1F405.2      
!LL  4.5    02/09/98 Set Projection No for High Res Global. D. Robinson.   GDR8F405.49     
CLL                                                                        PPHEAD1A.19     
CLL  Programming standard: U M DOC  Paper NO. 4,                           PPHEAD1A.20     
CLL                                                                        PPHEAD1A.21     
CLL  Logical components covered: D40                                       PPHEAD1A.22     
CLL                                                                        PPHEAD1A.23     
CLL  Project TASK: C4                                                      PPHEAD1A.24     
CLL                                                                        PPHEAD1A.25     
CLL  External documentation  C4                                            PPHEAD1A.26     
CLL                                                                        PPHEAD1A.27     
CLLEND-------------------------------------------------------------        PPHEAD1A.28     
                                                                           PPHEAD1A.29     
C                                                                          PPHEAD1A.30     
C*L  INTERFACE and ARGUMENTS:------------------------------------------    PPHEAD1A.31     

      SUBROUTINE PP_HEAD(                                                   5,9GKR0F305.845    
*CALL ARGPPX                                                               GKR0F305.846    
     *    im_ident,FIXHD,INTHD,REALHD,                                     GKR0F305.847    
     1    LEN_FIXHD,LEN_INTHD,LEN_REALHD,IE,IS,GR,                         PPHEAD1A.34     
     2    lfullfield,LEVEL,pseudo_level,                                   GKR0F305.848    
     3    samples,start,start_or_verif_time,end_or_data_time,pp_len,       PPHEAD1A.36     
     4    extraw,PP_INT_HEAD,PP_REAL_HEAD,N_COLS_OUT,NUM_WORDS,            PPHEAD1A.37     
     5    LEN_BUF_WORDS,N_ROWS_OUT,NROW_IN,SROW_IN,WCOL_IN,ECOL_IN,        PPHEAD1A.38     
     5    lbproc_comp,                                                     PPHEAD1A.39     
     6    sample_prd,FCST_PRD,COMP_ACCRCY,PACKING_TYPE,                    GAB1F400.23     
     7    st_grid,IWA,AK,BK,AKH,BKH,T_levels,LevIndex,ROTATE,ELF,          GAB1F400.24     
     8    OCEAN,OCN_DZ,OCN_KM,                                             PPHEAD1A.42     
     9    ICODE,CMESSAGE)                                                  PPHEAD1A.43     
C*----------------------------------------------------------------         PPHEAD1A.44     
      IMPLICIT NONE                                                        PPHEAD1A.45     
                                                                           PPHEAD1A.46     
                                                                           PPHEAD1A.47     
      CHARACTER*(80) CMESSAGE !OUT OUT MESSAGE FROM ROUTINE                TS150793.119    
C                                                                          PPHEAD1A.49     
      LOGICAL                                                              PPHEAD1A.50     
     *  start         ! IN flag to control update for verif/start time     GO261093.63     
     *, OCEAN          !IN TRUE if processing an ocean diagnostic          PPHEAD1A.53     
     *, lfullfield     !IN TRUE if output field on full horiz domain       PPHEAD1A.54     
C                                                                          PPHEAD1A.55     
      INTEGER                                                              PPHEAD1A.56     
     *  start_or_verif_time(7) ! IN verif time/start time for means etc    PPHEAD1A.57     
     *, end_or_data_time(7)    ! IN data time/end time for means etc       PPHEAD1A.58     
     *, samples                ! IN no of samples in period (timeseries)   PPHEAD1A.59     
C                                                                          PPHEAD1A.60     
      INTEGER                                                              PPHEAD1A.61     
     *  ICODE             !IN    Return code from the routine              PPHEAD1A.62     
     *, im_ident          !IN    Internal model identifier                 GKR0F305.849    
     *, PP_LEN            !IN    Length of the lookup table                PPHEAD1A.63     
     *, LEN_FIXHD         !IN    Length of the Fixed Length constants      PPHEAD1A.64     
     *, LEN_INTHD         !IN    Length of the Integer Constants           PPHEAD1A.65     
     *, LEN_REALHD        !IN    Length of the Real Constants              PPHEAD1A.66     
     *, FIXHD(LEN_FIXHD)  !IN    Array of Fixed Constants                  PPHEAD1A.67     
     *, INTHD(LEN_INTHD)  !IN    Array of Integer Constants                PPHEAD1A.68     
     *, OCN_KM            !IN    number of ocean model levels              PPHEAD1A.69     
C                                                                          PPHEAD1A.70     
      INTEGER                                                              PPHEAD1A.71     
     *  st_grid           !IN    STASH horizontal grid type                PPHEAD1A.72     
     *, T_levels          !IN    No of model Press/Temp levels             GAB1F400.25     
     *, LevIndex          !IN    level index                               GAB1F400.26     
     *, N_ROWS_OUT        !IN    PPHORIZ_OUT=N_ROWS_OUT*N_COLS_OUT+extra   PPHEAD1A.73     
     *, N_COLS_OUT        !IN    PPHORIZ_OUT=N_COLS_OUT*N_ROWS_OUT+extra   PPHEAD1A.74     
     *, NROW_IN,SROW_IN   !IN    The most nrthrly/southerly row.           PPHEAD1A.75     
     *, WCOL_IN,ECOL_IN   !IN    The most westerly/easterly column         PPHEAD1A.76     
     *, pseudo_level      !IN    Output PP pseudo-level                    PPHEAD1A.77     
     *, NUM_OUT           !IN    Number of compressed (32 BIT) words       PPHEAD1A.78     
     *, COMP_ACCRCY       !IN    PACKING ACCURACY IN POWER OF 2            PPHEAD1A.79     
     *, PACKING_TYPE      !IN   0 = No packing, 1 = WGDOS, 3 = GRIB        GO261093.64     
      INTEGER                                                              PPHEAD1A.80     
     *  U_ROWS            !IN    NO OF U,V, ROWS                           PPHEAD1A.81     
     *, P_ROWS            !IN    PRESS/TEMP ROWS                           PPHEAD1A.82     
     *, NUM_WORDS         !IN    Number of 64 Bit words to hold DATA       PPHEAD1A.83     
     &, extraw            !IN    Number of extra-data words                PPHEAD1A.84     
     *, LEN_BUF_WORDS     !IN    Number of 64 Bit words (rounded to 512)   PPHEAD1A.85     
     *, IWA               !IN    Start word address.                       PPHEAD1A.86     
     *, IE                !IN    Item Number                               PPHEAD1A.87     
     *, IS                !IN    Section Number                            PPHEAD1A.88     
     *, GR                !IN    Grid point code                           PPHEAD1A.89     
     *, FCST_PRD          !IN    Forecast period                           PPHEAD1A.90     
     *, LBPROC_COMP(14)   !IN    Subcomponents(0/1) to make up LBPROC      PPHEAD1A.92     
     *, PP_INT_HEAD(PP_LEN)          !OUT  Integer Lookup table            PPHEAD1A.94     
C                                                                          PPHEAD1A.95     
      REAL                                                                 PPHEAD1A.96     
     *  PP_REAL_HEAD(PP_LEN)!OUT Real Lookup table                         PPHEAD1A.97     
     *, REALHD(LEN_REALHD)  !IN  Real header                               PPHEAD1A.98     
     *, LEVEL               !IN  Output PP level(REAL)                     PPHEAD1A.99     
     *, sample_prd          !IN  Sampling period in hours for time mean    PPHEAD1A.100    
     *, AK(T_levels)        !IN  Hybrid coord Ak at full level             GAB1F400.27     
     *, BK(T_levels)        !IN  Hybrid coord Bk at full level             GAB1F400.28     
     *, AKH(T_levels+1)     !IN  Hybrid coord Ak at half level             GAB1F400.29     
     *, BKH(T_levels+1)     !IN  Hybrid coord Bk at half level             GAB1F400.30     
     *, OCN_DZ(OCN_KM)      !IN  ocean depths at KM levels                 PPHEAD1A.103    
C                                                                          PPHEAD1A.104    
C*---------------------------------------------------------------------    PPHEAD1A.105    
*CALL CLOOKADD                                                             PPHEAD1A.106    
*CALL STPARAM                                                              PPHEAD1A.107    
*CALL CSUBMODL                                                             GKR0F305.850    
*CALL CPPXREF                                                              PPHEAD1A.108    
*CALL PPXLOOK  ! Contains *CALL VERSION                                    GSS1F401.54     
*CALL C_MDI                                                                TJ050593.128    
*CALL CHSUNITS                                                             GAB1F400.31     
*CALL CNTLALL                                                              GAB1F400.32     
*CALL CHISTORY                                                             GAB1F400.33     
                                                                           GKR0F305.853    
        EXTERNAL EXPPXI                                                    GKR0F305.854    
        EXTERNAL EXPT_ENC                                                  GAB1F400.34     
                                                                           GKR0F305.855    
C*L  WORKSPACE USAGE:-------------------------------------------------     PPHEAD1A.109    
C   DEFINE LOCAL WORKSPACE ARRAYS: None                                    PPHEAD1A.110    
C                                                                          PPHEAD1A.111    
C*---------------------------------------------------------------------    PPHEAD1A.112    
C    DEFINE LOCAL VARIABLES                                                PPHEAD1A.113    
      REAL                                                                 PPHEAD1A.114    
     *  ocn_depth     !     depth of ocean at level                        PPHEAD1A.115    
     *, ocn_depth_h   !     depth of ocean at half level                   GAB1F400.35     
      INTEGER                                                              PPHEAD1A.116    
     *  PP_LBFC       !     M08 Level code                                 PPHEAD1A.117    
     *, PP_LBTYP      !     M08 Field type code                            PPHEAD1A.118    
     *, PP_LBLEV      !     M08 Field level code                           PPHEAD1A.119    
     *, PP_IPROJ      !     M08 Projection number                          PPHEAD1A.120    
     *, PP_LBVC       !     Vertical coord type                            PPHEAD1A.121    
     *, II            !     Local Counter                                  PPHEAD1A.122    
     *, int_level     !     integer value of level                         PPHEAD1A.123    
     *, K             !     local counter                                  PPHEAD1A.124    
     *, IA,IB,IC      !     Component codes to make up LBTIM               PPHEAD1A.125    
     *, mean_code     !     spatial averaging code derived from GR         PPHEAD1A.126    
     *, lvcode        !     lv code                                        GKR0F305.856    
     *, EXPPXI        !     Function to extract ppxref info                GKR0F305.857    
     *, EXPTCODE      !     integer coded experiment name                  GAB1F400.36     
                                                                           PPHEAD1A.127    
      LOGICAL                                                              PPHEAD1A.128    
     *  ELF,                                                               PPHEAD1A.129    
     *  ROTATE                                                             PPHEAD1A.130    
C                                                                          PPHEAD1A.131    
CLL   Construct PP header                                                  PPHEAD1A.132    
C                                                                          PPHEAD1A.133    
C  Timestamps ----------------------------------------------------------   PPHEAD1A.134    
C                                                                          PPHEAD1A.135    
CL                                                                         PPHEAD1A.136    
CL Set up time info dependent on start flag.                               PPHEAD1A.137    
CL For all but time series start will be TRUE so all time information      PPHEAD1A.138    
CL will be set up from FIXHD in effect, but for time series start          PPHEAD1A.139    
CL will be set up by TEMPORAL and passed in, so that dump headers are      PPHEAD1A.140    
CL set correctly for such fields.                                          PPHEAD1A.141    
CL Note: end_or_data_time will be updated from current model time in       PPHEAD1A.142    
CL       FIXHD(28-34) for time means/accumulations etc.                    PPHEAD1A.143    
CL                                                                         PPHEAD1A.144    
      IF (start) THEN    ! start timestep so update start time             PPHEAD1A.145    
        PP_INT_HEAD(LBYR)=start_or_verif_time(1)                           PPHEAD1A.146    
        PP_INT_HEAD(LBMON)=start_or_verif_time(2)                          PPHEAD1A.147    
        PP_INT_HEAD(LBDAT)=start_or_verif_time(3)                          PPHEAD1A.148    
        PP_INT_HEAD(LBHR)=start_or_verif_time(4)                           PPHEAD1A.149    
        PP_INT_HEAD(LBMIN)=start_or_verif_time(5)                          PPHEAD1A.150    
        PP_INT_HEAD(LBDAY)=start_or_verif_time(7)                          PPHEAD1A.151    
      ENDIF                                                                PPHEAD1A.152    
      PP_INT_HEAD(LBYRD)=end_or_data_time(1)                               PPHEAD1A.153    
      PP_INT_HEAD(LBMOND)=end_or_data_time(2)                              PPHEAD1A.154    
      PP_INT_HEAD(LBDATD)=end_or_data_time(3)                              PPHEAD1A.155    
      PP_INT_HEAD(LBHRD)=end_or_data_time(4)                               PPHEAD1A.156    
      PP_INT_HEAD(LBMIND)=end_or_data_time(5)                              PPHEAD1A.157    
      PP_INT_HEAD(LBDAYD)=end_or_data_time(7)                              PPHEAD1A.158    
C                                                                          PPHEAD1A.159    
C  Secondary time information ------------------------------------------   PPHEAD1A.160    
C                                                                          PPHEAD1A.161    
C LBTIM is 100*IA+10*IB+IC - this encodes the time processing type         PPHEAD1A.162    
C                                                                          PPHEAD1A.163    
      IA=INT(sample_prd)           ! Sampling period in whole hours        PPHEAD1A.164    
      IF(sample_prd.eq.0.0) THEN   ! NB: may be a fraction of an hour      PPHEAD1A.165    
        IB=1                       ! Forecast field                        PPHEAD1A.166    
      ELSE                                                                 PPHEAD1A.167    
        IF (IA.EQ.0) THEN                                                  PPHEAD1A.168    
          IA=1                     ! 0 < sample_prd < 1 counts as 1 hour   PPHEAD1A.169    
        ENDIF                                                              PPHEAD1A.170    
        IB=2                       ! Time mean or accumulation             PPHEAD1A.171    
      ENDIF                                                                PPHEAD1A.172    
      IC=FIXHD(8)                  ! Calendar (1: Gregorian, 2: 360 day)   PPHEAD1A.173    
C                                                                          PPHEAD1A.174    
      PP_INT_HEAD(LBTIM)=100*IA+10*IB+IC                                   PPHEAD1A.175    
      PP_INT_HEAD(LBFT)=FCST_PRD                                           PPHEAD1A.176    
C                                                                          PPHEAD1A.177    
C  Data length ---------------------------------------------------------   PPHEAD1A.178    
C                                                                          PPHEAD1A.179    
      PP_INT_HEAD(LBLREC)=NUM_WORDS                                        PPHEAD1A.180    
C                                                                          PPHEAD1A.181    
C  Grid code (determined from dump fixed-length header) ----------------   PPHEAD1A.182    
C                                                                          PPHEAD1A.183    
      IF (samples.EQ.0) THEN                                               GAB1F400.40     
C       Field is not a timeseries                                          GAB1F400.41     
        IF(FIXHD(4).LT.100) THEN                                           GAB1F400.42     
          PP_INT_HEAD(LBCODE)=1   ! Regular lat/long grid                  GAB1F400.43     
        ELSE                                                               GAB1F400.44     
          PP_INT_HEAD(LBCODE)=101 ! lat/long grid non-std polar axis       GAB1F400.45     
        ENDIF                                                              GAB1F400.46     
      ELSE                                                                 PPHEAD1A.186    
C       Field is a timeseries                                              GAB1F400.47     
        PP_INT_HEAD(LBCODE)=31300                                          GAB1F400.48     
        IF (FIXHD(8).EQ.1) THEN                                            GAB1F400.49     
C         Calendar --  1: Gregorian                                        GAB1F400.50     
          PP_INT_HEAD(LBCODE)=PP_INT_HEAD(LBCODE)+20                       GAB1F400.51     
        ELSEIF (FIXHD(8).EQ.2) THEN                                        GAB1F400.52     
C         Calendar -- 360 day (Model Calendar)                             GAB1F400.53     
          PP_INT_HEAD(LBCODE)=PP_INT_HEAD(LBCODE)+23                       GAB1F400.54     
        ELSE                                                               GAB1F400.55     
C         Unknown calendar. Fail.                                          GAB1F400.56     
          ICODE=2                                                          GAB1F400.57     
      CMESSAGE='PPHEAD: unknown calender type in fixhd(8)'                 GJC0F405.35     
        ENDIF                                                              GAB1F400.59     
      ENDIF                                                                PPHEAD1A.188    
C                                                                          PPHEAD1A.189    
C  Hemispheric subregion indicator -------------------------------------   PPHEAD1A.190    
C                                                                          PPHEAD1A.191    
      IF (samples.GT.0 .OR. .NOT.lfullfield) THEN                          PPHEAD1A.192    
C  Field is a timeseries/trajectory or subdomain of the full model area    PPHEAD1A.193    
        PP_INT_HEAD(LBHEM)=3                                               PPHEAD1A.194    
      ELSEIF (FIXHD(4).LT.100) THEN                                        PPHEAD1A.195    
C  Otherwise, use the value for the full model area encoded in the dump    PPHEAD1A.196    
        PP_INT_HEAD(LBHEM)=FIXHD(4)                                        PPHEAD1A.197    
      ELSE                                                                 PPHEAD1A.198    
        PP_INT_HEAD(LBHEM)=FIXHD(4)-100                                    PPHEAD1A.199    
      ENDIF                                                                PPHEAD1A.200    
C                                                                          PPHEAD1A.201    
C  Field dimensions (rows x cols) --------------------------------------   PPHEAD1A.202    
C                                                                          PPHEAD1A.203    
      PP_INT_HEAD(LBROW)=N_ROWS_OUT                                        PPHEAD1A.204    
      PP_INT_HEAD(LBNPT)=N_COLS_OUT                                        PPHEAD1A.205    
C                                                                          PPHEAD1A.206    
C  'Extra data' length (now accomodates timeseries sampling data) ------   PPHEAD1A.207    
C                                                                          PPHEAD1A.208    
      PP_INT_HEAD(LBEXT)=extraw                                            PPHEAD1A.209    
C                                                                          PPHEAD1A.210    
C  Packing method indicator (new definition introduced at vn2.8)--------   PPHEAD1A.211    
*IF DEF,CRAY,AND,DEF,T3E                                                   GDG1F405.3      
       IF(PACKING_TYPE.EQ.1)THEN    ! WGDOS packing                        GDG1F405.4      
         PP_INT_HEAD(LBPACK)=03001                                         GDG1F405.5      
       ELSEIF(PACKING_TYPE.EQ.3)THEN ! GRIB packing                        GDG1F405.6      
         PP_INT_HEAD(LBPACK)=04003                                         GDG1F405.7      
       ELSEIF(PACKING_TYPE.EQ.0)THEN ! No packing                          GDG1F405.8      
         PP_INT_HEAD(LBPACK)=03000                                         GDG1F405.9      
       ELSE                                                                GDG1F405.10     
         ICODE=1                                                           GDG1F405.11     
         CMESSAGE='PPHEAD  Packing type undefined'                         GDG1F405.12     
         PP_INT_HEAD(LBPACK)=03000                                         GDG1F405.13     
      ENDIF                                                                GDG1F405.14     
*ENDIF                                                                     GDG1F405.15     
*IF DEF,CRAY,AND,-DEF,T3E                                                  GDG1F405.16     
       IF(PACKING_TYPE.EQ.1)THEN    ! WGDOS packing                        GDG1F405.17     
         PP_INT_HEAD(LBPACK)=02001                                         GDG1F405.18     
       ELSEIF(PACKING_TYPE.EQ.3)THEN ! GRIB packing                        GDG1F405.19     
         PP_INT_HEAD(LBPACK)=04003                                         GDG1F405.20     
       ELSEIF(PACKING_TYPE.EQ.0)THEN ! No packing                          GDG1F405.21     
         PP_INT_HEAD(LBPACK)=02000                                         GDG1F405.22     
       ELSE                                                                GDG1F405.23     
         ICODE=1                                                           GDG1F405.24     
         CMESSAGE='PPHEAD  Packing type undefined'                         GDG1F405.25     
         PP_INT_HEAD(LBPACK)=02000                                         GDG1F405.26     
      ENDIF                                                                GDG1F405.27     
*ENDIF                                                                     GDG1F405.28     
*IF -DEF,CRAY                                                              PXPPHEAD.1      
       IF(PACKING_TYPE.EQ.1)THEN    ! WGDOS packing                        GDG1F405.30     
         PP_INT_HEAD(LBPACK)=00001                                         GDG1F405.31     
       ELSEIF(PACKING_TYPE.EQ.3)THEN ! GRIB packing                        GDG1F405.32     
         PP_INT_HEAD(LBPACK)=00003                                         GDG1F405.33     
       ELSEIF(PACKING_TYPE.EQ.0)THEN ! No packing                          GDG1F405.34     
         PP_INT_HEAD(LBPACK)=00000                                         GDG1F405.35     
       ELSE                                                                GDG1F405.36     
         ICODE=1                                                           GDG1F405.37     
         CMESSAGE='PPHEAD  Packing type undefined'                         GDG1F405.38     
         PP_INT_HEAD(LBPACK)=00000                                         GDG1F405.39     
      ENDIF                                                                GDG1F405.40     
*ENDIF                                                                     GDG1F405.41     
C                                                                          PPHEAD1A.219    
C  PP header release no ------------------------------------------------   PPHEAD1A.220    
C                                                                          PPHEAD1A.221    
      PP_INT_HEAD(LBREL)=2                                                 PPHEAD1A.222    
C                                                                          PPHEAD1A.223    
C  Primary fieldcode (some hardwiring for ELF winds) -------------------   PPHEAD1A.224    
C  Secondary fieldcode not used currently                                  PPHEAD1A.225    
C                                                                          PPHEAD1A.226    
      PP_LBFC=EXPPXI(im_ident, is, ie, ppx_field_code,                     GKR0F305.858    
*CALL ARGPPX                                                               GKR0F305.859    
     &               icode, cmessage)                                      GKR0F305.860    
      IF(ELF.AND..NOT.ROTATE) THEN  ! ELF winds are in x,y direction       PPHEAD1A.228    
        IF(PP_LBFC.EQ.56) PP_LBFC=48                                       PPHEAD1A.229    
        IF(PP_LBFC.EQ.57) PP_LBFC=49                                       PPHEAD1A.230    
      ENDIF                                                                PPHEAD1A.231    
      PP_INT_HEAD(LBFC)=PP_LBFC                                            PPHEAD1A.232    
      PP_INT_HEAD(LBCFC)=0                                                 PPHEAD1A.233    
C                                                                          PPHEAD1A.234    
C  Processing code (encodes several things in one field) ---------------   PPHEAD1A.235    
C                                                                          PPHEAD1A.236    
      PP_INT_HEAD(LBPROC)=0                                                PPHEAD1A.237    
      DO II=14,1,-1                                                        PPHEAD1A.238    
        PP_INT_HEAD(LBPROC)=PP_INT_HEAD(LBPROC)*2+LBPROC_COMP(II)          PPHEAD1A.239    
      ENDDO                                                                PPHEAD1A.240    
C                                                                          PPHEAD1A.241    
C  Vertical coordinate type --------------------------------------------   PPHEAD1A.242    
C  Vertical coordinate type for reference level not coded                  PPHEAD1A.243    
C                                                                          PPHEAD1A.244    
      PP_LBVC=EXPPXI(im_ident, is, ie, ppx_lbvc_code,                      GKR0F305.861    
*CALL ARGPPX                                                               GKR0F305.862    
     &               icode, cmessage)                                      GKR0F305.863    
      PP_INT_HEAD(LBVC)=PP_LBVC                                            PPHEAD1A.246    
      PP_INT_HEAD(LBRVC)=0                                                 PPHEAD1A.247    
C                                                                          PPHEAD1A.248    
C  Experiment number coded from EXPT_ID and JOB_ID for non                 GAB1F400.60     
C  operational set to RUN_INDIC_OP for operational use.                    GAB1F400.61     
C                                                                          PPHEAD1A.250    
      IF (MODEL_STATUS.NE.'Operational') THEN                              GAB1F400.62     
        RUN_ID(1:4)=EXPT_ID                                                GAB1F400.63     
        RUN_ID(5:5)=JOB_ID                                                 GAB1F400.64     
C  Function EXPT_ENC will encode the run_id into a unique integer          GAB1F400.65     
        CALL EXPT_ENC(RUN_ID,EXPTCODE,ICODE,CMESSAGE)                      GAB1F400.66     
C  We do not return here. We wait until the end of the subroutine.         GAB1F400.67     
        PP_INT_HEAD(LBEXP)=EXPTCODE          ! LBEXP                       GAB1F400.68     
      ELSE                                                                 GAB1F400.69     
        PP_INT_HEAD(LBEXP)=RUN_INDIC_OP      ! LBEXP (ITAB)                GAB1F400.70     
      ENDIF                                                                GAB1F400.71     
C                                                                          PPHEAD1A.252    
C  Direct access dataset start address and no of records ---------------   PPHEAD1A.253    
C                                                                          PPHEAD1A.254    
      PP_INT_HEAD(LBEGIN)=IWA                                              PPHEAD1A.255    
      PP_INT_HEAD(LBNREC)=LEN_BUF_WORDS                                    PPHEAD1A.256    
C                                                                          PPHEAD1A.257    
C  Operational fieldsfile projection no, fieldtype + level codes -------   PPHEAD1A.258    
C  These are hardwired according to model resolution                       PPHEAD1A.259    
C                                                                          PPHEAD1A.260    
      IF(INTHD(6).EQ.192) THEN                                             PPHEAD1A.261    
        PP_IPROJ=802                                                       PPHEAD1A.262    
      ELSE IF(INTHD(6).EQ.288) THEN                                        PPHEAD1A.263    
        PP_IPROJ=800                                                       PPHEAD1A.264    
      ELSE IF(INTHD(6).EQ.96) THEN                                         PPHEAD1A.265    
        PP_IPROJ=870                                                       PPHEAD1A.266    
       ELSE IF(INTHD(6).EQ.432) THEN                                       GDR8F405.50     
         PP_IPROJ=800                                                      GDR8F405.51     
      ELSE                                                                 PPHEAD1A.267    
        PP_IPROJ=900                                                       PPHEAD1A.268    
      ENDIF                                                                PPHEAD1A.269    
      PP_LBTYP=EXPPXI(im_ident, is, ie, ppx_meto8_fieldcode,               GKR0F305.864    
*CALL ARGPPX                                                               GKR0F305.865    
     &               icode, cmessage)                                      GKR0F305.866    
      lvcode=EXPPXI(im_ident, is, ie, ppx_lv_code,                         GAB1F400.72     
*CALL ARGPPX                                                               GAB1F400.73     
     &             icode, cmessage)                                        GAB1F400.74     
      IF(LEVEL.EQ.-1.0) THEN                                               PPHEAD1A.271    
        PP_LBLEV=EXPPXI(im_ident, is, ie, ppx_meto8_levelcode,             GKR0F305.867    
*CALL ARGPPX                                                               GKR0F305.868    
     &               icode, cmessage)   ! levelcode 9999 or 8888           GKR0F305.869    
      ELSE                                                                 PPHEAD1A.276    
        IF (im_ident .eq. atmos_im) THEN                                   GPB0F403.28     
          IF (lvcode.eq.ppx_half_level.and.BKH(LevIndex).eq.1.0) THEN      GPB0F403.29     
! NB: If BK indicates surface hybrid level, reset LBLEV to correspond      GPB0F403.30     
            PP_LBLEV=ppx_meto8_surf                                        GPB0F403.31     
          ELSE                                                             GPB0F403.32     
            PP_LBLEV=LEVEL+0.00001                                         GPB0F403.33     
          ENDIF                                                            GPB0F403.34     
        ELSE                                                               GPB0F403.35     
          PP_LBLEV=LEVEL+0.00001                                           GPB0F403.36     
        ENDIF                                                              GPB0F403.37     
      ENDIF                                                                PPHEAD1A.278    
      PP_INT_HEAD(LBPROJ)=PP_IPROJ                                         PPHEAD1A.279    
      PP_INT_HEAD(LBTYP)=PP_LBTYP                                          PPHEAD1A.280    
      PP_INT_HEAD(LBLEV)=PP_LBLEV                                          PPHEAD1A.281    
C                                                                          PPHEAD1A.282    
C  Reserved slots for future expansion ---------------------------------   PPHEAD1A.283    
C                                                                          PPHEAD1A.284    
      PP_INT_HEAD(LBRSVD1)=0                                               PPHEAD1A.285    
      PP_INT_HEAD(LBRSVD2)=0                                               PPHEAD1A.286    
      PP_INT_HEAD(LBRSVD3)=0                                               PPHEAD1A.287    
      PP_INT_HEAD(LBRSVD4)=0                                               PPHEAD1A.288    
C                                                                          PPHEAD1A.289    
C  Spare for user's use ------------------------------------------------   PPHEAD1A.290    
C                                                                          PPHEAD1A.291    
      PP_INT_HEAD(LBSRCE)=1111                                             PPHEAD1A.292    
C                                                                          PPHEAD1A.293    
! Data type - extract from PPXREF                                          GPB0F405.102    
      PP_INT_HEAD(DATA_TYPE)=EXPPXI(im_ident, is, ie, ppx_data_type,       GPB0F405.103    
*CALL ARGPPX                                                               GPB0F405.104    
     &                              icode, cmessage)                       GPB0F405.105    
C                                                                          PPHEAD1A.297    
C  Address within dump or PP file --------------------------------------   PPHEAD1A.298    
C                                                                          PPHEAD1A.299    
      PP_INT_HEAD(NADDR)=IWA                                               PPHEAD1A.300    
C                                                                          PPHEAD1A.301    
C  LBUSER3 is not currently used (ie set to 0).                            GAB1F400.76     
C                                                                          PPHEAD1A.303    
      PP_INT_HEAD(LBUSER3)=0                                               GAB1F400.77     
C                                                                          PPHEAD1A.305    
C  STASH section/item code ---------------------------------------------   PPHEAD1A.306    
C                                                                          PPHEAD1A.307    
      PP_INT_HEAD(ITEM_CODE)=IS*1000+IE                                    PPHEAD1A.308    
C                                                                          PPHEAD1A.309    
C  STASH pseudo-level (for fields which have pseudo-levels defined) ----   PPHEAD1A.310    
C                                                                          PPHEAD1A.311    
      PP_INT_HEAD(LBPLEV)=pseudo_level                                     PPHEAD1A.312    
C                                                                          PPHEAD1A.313    
C  Spare for user's use ------------------------------------------------   PPHEAD1A.314    
C                                                                          PPHEAD1A.315    
      PP_INT_HEAD(LBUSER6)=0                                               PPHEAD1A.316    
      PP_INT_HEAD(MODEL_CODE) = im_ident                                   GRB1F400.93     
C                                                                          PPHEAD1A.318    
C  Reserved for future PP package use ----------------------------------   PPHEAD1A.319    
C                                                                          PPHEAD1A.320    
      PP_REAL_HEAD(BRSVD3)=0.0                                             PPHEAD1A.323    
      PP_REAL_HEAD(BRSVD4)=0.0                                             PPHEAD1A.324    
      PP_REAL_HEAD(BDATUM)=0.0                                             PPHEAD1A.325    
      PP_REAL_HEAD(BACC)=COMP_ACCRCY ! packing accuracy stored as real     PPHEAD1A.326    
C                                                                          PPHEAD1A.327    
C  Vertical grid description -------------------------------------------   PPHEAD1A.328    
C  Level and reference level                                               PPHEAD1A.329    
C                                                                          PPHEAD1A.330    
      IF(PP_LBVC.GE.126.AND.PP_LBVC.LE.139) THEN ! Special codes           GAB1F400.78     
C                                                  (surf botttom,          GAB1F400.79     
C                                                   top all zero)          GAB1F400.80     
        PP_REAL_HEAD(BLEV)=0.0                                             PPHEAD1A.333    
        PP_REAL_HEAD(BHLEV)=0.0                                            PPHEAD1A.334    
        PP_REAL_HEAD(BRLEV)=0.0                                            GAB1F400.81     
        PP_REAL_HEAD(BHRLEV)=0.0                                           GAB1F400.82     
        PP_REAL_HEAD(BULEV)=0.0                                            GAB1F400.83     
        PP_REAL_HEAD(BHULEV)=0.0                                           GAB1F400.84     
      ELSEIF(PP_LBVC.EQ.9) THEN      ! Hybrid/ETA levels                   GAB1F400.85     
        lvcode=EXPPXI(im_ident, is, ie, ppx_lv_code,                       GAB1F400.86     
*CALL ARGPPX                                                               GAB1F400.87     
     &    icode, cmessage)                                                 GAB1F400.88     
        IF (lvcode.EQ.ppx_half_level) THEN ! model levels                  GAB1F400.89     
          PP_REAL_HEAD(BLEV)=BKH(LevIndex)                                 GAB1F400.90     
          PP_REAL_HEAD(BHLEV)=AKH(LevIndex)                                GAB1F400.91     
          IF(LevIndex.eq.1) THEN                                           GAB1F400.92     
C           This case for surface eta diags. Halflevel below               GAB1F400.93     
C           surface does not exist.                                        GAB1F400.94     
            PP_REAL_HEAD(BRLEV)=BKH(LevIndex)                              GAB1F400.95     
            PP_REAL_HEAD(BHRLEV)=AKH(LevIndex)                             GAB1F400.96     
          ELSE                                                             GAB1F400.97     
            PP_REAL_HEAD(BRLEV)=BK(LevIndex-1)                             GAB1F400.98     
            PP_REAL_HEAD(BHRLEV)=AK(LevIndex-1)                            GAB1F400.99     
          ENDIF                                                            GAB1F400.100    
          IF(LevIndex.eq.T_levels+1) THEN                                  GAB1F400.101    
C           This case for eta diags at top of atmosphere.                  GAB1F400.102    
C           Half level above toa does not exist.                           GAB1F400.103    
            PP_REAL_HEAD(BULEV)=BKH(LevIndex)                              GAB1F400.104    
            PP_REAL_HEAD(BHULEV)=AKH(LevIndex)                             GAB1F400.105    
          ELSE                                                             GAB1F400.106    
            PP_REAL_HEAD(BULEV)=BK(LevIndex)                               GAB1F400.107    
            PP_REAL_HEAD(BHULEV)=AK(LevIndex)                              GAB1F400.108    
          ENDIF                                                            GAB1F400.109    
        ELSE                                             ! half levels     GAB1F400.110    
          PP_REAL_HEAD(BLEV)=BK(LevIndex)                                  GAB1F400.111    
          PP_REAL_HEAD(BHLEV)=AK(LevIndex)                                 GAB1F400.112    
          PP_REAL_HEAD(BRLEV)=BKH(LevIndex)                                GAB1F400.113    
          PP_REAL_HEAD(BHRLEV)=AKH(LevIndex)                               GAB1F400.114    
          PP_REAL_HEAD(BULEV)=BKH(LevIndex+1)                              GAB1F400.115    
          PP_REAL_HEAD(BHULEV)=AKH(LevIndex+1)                             GAB1F400.116    
        ENDIF                                                              GAB1F400.117    
      ELSEIF (PP_LBVC.EQ.2.AND.OCEAN) THEN ! Depth levels                  GAB1F400.118    
        PP_REAL_HEAD(BHRLEV)=0.0                                           GAB1F400.119    
        PP_REAL_HEAD(BHULEV)=0.0                                           GAB1F400.120    
        int_level=level                                                    PPHEAD1A.340    
        lvcode=EXPPXI(im_ident, is, ie, ppx_lv_code,                       GKR0F305.870    
*CALL ARGPPX                                                               GKR0F305.871    
     &               icode, cmessage)                                      GKR0F305.872    
C ocn_depth defined for ocean full levels (e.g. temperature), and          GAB1F400.121    
C ocn_depth_h for ocean half-levels (e.g. vertical velocity)               GAB1F400.122    
        ocn_depth=0.5*OCN_DZ(1)                                            GAB1F400.123    
        ocn_depth_h=0.                                                     GAB1F400.124    
        IF (int_level.GT.1) THEN                                           GAB1F400.125    
          DO K=2,int_level                                                 GAB1F400.126    
C           Loop over levels calculating half levels as we go.             GAB1F400.127    
            ocn_depth=ocn_depth+0.5*(OCN_DZ(K-1)+OCN_DZ(K))                GAB1F400.128    
                                                                           GAB1F400.129    
            ocn_depth_h=ocn_depth_h+OCN_DZ(K-1)                            GAB1F400.130    
          END DO                                                           GAB1F400.131    
        ENDIF                                                              GAB1F400.132    
        IF (lvcode.EQ.ppx_half_level) THEN                                 GAB1F400.133    
          PP_REAL_HEAD(BLEV)=ocn_depth_h                                   GAB1F400.134    
          PP_REAL_HEAD(BRLEV)=ocn_depth                                    GAB1F400.135    
          IF (int_level.EQ.1) THEN                                         GAB1F400.136    
            PP_REAL_HEAD(BULEV)=0.0 ! This level would be a                GAB1F400.137    
C                                     half level above the ocean.          GAB1F400.138    
C                                     Set to zero.                         GAB1F400.139    
          ELSE                                                             GAB1F400.140    
            PP_REAL_HEAD(BULEV)=ocn_depth_h-0.5*OCN_DZ(int_level-1)        GAB1F400.141    
          ENDIF                                                            GAB1F400.142    
        ELSE                                                               GAB1F400.143    
          PP_REAL_HEAD(BLEV)=ocn_depth                                     GAB1F400.144    
          PP_REAL_HEAD(BRLEV)=ocn_depth_h+OCN_DZ(int_level)                GAB1F400.145    
          PP_REAL_HEAD(BULEV)=ocn_depth_h                                  GAB1F400.146    
        ENDIF                                                              GAB1F400.147    
                                                                           GAB1F400.148    
        PP_REAL_HEAD(BHLEV)=0.0                                            PPHEAD1A.357    
      ELSE                                                                 PPHEAD1A.358    
        PP_REAL_HEAD(BLEV)=LEVEL                                           PPHEAD1A.359    
        PP_REAL_HEAD(BHLEV)=0.0                                            PPHEAD1A.360    
        PP_REAL_HEAD(BRLEV)=0.0  ! The boundary levels                     GAB1F400.149    
        PP_REAL_HEAD(BHRLEV)=0.0 ! are not known                           GAB1F400.150    
        PP_REAL_HEAD(BULEV)=0.0  ! for pressure                            GAB1F400.151    
        PP_REAL_HEAD(BHULEV)=0.0 ! levels.                                 GAB1F400.152    
      ENDIF                                                                PPHEAD1A.361    
C                                                                          PPHEAD1A.364    
C  Horizontal grid description -----------------------------------------   PPHEAD1A.365    
C  Position of pole (from dump fixed-length header)                        PPHEAD1A.366    
C  Grid orientation (hardwired 0.0)                                        PPHEAD1A.367    
C  Origin and spacing of grid (depends on output grid type)                PPHEAD1A.368    
C                                                                          PPHEAD1A.369    
      PP_REAL_HEAD(BPLAT)=REALHD(5)                                        PPHEAD1A.370    
      PP_REAL_HEAD(BPLON)=REALHD(6)                                        PPHEAD1A.371    
      PP_REAL_HEAD(BGOR)=0.0                                               PPHEAD1A.372    
      IF (samples.GT.0) THEN   ! Indicates a timeseries/trajectory         PPHEAD1A.373    
        PP_REAL_HEAD(BZX)=0.0                                              PPHEAD1A.374    
        PP_REAL_HEAD(BDX)=0.0                                              PPHEAD1A.375    
        PP_REAL_HEAD(BZY)=0.0                                              PPHEAD1A.376    
        PP_REAL_HEAD(BDY)=0.0                                              PPHEAD1A.377    
      ELSE                                                                 PPHEAD1A.378    
        IF (OCEAN) THEN       !   set BZY,BZX,BDY,BDX for ocean            PPHEAD1A.379    
          IF (st_grid.EQ.st_uv_grid .OR. st_grid.EQ.st_zu_grid             PPHEAD1A.380    
     &        .OR. st_grid.EQ.st_mu_grid) THEN                             PPHEAD1A.381    
            PP_REAL_HEAD(BZY)=REALHD(3)-REALHD(2)/2.0                      PPHEAD1A.382    
            PP_REAL_HEAD(BZX)=REALHD(4)-REALHD(1)/2.0                      PPHEAD1A.383    
          ELSEIF (st_grid.EQ.st_tp_grid .OR. st_grid.EQ.st_zt_grid         PPHEAD1A.384    
     &       .OR. st_grid.EQ.st_mt_grid .OR. st_grid.EQ.st_scalar) THEN    PPHEAD1A.385    
            PP_REAL_HEAD(BZY)=REALHD(3)-REALHD(2)                          PPHEAD1A.386    
            PP_REAL_HEAD(BZX)=REALHD(4)-REALHD(1)                          PPHEAD1A.387    
          ELSEIF (st_grid.EQ.st_cu_grid) THEN                              PPHEAD1A.388    
            PP_REAL_HEAD(BZY)=REALHD(3)-REALHD(2)                          PPHEAD1A.389    
            PP_REAL_HEAD(BZX)=REALHD(4)-REALHD(1)/2.0                      PPHEAD1A.390    
          ELSEIF (st_grid.EQ.st_cv_grid) THEN                              PPHEAD1A.391    
            PP_REAL_HEAD(BZY)=REALHD(3)-REALHD(2)/2.0                      PPHEAD1A.392    
            PP_REAL_HEAD(BZX)=REALHD(4)-REALHD(1)                          PPHEAD1A.393    
          ENDIF                                                            PPHEAD1A.394    
          IF (REALHD(32).GT.REALHD(29)) THEN !   greater than RMDI         PPHEAD1A.395    
            PP_REAL_HEAD(BDY)=0.0                                          PPHEAD1A.396    
            PP_REAL_HEAD(BDX)=REALHD(32)                                   PPHEAD1A.397    
          ELSE                                                             PPHEAD1A.398    
            PP_REAL_HEAD(BDY)=REALHD(2)                                    PPHEAD1A.399    
            PP_REAL_HEAD(BDX)=REALHD(1)                                    PPHEAD1A.400    
          ENDIF                                                            PPHEAD1A.401    
        ELSE                 !   set BZY,BZX,BDY,BDX for atmos             PPHEAD1A.402    
          IF(st_grid.EQ.st_uv_grid.OR.st_grid.EQ.st_cv_grid .OR.           PPHEAD1A.403    
     &       st_grid.EQ.st_zu_grid.OR.st_grid.EQ.st_mu_grid) THEN          PPHEAD1A.404    
            PP_REAL_HEAD(BZY)=REALHD(3)+REALHD(2)/2.0 ! UV pts             PPHEAD1A.405    
          ELSE                                                             PPHEAD1A.406    
            PP_REAL_HEAD(BZY)=REALHD(3)+REALHD(2) ! Zeroth Lat BZY         PPHEAD1A.407    
          ENDIF                                                            PPHEAD1A.408    
C                                                                          PPHEAD1A.409    
          IF(st_grid.EQ.st_uv_grid.OR.st_grid.EQ.st_cu_grid .OR.           PPHEAD1A.410    
     &       st_grid.EQ.st_zu_grid.OR.st_grid.EQ.st_mu_grid) THEN          PPHEAD1A.411    
            PP_REAL_HEAD(BZX)=REALHD(4)-REALHD(1)/2.0 !UV points           PPHEAD1A.412    
          ELSE                                                             PPHEAD1A.413    
            PP_REAL_HEAD(BZX)=REALHD(4)-REALHD(1) ! Zeroth Long BZX        PPHEAD1A.414    
          ENDIF                                                            PPHEAD1A.415    
          PP_REAL_HEAD(BDX)=REALHD(1) ! Long intvl BDX                     PPHEAD1A.416    
          PP_REAL_HEAD(BDY)=-REALHD(2) ! Lat intvl BDY                     PPHEAD1A.417    
        ENDIF                                                              PPHEAD1A.418    
C                                                                          PPHEAD1A.419    
C Add on offset for fields not starting from the origin                    PPHEAD1A.420    
C                                                                          PPHEAD1A.421    
        PP_REAL_HEAD(BZY)=PP_REAL_HEAD(BZY)                                PPHEAD1A.422    
     &                    +(NROW_IN-1)*PP_REAL_HEAD(BDY)                   PPHEAD1A.423    
        PP_REAL_HEAD(BZX)=PP_REAL_HEAD(BZX)                                PPHEAD1A.424    
     &                    +(WCOL_IN-1)*PP_REAL_HEAD(BDX)                   PPHEAD1A.425    
        IF(PP_REAL_HEAD(BZX).GE.360.0)                                     PPHEAD1A.426    
     *     PP_REAL_HEAD(BZX)=PP_REAL_HEAD(BZX)-360.0                       PPHEAD1A.427    
C                                                                          PPHEAD1A.428    
C If horizontal averaging has been applied to the output field,            PPHEAD1A.429    
C set BDX and/or BDY to the full (sub)domain extent which was processed.   PPHEAD1A.430    
C If the input field was intrinsically non-2D (eg. zonal), assume that     PPHEAD1A.431    
C the collapsed dimension(s) covered the full model domain.                PPHEAD1A.432    
C                                                                          PPHEAD1A.433    
        mean_code=(GR/block_size)*block_size                               PPHEAD1A.434    
        IF (st_grid.EQ.st_zt_grid .OR. st_grid.EQ.st_zu_grid               PPHEAD1A.435    
     &      .OR. st_grid.EQ.st_scalar) THEN                                PPHEAD1A.436    
          PP_REAL_HEAD(BDX)=REAL(INTHD(6))*PP_REAL_HEAD(BDX)               PPHEAD1A.437    
        ELSEIF (mean_code.EQ.zonal_mean_base .OR.                          PPHEAD1A.438    
     &      mean_code.EQ.field_mean_base .OR.                              PPHEAD1A.439    
     &      mean_code.EQ.global_mean_base) THEN                            PPHEAD1A.440    
          PP_REAL_HEAD(BDX)=ABS(REAL(ECOL_IN-WCOL_IN))*PP_REAL_HEAD(BDX)   GTJ0F401.1      
        ENDIF                                                              PPHEAD1A.442    
C                                                                          PPHEAD1A.443    
        IF (st_grid.EQ.st_mt_grid .OR. st_grid.EQ.st_mu_grid               PPHEAD1A.444    
     &      .OR. st_grid.EQ.st_scalar) THEN                                PPHEAD1A.445    
          PP_REAL_HEAD(BDY)=REAL(INTHD(7))*PP_REAL_HEAD(BDY)               PPHEAD1A.446    
        ELSEIF (mean_code.EQ.merid_mean_base .OR.                          PPHEAD1A.447    
     &      mean_code.EQ.field_mean_base .OR.                              PPHEAD1A.448    
     &      mean_code.EQ.global_mean_base) THEN                            PPHEAD1A.449    
          PP_REAL_HEAD(BDY)=ABS(REAL(NROW_IN-SROW_IN))*PP_REAL_HEAD(BDY)   GTJ0F401.2      
                                                                           GTJ0F401.3      
        ENDIF                                                              PPHEAD1A.451    
      ENDIF                                                                PPHEAD1A.452    
C                                                                          PPHEAD1A.453    
C Missing data indicator (from PARAMETER) ------------------------------   TJ050593.129    
C MKS scaling factor (unity as model uses SI units throughout)             PPHEAD1A.455    
C                                                                          PPHEAD1A.456    
      PP_REAL_HEAD(BMDI)=RMDI                                              TJ050593.130    
      PP_REAL_HEAD(BMKS)=1.0                                               PPHEAD1A.458    
C                                                                          PPHEAD1A.459    
  999 CONTINUE                                                             PPHEAD1A.460    
      RETURN                                                               PPHEAD1A.461    
      END                                                                  PPHEAD1A.462    
*ENDIF                                                                     PPHEAD1A.463