*IF DEF,A03_6A                                                             EXCFNL6A.2      
C ******************************COPYRIGHT******************************    EXCFNL6A.3      
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved.    EXCFNL6A.4      
C                                                                          EXCFNL6A.5      
C Use, duplication or disclosure of this code is subject to the            EXCFNL6A.6      
C restrictions as set forth in the contract.                               EXCFNL6A.7      
C                                                                          EXCFNL6A.8      
C                Meteorological Office                                     EXCFNL6A.9      
C                London Road                                               EXCFNL6A.10     
C                BRACKNELL                                                 EXCFNL6A.11     
C                Berkshire UK                                              EXCFNL6A.12     
C                RG12 2SZ                                                  EXCFNL6A.13     
C                                                                          EXCFNL6A.14     
C If no contract has been raised with this copy of the code, the use,      EXCFNL6A.15     
C duplication or disclosure of it is strictly prohibited.  Permission      EXCFNL6A.16     
C to do so must first be obtained in writing from the Head of Numerical    EXCFNL6A.17     
C Modelling at the above address.                                          EXCFNL6A.18     
C ******************************COPYRIGHT******************************    EXCFNL6A.19     
C                                                                          EXCFNL6A.20     
!!!  SUBROUTINE EXCF_NL ----------------------------------------------     EXCFNL6A.21     
!!!                                                                        EXCFNL6A.22     
!!!  Purpose: To calculate non-local exchange coefficients for             EXCFNL6A.23     
!!!           boundary layer subroutine KMKH.                              EXCFNL6A.24     
!!!                                                                        EXCFNL6A.25     
!!!  Suitable for single column use (via *IF definition IBM).              EXCFNL6A.26     
!!!                                                                        EXCFNL6A.27     
!!!                                                                        EXCFNL6A.28     
!!!  Model            Modification history:                                EXCFNL6A.29     
!!! version  Date                                                          EXCFNL6A.30     
!!!                                                                        EXCFNL6A.31     
!!!  4.4    Feb 1997  Written by R N B Smith                               EXCFNL6A.32     
!!!                                                                        EXCFNL6A.33     
!!!  Programming standard:                                                 EXCFNL6A.34     
!!!                                                                        EXCFNL6A.35     
!!!  System component covered: Part of P243.                               EXCFNL6A.36     
!!!                                                                        EXCFNL6A.37     
!!!  Project task:                                                         EXCFNL6A.38     
!!!                                                                        EXCFNL6A.39     
!!!  Documentation: UMDP No.24                                             EXCFNL6A.40     
!!!                                                                        EXCFNL6A.41     
!!!---------------------------------------------------------------------   EXCFNL6A.42     
!                                                                          EXCFNL6A.43     
!!   Arguments :-                                                          EXCFNL6A.44     

      SUBROUTINE EXCF_NL (                                                  1,2EXCFNL6A.45     
     & P_FIELD,P1,P_POINTS,BL_LEVELS,                                      EXCFNL6A.46     
     & NTML,CF,                                                            ARN0F405.227    
     & RDZ,ZH,Z_UV,Z_TQ,RHO_UV,RHO_TQ,                                     EXCFNL6A.48     
     & Z0M,V_S,FB_SURF,DB_TOP,                                             EXCFNL6A.49     
     & BFLUX_SURF,BFLUX_SAT_SURF,ZETA_S,BT_TOP,BTT_TOP,                    ARN0F405.228    
     & DF_TOP_OVER_CP,ZETA_R,ALPHA_R,BTC_TOP,                              ARN0F405.229    
     & DB_TOP_CLD,CHI_S_TOP,ZC,                                            EXCFNL6A.52     
     & RHOKM,RHOKH,RHOKM_TOP,RHOKH_TOP,                                    ARN0F405.230    
     & ZHSC,DSCDEPTH,NTDSC,DB_DSCT,SVL,                                    ARN0F405.231    
     & BT_DSCT,BTT_DSCT,                                                   ARN0F405.232    
     & DF_DSCT_OVER_CP,ZETA_R_DSC,ALPHA_R_DSC,BTC_DSCT,                    ARN0F405.233    
     & DB_DSCT_CLD,CHI_S_DSCT,ZC_DSC,COUPLED,                              ARN0F405.234    
     & LTIMER                                                              ARN0F405.235    
     &)                                                                    EXCFNL6A.54     
!                                                                          ARN0F405.236    
      IMPLICIT NONE                                                        EXCFNL6A.55     
!                                                                          ARN0F405.237    
      LOGICAL LTIMER                                                       EXCFNL6A.56     
!                                                                          ARN0F405.238    
      INTEGER                                                              EXCFNL6A.57     
     & P_FIELD     ! IN No. of P-grid points in whole field.               EXCFNL6A.58     
     &,P1          ! IN First P-grid point to be processed.                EXCFNL6A.59     
     &,P_POINTS    ! IN No. of P-grid points to be processed.              EXCFNL6A.60     
     &,BL_LEVELS   ! IN maximum number of boundary layer levels            EXCFNL6A.61     
!                                                                          ARN0F405.239    
      LOGICAL                                                              ARN0F405.240    
     & COUPLED(P_FIELD)          ! IN  Flag to indicate Sc layer weakly    ARN0F405.241    
!                                !     (de)coupled to surface.             ARN0F405.242    
!                                                                          ARN0F405.243    
      INTEGER                                                              EXCFNL6A.62     
     & NTML(P_FIELD)             ! IN  Number of turbulently mixed         EXCFNL6A.63     
!                                !     layers.                             EXCFNL6A.64     
     &,NTDSC(P_FIELD)            ! IN  Top level of any decoupled          ARN0F405.244    
!                                !     turbulently mixed Sc layer.         ARN0F405.245    
!                                                                          ARN0F405.246    
      REAL                                                                 EXCFNL6A.65     
     & RDZ(P_FIELD,BL_LEVELS)    ! IN Reciprocal of distance between       EXCFNL6A.66     
!                                !    T,q-levels (m^-1). 1/RDZ(,K) is      EXCFNL6A.67     
!                                !    the vertical distance from level     EXCFNL6A.68     
!                                !    K-1 to level K, except that for      EXCFNL6A.69     
!                                !    K=1 it is just the height of the     EXCFNL6A.70     
!                                !    lowest atmospheric level.            EXCFNL6A.71     
     &,ZH(P_FIELD)               ! IN Boundary layer height (m).           EXCFNL6A.72     
     &,Z_UV(P_FIELD,BL_LEVELS)   ! IN For a vertically staggered grid      EXCFNL6A.73     
!                                !    with a u,v-level first above the     EXCFNL6A.74     
!                                !    surface, Z_UV(*,K) is the height     EXCFNL6A.75     
!                                !    of the k-th u,v-level (half level    EXCFNL6A.76     
!                                !    k-1/2) above the surface;            EXCFNL6A.77     
!                                !    for an unstaggered grid the          EXCFNL6A.78     
!                                !    heights of the half-levels           EXCFNL6A.79     
!                                !    0.5 to BL_LEVELS-0.5 should be       EXCFNL6A.80     
!                                !    input to elements 1 to BL_LEVELS.    EXCFNL6A.81     
!                                !    (1st value not used in either        EXCFNL6A.82     
!                                !     case.)                              EXCFNL6A.83     
     &,Z_TQ(P_FIELD,BL_LEVELS)   ! IN For a vertically staggered grid      EXCFNL6A.84     
!                                !    with a u,v-level first above the     EXCFNL6A.85     
!                                !    surface, Z_TQ(*,K) is the height     EXCFNL6A.86     
!                                !    of the k-th T,q-level (full level    EXCFNL6A.87     
!                                !    k) above the surface;                EXCFNL6A.88     
!                                !    for an unstaggered grid the          EXCFNL6A.89     
!                                !    heights of the half levels           EXCFNL6A.90     
!                                !    1.5 to BL_LEVELS+0.5 should be       EXCFNL6A.91     
!                                !    input to elements 1 to BL_LEVELS.    EXCFNL6A.92     
!                                !    (value for BL_LEVELS not used        EXCFNL6A.93     
!                                !    in either case.)                     EXCFNL6A.94     
!                                                                          EXCFNL6A.95     
     &,RHO_UV(P_FIELD,BL_LEVELS) ! IN For a vertically staggered grid      EXCFNL6A.96     
!                                !    with a u,v-level first above the     EXCFNL6A.97     
!                                !    surface, RHO_UV(*,K) is the          EXCFNL6A.98     
!                                !    density at the k-th u,v-level        EXCFNL6A.99     
!                                !    above the surface;                   EXCFNL6A.100    
!                                !    for an unstaggered grid the          EXCFNL6A.101    
!                                !    densities at the layer interfaces    EXCFNL6A.102    
!                                !    (half-levels) 0.5 to BL_LEVELS-0.5   EXCFNL6A.103    
!                                !    should be input to elements 1 to     EXCFNL6A.104    
!                                !    BL_LEVELS.                           EXCFNL6A.105    
!                                !    (1st value not used in either        EXCFNL6A.106    
!                                !    case.)                               EXCFNL6A.107    
     &,RHO_TQ(P_FIELD,BL_LEVELS) ! IN For a vertically staggered grid      EXCFNL6A.108    
