*IF DEF,C82_1A,AND,DEF,OCEAN                                               GHM2F405.22     
C ******************************COPYRIGHT******************************    GTS2F400.4519   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.4520   
C                                                                          GTS2F400.4521   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.4522   
C restrictions as set forth in the contract.                               GTS2F400.4523   
C                                                                          GTS2F400.4524   
C                Meteorological Office                                     GTS2F400.4525   
C                London Road                                               GTS2F400.4526   
C                BRACKNELL                                                 GTS2F400.4527   
C                Berkshire UK                                              GTS2F400.4528   
C                RG12 2SZ                                                  GTS2F400.4529   
C                                                                          GTS2F400.4530   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.4531   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.4532   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.4533   
C Modelling at the above address.                                          GTS2F400.4534   
C ******************************COPYRIGHT******************************    GTS2F400.4535   
C                                                                          GTS2F400.4536   
CLL Subroutine INANCILO                                                    INANCO1A.3      
CLL                                                                        INANCO1A.4      
CLL Purpose : Takes as input,the code defining the frequency of update     INANCO1A.5      
CLL           of ancillary fields as set by the user interface.            INANCO1A.6      
CLL           Converts them into a list of numbers of timesteps after      INANCO1A.7      
CLL           which each field must be updated, and calculates the         INANCO1A.8      
CLL           frequency with which this list must be interrogated.         INANCO1A.9      
CLL           Where the update interval is in months or years,             INANCO1A.10     
CLL           the check will be carried out each day. The physical         INANCO1A.11     
CLL           files required are also determined by input code,            INANCO1A.12     
CLL           and the headers and lookup tables are read into              INANCO1A.13     
CLL           COMMON/IXANCILA/                                             INANCO1A.14     
CLL                                                                        INANCO1A.15     
CLL Control routine for CRAY YMP                                           INANCO1A.16     
CLL                                                                        INANCO1A.17     
CLL C.WIlson    <- programmer of some or all of previous code or changes   INANCO1A.18     
CLL                                                                        INANCO1A.19     
CLL  Model            Modification history from model version 3.0:         INANCO1A.20     
CLL version  Date                                                          INANCO1A.21     
CLL  3.4  30/09/94  Add user ancillary fields.  RTHBarnes                  GRB0F304.95     
CLL  3.4  04/08/94  Code to read multi-level ancillary files added. MB     GMB1F304.7      
CLL   3.5  24/03/95    Changed OPEN to FILE_OPEN  P.Burton                 GPB1F305.45     
CLL  3.5  24/07/95  Check fields for updating have valid address. RTHB     GRB4F305.246    
CLL  4.0  10/10/95  Set LOOKUP(45) in ancillary files. D. Robinson.        GDR7F400.51     
!    4.1  18/06/96  Changes to cope with changes in STASH addressing       GDG0F401.787    
!                   Author D.M. Goddard.                                   GDG0F401.788    
!LL  4.4  09/09/97  New namelist UPANCO for updating information.          GDR6F404.41     
!LL                 D. Robinson.                                           GDR6F404.42     
!LL  4.4  21/03/97  Changes to call READHEAD. Add calender check.          ODR1F404.1      
!LL                 New argument LCAL360. D. Robinson                      ODR1F404.2      
!LL  4.4  21/03/97  Call new comdeck CANCFLDO. D. Robinson                 ODR2F404.1      
!LL  4.5  05/05/98  Improve error message for missing files. R. Rawlins    GRR1F405.25     
CLL                                                                        INANCO1A.22     
CLL Programming standard; Unified Model Documentation Paper No. 3          INANCO1A.23     
CLL draft version no. 3, dated 12/7/89                                     INANCO1A.24     
CLL                                                                        INANCO1A.25     
CLL System components covered : C710                                       INANCO1A.26     
CLL                                                                        INANCO1A.27     
CLL System task : C7                                                       INANCO1A.28     
CLL                                                                        INANCO1A.29     
CLL  External documentation: UMDP no C7, version no 8, dated 30/10/90      INANCO1A.30     
CLL                                                                        INANCO1A.31     
CLLEND                                                                     INANCO1A.32     

      SUBROUTINE INANCILO                                                   1,5INANCO1A.33     
                                                                           INANCO1A.34     
C*L Arguments                                                              INANCO1A.35     
     & (LEN_FIXHD,LEN_INTHD,LEN_REALHD,LEN1_LEVDEPC,                       INANCO1A.36     
     &              FIXHD,INTHD,                                           INANCO1A.37     
     &              REALHD,LOOKUP,O_REALHD, O_LEVDEPC,                     GMB1F304.8      
     &        NDATASETS,NLOOKUPS,FTNANCIL,LOOKUP_START,LEN1_LOOKUP,IMT,    INANCO1A.39     
     & JMT,SI,SILEN,                                                       INANCO1A.40     
     & ANCILLARY_STEPS,O_STEPS_P_P,O_SECS_P_P,                             INANCO1A.41     
*CALL ARGPPX                                                               GDG0F401.789    
     &              LCAL360,ICODE,CMESSAGE)                                ODR1F404.3      
                                                                           INANCO1A.43     
      IMPLICIT NONE                                                        INANCO1A.44     
                                                                           INANCO1A.45     
      INTEGER                                                              INANCO1A.46     
     &        LEN_FIXHD,       ! Length of header blocks in ancillary      INANCO1A.47     
