*IF DEF,C92_1A                                                             HINTINT1.2      
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.15201  
C                                                                          GTS2F400.15202  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.15203  
C restrictions as set forth in the contract.                               GTS2F400.15204  
C                                                                          GTS2F400.15205  
C                Meteorological Office                                     GTS2F400.15206  
C                London Road                                               GTS2F400.15207  
C                BRACKNELL                                                 GTS2F400.15208  
C                Berkshire UK                                              GTS2F400.15209  
C                RG12 2SZ                                                  GTS2F400.15210  
C                                                                          GTS2F400.15211  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.15212  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.15213  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.15214  
C Modelling at the above address.                                          GTS2F400.15215  
C ******************************COPYRIGHT******************************    GTS2F400.15216  
C                                                                          GTS2F400.15217  
!+ Selects initialisation routine for horizontal interpolation.            HINTINT1.3      

      SUBROUTINE H_INT_INIT(ICOF,IDIM,P_FIELD_OUT,P_ROWS_IN,P_ROWS_OUT      1,6HINTINT1.4      
     &,                     ROW_LENGTH_IN,ROW_LENGTH_OUT                   HINTINT1.5      
     &,                     U_FIELD_IN,U_FIELD_OUT,U_ROWS_IN,U_ROWS_OUT    HINTINT1.6      
     &,                     GLOBAL,GRIB,H_INT_TYPE,FIXHD_IN,FIXHD_OUT      HINTINT1.7      
     &,                     REALHD_IN,REALHD_OUT,AW_AREA_BOX               HINTINT1.8      
     &,                     AW_INDEX_TARG_LHS,AW_INDEX_TARG_TOP            HINTINT1.9      
     &,                     BL_INDEX_B_L,BL_INDEX_B_R,BL_INDEX_NEAREST     HINTINT1.10     
     &,                     AW_COLAT_T,AW_LONG_L                           HINTINT1.11     
     &,                     COEFF1,COEFF2,COEFF3,COEFF4                    HINTINT1.12     
     &,                     WEIGHT_T_R,WEIGHT_B_R,WEIGHT_T_L,WEIGHT_B_L)   HINTINT1.13     
!                                                                          HINTINT1.14     
! Subroutine Interface:                                                    HINTINT1.15     
                                                                           HINTINT1.16     
      IMPLICIT NONE                                                        HINTINT1.17     
!                                                                          HINTINT1.18     
! Description:                                                             HINTINT1.19     
!     Initialises index and weighting arrays for bi-linear                 HINTINT1.20     
!   interpolation and also area weighted indices if area                   HINTINT1.21     
!   weighting requested                                                    HINTINT1.22     
!                                                                          HINTINT1.23     
! Method:                                                                  HINTINT1.24     
!   Select subroutine according to logical flag H_INT_TYPE                 HINTINT1.25     
!                                                                          HINTINT1.26     
! Current Code Owner: D.M. Goddard                                         HINTINT1.27     
!                                                                          HINTINT1.28     
! History:                                                                 HINTINT1.29     
! Version   Date     Comment                                               HINTINT1.30     
! -------   ----     -------                                               HINTINT1.31     
! 4.0      12/04/95  Original code. D.M. Goddard                           HINTINT1.32     
! 4.1      12/06/96  Removes rotation coefficients. Rotation not           UDG2F401.1      
!                    supported for area weighted horizontal interplation   UDG2F401.2      
!                    D.M. Goddard                                          UDG2F401.3      
!                                                                          HINTINT1.33     
! Code Description:                                                        HINTINT1.34     
!   Language: FORTRAN 77 + common extensions.                              HINTINT1.35     
!   This code is written to UMDP3 v7 programming standards.                HINTINT1.36     
!                                                                          HINTINT1.37     
! System component covered: S121                                           HINTINT1.38     
! System Task:              S1                                             HINTINT1.39     
!                                                                          HINTINT1.40     
! Declarations:                                                            HINTINT1.41     
!   These are of the form:-                                                HINTINT1.42     
!     INTEGER      ExampleVariable      !Description of variable           HINTINT1.43     
!                                                                          HINTINT1.44     
! Global variables (*CALLed COMDECKs etc...):                              HINTINT1.45     
*CALL CPHINT                                                               HINTINT1.46     
                                                                           HINTINT1.47     
