*IF DEF,C82_1A,OR,DEF,RECON                                                INANCA1A.2      
C ******************************COPYRIGHT******************************    GTS2F400.4483   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.4484   
C                                                                          GTS2F400.4485   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.4486   
C restrictions as set forth in the contract.                               GTS2F400.4487   
C                                                                          GTS2F400.4488   
C                Meteorological Office                                     GTS2F400.4489   
C                London Road                                               GTS2F400.4490   
C                BRACKNELL                                                 GTS2F400.4491   
C                Berkshire UK                                              GTS2F400.4492   
C                RG12 2SZ                                                  GTS2F400.4493   
C                                                                          GTS2F400.4494   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.4495   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.4496   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.4497   
C Modelling at the above address.                                          GTS2F400.4498   
C ******************************COPYRIGHT******************************    GTS2F400.4499   
C                                                                          GTS2F400.4500   
CLL Subroutine INANCILA                                                    INANCA1A.3      
CLL                                                                        INANCA1A.4      
CLL Purpose : Takes as input,the code defining the frequency of update     INANCA1A.5      
CLL           of ancillary fields as set by the user interface.            INANCA1A.6      
CLL           Converts them into a list of numbers of timesteps after      INANCA1A.7      
CLL           which each field must be updated, and calculates the         INANCA1A.8      
CLL           frequency with which this list must be interrogated.         INANCA1A.9      
CLL           Where the update interval is in months or years,             INANCA1A.10     
CLL           the check will be carried out each day. The physical         INANCA1A.11     
CLL           files required are also determined by input code,            INANCA1A.12     
CLL           and the headers and lookup tables are read into              INANCA1A.13     
CLL           the arguments FIXHD,INTHD,LOOKUP which are in                INANCA1A.14     
CLL           COMMON/ANCILHDA/ of calling routine INANCCTL.                INANCA1A.15     
CLL           Indexes for each possible ancillary field are set up in      INANCA1A.16     
CLL           COMMON/IXANCILA/                                             INANCA1A.17     
CLL                                                                        INANCA1A.18     
CLL Level 2 Control routine for CRAY YMP                                   INANCA1A.19     
CLL                                                                        INANCA1A.20     
CLL CW, DR      <- programmer of some or all of previous code or changes   INANCA1A.21     
CLL                                                                        INANCA1A.22     
CLL  Model            Modification history from model version 3.0:         INANCA1A.23     
CLL version  Date                                                          INANCA1A.24     
CLL   3.1  22/02/93  Changes to add 2 SLAB fields (STASH items 178,179)    TJ240293.7      
CLL                  - to be updated from existing atmosphere files.       TJ240293.8      
CLL   3.3  22/11/93  Add aerosol ancillary fields.  R T H Barnes.          ADR1F304.107    
CLL   3.3  21/12/93  Fix put in to prevent array 'out of bounds'           DR211293.4      
CLL                  problem in section 1.6. Problem to be investigated    DR211293.5      
CLL                  for 3.4 D. Robinson.                                  DR211293.6      
CLL   3.4  16/06/94  DEF CAL360 replaced by LOGICAL LCAL360                GSS1F304.341    
CLL                                                   S.J.Swarbrick        GSS1F304.342    
CLL  3.4  05/09/94  Add murk and user ancillary fields.  RTHBarnes.        GRB0F304.56     
CLL   3.4  22/06/94  Array 'out of bounds' problem solved. D. Robinson     ADR1F304.108    
CLL  3.4   11/10/94   Part of modset which sorts out some handling         UDG7F304.49     
CLL                   of unset data by recon_dump.                         UDG7F304.50     
CLL                   Necessary to port model to a T3D.                    UDG7F304.51     
CLL                   Author D.M. Goddard                                  UDG7F304.52     
CLL   3.5  24/03/95    Changed OPEN to FILE_OPEN  P.Burton                 GPB1F305.42     
CLL  3.5  24/07/95  Check fields for updating have valid address. RTHB     GRB4F305.220    
!    4.0  01/09/95  Add diagnostic information to output about             UDG6F400.56     
!                   ozone ancillary fields and test correct ozone          UDG6F400.57     
!                   data provided.  D. Goddard & D. Robinson               UDG6F400.58     
CLL  4.0  10/10/95  Set LOOKUP(45) in ancillary files. D. Robinson.        GDR7F400.20     
CLL                                                                        INANCA1A.26     
CLL  4.0  29/09/95  Need extra rewind of namelist file. RTHBarnes.         GRB1F400.84     
CLL  4.0  05/08/95  Temporary solution to get round problem of             AJS1F400.1      
CLL                 no. of soil moisture levels being hard-wired           AJS1F400.2      
CLL                 to no. of deep soil temperature levels                 AJS1F400.3      
CLL                 This causes a problem with introduction of             AJS1F400.4      
CLL                 Penman-Monteith BL code at 4.0 - use if test           AJS1F400.5      
CLL                 on number of deep soil temperature                     AJS1F400.6      
CLL                 levels which is set to 4 for Penman-Monteith code      AJS1F400.7      
CLL                 (set to 3 for all other BL options)                    AJS1F400.8      
CLL                 Permanent solution suggested for 4.1                   AJS1F400.9      
CLL                 search on C**** for comments                           AJS1F400.10     
CLL                 J Smith                                                AJS1F400.11     
CLL  4.0  06/01/96  SI array received for two internal models (atmos       GDR8F400.71     
CLL                 and slab) in argument list. Hardwire processing of     GDR8F400.72     
CLL                 slab ancillary field (item code 177) to use            GDR8F400.73     
CLL                 SI_SLAB. D. Robinson                                   GDR8F400.74     
!    4.1  03/05/96  Use READHEAD to read in ancillary file headers.        APB4F401.589    
!                   D. Robinson                                            APB4F401.590    
!    4.1  18/06/96  Changes to cope with changes in STASH addressing       GDG0F401.755    
!                   Author D.M. Goddard.                                   GDG0F401.756    
CLL  4.1  22/05/96  Call new CANC* comdecks. Use new arrays in             GDR1F401.71     
CLL                 CANCFLDA. Cater for new sulphur ancillary files.       GDR1F401.72     
CLL                 Remove hardwired fix for slab ancillary fields         GDR1F401.73     
CLL                 introduced at 4.0 D. Robinson.                         GDR1F401.74     
!LL  4.4  28/07/97  Add LAMIPII to namelist for special updating of        GRS2F404.214    
!LL                 ice in AMIP II runs. R A Stratton                      GRS2F404.215    
CLL  4.4  16/09/97  Set number of headers for multi-pseudo-level           ABX2F404.63     
CLL                 ancillary fields for surface and vegetation types.     ABX2F404.64     
CLL                                              Richard Betts             ABX2F404.65     
!LL  4.4  09/09/97  New namelist UPANCA for updating information.          GDR6F404.1      
!LL                 D. Robinson.                                           GDR6F404.2      
!LL  4.4  10/09/97  Check calendar indicator in Anc File. D Robinson.      GDR6F404.76     
!    4.5  22/10/98  Set LEVELS array for new user hulti-layer              GDG2F405.107    
!                   ancillary fields                                       GDG2F405.108    
!                   Author D.M Goddard                                     GDG2F405.109    
!LL  4.5  19/01/98  Remove SOIL_VARS and VEG_VARS. D. Robinson.            GDR6F405.7      
!LL  4.5  05/05/98  Improve error message for missing files. R. Rawlins    GRR1F405.20     
CLL                                                                        GDR8F400.75     
CLL System components covered : C710                                       INANCA1A.27     
CLL                                                                        INANCA1A.28     
CLL System task : C7                                                       INANCA1A.29     
CLL                                                                        INANCA1A.30     
CLL Documentation : Unified Model Documentation Paper No C7                INANCA1A.31     
CLL                 Version No 4  dated 15/06/90                           INANCA1A.32     
CLLEND                                                                     INANCA1A.33     

      SUBROUTINE INANCILA(LEN_FIXHD,LEN_INTHD,LEN_REALHD,  !Intent (In)     2,5UJS1F401.278    
     &                    LEN1_LEVDEPC,LEN2_LEVDEPC,                       UJS1F401.279    
     &                    FIXHD,INTHD,REALHD,LOOKUP,                       UJS1F401.280    
     &                    A_FIXHD,A_REALHD,A_LEVDEPC,                      UJS1F401.281    
     &                    NDATASETS,NLOOKUPS,FTNANCIL,                     UJS1F401.282    
     &                    LOOKUP_START,LEN1_LOOKUP,ROW_LENGTH,             UJS1F401.283    
     &                    P_ROWS,U_ROWS,P_LEVELS,                          UJS1F401.284    
     &                    TR_LEVELS,ST_LEVELS,SM_LEVELS,                   UJS1F401.285    
     &                    OZONE_LEVELS,TITLE,                              UJS1F401.286    
*IF -DEF,RECON                                                             GDG0F401.757    
     &                    SI_ATMOS,SI_SLAB,SILEN,                          GDG0F401.758    
     &                    ANCILLARY_STEPS,STEPS_PER_HR,                    GDG0F401.760    
*CALL ARGPPX                                                               GDG0F401.761    
     &                    ICODE,CMESSAGE,LCAL360)         ! Intent (Out)   GDG0F401.762    
