*IF DEF,CONTROL,OR,DEF,MAKEBC                                              UIE3F404.28     
C ******************************COPYRIGHT******************************    GTS2F400.4951   
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.4952   
C                                                                          GTS2F400.4953   
C Use, duplication or disclosure of this code is subject to the            GTS2F400.4954   
C restrictions as set forth in the contract.                               GTS2F400.4955   
C                                                                          GTS2F400.4956   
C                Meteorological Office                                     GTS2F400.4957   
C                London Road                                               GTS2F400.4958   
C                BRACKNELL                                                 GTS2F400.4959   
C                Berkshire UK                                              GTS2F400.4960   
C                RG12 2SZ                                                  GTS2F400.4961   
C                                                                          GTS2F400.4962   
C If no contract has been raised with this copy of the code, the use,      GTS2F400.4963   
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.4964   
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.4965   
C Modelling at the above address.                                          GTS2F400.4966   
C ******************************COPYRIGHT******************************    GTS2F400.4967   
C                                                                          GTS2F400.4968   
CLL  Routine: INTF_CTL ----------------------------------------------      INTFCTL1.3      
CLL                                                                        INTFCTL1.4      
CLL  Purpose: Initialises namelist and sets switch for the writing of      INTFCTL1.5      
CLL           boundary data.                                               INTFCTL1.6      
CLL                                                                        INTFCTL1.7      
CLL  Tested under complier:   cft77 5.0.2                                  INTFCTL1.8      
CLL  Tested under OS version: Unicos 6.5.1.a                               INTFCTL1.9      
CLL                                                                        INTFCTL1.10     
CLL  Author:  R.G. Jones         Date: 7 July 1992                         INTFCTL1.11     
CLL                                                                        INTFCTL1.12     
CLL  Model            Modification history :                               DR240293.856    
CLL version  Date                                                          DR240293.857    
CLL                                                                        DR240293.858    
CLL   3.1   03/02/93  Added comdeck CHSUNITS to define NUNITS for i/o      @DYALLOC.2183   
CLL   3.1   13/02/93  Extend INTFCNST namelist & adapt routine to cater    DR240293.859    
CLL                   for multiple LAM areas. Initialise CTIME variables   DR240293.860    
CLL                   A_INTERFACE_FSTEP/LSTEP/STEPS. D. Robinson           DR240293.861    
CLL   3.1   11/03/93  Use NUNITS for loop over i/o units. R T H Barnes.    DR240293.862    
CLL   3.2    13/07/93 Changed CHARACTER*(*) to CHARACTER*(80) for          TS150793.99     
CLL                   portability.  Author Tracey Smith.                   TS150793.100    
CLL   3.2   14/05/93  Dynamic allocation changes. D Robinson               @DYALLOC.2184   
CLL   3.4  30/03/94   DEF LBOUTA replaced by LOGICAL LLBOUTA               GSS1F304.1      
CLL                                          S.J.Swarbrick                 GSS1F304.2      
!    3.5  24/01/95  Moves calculation of INTF_AK, INTF_BK, INTF_AKH,       UDG1F305.158    
!                   INTF_BKH from user interface to reconfiguration.       UDG1F305.159    
!                   Author D.M.Goddard                                     UDG1F305.160    
!    4.0  11/09/95  Add INTF_PACK to INTFCTL namelist. D. Robinson         GDR1F400.4      
!    4.1  16/01/96  Cater for INTF_PACK=2. D. Robinson                     APB4F401.494    
CLL  4.1  22/03/96  For coupled runs, rewind file before reading           GGH2F401.11     
Cll                 namelist INTFCNST. G Henderson                         GGH2F401.12     
!LL  4.4  06/08/97  Generalise for mixed phase precipitation scheme.       ARB1F404.370    
!LL  4.4  23/10/97  Ancil namelist change means always need to rewind(5)   ARB1F404.371    
!LL                                                       RTHBarnes.       ARB1F404.372    
!LL  4.4  03/11/97  Remove initialisation of INTF_P/Q/TR levels if no      UDR2F404.46     
!LL                 Vertical Interp. required. D. Robinson.                UDR2F404.47     
!LL  4.5  29/07/98  Add ARGINFA/TYPINFA/CMAXSIZE/CINTFA/CNAMINFA.          GDR2F405.56     
!LL                 Namelist INTFCNST renamed to INTFCNSTA. Initialise     GDR2F405.57     
!LL                 LBC_UNIT_NO_A and FT_OUTPUT. D. Robinson.              GDR2F405.58     
CLL                                                                        DR240293.863    
CLL  Programming standard: UM Doc Paper 3, version 4 (05/02/92)            INTFCTL1.13     
CLL                                                                        RS030293.115    
CLL  Logical components covered:                                           INTFCTL1.15     
CLL                                                                        INTFCTL1.16     
CLL  Project task:                 D8                                      INTFCTL1.17     
CLL                                                                        INTFCTL1.18     
CLL  External documentation:       UM Doc Paper D8                         INTFCTL1.19     
CLL                                                                        INTFCTL1.20     
CLL  -------------------------------------------------------------------   INTFCTL1.21     
C*L  Interface and arguments--------------------------------------------   INTFCTL1.22     
                                                                           @DYALLOC.2185   

      SUBROUTINE INTF_CTL (                                                 2,4@DYALLOC.2186   
*CALL ARGSIZE                                                              @DYALLOC.2187   
*CALL ARGINFA                                                              GDR2F405.59     
     &                     ICODE,CMESSAGE)                                 GDR3F305.261    
                                                                           @DYALLOC.2189   
      IMPLICIT NONE                                                        INTFCTL1.27     
                                                                           @DYALLOC.2190   
