*IF DEF,CONTROL,OR,DEF,MAKEBC                                              UIE3F404.24     
C ******************************COPYRIGHT******************************    GTS2F400.4591   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.4592   
C                                                                          GTS2F400.4593   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.4594   
C restrictions as set forth in the contract.                               GTS2F400.4595   
C                                                                          GTS2F400.4596   
C                Meteorological Office                                     GTS2F400.4597   
C                London Road                                               GTS2F400.4598   
C                BRACKNELL                                                 GTS2F400.4599   
C                Berkshire UK                                              GTS2F400.4600   
C                RG12 2SZ                                                  GTS2F400.4601   
C                                                                          GTS2F400.4602   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.4603   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.4604   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.4605   
C Modelling at the above address.                                          GTS2F400.4606   
C ******************************COPYRIGHT******************************    GTS2F400.4607   
C                                                                          GTS2F400.4608   
CLL Subroutine IN_INTF                                                     ININTF1.3      
CLL                                                                        ININTF1.4      
CLL Purpose : Takes as input, codes set by the user interface defining     ININTF1.5      
CLL           the start time, end time, and interval for creating          ININTF1.6      
CLL           interface data for a limited area model, and data            ININTF1.7      
CLL           defining the limited area grid. The source model may also    ININTF1.8      
CLL           be limited area. Sets up fixed length, integer & real        ININTF1.9      
CLL           headers and level dependent constants for the interface      ININTF1.10     
CLL           data set. All prognostic variables for which horizontal      ININTF1.11     
CLL           differencing is performed are included, ie all tracers       ININTF1.12     
CLL           but no surface fields.                                       ININTF1.13     
CLL                                                                        ININTF1.14     
CLL Control routine for CRAY YMP                                           ININTF1.15     
CLL                                                                        ININTF1.16     
CLL AD, RS, RJ  <- programmer of some or all of previous code or changes   ININTF1.17     
CLL                                                                        ININTF1.18     
CLL  Model            Modification history from model version 3.0:         ININTF1.19     
CLL version  Date                                                          ININTF1.20     
CLL  3.1    2/02/93 : added comdeck CHSUNITS to define NUNITS for i/o      RS030293.101    
CLL  3.1  12/02/93  Correct message for ICODE=2,3,8,9. R.T.H.Barnes.       RB120293.4      
CLL                                                                        ININTF1.21     
CLL   3.1  15/12/92   Code to calculate interface horz. interpolation      DR240293.623    
CLL                   coefficients taken out. Call new routine             DR240293.624    
CLL                   INTF_HINTC in place. Adapt routine to cater for      DR240293.625    
CLL                   multiple LAM areas. D Robinson.                      DR240293.626    
CLL   3.2    13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for          TS150793.72     
CLL                   portability.  Author Tracey Smith.                   TS150793.73     
CLL   3.2  14/05/93   Dynamic allocation changes.      D. Robinson.        DR141293.1      
CLL   3.3  22/11/93   Define Integer Header - Word 15. D. Robinson.        DR141293.2      
CLL   3.3  08/02/94  Modify calls to TIME2SEC/SEC2TIME to output/input     TJ080294.236    
CLL                  elapsed times in days & secs, for portability. TCJ    TJ080294.237    
CLL   3.4  05/05/94   DEF LBOUTA replaced by LOGICAL LLBOUTA               GSS1F304.397    
CLL                   Argument LCAL360 passed to SEC2TIM                   GSS1F304.398    
CLL                                                    S.J.Swarbrick       GSS1F304.399    
CLL  3.4  29/11/94  Add lengths to INTF_HINTC for portable dyn.allocn.     ANF1F304.14     
CLL  3.5  06/04/95  Sub-Models stage 1: revise History and Control file    GDR3F305.117    
CLL                 contents.  RTHBarnes.                                  GDR3F305.118    
CLL   3.5  24/03/95    Changed OPEN to FILE_OPEN  P.Burton                 GPB1F305.52     
!     4.0  11/09/95    Set FIXHD_INTFA(153) to IMDI. D. Robinson           GDR1F400.16     
!     4.1  19/01/96    Added MPP code. P.Burton                            APB4F401.481    
!     4.4  03/10/97    Changes to make the addresses well-formed for       GBC5F404.134    
!                      Cray I/O.                                           GBC5F404.135    
!                        Author: Bob Carruthers, Cray Research             GBC5F404.136    
!LL   4.4  04/12/97    Set FIXHD(1) to IMDI. D. Robinson                   UDR2F404.48     
!LL   4.5  29/07/98    Rename CINTF to CINTFA. Call INTF_AREA.             GDR2F405.102    
!LL                    D. Robinson.                                        GDR2F405.103    
CLL                                                                        DR240293.627    
CLL Programming standard; Unified Model Documentation Paper No. 3          ININTF1.22     
CLL version no. 1, dated 15/01/90                                          ININTF1.23     
CLL                                                                        ININTF1.24     
CLL Logical components covered : D810                                      ININTF1.25     
CLL                                                                        ININTF1.26     
CLL System task : D81                                                      ININTF1.27     
CLL                                                                        ININTF1.28     
CLL Documentation : Unified Model Documentation Paper No D8                ININTF1.29     
CLL                                                                        ININTF1.30     
CLLEND -------------------------------------------------------------       ININTF1.31     
                                                                           ININTF1.32     

      SUBROUTINE IN_INTF (                                                  6,29@DYALLOC.1322   
                                                                           ININTF1.34     
C*L   Arguments:                                                           ININTF1.35     
*CALL ARGSIZE                                                              @DYALLOC.1323   
*CALL ARGD1                                                                @DYALLOC.1324   
*CALL ARGDUMA                                                              @DYALLOC.1325   
*CALL ARGINFA                                                              @DYALLOC.1326   
     &           NFTOUT,ICODE,CMESSAGE)                                    @DYALLOC.1327   
                                                                           ININTF1.37     
      IMPLICIT NONE                                                        ININTF1.38     
                                                                           ININTF1.39     