*ELSE                                                                      GDG0F401.763    
     &                    SWITCH,NSWITCH,                                  GDG0F401.764    
     &                    L_SSTANOM_SWITCH,D1_ANCILADD_PARM,               GDG0F401.765    
*CALL ARGPPX                                                               GDG0F401.766    
     &                    IOUNIT,ICODE,CMESSAGE,LCAL360)  ! Intent (Out)   GDG0F401.767    
*ENDIF                                                                     GDG0F401.768    
                                                                           GDG0F401.769    
                                                                           INANCA1A.58     
      IMPLICIT NONE                                                        INANCA1A.59     
                                                                           INANCA1A.60     
      LOGICAL LCAL360  ! Logical switch for 360-day calendar               GSS1F304.344    
                                                                           GSS1F304.345    
      INTEGER                                                              INANCA1A.61     
     &        LEN_FIXHD,       ! Length of header blocks in ancillary      INANCA1A.62     
C                              ! data sets                                 INANCA1A.63     
     &        LEN_INTHD,       !                                           INANCA1A.64     
     &        LEN_REALHD,      !                                           INANCA1A.65     
     &        LEN1_LEVDEPC,    ! Dimension of LEVDEPC in model             INANCA1A.66     
     &      LEN2_LEVDEPC                                                   INANCA1A.67     
*IF -DEF,RECON                                                             INANCA1A.68     
     &     ,ANCILLARY_STEPS,                                               INANCA1A.69     
     &        STEPS_PER_HR                                                 INANCA1A.70     
*ENDIF                                                                     INANCA1A.71     
                                                                           INANCA1A.72     
*IF DEF,RECON                                                              INANCA1A.73     
                                                                           INANCA1A.74     
     &        ,NSWITCH,        ! No of ancillary fields being updated      INANCA1A.75     
C                              ! at reconfigeration                        INANCA1A.76     
     &         SWITCH(NSWITCH),! Control switches at reconfigeration       INANCA1A.77     
     &  D1_ANCILADD_PARM !Address of ancillary field in main data block    INANCA1A.78     
     & (NSWITCH)         !passed back thro arg list. Same as D1_ANCILADD   INANCA1A.79     
                                                                           INANCA1A.80     
      LOGICAL                                                              INANCA1A.81     
     &         L_SSTANOM_SWITCH ! switch for sst anomaly creation          INANCA1A.82     
                                                                           INANCA1A.83     
*ENDIF                                                                     INANCA1A.84     
                                                                           INANCA1A.85     
      INTEGER                                                              INANCA1A.86     
     &        NDATASETS,       ! No of physical files                      INANCA1A.87     
     &        NLOOKUPS,        ! No of lookups required(set by User I.)    INANCA1A.88     
     &                IOUNIT,                                              INANCA1A.89     
     &        FTNANCIL(NDATASETS), ! Fortran nos of physical files         INANCA1A.90     
     &        LOOKUP_START(NDATASETS),!start of each individual lookup     INANCA1A.91     
C                                     !in overall LOOKUP array             INANCA1A.92     
     &        LEN1_LOOKUP,     ! Length of PP header                       INANCA1A.93     
     &        ROW_LENGTH,      ! Atmosphere model dimensions               INANCA1A.94     
     &        P_ROWS,          ! No. of rows for pressure-type variables   RB221193.22     
     &        U_ROWS,          ! No. of rows for wind-type variables       RB221193.23     
     &        P_LEVELS,        ! No. of pressure levels                    RB221193.24     
     &        TR_LEVELS,       ! No. of tracer levels                      RB221193.25     
     &        FILE_LEVELS,     ! Number of levels of data in files         INANCA1A.102    
C                              ! contining multi-level data.               INANCA1A.103    
     &        ST_LEVELS,       ! No. of soil temperature levels            UJS1F401.287    
     &        SM_LEVELS,       ! No. of soil moisture levels               UJS1F401.288    
     &      OZONE_LEVELS                                                   INANCA1A.105    
*IF -DEF,RECON                                                             INANCA1A.106    
                                                                           GDR8F400.77     
!      For atmos only runs SI_SLAB is a copy of SI_ATMOS                   GDR8F400.78     
!      SI_SLAB is only used in SLAB runs.                                  GDR8F400.79     
                                                                           GDR8F400.80     
     &       ,SILEN             ! Length for SI_ATMOS/SLAB arrays          GDR8F400.81     
     &       ,SI_ATMOS(SILEN)   ! ) STASHin addresses of atmos and         GDR8F400.82     
     &       ,SI_SLAB(SILEN)    ! ) slab ancillary fields.                 GDR8F400.83     
*ENDIF                                                                     INANCA1A.109    
      CHARACTER*80 TITLE(NDATASETS) ! Titles of each dataset               INANCA1A.110    
                                                                           INANCA1A.111    
      INTEGER                                                              INANCA1A.112    
     &        FIXHD(LEN_FIXHD,NDATASETS),! Overall Fixed header array      INANCA1A.113    
     &        A_FIXHD(LEN_FIXHD), ! Fixed header for Dump                  AJS1F400.13     
     &        INTHD(LEN_INTHD,NDATASETS),! Overall Integer header array    INANCA1A.114    
     &        LOOKUP(LEN1_LOOKUP,NLOOKUPS),!Overall Lookup array           INANCA1A.115    
     &        ICODE            ! Return code =0 Normal Exit                INANCA1A.116    
C                              !             >0 Error                      INANCA1A.117    
                                                                           INANCA1A.118    
      REAL                                                                 INANCA1A.119    
     &      REALHD(LEN_REALHD,NDATASETS),!                                 INANCA1A.120    
     &      A_REALHD(LEN_REALHD),!                                         INANCA1A.121    
     &      A_LEVDEPC(LEN1_LEVDEPC,LEN2_LEVDEPC),                          INANCA1A.122    
     &      LEVDEPC(P_LEVELS*4)! Space to hold level dependent constants   INANCA1A.123    
C                              ! from data set                             INANCA1A.124    
                                                                           INANCA1A.125    
      CHARACTER*100                                                        INANCA1A.126    
     &        CMESSAGE         ! Out error message if I>0                  INANCA1A.127    
                                                                           INANCA1A.128    
! Comdecks:----------------------------------------------------------      GDG0F401.770    
*CALL CSUBMODL                                                             GDG0F401.771    
*CALL CPPXREF                                                              GDG0F401.772    
*CALL PPXLOOK                                                              GDG0F401.773    
*CALL MODEL                                                                GDG0F401.774    
*CALL CLOOKADD                                                             GDG0F401.775    
*CALL CANCILA                                                              GDG0F401.776    
*CALL CSENARIO                                                             AWI1F403.95     
*CALL NSTYPES                                                              ABX2F404.66     
*CALL C_MDI                                                                GDG0F401.777    
*IF -DEF,RECON                                                             GDG0F401.778    
*CALL CENVIR                                                               GDG0F401.779    
*ENDIF                                                                     GDG0F401.780    
                                                                           GDG0F401.781    
                                                                           GDR1F401.75     
! Comdecks for ancillary files/fields.                                     GDR1F401.76     
*CALL CANCFLDA                                                             GDR1F401.77     
                                                                           GDR1F401.78     
CL External subroutines called:                                            INANCA1A.135    
                                                                           INANCA1A.136    
      EXTERNAL                                                             INANCA1A.137    
*IF -DEF,RECON                                                             GDR6F404.3      
     &        FILE_OPEN,                                                   GDR6F404.4      
*ENDIF                                                                     GDR6F404.5      
     &        READ_FLH, READHEAD, SETPOS                                   GDR6F404.6      
                                                                           INANCA1A.143    