*CALL CMAXSIZE                                                             GDR2F405.60     
*CALL TYPSIZE                                                              @DYALLOC.2191   
*CALL TYPINFA                                                              GDR2F405.61     
                                                                           @DYALLOC.2192   
      INTEGER                                                              @DYALLOC.2193   
     &  ICODE                     ! Out - Return Code                      @DYALLOC.2194   
                                                                           @DYALLOC.2195   
      CHARACTER*80 CMESSAGE     ! Out - Error message on failure           TS150793.101    
C*----------------------------------------------------------------------   INTFCTL1.31     
C  Common blocks                                                           INTFCTL1.32     
C                                                                          INTFCTL1.33     
*CALL CSUBMODL                                                             GDR3F305.262    
*CALL CHSUNITS                                                             RS030293.116    
*CALL CMAXSIZO                                                             GMB1F405.140    
*CALL CHISTORY                                                             GDR3F305.264    
*CALL CCONTROL                                                             GDR3F305.265    
*CALL CTIME                                                                GDR3F305.266    
*IF DEF,ATMOS                                                              GDR2F405.62     
*CALL CINTFA                                                               GDR2F405.63     
*ENDIF                                                                     GDR2F405.64     
                                                                           GDR2F405.65     
*IF DEF,OCEAN                                                              GMB1F405.141    
*CALL CINTFO                                                               GMB1F405.142    
*ENDIF                                                                     GMB1F405.143    
C                                                                          INTFCTL1.40     
C  Subroutines called ABCALC                                               UDG1F305.161    
C                                                                          UDG1F305.162    
      EXTERNAL ABCALC,INTF_AREA                                            GDR2F405.66     
C                                                                          UDG1F305.164    
C-----------------------------------------------------------------------   UDG1F305.165    
*CALL C_MDI                                                                UDG1F305.166    
C-----------------------------------------------------------------------   UDG1F305.167    
C                                                                          INTFCTL1.43     
C  Local variables                                                         INTFCTL1.44     
C                                                                          INTFCTL1.45     
      INTEGER JINTF               ! Interface area index                   GMB1F405.144    
      INTEGER INTF_AREA_NO        ! Interface area number                  GMB1F405.145    
      INTEGER INTF_UNIT_NO        ! Interface unit number                  GMB1F405.146    
                                                                           GMB1F405.147    
*IF DEF,ATMOS                                                              GMB1F405.148    
      INTEGER IUNIT               ! Counter for loop over unit nos.        INTFCTL1.46     
      INTEGER NFTUNIT             ! Fortran unit no. selected              INTFCTL1.47     
      INTEGER STEP                ! Current atmos. step                    INTFCTL1.48     
      INTEGER A_STEPS_PER_HR ! steps per hour for atmosphere               GDR3F305.267    
                                                                           GMB1F405.149    
      INTEGER                                                              UDG1F305.169    
     & IERR                    !Return code from ABCALC                    UDG1F305.170    
     &,J                                                                   UDG1F305.178    
     &,NQ               ! number of water variables in interface files     ARB1F404.373    
                                                                           UDG1F305.179    