!                                !    with a u,v-level first above the     EXCFNL6A.109    
!                                !    surface, RHO_TQ(*,K) is the          EXCFNL6A.110    
!                                !    density of the k-th T,q-level        EXCFNL6A.111    
!                                !    above the surface;                   EXCFNL6A.112    
!                                !    for an unstaggered grid the          EXCFNL6A.113    
!                                !    densities at the layer interfaces    EXCFNL6A.114    
!                                !    (half-levels) 1.5 to BL_LEVELS+0.5   EXCFNL6A.115    
!                                !    should be input to elements 1 to     EXCFNL6A.116    
!                                !    BL_LEVELS.                           EXCFNL6A.117    
!                                !    (value for BL_LEVELS not used        EXCFNL6A.118    
!                                !    in either case.)                     EXCFNL6A.119    
!                                                                          EXCFNL6A.120    
     &,Z0M(P_FIELD)              ! IN Roughness length for momentum (m).   EXCFNL6A.121    
     &,V_S(P_FIELD)              ! IN Surface friction velocity (m/s).     EXCFNL6A.122    
     &,FB_SURF(P_FIELD)          ! IN Buoyancy flux at the surface over    EXCFNL6A.123    
!                                !    density (m^2/s^3).                   EXCFNL6A.124    
     &,BFLUX_SURF(P_FIELD)       ! IN Surface buoyancy flux (clear air     ARN0F405.247    
!                                !    term) (kg/m/s^3).                    ARN0F405.248    
     &,BFLUX_SAT_SURF(P_FIELD)   ! IN Surface buoyancy flux (cloudy air    ARN0F405.249    
!                                !    term) (kg/m/s^3).                    ARN0F405.250    
     &,DB_TOP(P_FIELD)           ! IN Buoyancy jump across top of b.l      EXCFNL6A.126    
!                                !    (m/s^2)                              EXCFNL6A.127    
     &,DF_TOP_OVER_CP(P_FIELD)   ! IN Radiative flux change at cloud top   EXCFNL6A.128    
!                                !    divided by c_P (K.kg/m^2/s).         EXCFNL6A.129    
     &,BT_TOP(P_FIELD)           ! IN Buoyancy parameter at the top of     EXCFNL6A.133    
!                                !    the b.l. (m/s^2/K).                  EXCFNL6A.134    
     &,BTT_TOP(P_FIELD)          ! IN In-cloud buoyancy parameter at       EXCFNL6A.135    
!                                !    the top of the b.l. (m/s^2/K).       EXCFNL6A.136    
     &,BTC_TOP(P_FIELD)          ! IN Cloud fraction weighted buoyancy     EXCFNL6A.137    
!                                !    parameter at the top of the b.l.     EXCFNL6A.138    
     &,DB_TOP_CLD(P_FIELD)       ! IN In-cloud buoyancy jump at the        EXCFNL6A.139    
!                                !    top of the b.l. (m/s^2).             EXCFNL6A.140    
     &,CHI_S_TOP(P_FIELD)        ! IN Mixing fraction of just saturated    EXCFNL6A.141    
!                                !    mixture at top of the b.l.           EXCFNL6A.142    
     &,ZETA_S(P_FIELD)           ! IN Non-cloudy fraction of mixing        EXCFNL6A.143    
!                                !    layer for surface forced             EXCFNL6A.144    
!                                !    entrainment term.                    EXCFNL6A.145    
     &,ZETA_R(P_FIELD)           ! IN Non-cloudy fraction of mixing        EXCFNL6A.146    
!                                !    layer for cloud top radiative        EXCFNL6A.147    
!                                !    cooling entrainment term.            EXCFNL6A.148    
     &,ALPHA_R(P_FIELD)          ! IN Fraction of the cloud top            EXCFNL6A.149    
!                                !    radiative cooling assumed to         EXCFNL6A.150    
!                                !    act above the minimum turbulent      EXCFNL6A.151    
!                                !    flux level.                          EXCFNL6A.152    
     &,ZC(P_FIELD)               ! IN Cloud depth (not cloud fraction      EXCFNL6A.153    
!                                !    weighted) (m).                       EXCFNL6A.154    
!                                                                          EXCFNL6A.155    
     &,CF(P_FIELD,BL_LEVELS)     ! IN Cloud fraction.                      ARN0F405.251    
      REAL                                                                 EXCFNL6A.156    
     & ZHSC(P_FIELD)             ! IN Cloud layer height (m).              ARN0F405.252    
     &,DSCDEPTH(P_FIELD)         ! IN Decoupled cloud layer depth (m).     ARN0F405.253    
     &,DB_DSCT(P_FIELD)          ! IN Buoyancy parameter at the top of     ARN0F405.254    
!                                !    the decoupled Sc layer (m/s^2/K).    ARN0F405.255    
     &,SVL(P_FIELD,BL_LEVELS)    ! IN Liquid/frozen water virtual          ARN0F405.256    
!                                !    static energy over CP.               ARN0F405.257    
     &,DF_DSCT_OVER_CP(P_FIELD)  ! IN Radiative flux change at DSC top     ARN0F405.258    
!                                !    divided by c_P (K.kg/m^2/s).         ARN0F405.259    
     &,BT_DSCT(P_FIELD)          ! IN Buoyancy parameter at the top of     ARN0F405.260    
!                                !    the decoupled Sc  (m/s^2/K).         ARN0F405.261    
     &,BTT_DSCT(P_FIELD)         ! IN In-cloud buoyancy parameter at       ARN0F405.262    
!                                !    the top of the decoupled Sc          ARN0F405.263    
!                                !    (m/s^2/K).                           ARN0F405.264    
     &,BTC_DSCT(P_FIELD)         ! IN Cloud fraction weighted buoyancy     ARN0F405.265    
!                                !    parameter at the top of the          ARN0F405.266    
!                                !    decoupled Sc layer.                  ARN0F405.267    
     &,DB_DSCT_CLD(P_FIELD)      ! IN In-cloud buoyancy jump at the        ARN0F405.268    
!                                !    top of the decoupled SC (m/s^2).     ARN0F405.269    
     &,CHI_S_DSCT(P_FIELD)       ! IN Mixing fraction of just saturated    ARN0F405.270    
!                                !    mixture at the top of the            ARN0F405.271    
!                                !    decoupled Sc layer.                  ARN0F405.272    
     &,ZETA_R_DSC(P_FIELD)       ! IN Non-cloudy fraction of decoupled     ARN0F405.273    
!                                !    Sc layer for cloud top radiative     ARN0F405.274    
!                                !    cooling entrainment term.            ARN0F405.275    
     &,ALPHA_R_DSC(P_FIELD)      ! IN Fraction of the cloud top            ARN0F405.276    
!                                !    radiative cooling assumed to         ARN0F405.277    
!                                !    act above the minimum turbulent      ARN0F405.278    
!                                !    flux level for the decoupled Sc.     ARN0F405.279    
     &,ZC_DSC(P_FIELD)           ! IN Cloud depth (not cloud fraction      ARN0F405.280    
!                                !    weighted) of the decoupled Sc (m).   ARN0F405.281    
      REAL                                                                 ARN0F405.282    
     & RHOKM(P_FIELD,2:BL_LEVELS)! OUT Layer k-1 - to - layer k            EXCFNL6A.157    
!                                !     turbulent mixing coefficient        EXCFNL6A.158    
!                                !     for momentum (kg/m/s).              EXCFNL6A.159    
     &,RHOKH(P_FIELD,2:BL_LEVELS)! OUT Layer k-1 - to - layer k            EXCFNL6A.160    
!                                !     turbulent mixing coefficient        EXCFNL6A.161    
!                                !     for heat and moisture (kg/m/s).     EXCFNL6A.162    
     &,RHOKM_TOP(P_FIELD,2:BL_LEVELS)                                      ARN0F405.283    
!                                ! OUT Non-local turbulent mixing          ARN0F405.284    
!                                !     coefficient for top-down mixing     ARN0F405.285    
!                                !     of momentum.                        ARN0F405.286    
     &,RHOKH_TOP(P_FIELD,2:BL_LEVELS)                                      ARN0F405.287    
!                                ! OUT Non-local turbulent mixing          ARN0F405.288    
!                                !     coefficient for top-down mixing     ARN0F405.289    
!                                !     of heat and moisture.               ARN0F405.290    
!*                                                                         EXCFNL6A.163    
!*L---------------------------------------------------------------------   EXCFNL6A.164    
      EXTERNAL TIMER                                                       EXCFNL6A.165    
!*                                                                         EXCFNL6A.166    
!*L---------------------------------------------------------------------   EXCFNL6A.167    
!    Local and other symbolic constants :-                                 EXCFNL6A.168    
*CALL C_LHEAT                                                              EXCFNL6A.169    
*CALL C_R_CP                                                               EXCFNL6A.170    
*CALL C_EPSLON                                                             EXCFNL6A.171    
*CALL C_VKMAN                                                              EXCFNL6A.172    
      REAL A_ENT_1,A_ENT_2,A_ENT_SHR,C_T                                   ARN0F405.291    
      PARAMETER (                                                          EXCFNL6A.174    
     & A_ENT_1=0.23             ! Entrainment parameter.                   EXCFNL6A.175    
     &,A_ENT_2=0.056            ! Entrainment parameter.                   EXCFNL6A.176    
     &,A_ENT_SHR=5.0            ! Entrainment parameter.                   ARN0F405.292    
     &,C_T=1.0                  ! Parameter in Zilitinkevich term.         EXCFNL6A.177    
     &)                                                                    EXCFNL6A.178    
