*IF DEF,A03_6A                                                             SFLINT6A.2      
C ******************************COPYRIGHT******************************    SFLINT6A.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    SFLINT6A.4      
C                                                                          SFLINT6A.5      
C Use, duplication or disclosure of this code is subject to the            SFLINT6A.6      
C restrictions as set forth in the contract.                               SFLINT6A.7      
C                                                                          SFLINT6A.8      
C                Meteorological Office                                     SFLINT6A.9      
C                London Road                                               SFLINT6A.10     
C                BRACKNELL                                                 SFLINT6A.11     
C                Berkshire UK                                              SFLINT6A.12     
C                RG12 2SZ                                                  SFLINT6A.13     
C                                                                          SFLINT6A.14     
C If no contract has been raised with this copy of the code, the use,      SFLINT6A.15     
C duplication or disclosure of it is strictly prohibited.  Permission      SFLINT6A.16     
C to do so must first be obtained in writing from the Head of Numerical    SFLINT6A.17     
C Modelling at the above address.                                          SFLINT6A.18     
C ******************************COPYRIGHT******************************    SFLINT6A.19     
C                                                                          SFLINT6A.20     
!!!  SUBROUTINE SFL_INT------------------------------------------------    SFLINT6A.21     
!!!                                                                        SFLINT6A.22     
!!!  Purpose: To calculate interpolation coefficients for 10m winds        SFLINT6A.23     
!!!           and 1.5m temperature/specific humidity diagnostics.          SFLINT6A.24     
!!!                                                                        SFLINT6A.25     
!!!  Suitable for single column use (via *IF definition IBM).              SFLINT6A.26     
!!!                                                                        SFLINT6A.27     
!!!  Model            Modification history:                                SFLINT6A.28     
!!! version  Date                                                          SFLINT6A.29     
!!!                                                                        SFLINT6A.30     
!!!   4.4  09/05/97   New exact formulation based on Monin-Obukhov         SFLINT6A.31     
!!!                   stability functions.                                 SFLINT6A.32     
!!!                                                    R.N.B.Smith         SFLINT6A.33     
!!!                                                                        SFLINT6A.34     
!!!  Programming standard:                                                 SFLINT6A.35     
!!!                                                                        SFLINT6A.36     
!!!  Logical component covered: Part of P243.                              SFLINT6A.37     
!!!                                                                        SFLINT6A.38     
!!!  System Task:                                                          SFLINT6A.39     
!!!                                                                        SFLINT6A.40     
!!!  External Documentation: UMDP No.24                                    SFLINT6A.41     
!!!                                                                        SFLINT6A.42     
!!!---------------------------------------------------------------------   SFLINT6A.43     
!*L  Arguments :-                                                          SFLINT6A.44     

      SUBROUTINE SFL_INT (                                                  3,8SFLINT6A.45     
     & P_POINTS,P_FIELD,P1                                                 SFLINT6A.46     
     &,Z0M,Z0H,CD,CH                                                       SFLINT6A.47     
     &,Z0M_STD,CD_STD                                                      ARN0F405.1828   
     &,RESFT,RECIP_L_MO,V_S,V_S_STD                                        SFLINT6A.48     
     &,CDR10M,CHR1P5M,CER1P5M                                              SFLINT6A.49     
     +,SU10,SV10,ST1P5,SQ1P5,LTIMER                                        SFLINT6A.50     
     +)                                                                    SFLINT6A.51     
      IMPLICIT NONE                                                        SFLINT6A.52     
                                                                           SFLINT6A.53     
      INTEGER                                                              SFLINT6A.54     
     & P_POINTS          ! IN No. of P-grid points to be processed.        SFLINT6A.55     
     &,P_FIELD           ! IN Total No. of P-grid points.                  SFLINT6A.56     
     &,P1                ! IN First P-grid point to be processed.          SFLINT6A.57     
                                                                           SFLINT6A.58     
      REAL                                                                 SFLINT6A.59     
     + Z0M(P_FIELD)      ! IN Roughness length for momentum (m).           SFLINT6A.60     
     +,Z0H(P_FIELD)      ! IN Roughness length for heat and                SFLINT6A.61     
!                        !    moisture (m).                                SFLINT6A.62     
     &,Z0M_STD(P_FIELD)  ! IN Roughness length for momentum without        ARN0F405.1829   
!                        !    orographic component (m).                    ARN0F405.1830   
     &,CD(P_FIELD)       ! IN Surface drag coefficient.                    SFLINT6A.63     
     &,CH(P_FIELD)       ! IN Surface transfer coefficient for heat and    SFLINT6A.64     
!                        !    moisture.                                    SFLINT6A.65     
     &,CD_STD(P_FIELD)   ! IN Surface drag coefficient excluding           ARN0F405.1831   