C                              ! data sets                                 INANCO1A.48     
     &        LEN_INTHD,       !                                           INANCO1A.49     
     &        LEN_REALHD,      !                                           INANCO1A.50     
     &        LEN1_LEVDEPC,    !                                           INANCO1A.51     
     &        ANCILLARY_STEPS, !                                           INANCO1A.52     
     &       O_STEPS_P_P,                                                  INANCO1A.53     
     &       O_SECS_P_P                                                    INANCO1A.54     
                                                                           INANCO1A.55     
      INTEGER                                                              INANCO1A.56     
     &        NDATASETS,       !                                           INANCO1A.57     
     &        NLOOKUPS,        !                                           INANCO1A.58     
     &        FTNANCIL(NDATASETS),                                         INANCO1A.59     
     &        LOOKUP_START(NDATASETS),                                     INANCO1A.60     
     &        LEN1_LOOKUP,     ! Length of PP header                       INANCO1A.61     
     &        IMT,             ! Ocean model dimensions                    INANCO1A.62     
     &        JMT,             !                                           INANCO1A.63     
     &        SILEN,SI(SILEN), ! Address pointer array and length of       INANCO1A.64     
C                              ! this array                                INANCO1A.65     
     &        FIXHD(LEN_FIXHD,NDATASETS),!                                 INANCO1A.66     
     &        INTHD(LEN_INTHD,NDATASETS),!                                 INANCO1A.67     
     &        LOOKUP(LEN1_LOOKUP,NLOOKUPS),                                INANCO1A.68     
     &        ICODE            ! Return code =0 Normal Exit                INANCO1A.69     
C                              !             >0 Error                      INANCO1A.70     
                                                                           INANCO1A.71     
      REAL                                                                 INANCO1A.72     
     &      REALHD(LEN_REALHD,NDATASETS), !                                GMB1F304.9      
     &      O_REALHD(LEN_REALHD),         !                                GMB1F304.10     
     &      O_LEVDEPC(LEN1_LEVDEPC)       !  model level depths            GMB1F304.11     
                                                                           INANCO1A.75     
      LOGICAL                                                              ODR1F404.4      
     &      LCAL360            ! Calender Indicator (T: 360 day)           ODR1F404.5      
                                                                           INANCO1A.76     
      CHARACTER*(*)                                                        INANCO1A.77     
     &        CMESSAGE         ! Out error message if I>0                  INANCO1A.78     
                                                                           INANCO1A.79     
*CALL CLOOKADD                                                             INANCO1A.80     
*CALL CANCILO                                                              INANCO1A.81     
*CALL CENVIR                                                               INANCO1A.82     
*CALL CSUBMODL                                                             GDR7F400.52     
*CALL CPPXREF                                                              GDG0F401.790    
*CALL PPXLOOK                                                              GDG0F401.791    
*CALL C_MDI                                                                GDR7F400.53     
*CALL COCNINDX                                                             ORH7F402.291    
                                                                           INANCO1A.83     
CL External subroutines called:                                            INANCO1A.84     
                                                                           INANCO1A.85     
      EXTERNAL                                                             INANCO1A.86     
     &        PR_FIXHD                                                     ODR1F404.6      
     &,       READHEAD                                                     ODR1F404.7      
     &,       READ_FLH                                                     ODR1F404.8      
     &,       SETPOS                                                       GMB1F304.12     
                                                                           INANCO1A.92     
CL Namelist input                                                          INANCO1A.93     
                                                                           INANCO1A.94     
!     UPANCO Namelist                                                      GDR6F404.43     
      INTEGER                                                              GDR6F404.44     
     &   ANC_REF_NO       ! Ancil Ref. No : See comdeck CANCFLDO           GDR6F404.45     
     &  ,PERIOD           ! Period of Updating Interval (Y/M/D/H)          GDR6F404.46     
     &  ,INTERVAL         ! Updating Interval                              GDR6F404.47     
                                                                           GDR6F404.48     
      NAMELIST /UPANCO/ ANC_REF_NO,PERIOD,INTERVAL                         GDR6F404.49     
                                                                           INANCO1A.96     
C Local arrays                                                             GMB1F304.13     
      REAL LEVDEPC(LEN1_LEVDEPC)      ! depths of data in ancillary file   GMB1F304.14     
                                                                           GMB1F304.15     