!*                                                                         EXCFNL6A.179    
!                                                                          EXCFNL6A.180    
!  Define local storage.                                                   EXCFNL6A.181    
!                                                                          EXCFNL6A.182    
!  (a) Workspace.                                                          EXCFNL6A.183    
!                                                                          EXCFNL6A.184    
      REAL                                                                 EXCFNL6A.185    
     & W_M_TOP(P_FIELD)         ! Turbulent velocity scale for momentum    EXCFNL6A.186    
!                               ! evaluated at the top of the b.l.         EXCFNL6A.187    
     &,W_H_TOP(P_FIELD)         ! Turbulent velocity scale for scalars     EXCFNL6A.188    
!                               ! evaluated at the top of the b.l.         EXCFNL6A.189    
     &,V_TOP(P_FIELD)           ! Velocity scale for top-down mixing.      ARN0F405.293    
     &,PRANDTL_TOP(P_FIELD)     ! Turbulent Prandtl number                 EXCFNL6A.190    
!                               ! evaluated at the top of the b.l.         EXCFNL6A.191    
     &,KH_TOP_FACTOR(P_FIELD)   ! Factor to ensure K_H profile is          EXCFNL6A.192    
!                               ! continuous at z_h.                       EXCFNL6A.193    
     &,KM_TOP_FACTOR(P_FIELD)   ! Factor to ensure K_M profile is          EXCFNL6A.194    
!                               ! continuous at z_h.                       EXCFNL6A.195    
     &,KH_SCT_FACTOR(P_FIELD)   ! Factor to ensure top-down K_H profile    ARN0F405.294    
!                               ! is continuous at z_h.                    ARN0F405.295    
     &,KM_SCT_FACTOR(P_FIELD)   ! Factor to ensure top-down K_M profile    ARN0F405.296    
!                               ! is continuous at z_h.                    ARN0F405.297    
     &,KH_DSCT_FACTOR(P_FIELD)  ! Factor to ensure K_H profile is          ARN0F405.298    
!                               ! continuous at ZHSC.                      ARN0F405.299    
     &,KM_DSCT_FACTOR(P_FIELD)  ! Factor to ensure K_M profile is          ARN0F405.300    
!                               ! continuous at ZHSC.                      ARN0F405.301    
     &,V_TOP_DSC(P_FIELD)       ! Velocity scale for top-down convection   ARN0F405.302    
!                               ! in decoupled Sc layer.                   ARN0F405.303    
     &,SVL_PLUME(P_FIELD)       ! s_VL of descending plume to find         ARN0F405.304    
!                               ! decoupled Sc layer base.                 ARN0F405.305    
     &,SCDEPTH(P_FIELD)         ! Depth of top-driven mixing in            ARN0F405.306    
!                               ! well-mixed Sc layer.                     ARN0F405.307    
!  (b) Scalars.                                                            EXCFNL6A.196    
!                                                                          EXCFNL6A.197    
      REAL                                                                 EXCFNL6A.198    
     & PRANDTL    ! Turbulent Prandtl number.                              EXCFNL6A.199    
     &,ZK_UV      ! Height above surface of u,v-level.                     EXCFNL6A.200    
     &,ZK_TQ      ! Height above surface of T,q-level.                     EXCFNL6A.201    
     &,ZH_M       ! Height taken as top of the turbulent mixing layer      EXCFNL6A.202    
!                 ! for momentum.                                          EXCFNL6A.203    
     &,W_S_CUBED_UV ! Cube of free-convective velocity scale (u,v-level)   EXCFNL6A.204    
     &,W_S_CUBED_TQ ! Cube of free-convective velocity scale (T,q-level)   EXCFNL6A.205    
     &,W_M_UV     ! Turbulent velocity scale for momentum (u,v-level).     EXCFNL6A.206    
     &,W_M_TQ     ! Turbulent velocity scale for momentum (T,q-level).     EXCFNL6A.207    
     &,W_H_UV     ! Turbulent velocity scale for scalars (u,v-level).      EXCFNL6A.208    
     &,SF_TERM    ! Surface buoyancy flux term for entrainment paramn.     ARN0F405.308    
     &,SF_SHEAR_TERM                                                       ARN0F405.309    
!                 ! Surface shear term for the entrainment paramn.         ARN0F405.310    
     &,IR_TERM    ! Indirect radiative term for entrainment paramn.        EXCFNL6A.210    
     &,DR_TERM    ! Direct radiative term for entrainment paramn.          EXCFNL6A.211    
     &,EVAP_TERM  ! Evaporative term in entrainment parametrization.       EXCFNL6A.212    
     &,ZIL_CORR   ! Zilitinkevich correction term in entrn. paramn.        EXCFNL6A.213    
     &,ZETA_S_FAC ! Factor involving ZETA_S.                               ARN0F405.311    
     &,ZETA_R_SQ  ! ZETA_R squared.                                        EXCFNL6A.215    
     &,ZR         ! Ratio ZC/ZH.                                           EXCFNL6A.216    
     &,Z_PR       ! Height above surface layer.                            ARN0F405.312    
     &,ZH_PR      ! Height of cloud layer top above surface layer.         ARN0F405.313    
     &,ZCML_BASE  ! Height of base of cloud mixed layer.                   ARN0F405.314    
     &,RHOKH_ENT  ! entrainment eddy viscosity.                            ARN0F405.315    
     &,FRAC_TOP   ! Fraction of turbulent mixing driven from the top.      ARN0F405.316    
     &,FACTOR     ! Temporary scalar.                                      ARN0F405.317    
     &,ENT_FACTOR ! Factor to weight entrainment by CF.                    ARN0F405.318    
     &,DTDZ_PAR   ! Eddy turnover timescale.                               ARN0F405.319    
!                                                                          EXCFNL6A.217    
      INTEGER                                                              EXCFNL6A.218    
     & I       ! Loop counter (horizontal field index).                    EXCFNL6A.219    
     &,K       ! Loop counter (vertical level index).                      EXCFNL6A.220    
!                                                                          EXCFNL6A.221    
      LOGICAL                                                              ARN0F405.320    
     & SCBASE(P_FIELD)     ! Flag to signal base of convective mixed       ARN0F405.321    
!                          ! layer reached.                                ARN0F405.322    
!                                                                          ARN0F405.323    
      IF (LTIMER) THEN                                                     EXCFNL6A.222    
        CALL TIMER('EXCF_NL  ',3)                                          EXCFNL6A.223    
      ENDIF                                                                EXCFNL6A.224    
!                                                                          EXCFNL6A.225    
!-----------------------------------------------------------------------   EXCFNL6A.226    
!! 0.  Calculate top-of-b.l. velocity scales and Prandtl number.           ARN0F405.324    
!-----------------------------------------------------------------------   EXCFNL6A.228    
!                                                                          EXCFNL6A.229    
      DO I = P1,P1-1+P_POINTS                                              EXCFNL6A.230    
                                                                           ARN0F405.325    
        V_TOP(I) = 0.0                                                     ARN0F405.326    
        V_TOP_DSC(I) = 0.0                                                 ARN0F405.327    
        SCBASE(I)=.FALSE.                                                  ARN0F405.328    
        SVL_PLUME(I) = 0.0                                                 ARN0F405.329    
                                                                           ARN0F405.330    
        IF (FB_SURF(I) .GE. 0.0) THEN                                      EXCFNL6A.231    
!                                                                          EXCFNL6A.232    
!         By definition the top of the b.l. is in the 'outer layer' so     EXCFNL6A.233    
!         the free-convective velocity scale cubed is                      EXCFNL6A.234    
!                                                                          EXCFNL6A.235    
          IF (COUPLED(I)) THEN                                             ARN0F405.331    
            W_S_CUBED_UV = 0.25 * ZHSC(I) * FB_SURF(I)                     ARN0F405.332    
          ELSE                                                             ARN0F405.333    
          W_S_CUBED_UV = 0.25 * ZH(I) * FB_SURF(I)                         EXCFNL6A.236    
          ENDIF                                                            ARN0F405.334    
!                                                                          EXCFNL6A.237    
!         Turbulent velocity scale for momentum                            EXCFNL6A.238    
!                                                                          EXCFNL6A.239    
          W_M_TOP(I) = (V_S(I)*V_S(I)*V_S(I) + W_S_CUBED_UV)**(1.0/3.0)    EXCFNL6A.240    