!                        !    orographic from drag.                        ARN0F405.1832   
     +,RESFT(P_FIELD)    ! IN Total resistance factor for moisture         SFLINT6A.66     
!                        !    transfer from the surface.                   SFLINT6A.67     
     &,RECIP_L_MO(P_FIELD)                                                 SFLINT6A.68     
!                        ! IN Reciprocal of the Monin-Obukhov length (m)   SFLINT6A.69     
     &,V_S(P_FIELD)      ! IN Surface layer scaling velocity including     SFLINT6A.70     
!                        !    orographic form drag (m/s).                  SFLINT6A.71     
     &,V_S_STD(P_FIELD)  ! IN Surface layer scaling velocity excluding     SFLINT6A.72     
!                        !    orographic form drag (m/s).                  SFLINT6A.73     
                                                                           SFLINT6A.74     
      LOGICAL                                                              SFLINT6A.75     
     + SU10                      ! IN 10m U-wind diagnostic flag           SFLINT6A.76     
     +,SV10                      ! IN 10m V-wind diagnostic flag           SFLINT6A.77     
     +,ST1P5                     ! IN screen temp diagnostic flag          SFLINT6A.78     
     +,SQ1P5                     ! IN screen specific humidity             SFLINT6A.79     
!                                !    diagnostic flag                      SFLINT6A.80     
     +,LTIMER                    ! IN TIMER diagnostics flag               SFLINT6A.81     
! Output variables                                                         SFLINT6A.82     
!                                                                          SFLINT6A.83     
      REAL                                                                 SFLINT6A.84     
     + CDR10M(P_FIELD)   ! OUT interpolation coefficicent for 10m wind     SFLINT6A.85     
     +,CHR1P5M(P_FIELD)  ! OUT Interpolation coefficient for 1.5m          SFLINT6A.86     
!                        !     temperature                                 SFLINT6A.87     
     +,CER1P5M(P_FIELD)  ! OUT Interpolation coefficient for 1.5m          SFLINT6A.88     
!                        !     specific humidity                           SFLINT6A.89     
!*                                                                         SFLINT6A.90     
!*L---------------------------------------------------------------------   SFLINT6A.91     
      EXTERNAL TIMER , PHI_M_H                                             SFLINT6A.92     
!*                                                                         SFLINT6A.93     
!*L---------------------------------------------------------------------   SFLINT6A.94     
!    Local and other symbolic constants :-                                 SFLINT6A.95     
*CALL C_VKMAN                                                              SFLINT6A.96     
      REAL Z_OBS_TQ,Z_OBS_WIND                                             SFLINT6A.97     
      PARAMETER (                                                          SFLINT6A.98     
     + Z_OBS_TQ = 1.5    ! Height of screen observations of temperature    SFLINT6A.99     
!                        ! and humidity.                                   SFLINT6A.100    
     +,Z_OBS_WIND = 10.0 ! Height of surface wind observations.            SFLINT6A.101    
     +)                                                                    SFLINT6A.102    
      LOGICAL EFF_INT                                                      ARN0F405.1833   
      PARAMETER (EFF_INT = .FALSE.)                                        ARN0F405.1834   
!                                                                          SFLINT6A.103    
!  Define local storage.                                                   SFLINT6A.104    
!                                                                          SFLINT6A.105    
!  (a) Local work arrays.                                                  SFLINT6A.106    
!                                                                          SFLINT6A.107    
      REAL                                                                 SFLINT6A.108    
     & Z_WIND(P_FIELD)     ! Height of wind observations.                  SFLINT6A.109    
     &,Z_TEMP(P_FIELD)     ! Height of temperature and humidity            SFLINT6A.110    
!                          ! observations.                                 SFLINT6A.111    
     &,PHI_M_OBS(P_FIELD)  ! Monin-Obukhov stability function for          SFLINT6A.112    
!                          ! momentum integrated to the wind observation   SFLINT6A.113    
!                          ! height.                                       SFLINT6A.114    
     &,PHI_H_OBS(P_FIELD)  ! Monin-Obukhov stability function for          SFLINT6A.115    
!                          ! scalars integrated to their observation       SFLINT6A.116    
!                          ! height.                                       SFLINT6A.117    
      LOGICAL                                                              SFLINT6A.118    
     & L_D_ARRAY(P_FIELD)                                                  SFLINT6A.119    
!                                                                          SFLINT6A.120    
!  (b) Scalars.                                                            SFLINT6A.121    
!                                                                          SFLINT6A.122    
      INTEGER                                                              SFLINT6A.123    
     + I       ! Loop counter (horizontal field index).                    SFLINT6A.124    
      LOGICAL                                                              SFLINT6A.125    
     & L_DUMMY                                                             SFLINT6A.126    