CL Namelist input                                                          INANCA1A.144    
                                                                           INANCA1A.145    
      NAMELIST/ANCILCTA/L_SSTANOM,LAMIPII                                  GRS2F404.216    
                                                                           GDR6F404.7      
!     UPANCA Namelist                                                      GDR6F404.8      
      INTEGER                                                              GDR6F404.9      
     &   ANC_REF_NO       ! Ancil Ref. No : See comdeck CANCFLDA           GDR6F404.10     
     &  ,PERIOD           ! Period of Updating Interval (Y/M/D/H)          GDR6F404.11     
     &  ,INTERVAL         ! Updating Interval                              GDR6F404.12     
                                                                           GDR6F404.13     
      NAMELIST /UPANCA/ ANC_REF_NO,PERIOD,INTERVAL                         GDR6F404.14     
                                                                           INANCA1A.147    
C Local Variables                                                          INANCA1A.148    
                                                                           INANCA1A.149    
      INTEGER                                                              INANCA1A.150    
     &        I,               !                                           INANCA1A.151    
     &        ITEM,            !                                           INANCA1A.152    
     &        J,               !                                           INANCA1A.153    
     &        J1,              !                                           INANCA1A.154    
     &        K,               !                                           INANCA1A.155    
     &        LEN_IO,          !                                           INANCA1A.156    
     &        LOOKUPS,         !                                           INANCA1A.157    
     &        NFTIN,           ! Current FTN number for ancillary data     INANCA1A.158    
     &        START_BLOCK,     !                                           AJS1F400.14     
     &        JSOIL_DEPTHS     ! Pointer for soil thicknesses in level     AJS1F400.15     
C                              ! dep.consts.                               AJS1F400.16     
     &       ,STASH_CODE       ! Stash item code                           GDR7F400.22     
     &       ,NREC_A,NREC_S    ! No of atmos & slab records                GDR7F400.23     
     &       ,STASH_ADDR       ! Stash address                             GDR8F400.84     
     &       ,DUMMY            !                                           APB4F401.591    
     &       ,N_ANC_UPD        ! No of ancillaries to be updated           GDR6F404.15     
      DATA DUMMY /1/                                                       APB4F401.592    
                                                                           INANCA1A.171    
      CHARACTER*8 CPERIOD      ! PERIOD in characters.                     GDR6F404.16     
      LOGICAL                                                              INANCA1A.176    
     &        LFILE            !                                           INANCA1A.177    
                                                                           INANCA1A.178    
      REAL P1,P2                                                           INANCA1A.179    
      LOGICAL LNER                                                         INANCA1A.180    
      LNER(P1,P2) = ((ABS(P1-P2)) .GT. (1.E-6*ABS(P1+P2)))                 INANCA1A.181    
                                                                           INANCA1A.182    
CL Internal Structure                                                      INANCA1A.183    
                                                                           INANCA1A.184    
      ICODE=0                                                              INANCA1A.185    
      CMESSAGE=' '                                                         INANCA1A.186    
      IOUNIT=0                                                             INANCA1A.187    
                                                                           INANCA1A.188    
C                                                                          INANCA1A.189    
CL  1.  Initialisation for atmosphere model                                INANCA1A.190    
                                                                           INANCA1A.191    
      DO I=1,NANCIL_FIELDS                                                 INANCA1A.192    
        FILEANCIL(I) =ANCIL_FILE_NO(I)                                     GDR1F401.79     
        STASHANCIL(I)=ITEM_CODES_ANCIL(I)                                  GDR1F401.80     
      ENDDO                                                                INANCA1A.195    
                                                                           INANCA1A.196    
*IF -DEF,RECON                                                             INANCA1A.197    
                                                                           INANCA1A.198    
! Set default values                                                       GRS2F404.217    
                                                                           GRS2F404.218    
      L_SSTANOM=.FALSE.                                                    INANCA1A.199    
      LAMIPII=.FALSE.                                                      GRS2F404.219    
                                                                           GRS2F404.220    
CL  Read in control information from namelist                              RB221193.29     
                                                                           INANCA1A.201    
        REWIND 5                                                           GRB1F400.85     
      READ(5,ANCILCTA)                                                     INANCA1A.202    
                                                                           GDR6F404.17     
!     Initialise FIELDCODE from Namelist UPANCA                            GDR6F404.18     
      N_ANC_UPD = 0                                                        GDR6F404.19     
      DO I=1,NANCIL_FIELDS                                                 GDR6F404.20     
        READ (5,UPANCA,ERR=101,END=101)                                    GDR6F404.21     
        FIELDCODE(1,ANC_REF_NO) = PERIOD                                   GDR6F404.22     
        FIELDCODE(2,ANC_REF_NO) = INTERVAL                                 GDR6F404.23     
        N_ANC_UPD = N_ANC_UPD+1                                            GDR6F404.24     
      ENDDO                                                                GDR6F404.25     
                                                                           GDR6F404.26     
 101  CONTINUE                                                             GDR6F404.27     
      WRITE (6,*) ' '                                                      GDR6F404.28     
      WRITE (6,*) N_ANC_UPD,' Atmos & Slab Ancillaries to be updated.'     GDR6F404.29     
      DO I=1,NANCIL_FIELDS                                                 GDR6F404.30     
        IF (FIELDCODE(1,I).GT.0) THEN                                      GDR6F404.31     
        IF (FIELDCODE(1,I).EQ.1) CPERIOD=' Years'                          GDR6F404.32     
        IF (FIELDCODE(1,I).EQ.2) CPERIOD=' Months'                         GDR6F404.33     
        IF (FIELDCODE(1,I).EQ.3) CPERIOD=' Days'                           GDR6F404.34     
        IF (FIELDCODE(1,I).EQ.4) CPERIOD=' Hours'                          GDR6F404.35     
        WRITE (6,*) 'Anc Ref No ',I,' Stash code ',ITEM_CODES_ANCIL(I),    GDR6F404.36     
     &  ' Interval ',FIELDCODE(2,I),CPERIOD                                GDR6F404.37     
        ENDIF                                                              GDR6F404.38     
      ENDDO                                                                GDR6F404.39     
      WRITE (6,*) ' '                                                      GDR6F404.40     
                                                                           INANCA1A.203    
! Check that ancillary field has valid address (>1) before proceding       GRB4F305.221    
!  to try and update it.  If not, switch off updating via FIELDCODE.       GRB4F305.222    
      DO I=1,NANCIL_FIELDS                                                 GRB4F305.223    
        if (model_codes_ancil(i).eq.slab_im) then                          GDR1F401.81     
          stash_addr = si_slab(stashancil(i))                              GDR8F400.86     
         else                                                              GDR8F400.87     
          stash_addr = si_atmos(stashancil(i))                             GDR8F400.88     
        endif                                                              GDR8F400.89     
        IF (stash_addr .le. 1) THEN                                        GDR8F400.90     
          IF (FIELDCODE(1,I).gt.0) THEN                                    GRB4F305.225    
           WRITE(6,*)' INANCILA: update requested for item ',i,            GRR1F405.21     
     &     ' STASHcode ',stashancil(i),' but prognostic address not set'   GRR1F405.22     
            WRITE(6,*)' FIELDCODE values reset to zeroes'                  GIE0F403.273    
            FIELDCODE(1,I) = 0                                             GRB4F305.229    
            FIELDCODE(2,I) = 0                                             GRB4F305.230    
          END IF                                                           GRB4F305.231    
        END IF                                                             GRB4F305.232    
      END DO                                                               GRB4F305.233    
                                                                           GRB4F305.234    
CL  1.1 Set number of steps after which each ancillary field is updated    INANCA1A.204    
C       Zero is used for fields not to be updated                          INANCA1A.205    
                                                                           INANCA1A.206    
      DO I=1,NANCIL_FIELDS                                                 INANCA1A.207    
        STEPS(I)=0                                                         INANCA1A.208    
        IF (FIELDCODE(1,I).EQ.4)THEN                                       INANCA1A.209    
          STEPS(I)=FIELDCODE(2,I)*STEPS_PER_HR                             INANCA1A.210    
        END IF                                                             INANCA1A.211    
        IF (FIELDCODE(1,I).EQ.3) THEN                                      INANCA1A.212    
          STEPS(I)=FIELDCODE(2,I)*24*STEPS_PER_HR                          INANCA1A.213    
        END IF                                                             INANCA1A.214    
                                                                           INANCA1A.215    
      IF (LCAL360) THEN                                                    GSS1F304.346    
        IF (FIELDCODE(1,I).EQ.2) THEN                                      INANCA1A.217    
          STEPS(I)=FIELDCODE(2,I)*30*24*STEPS_PER_HR                       INANCA1A.218    
        END IF                                                             INANCA1A.219    
        IF (FIELDCODE(1,I).EQ.1) THEN                                      INANCA1A.220    
          STEPS(I)=FIELDCODE(2,I)*360*24*STEPS_PER_HR                      INANCA1A.221    
        END IF                                                             INANCA1A.222    
      ELSE                                                                 GSS1F304.347    
