*IF DEF,C92_1A                                                             HINTIBL1.2      
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.15218  
C                                                                          GTS2F400.15219  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.15220  
C restrictions as set forth in the contract.                               GTS2F400.15221  
C                                                                          GTS2F400.15222  
C                Meteorological Office                                     GTS2F400.15223  
C                London Road                                               GTS2F400.15224  
C                BRACKNELL                                                 GTS2F400.15225  
C                Berkshire UK                                              GTS2F400.15226  
C                RG12 2SZ                                                  GTS2F400.15227  
C                                                                          GTS2F400.15228  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.15229  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.15230  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.15231  
C Modelling at the above address.                                          GTS2F400.15232  
C ******************************COPYRIGHT******************************    GTS2F400.15233  
C                                                                          GTS2F400.15234  
!+ Initialises arrays used in bi-linear horizontal interpolation.          HINTIBL1.3      

      SUBROUTINE H_INT_INIT_BL(ICOF,IDIM                                    1,18HINTIBL1.4      
     &,                        P_FIELD_OUT,P_ROWS_IN,P_ROWS_OUT            HINTIBL1.5      
     &,                        ROW_LENGTH_IN,ROW_LENGTH_OUT                HINTIBL1.6      
     &,                        U_FIELD_IN,U_FIELD_OUT                      HINTIBL1.7      
     &,                        U_ROWS_IN,U_ROWS_OUT,GRIB                   HINTIBL1.8      
     &,                        FIXHD_IN,FIXHD_OUT,REALHD_IN,REALHD_OUT     HINTIBL1.9      
     &,                        INDEX_B_L,INDEX_B_R,INDEX_NEAREST           HINTIBL1.10     
     &,                        COEFF1,COEFF2,COEFF3,COEFF4                 HINTIBL1.11     
     &,                        WEIGHT_T_R,WEIGHT_B_R                       HINTIBL1.12     
     &,                        WEIGHT_T_L,WEIGHT_B_L)                      HINTIBL1.13     
!                                                                          HINTIBL1.14     
! Subroutine Interface:                                                    HINTIBL1.15     
                                                                           HINTIBL1.16     
      IMPLICIT NONE                                                        HINTIBL1.17     
!                                                                          HINTIBL1.18     
! Description:                                                             HINTIBL1.19     
!   Initialises arrays used in horizontal interpolation.                   HINTIBL1.20     
!   This replaces routine SETWTS1 (A Dickinson) whose function it          HINTIBL1.21     
!   incorporates.                                                          HINTIBL1.22     
!                                                                          HINTIBL1.23     
! Method:                                                                  HINTIBL1.24     
!   Sets up gather index and weight arrays for later call to H_INT_BL h    HINTIBL1.25     
!   Also sets up rotation coefficients for use in ROTATE with rotated      HINTIBL1.26     
!   grids.                                                                 HINTIBL1.27     
!                                                                          HINTIBL1.28     
! Current Code Owner: D.M. Goddard                                         HINTIBL1.29     
!                                                                          HINTIBL1.30     
! History:                                                                 HINTIBL1.31     
! Version   Date     Comment                                               HINTIBL1.32     
! -------   ----     -------                                               HINTIBL1.33     
! vn4.4  9/4/97 Reset the number of of lat points for                      UIE2F404.73     
!                         v wind on C grid.  Ian Edmond                    UIE2F404.74     
! 4.0      12/04/95  Original code. D.M. Goddard                           HINTIBL1.34     
! 4.5      10/11/98  Only set LAMBDA_IN and LAMBDA_OUT for one             UDG6F405.25     
!                    element when dealing with zonal means.                UDG6F405.26     
!                    Prevents out of bounds if there are more              UDG6F405.27     
!                    columns than rows.                                    UDG6F405.28     
!                    Author D.M. Goddard.                                  UDG6F405.29     
!                                                                          HINTIBL1.35     
! Code Description:                                                        HINTIBL1.36     
!   Language: FORTRAN 77 + common extensions.                              HINTIBL1.37     
!   This code is written to UMDP3 v7 programming standards.                HINTIBL1.38     
!                                                                          HINTIBL1.39     
! System component covered: S121                                           HINTIBL1.40     
! System Task:              S1                                             HINTIBL1.41     
!                                                                          HINTIBL1.42     
! Declarations:                                                            HINTIBL1.43     
!   These are of the form:-                                                HINTIBL1.44     
!     INTEGER      ExampleVariable      !Description of variable           HINTIBL1.45     
!                                                                          HINTIBL1.46     
! Global variables (*CALLed COMDECKs etc...):                              HINTIBL1.47     
*CALL CPHINT                                                               HINTIBL1.48     
                                                                           HINTIBL1.49     
! Subroutine arguments                                                     HINTIBL1.50     
!   Scalar arguments with intent(in):                                      HINTIBL1.51     
      INTEGER      ICOF             !Second dimension of coefficents ary   HINTIBL1.52     
      INTEGER      IDIM             !Second dimension of index arrays      HINTIBL1.53     
      INTEGER      P_FIELD_OUT      !No of P pts on target grid            HINTIBL1.54     
      INTEGER      P_ROWS_IN        !No of P rows on source grid           HINTIBL1.55     
      INTEGER      P_ROWS_OUT       !No of P rows on target grid           HINTIBL1.56     
      INTEGER      ROW_LENGTH_IN    !No of pts per row on source grid      HINTIBL1.57     
      INTEGER      ROW_LENGTH_OUT   !No of pts per row on target grid      HINTIBL1.58     
      INTEGER      U_FIELD_OUT      !No of U pts on target grid            HINTIBL1.59     
      INTEGER      U_FIELD_IN       !No of U pts on source grid            HINTIBL1.60     
      INTEGER      U_ROWS_IN        !No of U rows on source grid           HINTIBL1.61     
      INTEGER      U_ROWS_OUT       !No of U rows on target grid           HINTIBL1.62     
      LOGICAL      GRIB             !=T if winds imported on A-grid        HINTIBL1.63     
                                                                           HINTIBL1.64     