*CALL CMAXSIZE                                                             @DYALLOC.1328   
*CALL CINTFA                                                               GDR2F405.104    
*CALL TYPSIZE                                                              @DYALLOC.1329   
*CALL TYPD1                                                                @DYALLOC.1330   
*CALL TYPDUMA                                                              @DYALLOC.1331   
*CALL TYPINFA                                                              @DYALLOC.1332   
                                                                           @DYALLOC.1333   
      INTEGER                                                              ININTF1.40     
     &       NFTOUT,   ! FTN Number to write interface data                DR240293.629    
     &       ICODE     ! Return code                                       ININTF1.41     
                                                                           ININTF1.42     
      CHARACTER*80                                                         TS150793.74     
     &       CMESSAGE  ! Error message                                     ININTF1.44     
C*                                                                         ININTF1.45     
                                                                           ININTF1.46     
*CALL CHSUNITS                                                             RS030293.102    
*CALL CSUBMODL                                                             GDR3F305.119    
*CALL CHISTORY                                                             GDR3F305.120    
*CALL CCONTROL                                                             ININTF1.50     
*CALL CTIME                                                                ININTF1.53     
*CALL C_MDI                                                                ININTF1.54     
*IF DEF,MPP                                                                APB4F401.482    
*CALL PARVARS                                                              APB4F401.483    
*ENDIF                                                                     APB4F401.484    
*CALL CNTL_IO                                                              GBC5F404.137    
                                                                           ININTF1.55     
C    Local variables                                                       ININTF1.56     
      INTEGER                                                              ININTF1.57     
     &        I,J,IJ,  ! DO loop indices                                   ININTF1.58     
     &        ROW,                                                         ININTF1.59     
     &        IRIM,                                                        ININTF1.60     
     &        DAYS,SECS, ! Time difference relative to reference point     TJ080294.238    
     &        LEVEL,                                                       ININTF1.62     
     &        LEN_PP,  ! Total length of PP headers                        ININTF1.63     
     &        LEN_IO,  ! Total length of data read in                      ININTF1.64     
     &        NTIMES,  ! Number of times for which interface data          ININTF1.65     
C                      ! is required.                                      ININTF1.66     
     &        ZERO,                                                        ININTF1.67     
     &        JINTF          ! Interface area index                        GDR2F405.105    
CL----------------------------------------------------------------------   DR240293.633    
                                                                           ININTF1.73     
      REAL                                                                 ININTF1.74     
     &       A_IO                                                          DR240293.634    
                                                                           DR240293.635    
      INTEGER YY,MM,DD,HH,MN,SEC,DAY_NO                                    DR240293.636    
      INTEGER A_STEPS_PER_HR ! steps per hour for atmos. sub_model         GDR3F305.121    
                                                                           ININTF1.85     
      CHARACTER*80 STRING           ! MODEL_FT_UNIT value                  ININTF1.86     
      CHARACTER*14 PPNAME           ! Boundary data name                   ININTF1.87     
                                                                           ININTF1.88     
CL    Subroutines called:                                                  DR240293.637    
      EXTERNAL SEC2TIME,STP2TIME,IOERROR,BUFFIN,BUFFOUT,INTF_HINTC         ANF1F304.15     
     &        ,INTF_AREA                                                   GDR2F405.106    
                                                                           DR240293.639    
CL    Internal Structure                                                   DR240293.640    
                                                                           DR240293.646    
      IF (LTIMER) CALL TIMER ('IN_INTF',3)                                 DR240293.647    
                                                                           ININTF1.93     