C Gregorian calender:                                                      INANCA1A.224    
C If update interval is months or years, test each day. Further testing    INANCA1A.225    
C done in REPLANCA.                                                        INANCA1A.226    
                                                                           INANCA1A.227    
        IF (FIELDCODE(1,I).EQ.1.OR.FIELDCODE(1,I).EQ.2)THEN                INANCA1A.228    
         STEPS(I)=24*STEPS_PER_HR                                          INANCA1A.229    
        END IF                                                             INANCA1A.230    
      END IF                                                               GSS1F304.348    
                                                                           INANCA1A.232    
      END DO                                                               INANCA1A.233    
                                                                           INANCA1A.234    
CL  1.2 Set master number of steps ANCILLARY_STEPS at which                INANCA1A.235    
CL      individual switches are tested.                                    INANCA1A.236    
                                                                           INANCA1A.237    
C   Find first active field                                                INANCA1A.238    
                                                                           INANCA1A.239    
      DO I=1,NANCIL_FIELDS                                                 INANCA1A.240    
        IF (STEPS(I).GT.0) THEN                                            INANCA1A.241    
          ANCILLARY_STEPS=STEPS(I)                                         INANCA1A.242    
          GOTO 121                                                         INANCA1A.243    
        END IF                                                             INANCA1A.244    
      END DO                                                               INANCA1A.245    
                                                                           INANCA1A.246    
C No above fields found                                                    INANCA1A.247    
                                                                           INANCA1A.248    
      ANCILLARY_STEPS=0                                                    INANCA1A.249    
                                                                           INANCA1A.250    
      GOTO 900                                                             INANCA1A.251    
121   ITEM=I                                                               INANCA1A.252    
                                                                           INANCA1A.253    
CL      Set ANCILLARY_STEPS to lowest common denominater of                INANCA1A.254    
CL      frequencies for active fields                                      INANCA1A.255    
                                                                           INANCA1A.256    
      DO I=ITEM+1,NANCIL_FIELDS                                            INANCA1A.257    
        IF (STEPS(I).LT.ANCILLARY_STEPS                                    INANCA1A.258    
     *      .AND. STEPS(I).GT.0) THEN                                      INANCA1A.259    
          IF (MOD(ANCILLARY_STEPS,STEPS(I)).EQ.0) THEN                     INANCA1A.260    
            ANCILLARY_STEPS=STEPS(I)                                       INANCA1A.261    
          ELSE                                                             INANCA1A.262    
            J1=STEPS(I)-1                                                  INANCA1A.263    
            DO J=J1,1,-1                                                   INANCA1A.264    
              IF ((MOD(ANCILLARY_STEPS,J).EQ.0).AND.                       INANCA1A.265    
     &           (MOD(STEPS(I),J).EQ.0)) THEN                              INANCA1A.266    
                 GOTO 124                                                  INANCA1A.267    
              ENDIF                                                        INANCA1A.268    
            END DO                                                         INANCA1A.269    
124         ANCILLARY_STEPS = J                                            INANCA1A.270    
          END IF                                                           INANCA1A.271    
        END IF                                                             INANCA1A.272    
      END DO                                                               INANCA1A.273    
                                                                           INANCA1A.274    
CL 1.2.4 Sea surface temperature must be updated when sea ice is update    INANCA1A.275    
                                                                           INANCA1A.276    
      IF (STEPS(27).GT.0.AND.STEPS(28).LE.0) THEN                          INANCA1A.277    
         STEPS(28)=1                                                       INANCA1A.278    
      END IF                                                               INANCA1A.279    
                                                                           INANCA1A.280    
*ELSE                                                                      INANCA1A.281    
                                                                           INANCA1A.282    
CL 1.1 Set control switches for reconfigeration                            INANCA1A.283    
                                                                           INANCA1A.284    
       ITEM=MAX(NANCIL_FIELDS,NSWITCH)                                     INANCA1A.285    
       DO I=1,ITEM                                                         INANCA1A.286    
         FIELDCODE(I)=SWITCH(I)                                            INANCA1A.287    
       END DO                                                              INANCA1A.288    
                                                                           INANCA1A.289    
CL 1.1.5 Sea surface temperature anomaly switches on climatological sst    INANCA1A.290    
                                                                           INANCA1A.291    
      L_SSTANOM= L_SSTANOM_SWITCH                                          INANCA1A.292    
      IF (L_SSTANOM) THEN                                                  INANCA1A.293    
        FIELDCODE(28)=1                                                    INANCA1A.294    
      END IF                                                               INANCA1A.295    
                                                                           INANCA1A.296    
                                                                           INANCA1A.297    
CL 1.2.5 Sea surface temperature must be updated when sea ice is update    INANCA1A.298    
                                                                           INANCA1A.299    
      IF (FIELDCODE(27).GT.0.AND.FIELDCODE(28).LE.0) THEN                  INANCA1A.300    
         FIELDCODE(28)=1                                                   INANCA1A.301    
      END IF                                                               INANCA1A.302    
                                                                           INANCA1A.303    
*ENDIF                                                                     INANCA1A.304    
                                                                           INANCA1A.305    
CL 1.3 Set number of headers for each ancillary field                      INANCA1A.306    
                                                                           INANCA1A.307    
      DO I=1,NANCIL_FIELDS                                                 INANCA1A.308    
        LEVELS(I)=1                                                        INANCA1A.309    
C   Multilayer hydrology                                                   INANCA1A.310    
        IF(I.EQ.36)LEVELS(I)=SM_LEVELS                                     UJS1F401.289    
C   Multilayer aerosols                                                    RB221193.30     
        IF(I.GE.41.AND.I.LE.43) LEVELS(I)=TR_LEVELS                        RB221193.31     
C   Multilayer murk concentration and source                               GRB0F304.62     
        IF(I.GE.44.AND.I.LE.45) LEVELS(I)=P_LEVELS                         GRB0F304.63     
C   Multilayer user ancillaries                                            GRB0F304.64     
        IF(I.GE.90.AND.I.LE.109) LEVELS(I)=P_LEVELS                        GDG2F405.110    
!   Multi-level ancillaries for sulphur cycle                              GDR1F401.84     
        IF (I.EQ.72) LEVELS(I) = P_LEVELS                                  GDR1F401.85     
        IF (I.EQ.73) LEVELS(I) = P_LEVELS                                  GDR1F401.86     
        IF (I.EQ.74) LEVELS(I) = P_LEVELS                                  GDR1F401.87     
        IF (I.EQ.75) LEVELS(I) = P_LEVELS                                  GDR1F401.88     
        IF (I.EQ.76) LEVELS(I) = P_LEVELS                                  GDR1F401.89     
        IF (I.EQ.82) LEVELS(I) = NSULPAT                                   AWI1F403.96     
        IF (I.EQ.83) LEVELS(I) = NTYPE                                     ABX2F404.67     
        IF (I.EQ.84) LEVELS(I) = NPFT                                      ABX2F404.68     
        IF (I.EQ.85) LEVELS(I) = NPFT                                      ABX2F404.69     
      END DO                                                               INANCA1A.312    
                                                                           INANCA1A.313    
      LEVELS(7)=OZONE_LEVELS                                               INANCA1A.314    
      LEVELS(10)=ST_LEVELS                                                 UJS1F401.290    
                                                                           INANCA1A.316    
                                                                           RB221193.32     
CL 1.4 Read headers                                                        INANCA1A.317    
                                                                           INANCA1A.318    
      LOOKUPS=0                                                            INANCA1A.319    
                                                                           INANCA1A.320    
      DO I=1,NDATASETS                                                     INANCA1A.321    
                                                                           INANCA1A.322    
C  Initialise LOOKUP_START (=0 implies file I not required)                ADR1F304.109    
        LOOKUP_START(I)=0                                                  ADR1F304.110    
                                                                           ADR1F304.111    
