*IF DEF,C92_1A,OR,DEF,MAKEBC                                               UIE3F404.21     
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.15269  
C                                                                          GTS2F400.15270  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.15271  
C restrictions as set forth in the contract.                               GTS2F400.15272  
C                                                                          GTS2F400.15273  
C                Meteorological Office                                     GTS2F400.15274  
C                London Road                                               GTS2F400.15275  
C                BRACKNELL                                                 GTS2F400.15276  
C                Berkshire UK                                              GTS2F400.15277  
C                RG12 2SZ                                                  GTS2F400.15278  
C                                                                          GTS2F400.15279  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.15280  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.15281  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.15282  
C Modelling at the above address.                                          GTS2F400.15283  
C ******************************COPYRIGHT******************************    GTS2F400.15284  
C                                                                          GTS2F400.15285  
!+ Performs Bi-linear horizitontal interpolation                           HINT_BL1.3      
!                                                                          HINT_BL1.4      
! Subroutine Interface:                                                    HINT_BL1.5      

      SUBROUTINE H_INT_BL(ROWS_IN,ROW_LENGTH_IN,LEN_FIELD_OUT               39HINT_BL1.6      
     &,                   INDEX_B_L,INDEX_B_R,DATA_IN                      HINT_BL1.7      
     &,                   WEIGHT_B_L,WEIGHT_B_R,WEIGHT_T_L,WEIGHT_T_R      HINT_BL1.8      
     &,                   DATA_OUT)                                        HINT_BL1.9      
                                                                           HINT_BL1.10     
CLL  System component: S121                                                HINT_BL1.11     
CLL                                                                        HINT_BL1.12     
CLL  System task: S1                                                       HINT_BL1.13     
CLL                                                                        HINT_BL1.14     
CLL  Purpose:                                                              HINT_BL1.15     
CLL                                                                        HINT_BL1.16     
CLL  Documentation:                                                        HINT_BL1.17     
CLL            The interpolation formulae are described in                 HINT_BL1.18     
CLL            unified model on-line documentation paper S1.               HINT_BL1.19     
CLL                                                                        HINT_BL1.20     
      IMPLICIT NONE                                                        HINT_BL1.21     
!                                                                          HINT_BL1.22     
! Description:                                                             HINT_BL1.23     
!   Carries out bi-linear horizontal interpolation using coefficients      HINT_BL1.24     
!   and gather indices calculated in subroutine H_INT_CO                   HINT_BL1.25     
!                                                                          HINT_BL1.26     
! Method:                                                                  HINT_BL1.27     
!   See UMDP S1 for full desciption                                        HINT_BL1.28     
!                                                                          HINT_BL1.29     
! Current Code Owner: D.M. Goddard                                         HINT_BL1.30     
!                                                                          HINT_BL1.31     
! History:                                                                 HINT_BL1.32     
! Version   Date     Comment                                               HINT_BL1.33     
! -------   ----     -------                                               HINT_BL1.34     
! 3.0      ??????   Original code. A.Dickinson                             HINT_BL1.35     
! 4.0      160395   Renamed and brought up to new standard D.M. Goddard    HINT_BL1.36     
!                                                                          HINT_BL1.37     
! Code Description:                                                        HINT_BL1.38     
!   Language: FORTRAN 77 + common extensions.                              HINT_BL1.39     
!   This code is written to UMDP3 v6 programming standards.                HINT_BL1.40     
!                                                                          HINT_BL1.41     
! System component covered: S121                                           HINT_BL1.42     
! System Task:              S1                                             HINT_BL1.43     
!                                                                          HINT_BL1.44     
! Declarations:                                                            HINT_BL1.45     
!   These are of the form:-                                                HINT_BL1.46     
!     INTEGER      ExampleVariable      !Description of variable           HINT_BL1.47     
!                                                                          HINT_BL1.48     
! Subroutine arguments                                                     HINT_BL1.49     
!   Scalar arguments with intent(in):                                      HINT_BL1.50     
      INTEGER  ROWS_IN              !No of P rows on source grid           HINT_BL1.51     
      INTEGER  ROW_LENGTH_IN        !No of pts per row on source grid      HINT_BL1.52     
      INTEGER  LEN_FIELD_OUT        !No of points on target grid           HINT_BL1.53     
                                                                           HINT_BL1.54     