!                                                                          EXCFNL6A.241    
!         Turbulent Prandtl number and velocity scale for scalars          EXCFNL6A.242    
!                                                                          EXCFNL6A.243    
          PRANDTL_TOP(I) = 0.75 * ( V_S(I)*V_S(I)*V_S(I)*V_S(I) +          EXCFNL6A.244    
     &                        (4.0/25.0)*W_S_CUBED_UV*W_M_TOP(I) ) /       EXCFNL6A.245    
     &                            ( V_S(I)*V_S(I)*V_S(I)*V_S(I) +          EXCFNL6A.246    
     &                        (8.0/25.0)*W_S_CUBED_UV*W_M_TOP(I) )         EXCFNL6A.247    
          W_H_TOP(I) = W_M_TOP(I) / PRANDTL_TOP(I)                         EXCFNL6A.248    
        ELSE                                                               EXCFNL6A.249    
          W_M_TOP(I) = V_S(I)                                              EXCFNL6A.250    
          PRANDTL_TOP(I) = 0.75                                            EXCFNL6A.251    
          W_H_TOP(I) = W_M_TOP(I) / PRANDTL_TOP(I)                         EXCFNL6A.252    
        ENDIF                                                              EXCFNL6A.253    
      ENDDO                                                                EXCFNL6A.254    
!                                                                          EXCFNL6A.255    
!-----------------------------------------------------------------------   EXCFNL6A.256    
!! 1.  Loop round levels; calculate the top-of-b.l. entrainment            EXCFNL6A.257    
!!     mixing coefficients.                                                EXCFNL6A.258    
!-----------------------------------------------------------------------   EXCFNL6A.259    
!                                                                          EXCFNL6A.260    
      DO K=2,BL_LEVELS                                                     EXCFNL6A.261    
        DO I=P1,P1+P_POINTS-1                                              EXCFNL6A.262    
!                                                                          EXCFNL6A.263    
!-----------------------------------------------------------------------   EXCFNL6A.264    
!! 1.2 Calculate top-of-b.l. entrainment mixing coefficients               EXCFNL6A.265    
!!     and store b.l. top quantities for later use.                        EXCFNL6A.266    
!-----------------------------------------------------------------------   EXCFNL6A.267    
!!         First the top of the surface mixed layer (if not coupled)       ARN0F405.335    
!-----------------------------------------------------------------------   ARN0F405.336    
          IF ( (K .EQ. NTML(I)+1) .AND. (DB_TOP(I) .GT. 0.0)               ARN0F405.337    
     &          .AND. .NOT.COUPLED(I) ) THEN                               ARN0F405.338    
!           !-----------------------------------------------------------   EXCFNL6A.269    
!           ! Calculate the surface buoyancy flux term                     ARN0F405.339    
!           !-----------------------------------------------------------   EXCFNL6A.271    
            ZETA_S_FAC = (1.0 - ZETA_S(I)) * (1.0 - ZETA_S(I))             ARN0F405.340    
            SF_TERM = A_ENT_1 * MAX ( 0.0 ,                                ARN0F405.341    
     &                          ( (1.0 - ZETA_S_FAC) * BFLUX_SURF(I)       ARN0F405.342    
     &                             + ZETA_S_FAC * BFLUX_SAT_SURF(I) ) )    ARN0F405.343    
!           !-----------------------------------------------------------   EXCFNL6A.276    
!           ! Calculate the surface shear term                             ARN0F405.344    
!           !-----------------------------------------------------------   ARN0F405.345    
            SF_SHEAR_TERM = A_ENT_SHR * V_S(I) * V_S(I) * V_S(I)           ARN0F405.346    
     &                        * RHO_UV(I,K) / ZH(I)                        ARN0F405.347    
!           !-----------------------------------------------------------   ARN0F405.348    
!           ! Calculate the indirect radiative term                        EXCFNL6A.277    
!           !-----------------------------------------------------------   EXCFNL6A.278    
            ZETA_R_SQ = ZETA_R(I)*ZETA_R(I)                                EXCFNL6A.279    
            IR_TERM = (BT_TOP(I)*ZETA_R_SQ + BTT_TOP(I)*(1.0-ZETA_R_SQ))   EXCFNL6A.280    
     &                 * A_ENT_1 * DF_TOP_OVER_CP(I)                       ARN0F405.349    
!           !-----------------------------------------------------------   EXCFNL6A.282    
!           ! Calculate the evaporative term                               EXCFNL6A.283    
!           !-----------------------------------------------------------   EXCFNL6A.284    
            ZR = SQRT( ZC(I) / ZH(I) )                                     EXCFNL6A.285    
            EVAP_TERM = A_ENT_2 * RHO_UV(I,K)                              EXCFNL6A.286    
     &                  * CHI_S_TOP(I) * CHI_S_TOP(I)                      EXCFNL6A.287    
     &                  * ZR * ZR * ZR * DB_TOP_CLD(I)                     EXCFNL6A.288    
     &                  * SQRT( ZH(I) * DB_TOP(I) )                        EXCFNL6A.289    
!           !-----------------------------------------------------------   EXCFNL6A.290    
!           ! Calculate the direct radiative term                          EXCFNL6A.291    
!           !-----------------------------------------------------------   EXCFNL6A.292    
            DR_TERM = BTC_TOP(I) * ALPHA_R(I) * DF_TOP_OVER_CP(I)          EXCFNL6A.293    
!           !-----------------------------------------------------------   EXCFNL6A.294    
!           ! Finally combine terms to calculate the entrainment           EXCFNL6A.295    
!           ! mixing coefficients                                          EXCFNL6A.296    
!           !-----------------------------------------------------------   EXCFNL6A.297    
            IF (CF(I,NTML(I)) .GE. 0.9) THEN                               ARN0F405.350    
              ENT_FACTOR = 1.0                                             ARN0F405.351    
            ELSE                                                           ARN0F405.352    
              ENT_FACTOR = EXP(-((0.90-CF(I,NTML(I)))**3.0)/0.075)         ARN0F405.353    
            ENDIF                                                          ARN0F405.354    
!                                                                          ARN0F405.355    
            ZIL_CORR = C_T * ( (SF_TERM + SF_SHEAR_TERM + ENT_FACTOR *     ARN0F405.356    
     &                          (IR_TERM + EVAP_TERM) ) /                  ARN0F405.357    
     &                   (RHO_UV(I,K) * SQRT(ZH(I))) )**(2.0/3.0)          EXCFNL6A.299    
                                                                           ARN0F405.358    
            RHOKH_ENT = (SF_TERM + SF_SHEAR_TERM                           ARN0F405.359    
     &         + ENT_FACTOR * (IR_TERM + EVAP_TERM                         ARN0F405.360    
     &          + DR_TERM)) / ((DB_TOP(I) + ZIL_CORR) * RDZ(I,K) )         ARN0F405.361    
                                                                           ARN0F405.362    
            V_TOP(I) = ( ENT_FACTOR * (IR_TERM + EVAP_TERM) * ZH(I) /      ARN0F405.363    
     &                      (A_ENT_1*RHO_UV(I,K)) )**(1.0/3.0)             ARN0F405.364    
            FRAC_TOP = V_TOP(I) / ( V_TOP(I) + W_H_TOP(I) + 1.0E-14 )      ARN0F405.365    
                                                                           ARN0F405.366    
            RHOKH(I,K) = RHOKH_ENT * ( 1.0 - FRAC_TOP )                    ARN0F405.367    
            RHOKM(I,K) = PRANDTL_TOP(I) * RHOKH(I,K)                       EXCFNL6A.302    
     &                   * RHO_TQ(I,K-1) / RHO_UV(I,K)                     EXCFNL6A.303    
                                                                           ARN0F405.368    
            RHOKH_TOP(I,K) = RHOKH_ENT * FRAC_TOP                          ARN0F405.369    
            RHOKM_TOP(I,K) = 0.75 * RHOKH_TOP(I,K)                         ARN0F405.370    
     &                       * RHO_TQ(I,K-1) / RHO_UV(I,K)                 ARN0F405.371    
          ELSE                                                             EXCFNL6A.304    
            RHOKH(I,K) = 0.0                                               EXCFNL6A.305    
            RHOKM(I,K) = 0.0                                               EXCFNL6A.306    
            RHOKH_TOP(I,K) = 0.0                                           ARN0F405.372    
            RHOKM_TOP(I,K) = 0.0                                           ARN0F405.373    
          ENDIF                                                            EXCFNL6A.307    
!-----------------------------------------------------------------------   ARN0F405.374    
!!        Then the top of the decoupled Sc (if coupled use ZHSC            ARN0F405.375    
!!        length-scale).                                                   ARN0F405.376    
!-----------------------------------------------------------------------   ARN0F405.377    
          IF ( (K .EQ. NTDSC(I)+1) .AND. (DB_DSCT(I) .GT. 0.0) ) THEN      ARN0F405.378    
             IF (COUPLED(I)) THEN                                          ARN0F405.379    
!              !--------------------------------------------------------   ARN0F405.380    
!              ! Calculate the surface buoyancy flux term                  ARN0F405.381    
!              !--------------------------------------------------------   ARN0F405.382    
               ZETA_S_FAC = (1.0 - ZETA_S(I)) * (1.0 - ZETA_S(I))          ARN0F405.383    
               SF_TERM = A_ENT_1 * MAX ( 0.0 ,                             ARN0F405.384    
     &                          ( (1.0 - ZETA_S_FAC) * BFLUX_SURF(I)       ARN0F405.385    
     &                             + ZETA_S_FAC * BFLUX_SAT_SURF(I) ) )    ARN0F405.386    