CL Check whether each physical file is needed                              INANCA1A.323    
                                                                           INANCA1A.324    
        LFILE=.FALSE.                                                      INANCA1A.325    
        DO 141 J=1,NANCIL_FIELDS                                           INANCA1A.326    
                                                                           INANCA1A.327    
*IF DEF,RECON                                                              INANCA1A.328    
                                                                           INANCA1A.329    
          IF (FILEANCIL(J).EQ.I.AND.FIELDCODE(J).GT.0) THEN                INANCA1A.330    
                                                                           INANCA1A.331    
*ELSE                                                                      INANCA1A.332    
                                                                           INANCA1A.333    
          IF (FILEANCIL(J).EQ.I.AND.STEPS(J).GT.0) THEN                    INANCA1A.334    
                                                                           INANCA1A.335    
*ENDIF                                                                     INANCA1A.336    
                                                                           INANCA1A.337    
            LFILE=.TRUE.                                                   INANCA1A.338    
          END IF                                                           INANCA1A.339    
141     CONTINUE                                                           INANCA1A.340    
                                                                           INANCA1A.341    
        IF(LFILE) THEN                                                     INANCA1A.342    
                                                                           INANCA1A.343    
      WRITE(6,*) ' '                                                       UDG6F400.62     
      WRITE(6,*) ' Ancillary data file ',I,', unit no ',FTNANCIL(I),       GDR1F401.82     
     &           ', ',TITLE(I)                                             GDR1F401.83     
                                                                           INANCA1A.346    
CL Read headers for physical files required                                INANCA1A.347    
                                                                           INANCA1A.348    
          NFTIN=FTNANCIL(I)                                                INANCA1A.349    
                                                                           INANCA1A.350    
CL 1.4.1 Buffer in fixed length header record                              INANCA1A.351    
                                                                           INANCA1A.352    
*IF -DEF,RECON                                                             INANCA1A.353    
                                                                           INANCA1A.354    
        CALL FILE_OPEN(NFTIN,FT_ENVIRON(NFTIN),                            GPB1F305.43     
     &                 LEN_FT_ENVIR(NFTIN),0,0,ICODE)                      GPB1F305.44     
        IF(ICODE.NE.0)THEN                                                 INANCA1A.357    
          CMESSAGE='INANCLA: Error opening file'                           INANCA1A.358    
          write(6,*) 'INANCILA: Error opening file on unit ',NFTIN,        GRR1F405.23     
     &               ' accessed from env.var.: ',FT_ENVIRON(NFTIN)         GRR1F405.24     
          RETURN                                                           INANCA1A.359    
        ENDIF                                                              INANCA1A.360    
*ENDIF                                                                     INANCA1A.361    
        CALL SETPOS(NFTIN,0,ICODE)                                         GTD0F400.86     
                                                                           INANCA1A.363    
C       Read in fixed header to get array dimensions                       APB4F401.593    
        CALL READ_FLH(NFTIN,FIXHD(1,I),LEN_FIXHD,ICODE,CMESSAGE)           APB4F401.594    
        IF (ICODE.GT.0) THEN                                               APB4F401.595    
          WRITE (6,*) ' Error in reading fixed header for file ',I         APB4F401.596    
          GO TO 9999   !  Return                                           APB4F401.597    
        ENDIF                                                              APB4F401.598    
                                                                           APB4F401.599    
C       Check for negative dimensions                                      APB4F401.600    
        IF (FIXHD(101,I).LE.0) FIXHD(101,I)=1                              APB4F401.601    
        IF (FIXHD(106,I).LE.0) FIXHD(106,I)=1                              APB4F401.602    
        IF (FIXHD(111,I).LE.0) FIXHD(111,I)=1                              APB4F401.603    
        IF (FIXHD(112,I).LE.0) FIXHD(112,I)=1                              APB4F401.604    
        IF (FIXHD(151,I).LE.0) FIXHD(151,I)=1                              APB4F401.605    
        IF (FIXHD(152,I).LE.0) FIXHD(152,I)=1                              APB4F401.606    
        IF (FIXHD(161,I).LE.0) FIXHD(161,I)=1                              APB4F401.607    
                                                                           APB4F401.608    
C Set start position of boundary fields for file                           APB4F401.609    
        LOOKUP_START(I)=LOOKUPS+1                                          APB4F401.610    
                                                                           APB4F401.611    
        IF (LOOKUPS+FIXHD(152,I).GT.NLOOKUPS) THEN                         APB4F401.612    
          WRITE (6,*) 'No room in LOOKUP table for Ancillary File ',I      APB4F401.613    
          CMESSAGE='INANCILA: Insufficient space for LOOKUP headers'       APB4F401.614    
          ICODE=14                                                         APB4F401.615    
          GO TO 9999   !  Return                                           APB4F401.616    
        END IF                                                             APB4F401.617    
                                                                           APB4F401.618    
        CALL SETPOS(NFTIN,0,ICODE)                                         APB4F401.619    
        IF (ICODE.GT.0) THEN                                               APB4F401.620    
          WRITE (6,*) ' ERROR in SETPOS called from INANCA1A'              APB4F401.621    
          WRITE (6,*) ' SETPOS attempted with Unit No ',NFTIN              APB4F401.622    
          CMESSAGE = 'INANCA1A : ERROR in SETPOS'                          APB4F401.623    
          GO TO 9999    !   Return                                         APB4F401.624    
        ENDIF                                                              APB4F401.625    
                                                                           APB4F401.626    
        CALL READHEAD(NFTIN,                                               APB4F401.627    
     &                FIXHD(1,I),LEN_FIXHD,                                APB4F401.628    
     &                INTHD(1,I),FIXHD(101,I),                             APB4F401.629    
     &                REALHD(1,I),FIXHD(106,I),                            APB4F401.630    
     &                LEVDEPC,FIXHD(111,I),FIXHD(112,I),                   APB4F401.631    
     &                DUMMY,DUMMY,DUMMY,                                   APB4F401.632    
     &                DUMMY,DUMMY,DUMMY,                                   APB4F401.633    
     &                DUMMY,DUMMY,DUMMY,                                   APB4F401.634    
     &                DUMMY,DUMMY,                                         APB4F401.635    
     &                DUMMY,DUMMY,                                         APB4F401.636    
     &                DUMMY,DUMMY,                                         APB4F401.637    
     &                DUMMY,DUMMY,                                         APB4F401.638    
     &                DUMMY,DUMMY,                                         APB4F401.639    
     &                LOOKUP(1,LOOKUPS+1),FIXHD(151,I),FIXHD(152,I),       APB4F401.640    
     &                FIXHD(161,I),                                        APB4F401.641    
*CALL ARGPPX                                                               APB4F401.642    
     &                START_BLOCK,ICODE,CMESSAGE)                          APB4F401.643    
                                                                           APB4F401.644    
        IF (ICODE.GT.0) THEN                                               APB4F401.645    
           WRITE(6,*) 'ERROR in READHEAD for Ancillary File ',I            APB4F401.646    
           WRITE(6,*) 'Unit Number ',NFTIN                                 APB4F401.647    
           GO TO 9999   !   Return                                         APB4F401.648    
        ENDIF                                                              APB4F401.649    
                                                                           INANCA1A.365    
!     Check calendar indicator                                             GDR6F404.77     
        IF ((     LCAL360 .and. FIXHD(8,I).NE.2) .or.                      GDR6F404.78     
     &      (.not.LCAL360 .and. FIXHD(8,I).NE.1) ) THEN                    GDR6F404.79     
          ICODE=100+I                                                      GDR6F404.80     
          CMESSAGE='INANCILA : Wrong calendar set in Ancillary File'       GDR6F404.81     
          WRITE (6,*) ' ******** Error in INANCILA ********'               GDR6F404.82     
          WRITE (6,*) ' Wrong calendar setting in Ancillary File ',I       GDR6F404.83     
          IF (LCAL360) THEN                                                GDR6F404.84     
            WRITE (6,*) ' Model run is set up for 360 day calendar.'       GDR6F404.85     
            WRITE (6,*) ' Ancillary File is for 365 day calendar.'         GDR6F404.86     
          ELSE                                                             GDR6F404.87     
            WRITE (6,*) ' Model run is set up for 365 day calendar.'       GDR6F404.88     
            WRITE (6,*) ' Ancillary File is for 360 day calendar.'         GDR6F404.89     
          ENDIF                                                            GDR6F404.90     
          WRITE (6,*) ' Rerun with correct ancillary file.'                GDR6F404.91     
          GO TO 9999   !  Return                                           GDR6F404.92     
        ENDIF                                                              GDR6F404.93     
                                                                           INANCA1A.380    
        FILE_LEVELS=1                                                      INANCA1A.381    
                                                                           INANCA1A.382    
        IF(I.EQ.1) THEN                                                    INANCA1A.383    
          FILE_LEVELS=OZONE_LEVELS                                         INANCA1A.384    
        ELSE IF(I.EQ.2) THEN                                               INANCA1A.385    
          FILE_LEVELS=SM_LEVELS                                            UJS1F401.291    