!   Array  arguments with intent(in):                                      HINTIBL1.65     
      INTEGER      FIXHD_IN(*)      !Fixed length header for source grid   HINTIBL1.66     
      INTEGER      FIXHD_OUT(*)     !Fixed length header for target grid   HINTIBL1.67     
      REAL         REALHD_IN(*)     !Real constants from source grid       HINTIBL1.68     
      REAL         REALHD_OUT(*)    !Real constants from target grid       HINTIBL1.69     
                                                                           HINTIBL1.70     
!   Array  arguments with intent(Out):                                     HINTIBL1.71     
                                                                           HINTIBL1.72     
      INTEGER      INDEX_B_L(P_FIELD_OUT,IDIM)                             HINTIBL1.73     
                                    !Gather index for bottom l.h.c of      HINTIBL1.74     
                                    !source grid box. 1=P-pts; 2=UV-pts    HINTIBL1.75     
      INTEGER      INDEX_B_R(P_FIELD_OUT,IDIM)                             HINTIBL1.76     
                                    !Gather index for bottom r.h.c of      HINTIBL1.77     
                                    !source grid box. 1=P-pts; 2=UV-pts    HINTIBL1.78     
      INTEGER      INDEX_NEAREST(P_FIELD_OUT)                              HINTIBL1.79     
                                    !Gather index for nearest point on     HINTIBL1.80     
                                    !source grid for each target P-pt      HINTIBL1.81     
      REAL         COEFF1(U_FIELD_OUT,ICOF)!Coefficient of rotation no 1   HINTIBL1.82     
      REAL         COEFF2(U_FIELD_OUT,ICOF)!Coefficient of rotation no 2   HINTIBL1.83     
      REAL         COEFF3(U_FIELD_IN,ICOF) !Coefficient of rotation no 1   HINTIBL1.84     
      REAL         COEFF4(U_FIELD_IN,ICOF) !Coefficient of rotation no 2   HINTIBL1.85     
      REAL         WEIGHT_T_R(P_FIELD_OUT,IDIM) ! Weights for bilinear     HINTIBL1.86     
      REAL         WEIGHT_B_R(P_FIELD_OUT,IDIM) !\horizontal interpolatn   HINTIBL1.87     
      REAL         WEIGHT_T_L(P_FIELD_OUT,IDIM) !/ 1=P-pts; 2=U-pts;       HINTIBL1.88     
      REAL         WEIGHT_B_L(P_FIELD_OUT,IDIM) ! 3=V-pts;4=zonal mean     HINTIBL1.89     
                                                                           HINTIBL1.90     
!   ErrorStatus <Delete if ErrorStatus not used>                           HINTIBL1.91     
!     INTEGER      ErrorStatus          ! Error flag (0 = OK)              HINTIBL1.92     
                                                                           HINTIBL1.93     
! Local parameters:                                                        HINTIBL1.94     
                                                                           HINTIBL1.95     
! Local scalars:                                                           HINTIBL1.96     
      INTEGER      I                !\                                     HINTIBL1.97     
      INTEGER      IJ               ! \ Loop                               HINTIBL1.98     
      INTEGER      J                ! /variables                           HINTIBL1.99     
      INTEGER      K                !/                                     HINTIBL1.100    
      INTEGER      POINTS_PHI_SRCE  !No of lat points on wind grid         HINTIBL1.101    
      REAL         DELTA_LAT_SOURCE !\                                     HINTIBL1.102    
      REAL         DELTA_LAT_TARGET ! \Grid spacing                        HINTIBL1.103    
      REAL         DELTA_LON_SOURCE ! /                                    HINTIBL1.104    
      REAL         DELTA_LON_TARGET !/                                     HINTIBL1.105    
      REAL         MAX_LAMBDA_IN    !\                                     HINTIBL1.106    
      REAL         MAX_LAMBDA_OUT   ! \                                    HINTIBL1.107    
      REAL         MAX_PHI_IN       !  \  Max and min of lat and long      HINTIBL1.108    
      REAL         MAX_PHI_OUT      !   \ of source and target grids       HINTIBL1.109    
      REAL         MIN_LAMBDA_IN    !   / when converted to standard       HINTIBL1.110    
      REAL         MIN_LAMBDA_OUT   !  /  coordinates. Used to check       HINTIBL1.111    
      REAL         MIN_PHI_IN       ! /   that target area is within       HINTIBL1.112    
      REAL         MIN_PHI_OUT      !/source area.                         HINTIBL1.113    
      REAL         NPOLE_LAT_SOURCE !\                                     HINTIBL1.114    
      REAL         NPOLE_LAT_TARGET ! \North pole coordinatest             HINTIBL1.115    
      REAL         NPOLE_LON_SOURCE ! /                                    HINTIBL1.116    
      REAL         NPOLE_LON_TARGET !/                                     HINTIBL1.117    
      REAL         START_LAT_SOURCE !\                                     HINTIBL1.118    
      REAL         START_LAT_TARGET ! \Coordinates of first data point     HINTIBL1.119    
      REAL         START_LON_SOURCE ! /                                    HINTIBL1.120    
      REAL         START_LON_TARGET !/                                     HINTIBL1.121    
      LOGICAL      CYCLIC           !T= Data cyclic                        HINTIBL1.122    
      LOGICAL      ROT_IN           !T= Source grid has rotated coords     HINTIBL1.123    
      LOGICAL      ROT_OUT          !T= Target grid has rotated coords     HINTIBL1.124    
                                                                           HINTIBL1.125    