! Subroutine arguments                                                     HINTINT1.48     
!   Scalar arguments with intent(in):                                      HINTINT1.49     
      INTEGER      ICOF             !Second dimension of coefficents ary   HINTINT1.50     
      INTEGER      IDIM             !Second dimension of index arrays      HINTINT1.51     
      INTEGER      P_FIELD_OUT      !No of P pts on target grid            HINTINT1.52     
      INTEGER      P_ROWS_IN        !No of P rows on source grid           HINTINT1.53     
      INTEGER      P_ROWS_OUT       !No of P rows on target grid           HINTINT1.54     
      INTEGER      ROW_LENGTH_IN    !No of pts per row on source grid      HINTINT1.55     
      INTEGER      ROW_LENGTH_OUT   !No of pts per row on target grid      HINTINT1.56     
      INTEGER      U_FIELD_OUT      !No of U pts on target grid            HINTINT1.57     
      INTEGER      U_FIELD_IN       !No of U pts on source grid            HINTINT1.58     
      INTEGER      U_ROWS_IN        !No of U rows on source grid           HINTINT1.59     
      INTEGER      U_ROWS_OUT       !No of U rows on target grid           HINTINT1.60     
      LOGICAL      GRIB             !=T if winds imported on A-grid        HINTINT1.61     
      LOGICAL      H_INT_TYPE       !=T Area weighted interpolation;       HINTINT1.62     
                                    !=F Bi-linear interpolation            HINTINT1.63     
!   Array  arguments with intent(in):                                      HINTINT1.64     
      INTEGER      FIXHD_IN(*)      !Fixed length header for source grid   HINTINT1.65     
      INTEGER      FIXHD_OUT(*)     !Fixed length header for target grid   HINTINT1.66     
      REAL         REALHD_IN(*)     !Real constants from source grid       HINTINT1.67     
      REAL         REALHD_OUT(*)    !Real constants from target grid       HINTINT1.68     
                                                                           HINTINT1.69     
!   Integer with intent(out):                                              HINTINT1.70     
      LOGICAL      GLOBAL           !T= Global; F= LAM.                    HINTINT1.71     
                                                                           HINTINT1.72     
!   Array  arguments with intent(Out):                                     HINTINT1.73     
                                                                           HINTINT1.74     
      INTEGER      AW_INDEX_TARG_LHS(ROW_LENGTH_OUT+1,IDIM)                HINTINT1.75     
                                    !Index of source box overlapping       HINTINT1.76     
                                    !lhs of target grid-box                HINTINT1.77     
      INTEGER      AW_INDEX_TARG_TOP(P_ROWS_OUT+1,IDIM)                    HINTINT1.78     
                                    !Index of source box overlapping       HINTINT1.79     
                                    !top of target grid-box                HINTINT1.80     
      INTEGER      BL_INDEX_B_L(P_FIELD_OUT,IDIM)                          HINTINT1.81     
                                    !Gather index for bottom l.h.c of      HINTINT1.82     
                                    !source grid box. 1=P-pts; 2=UV-pts    HINTINT1.83     
      INTEGER      BL_INDEX_B_R(P_FIELD_OUT,IDIM)                          HINTINT1.84     
                                    !Gather index for bottom r.h.c of      HINTINT1.85     
                                    !source grid box. 1=P-pts; 2=UV-pts    HINTINT1.86     
      INTEGER      BL_INDEX_NEAREST(P_FIELD_OUT)                           HINTINT1.87     
                                    !Gather index for nearest point on     HINTINT1.88     
                                    !source grid for each target P-pt      HINTINT1.89     
      REAL         AW_AREA_BOX(IDIM) !area of grid box in sq units of      HINTINT1.90     
                                    !  source grid                         HINTINT1.91     
      REAL         AW_COLAT_T(P_ROWS_OUT+1,IDIM)                           HINTINT1.92     
                                    !Colatitude of top of target grd-box   HINTINT1.93     
                                    ! (in units of DELTA_LAT_SRCE)         HINTINT1.94     
      REAL         AW_LONG_L(ROW_LENGTH_OUT+1,IDIM)                        HINTINT1.95     
                                    !Left longitude of target grid-box     HINTINT1.96     
                                    ! (in units of DELTA_LONG_SRCE)        HINTINT1.97     
      REAL         COEFF1(U_FIELD_OUT,ICOF)!Coefficient of rotation no 1   HINTINT1.98     
      REAL         COEFF2(U_FIELD_OUT,ICOF)!Coefficient of rotation no 2   HINTINT1.99     
      REAL         COEFF3(U_FIELD_IN,ICOF) !Coefficient of rotation no 1   HINTINT1.100    
      REAL         COEFF4(U_FIELD_IN,ICOF) !Coefficient of rotation no 2   HINTINT1.101    
      REAL         WEIGHT_T_R(P_FIELD_OUT,IDIM) ! Weights for bilinear     HINTINT1.102    
      REAL         WEIGHT_B_R(P_FIELD_OUT,IDIM) !\horizontal interpolatn   HINTINT1.103    
      REAL         WEIGHT_T_L(P_FIELD_OUT,IDIM) !/ 1=P-pts; 2=U-pts;       HINTINT1.104    
      REAL         WEIGHT_B_L(P_FIELD_OUT,IDIM) ! 3=V-pts;4=zonal mean     HINTINT1.105    
                                                                           HINTINT1.106    