!              !--------------------------------------------------------   ARN0F405.387    
!              ! Calculate the surface shear term                          ARN0F405.388    
!              !--------------------------------------------------------   ARN0F405.389    
               SF_SHEAR_TERM = A_ENT_SHR * V_S(I) * V_S(I) * V_S(I)        ARN0F405.390    
     &                           * RHO_UV(I,K) / DSCDEPTH(I)               ARN0F405.391    
             ELSE                                                          ARN0F405.392    
               SF_TERM = 0.0                                               ARN0F405.393    
               SF_SHEAR_TERM = 0.0                                         ARN0F405.394    
             ENDIF                                                         ARN0F405.395    
!           !-----------------------------------------------------------   ARN0F405.396    
!           ! Calculate the indirect radiative term                        ARN0F405.397    
!           !-----------------------------------------------------------   ARN0F405.398    
            ZETA_R_SQ = ZETA_R_DSC(I)*ZETA_R_DSC(I)                        ARN0F405.399    
            IR_TERM = (BT_DSCT(I)*ZETA_R_SQ+BTT_DSCT(I)*(1.0-ZETA_R_SQ))   ARN0F405.400    
     &                 * A_ENT_1 * DF_DSCT_OVER_CP(I)                      ARN0F405.401    
!           !-----------------------------------------------------------   ARN0F405.402    
!           ! Calculate the evaporative term                               ARN0F405.403    
!           !-----------------------------------------------------------   ARN0F405.404    
            ZR = SQRT( ZC_DSC(I) / DSCDEPTH(I) )                           ARN0F405.405    
            EVAP_TERM = A_ENT_2*RHO_UV(I,K) *CHI_S_DSCT(I)*CHI_S_DSCT(I)   ARN0F405.406    
     &                  * ZR * ZR * ZR * DB_DSCT_CLD(I)                    ARN0F405.407    
     &                  * SQRT( DSCDEPTH(I) * DB_DSCT(I) )                 ARN0F405.408    
!           !-----------------------------------------------------------   ARN0F405.409    
!           ! Calculate the direct radiative term                          ARN0F405.410    
!           !-----------------------------------------------------------   ARN0F405.411    
            DR_TERM = BTC_DSCT(I) * ALPHA_R_DSC(I) * DF_DSCT_OVER_CP(I)    ARN0F405.412    
!           !-----------------------------------------------------------   ARN0F405.413    
!           ! Finally combine terms to calculate the entrainment           ARN0F405.414    
!           ! mixing coefficients                                          ARN0F405.415    
!           !-----------------------------------------------------------   ARN0F405.416    
                                                                           ARN0F405.417    
            IF (CF(I,NTDSC(I)).GE.0.9) THEN                                ARN0F405.418    
              ENT_FACTOR = 1.0                                             ARN0F405.419    
            ELSE                                                           ARN0F405.420    
              ENT_FACTOR = EXP(-((0.90-CF(I,NTDSC(I)))**3.0)/0.075)        ARN0F405.421    
            ENDIF                                                          ARN0F405.422    
                                                                           ARN0F405.423    
            V_TOP_DSC(I) =( ENT_FACTOR * (IR_TERM + EVAP_TERM) *           ARN0F405.424    
     &                      DSCDEPTH(I) /                                  ARN0F405.425    
     &                         (A_ENT_1*RHO_UV(I,K)) )**(1.0/3.0)          ARN0F405.426    
            ZIL_CORR = C_T * ( (SF_TERM + SF_SHEAR_TERM +                  ARN0F405.427    
     &                 ENT_FACTOR * (IR_TERM + EVAP_TERM)) /               ARN0F405.428    
     &                 (RHO_UV(I,K) * SQRT(DSCDEPTH(I))) )**(2.0/3.0)      ARN0F405.429    
            RHOKH_TOP(I,K) = ( SF_TERM + SF_SHEAR_TERM                     ARN0F405.430    
     &               + ENT_FACTOR * (IR_TERM + EVAP_TERM + DR_TERM) )      ARN0F405.431    
     &                / ((DB_DSCT(I) + ZIL_CORR) * RDZ(I,K) )              ARN0F405.432    
            RHOKM_TOP(I,K) = 0.75 * RHOKH_TOP(I,K)                         ARN0F405.433    
     &                   * RHO_TQ(I,K-1) / RHO_UV(I,K)                     ARN0F405.434    
          ENDIF                                                            ARN0F405.435    
        ENDDO                                                              ARN0F405.436    
      ENDDO                                                                ARN0F405.437    
!-----------------------------------------------------------------------   ARN0F405.438    
!! 1.3  Parcel descent to find base of decoupled Sc layer (if there is     ARN0F405.439    
!!      one) can now include the entrainment source and so give a more     ARN0F405.440    
!!      accurate value for DSCDEPTH.                                       ARN0F405.441    
!-----------------------------------------------------------------------   ARN0F405.442    
!       Take the current radiatively determined DSCDEPTH as a starting     ARN0F405.443    
!       point (although restricted to less than 1.2*ZC in case the         ARN0F405.444    
!       presence of entrainment makes the parcel positively buoyant        ARN0F405.445    
!       below cloud base - assume the cloud is well mixed and allow        ARN0F405.446    
!       for an overshoot).  Assume that the cloudy air parcel (with        ARN0F405.447    
!       s_VL taken from NTDSC assumed to be representative of the          ARN0F405.448    
!       convectively mixed layer) mixes with entrained air and cools       ARN0F405.449    
!       radiatively on a timescale given by the eddy turnover time         ARN0F405.450    
!       ( = DSCDEPTH/V_TOP_DSC) and a length scale of DSCDEPTH so the      ARN0F405.451    
!       flux into the parcel is multiplied by DTDZ_PAR = 1.0/V_TOP_DSC.    ARN0F405.452    
!                                                                          ARN0F405.453    
!          NOTE (1): if V_TOP_DSC = 0, DSCDEPTH is unchanged from its      ARN0F405.454    
!                    value estimated in KMKH.                              ARN0F405.455    
!          NOTE (2): the entrainment calculation could be repeated         ARN0F405.456    
!                    using this new value of DSCDEPTH but the dependence   ARN0F405.457    
!                    on DSCDEPTH is small so this isn't done.              ARN0F405.458    
!          NOTE (3): the radiative increment has already been added at     ARN0F405.459    
!                    this stage suggesting SVL_PARCEL may have double      ARN0F405.460    
!                    counted its radiative contribution (leading to less   ARN0F405.461    
!                    decoupling) but it makes little difference to the     ARN0F405.462    
!                    results.                                              ARN0F405.463    
!-----------------------------------------------------------------------   ARN0F405.464    
        DO I = P1,P1-1+P_POINTS                                            ARN0F405.465    
          IF ( V_TOP_DSC(I) .GT. 0.0 ) THEN                                ARN0F405.466    
            K=NTDSC(I)                                                     ARN0F405.467    
            IF ( NTDSC(I) .LE. 2 ) THEN                                    ARN0F405.468    
!                                                                          ARN0F405.469    
!             ! svl_plume not needed                                       ARN0F405.470    
!                                                                          ARN0F405.471    
              DSCDEPTH(I) = Z_UV(I,K+1)                                    ARN0F405.472    
              SCBASE(I) = .TRUE.                                           ARN0F405.473    
            ELSE                                                           ARN0F405.474    
              DTDZ_PAR = 1.0 / V_TOP_DSC(I)                                ARN0F405.475    
              SVL_PLUME(I) =            !  plume perturbation              ARN0F405.476    
     &          ( RDZ(I,K+1) * RHOKH_TOP(I,K+1) * (SVL(I,K+1)-SVL(I,K))    ARN0F405.477    
     &            - DF_DSCT_OVER_CP(I) ) * DTDZ_PAR / RHO_UV(I,K+1)        ARN0F405.478    
              IF ( Z_UV(I,K-1) .GE. ZHSC(I)-ZC_DSC(I) .AND.                ARN0F405.479    
     &             SVL(I,K-1) .LT. SVL(I,K) ) THEN                         ARN0F405.480    
!                                                                          ARN0F405.481    
!               ! cloud layer is at least two layers thick and there is    ARN0F405.482    
!               ! an inversion near cloud top, take layer NTDSC-1          ARN0F405.483    
!               ! as representative                                        ARN0F405.484    
!                                                                          ARN0F405.485    
                SVL_PLUME(I) = SVL(I,K-1) + SVL_PLUME(I)                   ARN0F405.486    
              ELSE                                                         ARN0F405.487    
!                                                                          ARN0F405.488    
!               ! cloud layer less than two layers thick so take           ARN0F405.489    
!               ! layer NTDSC as representative                            ARN0F405.490    
!                                                                          ARN0F405.491    
                SVL_PLUME(I) = SVL(I,K) + SVL_PLUME(I)                     ARN0F405.492    
              ENDIF                                                        ARN0F405.493    
            ENDIF                                                          ARN0F405.494    
          ENDIF                                                            ARN0F405.495    
        ENDDO                                                              ARN0F405.496    