C Local Variables                                                          INANCO1A.97     
      INTEGER                                                              INANCO1A.98     
     &        I,               !                                           INANCO1A.99     
     &        ITEM,            !                                           INANCO1A.100    
     &        J,               !                                           INANCO1A.101    
     &        J1,              !                                           INANCO1A.102    
     &        K,               !                                           INANCO1A.103    
     &        LEN_IO,          !                                           INANCO1A.104    
     &        LOOKUPS,         !                                           INANCO1A.105    
     &        NFTIN,           ! Current FTN number for ancillary data     INANCO1A.106    
     &        START_BLOCK,     !                                           GMB1F304.16     
     &        O_SECS_PER_STEP,                                             GMB1F304.17     
     &        FILE_LEVELS      ! Number of levels of data in files         GMB1F304.18     
C                              ! containing multi-level data.              GMB1F304.19     
     &       ,N_ANC_UPD        ! No of ancillaries to be updated           GDR6F404.50     
     &       ,NREC_O           ! No of ocean records                       GDR7F400.55     
     &       ,DUMMY                                                        ODR1F404.9      
                                                                           ODR1F404.10     
      DATA DUMMY /1/                                                       ODR1F404.11     
                                                                           ODR2F404.2      
! Comdecks for ancillary files/fields                                      ODR2F404.3      
*CALL CANCFLDO                                                             ODR2F404.4      
                                                                           INANCO1A.118    
      CHARACTER*8 CPERIOD      ! PERIOD in characters.                     GDR6F404.51     
                                                                           INANCO1A.123    
      LOGICAL                                                              INANCO1A.124    
     &        LFILE            !                                           INANCO1A.125    
                                                                           INANCO1A.126    
CL Functions                                                               GMB1F304.20     
      REAL P1,P2                                                           GMB1F304.21     
      LOGICAL LNER                                                         GMB1F304.22     
      LNER(P1,P2) = (ABS(P1-P2)) .GT. (1.E-6*ABS(P1+P2))                   GMB1F304.23     
                                                                           INANCO1A.128    
                                                                           GMB1F304.24     
CL----------------------------------------------------------------------   GMB1F304.25     
                                                                           GMB1F304.26     
      ICODE=0                                                              INANCO1A.129    
      CMESSAGE=' '                                                         INANCO1A.130    
                                                                           INANCO1A.131    
CL 1   Initialisation of ocean model                                       INANCO1A.135    
                                                                           INANCO1A.136    
      DO I=1,NANCIL_FIELDS                                                 INANCO1A.137    
        FILEANCIL(I)=ANCIL_FILE_NO(I)                                      ODR2F404.5      
        STASHANCIL(I)=ITEM_CODES_ANCIL(I)                                  ODR2F404.6      
      ENDDO                                                                INANCO1A.140    
                                                                           INANCO1A.141    
CL Read control information from namelist                                  INANCO1A.142    
                                                                           INANCO1A.143    
      REWIND 5                                                             GDR6F404.52     
      N_ANC_UPD = 0                                                        GDR6F404.53     
      DO I=1,NANCIL_FIELDS                                                 GDR6F404.54     
        READ (5,UPANCO,ERR=101,END=101)                                    GDR6F404.55     
        FIELDCODE(1,ANC_REF_NO) = PERIOD                                   GDR6F404.56     
        FIELDCODE(2,ANC_REF_NO) = INTERVAL                                 GDR6F404.57     
        N_ANC_UPD = N_ANC_UPD+1                                            GDR6F404.58     
      ENDDO                                                                GDR6F404.59     
                                                                           GDR6F404.60     
 101  CONTINUE                                                             GDR6F404.61     
      WRITE (6,*) ' '                                                      GDR6F404.62     
      WRITE (6,*) N_ANC_UPD,' Ocean Ancillaries to be updated.'            GDR6F404.63     
      DO I=1,NANCIL_FIELDS                                                 GDR6F404.64     
        IF (FIELDCODE(1,I).GT.0) THEN                                      GDR6F404.65     
        IF (FIELDCODE(1,I).EQ.1) CPERIOD=' Years'                          GDR6F404.66     
        IF (FIELDCODE(1,I).EQ.2) CPERIOD=' Months'                         GDR6F404.67     
        IF (FIELDCODE(1,I).EQ.3) CPERIOD=' Days'                           GDR6F404.68     
        IF (FIELDCODE(1,I).EQ.4) CPERIOD=' Hours'                          GDR6F404.69     
        WRITE (6,*) 'Anc Ref No ',I,' Stash code ',                        GDR6F404.70     
     &  ITEM_CODES_ANCIL(I),' Interval ',FIELDCODE(2,I),CPERIOD            GDR6F404.71     
        ENDIF                                                              GDR6F404.72     
      ENDDO                                                                GDR6F404.73     
      WRITE (6,*) ' '                                                      GDR6F404.74     
                                                                           GDR6F404.75     
                                                                           INANCO1A.145    