C This is the maximum value that might be present on the ancillary         INANCA1A.387    
C file if it includes soil moisture in layers; otherwise only single       INANCA1A.388    
C level data is present and PR_FIXHD will not check value since            INANCA1A.389    
C FIXHD(110) will be zero                                                  INANCA1A.390    
        ELSE IF(I.EQ.3) THEN                                               INANCA1A.391    
            FILE_LEVELS=ST_LEVELS                                          UJS1F401.292    
        ELSE IF(I.EQ.13) THEN   ! for multilevel aerosols                  RB221193.33     
            FILE_LEVELS=TR_LEVELS                                          RB221193.34     
        ELSE IF(I.EQ.14.or.I.EQ.16) THEN   ! for murk and user ancil.      GRB0F304.66     
            FILE_LEVELS=P_LEVELS                                           GRB0F304.67     
        ELSE IF(I.EQ.17.or.I.EQ.18) THEN                                   GDR1F401.90     
!           multi-level sulphur cycle ancillary files.                     GDR1F401.91     
            FILE_LEVELS=P_LEVELS                                           GDR1F401.92     
        END IF                                                             INANCA1A.393    
                                                                           INANCA1A.394    
                                                                           INANCA1A.404    
CL 1.4.2 Buffer in integer constants                                       INANCA1A.405    
                                                                           INANCA1A.406    
           IF(FIXHD(100,I).GT.0) THEN                                      INANCA1A.407    
                                                                           INANCA1A.408    
C Check for error in file pointers                                         INANCA1A.409    
                                                                           INANCA1A.410    
C Check validity of integer data and print out information                 INANCA1A.434    
C All files except ozone should contain full fields                        INANCA1A.435    
                                                                           INANCA1A.436    
            IF(INTHD(6,I).NE.ROW_LENGTH) THEN                              INANCA1A.437    
C Ozone may contain zonal mean data                                        INANCA1A.438    
              IF(I.NE.1.OR.INTHD(6,I).NE.1) THEN                           INANCA1A.439    
                ICODE=4                                                    INANCA1A.440    
                CMESSAGE='INANCILA:integer header error'                   INANCA1A.441    
                WRITE(6,*) ' INTHD(6) : ',INTHD(6,I),' ??'                 UDG6F400.63     
                RETURN                                                     INANCA1A.442    
              END IF                                                       INANCA1A.443    
            END IF                                                         INANCA1A.444    
                                                                           INANCA1A.445    
            IF(INTHD(7,I).NE.P_ROWS.AND.(I.EQ.9.AND.INTHD                  INANCA1A.446    
     &        (7,I).NE.U_ROWS)) THEN                                       INANCA1A.447    
              ICODE=5                                                      INANCA1A.448    
              CMESSAGE='INANCILA:integer header error'                     INANCA1A.449    
              WRITE(6,*) ' INTHD(7) : ',INTHD(7,I),' ??'                   UDG6F400.64     
              RETURN                                                       INANCA1A.450    
            END IF                                                         INANCA1A.451    
                                                                           UDG6F400.65     
            IF (I.EQ.1) THEN   !  Ozone file                               UDG6F400.66     
              WRITE (6,*) ' '                                              UDG6F400.67     
              IF (INTHD(6,I).EQ.1)THEN                                     UDG6F400.68     
                WRITE (6,*) ' OZONE file contains zonal mean data for ',   UDG6F400.69     
     &          INTHD(6,I),' points x ',INTHD(7,I),' rows'                 UDG6F400.70     
              ELSEIF (INTHD(6,I).EQ.ROW_LENGTH)THEN                        UDG6F400.71     
                WRITE (6,*) ' OZONE file contains full fields for ',       UDG6F400.72     
     &          INTHD(6,I),' points x ',INTHD(7,I),' rows'                 UDG6F400.73     
              ENDIF                                                        UDG6F400.74     
! Check that correct ozone file has been provided.                         UDG6F400.75     
              IF (ZonAvOzone) THEN                                         UDG6F400.76     
                IF (INTHD(6,I).NE.1) THEN                                  UDG6F400.77     
                  WRITE (6,*) ' Zonal Ozone Data is expected',             UDG6F400.78     
     &            ' for 1 point x ',P_ROWS,' rows'                         UDG6F400.79     
                  ICODE = 51                                               UDG6F400.80     
                  CMESSAGE = 'INANCA1A : Wrong Ozone data provided.'       UDG6F400.81     
                  GO TO 9999   !  Return                                   UDG6F400.82     
                ENDIF                                                      UDG6F400.83     
              ELSE                                                         UDG6F400.84     
                IF (INTHD(6,I).NE.ROW_LENGTH) THEN                         UDG6F400.85     
                  WRITE (6,*) ' Ozone Data is expected for ',              UDG6F400.86     
     &            ROW_LENGTH,' points x ',P_ROWS,' rows.'                  UDG6F400.87     
                  ICODE = 52                                               UDG6F400.88     
                  CMESSAGE = 'INANCA1A : Wrong Ozone data provided.'       UDG6F400.89     
                  GO TO 9999   !  Return                                   UDG6F400.90     
                ENDIF                                                      UDG6F400.91     
              ENDIF                                                        UDG6F400.92     
            ENDIF                                                          UDG6F400.93     
                                                                           INANCA1A.452    
          END IF                                                           INANCA1A.453    
                                                                           INANCA1A.454    
CL 1.4.3 Buffer in real constants                                          INANCA1A.455    
                                                                           INANCA1A.456    
          IF(FIXHD(105,I).GT.0) THEN                                       INANCA1A.457    
                                                                           INANCA1A.458    
C Check validity of real header and print out information                  INANCA1A.484    
                                                                           INANCA1A.485    
           DO J=1,6                                                        INANCA1A.486    
             IF(REALHD(J,I).GT.(A_REALHD(J)+0.1).OR.                       INANCA1A.487    
     &         REALHD(J,I).LT.(A_REALHD(J)-0.1))THEN                       INANCA1A.488    
             IF(I.NE.1.OR.(J.NE.1.AND.J.NE.4))THEN                         INANCA1A.489    
               WRITE(6,*)(REALHD(K,I),K=1,6),(A_REALHD(K),K=1,6)           INANCA1A.490    
               ICODE=8                                                     INANCA1A.491    
               CMESSAGE='INANCILA: REAL header Error.'                     INANCA1A.492    
               RETURN                                                      INANCA1A.493    
             END IF                                                        INANCA1A.494    
             END IF                                                        INANCA1A.495    
           END DO                                                          INANCA1A.496    
                                                                           INANCA1A.497    
         END IF                                                            INANCA1A.498    
                                                                           INANCA1A.499    
CL 1.4.4 Buffer in level dependent constants if required                   INANCA1A.500    
C        Not retained in model after initial check                         INANCA1A.501    
                                                                           INANCA1A.502    
         IF(FIXHD(110,I).GT.0) THEN                                        INANCA1A.503    
                                                                           INANCA1A.504    
CL Only files 1 (Ozone), and 3 (Soil temperature)should contain multi      INANCA1A.517    
CL level data. File 2 (Soil moisture,snow depth,fractional snow time       INANCA1A.518    
CL and soil moisture in layers) may possibly also have multi level data.   RB221193.35     
CL FILES 13,14,16 (aerosols, murkiness, user ancil.) may also have         GRB0F304.68     
CL  multi level data.                                                      GRB0F304.69     
                                                                           INANCA1A.537    