*IF DEF,ATMOS                                                              GSS1F304.400    
      IF (LLBOUTim(A_IM)) THEN                                             GDR3F305.122    
                                                                           ININTF1.95     
      CALL INTF_AREA (A_IM,NFTOUT,JINTF)                                   GDR2F405.107    
                                                                           ININTF1.99     
      IF (A_INTF_FREQ_HR(JINTF).GT.0) THEN                                 DR240293.649    
                                                                           ININTF1.102    
        IF (LNEWBND(JINTF)) THEN                                           DR240293.650    
                                                                           DR240293.651    
CL      LNEWBND = true (New dataset to be set up)                          DR240293.652    
                                                                           DR240293.653    
! 1.1 Compute steps per hour for atmosphere sub_model                      GDR3F305.123    
      A_STEPS_PER_HR = 3600*STEPS_PER_PERIODim(a_im)/                      GDR3F305.124    
     &                       SECS_PER_PERIODim(a_im)                       GDR3F305.125    
                                                                           GDR3F305.126    
CL  1.0 Set up headers                                                     DR240293.654    
                                                                           ININTF1.104    
        IF (FT_STEPS(NFTOUT).EQ.0) THEN                                    ININTF1.105    
          NTIMES = (A_INTF_END_HR(JINTF)-A_INTF_START_HR(JINTF))/          DR240293.655    
     +              A_INTF_FREQ_HR(JINTF)+1                                DR240293.656    
        ELSE ! reinitialisation                                            ININTF1.107    
          IF (STEPim(a_im)-1.LE.FT_FIRSTSTEP(NFTOUT)) THEN ! 1st file      GDR5F305.59     
            NTIMES = FT_STEPS(NFTOUT)/A_STEPS_PER_HR/                      DR240293.658    
     +               A_INTF_FREQ_HR(JINTF)+1                               DR240293.659    
          ELSE ! not first file                                            DR240293.660    
            NTIMES = FT_STEPS(NFTOUT)/A_STEPS_PER_HR/                      DR240293.661    
     +               A_INTF_FREQ_HR(JINTF)                                 DR240293.662    
          ENDIF                                                            DR240293.663    
        ENDIF                                                              ININTF1.113    
                                                                           ININTF1.114    
CL  1.1 Fixed length header                                                ININTF1.115    
C       Copy main dump header as first step                                DR240293.664    
                                                                           ININTF1.117    
      DO I=1,LEN_FIXHD                                                     DR240293.665    
        FIXHD_INTFA(I,JINTF)=A_FIXHD(I)                                    DR240293.666    
      ENDDO                                                                DR240293.667    
                                                                           ININTF1.121    
C        Set boundary data identifiers                                     ININTF1.122    
                                                                           ININTF1.123    
      FIXHD_INTFA(1,JINTF)  = IMDI                                         UDR2F404.49     
      FIXHD_INTFA(5,JINTF)  = 5                                            DR240293.668    
      FIXHD_INTFA(10,JINTF) = 1                                            DR240293.669    
                                                                           ININTF1.126    
C        Modify individual items                                           ININTF1.127    
                                                                           ININTF1.128    
CL      Calculate start validity time                                      DR240293.670    
                                                                           DR240293.671    
      IF (FT_STEPS(NFTOUT).EQ.0) THEN                                      ININTF1.130    
        SECS = A_INTF_START_HR(JINTF)*3600                                 DR240293.672    
        DAYS = 0                                                           TJ080294.240    
      ELSE                                                                 ININTF1.132    
       IF (STEPim(a_im)-1.LE.FT_FIRSTSTEP(NFTOUT)) THEN   ! First file     GDR5F305.60     
        CALL STP2TIME(FT_FIRSTSTEP(NFTOUT),STEPS_PER_PERIODim(a_im),       GDR3F305.127    
     &                SECS_PER_PERIODim(a_im),DAYS,SECS)                   GDR3F305.128    
       ELSE ! not first file                                               ININTF1.135    
        CALL STP2TIME(STEPim(a_im)-1,STEPS_PER_PERIODim(a_im),             GDR3F305.129    
     &                SECS_PER_PERIODim(a_im),DAYS,SECS)                   GDR3F305.130    
        SECS=SECS+A_INTF_FREQ_HR(JINTF)*3600                               TJ080294.245    
       ENDIF                                                               ININTF1.137    
      ENDIF                                                                ININTF1.138    
                                                                           ININTF1.143    
      CALL SEC2TIME(DAYS,SECS,BASIS_TIME_DAYS,BASIS_TIME_SECS,             TJ080294.246    
     &              YY,MM,DD,HH,MN,SEC,DAY_NO,LCAL360)                     GSS1F304.402    
                                                                           ININTF1.147    
      FIXHD_INTFA(21,JINTF) = YY                                           DR240293.676    
      FIXHD_INTFA(22,JINTF) = MM                                           DR240293.677    
      FIXHD_INTFA(23,JINTF) = DD                                           DR240293.678    
      FIXHD_INTFA(24,JINTF) = HH                                           DR240293.679    
      FIXHD_INTFA(25,JINTF) = MN                                           DR240293.680    
      FIXHD_INTFA(26,JINTF) = SEC                                          DR240293.681    
      FIXHD_INTFA(27,JINTF) = DAY_NO                                       DR240293.682    
                                                                           ININTF1.153    