! Local dynamic arrays:                                                    HINTIBL1.126    
      REAL         D_LAMBDA_IN(ICOF)                                       HINTIBL1.127    
      REAL         D_LAMBDA_OUT(ICOF)                                      HINTIBL1.128    
      REAL         D_PHI_IN(ICOF)                                          HINTIBL1.129    
      REAL         D_PHI_OUT(ICOF)                                         HINTIBL1.130    
      REAL         LAMBDA_IN(ROW_LENGTH_IN)                                HINTIBL1.131    
                                    ! Latitude coords of source p-grid     HINTIBL1.132    
      REAL         LAMBDA_INN(U_FIELD_IN)                                  HINTIBL1.133    
                                    ! Latitude coords of source u-grid     HINTIBL1.134    
      REAL         LAMBDA_OUT(P_FIELD_OUT)                                 HINTIBL1.135    
                                    ! Latitude coords of target grid       HINTIBL1.136    
      REAL         LAMBDA_ROT(U_FIELD_IN)                                  HINTIBL1.137    
                                    ! Standard lat coords of source grid   HINTIBL1.138    
      REAL         LAMBDA_TMP(U_FIELD_OUT)                                 HINTIBL1.139    
                                    ! Standard lat coords of target grid   HINTIBL1.140    
      REAL         PHI_IN(P_ROWS_IN)                                       HINTIBL1.141    
                                    ! Longitude coords of source p-grid    HINTIBL1.142    
      REAL         PHI_INN(U_FIELD_IN)                                     HINTIBL1.143    
                                    ! Longitude coords of source u-grid    HINTIBL1.144    
      REAL         PHI_OUT(P_FIELD_OUT)                                    HINTIBL1.145    
                                    ! Longitude coords of target grid      HINTIBL1.146    
      REAL         PHI_TMP(U_FIELD_OUT)                                    HINTIBL1.147    
                                    ! Standard lon coords of target grid   HINTIBL1.148    
                                                                           HINTIBL1.149    
! Function & Subroutine calls:                                             HINTIBL1.150    
      External H_INT_CO,W_COEFF,EQTOLL,NEAR_PT,LLTOEQ                      HINTIBL1.151    
                                                                           HINTIBL1.152    
!- End of header                                                           HINTIBL1.153    
                                                                           HINTIBL1.154    
! 1: Test if requested horizontal interpolation is sensible                HINTIBL1.155    
                                                                           HINTIBL1.156    
! 1.1: Hemispheric or LAM -> global not allowed                            HINTIBL1.157    
      IF(FIXHD_OUT(ITYPE).EQ.0.AND.FIXHD_IN(ITYPE).GT.0)THEN               HINTIBL1.158    
        WRITE(6,'('' *ERROR* Trying to interpolate from a hemispheric''    HINTIBL1.159    
     &,   '' or LAM to a global domain'')')                                HINTIBL1.160    
        CALL ABORT                                                         HINTIBL1.161    
      END IF                                                               HINTIBL1.162    
                                                                           HINTIBL1.163    
! 1.2: LAM -> hemispheric not allowed                                      HINTIBL1.164    
      IF(FIXHD_OUT(ITYPE).LT.3.AND.FIXHD_IN(ITYPE).GT.2)THEN               HINTIBL1.165    
        WRITE(6,'('' *ERROR* Trying to interpolate from a limited area''   HINTIBL1.166    
     &,           '' domain to a global or hemispheric domain'')')         HINTIBL1.167    
        CALL ABORT                                                         HINTIBL1.168    
      END IF                                                               HINTIBL1.169    
                                                                           HINTIBL1.170    
! 2: Initialise local constants                                            HINTIBL1.171    
                                                                           HINTIBL1.172    
! 2.1: Grid spacing                                                        HINTIBL1.173    
      DELTA_LAT_SOURCE=REALHD_IN(IDLAT)                                    HINTIBL1.174    
      DELTA_LAT_TARGET=REALHD_OUT(IDLAT)                                   HINTIBL1.175    
      DELTA_LON_SOURCE=REALHD_IN(IDLON)                                    HINTIBL1.176    
      DELTA_LON_TARGET=REALHD_OUT(IDLON)                                   HINTIBL1.177    
                                                                           HINTIBL1.178    
! 2.2: Coordinates of north pole on grid                                   HINTIBL1.179    
      NPOLE_LAT_SOURCE=REALHD_IN(IPLAT)                                    HINTIBL1.180    
      NPOLE_LAT_TARGET=REALHD_OUT(IPLAT)                                   HINTIBL1.181    
      NPOLE_LON_SOURCE=REALHD_IN(IPLON)                                    HINTIBL1.182    
      NPOLE_LON_TARGET=REALHD_OUT(IPLON)                                   HINTIBL1.183    
                                                                           HINTIBL1.184    