C  Namelist for interface constants                                        INTFCTL1.50     
C                                                                          INTFCTL1.51     
*CALL CNAMINFA                                                             GDR2F405.67     
*ENDIF                                                                     UDG1F305.185    
                                                                           INTFCTL1.56     
*IF DEF,OCEAN                                                              GMB1F405.150    
      INTEGER O_STEPS_PER_HR ! steps per hour (for ocean)                  GMB1F405.151    
      INTEGER I ! loop index over levels                                   GMB1F405.152    
      INTEGER NFTOUT  ! output unit number                                 GMB1F405.153    
      INTEGER J ! For setting LBC_UNIT_NO_O                                GMB1F405.154    
*CALL CNAMINFO                                                             GMB1F405.155    
*ENDIF                                                                     GMB1F405.156    
                                                                           GMB1F405.157    
                                                                           GMB1F405.158    
        ICODE=0                                                            INTFCTL1.57     
        CMESSAGE=' '                                                       INTFCTL1.58     
                                                                           INTFCTL1.59     
CL 1. Atmosphere data                                                      GMB1F405.159    
                                                                           GMB1F405.160    
*IF DEF,ATMOS                                                              GSS1F304.5      
      IF (LLBOUTim(a_im)) THEN                                             GDR3F305.268    
                                                                           INTFCTL1.61     
C     Initialise namelist parameters to cater for no boundary datasets     DR240293.877    
      DO JINTF = 1,MAX_N_INTF_A                                            GDR2F405.68     
        A_INTF_START_HR(JINTF) = 0                                         DR240293.879    
        A_INTF_END_HR  (JINTF) = 0                                         DR240293.880    
        A_INTF_FREQ_HR (JINTF) = 0                                         DR240293.881    
        INTF_METH_LEV_CALC(JINTF) = 5                                      UDG1F305.186    
        INTF_MAX_SIG_HLEV(JINTF)  = 0                                      UDG1F305.187    
        INTF_MIN_PRS_HLEV(JINTF)  = 0                                      UDG1F305.188    
        INTF_PACK(JINTF) = 1            !  32 bit packing                  GDR1F400.6      
        DO J=1,MAX_INTF_LEVELS+1                                           GDR2F405.69     
          INTF_ETAH(J,JINTF)=RMDI                                          GDR2F405.70     
        ENDDO                                                              GDR2F405.71     
      ENDDO                                                                DR240293.882    
                                                                           DR240293.883    
C  Read namelist for interface                                             INTFCTL1.62     
                                                                           INTFCTL1.63     
      REWIND (5)                                                           GGH2F401.14     
      READ(5,INTFCNSTA)                                                    GDR2F405.72     
CL                                                                         UDG1F305.189    
                                                                           GDR2F405.73     
CL Initialise LBC_UNIT_NO_A and FT_OUTPUT.                                 GDR2F405.74     
                                                                           GDR2F405.75     
      DO JINTF=1,MAX_N_INTF_A                                              GDR2F405.76     
        LBC_UNIT_NO_A(JINTF) = 0                                           GDR2F405.77     
      ENDDO                                                                GDR2F405.78     
      DO JINTF=1,N_INTF_A                                                  GDR2F405.79     
        J = 139+LBC_STREAM_A(JINTF)                                        GDR2F405.80     
        LBC_UNIT_NO_A(JINTF) = J                                           GDR2F405.81     
        FT_Output(J) = 'Y'                                                 GDR2F405.82     
      ENDDO                                                                GDR2F405.83     
                                                                           GDR2F405.84     
      write (6,*) ' '                                                      GDR2F405.85     
      write (6,*) 'LBC_STREAM_A and LBC_UNIT_NO_A'                         GDR2F405.86     
      do jintf=1,n_intf_a                                                  GDR2F405.87     
      write (6,*) jintf,' stream no ',lbc_stream_a(jintf),                 GDR2F405.88     
     &                  ' unit_no ',lbc_unit_no_a(jintf)                   GDR2F405.89     
      enddo                                                                GDR2F405.90     
      write (6,*) ' '                                                      GDR2F405.91     
      write (6,*) 'FT_Output for Boundary Files.'                          GDR2F405.92     
      do j=140,147                                                         GDR2F405.93     
      write (6,*) ' Unit No ',J,' FT_Output ',ft_output(j)                 GDR2F405.94     
      enddo                                                                GDR2F405.95     
                                                                           GDR2F405.96     