! Check that ancillary field has valid address (>1) before proceding       GRB4F305.247    
!  to try and update it.  If not, switch off updating via FIELDCODE.       GRB4F305.248    
      DO I=1,NANCIL_FIELDS                                                 GRB4F305.249    
        IF (si(stashancil(i)) .le. 1) THEN                                 GRB4F305.250    
          IF (FIELDCODE(1,I).gt.0) THEN                                    GRB4F305.251    
           WRITE(6,*)' INANCILO: update requested for item ',i,            GRR1F405.26     
     &     ' STASHcode ',stashancil(i),' but prognostic address not set'   GRR1F405.27     
            WRITE(6,*)' FIELDCODE values reset to zeroes'                  GIE0F403.291    
            FIELDCODE(1,I) = 0                                             GRB4F305.255    
            FIELDCODE(2,I) = 0                                             GRB4F305.256    
          END IF                                                           GRB4F305.257    
        END IF                                                             GRB4F305.258    
      END DO                                                               GRB4F305.259    
                                                                           GRB4F305.260    
CL 1.1 Set number of steps after which each ancillary field is updated     INANCO1A.146    
C      Zero is used for fields not to be updated                           INANCO1A.147    
                                                                           INANCO1A.148    
      O_SECS_PER_STEP=O_SECS_P_P/O_STEPS_P_P                               INANCO1A.149    
      DO 110 I=1,NANCIL_FIELDS                                             INANCO1A.150    
        STEPS(I)=0                                                         INANCO1A.151    
        IF (FIELDCODE(1,I).EQ.4) THEN                                      INANCO1A.152    
          IF (MOD(3600*FIELDCODE(2,I),O_SECS_PER_STEP).EQ.0) THEN          INANCO1A.153    
            STEPS(I)=FIELDCODE(2,I)*O_STEPS_P_P*3600/O_SECS_P_P            INANCO1A.154    
          ELSE                                                             INANCO1A.155    
            WRITE(6,*)'Updating interval of ',FIELDCODE(2,I),' hours       GIE0F403.292    
     & not compatible with length of ocean timestep'                       INANCO1A.157    
            ICODE=1                                                        INANCO1A.158    
            CMESSAGE='INANCLO=updating interval incompatible with tstep'   INANCO1A.159    
            RETURN                                                         INANCO1A.160    
          ENDIF                                                            INANCO1A.161    
        END IF                                                             INANCO1A.162    
        IF (FIELDCODE(1,I).EQ.3) THEN                                      INANCO1A.163    
          IF (MOD(86400*FIELDCODE(2,I),O_SECS_PER_STEP).EQ.0) THEN         INANCO1A.164    
            STEPS(I)=FIELDCODE(2,I)*O_STEPS_P_P*86400/O_SECS_P_P           INANCO1A.165    
          ELSE                                                             INANCO1A.166    
            WRITE(6,*)'Updating interval of ',FIELDCODE(2,I),' days not    GIE0F403.293    
     & compatible with length of ocean timestep'                           INANCO1A.168    
            ICODE=1                                                        INANCO1A.169    
            CMESSAGE='INANCLO=updating interval incompatible with tstep'   INANCO1A.170    
            RETURN                                                         INANCO1A.171    
          ENDIF                                                            INANCO1A.172    
        END IF                                                             INANCO1A.173    
                                                                           INANCO1A.174    
C If update interval in months or years test each day or each timestep     INANCO1A.175    
C as appropriate                                                           INANCO1A.176    
                                                                           INANCO1A.177    
         IF (FIELDCODE(1,I).EQ.2.OR.FIELDCODE(1,I).EQ.1) THEN              INANCO1A.178    
           IF (MOD(86400,O_SECS_PER_STEP).EQ.0) THEN                       INANCO1A.179    
             STEPS(I)=O_STEPS_P_P*86400/O_SECS_P_P                         INANCO1A.180    
           ELSE                                                            INANCO1A.181    
             STEPS(I)=1                                                    INANCO1A.182    
           ENDIF                                                           INANCO1A.183    
        END IF                                                             INANCO1A.184    
110   CONTINUE                                                             INANCO1A.185    
                                                                           INANCO1A.186    
CL  1.2 Set master number of steps ANCILLARY_STEPS at which                INANCO1A.187    
CL      individual switches are tested.                                    INANCO1A.188    
                                                                           INANCO1A.189    
C   Find first active field                                                INANCO1A.190    
                                                                           INANCO1A.191    
      DO 120 I=1,NANCIL_FIELDS                                             INANCO1A.192    
        IF (STEPS(I).GT.0) THEN                                            INANCO1A.193    
          ANCILLARY_STEPS=STEPS(I)                                         INANCO1A.194    
          GOTO 121                                                         INANCO1A.195    
        END IF                                                             INANCO1A.196    
120   CONTINUE                                                             INANCO1A.197    
                                                                           INANCO1A.198    
C    No above fields found                                                 INANCO1A.199    
                                                                           INANCO1A.200    
      ANCILLARY_STEPS=0                                                    INANCO1A.201    
                                                                           INANCO1A.202    
      GOTO 900                                                             INANCO1A.203    
 121  CONTINUE                                                             INANCO1A.204    
      ITEM=I                                                               INANCO1A.205    
                                                                           INANCO1A.206    