! 2.3: Coordinates of top left hand  p-point on grid                       HINTIBL1.185    
      START_LAT_SOURCE=REALHD_IN(ISLAT)                                    HINTIBL1.186    
      START_LAT_TARGET=REALHD_OUT(ISLAT)                                   HINTIBL1.187    
      START_LON_SOURCE=REALHD_IN(ISLON)                                    HINTIBL1.188    
      START_LON_TARGET=REALHD_OUT(ISLON)                                   HINTIBL1.189    
                                                                           HINTIBL1.190    
! 2.4: Logical to indicate output grid is rotated                          HINTIBL1.191    
      ROT_OUT=NPOLE_LAT_TARGET.NE.90..OR.NPOLE_LON_TARGET.NE.0.            HINTIBL1.192    
                                                                           HINTIBL1.193    
! 2.5: Logical to indicate input grid is rotated                           HINTIBL1.194    
      ROT_IN=NPOLE_LAT_SOURCE.NE.90..OR.NPOLE_LON_SOURCE.NE.0.             HINTIBL1.195    
                                                                           HINTIBL1.196    
! 2.6: Logical to indicate if input data cyclic                            HINTIBL1.197    
      CYCLIC=FIXHD_IN(ITYPE).LT.3                                          HINTIBL1.198    
                                                                           HINTIBL1.199    
                                                                           HINTIBL1.200    
! 3: Weights and indices for P points:                                     HINTIBL1.201    
                                                                           HINTIBL1.202    
! 3.1: Lat and lon of new grid                                             HINTIBL1.203    
      IJ=0                                                                 HINTIBL1.204    
      DO J=1,P_ROWS_OUT                                                    HINTIBL1.205    
        DO I=1,ROW_LENGTH_OUT                                              HINTIBL1.206    
          IJ=IJ+1                                                          HINTIBL1.207    
          LAMBDA_OUT(IJ)=START_LON_TARGET+DELTA_LON_TARGET*(I-1)           HINTIBL1.208    
          PHI_OUT(IJ)=START_LAT_TARGET-DELTA_LAT_TARGET*(J-1)              HINTIBL1.209    
        ENDDO                                                              HINTIBL1.210    
      ENDDO                                                                HINTIBL1.211    
                                                                           HINTIBL1.212    
! 3.2: Convert output grid to standard lat-lon if output grid rotated      HINTIBL1.213    
      IF(ROT_OUT)THEN                                                      HINTIBL1.214    
        CALL EQTOLL(PHI_OUT,LAMBDA_OUT,PHI_OUT,LAMBDA_OUT                  HINTIBL1.215    
     &,             NPOLE_LAT_TARGET,NPOLE_LON_TARGET,P_FIELD_OUT)         HINTIBL1.216    
      END IF                                                               HINTIBL1.217    
                                                                           HINTIBL1.218    
! 3.3: Convert output grid to input lat-lon if input grid rotated          HINTIBL1.219    
      IF(ROT_IN)THEN                                                       HINTIBL1.220    
        CALL LLTOEQ(PHI_OUT,LAMBDA_OUT,PHI_OUT,LAMBDA_OUT                  HINTIBL1.221    
     &,             NPOLE_LAT_SOURCE,NPOLE_LON_SOURCE,P_FIELD_OUT)         HINTIBL1.222    
      END IF                                                               HINTIBL1.223    
                                                                           HINTIBL1.224    
! 3.4: Scale longitude if LAM output grid                                  HINTIBL1.225    
!       to make it monotonically increasing                                HINTIBL1.226    
      IF(ROT_IN)THEN                                                       HINTIBL1.227    
        DO I=1,P_FIELD_OUT                                                 HINTIBL1.228    
          IF(LAMBDA_OUT(I).GT.180.)THEN                                    HINTIBL1.229    
            LAMBDA_OUT(I)=LAMBDA_OUT(I)-360.                               HINTIBL1.230    
          ELSE                                                             HINTIBL1.231    
            LAMBDA_OUT(I)=LAMBDA_OUT(I)                                    HINTIBL1.232    
          ENDIF                                                            HINTIBL1.233    
        END DO                                                             HINTIBL1.234    
      END IF                                                               HINTIBL1.235    
                                                                           HINTIBL1.236    
! 3.5: Lat and lon of old grid                                             HINTIBL1.237    
      DO J=1,P_ROWS_IN                                                     HINTIBL1.238    
        PHI_IN(J)=START_LAT_SOURCE-DELTA_LAT_SOURCE*(J-1)                  HINTIBL1.239    
      END DO                                                               HINTIBL1.240    
      DO I=1,ROW_LENGTH_IN                                                 HINTIBL1.241    
        LAMBDA_IN(I)=START_LON_SOURCE+DELTA_LON_SOURCE*(I-1)               HINTIBL1.242    
      END DO                                                               HINTIBL1.243    
                                                                           HINTIBL1.244    