!-----------------------------------------------------------------------   ARN0F405.497    
!  Loop over levels to find where plume becomes positively buoyant         ARN0F405.498    
!-----------------------------------------------------------------------   ARN0F405.499    
        DO K=BL_LEVELS-1,1,-1                                              ARN0F405.500    
          DO I = P1,P1-1+P_POINTS                                          ARN0F405.501    
                                                                           ARN0F405.502    
            IF ( V_TOP_DSC(I).GT.0.0 .AND. NTDSC(I).GT.2 ) THEN            ARN0F405.503    
              IF ( .NOT.SCBASE(I) .AND.                                    ARN0F405.504    
!                   not yet found Sc base                                  ARN0F405.505    
     &              ( SVL_PLUME(I) .GT. SVL(I,K)                           ARN0F405.506    
!                     plume positively buoyant                             ARN0F405.507    
     &                .OR. K .EQ. 1 ) )                                    ARN0F405.508    
!                          plume reached the surface                       ARN0F405.509    
     &          THEN                                                       ARN0F405.510    
                DSCDEPTH(I) = MAX( ZHSC(I)-Z_UV(I,K+1),                    ARN0F405.511    
     &                          MIN(1.2*ZC_DSC(I),DSCDEPTH(I)) )           ARN0F405.512    
!                                                                          ARN0F405.513    
!                 depth must be at least MIN( 1.2*ZC ,                     ARN0F405.514    
!                                         radiatively-determined-depth )   ARN0F405.515    
!                                                                          ARN0F405.516    
                SCBASE(I)=.TRUE.                                           ARN0F405.517    
              ENDIF                                                        ARN0F405.518    
            ENDIF                                                          ARN0F405.519    
          ENDDO                                                            ARN0F405.520    
        ENDDO                                                              ARN0F405.521    
!-----------------------------------------------------------------------   ARN0F405.522    
!! 1.4  Identical plume descent to the above but to find depth of          ARN0F405.523    
!       top-down mixing in well mixed Sc layer, SCDEPTH.                   ARN0F405.524    
!-----------------------------------------------------------------------   ARN0F405.525    
        DO I = P1,P1-1+P_POINTS                                            ARN0F405.526    
          SCBASE(I) = .FALSE.                                              ARN0F405.527    
          SVL_PLUME(I) = 0.0                                               ARN0F405.528    
          SCDEPTH(I) = 0.0   ! default for V_TOP eq 0                      ARN0F405.529    
        ENDDO                                                              ARN0F405.530    
        DO I = P1,P1-1+P_POINTS                                            ARN0F405.531    
          IF ( V_TOP(I) .GT. 0.0 ) THEN                                    ARN0F405.532    
            K=NTML(I)                                                      ARN0F405.533    
            IF ( NTML(I).LE.2 ) THEN                                       ARN0F405.534    
!                                                                          ARN0F405.535    
!             ! svl_plume not needed                                       ARN0F405.536    
!                                                                          ARN0F405.537    
              SCDEPTH(I) = Z_UV(I,K+1)                                     ARN0F405.538    
              SCBASE(I) = .TRUE.                                           ARN0F405.539    
            ELSE                                                           ARN0F405.540    
              DTDZ_PAR = 1.0 / V_TOP(I)                                    ARN0F405.541    
              SVL_PLUME(I) =            !  plume perturbation              ARN0F405.542    
     &                ( ( SVL(I,K+1)-SVL(I,K) ) * RDZ(I,K+1)               ARN0F405.543    
     &                  * ( RHOKH(I,K+1)+RHOKH_TOP(I,K+1) )                ARN0F405.544    
     &                 - DF_TOP_OVER_CP(I) ) * DTDZ_PAR / RHO_UV(I,K+1)    ARN0F405.545    
              IF ( Z_UV(I,K-1) .GE. ZH(I)-ZC(I) .AND.                      ARN0F405.546    
     &             SVL(I,K-1) .LT. SVL(I,K) ) THEN                         ARN0F405.547    
!                                                                          ARN0F405.548    
!               ! cloud layer is at least two layers thick and there is    ARN0F405.549    
!               ! an inversion near cloud top, take layer NTML-1 as        ARN0F405.550    
!               ! representative                                           ARN0F405.551    
!                                                                          ARN0F405.552    
                SVL_PLUME(I) = SVL(I,K-1) + SVL_PLUME(I)                   ARN0F405.553    
              ELSE                                                         ARN0F405.554    
!                                                                          ARN0F405.555    
!               ! cloud layer less than two layers thick so take layer     ARN0F405.556    
!               ! NTDSC as representative                                  ARN0F405.557    
!                                                                          ARN0F405.558    
                SVL_PLUME(I) = SVL(I,K) + SVL_PLUME(I)                     ARN0F405.559    
              ENDIF                                                        ARN0F405.560    
            ENDIF                                                          ARN0F405.561    
          ENDIF                                                            ARN0F405.562    
        ENDDO                                                              ARN0F405.563    
!-----------------------------------------------------------------------   ARN0F405.564    
!  Loop over levels to find where plume becomes positively buoyant         ARN0F405.565    
!-----------------------------------------------------------------------   ARN0F405.566    
        DO K=BL_LEVELS-1,1,-1                                              ARN0F405.567    
          DO I = P1,P1-1+P_POINTS                                          ARN0F405.568    
                                                                           ARN0F405.569    
            IF ( V_TOP(I).GT.0.0 .AND. NTML(I).GT.2 ) THEN                 ARN0F405.570    
              IF ( .NOT.SCBASE(I) .AND.                                    ARN0F405.571    
!                   not yet found scbase                                   ARN0F405.572    
     &             (SVL_PLUME(I) .GT. SVL(I,K)                             ARN0F405.573    
!                   plume positively buoyant                               ARN0F405.574    
     &              .OR. K .EQ. 1 )  )                                     ARN0F405.575    
!                        reached the surface                               ARN0F405.576    
     &          THEN                                                       ARN0F405.577    
                SCDEPTH(I) = MAX( ZH(I)-Z_UV(I,K+1), 1.2*ZC(I) )           ARN0F405.578    
!                     !   depth must be at least 1.2*ZC                    ARN0F405.579    
                SCBASE(I)=.TRUE.                                           ARN0F405.580    
              ENDIF                                                        ARN0F405.581    
            ENDIF                                                          ARN0F405.582    
          ENDDO                                                            ARN0F405.583    
        ENDDO                                                              ARN0F405.584    
!                                                                          ARN0F405.585    
!-----------------------------------------------------------------------   ARN0F405.586    
!     Calculate factors required to ensure that the non-local turbulent    ARN0F405.587    
!     mixing coefficient profiles are continuous as the entrainment        ARN0F405.588    
!     level is approached.                                                 ARN0F405.589    
!-----------------------------------------------------------------------   ARN0F405.590    
!                                                                          ARN0F405.591    
      DO I = P1,P1-1+P_POINTS                                              ARN0F405.592    
        K=NTML(I)+1                                                        ARN0F405.593    
!       ! for cubic form of KH and KM:                                     ARN0F405.594    
            KH_TOP_FACTOR(I) = MAX( 0.7 , 1.0 - SQRT( RHOKH(I,K) /         EXCFNL6A.310    
     &                 ( RHO_UV(I,K)*W_H_TOP(I)*VKMAN*ZH(I) ) ) )          EXCFNL6A.311    
            KM_TOP_FACTOR(I) = MAX( 0.7 , 1.0 - SQRT( RHOKM(I,K) /         EXCFNL6A.312    
     &                 ( RHO_TQ(I,K-1)*W_M_TOP(I)*VKMAN*ZH(I) ) ) )        EXCFNL6A.313    
!                                                                          EXCFNL6A.314    
!       ! for quadratic form of KH and KM:                                 ARN0F405.595    
!           KH_TOP_FACTOR(I) = MAX( 0.9 , 1.0 - RHOKH(I,K) /               EXCFNL6A.316    
!    &                   ( RHO_UV(I,K)*W_H_TOP(I)*VKMAN*ZH(I) ) )          EXCFNL6A.317    
!           KM_TOP_FACTOR(I) = MAX( 0.9 , 1.0 - RHOKM(I,K) /               EXCFNL6A.318    
!    &                   ( RHO_TQ(I,K-1)*W_M_TOP(I)*VKMAN*ZH(I) ) )        EXCFNL6A.319    
!                                                                          EXCFNL6A.320    
        Z_PR = MIN( 0.9*ZH(I) , SCDEPTH(I) )                               ARN0F405.596    
        FACTOR = 0.85 * RHO_UV(I,K) * V_TOP(I) * VKMAN * Z_PR              ARN0F405.597    
        IF ( FACTOR .GT. 0.0) THEN                                         ARN0F405.598    
          KH_SCT_FACTOR(I) = 1.0 -                                         ARN0F405.599    
     &         ( (RHOKH_TOP(I,K)*RHOKH_TOP(I,K)) / (FACTOR*FACTOR) )       ARN0F405.600    
        ELSE                                                               ARN0F405.601    
          KH_SCT_FACTOR(I) = 1.0                                           ARN0F405.602    
          ENDIF                                                            EXCFNL6A.321    
        Z_PR = MIN( 0.9*Z_TQ(I,K-1) , SCDEPTH(I) )                         ARN0F405.603    
        FACTOR = 0.85 * RHO_TQ(I,K-1) * V_TOP(I) * VKMAN * Z_PR * 0.75     ARN0F405.604    
        IF ( FACTOR .GT. 0.0) THEN                                         ARN0F405.605    
          KM_SCT_FACTOR(I) = 1.0 -                                         ARN0F405.606    
     &         ( (RHOKM_TOP(I,K)*RHOKM_TOP(I,K)) / (FACTOR*FACTOR) )       ARN0F405.607    
        ELSE                                                               ARN0F405.608    
          KM_SCT_FACTOR(I) = 1.0                                           ARN0F405.609    
        ENDIF                                                              ARN0F405.610    