CL      Set ANCILLARY_STEPS to lowest common denominater of                INANCO1A.207    
CL      frequencies for active fields                                      INANCO1A.208    
                                                                           INANCO1A.209    
      DO 122 I=ITEM+1,NANCIL_FIELDS                                        INANCO1A.210    
        IF (STEPS(I).LT.ANCILLARY_STEPS.AND.STEPS(I).GT.0) THEN            INANCO1A.211    
          IF (MOD(ANCILLARY_STEPS,STEPS(I)).EQ.0) THEN                     INANCO1A.212    
            ANCILLARY_STEPS=STEPS(I)                                       INANCO1A.213    
          ELSE                                                             INANCO1A.214    
            J1=STEPS(I)-1                                                  INANCO1A.215    
            DO 123 J=J1,1,-1                                               INANCO1A.216    
              IF ((MOD(ANCILLARY_STEPS,J).EQ.0).AND.                       INANCO1A.217    
     &           (MOD(STEPS(I),J).EQ.0))THEN                               INANCO1A.218    
                 GOTO 124                                                  INANCO1A.219    
              ENDIF                                                        INANCO1A.220    
 123        CONTINUE                                                       INANCO1A.221    
 124         CONTINUE                                                      INANCO1A.222    
             ANCILLARY_STEPS=J                                             INANCO1A.223    
          END IF                                                           INANCO1A.224    
        END IF                                                             INANCO1A.225    
 122  CONTINUE                                                             INANCO1A.226    
                                                                           INANCO1A.227    
CL  1.3 Set number of levels for each ancillary field                      GMB1F304.27     
C default number of levels is 1                                            GMB1F304.28     
      DO I=1,NANCIL_FIELDS                                                 GMB1F304.29     
        LEVELS(I)=1                                                        GMB1F304.30     
      END DO                                                               GMB1F304.31     
                                                                           INANCO1A.229    
CL  1.4 Read headers                                                       INANCO1A.230    
                                                                           INANCO1A.231    
      LOOKUPS=0                                                            INANCO1A.232    
                                                                           INANCO1A.233    
      DO 140 J=1,NDATASETS                                                 INANCO1A.234    
                                                                           INANCO1A.235    
CL Check whether each physical file is needed                              INANCO1A.236    
                                                                           INANCO1A.237    
        LFILE=.FALSE.                                                      INANCO1A.238    
        DO 141 I=1,NANCIL_FIELDS                                           INANCO1A.239    
          IF (FILEANCIL(I).EQ.J.AND.STEPS(I).GT.0) THEN                    INANCO1A.240    
            LFILE=.TRUE.                                                   INANCO1A.241    
          END IF                                                           INANCO1A.242    
141     CONTINUE                                                           INANCO1A.243    
                                                                           INANCO1A.244    
        IF(LFILE) THEN                                                     INANCO1A.245    
                                                                           INANCO1A.246    
CL Read headers for physical files required                                INANCO1A.247    
                                                                           INANCO1A.248    
          NFTIN=FTNANCIL(J)                                                INANCO1A.249    
                                                                           INANCO1A.250    
C Open required ancillary file                                             INANCO1A.251    
        CALL FILE_OPEN(NFTIN,FT_ENVIRON(NFTIN),                            GPB1F305.46     
     &                 LEN_FT_ENVIR(NFTIN),0,0,ICODE)                      GPB1F305.47     
        IF(ICODE.NE.0)THEN                                                 INANCO1A.254    
          CMESSAGE='INANCLO: Error opening file'                           INANCO1A.255    
          write(6,*) 'INANCILO: Error opening file on unit ',NFTIN,        GRR1F405.28     
     &               ' accessed from env.var.: ',FT_ENVIRON(NFTIN)         GRR1F405.29     
          RETURN                                                           INANCO1A.256    
        ENDIF                                                              INANCO1A.257    
                                                                           INANCO1A.258    
        CALL SETPOS(NFTIN,0,ICODE)                                         ODR1F404.12     
                                                                           ODR1F404.13     
!       Read in fixed header to get array dimensions                       ODR1F404.14     
        CALL READ_FLH(NFTIN,FIXHD(1,J),LEN_FIXHD,ICODE,CMESSAGE)           ODR1F404.15     
        IF (ICODE.GT.0) THEN                                               ODR1F404.16     
          WRITE (6,*) ' Error in reading fixed header for file ',J         ODR1F404.17     
          GO TO 9999   !  Return                                           ODR1F404.18     
        ENDIF                                                              ODR1F404.19     
                                                                           ODR1F404.20     
!       Check for negative dimensions                                      ODR1F404.21     
        IF (FIXHD(101,J).LE.0) FIXHD(101,J)=1                              ODR1F404.22     
        IF (FIXHD(106,J).LE.0) FIXHD(106,J)=1                              ODR1F404.23     
        IF (FIXHD(111,J).LE.0) FIXHD(111,J)=1                              ODR1F404.24     
        IF (FIXHD(112,J).LE.0) FIXHD(112,J)=1                              ODR1F404.25     
        IF (FIXHD(151,J).LE.0) FIXHD(151,J)=1                              ODR1F404.26     
        IF (FIXHD(152,J).LE.0) FIXHD(152,J)=1                              ODR1F404.27     
        IF (FIXHD(161,J).LE.0) FIXHD(161,J)=1                              ODR1F404.28     
                                                                           ODR1F404.29     