C     Data interval                                                        DR240293.683    
      FIXHD_INTFA(35,JINTF) = 0                                            DR240293.684    
      FIXHD_INTFA(36,JINTF) = 0                                            DR240293.685    
      FIXHD_INTFA(37,JINTF) = A_INTF_FREQ_HR(JINTF)/24                     DR240293.686    
      FIXHD_INTFA(38,JINTF) = MOD(A_INTF_FREQ_HR(JINTF),24)                DR240293.687    
      FIXHD_INTFA(39,JINTF) = 0                                            DR240293.688    
      FIXHD_INTFA(40,JINTF) = 0                                            DR240293.689    
      FIXHD_INTFA(41,JINTF) = A_INTF_FREQ_HR(JINTF)/24                     DR240293.690    
                                                                           ININTF1.154    
CL      Calculate last validity time                                       DR240293.691    
                                                                           ININTF1.156    
      IF (FT_STEPS(NFTOUT).EQ.0) THEN                                      ININTF1.157    
        SECS=A_INTF_END_HR(JINTF)*3600                                     TJ080294.248    
        DAYS = 0                                                           TJ080294.249    
      ELSE                                                                 ININTF1.159    
       IF (STEPim(a_im)-1.LE.FT_FIRSTSTEP(NFTOUT)) THEN   ! First file     GDR5F305.61     
        CALL STP2TIME(FT_FIRSTSTEP(NFTOUT),STEPS_PER_PERIODim(a_im),       GDR3F305.131    
     &                SECS_PER_PERIODim(a_im),DAYS,SECS)                   GDR3F305.132    
        SECS=SECS + FT_STEPS(NFTOUT)*3600/A_STEPS_PER_HR                   TJ080294.252    
       ELSE ! not first file                                               ININTF1.163    
        CALL STP2TIME(STEPim(a_im)-1+FT_STEPS(NFTOUT),                     GDR3F305.133    
     &      STEPS_PER_PERIODim(a_im),SECS_PER_PERIODim(a_im),DAYS,SECS)    GDR3F305.134    
       ENDIF                                                               ININTF1.165    
      ENDIF                                                                ININTF1.166    
                                                                           DR240293.694    
      CALL SEC2TIME(DAYS,SECS,BASIS_TIME_DAYS,BASIS_TIME_SECS,             TJ080294.255    
     &              YY,MM,DD,HH,MN,SEC,DAY_NO,LCAL360)                     GSS1F304.403    
                                                                           DR240293.696    
      FIXHD_INTFA(28,JINTF) = YY                                           DR240293.697    
      FIXHD_INTFA(29,JINTF) = MM                                           DR240293.698    
      FIXHD_INTFA(30,JINTF) = DD                                           DR240293.699    
      FIXHD_INTFA(31,JINTF) = HH                                           DR240293.700    
      FIXHD_INTFA(32,JINTF) = MN                                           DR240293.701    
      FIXHD_INTFA(33,JINTF) = SEC                                          DR240293.702    
      FIXHD_INTFA(34,JINTF) = DAY_NO                                       DR240293.703    
                                                                           ININTF1.171    
CL      Modify header lengths                                              ININTF1.172    
                                                                           ININTF1.173    
      FIXHD_INTFA(101,JINTF)=PP_LEN_INTHD                                  DR240293.704    
      FIXHD_INTFA(105,JINTF) =                                             DR240293.705    
     &FIXHD_INTFA(100,JINTF)+FIXHD_INTFA(101,JINTF)                        DR240293.706    
      FIXHD_INTFA(106,JINTF)=PP_LEN_REALHD                                 DR240293.707    
      FIXHD_INTFA(110,JINTF)=                                              DR240293.708    
     &FIXHD_INTFA(105,JINTF)+FIXHD_INTFA(106,JINTF)                        DR240293.709    
                                                                           ININTF1.178    
CL      Set length of level dependent constants                            ININTF1.179    
                                                                           ININTF1.180    
      FIXHD_INTFA(112,JINTF)=4                                             DR240293.710    
      IF (INTF_VERT_INTERP(JINTF)) THEN                                    DR240293.711    
        FIXHD_INTFA(111,JINTF)=INTF_P_LEVELS(JINTF)                        DR240293.712    
      ELSE                                                                 ININTF1.184    
        FIXHD_INTFA(111,JINTF)=P_LEVELS                                    DR240293.713    
      END IF                                                               ININTF1.186    
                                                                           ININTF1.187    