CL Calculate INTF_AK,INTF_BK,INTF_AKH,INTF_BKH from INTF_ETAH              UDG1F305.190    
CL                                                                         UDG1F305.191    
C Initialise arrays                                                        UDG1F305.192    
      DO JINTF = 1,N_INTF_A                                                UDG1F305.193    
        DO J=1,MAX_INTF_P_LEVELS                                           GDR2F405.97     
          INTF_AK(J,JINTF)=RMDI                                            UDG1F305.195    
          INTF_BK(J,JINTF)=RMDI                                            UDG1F305.196    
        END DO                                                             UDG1F305.197    
        DO J=1,MAX_INTF_P_LEVELS+1                                         GDR2F405.98     
          INTF_AKH(J,JINTF)=RMDI                                           UDG1F305.199    
          INTF_BKH(J,JINTF)=RMDI                                           UDG1F305.200    
        ENDDO                                                              UDG1F305.201    
      ENDDO                                                                UDG1F305.202    
                                                                           UDG1F305.203    
      DO JINTF = 1,N_INTF_A                                                UDG1F305.204    
        IF(INTF_VERT_INTERP(JINTF)) THEN ! Vertical interpolation needed   UDG1F305.205    
          CALL ABCALC(INTF_METH_LEV_CALC(JINTF),1,1                        UDG1F305.206    
     &,               INTF_P_LEVELS(JINTF)                                 UDG1F305.207    
     &,               INTF_ETAH(INTF_MIN_PRS_HLEV(JINTF),JINTF)            UDG1F305.208    
     &,               INTF_ETAH(INTF_MAX_SIG_HLEV(JINTF),JINTF)            UDG1F305.209    
     &,               INTF_ETAH(1,JINTF)                                   UDG1F305.210    
     &,               INTF_AK(1,JINTF),INTF_BK(1,JINTF)                    UDG1F305.211    
     &,               INTF_AKH(1,JINTF),INTF_BKH(1,JINTF),IERR)            UDG1F305.212    
                                                                           UDG1F305.213    
          IF(IERR.NE.0) THEN                                               UDG1F305.214    
            WRITE(6,*) ' *ERROR*  IN ABCALC FROM INTF_CTL. IERR  '         UDG1F305.215    
     &        ,IERR                                                        UDG1F305.216    
            WRITE(6,*) '   CHECK YOUR ATMOS LEVEL SPEC FOR MODEL'          UDG1F305.217    
            ICODE = 2                                                      GDR2F405.99     
            WRITE (cmessage,*) 'INTF_CTL : Error IN ABCALC.'               GDR2F405.100    
            GO TO 9999   !  Return                                         GDR2F405.101    
          END IF                                                           UDG1F305.219    
                                                                           UDG1F305.220    
          WRITE(6,*) 'INTF_AK='                                            UDG1F305.221    
          WRITE(6,'(3(E22.15,'',''))')                                     UDG1F305.222    
     &       (INTF_AK(J,JINTF),J=1,INTF_P_LEVELS(JINTF))                   UDG1F305.223    
          WRITE(6,*) 'INTF_BK='                                            UDG1F305.224    
          WRITE(6,'(3(E22.15,'',''))')                                     UDG1F305.225    
     &       (INTF_BK(J,JINTF),J=1,INTF_P_LEVELS(JINTF))                   UDG1F305.226    
          WRITE(6,*) 'INTF_AKH='                                           UDG1F305.227    
          WRITE(6,'(3(E22.15,'',''))')                                     UDG1F305.228    
     &     (INTF_AKH(J,JINTF),J=1,INTF_P_LEVELS(JINTF)+1)                  UDG1F305.229    
          WRITE(6,*) 'INTF_BKH='                                           UDG1F305.230    
          WRITE(6,'(3(E22.15,'',''))')                                     UDG1F305.231    
     &     (INTF_BKH(J,JINTF),J=1,INTF_P_LEVELS(JINTF)+1)                  UDG1F305.232    
                                                                           UDG1F305.233    
        END IF                                                             UDG1F305.240    
                                                                           UDG1F305.241    
       IF (INTF_PACK(JINTF).LT.0 .OR. INTF_PACK(JINTF).GT.2) THEN          APB4F401.495    
          CMESSAGE = 'INTFCTL : Invalid value for INTF_PACK.'              GDR1F400.8      
          ICODE = 1                                                        GDR1F400.9      
          WRITE (6,*) ' INTF_PACK ',INTF_PACK                              GDR1F400.10     
          WRITE (6,*) ' Valid values for INTF_PACK are 0 and 1'            GDR1F400.11     
          GO TO 9999   !  Return                                           GDR1F400.12     
        ENDIF                                                              GDR1F400.13     
                                                                           GDR1F400.14     
      END  DO                                                              UDG1F305.242    
                                                                           DR240293.885    