CL If ozone file, check against model levels                               INANCA1A.538    
                                                                           INANCA1A.539    
           IF(I.EQ.1) THEN                                                 INANCA1A.540    
             DO J=1,OZONE_LEVELS                                           INANCA1A.541    
               DO J1=1,4                                                   INANCA1A.542    
                 IF(LNER(LEVDEPC(J+(J1-1)*FIXHD(111,I)),A_LEVDEPC          INANCA1A.543    
     &                   (J+P_LEVELS-OZONE_LEVELS,J1))) THEN               INANCA1A.544    
      WRITE(6,*)'Error in level dependent constants:Level=',J              GIE0F403.274    
                   WRITE(6,*)'Position=',J1                                GIE0F403.275    
                   WRITE(6,*)'Value in model =',A_LEVDEPC                  GIE0F403.276    
     &                   (J+P_LEVELS-OZONE_LEVELS,J1)                      INANCA1A.548    
                   WRITE(6,*)'Value in ancillary data =',LEVDEPC(J+        GIE0F403.277    
     &                             (J1-1)*FIXHD(111,I))                    INANCA1A.550    
                   ICODE=11                                                INANCA1A.551    
               CMESSAGE='INANCILA: error in LEVDEPC.'                      INANCA1A.552    
                   RETURN                                                  INANCA1A.553    
                 END IF                                                    INANCA1A.554    
               END DO                                                      INANCA1A.555    
             END DO                                                        INANCA1A.556    
                                                                           INANCA1A.557    
           ELSE IF (I.EQ.2.OR.I.EQ.3) THEN                                 INANCA1A.558    
                                                                           INANCA1A.559    
             IF (A_FIXHD(12).LE.0) THEN                                    AJS1F400.48     
               ICODE = 121                                                 AJS1F400.49     
               CMESSAGE = 'INANCA1A : FIXHD(12) not set in A_FIXHD'        AJS1F400.50     
               WRITE (6,*) ' FIXHD(12) not set in A_FIXHD.'                AJS1F400.51     
               WRITE (6,*) ' Run reconfiguration program to set.'          AJS1F400.52     
               GO TO 9999    !   Return                                    AJS1F400.53     
             ELSEIF (A_FIXHD(12).LT.305) THEN                              AJS1F400.54     
               JSOIL_DEPTHS = 13                                           AJS1F400.55     
             ELSE                                                          AJS1F400.56     
               JSOIL_DEPTHS = 6                                            AJS1F400.57     
             ENDIF                                                         AJS1F400.58     
                                                                           AJS1F400.59     
C soil moisture levels                                                     UJS1F401.293    
C                                                                          AJS1F400.93     
C  If deep soil temperatures or multilayer soil moistures, check           AJS1F400.94     
C  against model soil level/layer depths.                                  AJS1F400.95     
C                                                                          AJS1F400.96     
             IF (I.EQ.2) THEN                                              UJS1F401.294    
               DO J=1,SM_LEVELS                                            UJS1F401.295    
                 IF (LNER(LEVDEPC(J),A_LEVDEPC(J,JSOIL_DEPTHS))) THEN      UJS1F401.296    
                   ICODE=12                                                UJS1F401.297    
                   CMESSAGE='INANCILA: error in LEVDEPC.'                  UJS1F401.298    
                  RETURN                                                   UJS1F401.299    
                 END IF                                                    UJS1F401.300    
               END DO                                                      UJS1F401.301    
             END IF                                                        UJS1F401.302    
             IF (I.EQ.3) THEN                                              UJS1F401.303    
               DO J=1,ST_LEVELS                                            UJS1F401.304    
C Penman-Monteith BL version                                               UJS1F401.305    
                 IF(ST_LEVELS.EQ.SM_LEVELS)THEN                            UJS1F401.306    
                   IF (LNER(LEVDEPC(J),A_LEVDEPC(J,JSOIL_DEPTHS)))THEN     UJS1F401.307    
                     ICODE=12                                              UJS1F401.308    
                     CMESSAGE='INANCILA: error in LEVDEPC.'                UJS1F401.309    
                     RETURN                                                UJS1F401.310    
                   ENDIF                                                   UJS1F401.311    
C All other BL versions                                                    UJS1F401.312    
                 ELSE                                                      UJS1F401.313    
                   IF (LNER(LEVDEPC(J),A_LEVDEPC(J+1,JSOIL_DEPTHS)))THEN   UJS1F401.314    
                     ICODE=12                                              UJS1F401.315    
                     CMESSAGE='INANCILA: error in LEVDEPC.'                UJS1F401.316    
                     RETURN                                                UJS1F401.317    
                   END IF                                                  UJS1F401.318    
                 END IF                                                    UJS1F401.319    
               END DO                                                      UJS1F401.320    
             END IF                                                        UJS1F401.321    
                                                                           INANCA1A.570    
CL If aerosol file, check against model levels                             RB221193.38     
                                                                           RB221193.39     
           ELSE IF (I.EQ.13) THEN                                          RB221193.40     
             DO J=1,TR_LEVELS                                              RB221193.41     
               DO J1=1,4                                                   GRB0F304.72     
                 IF(LNER(LEVDEPC(J+(J1-1)*FIXHD(111,I)),A_LEVDEPC          GRB0F304.73     
     &                   (J,J1))) THEN                                     GRB0F304.74     
      WRITE(6,*)'Error in level dependent constants:Level=',J              GIE0F403.278    
                   WRITE(6,*)'Position=',J1                                GIE0F403.279    
                   WRITE(6,*)'Value in model =',A_LEVDEPC(J,J1)            GIE0F403.280    
                   WRITE(6,*)'Value in ancillary data =',LEVDEPC(J+        GIE0F403.281    
     &                             (J1-1)*FIXHD(111,I))                    GRB0F304.79     
                   ICODE=16                                                GRB0F304.80     
               CMESSAGE='INANCILA: error in LEVDEPC.'                      GRB0F304.81     
                   RETURN                                                  GRB0F304.82     
                 END IF                                                    GRB0F304.83     
               END DO                                                      GRB0F304.84     
             END DO                                                        GRB0F304.85     
                                                                           GRB0F304.86     
CL If murk or user ancillary file, check against model levels              GRB0F304.87     
                                                                           GRB0F304.88     
           ELSE IF (I.EQ.14.or.I.EQ.16) THEN                               GRB0F304.89     
             DO J=1,P_LEVELS                                               GRB0F304.90     
               DO J1=1,4                                                   RB221193.42     
                 IF(LNER(LEVDEPC(J+(J1-1)*FIXHD(111,I)),A_LEVDEPC          RB221193.43     
     &                   (J,J1))) THEN                                     RB221193.44     
      WRITE(6,*)'Error in level dependent constants:Level=',J              GIE0F403.282    
                   WRITE(6,*)'Position=',J1                                GIE0F403.283    
                   WRITE(6,*)'Value in model =',A_LEVDEPC(J,J1)            GIE0F403.284    
                   WRITE(6,*)'Value in ancillary data =',LEVDEPC(J+        GIE0F403.285    
     &                             (J1-1)*FIXHD(111,I))                    RB221193.49     
                   ICODE=16                                                RB221193.50     
               CMESSAGE='INANCILA: error in LEVDEPC.'                      RB221193.51     
                   RETURN                                                  RB221193.52     
                 END IF                                                    RB221193.53     
               END DO                                                      RB221193.54     
             END DO                                                        RB221193.55     
                                                                           RB221193.56     
           END IF                                                          INANCA1A.571    
                                                                           INANCA1A.572    
         END IF                                                            INANCA1A.573    
                                                                           INANCA1A.574    
CL 1.4.5 Buffer in lookup table                                            INANCA1A.575    
C Set start position of boundary fields for file                           INANCA1A.576    
                                                                           INANCA1A.577    
         IF(FIXHD(150,I).GT.0) THEN                                        INANCA1A.580    
                                                                           INANCA1A.581    
                                                                           GDR7F400.24     
           NREC_A = 0                                                      GDR7F400.25     
           NREC_S = 0                                                      GDR7F400.26     
           DO J = 1,FIXHD(152,I)                                           GDR7F400.27     
             IF (LOOKUP(MODEL_CODE,LOOKUPS+J) .eq. 0 .or.                  GDR7F400.28     
     &           LOOKUP(MODEL_CODE,LOOKUPS+J) .eq. imdi) THEN              GDR7F400.29     
               STASH_CODE = LOOKUP(ITEM_CODE,LOOKUPS+J)                    GDR7F400.30     
               IF ((STASH_CODE.GE.177 .and. STASH_CODE.LE.179) .or.        GDR7F400.31     
     &             (STASH_CODE.GE.210 .and. STASH_CODE.LE.212)) THEN       GDR7F400.32     
                 LOOKUP(MODEL_CODE,LOOKUPS+J) = slab_im                    GDR7F400.33     
                 NREC_S = NREC_S+1                                         GDR7F400.34     
               ELSE                                                        GDR7F400.35     
                 LOOKUP(MODEL_CODE,LOOKUPS+J) = atmos_im                   GDR7F400.36     
                 NREC_A = NREC_A+1                                         GDR7F400.37     
               END IF                                                      GDR7F400.38     
             END IF                                                        GDR7F400.39     
           END DO                                                          GDR7F400.40     
           IF (NREC_A.GT.0) THEN                                           GDR7F400.41     
             WRITE (6,*) ' '                                               GDR7F400.42     
             WRITE (6,*) ' INANCA1A : submodel_id in ',NREC_A,             GDR7F400.43     
     &       ' records set to atmos_im in ancillary file ',I               GDR7F400.44     
           ENDIF                                                           GDR7F400.45     
           IF (NREC_S.GT.0) THEN                                           GDR7F400.46     
             WRITE (6,*) ' '                                               GDR7F400.47     
             WRITE (6,*) ' INANCA1A : submodel_id in ',NREC_S,             GDR7F400.48     
     &       ' records set to slab_im in ancillary file ',I                GDR7F400.49     
           ENDIF                                                           GDR7F400.50     
                                                                           INANCA1A.619    
         END IF                                                            INANCA1A.620    
                                                                           INANCA1A.621    
         LOOKUPS=LOOKUPS+FIXHD(152,I)                                      INANCA1A.622    
                                                                           INANCA1A.623    
       ELSE                                                                INANCA1A.624    
                                                                           INANCA1A.625    