C  NO row and column dependent constants                                   ININTF1.188    
      FIXHD_INTFA(115,JINTF)=IMDI                                          DR240293.714    
      FIXHD_INTFA(116,JINTF)=IMDI                                          DR240293.715    
      FIXHD_INTFA(117,JINTF)=IMDI                                          DR240293.716    
      FIXHD_INTFA(120,JINTF)=IMDI                                          DR240293.717    
      FIXHD_INTFA(121,JINTF)=IMDI                                          DR240293.718    
      FIXHD_INTFA(122,JINTF)=IMDI                                          DR240293.719    
                                                                           ININTF1.195    
C  NO field_constants,extra constants,temp_historyfile or compressed       ININTF1.196    
C  indexes                                                                 ININTF1.197    
      DO I=125,145                                                         ININTF1.198    
        FIXHD_INTFA(I,JINTF)=IMDI                                          DR240293.720    
      ENDDO                                                                ININTF1.200    
                                                                           ININTF1.201    
C     Start address and length of look up table                            DR240293.721    
      FIXHD_INTFA(150,JINTF) = FIXHD_INTFA(110,JINTF) +                    DR240293.722    
     &                  FIXHD_INTFA(111,JINTF) * FIXHD_INTFA(112,JINTF)    DR240293.723    
      FIXHD_INTFA(152,JINTF) = NTIMES*INTF_LOOKUPSA                        DR240293.724    
      FIXHD_INTFA(153,JINTF) = IMDI                                        GDR1F400.17     
                                                                           ININTF1.203    
C     Start address and length of data section                             DR240293.725    
c--make sure the data starts on a sector bndry                             GBC5F404.138    
      fixhd_intfa(160, jintf)=((fixhd_intfa(150, jintf)+                   GBC5F404.139    
     2 fixhd_intfa(151, jintf)*fixhd_intfa(152, jintf)+                    GBC5F404.140    
     3 um_sector_size-1)/um_sector_size)*um_sector_size+1                  GBC5F404.141    
      FIXHD_INTFA(161,JINTF) = 0                                           DR240293.728    
                                                                           ININTF1.206    
CL  1.2 Integer header                                                     DR240293.729    
                                                                           ININTF1.210    
      DO I=1,PP_LEN_INTHD                                                  DR240293.730    
        INTHD_INTFA(I,JINTF) = A_INTHD(I)                                  DR240293.731    
      ENDDO                                                                DR240293.732    
                                                                           ININTF1.212    
      INTHD_INTFA(1,JINTF) = INTERFACE_FSTEPim(JINTF,a_im)                 GDR5F305.62     
      INTHD_INTFA(2,JINTF) = A_INTF_FREQ_HR(JINTF)                         DR240293.734    
      INTHD_INTFA(3,JINTF) = NTIMES                                        DR240293.735    
      INTHD_INTFA(6,JINTF) = INTF_ROW_LENGTH(JINTF)                        DR240293.736    
      INTHD_INTFA(7,JINTF) = INTF_P_ROWS(JINTF)                            DR240293.737    
      INTHD_INTFA(8,JINTF) = INTF_P_LEVELS(JINTF)                          DR240293.738    
      INTHD_INTFA(9,JINTF) = INTF_Q_LEVELS(JINTF)                          DR240293.739    
      INTHD_INTFA(15,JINTF)= INTF_LOOKUPSA                                 DR141293.3      
                                                                           DR240293.740    
CL  1.3 Real header                                                        DR240293.741    
                                                                           DR240293.742    
      DO I=1,PP_LEN_REALHD                                                 DR240293.743    
        REALHD_INTFA(I,JINTF) = A_REALHD(I)                                DR240293.744    
      ENDDO                                                                DR240293.745    
                                                                           DR240293.746    
      REALHD_INTFA(1,JINTF) = INTF_EWSPACE(JINTF)                          DR240293.747    
      REALHD_INTFA(2,JINTF) = INTF_NSSPACE(JINTF)                          DR240293.748    
      REALHD_INTFA(3,JINTF) = INTF_FIRSTLAT(JINTF)                         DR240293.749    
      REALHD_INTFA(4,JINTF) = INTF_FIRSTLONG(JINTF)                        DR240293.750    
      REALHD_INTFA(5,JINTF) = INTF_POLELAT(JINTF)                          DR240293.751    
      REALHD_INTFA(6,JINTF) = INTF_POLELONG(JINTF)                         DR240293.752    
                                                                           DR240293.753    
CL  1.4 Level dependent constants                                          DR240293.754    
                                                                           DR240293.755    
        IF (INTF_VERT_INTERP(JINTF)) THEN                                  DR240293.756    
