*IF DEF,RECON                                                              CONTROL1.2      
C ******************************COPYRIGHT******************************    GTS2F400.1171   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.1172   
C                                                                          GTS2F400.1173   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.1174   
C restrictions as set forth in the contract.                               GTS2F400.1175   
C                                                                          GTS2F400.1176   
C                Meteorological Office                                     GTS2F400.1177   
C                London Road                                               GTS2F400.1178   
C                BRACKNELL                                                 GTS2F400.1179   
C                Berkshire UK                                              GTS2F400.1180   
C                RG12 2SZ                                                  GTS2F400.1181   
C                                                                          GTS2F400.1182   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.1183   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.1184   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.1185   
C Modelling at the above address.                                          GTS2F400.1186   
C ******************************COPYRIGHT******************************    GTS2F400.1187   
C                                                                          GTS2F400.1188   
CLL                                                                        CONTROL1.3      
CLL  SUBROUTINE CONTROL:------------------------------------------         CONTROL1.4      
CLL                                                                        CONTROL1.5      
CLL  Purpose: Interpolation and reconfiguration program for modifying      CONTROL1.6      
CLL           or creating initial datasets for running the unified         CONTROL1.7      
CLL           model.                                                       CONTROL1.8      
CLL                                                                        CONTROL1.9      
CLL  Written by A. Dickinson                                               CONTROL1.10     
CLL                                                                        CONTROL1.11     
CLL  Model            Modification history from model version 3.0:         CONTROL1.12     
CLL version  Date                                                          CONTROL1.13     
CLL   3.1  23/02/93  Extend ITEM_CODES_ANCIL to add 2 new SLAB fields.     TJ240293.46     
CLL                                                                        AD221292.87     
CLL  3.1   22/12/92     Allow transplant of fields from second dump        AD221292.88     
CLL                     Author A. Dickinson    Reviewer C. Wilson          AD221292.89     
CLL                                                                        AD200193.1      
CLL   3.1  20/01/93    Correct error in logic for tracer file              AD200193.2      
CLL                    Author: A. Dickinson    Reviewer: M. Fisher         AD200193.3      
CLL                                                                        AD150293.47     
CLL  3.1   15/02/93     Option to add in ECMWF analysis perturbations      AD150293.48     
CLL                     Author A. Dickinson    Reviewer D. Richardson      AD150293.49     
CLL  3.2  23/04/93     Stop horizontal interpolation of p*, t* and         MC230493.1      
CLL                    fractional ice cover when a land-sea-mask is        MC230493.2      
CLL                    not imported.                                       MC230493.3      
CLL                    Author:M.Carter      Reviewer:A Dickinson           MC230493.4      
CLL                                                                        AD200593.125    
CLL   3.2  20/05/93   Wind staggering for C-grid added supporting          AD200593.126    
CLL                   interpolations B->C; B->B; C->C; C->B.               AD200593.127    
CLL                   Author: A.Dickinson      Reviewer: T.Davies          AD200593.128    
CLL                                                                        CB200693.1      
CLL   3.2  20/06/93   Correct pointer to PP_LEN_OUT                        CB200693.2      
CLL                   Author: C.Bunton           Reviewer: A.Dickinson     CB200693.3      
CLL  3.2   02/04/93     Correct vertical interpolation of ozone for        CW040293.1      
CLL                     ozone levels in not equal to P_LEVELS_IN           CW040293.2      
CLL                     Author C. Wilson       Reviewer A. Dickinson       CW040293.3      
CLL  3.2   30/04/93     Correct error trap for interpolation of coastal    TJ300493.1      
CLL                     outflow point field.                               TJ300493.2      
CLL                     Author T. Johns        Reviewer A. Dickinson       TJ300493.3      
CLL                                                                        CONTROL1.14     
CLL  3.2   19/04/93  Code for new real missing data indicator.  Change     TJ050593.9      
CLL                  logic for coastal adjustment after H_INTerpolation.   TJ050593.10     
CLL                     Author T. Johns        Reviewer A. Dickinson       TJ050593.11     
CLL  3.3   21/12/93  Correct position of *ENDIF for TIMER directive.       DR211293.1      
CLL                     Author D. Robinson     Reviewer R. Rawlins         DR211293.2      
CLL  3.3   07/12/93  Extra argument for READFLDS and WRITFLDS.             DR081293.29     
CLL                     Author D. Robinson     Reviewer M. Bell            DR081293.30     
CLL                                                                        TJ050593.12     
CLL  3.3  22/11/93  Add aerosol ancillary fields to ITEM_CODES_ANCIL.      RB221193.12     
CLL                     Author R.T.H.Barnes    Reviewer A. Dickinson       RB221193.13     
CLL  3.4  05/09/94  Add user ancillary fields to ITEM_CODES_ANCIL and      GRB0F304.39     
CLL                 modify RDPPXRF code checks.  Author R.T.H.Barnes       GRB0F304.40     
CLL  3.4  05/09/94  Add murk ancillary fields to ITEM_CODES_ANCIL. RTHB    GRB0F304.41     
CLL                                                                        RB221193.14     
CLL  3.4  16/06/94  Argument LCAL360 added and passed to                   GSS1F304.271    
CLL                                            INANCILA, REPLANCA          GSS1F304.272    
CLL                                                    S.J.Swarbrick       GSS1F304.273    
CLL                                                                        GSS1F304.274    
CLL  3.4  21/06/94  Read in Fixed header from MASK file to get no          ADR1F304.19     
CLL                 of fields in MASK Lookup Table.                        ADR1F304.20     
CLL                     Author D.Robinson      Reviewer D. Goddard         ADR1F304.21     
CLL                                                                        ADR1F304.22     
CLL  3.4  10/05/94  Provide option to use a different coastal adjustment   UDG1F304.10     
CLL                 scheme. Option controled by a namelist variable.       UDG1F304.11     
CLL  3.4  05/08/94  Prevents unnecessary interpolation of ancillary        UDG6F304.1      
CLL                 fields when they are the same as those stored in the   UDG6F304.2      
CLL                 original dump                                          UDG6F304.3      
CLL                 Author D.M.Goddard                                     UDG6F304.4      
CLL  3.4  19/07/94  Extra code to initialise user defined prognostics.     UDG4F304.1      
CLL                 Functionality of variable S in namelist LOOK is        UDG4F304.2      
CLL                 extended and extra inputs are added to allow           UDG4F304.3      
CLL                 user to define how the user prognostics are            UDG4F304.4      
CLL                 initialised.                                           UDG4F304.5      
CLL                 Author D.M.Goddard                                     UDG4F304.6      
CLL   3.5  24/03/95    Changed OPEN to FILE_OPEN  P.Burton                 GPB1F305.16     
!   3.5  01/05/95  Additional arguments and associated declarations        UDG2F305.40     
!                  declarations to enable addressing to be                 UDG2F305.41     
!                  calculated within model.                                UDG2F305.42     
!                  Author D.M.Goddard    Reviewer S Swarbrick              UDG2F305.43     
!    4.0  15/11/94  Skip coastal adjustment step if target land-sea mask   UDG2F400.1      
!                   not different to source land-sea mask                  UDG2F400.2      
!                   Author D.M. Goddard                                    UDG2F400.3      
!   4.0  19/10/95  Pass FIXHD_OUT to INANCILA.  D. Robinson                AJS1F400.124    
!    4.0  06/03/95  Omits rotation of U and V when horizontal              UDG4F400.1      
!                   interpolation not required                             UDG4F400.2      
!                   Author D.M.Goddard                                     UDG4F400.3      
!    4.0  02/08/95   Allows choice of method of horizontal                 UDG1F400.20     
!                    interpolation; Bilinear or area weighted.             UDG1F400.21     
!                    Interpolate all u-grid fields onto u-grid             UDG1F400.22     
!                    previously just u and v velocities were               UDG1F400.23     
!                    interpolated onto u-grid.                             UDG1F400.24     
!                    D.M. Goddard                                          UDG1F400.25     
!   4.0  01/09/95  Check that ozone ancillary field is provided            UDG6F400.1      
!                  as required. D. Robinson                                UDG6F400.2      
!    4.0  11/10/95     Various fixes required for full functionality       UDG7F400.106    
!                      at vn 4.0.                                          UDG7F400.107    
!                      Author D.M. Goddard                                 UDG7F400.108    
!   4.0  08/08/95  Read input mask into logical array. D. Robinson         GDR3F400.1      
!   4.0  29/09/95  Initialise Sea Ice Temperature if no data in input      UDR1F400.1      
!                  dump. Introduce S=8 to initialise fields and use        UDR1F400.2      
!                  for Slab Temperature. D. Robinson                       UDR1F400.3      
!   4.1  26/02/96  Cater for new ancillary fields/files for sulphur        GDR1F401.16     
!                  cycle. Call new CANC* comdecks. D. Robinson.            GDR1F401.17     
!   4.1  03/04/96  New argument DUMP_PACK ; Pass to CONVLOOK.              GDR2F401.9      
!                  D. Robinson                                             GDR2F401.10     
CLL  4.1 13/10/95   Extra code to initialise soil moisture fractions       UJS1F401.1      
CLL                 using subroutine FREEZE  and canopy conductance        UJS1F401.2      
CLL                 from resistance J.Smith                                UJS1F401.3      
                                                                           UDG2F305.44     
CLL  4.1   31/05/96 Code to reconfigure from standard UM dump to           UIE2F401.1      
CLL                 new dynamics grid for the variational assimilation.    UIE2F401.2      
CLL                     Author I.Edmond       Reviewer D. Goddard          UIE2F401.3      
!    4.1  18/06/96  Changes to cope with changes in STASH addressing       GDG0F401.201    
!                   Author D.M. Goddard.                                   GDG0F401.202    
!    4.1  13/02/96  Initialise soil temperature and moisture               UDG1F401.1      
!                   for implementation of MOSES                            UDG1F401.2      
!                   Author D.M Goddard                                     UDG1F401.3      
!    4.2  Oct. 96   T3E migration: *DEF CRAY removed                       GSS9F402.52     
!                              S.J.Swarbrick                               GSS9F402.53     
!    4.2  04/09/96  Parallelization added under *MPPRECON flag             UDG3F402.84     
!                   Author D.M. Goddard.                                   UDG3F402.85     
!    4.2  29/11/96  Correct polar rows on p-grid if not constant           UDG4F402.1      
!                   Author D.M. Goddard                                    UDG4F402.2      
!    4.3  12/03/97  Corrects indexing of arrays used to hold               UDG3F403.14     
!                   information about user prognostic                      UDG3F403.15     
!                   initialisation in reconfiguration.                     UDG3F403.16     
!                   Author D.M.Goddard                                     UDG3F403.17     
!    4.3  09/04/97  Remove write statements from polar row correction      UDG5F403.1      
!                   Author D.M.Goddard                                     UDG5F403.2      
!    4.4  22/07/97  Pass down LAMIPII_IN to control SST and ice.           GRS2F404.223    
!                   R A Stratton                                           GRS2F404.224    
!LL  4.4  17/06/97  Add code to pass the O/P file length                   GBC6F404.1      
!LL                 to the I/O routines.                                   GBC6F404.2      
!LL                   Author: Bob Carruthers, Cray Research.               GBC6F404.3      
!    4.4  25/04/97  Changes to make the addresses well-formed for          GBC5F404.9      
!                   Cray I/O.                                              GBC5F404.10     
!                     Author: Bob Carruthers, Cray Research                GBC5F404.11     
!    4.4  22/09/97  Add code to initialise 3D CCA from 2D CCA in           AJX1F404.14     
!                   input dump if L_3D_CCA = .T.     J.M.Gregory           AJX1F404.15     
!    4.4  14/10/97  For fields initialised through SOURCE=8 option,        GDR7F404.1      
!                   test model number as well as item code. Add code       GDR7F404.2      
!                   to initialise prognostics (Stash Codes 221,            GDR7F404.3      
!                   224-234) through SOURCE=8 if not in input dump.        GDR7F404.4      
!                   D. Robinson.                                           GDR7F404.5      
!    4.4  11/07/97  Pass LPOLARCHK down to AUX_FILE to allow polar         UDG0F404.125    
!                   row checking in AUX_FILE.                              UDG0F404.126    
!                   Author: D.M. Goddard.                                  UDG0F404.127    
!    4.4  08/08/97  Check that the number of land points used for          UDG1F404.1      
!                   the addressing is the same as the number in the dump   UDG1F404.2      
!                   Author D.M. Goddard                                    UDG1F404.3      
!    4.4  28/08/97  Code added for initialising mixed phase                UDG4F404.10     
!                   precipitation                                          UDG4F404.11     
!                   Author: D.M.Goddard  Reviewer: Richard Barnes          UDG4F404.12     
!    4.4  09/04/97  Enable interpolation of  convective cloud base and     UDG6F404.1      
!                   top when changing levels                               UDG6F404.2      
!                   Author D.M. Goddard                                    UDG6F404.3      
! vn4.4  As VAR PF dump contains theta, check need to prevent              UIE2F404.124    
!                  control entering routine TH_TO_THL. (conversion done    UIE2F404.125    
!                  in PFinc2UM.                                            UIE2F404.126    
!                  Call routine RDVARFLD which enables fields stored on    UIE2F404.127    
!                  UM B grid u, v, thetaL and qT positions to be written   UIE2F404.128    
!                  onto VAR LS grid u, v ,theta and q positions and vice   UIE2F404.129    
!                  versa.                               Ian Edmond         UIE2F404.130    
!    vn4.4     9/4/97 Changed .xor. to .neqv. to compile code with the     UIE2F404.1331   
!                    Nag f90 compiler.   Ian Edmond                        UIE2F404.1332   
!    vn4.4     9/4/97 No. of land points passed to PFinc2UM. IEdmond       UIE2F404.1333   
! vn4.4       9/4/97 GET_FILE added so that inclusion of                   UIE2F404.1334   
!                         ancilliary files may be done by                  UIE2F404.1335   
!              export UNITXXX=ancilliary filename in the script            UIE2F404.1336   
!   4.4    11/9/97 U rows in/out and real header passed into ROTATE        UIE2F404.1337   
!                  to allow it to calculate C grid u,v values on a         UIE2F404.1338   
!                  rotated grid from a standard lat-lon grid and           UIE2F404.1339   
!                  vise versa.   Ian Edmond                                UIE2F404.1340   
!   4.5     2/2/98 Initialise SNOW TEMPERATURE (item 232) to temperature   ABX2F405.1      
!                  of first soil level.  R.A.Betts                         ABX2F405.2      
!    4.5 05/05/98 When looping over ancillary records, skip call to        GDG2F405.90     
!                 EXPPXC if record blank.                                  GDG2F405.91     
!LL  4.5    19/01/98 Remove SOIL_VARS and VEG_VARS. D. Robinson.           GDR6F405.9      
!    4.5  23/09/98  Correct code for adding ECMWF perturbations            UDG3F405.340    
!                   Author D.M. Goddard                                    UDG3F405.341    
!    4.5  29/07/97  Remove calls to subroutines INIT_LS and PFinc_2UM      UDG4F405.1      
!                   as these are now called from a new parent routine      UDG4F405.2      
!                   SUPERCONTROL. FORTRAN90 allocatable arrays now         UDG4F405.3      
!                   used instead of dynamic allocation.                    UDG4F405.4      
!                   All these changes have been implemented to save on     UDG4F405.5      
!                   memory requirement in VAR reconfiguration.             UDG4F405.6      
!                   Author D.M. Goddard                                    UDG4F405.7      
!    4.5  29/07/97  Only call horizontal interpolation if needed.          UDG5F405.1      
!                   Author D.M. Goddard                                    UDG5F405.2      
!    4.5  10/11/98  Skip sections of reconfiguration if logical RM_CP      UDG6F405.34     
!                   is set. RM_CP is set for last call to                  UDG6F405.35     
!                   reconfiguration by VAR.                                UDG6F405.36     
!                   Author D.M Goddard                                     UDG6F405.37     
!    4.5  27/08/98  Log aerosol concentration increment at level one       UDG7F405.8      
!                  initialised in PF_inc2UM step of VAR reconfiguration    UDG7F405.9      
!                  of Mesoscale model.                                     UDG7F405.10     
!                  Author D.M. Goddard                                     UDG7F405.11     
CLL  Programming standard:                                                 CONTROL1.15     
CLL                                                                        CONTROL1.16     
CLL  Logical component number: S1                                          CONTROL1.17     
CLL                                                                        CONTROL1.18     
CLL  Project task:                                                         CONTROL1.19     
CLL                                                                        CONTROL1.20     
CLL  Documentation: UM Documentation Paper S1                              CONTROL1.21     
CLL------------------------------------------------------------            CONTROL1.22     

      SUBROUTINE CONTROL(LEN_FIXHD_IN,LEN_INTHD_IN,LEN_REALHD_IN,           2,308CONTROL1.23     
     &  LEN1_LEVDEPC_IN,LEN2_LEVDEPC_IN,LEN1_ROWDEPC_IN,                   CONTROL1.24     
     &  LEN2_ROWDEPC_IN,LEN1_COLDEPC_IN,LEN2_COLDEPC_IN,                   CONTROL1.25     
     &  LEN1_FLDDEPC_IN,LEN2_FLDDEPC_IN,LEN_EXTCNST_IN,OZONE_LEVELS_IN,    CONTROL1.26     
     &  LEN_DUMPHIST_IN,LEN_CFI1_IN,LEN_CFI2_IN,LEN_CFI3_IN,               CONTROL1.27     
     &  LEN1_LOOKUP_IN,LEN2_LOOKUP_IN,LEN_DATA_IN,BL_LEVELS_IN             CONTROL1.28     
     & ,ROW_LENGTH_IN,P_ROWS_IN,P_LEVELS_IN,Q_LEVELS_IN                    UJS1F401.4      
     & ,ST_LEVELS_IN,SM_LEVELS_IN                                          UJS1F401.5      
     & ,MAX_VARIABLES_IN,P_FIELD_IN,U_ROWS_IN,U_FIELD_IN                   CONTROL1.30     
     & ,LEN_FIXHD_OUT,LEN_INTHD_OUT,LEN_REALHD_OUT,TR_LEVELS_ADV_OUT,      CONTROL1.31     
     &  LEN1_LEVDEPC_OUT,LEN2_LEVDEPC_OUT,LEN1_ROWDEPC_OUT,                CONTROL1.32     
     &  LEN2_ROWDEPC_OUT,LEN1_COLDEPC_OUT,LEN2_COLDEPC_OUT,                CONTROL1.33     
     &  LEN1_FLDDEPC_OUT,LEN2_FLDDEPC_OUT,LEN_EXTCNST_OUT,                 CONTROL1.34     
     &  LEN_DUMPHIST_OUT,LEN_CFI1_OUT,LEN_CFI2_OUT,LEN_CFI3_OUT,           CONTROL1.35     
     &  LEN1_LOOKUP_OUT,LEN2_LOOKUP_OUT,LEN_DATA_OUT                       CONTROL1.36     
     & ,ROW_LENGTH_OUT,P_ROWS_OUT,P_LEVELS_OUT,Q_LEVELS_OUT                CONTROL1.37     
     & ,MAX_VARIABLES_OUT,P_FIELD_OUT,U_ROWS_OUT,U_FIELD_OUT               CONTROL1.38     
C                                                                          UDG4F405.8      
     & ,FIXHD_OUT,INTHD_OUT,REALHD_OUT,LEVDEPC_OUT,ROWDEPC_OUT             UDG4F405.9      
     & ,COLDEPC_OUT,FLDDEPC_OUT,EXTCNST_OUT,DUMPHIST_OUT,CFI1_OUT          UDG4F405.10     
     & ,CFI2_OUT,CFI3_OUT,LOOKUP_OUT,                                      UDG4F405.11     
     &  PP_ITEMC_OUT,PP_POS_OUT,N_TYPES_OUT,                               UDG4F405.12     
     &  PP_LEN_OUT,PP_NUM_OUT,PP_TYPE_OUT,                                 UDG4F405.13     
     &  AKH_OUT,BKH_OUT,LAND_POINTS_OUT                                    UDG4F405.14     
C                                                                          UDG4F405.15     
     & ,TR_LEVELS_OUT,ST_LEVELS_OUT,SM_LEVELS_OUT,BL_LEVELS_OUT            UJS1F401.6      
     & ,OZONE_LEVELS_OUT, TR_VARS_OUT                                      GDR6F405.10     
     & ,LEN_INTHD_UARS,LEN_REALHD_UARS,LEN1_LEVDEPC_UARS                   CONTROL1.41     
     & ,LEN2_LEVDEPC_UARS,LEN2_LOOKUP_UARS,LEN_DATA_UARS,UARS              CONTROL1.42     
     & ,GRIB,NFTIN,NFTOUT,NFTUARS,NLOOKUPS,LEN_ANCIL,STRAT_Q               CONTROL1.43     
     &,RESET,OCEAN,NFTTRACER,NFTTRANS,TRANS                                AD221292.90     
     & ,LEN_INTHD_TRANS,LEN_REALHD_TRANS,LEN1_LEVDEPC_TRANS                AD221292.91     
     & ,LEN2_LEVDEPC_TRANS,LEN2_LOOKUP_TRANS,LEN_DATA_TRANS                AD221292.92     
     & ,LEN_INTHD_TRACER,LEN_REALHD_TRACER,LEN1_LEVDEPC_TRACER             CONTROL1.45     
     & ,LEN2_LEVDEPC_TRACER,LEN2_LOOKUP_TRACER,LEN_DATA_TRACER             CONTROL1.46     
     & ,NDATASETS,FTN_ANCIL,TITLE,PER_ARGS,PER_LEN,NFTPER                  AD150293.50     
     & ,PERTURBATION,C_GRID_IN,C_GRID_OUT,H_INT_TYPE,LPOLARCHK             UDG4F402.3      
     & ,ANVIL_FACTOR,TOWER_FACTOR                                          AJX1F404.16     
     & ,POINTS_PER_OCEAN_LEVEL,DUMP_PACK,LAND_POINTS_UMUI,                 UDG1F404.4      
     & RadialGridIn,RadialGridOut,NFTIN2,NFTIN3,RM_CP,                     UDG6F405.38     
     & len1_lookup_um,len2_lookup_um,fixhd_um,                             UIE2F401.5      
     & len1_lookup_ls,len2_lookup_ls,fixhd_ls,                             UIE2F401.6      
*CALL ARGPPX                                                               UDG2F305.48     
     &  LAMIPII_IN,                                                        GRS2F404.225    
     &   LCAL360,LSPIRAL_S,LOZONE_ZONAL,L_MP_PRECIP)                       UDG4F404.13     
CLL                                                                        CONTROL1.48     
CLL                                                                        CONTROL1.49     
                                                                           CONTROL1.50     
      IMPLICIT NONE                                                        CONTROL1.51     
                                                                           CONTROL1.52     
      LOGICAL LCAL360                                                      GSS1F304.277    
      LOGICAL LAMIPII_IN          ! T= AMIP II run ice updating            GRS2F404.226    
      LOGICAL      LSPIRAL_S      ! Switch for SPIRAL_S routine            UDG2F305.50     
                                  ! defining unresolved coastal points     UDG2F305.51     
      LOGICAL      LOZONE_ZONAL   !T= Zonal ozone field                    UDG2F305.52     
                                  !F= Full  ozone field                    UDG2F305.53     
      LOGICAL      L_MP_PRECIP     !T=Mixed phase precipitation chosen     UDG4F404.14     
                                   !F=Standard precipitation chosen        UDG4F404.15     
                                                                           GSS1F304.278    
      INTEGER                                                              CONTROL1.53     
     & LEN_FIXHD_IN    !IN Length of fixed length header on input file     CONTROL1.54     
     &,LEN_INTHD_IN    !IN Length of integer header on input file          CONTROL1.55     
     &,LEN_REALHD_IN   !IN Length of real header on input file             CONTROL1.56     
     &,LEN1_LEVDEPC_IN !IN 1st dim of lev dependent consts on input file   CONTROL1.57     
     &,LEN2_LEVDEPC_IN !IN 2nd dim of lev dependent consts on input file   CONTROL1.58     
     &,LEN1_ROWDEPC_IN !IN 1st dim of row dependent consts on input file   CONTROL1.59     
     &,LEN2_ROWDEPC_IN !IN 2nd dim of row dependent consts on input file   CONTROL1.60     
     &,LEN1_COLDEPC_IN !IN 1st dim of col dependent consts on input file   CONTROL1.61     
     &,LEN2_COLDEPC_IN !IN 2nd dim of col dependent consts on input file   CONTROL1.62     
     &,LEN1_FLDDEPC_IN !IN 1st dim of field dependent consts on input fi   CONTROL1.63     
     &,LEN2_FLDDEPC_IN !IN 2nd dim of field dependent consts on input fi   CONTROL1.64     
     &,LEN_EXTCNST_IN  !IN Length of extra consts on input file            CONTROL1.65     
     &,LEN_DUMPHIST_IN !IN Length of history header on input file          CONTROL1.66     
     &,LEN_CFI1_IN     !IN Length of index1 on input file                  CONTROL1.67     
     &,LEN_CFI2_IN     !IN Length of index2 on input file                  CONTROL1.68     
     &,LEN_CFI3_IN     !IN Length of index3 on input file                  CONTROL1.69     
     &,LEN1_LOOKUP_IN  !IN 1st dim of LOOKUP on input file                 CONTROL1.70     
     &,LEN2_LOOKUP_IN  !IN 2nd dim of LOOKUP on input file                 CONTROL1.71     
     &,LEN_DATA_IN     !IN Length of data on input file                    CONTROL1.72     
     &,ROW_LENGTH_IN   !IN No of points E-W on input file                  CONTROL1.73     
     &,P_ROWS_IN       !IN No of p-rows on input file                      CONTROL1.74     
     &,P_LEVELS_IN     !IN No of levels on input file                      CONTROL1.75     
     &,Q_LEVELS_IN     !IN No of wet levels on input file                  CONTROL1.76     
     &,MAX_VARIABLES_IN!IN Maximum varaiables on input file                CONTROL1.77     
     &,ST_LEVELS_IN    !IN No of deep soil temp levels on input file       UJS1F401.8      
     &,SM_LEVELS_IN    !IN No of soil moisture levels on input file        UJS1F401.9      
     &,BL_LEVELS_IN    !IN No of b.l. levels on input file                 CONTROL1.79     
     &,OZONE_LEVELS_IN !IN No of ozone levels on input file                CONTROL1.80     
     &,P_FIELD_IN      !IN No of p-points per level on input file          CONTROL1.81     
     &,U_ROWS_IN       !IN No of uv-rows on input file                     CONTROL1.82     
     &,U_FIELD_IN      !IN No of uv-points per level on input file         CONTROL1.83     
                                                                           CONTROL1.84     
      INTEGER                                                              CONTROL1.85     
     &       NFTIN,                                                        CONTROL1.86     
     &       NFTOUT,                                                       CONTROL1.87     
     &       NFTIN2,                                                       UIE2F401.7      
     &       NFTIN3,                                                       UIE2F401.8      
     &       NFTUARS,                                                      CONTROL1.88     
     &      NFTTRANS,                                                      AD221292.93     
     &       NFTTRACER,                                                    CONTROL1.89     
     &      NFTPER,                                                        AD150293.52     
     &       NLOOKUPS,                                                     CONTROL1.90     
     &       LEN_ANCIL                                                     CONTROL1.91     
                                                                           CONTROL1.92     
      INTEGER                                                              CONTROL1.93     
     &      FIXHD_IN(256),                                                 CONTROL1.94     
     &      INTHD_IN(LEN_INTHD_IN),                                        CONTROL1.95     
     &      CFI1_IN(LEN_CFI1_IN+1),CFI2_IN(LEN_CFI2_IN+1),                 CONTROL1.96     
     &      CFI3_IN(LEN_CFI3_IN+1),                                        CONTROL1.97     
     &      LOOKUP_IN(LEN1_LOOKUP_IN,LEN2_LOOKUP_IN),                      CONTROL1.98     
     &      ID1_IN(P_FIELD_IN)                                             CONTROL1.99     
      REAL                                                                 CONTROL1.100    
     &      REALHD_IN(LEN_REALHD_IN),                                      CONTROL1.101    
     &      LEVDEPC_IN(1+LEN1_LEVDEPC_IN*LEN2_LEVDEPC_IN),                 CONTROL1.102    
     &      ROWDEPC_IN(1+LEN1_ROWDEPC_IN*LEN2_ROWDEPC_IN),                 CONTROL1.103    
     &      COLDEPC_IN(1+LEN1_COLDEPC_IN*LEN2_COLDEPC_IN),                 CONTROL1.104    
     &      FLDDEPC_IN(1+LEN1_FLDDEPC_IN*LEN2_FLDDEPC_IN),                 CONTROL1.105    
     &      EXTCNST_IN(LEN_EXTCNST_IN+1),                                  CONTROL1.106    
     &      DUMPHIST_IN(LEN_DUMPHIST_IN+1)                                 UDG4F405.16     
     &     ,ANVIL_FACTOR                                                   AJX1F404.18     
     &     ,TOWER_FACTOR                                                   AJX1F404.19     
                                                                           CONTROL1.109    
      INTEGER                                                              CONTROL1.110    
     * ROW_LENGTH_OUT    !IN No of points E-W (output)                     CONTROL1.111    
     *,P_ROWS_OUT        !IN No of P-points N-S (output)                   CONTROL1.112    
     *,P_LEVELS_OUT      !IN No of levels (output)                         CONTROL1.113    
     *,Q_LEVELS_OUT      !IN No of wet levels (output)                     CONTROL1.114    
     *,ST_LEVELS_OUT     !IN No of deep soil temp levels (output)          UJS1F401.10     
     *,SM_LEVELS_OUT     !IN No of soil moisture levels (output)           UJS1F401.11     
     *,TR_LEVELS_OUT     !IN No of tracer levels (output)                  CONTROL1.116    
     *,TR_LEVELS_ADV_OUT !IN No of tracer levels to be adv'ted (output)    CONTROL1.117    
     *,BL_LEVELS_OUT     !IN No of b.l. levels (output)                    CONTROL1.118    
     *,OZONE_LEVELS_OUT  !IN No of ozone levels (output)                   CONTROL1.119    
     *,TR_VARS_OUT       !IN No of tracer variables (output)               CONTROL1.120    
     *,MAX_VARIABLES_OUT !IN Maximum no of variables (output)              CONTROL1.121    
                                                                           CONTROL1.124    
      INTEGER                                                              CONTROL1.125    
     * LEN_FIXHD_OUT     !IN Length of fixed length header (output)        CONTROL1.126    
     *,LEN_INTHD_OUT     !IN Length of integer header (output)             CONTROL1.127    
     *,LEN_REALHD_OUT    !IN Length of real header (output)                CONTROL1.128    
     *,LEN2_LEVDEPC_OUT  !IN 2nd dim of lev dep consts (output)            CONTROL1.129    
     *,LEN1_LEVDEPC_OUT  !IN ist dim of lev dep consts (output)            CONTROL1.130    
     *,LEN1_ROWDEPC_OUT  !IN 1st dim of row dep consts (output)            CONTROL1.131    
     *,LEN2_ROWDEPC_OUT  !IN 2nd dim of row dep consts (output)            CONTROL1.132    
     *,LEN1_COLDEPC_OUT  !IN 1st dim of col dep consts (output)            CONTROL1.133    
     *,LEN2_COLDEPC_OUT  !IN 2nd dim of col dep consts (output)            CONTROL1.134    
     *,LEN1_FLDDEPC_OUT  !IN 1st dim of field dep consts (output)          CONTROL1.135    
     *,LEN2_FLDDEPC_OUT  !IN 2nd dim of field dep consts (output)          CONTROL1.136    
     *,LEN_EXTCNST_OUT   !IN Length of extra constants (output)            CONTROL1.137    
     *,LEN_DUMPHIST_OUT  !IN Length of history header (output)             CONTROL1.138    
     &,LEN_CFI1_OUT      !IN Length of index1 on output file               CONTROL1.139    
     &,LEN_CFI2_OUT      !IN Length of index2 on output file               CONTROL1.140    
     &,LEN_CFI3_OUT      !IN Length of index3 on output file               CONTROL1.141    
     *,LEN1_LOOKUP_OUT   !IN 1st dim of lookup header (output)             CONTROL1.142    
     *,LEN2_LOOKUP_OUT   !IN 2nd dim of lookup header (output)             CONTROL1.143    
     &,LEN1_LOOKUP_UM   ! 1st dim of lookup header (input UM dump)         UIE2F401.11     
     &,LEN2_LOOKUP_UM   ! 2nd dim of lookup header (input UM dump)         UIE2F401.12     
     &,LEN1_LOOKUP_LS  ! 1st dim of lookup header (input LS dump)          UIE2F401.13     
     &,LEN2_LOOKUP_LS  ! 2nd dim of lookup header (input LS dump)          UIE2F401.14     
     *,U_FIELD_OUT       !IN No of UV-points per level (output)            CONTROL1.144    
     *,P_FIELD_OUT       !IN No of p-points per level (output)             CONTROL1.145    
     *,U_ROWS_OUT        !IN No of uv-points N-S (output)                  CONTROL1.146    
     *,LEN_DATA_OUT      !IN Length of output data (output)                CONTROL1.147    
      INTEGER      LAND_POINTS_UMUI !No of land points from                UDG1F404.5      
                                    !namelist RECON                        UDG1F404.6      
                                                                           CONTROL1.148    
      INTEGER                                                              CONTROL1.149    
     &      FIXHD_OUT(256),                                                CONTROL1.150    
     &      FIXHD_LS(256),                                                 UIE2F401.9      
     &      FIXHD_UM(256),                                                 UIE2F401.10     
     &      INTHD_OUT(LEN_INTHD_OUT),                                      CONTROL1.151    
     &      CFI1_OUT(LEN_CFI1_OUT+1),                                      CONTROL1.152    
     &      CFI2_OUT(LEN_CFI2_OUT+1),CFI3_OUT(LEN_CFI3_OUT+1),             CONTROL1.153    
     &      LOOKUP_OUT(LEN1_LOOKUP_OUT,LEN2_LOOKUP_OUT),                   CONTROL1.154    
     &      ID1_OUT(P_FIELD_OUT)                                           CONTROL1.155    
      INTEGER      POINTS_PER_OCEAN_LEVEL(99)                              UDG2F305.54     
      INTEGER      DUMP_PACK !  Packing indicator for Dump. See            GDR2F401.12     
                             !  deck RECONF1 for details.                  GDR2F401.13     
                                                                           CONTROL1.156    
      REAL                                                                 CONTROL1.157    
     &      REALHD_OUT(LEN_REALHD_OUT),                                    CONTROL1.158    
     &      LEVDEPC_OUT(1+LEN1_LEVDEPC_OUT*LEN2_LEVDEPC_OUT),              CONTROL1.159    
     &      ROWDEPC_OUT(1+LEN1_ROWDEPC_OUT*LEN2_ROWDEPC_OUT),              CONTROL1.160    
     &      COLDEPC_OUT(1+LEN1_COLDEPC_OUT*LEN2_COLDEPC_OUT),              CONTROL1.161    
     &      FLDDEPC_OUT(1+LEN1_FLDDEPC_OUT*LEN2_FLDDEPC_OUT),              CONTROL1.162    
     &      EXTCNST_OUT(LEN_EXTCNST_OUT+1),                                CONTROL1.163    
     &      DUMPHIST_OUT(LEN_DUMPHIST_OUT+1),                              CONTROL1.164    
C     &      D1_OUT(P_FIELD_OUT*(P_LEVELS_OUT+1))                          CONTROL1.165    
     &      PERTURBATION     ! Switch for transplanting data               UDG3F402.91     
                                                                           UDG3F402.92     
      INTEGER                                                              CONTROL1.168    
     & LEN_INTHD_UARS    !Length of integer header on UARS file            CONTROL1.169    
     &,LEN_REALHD_UARS   !Length of real header on UARS file               CONTROL1.170    
     &,LEN1_LEVDEPC_UARS !1st dim of lev dependent consts on UARS file     CONTROL1.171    
     &,LEN2_LEVDEPC_UARS !2nd dim of lev dependent consts on UARS file     CONTROL1.172    
     &,LEN2_LOOKUP_UARS  !2nd dim of LOOKUP on UARS file                   CONTROL1.173    
     &,LEN_DATA_UARS     !Length of data on UARS file                      CONTROL1.174    
     &,LEN_INTHD_TRACER    !Length of integer header on TRACER file        CONTROL1.175    
     &,LEN_REALHD_TRACER   !Length of real header on TRACER file           CONTROL1.176    
     &,LEN1_LEVDEPC_TRACER !1st dim of lev dependent consts on TRACER fi   CONTROL1.177    
     &,LEN2_LEVDEPC_TRACER !2nd dim of lev dependent consts on TRACER fi   CONTROL1.178    
     &,LEN2_LOOKUP_TRACER  !2nd dim of LOOKUP on TRACER file               CONTROL1.179    
     &,LEN_DATA_TRACER     !Length of data on TRACER file                  CONTROL1.180    
     &,LEN_INTHD_TRANS    !Length of integer header on TRANS file          AD221292.94     
     &,LEN_REALHD_TRANS   !Length of real header on TRANS file             AD221292.95     
     &,LEN1_LEVDEPC_TRANS !1st dim of lev dependent consts on TRANS file   AD221292.96     
     &,LEN2_LEVDEPC_TRANS !2nd dim of lev dependent consts on TRANS file   AD221292.97     
     &,LEN2_LOOKUP_TRANS  !2nd dim of LOOKUP on TRANS file                 AD221292.98     
     &,LEN_DATA_TRANS     !Length of data on TRANS file                    AD221292.99     
     &,LEN_INTHD_UPROG    !Length of integer header on user prog file      UDG4F304.7      
     &,LEN_REALHD_UPROG   !Length of real    header on user prog file      UDG4F304.8      
     &,LEN1_LEVDEPC_UPROG !1st dim of lev depdnt consts on usr prog file   UDG4F304.9      
     &,LEN2_LEVDEPC_UPROG !2nd dim of lev depdnt consts on usr prog file   UDG4F304.10     
     &,LEN2_LOOKUP_UPROG  !2nd dim of LOOKUP on user prognostic file       UDG4F304.11     
     &,LEN_DATA_UPROG     !Length of data on  user prognostic file         UDG4F304.12     
     &,PER_LEN          !Dim of PER_ARGS                                   AD150293.53     
     &,PER_ARGS(PER_LEN)!Lengths used to dim arrays in PERTURB             AD150293.54     
     &,FIXHD_UPROG(256)   !Fixed header of user prognostic file            UDG4F304.13     
                                                                           CONTROL1.181    
C -------------------------------------------------------------            CONTROL1.182    
C External subroutines called:---------------------------------            CONTROL1.183    
      EXTERNAL READHEAD,WRITHEAD,CONVHEAD,POSERROR,ABORT_IO                CONTROL1.184    
     &,H_INT_INIT,H_INT_CTL,COAST_AJ,READFLDS,WRITFLDS                     UDG1F400.27     
     &,V_INT,F_TYPE,IOERROR,W_LLTOEQ                                       UDG1F400.28     
     *,SETPOS,LOCATE,INANCILA,PR_LOOK,REPLANCA,PR_RFLD,GETPOS              CONTROL1.187    
     *,ROTATE,AUX_FILE                                                     UDG4F304.14     
     *,INTF_COAST_AJ                                                       UDG1F304.12     
     *,DERV_3D_CCA                                                         AJX1F404.17     
*IF DEF,TIMER                                                              CONTROL1.189    
     *,TIMER                                                               CONTROL1.190    
*ENDIF                                                                     CONTROL1.191    
C -------------------------------------------------------------            CONTROL1.193    
*CALL C_G                                                                  CONTROL1.194    
*CALL C_LAPSE                                                              CONTROL1.195    
*CALL C_R_CP                                                               CONTROL1.196    
*CALL C_LHEAT                                                              CONTROL1.197    
*CALL C_0_DG_C                                                             CONTROL1.198    
*CALL C_MDI                                                                CONTROL1.199    
*CALL CSUBMODL                                                             UDG2F305.56     
*CALL CPPXREF                                                              UDG2F305.58     
*CALL PPXLOOK                                                              UDG2F305.59     
*CALL NRECON                                                               UDG2F305.60     
*CALL CANCILA                                                              UDG2F305.61     
*CALL C_ITEMS                                                              UDG2F305.62     
*CALL RCPARAM                                                              UIE2F401.15     
*CALL CNTLATM                                                              GDG0F401.203    
*CALL C_DENSTY                                                             UDG1F401.4      
*CALL NSTYPES                                                              GDR7F404.6      
! -------------------------------------------------------------            UDG2F305.63     
                                                                           CONTROL1.202    
      INTEGER                                                              CONTROL1.203    
     * J,I,K,IJ,IJMIN,KK        !Integer indices                           ADR1F304.24     
     *,N_TYPES_IN,N_TYPES_OUT   !No of different field types               CONTROL1.205    
     *,N_FIELDS_IN,N_FIELDS_OUT !No of fields per type                     CONTROL1.206    
     *,TYPE                     !Horiz interp mode                         CONTROL1.207    
     *,NBLP1                    !No of B.L. levs + 1                       CONTROL1.208    
     *,COASTAL_POINTS           !No of coastal points                      CONTROL1.209    
     *,START_BLOCK_IN           !READHEAD argument                         CONTROL1.210    
     *,START_BLOCK_OUT          !READHEAD argument                         CONTROL1.211    
     *,POS_D1_IN                !Pointers used to address                  CONTROL1.212    
     *,POS_D1_OUT,POS_D1_TMP    !levels in vert interpolation              CONTROL1.213    
     *,POSU,POSV,POS            !Position returned by LOCATE               UIE2F401.86     
     *,POS2        ! Position of u field returned by LOCATE when S=9       UIE2F401.87     
     *,POS3        ! Position of v field returned by LOCATE when S=9       UIE2F401.88     
     *,POSUV       ! Position of u,v field returned by LOCATE when S=9     UIE2F401.89     
     *,POS_IN,POS_OUT           ! Positions returned from LOCATE           UDG6F400.3      
     *,LEN_IO             !Length of I/O returned by BUFFER IN             UDG4F304.15     
     &,LEN_DATA_MASK         ! Length of data in MASK file                 GDR3F400.2      
      INTEGER      IP_ROW_SUM       !Used in averaging polar rows.         UDG4F402.4      
      REAL         RP_ROW_SUM       !Used in averaging polar rows.         UDG4F402.5      
                                                                           CONTROL1.217    
      INTEGER                                                              CONTROL1.218    
     * PP_LEN_IN(LEN2_LOOKUP_IN)      !Length      |                       CONTROL1.219    
     *,PP_NUM_IN(LEN2_LOOKUP_IN)      !No of fields|   For each            CONTROL1.220    
     *,PP_POS_IN(LEN2_LOOKUP_IN)      !Position    |   field type          CONTROL1.221    
     *,PP_TYPE_IN(LEN2_LOOKUP_IN)     !Real,int,log|   on input file       CONTROL1.222    
     *,PP_ITEMC_IN(LEN2_LOOKUP_IN)    !Item code   |                       CONTROL1.223    
     *,PP_LS_IN(LEN2_LOOKUP_IN)       !Land or sea ^ on input file         CONTROL1.224    
                                                                           CONTROL1.225    
     *,PP_LEN_OUT(LEN2_LOOKUP_OUT)   !Length       |                       CONTROL1.226    
     *,PP_NUM_OUT(LEN2_LOOKUP_OUT)   !No of fields |   For each            CONTROL1.227    
     *,PP_POS_OUT(LEN2_LOOKUP_OUT)   !Position     |   field type          CONTROL1.228    
     *,PP_TYPE_OUT(LEN2_LOOKUP_OUT)  !Real,int,log |   on output file      CONTROL1.229    
     *,PP_ITEMC_OUT(LEN2_LOOKUP_OUT) !Item code    |                       CONTROL1.230    
     *,PP_LS_OUT(LEN2_LOOKUP_OUT)    !Land or sea ^  on output file        CONTROL1.231    
     *,PP_SOURCE_OUT(LEN2_LOOKUP_OUT)!NAMLST LOOK S|                       CONTROL1.232    
     *,PP_AREA_OUT(LEN2_LOOKUP_OUT)  !NAMLST LOOK A|                       CONTROL1.233    
                                                                           CONTROL1.234    
      INTEGER      GRID_TYPE(LEN2_LOOKUP_OUT)                              UDG1F400.29     
                                  !Grid type;- 1=p-grid,                   UDG1F400.30     
                                  !            2=q-grid,                   UDG1F400.31     
                                  !            3=zonal mean.               UDG1F400.32     
     *,ICODE          !OUT Return code; successful=0                       CONTROL1.235    
     *                !                 error > 0                          CONTROL1.236    
                                                                           CONTROL1.237    
      CHARACTER*256                                                        CONTROL1.238    
     * CMESSAGE       !OUT Error message if ICODE > 0                      CONTROL1.239    
                                                                           CONTROL1.240    
      INTEGER      STATUS         !Error code from ALLOCATE & DEALLOCATE   UDG4F405.17     
      INTEGER      MODEL          ! STASH internal model number            UDG2F305.64     
      INTEGER      SECTION        ! STASH section number                   UDG2F305.65     
      INTEGER      ITEM_CODE      ! STASH item code                        UDG2F305.66     
      INTEGER      PPXREF_GRID_TYPE                                        UIE2F401.198    
                                                                           UDG2F305.67     
      INTEGER      EXPPXI         ! Function to extract integer            UDG2F305.68     
                                  !  from ppxref file                      UDG2F305.69     
      CHARACTER*36 EXPPXC         ! Function to extract character string   UDG2F305.70     
                                  !  from ppxref file                      UDG2F305.71     
                                                                           CONTROL1.245    
      REAL TEMP                                                            CONTROL1.246    
     *,AKH_OUT(P_LEVELS_OUT+1) !Half level As for output levels            CONTROL1.250    
     *,BKH_OUT(P_LEVELS_OUT+1) !Half level Bs for output levels            CONTROL1.251    
                                                                           CONTROL1.252    
      INTEGER      J_NAMELIST(LEN2_LOOKUP_OUT)                             UDG2F305.74     
                                  !USER_PROG_ANCIL_ITEMC from N'ST ITEMS   UDG2F305.75     
      REAL         R_NAMELIST(LEN2_LOOKUP_OUT)                             UDG2F305.76     
                                  !USER_PROG_RCONST from N'ST ITEMS        UDG2F305.77     
! C_NAMELIST should be dimensioned with LEN2_LOOKUP_OUT but                UDG7F400.109    
! dyanmic character arrays are not allowed in the portable code            UDG7F400.110    
! If MAX_LEN2_LOOKUP_OUT is not big enough the code will stop with an      UDG7F400.111    
! error message                                                            UDG7F400.112    
      CHARACTER*80                                                         UDG7F400.113    
     * C_NAMELIST(MAX_LEN2_LOOKUP_OUT)  !USER_PROG_ANCIL_FILE  ""   ""     UDG7F400.114    
                                  !USER_PROG_ANCIL_FILE from N'ST ITEMS    UDG2F305.79     
      REAL, DIMENSION (:),    ALLOCATABLE :: D1_IN                         UDG4F405.18     
      REAL, DIMENSION (:),    ALLOCATABLE :: D1_OUT                        UDG4F405.19     
      REAL, DIMENSION (:),    ALLOCATABLE :: D1_TMP                        UDG4F405.20     
      REAL, DIMENSION (:),    ALLOCATABLE :: D1_TEMP                       UDG4F405.21     
      REAL, DIMENSION (:),    ALLOCATABLE :: D1_IN_TMP                     UDG4F405.22     
      REAL, DIMENSION (:),    ALLOCATABLE :: P_TMP                         UDG4F405.23     
      REAL, DIMENSION (:),    ALLOCATABLE :: PSTAR_OUT                     UDG4F405.24     
      REAL, DIMENSION (:),    ALLOCATABLE :: P_OUT                         UDG4F405.25     
      REAL, DIMENSION (:, :), ALLOCATABLE :: P_HALF_TMP                    UDG4F405.26     
      REAL, DIMENSION (:, :), ALLOCATABLE :: P_EXNER_HALF_TMP              UDG4F405.27     
      REAL, DIMENSION (:),    ALLOCATABLE :: TOPOG_OUT                     UDG4F405.28     
      REAL, DIMENSION (:),    ALLOCATABLE :: TOPOG_OLD                     UDG4F405.29     
      REAL, DIMENSION (:),    ALLOCATABLE :: THR_OUT                       UDG4F405.30     
                                                                           UDG1F400.53     
! Scalars for coastal adjustment                                           UDG1F400.54     
      INTEGER      INDEX_OUT(P_FIELD_OUT) !\ Gather indices linking        UDG1F400.55     
      INTEGER      INDEX_IN(P_FIELD_OUT)  !/ coastal points on source      UDG1F400.56     
                                          !  and target grids              UDG1F400.57     
      INTEGER      INDEX_TARG_SEA(P_FIELD_OUT)                             UDG1F400.58     
                                    !Index of unresolved sea points        UDG1F400.59     
      INTEGER      INDEX_TARG_LAND(P_FIELD_OUT)                            UDG1F400.60     
                                    !Index of unresolved land points       UDG1F400.61     
      INTEGER      LAND_SEA_INDEX(P_FIELD_OUT)                             UDG1F400.62     
                                    !Index of land pts minus unres pts     UDG1F400.63     
      INTEGER      LAND_UNRES_INDEX(P_FIELD_OUT)                           UDG1F400.64     
                                    !Index of pts mapped onto unresolved   UDG1F400.65     
                                    !  land points                         UDG1F400.66     
      INTEGER      SEA_UNRES_INDEX(P_FIELD_OUT)                            UDG1F400.67     
                                    !Index of pts mapped onto unresolved   UDG1F400.68     
                                    !  sea points                          UDG1F400.69     
      INTEGER      DUMMY            !Dummy argument passd to subroutines   UDG1F400.70     
      INTEGER      LAND_POINTS      !No of land points                     UDG1F400.71     
      INTEGER      LAND_POINTS_OUT  !No of output land points              UDG1F400.72     
      INTEGER      LAND_POINTS_UNRES!No of unresolved land points          UDG1F400.73     
      INTEGER      SEA_POINTS_UNRES !No of unresolved sea points           UDG1F400.74     
      INTEGER      LEN2_LOOKUP_MASK !2nd dimension of LOOKUP in MASK fil   UDG1F400.75     
      INTEGER      MAXDIM           !Largest dimension of field            UDG1F400.76     
      INTEGER      NSEARCH          !Radius of search for SPIRAL_S         UDG1F400.77     
      INTEGER      INDEX_TARG_SEA_X(P_FIELD_OUT)  !\                       UDG1F400.78     
      INTEGER      INDEX_TARG_LAND_X(P_FIELD_OUT) !Temporary arrays for    UDG1F400.79     
      INTEGER      LAND_SEA_MASK_X(P_FIELD_OUT)   !for calls to SPIRAL_S   UDG1F400.80     
      INTEGER      SEA_POINTS_UNRESX              !and CALC_NSEARCH        UDG1F400.81     
      INTEGER      LAND_POINTS_UNRESX             !/                       UDG1F400.82     
                                                                           UDG1F400.83     
! Parameters for horizontal interpolation                                  UDG1F400.84     
      INTEGER      ICOF             !Second dimension of coefficents ary   UDG1F400.85     
      INTEGER      IDIM             !Second dimension of index arrays      UDG1F400.86     
      PARAMETER(ICOF=2)                                                    UDG1F400.87     
      PARAMETER(IDIM=4)                                                    UDG1F400.88     
                                                                           UDG1F400.89     
! Scalars for horizontal interpolation                                     UDG1F400.90     
      INTEGER      X_COLS_IN        !N_S dimension (input to H_INT_CTL)    UDG1F400.91     
      INTEGER      X_COLS_OUT       !N_S dimension (output of H_INT_CTL)   UDG1F400.92     
      INTEGER      X_FIELD_IN       !Field length \ P_FIELD or U_FIELD     UDG1F400.93     
      INTEGER      X_FIELD_OUT      !Field length /(in/out of H_INT_CTL)   UDG1F400.94     
      INTEGER      X_ROWS_IN        !E_W dimension (input to H_INT_CTL)    UDG1F400.95     
      INTEGER      X_ROWS_OUT       !E_W dimension (output of H_INT_CTL)   UDG1F400.96     
      LOGICAL      GLOBAL           !True if global area required          UDG1F400.97     
                                                                           UDG1F400.98     
! Dynamic arrays for horizontal interpolation                              UDG1F400.99     
      INTEGER      AW_INDEX_TARG_LHS(ROW_LENGTH_OUT+1,IDIM)                UDG1F400.100    
                                    !Index of source box overlapping       UDG1F400.101    
                                    !lhs of target grid-box                UDG1F400.102    
      INTEGER      AW_INDEX_TARG_TOP(P_ROWS_OUT+1,IDIM)                    UDG1F400.103    
                                    !Index of source box overlapping       UDG1F400.104    
                                    !top of target grid-box                UDG1F400.105    
      INTEGER      BL_INDEX_B_L(P_FIELD_OUT,IDIM)                          UDG1F400.106    
                                    !Gather index for bottom l.h.c of      UDG1F400.107    
                                    !source grid box. 1=P-pts; 2=UV-pts    UDG1F400.108    
      INTEGER      BL_INDEX_B_R(P_FIELD_OUT,IDIM)                          UDG1F400.109    
                                    !Gather index for bottom r.h.c of      UDG1F400.110    
                                    !source grid box. 1=P-pts; 2=UV-pts    UDG1F400.111    
      INTEGER      BL_INDEX_NEAREST(P_FIELD_OUT)                           UDG1F400.112    
                                    !Gather index for nearest point on     UDG1F400.113    
                                    !source grid for each target P-pt      UDG1F400.114    
      REAL         AW_AREA_BOX(IDIM)                                       UDG1F400.115    
                                    !area of grid box in sq units of       UDG1F400.116    
      REAL         AW_COLAT_T(P_ROWS_OUT+1,IDIM)                           UDG1F400.117    
                                    !Colatitude of top of target grd-box   UDG1F400.118    
                                    ! (in units of DELTA_LAT_SRCE)         UDG1F400.119    
      REAL         AW_LONG_L(ROW_LENGTH_OUT+1,IDIM)                        UDG1F400.120    
                                    !Left longitude of target grid-box     UDG1F400.121    
                                    ! (in units of DELTA_LONG_SRCE)        UDG1F400.122    
      REAL         COEFF1(U_FIELD_OUT,ICOF)!Coefficient of rotation no 1   UDG1F400.123    
      REAL         COEFF2(U_FIELD_OUT,ICOF)!Coefficient of rotation no 2   UDG1F400.124    
      REAL         COEFF3(U_FIELD_IN,ICOF) !Coefficient of rotation no 1   UDG1F400.125    
      REAL         COEFF4(U_FIELD_IN,ICOF) !Coefficient of rotation no 2   UDG1F400.126    
      REAL         WEIGHT_B_L(P_FIELD_OUT,IDIM) !Weights used for          UDG1F400.127    
      REAL         WEIGHT_B_R(P_FIELD_OUT,IDIM) !\bi-linear horizontal     UDG1F400.128    
      REAL         WEIGHT_T_L(P_FIELD_OUT,IDIM) !/interpolation            UDG1F400.129    
      REAL         WEIGHT_T_R(P_FIELD_OUT,IDIM) ! 1=P-pts; 2=U-pts;        UDG1F400.130    
      LOGICAL      H_INT_TYPE       !=T Area weighted interpolation;       UDG1F400.131    
                                    !=F Bi-linear interpolation            UDG1F400.132    
      LOGICAL      LPOLARCHK        ! True if polar rows to be             UDG4F402.6      
                                    ! averaged after horizontal            UDG4F402.7      
                                    ! interpolation                        UDG4F402.8      
                                                                           UDG1F400.133    
      LOGICAL                                                              CONTROL1.304    
     * LAND_SEA_MASK_IN(P_FIELD_IN)   ! Input land-sea mask                CONTROL1.305    
     *,LAND_SEA_MASK_OUT(P_FIELD_OUT) ! Output land-sea mask               CONTROL1.306    
     *,LAND_SEA_MASK(P_FIELD_OUT)     ! Temp output land-sea mask          CONTROL1.307    
     *,TOPOG_MASK(P_FIELD_OUT)        ! Mask for topography subarea        CONTROL1.308    
                                                                           CONTROL1.309    
      REAL LAPSE_R_OVER_G,G_OVER_LAPSE_R                                   CONTROL1.310    
      PARAMETER(LAPSE_R_OVER_G=LAPSE*R/G)                                  CONTROL1.311    
      PARAMETER(G_OVER_LAPSE_R=G/(LAPSE*R))                                CONTROL1.312    
      REAL PR_OUT,TR_OUT,TS_OUT ! Intermediate temporaries used in calc    CONTROL1.313    
     *                          ! of pstar if ancillary orog provided      CONTROL1.314    
     *,SUM                     ! Used in calc of polar values              AD200593.140    
                                                                           CONTROL1.315    
      LOGICAL                                                              CONTROL1.316    
     * VERT         ! Switch for vertical interpolation                    CONTROL1.317    
     *,HORIZ        ! Switch for horizontal interpolation                  CONTROL1.318    
     *,GH_TO_LAM    ! Switch signifying global to limited area             CONTROL1.319    
     *,MASK         ! Switch for land/sea mask                             CONTROL1.321    
     *,UARS         ! Switch for UARS data                                 CONTROL1.322    
     *,TRANS        ! Switch for transplanting data                        AD221292.100    
     *,STRAT_Q      ! Switch to reset stratospheric Q                      CONTROL1.323    
     *,RESET        ! Switch to reset fc time info in FIXHD                CONTROL1.324    
     *,GRIB         ! Switch for GRIB data winds on A grid                 CONTROL1.325    
     *,SSTANOM      ! Switch for SST anomaly                               CONTROL1.326    
     *,LOG_ICE_FRAC ! Switch for ice frac update                           CONTROL1.327    
     *,LSM          ! Logical set if ancillary land-sea mask requested     CONTROL1.328    
     *,LOZONE       ! Logical set if vert int of ozone required            CONTROL1.329    
     *,OCEAN        ! Logical set if ocean reconfiguration                 CONTROL1.330    
     *,ROT_IN       ! Logical set if input grid rotated                    CONTROL1.331    
     *,ROT_OUT      ! Logical set if output grid rotated                   CONTROL1.332    
     *,C_GRID_IN                  !=T C-grid; =F B-grid input grid         AD200593.141    
     *,C_GRID_OUT                 !=T C-grid; =F B-grid output grid        AD200593.142    
     *,RadialGridIn               !=T Vert co-ord radius =F hybrid         UIE2F401.16     
     *,RadialGridOut              !=T Vert co-ord radius =F hybrid         UIE2F401.17     
     *,RM_CP                                                               UDG6F405.39     
     *,CYCLIC       ! Switch for overlapping LAM fields                    UDG1F304.21     
                                                                           CONTROL1.333    
      DATA SSTANOM/.FALSE./                                                CONTROL1.334    
                                                                           CONTROL1.335    
      INTEGER NDATASETS,PP_LEN_INTHD,PP_LEN_REALHD                         GDR1F401.18     
     *,PP_LEN2_LEVDEPC,IOUNIT                                              CONTROL1.337    
                                                                           GRB0F304.42     
      PARAMETER(PP_LEN_INTHD=15,PP_LEN_REALHD=6)                           CONTROL1.339    
      PARAMETER(PP_LEN2_LEVDEPC=4)                                         CONTROL1.340    
      INTEGER FIXHD_ANCIL(256,NDATASETS)                                   CONTROL1.341    
     *,      INTHD_ANCIL(PP_LEN_INTHD,NDATASETS)                           CONTROL1.342    
     *,      LOOKUP_ANCIL(LEN1_LOOKUP_OUT,NLOOKUPS)                        CONTROL1.343    
     *,      LOOKUP_START(NDATASETS)                                       CONTROL1.344    
     *,      FTN_ANCIL(NDATASETS)                                          CONTROL1.345    
     *,      SWITCH(NANCIL_FIELDS)                                         GDR1F401.19     
     *,      ANCIL_ADD(NANCIL_FIELDS)                                      GDR1F401.20     
      CHARACTER*80 TITLE(NDATASETS)                                        CONTROL1.349    
      REAL                                                                 CONTROL1.350    
     *      REALHD_ANCIL(PP_LEN_REALHD,NDATASETS)                          CONTROL1.351    
     *     ,LEVDEPC_ANCIL(P_LEVELS_OUT*PP_LEN2_LEVDEPC)                    CONTROL1.352    
     *     ,ICE_FRAC(P_FIELD_OUT),TSTAR(P_FIELD_OUT)                       CONTROL1.353    
     *     ,TSTAR_ANOM(P_FIELD_OUT)                                        CONTROL1.354    
                                                                           CONTROL1.355    
      CHARACTER*80 F_TYPE_TITLE                                            UDG7F400.115    
      CHARACTER*80 PHRASE                                                  CONTROL1.356    
                                                                           UDG6F400.4      
      LOGICAL LOZONE_ANC   ! Set to T if Ozone Ancillary file required     UDG6F400.5      
      LOGICAL ZONAL_IN     ! Set to T if Zonal Ozone data in input data    UDG6F400.6      
      LOGICAL ZONAL_OUT    ! Set to T if Zonal Ozone data in output data   UDG6F400.7      
c                                                                          GBC5F404.12     
      integer real_start_block, real_start_block_in, lbnrec                GBC5F404.13     
     &,disk_address                    ! Current rounded disk address      GBC5F404.14     
     &,number_of_data_words_on_disk    ! Number of data words on disk      GBC5F404.15     
     &,number_of_data_words_in_memory  ! Number of Data Words in memory    GBC5F404.16     
                                                                           CONTROL1.357    
      Integer N_PSL     !  No of pseudo levels                             GDR7F404.7      
*CALL CANCFLDA                                                             GDR1F401.21     
                                                                           UDG4F304.48     
      INTEGER JERR                                                         UDG4F304.49     
      REAL AA           !BUFFER IN UNIT function                           UDG4F304.50     
      INTEGER NFT_UPROG !Unit number of external file for usr prognostic   UDG4F304.51     
                                                                           GBC6F404.4      
      integer err   ! used for file close and open operations              GBC6F404.5      
                                                                           UDG4F304.55     
*CALL P_EXNERC                                                             CONTROL1.377    
                                                                           CONTROL1.378    
      IF (MAX_LEN2_LOOKUP_OUT .LT. LEN2_LOOKUP_OUT) THEN                   UDG7F400.116    
        WRITE(6,*) 'ERROR : Reconfiguration CONTROL'                       UDG7F400.117    
        WRITE(6,*) 'MAX_LEN2_LOOKUP_OUT is not big enough'                 UDG7F400.118    
        WRITE(6,*) 'MAX_LEN2_LOOKUP_OUT= ',max_len2_lookup_out             UDG7F400.119    
        WRITE(6,*) 'LEN2_LOOKUP_OUT= ',LEN2_LOOKUP_OUT                     UDG7F400.120    
        WRITE(6,*) 'MAX_LEN2_LOOKUP_OUT should be at least as big as ',    UDG7F400.121    
     &             'LEN2_LOOKUP_OUT.'                                      UDG7F400.122    
        WRITE(6,*) 'You will need to reset the PARAMETER statement in ',   UDG7F400.123    
     &             'the C_ITEMS comdeck.'                                  GDR1F401.22     
        CALL ABORT                                                         UDG7F400.125    
      ENDIF                                                                UDG7F400.126    
      DUMMY=1                                                              CONTROL1.379    
                                                                           CONTROL1.380    
C---------------------------------------------------------------           CONTROL1.385    
C Read in header info for source dump                                      CONTROL1.386    
C---------------------------------------------------------------           CONTROL1.387    
                                                                           CONTROL1.388    
      CALL SETPOS(NFTIN,0,ICODE)                                           GTD0F400.47     
                                                                           CONTROL1.390    
*IF DEF,TIMER                                                              CONTROL1.391    
      CALL TIMER('READHEAD',3)                                             CONTROL1.392    
*ENDIF                                                                     CONTROL1.393    
                                                                           CONTROL1.394    
      CALL READHEAD(NFTIN,FIXHD_IN,LEN_FIXHD_IN,                           GDG0F401.204    
     &              INTHD_IN,LEN_INTHD_IN,                                 GDG0F401.205    
     &              REALHD_IN,LEN_REALHD_IN,                               GDG0F401.206    
     &              LEVDEPC_IN,LEN1_LEVDEPC_IN,LEN2_LEVDEPC_IN,            GDG0F401.207    
     &              ROWDEPC_IN,LEN1_ROWDEPC_IN,LEN2_ROWDEPC_IN,            GDG0F401.208    
     &              COLDEPC_IN,LEN1_COLDEPC_IN,LEN2_COLDEPC_IN,            GDG0F401.209    
     &              FLDDEPC_IN,LEN1_FLDDEPC_IN,LEN2_FLDDEPC_IN,            GDG0F401.210    
     &              EXTCNST_IN,LEN_EXTCNST_IN,                             GDG0F401.211    
     &              DUMPHIST_IN,LEN_DUMPHIST_IN,                           GDG0F401.212    
     &              CFI1_IN,LEN_CFI1_IN,                                   GDG0F401.213    
     &              CFI2_IN,LEN_CFI2_IN,                                   GDG0F401.214    
     &              CFI3_IN,LEN_CFI3_IN,                                   GDG0F401.215    
     &              LOOKUP_IN,LEN1_LOOKUP_IN,LEN2_LOOKUP_IN,               GDG0F401.216    
     &              LEN_DATA_IN,                                           GDG0F401.217    
*CALL ARGPPX                                                               GDG0F401.218    
     &              START_BLOCK_IN,ICODE,CMESSAGE)                         GDG0F401.219    
                                                                           CONTROL1.410    
*IF DEF,TIMER                                                              CONTROL1.411    
      CALL TIMER('READHEAD',4)                                             CONTROL1.412    
*ENDIF                                                                     CONTROL1.413    
                                                                           CONTROL1.414    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)          CONTROL1.415    
                                                                           CONTROL1.416    
C---------------------------------------------------------------           CONTROL1.417    
C Find number of different input types and their characteristics           CONTROL1.418    
C---------------------------------------------------------------           CONTROL1.419    
                                                                           CONTROL1.420    
*IF DEF,TIMER                                                              CONTROL1.421    
      CALL TIMER('F_TYPE  ',3)                                             CONTROL1.422    
*ENDIF                                                                     CONTROL1.423    
                                                                           CONTROL1.424    
      F_TYPE_TITLE='Input data'                                            UDG7F400.127    
      CALL F_TYPE(LOOKUP_IN,LEN2_LOOKUP_IN,PP_NUM_IN,N_TYPES_IN,           UDG7F400.128    
     &            PP_LEN_IN,PP_ITEMC_IN,PP_TYPE_IN,PP_POS_IN,              UDG7F400.129    
     &            PP_LS_IN,FIXHD_IN,                                       UDG7F400.130    
*CALL ARGPPX                                                               UDG7F400.131    
     &            F_TYPE_TITLE)                                            UDG7F400.132    
                                                                           UDG7F400.133    
*IF DEF,TIMER                                                              CONTROL1.429    
      CALL TIMER('F_TYPE  ',4)                                             CONTROL1.430    
*ENDIF                                                                     CONTROL1.431    
                                                                           CONTROL1.432    
C---------------------------------------------------------------           CONTROL1.433    
C Create header info for dump at new resolution                            CONTROL1.434    
C---------------------------------------------------------------           CONTROL1.435    
                                                                           CONTROL1.436    
*IF DEF,TIMER                                                              CONTROL1.437    
      CALL TIMER('CONVHEAD',3)                                             CONTROL1.438    
*ENDIF                                                                     CONTROL1.439    
                                                                           CONTROL1.440    
      CALL CONVHEAD(VERT,HORIZ,                                            CONTROL1.441    
     * LEN_FIXHD_OUT,FIXHD_OUT,LEN_FIXHD_IN,FIXHD_IN,                      CONTROL1.442    
     * LEN_INTHD_OUT,INTHD_OUT,LEN_INTHD_IN,INTHD_IN,                      CONTROL1.443    
     * LEN_REALHD_OUT,REALHD_OUT,LEN_REALHD_IN,REALHD_IN,                  CONTROL1.444    
     * LEN2_LEVDEPC_OUT,LEN1_LEVDEPC_OUT,LEVDEPC_OUT,                      CONTROL1.445    
     * LEN2_LEVDEPC_IN,LEN1_LEVDEPC_IN,LEVDEPC_IN,                         CONTROL1.446    
     * LEN1_ROWDEPC_OUT,LEN2_ROWDEPC_OUT,ROWDEPC_OUT,                      CONTROL1.447    
     * LEN1_ROWDEPC_IN,LEN2_ROWDEPC_IN,ROWDEPC_IN,                         CONTROL1.448    
     * LEN1_COLDEPC_IN,LEN2_COLDEPC_IN,COLDEPC_IN,                         CONTROL1.449    
     * LEN1_COLDEPC_OUT,LEN2_COLDEPC_OUT,COLDEPC_OUT,                      CONTROL1.450    
     * LEN1_FLDDEPC_IN,LEN2_FLDDEPC_IN,FLDDEPC_IN,                         CONTROL1.451    
     * LEN1_FLDDEPC_OUT,LEN2_FLDDEPC_OUT,FLDDEPC_OUT,                      CONTROL1.452    
     * LEN_EXTCNST_IN,EXTCNST_IN,LEN_EXTCNST_OUT,EXTCNST_OUT,              CONTROL1.453    
     * LEN_CFI1_IN,CFI1_IN,LEN_CFI1_OUT,CFI1_OUT,                          CONTROL1.454    
     * LEN_CFI2_IN,CFI2_IN,LEN_CFI2_OUT,CFI2_OUT,                          CONTROL1.455    
     * LEN_CFI3_IN,CFI3_IN,LEN_CFI3_OUT,CFI3_OUT,                          CONTROL1.456    
     * LEN_DUMPHIST_OUT,DUMPHIST_OUT,LEN_DUMPHIST_IN,DUMPHIST_IN,          CONTROL1.457    
     * LEN1_LOOKUP_OUT,LEN2_LOOKUP_OUT,LEN_DATA_OUT,                       CONTROL1.458    
     * ROW_LENGTH_OUT,P_ROWS_OUT,P_LEVELS_OUT,Q_LEVELS_OUT,                CONTROL1.459    
     * ST_LEVELS_OUT,SM_LEVELS_OUT,                                        UJS1F401.27     
     * TR_LEVELS_OUT,BL_LEVELS_OUT,TR_VARS_OUT,                            UJS1F401.28     
     & MAX_VARIABLES_OUT, OZONE_LEVELS_OUT,                                GDR6F405.11     
     * U_ROWS_OUT,U_FIELD_OUT,P_FIELD_OUT,TR_LEVELS_ADV_OUT,               CONTROL1.462    
     * RadialGridOut,                                                      UIE2F401.85     
     * P_LEVELS_IN,Q_LEVELS_IN,ST_LEVELS_IN,SM_LEVELS_IN,                  UJS1F401.29     
     * TOPOG_MASK,RESET,OCEAN,C_GRID_OUT)                                  UJS1F401.30     
                                                                           CONTROL1.464    
*IF DEF,TIMER                                                              CONTROL1.465    
      CALL TIMER('CONVHEAD',4)                                             CONTROL1.466    
*ENDIF                                                                     CONTROL1.467    
                                                                           CONTROL1.468    
C---------------------------------------------------------------           CONTROL1.469    
C Check for error in file pointers                                         CONTROL1.470    
C---------------------------------------------------------------           CONTROL1.471    
                                                                           CONTROL1.472    
C Check for error in file pointers                                         CONTROL1.473    
       lbnrec=30                                                           GBC5F404.17     
       real_start_block_in=start_block_in                                  GBC5F404.18     
       if(start_block_in.ne.fixhd_in(160)) then                            GBC5F404.19     
C If new format Dumpfile, we must reset the start address                  GBC5F404.20     
         if((lookup_in(lbnrec,1).eq.0) .or.                                GBC5F404.21     
C Prog lookups in dump before vn3.2:                                       GBC5F404.22     
     2     ((lookup_in(lbnrec,1).eq.imdi) .and.                            GBC5F404.23     
     3      (fixhd_in(12).le.301))) then                                   GBC5F404.24     
         CALL POSERROR('input model data',                                 CONTROL1.475    
     *   START_BLOCK_IN,160,FIXHD_IN(160))                                 CONTROL1.476    
         CALL ABORT                                                        CONTROL1.477    
         else                                                              GBC5F404.25     
           real_start_block_in=fixhd_in(160)                               GBC5F404.26     
         endif                                                             GBC5F404.27     
       ENDIF                                                               CONTROL1.478    
                                                                           CONTROL1.479    
!-------------------------------------------------------------------       GRS2F404.227    
! Set LAMIPII in common block CANCILA using LAMIPII_IN                     GRS2F404.228    
!-------------------------------------------------------------------       GRS2F404.229    
       LAMIPII=LAMIPII_IN                                                  GRS2F404.230    
C---------------------------------------------------------------------     UDG1F304.25     
C Set switches for coastal adjustemnt                                      UDG1F304.26     
C---------------------------------------------------------------------     UDG1F304.27     
                                                                           UDG1F304.28     
       IF(FIXHD_OUT(4).NE.3.AND.FIXHD_OUT(4).NE.103)THEN                   UDG1F304.29     
         CYCLIC=.TRUE.                                                     UDG1F304.30     
       ELSE                                                                UDG1F304.31     
         CYCLIC=.FALSE.                                                    UDG1F304.32     
       ENDIF                                                               UDG1F304.33     
                                                                           UDG1F304.36     
C---------------------------------------------------------------           CONTROL1.480    
C Set up gather indices and weights for horizontal interpolation           CONTROL1.481    
C---------------------------------------------------------------           CONTROL1.482    
                                                                           CONTROL1.483    
      IF(.NOT.OCEAN)THEN                                                   CONTROL1.484    
*IF DEF,TIMER                                                              CONTROL1.485    
      CALL TIMER('HINTINIT',3)                                             UDG1F400.134    
*ENDIF                                                                     CONTROL1.487    
                                                                           CONTROL1.488    
      CALL H_INT_INIT(ICOF,IDIM,P_FIELD_OUT,P_ROWS_IN,P_ROWS_OUT           UDG1F400.135    
     &,               ROW_LENGTH_IN,ROW_LENGTH_OUT                         UDG1F400.136    
     &,               U_FIELD_IN,U_FIELD_OUT,U_ROWS_IN,U_ROWS_OUT          UDG1F400.137    
     &,               GLOBAL,GRIB,H_INT_TYPE,FIXHD_IN,FIXHD_OUT            UDG1F400.138    
     &,               REALHD_IN,REALHD_OUT,AW_AREA_BOX                     UDG1F400.139    
     &,               AW_INDEX_TARG_LHS,AW_INDEX_TARG_TOP                  UDG1F400.140    
     &,               BL_INDEX_B_L,BL_INDEX_B_R,BL_INDEX_NEAREST           UDG1F400.141    
     &,               AW_COLAT_T,AW_LONG_L                                 UDG1F400.142    
     &,               COEFF1,COEFF2,COEFF3,COEFF4                          UDG1F400.143    
     &,               WEIGHT_T_R,WEIGHT_B_R,WEIGHT_T_L,WEIGHT_B_L)         UDG1F400.144    
*IF DEF,TIMER                                                              CONTROL1.495    
      CALL TIMER('HINTINIT',4)                                             UDG1F400.145    
*ENDIF                                                                     CONTROL1.497    
      ENDIF                                                                CONTROL1.498    
                                                                           CONTROL1.499    
      IF(.NOT.(RadialGridIn.AND..NOT.RadialGridOut))THEN                   UIE2F401.211    
C---------------------------------------------------------------           CONTROL1.500    
C Interpolate land/sea mask                                                CONTROL1.501    
C---------------------------------------------------------------           CONTROL1.502    
                                                                           CONTROL1.503    
      IF(.NOT.OCEAN)THEN                                                   CONTROL1.504    
                                                                           CONTROL1.505    
C Calculate new land/sea mask and gather indices for coastal ajustment     CONTROL1.506    
                                                                           CONTROL1.507    
      MASK=.FALSE.                                                         CONTROL1.508    
                                                                           CONTROL1.509    
C Read in new land/sea mask if requested                                   CONTROL1.512    
                                                                           CONTROL1.513    
        LSM=.FALSE.                                                        CONTROL1.514    
        DO K=1,10000                                                       CONTROL1.515    
          READ(5,ITEMS,END=1222,ERR=1223,IOSTAT=ICODE)                     UDG3F402.129    
         IF(ITEM.EQ.30.AND.SOURCE.EQ.2)LSM=.TRUE.                          GDG0F401.220    
        ENDDO                                                              CONTROL1.518    
1222    CONTINUE                                                           CONTROL1.519    
1223    CONTINUE                                                           UDG3F402.130    
        REWIND 5                                                           CONTROL1.520    
                                                                           CONTROL1.521    
        IF(LSM)THEN                                                        CONTROL1.522    
                                                                           CONTROL1.523    
          MASK=.TRUE.                                                      CONTROL1.524    
                                                                           CONTROL1.525    
          WRITE(6,'(//,'' READING IN ANCILLARY LAND-SEA MASK'')')          CONTROL1.526    
          WRITE(6,'(   '' ----------------------------------'')')          CONTROL1.527    
                                                                           CONTROL1.528    
C Read in fixed length header from MASK file                               ADR1F304.26     
C FIXHD_ANCIL is empty ; Treat as workspace here.                          ADR1F304.27     
          CALL READ_FLH (39,FIXHD_ANCIL,LEN_FIXHD_IN,ICODE,CMESSAGE)       ADR1F304.28     
          IF (ICODE.NE.0) THEN                                             ADR1F304.29     
            CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,39)                    ADR1F304.30     
          ENDIF                                                            ADR1F304.31     
      CALL SETPOS (39,0,ICODE)                                             GTD0F400.48     
                                                                           ADR1F304.33     
C Get second dimension of lookup table in MASK file                        ADR1F304.34     
          LEN2_LOOKUP_MASK = FIXHD_ANCIL(152,1)                            ADR1F304.35     
                                                                           ADR1F304.36     
! Get length of data in MASK file                                          GDR3F400.3      
          LEN_DATA_MASK = FIXHD_ANCIL(161,1)                               GDR3F400.4      
                                                                           GDR3F400.5      
*IF DEF,TIMER                                                              CONTROL1.529    
      CALL TIMER('READHEAD',3)                                             CONTROL1.530    
*ENDIF                                                                     CONTROL1.531    
                                                                           CONTROL1.532    
      CALL READHEAD(39,FIXHD_ANCIL,LEN_FIXHD_IN,                           GDG0F401.221    
     &              INTHD_ANCIL,PP_LEN_INTHD,                              GDG0F401.222    
     &              REALHD_ANCIL,PP_LEN_REALHD,                            GDG0F401.223    
     &              DUMMY,DUMMY,DUMMY,                                     GDG0F401.224    
     &              DUMMY,DUMMY,DUMMY,                                     GDG0F401.225    
     &              DUMMY,DUMMY,DUMMY,                                     GDG0F401.226    
     &              DUMMY,DUMMY,DUMMY,                                     GDG0F401.227    
     &              DUMMY,DUMMY,                                           GDG0F401.228    
     &              DUMMY,DUMMY,                                           GDG0F401.229    
     &              DUMMY,DUMMY,                                           GDG0F401.230    
     &              DUMMY,DUMMY,                                           GDG0F401.231    
     &              DUMMY,DUMMY,                                           GDG0F401.232    
     &              LOOKUP_ANCIL,LEN1_LOOKUP_IN,LEN2_LOOKUP_MASK,          GDG0F401.233    
     &              IMDI,                                                  GDG0F401.234    
*CALL ARGPPX                                                               GDG0F401.235    
     &              START_BLOCK_IN,ICODE,CMESSAGE)                         GDG0F401.236    
                                                                           CONTROL1.548    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,39)             CONTROL1.549    
                                                                           CONTROL1.550    
*IF DEF,TIMER                                                              CONTROL1.551    
      CALL TIMER('READHEAD',4)                                             CONTROL1.552    
*ENDIF                                                                     CONTROL1.553    
                                                                           CONTROL1.554    
*IF DEF,TIMER                                                              CONTROL1.555    
      CALL TIMER('READFLDS',3)                                             CONTROL1.556    
*ENDIF                                                                     CONTROL1.557    
                                                                           CONTROL1.558    
! Use LAND_SEA_MASK_OUT as workspace.                                      GDR3F400.7      
         CALL READFLDS(39,1,1,LOOKUP_ANCIL,LEN1_LOOKUP_OUT,                GDG0F401.237    
     &                 LAND_SEA_MASK_OUT,P_FIELD_OUT,FIXHD_ANCIL,          GDG0F401.238    
*CALL ARGPPX                                                               GDG0F401.239    
     &                 ICODE,CMESSAGE)                                     GDG0F401.240    
          IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,39)         CONTROL1.561    
                                                                           CONTROL1.562    
*IF DEF,TIMER                                                              CONTROL1.563    
      CALL TIMER('READFLDS',4)                                             CONTROL1.564    
*ENDIF                                                                     CONTROL1.565    
                                                                           CONTROL1.566    
      CALL SETPOS(39,0,ICODE)                                              GTD0F400.49     
                                                                           CONTROL1.568    
C Convert l/s mask to integer                                              CONTROL1.569    
          DO I=1,P_FIELD_OUT                                               CONTROL1.570    
            IF (LAND_SEA_MASK_OUT(I)) THEN                                 GDR3F400.10     
              ID1_OUT(I)=1                                                 GDR3F400.11     
            ELSE                                                           GDR3F400.12     
              ID1_OUT(I)=0                                                 GDR3F400.13     
            ENDIF                                                          GDR3F400.14     
          ENDDO                                                            CONTROL1.572    
                                                                           CONTROL1.573    
        ENDIF                                                              CONTROL1.574    
                                                                           CONTROL1.575    
      CALL LOCATE(30,PP_ITEMC_IN,N_TYPES_IN,POS)                           CONTROL1.578    
      IF(POS.EQ.0)THEN                                                     CONTROL1.579    
      WRITE(6,'('' *ERROR*  L/S mask not in input file'')')                CONTROL1.580    
      CALL ABORT                                                           CONTROL1.581    
      ENDIF                                                                CONTROL1.582    
                                                                           CONTROL1.583    
*IF DEF,TIMER                                                              CONTROL1.584    
      CALL TIMER('READFLDS',3)                                             CONTROL1.585    
*ENDIF                                                                     CONTROL1.586    
                                                                           CONTROL1.587    
      CALL READFLDS(NFTIN,1,PP_POS_IN(POS),LOOKUP_IN,LEN1_LOOKUP_IN,       GDG0F401.241    
     &              LAND_SEA_MASK_IN,P_FIELD_IN,FIXHD_IN,                  GDG0F401.242    
*CALL ARGPPX                                                               GDG0F401.243    
     &                 ICODE,CMESSAGE)                                     GDG0F401.244    
          IF(ICODE.EQ.1501)THEN                                            UDG4F402.9      
            IF(LPOLARCHK)THEN                                              UDG4F402.10     
              write(6,*) 'Averaging polar rows to make them constant'      UDG4F402.11     
!   North polar row                                                        UDG4F402.12     
              IP_ROW_SUM=0                                                 UDG4F402.13     
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.14     
                IF(LAND_SEA_MASK_IN(I))IP_ROW_SUM=IP_ROW_SUM+1             UDG4F402.15     
              END DO                                                       UDG4F402.16     
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.17     
                IF(IP_ROW_SUM.GE.ROW_LENGTH_IN/2)THEN                      UDG4F402.18     
                  LAND_SEA_MASK_IN(I)=.TRUE.                               UDG4F402.19     
                ELSE                                                       UDG4F402.20     
                  LAND_SEA_MASK_IN(I)=.FALSE.                              UDG4F402.21     
                END IF                                                     UDG4F402.22     
              END DO                                                       UDG4F402.23     
!   South polar row                                                        UDG4F402.24     
              IP_ROW_SUM=0                                                 UDG4F402.25     
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.26     
                IF(LAND_SEA_MASK_IN((P_ROWS_IN-1)*ROW_LENGTH_IN+I))        UDG4F402.27     
     &            IP_ROW_SUM=IP_ROW_SUM+1                                  UDG4F402.28     
              END DO                                                       UDG4F402.29     
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.30     
                IF(IP_ROW_SUM.GE.ROW_LENGTH_IN/2)THEN                      UDG4F402.31     
                  LAND_SEA_MASK_IN((P_ROWS_IN-1)*ROW_LENGTH_IN+I)          UDG4F402.32     
     &              =.TRUE.                                                UDG4F402.33     
                ELSE                                                       UDG4F402.34     
                  LAND_SEA_MASK_IN((P_ROWS_IN-1)*ROW_LENGTH_IN+I)          UDG4F402.35     
     &              =.FALSE.                                               UDG4F402.36     
                END IF                                                     UDG4F402.37     
              END DO                                                       UDG4F402.38     
            END IF                                                         UDG4F402.39     
          ELSE IF(ICODE.NE.0)THEN                                          UDG4F402.40     
            CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)                  UDG4F402.41     
          END IF                                                           UDG4F402.42     
                                                                           CONTROL1.591    
*IF DEF,TIMER                                                              CONTROL1.592    
      CALL TIMER('READFLDS',4)                                             CONTROL1.593    
*ENDIF                                                                     CONTROL1.594    
                                                                           CONTROL1.595    
                                                                           CONTROL1.596    
C Convert l/s mask to integer                                              CONTROL1.597    
      DO I=1,P_FIELD_IN                                                    CONTROL1.598    
        ID1_IN(I)=0                                                        CONTROL1.599    
        IF(LAND_SEA_MASK_IN(I))ID1_IN(I)=1                                 CONTROL1.600    
      ENDDO                                                                CONTROL1.601    
                                                                           CONTROL1.602    
C Switch on horizontal interpolation if new land sea mask is               UDG6F304.5      
C different from that in dump.                                             UDG6F304.6      
      IF(LSM)THEN                                                          UDG6F304.7      
        DO I=1,P_FIELD_OUT                                                 UDG6F304.8      
          IF(.NOT.HORIZ)THEN                                               UDG6F304.9      
            IF(ID1_IN(I).NE.ID1_OUT(I))THEN                                UDG6F304.10     
              HORIZ=.TRUE.                                                 UDG6F304.11     
              WRITE                                                        UDG6F304.12     
     &         (6,*) ' HORIZONTAL INTERPOLATION SWITCHED ON BECAUSE'//     UDG6F304.13     
     &               ' LAND SEA MASK IS BEING CHANGED'                     UDG6F304.14     
            ENDIF                                                          UDG6F304.15     
          ENDIF                                                            UDG6F304.16     
        ENDDO                                                              UDG6F304.17     
      ENDIF                                                                UDG6F304.18     
                                                                           UDG6F304.19     
      IF(HORIZ)THEN                                                        UDG2F400.4      
                                                                           UDG2F400.5      
*IF DEF,TIMER                                                              CONTROL1.603    
      CALL TIMER('COAST_AJ',3)                                             CONTROL1.604    
*ENDIF                                                                     CONTROL1.605    
                                                                           CONTROL1.606    
      CALL COAST_AJ(BL_INDEX_B_L(1,1),BL_INDEX_B_R(1,1)                    UDG1F400.146    
     &,             WEIGHT_T_R(1,1),WEIGHT_B_R(1,1)                        UDG1F400.147    
     &,             WEIGHT_T_L(1,1),WEIGHT_B_L(1,1)                        UDG1F400.148    
     *,ROW_LENGTH_IN,P_ROWS_IN,P_FIELD_OUT,ID1_IN                          CONTROL1.609    
     *,ID1_OUT,INDEX_OUT,INDEX_IN,COASTAL_POINTS,MASK                      CONTROL1.610    
     *,INDEX_TARG_SEA,SEA_POINTS_UNRES,INDEX_TARG_LAND                     CONTROL1.611    
     *,LAND_POINTS_UNRES)                                                  CONTROL1.612    
                                                                           CONTROL1.613    
*IF DEF,TIMER                                                              CONTROL1.614    
      CALL TIMER('COAST_AJ',4)                                             CONTROL1.615    
*ENDIF                                                                     CONTROL1.616    
                                                                           CONTROL1.617    
C Convert l/s mask back to logical                                         CONTROL1.618    
      DO I=1,P_FIELD_OUT                                                   CONTROL1.619    
        LAND_SEA_MASK_OUT(I)=.FALSE.                                       CONTROL1.620    
        IF(ID1_OUT(I).NE.0)LAND_SEA_MASK_OUT(I)=.TRUE.                     CONTROL1.621    
      ENDDO                                                                CONTROL1.622    
                                                                           CONTROL1.623    
      WRITE(6,'('' COASTAL PTS ='',I10)')COASTAL_POINTS                    CONTROL1.624    
      WRITE(6,'('' UNRES SEA PTS ='',I10)')SEA_POINTS_UNRES                CONTROL1.625    
      WRITE(6,'('' UNRES LAND PTS ='',I10)')LAND_POINTS_UNRES              CONTROL1.626    
                                                                           CONTROL1.627    
      WRITE (6,'(/,'' Input Land Sea Mask.'')')                            GDR3F400.15     
      IJ=1                                                                 CONTROL1.628    
      DO K=1,P_ROWS_IN                                                     GDR3F400.16     
        IJMIN=MIN(IJ+149,IJ+ROW_LENGTH_IN-1)                               GDR3F400.17     
        WRITE(6,'('' '',150I1)')(ID1_IN(I),I=IJ,IJMIN)                     GDR3F400.18     
        IJ=IJ+ROW_LENGTH_IN                                                CONTROL1.631    
      ENDDO                                                                CONTROL1.632    
                                                                           CONTROL1.639    
C Calculate no of output land points and store in integer header           CONTROL1.640    
      LAND_POINTS_OUT=0                                                    CONTROL1.641    
      DO I=1,P_FIELD_OUT                                                   CONTROL1.642    
      IF(LAND_SEA_MASK_OUT(I))LAND_POINTS_OUT=LAND_POINTS_OUT+1            CONTROL1.643    
      ENDDO                                                                CONTROL1.644    
                                                                           UDG1F404.7      
! Check number of land points against that specified in                    UDG1F404.8      
! namelist RECON                                                           UDG1F404.9      
        IF(LAND_POINTS_OUT.NE.LAND_POINTS_UMUI)THEN                        UDG1F404.10     
          write(6,*) 'ERROR : Reconfiguration CONTROL'                     UDG1F404.11     
          write(6,'(''No of land points in output Land-sea mask     = ''   UDG1F404.12     
     &           ,I6)') LAND_POINTS_OUT                                    UDG1F404.13     
          write(6,'(''No of land points specified in namelist RECON = ''   UDG1F404.14     
     &           ,I6)') LAND_POINTS_UMUI                                   UDG1F404.15     
          write(6,'(''Please reprocess the job with the correct number''   UDG1F404.16     
     &           ,'' of land points in UMUI panel'' )')                    UDG1F404.17     
          CALL ABORT                                                       UDG1F404.18     
        END IF                                                             UDG1F404.19     
                                                                           UDG1F404.20     
      INTHD_OUT(25)=LAND_POINTS_OUT                                        CONTROL1.646    
                                                                           CONTROL1.647    
C------------------------------------------------------------------        CONTROL1.648    
C Set up gather indices to satify unresolved land and sea points           CONTROL1.649    
C------------------------------------------------------------------        CONTROL1.650    
                                                                           CONTROL1.651    
C Compute gather index for sea points minus unresolved points              CONTROL1.652    
                                                                           CONTROL1.653    
      IF(.NOT.LSPIRAL_S)THEN                                               UDG1F304.37     
       DO I=1,P_FIELD_OUT                                                  CONTROL1.654    
         LAND_SEA_MASK(I)=.NOT.LAND_SEA_MASK_OUT(I)                        CONTROL1.655    
       ENDDO                                                               CONTROL1.656    
       DO I=1,SEA_POINTS_UNRES                                             CONTROL1.657    
         IF(.NOT.LAND_SEA_MASK_OUT(INDEX_TARG_SEA(I)))                     CONTROL1.658    
     *   LAND_SEA_MASK(INDEX_TARG_SEA(I))=.FALSE.                          CONTROL1.659    
       ENDDO                                                               CONTROL1.660    
                                                                           CONTROL1.661    
      LAND_POINTS = 0                                                      GSS9F402.54     
      DO I=1,P_FIELD_OUT                                                   GSS9F402.55     
        IF(LAND_SEA_MASK(I))THEN                                           GSS9F402.56     
          LAND_POINTS=LAND_POINTS + 1                                      GSS9F402.57     
          LAND_SEA_INDEX(LAND_POINTS) = I                                  GSS9F402.58     
        END IF                                                             GSS9F402.59     
      END DO                                                               GSS9F402.60     
                                                                           CONTROL1.664    
C Assign each unresolved sea pt to nearest non-unresolved sea pt           CONTROL1.665    
                                                                           CONTROL1.666    
       DO I=1,SEA_POINTS_UNRES                                             CONTROL1.667    
                                                                           CONTROL1.668    
         IF(INDEX_TARG_SEA(I).LE.LAND_SEA_INDEX(1))THEN                    CONTROL1.669    
           SEA_UNRES_INDEX(I)=LAND_SEA_INDEX(1)                            CONTROL1.670    
                                                                           CONTROL1.671    
         ELSEIF(INDEX_TARG_SEA(I).GT.LAND_SEA_INDEX(LAND_POINTS))THEN      CONTROL1.672    
                                                                           CONTROL1.673    
           SEA_UNRES_INDEX(I)=LAND_SEA_INDEX(LAND_POINTS)                  CONTROL1.674    
                                                                           CONTROL1.675    
         ELSE                                                              CONTROL1.676    
                                                                           CONTROL1.677    
           DO KK=1,LAND_POINTS-1                                           CONTROL1.678    
             IF(INDEX_TARG_SEA(I).GE.LAND_SEA_INDEX(KK).AND.               CONTROL1.679    
     *       INDEX_TARG_SEA(I).LT.LAND_SEA_INDEX(KK+1))THEN                CONTROL1.680    
               SEA_UNRES_INDEX(I)=LAND_SEA_INDEX(KK)                       CONTROL1.681    
             ENDIF                                                         CONTROL1.682    
           ENDDO                                                           CONTROL1.683    
                                                                           CONTROL1.684    
         ENDIF                                                             CONTROL1.685    
       ENDDO                                                               CONTROL1.686    
                                                                           CONTROL1.687    
C Compute gather index for land points minus unresolved points             CONTROL1.688    
                                                                           CONTROL1.689    
       DO I=1,P_FIELD_OUT                                                  CONTROL1.690    
         LAND_SEA_MASK(I)=LAND_SEA_MASK_OUT(I)                             CONTROL1.691    
       ENDDO                                                               CONTROL1.692    
       DO I=1,LAND_POINTS_UNRES                                            CONTROL1.693    
         IF(LAND_SEA_MASK_OUT(INDEX_TARG_LAND(I)))                         CONTROL1.694    
     *   LAND_SEA_MASK(INDEX_TARG_LAND(I))=.FALSE.                         CONTROL1.695    
       ENDDO                                                               CONTROL1.696    
                                                                           CONTROL1.697    
      LAND_POINTS = 0                                                      GSS9F402.61     
      DO I=1,P_FIELD_OUT                                                   GSS9F402.62     
        IF(LAND_SEA_MASK(I))THEN                                           GSS9F402.63     
          LAND_POINTS=LAND_POINTS + 1                                      GSS9F402.64     
          LAND_SEA_INDEX(LAND_POINTS) = I                                  GSS9F402.65     
        END IF                                                             GSS9F402.66     
      END DO                                                               GSS9F402.67     
                                                                           CONTROL1.700    
C Assign each unresolved land pt to nearest non-unresolved land pt         CONTROL1.701    
                                                                           CONTROL1.702    
       DO I=1,LAND_POINTS_UNRES                                            CONTROL1.703    
                                                                           CONTROL1.704    
         IF(INDEX_TARG_LAND(I).LE.LAND_SEA_INDEX(1))THEN                   CONTROL1.705    
                                                                           CONTROL1.706    
           LAND_UNRES_INDEX(I)=LAND_SEA_INDEX(1)                           CONTROL1.707    
                                                                           CONTROL1.708    
         ELSEIF(INDEX_TARG_LAND(I).GT.LAND_SEA_INDEX(LAND_POINTS))THEN     CONTROL1.709    
                                                                           CONTROL1.710    
           LAND_UNRES_INDEX(I)=LAND_SEA_INDEX(LAND_POINTS)                 CONTROL1.711    
                                                                           CONTROL1.712    
         ELSE                                                              CONTROL1.713    
                                                                           CONTROL1.714    
           DO KK=1,LAND_POINTS-1                                           CONTROL1.715    
             IF(INDEX_TARG_LAND(I).GE.LAND_SEA_INDEX(KK).AND.              CONTROL1.716    
     *       INDEX_TARG_LAND(I).LT.LAND_SEA_INDEX(KK+1))THEN               CONTROL1.717    
               LAND_UNRES_INDEX(I)=LAND_SEA_INDEX(KK)                      CONTROL1.718    
             ENDIF                                                         CONTROL1.719    
           ENDDO                                                           CONTROL1.720    
                                                                           CONTROL1.721    
         ENDIF                                                             CONTROL1.722    
       ENDDO                                                               CONTROL1.723    
                                                                           CONTROL1.724    
      ENDIF                                                                UDG1F304.38     
                                                                           UDG2F400.6      
      ELSE     ! if (horiz) then                                           UDG2F400.7      
                                                                           UDG2F400.8      
C Convert land/sea mask back to logical                                    UDG2F400.9      
                                                                           UDG2F400.10     
        DO I=1,P_FIELD_OUT                                                 UDG2F400.11     
          LAND_SEA_MASK_OUT(I)=.FALSE.                                     UDG2F400.12     
          IF(ID1_IN(I).NE.0)LAND_SEA_MASK_OUT(I)=.TRUE.                    UDG2F400.13     
        ENDDO                                                              UDG2F400.14     
                                                                           UDG2F400.15     
C Calculate no of output land points and store in integer header           UDG2F400.16     
                                                                           UDG2F400.17     
        LAND_POINTS_OUT=0                                                  UDG2F400.18     
        DO I=1,P_FIELD_OUT                                                 UDG2F400.19     
          IF(LAND_SEA_MASK_OUT(I))LAND_POINTS_OUT=LAND_POINTS_OUT+1        UDG2F400.20     
        ENDDO                                                              UDG2F400.21     
                                                                           UDG1F404.21     
! Check number of land points against that specified in                    UDG1F404.22     
! namelist RECON                                                           UDG1F404.23     
        IF(LAND_POINTS_OUT.NE.LAND_POINTS_UMUI)THEN                        UDG1F404.24     
          write(6,*) 'ERROR : Reconfiguration CONTROL'                     UDG1F404.25     
          write(6,'(''No of land points in output Land-sea mask     = ''   UDG1F404.26     
     &           ,I6)') LAND_POINTS_OUT                                    UDG1F404.27     
          write(6,'(''No of land points specified in namelist RECON = ''   UDG1F404.28     
     &           ,I6)') LAND_POINTS_UMUI                                   UDG1F404.29     
          write(6,'(''Please reprocess the job with the correct number''   UDG1F404.30     
     &            ,'' of land points in UMUI panel'')')                    UDG1F404.31     
          CALL ABORT                                                       UDG1F404.32     
        END IF                                                             UDG1F404.33     
        INTHD_OUT(25)=LAND_POINTS_OUT                                      UDG2F400.23     
      ENDIF                                                                UDG2F400.24     
      ENDIF                                                                CONTROL1.725    
                                                                           GDR3F400.19     
      WRITE (6,'(/,'' Output Land Sea Mask.'')')                           GDR3F400.20     
      IJ=1                                                                 GDR3F400.21     
      DO K=1,P_ROWS_OUT                                                    GDR3F400.22     
        IJMIN=MIN(IJ+149,IJ+ROW_LENGTH_OUT-1)                              GDR3F400.23     
        IF(HORIZ)THEN                                                      UDG3F402.164    
          WRITE(6,'('' '',150I1)')(ID1_OUT(I),I=IJ,IJMIN)                  UDG3F402.165    
        ELSE                                                               UDG3F402.166    
          WRITE(6,'('' '',150I1)')(ID1_IN(I),I=IJ,IJMIN)                   UDG3F402.167    
        END IF                                                             UDG3F402.168    
        IJ=IJ+ROW_LENGTH_OUT                                               GDR3F400.25     
      ENDDO                                                                GDR3F400.26     
        WRITE(6,'(''No. of land points='',I6)')LAND_POINTS_OUT             UDG1F404.34     
                                                                           UDG1F404.35     
                                                                           CONTROL1.726    
      ENDIF ! Not PFinc2UM                                                 UIE2F401.212    
C------------------------------------------------------------------        CONTROL1.727    
C Set up LOOKUP headers for output file                                    CONTROL1.728    
C------------------------------------------------------------------        CONTROL1.729    
                                                                           CONTROL1.730    
*IF DEF,TIMER                                                              CONTROL1.731    
      CALL TIMER('CONVLOOK',3)                                             CONTROL1.732    
*ENDIF                                                                     CONTROL1.733    
                                                                           CONTROL1.734    
      CALL CONVLOOK(VERT,N_TYPES_IN,PP_NUM_IN,                             UDG7F400.134    
     &              LEN_FIXHD_OUT,FIXHD_OUT,FIXHD_OUT(4),FIXHD_OUT(11),    UDG7F400.135    
     &              LEN_REALHD_OUT,REALHD_OUT,PP_ITEMC_IN,                 UDG7F400.136    
     &              OZONE_LEVELS_IN,                                       UDG7F400.137    
     &              LEN2_LEVDEPC_OUT,LEN1_LEVDEPC_OUT,LEVDEPC_OUT,         UDG7F400.138    
     &              LEN1_LOOKUP_OUT,LEN2_LOOKUP_OUT,                       UDG7F400.139    
     &              LOOKUP_OUT,LOOKUP_OUT,                                 UDG7F400.140    
     &              LEN1_LOOKUP_IN,LEN2_LOOKUP_IN,                         UDG7F400.141    
     &              LOOKUP_IN,LOOKUP_IN,                                   UDG7F400.142    
     &              ROW_LENGTH_OUT,P_ROWS_OUT,                             UDG7F400.143    
     &              P_LEVELS_OUT,Q_LEVELS_OUT,ST_LEVELS_OUT,               UJS1F401.31     
     &              SM_LEVELS_OUT,BL_LEVELS_OUT,OZONE_LEVELS_OUT,          UJS1F401.32     
     &              U_ROWS_OUT,U_FIELD_OUT,P_FIELD_OUT,PP_AREA_OUT,        UDG7F400.146    
     &              P_LEVELS_IN,Q_LEVELS_IN,ST_LEVELS_IN,SM_LEVELS_IN,     UJS1F401.33     
     &              PP_SOURCE_OUT,R_NAMELIST,C_NAMELIST,J_NAMELIST,        UJS1F401.34     
     &              POINTS_PER_OCEAN_LEVEL,GRID_TYPE,DUMP_PACK,            GDR2F401.14     
*CALL ARGPPX                                                               UDG7F400.150    
     &              LAND_POINTS_OUT,LEN_DATA_OUT,OCEAN,LCAL360,            UDG7F400.151    
     &              C_GRID_IN,C_GRID_OUT,                                  UIE2F401.18     
     &              LOZONE_ZONAL)                                          UDG7F400.152    
c                                                                          GBC5F404.28     
c--reset the disk addresses and lengths for well-formed I/O                GBC5F404.29     
      call set_dumpfile_address(fixhd_out, len_fixhd_out,                  GBC5F404.30     
     &                          lookup_out, len1_lookup_out,               GBC5F404.31     
     &                          len2_lookup_out,                           GBC5F404.32     
     &                          number_of_data_words_in_memory,            GBC5F404.33     
     &                          number_of_data_words_on_disk,              GBC5F404.34     
     &                          disk_address)                              GBC5F404.35     
                                                                           UDG7F400.153    
                                                                           CONTROL1.747    
*IF DEF,TIMER                                                              CONTROL1.748    
      CALL TIMER('CONVLOOK',4)                                             CONTROL1.749    
*ENDIF                                                                     CONTROL1.750    
c--set the new length for the dumpfile to the I/O Routines                 GBC6F404.6      
      call set_dumpfile_length(nftout, disk_address)                       GBC6F404.7      
c--now open the file with contiguous storage if possible                   GBC6F404.8      
      if(.not.ocean) then                                                  GBC6F404.9      
        call file_open (nftout, 'ASTART', 6, 1, 0, err)                    GBC6F404.10     
      else                                                                 GBC6F404.11     
        call file_open (nftout, 'OSTART', 6, 1, 0, err)                    GBC6F404.12     
      endif                                                                GBC6F404.13     
                                                                           CONTROL1.751    
      ALLOCATE (D1_IN(P_FIELD_IN*P_LEVELS_IN+P_FIELD_IN),STAT=STATUS)      UDG4F405.31     
      ALLOCATE (D1_OUT(LEN_ANCIL),STAT=STATUS)                             UDG4F405.32     
      ALLOCATE (D1_TMP(P_FIELD_OUT*P_LEVELS_IN+P_FIELD_OUT),STAT=STATUS)   UDG4F405.33     
      ALLOCATE (D1_TEMP(P_FIELD_OUT),STAT=STATUS)                          UDG4F405.34     
      ALLOCATE (D1_IN_TMP(P_FIELD_IN*SM_LEVELS_IN),STAT=STATUS)            UDG4F405.35     
      ALLOCATE (P_TMP(P_FIELD_OUT*P_LEVELS_IN+P_FIELD_OUT),STAT=STATUS)    UDG4F405.36     
      ALLOCATE (PSTAR_OUT(P_FIELD_OUT),STAT=STATUS)                        UDG4F405.37     
      ALLOCATE (P_OUT(P_FIELD_OUT),STAT=STATUS)                            UDG4F405.38     
      ALLOCATE (P_HALF_TMP(P_FIELD_OUT,P_LEVELS_OUT+1),STAT=STATUS)        UDG4F405.39     
      ALLOCATE (P_EXNER_HALF_TMP(P_FIELD_OUT,P_LEVELS_OUT+1),              UDG4F405.40     
     &          STAT=STATUS)                                               UDG4F405.41     
      ALLOCATE (TOPOG_OUT(P_FIELD_OUT),STAT=STATUS)                        UDG4F405.42     
      ALLOCATE (TOPOG_OLD(P_FIELD_OUT),STAT=STATUS)                        UDG4F405.43     
      ALLOCATE (THR_OUT(P_FIELD_OUT),STAT=STATUS)                          UDG4F405.44     
                                                                           UDG4F405.45     
! Initialise D1_OUT                                                        UDG4F405.46     
      DO K=1,LEN_ANCIL                                                     UDG4F405.47     
        D1_OUT(K)=0.0                                                      UDG4F405.48     
      END DO                                                               UDG4F405.49     
                                                                           UDG4F405.50     
! Initialise D1_TEMP                                                       UDG4F405.51     
      DO K=1,P_FIELD_OUT                                                   UDG4F405.52     
        D1_TEMP(K)=0.0                                                     UDG4F405.53     
      END DO                                                               UDG4F405.54     
                                                                           UDG4F405.55     
C------------------------------------------------------------------        CONTROL1.752    
C Find number of different outfield types and their characteristics        CONTROL1.753    
C------------------------------------------------------------------        CONTROL1.754    
                                                                           CONTROL1.755    
                                                                           CONTROL1.756    
*IF DEF,TIMER                                                              CONTROL1.757    
      CALL TIMER('F_TYPE  ',3)                                             CONTROL1.758    
*ENDIF                                                                     CONTROL1.759    
                                                                           CONTROL1.760    
      F_TYPE_TITLE='Output data'                                           UDG7F400.154    
      CALL F_TYPE(LOOKUP_OUT,LEN2_LOOKUP_OUT,PP_NUM_OUT,N_TYPES_OUT,       UDG7F400.155    
     &            PP_LEN_OUT,PP_ITEMC_OUT,PP_TYPE_OUT,PP_POS_OUT,          UDG7F400.156    
     &            PP_LS_OUT,FIXHD_OUT,                                     UDG7F400.157    
*CALL ARGPPX                                                               UDG7F400.158    
     &            F_TYPE_TITLE)                                            UDG7F400.159    
                                                                           UDG7F400.160    
*IF DEF,TIMER                                                              CONTROL1.765    
      CALL TIMER('F_TYPE  ',4)                                             CONTROL1.766    
*ENDIF                                                                     CONTROL1.767    
                                                                           CONTROL1.768    
C Convert PP_SOURCE_OUT & PP_AREA_OUT to store values by field code        CONTROL1.769    
      DO K=1,N_TYPES_OUT                                                   CONTROL1.770    
        PP_SOURCE_OUT(K)=PP_SOURCE_OUT(PP_POS_OUT(K))                      CONTROL1.771    
        PP_AREA_OUT(K)=PP_AREA_OUT(PP_POS_OUT(K))                          CONTROL1.772    
         J_NAMELIST(K)=J_NAMELIST(PP_POS_OUT(K))                           UDG3F403.18     
         R_NAMELIST(K)=R_NAMELIST(PP_POS_OUT(K))                           UDG3F403.19     
         C_NAMELIST(K)=C_NAMELIST(PP_POS_OUT(K))                           UDG3F403.20     
      ENDDO                                                                CONTROL1.773    
                                                                           CONTROL1.802    
C---------------------------------------------------------------           CONTROL1.803    
C Write out new header info                                                CONTROL1.804    
C---------------------------------------------------------------           CONTROL1.805    
                                                                           CONTROL1.806    
*IF DEF,TIMER                                                              CONTROL1.807    
      CALL TIMER('WRITHEAD',3)                                             CONTROL1.808    
*ENDIF                                                                     CONTROL1.809    
                                                                           CONTROL1.810    
      CALL WRITHEAD(NFTOUT,FIXHD_OUT,LEN_FIXHD_OUT,                        GDG0F401.245    
     &              INTHD_OUT,LEN_INTHD_OUT,                               GDG0F401.246    
     &              REALHD_OUT,LEN_REALHD_OUT,                             GDG0F401.247    
     &              LEVDEPC_OUT,LEN1_LEVDEPC_OUT,LEN2_LEVDEPC_OUT,         GDG0F401.248    
     &              ROWDEPC_OUT,LEN1_ROWDEPC_OUT,LEN2_ROWDEPC_OUT,         GDG0F401.249    
     &              COLDEPC_OUT,LEN1_COLDEPC_OUT,LEN2_COLDEPC_OUT,         GDG0F401.250    
     &              FLDDEPC_OUT,LEN1_FLDDEPC_OUT,LEN2_FLDDEPC_OUT,         GDG0F401.251    
     &              EXTCNST_OUT,LEN_EXTCNST_OUT,                           GDG0F401.252    
     &              DUMPHIST_OUT,LEN_DUMPHIST_OUT,                         GDG0F401.253    
     &              CFI1_OUT,LEN_CFI1_OUT,                                 GDG0F401.254    
     &              CFI2_OUT,LEN_CFI2_OUT,                                 GDG0F401.255    
     &              CFI3_OUT,LEN_CFI3_OUT,                                 GDG0F401.256    
     &              LOOKUP_OUT,LEN1_LOOKUP_OUT,LEN2_LOOKUP_OUT,            GDG0F401.257    
     &              LEN_DATA_OUT,                                          GDG0F401.258    
*CALL ARGPPX                                                               GDG0F401.259    
     &              START_BLOCK_OUT,ICODE,CMESSAGE)                        GDG0F401.260    
                                                                           CONTROL1.826    
*IF DEF,TIMER                                                              CONTROL1.827    
      CALL TIMER('WRITHEAD',4)                                             CONTROL1.828    
*ENDIF                                                                     CONTROL1.829    
                                                                           CONTROL1.830    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         CONTROL1.831    
                                                                           CONTROL1.832    
C Logical to indicate horizontal interpolation of form Global/Hem -> LAM   CONTROL1.833    
      GH_TO_LAM=FIXHD_IN(4).LT.3.AND.FIXHD_OUT(4).GT.2                     CONTROL1.834    
C Logical to indicate output grid is rotated                               CONTROL1.835    
      ROT_OUT=REALHD_OUT(5).NE.90..OR.REALHD_OUT(6).NE.0.                  CONTROL1.836    
                                                                           CONTROL1.837    
C Logical to indicate input grid is rotated                                CONTROL1.838    
      ROT_IN=REALHD_IN(5).NE.90..OR.REALHD_IN(6).NE.0.                     CONTROL1.839    
                                                                           CONTROL1.840    
      IF(.NOT.OCEAN)THEN                                                   CONTROL1.841    
                                                                           CONTROL1.842    
C Calculate AKH and BKH                                                    CONTROL1.843    
      AKH_OUT(1)=0.                                                        CONTROL1.844    
      BKH_OUT(1)=1.                                                        CONTROL1.845    
      DO K=2,P_LEVELS_OUT+1                                                CONTROL1.846    
        AKH_OUT(K)=AKH_OUT(K-1)+LEVDEPC_OUT(K-1+2*P_LEVELS_OUT)            CONTROL1.847    
        BKH_OUT(K)=BKH_OUT(K-1)+LEVDEPC_OUT(K-1+3*P_LEVELS_OUT)            CONTROL1.848    
      ENDDO                                                                CONTROL1.849    
                                                                           CONTROL1.850    
      ENDIF                                                                CONTROL1.851    
                                                                           CONTROL1.852    
C---------------------------------------------------------------           CONTROL1.853    
C Check for error in file pointers                                         CONTROL1.854    
C---------------------------------------------------------------           CONTROL1.855    
                                                                           CONTROL1.856    
       lbnrec=30                                                           GBC5F404.36     
       real_start_block=start_block_out                                    GBC5F404.37     
       if(start_block_out.eq.fixhd_out(160)) then                          GBC5F404.38     
C If new format Dumpfile, we must reset the start address                  GBC5F404.39     
         if((lookup_out(lbnrec,1).ne.0) .or.                               GBC5F404.40     
C Prog lookups in dump before vn3.2:                                       GBC5F404.41     
     2     ((lookup_out(lbnrec,1).eq.imdi) .and.                           GBC5F404.42     
     3      (fixhd_out(12).le.301))) then                                  GBC5F404.43     
         CALL POSERROR('output model data',                                CONTROL1.858    
     *   START_BLOCK_OUT,160,FIXHD_OUT(160))                               CONTROL1.859    
         CALL ABORT                                                        CONTROL1.860    
         else                                                              GBC5F404.44     
           real_start_block=fixhd_out(160)                                 GBC5F404.45     
         endif                                                             GBC5F404.46     
       ENDIF                                                               CONTROL1.861    
                                                                           CONTROL1.862    
      IF(.NOT.(RadialGridIn.AND..NOT.RadialGridOut))THEN                   UIE2F401.207    
      IF(.NOT.(RM_CP))THEN                                                 UDG6F405.78     
      ! Do not write LAND-SEA mask to UM increment dump                    UDG6F405.79     
C---------------------------------------------------------------           CONTROL1.863    
C Write out new land/sea mask                                              CONTROL1.864    
C---------------------------------------------------------------           CONTROL1.865    
                                                                           CONTROL1.866    
      IF(.NOT.OCEAN)THEN                                                   CONTROL1.867    
                                                                           CONTROL1.868    
      CALL LOCATE(30,PP_ITEMC_OUT,N_TYPES_OUT,POS)                         CONTROL1.869    
      IF(POS.EQ.0)THEN                                                     CONTROL1.870    
        WRITE(6,'('' *ERROR*  L/S mask not in output file'')')             CONTROL1.871    
        CALL ABORT                                                         CONTROL1.872    
      ENDIF                                                                CONTROL1.873    
                                                                           CONTROL1.874    
*IF DEF,TIMER                                                              CONTROL1.875    
      CALL TIMER('WRITFLDS',3)                                             CONTROL1.876    
*ENDIF                                                                     CONTROL1.877    
                                                                           CONTROL1.878    
      CALL WRITFLDS(NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,LEN1_LOOKUP_OUT,   GDG0F401.261    
     &              LAND_SEA_MASK_OUT,P_FIELD_OUT,FIXHD_OUT,               GDG0F401.262    
*CALL ARGPPX                                                               GDG0F401.263    
     &              ICODE,CMESSAGE)                                        GDG0F401.264    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         CONTROL1.881    
                                                                           CONTROL1.882    
*IF DEF,TIMER                                                              CONTROL1.883    
      CALL TIMER('WRITFLDS',4)                                             CONTROL1.884    
*ENDIF                                                                     CONTROL1.885    
                                                                           CONTROL1.886    
      ENDIF                                                                CONTROL1.887    
      ENDIF  ! Not RM_CP                                                   UDG6F405.80     
                                                                           CONTROL1.888    
      ENDIF ! Not PFinc2UM                                                 UIE2F401.208    
                                                                           CONTROL1.889    
C---------------------------------------------------------------------     CONTROL1.890    
C If source grid rotated, then read in  U & V fields from input            CONTROL1.891    
C file, rotate winds to standard grid and then write back to input file.   CONTROL1.892    
C---------------------------------------------------------------------     CONTROL1.893    
                                                                           CONTROL1.894    
      IF(ROT_IN.AND.HORIZ)THEN                                             UDG4F400.4      
                                                                           CONTROL1.896    
        ! Locate start position of u & v fields on I/P file                UIE2F401.110    
        IF (C_GRID_IN) THEN                                                UIE2F401.111    
         CALL LOCATE(153,PP_ITEMC_IN,N_TYPES_IN,POSU)                      UIE2F401.112    
         CALL LOCATE(154,PP_ITEMC_IN,N_TYPES_IN,POSV)                      UIE2F401.113    
        ELSE                                                               UIE2F401.114    
         CALL LOCATE(2,PP_ITEMC_IN,N_TYPES_IN,POSU)                        UIE2F401.115    
         CALL LOCATE(3,PP_ITEMC_IN,N_TYPES_IN,POSV)                        UIE2F401.116    
        END IF                                                             UIE2F401.117    
                                                                           UIE2F401.118    
        ! Find number of levels in I/P dump.                               UIE2F401.119    
        N_FIELDS_IN=PP_NUM_IN(POSU)                                        UIE2F401.120    
                                                                           UIE2F401.121    
        ! ROTATE dimensions u,v separately to take account of              UIE2F401.122    
        ! the extra u row (v unchanged) on the C grid.                     UIE2F401.123    
        CALL ROTATE(                                                       UIE2F401.124    
*CALL ARGPPX                                                               UIE2F401.125    
     &             PP_ITEMC_IN,PP_NUM_IN,PP_POS_IN,N_TYPES_IN,             UIE2F401.126    
     &             LOOKUP_IN,FIXHD_IN,U_FIELD_IN,COEFF3,COEFF4,            UIE2F401.127    
     &             NFTIN,0,C_GRID_OUT,C_GRID_IN,N_FIELDS_IN,               UIE2F401.128    
     &             U_ROWS_IN,U_ROWS_OUT,REALHD_IN,                         UIE2F404.354    
     &             ROW_LENGTH_OUT,ROW_LENGTH_IN,POSU,POSV)                 UIE2F401.129    
                                                                           CONTROL1.899    
      ENDIF                                                                CONTROL1.900    
                                                                           CONTROL1.901    
C---------------------------------------------------------------           CONTROL1.902    
C Convert to THL & QT only if input file contains TH (& therefore Q)       CONTROL1.903    
C---------------------------------------------------------------           CONTROL1.904    
                                                                           CONTROL1.905    
      IF(.NOT.OCEAN)THEN                                                   CONTROL1.906    
                                                                           CONTROL1.907    
                                                                           UIE2F404.131    
       ! Do not enter TH_TO_THL for VAR PF dump as                         UIE2F404.132    
       ! conversion to THL,QT takes place in subroutine PF2UM later.       UIE2F404.133    
       IF ((.NOT.(RadialGridIn).AND..NOT.(RadialGridOut)) .OR.             UIE2F404.134    
     &     (.NOT.(RadialGridIn).AND.RadialGridOut)) THEN                   UIE2F404.135    
       IF(.NOT.(RM_CP))THEN                                                UDG6F405.40     
                                                                           UIE2F404.136    
      CALL TH_TO_THL(                                                      GDG0F401.265    
*CALL ARGPPX                                                               GDG0F401.266    
     &               FIXHD_IN,LOOKUP_IN,LEVDEPC_IN,PP_ITEMC_IN,            GDG0F401.267    
     &               PP_POS_IN,N_TYPES_IN,NFTIN,                           GDG0F401.268    
     &               P_FIELD_IN,P_LEVELS_IN,Q_LEVELS_IN,BL_LEVELS_IN)      GDG0F401.269    
                                                                           CONTROL1.911    
                                                                           UDG6F405.41     
       ENDIF ! RM_CP                                                       UDG6F405.42     
       ENDIF ! Not PFinc2UM                                                UDG6F405.43     
                                                                           UIE2F404.137    
       ENDIF                                                               UIE2F404.138    
                                                                           CONTROL1.913    
!---------------------------------------------------------------           UDG4F404.16     
! Adjust THL and QT if QCF in input dump but not in output dump            UDG4F404.17     
!---------------------------------------------------------------           UDG4F404.18     
      IF(.NOT.OCEAN)THEN                                                   UDG4F404.19     
        CALL THL_QT_ADJ(N_TYPES_IN,P_FIELD_IN,P_LEVELS_IN,Q_LEVELS_IN,     UDG4F404.20     
     &                  NFTIN,L_MP_PRECIP,LOOKUP_IN,FIXHD_IN,              UDG4F404.21     
     &                  LEN1_LEVDEPC_IN,LEN2_LEVDEPC_IN,LEVDEPC_IN,        UDG4F404.22     
*CALL ARGPPX                                                               UDG4F404.23     
     &                  PP_ITEMC_IN,PP_POS_IN)                             UDG4F404.24     
      END IF                                                               UDG4F404.25     
      IF(.NOT.(RadialGridIn.AND..NOT.RadialGridOut))THEN                   UIE2F401.209    
C---------------------------------------------------------------           CONTROL1.914    
C Read in ancillary fields                                                 CONTROL1.915    
C---------------------------------------------------------------           CONTROL1.916    
                                                                           CONTROL1.917    
      IF(.NOT.OCEAN)THEN                                                   CONTROL1.918    
                                                                           CONTROL1.919    
C Set up switch to control which ancillary fields are read in              CONTROL1.920    
      DO K=1,NANCIL_FIELDS                                                 GDR1F401.23     
        SWITCH(K)=0                                                        CONTROL1.922    
      ENDDO                                                                CONTROL1.923    
                                                                           CONTROL1.924    
      DO  J=1,N_TYPES_OUT                                                  CONTROL1.925    
                                                                           CONTROL1.926    
                                                                           UDG4F304.57     
      IF(PP_SOURCE_OUT(J).EQ.2)THEN                                        UDG4F304.64     
                                                                           CONTROL1.928    
      IF(PP_ITEMC_OUT(J).EQ.39)THEN                                        CONTROL1.929    
        SSTANOM=.TRUE.                                                     CONTROL1.930    
      ELSE                                                                 CONTROL1.931    
                                                                           CONTROL1.932    
        DO K=1,NANCIL_FIELDS                                               GDR1F401.24     
          IF(PP_ITEMC_OUT(J).EQ.ITEM_CODES_ANCIL(K))THEN                   CONTROL1.934    
            SWITCH(K)=1                                                    CONTROL1.935    
C If one surface current specified then update the other                   CONTROL1.936    
            IF(PP_ITEMC_OUT(J).EQ.28)SWITCH(31)=1                          CONTROL1.937    
            IF(PP_ITEMC_OUT(J).EQ.29)SWITCH(30)=1                          CONTROL1.938    
            GOTO 1127                                                      CONTROL1.939    
          ENDIF                                                            CONTROL1.940    
        ENDDO                                                              CONTROL1.941    
                                                                           CONTROL1.942    
        WRITE(6,'('' *ERROR* Requested ancillary field not'',              CONTROL1.943    
     *'' supported: STASH Item code ='',I5)')PP_ITEMC_OUT(J)               CONTROL1.944    
1127    CONTINUE                                                           CONTROL1.945    
       ENDIF                                                               CONTROL1.946    
                                                                           CONTROL1.947    
      ENDIF                                                                CONTROL1.948    
                                                                           CONTROL1.949    
      ENDDO                                                                CONTROL1.950    
                                                                           CONTROL1.951    
!     Determine if Ozone Ancillary file is required.                       UDG6F400.8      
      LOZONE_ANC = .FALSE.                                                 UDG6F400.9      
      CALL LOCATE (60,pp_itemc_in,n_types_in,pos_in)                       UDG6F400.10     
      CALL LOCATE (60,pp_itemc_out,n_types_out,pos_out)                    UDG6F400.11     
                                                                           UDG6F400.12     
      IF (POS_OUT.GT.0) THEN   !  Ozone fields in output dump              UDG6F400.13     
        IF (POS_IN.GT.0)  THEN   !  Ozone fields in input dump             UDG6F400.14     
                                                                           UDG6F400.15     
          ZONAL_IN  = LOOKUP_IN (19,PP_POS_IN (POS_IN) ) .EQ. 1            UDG6F400.16     
          ZONAL_OUT = LOOKUP_OUT(19,PP_POS_OUT(POS_OUT)) .EQ. 1            UDG6F400.17     
                                                                           UDG6F400.18     
          IF (ZONAL_IN .and. ZONAL_OUT) THEN                               UDG6F400.19     
!           Allow interpolation between zonal fields                       UDG6F400.20     
            WRITE(6,*) ' '                                                 UDG6F400.21     
            WRITE(6,*) ' Warning : Ozone data is zonal in both ',          UDG6F400.22     
     &      'input and output dumps.'                                      UDG6F400.23     
            WRITE(6,*) ' If an ozone ancillary file is not provided,'      UDG6F400.24     
            WRITE(6,*) ' output data is interpolated from input data.'     UDG6F400.25     
! mod to convert the .xor. to .neqv. to compile the reconfiguration        UIE2F404.1      
! code with the Nag compiler.                                              UIE2F404.2      
          ELSEIF (ZONAL_IN .NEQV. ZONAL_OUT) THEN                          UIE2F404.3      
            LOZONE_ANC = .TRUE.                                            UDG6F400.27     
          ELSE  !   Full fields in both input and output dumps             UDG6F400.28     
!           Allow interpolation between full fields                        GDR9F401.1      
          ENDIF                                                            UDG6F400.35     
                                                                           UDG6F400.36     
        ELSEIF (POS_IN.EQ.0) THEN  !  No ozone fields in input dump        UDG6F400.37     
          LOZONE_ANC = .TRUE.                                              UDG6F400.38     
        ENDIF                                                              UDG6F400.39     
      ENDIF                                                                UDG6F400.40     
                                                                           UDG6F400.41     
      IF (LOZONE_ANC) THEN  !  Ozone anc file required                     UDG6F400.42     
                                                                           UDG6F400.43     
!       Check that it has been provided                                    UDG6F400.44     
        DO K=1,NANCIL_FIELDS                                               GDR1F401.25     
          IF (ITEM_CODES_ANCIL(K).EQ.60 .AND. SWITCH(K).EQ.0) THEN         UDG6F400.46     
            WRITE (6,*) ' ** ERROR ** ERROR **'                            GDR9F401.2      
            WRITE (6,*) ' Reconfiguration is expecting an ozone ',         UDG6F400.47     
     &      'ancillary file. Provide one through the UMUI.'                UDG6F400.48     
            CMESSAGE = 'CONTROL  : Ozone Ancillary file required.'         UDG6F400.49     
            WRITE (6,*) ' CMESSAGE : ',CMESSAGE                            GDR9F401.3      
            CALL ABORT                                                     UDG6F400.50     
          ENDIF                                                            UDG6F400.51     
        ENDDO                                                              UDG6F400.52     
                                                                           UDG6F400.53     
      ENDIF                                                                UDG6F400.54     
                                                                           UDG6F400.55     
*IF DEF,TIMER                                                              CONTROL1.952    
      CALL TIMER('INANCILA',3)                                             CONTROL1.953    
*ENDIF                                                                     CONTROL1.954    
                                                                           CONTROL1.955    
      CALL INANCILA(LEN_FIXHD_OUT,PP_LEN_INTHD,PP_LEN_REALHD,              CONTROL1.956    
     *LEN1_LEVDEPC_OUT,PP_LEN2_LEVDEPC,FIXHD_ANCIL,INTHD_ANCIL,            CONTROL1.957    
     *REALHD_ANCIL,LOOKUP_ANCIL,                                           AJS1F400.125    
     *FIXHD_OUT,REALHD_OUT,LEVDEPC_OUT,NDATASETS,                          AJS1F400.126    
     *NLOOKUPS,FTN_ANCIL,LOOKUP_START,LEN1_LOOKUP_OUT,ROW_LENGTH_OUT,      CONTROL1.959    
     *P_ROWS_OUT,U_ROWS_OUT,P_LEVELS_OUT,TR_LEVELS_OUT,                    UJS1F401.35     
     *ST_LEVELS_OUT,SM_LEVELS_OUT,OZONE_LEVELS_OUT,TITLE,                  UJS1F401.36     
     &SWITCH,NANCIL_FIELDS,SSTANOM,ANCIL_ADD,                              GDR1F401.26     
*CALL ARGPPX                                                               GDR1F401.27     
     &IOUNIT,ICODE,CMESSAGE,LCAL360)                                       GDR1F401.28     
      IF(ICODE.NE.0)CALL ABORT_IO('INANCILA',CMESSAGE,ICODE,IOUNIT)        CONTROL1.963    
                                                                           CONTROL1.964    
*IF DEF,TIMER                                                              CONTROL1.965    
      CALL TIMER('INANCILA',4)                                             CONTROL1.966    
*ENDIF                                                                     CONTROL1.967    
                                                                           CONTROL1.968    
      WRITE(6,'('' '')')                                                   ADR1F304.41     
      WRITE(6,'('' Ancillary Fields requested:(1=Y,0=N)'')')               CONTROL1.969    
      WRITE(6,'(''   Field     File Stash'')')                             ADR1F304.42     
      WRITE(6,'(''    No   Y/N  No  Code '')')                             ADR1F304.43     
      DO  K=1,NANCIL_FIELDS                                                GDR1F401.29     
        PHRASE=' '                                                         CONTROL1.971    
        CALL LOCATE(ITEM_CODES_ANCIL(K),PP_ITEMC_OUT,N_TYPES_OUT,POS)      CONTROL1.972    
        ID1_IN(42)=ITEM_CODES_ANCIL(K)                                     CONTROL1.973    
        ITEM_CODE=MOD(ID1_IN(42),1000)                                     UDG2F305.97     
        SECTION=(ID1_IN(42)-ITEM_CODE)/1000                                UDG2F305.98     
        MODEL=MODEL_CODES_ANCIL(K)                                         GDR1F401.30     
        IF(MODEL.EQ.0.AND.SECTION.EQ.0.AND.ITEM_CODE.EQ.0)THEN             GDG2F405.92     
! Ancillary not used in any configuration skip call to EXPPXC              GDG2F405.93     
          ICODE = 1                                                        GDG2F405.94     
        ELSE                                                               GDG2F405.95     
          PHRASE = EXPPXC(MODEL,SECTION,ITEM_CODE,                         GDG2F405.96     
*CALL ARGPPX                                                               GDG2F405.97     
     &                    ICODE,CMESSAGE)                                  GDG2F405.98     
        END IF                                                             GDG2F405.99     
       IF(ICODE.NE.0)THEN                                                  GDG0F401.270    
!Don't Worry! Non-zero return code expected for unused ancillaries.        UDG2F305.113    
!  ICODE reset to zero and program allowed to continue.                    UDG2F305.114    
          PHRASE = 'ANCILLARY NOT IN THIS CONFIGURATION'                   UDG2F305.115    
          ICODE = 0                                                        UDG2F305.116    
         ENDIF                                                             UDG2F305.119    
        IF(K.EQ.28)PHRASE='Sea-surface temperature'                        CONTROL1.981    
        WRITE(6,'('' '',4I5,I7,3X,A80)')K,SWITCH(K),                       ADR1F304.44     
     *  FILEANCIL(K),ITEM_CODES_ANCIL(K),ANCIL_ADD(K),PHRASE               ADR1F304.45     
      ENDDO                                                                CONTROL1.984    
      WRITE(6,'('' '')')                                                   ADR1F304.46     
                                                                           CONTROL1.985    
      IF(.NOT.(RM_CP))THEN                                                 UDG6F405.44     
C Sea Ice Fraction                                                         CONTROL1.986    
                                                                           CONTROL1.987    
      CALL LOCATE(31,PP_ITEMC_IN,N_TYPES_IN,POS)                           CONTROL1.988    
      IF(POS.EQ.0)THEN                                                     CONTROL1.989    
        WRITE(6,'('' *ERROR*  sea-ice fraction not in input file'')')      CONTROL1.990    
        CALL ABORT                                                         CONTROL1.991    
      ENDIF                                                                CONTROL1.992    
                                                                           CONTROL1.993    
*IF DEF,TIMER                                                              CONTROL1.994    
      CALL TIMER('READFLDS',3)                                             CONTROL1.995    
*ENDIF                                                                     CONTROL1.996    
                                                                           CONTROL1.997    
       CALL READFLDS(NFTIN,1,PP_POS_IN(POS),LOOKUP_IN,LEN1_LOOKUP_IN,      GDG0F401.271    
     &               D1_IN,P_FIELD_IN,FIXHD_IN,                            GDG0F401.272    
*CALL ARGPPX                                                               GDG0F401.273    
     &               ICODE,CMESSAGE)                                       GDG0F401.274    
          IF(ICODE.EQ.1501)THEN                                            UDG4F402.43     
            IF(LPOLARCHK)THEN                                              UDG4F402.44     
              write(6,*) 'Averaging polar rows to make them constant'      UDG4F402.45     
                                                                           UDG4F402.46     
!   North polar row                                                        UDG4F402.47     
              RP_ROW_SUM=0                                                 UDG4F402.48     
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.49     
                RP_ROW_SUM=RP_ROW_SUM+D1_IN(I)                             UDG4F402.50     
              END DO                                                       UDG4F402.51     
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.52     
                D1_IN(I)=RP_ROW_SUM/ROW_LENGTH_IN                          UDG4F402.53     
              END DO                                                       UDG4F402.54     
!   South polar row                                                        UDG4F402.55     
              RP_ROW_SUM=0                                                 UDG4F402.56     
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.57     
                RP_ROW_SUM=                                                UDG4F402.58     
     &          RP_ROW_SUM+D1_IN((P_ROWS_IN-1)*ROW_LENGTH_IN+I)            UDG4F402.59     
              END DO                                                       UDG4F402.60     
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.61     
                D1_IN((P_ROWS_IN-1)*ROW_LENGTH_IN+I)=                      UDG4F402.62     
     &           RP_ROW_SUM/ROW_LENGTH_IN                                  UDG4F402.63     
              END DO                                                       UDG4F402.64     
            END IF                                                         UDG4F402.65     
          ELSE IF(ICODE.NE.0)THEN                                          UDG4F402.66     
            CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)                  UDG4F402.67     
          END IF                                                           UDG4F402.68     
                                                                           CONTROL1.1001   
*IF DEF,TIMER                                                              CONTROL1.1002   
      CALL TIMER('READFLDS',4)                                             CONTROL1.1003   
*ENDIF                                                                     CONTROL1.1004   
                                                                           CONTROL1.1005   
      IF(HORIZ) THEN                                                       MC230493.11     
                                                                           MC230493.12     
*IF DEF,TIMER                                                              CONTROL1.1006   
      CALL TIMER('HINTCTL',3)                                              UDG1F400.150    
*ENDIF                                                                     CONTROL1.1008   
                                                                           CONTROL1.1009   
      CALL H_INT_CTL(IDIM,P_FIELD_OUT,ROW_LENGTH_IN,ROW_LENGTH_OUT         UDG1F400.151    
     &,              P_ROWS_IN,P_ROWS_OUT,AW_AREA_BOX(1)                   UDG1F400.152    
     &,              GLOBAL,H_INT_TYPE                                     UDG1F400.153    
     &,              AW_INDEX_TARG_LHS(1,1),AW_INDEX_TARG_TOP(1,1)         UDG1F400.154    
     &,              BL_INDEX_B_L(1,1),BL_INDEX_B_R(1,1)                   UDG1F400.155    
     &,              AW_COLAT_T(1,1),AW_LONG_L(1,1),D1_IN                  UDG1F400.156    
     &,              WEIGHT_T_R(1,1),WEIGHT_B_R(1,1)                       UDG1F400.157    
     &,              WEIGHT_T_L(1,1),WEIGHT_B_L(1,1)                       UDG1F400.158    
     &,              ICE_FRAC)                                             UDG1F400.159    
                                                                           CONTROL1.1014   
*IF DEF,TIMER                                                              CONTROL1.1015   
      CALL TIMER('HINTCTL',4)                                              UDG1F400.160    
*ENDIF                                                                     CONTROL1.1017   
                                                                           MC230493.13     
        IF(GLOBAL)THEN                                                     UDG4F402.516    
! Horizontal interpolation has made polar rows non-constant                UDG4F402.517    
           write(6,*) 'Horizontal Interpolation has made polar rows ',     UDG4F402.518    
     &     'non-constant'                                                  UDG4F402.519    
           write(6,*) 'Averaging polar rows to make them constant'         UDG4F402.520    
                                                                           UDG4F402.521    
!   North polar row                                                        UDG4F402.522    
            RP_ROW_SUM=0                                                   UDG4F402.523    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.524    
              RP_ROW_SUM=RP_ROW_SUM+ICE_FRAC(I)                            UDG4F402.526    
            END DO                                                         UDG4F402.527    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.528    
              ICE_FRAC(I)=RP_ROW_SUM/ROW_LENGTH_OUT                        UDG4F402.529    
            END DO                                                         UDG4F402.530    
!   South polar row                                                        UDG4F402.531    
            RP_ROW_SUM=0                                                   UDG4F402.532    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.533    
              RP_ROW_SUM=                                                  UDG4F402.536    
     &        RP_ROW_SUM+ICE_FRAC((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)         UDG4F402.537    
            END DO                                                         UDG4F402.538    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.539    
              ICE_FRAC((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)=                   UDG4F402.540    
     &         RP_ROW_SUM/ROW_LENGTH_OUT                                   UDG4F402.541    
            END DO                                                         UDG4F402.542    
          END IF                                                           UDG4F402.543    
      ELSE                                                                 MC230493.14     
        DO I=1,P_FIELD_OUT                                                 MC230493.15     
          ICE_FRAC(I)=D1_IN(I)                                             MC230493.16     
        END DO                                                             MC230493.17     
      END IF                                                               MC230493.18     
                                                                           MC230493.19     
                                                                           CONTROL1.1018   
      ENDIF ! RM_CP                                                        UDG6F405.45     
C Tstar                                                                    CONTROL1.1019   
                                                                           CONTROL1.1020   
      CALL LOCATE(24,PP_ITEMC_IN,N_TYPES_IN,POS)                           CONTROL1.1021   
      IF(POS.EQ.0)THEN                                                     CONTROL1.1022   
        WRITE(6,'('' *ERROR*  Tstar not in input file'')')                 CONTROL1.1023   
        CALL ABORT                                                         CONTROL1.1024   
      ENDIF                                                                CONTROL1.1025   
                                                                           CONTROL1.1026   
*IF DEF,TIMER                                                              CONTROL1.1027   
      CALL TIMER('READFLDS',3)                                             CONTROL1.1028   
*ENDIF                                                                     CONTROL1.1029   
                                                                           CONTROL1.1030   
      CALL READFLDS(NFTIN,1,PP_POS_IN(POS),LOOKUP_IN,LEN1_LOOKUP_IN,       GDG0F401.275    
     &              D1_IN,P_FIELD_IN,FIXHD_IN,                             GDG0F401.276    
*CALL ARGPPX                                                               GDG0F401.277    
     &              ICODE,CMESSAGE)                                        GDG0F401.278    
          IF(ICODE.EQ.1501)THEN                                            UDG4F402.69     
            IF(LPOLARCHK)THEN                                              UDG4F402.70     
              write(6,*) 'Averaging polar rows to make them constant'      UDG4F402.71     
                                                                           UDG4F402.72     
!   North polar row                                                        UDG4F402.73     
              RP_ROW_SUM=0                                                 UDG4F402.74     
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.75     
                RP_ROW_SUM=RP_ROW_SUM+D1_IN(I)                             UDG4F402.76     
              END DO                                                       UDG4F402.77     
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.78     
                D1_IN(I)=RP_ROW_SUM/ROW_LENGTH_IN                          UDG4F402.79     
              END DO                                                       UDG4F402.80     
!   South polar row                                                        UDG4F402.81     
              RP_ROW_SUM=0                                                 UDG4F402.82     
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.83     
                RP_ROW_SUM=                                                UDG4F402.84     
     &            RP_ROW_SUM+D1_IN((P_ROWS_IN-1)*ROW_LENGTH_IN+I)          UDG4F402.85     
              END DO                                                       UDG4F402.86     
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.87     
                D1_IN((P_ROWS_IN-1)*ROW_LENGTH_IN+I)=                      UDG4F402.88     
     &            RP_ROW_SUM/ROW_LENGTH_IN                                 UDG4F402.89     
              END DO                                                       UDG4F402.90     
            END IF                                                         UDG4F402.91     
          ELSE IF(ICODE.NE.0)THEN                                          UDG4F402.92     
            CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)                  UDG4F402.93     
          END IF                                                           UDG4F402.94     
                                                                           CONTROL1.1034   
*IF DEF,TIMER                                                              CONTROL1.1035   
      CALL TIMER('READFLDS',4)                                             CONTROL1.1036   
*ENDIF                                                                     CONTROL1.1037   
                                                                           CONTROL1.1038   
      IF(HORIZ) THEN                                                       MC230493.20     
                                                                           MC230493.21     
*IF DEF,TIMER                                                              CONTROL1.1039   
      CALL TIMER('HINTCTL',3)                                              UDG1F400.161    
*ENDIF                                                                     CONTROL1.1041   
                                                                           CONTROL1.1042   
      CALL H_INT_CTL(IDIM,P_FIELD_OUT,ROW_LENGTH_IN,ROW_LENGTH_OUT         UDG1F400.162    
     &,              P_ROWS_IN,P_ROWS_OUT,AW_AREA_BOX(1)                   UDG1F400.163    
     &,              GLOBAL,H_INT_TYPE                                     UDG1F400.164    
     &,              AW_INDEX_TARG_LHS(1,1),AW_INDEX_TARG_TOP(1,1)         UDG1F400.165    
     &,              BL_INDEX_B_L(1,1),BL_INDEX_B_R(1,1)                   UDG1F400.166    
     &,              AW_COLAT_T(1,1),AW_LONG_L(1,1),D1_IN                  UDG1F400.167    
     &,              WEIGHT_T_R(1,1),WEIGHT_B_R(1,1)                       UDG1F400.168    
     &,              WEIGHT_T_L(1,1),WEIGHT_B_L(1,1)                       UDG1F400.169    
     &,              TSTAR)                                                UDG1F400.170    
                                                                           CONTROL1.1047   
*IF DEF,TIMER                                                              CONTROL1.1048   
      CALL TIMER('HINTCTL',4)                                              UDG1F400.171    
*ENDIF                                                                     CONTROL1.1050   
                                                                           MC230493.22     
        IF(GLOBAL)THEN                                                     UDG4F402.544    
! Horizontal Interpolation has made polar rows non-constant                UDG4F402.545    
            write(6,*) 'Horizontal Interpolation has made polar rows ',    UDG4F402.546    
     &     'non-constant'                                                  UDG4F402.547    
           write(6,*) 'Averaging polar rows to make them constant'         UDG4F402.548    
                                                                           UDG4F402.549    
!   North polar row                                                        UDG4F402.550    
            RP_ROW_SUM=0                                                   UDG4F402.551    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.552    
              RP_ROW_SUM=RP_ROW_SUM+TSTAR(I)                               UDG4F402.554    
            END DO                                                         UDG4F402.555    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.556    
              TSTAR(I)=RP_ROW_SUM/ROW_LENGTH_OUT                           UDG4F402.557    
            END DO                                                         UDG4F402.558    
!   South polar row                                                        UDG4F402.559    
            RP_ROW_SUM=0                                                   UDG4F402.560    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.561    
              RP_ROW_SUM=                                                  UDG4F402.564    
     &        RP_ROW_SUM+TSTAR((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)            UDG4F402.565    
            END DO                                                         UDG4F402.566    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.567    
              TSTAR((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)=                      UDG4F402.568    
     &         RP_ROW_SUM/ROW_LENGTH_OUT                                   UDG4F402.569    
            END DO                                                         UDG4F402.570    
          END IF                                                           UDG4F402.571    
      ELSE                                                                 MC230493.23     
        DO I=1,P_FIELD_OUT                                                 MC230493.24     
          TSTAR(I)=D1_IN(I)                                                MC230493.25     
        END DO                                                             MC230493.26     
      END IF                                                               MC230493.27     
                                                                           MC230493.28     
      IF(HORIZ)THEN                                                        UDG2F400.25     
                                                                           CONTROL1.1051   
C Correct coastal points                                                   CONTROL1.1052   
      DO I=1,COASTAL_POINTS                                                CONTROL1.1053   
        TSTAR(INDEX_OUT(I))=D1_IN(INDEX_IN(I))                             CONTROL1.1054   
      ENDDO                                                                CONTROL1.1055   
       IF(LSPIRAL_S)THEN                                                   UDG1F304.39     
         MAXDIM=MIN0(P_ROWS_OUT,ROW_LENGTH_OUT)                            UDG1F304.40     
         DO I=1,P_FIELD_OUT                                                UDG1F304.41     
           INDEX_TARG_SEA_X(I)=INDEX_TARG_SEA(I)                           UDG1F304.42     
           INDEX_TARG_LAND_X(I)=INDEX_TARG_LAND(I)                         UDG1F304.43     
           LAND_SEA_MASK_X(I)=0                                            UDG1F304.44     
           IF(LAND_SEA_MASK_OUT(I)) LAND_SEA_MASK_X(I)=1                   UDG1F304.45     
         ENDDO                                                             UDG1F304.46     
         SEA_POINTS_UNRESX=SEA_POINTS_UNRES                                UDG1F304.47     
         LAND_POINTS_UNRESX=LAND_POINTS_UNRES                              UDG1F304.48     
         CALL INTF_COAST_AJ(LAND_SEA_MASK_X,INDEX_TARG_SEA_X               UDG1F304.49     
     *,SEA_POINTS_UNRESX,P_ROWS_OUT,ROW_LENGTH_OUT,TSTAR                   UDG1F304.50     
     *,0,CYCLIC,MAXDIM)                                                    UDG1F304.51     
         CALL INTF_COAST_AJ(LAND_SEA_MASK_X,INDEX_TARG_LAND_X              UDG1F304.52     
     *,LAND_POINTS_UNRESX,P_ROWS_OUT,ROW_LENGTH_OUT,TSTAR                  UDG1F304.53     
     *,1,CYCLIC,MAXDIM)                                                    UDG1F304.54     
        ELSE                                                               UDG1F304.55     
      DO I=1,LAND_POINTS_UNRES                                             CONTROL1.1056   
        TSTAR(INDEX_TARG_LAND(I))                                          CONTROL1.1057   
     *               =TSTAR(LAND_UNRES_INDEX(I))                           CONTROL1.1058   
      ENDDO                                                                CONTROL1.1059   
      DO I=1,SEA_POINTS_UNRES                                              CONTROL1.1060   
        TSTAR(INDEX_TARG_SEA(I))                                           CONTROL1.1061   
     *               =TSTAR(SEA_UNRES_INDEX(I))                            CONTROL1.1062   
      ENDDO                                                                CONTROL1.1063   
                                                                           CONTROL1.1064   
                                                                           UDG1F304.56     
      ENDIF                                                                UDG1F304.57     
                                                                           UDG2F400.26     
      ENDIF                                                                UDG2F400.27     
*IF DEF,TIMER                                                              CONTROL1.1065   
      CALL TIMER('REPLANCA',3)                                             CONTROL1.1066   
*ENDIF                                                                     CONTROL1.1067   
                                                                           CONTROL1.1068   
      CALL REPLANCA(FIXHD_OUT(28),FIXHD_OUT(29),FIXHD_OUT(30),             GDG0F401.279    
     &              FIXHD_OUT(31),FIXHD_OUT(32),FIXHD_OUT(33),             GDG0F401.280    
     &              FIXHD_OUT(34),0,0,P_FIELD_OUT,                         GDG0F401.281    
     &              P_ROWS_OUT,U_FIELD_OUT,D1_OUT,LAND_SEA_MASK_OUT,       GDG0F401.282    
     &              ICE_FRAC,TSTAR,TSTAR_ANOM,                             GRS2F404.231    
     &              REALHD_OUT(2),REALHD_OUT(3),                           GRS2F404.232    
     &              LEN1_LOOKUP_OUT,256,                                   GRS2F404.233    
     &              PP_LEN_INTHD,PP_LEN_REALHD,LEN_ANCIL,FIXHD_ANCIL,      GDG0F401.284    
     &              INTHD_ANCIL,REALHD_ANCIL,LOOKUP_ANCIL,LOOKUP_ANCIL,    GDG0F401.285    
     &              FTN_ANCIL,LOOKUP_START,NDATASETS,NLOOKUPS,             GDG0F401.286    
*CALL ARGPPX                                                               GDG0F401.287    
     &              LPOLARCHK,                                             UDG4F402.95     
     &              IOUNIT,ICODE,CMESSAGE,LCAL360)                         GDG0F401.288    
                                                                           CONTROL1.1076   
      IF(ICODE.NE.0)CALL ABORT_IO('REPLANCA',CMESSAGE,ICODE,IOUNIT)        CONTROL1.1077   
                                                                           CONTROL1.1078   
*IF DEF,TIMER                                                              CONTROL1.1079   
      CALL TIMER('REPLANCA',4)                                             CONTROL1.1080   
*ENDIF                                                                     CONTROL1.1081   
                                                                           CONTROL1.1082   
C---------------------------------------------------------------           CONTROL1.1083   
C Initialise requested output fields with ancillary data                   CONTROL1.1084   
C---------------------------------------------------------------           CONTROL1.1085   
                                                                           CONTROL1.1091   
C Ignore LAND/SEA mask and surface temperature fields                      CONTROL1.1092   
C and sea ice fraction field                                               CONTROL1.1093   
      DO  K=2,NANCIL_FIELDS                                                GDR1F401.31     
        IF(SWITCH(K).EQ.1)THEN                                             CONTROL1.1095   
          IF(K.NE.27.AND.K.NE.28)THEN                                      CONTROL1.1096   
      IF (ANCIL_ADD(K).NE.0)THEN                                           UDG2F305.120    
            CALL LOCATE(ITEM_CODES_ANCIL(K),PP_ITEMC_OUT                   CONTROL1.1097   
     *      ,N_TYPES_OUT,POS)                                              CONTROL1.1098   
            WRITE(6,'('' '',5I9,E12.5)')K,POS,PP_NUM_OUT(POS)              CONTROL1.1099   
     *      ,PP_POS_OUT(POS)                                               CONTROL1.1100   
     *      ,ANCIL_ADD(K)                                                  CONTROL1.1101   
     *      ,D1_OUT(ANCIL_ADD(K))                                          CONTROL1.1102   
      END IF                                                               UDG2F305.122    
                                                                           CONTROL1.1103   
          IF(PP_LS_OUT(POS).EQ.1)THEN                                      CONTROL1.1104   
                                                                           CONTROL1.1105   
            DO J=1,PP_NUM_OUT(POS)                                         CONTROL1.1106   
              CALL TO_LAND_POINTS(                                         UDG3F402.208    
     &            D1_OUT(ANCIL_ADD(K)+(J-1)*P_FIELD_OUT),                  UDG3F402.209    
     &            D1_OUT(ANCIL_ADD(K)+(J-1)*PP_LEN_OUT(POS)),              UDG3F402.210    
     &            LAND_SEA_MASK_OUT,P_FIELD_OUT,LAND_POINTS)               UDG3F402.211    
            ENDDO                                                          CONTROL1.1110   
                                                                           CONTROL1.1111   
*IF DEF,TIMER                                                              CONTROL1.1112   
      CALL TIMER('WRITFLDS',3)                                             CONTROL1.1113   
*ENDIF                                                                     CONTROL1.1114   
                                                                           CONTROL1.1115   
            CALL WRITFLDS(NFTOUT,PP_NUM_OUT(POS),PP_POS_OUT(POS),          GDG0F401.289    
     &                  LOOKUP_OUT,LEN1_LOOKUP_OUT,D1_OUT(ANCIL_ADD(K)),   UDG3F402.212    
     &                    P_FIELD_OUT,FIXHD_OUT,                           GDG0F401.291    
*CALL ARGPPX                                                               GDG0F401.292    
     &                    ICODE,CMESSAGE)                                  GDG0F401.293    
            IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE           CONTROL1.1119   
     *      ,NFTOUT)                                                       CONTROL1.1120   
                                                                           CONTROL1.1121   
*IF DEF,TIMER                                                              CONTROL1.1122   
      CALL TIMER('WRITFLDS',4)                                             CONTROL1.1123   
*ENDIF                                                                     CONTROL1.1124   
                                                                           CONTROL1.1125   
          ELSE                                                             CONTROL1.1126   
                                                                           CONTROL1.1127   
*IF DEF,TIMER                                                              CONTROL1.1128   
      CALL TIMER('WRITFLDS',3)                                             CONTROL1.1129   
*ENDIF                                                                     CONTROL1.1130   
                                                                           CONTROL1.1131   
            CALL WRITFLDS(NFTOUT,PP_NUM_OUT(POS),PP_POS_OUT(POS),          GDG0F401.294    
     &                    LOOKUP_OUT,LEN1_LOOKUP_OUT,                      GDG0F401.295    
     &                    D1_OUT(ANCIL_ADD(K)),P_FIELD_OUT,FIXHD_OUT,      GDG0F401.296    
*CALL ARGPPX                                                               GDG0F401.297    
     &                    ICODE,CMESSAGE)                                  GDG0F401.298    
            IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE           CONTROL1.1135   
     *      ,NFTOUT)                                                       CONTROL1.1136   
                                                                           CONTROL1.1137   
*IF DEF,TIMER                                                              CONTROL1.1138   
      CALL TIMER('WRITFLDS',4)                                             CONTROL1.1139   
*ENDIF                                                                     CONTROL1.1140   
                                                                           CONTROL1.1141   
          ENDIF                                                            CONTROL1.1142   
                                                                           CONTROL1.1143   
          ENDIF                                                            CONTROL1.1144   
        ENDIF                                                              CONTROL1.1145   
      ENDDO                                                                CONTROL1.1146   
                                                                           CONTROL1.1147   
C---------------------------------------------------------------           CONTROL1.1148   
C Write out tstar (updated with ancillary data in REPALACA)                CONTROL1.1149   
C---------------------------------------------------------------           CONTROL1.1150   
                                                                           CONTROL1.1151   
      CALL LOCATE(24,PP_ITEMC_OUT,N_TYPES_OUT,POS)                         CONTROL1.1152   
      CALL WRITFLDS(NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,LEN1_LOOKUP_OUT,   GDG0F401.299    
     &              TSTAR,P_FIELD_OUT,FIXHD_OUT,                           GDG0F401.300    
*CALL ARGPPX                                                               GDG0F401.301    
     &              ICODE,CMESSAGE)                                        GDG0F401.302    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         CONTROL1.1155   
                                                                           CONTROL1.1156   
C---------------------------------------------------------------------     CONTROL1.1157   
C Write out sea ice fraction (updated with ancillary data in REPALACA)     CONTROL1.1158   
C---------------------------------------------------------------------     CONTROL1.1159   
                                                                           CONTROL1.1160   
      LOG_ICE_FRAC=SWITCH(27).EQ.1                                         CONTROL1.1161   
                                                                           CONTROL1.1162   
      IF(LOG_ICE_FRAC)THEN                                                 CONTROL1.1163   
      CALL LOCATE(31,PP_ITEMC_OUT,N_TYPES_OUT,POS)                         CONTROL1.1164   
                                                                           CONTROL1.1165   
*IF DEF,TIMER                                                              CONTROL1.1166   
      CALL TIMER('WRITFLDS',3)                                             CONTROL1.1167   
*ENDIF                                                                     CONTROL1.1168   
                                                                           CONTROL1.1169   
      CALL WRITFLDS(NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,LEN1_LOOKUP_OUT,   GDG0F401.303    
     &              ICE_FRAC,P_FIELD_OUT,FIXHD_OUT,                        GDG0F401.304    
*CALL ARGPPX                                                               GDG0F401.305    
     &              ICODE,CMESSAGE)                                        GDG0F401.306    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         CONTROL1.1172   
                                                                           CONTROL1.1173   
*IF DEF,TIMER                                                              CONTROL1.1174   
      CALL TIMER('WRITFLDS',4)                                             CONTROL1.1175   
*ENDIF                                                                     CONTROL1.1176   
                                                                           CONTROL1.1177   
      ENDIF                                                                CONTROL1.1178   
                                                                           CONTROL1.1179   
C---------------------------------------------------------------------     CONTROL1.1180   
C Write out tstar anomaly (created from ancillary data in REPLANCA)        CONTROL1.1181   
C---------------------------------------------------------------------     CONTROL1.1182   
                                                                           CONTROL1.1183   
      IF(SSTANOM)THEN                                                      CONTROL1.1184   
      CALL LOCATE(39,PP_ITEMC_OUT,N_TYPES_OUT,POS)                         CONTROL1.1185   
                                                                           CONTROL1.1186   
*IF DEF,TIMER                                                              CONTROL1.1187   
      CALL TIMER('WRITFLDS',3)                                             CONTROL1.1188   
*ENDIF                                                                     CONTROL1.1189   
                                                                           CONTROL1.1190   
      CALL WRITFLDS(NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,LEN1_LOOKUP_OUT,   GDG0F401.307    
     &              TSTAR_ANOM,P_FIELD_OUT,FIXHD_OUT,                      GDG0F401.308    
*CALL ARGPPX                                                               GDG0F401.309    
     &              ICODE,CMESSAGE)                                        GDG0F401.310    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         CONTROL1.1193   
                                                                           CONTROL1.1194   
*IF DEF,TIMER                                                              CONTROL1.1195   
      CALL TIMER('WRITFLDS',4)                                             CONTROL1.1196   
*ENDIF                                                                     CONTROL1.1197   
                                                                           CONTROL1.1198   
      ENDIF                                                                CONTROL1.1199   
                                                                           CONTROL1.1200   
      ENDIF  ! No ancillary fields if ocean                                CONTROL1.1201   
                                                                           CONTROL1.1202   
C---------------------------------------------------------------           CONTROL1.1203   
C Save input PSTAR for use in vertical interpolation.                      CONTROL1.1204   
C---------------------------------------------------------------           CONTROL1.1205   
                                                                           CONTROL1.1206   
      IF(.NOT.OCEAN)THEN                                                   CONTROL1.1207   
                                                                           CONTROL1.1208   
      CALL LOCATE(1,PP_ITEMC_IN,N_TYPES_IN,POS)                            CONTROL1.1209   
      IF(POS.EQ.0)THEN                                                     CONTROL1.1210   
      WRITE(6,'('' *ERROR*  Pstar not in input file'')')                   CONTROL1.1211   
      CALL ABORT                                                           CONTROL1.1212   
      ENDIF                                                                CONTROL1.1213   
                                                                           CONTROL1.1214   
*IF DEF,TIMER                                                              CONTROL1.1215   
      CALL TIMER('READFLDS',3)                                             CONTROL1.1216   
*ENDIF                                                                     CONTROL1.1217   
                                                                           CONTROL1.1218   
      CALL READFLDS(NFTIN,1,PP_POS_IN(POS),LOOKUP_IN,LEN1_LOOKUP_IN,       GDG0F401.311    
     &              D1_IN,P_FIELD_IN,FIXHD_IN,                             GDG0F401.312    
*CALL ARGPPX                                                               GDG0F401.313    
     &              ICODE,CMESSAGE)                                        GDG0F401.314    
          IF(ICODE.EQ.1501)THEN                                            UDG4F402.96     
            IF(LPOLARCHK)THEN                                              UDG4F402.97     
              write(6,*) 'Averaging polar rows to make them constant'      UDG4F402.98     
                                                                           UDG4F402.99     
!   North polar row                                                        UDG4F402.100    
              RP_ROW_SUM=0                                                 UDG4F402.101    
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.102    
                RP_ROW_SUM=RP_ROW_SUM+D1_IN(I)                             UDG4F402.103    
              END DO                                                       UDG4F402.104    
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.105    
                D1_IN(I)=RP_ROW_SUM/ROW_LENGTH_IN                          UDG4F402.106    
              END DO                                                       UDG4F402.107    
!   South polar row                                                        UDG4F402.108    
              RP_ROW_SUM=0                                                 UDG4F402.109    
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.110    
                RP_ROW_SUM=                                                UDG4F402.111    
     &            RP_ROW_SUM+D1_IN((P_ROWS_IN-1)*ROW_LENGTH_IN+I)          UDG4F402.112    
              END DO                                                       UDG4F402.113    
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.114    
                D1_IN((P_ROWS_IN-1)*ROW_LENGTH_IN+I)=                      UDG4F402.115    
     &            RP_ROW_SUM/ROW_LENGTH_IN                                 UDG4F402.116    
             END DO                                                        UDG4F402.117    
            END IF                                                         UDG4F402.118    
          ELSE IF(ICODE.NE.0)THEN                                          UDG4F402.119    
            CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)                  UDG4F402.120    
          END IF                                                           UDG4F402.121    
                                                                           CONTROL1.1222   
*IF DEF,TIMER                                                              CONTROL1.1223   
      CALL TIMER('READFLDS',4)                                             CONTROL1.1224   
*ENDIF                                                                     CONTROL1.1225   
                                                                           CONTROL1.1226   
      IF(HORIZ) THEN                                                       MC230493.29     
                                                                           MC230493.30     
*IF DEF,TIMER                                                              CONTROL1.1227   
      CALL TIMER('HINTCTL',3)                                              UDG1F400.172    
*ENDIF                                                                     CONTROL1.1229   
                                                                           CONTROL1.1230   
      CALL H_INT_CTL(IDIM,P_FIELD_OUT,ROW_LENGTH_IN,ROW_LENGTH_OUT         UDG1F400.173    
     &,              P_ROWS_IN,P_ROWS_OUT,AW_AREA_BOX(1)                   UDG1F400.174    
     &,              GLOBAL,H_INT_TYPE                                     UDG1F400.175    
     &,              AW_INDEX_TARG_LHS(1,1),AW_INDEX_TARG_TOP(1,1)         UDG1F400.176    
     &,              BL_INDEX_B_L(1,1),BL_INDEX_B_R(1,1)                   UDG1F400.177    
     &,              AW_COLAT_T(1,1),AW_LONG_L(1,1),D1_IN                  UDG1F400.178    
     &,              WEIGHT_T_R(1,1),WEIGHT_B_R(1,1)                       UDG1F400.179    
     &,              WEIGHT_T_L(1,1),WEIGHT_B_L(1,1)                       UDG1F400.180    
     &,              PSTAR_OUT)                                            UDG1F400.181    
                                                                           CONTROL1.1235   
        IF(GLOBAL)THEN                                                     UDG4F402.572    
! Horizontal Interpolation has made polar rows non-constant                UDG4F402.573    
           write(6,*) 'Horizontal Interpolation has made polar rows ',     UDG4F402.574    
     &     'non-constant'                                                  UDG4F402.575    
           write(6,*) 'Averaging polar rows to make them constant'         UDG4F402.576    
                                                                           UDG4F402.577    
!   North polar row                                                        UDG4F402.578    
            RP_ROW_SUM=0                                                   UDG4F402.579    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.580    
              RP_ROW_SUM=RP_ROW_SUM+PSTAR_OUT(I)                           UDG4F402.581    
            END DO                                                         UDG4F402.582    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.583    
              PSTAR_OUT(I)=RP_ROW_SUM/ROW_LENGTH_OUT                       UDG4F402.584    
            END DO                                                         UDG4F402.585    
!   South polar row                                                        UDG4F402.586    
            RP_ROW_SUM=0                                                   UDG4F402.587    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.588    
              RP_ROW_SUM=                                                  UDG4F402.589    
     &        RP_ROW_SUM+PSTAR_OUT((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)        UDG4F402.590    
            END DO                                                         UDG4F402.591    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.592    
              PSTAR_OUT((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)=                  UDG4F402.593    
     &         RP_ROW_SUM/ROW_LENGTH_OUT                                   UDG4F402.594    
            END DO                                                         UDG4F402.595    
          END IF                                                           UDG4F402.596    
*IF DEF,TIMER                                                              CONTROL1.1236   
      CALL TIMER('HINTCTL',4)                                              UDG1F400.182    
*ENDIF                                                                     CONTROL1.1238   
                                                                           MC230493.31     
      ELSE                                                                 MC230493.32     
        DO I=1,P_FIELD_OUT                                                 MC230493.33     
          PSTAR_OUT(I)=D1_IN(I)                                            MC230493.34     
        END DO                                                             MC230493.35     
      END IF                                                               MC230493.36     
                                                                           MC230493.37     
                                                                           CONTROL1.1239   
      ENDIF  ! No pstar if ocean                                           CONTROL1.1240   
                                                                           CONTROL1.1241   
                                                                           AD150293.56     
C---------------------------------------------------------------           AD150293.57     
C Increment model input fields with ECMWF perturbations                    AD150293.58     
C---------------------------------------------------------------           AD150293.59     
                                                                           AD150293.60     
      IF(PERTURBATION.NE.0.0)THEN                                          AD150293.61     
                                                                           AD150293.62     
      VERT=.TRUE.                                                          AD150293.63     
                                                                           AD150293.64     
      WRITE(6,*)'ADDING ECMWF PERTURBATION INCS'                           AD150293.65     
      CALL PERTURB(                                                        UDG7F400.161    
*CALL ARGPPX                                                               UDG7F400.162    
     &             NFTPER,NFTIN,LEN_FIXHD_IN,PER_ARGS(1),PER_ARGS(2),      UDG7F400.163    
     &             PER_ARGS(3),PER_ARGS(4),LEN1_LOOKUP_IN,PER_ARGS(5),     UDG7F400.164    
     &             PER_ARGS(6),FIXHD_IN,INTHD_IN,LEVDEPC_IN,               UDG7F400.165    
     &             P_LEVELS_IN,LEN1_LEVDEPC_IN,N_TYPES_IN,P_FIELD_IN,      UDG7F400.166    
     &             LOOKUP_IN,PP_POS_IN,PP_ITEMC_IN,PERTURBATION,           UDG3F405.342    
     &             P_ROWS_IN,ROW_LENGTH_IN,LPOLARCHK)                      UDG3F405.343    
                                                                           UDG3F405.344    
                                                                           AD150293.72     
                                                                           AD150293.73     
      ENDIF                                                                AD150293.74     
C---------------------------------------------------------------           CONTROL1.1242   
C If orography to be read from ancillary field then adjust PSTAR           CONTROL1.1243   
C---------------------------------------------------------------           CONTROL1.1244   
                                                                           CONTROL1.1245   
      IF(.NOT.(RM_CP))THEN                                                 UDG6F405.46     
      IF(.NOT.OCEAN)THEN                                                   CONTROL1.1246   
                                                                           CONTROL1.1247   
      WRITE(6,'('' BEFORE TOPOG ADJ'')')                                   UDG6F304.20     
      CALL LOCATE(1,PP_ITEMC_OUT,N_TYPES_OUT,POS)                          CONTROL1.1249   
      CALL PR_RFLD(LOOKUP_OUT,LOOKUP_OUT,PSTAR_OUT,POS)                    CONTROL1.1250   
                                                                           CONTROL1.1251   
      NBLP1=BL_LEVELS_IN+1                                                 CONTROL1.1252   
      CALL LOCATE(33,PP_ITEMC_OUT,N_TYPES_OUT,POS)                         CONTROL1.1253   
                                                                           CONTROL1.1254   
      IF(PP_SOURCE_OUT(POS).EQ.2)THEN                                      UDG2F305.123    
                                                                           CONTROL1.1256   
C Read in ancillary field orography                                        CONTROL1.1260   
                                                                           CONTROL1.1261   
*IF DEF,TIMER                                                              CONTROL1.1262   
      CALL TIMER('READFLDS',3)                                             CONTROL1.1263   
*ENDIF                                                                     CONTROL1.1264   
                                                                           CONTROL1.1265   
      CALL READFLDS(NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,LEN1_LOOKUP_OUT,   GDG0F401.315    
     &              TOPOG_OUT,P_FIELD_OUT,FIXHD_OUT,                       GDG0F401.316    
*CALL ARGPPX                                                               GDG0F401.317    
     &              ICODE,CMESSAGE)                                        GDG0F401.318    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         CONTROL1.1268   
                                                                           CONTROL1.1269   
*IF DEF,TIMER                                                              CONTROL1.1270   
      CALL TIMER('READFLDS',4)                                             CONTROL1.1271   
*ENDIF                                                                     CONTROL1.1272   
                                                                           CONTROL1.1273   
C Read in orography from input file                                        CONTROL1.1274   
      CALL LOCATE(33,PP_ITEMC_IN,N_TYPES_IN,POS)                           CONTROL1.1275   
                                                                           CONTROL1.1276   
*IF DEF,TIMER                                                              CONTROL1.1277   
      CALL TIMER('READFLDS',3)                                             CONTROL1.1278   
*ENDIF                                                                     CONTROL1.1279   
                                                                           CONTROL1.1280   
      CALL READFLDS(NFTIN,1,PP_POS_IN(POS),LOOKUP_IN,LEN1_LOOKUP_IN,       GDG0F401.319    
     &              D1_IN,P_FIELD_IN,FIXHD_IN,                             GDG0F401.320    
*CALL ARGPPX                                                               GDG0F401.321    
     &              ICODE,CMESSAGE)                                        GDG0F401.322    
          IF(ICODE.EQ.1501)THEN                                            UDG4F402.122    
            IF(LPOLARCHK)THEN                                              UDG4F402.123    
              write(6,*) 'Averaging polar rows to make them constant'      UDG4F402.124    
                                                                           UDG4F402.125    
!   North polar row                                                        UDG4F402.126    
              RP_ROW_SUM=0                                                 UDG4F402.127    
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.128    
                RP_ROW_SUM=RP_ROW_SUM+D1_IN(I)                             UDG4F402.129    
              END DO                                                       UDG4F402.130    
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.131    
                D1_IN(I)=RP_ROW_SUM/ROW_LENGTH_IN                          UDG4F402.132    
              END DO                                                       UDG4F402.133    
!   South polar row                                                        UDG4F402.134    
              RP_ROW_SUM=0                                                 UDG4F402.135    
              DO I=1,ROW_LENGTH_IN                                         UDG4F402.136    
                RP_ROW_SUM=                                                UDG4F402.137    
     &            RP_ROW_SUM+D1_IN((P_ROWS_IN-1)*ROW_LENGTH_IN+I)          UDG4F402.138    
              END DO                                                       UDG4F402.139    
              DO I=1,ROW_LENGTH_OUT                                        UDG4F402.140    
                D1_IN((P_ROWS_IN-1)*ROW_LENGTH_IN+I)=                      UDG4F402.141    
     &            RP_ROW_SUM/ROW_LENGTH_IN                                 UDG4F402.142    
              END DO                                                       UDG4F402.143    
            END IF                                                         UDG4F402.144    
          ELSE IF(ICODE.NE.0)THEN                                          UDG4F402.145    
            CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)                  UDG4F402.146    
          END IF                                                           UDG4F402.147    
                                                                           CONTROL1.1284   
*IF DEF,TIMER                                                              CONTROL1.1285   
      CALL TIMER('READFLDS',4)                                             CONTROL1.1286   
*ENDIF                                                                     CONTROL1.1287   
                                                                           UDG6F304.21     
C Switch on vertical interpolation if new orography field is specified     UDG6F304.22     
C and is different from that in dump.                                      UDG6F304.23     
         DO I=1,P_FIELD_OUT                                                UDG6F304.24     
           IF(.NOT.VERT)THEN                                               UDG6F304.25     
             IF(D1_IN(I).NE.TOPOG_OUT(I))THEN                              UDG6F304.26     
               VERT=.TRUE.                                                 UDG6F304.27     
               WRITE                                                       UDG6F304.28     
     &       (6,*) ' VERTICAL INTERPOLATION SWITCHED ON BECAUSE'//         UDG6F304.29     
     &             ' THE OROGRAPHY IS BEING CHANGED'                       UDG6F304.30     
             ENDIF                                                         UDG6F304.31     
           ENDIF                                                           UDG6F304.32     
         ENDDO                                                             UDG6F304.33     
                                                                           CONTROL1.1288   
      IF(VERT)THEN                                                         UDG6F304.34     
                                                                           UDG6F304.35     
      IF(HORIZ)THEN                                                        UDG5F405.3      
                                                                           UDG5F405.4      
C Interpolate old orography to new grid                                    CONTROL1.1289   
                                                                           CONTROL1.1290   
*IF DEF,TIMER                                                              CONTROL1.1291   
      CALL TIMER('HINTCTL',3)                                              UDG1F400.183    
*ENDIF                                                                     CONTROL1.1293   
                                                                           CONTROL1.1294   
      CALL PR_RFLD(LOOKUP_IN,LOOKUP_IN,D1_IN,1)                            CONTROL1.1295   
      CALL H_INT_CTL(IDIM,P_FIELD_OUT,ROW_LENGTH_IN,ROW_LENGTH_OUT         UDG1F400.184    
     &,              P_ROWS_IN,P_ROWS_OUT,AW_AREA_BOX(1)                   UDG1F400.185    
     &,              GLOBAL,H_INT_TYPE                                     UDG1F400.186    
     &,              AW_INDEX_TARG_LHS(1,1),AW_INDEX_TARG_TOP(1,1)         UDG1F400.187    
     &,              BL_INDEX_B_L(1,1),BL_INDEX_B_R(1,1)                   UDG1F400.188    
     &,              AW_COLAT_T(1,1),AW_LONG_L(1,1),D1_IN                  UDG1F400.189    
     &,              WEIGHT_T_R(1,1),WEIGHT_B_R(1,1)                       UDG1F400.190    
     &,              WEIGHT_T_L(1,1),WEIGHT_B_L(1,1)                       UDG1F400.191    
     &,              TOPOG_OLD)                                            UDG1F400.192    
                                                                           CONTROL1.1300   
*IF DEF,TIMER                                                              CONTROL1.1301   
      CALL TIMER('HINTCTL',4)                                              UDG1F400.193    
*ENDIF                                                                     CONTROL1.1303   
                                                                           CONTROL1.1304   
        IF(GLOBAL)THEN                                                     UDG4F402.597    
! Horizontal Interpolation has made polar rows non-constant                UDG4F402.598    
           write(6,*) 'Horizontal Interpolation has made polar rows ',     UDG4F402.599    
     &     'non-constant'                                                  UDG4F402.600    
           write(6,*) 'Averaging polar rows to make them constant'         UDG4F402.601    
                                                                           UDG4F402.602    
!   North polar row                                                        UDG4F402.603    
            RP_ROW_SUM=0                                                   UDG4F402.604    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.605    
              RP_ROW_SUM=RP_ROW_SUM+TOPOG_OLD(I)                           UDG4F402.606    
            END DO                                                         UDG4F402.607    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.608    
              TOPOG_OLD(I)=RP_ROW_SUM/ROW_LENGTH_OUT                       UDG4F402.609    
            END DO                                                         UDG4F402.610    
!   South polar row                                                        UDG4F402.611    
            RP_ROW_SUM=0                                                   UDG4F402.612    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.613    
              RP_ROW_SUM=                                                  UDG4F402.614    
     &        RP_ROW_SUM+TOPOG_OLD((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)        UDG4F402.615    
            END DO                                                         UDG4F402.616    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.617    
              TOPOG_OLD((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)=                  UDG4F402.618    
     &         RP_ROW_SUM/ROW_LENGTH_OUT                                   UDG4F402.619    
            END DO                                                         UDG4F402.620    
          END IF                                                           UDG4F402.621    
      ELSE              !IF HORIZ                                          UDG5F405.5      
                                                                           UDG5F405.6      
        DO I=1,P_FIELD_OUT                                                 UDG5F405.7      
          TOPOG_OLD(I)=D1_IN(I)                                            UDG5F405.8      
        END DO                                                             UDG5F405.9      
                                                                           UDG5F405.10     
      END IF            !IF HORIZ                                          UDG5F405.11     
                                                                           UDG5F405.12     
C Set ancillary orography back to interpolated orography outside           CONTROL1.1305   
C area specified on NAMELIST HORIZ                                         CONTROL1.1306   
      DO I=1,P_FIELD_OUT                                                   CONTROL1.1307   
        IF(.NOT.TOPOG_MASK(I))TOPOG_OUT(I)=TOPOG_OLD(I)                    CONTROL1.1308   
      ENDDO                                                                CONTROL1.1309   
                                                                           UDG6F304.36     
      ENDIF                                                                UDG6F304.37     
                                                                           CONTROL1.1310   
C Write updated orography to output file                                   CONTROL1.1311   
      CALL LOCATE(33,PP_ITEMC_OUT,N_TYPES_OUT,POS)                         CONTROL1.1312   
*IF DEF,TIMER                                                              CONTROL1.1313   
      CALL TIMER('WRITFLDS',3)                                             CONTROL1.1314   
*ENDIF                                                                     CONTROL1.1315   
                                                                           CONTROL1.1316   
      CALL WRITFLDS(NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,LEN1_LOOKUP_OUT,   GDG0F401.323    
     &              TOPOG_OUT,P_FIELD_OUT,FIXHD_OUT,                       GDG0F401.324    
*CALL ARGPPX                                                               GDG0F401.325    
     &              ICODE,CMESSAGE)                                        GDG0F401.326    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         CONTROL1.1319   
                                                                           CONTROL1.1320   
*IF DEF,TIMER                                                              CONTROL1.1321   
      CALL TIMER('WRITFLDS',4)                                             CONTROL1.1322   
*ENDIF                                                                     CONTROL1.1323   
                                                                           CONTROL1.1324   
C Read in THL up to first level outside boundary layer                     CONTROL1.1325   
      CALL LOCATE(5,PP_ITEMC_IN,N_TYPES_IN,POS)                            CONTROL1.1326   
                                                                           CONTROL1.1327   
*IF DEF,TIMER                                                              CONTROL1.1328   
      CALL TIMER('READFLDS',3)                                             CONTROL1.1329   
*ENDIF                                                                     CONTROL1.1330   
                                                                           CONTROL1.1331   
      CALL READFLDS(NFTIN,NBLP1,PP_POS_IN(POS),LOOKUP_IN,LEN1_LOOKUP_IN,   GDG0F401.327    
     &              D1_IN,P_FIELD_IN,FIXHD_IN,                             GDG0F401.328    
*CALL ARGPPX                                                               GDG0F401.329    
     &              ICODE,CMESSAGE)                                        GDG0F401.330    
          IF(ICODE.EQ.1501)THEN                                            UDG4F402.148    
            IF(LPOLARCHK)THEN                                              UDG4F402.149    
              write(6,*) 'Averaging polar rows to make them constant'      UDG4F402.150    
                                                                           UDG4F402.151    
              DO KK=1,NBLP1                                                UDG4F402.152    
!   North polar row                                                        UDG4F402.153    
                RP_ROW_SUM=0                                               UDG4F402.154    
                DO I=1,ROW_LENGTH_IN                                       UDG4F402.155    
                  RP_ROW_SUM=RP_ROW_SUM+D1_IN(I+(KK-1)*P_FIELD_IN)         UDG4F402.156    
                END DO                                                     UDG4F402.157    
                DO I=1,ROW_LENGTH_IN                                       UDG4F402.158    
                  D1_IN(I+(KK-1)*P_FIELD_IN)=RP_ROW_SUM/ROW_LENGTH_IN      UDG4F402.159    
                END DO                                                     UDG4F402.160    
!   South polar row                                                        UDG4F402.161    
                RP_ROW_SUM=0                                               UDG4F402.162    
                DO I=1,ROW_LENGTH_IN                                       UDG4F402.163    
                  RP_ROW_SUM=RP_ROW_SUM+D1_IN((KK-1)*P_FIELD_IN+           UDG4F402.164    
     &              (P_ROWS_IN-1)*ROW_LENGTH_IN+I)                         UDG4F402.165    
                END DO                                                     UDG4F402.166    
                DO I=1,ROW_LENGTH_IN                                       UDG4F402.167    
                  D1_IN((KK-1)*P_FIELD_IN+                                 UDG4F402.168    
     &              (P_ROWS_IN-1)*ROW_LENGTH_IN+I)=                        UDG4F402.169    
     &               RP_ROW_SUM/ROW_LENGTH_IN                              UDG4F402.170    
                END DO                                                     UDG4F402.171    
              END DO                                                       UDG4F402.172    
            END IF                                                         UDG4F402.173    
          ELSE IF(ICODE.NE.0)THEN                                          UDG4F402.174    
            CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)                  UDG4F402.175    
          END IF                                                           UDG4F402.176    
                                                                           CONTROL1.1335   
*IF DEF,TIMER                                                              CONTROL1.1336   
      CALL TIMER('READFLDS',4)                                             CONTROL1.1337   
*ENDIF                                                                     CONTROL1.1338   
                                                                           CONTROL1.1339   
      IF(VERT)THEN                                                         UDG6F304.38     
                                                                           UDG6F304.39     
      IF(HORIZ)THEN                                                        UDG5F405.13     
                                                                           UDG5F405.14     
*IF DEF,TIMER                                                              CONTROL1.1340   
      CALL TIMER('HINTCTL',3)                                              UDG1F400.194    
*ENDIF                                                                     CONTROL1.1342   
                                                                           CONTROL1.1343   
C Interpolate reference potential temperature to new grid                  CONTROL1.1344   
      CALL H_INT_CTL(IDIM,P_FIELD_OUT,ROW_LENGTH_IN,ROW_LENGTH_OUT         UDG1F400.195    
     &,              P_ROWS_IN,P_ROWS_OUT,AW_AREA_BOX(1)                   UDG1F400.196    
     &,              GLOBAL,H_INT_TYPE                                     UDG1F400.197    
     &,              AW_INDEX_TARG_LHS(1,1),AW_INDEX_TARG_TOP(1,1)         UDG1F400.198    
     &,              BL_INDEX_B_L(1,1),BL_INDEX_B_R(1,1)                   UDG1F400.199    
     &,              AW_COLAT_T(1,1),AW_LONG_L(1,1)                        UDG1F400.200    
     &,              D1_IN((1+(NBLP1-1)*P_FIELD_IN))                       UDG1F400.201    
     &,              WEIGHT_T_R(1,1),WEIGHT_B_R(1,1)                       UDG1F400.202    
     &,              WEIGHT_T_L(1,1),WEIGHT_B_L(1,1)                       UDG1F400.203    
     &,              THR_OUT)                                              UDG1F400.204    
                                                                           CONTROL1.1349   
*IF DEF,TIMER                                                              CONTROL1.1350   
      CALL TIMER('HINTCTL',4)                                              UDG1F400.205    
*ENDIF                                                                     CONTROL1.1352   
                                                                           CONTROL1.1353   
        IF(GLOBAL)THEN                                                     UDG4F402.622    
! Horizontal Interpolation has made polar rows non-constant                UDG4F402.623    
           write(6,*) 'Horizontal Interpolation has made polar rows ',     UDG4F402.624    
     &     'non-constant'                                                  UDG4F402.625    
           write(6,*) 'Averaging polar rows to make them constant'         UDG4F402.626    
                                                                           UDG4F402.627    
!   North polar row                                                        UDG4F402.628    
            RP_ROW_SUM=0                                                   UDG4F402.629    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.630    
              RP_ROW_SUM=RP_ROW_SUM+THR_OUT(I)                             UDG4F402.631    
            END DO                                                         UDG4F402.632    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.633    
              THR_OUT(I)=RP_ROW_SUM/ROW_LENGTH_OUT                         UDG4F402.634    
            END DO                                                         UDG4F402.635    
!   South polar row                                                        UDG4F402.636    
            RP_ROW_SUM=0                                                   UDG4F402.637    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.638    
              RP_ROW_SUM=                                                  UDG4F402.639    
     &        RP_ROW_SUM+THR_OUT((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)          UDG4F402.640    
            END DO                                                         UDG4F402.641    
            DO I=1,ROW_LENGTH_OUT                                          UDG4F402.642    
              THR_OUT((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)=                    UDG4F402.643    
     &         RP_ROW_SUM/ROW_LENGTH_OUT                                   UDG4F402.644    
            END DO                                                         UDG4F402.645    
          END IF                                                           UDG4F402.646    
      ELSE              !IF HORIZ                                          UDG5F405.15     
                                                                           UDG5F405.16     
        DO I=1,P_FIELD_OUT                                                 UDG5F405.17     
          THR_OUT(I)=D1_IN((NBLP1-1)*P_FIELD_IN+I)                         UDG5F405.18     
        END DO                                                             UDG5F405.19     
                                                                           UDG5F405.20     
      END IF            !IF HORIZ                                          UDG5F405.21     
                                                                           UDG5F405.22     
                                                                           UDG5F405.23     
                                                                           UDG5F405.24     
C Calculate new PSTAR                                                      CONTROL1.1354   
      DO I=1,P_FIELD_OUT                                                   CONTROL1.1355   
C Reference pressure                                                       CONTROL1.1356   
        PR_OUT=LEVDEPC_IN(NBLP1)                                           CONTROL1.1357   
     *       +PSTAR_OUT(I)*LEVDEPC_IN(NBLP1+P_LEVELS_IN)                   CONTROL1.1358   
C Reference temperature                                                    CONTROL1.1359   
        TR_OUT=THR_OUT(I)*(PR_OUT/PREF)**KAPPA                             CONTROL1.1363   
C 'Surface' temperature by extrapolating reference values to surface       CONTROL1.1365   
        TS_OUT=TR_OUT*(PSTAR_OUT(I)/PR_OUT)**LAPSE_R_OVER_G                GSS9F402.68     
C New pstar                                                                CONTROL1.1371   
        IF(I.EQ.P_FIELD_OUT)THEN                                           CONTROL1.1372   
          WRITE(6,'('' pr_out,tr_out,ts_out,pstar_in,topog_old,'',         CONTROL1.1373   
     *    ''topog_out'',6E12.5)')PR_OUT,TR_OUT,TS_OUT,PSTAR_OUT(I)         CONTROL1.1374   
     *    ,TOPOG_OLD(I),TOPOG_OUT(I)                                       CONTROL1.1375   
        ENDIF                                                              CONTROL1.1376   
        PSTAR_OUT(I)=PSTAR_OUT(I)*((TS_OUT-LAPSE*(TOPOG_OUT(I)             CONTROL1.1377   
     *             -TOPOG_OLD(I)))/TS_OUT)**G_OVER_LAPSE_R                 CONTROL1.1378   
      ENDDO                                                                CONTROL1.1379   
                                                                           UDG6F304.40     
      ENDIF                                                                UDG6F304.41     
                                                                           CONTROL1.1380   
      WRITE(6,'('' AFTER TOPOG ADJ'')')                                    CONTROL1.1381   
      CALL LOCATE(1,PP_ITEMC_OUT,N_TYPES_OUT,POS)                          CONTROL1.1382   
      CALL PR_RFLD(LOOKUP_OUT,LOOKUP_OUT,PSTAR_OUT,POS)                    CONTROL1.1383   
                                                                           CONTROL1.1384   
      ENDIF                                                                CONTROL1.1385   
C---------------------------------------------------------------           CONTROL1.1386   
C Write new PSTAR to disk                                                  CONTROL1.1387   
C---------------------------------------------------------------           CONTROL1.1388   
                                                                           CONTROL1.1389   
      CALL LOCATE(1,PP_ITEMC_OUT,N_TYPES_OUT,POS)                          CONTROL1.1390   
                                                                           CONTROL1.1391   
*IF DEF,TIMER                                                              CONTROL1.1392   
      CALL TIMER('WRITFLDS',3)                                             CONTROL1.1393   
*ENDIF                                                                     CONTROL1.1394   
                                                                           CONTROL1.1395   
      CALL WRITFLDS(NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,LEN1_LOOKUP_OUT,   DR081293.52     
     &              PSTAR_OUT,P_FIELD_OUT,FIXHD_OUT,                       GDG0F401.331    
*CALL ARGPPX                                                               GDG0F401.332    
     &              ICODE,CMESSAGE)                                        GDG0F401.333    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         CONTROL1.1398   
                                                                           CONTROL1.1399   
*IF DEF,TIMER                                                              CONTROL1.1400   
      CALL TIMER('WRITFLDS',4)                                             CONTROL1.1401   
*ENDIF                                                                     CONTROL1.1402   
                                                                           CONTROL1.1403   
      ENDIF  ! No orography if ocean                                       CONTROL1.1404   
      ELSE ! RM_CP                                                         UDG6F405.47     
                                                                           UDG6F405.48     
      CALL LOCATE(1,PP_ITEMC_IN,N_TYPES_IN,POS)                            UDG6F405.49     
      IF(POS.EQ.0)THEN                                                     UDG6F405.50     
      WRITE(6,'('' *ERROR*  Pstar not in input file'')')                   UDG6F405.51     
      CALL ABORT                                                           UDG6F405.52     
      ENDIF                                                                UDG6F405.53     
                                                                           UDG6F405.54     
      CALL TIMER('READFLDS',3)                                             UDG6F405.55     
                                                                           UDG6F405.56     
      CALL READFLDS(NFTIN,1,PP_POS_IN(POS),LOOKUP_IN,LEN1_LOOKUP_IN,       UDG6F405.57     
     &              PSTAR_OUT,P_FIELD_IN,FIXHD_IN,                         UDG6F405.58     
*CALL ARGPPX                                                               UDG6F405.59     
     &              ICODE,CMESSAGE)                                        UDG6F405.60     
                                                                           UDG6F405.61     
      CALL TIMER('READFLDS',4)                                             UDG6F405.62     
                                                                           UDG6F405.63     
      CALL LOCATE(1,PP_ITEMC_OUT,N_TYPES_OUT,POS)                          UDG6F405.64     
                                                                           UDG6F405.65     
      CALL TIMER('WRITFLDS',3)                                             UDG6F405.66     
                                                                           UDG6F405.67     
      CALL WRITFLDS(NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,LEN1_LOOKUP_OUT,   UDG6F405.68     
     &              PSTAR_OUT,P_FIELD_OUT,FIXHD_OUT,                       UDG6F405.69     
*CALL ARGPPX                                                               UDG6F405.70     
     &              ICODE,CMESSAGE)                                        UDG6F405.71     
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         UDG6F405.72     
                                                                           UDG6F405.73     
      CALL TIMER('WRITFLDS',4)                                             UDG6F405.74     
      ENDIF ! RM_CP                                                        UDG6F405.75     
      ENDIF ! Not PFinc2UM                                                 UIE2F401.210    
                                                                           CONTROL1.1405   
C---------------------------------------------------------------           CONTROL1.1406   
C Loop over number of different STASH codes in output data block           CONTROL1.1407   
C---------------------------------------------------------------           CONTROL1.1408   
                                                                           CONTROL1.1409   
      DO 1400 J=1,N_TYPES_OUT                                              CONTROL1.1410   
                                                                           CONTROL1.1411   
         ITEM_CODE=MOD(LOOKUP_OUT(42,PP_POS_OUT(J)),1000)                  UIE2F401.199    
         SECTION=(LOOKUP_OUT(42,PP_POS_OUT(J))-ITEM_CODE)/1000             UIE2F401.200    
         MODEL=LOOKUP_OUT(45,PP_POS_OUT(J))                                UIE2F401.201    
         PPXREF_GRID_TYPE=EXPPXI(MODEL,SECTION,ITEM_CODE,ppx_grid_type,    UIE2F401.202    
*CALL ARGPPX                                                               UIE2F401.203    
     &                   ICODE,CMESSAGE)                                   UIE2F401.204    
C Land/sea mask, PSTAR, TSTAR already processed or ancillary               CONTROL1.1412   
C field selected                                                           CONTROL1.1413   
C so skip to end of loop                                                   CONTROL1.1414   
       IF(RadialGridIn.AND..NOT.RadialGridOut)THEN                         UIE2F401.215    
         LOG_ICE_FRAC=.TRUE.                                               UIE2F401.216    
       END IF                                                              UIE2F401.217    
      IF(PP_ITEMC_OUT(J).EQ.30.OR.PP_ITEMC_OUT(J).EQ.1.OR.                 CONTROL1.1415   
     *PP_ITEMC_OUT(J).EQ.24.OR.PP_SOURCE_OUT(J).EQ.2                       CONTROL1.1416   
     & .OR. PP_SOURCE_OUT(J).EQ.8    ! Field to be initialised             UDR1F400.4      
     *.OR.(LOG_ICE_FRAC.AND.PP_ITEMC_OUT(J).EQ.31)) GOTO1400               CONTROL1.1417   
                                                                           CONTROL1.1418   
      IF(PP_ITEMC_OUT(J).EQ.93.AND.HORIZ) THEN                             TJ300493.4      
       WRITE(6,'(''CONTROL: ERROR - Outflow data cannot be interpolated.   CONTROL1.1420   
     & Resubmit job using request for ancillary field'')')                 CONTROL1.1421   
        CALL ABORT                                                         CONTROL1.1422   
      ENDIF                                                                CONTROL1.1423   
                                                                           CONTROL1.1424   
C---------------------------------------------------------------           CONTROL1.1425   
C Find position of output field in input file                              CONTROL1.1426   
C---------------------------------------------------------------           CONTROL1.1427   
                                                                           CONTROL1.1428   
      CALL FIND(PP_ITEMC_OUT(J),PP_ITEMC_IN,PP_LEN_OUT(J),PP_LEN_IN        CONTROL1.1429   
     &   ,N_TYPES_IN,OCEAN,POS)                                            CONTROL1.1430   
      IF(POS.EQ.0)THEN                                                     AD200593.188    
        N_FIELDS_IN=0                                                      AD200593.189    
      ELSE                                                                 AD200593.190    
        N_FIELDS_IN=PP_NUM_IN(POS)                                         AD200593.191    
      ENDIF                                                                AD200593.192    
      N_FIELDS_OUT=PP_NUM_OUT(J)                                           CONTROL1.1432   
                                                                           CONTROL1.1433   
C---------------------------------------------------------------           CONTROL1.1434   
C Check for inconsistency in specification of data source                  CONTROL1.1435   
C---------------------------------------------------------------           CONTROL1.1436   
                                                                           CONTROL1.1437   
      IF(POS.EQ.0.AND.PP_SOURCE_OUT(J).EQ.1)THEN                           CONTROL1.1438   
                                                                           UDR1F400.5      
                                                                           GDR7F404.8      
!      This field is not in the input dump                                 GDR7F404.9      
                                                                           GDR7F404.10     
        IF(                                                                GDR7F404.11     
!         QCF                                                              GDR7F404.12     
     &         (PP_ITEMC_OUT(J).eq.12  .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.13     
     &          L_MP_PRECIP)                                               GDR7F404.14     
!         Sea Ice Temperature                                              GDR7F404.15     
     &    .or. (PP_ITEMC_OUT(J).eq.49  .and. MODEL.eq. ATMOS_IM)           GDR7F404.16     
!         Convective Cloud Amount - 3D                                     GDR7F404.17     
     &    .or. (PP_ITEMC_OUT(J).eq.211 .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.18     
     &          L_3D_CCA)                                                  GDR7F404.19     
!         Canopy Conductance                                               GDR7F404.20     
     &    .or. (PP_ITEMC_OUT(J).eq.213 .and. MODEL.eq. ATMOS_IM)           GDR7F404.21     
!         Unfrozen soil moisture fraction                                  GDR7F404.22     
     &    .or. (PP_ITEMC_OUT(J).eq.214 .and. MODEL.eq. ATMOS_IM)           GDR7F404.23     
!         Frozen soil moisture fraction                                    GDR7F404.24     
     &    .or. (PP_ITEMC_OUT(J).eq.215 .and. MODEL.eq. ATMOS_IM)           GDR7F404.25     
!         Snow Soot Content                                                GDR7F404.26     
     &    .or. (PP_ITEMC_OUT(J).eq.221 .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.27     
     &          L_SNOW_ALBEDO)                                             GDR7F404.28     
!         Accumulated NPP on Plant Functional Types                        GDR7F404.29     
     &    .or. (PP_ITEMC_OUT(J).eq.224 .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.30     
     &          (L_TRIFFID.or.L_VEG_FRACS) )                               GDR7F404.31     
!         Accumulated Leaf Turnover Rate PFTS                              GDR7F404.32     
     &    .or. (PP_ITEMC_OUT(J).eq.225 .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.33     
     &          (L_TRIFFID.or.L_VEG_FRACS) )                               GDR7F404.34     
!         Accumulated Phenological Leaf Turnover PFTS                      GDR7F404.35     
     &    .or. (PP_ITEMC_OUT(J).eq.226 .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.36     
     &          (L_TRIFFID.or.L_VEG_FRACS) )                               GDR7F404.37     
!         Accumulated Wood Respiration PFTS                                GDR7F404.38     
     &    .or. (PP_ITEMC_OUT(J).eq.227 .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.39     
     &          (L_TRIFFID.or.L_VEG_FRACS) )                               GDR7F404.40     
!         Accumulated Soil Respiration                                     GDR7F404.41     
     &    .or. (PP_ITEMC_OUT(J).eq.228 .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.42     
     &          (L_TRIFFID.or.L_VEG_FRACS) )                               GDR7F404.43     
!         Canopy Water on Non-Ice Tiles                                    GDR7F404.44     
     &    .or. (PP_ITEMC_OUT(J).eq.229 .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.45     
     &          (L_TRIFFID.or.L_VEG_FRACS) )                               GDR7F404.46     
!         Canopy Capacity on Non-Ice Tiles                                 GDR7F404.47     
     &    .or. (PP_ITEMC_OUT(J).eq.230 .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.48     
     &          (L_TRIFFID.or.L_VEG_FRACS) )                               GDR7F404.49     
!         Snow Grain Size                                                  GDR7F404.50     
     &    .or. (PP_ITEMC_OUT(J).eq.231 .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.51     
     &          L_SNOW_ALBEDO)                                             GDR7F404.52     
!         Snow Temperature                                                 GDR7F404.53     
     &    .or. (PP_ITEMC_OUT(J).eq.232 .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.54     
     &          (L_TRIFFID.or.L_VEG_FRACS) )                               GDR7F404.55     
!         Surface Temperature on Tiles                                     GDR7F404.56     
     &    .or. (PP_ITEMC_OUT(J).eq.233 .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.57     
     &          (L_TRIFFID.or.L_VEG_FRACS) )                               GDR7F404.58     
!         Roughness Length on Tiles                                        GDR7F404.59     
     &    .or. (PP_ITEMC_OUT(J).eq.234 .and. MODEL.eq. ATMOS_IM .and.      GDR7F404.60     
     &          (L_TRIFFID.or.L_VEG_FRACS) )                               GDR7F404.61     
     &    ) THEN                                                           GDR7F404.62     
                                                                           GDR7F404.63     
!         Above variables not in input dump                                GDR7F404.64     
!         To initialise this field in the output dump                      GDR7F404.65     
!         set PP_SOURCE_OUT(J)=8. It will be done after all the            GDR7F404.66     
!         fields have been set up in the output dump. The UMUI             GDR7F404.67     
!         does not set SOURCE=8 for these fields.                          GDR7F404.68     
                                                                           GDR7F404.69     
!         One exception is SLAB Temperature (Stash Code 210).              GDR7F404.70     
!         This field has SOURCE=8 set by the UMUI if it is not             GDR7F404.71     
!         in the input dump and requires initialising for the              GDR7F404.72     
!         output dump.                                                     GDR7F404.73     
                                                                           GDR7F404.74     
          PP_SOURCE_OUT(J) = 8                                             UDR1F400.10     
          GO TO 1400                                                       UDR1F400.11     
        ENDIF                                                              UDR1F400.12     
                                                                           UDR1F400.13     
      WRITE(6,'('' *ERROR* Stash code'',I5,'' not found on input ''        CONTROL1.1439   
     *''file'')')PP_ITEMC_OUT(J)                                           CONTROL1.1440   
      CALL ABORT                                                           CONTROL1.1441   
                                                                           CONTROL1.1442   
C---------------------------------------------------------------           CONTROL1.1443   
C Initialise new field to zero or MDI                                      CONTROL1.1444   
C---------------------------------------------------------------           CONTROL1.1445   
C Set output field to zero                                                 CONTROL1.1446   
      ELSEIF(PP_SOURCE_OUT(J).EQ.3)THEN                                    CONTROL1.1447   
                                                                           CONTROL1.1448   
      IF(PP_TYPE_OUT(J).EQ.1)THEN                                          CONTROL1.1449   
        DO I=1,PP_LEN_OUT(J)                                               CONTROL1.1450   
          D1_OUT(I)=0.                                                     CONTROL1.1451   
        ENDDO                                                              CONTROL1.1452   
      ELSE                                                                 CONTROL1.1453   
        DO I=1,PP_LEN_OUT(J)                                               CONTROL1.1454   
          ID1_OUT(I)=0                                                     CONTROL1.1455   
        ENDDO                                                              CONTROL1.1456   
      ENDIF                                                                CONTROL1.1457   
                                                                           CONTROL1.1458   
C Set output field to missing data indicator                               CONTROL1.1459   
      ELSEIF(PP_SOURCE_OUT(J).EQ.4)THEN                                    CONTROL1.1460   
                                                                           CONTROL1.1461   
      IF(PP_TYPE_OUT(J).EQ.1)THEN                                          CONTROL1.1462   
        DO I=1,PP_LEN_OUT(J)                                               CONTROL1.1463   
          D1_OUT(I)=RMDI                                                   TJ050593.13     
        ENDDO                                                              CONTROL1.1465   
      ELSE                                                                 CONTROL1.1466   
        DO I=1,PP_LEN_OUT(J)                                               CONTROL1.1467   
          ID1_OUT(I)=IMDI                                                  TJ050593.14     
        ENDDO                                                              CONTROL1.1469   
      ENDIF                                                                CONTROL1.1470   
                                                                           CONTROL1.1471   
                                                                           CONTROL1.1472   
C---------------------------------------------------------------           UDG4F304.65     
C INITIALISE NEW FIELD TO A CONSTANT                                       UDG4F304.66     
C---------------------------------------------------------------           UDG4F304.67     
                                                                           UDG4F304.68     
      ELSEIF(PP_SOURCE_OUT(J).EQ.6)THEN                                    UDG4F304.69     
                                                                           UDG4F304.70     
                                                                           UDG4F304.71     
        IF(PP_TYPE_OUT(J).EQ.1)THEN                                        UDG4F304.72     
          DO I=1,PP_LEN_OUT(J)                                             UDG4F304.73     
            D1_OUT(I)=R_NAMELIST(J)                                        UDG4F304.74     
          ENDDO                                                            UDG4F304.75     
        ELSE                                                               UDG4F304.76     
          DO I=1,PP_LEN_OUT(J)                                             UDG4F304.77     
            ID1_OUT(I)=NINT(R_NAMELIST(J))                                 UDG7F400.168    
          ENDDO                                                            UDG4F304.79     
        ENDIF                                                              UDG4F304.80     
                                                                           UDG4F304.81     
C---------------------------------------------------------------           UDG4F304.82     
C INITIALISE NEW FIELD FROM AN EXTERNAL FILE                               UDG4F304.83     
C---------------------------------------------------------------           UDG4F304.84     
                                                                           UDG4F304.85     
      ELSEIF(PP_SOURCE_OUT(J).EQ.7)THEN                                    UDG4F304.86     
                                                                           UDG4F304.87     
        NFT_UPROG=140+J                                                    UDG4F304.88     
        CALL FILE_OPEN(NFT_UPROG,C_NAMELIST(J),80,0,1,JERR)                GPB1F305.17     
                                                                           UDG4F304.90     
C Buffer in fixed length header record & initialise lengths                UDG4F304.91     
        LEN_INTHD_UPROG=1                                                  UDG4F304.92     
        LEN_REALHD_UPROG=1                                                 UDG4F304.93     
        LEN1_LEVDEPC_UPROG=1                                               UDG4F304.94     
        LEN2_LEVDEPC_UPROG=1                                               UDG4F304.95     
        LEN2_LOOKUP_UPROG=1                                                UDG4F304.96     
        LEN_DATA_UPROG=1                                                   UDG4F304.97     
                                                                           UDG4F304.98     
        CALL BUFFIN(NFT_UPROG,FIXHD_UPROG,256,LEN_IO,AA)                   UDG4F304.99     
                                                                           UDG4F304.100    
C Check for I/O errors and set lengths                                     UDG4F304.101    
        IF(AA.NE.-1.0.OR.LEN_IO.NE.256)THEN                                UDG4F304.102    
          CALL IOERROR(                                                    UDG4F304.103    
     *    'buffer in of fixed length header of USER PROGNOSTIC file',      UDG4F304.104    
     *      AA,LEN_IO,256)                                                 UDG4F304.105    
          CALL ABORT                                                       UDG4F304.106    
        ELSE                                                               UDG4F304.107    
          LEN_INTHD_UPROG=FIXHD_UPROG(101)                                 UDG4F304.108    
          LEN_REALHD_UPROG=FIXHD_UPROG(106)                                UDG4F304.109    
          LEN1_LEVDEPC_UPROG=FIXHD_UPROG(111)                              UDG4F304.110    
          LEN2_LEVDEPC_UPROG=FIXHD_UPROG(112)                              UDG4F304.111    
          LEN2_LOOKUP_UPROG=FIXHD_UPROG(152)                               UDG4F304.112    
          LEN_DATA_UPROG=FIXHD_UPROG(161)                                  UDG4F304.113    
        ENDIF                                                              UDG4F304.114    
                                                                           UDG4F304.115    
C Prevents AUX_FILE failing if data at a single level                      UDG4F304.116    
        IF(LEN1_LEVDEPC_UPROG.LT.0)LEN1_LEVDEPC_UPROG=0                    UDG4F304.117    
        IF(LEN2_LEVDEPC_UPROG.LT.0)LEN2_LEVDEPC_UPROG=0                    UDG4F304.118    
                                                                           UDG4F304.119    
C Read in external file and write to dump                                  UDG4F304.120    
        CALL AUX_FILE(NFT_UPROG,NFTOUT,LEN_FIXHD_OUT,                      UDG7F400.169    
     &                LEN_INTHD_UPROG,LEN_REALHD_UPROG,                    UDG7F400.170    
     &                LEN1_LEVDEPC_UPROG,LEN2_LEVDEPC_UPROG,               UDG7F400.171    
     &                LEN1_LOOKUP_OUT,LEN2_LOOKUP_UPROG,                   UDG7F400.172    
     &                LEN_DATA_UPROG,FIXHD_OUT,INTHD_OUT,                  UDG7F400.173    
     &                LEVDEPC_OUT,P_LEVELS_OUT,LEN1_LEVDEPC_OUT,           UDG7F400.174    
     &                N_TYPES_OUT,P_FIELD_OUT,LOOKUP_OUT,                  UDG7F400.175    
     &                PP_POS_OUT,PP_ITEMC_OUT,J_NAMELIST(J),               UDG7F400.176    
     &                ROW_LENGTH_IN,P_ROWS_IN,                             UDG0F404.128    
     &                ROW_LENGTH_OUT,P_ROWS_OUT,LPOLARCHK,                 UDG0F404.129    
*CALL ARGPPX                                                               UDG7F400.177    
     &                PP_ITEMC_OUT(J),.TRUE.)                              UDG7F400.178    
                                                                           UDG4F304.128    
C Reset after call to AUX_FILE if changed                                  UDG4F304.129    
        LEN1_LEVDEPC_UPROG=FIXHD_UPROG(111)                                UDG4F304.130    
        LEN2_LEVDEPC_UPROG=FIXHD_UPROG(112)                                UDG4F304.131    
                                                                           UDG4F304.132    
C---------------------------------------------------------------           CONTROL1.1473   
C Initialise tracers                                                       CONTROL1.1474   
C---------------------------------------------------------------           CONTROL1.1475   
C                                                                          CONTROL1.1476   
      ELSEIF(PP_SOURCE_OUT(J).EQ.5)THEN                                    CONTROL1.1477   
                                                                           CONTROL1.1478   
        CALL AUX_FILE(NFTTRACER,NFTOUT,LEN_FIXHD_OUT,                      UDG7F400.179    
     &                LEN_INTHD_TRACER,LEN_REALHD_TRACER,                  UDG7F400.180    
     &                LEN1_LEVDEPC_TRACER,LEN2_LEVDEPC_TRACER,             UDG7F400.181    
     &                LEN1_LOOKUP_OUT,LEN2_LOOKUP_TRACER,                  UDG7F400.182    
     &                LEN_DATA_TRACER,FIXHD_OUT,INTHD_OUT,                 UDG7F400.183    
     &                LEVDEPC_OUT,P_LEVELS_OUT,LEN1_LEVDEPC_OUT,           UDG7F400.184    
     &                N_TYPES_OUT,P_FIELD_OUT,LOOKUP_OUT,                  UDG7F400.185    
     &                PP_POS_OUT,PP_ITEMC_OUT,PP_ITEMC_OUT(J),             UDG7F400.186    
     &                ROW_LENGTH_IN,P_ROWS_IN,                             UDG0F404.130    
     &                ROW_LENGTH_OUT,P_ROWS_OUT,LPOLARCHK,                 UDG0F404.131    
*CALL ARGPPX                                                               UDG7F400.187    
     &                DUMMY,.FALSE.)                                       UDG7F400.188    
                                                                           CONTROL1.1486   
      ELSEIF (PP_SOURCE_OUT(J).GT.9 .OR. PP_SOURCE_OUT(J).LT.1) THEN       UIE2F401.179    
                                                                           CONTROL1.1488   
        WRITE(6,'('' *ERROR* S specified wrongly on NAMELIST ITEMS'')')    UDR1F400.15     
        WRITE(6,'('' S='',I7,''ITEM CODE='',I7)')PP_SOURCE_OUT(J)          CONTROL1.1490   
     *  ,PP_ITEMC_OUT(J)                                                   CONTROL1.1491   
                                                                           CONTROL1.1492   
C---------------------------------------------------------------           CONTROL1.1493   
C Read in next set of model data fields & interpolate                      CONTROL1.1494   
C---------------------------------------------------------------           CONTROL1.1495   
                                                                           CONTROL1.1496   
      ELSE                                                                 CONTROL1.1497   
                                                                           CONTROL1.1498   
*IF DEF,TIMER                                                              CONTROL1.1499   
      CALL TIMER('READFLDS',3)                                             CONTROL1.1500   
*ENDIF                                                                     CONTROL1.1501   
                                                                           CONTROL1.1502   
      IF(PP_TYPE_OUT(J).EQ.1)THEN                                          CONTROL1.1503   
      IF (PP_SOURCE_OUT(J).EQ.9) THEN                                      UIE2F404.139    
                                                                           UIE2F404.140    
      ! Read fields stored on UM B grid u, v, thetaL and qT positions      UIE2F404.141    
      ! when writing data out to VAR LS grid u, v, theta and q             UIE2F404.142    
      ! positions. Alternatively read fields stored on VAR LS grid         UIE2F404.143    
      ! u, v ,theta and q positions when writing data out to UM B grid     UIE2F404.144    
      ! u, v, thetaL and qT positions.                                     UIE2F404.145    
        CALL RDVARFLD(NFTIN,LEN_FIXHD_IN,FIXHD_IN,                         UIE2F404.146    
     &                LEN1_LOOKUP_IN,LEN2_LOOKUP_IN,LOOKUP_IN,             UIE2F404.147    
     &                PP_ITEMC_IN,PP_LEN_IN,N_TYPES_IN,PP_NUM_IN,          UIE2F404.148    
     &                PP_POS_IN,P_FIELD_IN,P_LEVELS_IN,N_FIELDS_IN,        UIE2F404.149    
     &                PP_ITEMC_OUT(J),PP_LEN_OUT(J),                       UIE2F404.150    
     &                POS,D1_IN,OCEAN,RadialGridIn,RadialGridOut,          UIE2F404.151    
*CALL ARGPPX                                                               UIE2F404.152    
     &                ICODE,CMESSAGE)                                      UIE2F404.153    
                                                                           UDG4F402.178    
      ELSE                                                                 UIE2F401.177    
      CALL READFLDS(NFTIN,N_FIELDS_IN,PP_POS_IN(POS),LOOKUP_IN,            GDG0F401.334    
     &              LEN1_LOOKUP_IN,D1_IN,P_FIELD_IN,FIXHD_IN,              GDG0F401.335    
*CALL ARGPPX                                                               GDG0F401.336    
     &              ICODE,CMESSAGE)                                        GDG0F401.337    
          IF(ICODE.EQ.1501)THEN                                            UDG4F402.179    
            IF(LPOLARCHK)THEN                                              UDG4F402.180    
              write(6,*) 'Averaging polar rows to make them constant'      UDG4F402.181    
                                                                           UDG4F402.182    
              DO KK=1,N_FIELDS_IN                                          UDG4F402.183    
!   North polar row                                                        UDG4F402.184    
                RP_ROW_SUM=0                                               UDG4F402.185    
                DO I=1,ROW_LENGTH_IN                                       UDG4F402.186    
                  RP_ROW_SUM=RP_ROW_SUM+D1_IN((KK-1)*P_FIELD_IN+I)         UDG4F402.187    
                END DO                                                     UDG4F402.188    
                DO I=1,ROW_LENGTH_IN                                       UDG4F402.189    
                  D1_IN((KK-1)*P_FIELD_IN+I)=RP_ROW_SUM/ROW_LENGTH_IN      UDG4F402.190    
                END DO                                                     UDG4F402.191    
!   South polar row                                                        UDG4F402.192    
                RP_ROW_SUM=0                                               UDG4F402.193    
                DO I=1,ROW_LENGTH_IN                                       UDG4F402.194    
                  RP_ROW_SUM=RP_ROW_SUM+D1_IN((KK-1)*P_FIELD_IN+           UDG4F402.195    
     &              (P_ROWS_IN-1)*ROW_LENGTH_IN+I)                         UDG4F402.196    
                END DO                                                     UDG4F402.197    
                DO I=1,ROW_LENGTH_IN                                       UDG4F402.198    
                  D1_IN((KK-1)*P_FIELD_IN+                                 UDG4F402.199    
     &              (P_ROWS_IN-1)*ROW_LENGTH_IN+I)=                        UDG4F402.200    
     &               RP_ROW_SUM/ROW_LENGTH_IN                              UDG4F402.201    
                END DO                                                     UDG4F402.202    
              END DO                                                       UDG4F402.203    
            END IF                                                         UDG4F402.204    
          ELSE IF(ICODE.NE.0)THEN                                          UDG4F402.205    
            CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)                  UDG4F402.206    
          END IF                                                           UDG4F402.207    
      ENDIF                                                                UIE2F401.178    
      ELSEIF(PP_TYPE_OUT(J).EQ.2.OR.PP_TYPE_OUT(J).EQ.3)THEN               CONTROL1.1506   
      CALL READFLDS(NFTIN,N_FIELDS_IN,PP_POS_IN(POS),LOOKUP_IN,            GDG0F401.338    
     &              LEN1_LOOKUP_IN,ID1_IN,P_FIELD_IN,FIXHD_IN,             GDG0F401.339    
*CALL ARGPPX                                                               GDG0F401.340    
     &              ICODE,CMESSAGE)                                        GDG0F401.341    
          IF(ICODE.EQ.1501)THEN                                            UDG4F402.208    
            IF(LPOLARCHK)THEN                                              UDG4F402.209    
              write(6,*) 'Averaging polar rows to make them constant'      UDG4F402.210    
                                                                           UDG4F402.211    
              DO KK=1,N_FIELDS_IN                                          UDG4F402.212    
!   North polar row                                                        UDG4F402.213    
                IP_ROW_SUM=0                                               UDG4F402.214    
                DO I=1,ROW_LENGTH_IN                                       UDG4F402.215    
                  IP_ROW_SUM=IP_ROW_SUM+ID1_IN((KK-1)*P_FIELD_IN+I)        UDG6F404.4      
                END DO                                                     UDG4F402.217    
                DO I=1,ROW_LENGTH_IN                                       UDG4F402.218    
                  ID1_IN((KK-1)*P_FIELD_IN+I)=IP_ROW_SUM/ROW_LENGTH_IN     UDG6F404.5      
                END DO                                                     UDG4F402.220    
!   South polar row                                                        UDG4F402.221    
                IP_ROW_SUM=0                                               UDG4F402.222    
                DO I=1,ROW_LENGTH_IN                                       UDG4F402.223    
                  IP_ROW_SUM=IP_ROW_SUM+ID1_IN((KK-1)*P_FIELD_IN+          UDG6F404.6      
     &             (P_ROWS_IN-1)*ROW_LENGTH_IN+I)                          UDG4F402.225    
                END DO                                                     UDG4F402.226    
                DO I=1,ROW_LENGTH_IN                                       UDG4F402.227    
                  ID1_IN((KK-1)*P_FIELD_IN+                                UDG6F404.7      
     &              (P_ROWS_IN-1)*ROW_LENGTH_IN+I)=                        UDG4F402.229    
     &               IP_ROW_SUM/ROW_LENGTH_IN                              UDG4F402.230    
                END DO                                                     UDG4F402.231    
              END DO                                                       UDG4F402.232    
            END IF                                                         UDG4F402.233    
          ELSE IF(ICODE.NE.0)THEN                                          UDG4F402.234    
            CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTIN)                  UDG4F402.235    
          END IF                                                           UDG4F402.236    
      ELSE                                                                 CONTROL1.1509   
      WRITE(6,'('' Reading in new data'')')                                CONTROL1.1510   
      WRITE(6,'('' Unrecognised PP field type'',2I16)')J,PP_TYPE_OUT(J)    CONTROL1.1511   
        CALL ABORT                                                         CONTROL1.1512   
      ENDIF                                                                CONTROL1.1513   
                                                                           CONTROL1.1515   
*IF DEF,TIMER                                                              CONTROL1.1516   
      CALL TIMER('READFLDS',4)                                             CONTROL1.1517   
*ENDIF                                                                     CONTROL1.1518   
                                                                           CONTROL1.1519   
C-------------------------------------------------------------------       CONTROL1.1520   
C If no horizontal interpolation - copy across data to output arrays       CONTROL1.1521   
C-------------------------------------------------------------------       CONTROL1.1522   
                                                                           CONTROL1.1523   
      IF(.NOT.(HORIZ.OR.                                                   CONTROL1.1524   
     *  PP_TYPE_OUT(J).NE.PP_TYPE_IN(POS)))THEN                            CONTROL1.1525   
      IF(PP_TYPE_OUT(J).EQ.1)THEN                                          CONTROL1.1526   
          DO K=1,N_FIELDS_IN                                               CONTROL1.1527   
            DO I=1,PP_LEN_OUT(J)                                           CONTROL1.1528   
             D1_TMP(I+PP_LEN_OUT(J)*(K-1))=D1_IN(I+PP_LEN_OUT(J)*(K-1))    CONTROL1.1529   
            ENDDO                                                          CONTROL1.1530   
          ENDDO                                                            CONTROL1.1531   
        ENDIF                                                              CONTROL1.1532   
        IF(PP_TYPE_OUT(J).EQ.2.OR.PP_TYPE_OUT(J).EQ.3)THEN                 CONTROL1.1533   
          DO I=1,PP_LEN_OUT(J)                                             CONTROL1.1534   
            ID1_OUT(I)=ID1_IN(I)                                           CONTROL1.1535   
          ENDDO                                                            CONTROL1.1536   
        ENDIF                                                              CONTROL1.1537   
                                                                           CONTROL1.1538   
      ELSE                                                                 CONTROL1.1539   
                                                                           CONTROL1.1540   
C---------------------------------------------------------------           CONTROL1.1541   
C Horizontal interpolation of integer/logical fields                       CONTROL1.1542   
C---------------------------------------------------------------           CONTROL1.1543   
                                                                           CONTROL1.1544   
      IF(PP_TYPE_OUT(J).EQ.2.OR.PP_TYPE_OUT(J).EQ.3)THEN                   CONTROL1.1545   
                                                                           CONTROL1.1546   
        IF(H_INT_TYPE)THEN                                                 UDG1F400.206    
          DO I=1,PP_LEN_OUT(J)                                             UDG1F400.207    
            D1_IN(I)=ID1_IN(I)                                             UDG1F400.208    
          END DO                                                           UDG1F400.209    
          CALL H_INT_CTL(IDIM,P_FIELD_OUT,ROW_LENGTH_IN,ROW_LENGTH_OUT     UDG1F400.210    
     &,                  P_ROWS_IN,P_ROWS_OUT,AW_AREA_BOX(1)               UDG1F400.211    
     &,                  GLOBAL,H_INT_TYPE                                 UDG1F400.212    
     &,                  AW_INDEX_TARG_LHS(1,1),AW_INDEX_TARG_TOP(1,1)     UDG1F400.213    
     &,                  BL_INDEX_B_L(1,1),BL_INDEX_B_R(1,1)               UDG1F400.214    
     &,                  AW_COLAT_T(1,1),AW_LONG_L(1,1),D1_IN              UDG1F400.215    
     &,                  WEIGHT_T_R(1,1),WEIGHT_B_R(1,1)                   UDG1F400.216    
     &,                  WEIGHT_T_L(1,1),WEIGHT_B_L(1,1)                   UDG1F400.217    
     &,                  D1_OUT)                                           UDG1F400.218    
          DO I=1,PP_LEN_OUT(J)                                             UDG1F400.219    
            ID1_OUT(I)=INT(D1_OUT(I))                                      UDG1F400.220    
          END DO                                                           UDG1F400.221    
        ELSE                                                               UDG1F400.222    
C Use cloud base and top of nearest point on input grid                    CONTROL1.1547   
      IF(PP_ITEMC_OUT(J).EQ.14.OR.PP_ITEMC_OUT(J).EQ.15)THEN               CONTROL1.1548   
        DO I=1,PP_LEN_OUT(J)                                               CONTROL1.1549   
          ID1_OUT(I)=ID1_IN(BL_INDEX_NEAREST(I))                           UDG1F400.223    
        ENDDO                                                              CONTROL1.1551   
      ENDIF                                                                CONTROL1.1552   
                                                                           CONTROL1.1553   
        END IF                                                             UDG6F404.8      
! Make polar rows constant                                                 UDG6F404.9      
!   North polar row                                                        UDG6F404.10     
        IP_ROW_SUM=0                                                       UDG6F404.11     
        DO I=1,ROW_LENGTH_OUT                                              UDG6F404.12     
          IP_ROW_SUM=IP_ROW_SUM+ID1_OUT(I)                                 UDG6F404.13     
        END DO                                                             UDG6F404.14     
        DO I=1,ROW_LENGTH_OUT                                              UDG6F404.15     
          ID1_OUT(I)=INT(IP_ROW_SUM/ROW_LENGTH_OUT)                        UDG6F404.16     
        END DO                                                             UDG6F404.17     
!   South polar row                                                        UDG6F404.18     
        IP_ROW_SUM=0                                                       UDG6F404.19     
        DO I=1,ROW_LENGTH_OUT                                              UDG6F404.20     
          IP_ROW_SUM=IP_ROW_SUM+ID1_OUT(                                   UDG6F404.21     
     &       (P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)                              UDG6F404.22     
        END DO                                                             UDG6F404.23     
        DO I=1,ROW_LENGTH_OUT                                              UDG6F404.24     
          ID1_OUT((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I) =                       UDG6F404.25     
     &      INT(IP_ROW_SUM/ROW_LENGTH_OUT)                                 UDG6F404.26     
        END DO                                                             UDG6F404.27     
                                                                           UDG6F404.28     
                                                                           CONTROL1.1554   
C---------------------------------------------------------------           CONTROL1.1555   
C Horizontal interpolation of real fields                                  CONTROL1.1556   
C---------------------------------------------------------------           CONTROL1.1557   
                                                                           CONTROL1.1558   
      ELSEIF(PP_TYPE_OUT(J).EQ.1)THEN                                      CONTROL1.1559   
                                                                           CONTROL1.1560   
C Expand those surface fields stored at land points to full grid           CONTROL1.1561   
      IF(PP_LS_IN(POS).EQ.1)THEN                                           CONTROL1.1562   
        DO K=1,N_FIELDS_IN                                                 CONTROL1.1563   
          CALL FROM_LAND_POINTS(D1_IN_TMP(1+(K-1)*P_FIELD_IN)              CONTROL1.1564   
     *    ,D1_IN(1+(K-1)*PP_LEN_IN(POS)),LAND_SEA_MASK_IN,P_FIELD_IN       CONTROL1.1565   
     *    ,LAND_POINTS)                                                    CONTROL1.1566   
        ENDDO                                                              CONTROL1.1567   
        DO I=1,P_FIELD_IN*N_FIELDS_IN                                      CONTROL1.1568   
          D1_IN(I)=D1_IN_TMP(I)                                            CONTROL1.1569   
        ENDDO                                                              CONTROL1.1570   
      ENDIF                                                                CONTROL1.1571   
                                                                           CONTROL1.1572   
      POS_D1_IN=1                                                          CONTROL1.1573   
      POS_D1_OUT=1                                                         CONTROL1.1574   
                                                                           CONTROL1.1575   
C Select indices and weights according to grid                             CONTROL1.1576   
      IF(GRID_TYPE(J).EQ.1)THEN                                            UDG1F400.225    
        TYPE=1                                                             UDG1F400.226    
        X_ROWS_IN=P_ROWS_IN                                                UDG1F400.227    
        X_ROWS_OUT=P_ROWS_OUT                                              UDG1F400.228    
        X_COLS_IN=ROW_LENGTH_IN                                            UDG1F400.229    
        X_COLS_OUT=ROW_LENGTH_OUT                                          UDG1F400.230    
        X_FIELD_IN=P_FIELD_IN                                              UDG1F400.231    
        X_FIELD_OUT=P_FIELD_OUT                                            UDG1F400.232    
      ELSE IF(GRID_TYPE(J).EQ.2.OR.GRID_TYPE(J).EQ.3)THEN                  UDG1F400.233    
        IF(C_GRID_IN)THEN                                                  UDG1F400.234    
          IF((PP_ITEMC_OUT(J).EQ.2).OR.(PPXREF_GRID_TYPE.EQ.18))THEN       UIE2F401.188    
            X_ROWS_IN=P_ROWS_IN                                            UIE2F401.189    
            X_FIELD_IN=P_FIELD_IN                                          UIE2F401.190    
          ELSEIF((PP_ITEMC_OUT(J).EQ.3).OR.                                UIE2F401.191    
     &                                 (PPXREF_GRID_TYPE.EQ.19))THEN       UIE2F401.192    
            X_ROWS_IN=P_ROWS_IN-1                                          UIE2F401.193    
            X_FIELD_IN=P_FIELD_IN-ROW_LENGTH_IN                            UIE2F401.194    
          ENDIF                                                            UIE2F401.195    
        ELSE                                                               UDG1F400.237    
          X_ROWS_IN=U_ROWS_IN                                              UDG1F400.238    
          X_FIELD_IN=U_FIELD_IN                                            UDG1F400.239    
        ENDIF                                                              UDG1F400.240    
        IF(C_GRID_OUT)THEN                                                 UDG1F400.241    
          IF((PP_ITEMC_OUT(J).EQ.2).OR.(PPXREF_GRID_TYPE.EQ.18))THEN       UIE2F401.180    
            X_ROWS_OUT=P_ROWS_OUT                                          UIE2F401.181    
            X_FIELD_OUT=P_FIELD_OUT                                        UIE2F401.182    
          ELSEIF((PP_ITEMC_OUT(J).EQ.3).OR.                                UIE2F401.183    
     &                                 (PPXREF_GRID_TYPE.EQ.19))THEN       UIE2F401.184    
            X_ROWS_OUT=P_ROWS_OUT-1                                        UIE2F401.185    
            X_FIELD_OUT=P_FIELD_OUT-ROW_LENGTH_OUT                         UIE2F401.186    
          ENDIF                                                            UIE2F401.187    
        ELSE                                                               UDG1F400.244    
          X_ROWS_OUT=U_ROWS_OUT                                            UDG1F400.245    
          X_FIELD_OUT=U_FIELD_OUT                                          UDG1F400.246    
        ENDIF                                                              UDG1F400.247    
        X_COLS_IN=ROW_LENGTH_IN                                            UDG1F400.248    
        X_COLS_OUT=ROW_LENGTH_OUT                                          UDG1F400.249    
                                                                           UDG1F400.250    
        IF(PPXREF_GRID_TYPE.EQ.18)TYPE=2                                   UIE2F401.196    
        IF(PPXREF_GRID_TYPE.EQ.19)TYPE=3                                   UIE2F401.197    
        IF(PP_ITEMC_OUT(J).EQ.2.OR.PP_ITEMC_OUT(J).EQ.28.OR.               UDG1F400.251    
     &     PP_ITEMC_OUT(J).EQ.121.OR.PP_ITEMC_OUT(J).EQ.135.OR.            UDG1F400.252    
     &     PP_ITEMC_OUT(J).EQ.139.OR.PP_ITEMC_OUT(J).EQ.148.OR.            UDG1F400.253    
     &     PP_ITEMC_OUT(J).EQ.150.OR.PP_ITEMC_OUT(J).EQ.202.OR.            UDG1F400.254    
     &     PP_ITEMC_OUT(J).EQ.211)THEN                                     UDG1F400.255    
           TYPE=2                                                          UDG1F400.256    
        ELSEIF(PP_ITEMC_OUT(J).EQ.3.OR.PP_ITEMC_OUT(J).EQ.29.OR.           UDG1F400.257    
     &     PP_ITEMC_OUT(J).EQ.122.OR.PP_ITEMC_OUT(J).EQ.136.OR.            UDG1F400.258    
     &     PP_ITEMC_OUT(J).EQ.140.OR.PP_ITEMC_OUT(J).EQ.149.OR.            UDG1F400.259    
     &     PP_ITEMC_OUT(J).EQ.151.OR.PP_ITEMC_OUT(J).EQ.203.OR.            UDG1F400.260    
     &     PP_ITEMC_OUT(J).EQ.212)THEN                                     UDG1F400.261    
           TYPE=3                                                          UDG1F400.262    
        ENDIF                                                              UDG1F400.263    
      ELSEIF(GRID_TYPE(J).EQ.4)THEN                                        UDG1F400.264    
        TYPE=4                                                             UDG1F400.265    
        X_ROWS_IN=P_ROWS_IN                                                UDG1F400.266    
        X_ROWS_OUT=P_ROWS_OUT                                              UDG1F400.267    
        X_COLS_IN=1                                                        UDG1F400.268    
        X_COLS_OUT=1                                                       UDG1F400.269    
        X_FIELD_IN=P_ROWS_IN                                               UDG1F400.270    
        X_FIELD_OUT=P_ROWS_OUT                                             UDG1F400.271    
      ENDIF                                                                UDG1F400.272    
                                                                           CONTROL1.1598   
      DO 2000 K=1,N_FIELDS_IN                                              CONTROL1.1599   
                                                                           CONTROL1.1600   
C Do horizontal interpolation                                              CONTROL1.1601   
                                                                           CONTROL1.1602   
*IF DEF,TIMER                                                              CONTROL1.1603   
      CALL TIMER('HINTCTL',3)                                              UDG1F400.273    
*ENDIF                                                                     CONTROL1.1605   
                                                                           CONTROL1.1606   
      CALL H_INT_CTL(IDIM,X_FIELD_OUT,X_COLS_IN,X_COLS_OUT                 UDG1F400.274    
     &,              X_ROWS_IN,X_ROWS_OUT,AW_AREA_BOX(TYPE)                UDG1F400.275    
     &,              GLOBAL,H_INT_TYPE                                     UDG1F400.276    
     &,              AW_INDEX_TARG_LHS(1,TYPE),AW_INDEX_TARG_TOP(1,TYPE)   UDG1F400.277    
     &,              BL_INDEX_B_L(1,TYPE),BL_INDEX_B_R(1,TYPE)             UDG1F400.278    
     &,              AW_COLAT_T(1,TYPE),AW_LONG_L(1,TYPE)                  UDG1F400.279    
     &,              D1_IN(POS_D1_IN)                                      UDG1F400.280    
     &,              WEIGHT_T_R(1,TYPE),WEIGHT_B_R(1,TYPE)                 UDG1F400.281    
     &,              WEIGHT_T_L(1,TYPE),WEIGHT_B_L(1,TYPE)                 UDG1F400.282    
     &,              D1_TMP(POS_D1_OUT))                                   UDG1F400.283    
                                                                           CONTROL1.1611   
*IF DEF,TIMER                                                              CONTROL1.1612   
      CALL TIMER('HINTCTL',4)                                              UDG1F400.284    
*ENDIF                                                                     DR211293.3      
                                                                           AD200593.163    
        IF(GLOBAL)THEN                                                     UDG4F402.647    
          IF(PPXREF_GRID_TYPE.LE.3)THEN                                    UDG4F402.648    
! Horizontal Interpolation has made polar rows non-constant                UDG4F402.649    
           write(6,*) 'Horizontal Interpolation has made polar rows ',     UDG4F402.650    
     &     'non-constant'                                                  UDG4F402.651    
           write(6,*) 'Averaging polar rows to make them constant'         UDG4F402.652    
                                                                           UDG4F402.653    
!   North polar row                                                        UDG4F402.654    
              RP_ROW_SUM=0                                                 UDG4F402.655    
              DO I=1,ROW_LENGTH_OUT                                        UDG4F402.656    
                RP_ROW_SUM=RP_ROW_SUM+D1_TMP(POS_D1_OUT+I-1)               UDG4F402.657    
              END DO                                                       UDG4F402.658    
              DO I=1,ROW_LENGTH_OUT                                        UDG4F402.659    
                D1_TMP(POS_D1_OUT+I-1)=RP_ROW_SUM/ROW_LENGTH_OUT           UDG4F402.660    
              END DO                                                       UDG4F402.661    
!   South polar row                                                        UDG4F402.662    
              RP_ROW_SUM=0                                                 UDG4F402.663    
              DO I=1,ROW_LENGTH_OUT                                        UDG4F402.664    
                RP_ROW_SUM=                                                UDG4F402.665    
     &          RP_ROW_SUM+D1_TMP(POS_D1_OUT+                              UDG4F402.666    
     &          (P_ROWS_OUT-1)*ROW_LENGTH_OUT+I-1)                         UDG4F402.667    
              END DO                                                       UDG4F402.668    
              DO I=1,ROW_LENGTH_OUT                                        UDG4F402.669    
                D1_TMP(POS_D1_OUT+(P_ROWS_OUT-1)*ROW_LENGTH_OUT+I-1)=      UDG4F402.670    
     &           RP_ROW_SUM/ROW_LENGTH_OUT                                 UDG4F402.671    
              END DO                                                       UDG4F402.672    
            END IF                                                         UDG4F402.673    
          END IF                                                           UDG4F402.674    
C Reset u-wind polar values to mean of adjacent row if C_GRID_OUT=T        AD200593.164    
      IF(PP_ITEMC_OUT(J).EQ.2.AND.C_GRID_OUT)THEN                          AD200593.165    
C N.H.                                                                     AD200593.166    
        IF(FIXHD_OUT(4).LT.2)THEN                                          AD200593.167    
          DO I=ROW_LENGTH_OUT+1,2*ROW_LENGTH_OUT                           AD200593.168    
            SUM=SUM+D1_TMP(POS_D1_OUT+I-1)                                 AD200593.169    
          ENDDO                                                            AD200593.170    
          SUM=SUM/ROW_LENGTH_OUT                                           AD200593.171    
          DO I=1,ROW_LENGTH_OUT                                            AD200593.172    
            D1_TMP(POS_D1_OUT+I-1)=SUM                                     AD200593.173    
          ENDDO                                                            AD200593.174    
        ENDIF                                                              AD200593.175    
C S.H.                                                                     AD200593.176    
        IF(FIXHD_OUT(4).EQ.0.OR.FIXHD_OUT(4).EQ.2)THEN                     AD200593.177    
          DO I=U_FIELD_OUT-2*ROW_LENGTH_OUT+1                              AD200593.178    
     &                                ,U_FIELD_OUT-ROW_LENGTH_OUT          AD200593.179    
            SUM=SUM+D1_TMP(POS_D1_OUT+I-1)                                 AD200593.180    
          ENDDO                                                            AD200593.181    
          SUM=SUM/ROW_LENGTH_OUT                                           AD200593.182    
          DO I=U_FIELD_OUT-ROW_LENGTH_OUT+1,U_FIELD_OUT                    AD200593.183    
            D1_TMP(POS_D1_OUT+I-1)=SUM                                     AD200593.184    
          ENDDO                                                            AD200593.185    
        ENDIF                                                              AD200593.186    
      ENDIF                                                                AD200593.187    
                                                                           CONTROL1.1615   
      IF(.NOT.(RadialGridIn.AND..NOT.RadialGridOut))THEN                   UIE2F401.213    
       IF(.NOT.(RM_CP))THEN                                                UDG6F405.76     
C Calculate sea-ice fraction from TSTAR < TFS                              CONTROL1.1616   
      IF(PP_ITEMC_OUT(J).EQ.31) THEN                                       CONTROL1.1617   
        DO I=1,PP_LEN_OUT(J)                                               CONTROL1.1618   
          D1_TMP(I)=0.0                                                    CONTROL1.1619   
          IF(TSTAR(I).LE.TFS.AND..NOT.LAND_SEA_MASK_OUT(I))                CONTROL1.1620   
     *    D1_TMP(I)=1.0                                                    CONTROL1.1621   
        ENDDO                                                              CONTROL1.1622   
      ENDIF                                                                CONTROL1.1623   
C Calculate sea-ice thickness from TSTAR < TFS                             CONTROL1.1624   
C Takes values of 2 in N.H. and 1 in S.H.                                  CONTROL1.1625   
      IF(PP_ITEMC_OUT(J).EQ.32) THEN                                       CONTROL1.1626   
C Regional model                                                           CONTROL1.1627   
        IF(GH_TO_LAM)THEN                                                  CONTROL1.1628   
C N.H. regional model                                                      CONTROL1.1629   
          IF(REALHD_OUT(5).GT.0.)THEN                                      CONTROL1.1630   
            DO I=1,PP_LEN_OUT(J)                                           CONTROL1.1631   
              D1_TMP(I)=0.0                                                CONTROL1.1632   
              IF(TSTAR(I).LE.TFS.AND..NOT.LAND_SEA_MASK_OUT(I))            CONTROL1.1633   
     *        D1_TMP(I)=2.0                                                CONTROL1.1634   
            ENDDO                                                          CONTROL1.1635   
          ELSE                                                             CONTROL1.1636   
C S.H. regional model                                                      CONTROL1.1637   
            DO I=1,PP_LEN_OUT(J)                                           CONTROL1.1638   
              D1_TMP(I)=0.0                                                CONTROL1.1639   
              IF(TSTAR(I).LE.TFS.AND..NOT.LAND_SEA_MASK_OUT(I))            CONTROL1.1640   
     *        D1_TMP(I)=1.0                                                CONTROL1.1641   
            ENDDO                                                          CONTROL1.1642   
          ENDIF                                                            CONTROL1.1643   
        ELSE                                                               CONTROL1.1644   
C Global model                                                             CONTROL1.1645   
          DO I=1,PP_LEN_OUT(J)/2                                           CONTROL1.1646   
            D1_TMP(I)=0.0                                                  CONTROL1.1647   
            IF(TSTAR(I).LE.TFS.AND..NOT.LAND_SEA_MASK_OUT(I))              CONTROL1.1648   
     *       D1_TMP(I)=2.0                                                 CONTROL1.1649   
          ENDDO                                                            CONTROL1.1650   
          DO I=PP_LEN_OUT(J)/2+1,PP_LEN_OUT(J)                             CONTROL1.1651   
            D1_TMP(I)=0.0                                                  CONTROL1.1652   
            IF(TSTAR(I).LE.TFS.AND..NOT.LAND_SEA_MASK_OUT(I))              CONTROL1.1653   
     *       D1_TMP(I)=1.0                                                 CONTROL1.1654   
          ENDDO                                                            CONTROL1.1655   
        ENDIF                                                              CONTROL1.1656   
      ENDIF                                                                CONTROL1.1657   
                                                                           UDG2F400.28     
      IF(HORIZ)THEN                                                        UDG2F400.29     
                                                                           CONTROL1.1658   
C Correct land-compressed fields along coasts after interpolation as       TJ050593.15     
C missing data will have been interpolated from sea pts on source grid.    TJ050593.16     
C Also fill in data at unresolved land and sea points on target grid.      TJ050593.17     
      IF(PP_LS_IN(POS).EQ.1) THEN                                          TJ050593.18     
                                                                           CONTROL1.1668   
        DO I=1,COASTAL_POINTS                                              CONTROL1.1669   
          D1_TMP(POS_D1_OUT-1+INDEX_OUT(I))=D1_IN(POS_D1_IN-1              CONTROL1.1670   
     *                                      +INDEX_IN(I))                  CONTROL1.1671   
        ENDDO                                                              CONTROL1.1672   
                                                                           CONTROL1.1673   
       IF(LSPIRAL_S)THEN                                                   UDG1F304.58     
         DO I=1,P_FIELD_OUT                                                UDG1F304.59     
           INDEX_TARG_SEA_X(I)=INDEX_TARG_SEA(I)                           UDG1F304.60     
           INDEX_TARG_LAND_X(I)=INDEX_TARG_LAND(I)                         UDG1F304.61     
           LAND_SEA_MASK_X(I)=0                                            UDG1F304.62     
           IF(LAND_SEA_MASK_OUT(I)) LAND_SEA_MASK_X(I)=1                   UDG1F304.63     
         ENDDO                                                             UDG1F304.64     
         SEA_POINTS_UNRESX=SEA_POINTS_UNRES                                UDG1F304.65     
         LAND_POINTS_UNRESX=LAND_POINTS_UNRES                              UDG1F304.66     
                                                                           UDG1F304.67     
C                                                                          UDG1F304.68     
C Call INTF_COAST_AJ to find values for unresolved points                  UDG1F304.69     
         CALL INTF_COAST_AJ(LAND_SEA_MASK_X,INDEX_TARG_SEA_X               UDG1F304.70     
     *,SEA_POINTS_UNRESX,P_ROWS_OUT,ROW_LENGTH_OUT,                        UDG1F304.71     
     * D1_TMP(POS_D1_OUT),0,CYCLIC,MAXDIM)                                 UDG1F304.72     
         CALL INTF_COAST_AJ(LAND_SEA_MASK_X,INDEX_TARG_LAND_X              UDG1F304.73     
     *,LAND_POINTS_UNRESX,P_ROWS_OUT,ROW_LENGTH_OUT,                       UDG1F304.74     
     * D1_TMP(POS_D1_OUT),1,CYCLIC,MAXDIM)                                 UDG1F304.75     
                                                                           UDG1F304.76     
       ELSE                                                                UDG1F304.77     
                                                                           UDG1F304.78     
        DO I=1,LAND_POINTS_UNRES                                           CONTROL1.1674   
          D1_TMP(POS_D1_OUT-1+INDEX_TARG_LAND(I))                          CONTROL1.1675   
     1            =D1_TMP(POS_D1_OUT-1+LAND_UNRES_INDEX(I))                CONTROL1.1676   
        ENDDO                                                              CONTROL1.1677   
        DO I=1,SEA_POINTS_UNRES                                            CONTROL1.1678   
          D1_TMP(POS_D1_OUT-1+INDEX_TARG_SEA(I))                           CONTROL1.1679   
     1            =D1_TMP(POS_D1_OUT-1+SEA_UNRES_INDEX(I))                 CONTROL1.1680   
        ENDDO                                                              CONTROL1.1681   
                                                                           CONTROL1.1682   
                                                                           UDG1F304.79     
      ENDIF                                                                UDG1F304.80     
                                                                           UDG1F304.81     
                                                                           UDG1F304.82     
      ENDIF                                                                CONTROL1.1683   
                                                                           UDG2F400.30     
      ENDIF                                                                UDG2F400.31     
                                                                           CONTROL1.1684   
C Ensure that conv cloud amount is not negative                            CONTROL1.1685   
      IF(PP_ITEMC_OUT(J).EQ.13.OR.PP_ITEMC_OUT(J).EQ.16)THEN               CONTROL1.1686   
        DO I=1,PP_LEN_OUT(J)                                               CONTROL1.1687   
          IF(D1_TMP(I).LT.0.)D1_TMP(I)=0.                                  CONTROL1.1688   
        ENDDO                                                              CONTROL1.1689   
      ENDIF                                                                CONTROL1.1690   
      ENDIF ! RM_CP                                                        UDG6F405.77     
      ENDIF ! Not PFinc2UM                                                 UIE2F401.214    
                                                                           CONTROL1.1691   
      POS_D1_IN=POS_D1_IN+X_FIELD_IN                                       CONTROL1.1692   
      POS_D1_OUT=POS_D1_OUT+X_FIELD_OUT                                    CONTROL1.1693   
                                                                           CONTROL1.1694   
2000  CONTINUE                                                             CONTROL1.1695   
                                                                           CONTROL1.1696   
C Store selected surface fields at land point                              CONTROL1.1697   
      IF(PP_LS_OUT(J).EQ.1)THEN                                            CONTROL1.1698   
        DO K=1,N_FIELDS_IN                                                 CONTROL1.1699   
          CALL TO_LAND_POINTS(D1_TMP(1+(K-1)*P_FIELD_OUT)                  CONTROL1.1700   
     &    ,D1_TMP(1+(K-1)*PP_LEN_OUT(J))                                   UDG3F402.213    
     *    ,LAND_SEA_MASK_OUT,P_FIELD_OUT,LAND_POINTS)                      CONTROL1.1702   
        ENDDO                                                              CONTROL1.1703   
      ENDIF                                                                CONTROL1.1707   
                                                                           CONTROL1.1708   
      ENDIF                                                                CONTROL1.1709   
      ENDIF                                                                CONTROL1.1710   
                                                                           CONTROL1.1711   
C Copy across from temporary space to output space in case vertical        CONTROL1.1712   
C interpolation not required.                                              CONTROL1.1713   
      DO I=1,PP_LEN_OUT(J)*N_FIELDS_IN                                     CONTROL1.1714   
        D1_OUT(I)=D1_TMP(I)                                                CONTROL1.1715   
      ENDDO                                                                CONTROL1.1716   
                                                                           CONTROL1.1717   
                                                                           CONTROL1.1718   
C---------------------------------------------------------------           CONTROL1.1719   
C Vertical interpolation of real fields                                    CONTROL1.1720   
C---------------------------------------------------------------           CONTROL1.1721   
      LOZONE=(OZONE_LEVELS_IN.NE.OZONE_LEVELS_OUT)                         UDG3F402.256    
     &        .AND.PP_ITEMC_OUT(J).EQ.60                                   UDG3F402.257    
      IF(.NOT.(RadialGridIn.AND..NOT.RadialGridOut))THEN                   UDG3F402.258    
      IF((VERT.AND.N_FIELDS_OUT.GT.1).OR.LOZONE)THEN                       UDG3F402.259    
                                                                           UDG3F402.260    
                                                                           UDG3F402.290    
! This block processes u and v components of wind (2 & 3)                  UDG3F402.291    
      IF(PP_ITEMC_OUT(J).EQ.2.OR.PP_ITEMC_OUT(J).EQ.3)THEN                 UDG3F402.292    
                                                                           UDG3F402.293    
! Pressure on input levels                                                 UDG3F402.309    
        DO K=1,N_FIELDS_IN                                                 UDG3F402.310    
          DO I=1,PP_LEN_OUT(J)                                             UDG3F402.317    
            P_TMP(I+(K-1)*PP_LEN_OUT(J))=LEVDEPC_IN(K)                     UDG3F402.318    
     &            +PSTAR_OUT(I)*LEVDEPC_IN(K+P_LEVELS_IN)                  UDG3F402.319    
          END DO                                                           UDG3F402.320    
        END DO                                                             UDG3F402.322    
                                                                           UDG3F402.323    
        POS_D1_TMP=1                                                       UDG3F402.324    
        DO K=1,N_FIELDS_OUT                                                UDG3F402.325    
                                                                           UDG3F402.326    
! Pressure of kth output level                                             UDG3F402.327    
          DO I=1,PP_LEN_OUT(J)                                             UDG3F402.334    
            P_OUT(I)=LEVDEPC_OUT(K)                                        UDG3F402.335    
     &               +PSTAR_OUT(I)*LEVDEPC_OUT(K+P_LEVELS_OUT)             UDG3F402.336    
          END DO                                                           UDG3F402.337    
                                                                           UDG3F402.339    
! Interpolate to find field on new level                                   UDG3F402.340    
                                                                           UDG3F402.341    
*IF DEF,TIMER                                                              UDG3F402.342    
      CALL TIMER('V_INT   ',3)                                             UDG3F402.343    
*ENDIF                                                                     UDG3F402.344    
                                                                           UDG3F402.345    
          CALL V_INT(P_TMP,P_OUT,D1_TMP,D1_OUT(POS_D1_TMP),                UDG3F402.350    
     &             PP_LEN_OUT(J),N_FIELDS_IN,TEMP,TEMP,.FALSE.             UDG4F405.56     
     &             ,1,PP_LEN_OUT(J))                                       UDG4F405.57     
                                                                           UDG3F402.353    
*IF DEF,TIMER                                                              UDG3F402.354    
      CALL TIMER('V_INT   ',4)                                             UDG3F402.355    
*ENDIF                                                                     UDG3F402.356    
                                                                           UDG3F402.357    
                                                                           UDG3F402.386    
        POS_D1_TMP=POS_D1_TMP+PP_LEN_OUT(J)                                UDG3F402.387    
        END DO                                                             UDG3F402.388    
      END IF                                                               UDG3F402.389    
                                                                           UDG3F402.390    
! This block processes QT (11)                                             UDG3F402.391    
      IF(PP_ITEMC_OUT(J).EQ.11)THEN                                        UDG3F402.392    
                                                                           UDG3F402.393    
! Pressure on input levels                                                 UDG3F402.409    
        DO K=1,N_FIELDS_IN                                                 UDG3F402.410    
          DO I=1,PP_LEN_OUT(J)                                             UDG3F402.417    
            P_TMP(I+(K-1)*PP_LEN_OUT(J))=LEVDEPC_IN(K)                     UDG3F402.418    
     &            +PSTAR_OUT(I)*LEVDEPC_IN(K+P_LEVELS_IN)                  UDG3F402.419    
          END DO                                                           UDG3F402.420    
        END DO                                                             UDG3F402.422    
                                                                           UDG3F402.423    
        POS_D1_TMP=1                                                       UDG3F402.424    
        DO K=1,N_FIELDS_OUT                                                UDG3F402.425    
                                                                           UDG3F402.426    
! Pressure of kth output level                                             UDG3F402.427    
          DO I=1,PP_LEN_OUT(J)                                             UDG3F402.434    
            P_OUT(I)=LEVDEPC_OUT(K)                                        UDG3F402.435    
     &               +PSTAR_OUT(I)*LEVDEPC_OUT(K+P_LEVELS_OUT)             UDG3F402.436    
          END DO                                                           UDG3F402.437    
                                                                           UDG3F402.439    
! Interpolate to find field on new level                                   UDG3F402.440    
                                                                           UDG3F402.441    
*IF DEF,TIMER                                                              UDG3F402.442    
      CALL TIMER('V_INT   ',3)                                             UDG3F402.443    
*ENDIF                                                                     UDG3F402.444    
                                                                           UDG3F402.445    
          CALL V_INT(P_TMP,P_OUT,D1_TMP,D1_OUT(POS_D1_TMP),                UDG3F402.450    
     &             PP_LEN_OUT(J),N_FIELDS_IN,TEMP,TEMP,.FALSE.             UDG4F405.58     
     &             ,1,PP_LEN_OUT(J))                                       UDG4F405.59     
                                                                           UDG3F402.453    
*IF DEF,TIMER                                                              UDG3F402.454    
      CALL TIMER('V_INT   ',4)                                             UDG3F402.455    
*ENDIF                                                                     UDG3F402.456    
                                                                           UDG3F402.457    
          POS_D1_TMP=POS_D1_TMP+PP_LEN_OUT(J)                              UDG3F402.485    
        END DO                                                             UDG3F402.486    
      END IF                                                               UDG3F402.487    
                                                                           UDG3F402.488    
! This block processes Ozone (60)                                          UDG3F402.489    
      IF(PP_ITEMC_OUT(J).EQ.60)THEN                                        UDG3F402.490    
                                                                           UDG3F402.491    
! Pressure on input levels                                                 UDG3F402.508    
        DO K=1+P_LEVELS_IN-N_FIELDS_IN,P_LEVELS_IN                         UDG3F402.509    
          DO I=1,PP_LEN_OUT(J)                                             UDG3F402.525    
            P_TMP(I+(K-(P_LEVELS_IN-N_FIELDS_IN)-1)*PP_LEN_OUT(J))=        UDG3F402.526    
     &        LEVDEPC_IN(K)+PSTAR_OUT(I)*LEVDEPC_IN(K+P_LEVELS_IN)         UDG3F402.527    
          END DO                                                           UDG3F402.528    
        END DO                                                             UDG3F402.530    
                                                                           UDG3F402.531    
        POS_D1_TMP=1                                                       UDG3F402.532    
        DO K=1+P_LEVELS_OUT-N_FIELDS_OUT,P_LEVELS_OUT                      UDG3F402.533    
                                                                           UDG3F402.534    
! Pressure of kth output level                                             UDG3F402.535    
          DO I=1,PP_LEN_OUT(J)                                             UDG3F402.551    
            P_OUT(I)=LEVDEPC_OUT(K)                                        UDG3F402.552    
     &        +PSTAR_OUT(I)*LEVDEPC_OUT(K+P_LEVELS_OUT)                    UDG3F402.553    
          END DO                                                           UDG3F402.554    
                                                                           UDG3F402.556    
! Interpolate to find field on new level                                   UDG3F402.557    
                                                                           UDG3F402.558    
*IF DEF,TIMER                                                              UDG3F402.559    
      CALL TIMER('V_INT   ',3)                                             UDG3F402.560    
*ENDIF                                                                     UDG3F402.561    
                                                                           UDG3F402.562    
          CALL V_INT(P_TMP,P_OUT,D1_TMP,D1_OUT(POS_D1_TMP),                UDG3F402.572    
     &               PP_LEN_OUT(J),N_FIELDS_IN,TEMP,TEMP,.FALSE.           UDG4F405.60     
     &               ,1,PP_LEN_OUT(J))                                     UDG4F405.61     
                                                                           UDG3F402.575    
*IF DEF,TIMER                                                              UDG3F402.576    
      CALL TIMER('V_INT   ',4)                                             UDG3F402.577    
*ENDIF                                                                     UDG3F402.578    
                                                                           UDG3F402.579    
          POS_D1_TMP=POS_D1_TMP+PP_LEN_OUT(J)                              UDG3F402.610    
        END DO                                                             UDG3F402.611    
      END IF                                                               UDG3F402.612    
                                                                           UDG3F402.613    
! This block processes THL (5)                                             UDG3F402.614    
      IF(PP_ITEMC_OUT(J).EQ.5)THEN                                         UDG3F402.615    
                                                                           UDG3F402.616    
! Pressure on input levels                                                 UDG3F402.631    
        DO K=1,N_FIELDS_IN                                                 UDG3F402.632    
          DO I=1,PP_LEN_OUT(J)                                             UDG3F402.639    
            P_TMP(I+(K-1)*PP_LEN_OUT(J))=LEVDEPC_IN(K)                     UDG3F402.640    
     &        +PSTAR_OUT(I)*LEVDEPC_IN(K+P_LEVELS_IN)                      UDG3F402.641    
          END DO                                                           UDG3F402.642    
        END DO                                                             UDG3F402.644    
                                                                           UDG3F402.645    
! Calculate pressure and exner pressure at output half levels              UDG3F402.646    
        DO K=1,N_FIELDS_OUT+1                                              UDG3F402.647    
          DO I=1,PP_LEN_OUT(J)                                             UDG3F402.654    
            P_HALF_TMP(I,K)=AKH_OUT(K)+BKH_OUT(K)*PSTAR_OUT(I)             UDG3F402.655    
        P_EXNER_HALF_TMP(I,K)=(P_HALF_TMP(I,K)/PREF)**KAPPA                GSS9F402.69     
          END DO                                                           UDG3F402.656    
        END DO                                                             UDG3F402.658    
                                                                           UDG3F402.659    
! Convert input theta to temperature                                       UDG3F402.660    
        DO K=1,N_FIELDS_IN                                                 UDG3F402.661    
          DO I=1,PP_LEN_OUT(J)                                             UDG3F402.668    
          D1_TMP(I+(K-1)*PP_LEN_OUT(J))=D1_TMP(I+(K-1)*PP_LEN_OUT(J))      CONTROL1.1835   
     *    *(P_TMP(I+(K-1)*PP_LEN_OUT(J))/PREF)**KAPPA                      GSS9F402.70     
          END DO                                                           UDG3F402.669    
        END DO                                                             UDG3F402.671    
                                                                           UDG3F402.672    
        POS_D1_TMP=1                                                       UDG3F402.673    
        DO K=1,N_FIELDS_OUT                                                UDG3F402.674    
                                                                           UDG3F402.675    
! Pressure of kth output level                                             UDG3F402.676    
          DO I=1,PP_LEN_OUT(J)                                             UDG3F402.683    
            P_OUT(I)=LEVDEPC_OUT(K)                                        UDG3F402.684    
     &        +PSTAR_OUT(I)*LEVDEPC_OUT(K+P_LEVELS_OUT)                    UDG3F402.685    
          END DO                                                           UDG3F402.686    
                                                                           UDG3F402.688    
! Interpolate to find field on new level                                   UDG3F402.689    
                                                                           UDG3F402.690    
*IF DEF,TIMER                                                              UDG3F402.691    
      CALL TIMER('V_INT   ',3)                                             UDG3F402.692    
*ENDIF                                                                     UDG3F402.693    
                                                                           UDG3F402.694    
          CALL V_INT(P_TMP,P_OUT,D1_TMP,D1_OUT(POS_D1_TMP),                UDG3F402.699    
     &             PP_LEN_OUT(J),N_FIELDS_IN,TEMP,TEMP,.FALSE.             UDG4F405.62     
     &             ,1,PP_LEN_OUT(J))                                       UDG4F405.63     
                                                                           UDG3F402.702    
*IF DEF,TIMER                                                              UDG3F402.703    
      CALL TIMER('V_INT   ',4)                                             UDG3F402.704    
*ENDIF                                                                     UDG3F402.705    
                                                                           UDG3F402.706    
! Convert output temperature to thetal                                     UDG3F402.707    
          DO I=1,PP_LEN_OUT(J)                                             UDG3F402.741    
            D1_OUT(I+(K-1)*PP_LEN_OUT(J))=D1_OUT(I+(K-1)*PP_LEN_OUT(J))    UDG3F402.742    
     &      /P_EXNER_C(P_EXNER_HALF_TMP(I,K+1),P_EXNER_HALF_TMP(I,K),      UDG3F402.743    
     &      P_HALF_TMP(I,K+1),P_HALF_TMP(I,K),KAPPA)                       UDG3F402.744    
          END DO                                                           UDG3F402.745    
          POS_D1_TMP=POS_D1_TMP+PP_LEN_OUT(J)                              UDG3F402.747    
        END DO                                                             UDG3F402.748    
      END IF                                                               UDG3F402.749    
                                                                           UDG3F402.750    
      END IF    ! VERT+multilevel or change in number of ozone levels      UDG3F402.754    
                                                                           UDG6F404.29     
! This block processes convective cloud base level number (14)             UDG6F404.30     
!                  and convective cloud top level number (15)              UDG6F404.31     
      IF(VERT.AND.(PP_ITEMC_OUT(J).EQ.14.OR.PP_ITEMC_OUT(J).EQ.15))THEN    UDG6F404.32     
                                                                           UDG6F404.33     
         CALL VERT_CLD(P_FIELD_OUT,Q_LEVELS_IN,Q_LEVELS_OUT,               UDG6F404.34     
     &                 LEN1_LEVDEPC_IN,LEN2_LEVDEPC_IN,LEVDEPC_IN,         UDG6F404.35     
     &                 ID1_OUT)                                            UDG6F404.36     
      END IF                                                               UDG6F404.37     
      END IF   ! Not PFinc2UM                                              UDG3F402.755    
      ENDIF    ! Block starts at test of POS=0                             UDG3F402.767    
                                                                           CONTROL1.1883   
C---------------------------------------------------------------           CONTROL1.1884   
C Write out this set of real/integer/logical data fields                   CONTROL1.1885   
C---------------------------------------------------------------           CONTROL1.1886   
                                                                           CONTROL1.1887   
*IF DEF,TIMER                                                              CONTROL1.1888   
      CALL TIMER('WRITFLDS',3)                                             CONTROL1.1889   
*ENDIF                                                                     CONTROL1.1890   
                                                                           CONTROL1.1891   
      IF(PP_SOURCE_OUT(J).NE.5.AND.PP_SOURCE_OUT(J).NE.7)THEN              UDG4F304.136    
      IF(PP_TYPE_OUT(J).EQ.1)THEN                                          CONTROL1.1892   
C Real data                                                                CONTROL1.1893   
         IF(PP_SOURCE_OUT(J).EQ.3.OR.PP_SOURCE_OUT(J).EQ.4.OR.             UDG7F400.189    
     &      PP_SOURCE_OUT(J).EQ.6)THEN                                     UDG7F400.190    
           DO K=1,N_FIELDS_OUT                                             CONTROL1.1895   
             CALL WRITFLDS(NFTOUT,1,PP_POS_OUT(J)+K-1,LOOKUP_OUT,          GDG0F401.342    
     &                     LEN1_LOOKUP_OUT,                                GDG0F401.343    
     &                     D1_OUT,PP_LEN_OUT(J),FIXHD_OUT,                 GDG0F401.344    
*CALL ARGPPX                                                               GDG0F401.345    
     &                     ICODE,CMESSAGE)                                 GDG0F401.346    
           ENDDO                                                           CONTROL1.1898   
         ELSE                                                              CONTROL1.1899   
         CALL WRITFLDS(NFTOUT,N_FIELDS_OUT,PP_POS_OUT(J),LOOKUP_OUT,       GDG0F401.347    
     &                 LEN1_LOOKUP_OUT,D1_OUT,PP_LEN_OUT(J),FIXHD_OUT,     GDG0F401.348    
*CALL ARGPPX                                                               GDG0F401.349    
     &                 ICODE,CMESSAGE)                                     GDG0F401.350    
         ENDIF                                                             CONTROL1.1902   
C Integer/Logical data                                                     CONTROL1.1903   
      ELSEIF(PP_TYPE_OUT(J).EQ.2.OR.PP_TYPE_OUT(J).EQ.3)THEN               CONTROL1.1904   
         IF(PP_SOURCE_OUT(J).EQ.3.OR.PP_SOURCE_OUT(J).EQ.4.OR.             UDG7F400.191    
     &      PP_SOURCE_OUT(J).EQ.6)THEN                                     UDG7F400.192    
           DO K=1,N_FIELDS_OUT                                             CONTROL1.1906   
            CALL WRITFLDS(NFTOUT,1,PP_POS_OUT(J)+K-1,LOOKUP_OUT,           GDG0F401.351    
     &                    LEN1_LOOKUP_OUT,                                 GDG0F401.352    
     &                    ID1_OUT,PP_LEN_OUT(J),FIXHD_OUT,                 GDG0F401.353    
*CALL ARGPPX                                                               GDG0F401.354    
     &                 ICODE,CMESSAGE)                                     GDG0F401.355    
           ENDDO                                                           CONTROL1.1909   
         ELSE                                                              CONTROL1.1910   
         CALL WRITFLDS(NFTOUT,N_FIELDS_OUT,PP_POS_OUT(J),LOOKUP_OUT,       GDG0F401.356    
     &                 LEN1_LOOKUP_OUT,ID1_OUT,P_FIELD_OUT,FIXHD_OUT,      GDG0F401.357    
*CALL ARGPPX                                                               GDG0F401.358    
     &                 ICODE,CMESSAGE)                                     GDG0F401.359    
         ENDIF                                                             CONTROL1.1913   
      ELSE                                                                 CONTROL1.1914   
      WRITE(6,'('' Writing out new data'')')                               CONTROL1.1915   
      WRITE(6,'('' Unrecognised PP field type'',2I16)')J,PP_TYPE_OUT(J)    CONTROL1.1916   
        CALL ABORT                                                         CONTROL1.1917   
      ENDIF                                                                CONTROL1.1918   
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         CONTROL1.1919   
      ENDIF                                                                AD200193.5      
                                                                           CONTROL1.1920   
*IF DEF,TIMER                                                              CONTROL1.1921   
      CALL TIMER('WRITFLDS',4)                                             CONTROL1.1922   
*ENDIF                                                                     CONTROL1.1923   
                                                                           CONTROL1.1924   
1400  CONTINUE                                                             CONTROL1.1925   
                                                                           UDG6F404.38     
! Check convective cloud base and top after vertical interpolation.        UDG6F404.39     
! If convective cloud top and base are at the same level then              UDG6F404.40     
! increment convective cloud top by on level.                              UDG6F404.41     
      IF(VERT)THEN                                                         UDG6F404.42     
        CALL CNV_CLD_CHK(P_FIELD_OUT,N_TYPES_OUT,NFTOUT,FIXHD_OUT,         UDG6F404.43     
     &                   LEN1_LOOKUP_OUT,LEN2_LOOKUP_OUT,LOOKUP_OUT,       UDG6F404.44     
*CALL ARGPPX                                                               UDG6F404.45     
     &                   Q_LEVELS_OUT,PP_POS_OUT,PP_ITEMC_OUT)             UDG6F404.46     
      END IF                                                               UDG6F404.47     
                                                                           UDG6F404.48     
                                                                           UDG6F404.49     
                                                                           UDR1F400.16     
!     Now that output dump is set up, initialise fields if required.       UDR1F400.17     
!     To initialise fields, S=8 in ITEMS Namelist.                         UDR1F400.18     
!     From 4.1, R=n to be added to ITEMS Namelist to allow different       UDR1F400.19     
!     ways of initialising a field.                                        UDR1F400.20     
                                                                           UDR1F400.21     
      DO J = 1,N_TYPES_OUT                                                 UDR1F400.22     
                                                                           UDR1F400.24     
!      Get model number for this field                                     GDR7F404.75     
       MODEL = LOOKUP_OUT(45,PP_POS_OUT(J))                                GDR7F404.76     
       IF (PP_SOURCE_OUT(J).EQ.8) THEN                                     GDR7F404.77     
       write (6,*) ' SOURCE=8 : Stash No ',pp_itemc_out(j),                GDR7F404.78     
     & ' Model No ',Model                                                  GDR7F404.79     
       ENDIF                                                               GDR7F404.80     
                                                                           GDR7F404.81     
          IF (PP_ITEMC_OUT(J).EQ.49.AND.  !  Initialise SEA ICE temp       UCB1F402.1      
     &      MODEL.EQ.ATMOS_IM .AND.                                        GDR7F404.82     
     &      PP_SOURCE_OUT(J).EQ.8) THEN   !  if not in dump                UCB1F402.2      
                                                                           UDR1F400.26     
!           S=8 is not set in the UMUI for this field. It is set in        UDR1F400.27     
!           loop 1400 if no field is found in the input dump.              UDR1F400.28     
                                                                           UDR1F400.29     
            WRITE (6,*) ' '                                                UDR1F400.30     
            WRITE (6,*) ' No Sea Ice Temperature in input dump'            UDR1F400.31     
            WRITE (6,*) ' Sea Ice Temperature being initialised.'          UDR1F400.32     
            CALL LOCATE (24,PP_ITEMC_OUT,N_TYPES_OUT,POS)                  UDR1F400.33     
            IF (POS.EQ.0) THEN                                             UDR1F400.34     
              CMESSAGE =                                                   UDR1F400.35     
     &        'CONTROL : Problem with initialising sea ice temperature'    UDR1F400.36     
              WRITE (6,*) 'T* not found in output dump.'                   UDR1F400.37     
              WRITE (6,*) 'Sea Ice Temperature in output dump cannot ',    UDR1F400.38     
     &        'be initialised'                                             UDR1F400.39     
              CALL ABORT                                                   UDR1F400.40     
            ELSE                                                           UDR1F400.41     
              CALL READFLDS (NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,          UDR1F400.42     
     &        LEN1_LOOKUP_OUT,TSTAR,P_FIELD_OUT,FIXHD_OUT,                 UDR1F400.43     
*CALL ARGPPX                                                               GDG0F401.360    
     &        ICODE,CMESSAGE)                                              UDR1F400.44     
              IF (ICODE.GT.0) THEN                                         UDR1F400.45     
                WRITE (6,*) ' Problem with reading T* field.'              UDR1F400.46     
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)            UDR1F400.47     
              ENDIF                                                        UDR1F400.48     
              CALL LOCATE (49,PP_ITEMC_OUT,N_TYPES_OUT,POS)                UDR1F400.49     
              CALL WRITFLDS (NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,          UDR1F400.50     
     &        LEN1_LOOKUP_OUT,TSTAR,P_FIELD_OUT,FIXHD_OUT,                 UDR1F400.51     
*CALL ARGPPX                                                               GDG0F401.361    
     &        ICODE,CMESSAGE)                                              UDR1F400.52     
              IF (ICODE.GT.0) THEN                                         UDR1F400.53     
                WRITE (6,*) ' Problem with writing sea ice temp field'     UDR1F400.54     
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)            UDR1F400.55     
              ENDIF                                                        UDR1F400.56     
              WRITE (6,*) ' SEA ICE TEMPERATURE (Stash Code 49) has ',     UDR1F400.57     
     &        'been initialised from T*.'                                  UDR1F400.58     
            ENDIF                                                          UDR1F400.59     
!                                                                          UJS1F401.61     
          ELSEIF (PP_ITEMC_OUT(J).EQ.214.AND.   ! Unfrozen soil moisture   UCB1F402.3      
     &      MODEL.EQ.ATMOS_IM .AND.             ! fraction                 GDR7F404.83     
     &      (PP_SOURCE_OUT(J).EQ.8.OR.          ! not in dump or           UCB1F402.5      
     &      SWITCH(10).EQ.1.OR.                 ! deep soil temp.or        UCB1F402.6      
     &      SWITCH(36).EQ.1)) THEN              ! soil moisture in layer   UCB1F402.7      
!                                               ! ancilliary fields        UCB1F402.8      
!                                               ! requested                UCB1F402.9      
!           S=8 is not set in the UMUI for this field. It is set in        UJS1F401.64     
!           loop 1400 if no field is found in the input dump.              UJS1F401.65     
!                                                                          UJS1F401.66     
         CALL INIT_MOSES(P_FIELD_OUT,SM_LEVELS_OUT,ST_LEVELS_OUT,          UDG4F404.26     
     &                   FIXHD_OUT,LEN1_LOOKUP_OUT,LEN2_LOOKUP_OUT,        UDG4F404.27     
     &                   LOOKUP_OUT,LAND_POINTS_OUT,NFTOUT,                UDG4F404.28     
     &                   N_TYPES_OUT,PP_ITEMC_OUT,PP_POS_OUT,              UDG4F404.29     
*CALL ARGPPX                                                               UDG4F404.30     
     &                   D1_OUT(1),D1_OUT(SM_LEVELS_OUT*P_FIELD_OUT+1),    UDG4F404.31     
     &                   D1_OUT((SM_LEVELS_OUT+ST_LEVELS_OUT)              UDG4F404.32     
     &                   *P_FIELD_OUT+1),                                  UDG4F404.33     
     &                   D1_OUT((SM_LEVELS_OUT+ST_LEVELS_OUT+1)            UDG4F404.34     
     &                   *P_FIELD_OUT+1),                                  UDG4F404.35     
     &                   D1_OUT((SM_LEVELS_OUT+ST_LEVELS_OUT+2)            UDG4F404.36     
     &                   *P_FIELD_OUT+1))                                  UDG4F404.37     
                                                                           UDG4F404.38     
                                                                           UJS1F401.192    
          ELSEIF (PP_ITEMC_OUT(J).EQ.213.AND.   !  Canopy Conductance      UCB1F402.10     
     &      MODEL.EQ.ATMOS_IM .AND.                                        GDR7F404.84     
     &      PP_SOURCE_OUT(J).EQ.8) THEN         ! if not in dump           UCB1F402.11     
!           S=8 is not set in the UMUI for this field. It is set in        UJS1F401.195    
!           loop 1400 if no field is found in the input dump.              UJS1F401.196    
                                                                           UJS1F401.197    
            WRITE (6,*) ' '                                                UJS1F401.198    
            WRITE (6,*) ' No Canopy Conductance in input dump'             UJS1F401.199    
            WRITE (6,*) ' Canopy Conductance being initialised.'           UJS1F401.200    
            CALL LOCATE (54,PP_ITEMC_OUT,N_TYPES_OUT,POS)                  UJS1F401.201    
            IF (POS.EQ.0) THEN                                             UJS1F401.202    
              CMESSAGE =                                                   UJS1F401.203    
     &        'CONTROL : Problem with initialising canopy conductance'     UJS1F401.204    
              WRITE (6,*) 'Resistance not found in output dump.'           UJS1F401.205    
              WRITE (6,*) 'Canopy Conductance in output dump cannot ',     UJS1F401.206    
     &        'be initialised'                                             UJS1F401.207    
              CALL ABORT                                                   UJS1F401.208    
            ELSE                                                           UJS1F401.209    
              CALL READFLDS (NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,          UJS1F401.210    
     &        LEN1_LOOKUP_OUT,D1_TEMP,P_FIELD_OUT,FIXHD_OUT,               UDG4F404.39     
*CALL ARGPPX                                                               UJS1F401.212    
     &        ICODE,CMESSAGE)                                              UJS1F401.213    
              IF (ICODE.GT.0) THEN                                         UJS1F401.214    
                WRITE (6,*) ' Problem with reading Resistance field.'      UJS1F401.215    
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)            UJS1F401.216    
              ENDIF                                                        UJS1F401.217    
              DO I=1,P_FIELD_OUT                                           UJS1F401.218    
                IF (D1_TEMP(I).NE.0.0) THEN                                UDG4F404.40     
                  D1_TEMP(I) = 1./ D1_TEMP(I)                              UDG4F404.41     
                ELSE                                                       UJS1F401.221    
                  D1_TEMP(I) = RMDI                                        UDG4F404.42     
                ENDIF                                                      UJS1F401.223    
              ENDDO                                                        UJS1F401.224    
              CALL LOCATE (213,PP_ITEMC_OUT,N_TYPES_OUT,POS)               UJS1F401.225    
              CALL WRITFLDS (NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,          UJS1F401.226    
     &        LEN1_LOOKUP_OUT,D1_TEMP,P_FIELD_OUT,FIXHD_OUT,               UDG4F404.43     
*CALL ARGPPX                                                               UJS1F401.228    
     &        ICODE,CMESSAGE)                                              UJS1F401.229    
              IF (ICODE.GT.0) THEN                                         UJS1F401.230    
                WRITE (6,*) ' Problem with writing conductance field.'     UJS1F401.231    
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)            UJS1F401.232    
              ENDIF                                                        UJS1F401.233    
              WRITE (6,*) ' CANOPY CONDUCTANCE (Stash Code 213) has ',     UJS1F401.234    
     &        'been initialised from 1./ RESIST'                           UJS1F401.235    
            ENDIF                                                          UJS1F401.236    
                                                                           UDR1F400.60     
         ELSEIF (PP_ITEMC_OUT(J).EQ.12 .AND.   ! Initialize QCF            UDG4F404.44     
     &           MODEL.EQ.ATMOS_IM     .AND.   ! if not in dump            UDG4F404.45     
     &           PP_SOURCE_OUT(J).EQ.8) THEN                               UDG4F404.46     
                                                                           UDG4F404.47     
!           S=8 is not set in the UMUI for this field. It is set in        UDG4F404.48     
!           loop 1400 if no field is found in the input dump.              UDG4F404.49     
                                                                           UDG4F404.50     
            WRITE (6,*) ' '                                                UDG4F404.51     
            WRITE (6,*) ' No QCF found in input dump '                     UDG4F404.52     
            WRITE (6,*) 'QCF being initialised '                           UDG4F404.53     
                                                                           UDG4F404.54     
            DO I= 1,P_FIELD_OUT*Q_LEVELS_OUT                               UDG4F404.55     
              D1_OUT(I) = 0.0                                              UDG4F404.56     
            END DO                                                         UDG4F404.57     
                                                                           UDG4F404.58     
            CALL LOCATE (12,PP_ITEMC_OUT,N_TYPES_OUT,POS)                  UDG4F404.59     
            CALL WRITFLDS (NFTOUT,Q_LEVELS_OUT,                            UDG4F404.60     
     &                     PP_POS_OUT(POS),LOOKUP_OUT,                     UDG4F404.61     
     &                     LEN1_LOOKUP_OUT,D1_OUT,P_FIELD_OUT,FIXHD_OUT,   UDG4F404.62     
*CALL ARGPPX                                                               UDG4F404.63     
     &                     ICODE,CMESSAGE)                                 UDG4F404.64     
            IF (ICODE.GT.0) THEN                                           UDG4F404.65     
              WRITE (6,*) ' Problem with writing QCF field'                UDG4F404.66     
              CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)              UDG4F404.67     
            END IF                                                         UDG4F404.68     
            WRITE (6,*) ' QCF (Stash Code 12) has been ',                  UDG4F404.69     
     &                   'initialised to zero'                             UDG4F404.70     
                                                                           UDG4F404.71     
          ELSEIF (PP_ITEMC_OUT(J).EQ.210.AND.   !  Slab Temperature        UCB1F402.12     
     &      MODEL.EQ.SLAB_IM .AND.                                         GDR7F404.85     
     &      PP_SOURCE_OUT(J).EQ.8) THEN         ! if not in dump           UCB1F402.13     
                                                                           UDR1F400.62     
            WRITE (6,*) ' '                                                UDR1F400.63     
            WRITE (6,*) ' Slab Temperature being Initialised'              UDR1F400.64     
                                                                           UDR1F400.65     
!           Get T* field from output dump                                  UDR1F400.66     
            CALL LOCATE (24,PP_ITEMC_OUT,N_TYPES_OUT,POS)                  UDR1F400.67     
            IF (POS.EQ.0) THEN                                             UDR1F400.68     
              CMESSAGE =                                                   UDR1F400.69     
     &        'CONTROL : Problem with initialising Slab Temperature'       UDR1F400.70     
              WRITE (6,*) ' T* not found in output dump.'                  UDR1F400.71     
              WRITE (6,*) ' Slab Temperature cannot be initialised.'       UDR1F400.72     
              CALL ABORT                                                   UDR1F400.73     
            ELSE                                                           UDR1F400.74     
              CALL READFLDS (NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,          UDR1F400.75     
     &        LEN1_LOOKUP_OUT,TSTAR,P_FIELD_OUT,FIXHD_OUT,                 UDR1F400.76     
*CALL ARGPPX                                                               GDG0F401.362    
     &        ICODE,CMESSAGE)                                              UDR1F400.77     
              IF (ICODE.GT.0) THEN                                         UDR1F400.78     
                WRITE (6,*) ' Problem with reading T* field.'              UDR1F400.79     
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)            UDR1F400.80     
              ENDIF                                                        UDR1F400.81     
            ENDIF                                                          UDR1F400.82     
                                                                           UDR1F400.83     
!           Get Ice Fraction field from output dump                        UDR1F400.84     
            CALL LOCATE (31,PP_ITEMC_OUT,N_TYPES_OUT,POS)                  UDR1F400.85     
            IF (POS.EQ.0) THEN                                             UDR1F400.86     
              CMESSAGE =                                                   UDR1F400.87     
     &        'CONTROL : Problem with initialising Slab Temperature'       UDR1F400.88     
              WRITE (6,*) ' Ice fraction not found in output dump.'        UDR1F400.89     
              WRITE (6,*) ' Slab Temperature cannot be initialised.'       UDR1F400.90     
              CALL ABORT                                                   UDR1F400.91     
            ELSE                                                           UDR1F400.92     
              CALL READFLDS (NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,          UDR1F400.93     
     &        LEN1_LOOKUP_OUT,D1_TEMP,P_FIELD_OUT,FIXHD_OUT,               UDR1F400.94     
*CALL ARGPPX                                                               GDG0F401.363    
     &        ICODE,CMESSAGE)                                              UDR1F400.95     
              IF (ICODE.GT.0) THEN                                         UDR1F400.96     
                WRITE (6,*) ' Problem with reading Ice Fration field.'     UDR1F400.97     
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)            UDR1F400.98     
              ENDIF                                                        UDR1F400.99     
            ENDIF                                                          UDR1F400.100    
                                                                           UDR1F400.101    
!           Derive Slab Temperature from T* and Ice Fraction               UDR1F400.102    
            DO I=1,P_FIELD_OUT                                             UDR1F400.103    
              IF (D1_TEMP(I).EQ.0) THEN                                    UDR1F400.104    
                D1_TEMP(I) = TSTAR(I)-273.15                               UDR1F400.105    
              ELSEIF (D1_TEMP(I).GT.0) THEN                                UDR1F400.106    
                D1_TEMP(I) = -1.8                                          UDR1F400.107    
              ELSE                                                         UDR1F400.108    
                D1_TEMP(I) = RMDI                                          UDR1F400.109    
              ENDIF                                                        UDR1F400.110    
            ENDDO                                                          UDR1F400.111    
                                                                           UDR1F400.112    
!           Write out Slab Temperature field                               UDR1F400.113    
            CALL LOCATE (210,PP_ITEMC_OUT,N_TYPES_OUT,POS)                 UDR1F400.114    
            CALL WRITFLDS (NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,            UDR1F400.115    
     &      LEN1_LOOKUP_OUT,D1_TEMP,P_FIELD_OUT,FIXHD_OUT,                 UDR1F400.116    
*CALL ARGPPX                                                               GDG0F401.364    
     &      ICODE,CMESSAGE)                                                UDR1F400.117    
            IF (ICODE.GT.0) THEN                                           UDR1F400.118    
              WRITE (6,*) ' Problem with writing Slab Temp. field.'        UDR1F400.119    
              CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)              UDR1F400.120    
            ENDIF                                                          UDR1F400.121    
            WRITE (6,*) ' SLAB TEMPERATURE (Stash Code 210) has been ',    UDR1F400.122    
     &      'initialised as follows :'                                     UDR1F400.123    
            WRITE (6,*) ' If Ice Fraction = 0 : Slab T = T*-273.15'        UDR1F400.124    
            WRITE (6,*) ' If Ice Fraction > 0 : Slab T = -1.8'             UDR1F400.125    
            WRITE (6,*) ' Otherwise           : Slab T = RMDI'             UDR1F400.126    
                                                                           UDR1F400.127    
          ELSEIF( (PP_ITEMC_OUT(J).EQ.211)  .AND. ! If 3D CCA              AJX1F404.20     
     &            (MODEL.EQ.ATMOS_IM)       .AND. ! not in dump            AJX1F404.21     
     &            (PP_SOURCE_OUT(J).EQ.8 )  .AND.                          AJX1F404.22     
     &            (L_3D_CCA) ) THEN                                        AJX1F404.23     
                                                                           AJX1F404.24     
            WRITE (6,*) ' '                                                AJX1F404.25     
            WRITE (6,*) ' 3D CCA being Initialised'                        AJX1F404.26     
!                                                                          AJX1F404.27     
!           Get 2D CCA field from input dump                               AJX1F404.28     
            CALL LOCATE (13,PP_ITEMC_IN,N_TYPES_IN,POS)                    AJX1F404.29     
            IF (POS.EQ.0) THEN                                             AJX1F404.30     
              CMESSAGE =                                                   AJX1F404.31     
     &        'CONTROL : Problem with initialising 3D CCA'                 AJX1F404.32     
              WRITE (6,*) ' 2D CCA not found in input dump.'               AJX1F404.33     
              WRITE (6,*) ' 3D CCA cannot be initialised.'                 AJX1F404.34     
              CALL ABORT                                                   AJX1F404.35     
            ELSE                                                           AJX1F404.36     
              CALL READFLDS (NFTIN,1,PP_POS_IN(POS),LOOKUP_IN,             AJX1F404.37     
     &        LEN1_LOOKUP_IN,D1_IN,P_FIELD_IN,FIXHD_IN,                    AJX1F404.38     
*CALL ARGPPX                                                               AJX1F404.39     
     &        ICODE,CMESSAGE)                                              AJX1F404.40     
              IF (ICODE.GT.0) THEN                                         AJX1F404.41     
                WRITE (6,*) ' Problem with reading 2D CCA field.'          AJX1F404.42     
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTIN)             AJX1F404.43     
              ENDIF                                                        AJX1F404.44     
            ENDIF                                                          AJX1F404.45     
! do horizontal interpolation:                                             AJX1F404.46     
        TYPE=1                                                             AJX1F404.47     
        X_ROWS_IN=P_ROWS_IN                                                AJX1F404.48     
        X_ROWS_OUT=P_ROWS_OUT                                              AJX1F404.49     
        X_COLS_IN=ROW_LENGTH_IN                                            AJX1F404.50     
        X_COLS_OUT=ROW_LENGTH_OUT                                          AJX1F404.51     
        X_FIELD_IN=P_FIELD_IN                                              AJX1F404.52     
        X_FIELD_OUT=P_FIELD_OUT                                            AJX1F404.53     
        CALL H_INT_CTL(IDIM,X_FIELD_OUT,X_COLS_IN,X_COLS_OUT               AJX1F404.54     
     &,                X_ROWS_IN,X_ROWS_OUT,AW_AREA_BOX(TYPE)              AJX1F404.55     
     &,                GLOBAL,H_INT_TYPE                                   AJX1F404.56     
     &,AW_INDEX_TARG_LHS(1,TYPE),AW_INDEX_TARG_TOP(1,TYPE)                 AJX1F404.57     
     &,                BL_INDEX_B_L(1,TYPE),BL_INDEX_B_R(1,TYPE)           AJX1F404.58     
     &,                AW_COLAT_T(1,TYPE),AW_LONG_L(1,TYPE),D1_IN          AJX1F404.59     
     &,                WEIGHT_T_R(1,TYPE),WEIGHT_B_R(1,TYPE)               AJX1F404.60     
     &,                WEIGHT_T_L(1,TYPE),WEIGHT_B_L(1,TYPE),D1_OUT)       AJX1F404.61     
!                                                                          AJX1F404.62     
! make sure polar rows are constant.                                       AJX1F404.63     
!                                                                          AJX1F404.64     
        IF(GLOBAL)THEN                                                     AJX1F404.65     
          IF(PPXREF_GRID_TYPE.LE.3)THEN                                    AJX1F404.66     
! Horizontal Interpolation has made polar rows non-constant                AJX1F404.67     
           write(6,*) 'Horizontal Interpolation has made polar rows ',     AJX1F404.68     
     &     'non-constant'                                                  AJX1F404.69     
           write(6,*) 'Averaging polar rows to make them constant'         AJX1F404.70     
!                                                                          AJX1F404.71     
!   North polar row                                                        AJX1F404.72     
              RP_ROW_SUM=0                                                 AJX1F404.73     
              DO I=1,ROW_LENGTH_OUT                                        AJX1F404.74     
                RP_ROW_SUM=RP_ROW_SUM+D1_OUT(I)                            AJX1F404.75     
              END DO                                                       AJX1F404.76     
              DO I=1,ROW_LENGTH_OUT                                        AJX1F404.77     
                D1_OUT(I)=RP_ROW_SUM/ROW_LENGTH_OUT                        AJX1F404.78     
              END DO                                                       AJX1F404.79     
!   South polar row                                                        AJX1F404.80     
              RP_ROW_SUM=0                                                 AJX1F404.81     
              DO I=1,ROW_LENGTH_OUT                                        AJX1F404.82     
                RP_ROW_SUM=                                                AJX1F404.83     
     &          RP_ROW_SUM+D1_OUT((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)         AJX1F404.84     
              END DO                                                       AJX1F404.85     
              DO I=1,ROW_LENGTH_OUT                                        AJX1F404.86     
                D1_OUT((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)=                   AJX1F404.87     
     &           RP_ROW_SUM/ROW_LENGTH_OUT                                 AJX1F404.88     
              END DO                                                       AJX1F404.89     
            END IF                                                         AJX1F404.90     
          END IF                                                           AJX1F404.91     
!                                                                          AJX1F404.92     
! Ensure that conv cloud amount is not negative                            AJX1F404.93     
      DO I=1,P_FIELD_OUT                                                   AJX1F404.94     
        IF(D1_OUT(I).LT.0.)D1_OUT(I)=0.                                    AJX1F404.95     
      ENDDO                                                                AJX1F404.96     
!                                                                          AJX1F404.97     
! Call DERV_CCA_3D to derive 3D cca from 2D cca.                           AJX1F404.98     
!                                                                          AJX1F404.99     
            CALL DERV_3D_CCA(D1_OUT,NFTOUT,PP_POS_OUT,LOOKUP_OUT           AJX1F404.100    
     &                      ,LEN1_LOOKUP_OUT,LEN2_LOOKUP_OUT               AJX1F404.101    
     &                      ,P_FIELD_OUT,Q_LEVELS_OUT,BL_LEVELS_OUT        AJX1F404.102    
     &                      ,P_LEVELS_OUT,ANVIL_FACTOR,TOWER_FACTOR        AJX1F404.103    
     &                      ,L_CLOUD_DEEP                                  AJX3F405.221    
     &                      ,PP_ITEMC_OUT,N_TYPES_OUT,FIXHD_OUT,           AJX1F404.104    
*CALL ARGPPX                                                               AJX1F404.105    
     &                       AKH_OUT,BKH_OUT,P_HALF_TMP,PSTAR_OUT)         AJX1F404.106    
                                                                           GDR7F404.86     
         ELSEIF (PP_ITEMC_OUT(J).EQ.221 .AND.  !  Snow Soot Content        GDR7F404.87     
     &           MODEL.EQ.ATMOS_IM      .AND.                              GDR7F404.88     
     &           L_SNOW_ALBEDO          .AND.                              GDR7F404.89     
     &           PP_SOURCE_OUT(J).EQ.8) THEN                               GDR7F404.90     
                                                                           GDR7F404.91     
!           S=8 is not set in the UMUI for this field. It is set in        GDR7F404.92     
!           loop 1400 if no field is found in the input dump.              GDR7F404.93     
                                                                           GDR7F404.94     
            WRITE (6,*) ' '                                                GDR7F404.95     
            WRITE (6,*) ' No SNOW SOOT CONTENT found in input dump '       GDR7F404.96     
            WRITE (6,*) ' SNOW SOOT CONTENT being initialised '            GDR7F404.97     
                                                                           GDR7F404.98     
            DO I= 1,P_FIELD_OUT                                            GDR7F404.99     
              D1_TEMP(I) = 0.0                                             GDR7F404.100    
            END DO                                                         GDR7F404.101    
                                                                           GDR7F404.102    
            CALL LOCATE (221,PP_ITEMC_OUT,N_TYPES_OUT,POS)                 GDR7F404.103    
            CALL WRITFLDS (NFTOUT,1,PP_POS_OUT(POS),                       GDR7F404.104    
     &                     LOOKUP_OUT,LEN1_LOOKUP_OUT,                     GDR7F404.105    
     &                     D1_TEMP,P_FIELD_OUT,FIXHD_OUT,                  GDR7F404.106    
*CALL ARGPPX                                                               GDR7F404.107    
     &                     ICODE,CMESSAGE)                                 GDR7F404.108    
            IF (ICODE.GT.0) THEN                                           GDR7F404.109    
              WRITE (6,*) ' Problem with writing SNOW SOOT field'          GDR7F404.110    
              CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)              GDR7F404.111    
            END IF                                                         GDR7F404.112    
            WRITE (6,*) ' SNOW SOOT CONTENT (Stash Code 221) has ',        GDR7F404.113    
     &                   'been initialised to zero'                        GDR7F404.114    
                                                                           GDR7F404.115    
          ELSEIF ((PP_ITEMC_OUT(J).EQ.224    .OR.                          GDR7F404.116    
     &             PP_ITEMC_OUT(J).EQ.225    .OR.                          GDR7F404.117    
     &             PP_ITEMC_OUT(J).EQ.226    .OR.                          GDR7F404.118    
     &             PP_ITEMC_OUT(J).EQ.227    .OR.                          GDR7F404.119    
     &             PP_ITEMC_OUT(J).EQ.228    .OR.                          GDR7F404.120    
     &             PP_ITEMC_OUT(J).EQ.230    .OR.                          GDR7F404.121    
     &             PP_ITEMC_OUT(J).EQ.234)   .AND.                         GDR7F404.122    
     &             MODEL.EQ.ATMOS_IM         .AND.                         GDR7F404.123    
     &            (L_TRIFFID.OR.L_VEG_FRACS) .AND.                         GDR7F404.124    
     &             PP_SOURCE_OUT(J).EQ.8) THEN                             GDR7F404.125    
                                                                           GDR7F404.126    
!           S=8 is not set in the UMUI for this field. It is set in        GDR7F404.127    
!           loop 1400 if no field is found in the input dump.              GDR7F404.128    
                                                                           GDR7F404.129    
            WRITE (6,*) ' '                                                GDR7F404.130    
            WRITE (6,*) ' Prognostic - Stash Code ',PP_ITEMC_OUT(J),       GDR7F404.131    
     &                  ' - not found in input dump.'                      GDR7F404.132    
                                                                           GDR7F404.133    
! If not present in the input dump, Items 224, 225, 226, 227, 228, 230     GDR7F404.134    
! and 234 are initialised properly in the atmosphere routine INIT_VEG.     GDR7F404.135    
! Here they are initialised to an arbitrary value to avoid handling of     GDR7F404.136    
! non-numeric data.  A physically unrealistic value of -1.0 is intended    GDR7F404.137    
! to help warn of incorrect use of the fields prior to INIT_VEG.           GDR7F404.138    
!           All fields are land fields                                     GDR7F404.139    
            DO I= 1,LAND_POINTS                                            GDR7F404.140    
              D1_TEMP(I) = -1.0                                            GDR7F404.141    
            END DO                                                         GDR7F404.142    
                                                                           GDR7F404.143    
!           Find position in output dump                                   GDR7F404.144    
            CALL LOCATE (PP_ITEMC_OUT(J),PP_ITEMC_OUT,N_TYPES_OUT,POS)     GDR7F404.145    
                                                                           GDR7F404.146    
!           Get no of pseudo-levels                                        GDR7F404.147    
            N_PSL = NPFT                                                   GDR7F404.148    
            IF(PP_ITEMC_OUT(J).EQ.228) N_PSL=1                             GDR7F404.149    
            IF(PP_ITEMC_OUT(J).EQ.230) N_PSL=NTYPE-1                       GDR7F404.150    
            IF(PP_ITEMC_OUT(J).EQ.234) N_PSL=NTYPE                         GDR7F404.151    
                                                                           GDR7F404.152    
!           Write fields into output dump                                  GDR7F404.153    
            DO I=1,N_PSL                                                   GDR7F404.154    
            CALL WRITFLDS (NFTOUT,1,PP_POS_OUT(POS)+I-1,                   GDR7F404.155    
     &                     LOOKUP_OUT,LEN1_LOOKUP_OUT,                     GDR7F404.156    
     &                     D1_TEMP,LAND_POINTS,FIXHD_OUT,                  GDR7F404.157    
*CALL ARGPPX                                                               GDR7F404.158    
     &                     ICODE,CMESSAGE)                                 GDR7F404.159    
            IF (ICODE.GT.0) THEN                                           GDR7F404.160    
              WRITE (6,*) ' Problem in WRITFLDS - ',                       GDR7F404.161    
     &                    ' Stash Code ',PP_ITEMC_OUT(J),                  GDR7F404.162    
     &                    ' Pseudo Level ',I                               GDR7F404.163    
              CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)              GDR7F404.164    
            END IF                                                         GDR7F404.165    
            WRITE (6,*) ' Prognostic - Stash Code ',PP_ITEMC_OUT(J),       GDR7F404.166    
     &                  ' Pseudo Level ',I,                                GDR7F404.167    
     &                  ' has been initialised to -1.0'                    GDR7F404.168    
            END DO                                                         GDR7F404.169    
                                                                           GDR7F404.170    
          ELSEIF (PP_ITEMC_OUT(J).EQ.229    .AND.                          GDR7F404.171    
     &            MODEL.EQ.ATMOS_IM         .AND.                          GDR7F404.172    
     &           (L_TRIFFID.OR.L_VEG_FRACS) .AND.                          GDR7F404.173    
     &            PP_SOURCE_OUT(J).EQ.8) THEN                              GDR7F404.174    
                                                                           GDR7F404.175    
!           S=8 is not set in the UMUI for this field. It is set in        GDR7F404.176    
!           loop 1400 if no field is found in the input dump.              GDR7F404.177    
                                                                           GDR7F404.178    
            WRITE (6,*) ' '                                                GDR7F404.179    
            WRITE (6,*) ' Prognostic - Stash Code ',PP_ITEMC_OUT(J),       GDR7F404.180    
     &                  ' - not found in input dump.'                      GDR7F404.181    
                                                                           GDR7F404.182    
! If not present in the input dump, item 229 (canopy water on non-ice      GDR7F404.183    
! tiles) is initialised from item 22 (gridbox mean canopy water).          GDR7F404.184    
! However, item 22 is not expected in the output dump if item 229 is       GDR7F404.185    
! required, so take item 22 from input dump.                               GDR7F404.186    
                                                                           GDR7F404.187    
!           Find Gridbox Mean Canopy Water (item 22) in input dump         GDR7F404.188    
            CALL LOCATE (22,PP_ITEMC_IN,N_TYPES_IN,POS)                    GDR7F404.189    
            IF (POS.EQ.0) THEN                                             GDR7F404.190    
              WRITE (6,*) ' Gridbox Mean Canopy Water Stash Code 22',      GDR7F404.191    
     &                    ' not found in input dump.'                      GDR7F404.192    
              WRITE (6,*) ' Canopy Water on non-ice tiles',                GDR7F404.193    
     &                    ' cannot be initialised.'                        GDR7F404.194    
              CALL ABORT                                                   GDR7F404.195    
            ENDIF                                                          GDR7F404.196    
                                                                           GDR7F404.197    
!           Read in Gridbox Mean Canopy Water from input dump              GDR7F404.198    
            CALL READFLDS (NFTIN,1,PP_POS_IN(POS),                         GDR7F404.199    
     &                     LOOKUP_IN,LEN1_LOOKUP_IN,                       GDR7F404.200    
!    &                     D1_IN,LAND_POINTS,FIXHD_IN,                     GDR7F404.201    
     &                     D1_IN,P_FIELD_IN,FIXHD_IN,                      GDR7F404.202    
*CALL ARGPPX                                                               GDR7F404.203    
     &                     ICODE,CMESSAGE)                                 GDR7F404.204    
            IF (ICODE.GT.0) THEN                                           GDR7F404.205    
              WRITE (6,*) ' Problem in READFLDS for Gridbox Mean ',        GDR7F404.206    
     &                    ' Canopy Water Stash Code 22.'                   GDR7F404.207    
              CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTIN)               GDR7F404.208    
            END IF                                                         GDR7F404.209    
                                                                           GDR7F404.210    
! if input and output dumps on different grids then interpolate canopy     GDR7F404.211    
! water content from input grid to output grid                             GDR7F404.212    
            IF(HORIZ)THEN                                                  GDR7F404.213    
                                                                           GDR7F404.214    
! expand from land points to full grid before interpolation                GDR7F404.215    
              CALL FROM_LAND_POINTS (D1_IN_TMP,D1_IN,                      GDR7F404.216    
     &                         LAND_SEA_MASK_IN,P_FIELD_IN,LAND_POINTS)    GDR7F404.217    
                                                                           GDR7F404.218    
! do horizontal interpolation:                                             GDR7F404.219    
              TYPE        = 1                                              GDR7F404.220    
              X_ROWS_IN   = P_ROWS_IN                                      GDR7F404.221    
              X_ROWS_OUT  = P_ROWS_OUT                                     GDR7F404.222    
              X_COLS_IN   = ROW_LENGTH_IN                                  GDR7F404.223    
              X_COLS_OUT  = ROW_LENGTH_OUT                                 GDR7F404.224    
              X_FIELD_IN  = P_FIELD_IN                                     GDR7F404.225    
              X_FIELD_OUT = P_FIELD_OUT                                    GDR7F404.226    
              POS_D1_IN   = 1                                              GDR7F404.227    
              POS_D1_OUT  = 1                                              GDR7F404.228    
              CALL H_INT_CTL(IDIM,X_FIELD_OUT,X_COLS_IN,X_COLS_OUT         GDR7F404.229    
     &,              X_ROWS_IN,X_ROWS_OUT,AW_AREA_BOX(TYPE)                GDR7F404.230    
     &,              GLOBAL,H_INT_TYPE                                     GDR7F404.231    
     &,              AW_INDEX_TARG_LHS(1,TYPE),AW_INDEX_TARG_TOP(1,TYPE)   GDR7F404.232    
     &,              BL_INDEX_B_L(1,TYPE),BL_INDEX_B_R(1,TYPE)             GDR7F404.233    
     &,              AW_COLAT_T(1,TYPE),AW_LONG_L(1,TYPE),D1_IN_TMP        GDR7F404.234    
     &,              WEIGHT_T_R(1,TYPE),WEIGHT_B_R(1,TYPE)                 GDR7F404.235    
     &,              WEIGHT_T_L(1,TYPE),WEIGHT_B_L(1,TYPE),D1_OUT)         GDR7F404.236    
!                                                                          GDR7F404.237    
! make sure polar rows are constant.                                       GDR7F404.238    
!                                                                          GDR7F404.239    
              IF(GLOBAL)THEN                                               GDR7F404.240    
                IF(PPXREF_GRID_TYPE.LE.3)THEN                              GDR7F404.241    
! Horizontal Interpolation has made polar rows non-constant                GDR7F404.242    
                  WRITE(6,*) 'Horizontal Interpolation has made polar ',   GDR7F404.243    
     &                       'rows non-constant'                           GDR7F404.244    
                  WRITE(6,*) 'Averaging polar rows to make them ',         GDR7F404.245    
     &                       'constant'                                    GDR7F404.246    
!                                                                          GDR7F404.247    
!   North polar row                                                        GDR7F404.248    
                  RP_ROW_SUM=0                                             GDR7F404.249    
                  DO I=1,ROW_LENGTH_OUT                                    GDR7F404.250    
                    RP_ROW_SUM=RP_ROW_SUM+D1_OUT(POS_D1_OUT+I-1)           GDR7F404.251    
                  END DO                                                   GDR7F404.252    
                  DO I=1,ROW_LENGTH_OUT                                    GDR7F404.253    
                    D1_OUT(POS_D1_OUT+I-1)=RP_ROW_SUM/ROW_LENGTH_OUT       GDR7F404.254    
                  END DO                                                   GDR7F404.255    
!   South polar row                                                        GDR7F404.256    
                  RP_ROW_SUM=0                                             GDR7F404.257    
                  DO I=1,ROW_LENGTH_OUT                                    GDR7F404.258    
                    RP_ROW_SUM=                                            GDR7F404.259    
     &              RP_ROW_SUM+D1_OUT(POS_D1_OUT+                          GDR7F404.260    
     &              (P_ROWS_OUT-1)*ROW_LENGTH_OUT+I-1)                     GDR7F404.261    
                  END DO                                                   GDR7F404.262    
                  DO I=1,ROW_LENGTH_OUT                                    GDR7F404.263    
                    D1_OUT(POS_D1_OUT+(P_ROWS_OUT-1)*                      GDR7F404.264    
     &              ROW_LENGTH_OUT+I-1)=RP_ROW_SUM/ROW_LENGTH_OUT          GDR7F404.265    
                  ENDDO                                                    GDR7F404.266    
                ENDIF                                                      GDR7F404.267    
              ENDIF                                                        GDR7F404.268    
                                                                           GDR7F404.269    
C Correct land-compressed fields along coasts after interpolation as       GDR7F404.270    
C missing data will have been interpolated from sea pts on source grid.    GDR7F404.271    
C Also fill in data at unresolved land and sea points on target grid.      GDR7F404.272    
              IF(PP_LS_IN(POS).EQ.1) THEN                                  GDR7F404.273    
                                                                           GDR7F404.274    
                DO I=1,COASTAL_POINTS                                      GDR7F404.275    
                  D1_OUT(POS_D1_OUT-1+INDEX_OUT(I))=D1_IN(POS_D1_IN-1      GDR7F404.276    
     &                                             +INDEX_IN(I))           GDR7F404.277    
                ENDDO                                                      GDR7F404.278    
                                                                           GDR7F404.279    
                IF(LSPIRAL_S)THEN                                          GDR7F404.280    
                  DO I=1,P_FIELD_OUT                                       GDR7F404.281    
                    INDEX_TARG_SEA_X(I)=INDEX_TARG_SEA(I)                  GDR7F404.282    
                    INDEX_TARG_LAND_X(I)=INDEX_TARG_LAND(I)                GDR7F404.283    
                    LAND_SEA_MASK_X(I)=0                                   GDR7F404.284    
                    IF(LAND_SEA_MASK_OUT(I)) LAND_SEA_MASK_X(I)=1          GDR7F404.285    
                  ENDDO                                                    GDR7F404.286    
                  SEA_POINTS_UNRESX=SEA_POINTS_UNRES                       GDR7F404.287    
                  LAND_POINTS_UNRESX=LAND_POINTS_UNRES                     GDR7F404.288    
                                                                           GDR7F404.289    
C                                                                          GDR7F404.290    
C Call INTF_COAST_AJ to find values for unresolved points                  GDR7F404.291    
                  CALL INTF_COAST_AJ(LAND_SEA_MASK_X,INDEX_TARG_SEA_X      GDR7F404.292    
     &,                    SEA_POINTS_UNRESX,P_ROWS_OUT,ROW_LENGTH_OUT,    GDR7F404.293    
     &                     D1_OUT(POS_D1_OUT),0,CYCLIC,MAXDIM)             GDR7F404.294    
                  CALL INTF_COAST_AJ(LAND_SEA_MASK_X,INDEX_TARG_LAND_X     GDR7F404.295    
     &,                    LAND_POINTS_UNRESX,P_ROWS_OUT,ROW_LENGTH_OUT,   GDR7F404.296    
     &                     D1_OUT(POS_D1_OUT),1,CYCLIC,MAXDIM)             GDR7F404.297    
                                                                           GDR7F404.298    
                ELSE                                                       GDR7F404.299    
                                                                           GDR7F404.300    
                  DO I=1,LAND_POINTS_UNRES                                 GDR7F404.301    
                    D1_OUT(POS_D1_OUT-1+INDEX_TARG_LAND(I))                GDR7F404.302    
     &              =D1_OUT(POS_D1_OUT-1+LAND_UNRES_INDEX(I))              GDR7F404.303    
                  ENDDO                                                    GDR7F404.304    
                  DO I=1,SEA_POINTS_UNRES                                  GDR7F404.305    
                    D1_OUT(POS_D1_OUT-1+INDEX_TARG_SEA(I))                 GDR7F404.306    
     &              =D1_OUT(POS_D1_OUT-1+SEA_UNRES_INDEX(I))               GDR7F404.307    
                  ENDDO                                                    GDR7F404.308    
                                                                           GDR7F404.309    
                ENDIF                                                      GDR7F404.310    
              ENDIF                                                        GDR7F404.311    
                                                                           GDR7F404.312    
! Ensure that canopy water content is not negative                         GDR7F404.313    
              DO I=1,P_FIELD_OUT                                           GDR7F404.314    
                IF(D1_OUT(I).LT.0.)D1_OUT(I)=0.                            GDR7F404.315    
              ENDDO                                                        GDR7F404.316    
                                                                           GDR7F404.317    
! interpolate back to land points                                          GDR7F404.318    
              CALL TO_LAND_POINTS (D1_OUT,D1_OUT,                          GDR7F404.319    
     &                     LAND_SEA_MASK_OUT,P_FIELD_OUT,LAND_POINTS)      GDR7F404.320    
                                                                           GDR7F404.321    
            ELSE  ! No horiz interpolation                                 GDR7F404.322    
                                                                           GDR7F404.323    
              DO I=1,LAND_POINTS                                           GDR7F404.324    
                D1_OUT(I) = D1_IN(I)                                       GDR7F404.325    
              ENDDO                                                        GDR7F404.326    
                                                                           GDR7F404.327    
            ENDIF ! end of test on HORIZ                                   GDR7F404.328    
                                                                           GDR7F404.329    
!           write out canopy water on non-ice tiles to output dump         GDR7F404.330    
            CALL LOCATE (229,PP_ITEMC_OUT,N_TYPES_OUT,POS)                 GDR7F404.331    
            DO I=1,NTYPE-1                                                 GDR7F404.332    
            CALL WRITFLDS (NFTOUT,1,PP_POS_OUT(POS)+I-1,                   GDR7F404.333    
     &                     LOOKUP_OUT,LEN1_LOOKUP_OUT,                     GDR7F404.334    
     &                     D1_OUT,LAND_POINTS,FIXHD_OUT,                   GDR7F404.335    
*CALL ARGPPX                                                               GDR7F404.336    
     &                     ICODE,CMESSAGE)                                 GDR7F404.337    
            IF (ICODE.GT.0) THEN                                           GDR7F404.338    
              WRITE (6,*) ' Problem in WRITFLDS - ',                       GDR7F404.339    
     &                    ' Stash Code ',PP_ITEMC_OUT(J),                  GDR7F404.340    
     &                    ' Pseudo level ',I                               GDR7F404.341    
              CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)              GDR7F404.342    
            END IF                                                         GDR7F404.343    
            WRITE (6,*) ' Prognostic - Stash Code ',PP_ITEMC_OUT(J),       GDR7F404.344    
     &                  ' Pseudo Level ',I,' initialised',                 GDR7F404.345    
     &                  ' from Gridbox Mean Canopy Water'                  GDR7F404.346    
                                                                           GDR7F404.347    
            ENDDO                                                          GDR7F404.348    
                                                                           GDR7F404.349    
         ELSEIF (PP_ITEMC_OUT(J).EQ.231 .AND.  !  Snow Grain Size          GDR7F404.350    
     &           MODEL.EQ.ATMOS_IM      .AND.                              GDR7F404.351    
     &           L_SNOW_ALBEDO          .AND.                              GDR7F404.352    
     &           PP_SOURCE_OUT(J).EQ.8) THEN                               GDR7F404.353    
                                                                           GDR7F404.354    
!           S=8 is not set in the UMUI for this field. It is set in        GDR7F404.355    
!           loop 1400 if no field is found in the input dump.              GDR7F404.356    
                                                                           GDR7F404.357    
            WRITE (6,*) ' '                                                GDR7F404.358    
            WRITE (6,*) ' No SNOW GRAIN SIZE found in input dump '         GDR7F404.359    
            WRITE (6,*) ' SNOW GRAIN SIZE being initialised '              GDR7F404.360    
                                                                           GDR7F404.361    
            DO I= 1,P_FIELD_OUT                                            GDR7F404.362    
              D1_TEMP(I) = 50.0                                            GDR7F404.363    
            END DO                                                         GDR7F404.364    
                                                                           GDR7F404.365    
            CALL LOCATE (231,PP_ITEMC_OUT,N_TYPES_OUT,POS)                 GDR7F404.366    
            CALL WRITFLDS (NFTOUT,1,PP_POS_OUT(POS),                       GDR7F404.367    
     &                     LOOKUP_OUT,LEN1_LOOKUP_OUT,                     GDR7F404.368    
     &                     D1_TEMP,P_FIELD_OUT,FIXHD_OUT,                  GDR7F404.369    
*CALL ARGPPX                                                               GDR7F404.370    
     &                     ICODE,CMESSAGE)                                 GDR7F404.371    
            IF (ICODE.GT.0) THEN                                           GDR7F404.372    
              WRITE (6,*) ' Problem with writing SNOW GRAIN SIZE field'    GDR7F404.373    
              CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)              GDR7F404.374    
            END IF                                                         GDR7F404.375    
            WRITE (6,*) ' SNOW GRAIN SIZE (Stash Code 231) has ',          GDR7F404.376    
     &                   'been initialised to 50.0'                        GDR7F404.377    
                                                                           GDR7F404.378    
          ELSEIF ((PP_ITEMC_OUT(J).EQ.232)   .AND.                         ABX2F405.3      
     &             MODEL.EQ.ATMOS_IM         .AND.                         ABX2F405.4      
     &            (L_TRIFFID.OR.L_VEG_FRACS) .AND.                         ABX2F405.5      
     &             PP_SOURCE_OUT(J).EQ.8) THEN                             ABX2F405.6      
                                                                           ABX2F405.7      
!           S=8 is not set in the UMUI for this field. It is set in        ABX2F405.8      
!           loop 1400 if no field is found in the input dump.              ABX2F405.9      
                                                                           ABX2F405.10     
            WRITE (6,*) ' '                                                ABX2F405.11     
            WRITE (6,*) ' Prognostic - Stash Code ',PP_ITEMC_OUT(J),       ABX2F405.12     
     &                  ' - not found in input dump.'                      ABX2F405.13     
                                                                           ABX2F405.14     
! If not present in the input dump, item 232 (snow temperature) is         ABX2F405.15     
! initialised to item 20 level 1 (temperature of top soil layer).          ABX2F405.16     
                                                                           ABX2F405.17     
!           Find surface temperature in output dump                        ABX2F405.18     
            CALL LOCATE (20,PP_ITEMC_OUT,N_TYPES_OUT,POS)                  ABX2F405.19     
            IF (POS.EQ.0) THEN                                             ABX2F405.20     
              WRITE (6,*) ' Soil Layer Temperature not in output dump.'    ABX2F405.21     
              WRITE (6,*) ' Prognostic - Stash Code ',PP_ITEMC_OUT(J),     ABX2F405.22     
     &                    ' cannot be initialised.'                        ABX2F405.23     
              CALL ABORT                                                   ABX2F405.24     
            ENDIF                                                          ABX2F405.25     
                                                                           ABX2F405.26     
!           Read in temperature of top soil layer                          ABX2F405.27     
            CALL READFLDS (NFTOUT,1,PP_POS_OUT(POS),                       ABX2F405.28     
     &                     LOOKUP_OUT,LEN1_LOOKUP_OUT,                     ABX2F405.29     
     &                     D1_TEMP,LAND_POINTS,FIXHD_OUT,                  ABX2F405.30     
*CALL ARGPPX                                                               ABX2F405.31     
     &                     ICODE,CMESSAGE)                                 ABX2F405.32     
            IF (ICODE.GT.0) THEN                                           ABX2F405.33     
              WRITE (6,*) ' Problem in READFLDS for Soil Temp.',           ABX2F405.34     
     &                    ' Stash Code ',PP_ITEMC_OUT(J)                   ABX2F405.35     
              CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)              ABX2F405.36     
            END IF                                                         ABX2F405.37     
                                                                           ABX2F405.38     
!           Find position of field in output dump                          ABX2F405.39     
            CALL LOCATE (PP_ITEMC_OUT(J),PP_ITEMC_OUT,N_TYPES_OUT,POS)     ABX2F405.40     
                                                                           ABX2F405.41     
!           Write fields to output dump.                                   ABX2F405.42     
                                                                           ABX2F405.43     
            CALL WRITFLDS (NFTOUT,1,PP_POS_OUT(POS),                       ABX2F405.44     
     &                     LOOKUP_OUT,LEN1_LOOKUP_OUT,                     ABX2F405.45     
     &                     D1_TEMP,LAND_POINTS,FIXHD_OUT,                  ABX2F405.46     
*CALL ARGPPX                                                               ABX2F405.47     
     &                       ICODE,CMESSAGE)                               ABX2F405.48     
            IF (ICODE.GT.0) THEN                                           ABX2F405.49     
              WRITE (6,*) ' Problem in WRITFLDS - ',                       ABX2F405.50     
     &                    ' Stash Code ',PP_ITEMC_OUT(J)                   ABX2F405.51     
              CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)              ABX2F405.52     
            END IF                                                         ABX2F405.53     
            WRITE (6,*) ' Prognostic - Stash Code ',PP_ITEMC_OUT(J),       ABX2F405.54     
     &                  ' initialised to top soil layer temperature'       ABX2F405.55     
                                                                           ABX2F405.56     
          ELSEIF ((PP_ITEMC_OUT(J).EQ.233)   .AND.                         ABX2F405.57     
     &             MODEL.EQ.ATMOS_IM         .AND.                         GDR7F404.381    
     &            (L_TRIFFID.OR.L_VEG_FRACS) .AND.                         GDR7F404.382    
     &             PP_SOURCE_OUT(J).EQ.8) THEN                             GDR7F404.383    
                                                                           GDR7F404.384    
!           S=8 is not set in the UMUI for this field. It is set in        GDR7F404.385    
!           loop 1400 if no field is found in the input dump.              GDR7F404.386    
                                                                           GDR7F404.387    
            WRITE (6,*) ' '                                                GDR7F404.388    
            WRITE (6,*) ' Prognostic - Stash Code ',PP_ITEMC_OUT(J),       GDR7F404.389    
     &                  ' - not found in input dump.'                      GDR7F404.390    
                                                                           GDR7F404.391    
! If not present in the input dump, item 232 (surface temperature on       ABX2F405.58     
! tiles) is initialised to item 24 (surface temperature).                  ABX2F405.59     
                                                                           GDR7F404.395    
!           Find surface temperature in output dump                        GDR7F404.396    
            CALL LOCATE (24,PP_ITEMC_OUT,N_TYPES_OUT,POS)                  GDR7F404.397    
            IF (POS.EQ.0) THEN                                             GDR7F404.398    
              WRITE (6,*) ' Surface Temperature not in output dump.'       GDR7F404.399    
              WRITE (6,*) ' Prognostic - Stash Code ',PP_ITEMC_OUT(J),     GDR7F404.400    
     &                    ' cannot be initialised.'                        GDR7F404.401    
              CALL ABORT                                                   GDR7F404.402    
            ENDIF                                                          GDR7F404.403    
                                                                           GDR7F404.404    
!           Read in surface temperature                                    GDR7F404.405    
            CALL READFLDS (NFTOUT,1,PP_POS_OUT(POS),                       GDR7F404.406    
     &                     LOOKUP_OUT,LEN1_LOOKUP_OUT,                     GDR7F404.407    
     &                     D1_TEMP,P_FIELD_OUT,FIXHD_OUT,                  GDR7F404.408    
*CALL ARGPPX                                                               GDR7F404.409    
     &                     ICODE,CMESSAGE)                                 GDR7F404.410    
            IF (ICODE.GT.0) THEN                                           GDR7F404.411    
              WRITE (6,*) ' Problem in READFLDS for Surface Temp.',        GDR7F404.412    
     &                    ' Stash Code ',PP_ITEMC_OUT(J)                   GDR7F404.413    
              CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)              GDR7F404.414    
            END IF                                                         GDR7F404.415    
                                                                           GDR7F404.416    
!           Set up field on land points                                    GDR7F404.417    
            CALL TO_LAND_POINTS(D1_TEMP,D1_TEMP,                           GDR7F404.418    
     &                   LAND_SEA_MASK_OUT,P_FIELD_OUT,LAND_POINTS)        GDR7F404.419    
                                                                           GDR7F404.420    
!           Find position of field in output dump                          GDR7F404.421    
            CALL LOCATE (PP_ITEMC_OUT(J),PP_ITEMC_OUT,N_TYPES_OUT,POS)     GDR7F404.422    
                                                                           GDR7F404.423    
!           Set no of pseudo levels                                        ABX2F405.60     
            N_PSL = NTYPE                                                  ABX2F405.61     
                                                                           GDR7F404.427    
!           Write fields to output dump.                                   GDR7F404.428    
            DO I=1,N_PSL                                                   GDR7F404.429    
              CALL WRITFLDS (NFTOUT,1,PP_POS_OUT(POS)+I-1,                 GDR7F404.430    
     &                       LOOKUP_OUT,LEN1_LOOKUP_OUT,                   GDR7F404.431    
     &                       D1_TEMP,LAND_POINTS,FIXHD_OUT,                GDR7F404.432    
*CALL ARGPPX                                                               GDR7F404.433    
     &                       ICODE,CMESSAGE)                               GDR7F404.434    
              IF (ICODE.GT.0) THEN                                         GDR7F404.435    
                WRITE (6,*) ' Problem in WRITFLDS - ',                     GDR7F404.436    
     &                      ' Stash Code ',PP_ITEMC_OUT(J),                GDR7F404.437    
     &                      ' Pseudo level ',I                             GDR7F404.438    
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTOUT)            GDR7F404.439    
              END IF                                                       GDR7F404.440    
              WRITE (6,*) ' Prognostic - Stash Code ',PP_ITEMC_OUT(J),     GDR7F404.441    
     &                    ' Pseudo level ',I,                              GDR7F404.442    
     &                    ' initialised to Surface Temperature'            GDR7F404.443    
            ENDDO                                                          GDR7F404.444    
                                                                           UDG7F405.12     
          ELSEIF ((RadialGridIn.AND..NOT.RadialGridOut).AND.               UDG7F405.13     
     &             PP_ITEMC_OUT(J).EQ.90.AND.                              UDG7F405.14     
     &             PP_SOURCE_OUT(J).EQ.8)THEN                              UDG7F405.15     
                                                                           UDG7F405.16     
!           S=8 is not set in the UMUI for this field. It is set in        UDG7F405.17     
!           loop 1400 if no field is found in the input dump.              UDG7F405.18     
                                                                           UDG7F405.19     
            WRITE (6,*) ' '                                                UDG7F405.20     
            WRITE (6,*) ' No log aerosol concentration in input dump'      UDG7F405.21     
            WRITE (6,*) ' Log aerosol concentration being initialised.'    UDG7F405.22     
                                                                           UDG7F405.23     
! Getting level one log aerosol concentration from input dump              UDG7F405.24     
! Stash code 155                                                           UDG7F405.25     
            CALL LOCATE (155,PP_ITEMC_IN,N_TYPES_IN,POS)                   UDG7F405.26     
            IF (POS.EQ.0) THEN                                             UDG7F405.27     
              CMESSAGE =                                                   UDG7F405.28     
     &        'CONTROL : Problem initialising log aerosol concentration'   UDG7F405.29     
              WRITE (6,*) ' Log aerosol concentration',                    UDG7F405.30     
     &                    ' not found in input dump.'                      UDG7F405.31     
              WRITE (6,*) ' Total aerosol concentration',                  UDG7F405.32     
     &                    ' cannot be initialised'                         UDG7F405.33     
              CALL ABORT                                                   UDG7F405.34     
            ELSE                                                           UDG7F405.35     
              CALL READFLDS (NFTIN,1,PP_POS_IN(POS),LOOKUP_IN,             UDG7F405.36     
     &                       LEN1_LOOKUP_IN,D1_IN,P_FIELD_IN,FIXHD_IN,     UDG7F405.37     
*CALL ARGPPX                                                               UDG7F405.38     
     &                       ICODE,CMESSAGE)                               UDG7F405.39     
              IF (ICODE.GT.0) THEN                                         UDG7F405.40     
                WRITE (6,*) ' Problem with reading log aerosol',           UDG7F405.41     
     &                      ' concentration'                               UDG7F405.42     
                CALL ABORT_IO ('CONTROL',CMESSAGE,ICODE,NFTIN)             UDG7F405.43     
              ENDIF                                                        UDG7F405.44     
            ENDIF                                                          UDG7F405.45     
! do horizontal interpolation:                                             UDG7F405.46     
            TYPE=1                                                         UDG7F405.47     
            X_ROWS_IN=P_ROWS_IN                                            UDG7F405.48     
            X_ROWS_OUT=P_ROWS_OUT                                          UDG7F405.49     
            X_COLS_IN=ROW_LENGTH_IN                                        UDG7F405.50     
            X_COLS_OUT=ROW_LENGTH_OUT                                      UDG7F405.51     
            X_FIELD_IN=P_FIELD_IN                                          UDG7F405.52     
            X_FIELD_OUT=P_FIELD_OUT                                        UDG7F405.53     
            CALL H_INT_CTL(IDIM,X_FIELD_OUT,X_COLS_IN,X_COLS_OUT           UDG7F405.54     
     &,                    X_ROWS_IN,X_ROWS_OUT,AW_AREA_BOX(TYPE)          UDG7F405.55     
     &,                    GLOBAL,H_INT_TYPE                               UDG7F405.56     
     &,                    AW_INDEX_TARG_LHS(1,TYPE)                       UDG7F405.57     
     &,                    AW_INDEX_TARG_TOP(1,TYPE)                       UDG7F405.58     
     &,                    BL_INDEX_B_L(1,TYPE),BL_INDEX_B_R(1,TYPE)       UDG7F405.59     
     &,                    AW_COLAT_T(1,TYPE),AW_LONG_L(1,TYPE),D1_IN      UDG7F405.60     
     &,                    WEIGHT_T_R(1,TYPE),WEIGHT_B_R(1,TYPE)           UDG7F405.61     
     &,                    WEIGHT_T_L(1,TYPE),WEIGHT_B_L(1,TYPE),D1_OUT)   UDG7F405.62     
!                                                                          UDG7F405.63     
! make sure polar rows are constant.                                       UDG7F405.64     
!                                                                          UDG7F405.65     
            IF(GLOBAL)THEN                                                 UDG7F405.66     
              IF(PPXREF_GRID_TYPE.LE.3)THEN                                UDG7F405.67     
! Horizontal Interpolation has made polar rows non-constant                UDG7F405.68     
                write(6,*) 'Horizontal Interpolation has made ',           UDG7F405.69     
     &         'polar rows non-constant'                                   UDG7F405.70     
                write(6,*) 'Averaging polar rows to make them constant'    UDG7F405.71     
!                                                                          UDG7F405.72     
!   North polar row                                                        UDG7F405.73     
                RP_ROW_SUM=0                                               UDG7F405.74     
                DO I=1,ROW_LENGTH_OUT                                      UDG7F405.75     
                  RP_ROW_SUM=RP_ROW_SUM+D1_OUT(I)                          UDG7F405.76     
                END DO                                                     UDG7F405.77     
                DO I=1,ROW_LENGTH_OUT                                      UDG7F405.78     
                  D1_OUT(I)=RP_ROW_SUM/ROW_LENGTH_OUT                      UDG7F405.79     
                END DO                                                     UDG7F405.80     
!   South polar row                                                        UDG7F405.81     
                RP_ROW_SUM=0                                               UDG7F405.82     
                DO I=1,ROW_LENGTH_OUT                                      UDG7F405.83     
                  RP_ROW_SUM=                                              UDG7F405.84     
     &            RP_ROW_SUM+D1_OUT((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)       UDG7F405.85     
                END DO                                                     UDG7F405.86     
                DO I=1,ROW_LENGTH_OUT                                      UDG7F405.87     
                  D1_OUT((P_ROWS_OUT-1)*ROW_LENGTH_OUT+I)=                 UDG7F405.88     
     &                    RP_ROW_SUM/ROW_LENGTH_OUT                        UDG7F405.89     
                END DO                                                     UDG7F405.90     
              END IF                                                       UDG7F405.91     
            END IF                                                         UDG7F405.92     
                                                                           UDG7F405.93     
!           Find position of field in output dump                          UDG7F405.94     
            CALL LOCATE (PP_ITEMC_OUT(J),PP_ITEMC_OUT,N_TYPES_OUT,POS)     UDG7F405.95     
                                                                           UDG7F405.96     
! Write out log aerosol concentration increment at level one in            UDG7F405.97     
! the total aerosol concentration at level one.                            UDG7F405.98     
! This will be converted to total aerosol concentration in PF_inc2UM       UDG7F405.99     
            CALL WRITFLDS (NFTOUT,1,PP_POS_OUT(POS),                       UDG7F405.100    
     &                     LOOKUP_OUT,LEN1_LOOKUP_OUT,                     UDG7F405.101    
     &                     D1_OUT,P_FIELD_OUT,FIXHD_OUT,                   UDG7F405.102    
*CALL ARGPPX                                                               UDG7F405.103    
     &                     ICODE,CMESSAGE)                                 UDG7F405.104    
                                                                           UDG7F405.105    
                                                                           UDG7F405.106    
                                                                           GDR7F404.445    
          ENDIF                             ! PP_ITEMC etc                 UCB1F402.14     
                                                                           UDR1F400.129    
      ENDDO                                    ! N_TYPES                   UCB1F402.15     
                                                                           CONTROL1.1926   
C---------------------------------------------------------------------     CONTROL1.1927   
C If output grid on rotated grid read in  U & V fields from output         CONTROL1.1928   
C file, rotate winds and then write back to output file.                   CONTROL1.1929   
C---------------------------------------------------------------------     CONTROL1.1930   
                                                                           CONTROL1.1931   
      IF(ROT_OUT.AND.HORIZ)THEN                                            UDG4F400.5      
                                                                           CONTROL1.1933   
        ! Locate start position of u & v fields on O/P file                UIE2F401.90     
        IF (C_GRID_OUT) THEN                                               UIE2F401.91     
         CALL LOCATE(153,PP_ITEMC_OUT,N_TYPES_OUT,POSU)                    UIE2F401.92     
         CALL LOCATE(154,PP_ITEMC_OUT,N_TYPES_OUT,POSV)                    UIE2F401.93     
        ELSE                                                               UIE2F401.94     
         CALL LOCATE(2,PP_ITEMC_OUT,N_TYPES_OUT,POSU)                      UIE2F401.95     
         CALL LOCATE(3,PP_ITEMC_OUT,N_TYPES_OUT,POSV)                      UIE2F401.96     
        END IF                                                             UIE2F401.97     
                                                                           UIE2F401.98     
        ! Find number of levels in O/P dump.                               UIE2F401.99     
        N_FIELDS_OUT=PP_NUM_OUT(POSU)                                      UIE2F401.100    
                                                                           UIE2F401.101    
        ! ROTATE dimensions u,v separately to take account of              UIE2F401.102    
        ! the extra u row (v unchanged) on the C grid.                     UIE2F401.103    
        CALL ROTATE(                                                       UIE2F401.104    
*CALL ARGPPX                                                               UIE2F401.105    
     &              PP_ITEMC_OUT,PP_NUM_OUT,PP_POS_OUT,N_TYPES_OUT,        UIE2F401.106    
     &              LOOKUP_OUT,FIXHD_OUT,U_FIELD_OUT,COEFF1,COEFF2,        UIE2F401.107    
     &              NFTOUT,1,C_GRID_OUT,C_GRID_IN,N_FIELDS_OUT,            UIE2F401.108    
     &              U_ROWS_IN,U_ROWS_OUT,REALHD_OUT,                       UIE2F404.355    
     &              ROW_LENGTH_OUT,ROW_LENGTH_IN,POSU,POSV)                UIE2F401.109    
                                                                           CONTROL1.1936   
      ENDIF                                                                CONTROL1.1937   
                                                                           CONTROL1.1938   
C---------------------------------------------------------------           CONTROL1.1939   
C Reset QT in stratosphere                                                 CONTROL1.1940   
C---------------------------------------------------------------           CONTROL1.1941   
                                                                           CONTROL1.1942   
      IF(STRAT_Q)THEN                                                      CONTROL1.1943   
                                                                           CONTROL1.1944   
C Calculate exner pressure at output half levels                           CONTROL1.1945   
      DO K=1,P_LEVELS_OUT+1                                                CONTROL1.1946   
      DO I=1,P_FIELD_OUT                                                   CONTROL1.1947   
        PR_OUT=AKH_OUT(K)+BKH_OUT(K)*PSTAR_OUT(I)                          CONTROL1.1948   
       P_EXNER_HALF_TMP(I,K)=(PR_OUT/PREF)**KAPPA                          GSS9F402.71     
      ENDDO                                                                CONTROL1.1954   
      ENDDO                                                                CONTROL1.1955   
                                                                           CONTROL1.1956   
C Read THL into array D1_OUT                                               CONTROL1.1957   
      CALL LOCATE(5,PP_ITEMC_OUT,N_TYPES_OUT,POS)                          CONTROL1.1958   
      CALL READFLDS(NFTOUT,P_LEVELS_OUT,PP_POS_OUT(POS),LOOKUP_OUT,        GDG0F401.365    
     &              LEN1_LOOKUP_OUT,D1_OUT,P_FIELD_OUT,FIXHD_OUT,          GDG0F401.366    
*CALL ARGPPX                                                               GDG0F401.367    
     &              ICODE,CMESSAGE)                                        GDG0F401.368    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         CONTROL1.1961   
                                                                           CONTROL1.1962   
C Read QT into array P_HALF_TMP                                            CONTROL1.1963   
      CALL LOCATE(11,PP_ITEMC_OUT,N_TYPES_OUT,POS)                         CONTROL1.1964   
      CALL READFLDS(NFTOUT,Q_LEVELS_OUT,PP_POS_OUT(POS),LOOKUP_OUT,        GDG0F401.369    
     &              LEN1_LOOKUP_OUT,P_HALF_TMP,P_FIELD_OUT,FIXHD_OUT,      GDG0F401.370    
*CALL ARGPPX                                                               GDG0F401.371    
     &              ICODE,CMESSAGE)                                        GDG0F401.372    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         CONTROL1.1967   
                                                                           CONTROL1.1968   
C Read in topography                                                       CONTROL1.1969   
      CALL LOCATE(33,PP_ITEMC_OUT,N_TYPES_OUT,POS)                         CONTROL1.1970   
      CALL READFLDS(NFTOUT,1,PP_POS_OUT(POS),LOOKUP_OUT,LEN1_LOOKUP_OUT,   DR081293.64     
     &              TOPOG_OUT,P_FIELD_OUT,FIXHD_OUT,                       GDG0F401.373    
*CALL ARGPPX                                                               GDG0F401.374    
     &              ICODE,CMESSAGE)                                        GDG0F401.375    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         CONTROL1.1973   
                                                                           CONTROL1.1974   
C Reset stratospheric Q(=QT)                                               CONTROL1.1975   
      NBLP1=BL_LEVELS_OUT+1                                                CONTROL1.1976   
      CALL STRATQ( PSTAR_OUT,P_HALF_TMP,D1_OUT,TOPOG_OUT                   CONTROL1.1977   
     &,P_EXNER_HALF_TMP                                                    CONTROL1.1978   
     &,DUMMY,DUMMY             !  Dummy for QCF and QCL                    CONTROL1.1979   
     &,P_LEVELS_OUT,Q_LEVELS_OUT,P_FIELD_OUT                               CONTROL1.1980   
     &,LEVDEPC_OUT,LEVDEPC_OUT(P_LEVELS_OUT+1),AKH_OUT,BKH_OUT             CONTROL1.1981   
     &,DUMMY                   !  Dummy for RHCRIT                         CONTROL1.1982   
     &,NBLP1,ICODE,CMESSAGE)                                               CONTROL1.1983   
                                                                           CONTROL1.1984   
      IF(ICODE.NE.0)THEN                                                   CONTROL1.1985   
        WRITE(6,'('' *ERROR*  in CONTROL'')')                              CONTROL1.1986   
        WRITE(6,'(''ICODE='',I6)')ICODE                                    CONTROL1.1987   
        WRITE(6,'(A80)')CMESSAGE                                           CONTROL1.1988   
        CALL ABORT                                                         CONTROL1.1989   
      ENDIF                                                                CONTROL1.1990   
                                                                           CONTROL1.1991   
C Write out QT from array P_HALF_TMP                                       CONTROL1.1992   
      CALL LOCATE(11,PP_ITEMC_OUT,N_TYPES_OUT,POS)                         CONTROL1.1993   
      CALL WRITFLDS(NFTOUT,Q_LEVELS_OUT,PP_POS_OUT(POS),LOOKUP_OUT,        GDG0F401.376    
     &              LEN1_LOOKUP_OUT,P_HALF_TMP,P_FIELD_OUT,FIXHD_OUT,      GDG0F401.377    
*CALL ARGPPX                                                               GDG0F401.378    
     &              ICODE,CMESSAGE)                                        GDG0F401.379    
      IF(ICODE.NE.0)CALL ABORT_IO('CONTROL',CMESSAGE,ICODE,NFTOUT)         CONTROL1.1996   
                                                                           CONTROL1.1997   
      ENDIF                                                                CONTROL1.1998   
                                                                           CONTROL1.1999   
C---------------------------------------------------------------           CONTROL1.2000   
C Read in pre-analysed UARS fields and overwrite output file               CONTROL1.2001   
C---------------------------------------------------------------           CONTROL1.2002   
                                                                           CONTROL1.2003   
      IF(UARS)THEN                                                         CONTROL1.2004   
                                                                           CONTROL1.2005   
        CALL AUX_FILE(NFTUARS,NFTOUT,LEN_FIXHD_OUT,                        UDG7F400.193    
     &                LEN_INTHD_UARS,LEN_REALHD_UARS,                      UDG7F400.194    
     &                LEN1_LEVDEPC_UARS,LEN2_LEVDEPC_UARS,                 UDG7F400.195    
     &                LEN1_LOOKUP_OUT,LEN2_LOOKUP_UARS,                    UDG7F400.196    
     &                LEN_DATA_UARS,FIXHD_OUT,INTHD_OUT,                   UDG7F400.197    
     &                LEVDEPC_OUT,P_LEVELS_OUT,LEN1_LEVDEPC_OUT,           UDG7F400.198    
     &                N_TYPES_OUT,P_FIELD_OUT,LOOKUP_OUT,                  UDG7F400.199    
     &                PP_POS_OUT,PP_ITEMC_OUT,-1,                          UDG7F400.200    
     &                ROW_LENGTH_IN,P_ROWS_IN,                             UDG0F404.132    
     &                ROW_LENGTH_OUT,P_ROWS_OUT,LPOLARCHK,                 UDG0F404.133    
*CALL ARGPPX                                                               UDG7F400.201    
     &                IMDI,.FALSE.)                                        UDG7F400.202    
                                                                           CONTROL1.2012   
                                                                           CONTROL1.2013   
      ENDIF                                                                CONTROL1.2014   
                                                                           AD221292.101    
C---------------------------------------------------------------           AD221292.102    
C Transplant data from another dump file                                   AD221292.103    
C---------------------------------------------------------------           AD221292.104    
                                                                           AD221292.105    
      IF(TRANS)THEN                                                        AD221292.106    
                                                                           AD221292.107    
        WRITE(6,*)'TRANSPLANTING DATA'                                     UDG7F400.203    
        CALL AUX_FILE(NFTTRANS,NFTOUT,LEN_FIXHD_OUT,                       UDG7F400.204    
     &                LEN_INTHD_TRANS,LEN_REALHD_TRANS,                    UDG7F400.205    
     &                LEN1_LEVDEPC_TRANS,LEN2_LEVDEPC_TRANS,               UDG7F400.206    
     &                LEN1_LOOKUP_OUT,LEN2_LOOKUP_TRANS,                   UDG7F400.207    
     &                LEN_DATA_TRANS,FIXHD_OUT,INTHD_OUT,                  UDG7F400.208    
     &                LEVDEPC_OUT,P_LEVELS_OUT,LEN1_LEVDEPC_OUT,           UDG7F400.209    
     &                N_TYPES_OUT,P_FIELD_OUT,LOOKUP_OUT,                  UDG7F400.210    
     &                PP_POS_OUT,PP_ITEMC_OUT,0,                           UDG7F400.211    
     &                ROW_LENGTH_IN,P_ROWS_IN,                             UDG0F404.134    
     &                ROW_LENGTH_OUT,P_ROWS_OUT,LPOLARCHK,                 UDG0F404.135    
*CALL ARGPPX                                                               UDG7F400.212    
     &                IMDI,.FALSE.)                                        UDG7F400.213    
                                                                           AD221292.115    
                                                                           AD221292.116    
      ENDIF                                                                AD221292.117    
      DEALLOCATE (D1_IN,STAT=STATUS)                                       UDG4F405.64     
      DEALLOCATE (D1_OUT,STAT=STATUS)                                      UDG4F405.65     
      DEALLOCATE (D1_TMP,STAT=STATUS)                                      UDG4F405.66     
      DEALLOCATE (D1_TEMP,STAT=STATUS)                                     UDG4F405.67     
      DEALLOCATE (D1_IN_TMP,STAT=STATUS)                                   UDG4F405.68     
      DEALLOCATE (P_TMP,STAT=STATUS)                                       UDG4F405.69     
      DEALLOCATE (PSTAR_OUT,STAT=STATUS)                                   UDG4F405.70     
      DEALLOCATE (P_OUT,STAT=STATUS)                                       UDG4F405.71     
      DEALLOCATE (P_HALF_TMP,STAT=STATUS)                                  UDG4F405.72     
      DEALLOCATE (P_EXNER_HALF_TMP,STAT=STATUS)                            UDG4F405.73     
      DEALLOCATE (TOPOG_OUT,STAT=STATUS)                                   UDG4F405.74     
      DEALLOCATE (TOPOG_OLD,STAT=STATUS)                                   UDG4F405.75     
      DEALLOCATE (THR_OUT,STAT=STATUS)                                     UDG4F405.76     
                                                                           UDG4F405.77     
                                                                           UDG3F402.775    
      RETURN                                                               UDG3F402.776    
      END                                                                  CONTROL1.2021   
                                                                           CONTROL1.2022   
*ENDIF                                                                     CONTROL1.2023