C     Initialise variables in CTIME comdeck.                               DR240293.886    
      A_STEPS_PER_HR = 3600*STEPS_PER_PERIODim(a_im)/                      GDR3F305.269    
     &                      SECS_PER_PERIODim(a_im)                        GDR3F305.270    
      DO JINTF = 1,N_INTF_A                                                DR240293.887    
       INTERFACE_FSTEPim(JINTF,a_im) =                                     GDR5F305.88     
     &   A_INTF_START_HR(JINTF)*A_STEPS_PER_HR                             GDR5F305.89     
       INTERFACE_LSTEPim(JINTF,a_im) =                                     GDR5F305.90     
     &   A_INTF_END_HR(JINTF)  *A_STEPS_PER_HR                             GDR5F305.91     
       INTERFACE_STEPSim(JINTF,a_im) =                                     GDR5F305.92     
     &   A_INTF_FREQ_HR(JINTF) *A_STEPS_PER_HR                             GDR5F305.93     
      ENDDO                                                                DR240293.891    
C                                                                          INTFCTL1.65     
C     Initialise variables in CINTF comdeck.                               DR240293.892    
      DO JINTF = 1,N_INTF_A                                                DR240293.893    
                                                                           DR240293.894    
C       Length of interface field on p* grid                               DR240293.895    
        LEN_INTFA_P(JINTF) =                                               DR240293.896    
     &  (INTF_ROW_LENGTH(JINTF)+INTF_P_ROWS(JINTF)-2*INTFWIDTHA(JINTF))    DR240293.897    
     &  *2*INTFWIDTHA(JINTF)                                               DR240293.898    
                                                                           DR240293.899    
C       Length of interface field on wind grid                             DR240293.900    
        LEN_INTFA_U(JINTF) = LEN_INTFA_P(JINTF) - 4*INTFWIDTHA(JINTF)      DR240293.901    
                                                                           DR240293.902    
C       Length of interface data                                           DR240293.903    
        IF (L_LSPICE) THEN ! mixed phase precipitation scheme              ARB1F404.374    
          NQ = 2                                                           ARB1F404.375    
        ELSE                                                               ARB1F404.376    
          NQ = 1                                                           ARB1F404.377    
        END IF                                                             ARB1F404.378    
        LEN_INTFA_DATA(JINTF) = LEN_INTFA_P(JINTF) *                       DR240293.904    
     &   (INTF_P_LEVELS(JINTF) + INTF_Q_LEVELS(JINTF)*NQ + 1 +             ARB1F404.379    
     &    INTF_TR_LEVELS(JINTF)*TR_VARS) +                                 DR240293.906    
     &    LEN_INTFA_U(JINTF)*INTF_P_LEVELS(JINTF)*2                        DR240293.907    
                                                                           DR240293.908    
      ENDDO                                                                DR240293.909    
C                                                                          INTFCTL1.68     
      STEP = STEPim(a_im)                                                  GDR5F305.94     