! Set start position in lookup table                                       ODR1F404.30     
        LOOKUP_START(J) = LOOKUPS+1                                        ODR1F404.31     
                                                                           ODR1F404.32     
! Check sufficient space for lookup headers                                ODR1F404.33     
        IF (LOOKUPS+FIXHD(152,J).GT.NLOOKUPS) THEN                         ODR1F404.34     
          WRITE (6,*) 'No room in LOOKUP table for Ancillary File ',J      ODR1F404.35     
          CMESSAGE='INANCILO: Insufficient space for LOOKUP headers'       ODR1F404.36     
          ICODE=14                                                         ODR1F404.37     
          GO TO 9999   !  Return                                           ODR1F404.38     
        END IF                                                             ODR1F404.39     
                                                                           ODR1F404.40     
        CALL SETPOS (NFTIN,0,ICODE)                                        ODR1F404.41     
        IF (ICODE.GT.0) THEN                                               ODR1F404.42     
          WRITE (6,*) ' ERROR in SETPOS called from INANCO1A'              ODR1F404.43     
          WRITE (6,*) ' SETPOS attempted with Unit No ',NFTIN              ODR1F404.44     
          CMESSAGE = 'INANCO1A : ERROR in SETPOS'                          ODR1F404.45     
          GO TO 9999    !   Return                                         ODR1F404.46     
        ENDIF                                                              ODR1F404.47     
                                                                           ODR1F404.48     
! Read in all Header records                                               ODR1F404.49     
                                                                           ODR1F404.50     
        CALL READHEAD(NFTIN,                                               ODR1F404.51     
     &                FIXHD(1,J),LEN_FIXHD,                                ODR1F404.52     
     &                INTHD(1,J),FIXHD(101,J),                             ODR1F404.53     
     &                REALHD(1,J),FIXHD(106,J),                            ODR1F404.54     
     &                LEVDEPC,FIXHD(111,J),FIXHD(112,J),                   ODR1F404.55     
     &                DUMMY,DUMMY,DUMMY,                                   ODR1F404.56     
     &                DUMMY,DUMMY,DUMMY,                                   ODR1F404.57     
     &                DUMMY,DUMMY,DUMMY,                                   ODR1F404.58     
     &                DUMMY,DUMMY,                                         ODR1F404.59     
     &                DUMMY,DUMMY,                                         ODR1F404.60     
     &                DUMMY,DUMMY,                                         ODR1F404.61     
     &                DUMMY,DUMMY,                                         ODR1F404.62     
     &                DUMMY,DUMMY,                                         ODR1F404.63     
     &                LOOKUP(1,LOOKUPS+1),FIXHD(151,J),FIXHD(152,J),       ODR1F404.64     
     &                FIXHD(161,J),                                        ODR1F404.65     
*CALL ARGPPX                                                               ODR1F404.66     
     &                START_BLOCK,ICODE,CMESSAGE)                          ODR1F404.67     
                                                                           ODR1F404.68     
        IF (ICODE.GT.0) THEN                                               ODR1F404.69     
           WRITE(6,*) 'ERROR in READHEAD for Ancillary File ',J            ODR1F404.70     
           WRITE(6,*) 'Unit Number ',NFTIN                                 ODR1F404.71     
           GO TO 9999   !   Return                                         ODR1F404.72     
        ENDIF                                                              ODR1F404.73     
                                                                           ODR1F404.74     
!     Check calendar indicator                                             ODR1F404.75     
        IF ((     LCAL360 .and. FIXHD(8,J).NE.2) .or.                      ODR1F404.76     
     &      (.not.LCAL360 .and. FIXHD(8,J).NE.1) ) THEN                    ODR1F404.77     
          ICODE=100+J                                                      ODR1F404.78     
          CMESSAGE='INANCILO : Wrong calendar set in Ancillary File'       ODR1F404.79     
          WRITE (6,*) ' ******** Error in INANCILO ********'               ODR1F404.80     
          WRITE (6,*) ' Wrong calendar setting in Ancillary File ',J       ODR1F404.81     
          IF (LCAL360) THEN                                                ODR1F404.82     
            WRITE (6,*) ' Model run is set up for 360 day calendar.'       ODR1F404.83     
            WRITE (6,*) ' Ancillary File is for 365 day calendar.'         ODR1F404.84     
          ELSE                                                             ODR1F404.85     
            WRITE (6,*) ' Model run is set up for 365 day calendar.'       ODR1F404.86     
            WRITE (6,*) ' Ancillary File is for 360 day calendar.'         ODR1F404.87     
          ENDIF                                                            ODR1F404.88     
          WRITE (6,*) ' Rerun with correct ancillary file.'                ODR1F404.89     
          GO TO 9999   !  Return                                           ODR1F404.90     
        ENDIF                                                              ODR1F404.91     
                                                                           INANCO1A.286    
         IF(FIXHD(100,J).GT.0) THEN                                        INANCO1A.289    
                                                                           INANCO1A.290    