CL  If file not required, zero fixed length header                         INANCA1A.626    
         DO J=1,LEN_FIXHD                                                  INANCA1A.627    
      FIXHD(J,I)=0                                                         INANCA1A.628    
         END DO                                                            INANCA1A.629    
                                                                           INANCA1A.630    
         LOOKUP_START(I)=LOOKUPS+1                                         UDG7F304.53     
       END IF                                                              INANCA1A.631    
                                                                           INANCA1A.632    
      END DO                                                               INANCA1A.633    
                                                                           INANCA1A.634    
CL 1.5 Set positions in main data blocks                                   INANCA1A.635    
                                                                           INANCA1A.636    
*IF DEF,RECON                                                              INANCA1A.637    
                                                                           INANCA1A.638    
      ITEM=1                                                               INANCA1A.639    
      DO 151 I=1,NSWITCH                                                   INANCA1A.640    
      IF(SWITCH(I).EQ.1)THEN                                               INANCA1A.641    
        D1_ANCILADD(I)=ITEM                                                INANCA1A.642    
        ITEM=ITEM+INTHD(6,FILEANCIL(I))                                    INANCA1A.643    
     *            *INTHD(7,FILEANCIL(I))*LEVELS(I)                         INANCA1A.644    
      ENDIF                                                                INANCA1A.645    
151   CONTINUE                                                             INANCA1A.646    
                                                                           INANCA1A.647    
C Store address info for passing back thro argument list                   INANCA1A.648    
      DO 152 I=1,NSWITCH                                                   INANCA1A.649    
       D1_ANCILADD_PARM(I)=D1_ANCILADD(I)                                  INANCA1A.650    
152   CONTINUE                                                             INANCA1A.651    
                                                                           INANCA1A.652    
*ELSE                                                                      INANCA1A.653    
                                                                           INANCA1A.654    
      DO I=1,NANCIL_FIELDS                                                 INANCA1A.655    
        IF (MODEL_CODES_ANCIL(I).EQ.SLAB_IM) THEN                          GDR1F401.93     
          D1_ANCILADD(I)=SI_SLAB(STASHANCIL(I))                            GDR8F400.92     
        ELSE                                                               GDR8F400.93     
          D1_ANCILADD(I)=SI_ATMOS(STASHANCIL(I))                           GDR8F400.94     
        ENDIF                                                              GDR8F400.95     
      ENDDO                                                                INANCA1A.657    
                                                                           INANCA1A.658    
CL 1.51 If a request is made to update a field, ensure that space for      INANCA1A.659    
CL     that field has been allocted in D1.                                 INANCA1A.660    
                                                                           INANCA1A.661    
      DO I=1,NANCIL_FIELDS                                                 INANCA1A.662    
        IF((FIELDCODE(1,I).GT.0).AND.(D1_ANCILADD(I).LE.1)) THEN           INANCA1A.663    
          WRITE(6,*)' An address in D1 has not been set for ancillary      INANCA1A.664    
     & field number ',I                                                    INANCA1A.665    
          ICODE=30                                                         INANCA1A.666    
          CMESSAGE='INANCILA: updating for ancillary field is requested    INANCA1A.667    
     & but no space has been allocated in D1'                              INANCA1A.668    
          RETURN                                                           INANCA1A.669    
        ENDIF                                                              INANCA1A.670    
      END DO                                                               INANCA1A.671    
                                                                           INANCA1A.672    
*ENDIF                                                                     INANCA1A.673    
                                                                           TJ240293.11     
CL 1.52 Reset target STASH codes for fields mapped onto other fields       TJ240293.12     
CL      (eg. SLAB ref SST/ice depth are obtained from normal SST and       TJ240293.13     
CL           ice depth ancillary files as used in atmos-only mode).        TJ240293.14     
                                                                           TJ240293.15     
      STASHANCIL(37)=STASHANCIL(28)   ! SLAB ref SST    == Normal SST      TJ240293.16     
      STASHANCIL(38)=STASHANCIL(29)   ! SLAB ref icedep == Normal icedep   TJ240293.17     
                                                                           INANCA1A.674    
CL 1.6 Set positions of data                                               INANCA1A.675    
                                                                           INANCA1A.676    
      DO I=1,NANCIL_FIELDS                                                 INANCA1A.677    
      NLOOKUP(I) =0                                                        ADR1F304.112    
      LOOKUP_STEP(I)=0                                                     ADR1F304.113    
                                                                           ADR1F304.114    
C If LOOKUP_START=0 for file FILEANCIL(I), no fields required.             ADR1F304.115    
        IF (LOOKUP_START(FILEANCIL(I)).GT.0) THEN                          ADR1F304.116    
                                                                           ADR1F304.117    
        DO J=LOOKUP_START(FILEANCIL(I)),LOOKUPS                            INANCA1A.678    
                                                                           DR211293.12     
          IF (LOOKUP(ITEM_CODE,J).EQ.STASHANCIL(I)) THEN                   INANCA1A.680    
            NLOOKUP(I)=J-LOOKUP_START(FILEANCIL(I))+1                      INANCA1A.681    
            GOTO 161                                                       INANCA1A.682    
          END IF                                                           INANCA1A.683    
                                                                           INANCA1A.684    
        END DO                                                             INANCA1A.685    
                                                                           INANCA1A.686    
C Find second occurence of data to set LOOKUP_STEP                         INANCA1A.687    
                                                                           INANCA1A.688    
161     LOOKUP_STEP(I)=0                                                   INANCA1A.689    
                                                                           INANCA1A.690    
                                                                           INANCA1A.691    
        IF(J.LT.LOOKUPS) THEN                                              INANCA1A.692    
                                                                           INANCA1A.693    
          DO J1=J+LEVELS(I),LOOKUPS                                        INANCA1A.694    
            IF (LOOKUP(ITEM_CODE,J1).EQ.STASHANCIL(I)) THEN                INANCA1A.695    
              LOOKUP_STEP(I)=J1-NLOOKUP(I)-LOOKUP_START(FILEANCIL(I))+1    INANCA1A.696    
              GOTO 164                                                     INANCA1A.697    
            END IF                                                         INANCA1A.698    
          END DO                                                           INANCA1A.699    
164      CONTINUE                                                          INANCA1A.700    
        END IF                                                             ADR1F304.118    
                                                                           ADR1F304.119    
        END IF                                                             INANCA1A.701    
                                                                           INANCA1A.702    
      END DO                                                               INANCA1A.703    
                                                                           INANCA1A.704    
CL SET LEVELS=2 FOR ICE FRACTION AND SNOW DEPTH, TO INDICATE PRESCENCE     INANCA1A.705    
CL fractional time fields                                                  INANCA1A.706    
                                                                           INANCA1A.707    
      LEVELS(27)=2                                                         INANCA1A.708    
      LEVELS(9)=2                                                          INANCA1A.709    
                                                                           INANCA1A.710    
 900  CONTINUE                                                             INANCA1A.711    
 9999 CONTINUE                                                             UDG6F400.94     
      RETURN                                                               INANCA1A.712    
      END                                                                  INANCA1A.713    
*ENDIF                                                                     INANCA1A.714