C                                                                          INTFCTL1.70     
C  Loop over all possible fortran unit numbers to find                     GMB1F405.161    
C  new output boundary files (i.e. set LNEWBND)                            GMB1F405.162    
                                                                           DR240293.918    
      call intf_new_files (20, NUNITS, MAX_N_INTF_A, A_IM,                 GMB1F405.163    
     &    TYPE_LETTER_1, FT_OUTPUT, A_INTF_FREQ_HR, FT_STEPS, STEP,        GMB1F405.164    
     &    FT_FIRSTSTEP, INTERFACE_STEPSim(1,A_IM),                         GMB1F405.165    
     &    LNEWBND )                                                        GMB1F405.166    
                                                                           DR240293.920    
      END IF ! LLBOUTim(a_im)                                              GDR3F305.271    
*ENDIF                                                                     GSS1F304.8      
                                                                           GMB1F405.167    
CL 2. Ocean data                                                           GMB1F405.168    
                                                                           GMB1F405.169    
*IF DEF,OCEAN                                                              GMB1F405.170    
      IF (LLBOUTim(o_im)) THEN                                             GMB1F405.171    
                                                                           GMB1F405.172    
CL 2.1 Initialise namelist parameters                                      GMB1F405.173    
                                                                           GMB1F405.174    
      DO JINTF = 1,N_INTF_O                                                GMB1F405.175    
                                                                           GMB1F405.176    
CL 2.1.1 to cater for no boundary datasets                                 GMB1F405.177    
        O_INTF_START_HR(JINTF) = 0                                         GMB1F405.178    
        O_INTF_END_HR  (JINTF) = 0                                         GMB1F405.179    
        O_INTF_FREQ_HR (JINTF) = 0                                         GMB1F405.180    
                                                                           GMB1F405.181    
CL 2.1.2 set to "null" values variables which are not used                 GMB1F405.182    
        INTFO_Q_LEVELS (JINTF) = 1                                         GMB1F405.183    
        INTFO_TR_LEVELS(JINTF) = 1                                         GMB1F405.184    
                                                                           GMB1F405.185    
CL 2.1.3 set to RMDIs height of target model levels                        GMB1F405.186    
        DO I = 1, MAX_INTF_LEVELS_O                                        GMB1F405.187    
          O_INTF_AK (I,JINTF) = RMDI                                       GMB1F405.188    
          O_INTF_BK (I,JINTF) = RMDI                                       GMB1F405.189    
          O_INTF_AKH(I,JINTF) = RMDI                                       GMB1F405.190    
          O_INTF_BKH(I,JINTF) = RMDI                                       GMB1F405.191    
        END DO                                                             GMB1F405.192    
                                                                           GMB1F405.193    
        INTFO_PACK(JINTF) = 1      ! => 32 bit packing                     GMB1F405.194    
      ENDDO                                                                GMB1F405.195    
                                                                           GMB1F405.196    
CL 2.2 Read namelist for interface                                         GMB1F405.197    
                                                                           GMB1F405.198    
      REWIND (5)                                                           GMB1F405.199    
      READ(5,INTFCNSTO)                                                    GMB1F405.200    
                                                                           GMB1F405.201    
CL Initialise LBC_UNIT_NO_O and FT_OUTPUT.                                 GMB1F405.202    
                                                                           GMB1F405.203    
      DO JINTF=1,MAX_N_INTF_O                                              GMB1F405.204    
        LBC_UNIT_NO_O(JINTF) = 0                                           GMB1F405.205    
      ENDDO                                                                GMB1F405.206    
      DO JINTF=1,N_INTF_O                                                  GMB1F405.207    
        J = 99+LBC_STREAM_O(JINTF)                                         GMB1F405.208    
        LBC_UNIT_NO_O(JINTF) = J                                           GMB1F405.209    
        FT_Output(J) = 'Y'                                                 GMB1F405.210    
      ENDDO                                                                GMB1F405.211    
                                                                           GMB1F405.212    
      write (6,*) ' '                                                      GMB1F405.213    
      write (6,*) 'LBC_STREAM_O and LBC_UNIT_NO_O'                         GMB1F405.214    
      do jintf=1,n_intf_O                                                  GMB1F405.215    
      write (6,*) jintf,' stream no ',lbc_stream_o(jintf),                 GMB1F405.216    
     &                  ' unit_no ',lbc_unit_no_o(jintf)                   GMB1F405.217    
      enddo                                                                GMB1F405.218    
      write (6,*) ' '                                                      GMB1F405.219    
      write (6,*) 'FT_Output for Boundary Files.'                          GMB1F405.220    
      do j=100,103                                                         GMB1F405.221    
      write (6,*) ' Unit No ',J,' FT_Output ',ft_output(j)                 GMB1F405.222    
      enddo                                                                GMB1F405.223    
                                                                           GMB1F405.224    