! 3.6: Scale longitude if LAM input grid                                   HINTIBL1.245    
!         to make it monotonically increasing                              HINTIBL1.246    
                                                                           HINTIBL1.247    
      IF(ROT_IN)THEN                                                       HINTIBL1.248    
        DO I=1,ROW_LENGTH_IN                                               HINTIBL1.249    
          IF(LAMBDA_IN(I).GT.180.)THEN                                     HINTIBL1.250    
            LAMBDA_IN(I)=LAMBDA_IN(I)-360.                                 HINTIBL1.251    
          ELSE                                                             HINTIBL1.252    
            LAMBDA_IN(I)=LAMBDA_IN(I)                                      HINTIBL1.253    
                                                                           HINTIBL1.254    
          ENDIF                                                            HINTIBL1.255    
        END DO                                                             HINTIBL1.256    
      END IF                                                               HINTIBL1.257    
                                                                           HINTIBL1.258    
! 3.7: Check if target area contained within source area when              HINTIBL1.259    
!       LAM->LAM                                                           HINTIBL1.260    
      IF(ROT_IN)THEN                                                       HINTIBL1.261    
        MAX_LAMBDA_OUT=LAMBDA_OUT(1)                                       HINTIBL1.262    
        MIN_LAMBDA_OUT=LAMBDA_OUT(1)                                       HINTIBL1.263    
        MAX_PHI_OUT=PHI_OUT(1)                                             HINTIBL1.264    
        MIN_PHI_OUT=PHI_OUT(1)                                             HINTIBL1.265    
        DO I=2,P_FIELD_OUT                                                 HINTIBL1.266    
          MAX_LAMBDA_OUT=AMAX1(LAMBDA_OUT(I),MAX_LAMBDA_OUT)               HINTIBL1.267    
          MIN_LAMBDA_OUT=AMIN1(LAMBDA_OUT(I),MIN_LAMBDA_OUT)               HINTIBL1.268    
          MAX_PHI_OUT=AMAX1(PHI_OUT(I),MAX_PHI_OUT)                        HINTIBL1.269    
          MIN_PHI_OUT=AMIN1(PHI_OUT(I),MIN_PHI_OUT)                        HINTIBL1.270    
        END DO                                                             HINTIBL1.271    
                                                                           HINTIBL1.272    
        MAX_LAMBDA_IN=LAMBDA_IN(ROW_LENGTH_IN)                             HINTIBL1.273    
        MIN_LAMBDA_IN=LAMBDA_IN(1)                                         HINTIBL1.274    
        MAX_PHI_IN=PHI_IN(1)                                               HINTIBL1.275    
        MIN_PHI_IN=PHI_IN(P_ROWS_IN)                                       HINTIBL1.276    
                                                                           HINTIBL1.277    
        IF(MAX_PHI_IN.LT.MAX_PHI_OUT-SMALL.OR.                             HINTIBL1.278    
     &     MIN_PHI_IN.GT.MIN_PHI_OUT+SMALL.OR.                             HINTIBL1.279    
     &     MAX_LAMBDA_IN.LT.MAX_LAMBDA_OUT-SMALL.OR.                       HINTIBL1.280    
     &     MIN_LAMBDA_IN.GT.MIN_LAMBDA_OUT+SMALL)THEN                      HINTIBL1.281    
          WRITE(6,'('' *ERROR* Target LAM not contained within ''          HINTIBL1.282    
     &,             ''source LAM'')')                                      HINTIBL1.283    
          WRITE(6,'(''MAX_PHI_IN,MAX_PHI_OUT'',2F8.2)')                    HINTIBL1.284    
     &                MAX_PHI_IN,MAX_PHI_OUT                               HINTIBL1.285    
          WRITE(6,'(''MIN_PHI_IN,MIN_PHI_OUT'',2F8.2)')                    HINTIBL1.286    
     &                MIN_PHI_IN,MIN_PHI_OUT                               HINTIBL1.287    
          WRITE(6,'(''MAX_LAMBDA_IN,MAX_LAMBDA_OUT'',2F8.2)')              HINTIBL1.288    
     &                MAX_LAMBDA_IN,MAX_LAMBDA_OUT                         HINTIBL1.289    
          WRITE(6,'(''MIN_LAMBDA_IN,MIN_LAMBDA_OUT'',2F8.2)')              HINTIBL1.290    
     &                MIN_LAMBDA_IN,MIN_LAMBDA_OUT                         HINTIBL1.291    
          CALL ABORT                                                       HINTIBL1.292    
        END IF                                                             HINTIBL1.293    
      ENDIF                                                                HINTIBL1.294    
                                                                           HINTIBL1.295    
! 3.8: Initialise Indices and weights for Bi-linear interpolation          HINTIBL1.296    
!        As these are required for coastal adjustment, this must be        HINTIBL1.297    
!        called whether bi-linear interpolation is requested or not.       HINTIBL1.298    
                                                                           HINTIBL1.299    
  ! 3.8.1: Call H_INT_CO                                                   HINTIBL1.300    
                                                                           HINTIBL1.301    
*IF DEF,TIMER                                                              HINTIBL1.302    
      CALL TIMER('HINTCO1  ',3)                                            HINTIBL1.303    
*ENDIF                                                                     HINTIBL1.304    
                                                                           HINTIBL1.305    
      CALL H_INT_CO(INDEX_B_L(1,1),INDEX_B_R(1,1)                          HINTIBL1.306    
     &,             WEIGHT_T_R(1,1),WEIGHT_B_R(1,1)                        HINTIBL1.307    
     &,             WEIGHT_T_L(1,1),WEIGHT_B_L(1,1)                        HINTIBL1.308    
     &,             LAMBDA_IN,PHI_IN,LAMBDA_OUT,PHI_OUT                    HINTIBL1.309    
     &,             ROW_LENGTH_IN,P_ROWS_IN,P_FIELD_OUT,CYCLIC)            HINTIBL1.310    
                                                                           HINTIBL1.311    