CL      Set level dependent constants from namelist INTFCNST  if           DR240293.757    
CL      vertical interpolation required                                    DR240293.758    
                                                                           DR240293.759    
          DO LEVEL=1,INTF_P_LEVELS(JINTF)                                  DR240293.760    
            LEVDEPC_INTFA(LEVEL,1,JINTF) = INTF_AK(LEVEL,JINTF)            DR240293.761    
            LEVDEPC_INTFA(LEVEL,2,JINTF) = INTF_BK(LEVEL,JINTF)            DR240293.762    
            LEVDEPC_INTFA(LEVEL,3,JINTF) =                                 DR240293.763    
     &              INTF_AKH(LEVEL+1,JINTF)-INTF_AKH(LEVEL,JINTF)          DR240293.764    
            LEVDEPC_INTFA(LEVEL,4,JINTF) =                                 DR240293.765    
     &      INTF_BKH(LEVEL+1,JINTF)-INTF_BKH(LEVEL,JINTF)                  DR240293.766    
          ENDDO                                                            DR240293.767    
                                                                           DR240293.768    
        ELSE                                                               DR240293.769    
                                                                           DR240293.770    
C       Copy level dependent constants from source model                   DR240293.771    
                                                                           DR240293.772    
          DO I=1,4                                                         DR240293.773    
            DO LEVEL=1,P_LEVELS                                            DR240293.774    
              LEVDEPC_INTFA(LEVEL,I,JINTF) =                               DR240293.775    
     &        A_LEVDEPC(LEVEL+(I-1)*P_LEVELS)                              DR240293.776    
            ENDDO                                                          DR240293.777    
          ENDDO                                                            DR240293.778    
                                                                           DR240293.779    
        END IF                                                             DR240293.780    
                                                                           DR240293.781    
CL  2.0 Write out headers                                                  DR240293.782    
                                                                           DR240293.783    
CL  2.1 Fixed length header                                                DR240293.784    
                                                                           DR240293.785    
        CALL BUFFOUT(NFTOUT,FIXHD_INTFA(1,JINTF),LEN_FIXHD,LEN_IO,A_IO)    DR240293.786    
                                                                           ININTF1.214    
C Check for I/O Errors                                                     ININTF1.215    
                                                                           ININTF1.216    
        IF(A_IO.NE.-1.0.OR.LEN_IO.NE.LEN_FIXHD) THEN                       ININTF1.217    
          CALL IOERROR('buffer out of fixed length header',A_IO,LEN_IO,    ININTF1.218    
     &                  LEN_FIXHD)                                         ININTF1.219    
          CMESSAGE='IN_INTF:I/O ERROR'                                     ININTF1.220    
          ICODE=1                                                          ININTF1.221    
          RETURN                                                           ININTF1.222    
        END IF                                                             ININTF1.223    
                                                                           ININTF1.224    
CL  2.2 Integer header                                                     DR240293.787    
                                                                           ININTF1.226    
        CALL BUFFOUT(NFTOUT,INTHD_INTFA(1,JINTF),                          DR240293.788    
     &               PP_LEN_INTHD,LEN_IO,A_IO)                             DR240293.789    
                                                                           ININTF1.230    
C       Check for I/O Errors                                               DR240293.790    
                                                                           ININTF1.242    
        IF(A_IO.NE.-1.0.OR.LEN_IO.NE.PP_LEN_INTHD) THEN                    ININTF1.243    
          CALL IOERROR('buffer out of integer header',A_IO,LEN_IO,         RB120293.5      
     &                  PP_LEN_INTHD)                                      ININTF1.245    
          CMESSAGE='IN_INTF:I/O ERROR'                                     ININTF1.246    
          ICODE=2                                                          ININTF1.247    
          RETURN                                                           ININTF1.248    
        END IF                                                             ININTF1.249    
                                                                           ININTF1.250    
CL  2.3 Real header                                                        DR240293.791    
                                                                           ININTF1.252    
        CALL BUFFOUT(NFTOUT,REALHD_INTFA(1,JINTF),                         DR240293.792    
     &               PP_LEN_REALHD,LEN_IO,A_IO)                            DR240293.793    
                                                                           ININTF1.256    
C       Check for I/O Errors                                               DR240293.794    
                                                                           ININTF1.269    
        IF(A_IO.NE.-1.0.OR.LEN_IO.NE.PP_LEN_REALHD) THEN                   ININTF1.270    
          CALL IOERROR('buffer out of real header',A_IO,LEN_IO,            RB120293.6      
     &                  PP_LEN_REALHD)                                     ININTF1.272    
          CMESSAGE='IN_INTF:I/O ERROR'                                     ININTF1.273    
          ICODE=3                                                          ININTF1.274    
          RETURN                                                           ININTF1.275    
        END IF                                                             ININTF1.276    
                                                                           ININTF1.277    
CL  2.4 Level dependent constants                                          DR240293.795    
                                                                           ININTF1.278    