CL 2.3 Set up constants required for vertical interpolation                GMB1F405.225    
CL  For vertical interpolation only depths of tracer / velocity            GMB1F405.226    
CL  levels are needed. These must be set by the user in array              GMB1F405.227    
CL  O_INTF_AK. The other arrays O_INTF_BK,O_INTF_AKH,O_INTF_BKH            GMB1F405.228    
CL  are not used and only retained for "consistency" with                  GMB1F405.229    
CL  atmosphere code.                                                       GMB1F405.230    
                                                                           GMB1F405.231    
CL 2.4 Check packing indicator                                             GMB1F405.232    
      DO JINTF = 1,N_INTF_O                                                GMB1F405.233    
       IF (INTFO_PACK(JINTF).LT.0 .OR. INTFO_PACK(JINTF).GT.2) THEN        GMB1F405.234    
          CMESSAGE = 'INTFCTL : Invalid value for INTFO_PACK.'             GMB1F405.235    
          ICODE = 1                                                        GMB1F405.236    
          WRITE (6,*) ' INTFO_PACK ',INTFO_PACK                            GMB1F405.237    
          WRITE (6,*) ' Valid values for INTF_PACK are 0 and 1'            GMB1F405.238    
          GO TO 9999   !  Return                                           GMB1F405.239    
        ENDIF                                                              GMB1F405.240    
      END  DO                                                              GMB1F405.241    
                                                                           GMB1F405.242    
CL 2.5 Initialise variables in CTIME comdeck.                              GMB1F405.243    
      O_STEPS_PER_HR = 3600*STEPS_PER_PERIODim(o_im)/                      GMB1F405.244    
     &                      SECS_PER_PERIODim(o_im)                        GMB1F405.245    
      DO JINTF = 1,N_INTF_O                                                GMB1F405.246    
       INTERFACE_FSTEPim(JINTF,o_im) =                                     GMB1F405.247    
     &   O_INTF_START_HR(JINTF)*O_STEPS_PER_HR                             GMB1F405.248    
       INTERFACE_LSTEPim(JINTF,o_im) =                                     GMB1F405.249    
     &   O_INTF_END_HR(JINTF)  *O_STEPS_PER_HR                             GMB1F405.250    
       INTERFACE_STEPSim(JINTF,o_im) =                                     GMB1F405.251    
     &   O_INTF_FREQ_HR(JINTF) *O_STEPS_PER_HR                             GMB1F405.252    
      ENDDO                                                                GMB1F405.253    
                                                                           GMB1F405.254    
C!!!! temporary write!!!!                                                  GMB1F405.255    
      do JINTF = 1,N_INTF_O                                                GMB1F405.256    
        write(6,*) 'INTERFACE _FSTEPim,_LSTEPim,_STEPSim ',JINTF           GMB1F405.257    
        write(6,*) INTERFACE_FSTEPim(JINTF,o_im),                          GMB1F405.258    
     & INTERFACE_LSTEPim(JINTF,o_im),INTERFACE_STEPSim(JINTF,o_im)         GMB1F405.259    
      end do                                                               GMB1F405.260    
C!!!! temporary write ends!!!!                                             GMB1F405.261    
                                                                           GMB1F405.262    
CL 2.6  Initialise variables in CINTF comdeck.                             GMB1F405.263    
      DO JINTF = 1,N_INTF_O                                                GMB1F405.264    
                                                                           GMB1F405.265    
C LEN_INTFO_P(JINTF) (length of single level interface field               GMB1F405.266    
C on p* grid) and LEN_INTFO_U(JINTF) (length of single level               GMB1F405.267    
C interface field on wind grid) are set in CALC_INTFO which                GMB1F405.268    
C is called by READSIZE                                                    GMB1F405.269    
                                                                           GMB1F405.270    