!                                                                          ARN0F405.611    
!       !---------------------------------------------------------------   ARN0F405.612    
!       !  Set up factors to ensure K profile continuity at ZHSC;          ARN0F405.613    
!       !  no need to limit size of factor as precise shape of top-down    ARN0F405.614    
!       !  mixing profile not important.                                   ARN0F405.615    
!       !---------------------------------------------------------------   ARN0F405.616    
!                                                                          ARN0F405.617    
       IF (NTDSC(I) .GT. 0) THEN                                           ARN0F405.618    
!       !-------------------------------------------------------------     ARN0F405.619    
!       ! Only calculate _DSCT_FACTORs when a decoupled stratocumulus      ARN0F405.620    
!       ! layer exists, i.e. NTDSC > 0.                                    ARN0F405.621    
!       !-------------------------------------------------------------     ARN0F405.622    
        K=NTDSC(I)+1                                                       ARN0F405.623    
        Z_PR = MAX(0.0 , MIN( ZHSC(I) - 0.1*ZH(I) , DSCDEPTH(I) ) )        ARN0F405.624    
        FACTOR = 0.85*RHO_UV(I,K)*V_TOP_DSC(I)*VKMAN*Z_PR                  ARN0F405.625    
        IF ( FACTOR .GT. 0.0) THEN                                         ARN0F405.626    
          KH_DSCT_FACTOR(I) = 1.0 -                                        ARN0F405.627    
     &          ( (RHOKH_TOP(I,K)*RHOKH_TOP(I,K)) / (FACTOR*FACTOR) )      ARN0F405.628    
        ELSE                                                               ARN0F405.629    
          KH_DSCT_FACTOR(I) = 1.0                                          ARN0F405.630    
        ENDIF                                                              ARN0F405.631    
                                                                           ARN0F405.632    
        Z_PR = MAX(0.0, MIN( Z_TQ(I,K-1) - 0.1*Z_TQ(I,NTML(I)) ,           ARN0F405.633    
     &                                                DSCDEPTH(I) ) )      ARN0F405.634    
        FACTOR = 0.85*RHO_TQ(I,K-1)*V_TOP_DSC(I)*VKMAN*Z_PR*0.75           ARN0F405.635    
        IF ( FACTOR .GT. 0.0) THEN                                         ARN0F405.636    
          KM_DSCT_FACTOR(I) = 1.0 -                                        ARN0F405.637    
     &         ( (RHOKM_TOP(I,K)*RHOKM_TOP(I,K)) / (FACTOR*FACTOR) )       ARN0F405.638    
        ELSE                                                               ARN0F405.639    
          KM_DSCT_FACTOR(I) = 1.0                                          ARN0F405.640    
        ENDIF                                                              ARN0F405.641    
       ENDIF                                                               ARN0F405.642    
        ENDDO                                                              EXCFNL6A.322    
!                                                                          EXCFNL6A.324    
!-----------------------------------------------------------------------   EXCFNL6A.325    
!! 2.  Loop around levels again calculating height dependent turbulent     EXCFNL6A.326    
!!     transport coefficients within the mixing layer.                     EXCFNL6A.327    
!-----------------------------------------------------------------------   EXCFNL6A.328    
!                                                                          EXCFNL6A.329    
      DO K=2,BL_LEVELS                                                     EXCFNL6A.330    
        DO I = P1,P1-1+P_POINTS                                            EXCFNL6A.331    
!                                                                          EXCFNL6A.333    
!           Calculate the height of u,v-level above the surface            EXCFNL6A.334    
!                                                                          EXCFNL6A.335    
            ZK_UV = Z_UV(I,K) + Z0M(I)                                     EXCFNL6A.336    
!                                                                          EXCFNL6A.337    
!           Calculate the height of T,q-level above the surface            EXCFNL6A.338    
!                                                                          EXCFNL6A.339    
            ZK_TQ = Z_TQ(I,K-1) + Z0M(I)                                   EXCFNL6A.340    
!                                                                          EXCFNL6A.341    
!         !-------------------------------------------------------------   ARN0F405.643    
!         ! Calculate RHOK(H/M)_TOP, top-down turbulent mixing profiles    ARN0F405.644    
!         ! for the surface mixed layer.                                   ARN0F405.645    
!         ! This is a variation on an up-side-down version of the cubic    ARN0F405.646    
!         ! surface-forced profiles below.  Implement between at least     ARN0F405.647    
!         ! the top of the `surface layer' (at Z=0.1*ZH) and ZH.           ARN0F405.648    
!         !-------------------------------------------------------------   ARN0F405.649    
!                                                                          ARN0F405.650    
          ZCML_BASE = MAX( 0.1*ZH(I) , ZH(I)-SCDEPTH(I) )                  ARN0F405.651    
          IF ( ZK_UV .LT. ZH(I) .AND.                                      ARN0F405.652    
     &         ZK_UV .GT. ZCML_BASE ) THEN                                 ARN0F405.653    
            Z_PR = ZK_UV - ZCML_BASE                                       ARN0F405.654    
            ZH_PR = ZH(I) - ZCML_BASE                                      ARN0F405.655    
            RHOKH_TOP(I,K) = RHO_UV(I,K) * V_TOP(I) * 0.85 * VKMAN *       ARN0F405.656    
     &             SQRT( 1.0 - KH_SCT_FACTOR(I)*Z_PR/ZH_PR )               ARN0F405.657    
     &                                         * Z_PR * Z_PR / ZH_PR       ARN0F405.658    
          ENDIF                                                            ARN0F405.659    
         IF (NTDSC(I) .GT. 0) THEN                                         ARN0F405.660    
!         !-------------------------------------------------------------   ARN0F405.661    
!         ! Only add contribution to top-down mixing coefficient           ARN0F405.662    
!         ! profiles for decoupled stratocumulus layers when               ARN0F405.663    
!         ! one exists, i.e. NTDSC > 0.                                    ARN0F405.664    
!         !-------------------------------------------------------------   ARN0F405.665    
          ZCML_BASE = MAX( 0.1*ZH(I) , ZHSC(I)-DSCDEPTH(I) )               ARN0F405.666    
          IF ( ZK_UV .LT. ZHSC(I) .AND.                                    ARN0F405.667    
     &            ZK_UV .GT. ZCML_BASE ) THEN                              ARN0F405.668    
!           !-----------------------------------------------------------   ARN0F405.669    
!           ! Calculate RHOK(H/M)_TOP, top-down turbulent mixing           ARN0F405.670    
!           ! profiles and add to any generated in the surface mixing      ARN0F405.671    
!           ! layer.                                                       ARN0F405.672    
!           ! This is a variation on an up-side-down version of the        ARN0F405.673    
!           ! cubic surface-forced profiles above.  Implement between      ARN0F405.674    
!           ! at least the top of the `surface layer' (at Z=0.1*ZH) and    ARN0F405.675    
!           ! ZHSC.                                                        ARN0F405.676    
!           !-----------------------------------------------------------   ARN0F405.677    
            Z_PR = ZK_UV - ZCML_BASE                                       ARN0F405.678    
            ZH_PR = ZHSC(I) - ZCML_BASE                                    ARN0F405.679    
            RHOKH_TOP(I,K) = RHOKH_TOP(I,K) +                              ARN0F405.680    
     &              RHO_UV(I,K)*V_TOP_DSC(I)*0.85*VKMAN*                   ARN0F405.681    
     &              SQRT( 1.0 - KH_DSCT_FACTOR(I)*Z_PR/ZH_PR )             ARN0F405.682    
     &                                         * Z_PR * Z_PR / ZH_PR       ARN0F405.683    
          ENDIF                                                            ARN0F405.684    
         ENDIF                                                             ARN0F405.685    
!                                                                          ARN0F405.686    
          ZCML_BASE = MAX( 0.1*Z_TQ(I,NTML(I)) ,                           ARN0F405.687    
     &                                  Z_TQ(I,NTML(I))-SCDEPTH(I) )       ARN0F405.688    
          IF ( ZK_TQ .LT. Z_TQ(I,NTML(I)) .AND.                            ARN0F405.689    
     &         ZK_TQ .GT. ZCML_BASE ) THEN                                 ARN0F405.690    
            Z_PR = ZK_TQ - ZCML_BASE                                       ARN0F405.691    
            ZH_PR = Z_TQ(I,NTML(I)) - ZCML_BASE                            ARN0F405.692    
            RHOKM_TOP(I,K) = 0.75 * RHO_TQ(I,K-1) * V_TOP(I) * 0.85 *      ARN0F405.693    
     &               VKMAN * SQRT( 1.0 - KM_SCT_FACTOR(I)*Z_PR/ZH_PR )     ARN0F405.694    
     &                                         * Z_PR * Z_PR / ZH_PR       ARN0F405.695    
          ENDIF                                                            ARN0F405.696    
         IF (NTDSC(I) .GT. 0) THEN                                         ARN0F405.697    