!   Array  arguments with intent(in):                                      HINT_BL1.55     
      INTEGER  INDEX_B_L(LEN_FIELD_OUT)                                    HINT_BL1.56     
                                     !Index of bottom lefthand corner      HINT_BL1.57     
                                     !  of source gridbox                  HINT_BL1.58     
      INTEGER  INDEX_B_R(LEN_FIELD_OUT)                                    HINT_BL1.59     
                                     !Index of bottom righthand corner     HINT_BL1.60     
                                     !  of source gridbox                  HINT_BL1.61     
      REAL     DATA_IN(ROWS_IN*ROW_LENGTH_IN)                              HINT_BL1.62     
                                      !Data before interpolation           HINT_BL1.63     
      REAL     WEIGHT_B_L(LEN_FIELD_OUT)                                   HINT_BL1.64     
                                     !Weight applied to value at bottom    HINT_BL1.65     
                                     !lefthand corner of source gridbox    HINT_BL1.66     
      REAL     WEIGHT_B_R(LEN_FIELD_OUT)                                   HINT_BL1.67     
                                     !Weight applied to value at bottom    HINT_BL1.68     
                                     !righthand corner of source gridbox   HINT_BL1.69     
      REAL     WEIGHT_T_L(LEN_FIELD_OUT)                                   HINT_BL1.70     
                                     !Weight applied to value at top       HINT_BL1.71     
                                     !lefthand corner of source gridbox    HINT_BL1.72     
      REAL     WEIGHT_T_R(LEN_FIELD_OUT)                                   HINT_BL1.73     
                                     !Weight applied to value at top       HINT_BL1.74     
                                     !righthand corner of source gridbox   HINT_BL1.75     
                                                                           HINT_BL1.76     
!   Array  arguments with intent(out):                                     HINT_BL1.77     
      REAL     DATA_OUT(LEN_FIELD_OUT) !Data after interpolation           HINT_BL1.78     
                                                                           HINT_BL1.79     
! Local scalars:                                                           HINT_BL1.80     
      INTEGER      I                                                       HINT_BL1.81     
                                                                           HINT_BL1.82     
! Function & Subroutine calls:                                             HINT_BL1.83     
!     External None                                                        HINT_BL1.84     
                                                                           HINT_BL1.85     
!- End of header                                                           HINT_BL1.86     
                                                                           HINT_BL1.87     
!     1. Carry out horizontal interpolation using equation (2.1)           HINT_BL1.88     
                                                                           HINT_BL1.89     
      DO I=1,LEN_FIELD_OUT                                                 HINT_BL1.90     
                                                                           HINT_BL1.91     
      DATA_OUT(I)=WEIGHT_B_L(I)*DATA_IN(INDEX_B_L(I))                      HINT_BL1.92     
     &           +WEIGHT_B_R(I)*DATA_IN(INDEX_B_R(I))                      HINT_BL1.93     
     &           +WEIGHT_T_L(I)*DATA_IN(INDEX_B_L(I)-ROW_LENGTH_IN)        HINT_BL1.94     
     &           +WEIGHT_T_R(I)*DATA_IN(INDEX_B_R(I)-ROW_LENGTH_IN)        HINT_BL1.95     
                                                                           HINT_BL1.96     
      END DO                                                               HINT_BL1.97     
                                                                           HINT_BL1.98     
      RETURN                                                               HINT_BL1.99     
      END                                                                  HINT_BL1.100    
                                                                           HINT_BL1.101    
*ENDIF                                                                     HINT_BL1.102