C Check validity of integer data and print out information                 INANCO1A.315    
      IF (INTHD(6,J).NE.IMT) THEN                                          INANCO1A.316    
              WRITE(6,*)'Mismatch in row_length:data set has',INTHD        GIE0F403.294    
     &               (6,J),'required value is',IMT                         INANCO1A.318    
              ICODE=19                                                     INANCO1A.319    
              CMESSAGE='INANCILO:integer header error'                     INANCO1A.320    
              RETURN                                                       INANCO1A.321    
            END IF                                                         INANCO1A.322    
                                                                           INANCO1A.323    
           IF(INTHD(7,J).NE.JMT_GLOBAL) THEN                               ORH3F402.375    
      WRITE(6,*)'Mismatch in numbers of rows:data set',J,'data set         GIE0F403.295    
     &               has',INTHD(7,J),'required value is ',JMT_GLOBAL       ORH3F402.376    
              ICODE=20                                                     INANCO1A.327    
              CMESSAGE='INANCILO:integer header error'                     INANCO1A.328    
              RETURN                                                       INANCO1A.329    
            END IF                                                         INANCO1A.330    
                                                                           INANCO1A.331    
        END IF                                                             INANCO1A.332    
                                                                           INANCO1A.333    
         IF(FIXHD(105,J).GT.0) THEN                                        INANCO1A.336    
                                                                           INANCO1A.337    
C Check validity of real data and print out information                    INANCO1A.362    
                                                                           INANCO1A.363    
           DO 143 K=1,6                                                    INANCO1A.364    
             IF(REALHD(K,J).GT.(O_REALHD(K)+0.1).OR.                       INANCO1A.365    
     &          REALHD(K,J).LT.(O_REALHD(K)-0.1))THEN                      INANCO1A.366    
               WRITE(6,*)'Mismatch in real header position',K,'data set    GIE0F403.296    
     &          has',REALHD(K,J),' required value is = ', O_REALHD(K)      INANCO1A.368    
               ICODE=23                                                    INANCO1A.369    
               CMESSAGE='INANCILO=real header error'                       INANCO1A.370    
               RETURN                                                      INANCO1A.371    
             END IF                                                        INANCO1A.372    
 143       CONTINUE                                                        INANCO1A.373    
                                                                           INANCO1A.374    
        END IF                                                             INANCO1A.375    
                                                                           INANCO1A.376    
         IF(FIXHD(110,J).GT.0) THEN                                        GMB1F304.45     
                                                                           GMB1F304.46     
C  Check that level dependent constants match model depths.                GMB1F304.73     
C  This step uses the logical function lner defined in the                 GMB1F304.74     
C  declaration statements at the top of the code.                          GMB1F304.75     
                                                                           GMB1F304.76     
           DO  I = 1, LEN1_LEVDEPC                                         GMB1F304.77     
             IF ( LNER ( LEVDEPC(I) , O_LEVDEPC(I) ) ) THEN                GMB1F304.78     
               WRITE(6,*)'Error in level dependent constants:Level=',I     GIE0F403.297    
               WRITE(6,*)'Dataset=',J                                      GIE0F403.298    
               WRITE(6,*)'Value in model =',O_LEVDEPC(I)                   GIE0F403.299    
               WRITE(6,*)'Value in ancillary data =',LEVDEPC(I)            GIE0F403.300    
               ICODE=26                                                    GMB1F304.83     
               CMESSAGE='INANCILO: error in LEVDEPC.'                      GMB1F304.84     
               RETURN                                                      GMB1F304.85     
             END IF                                                        GMB1F304.86     
           END DO                                                          GMB1F304.87     
                                                                           GMB1F304.88     
         END IF     !  FIXHD(110,I).GT.0                                   GMB1F304.89     
                                                                           GMB1F304.90     
         IF(FIXHD(150,J).GT.0) THEN                                        INANCO1A.379    
                                                                           INANCO1A.380    
          NREC_O = 0                                                       GDR7F400.57     
          DO I = 1,FIXHD(152,J)                                            GDR7F400.58     
            IF (LOOKUP(MODEL_CODE,LOOKUPS+I) .eq. 0 .or.                   GDR7F400.59     
     &          LOOKUP(MODEL_CODE,LOOKUPS+I) .eq. imdi) THEN               GDR7F400.60     
                LOOKUP(MODEL_CODE,LOOKUPS+I) = ocean_im                    GDR7F400.64     
                NREC_O = NREC_O+1                                          GDR7F400.65     
            END IF                                                         GDR7F400.67     
          END DO                                                           GDR7F400.68     
          IF (NREC_O.GT.0) THEN                                            GDR7F400.69     
            WRITE (6,*) ' '                                                GDR7F400.70     
            WRITE (6,*) ' INANCO1A : submodel_id in ',NREC_O,              GDR7F400.71     
     &      ' records set to ocean_im in ancillary file ',J                GDR7F400.72     
          ENDIF                                                            GDR7F400.73     
                                                                           GDR7F400.74     
                                                                           INANCO1A.418    
        END IF                                                             INANCO1A.419    
                                                                           INANCO1A.420    
        LOOKUPS=LOOKUPS+FIXHD(152,J)                                       INANCO1A.421    
                                                                           INANCO1A.422    
        ELSE                                                               INANCO1A.423    
                                                                           INANCO1A.424    