!         !-------------------------------------------------------------   ARN0F405.698    
!         ! Only add contribution to top-down mixing coefficient           ARN0F405.699    
!         ! profiles for decoupled stratocumulus layers when               ARN0F405.700    
!         ! one exists, i.e. NTDSC > 0.                                    ARN0F405.701    
!         !-------------------------------------------------------------   ARN0F405.702    
          ZCML_BASE = MAX( 0.1*Z_TQ(I,NTML(I)) ,                           ARN0F405.703    
     &                                  Z_TQ(I,NTDSC(I))-DSCDEPTH(I) )     ARN0F405.704    
          IF ( ZK_TQ .LT. Z_TQ(I,NTDSC(I)) .AND.                           ARN0F405.705    
     &            ZK_TQ .GT. ZCML_BASE ) THEN                              ARN0F405.706    
              Z_PR = ZK_TQ - ZCML_BASE                                     ARN0F405.707    
              ZH_PR = Z_TQ(I,NTDSC(I)) - ZCML_BASE                         ARN0F405.708    
              RHOKM_TOP(I,K) = RHOKM_TOP(I,K) +                            ARN0F405.709    
     &           0.75*RHO_TQ(I,K-1)*V_TOP_DSC(I)*0.85*VKMAN*               ARN0F405.710    
     &           SQRT( 1.0 - KM_DSCT_FACTOR(I)*Z_PR/ZH_PR )                ARN0F405.711    
     &                                      * Z_PR * Z_PR / ZH_PR          ARN0F405.712    
          ENDIF                                                            ARN0F405.713    
         ENDIF                                                             ARN0F405.714    
!                                                                          ARN0F405.715    
          IF (FB_SURF(I) .GE. 0.0) THEN                                    ARN0F405.716    
!           Calculate the free-convective scaling velocity at z(k)         EXCFNL6A.342    
!                                                                          EXCFNL6A.343    
            IF (ZK_UV .LE. 0.1*ZH(I)) THEN                                 EXCFNL6A.344    
!                                                                          EXCFNL6A.345    
!             Surface layer calculation                                    EXCFNL6A.346    
!                                                                          EXCFNL6A.347    
              W_S_CUBED_UV = 2.5 * ZK_UV * FB_SURF(I)                      EXCFNL6A.348    
            ELSE                                                           EXCFNL6A.349    
!                                                                          EXCFNL6A.350    
!             Outer layer calculation                                      EXCFNL6A.351    
!                                                                          EXCFNL6A.352    
              IF (COUPLED(I)) THEN  !  coupled and cloudy                  ARN0F405.717    
                W_S_CUBED_UV = 0.25 * ZHSC(I) * FB_SURF(I)                 ARN0F405.718    
              ELSE                                                         ARN0F405.719    
              W_S_CUBED_UV = 0.25 * ZH(I) * FB_SURF(I)                     EXCFNL6A.353    
            ENDIF                                                          EXCFNL6A.354    
            ENDIF                                                          ARN0F405.720    
            IF (ZK_TQ .LE. 0.1*Z_TQ(I,NTML(I))) THEN                       ARN0F405.721    
!                                                                          EXCFNL6A.356    
!             Surface layer calculation                                    EXCFNL6A.357    
!                                                                          EXCFNL6A.358    
              W_S_CUBED_TQ = 2.5 * ZK_TQ * FB_SURF(I)                      EXCFNL6A.359    
            ELSE                                                           EXCFNL6A.360    
!                                                                          EXCFNL6A.361    
!             Outer layer calculation                                      EXCFNL6A.362    
!                                                                          EXCFNL6A.363    
              IF (COUPLED(I)) THEN  !  coupled and cloudy                  ARN0F405.722    
                W_S_CUBED_TQ = 0.25 * ZHSC(I) * FB_SURF(I)                 ARN0F405.723    
              ELSE                                                         ARN0F405.724    
              W_S_CUBED_TQ = 0.25 * ZH(I) * FB_SURF(I)                     EXCFNL6A.364    
              ENDIF                                                        ARN0F405.725    
                                                                           ARN0F405.726    
            ENDIF                                                          EXCFNL6A.365    
!                                                                          EXCFNL6A.366    
!           Turbulent velocity scale for momentum                          EXCFNL6A.367    
!                                                                          EXCFNL6A.368    
            W_M_UV = (V_S(I)*V_S(I)*V_S(I) + W_S_CUBED_UV)**(1.0/3.0)      EXCFNL6A.369    
!                                                                          EXCFNL6A.370    
            W_M_TQ = (V_S(I)*V_S(I)*V_S(I) + W_S_CUBED_TQ)**(1.0/3.0)      EXCFNL6A.371    
!                                                                          EXCFNL6A.372    
!           Turbulent Prandtl number and velocity scale for scalars        EXCFNL6A.373    
!                                                                          EXCFNL6A.374    
            PRANDTL = 0.75 * ( V_S(I)*V_S(I)*V_S(I)*V_S(I) +               EXCFNL6A.375    
     &                   (4.0/25.0)*W_S_CUBED_UV*W_M_UV ) /                EXCFNL6A.376    
     &                       ( V_S(I)*V_S(I)*V_S(I)*V_S(I) +               EXCFNL6A.377    
     &                   (8.0/25.0)*W_S_CUBED_UV*W_M_UV )                  EXCFNL6A.378    
            W_H_UV = W_M_UV / PRANDTL                                      EXCFNL6A.379    
!                                                                          EXCFNL6A.380    
            IF ( K .LE. NTML(I) ) THEN                                     EXCFNL6A.381    
!             !---------------------------------------------------------   EXCFNL6A.382    
!             ! Calculate RHOKH(w_h,z/z_h)                                 EXCFNL6A.383    
!             !---------------------------------------------------------   EXCFNL6A.384    
!             N.B. ZH(I) = Z_UV(I,NTML(I)+1)                               EXCFNL6A.385    
!                                                                          EXCFNL6A.386    
!               with cubic form                                            EXCFNL6A.387    
!                                                                          EXCFNL6A.388    
              RHOKH(I,K) = RHO_UV(I,K) * W_H_UV * VKMAN * ZK_UV *          EXCFNL6A.389    
     &                ( 1.0 - KH_TOP_FACTOR(I) * ( ZK_UV / ZH(I) ) ) *     EXCFNL6A.390    
     &                ( 1.0 - KH_TOP_FACTOR(I) * ( ZK_UV / ZH(I) ) )       EXCFNL6A.391    
!                                                                          EXCFNL6A.392    
!               with quadratic form                                        EXCFNL6A.393    
!                                                                          EXCFNL6A.394    
!             RHOKH(I,K) = RHO_UV(I,K) * W_H_UV * VKMAN * ZK_UV *          EXCFNL6A.395    
!    &                ( 1.0 - KH_TOP_FACTOR(I) * ( ZK_UV / ZH(I) ) )       EXCFNL6A.396    
!             !---------------------------------------------------------   EXCFNL6A.397    
!             ! Calculate RHOKM(w_m,z/z_h)                                 EXCFNL6A.398    
!             !---------------------------------------------------------   EXCFNL6A.399    
              ZH_M = Z_TQ(I,NTML(I))                                       EXCFNL6A.400    
!                                                                          EXCFNL6A.401    
!               with cubic form                                            EXCFNL6A.402    
!                                                                          EXCFNL6A.403    
              RHOKM(I,K) = RHO_TQ(I,K-1) * W_M_TQ * VKMAN * ZK_TQ *        EXCFNL6A.404    
     &                ( 1.0 - KM_TOP_FACTOR(I) * ( ZK_TQ / ZH_M ) ) *      EXCFNL6A.405    
     &                ( 1.0 - KM_TOP_FACTOR(I) * ( ZK_TQ / ZH_M ) )        EXCFNL6A.406    
!                                                                          EXCFNL6A.407    
!               with quadratic form                                        EXCFNL6A.408    
!                                                                          EXCFNL6A.409    
!             RHOKM(I,K) = RHO_TQ(I,K-1) * W_M_TQ * VKMAN * ZK_TQ *        EXCFNL6A.410    
!    &                ( 1.0 - KM_TOP_FACTOR(I) * ( ZK_TQ / ZH_M ) )        EXCFNL6A.411    
                                                                           EXCFNL6A.412    
            ENDIF                                                          EXCFNL6A.413    
          ENDIF                                                            EXCFNL6A.414    
        ENDDO                                                              EXCFNL6A.415    
      ENDDO                                                                EXCFNL6A.416    
      IF (LTIMER) THEN                                                     EXCFNL6A.417    
        CALL TIMER('EXCF_NL  ',4)                                          EXCFNL6A.418    
      ENDIF                                                                EXCFNL6A.419    
      RETURN                                                               EXCFNL6A.420    
      END                                                                  EXCFNL6A.421    
*ENDIF                                                                     EXCFNL6A.422