C       Write out each variable separately as second dimension             DR240293.796    
C       of LEVDEPC_INTFA is now a maximum dimension for all                DR240293.797    
C       interface areas being generated                                    DR240293.798    
                                                                           ININTF1.280    
        DO I=1,4                                                           DR240293.799    
                                                                           ININTF1.284    
        CALL BUFFOUT(NFTOUT,LEVDEPC_INTFA(1,I,JINTF),                      DR240293.800    
     &       FIXHD_INTFA(111,JINTF),LEN_IO,A_IO)                           DR240293.801    
                                                                           ININTF1.291    
C       Check for I/O Errors                                               DR240293.802    
                                                                           ININTF1.293    
        IF (A_IO.NE.-1.0.OR.LEN_IO.NE.FIXHD_INTFA(111,JINTF)) THEN         DR240293.803    
          CALL IOERROR('buffer out of level dependent constants',A_IO,     ININTF1.313    
     &         LEN_IO,FIXHD_INTFA(111,JINTF))                              DR240293.804    
          CMESSAGE='IN_INTF : I/O ERROR'                                   ININTF1.315    
          ICODE=4                                                          ININTF1.316    
          RETURN                                                           ININTF1.317    
        END IF                                                             ININTF1.318    
                                                                           ININTF1.319    
        ENDDO                                                              DR240293.805    
                                                                           ININTF1.320    
CL  2.5 Write dummy record to reserve space for PP headers                 DR240293.806    
                                                                           ININTF1.322    
        LEN_PP=INTHD_INTFA(3,JINTF)*INTF_LOOKUPSA+1                        DR240293.807    
        IF(LEN_PP.GT.LEN_TOT) THEN                                         ININTF1.324    
          CMESSAGE='IN_INTF:Insufficient space for PP headers'             ININTF1.325    
          ICODE=5                                                          ININTF1.326    
          RETURN                                                           ININTF1.327    
        END IF                                                             ININTF1.328    
                                                                           DR240293.808    
        CALL BUFFOUT(NFTOUT,D1(1),LEN_PP,LEN_IO,A_IO)                      ININTF1.330    
                                                                           ININTF1.331    
C Check for I/O Errors                                                     ININTF1.332    
                                                                           ININTF1.333    
        IF(A_IO.NE.-1.0.OR.LEN_IO.NE.LEN_PP) THEN                          ININTF1.334    
          CALL IOERROR('buffer out of dummy PP headers',A_IO,LEN_IO,       ININTF1.335    
     &                  LEN_PP)                                            ININTF1.336    
          CMESSAGE='IN_INTF=I/O ERROR'                                     ININTF1.337    
          ICODE=6                                                          ININTF1.338    
          RETURN                                                           ININTF1.339    
        END IF                                                             ININTF1.340    
                                                                           ININTF1.341    
C    Remainder of headers not used                                         ININTF1.343    
                                                                           ININTF1.344    
       ELSE                                                                ININTF1.345    
CL      LNEWBND = False (dataset exists)                                   DR240293.809    
                                                                           ININTF1.347    
CL  3.0 Read in headers                                                    DR240293.810    
CL      If reinitialised boundary output file to be processed              DR240293.811    
CL      then open it.                                                      DR240293.812    
CL                                                                         ININTF1.350    
        IF (FT_STEPS(NFTOUT).GT.0) THEN                                    DR240293.813    
        STRING=MODEL_FT_UNIT(NFTOUT)                                       ININTF1.353    
        PPNAME=STRING(18:31)                                               ININTF1.354    
        CALL FILE_OPEN(NFTOUT,PPNAME,14,1,1,ICODE)                         GPB1F305.53     
        IF (ICODE.NE.0) THEN                                               DR240293.814    
          CMESSAGE="IN_INTF: Error opening preassigned boundary file"      DR240293.815    
          GO TO 999   !  Return                                            DR240293.816    
        ENDIF                                                              DR240293.817    
C                                                                          ININTF1.357    
        ENDIF                                                              ININTF1.358    
                                                                           ININTF1.361    
CL  3.1  Fixed length header                                               DR240293.818    
                                                                           DR240293.819    
        CALL BUFFIN(NFTOUT,FIXHD_INTFA(1,JINTF),LEN_FIXHD,LEN_IO,A_IO)     DR240293.820    
C Check for I/O Errors                                                     ININTF1.363    
         IF(A_IO.NE.-1.0.OR.LEN_IO.NE.LEN_FIXHD) THEN                      ININTF1.364    
           CALL IOERROR('buffer in of fixed length header',A_IO,LEN_IO,    ININTF1.365    
     &                   LEN_FIXHD)                                        ININTF1.366    
           CMESSAGE='IN_INTF:I/O ERROR'                                    ININTF1.367    
           ICODE=7                                                         ININTF1.368    
           RETURN                                                          ININTF1.369    
         ENDIF                                                             DR240293.821    
                                                                           ININTF1.372    