!*                                                                         SFLINT6A.127    
      IF (LTIMER) THEN                                                     SFLINT6A.128    
        CALL TIMER('SFL_INT   ',3)                                         SFLINT6A.129    
      ENDIF                                                                SFLINT6A.130    
!                                                                          SFLINT6A.131    
!-----------------------------------------------------------------------   SFLINT6A.132    
!! 1. If diagnostics required calculate M-O stability functions at         SFLINT6A.133    
!!    observation heights.                                                 SFLINT6A.134    
!-----------------------------------------------------------------------   SFLINT6A.135    
                                                                           SFLINT6A.136    
      IF (SU10 .OR. SV10 .OR. ST1P5 .OR. SQ1P5) THEN                       SFLINT6A.137    
        L_DUMMY = .FALSE.                                                  SFLINT6A.138    
        DO I=P1,P1+P_POINTS-1                                              SFLINT6A.139    
          Z_WIND(I) = Z_OBS_WIND                                           SFLINT6A.140    
          Z_TEMP(I) = Z_OBS_TQ                                             SFLINT6A.141    
          L_D_ARRAY(I) = .TRUE.                                            SFLINT6A.142    
        ENDDO                                                              SFLINT6A.143    
        CALL PHI_M_H (P_POINTS,P_FIELD,P1,L_DUMMY,L_D_ARRAY,               SFLINT6A.144    
     &                RECIP_L_MO,Z_WIND,Z_TEMP,Z0M,Z0H,                    SFLINT6A.145    
     &                PHI_M_OBS,PHI_H_OBS,LTIMER)                          SFLINT6A.146    
      ENDIF                                                                SFLINT6A.147    
                                                                           SFLINT6A.148    
!-----------------------------------------------------------------------   SFLINT6A.149    
!! 2. If diagnostics required calculate interpolation coefficient          SFLINT6A.150    
!!    for 1.5m screen temperature and specific humidity.                   ARN0F405.1835   
!-----------------------------------------------------------------------   SFLINT6A.152    
!                                                                          SFLINT6A.153    
      IF (ST1P5 .OR. SQ1P5) THEN                                           ARN0F405.1836   
        DO I=P1,P1+P_POINTS-1                                              SFLINT6A.155    
          CHR1P5M(I) = CH(I) * PHI_H_OBS(I)/(VKMAN*V_S_STD(I))             ARN0F405.1837   
          CER1P5M(I) = ( CHR1P5M(I) - 1.0 ) * RESFT(I)                     ARN0F405.1838   
        ENDDO                                                              SFLINT6A.157    
      ENDIF                                                                SFLINT6A.158    
!                                                                          SFLINT6A.159    
!-----------------------------------------------------------------------   SFLINT6A.160    
!! 3. If diagnostics required calculate interpolation coefficient          SFLINT6A.161    
!!    for 10m winds.                                                       ARN0F405.1839   
!-----------------------------------------------------------------------   SFLINT6A.163    
!                                                                          SFLINT6A.164    
      IF ( (SU10 .OR. SV10) .AND. EFF_INT ) THEN                           ARN0F405.1840   
        DO I=P1,P1+P_POINTS-1                                              SFLINT6A.166    
          CDR10M(I) = CD(I) * PHI_M_OBS(I)/(VKMAN*V_S(I))                  ARN0F405.1841   
        ENDDO                                                              ARN0F405.1842   
      ELSEIF ( (SU10 .OR. SV10) .AND. .NOT.EFF_INT ) THEN                  ARN0F405.1843   
        CALL PHI_M_H (P_POINTS,P_FIELD,P1,L_DUMMY,L_D_ARRAY,               ARN0F405.1844   
     &                RECIP_L_MO,Z_WIND,Z_TEMP,Z0M_STD,Z0H,                ARN0F405.1845   
     &                PHI_M_OBS,PHI_H_OBS,LTIMER)                          ARN0F405.1846   
        DO I=P1,P1+P_POINTS-1                                              ARN0F405.1847   
          CDR10M(I) = CD_STD(I) * PHI_M_OBS(I)/(VKMAN*V_S_STD(I))          ARN0F405.1848   
        ENDDO                                                              SFLINT6A.169    
      ENDIF                                                                SFLINT6A.170    
!                                                                          SFLINT6A.171    
      IF (LTIMER) THEN                                                     SFLINT6A.172    
        CALL TIMER('SFL_INT ',4)                                           SFLINT6A.173    
      ENDIF                                                                SFLINT6A.174    
      RETURN                                                               SFLINT6A.175    
      END                                                                  SFLINT6A.176    
*ENDIF                                                                     SFLINT6A.177