!   ErrorStatus <Delete if ErrorStatus not used>                           HINTINT1.107    
!     INTEGER      ErrorStatus          ! Error flag (0 = OK)              HINTINT1.108    
                                                                           HINTINT1.109    
! Local parameters:                                                        HINTINT1.110    
                                                                           HINTINT1.111    
! Function & Subroutine calls:                                             HINTINT1.112    
      External H_INT_INIT_AW,H_INT_INIT_BL                                 HINTINT1.113    
                                                                           HINTINT1.114    
!- End of header                                                           HINTINT1.115    
                                                                           HINTINT1.116    
! 1: Set logical GLOBAL                                                    HINTINT1.117    
      IF(FIXHD_OUT(ITYPE).EQ.0)THEN                                        HINTINT1.118    
        GLOBAL=.TRUE.                                                      HINTINT1.119    
      ELSE                                                                 HINTINT1.120    
        GLOBAL=.FALSE.                                                     HINTINT1.121    
      END IF                                                               HINTINT1.122    
                                                                           HINTINT1.123    
      IF(H_INT_TYPE)THEN                                                   HINTINT1.124    
                                                                           HINTINT1.125    
! 2: Initialise index arrays for area weighted interpolation               HINTINT1.126    
      WRITE(6,*) 'Using area weighted horizontal interpolation'            HINTINT1.127    
*IF DEF,TIMER                                                              HINTINT1.128    
        CALL TIMER('HINTINAW',3)                                           HINTINT1.129    
*ENDIF                                                                     HINTINT1.130    
        CALL H_INT_INIT_AW(ICOF,IDIM,P_FIELD_OUT,P_ROWS_IN,P_ROWS_OUT      HINTINT1.131    
     &,                    ROW_LENGTH_IN,ROW_LENGTH_OUT                    HINTINT1.132    
     &,                    U_FIELD_IN,U_FIELD_OUT,U_ROWS_IN,U_ROWS_OUT     HINTINT1.133    
     &,                    GLOBAL,GRIB,FIXHD_IN,FIXHD_OUT                  HINTINT1.134    
     &,                    REALHD_IN,REALHD_OUT,AW_AREA_BOX                HINTINT1.135    
     &,                    AW_INDEX_TARG_LHS,AW_INDEX_TARG_TOP             HINTINT1.136    
     &,                    BL_INDEX_B_L,BL_INDEX_B_R,BL_INDEX_NEAREST      HINTINT1.137    
     &,                    AW_COLAT_T,AW_LONG_L                            HINTINT1.138    
     &,                    WEIGHT_T_R,WEIGHT_B_R,WEIGHT_T_L,WEIGHT_B_L)    HINTINT1.140    
*IF DEF,TIMER                                                              HINTINT1.141    
      CALL TIMER('HINTINAW',4)                                             HINTINT1.142    
*ENDIF                                                                     HINTINT1.143    
                                                                           HINTINT1.144    
      ELSE                                                                 HINTINT1.145    
                                                                           HINTINT1.146    
! 3: Initialise index arrays for bi-linear interpolation                   HINTINT1.147    
      WRITE(6,*) 'Using bi-linear horizontal interpolation'                HINTINT1.148    
*IF DEF,TIMER                                                              HINTINT1.149    
        CALL TIMER('HINTINBL',3)                                           HINTINT1.150    
*ENDIF                                                                     HINTINT1.151    
        CALL H_INT_INIT_BL(ICOF,IDIM,P_FIELD_OUT,P_ROWS_IN,P_ROWS_OUT      HINTINT1.152    
     &,                    ROW_LENGTH_IN,ROW_LENGTH_OUT                    HINTINT1.153    
     &,                    U_FIELD_IN,U_FIELD_OUT                          HINTINT1.154    
     &,                    U_ROWS_IN,U_ROWS_OUT,GRIB                       HINTINT1.155    
     &,                    FIXHD_IN,FIXHD_OUT,REALHD_IN,REALHD_OUT         HINTINT1.156    
     &,                    BL_INDEX_B_L,BL_INDEX_B_R,BL_INDEX_NEAREST      HINTINT1.157    
     &,                    COEFF1,COEFF2,COEFF3,COEFF4                     HINTINT1.158    
     &,                    WEIGHT_T_R,WEIGHT_B_R,WEIGHT_T_L,WEIGHT_B_L)    HINTINT1.159    
*IF DEF,TIMER                                                              HINTINT1.160    
        CALL TIMER('HINTINBL',4)                                           HINTINT1.161    
*ENDIF                                                                     HINTINT1.162    
                                                                           HINTINT1.163    
      ENDIF                                                                HINTINT1.164    
                                                                           HINTINT1.165    
      RETURN                                                               HINTINT1.166    
      END                                                                  HINTINT1.167    
*ENDIF                                                                     HINTINT1.168