*IF DEF,TIMER                                                              HINTIBL1.312    
      CALL TIMER('HINTCO1  ',4)                                            HINTIBL1.313    
*ENDIF                                                                     HINTIBL1.314    
                                                                           HINTIBL1.315    
  ! 3.8.2: Initialise index of nearest P-points on source grid             HINTIBL1.316    
      CALL NEAR_PT(INDEX_B_L(1,1),INDEX_B_R(1,1)                           HINTIBL1.317    
     &,            WEIGHT_T_R(1,1),WEIGHT_B_R(1,1)                         HINTIBL1.318    
     &,            WEIGHT_T_L(1,1),WEIGHT_B_L(1,1)                         HINTIBL1.319    
     &,            P_FIELD_OUT,ROW_LENGTH_IN,INDEX_NEAREST)                HINTIBL1.320    
                                                                           HINTIBL1.321    
! 4: Weights and indices for UV points:                                    HINTIBL1.322    
                                                                           HINTIBL1.323    
      IF(FIXHD_IN(ISTAG).EQ.3)THEN                                         HINTIBL1.324    
        D_LAMBDA_IN(1)=0.5                                                 HINTIBL1.325    
        D_PHI_IN(1)=0.0                                                    HINTIBL1.326    
        D_LAMBDA_IN(2)=0.0                                                 HINTIBL1.327    
        D_PHI_IN(2)=0.5                                                    HINTIBL1.328    
      ELSE                                                                 HINTIBL1.329    
        D_LAMBDA_IN(1)=0.5                                                 HINTIBL1.330    
        D_PHI_IN(1)=0.5                                                    HINTIBL1.331    
        D_LAMBDA_IN(2)=0.5                                                 HINTIBL1.332    
        D_PHI_IN(2)=0.5                                                    HINTIBL1.333    
      END IF                                                               HINTIBL1.334    
                                                                           HINTIBL1.335    
      IF(FIXHD_OUT(ISTAG).EQ.3)THEN                                        HINTIBL1.336    
        D_LAMBDA_OUT(1)=0.5                                                HINTIBL1.337    
        D_PHI_OUT(1)=0.0                                                   HINTIBL1.338    
        D_LAMBDA_OUT(2)=0.0                                                HINTIBL1.339    
        D_PHI_OUT(2)=0.5                                                   HINTIBL1.340    
      ELSE                                                                 HINTIBL1.341    
        D_LAMBDA_OUT(1)=0.5                                                HINTIBL1.342    
        D_PHI_OUT(1)=0.5                                                   HINTIBL1.343    
        D_LAMBDA_OUT(2)=0.5                                                HINTIBL1.344    
        D_PHI_OUT(2)=0.5                                                   HINTIBL1.345    
      END IF                                                               HINTIBL1.346    
                                                                           HINTIBL1.347    