CL  3.2  Integer header                                                    DR240293.822    
                                                                           DR240293.823    
         CALL BUFFIN(NFTOUT,INTHD_INTFA(1,JINTF),PP_LEN_INTHD,             DR240293.824    
     &               LEN_IO,A_IO)                                          DR240293.825    
                                                                           ININTF1.374    
C Check for I/O Errors                                                     ININTF1.375    
                                                                           ININTF1.376    
         IF(A_IO.NE.-1.0.OR.LEN_IO.NE.PP_LEN_INTHD) THEN                   ININTF1.377    
           CALL IOERROR('buffer in of integer header',A_IO,LEN_IO,         RB120293.7      
     &                   PP_LEN_INTHD)                                     ININTF1.379    
           CMESSAGE='IN_INTF:I/O ERROR'                                    ININTF1.380    
           ICODE=8                                                         ININTF1.381    
           RETURN                                                          ININTF1.382    
         END IF                                                            ININTF1.383    
                                                                           ININTF1.384    
CL  3.3  Real header                                                       DR240293.826    
                                                                           DR240293.827    
         CALL BUFFIN(NFTOUT,REALHD_INTFA(1,JINTF),PP_LEN_REALHD,           DR240293.828    
     &               LEN_IO,A_IO)                                          DR240293.829    
                                                                           ININTF1.386    
C Check for I/O Errors                                                     ININTF1.387    
                                                                           ININTF1.388    
         IF(A_IO.NE.-1.0.OR.LEN_IO.NE.PP_LEN_REALHD) THEN                  ININTF1.389    
           CALL IOERROR('buffer in of real header',A_IO,LEN_IO,            RB120293.8      
     &                   PP_LEN_REALHD)                                    ININTF1.391    
           CMESSAGE='IN_INTF:I/O ERROR'                                    ININTF1.392    
           ICODE=9                                                         ININTF1.393    
           RETURN                                                          ININTF1.394    
         END IF                                                            ININTF1.395    
                                                                           ININTF1.396    
CL Reset LNEWBND to true after reading in header information to allow      DR240293.830    
CL writing of new headers for subsequent reinitialised files.              DR240293.831    
C                                                                          ININTF1.397    
         LNEWBND(JINTF) = .TRUE.                                           DR240293.832    
       END IF                                                              ININTF1.402    
                                                                           ININTF1.403    
CL  4.0 Calculate the interpolation cofficients for interface area JINTF   DR240293.833    
       IF (LTIMER) CALL TIMER ('INTF_HIC',3)                               DR240293.834    
       CALL INTF_HINTC (                                                   @DYALLOC.1334   
*IF -DEF,MPP                                                               APB4F401.485    
     & P_ROWS, U_ROWS, ROW_LENGTH, U_FIELD,                                ANF1F304.16     
*ELSE                                                                      APB4F401.486    
     & glsize(2), glsize(2)-1, glsize(1), glsize(1)*(glsize(2)-1),         APB4F401.487    
*ENDIF                                                                     APB4F401.488    
*CALL ARGSIZE                                                              @DYALLOC.1335   
*CALL ARGDUMA                                                              @DYALLOC.1336   
*CALL ARGINFA                                                              @DYALLOC.1337   
     &   JINTF,LEN_INTFA_P(JINTF),LEN_INTFA_U(JINTF),                      @DYALLOC.1338   
     &   ICODE,CMESSAGE,LLBOUTim(A_IM))                                    GDR3F305.135    
       IF (LTIMER) CALL TIMER ('INTF_HIC',4)                               DR240293.839    
                                                                           ININTF1.405    
       IF (ICODE.NE.0) THEN                                                DR240293.840    
         CMESSAGE = 'IN_INTF : Error in routine INTF_HINTC'                DR240293.841    
         GO TO 999   !  Return                                             DR240293.842    
       ENDIF                                                               DR240293.843    
                                                                           ININTF1.408    
      END IF                                                               DR240293.844    
                                                                           ININTF1.599    
      END IF         !  LLBOUTim(A_IM)                                     GDR3F305.136    
*ENDIF                                                                     GSS1F304.406    
                                                                           ININTF1.601    
*IF DEF,OCEAN                                                              ININTF1.602    
                                                                           ININTF1.603    
C Ocean code not yet available                                             ININTF1.604    
                                                                           ININTF1.605    
*ENDIF                                                                     ININTF1.606    
                                                                           ININTF1.607    
CL  5.0  End of routine                                                    DR240293.845    
                                                                           ININTF1.609    
      IF (LTIMER) CALL TIMER ('IN_INTF',4)                                 DR240293.846    
 999  RETURN                                                               DR240293.847    
      END                                                                  ININTF1.614    
                                                                           ININTF1.615    
*-----------------------------------------------------------------------   ININTF1.616    
                                                                           ININTF1.617    
                                                                           ININTF1.618    
*ENDIF                                                                     ININTF1.619