CL  If file not required, zero fixed length header                         INANCO1A.425    
          DO I=1,LEN_FIXHD                                                 INANCO1A.426    
            FIXHD(I,J)=0                                                   GMB1F304.110    
          END DO                                                           INANCO1A.428    
                                                                           INANCO1A.429    
       END IF                                                              INANCO1A.430    
                                                                           INANCO1A.431    
140   CONTINUE                                                             INANCO1A.432    
                                                                           INANCO1A.433    
CL 1.5 Set positions in main data blocks                                   INANCO1A.434    
                                                                           INANCO1A.435    
C  Items 1 and 2 not available for updating during run.                    INANCO1A.436    
      D1_ANCILADD(1)=1                                                     INANCO1A.437    
      D1_ANCILADD(2)=1                                                     INANCO1A.438    
                                                                           GMB1F304.111    
      DO I = 3, NANCIL_FIELDS                                              GMB1F304.112    
        D1_ANCILADD(I)= SI(STASHANCIL(I))                                  GMB1F304.113    
      END DO                                                               GMB1F304.114    
                                                                           GMB1F304.115    
                                                                           INANCO1A.458    
CL 1.6 Set positions of data                                               INANCO1A.459    
                                                                           INANCO1A.460    
      DO 160 I=1,NANCIL_FIELDS                                             INANCO1A.461    
        DO 162 J=1,LOOKUPS                                                 INANCO1A.462    
                                                                           INANCO1A.463    
          IF (LOOKUP(ITEM_CODE,J).EQ.STASHANCIL(I)) THEN                   INANCO1A.464    
            NLOOKUP(I)=J-LOOKUP_START(FILEANCIL(I))+1                      INANCO1A.465    
            GOTO 161                                                       INANCO1A.466    
          END IF                                                           INANCO1A.467    
                                                                           INANCO1A.468    
162     CONTINUE                                                           INANCO1A.469    
                                                                           INANCO1A.470    
C Find second occurence of data to set LOOKUP_STEP                         INANCO1A.471    
                                                                           INANCO1A.472    
 161    CONTINUE                                                           INANCO1A.473    
        LOOKUP_STEP(I)=0                                                   INANCO1A.474    
                                                                           INANCO1A.475    
        DO 163 J1=J+LEVELS(I),LOOKUPS                                      GMB1F304.116    
          IF (LOOKUP(ITEM_CODE,J1).EQ.STASHANCIL(I)) THEN                  INANCO1A.477    
            LOOKUP_STEP(I)=J1-NLOOKUP(I)-LOOKUP_START(FILEANCIL(I))+1      INANCO1A.478    
            GOTO 160                                                       INANCO1A.479    
          END IF                                                           INANCO1A.480    
163     CONTINUE                                                           INANCO1A.481    
                                                                           INANCO1A.482    
160   CONTINUE                                                             INANCO1A.483    
                                                                           INANCO1A.484    
CL 1.7 If a request is made to update a field, ensure that space for       INANCO1A.485    
CL     that field has been allocted in D1.                                 INANCO1A.486    
                                                                           INANCO1A.487    
      DO I=1,NANCIL_FIELDS                                                 INANCO1A.488    
        IF((FIELDCODE(1,I).GT.0).AND.(D1_ANCILADD(I).LE.1)) THEN           INANCO1A.489    
          WRITE(6,*)' An address in D1 has not been set for ancillary      INANCO1A.490    
     & field number ',I                                                    INANCO1A.491    
          ICODE=30                                                         INANCO1A.492    
          CMESSAGE='INANCILO: updating for ancillary field is requested    INANCO1A.493    
     & but no space has been allocated in D1'                              INANCO1A.494    
          RETURN                                                           INANCO1A.495    
        ENDIF                                                              INANCO1A.496    
      END DO                                                               INANCO1A.497    
                                                                           INANCO1A.498    
C *ENDIF                                                                   INANCO1A.499    
                                                                           INANCO1A.500    
900   CONTINUE                                                             INANCO1A.501    
9999  CONTINUE                                                             ODR1F404.92     
      RETURN                                                               INANCO1A.502    
      END                                                                  INANCO1A.503    
                                                                           INANCO1A.504    
                                                                           INANCO1A.505    
*ENDIF                                                                     INANCO1A.506