! Loop over u, then v                                                      HINTIBL1.348    
      DO K=1,2                                                             HINTIBL1.349    
                                                                           HINTIBL1.350    
  ! 4.1: Lat and lon of target grid                                        HINTIBL1.351    
        IJ=0                                                               HINTIBL1.352    
        DO J=1,U_ROWS_OUT                                                  HINTIBL1.353    
          DO I=1,ROW_LENGTH_OUT                                            HINTIBL1.354    
            IJ=IJ+1                                                        HINTIBL1.355    
            LAMBDA_OUT(IJ)=START_LON_TARGET+DELTA_LON_TARGET               HINTIBL1.356    
     &                     *(I-1+D_LAMBDA_OUT(K))                          HINTIBL1.357    
            PHI_OUT(IJ)=START_LAT_TARGET-DELTA_LAT_TARGET                  HINTIBL1.358    
     &                    *(J-1+D_PHI_OUT(K))                              HINTIBL1.359    
          END DO                                                           HINTIBL1.360    
        END DO                                                             HINTIBL1.361    
                                                                           HINTIBL1.362    
  ! 4.2: Lat and lon of source grid                                        HINTIBL1.363    
        IF(GRIB)THEN                                                       HINTIBL1.364    
    ! 4.2.1: Source winds on A grid                                        HINTIBL1.365    
          DO J=1,P_ROWS_IN                                                 HINTIBL1.366    
          PHI_IN(J)=START_LAT_SOURCE-DELTA_LAT_SOURCE*(J-1)                HINTIBL1.367    
          END DO                                                           HINTIBL1.368    
          DO I=1,ROW_LENGTH_IN                                             HINTIBL1.369    
            LAMBDA_IN(I)=START_LON_SOURCE+DELTA_LON_SOURCE*(I-1)           HINTIBL1.370    
          END DO                                                           HINTIBL1.371    
          POINTS_PHI_SRCE=P_ROWS_IN                                        HINTIBL1.372    
                                                                           HINTIBL1.373    
         ELSE                                                              HINTIBL1.374    
    ! 4.2.2 Source winds on B or C grid                                    HINTIBL1.375    
           DO J=1,U_ROWS_IN                                                HINTIBL1.376    
             PHI_IN(J)=START_LAT_SOURCE-DELTA_LAT_SOURCE                   HINTIBL1.377    
     &                 *(J-1+D_PHI_IN(K))                                  HINTIBL1.378    
           END DO                                                          HINTIBL1.379    
           DO I=1,ROW_LENGTH_IN                                            HINTIBL1.380    
             LAMBDA_IN(I)=START_LON_SOURCE+DELTA_LON_SOURCE                HINTIBL1.381    
     &                    *(I-1+D_LAMBDA_IN(K))                            HINTIBL1.382    
           END DO                                                          HINTIBL1.383    
           POINTS_PHI_SRCE=U_ROWS_IN                                       HINTIBL1.384    
           ! Reset the number of PHI_SRCE points for C grid v field.       UIE2F404.75     
           IF ((FIXHD_IN(9).EQ.3).AND.(K.EQ.2)) THEN                       UIE2F404.76     
             POINTS_PHI_SRCE=U_ROWS_IN-1                                   UIE2F404.77     
           END IF                                                          UIE2F404.78     
         END IF                                                            HINTIBL1.385    
                                                                           HINTIBL1.386    
  ! 4.3: Convert to standard lat-lon if new grid rotated                   HINTIBL1.387    
        IF(ROT_OUT)THEN                                                    HINTIBL1.388    
          CALL EQTOLL(PHI_OUT,LAMBDA_OUT,PHI_TMP,LAMBDA_TMP                HINTIBL1.389    
     &,               NPOLE_LAT_TARGET,NPOLE_LON_TARGET,U_FIELD_OUT)       HINTIBL1.390    
                                                                           HINTIBL1.391    
  ! 4.4: Calculate coefficients for rotating wind                          HINTIBL1.392    
          CALL W_COEFF(COEFF1(1,K),COEFF2(1,K),LAMBDA_TMP,LAMBDA_OUT       HINTIBL1.393    
     &,                NPOLE_LAT_TARGET,NPOLE_LON_TARGET,U_FIELD_OUT)      HINTIBL1.394    
                                                                           HINTIBL1.395    
  ! 4.5: Copy across latitude and longitude of target grid in standard     HINTIBL1.396    
  !        coords for next step                                            HINTIBL1.397    
          DO I=1,U_FIELD_OUT                                               HINTIBL1.398    
            LAMBDA_OUT(I)=LAMBDA_TMP(I)                                    HINTIBL1.399    
            PHI_OUT(I)=PHI_TMP(I)                                          HINTIBL1.400    
          END DO                                                           HINTIBL1.401    
                                                                           HINTIBL1.402    
        END IF                                                             HINTIBL1.403    
                                                                           HINTIBL1.404    
  ! 4.6: Convert target grid to source lat-lon if source grid rotated      HINTIBL1.405    
        IF(ROT_IN)THEN                                                     HINTIBL1.406    
          CALL LLTOEQ(PHI_OUT,LAMBDA_OUT,PHI_OUT,LAMBDA_OUT                HINTIBL1.407    
     &,               NPOLE_LAT_SOURCE,NPOLE_LON_SOURCE,U_FIELD_OUT)       HINTIBL1.408    
        ENDIF                                                              HINTIBL1.409    
                                                                           HINTIBL1.410    
  ! 4.7: Scale longitude if LAM target grid                                HINTIBL1.411    
  !        to make it monotonically increasing                             HINTIBL1.412    
          IF(ROT_IN)THEN                                                   HINTIBL1.413    
            DO I=1,P_FIELD_OUT                                             HINTIBL1.414    
              IF(LAMBDA_OUT(I).GT.180.)THEN                                HINTIBL1.415    
                LAMBDA_OUT(I)=LAMBDA_OUT(I)-360.                           HINTIBL1.416    
              ELSE                                                         HINTIBL1.417    
                LAMBDA_OUT(I)=LAMBDA_OUT(I)                                HINTIBL1.418    
              ENDIF                                                        HINTIBL1.419    
            END DO                                                         HINTIBL1.420    
          END IF                                                           HINTIBL1.421    
                                                                           HINTIBL1.422    
  ! 4.8: Scale longitude if LAM source grid                                HINTIBL1.423    
  !     to make it monotonically increasing                                HINTIBL1.424    
          IF(ROT_IN)THEN                                                   HINTIBL1.425    
            DO I=1,ROW_LENGTH_IN                                           HINTIBL1.426    
              IF(LAMBDA_IN(I).GT.180.)THEN                                 HINTIBL1.427    
                LAMBDA_IN(I)=LAMBDA_IN(I)-360.                             HINTIBL1.428    
              ELSE                                                         HINTIBL1.429    
                LAMBDA_IN(I)=LAMBDA_IN(I)                                  HINTIBL1.430    
              ENDIF                                                        HINTIBL1.431    
            END DO                                                         HINTIBL1.432    
          END IF                                                           HINTIBL1.433    
                                                                           HINTIBL1.434    
        IF(ROT_IN)THEN                                                     HINTIBL1.435    
  ! 4.8: Calculate wind rotation coefficients from source to standard      HINTIBL1.436    
  !      lat_long grid. Used to rotate winds in CONTROL when they are      HINTIBL1.437    
  !      first read in. B-grids or C-grids supported.                      HINTIBL1.438    
                                                                           HINTIBL1.439    
          IJ=0                                                             HINTIBL1.440    
          DO J=1,U_ROWS_IN                                                 HINTIBL1.441    
            DO I=1,ROW_LENGTH_IN                                           HINTIBL1.442    
              IJ=IJ+1                                                      HINTIBL1.443    
              LAMBDA_INN(IJ)=START_LON_SOURCE+DELTA_LON_SOURCE             HINTIBL1.444    
     &                       *(I-1+D_LAMBDA_IN(K))                         HINTIBL1.445    
              PHI_INN(IJ)=START_LAT_SOURCE-DELTA_LAT_SOURCE                HINTIBL1.446    
     &                    *(J-1+D_PHI_IN(K))                               HINTIBL1.447    
            END DO                                                         HINTIBL1.448    
          END DO                                                           HINTIBL1.449    
                                                                           HINTIBL1.450    
          CALL EQTOLL(PHI_INN,LAMBDA_INN,PHI_INN,LAMBDA_ROT                HINTIBL1.451    
     &,               NPOLE_LAT_SOURCE,NPOLE_LON_SOURCE,U_FIELD_IN)        HINTIBL1.452    
                                                                           HINTIBL1.453    
  ! Calculate coefficients for rotating wind                               HINTIBL1.454    
          CALL W_COEFF(COEFF3(1,K),COEFF4(1,K),LAMBDA_ROT,LAMBDA_INN       HINTIBL1.455    
     &,                NPOLE_LAT_SOURCE,NPOLE_LON_SOURCE,U_FIELD_IN)       HINTIBL1.456    
                                                                           HINTIBL1.457    
        ENDIF                                                              HINTIBL1.458    
                                                                           HINTIBL1.459    
  ! 4.9: Indices and weights for horizontal interpolation                  HINTIBL1.460    
                                                                           HINTIBL1.461    
        CALL H_INT_CO(INDEX_B_L(1,K+1),INDEX_B_R(1,K+1)                    HINTIBL1.462    
     &,               WEIGHT_T_R(1,K+1),WEIGHT_B_R(1,K+1)                  HINTIBL1.463    
     &,               WEIGHT_T_L(1,K+1),WEIGHT_B_L(1,K+1)                  HINTIBL1.464    
     &,               LAMBDA_IN,PHI_IN,LAMBDA_OUT,PHI_OUT                  HINTIBL1.465    
     &,               ROW_LENGTH_IN,POINTS_PHI_SRCE,U_FIELD_OUT,CYCLIC)    HINTIBL1.466    
                                                                           HINTIBL1.467    
      END DO                                                               HINTIBL1.468    
                                                                           HINTIBL1.469    