C Total Length of all interface data output on one timestep                GMB1F405.271    
C Hard-wired for T,S,u,v at all levels and 5 single level                  GMB1F405.272    
C fields on p grid (streamfn, streamfn tendency, snow depth                GMB1F405.273    
C sea-ice concentration and sea-ice thickness.                             GMB1F405.274    
        LEN_INTFO_DATA(JINTF) =                                            GMB1F405.275    
     &    LEN_INTFO_P(JINTF)*INTFO_P_LEVELS(JINTF)*2                       GMB1F405.276    
     &  + LEN_INTFO_U(JINTF)*INTFO_P_LEVELS(JINTF)*2                       GMB1F405.277    
     &  + 5 * LEN_INTFO_P(JINTF)                                           GMB1F405.278    
                                                                           GMB1F405.279    
C!!!! temporary write !!!!                                                 GMB1F405.280    
        write(6,*) 'intfctl1: LEN_INTFO_DATA',LEN_INTFO_DATA(JINTF)        GMB1F405.281    
C!!!! temporary write ends!!!!                                             GMB1F405.282    
                                                                           GMB1F405.283    
                                                                           GMB1F405.284    
      ENDDO  ! JINTF                                                       GMB1F405.285    
C                                                                          GMB1F405.286    
CL 2.7  Loop over all possible fortran unit numbers to find                GMB1F405.287    
CL      new output boundary files (i.e. set LNEWBND_O)                     GMB1F405.288    
                                                                           GMB1F405.289    
       call intf_new_files (20, NUNITS, MAX_N_INTF_O, O_IM,                GMB1F405.290    
     &    TYPE_LETTER_1, FT_OUTPUT, O_INTF_FREQ_HR, FT_STEPS,              GMB1F405.291    
     &    FT_FIRSTSTEP, INTERFACE_STEPSim(1,O_IM), STEPim(o_im),           GMB1F405.292    
     &    LNEWBND_O )                                                      GMB1F405.293    
                                                                           GMB1F405.294    
                                                                           GMB1F405.295    
CL 2.8 Set up NTIMESO .                                                    GMB1F405.296    
      O_STEPS_PER_HR = 3600*STEPS_PER_PERIODim(o_im)/                      GMB1F405.297    
     &                       SECS_PER_PERIODim(o_im)                       GMB1F405.298    
                                                                           GMB1F405.299    
      DO JINTF = 1,N_INTF_O                                                GMB1F405.300    
        CALL INTF_UNIT(o_im, JINTF, NFTOUT)                                GMB1F405.301    
        IF (FT_STEPS(NFTOUT).EQ.0) THEN                                    GMB1F405.302    
          INTFO_NTIMES(JINTF) =                                            GMB1F405.303    
     +  (O_INTF_END_HR(JINTF)-O_INTF_START_HR(JINTF))                      GMB1F405.304    
     +  / O_INTF_FREQ_HR(JINTF) + 1                                        GMB1F405.305    
        ELSE ! reinitialisation                                            GMB1F405.306    
          IF (STEPim(o_im)-1.LE.FT_FIRSTSTEP(NFTOUT)) THEN ! 1st file      GMB1F405.307    
            INTFO_NTIMES(JINTF) = FT_STEPS(NFTOUT)/O_STEPS_PER_HR/         GMB1F405.308    
     +               O_INTF_FREQ_HR(JINTF) + 1                             GMB1F405.309    
          ELSE ! not first file                                            GMB1F405.310    
            INTFO_NTIMES(JINTF) = FT_STEPS(NFTOUT)/O_STEPS_PER_HR/         GMB1F405.311    
     +               O_INTF_FREQ_HR(JINTF)                                 GMB1F405.312    
          ENDIF                                                            GMB1F405.313    
        ENDIF                                                              GMB1F405.314    
      ENDDO  ! JINTF                                                       GMB1F405.315    
                                                                           GMB1F405.316    
      END IF   ! LLBOUTim(o_im)                                            GMB1F405.317    
                                                                           GMB1F405.318    
*ENDIF     OCEAN                                                           GMB1F405.319    
                                                                           GMB1F405.320    
C                                                                          INTFCTL1.109    
CL End of routine                                                          INTFCTL1.110    
C                                                                          INTFCTL1.111    
 9999 CONTINUE                                                             GDR1F400.15     
      RETURN                                                               INTFCTL1.112    
      END                                                                  INTFCTL1.113    
*ENDIF                                                                     INTFCTL1.114