! 5: Weights and indices for zonal mean P points:                          HINTIBL1.470    
                                                                           HINTIBL1.471    
  ! 5.1: Lat and lon of target grid                                        HINTIBL1.472    
      LAMBDA_OUT(1)=START_LON_TARGET                                       UDG6F405.30     
      DO J=1,P_ROWS_OUT                                                    HINTIBL1.473    
        PHI_OUT(J)=START_LAT_TARGET-DELTA_LAT_TARGET*(J-1)                 HINTIBL1.475    
      END DO                                                               HINTIBL1.476    
                                                                           HINTIBL1.477    
  ! 5.2: Lat and lon of source grid                                        HINTIBL1.478    
      LAMBDA_IN(1)=START_LON_SOURCE                                        UDG6F405.31     
      DO J=1,P_ROWS_IN                                                     HINTIBL1.479    
                                                                           UDG6F405.32     
                                                                           UDG6F405.33     
        PHI_IN(J)=START_LAT_SOURCE-DELTA_LAT_SOURCE*(J-1)                  HINTIBL1.481    
      END DO                                                               HINTIBL1.482    
                                                                           HINTIBL1.483    
  ! 5.3: Convert output grid to standard lat-lon if target grid rotated    HINTIBL1.484    
      IF(ROT_OUT)THEN                                                      HINTIBL1.485    
        CALL EQTOLL(PHI_OUT,LAMBDA_OUT,PHI_OUT,LAMBDA_OUT                  HINTIBL1.486    
     &,             NPOLE_LAT_TARGET,NPOLE_LON_TARGET,P_ROWS_OUT)          HINTIBL1.487    
      ENDIF                                                                HINTIBL1.488    
                                                                           HINTIBL1.489    
  ! 5.4: Convert targget grid to source lat-lon if source grid rotated     HINTIBL1.490    
      IF(ROT_IN)THEN                                                       HINTIBL1.491    
        CALL LLTOEQ(PHI_OUT,LAMBDA_OUT,PHI_OUT,LAMBDA_OUT                  HINTIBL1.492    
     &,             NPOLE_LAT_SOURCE,NPOLE_LON_SOURCE,P_ROWS_OUT)          HINTIBL1.493    
      ENDIF                                                                HINTIBL1.494    
                                                                           HINTIBL1.495    
  ! 5.5: Initialise indices and weights for horizontal interpolation       HINTIBL1.496    
                                                                           HINTIBL1.497    
      CALL H_INT_CO(INDEX_B_L(1,4),INDEX_B_R(1,4)                          HINTIBL1.498    
     &,               WEIGHT_T_R(1,4),WEIGHT_B_R(1,4)                      HINTIBL1.499    
     &,               WEIGHT_T_L(1,4),WEIGHT_B_L(1,4)                      HINTIBL1.500    
     &,               LAMBDA_IN,PHI_IN,LAMBDA_OUT,PHI_OUT                  HINTIBL1.501    
     &,               1,P_ROWS_IN,P_ROWS_OUT,CYCLIC)                       HINTIBL1.502    
                                                                           HINTIBL1.503    
      RETURN                                                               HINTIBL1.504    
      END                                                                  HINTIBL1.505    
*ENDIF                                                                     HINTIBL1.506